[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Объекты SRC

Контроллер системных ресурсов (SRC) работает с тремя классами объектов:

Все функции SRC предназначены для работы с объектами этих классов. Предопределенный набор дескрипторов классов объектов определяет возможный набор конфигураций подсистемы, поддерживаемых SRC.

Примечание: Для работы SRC требуется только класс объектов подсистем. Классы объектов типа субсервера и объектов уведомления необходимы только в некоторых системах.

Класс объектов подсистем

Класс объектов подсистем содержит дескрипторы всех подсистем SRC. Для того чтобы SRC смог работать с подсистемой, ее нужно определить в этом классе.

Дескрипторы класса объектов подсистем определены в структуре SRCsubsys, хранящейся в файле /usr/include/sys/srcobj.h. Краткое описание дескрипторов подсистем и связанных с ними флагов команд mkssys и chssys приведено в таблице Дескрипторы объектов подсистем и значения по умолчанию.

Дескрипторы объектов подсистем и значения по умолчанию
Дескрипторы Значения по умолчанию Флаги
Имя подсистемы

-s
Имя команды подсистемы

-p
Аргументы команды

-a
Приоритет выполнения 20 -E
Несколько экземпляров NO -Q -q
ИД пользователя

-u
Синоним (ключ)

-t
Запуск ONCE -O -R
stdin /dev/console -i
stdout /dev/console -o
stderr /dev/console -e
Способ обмена данными Сокеты -K -I -S
Тип сообщений подсистемы

-m
Ключ очереди IPC для обмена данными

-l
Имя группы

-G
Сигнал SIGNORM

-n
Сигнал SIGFORCE

-f
Показать Да -D -d
Время ожидания 20 секунд -w
ИД контроля



Дескрипторы объектов подсистем определяются следующим образом:

Имя подсистемы Задает имя объекта подсистемы. Размер имени не должен превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). Этот дескриптор должен быть задан в соответствии со стандартом POSIX. Это обязательное поле.
Имя команды подсистемы Задает полное имя программы, выполняемой командой запуска подсистемы. Размер полного имени не должен превышать 200 байт (199 однобайтовых символов или 99 многобайтовых символов). Имя должно быть задано в соответствии со стандартом POSIX. Это обязательное поле.
Аргументы команды Задает аргументы команды запуска подсистемы. Размер аргументов не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Список аргументов анализируется демоном srcmstr по тем же правилам, которые применяются оболочками. Например, строки, заключенные в кавычки, передаются как строковый аргумент, а пробелы между строками считаются разделителями аргументов.
Приоритет выполнения Задает приоритет, с которым будет выполняться процесс подсистемы. Этот приоритет назначается всем подсистемам, запущенным с помощью демона srcmstr. Значение по умолчанию - 20.
Несколько экземпляров Задает число экземпляров подсистемы, которые могут выполняться одновременно. Значение Нет (флаг -Q ) указывает, что в каждый момент времени может выполняться только один экземпляр подсистемы. В этом случае запрос на запуск еще одного экземпляра подсистемы или подсистемы с тем же ключом очереди сообщений IPC не будет выполнен. Значение Да (флаг -q) указывает, что с одной и той же очередью сообщений IPC могут работать несколько подсистем, и одновременно может выполняться несколько экземпляров подсистемы. Значение по умолчанию - Нет.
ИД пользователя Задает ИД пользователя (в численном виде), у которого есть права на запуск подсистемы. Значение 0 соответствует пользователю root.
Синоним Задает символьную строку, которая будет применяться в качестве альтернативного имени подсистемы. Размер символьной строки не должен превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов). Это необязательное поле.
Запуск Указывает, должен ли демон srcmstr перезапускать подсистему после аварийного завершения работы. Значение RESPAWN (флаг -R) указывает, что демон srcmstr должен перезапускать подсистему. Значение ONCE (флаг -O) указывает, что демон srcmstr не должен перезапускать систему, в которой произошел сбой. Если указано значение RESPAWN, то система будет перезапускаться максимум два раза в течение указанного периода ожидания. Если подсистему, в которой произошел сбой, не удалось запустить снова, то запускается метод уведомления. Значение по умолчанию - ONCE.
Стандартный файл/устройство ввода Задает файл или устройство, из которого система получает ввод. Значение по умолчанию - /dev/console. Размер этого поля не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Если в качестве способа обмена данными выбраны сокеты, то значение этого поля игнорируется.
Стандартный файл/устройство вывода Задает файл или устройство, на которое система отправляет вывод. Размер этого поля не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Значение по умолчанию - /dev/console.
Стандартный файл/устройство ошибок Задает файл или устройство, на которое система будет отправлять сообщения об ошибках. Размер этого поля не должен превышать 200 байт, с учетом NULL-терминатора (199 однобайтовых символов или 99 многобайтовых символов). Все ошибки должны обрабатываться методом уведомления. Значение по умолчанию - /dev/console.

