Комментарии 76
в остальном изменений практически нет.
У EFI с обычным загрузчиком мало общего. Помимо того, о чём Вы сказали:
- Устанавливает 64битный режим для 64битных EFI-приложений. Это многое значит: EFI-приложению не принадлежит вся память, загрузчик должен запрашивать её аллокацию у фирмвари так же, как у операционки обычное приложение запрашивает память. Но после вызова ExitBootServices вся память переходит во владение приложени.
- Предоставляет унифицированные таблицы с данными о системе и сервисами (в т.ч. драйверами устройств, ватчдогами и т. д.).
- Поддерживает выход из загрузчика и передачу управления обратно фирмвари (Legacy BIOS — нет).
- Проверка подписи кода (Secure Boot — must have для безопасной серверной платформы).
Схема Legacy BIOS — нагромождение рудиментов, которому уже не место в современных системах по множеству причин. Если написать статью про устройство UEFI — это был бы редкий и качественный материал. А уж если ещё и снабдить статью примером простенького Hello World приложения UEFI, то, наверное, это будет вообще уникально.
Не очень понятно, почему на ПК область памяти ограничивается адресацией, а переключение банков памяти на 32-битных системах не нашло поддержки массовой (опционально и не везде работает). Хотя решения есть. Некие утилиты обычно.
ps: еще были чудо чипсеты которые делали "Appropriated — 896 Mb" и даже на 64бит ос у вас этот кусок выпадал.
1) Это костыль
2) Не весь старый софт с этим живёт (а на x86 legacy — наше всё)
3) Не все драйвера это переваривают
4) Это несколько медленнее, чем нормальная память
Не очень понятно, почему на ПК область памяти ограничивается адресацией, а переключение банков памяти на 32-битных системах не нашло поддержки массовой
А какой в этом практический смысл? Всегда проще добавить линию адреса, нежели переключатель банков памяти. Тем более что последний потребует значительного усложнения менеджера виртуальной памяти
Статься интересна лишь парой интересных брошенных вскользь замечаний, о более или менее современных вещах, но сказано о них слишком мало (и не факт, что достоверно).
Статья, возможно, имела бы гораздо больше смысла, если бы современная система сравнивалась с конкретной и умеренно древней. Попытка делать обобщающие отсылки в историю (тем более, видимо, не обладая нужными техническими данными) выглядит бедно.
в начале адресного пространства находился вектор прерываний
Не вектор прерываний (один), а таблица векторов прерываний (256 векторов по 4 байта каждый, всего 1024 байта).
за которым следовала оперативная память
Некорректное выражение. Таблица векторов прерываний тоже находится в оперативной памяти.
UPD:
В этом режиме доступны только 16-ти битные команды
С помощью префиксов можно использовать 32-битные регистры, насчет команд точно не помню но наверное тоже, про 64 не знаю но вряд ли можно.
например, ждёт, когда питание «стабилизируется»
Если подключиться к iLO, в виртуальной консоли будут в нижней строке окна выводиться коды POST.
У меня под рукой сейчас нет, но при желании можно нагуглить описание этих кодов и убедиться, что сервер в это время весьма и весьма занят сам собою.
1) POST карту, которая у вас для иллюстрации можно уже смело отправлять на стенку — порт 0x80, куда выводятся POST коды живёт ровно до первого моста PCI-PCI, что делает PCIe пост-карту просто неработоспособной (те, которые есть либо с PCIe берут только питание, либо сингалы не PCIe шины, а прочие, выведенные на этот разъём), сейчас эти коды снимать можно практически только с LPC шины. И да, на современных материнских платах PCI обычно сделан мостом c PCIe шины, что тоже убивает 0x80 порт.
2) Картинка (та, которая с красивой «звёздочной» супермикровской картинкой) у вас рисуется BMC, и он вполне её может отобразить даже без CPU.
3) Про 16бит — проще забыть. UEFI уходит из него почти сразуже после настройки CAR (Cache As Ram) и возвращается в него только при запуске Legacy Option Rom (если не нашел UEFIшных или в настройках стоит Legacy First) и во время работы CSMа. В вашем случае настройка всего железа идёт в 32/64 режиме, далее идёт запуск модуля CSM, который уже живёт в 16 битах.
4) Описанный вами порядок загрузки характерен только если GRUB установлен в MBR, а не на раздел.
Первым этапом запуска сервера является включение блока питания и установка сигнала Reset для процессора.
Ну если на то пошло, то пропустили появление сигнала «Power Good»
Насчет BMC — никак он не участвует в загрузке. Это просто отдельный девайс, подключенный к PCI шине. Точнее делать то он может что угодно, но на загрузку его наличие или отсутствие точно никак не влияет.
LI....
Long Mode упразднил сегментированную организацию памяти, присущую 32-х битной архитектуре
Вроде в 32 уже страничная память, нет? а в realmode (16bit) — сегментная.
остается только присоединиться…
И кстати дисковых контроллеров может быть несколько. даже на без дисковом сервере.
Я рассчитывал прочитать, почему сервер грузится дольше ПК.
habr.com/ru/company/selectel/blog/471756/#comment_20772508
Как работаем ipmi
Отдельный процессор, цепляющийся к pci шине. Блок схему можно посмотреть в инструкции к любой матери supermicro, например:

