Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системы реального времени.-6.pdf
Скачиваний:
27
Добавлен:
05.02.2023
Размер:
2.18 Mб
Скачать

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