Linux, как мы знаем, — это ядро, а не полноценная операционная система, и он поставляется с различными дистрибутивами, такими как Debian, Fedora, Ubuntu и другими.
Ubuntu, разработанная Марком Шаттлвортом, является одним из самых популярных и широко используемых дистрибутивов в мире. Будучи бесплатной операционной системой с открытым исходным кодом, Ubuntu часто обновляется и ежегодно выпускается с участием тысяч разработчиков, которые вносят свой вклад в её развитие.
Но как Ubuntu работает внутри? Какие процессы и события управляют её работой и почему они важны? В этой статье подробно рассматривается внутренняя работа Ubuntu, что делает её доступной даже для новичков.
В основе работы Ubuntu лежит надёжная система процессов, которые управляют основными функциями, такими как управление питанием, загрузка и обработка сбоев системы. Каждая системная служба в Ubuntu рассматривается как процесс, и у каждого процесса есть файлы конфигурации, расположенные в каталоге /etc/init/
.
Эти файлы конфигурации определяют события, которые запускают старт и остановку процессов, превращая Ubuntu в систему, управляемую событиями.
init
(процесс с идентификатором 1). Это первый процесс, который запускается при включении системы и продолжает работать до её выключения.Он играет важнейшую роль в управлении событиями запуска и завершения работы и является родительским процессом для всех остальных процессов. Он обеспечивает бесперебойную работу системы от загрузки до завершения работы.
Ubuntu ранее использовала Upstart, систему инициализации на основе событий, которая в последний раз обновлялась до версии 1.13.2 в сентябре 2014 года. Однако Upstart была снята с производства и с тех пор не обновлялась.
Ubuntu отказалась от Upstart с выходом версии 15.04 (Vivid Vervet) в апреле 2014 года, заменив её systemd в качестве системы инициализации по умолчанию.
Systemd — это более продвинутая система инициализации, которая управляет процессами и службами иначе, чем Upstart, обеспечивая большую гибкость, распараллеливание и лучший контроль над службами.
Systemd также упрощает управление загрузкой и мониторинг служб, что делает его стандартной системой инициализации для большинства современных дистрибутивов Linux, включая Ubuntu.
При загрузке системы init
запускается первым. Затем этот процесс запускает другие процессы в иерархическом порядке. В типичной системе Ubuntu с systemd последовательность загрузки состоит из ряда шагов и событий, которые запускают службы.
Вот разбивка иерархии загрузки:
/etc/systemd/system
и /lib/systemd/system
.mountall
отвечают за монтирование локальных и удалённых файловых систем в процессе загрузки. systemd обрабатывает события, которые сообщают другим службам, когда можно продолжить работу.gdm
или lightdm
), который позволяет пользователям входить в систему.
default.target
— это конечное состояние, в которое система переходит после завершения загрузки. Обычно оно равно graphical.target
, что запускает пользовательский интерфейс.multi-user.target
.rescue.target
обеспечивает однопользовательский режим для устранения проблем с системой.
В Ubuntu каждая системная служба или процесс связаны с событиями. Например, systemd и другие менеджеры служб используют файлы конфигурации, в которых указываются условия запуска и остановки служб. Эти условия определяют, когда должен запускаться процесс в зависимости от системных событий (например, при запуске системы или при монтировании определённого файла).
В модели, управляемой событиями Ubuntu, есть два типа процессов:
Службы или модули запускаются событиями и определяются файлами модулей, в которых указываются события, запускающие и останавливающие службу.
Каждый процесс или служба, которыми управляет systemd, определяется как единица, и единицы могут быть разных типов, например:
.service
), которые определяют службы, которыми управляет systemd..socket
), которые определяют конечные точки связи..target
), которые определяют группу сервисов для конкретной цели или этапа процесса загрузки.
С внедрением systemd процессы в Ubuntu организованы иерархически, и для корректной работы каждой службы требуется другая служба. Менеджер служб systemd отвечает за создание и управление этими зависимостями с помощью файлов модулей, которые определяют порядок запуска служб.
Иерархию можно визуализировать следующим образом:
Systemd (PID 1) -> Essential Services (e.g., mounting, kernel modules) -> Display Manager -> User Session
/etc/hostname
./etc/modules
./proc
и /sys
.
При необходимости во время загрузки запускаются другие ключевые процессы, такие как dbus
(для межпроцессного взаимодействия), network-manager
(для настройки сети) и udev (для управления устройствами).
Процесс загрузки Ubuntu значительно изменился за прошедшие годы. В то время как более ранние версии использовали Upstart, современные версии Ubuntu (начиная с 15.04) используют systemd в качестве системы инициализации по умолчанию.
systemd предлагает множество улучшений, в том числе более эффективную параллелизацию, упрощённое управление службами и большую гибкость. Понимание того, как работает systemd в Ubuntu, крайне важно для всех, кто хочет разобраться во внутренней работе операционной системы, управлять службами или устранять проблемы, связанные с загрузкой.
Разобравшись с ключевыми понятиями systemd, целями и событиями, вы сможете гораздо лучше понять, как Ubuntu работает во время загрузки и после неё.