
- •Предисловие
- •1.1. Определения и классификации ОСРВ
- •1.3. Архитектуры построения ОСРВ
- •Вопросы для самопроверки
- •2.1. Основные понятия
- •2.2. Диспетчеризация потоков
- •2.4. Временные характеристики ОС
- •Вопросы для самопроверки
- •3.1. Стандарты на ОСРВ
- •3.2. Категории ОСРВ
- •Вопросы для самопроверки
- •4.1. Основные характеристики ОС QNX
- •4.3. Связь между процессами
- •4.3.1. Связь между процессами посредством сообщений
- •4.3.2.Связь между процессами посредством Proxy
- •4.3.3. Связь между процессами посредством сигналов
- •4.4. Сетевое взаимодействие
- •4.5. Планирование процессов
- •4.6. Первичная обработка прерываний
- •Вопросы для самопроверки
- •5. АДМИНИСТРАТОР ПРОЦЕССОВ ОС QNX
- •5.1. Создание процессов
- •5.2. Состояния процессов
- •5.3. Управление потоками
- •5.4. Управление таймером
- •5.5. Обработчики прерываний
- •Вопросы для самопроверки
- •6. УПРАВЛЕНИЕ РЕСУРСАМИ В OC QNX
- •6.1. Администраторы ресурсов
- •6.2. Файловые системы в QNX
- •6.3. Инсталляционные пакеты и их репозитарии
- •6.4. Символьные устройства ввода/вывода
- •6.5. Сетевая подсистема QNX
- •Вопросы для самопроверки
- •7. РАБОТА В QNX
- •7.1. Начальная загрузка QNX Neutrino
- •7.2. Графический интерфейс пользователя
- •Photon microGUI
- •7.3. Печать в ОС QNX
- •7.4. Средства анализа
- •7.5. Среда визуальной разработки программ
- •Вопросы для самопроверки
- •Литература
sigset_t sa_mask — дополнительная установка сигналов для изолирования (блокирования) функций, улавливающих сигнал в течение исполнения;
int sa_flags — специальные флаги, для того чтобы влиять на действие сигнала (SA_NOCLDSTOP и SA_SIGINFO):
−SA_NOCLDSTOP используется только в случае, когда сигнал является дочерним (SIGCHLD). Система не создает дочерний сигнал внутри родительского, он останавливается через
SIGSTOP;
−SA_SIGINFO сообщает Neutrino о постановке в очередь текущего сигнала. Если установлен флаг SA_SIGINFO, сигналы ставятся в очередь и все передаются в порядке очередности.
Добавление сигнала на установку:
#include <signal.h>
int sigaddset( sigset_t *set, int signo );
Функция sigaddset() добавляет signo в set по указателю, осуществляет присвоение сигнала набору. Функция sigaddset() возвращает 0 при удачном исполнении и –1 в случае ошибки;
Функция sigemptyset() осуществляет обнуление набора сигналов:
#include <signal.h>
int sigemptyset( sigset_t *set );
Эта функция возвращает 0 при удачном исполнении и –1 в случае ошибки.
5.5. Обработчики прерываний
Обработчики прерываний обслуживают прерывания аппаратной части компьютерной системы, реагируют на аппаратные прерывания и управляют на нижнем уровне передачей данных между компьютером и внешними устройствами.
Физически обработчики прерываний формируются как часть стандартного процесса QNX (например, драйвера), но они всегда выполняются асинхронно с процессом, в котором содержатся.
Обработчик прерываний обладает следующими свойствами:
105
•запускается удаленным вызовом, а не прямо прерыванием (лучше писать его на языке Си, а не на Ассемблере);
•выполняется внутри процесса, в который встроен, поэтому имеет доступ ко всем глобальным переменным процесса;
•выполняется только для разрешенных прерываний и приоритетно обслуживает прерывания более высокого уровня;
•не взаимодействует непосредственно с контроллером прерываний (микросхемой 8259). Это делает операционная система.
По одному прерыванию (если это поддерживается аппаратно) могут запускаться несколько процессов. При возникновении физического прерывания каждому обработчику прерываний передается управление. В каком порядке обработчики прерываний разделяют обработку этого прерывания — не определено.
Если вы хотите установить аппаратное прерывание, исполь-
зуйте функцию qnx_hint_attach().
Если вы хотите удалить аппаратное прерывание, используй-
те функцию qnx_hint_detach().
Можно подключить обработчик прерываний напрямую к системному таймеру таким образом, чтобы обработчик запускался по каждому прерыванию от таймера. Для установки периода используйте утилиту ticksize.
Можно также подключиться к масштабируемому прерыванию от таймера, которое выдается каждые 100 млс в зависимости от значения ticksize. Эти таймеры являются альтернативой таймерам стандарта POSIX 1003.4 при обработке прерываний нижнего уровня.
Вопросы для самопроверки
1.Какие механизмы существуют в ОС QNX для создания про-
цессов?
2.Какие фазы проходит каждый процесс?
3.В каких состояниях могут находиться процессы?
4.Расскажите про механизм управления таймером.
5.Какими свойствами обладает обработчик прерываний?
106