Skip to content

Загрузка ОС / Booting OS

Загрузка ОС

Первоначальная загрузка ОС происходит в сл. последовательности:

POST-> BIOS -> загрузчик(и)-> загрузчик ОС –> ОС

После нажатия кнопки питания запускается POST для первичной проверки устройств, затем загружается BIOS, которая последовательно проходит по списку загрузочных устройств в поисках первого загрузочного (у которого два последних байта первого сектора 0xAA55). Найдя загрузочное устройство, BIOS загружает загрузочный сектор в память (по адресу 0x7C00) и передает управление загрузочному коду, в случае, если устройство HDD, то этот код, вероятнее всего, Master Boot Record (MBR).

Ограничение на размер первоначального загрузчика не позволяют его сделать богатым по функционалу. Этот первоначальный раздел, называемый главной загрузочной записью (MBR), ограничен 512 байтами и находится в самом начале диска, а непосредственно сам загрузчик занимает 446 байт, т.к. помимо него в MBR также присутствует Partition table – таблица разделов (партиций) диска. MBR проверяет список разделов диска в поисках раздела, обозначенного как загрузочный, т.е. того, у которого установлен флаг активный.

Особенности разметки диска в MBR:

-диск может иметь максимум 63 партиции - из них только 4 могут быть primary (первичными) - Только одну из primary можно разделить на logical партиции, т.е. сделать из нее extended партицию - таким образом, получится 3 primary патриции + возможность создать до 59 logical патриций внутри одной extended - Максимальный размер одного HDD около 2 Тб

Восстановление MBR

на Windows XP:

  • fixmbr из Recovery Console

Windows Vista и выше:

bootrec /FixMbr из Recovery Eviroment

На Linux:

  • grub-install записывает GRUB в MBR

Найдя загрузочный раздел, MBR загружает загрузочный сектор из него (chain loading). Этот загрузочный сектор содержит либо ОС-независимый загрузчик, либо загрузчик самой ОС, для которого главная задача – загрузить ядро ОС, которое уже продолжит загрузку самой ОС.

Загрузчик может быть как один, так и несколько, которые последовательно загружают один другого по цепочке (chain loading) полностью передавая управление новому. Применительно к загрузчику GRUB, необходимость загрузки по цепочке возникает для ОС, не поддерживающихся GRUB.

Загрузчики могут быть разными:

  • GNU GRUB (Linux)
  • BOOTMGR (Vista и новее)
  • NTLDR (XP и ранее)

В них присутствуют настройки, позволяющие загружать разные ОС, либо различные режимы одной ОС. Либо передавать цепочку управления загрузкой следующему загрузчику (GRUB -> BOOTMGR).

Загрузка различных ОС.

Загрузка Windows

Загрузчик системы:

  • NTLDR – XP и ранее
  • BOOTMGR – начиная с Vista

Далее загрузчик ищет ОС:

  • NTLDR считывает файл boot.ini
  • BOOTMGR - Boot Configuration Data (BCD) БД, которая сохраняется либо в EFI System Partition (UEFI) либо в \Boot\Bcd (BIOS), разделе с системой. Помимо загрузки с локального диска BOOTMGR поддерживает также загрузку из VHD файла сохраненного на NTFS разделе

Загружается ядро системы (ntoskrnl.exe). Загрузка необходимых для загрузки ОС драйверов (файловой системы и пр.), во время этого процесса можно нажать F8 для выбора различных режимов загрузки (безопасного и пр.). После загрузки ядра и необходимых драйверов ему передается управление.

Система подготавливается и запускается Windows Logon Manager (winlogon.exe) процесс позволяющий ввести учетные данные пользователя.

Загрузка Linux

Один из загрузчиков Linux – GRUB (представляет также возможность загрузки разных ОС) загружает ядро и передает ему дальнейшее управление по загрузке ОС. GRUB располагается на разделе с системой и загружается вызовом из MBR. Он обладает необходимыми драйверами для файловых систем ext.

Ядро подгружает необходимые драйвера, пользуясь initial RAM disk (initrd) – временной файловой системой. Как только становится доступна основная файловая система, ядро переключается на нее и настраивает систему перед загрузкой первого процесса – init.

Init подготавливает дальше систему и предоставляет пользователю возможность входа. Init работает до самого выключения системы, при котором он выключает все компоненты пользовательского окружения, завершается сам, после чего выключается ядро.

Однако, если ядро собрано со всеми необходимыми для доступа к корневой файловой системе драйверами, то initrd в этом случае не нужен.