Загрузка
1. BIOS (Basic Input/Output System)
BIOS — это микропрограмма, хранящаяся на чипе материнской платы (во FLASH-памяти). При включении питания процессор выполняет первую инструкцию по адресу 0xFFFFFFF0
(так называемый reset vector), который указывает на код BIOS.
Основные функции BIOS:
- POST (Power-On Self-Test): Проверка целостности самой микропрограммы, инициализация критически важного оборудования (процессор, память, чипсет), запуск встроенного ПО других устройств (видеокарта, сетевая карта).
- Сигналы POST: Если на этапе самотестирования возникает ошибка, BIOS подаёт сигналы через системный динамик (например, 1 короткий — успех, длинные и короткие комбинации — различные ошибки).
2. Загрузчик (Bootloader)
Задача загрузчика — найти, загрузить в оперативную память и передать управление ядру операционной системы.
Схемы загрузки
-
BIOS + MBR (Master Boot Record):
- MBR — это первые 512 байт на диске. Содержит:
- Bootstrap Code (446 байт) — первичный код загрузчика.
- Partition Table (64 байта) — таблица разделов (до 4 первичных).
- Signature (2 байта) — сигнатура
55 AA
.
- Ограничение MBR: работа с дисками до 2 ТБ.
- Процесс: BIOS загружает MBR, код из MBR находит активный раздел и загружает следующий этап загрузчика (например, GRUB2), который уже находится в этом разделе.
- MBR — это первые 512 байт на диске. Содержит:
-
UEFI + GPT (GUID Partition Table):
- UEFI — современный стандарт, пришедший на смену BIOS. Умеет читать файловые системы (например, FAT32) и поддерживает безопасную загрузку (Secure Boot).
- GPT — современная схема разделов, не имеющая ограничений MBR.
- Процесс: UEFI напрямую обращается к специальному FAT32-разделу (EFI System Partition), где хранятся файлы загрузчиков с расширением
.efi
(например,grubx64.efi
). Загрузочные записи хранятся в NVRAM.
Полезные команды:
- Просмотр UEFI-записей:
efibootmgr -v
- Просмотр разделов:
fdisk -l
GRUB2 (Grand Unified Bootloader 2)
Самый распространённый загрузчик в Linux.
- Позволяет выбирать ядро или ОС для загрузки.
- Загружает необходимые модули для поддержки оборудования и файловых систем.
- Основной конфигурационный файл:
/boot/grub/grub.cfg
(генерируется автоматически).
3. Ядро (Kernel)
Ядро Linux — это сжатый исполняемый файл (обычно vmlinuz-<версия>
в каталоге /boot
).
- GRUB загружает ядро в оперативную память.
- Ядро распаковывается.
- Ядро запускается с параметрами командной строки (можно посмотреть в
/proc/cmdline
). - Ядро монтирует в памяти начальную RAM-диск (initramfs).
Initramfs (Initial RAM File System)
Это временная корневая файловая система в памяти.
- Содержит необходимые на раннем этапе загрузки драйверы, модули ядра, микрокод и скрипты.
- Его главная задача — смонтировать реальную корневую файловую систему (
/
), после чего управление передаётся процессуinit
.
4. Init и systemd
Процесс с PID 1 (init
или systemd
) является родителем для всех остальных процессов в системе.
Его основные задачи:
- Управление порядком запуска служб (демонов).
- Монтирование файловых систем (согласно
/etc/fstab
). - Управление всеми запущенными процессами.
systemd — современная и самая распространённая реализация init.
- Использует концепцию юнитов (units) (сервисы, монтирования, сокеты и т.д.).
- Позволяет просматривать зависимости:
systemctl list-dependencies default.target
- Имеет множество утилит для управления системой (
systemctl
,journalctl
и др.).