Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГАК-2026.docx
Скачиваний:
1
Добавлен:
16.06.2026
Размер:
2.66 Mб
Скачать

Этап 3: Загрузчик второго этапа (Second-stage bootloader)

Это уже полноценная программа, которая может:

  • показывать меню выбора ОС;

  • загружать драйверы файловых систем;

  • загружать ядро и initrd (initial ramdisk);

  • передавать управление ядру.

Примеры загрузчиков второго этапа:

  • GRUB (GRand Unified Bootloader) — самый популярный в Linux.

  • LILO (LInux LOader) — устаревший.

  • NTLDR / BOOTMGR — загрузчики Windows.

  • Syslinux — для загрузки с FAT.

  • U-Boot — для встраиваемых систем.

Этап 4: Загрузка ядра и initrd

Загрузчик загружает в память:

  • ядро ОС (vmlinuz в Linux, ntoskrnl.exe в Windows);

  • initrd (initial ramdisk) — небольшой образ файловой системы с драйверами и скриптами, необходимыми для монтирования реальной корневой файловой системы.

Этап 5: Переход в защищённый/длинный режим

Загрузчик переводит процессор из реального режима в защищённый (32-бита) или длинный (64-бита) режим и передаёт управление ядру.

Этап 6: Инициализация ядра

Ядро инициализирует себя:

  • настраивает таблицы страниц памяти;

  • инициализирует обработчики прерываний;

  • запускает планировщик;

  • монтирует корневую файловую систему (сначала initrd, затем реальную);

  • запускает первый процесс (init в Linux, System в Windows).

3. Пример: загрузка Linux с GRUB

  1. BIOS/UEFI загружает GRUB из MBR или EFI-раздела.

  2. GRUB показывает меню (если настроен).

  3. GRUB загружает ядро Linux (vmlinuz) и initrd в память.

  4. GRUB передаёт управление ядру, указывая параметры (например, root=/dev/sda1).

  5. Ядро распаковывается, инициализируется, запускает init (или systemd).

  6. init монтирует остальные файловые системы и запускает сервисы.

Часть 2. Процесс выполнения программ

1. Понятие процесса

Процесс — это программа в стадии выполнения. Процесс включает:

  • исполняемый код;

  • данные (переменные, стек, куча);

  • контекст выполнения (регистры процессора, счётчик команд);

  • системные ресурсы (открытые файлы, сетевые соединения).

Процесс — это единица работы в операционной системе. ОС управляет процессами через планировщик, который распределяет процессорное время между ними.

2. Этапы выполнения программы от запуска до завершения

Этап 1: Пользователь инициирует запуск

Пользователь вводит имя программы в командной строке, дважды кликает по иконке или другой процесс вызывает exec().

Этап 2: Системный вызов exec()

В Unix-подобных системах для запуска новой программы используется семейство системных вызовов exec() (execl, execv, execlp и т.д.). В Windows — CreateProcess().

Системный вызов exec() делает следующее:

  1. Проверяет права доступа к файлу программы.

  2. Читает заголовок исполняемого файла (ELF в Linux, PE в Windows).

  3. Определяет, какие сегменты памяти нужно создать.

Этап 3: Загрузка программы в память

Исполняемый файл содержит различные секции:

  • .text (код программы) — read-only, исполняемый.

  • .data (инициализированные данные) — read-write.

  • .bss (неинициализированные данные) — занимает место в памяти, но не в файле.

  • .rodata (константы).

  • Таблица символов, информация для отладки и т.д.

Ядро создаёт адресное пространство процесса:

  • Создаёт структуры данных для управления памятью (таблицы страниц).

  • Отображает сегменты файла в память (обычно с помощью механизма memory-mapped files).

  • Выделяет память под стек и кучу.

Важно: Современные ОС используют ленивую загрузку (demand paging) — страницы кода загружаются с диска только тогда, когда к ним происходит обращение.