shmctl(id, cmd, shsstatbuf);
Обобщение классического механизма семафоров общего вида Диекстры
Целесообразность обобщения сомнительна
Обычно использовался облегченный вариант двоичных семафоров
Известен алгоритм реализации семафоров общего вида на основе двоичных
Семафор в ОС UNIX:
Три системных вызова:
id = semget(key, count, flag);
oldval = semop(id, oplist, count);
Элемент массива oplist:
Если проверка прав доступа проходит нормально
Значение поля операции положительно
Значение поля операции равно нулю
Значение поля операции отрицательно
(1) его абсолютное значение меньше или равно значению семафора
(2) значение семафора меньше абсолютной величины поля операции
Стремление добиться возможности избегать тупиковых ситуаций
Системный вызов semop выполняется как атомарная операция
Флаг IPC_NOWAIT заставляет ядро ОС UNIX не блокировать текущий процесс
semctl(id, number, cmd, arg);
Можно уничтожить индивидуальный семафор в указанной группе
Четыре системных вызова:
msgqid = msgget(key, flag);
Сообщения хранятся в виде связного списка
Декскриптор очереди сообщений - индекс в массиве заголовков очередей сообщений
В заголовке очереди хранятся:
· count - задает размер сообщения в байтах
Условия успешной постановки сообщения в очередь:
Процесс продолжает свое выполнение
Ядро активизирует (пробуждает) все процессы, ожидающие поступления сообщений из очереди
Превышается верхний предел суммарной длины сообщений
count = msgrcv(id, msg, maxcount, type, flag);
Значением параметра type является нуль
Значение type есть положительное целое число
Значение type есть отрицательное целое число
В очереди отсутствуют сообщения, соответствующие спецификации type
msgctl(id, cmd, mstatbuf);
4.1 Старт системы
4.2 run levels
4.3 Остановка системы
4.4 Конфигурирование ядра системы
4.5 Инсталирование периферии на примере ленточного накопителя.
4.6 Инсталирование софта
4.7 Управление процессами
В самом начале, после включения питания выполяется последовательность команд записанная в Boot ROM машины. Boot ROM выполняет общую диагностику и проводит инициализацию устройств необходимую для дальнейшей загрузки операционной системы. В задачи Boot ROM кода входит:
· Определение типа процессора
· Инициализация и тест таймеров
· Нахождение и инициализация видео консоли
· Загрузка конфигурации с EEPROM
· Инициализации системы ввода-вывода включая пользовательский интерфейс и аудио
· Распечатка на консоли copyright и других баннеров, типа процессора EEPROM статуса, количества памяти
· Тестирование памяти и распечатка общего количества памяти и найденных в результате теста ошибок
· Тест и инициализация системы прямого доступа к памяти (DMA)
· Поиск и распечатка информации о встроенных интерфейсных платах
· Тест и инициализация SCSI интерфеса и интерфейса локольной сети
· Предложение о выборе вариантов загрузки
При этом возможен вариант запгрузки как с SCSI устройства (диск, CDROM, лента, …) так и через локальную сеть. Загрузочный диск должен быть предварительно сконфигурирован. Так как обьем Boot ROM не может быть большим, в его задачи входит загрузка вторичного загрузчика операционной системы. Для этого загрузочный диск должен быть инициализирован определенным образом. Помимо стандартной файловой системы он еще должен содержать так называемы LIF (Logical Interchange Fomat) раздел в котором записан вторичный загрузчик и ряд необходимых утилит. Посмотреть состав LIF блока можно с помощью команды lifls принимающей в качестве аргумента имя блочного устройства диска:
lifls /dev/dsk/c0t5d0
ISL AUTO HPUX LABEL
Для создания LIF области используется команда lifinit (инициализируються только диски которые не являются подмонтированными файловыми системами). Для записи в или копирования из LIF области используется утилита lifcp .Например, команда:
lifcp /dev/dsk/c0t5d0:ISL a
копирует файл ISL из LIF области в файл с именем а. Во время инсталяции LIF область создается автоматически и необходимости работы с ней практически не появляется, за исключением случаев сбоев.
После завершения всех тестов и выполнения поиска возможных устройств загрузки в и в случае если параметр SECURE записанный в EEPROM равен OFF возможен вход в меню загрузки boot ROM при нажатии на клавишу ESC. Если SECURE=OFF и процесс загрузки не прерывался нажатием ESC а также EEPROM параметр AUTOBOOT=ON, boot ROM попытается загрузить из LIF области вторичный загрузчик ISL. Устройство загрузки при этом выбирается из EEPROM параметра PRIMARY BOOT PATH. В случае неудачной загрузки, boot ROM будет грузить ISL из устройства имя которого записано в EEPROM параметре ALTERNATE BOOT PATH. Если не удается загрузиться и от туда, система выйдет в boot ROM меню. Для поиска всех возможных устройств загрузки boot ROM имеет команду SEARCH. Для загрузки с какогото конкретного устройства найденого командой SEARCH используется команда BOOT: