Материал: 6261

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

156

• второй символ - указывает уровень, на котором система находится сейчас. Администратор ОС может установить нужный уровень, используя утилиту:

telinit новый_уровень_ОС;

Таблица 6.1 - Уровни работы ОС

Уровень

Назначение

0

Выключение системы.

1

Однопользовательский режим (для администрирования системы).

2 - 4

Нормальная работа (настраивается администратором).

5

Нормальная работа (запускается X Window System).

6

Перезагрузка ОС.

Процесс init «знает» об уровнях и, после запуска, читает файл /etc/inittab, структура которого имеет вид отдельных строк (пустые строки и строки, начинающиеся с символа # - игнорируются):

id:runlevels:action:process

где

 

id

0-4 символов, уникально идентифицирующих строку.

runlevels Список уровней из таблицы 6.1 (без разделителей), на которые

 

действует строка.

action

Одно из спецификаций действия на process, перечисленные в таблице

 

6.2, и которые конкретный init должен понимать.

process

Выполняемая команда.

Таблица 6.2 - Спецификации действий

Действие

Описание

respawn

Процесс будет запущен снова, если он завершился.

wait

Процесс будет запущен один раз и init будет ждать его завершения.

once

Процесс будет запущен один раз.

boot

Процесс будет запущен при загрузке ОС.

 

Значение runlevels — игнорируется.

off

Ничего не делать.

initdefault

Определяет уровень по умолчанию, но котором запускается ОС.

sysinit

Процесс будет запущен во время ОС и перед спецификацией boot.

ctrlaltdel

Процесс запустится, когда нажаты клавиши Ctrl-Alt-Del.

157

Для примера, рассмотрим абстрактный файл /etc/inittab (ОС Knoppix клон Debian):

id:5:initdefault:

#Boot-time system configuration/initialization script. si::sysinit:/etc/init.d/rcS

#What to do in single-user mode.

~~:S:respawn:/bin/bash -login >/dev/tty1 2>&1 </dev/tty1

l0:0:wait:/etc/init.d/knoppix-halt l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/knoppix-reboot

# Run X Window session from CDROM in runlevel 5 w5:5:wait:/bin/sleep 2 x5:5:wait:/etc/init.d/xsession start

Замечание

Для любой ОС, использующей систему инициализации System V, следует отдельно изучить возможности процесса init, структуру файла /etc/inittab и директории, в которых находятся скрипты инициализации уровней.

Существенными недостатками подхода System V являются:

•строго последовательная организация процедур останова и запуска процес-

сов, которая приводит к существенным задержкам процедур старта и переключения уровней ОС;

•слабые возможности по отслеживанию групп процессов, решающих общую

задачу, что приводит к потере контроля над отдельными процессами и их

незаметное для системы завершение.

Широкое использование в UNIX-Linux системах графических режимов работы ОС, сильно обострило сложившуюся ситуацию.

Стремление реализовать технологию Plug and Play и обеспечение надежной работы графической системы X Window System, широко использующих технологию событий, была предложена системная шина D-Bus.

D-Bus - высокоуровневая система межпроцессного взаимодействия, обеспечивающая универсальный сервис взаимодействия прикладных процессов в системе.

158

Система инициализации, основанная на обработке сигналов была реализована в 2009 году Canonical Ltd. для ОС Ubuntu и стала называться upstart.

Upstart использует:

•файлы конфигурации, имеющие расширения *.conf и помещенные в директорию /etc/init/;

•специальное приложение init, помещенное в директорию /sbin/;

•старые скрипты инициализации, находящиеся, для совместимости со стары-

ми версиями, в директории /etc/init.d/.

Во время загрузки ОС, новая /sbin/init:

•запускает сразу все приложения, для которых имеются файлы конфигурации;

•если приложение не может запуститься по причине отсутствия некоторых

ресурсов или еще не запущенных других приложений, оно переводится в режим ожидания предоставления таких ресурсов с помощью сигналов;

•сигналы старта и останова приложений принимаются init через шину D-

Bus и используются для принятия действий, описанных в файлах конфигурации.

Основные понятия upstart:

•job — работа — общее название запускаемого ПО;

•task - задача - разновидность работы, предполагающая запуск и завершение;

•service - сервис - разновидность работы, аналог демона, которая перезапус-

кается при падении или аварийном завершении.

Для отображения разновидности работ, в файлах конфигурации используются специальные ключевые слова:

•exec команда — для запуска отдельного приложения;

•script …... end script — операторные скобки скрипта shell;

•respawn — ключевое слово для обозначения сервиса;

•task — ключевое слово для обозначения задачи;

•manual — ключевое слово для обозначения работы, которая будет запускать-

ся и останавливаться в ручную.

Для управления работами используется утилита initctl, например: initctl list — позволяет просмотреть все запущенные сервисы; initctl version — позволяет узнать версию upstart;

initctl start имя_сервиса — стартует сервис; initctl stop имя_сервиса — останавливает сервис.

Таким образом, система инициализации upstart снимает проблему следования строгому порядку запуска всех процессов, ограничивая ее проблемами приложений, ограниченных одним сервисом.

Приложения, ограниченные одним сервисом, объединяются в понятие cgroups, работу которых и отслеживает upstart.

Успехи upstart, естественным образом, приводят к мысли об универсальном подходе к управлению процессами и устройствами ЭВМ.

159

С апреля 2010 года стартовал авторский проект (Леннарт Поттеринг), названный systemd.

Systemd - демон инициализации, призванный унифицировать управление устройствами и процессами, заменив существующие программные средства, включая init.

Sytemd является свободным ПО с лицензией GNU v.2.1, который опирается на

концепцию сервиса, выделяя:

•сокет-активные и шино-активные сервисы, что часто приводит к лучшему распараллеливанию взаимозависимых сервисов;

•сервисные процессы cgroups, использующие специальные идентификаторы

групп, вместо идентификаторов процессов PID, что гарантирует отслеживание главных демонов приложений и не допускает потери процессов, при их разветвлении.

Многие дистрибутивы Linux — Fedora, Mageia, Mandriva, Rosa, OpenSUSE - уже используют systemd.

Википедия дает следующее представление о компонентах systemd (см. рисунок 6.7):

Рисунок 6.7 - Компоненты systemd (Википедия).

Замечание

ОС Ubuntu и ее клоны используют systemd лишь — опционально - для управления устройствами, возлагая управление процессами на upstart.

ОС УПК АСУ использует systemd, включая предыдущее замечание.

160

6.7 Стандарты POSIX и сигналы

Любое управление связано с взаимодействием.

Базовые способы управления процессами:

•порождение процесса с помощью системного вызова fork(...) и передача ему

алгоритмического содержания в виде кода и всех открытых ресурсов родителького процесса;

•изменение алгоритмического содержимого процесса и дополнительных дан-

ных посредством системного вызова exec(...).

Развитие способов управления процессами начинается с сигналов.

С прикладной точки зрения, каждый процесс — это прикладная программа, выполняющая расчетную часть некоторой задачи или обеспечивающая решение этой задачи.

Для ОС, процесс - это функциональный элемент, требующий ресурсов процессора, оперативной памяти, файловой системы или некоторых средств коммуникации. Необходимые ресурсы вычислительной системы (комплекса), определяются алгоритмом решения задачи и потребностями самой задачи в этих ресурсах, что приводит к конкуренции между процессами.

В конечном итоге, конкуренция между процессами приводит к захвату ресурса одним из них и ожиданию освобождения ресурса другими.

Захват и ожидание задачей ресурсов может привести к тупикам или, по крайней мере, к двум негативным следствиям:

•увеличению общего времени решения задачи;

•неэффективному использованию задачей процессора ЭВМ.

Вряде случаев, удается частично устранить эти недостатки, разбив задачу на подзадачи, которые решаются отдельными процессами ОС, или синхронизировав взаимодействие процессов с помощью средств отличных от средств их порождения и завершения.

Важнейшим таким средством являются сигналы, информирующие процессы ОС о

возникновении в системе событий.

Понятие сигнала приводится как в инструментальных средствах языка программирования С, так и в стандарте POSIX (Portable Operating System Interface for uniX), описывающего соответствующие интерфейсы ядра ОС.

Стандарт POSIX-2001, под сигналом понимает механизм, с помощью которого процесс или поток управления уведомляют о некотором событии, произошедшем в системе, или подвергают воздействию этого события.

Примерами подобных событий могут служить:

•аппаратные исключительные ситуации;

•специфические действия процессов.

Термин "сигнал" используется также для обозначения самого события.

Источник: https://studfile.net/preview/16438529/