stringtranslate.com

инициализация

Версия 7 Unix : список /etc , показывающий init и rc
Версия 7 Unix: содержимое скрипта оболочки Bourne /etc/rc

В операционных системах на базе Unix init (сокращение от initialization ) — это первый процесс , запускаемый во время загрузки операционной системы. Init — это процесс- демон , который продолжает работать до тех пор, пока система не будет выключена. Он является прямым или косвенным предком всех других процессов и автоматически принимает все осиротевшие процессы . Init запускается ядром во время процесса загрузки ; произойдет паника ядра, если ядро ​​не сможет его запустить или он должен будет умереть по какой-либо причине. Init обычно назначается идентификатор процесса 1.

В системах Unix, таких как System III и System V , дизайн init отличался от функциональности, предоставляемой init в Research Unix и его производных BSD . Вплоть до начала 2010-х годов [1] [ неудачная проверка ] большинство дистрибутивов Linux использовали традиционный init, который был в некоторой степени совместим с System V, в то время как некоторые дистрибутивы, такие как Slackware, используют сценарии запуска в стиле BSD, а другие, такие как Gentoo, имеют свои собственные настроенные версии.

С тех пор было создано несколько дополнительных реализаций init, пытающихся устранить ограничения дизайна в традиционных версиях. К ним относятся launchd , Service Management Facility , systemd , Runit и OpenRC .

Исследование в стиле Unix/BSD

Research Unix init запускает скрипт инициализации оболочки , расположенный в /etc/rc, [2] затем запускает getty на терминалах под управлением /etc/ttys. [3] Уровни запуска отсутствуют; /etc/rcфайл определяет, какие программы запускаются init. Преимущество этой системы в том, что она проста и легко редактируется вручную. Однако новое программное обеспечение, добавленное в систему, может потребовать внесения изменений в существующие файлы, что может привести к невозможности загрузки системы.

До 4.3BSD BSD init был таким же, как и Research UNIX init; [4] [5] в 4.3BSD была добавлена ​​поддержка запуска оконной системы , такой как X, на графических терминалах под управлением /etc/ttys. [6] [7] Чтобы устранить необходимость редактирования /etc/rc, варианты BSD долгое время поддерживали специфичный для сайта /etc/rc.localфайл, который запускается в подоболочке ближе к концу последовательности загрузки.

Полностью модульная система была представлена ​​в NetBSD 1.5 и перенесена на FreeBSD 5.0 ​​и последующие версии. Эта система выполняет скрипты в /etc/rc.dкаталоге. В отличие от порядка скриптов System V, который выводится из имени файла каждого скрипта, эта система использует явные теги зависимостей, размещенные внутри каждого скрипта. [8] Порядок, в котором выполняются скрипты, определяется утилитой rcorder на основе требований, указанных в этих тегах.

SysV-стиль

sysv-rc-conf — утилита TUI , которая выбирает, какие сценарии инициализации в стиле SysV будут запущены на каждом уровне выполнения

По сравнению со своими предшественниками, UNIX System III от AT&T представила новый стиль конфигурации запуска системы [9] , который сохранился (с изменениями) в UNIX System V и поэтому называется «init в стиле SysV».

В любой момент времени работающая System V находится в одном из предопределенного количества состояний, называемых уровнями выполнения . По крайней мере один уровень выполнения является нормальным рабочим состоянием системы; как правило, другие уровни выполнения представляют однопользовательский режим (используемый для восстановления неисправной системы), завершение работы системы и различные другие состояния. Переключение с одного уровня выполнения на другой приводит к запуску набора скриптов для каждого уровня выполнения, которые обычно монтируют файловые системы, запускают или останавливают демоны , запускают или останавливают систему X Window , выключают машину и т. д.

Уровни запуска

Уровни выполнения в System V описывают определенные состояния машины, характеризующиеся процессами и демонами, работающими в каждом из них. В целом, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они необходимы для работы системы:

  1. Выключать
  2. Однопользовательский режим (также известный как S или s )
  3. Перезагрузить

Помимо этих стандартных, Unix и Unix-подобные системы обрабатывают уровни запуска несколько по-разному. Общий знаменатель, /etc/inittabфайл, определяет, что делает каждый настроенный уровень запуска в данной системе.

Уровни выполнения по умолчанию

В дистрибутивах Linux, которые по умолчанию используют уровень запуска 5 в таблице справа, уровень запуска 5 вызывает многопользовательскую графическую среду, работающую в X Window System , обычно с менеджером отображения, таким как GDM или KDM . Однако операционные системы Solaris и illumos обычно резервируют уровень запуска 5 для завершения работы и автоматического выключения машины.

