В операционных системах на базе 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 .
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 на основе требований, указанных в этих тегах.
По сравнению со своими предшественниками, UNIX System III от AT&T представила новый стиль конфигурации запуска системы [9] , который сохранился (с изменениями) в UNIX System V и поэтому называется «init в стиле SysV».
В любой момент времени работающая System V находится в одном из предопределенного количества состояний, называемых уровнями выполнения . По крайней мере один уровень выполнения является нормальным рабочим состоянием системы; как правило, другие уровни выполнения представляют однопользовательский режим (используемый для восстановления неисправной системы), завершение работы системы и различные другие состояния. Переключение с одного уровня выполнения на другой приводит к запуску набора скриптов для каждого уровня выполнения, которые обычно монтируют файловые системы, запускают или останавливают демоны , запускают или останавливают систему X Window , выключают машину и т. д.
Уровни выполнения в System V описывают определенные состояния машины, характеризующиеся процессами и демонами, работающими в каждом из них. В целом, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они необходимы для работы системы:
Помимо этих стандартных, 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]