Процесс загрузки ОС #
Васильев Андрей Михайлович, 2024
Версии презентации
Загрузка системы #
Существует несколько стандартов для реализации систем загрузки
- BIOS, Basic Input Output System
- UEFI, Unified Extensible Firmware Interface
- EFI, Extensible Firmware Interface
- Множество закрытых решений
Решают общие задачи:
- Первоначальная инициализация устройств
- Поиск загрузчика ОС на устройствах хранения
- Поиск загрузчика ОС на сетевых устройствах
Загрузчик ОС #
Задачей загрузчика ОС является поиск ядра ОС с дальнейшей передачей ему управления
Современные загрузчики:
- Являются отдельными бинарными данными на ПЗУ
- Обычно располагаются на ФС в отдельном разделе в виде файла
- Настраиваются с помощью внешнего файла-конфигурации
- Могут считывать данные из файловых систем
- Могут иметь интерактивный интерфейс для выбора ОС
- Решение для загрузки разных ОС
- Решение для загрузки разных ядер для одной ОС
Ядро ОС #
Ядро ОС обеспечивает эффективное использование технического обеспечения множеством конкурирующих друг с другом процессов
Операционная система помимо ядра предоставляет набор системных приложений
- Позволяющих настраивать параметры работы ядра
- Позволяющих управлять процессами внутри ОС
Файлы ядра Linux #
В GNU/Linux для загрузки ОС применяется связка из
- ядра ОС
- initrd, Initial RAM Disk, образа файловой системы, необходимой ядру для первичной загрузки операционной системы
Оба компонента поставляются файлами, лежащими на ФС
В рамках initrd поставляются:
- Модули ядра ОС, необходимые для работы с оборудованием на данном компьютере
- Служебные приложения, нужные для загрузки модулей и настройки системы
Модули могут поставляться отдельно от ядра:
- Для поддержки проприетарных решений
- Для решения задачи поддержки множества разных конфигураций оборудования
Процесс загрузки ОС #
В рамках загрузки ядра ОС происходит поиск всего оборудования и его инициализация
После того как всё оборудование инициализировано, ядро запускает процесс-инициализации init
- Процесс работает до окончания работы ОС
- Процесс имеет идентификатор, равный 1
- Процесс запускает все остальные процессы в системе
Существует множество систем инициализации: SysVinit, systemd, openrc, runit, initware
- Для выбора системы инициализации ядру можно передать аргумент init с полным путём к исполняемому файлу
- Сравнение разных систем предоставляет проект Gentoo
Задачи системы инициализации #
- Запуск служб, постоянно работающих фоновых процессов
- В процессе запуска операционной системы
- При обращении к службе посредством сети, D-Bus, сокету и т.д.
- Перезапуск служб в случае их падения
Система инициализации может также выполнять действия других системных служб
- Подключение файловых систем (обычно да)
- Настройка сетевых интерфейсов (обычно нет)
- Запуск задач по расписанию (обычно нет)
- Журналирование работы служб (обычно нет)
- Управление входом пользователей в систему (обычно нет)
- Создание виртуальных файлов для устройств (обычно нет)
- Управление временем системы (обычно нет)
Стадии загрузки ОС #
При запуске системы обычно рассматриваются следующие стадии:
- Настройка ключевых служб (диски, системы обмена сообщениями и т.д.)
- Поддержка работы сессии суперпользователя
- Поддержка работы множества пользователей
- Запуск служб, обеспечивающих продуктовые функции системы (SSH, Веб-сервер, …)
- Поддержка работы с графическим пользовательским интерфейсом
Также система инициализации должна выполнять корректное выключение системы, т.е. выключать службы в правильном порядке и сохранить данные на ПЗУ в случаях:
- Завершения работы
- Перезагрузки системы
Система инициализации позволяет переходить между стадиями, выбирать разные стадии при запуске
Варианты реализации стадий #
SysV Runlevel | systemd Target (Цель) | Записки |
---|---|---|
0 | poweroff.target, runlevel0.target | Выключить систему. |
1, s, single | rescue.target, runlevel1.target | Режим одного пользователя. |
2, 4 | multi-user.target, runlevel2.target, runlevel4.target | Определённые пользователем (системой). По умолчанию 3 |
3 | multi-user.target, runlevel3.target | Многопользовательская инициализация, не графическая. Пользователи могут входить по сети или через терминалы. |
5 | graphical.target, runlevel5.target | Многопользовательская с поддержкой графического интерфейса. |
6 | reboot.target, runlevel6.target | Перезагрузка. |
emergency | emergency.target | Экстренный доступ для суперпользователя. |