Процесс загрузки ОС

Процесс загрузки ОС #

Васильев Андрей Михайлович, 2024

Версии презентации


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

diagram

Существует несколько стандартов для реализации систем загрузки

  • BIOS, Basic Input Output System
  • UEFI, Unified Extensible Firmware Interface
  • EFI, Extensible Firmware Interface
  • Множество закрытых решений

Решают общие задачи:

  • Первоначальная инициализация устройств
  • Поиск загрузчика ОС на устройствах хранения
  • Поиск загрузчика ОС на сетевых устройствах

Загрузчик ОС #

Задачей загрузчика ОС является поиск ядра ОС с дальнейшей передачей ему управления

Современные загрузчики:

  • Являются отдельными бинарными данными на ПЗУ
  • Обычно располагаются на ФС в отдельном разделе в виде файла
  • Настраиваются с помощью внешнего файла-конфигурации
  • Могут считывать данные из файловых систем
  • Могут иметь интерактивный интерфейс для выбора ОС
    • Решение для загрузки разных ОС
    • Решение для загрузки разных ядер для одной ОС

Ядро ОС #

diagram

Ядро ОС обеспечивает эффективное использование технического обеспечения множеством конкурирующих друг с другом процессов

Операционная система помимо ядра предоставляет набор системных приложений

  • Позволяющих настраивать параметры работы ядра
  • Позволяющих управлять процессами внутри ОС

Файлы ядра 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 Экстренный доступ для суперпользователя.

© A. M. Васильев, 2024, CC BY-SA 4.0, andrey@crafted.su