Казалось бы, нет задачи проще, чем загрузка компьютера: нажал на кнопку питания, и спустя непродолжительное время на экране появится интерфейс операционной системы. На самом же деле именно между этими двумя событиями в недрах машины и происходит все самое интересное. Особенно если используется UEFI и диск с разметкой GPT. Давай заглянем под капот твоего ноута или компа и посмотрим, как загружаются устройства, использующие самые современные технологии.
 

Что не так с BIOS?

Сам термин BIOS археологи впервые обнаружили в коде CP/M от 1975 года. Исходные тексты CP/M, в файле BDOS.PLM (CP/M 1.1) которых под авторством Гэри Килдалла и появилось упоминание BASIC I/O SYSTEM, Computer History Museum выложил в свободный доступ в 2014-м в честь 40-летия системы. Если тебе интересно ознакомиться с этим историческим артефактом, они доступны на сайте музея.

Базовая система ввода-вывода в некотором смысле выполняет функцию интерфейса между оборудованием и ОС, без нее операционка не загрузится, а железо останется холодным и безжизненным. К тому же в ней есть функции, которые можно вызывать из ОС для доступа к базовым возможностям оборудования, подобно тому, как приложения используют системные вызовы для доступа к функциям ОС. Однако операционные системы все же предпочитают использовать собственные драйверы для работы с оборудованием.

В x86-системах BIOS выполняет тестирование (POST) и инициализацию оборудования. Затем управление передается первичному загрузчику (master boot code), который ищет активный раздел и его загрузочный сектор, чтобы передать управление ему для загрузки операционной системы. В BIOS используется формат разметки MBR, который тем не менее строго определенного стандарта не имеет.

INFO

Например, Крис Касперски в своей книге «Восстановление данных. Практическое руководство» писал, что в последние четыре байта, отведенные под код первичного загрузчика, Windows записывала идентификатор диска, и это неизбежно убивало использующий их загрузчик. Таким образом, для корректной работы с Windows первичный загрузчик должен был занимать не более 442 байт вместо честно выделенных ему 446.

BIOS за 45 лет существования показала себя невероятным долгожителем мира IT, пережив дискеты, CP/M и PL/M, MS-DOS и Windows 9x. Но сколько ни обновляй ее под современные реалии, в выделенные для начального загрузчика 446 байт сейчас много ненужного не поместишь. Были у BIOS и другие недостатки, из-за которых назревала необходимость заменить 16-битную архитектуру, по крайней мере для «большого железа» вчетверо большей разрядности. Так посчитали ребята из Intel, и в 1998 году был основан проект Intel Boot Initiative. Исходная версия спецификации, разработанная в первую очередь для машин на Itanium (IA-64), была опубликована под названием EFI (Extensible Firmware Interface) в 1999 году. А в 2005-м на базе этого проекта появился Unified EFI Forum, занимающийся разработкой и поддержкой родившейся таким образом технологии по сей день.

 

Пришла беда откуда не ждали

Иногда можно встретить обозначение UEFI BIOS. Из названия понятно, что UEFI позиционируется как расширяемый интерфейс между аппаратной платформой и операционной системой, предоставляющий таблицы и вызовы, которые доступны загрузчику ОС. Тем самым создается окружение для загрузки.

Помимо основной программы из прошивки, UEFI может использовать модули для расширения своей функциональности, например для поддержки нового оборудования или файловых систем. Подразумевается, что достаточно написать драйвер UEFI и он будет работать одинаково на всех совместимых операционных системах. Вообще, система прерываний BIOS была придумана чуть ли не для того же: при появлении нового устройства достаточно добавить его поддержку в BIOS, а ОС могла бы обращаться к устройству посредством базовой системы ввода-вывода — не зря же ее так назвали.

Кроме того, интерфейс этот зовется унифицированным. Спецификация указывает одной из целей разработки UEFI сделать так, чтобы разные операционки могли грузиться на разном железе без внесения изменений в ОС или аппаратную платформу. Иными словами, UEFI играет роль дополнительного слоя абстракции, в стандарте определен даже EFI Byte Code (EBC). Цели, безусловно, благие. Жаль, исполнение подкачало — реализовывать стандарт каждый волен по-своему, и, к примеру, китайские прошивки, как иногда пишут на форумах, способны иной раз удивлять своим поведением.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Check Also

Вирус для Windows. Создаем простейшую вредоносную программу на ассемблере

Конструирование вирусов — отличный стимул изучать ассемблер. И хотя вирус, в принципе, мож…

Оставить мнение