В большинстве систем все пользователи могут проверить текущий уровень запуска с помощью команды runlevelили who -r. [12] Пользователь root обычно изменяет текущий уровень запуска, выполняя команды telinitили init. /etc/inittabФайл устанавливает уровень запуска по умолчанию с помощью :initdefault:записи.

В системах Unix изменение уровня выполнения достигается путем запуска только отсутствующих служб (поскольку каждый уровень определяет только те, которые запущены/остановлены). [ необходима цитата ] Например, изменение уровня выполнения системы с 3 на 4 может запустить только локальный X-сервер. Возвращаясь к уровню выполнения 3, он снова будет остановлен.

Другие реализации

Традиционно одним из главных недостатков init является то, что он запускает задачи последовательно, ожидая завершения загрузки каждой из них, прежде чем перейти к следующей. Когда процессы запуска оказываются заблокированными на вводе/выводе (I/O), это может привести к длительным задержкам во время загрузки. Ускорение ввода/вывода, например, с помощью SSD, может сократить задержки, но не устраняет основную причину.

Были предприняты различные попытки заменить традиционные демоны инициализации для решения этой и других проблем проектирования, в том числе:

По состоянию на февраль 2019 года systemd был принят большинством основных дистрибутивов Linux. [23]

Смотрите также

Ссылки

  1. ^ "Lennart Poettering on systemd's Tumultuous Ascendancy". The New Stack . 2018-11-08. Архивировано из оригинала 2018-11-08 . Получено 2024-01-30 .
  2. ^ init(8)  –  Руководство программиста Unix версии 7
  3. ^ ttys(5)  –  Руководство программиста Unix версии 7
  4. ^ init(8)  –  Руководство системного администратора 4.2BSD
  5. ^ ttys(5)  –  Руководство по форматам файлов 4.2BSD
  6. ^ init(8)  –  Руководство системного администратора 4.3BSD
  7. ^ ttys(5)  –  Руководство по форматам файлов 4.3BSD
  8. ^ Эндрю Смолшоу (7 декабря 2009 г.). "Скрипты запуска Unix и Linux, часть 2". Архивировано из оригинала 18 декабря 2009 г. Получено 6 июня 2011 г.
  9. ^ "init(8)". minnie.tuhs.org . Архивировано из оригинала 2021-07-27 . Получено 2015-09-12 .
  10. ^ "Initscripts". Документация Gentoo Linux . Gentoo.org. 2014-12-13. Архивировано из оригинала 2020-12-03 . Получено 2020-12-08 .
  11. ^ "Уровни выполнения". Администрирование Oracle Solaris: общие задачи . Oracle . Архивировано из оригинала 2016-04-10 . Получено 2017-11-14 .
  12. ^ "UNIX man pages : runlevel (8)". Unixhelp.ed.ac.uk. 1997-05-27. Архивировано из оригинала 2014-07-14 . Получено 2014-07-12 .
  13. ^ "GitHub - davmac314/dinit: Service monitoring / "init" system". GitHub . Архивировано из оригинала 2021-12-12 . Получено 2021-12-12 .
  14. ^ "Epoch Init System Homepage". Архивировано из оригинала 2014-08-02 . Получено 2014-07-31 .
  15. ^ "Void Linux main page". Архивировано из оригинала 2020-08-29 . Получено 2020-08-31 .
  16. ^ "The Shepherd - GNU Project". Free Software Foundation, Inc. Архивировано из оригинала 2016-02-12 . Получено 2016-01-16 .
  17. ^ "s6: why another supervisor suite". Архивировано из оригинала 2021-09-13 . Получено 2021-09-13 .
  18. ^ "s6 init system". Архивировано из оригинала 2021-09-13.
  19. Fedora 14 Accepted Features, 2010-07-13, архивировано из оригинала 2022-03-27 , извлечено 2010-07-13
  20. ^ "Fedora откладывает systemd до F15". Linux Weekly News. 2010-09-14. Архивировано из оригинала 2010-09-19 . Получено 2010-09-17 .
  21. ^ "Deployment". Red Hat Enterprise Linux 6: Технические заметки . Red Hat . Архивировано из оригинала 2018-08-29 . Получено 2013-12-31 .
  22. Архитектура программного обеспечения: проектные документы Chromium OS, заархивировано из оригинала 9 апреля 2022 г. , извлечено 25 января 2014 г.
  23. ^ См. Systemd #Adoption

Внешние ссылки