В этой статье слишком много ссылок на первоисточники . ( Декабрь 2020 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
В Unix на основе компьютера операционных систем , инициализации (сокращенно инициализацию ) является первым процессом начался во время загрузки компьютерной системы. Init - это процесс- демон, который продолжает работать до завершения работы системы. Он является прямым или косвенным предком всех других процессов и автоматически принимает все потерянные процессы . Init запускается ядром в процессе загрузки ; паника ядра будет происходить , если ядро не может запустить его. Init обычно присваивается идентификатор процесса 1.
В системах Unix, таких как System III и System V , конструкция init отличается от функциональности, предоставляемой init в Research Unix и ее производных от BSD . До недавнего времени в большинстве дистрибутивов Linux использовался традиционный init, который в некоторой степени совместим с System V, в то время как некоторые дистрибутивы, такие как Slackware, используют сценарии запуска в стиле BSD, а другие, такие как Gentoo, имеют свои собственные адаптированные версии.
С тех пор было создано несколько дополнительных реализаций init, пытающихся устранить ограничения дизайна в традиционных версиях. К ним относятся launchd , средство управления услугами , systemd , Runit и OpenRC .
Исследование в стиле Unix / BSD [ править ]
Research Unix init запустил сценарий оболочки инициализации, расположенный по адресу /etc/rc
, [1], затем запустил getty на терминалах под управлением /etc/ttys
. [2] Нет уровней запуска; /etc/rc
файл определяет , какие программы запускаются при инициализации. Преимущество этой системы в том, что ее легко редактировать вручную. Однако новое программное обеспечение, добавленное в систему, может потребовать изменений в существующих файлах, что может привести к невозможности загрузки системы.
BSD init до 4.3BSD был таким же, как init для Research UNIX; [3] [4] в 4.3BSD добавлена поддержка работы оконной системы, такой как X, на графических терминалах под управлением /etc/ttys
. [5] [6] Чтобы убрать требование редактирования /etc/rc
, варианты BSD уже давно поддерживают /etc/rc.local
файл для конкретного сайта, который запускается во вспомогательной оболочке ближе к концу последовательности загрузки.
Полностью модульная система была представлена в NetBSD 1.5 и перенесена на FreeBSD 5.0 и последующие версии . Эта система выполняет сценарии в /etc/rc.d
каталоге. В отличие от упорядочивания сценариев в System V, которое определяется именем файла каждого сценария, эта система использует явные теги зависимости, размещенные внутри каждого сценария. [7] Порядок, в котором выполняются сценарии, определяется утилитой rcorder на основе требований, указанных в этих тегах.
SysV-стиль [ править ]
По сравнению со своими предшественниками, UNIX System III от AT&T представила новый стиль конфигурации запуска системы [8], который сохранился (с модификациями) в UNIX System V и поэтому называется «инициализацией в стиле SysV».
В любой момент работающая Система V находится в одном из заранее определенного количества состояний, называемых уровнями выполнения . По крайней мере, один уровень выполнения - это нормальное рабочее состояние системы; обычно другие уровни выполнения представляют однопользовательский режим (используемый для восстановления неисправной системы), завершение работы системы и различные другие состояния. Переключение с одного уровня выполнения на другой приводит к запуску набора сценариев для каждого уровня запуска, которые обычно монтируют файловые системы, запускают или останавливают демонов , запускают или останавливают систему X Window , завершают работу машины и т. Д.
Уровни выполнения [ править ]
В уровнях запуска в System V описывают некоторые состояния машины, характеризующиеся процессы и демонами , работающих в каждом из них. В общем, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они важны для работы системы:
- 0. Остановка
- 1. Однопользовательский режим (также известный как S или s )
- 6. Перезагрузитесь.
Помимо этих стандартных, Unix и Unix-подобные системы несколько по-разному относятся к уровням выполнения. Общий знаменатель, /etc/inittab
файл, определяет, что каждый настроенный уровень запуска делает в данной системе.
Уровни выполнения по умолчанию [ править ]
Операционная система | Уровень запуска по умолчанию |
---|---|
AIX | 2 |
antiX | 5 |
Gentoo Linux | 3 [9] |
HP-UX | 3 (консольный / серверный / многопользовательский) или 4 (графический) |
Linux с нуля | 3 |
Slackware Linux | 3 |
Solaris / illumos | 3 [10] |
UNIX System V выпусков 3.x, 4.x | 2 |
UnixWare 7.x | 3 |
В дистрибутивах Linux, для которых по умолчанию установлен уровень запуска 5 в таблице справа, уровень запуска 5 вызывает многопользовательскую графическую среду, в которой работает система X Window , обычно с диспетчером отображения, таким как GDM или KDM . Однако операционные системы Solaris и illumos обычно резервируют уровень запуска 5 для завершения работы и автоматического выключения машины.
В большинстве систем все пользователи могут проверить текущий уровень выполнения с помощью команды runlevel
или who -r
. [11] Пользователь root обычно изменяет текущий уровень выполнения, выполняя команды telinit
или init
. /etc/inittab
Файл устанавливает уровень запуска по умолчанию с :initdefault:
записью.
В системах Unix изменение уровня выполнения достигается запуском только отсутствующих служб (поскольку каждый уровень определяет только те, которые запускаются / останавливаются). [ необходима цитата ] Например, изменение системы с уровня запуска 3 на 4 может запустить только локальный X-сервер. Возвращаясь к уровню выполнения 3, он снова будет остановлен.
Другие реализации [ править ]
Традиционно одним из основных недостатков init является то, что он запускает задачи последовательно, ожидая завершения загрузки каждой, прежде чем перейти к следующей. Когда процессы запуска заканчиваются блокировкой ввода / вывода (I / O), это может привести к длительным задержкам во время загрузки. Ускорение ввода-вывода, например, с помощью SSD, может сократить задержки, но не устраняет основную причину.
Были предприняты различные попытки заменить традиционные демоны инициализации для решения этой и других проблем проектирования, в том числе:
- BootScripts в GoboLinux
- busybox-init , подходящий для встроенных операционных систем , использовался OpenWrt до того, как он был заменен на procd
- Epoch , однопоточная система инициализации Linux, ориентированная на простоту и управление службами [12]
- Initng , полная замена init, предназначенная для асинхронного запуска процессов
- launchd , замена init в Darwin / macOS / iOS / tvOS, начиная с Mac OS X v10.4 (запускает SystemStarter для запуска процессов rc.local и SystemStarter в старом стиле)
- OpenRC , средство создания процессов, которое использует предоставленный системой init, обеспечивая изоляцию процессов, параллельный запуск и зависимость служб; используется Alpine Linux , Gentoo и его производными и доступен как опция в Devuan и Artix Linux
- runit , кроссплатформенная полная замена init с параллельным запуском служб, используемая по умолчанию в Void Linux [13]
- Sun Service Management Facility (SMF), полная замена / переработка init с нуля в illumos / Solaris, начиная с Solaris 10, но запущенная в качестве единственной службы оригинальной системой инициализации в стиле System V.
- Shepherd , менеджер служб и демонов GNU, обеспечивающий асинхронную инициализацию на основе зависимостей; написан на Guile Scheme и предназначен для интерактивного взлома во время нормальной работы системы [14]
- systemd , программный пакет, полная замена init в Linux, который включает в себя демон init с одновременным запуском служб, диспетчер служб и другие функции.
- SystemStarter , средство создания процессов, запускаемое с помощью инициализации в стиле BSD в Mac OS X до Mac OS X v10.4.
- Upstart , полная замена init, предназначенная для асинхронного запуска процессов. Не Начатое Ubuntu и используются ими до 2014 г. Она также используется в Fedora 9, [15] [16] Red Hat Enterprise Linux 6 [17] и Google «s Chrome OS . [18]
По состоянию на февраль 2019 [Обновить]года systemd был принят большинством основных дистрибутивов Linux. [19]
См. Также [ править ]
- Управление службами операционной системы
- Подсистема диспетчера сеансов - аналог в Windows NT
Ссылки [ править ]
- ^ - Версия 7 Руководство программиста Unix
- ^ - Версия 7 Руководство программиста Unix
- ^ - Руководство администратора системы 4.2BSD
- ^ - Руководство по форматам файлов 4.2BSD
- ^ - Руководство администратора системы 4.3BSD
- ^ - Руководство по форматам файлов 4.3BSD
- ^ Эндрю Smallshaw (7 декабря 2009). «Сценарии запуска Unix и Linux, Часть 2» .
- ^ "init (8)" . minnie.tuhs.org .
- ^ "Initscripts" . Документация Gentoo Linux . Gentoo.org. 2014-12-13 . Проверено 8 декабря 2020 .
- ^ «Уровни бега» . Администрирование Oracle Solaris: общие задачи . Oracle .
- ^ "Страницы руководства UNIX: уровень выполнения (8)" . Unixhelp.ed.ac.uk. 1997-05-27. Архивировано из оригинала на 2014-07-14 . Проверено 12 июля 2014 .
- ^ "Домашняя страница системы Epoch Init" .
- ^ Главная страница Void Linux
- ^ "Пастух - Проект GNU" . Фонд свободного программного обеспечения, Inc . Проверено 16 января 2016 .
- ^ Принятые функции Fedora 14, 13 июля 2010 г. , получено 13 июля 2010 г.
- ^ "Fedora переносит systemd на F15" . Еженедельные новости Linux. 2010-09-14 . Проверено 17 сентября 2010 .
- ^ «Развертывание» . Red Hat Enterprise Linux 6: Технические примечания . Красная шляпа . Проверено 31 декабря 2013 .
- ^ Архитектура программного обеспечения: проектные документы Chromium OS , Google , получено 25 января 2014 г.
- ^ См. Systemd # Adoption.
Внешние ссылки [ править ]
- Страница руководства по инициализации FreeBSD
- Документ, обобщающий схемы инициализации Unix (2007 г.)
- Средство управления услугами Solaris - Руководство по быстрому запуску на Wayback Machine (заархивировано 31 декабря 2005 г.)
- История современных систем инициализации (1992–2015 гг.)