Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
123
Добавлен:
20.06.2014
Размер:
6.61 Mб
Скачать

47. Процессы-демоны. Система журнализации.

Под демоном понимается процессы, не предназначенные для непосредств. взаимодействия с пользователями с-мы. Существует демоны внутрисистемные. Демоны обычно рассчитаны на длительное функционирование и в некоторых с-мах огни могут работать годами без перезапуска => при его запуске принимаются меры чтобы его функционирование не мешало работе проуесса и администрированию системы.

Текущий каталог обычно меняется на корневой (чтобы не мешать админу удалять каталоги и т.д.). Демону не нужен управляющий терминал, дескрипторы стандартного I/O и вывод ошибок, но желательно чтобы дескрипторы 0,1,2 оставались открытыми, потому что демоны обычно работают с файлами т.к. если файл будет открыт с дескриптором 0,1,2 , то какая-нить процедура может случайно испортить файл =>все 3 дескриптора связывают с устройством dev/NULL – символьное потоковое уст-во, яв-ся чисто логическим. Все что в него записывается – исчезает.

Чтобы действие производимые с терминалом не влияли надемона, он обычно работает в отдельном сеансе.

Процедура старта процесса-демона:

Close(0);

(1); // Закрываем стандартные дескрипторы

(2);

// Связываем с dev/NULL:

Open(“/dev/NULL”,O_RDONLY); - чтение

Open(“/dev/NULL”,O_WRONLY); - запись

Open(“/dev/NULL”,O_WRONLY); - ошибки

// Дальше fork и запуск

If (fork()>0)

exit(0); - завершение родит. процесса.

Setsid();

Chdir(“/”);

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

Void openlog (const char *ident, int option, int facility); - открытие

Void syslog (int priority, const char *format,..); - послать сообщение демону

Void closelog (void); - закрытие

Есть еще модификация syslog – либо пишет сообщение в системный журнал, либо отправляет его на консоль, либо перенаправляет в соотв-е со списком пользователей системы (etc/syslog.conf).

Параметры:

  • Ident – это строка будет выдаваться перед каждым сообщением программы.

Чтобы начать работу с журналом прога вызывает openlog, передает первым параметром свое название , указ-ся некоторые дополн опции.

  • Через параметр facility указывается к какой подсистеме относится данная программа. Если подсистема не имеет спец значение, то ставится LOG_USER.

Функция syslog похожа на printf.

  • Priority – степень важности сообщения:

LOG_ERR – ошибки

LOG_WARN – предупреждения

LOG_INFO – информационные сообщения

Сисадмин может настроить все т.о., чтобы в файл журнала попадали сообщения с опред уровнем важности. Например: syslog(LOG_INFO,”demon with pid=%d”, getpid());

  • Функция closelog завершает работу с системой журнализации, закрывает открытые файлы и т.д.

Управление процессами-демонами можно осуществлять через сигналы SIG_HUB демон переписывает конфигурац. Файл и при необходимости даже меняется режим работы.

48. Загрузка и жизненный цикл в ос unix.

После включения ПК управление получает небольшая прога из ПЗУ. После выполнения действий по проверке оборудования эта прога определяет загрузочное устройство и считывает в память 1й сектор диска.

Потом передает управление на считанные порт. Размер загрузочного сектора в Unix обычно 512байт =>прога довольно проста и ее роль заключается в загрузке в память более сложной проги, которая записана на диске в различных областях. Эта загруженная прога будет загрузчиком ОС.

Загрузчик ОС загружает ядро и передает управление его инициализационному коду. Получается ядро инициализирует собств. подсистемы, включая драйверы устройств. Затем ядро монтирует файл. подсистему с корневого дискового устройства. Корневой каталог сразу доступен только на чтение, затем ядро готово к работе.

После этого ядро создает процесс с номером 0 – этот процесс существует только на этапе загрузки и его фукнция с помощью fork создать процесс с PID=1, после чего 0-вой процесс прекращает свое существование.

Процесс с №1 выполнит execv, чтобы загрузить в память прогу INIT. Важно чтобы INIT была в корневом дисковом устройстве. INIT – это обычная прога, написанная на С++. Процесс INIT работает все время работы системы, его завершение влечет останов системы. INIT выполняет проверку дисков, перемонтирует корневой раздел в режим чт/зап и монтирует остальные файл. системы. Инициализирует pose, запускает демонов и активирует терминалы (запуск getty). У пользователя getty создает сеанс, связанный с ее терминалом, затем с помощью exec getty запускает интерпретатор командно строки. У проги INIT сложный функционал =>выполнение большинства действий по инициализации системы возложено на скрипты системной инициализации, прога INIT только указывает на расположение скриптов.

Останов системы: стоп все процессы, размонтируются все файл системы кроме корнеовй, корневой в режим чтения и останов.