Примечание: Информация о серьезных ошибках записывается в протокол ошибок.
Способ обмена данными Задает способ обмена данными между демоном srcmstr и подсистемой. Можно выбрать один из трех способов: IPC (-I), сокеты (-K) или сигналы (-S). Значение по умолчанию - сокеты.
Ключ очереди IPC для обмена данными Задает десятичное значение, соответствующее ключу очереди IPC. Это значение демон srcmstr применяет для обмена данными с подсистемой. Это поле применяется только подсистемами, для которых в качестве способа обмена данными выбрана очередь IPC. Для того чтобы создать уникальный ключ, воспользуйтесь функцией ftok, указав полное имя и ИД. Демон srcmstr создает очередь сообщений перед запуском подсистемы.
Имя группы Задает имя группы подсистемы. Размер этого поля не должен превышать 30 байт (29 однобайтовых символов или 14 многобайтовых символов). Это необязательное поле.
Тип сообщений подсистемы Задает тип сообщений, которые будут отправляться в очередь сообщений подсистемы. Подсистема применяет это значение при получении сообщений с помощью функции msgrcv или msgxrcv. Это поле является обязательным, если в качестве способа обмена данными выбрана очередь сообщений.
Сигнал SIGNORM Задает значение, которое должно быть передано подсистеме при отправке запроса на обычное завершение. Это значение применяется только системами, которые в качестве способа обмена данными используют сигналы.
Сигнал SIGFORCE Задает значение, которое должно передаваться подсистеме при отправке запроса на принудительное завершение. Это значение применяется только системами, которые в качестве способа обмена данными используют сигналы.
Показывать значение Указывает, должно ли в выводе команды lssrc -a и lssrc -g указываться состояние неработающей подсистемы. Если оно должно быть показано, то укажите флаг -d, если нет - флаг -D. Значение по умолчанию - -d (показывать).
Время ожидания Задает интервал времени в секундах, в течение которого подсистема должна запуститься или завершить работу перед тем, как будет выполнено альтернативное действие. Значение по умолчанию - 20 секунд.
ИД контроля Задает ИД контроля для подсистемы. ИД создается автоматически демоном srcmstr при определении подсистемы и используется средством защиты системы, если оно настроено. Значение этого поля нельзя задать или изменить с помощью программы.

Информация об определении и изменении объектов подсистем приведена в разделе Определение подсистемы в SRC.

Класс объектов типов субсервера

Если в подсистеме есть субсерверы, которым демон srcmstr будет отправлять команды уровня субсервера, то в данном классе должен быть соответствующий объект.

Этот класс объектов содержит три дескриптора, которые определены в структуре SRCsubsvr, хранящейся в файле srcobj.h:

ИД субсервера (ключ) Задает имя объекта типа субсервера. Набор имен для типов субсерверов совпадает с набором допустимых значений флага -t команд субсервера. Длина имени не должна превышать 30 байт, с учетом NULL-терминатора (29 однобайтовых символов или 14 многобайтовых символов).
Имя подсистемы-владельца Задает имя подсистемы, которой принадлежит объект субсервера. В этом поле указывается ссылка на класс объектов подсистем SRC.
Кодовый знак Задает десятичное число, идентифицирующее субсервер. Кодовый знак передается подсистеме, управляющей субсервером, в поле object структуры subreq, то есть структуры запроса SRC. Если в команде указано и имя объекта субсервера, демон srcmstr передает подсистеме кодовый знак в поле objname структуры subreq. См. "Пример структуры запроса SRC" в файле spc.h.

В командах субсервер идентифицируется по типу необязательному имени экземпляра. С помощью типа субсервера демон SRC определяет подсистему, управляющую субсервером; имя субсервера не применяется.

Информация об определении и изменении объектов типа субсервера приведена в разделе Определение подсистемы в SRC.

Класс объектов уведомления

С помощью этого класса демон srcmstr вызывает процедуры подсистемы для обработки ошибок в ее работе. Когда демон SRC получает сигнал SIGCHLD, означающий завершение процесса подсистемы, он проверяет состояние подсистемы (обслуживаемой демоном srcmstr) и определяет, вызвано ли завершение командой stopsrc. Если команда stopsrc не выполнялась, завершение считается аварийным. Если в определении не задана опция перезапуска, либо попытка перезапуска не удалась, демон srcmstr пытается прочитать объект уведомления, связанный с данной подсистемой. Если такой объект задан, то выполняется метод, связанный с подсистемой.

Если объект подсистемы не найден в классе объектов уведомления, демон srcmstr проверяет, входит ли подсистема в группу. Если да, демон srcmstr пытается найти в классе объектов уведомления объект группы. Если такой объект есть, то вызывается связанный с ним метод. Таким образом, группа подсистем может применять общий метод.

Примечание: Метод уведомления подсистемы считается более приоритетным, чем метод уведомления группы. За счет этого в подсистеме, относящейся к группе одновременно запускаемых подсистем, может быть создан собственный метод восстановления и очистки.

Объекты уведомления содержат два дескриптора:

Имя подсистемы или Имя группы Задает имя подсистемы или группы, для которой определяется метод уведомления.
Метод уведомления Задает путь к процедуре, которая должна выполняться демоном srcmstr при аварийном завершении работы системы или группы.

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

Для создания объектов уведомления предназначена команда mknotify. Для изменения метода уведомления нужно удалить текущий объект уведомления с помощью команды rmnotify и создать новый объект.

mknotify Добавляет метод уведомления в базу данных конфигурации SRC
rmnotify Удаляет метод уведомления из базы данных конфигурации SRC

Демон srcmstr заносит в протокол информацию о действиях подсистемы по исправлению ошибок. Ответственность за отправку сообщений об ошибках ложится на саму подсистему.

Связанная информация

Глава 26, Контроллер системных ресурсов

Способы обмена данными с SRC

Определение подсистемы в SRC

Команды mkssys, mkserver, mknotify, rmnotify

Функции defssys и addssys


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]