Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

В 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-стиль [ править ]

Sysv-rc-conf , утилита TUI, которая выбирает, какие сценарии инициализации в стиле 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файл, определяет, что каждый настроенный уровень запуска делает в данной системе.

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

В дистрибутивах 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

Ссылки [ править ]

  1. ^ init(8)  -  Версия 7 Руководство программиста Unix
  2. ^ ttys(5)  -  Версия 7 Руководство программиста Unix
  3. ^ init(8)  -  Руководство администратора системы 4.2BSD
  4. ^ ttys(5)  -  Руководство по форматам файлов 4.2BSD
  5. ^ init(8)  -  Руководство администратора системы 4.3BSD
  6. ^ ttys(5)  -  Руководство по форматам файлов 4.3BSD
  7. ^ Эндрю Smallshaw (7 декабря 2009). «Сценарии запуска Unix и Linux, Часть 2» .
  8. ^ "init (8)" . minnie.tuhs.org .
  9. ^ "Initscripts" . Документация Gentoo Linux . Gentoo.org. 2014-12-13 . Проверено 8 декабря 2020 .
  10. ^ «Уровни бега» . Администрирование Oracle Solaris: общие задачи . Oracle .
  11. ^ "Страницы руководства UNIX: уровень выполнения (8)" . Unixhelp.ed.ac.uk. 1997-05-27. Архивировано из оригинала на 2014-07-14 . Проверено 12 июля 2014 .
  12. ^ "Домашняя страница системы Epoch Init" .
  13. ^ Главная страница Void Linux
  14. ^ "Пастух - Проект GNU" . Фонд свободного программного обеспечения, Inc . Проверено 16 января 2016 .
  15. ^ Принятые функции Fedora 14, 13 июля 2010 г. , получено 13 июля 2010 г.
  16. ^ "Fedora переносит systemd на F15" . Еженедельные новости Linux. 2010-09-14 . Проверено 17 сентября 2010 .
  17. ^ «Развертывание» . Red Hat Enterprise Linux 6: Технические примечания . Красная шляпа . Проверено 31 декабря 2013 .
  18. ^ Архитектура программного обеспечения: проектные документы Chromium OS , Google , получено 25 января 2014 г.
  19. ^ См. Systemd # Adoption

Внешние ссылки [ править ]

  • Страница руководства FreeBSD init
  • Документ, обобщающий схемы инициализации Unix (2007 г.)
  • Средство управления услугами Solaris - Краткое руководство на Wayback Machine (архивировано 31 декабря 2005 г.)
  • История современных систем инициализации (1992–2015 гг.)