В компьютерных операционных системах на базе Unix init (сокращение от инициализации ) — это первый процесс , запускаемый во время загрузки операционной системы. Init — это процесс -демон , который продолжает работать до тех пор, пока система не выключится. Он является прямым или косвенным предком всех других процессов и автоматически принимает все потерянные процессы . Init запускается ядром во время процесса загрузки ; произойдет паника ядра , если ядро не сможет его запустить или оно должно умереть по какой-либо причине. Init обычно присваивается идентификатор процесса 1.
В системах Unix, таких как System III и System V , конструкция init отличается от функциональности, предоставляемой init в Research Unix и ее производных BSD . Вплоть до начала 2010-х годов [1] [ не удалось проверить ] большинство дистрибутивов Linux использовали традиционную инициализацию, которая была в некоторой степени совместима с System V, в то время как некоторые дистрибутивы, такие как Slackware , использовали сценарии запуска в стиле BSD, а другие, такие как Gentoo , имели свои собственные настраиваемые сценарии запуска. версии.
С тех пор было создано несколько дополнительных реализаций инициализации, пытающихся устранить ограничения дизайна в традиционных версиях. К ним относятся launchd , Service Management Facility , systemd , Runit и OpenRC .
Research Unix init запускает сценарий оболочки инициализации , расположенный по адресу /etc/rc
, [2] , затем запускает getty на терминалах под управлением /etc/ttys
. [3] Уровни запуска отсутствуют; файл /etc/rc
определяет, какие программы запускает init. Преимущество этой системы в том, что ее легко и просто редактировать вручную. Однако новое программное обеспечение, добавленное в систему, может потребовать внесения изменений в существующие файлы, что может привести к невозможности загрузки системы.
До версии 4.3BSD инициализация BSD была такой же, как и инициализация Research UNIX; [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 и поэтому называется «инициализацией в стиле SysV».
В любой момент работающая System V находится в одном из заранее определенного количества состояний, называемых уровнями запуска . По крайней мере один уровень выполнения представляет собой нормальное рабочее состояние системы; обычно другие уровни запуска представляют однопользовательский режим (используемый для восстановления неисправной системы), завершение работы системы и различные другие состояния. Переключение с одного уровня запуска на другой приводит к запуску набора сценариев для каждого уровня запуска, которые обычно монтируют файловые системы, запускают или останавливают демоны , запускают или останавливают систему X Window , выключают компьютер и т. д.
Уровни запуска в System V описывают определенные состояния машины, характеризующиеся процессами и демонами, работающими в каждом из них. В целом существует семь уровней запуска, из которых три считаются «стандартными», поскольку они необходимы для работы системы:
Помимо этих стандартных, Unix и Unix-подобные системы обрабатывают уровни выполнения несколько по-разному. Общий знаменатель — /etc/inittab
файл — определяет, что делает каждый настроенный уровень выполнения в данной системе.
В дистрибутивах Linux по умолчанию используется уровень запуска 5 в таблице справа. Уровень запуска 5 вызывает многопользовательскую графическую среду, в которой работает система X Window , обычно с менеджером отображения, таким как GDM или KDM . Однако операционные системы Solaris и Illumos обычно резервируют уровень запуска 5 для завершения работы и автоматического выключения компьютера.
В большинстве систем все пользователи могут проверить текущий уровень выполнения с помощью команды runlevel
или who -r
. [12] Пользователь root обычно меняет текущий уровень выполнения, запуская команды telinit
или init
. Файл /etc/inittab
устанавливает уровень запуска по умолчанию с помощью :initdefault:
записи.
В системах Unix изменение уровня запуска достигается путем запуска только недостающих служб (поскольку каждый уровень определяет только те, которые запущены/остановлены). [ нужна цитация ] Например, изменение системы с уровня запуска 3 на 4 может запустить только локальный X-сервер. Возвращаясь к уровню выполнения 3, он снова будет остановлен.
Традиционно одним из основных недостатков init является то, что он запускает задачи последовательно, ожидая завершения загрузки каждой из них, прежде чем перейти к следующей. Когда процессы запуска блокируются, ввод/вывод (I/O) может привести к длительным задержкам во время загрузки. Ускорение ввода-вывода, например, с помощью твердотельных накопителей, может сократить задержки, но не устраняет основную причину.
Были предприняты различные попытки заменить традиционные демоны инициализации для решения этой и других проблем проектирования, в том числе:
По состоянию на февраль 2019 года [обновлять]systemd был принят большинством основных дистрибутивов Linux. [23]