1.08. Загрузчики
Загрузчики
Каждый раз при включении компьютера запускается цепочка программ, которая превращает «мертвое» железо в живую вычислительную систему. Эта цепочка начинается с прошивки материнской платы и завершается загрузкой операционной системы. Центральное звено в этом процессе — загрузчик. Он служит мостом между аппаратным обеспечением и программным окружением, обеспечивая корректный старт ОС.
Процесс загрузки зависит от типа прошивки: BIOS или UEFI. Эти технологии определяют, как инициализируется оборудование, где искать загрузочные файлы и как передавать управление операционной системе.
При включении компьютера с BIOS пользователь может увидеть текстовое окно вроде:
American Megatrends BIOS v2.15
Press DEL to enter SETUP
Press F12 to select boot device
Это — интерфейс прошивки. Он не поддерживает мышь, а все действия выполняются клавишами. Даже если на диске установлен Windows или Linux, BIOS ничего не знает об этих системах — он лишь ищет «загрузочный флаг» на диске.
Интерфейс зависит от материнской платы, и помимо классических BIOS/UEFI стилей, визуально они могут быть специфическими для производителей, например, ASUS, Gigabyte, MSI. У них могут быть свои оболочки, упрощённые режимы, свои вариации горячих клавиш. Но в большинстве компьютеров, после нажатия на кнопку DEL до того, как загрузится операционная система, можно попасть в меню BIOS/UEFI.
А вот уже в самом меню можно проверить оборудование, компоненты, настроить параметры, и выбрать диск, с которого загружать операционную систему.
Таким образом, на диске лежат файлы ОС, вам нужно лишь указать диск, с которого загружать её. А затем, файлы выгрузятся в оперативную память и компьютер запустит систему - именно поэтому при включении, часть ОЗУ уже занята - как раз для работы операционки.
Прошивка находит на SSD раздел с загрузчиком bootmgfw.efi, загружает его в память по адресу, например, 0x100000.
Затем загрузчик читает файл ядра ntoskrnl.exe и помещает его в другую область ОЗУ — скажем, начиная с 0x2000000.
Одновременно в память загружается образ диспетчера конфигурации (bootvid.dll, hal.dll и другие компоненты).
К моменту, когда появляется экран входа, в оперативной памяти уже размещены сотни мегабайт системных данных, даже если вы ещё ничего не запускали.
Этот процесс полностью автоматизирован. Пользователь не выбирает, куда грузить ядро или какой драйвер использовать — всё это определяет загрузчик на основе информации, хранящейся на диске. Именно поэтому важно, чтобы файловая система оставалась целой: повреждение даже одного критического файла (например, vmlinuz в Linux или BCD в Windows) может привести к остановке загрузки с сообщением вроде «Operating System not found» или «GRUB rescue».
Прошивка не анализирует содержимое файлов — она лишь передаёт управление первому исполняемому образу, соответствующему её архитектуре (.efi для UEFI, машинный код в MBR для BIOS). Всё остальное — задача загрузчика операционной системы.
BIOS
★ BIOS (Basic Input/Output System) - первое ПО, запускаемое при включении компьютера - отвечает за инициализацию оборудования и загрузку операционной системы.
При запуске, происходит POST (Power-On Self Test) - проверка работоспособности оборудования. Инициализация подразумевает настройку и активацию устройств. А загрузка операционной системы включает в себя поиск загрузочного устройства и передача управления загрузчику ОС. Пользователь имеет возможность настраивать всё это через интерфейс (например, порядок загрузки, частота процессора, напряжение). Пользователь может иметь несколько дисков с ОС, и если №1 выйдет из строя, загрузка будет с №2. BIOS хранится в микросхеме на материнской плате и занимает до 1 МБ. Однако, у BIOS ограниченная производительность (так как работает в 16-битном режиме реальной адресации процессора), поддержка загрузки только с MBR-дисков и нет поддержки современных функций.
Этапы работы BIOS
-
POST (Power-On Self Test)
BIOS проверяет базовые компоненты: процессор, оперативную память, видеокарту, клавиатуру. Если обнаружена критическая ошибка, система может выдать звуковой сигнал или прекратить загрузку. -
Инициализация оборудования
BIOS активирует контроллеры дисков, порты USB, сетевые адаптеры и другие устройства, необходимые для дальнейшей загрузки. -
Поиск загрузочного устройства
Согласно заданному порядку (например: сначала SSD, затем USB), BIOS ищет устройство с загрузочной меткой. -
Чтение MBR
На найденном устройстве BIOS читает первый сектор — MBR (Master Boot Record), размером ровно 512 байт. В нём содержится:- Код загрузчика (первичного, обычно 446 байт),
- Таблица разделов (64 байта),
- Метка окончания (0x55AA).
-
Передача управления
BIOS загружает код из MBR в оперативную память и передаёт ему управление. Этот код, в свою очередь, может загрузить более сложный загрузчик (например, GRUB Stage 1 → Stage 2).
00000000: eb48 904d 5344 4f53 352e 3000 0208 0100 .H.MSDOS5.0.....
Здесь eb48 — это машинная команда для перехода к основному коду загрузчика, а строка MSDOS5.0 — сигнатура файловой системы. Последние два байта всегда 55 AA — это «магическое число», которое BIOS проверяет, чтобы убедиться: сектор действительно загрузочный.
Ограничения BIOS
- Работает в 16-битном режиме реальной адресации, что ограничивает доступ к памяти (максимум 1 МБ).
- Поддерживает только MBR-разметку, которая не позволяет использовать диски больше 2 ТБ.
- Не имеет встроенной защиты от неавторизованного ПО.
- Интерфейс — текстовый, без поддержки мыши.
UEFI
★ UEFI (Unified Extensible Firmware Interface) - современный стандарт прошивки, который пришел на смену BIOS. Функции те же, но загрузка ОС может быть как с MBR, так и с GPT дисков, имеется графический интерфейс с поддержкой мыши, более гибкое управление оборудованием, модульность (определенные модули можно обновлять независимо) и Secure Boot - защита от загрузки неавторизованного или вредоносного ПО. UEFI занимает несколько мегабайт (16 МБ) и более производительна (работает в 64-битном режиме).
BIOS отличается от UEFI на уровне интерфейса прошивки:
Преимущества UEFI
- 64-битная архитектура — обеспечивает быстрый доступ к большим объёмам памяти.
- Поддержка GPT (GUID Partition Table) — позволяет использовать диски объёмом свыше 2 ТБ и создавать до 128 разделов.
- Графический интерфейс с поддержкой мыши и нескольких языков.
- Модульная структура — отдельные компоненты (драйверы, сервисы) можно обновлять независимо.
- Secure Boot — механизм проверки цифровой подписи загрузчика и ядра ОС, предотвращающий запуск вредоносного кода.
- Объём прошивки — до 16 МБ, что даёт пространство для расширенных функций.
shim.efi, который затем запускает GRUB. Без такой цепочки — отказ.Процесс загрузки: сравнение
Загрузка через BIOS
- Выполнение POST.
- Поиск первого загрузочного устройства в списке.
- Чтение MBR (512 байт).
- Выполнение кода загрузчика из MBR.
- Загрузчик находит вторую стадию (например,
grub.cfg) и загружает ядро ОС. - Передача управления ядру.
Этот путь линейный, жёстко привязан к физической структуре диска и не допускает гибкой настройки.
Загрузка через UEFI
- Выполнение POST и инициализация устройств.
- Активация Secure Boot (если включён).
- Поиск ESP на всех подключённых дисках.
- Чтение файла загрузчика из ESP (например,
bootx64.efi). - Проверка цифровой подписи загрузчика (при Secure Boot).
- Запуск загрузчика, который загружает ядро ОС.
- Передача управления ядру.
Этот путь более гибкий, безопасный и ориентированный на файловую систему, а не на сектора.
ESP
UEFI не читает «голые» сектора, как BIOS. Вместо этого она ищет специальный раздел — ESP (EFI System Partition).
ESP (EFI System Partition) - специальный раздел на диске, используемый UEFI для хранения загрузочных файлов. Этот раздел форматируется в файловой системе FAT32 и содержит файлы загрузчиков, драйверы UEFI и конфигурационные файлы.
ESP — это фактически «загрузочный диск» для UEFI, оформленный как обычный каталог с файлами. После монтирования ESP (обычно как /boot/efi в Linux или диск S:\ в Windows) можно увидеть такую структуру:
EFI/
├── BOOT/
│ └── bootx64.efi ← универсальный загрузчик для x64
├── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi ← загрузчик Windows
└── ubuntu/
└── grubx64.efi ← загрузчик Ubuntu
Каждая ОС размещает свои файлы в отдельной папке. UEFI читает эту структуру как обычную FAT32-файловую систему и выбирает, какой .efi-файл запустить.
Загрузчики операционных систем
После того как прошивка (BIOS или UEFI) передаёт управление, в дело вступает загрузчик операционной системы. Его задача — подготовить среду для запуска ядра.
Основные функции загрузчика
- Поиск ядра — определение местоположения файла ядра (
vmlinuzв Linux,ntoskrnl.exeв Windows). - Загрузка в память — чтение ядра и связанных модулей (initramfs, драйверы) в оперативную память.
- Настройка параметров запуска — передача аргументов ядру (например, уровень журналирования, режим восстановления).
- Меню выбора ОС — при наличии нескольких систем (Linux + Windows) загрузчик предоставляет пользователю выбор.
- Поддержка обновлений — автоматическое обнаружение новых ядер и добавление их в меню.
При наличии двух операционных систем пользователь видит текстовое меню вроде:
GNU GRUB version 2.06
* Ubuntu 24.04 LTS
Advanced options for Ubuntu
Windows Boot Manager (on /dev/nvme0n1p1)
★ Загрузчик операционной системы – это программа, которая отвечает за загрузку ОС после того, как BIOS или UEFI выполнили инициализацию оборудования.
Популярные загрузчики
-
GRUB (GNU GRand Unified Bootloader)
Стандарт де-факто для большинства Linux-дистрибутивов. Поддерживает множество файловых систем, скриптовую логику, темы оформления и мультизагрузку. -
Windows Boot Manager
Интегрирован в архитектуру Windows. Работает с BCD (Boot Configuration Data) — базой данных в формате реестра, хранящей параметры загрузки. -
rEFInd, systemd-boot, LILO
Альтернативные решения, используемые в специализированных или минималистичных системах.
В Windows параметры загрузки хранятся не в текстовом файле, а в двоичной базе данных. Команда в PowerShell:
bcdedit /enum firmware
...покажет список загрузочных записей UEFI, например:
Firmware Application (101fffff...)
-------------------------------
identifier {fwbootmgr}
description Windows Boot Manager
path \EFI\Microsoft\Boot\bootmgfw.efi
Это позволяет Windows точно указывать, какой .efi-файл использовать при загрузке.