Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Акуленок_часть1.doc
Скачиваний:
43
Добавлен:
13.11.2019
Размер:
1 Мб
Скачать
☆

6.1.3. Дисциплины обработки процесса

Они могут быть определены как следующие (табл. 6.2):

Таблица 6.2.

Дисциплины обработки процесса

Действие

Ожидание

Перезапуск

initdefault

неприменимо

неприменим

boot

нет

нет

bootwait

да

нет

once

нет

нет

wait

да

нет

respawn

нет

да

powerfail

нет

нет

sysinit

да

нет

off

неприменимо

неприменим

initdefault – инициируется после загрузки и задает исходный уровень выполнения. Поле процесса игнорируется.

boot – определяет команду, заданную в поле process, как процедуру загрузки. Не ждет окончания порожденного процесса перед чтением следующей строки, выполняется только во время загрузки системы.

bootwait – тоже, но с ожиданием завершения процесса; выполняется при переходе с однопользовательского на многопользовательский режим после запуска системы.

once – запускает процесс однократно.

wait – выполняет процесс и ждет его завершения перед чтением следующих строк.

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

powerfail – выполняется при получении демоном init сигнала сбоя питания или когда запрашивается выключение питания.

sysinit – выполняет действия, необходимые для приведения системы в состояние, в котором init сможет запросить информацию у оператора, т.е. выполняет процессы, которые должны предшествовать выводу приглашения на консоль.

off – завершает процесс на данном уровне, если он выполняется.

Некоторые действия представлены в графическом виде (рис. 6.1).

Рис. 6.1. Особенности выполнения действий при переходе на различные уровни выполнения

6.1.4. Запуск и этапы работы процесса init

Процесс init запускается ядром сразу после монтирования файловых систем. Затем init осуществляет переход в тот режим выполнения, который ему указан как initdefault в файле /etc/inittab. Переход к этому режиму выполнения фактически означает запуск всех программ, которые перечислены в этом файле для указанного режима выполнения. Схема работы процесса init показана на рис. 6.2.

Рис. 6.2. Работа процесса init

В приведенном примере файла /etc/inittab система по умолчанию переходит на уровень 1.

Если эта запись с действием initdefault в файле /etc/inittab присутствует, то она должна быть расположена в первой строке. При наличии такой строки процесс init использует ее для определения начального уровня выполнения.

Например:

init:2:initdefault:

Если в данной строке не указано значение в втором поле, то считается по умолчанию, что его значение равно 0123456789. Поэтому в качестве уровня будет выбран старший уровень 9.

В файле /etc/inittab может и не быть строки с действием initdefault. Тогда init запросит в момент загрузки начальное значение уровня выполнения у пользователя через виртуальную системную консоль /dev/syscon.

Общая схема запуска процессов, представленных в файле inittab, следующая (см. рис. 6.2).

  1. Процесс init читает весь файл и ищет строки, для которых необходимо выполнить перезапуск процесса на данном уровне выполнения.

В отношении каждой такой найденной строки init запускает указанный процесс и порождает своего потомка.

  1. После того, как все запуски процессов из файла были завершены, init переходит в состояние ожидания.

Init ждет выполнения следующих возможных событий:

  • возможно завершится один из его потомков;

  • будет получен сигнал об ошибке питания;

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

Если хотя бы одно из этих событий происходит, то процесс init вновь просматривает файл inittab.

Имеется возможность заставить процесс init, который в обычном состоянии находится в состоянии ожидания указанных трех видов событий, немедленно начать просмотр и обработку файла inittab.

Для этого служит команда:

$ init Q

или

$ init q (для System V)

Кроме того, действия по повторному обращению к файлу inittab инициируются в AIX (IBM) по команде:

$ telinit q

Если процесс init получает запрос по данной команде о смене уровня выполнения, то он рассылает сигнал–предупреждение SIGTERM всем процессам, которые не должны работать на указанном в команде уровне. Далее предусматривается 20 секунд на их завершение. Если по истечении данного времени на терминале еще останутся процессы, которые не отреагировали на такого рода предупреждение, то они принудительно терминируются сигналом SIGKILL через 5 секунд

Пример файла inittab:

strt:2:initdefault:

lev0:06s:wait:/etc/rc0 >/dev/console 2>&1 < /dev/console

lev2:23:wait:/etc/rc2 > /dev/console 2>&1 < /dev/console

lev3:3:wait:/etc/rc3 > /dev/console 2>&1 < /dev/console

rebt:6:wait:/etc/init.d/announce restart

ioin::sysinit:/sbin/ioinitrc > /dev/console 2>&1

brcl::bootwait:/sbin/bcheckrc < /dev/console 2>&1

cons:123456:respawn:/usr/sbin/getty

powf::powerwait:/sbin/powerfail > /dev/console 2>&1

В приведенном примере файла inittab при включении питания система по умолчанию переключится на уровень 2.

Уровни 0 (прекращение работы), 6 (перезагрузка) и s (один пользователь) выполняют сценарий /etc/rc0, который, в свою очередь может вызывать другие сценарии.

Уровни 2 и 3 (многопользовательский режим/расширенный многопользовательский режим) выполняют сценарий /etc/rc2.

Уровень 3, кроме того, выполняет сценарий /etc/rc3.

Уровень 6 (перезагрузка) выводит сообщение о происходящем путем выполнения сценария /etc/init.d/announce с аргументом restart. Перед выводом на консоль приглашения входа в систему для любого уровня выполняется /sbin/ioinitrc, чтобы проверить соответствие между данными ядра и файлом конфигурации ввода/вывода.

При любом переключении с однопользовательского режима на многопользовательский выполняется /sbin/bcheckrc, чтобы проверить целостность файловой системы.

Для уровней 1–6 запускается процесс getty, если он не существует. Для любого уровня, где запрашивается выключение питания, выполняется сценарий /sbin/powerfail.