как настройки рэйд контроллера вылазят в меню загрузки до загрузки операционной системы.
Option ROM. Почитать можно на википедии или в BIOS Boot Specification.
Почему производители не конкурируют по этому параметру?
Две минуты — это ооочень быстро, поверьте.
Спарка IBM из двух 3850x5 (7143) в полной конфигурации может инициализироваться несколько десятков минут.
— Что означает магическая фраза «инициализация оборудования»?
— Куда именно сохраняются и как именно применяются «настройки биоса» (путаница UI с собственно механизмом работы)?
— Если код в старом биосе (который в пзу) работает в 16-битном режиме, то как же 32- или 64-битная ОС его выполняет? (Никак?) Как же она все это «инициализированное в биос оборудование» ©® использует?
— Что там с маппингом памяти и DMA?
— Как именно процессор умудряется проснуться от сети (и от чего именно в сети?) — или как биос умудряется доступиться до tftp при загрузке по сети?
В общем, детали интересны, детали!
Что означает магическая фраза «инициализация оборудования»?После ресета или выключения питания все железо оказывается в начальном состоянии, в котором оно зачастую работать не может, и нуждается в дополнительной настройке прежде, чем его можно будет начать использовать. Вот эта настройка и называется инициализацией, т.е. приведением железа в его начальное рабочее состояние. Инициализация простого железа типа COM-порта укладывается в несколько строк на С, а вот железо посложнее, память оперативная, к примеру, или видеокарта — это уже совсем другой разговор и там иногда нужны десятки тысяч строк кода, чтобы железка заработала как задумано. Углубляться в эту тему можно бесконечно, и там целая отрасль знаний (platform bring-up) за этой простой фразой прячется.
Куда именно сохраняются и как именно применяются «настройки биоса» (путаница UI с собственно механизмом работы)?Раньше сохранялись в CMOS SRAM, специальной энергозависимой памяти с батарейным питанием, но потом настроек стало достаточно, чтобы чипы SRAM такого объема стали слишком дорогими, и их заменили на SPI NOR (у которых 100к циклов перезаписи и с которых можно загружаться напрямую). Я уже писал про то, зачем нужна, и как устроена NVRAM вот тут.
Если код в старом биосе (который в пзу) работает в 16-битном режиме, то как же 32- или 64-битная ОС его выполняет? (Никак?) Как же она все это «инициализированное в биос оборудование» ©® использует?БИОС именно из ПЗУ исполняется очень короткое время в самом начале, когда еще нет инициализированы ни оперативная память, ни L2 cache. Как только память доступна, прошивка копируется в нее и исполняется уже оттуда.
Как ОС выполняет 16-битный код: через трамплины, т.е. ОС вызывает прерывание (потому что 16-битный сейчас только старый интерфейс BIOS Interrupt Call), обработчик переводит процессор в 16 битный режим, выполняет 16-битный код БИОСа, затем возвращает режим в оригинальный, и передает управление вызывающему коду. Вся эта прыготня довольно медленная, и нужна исключительно системам, которые либо не умеют сами использовать оборудование (и потому полагаются на код БИОСа), либо не догадываются, что оборудования на самом деле нет (т.е. оно эмулируется БИОСом целиком).
Как ОС использует оборудование: качественные ОС ничему вообще не верят, и оборудование стараются переинициализировать самостоятельно, не надеясь на милость авторов БИОСа.
Что там с маппингом памяти и DMA?А что с ними? В БИОСе была карта памяти e820, которую ОС нужно было использовать, чтобы не возникало конфликтов между памятью ОС и памятью БИОСа и устройств. В UEFI есть своя карта памяти, и нормальный аллокатор, успешно скрывающий большую часть управления памятью от разработчика UEFI-драйверов и загрузчиков. Про DMA там отдельная большая тема с IOMMU и Bus Mastering'ом, про которую нужно книгу писать, а не коммент.
Как именно процессор умудряется проснуться от сети (и от чего именно в сети)Процессор просыпается не от сети, а от сигнала сетевого чипа (точнее, двух чипов, NIC и PHY, первый из которых спал ровно настолько, чтобы по прежнему следить за пакетами, а второй не спал вообще, а работал от дежурного напряжения). Wake-on-LAN — это специальный пакет с MAC-адресом, и если его прием настроен, то по его приходу NIC пошлет процессору сигнал по отдельной физической ноге.
Как биос умудряется доступиться до tftp при загрузке по сети?Так же, как и любая другая ОС, у него либо в самой прошивке стек сетевых драйверов, либо весь стек вкомпилен внутрь PXE-загрузчика.
Если детали реально интересны, могу посоветовать литературу по firmware development и platform bring-up, а также чемодан даташитов на конкретное железо.
О, очень интересно! Вот такой материал, с таким уровнем подробностей, в научно-популярном виде бы — и на Хабр, на Хабр. Да хоть в таком вот формате Q&A — «все, что вы хотели знать про железо, но боялись спросить».
Да, если уж заниматься археологией, про dos4gw тоже интересно было бы. Почему он такой большой был, что там в нем (и почему он exe).
нас так в детстве учили!
Код Stage 2 хранится сразу после структуры MBR и до начала первого раздела диска.Кто Вам это сказал??? Вы явно рассказываете о каком-то кастомном загрузчике, а не о том generic-коде, который с минимальными изменениями дожил до наших дней ещё со времён голого DOS.
Код, загружаемый из МБР и выполняемый на Stage1, выполняет просмотр хранящейся в его теле таблицы разделов, находит первый из разделов, помеченный признаком активности, загружает в память по тому же адресу 0x7C00 (предварительно перенеся себя в другое место) первый сектор раздела (бут-сектор), и передаёт ему управление. Всё. Ну ещё, если активный раздел не найден, или если в считанном бут-секторе нет сигнатуры 0x55AA, или таблица разделов содержит невалидные значения, то он выводит нечто типа «Missing OS» или «Error loading OS» или «Wrong partition table», и либо вешается, либо возвращает управление процедурам БИОС.
Но если всё нормально, то после загрузки бут-сектора активного раздела и передачи ему управления как раз и начинается Stage2. И именно код бут-сектора дочитывает дополнительные секторы с кодом, выполняющим парсинг файловой системы и всё прочее.
Ну ещё, если активный раздел не найден, или если в считанном бут-секторе нет сигнатуры 0x55AA
По идее, на экране тогда увидите «No bootable device — insert boot disk...».
По идее, на экране тогда увидите «No bootable device — insert boot disk...».
Это уже определяется кодом загрузчика (впрочем, дефолтно он возвращает управление процедурам БИОС) и кодом БИОС (одни выводят это сообщение, другие просто пытаются грузиться со следующего по списку устройства, впрочем, первое чаще).
Вроде BIOS setup utility всегда CMOS-ом назывался, нет?
CMOS — это технологический процесс, на котором, в частности, была изготовлена энергоэффективная, работающая от литиевой батарейки память, в которой записывались параметры компьютера, которые настраивает BIOS setup utility. Поэтому ещё иногда её называли CMOS memory setup utility — утилита настройки для памяти CMOS. Неграмотные запоминали первое слово, только и всего. Сейчас, кстати, по дальнейшему развитию этого технологического процесса все микросхемы в компьютере изготовлены.
Спасибо за информацию из 1980-х годов.
Как запускается сервер