Существует две формы взаимодействия процессов:

  1. передача данных между процессами (коммуникация)
  2. синхронизация одного или нескольких процессов друг с другом

Часто эти формы сочетаются. Например, один процесс нуждается в данных, которые подготавливаются другим процессом и должен дожидаться, когда они будут готовы.

На обработчик прерываний часто возлагается обязанность активизировать приостановленный процесс, ожидающий реакции из внешней среды.

Характерной особенностью сигнала является его близость с понятием прерывания.

Сигналом называется короткое сообщение (код сигнала), посланное от одного процесса другому, вызывающее асинхронное выполнение процесса-адресата как реакцию на сигнал, с восстановлением прерванного хода процесса по окончании обработки сигнала.

OS-9 для своих целей использует сигналы с порядковыми номерами от 0 до 255. Действие посылаемого сигнала на процесс-адресат состоит в следующем:

  1. Если процесс не был активен, то он становится в очередь активных процессов в соответствии с установленным режимом диспетчеризации.
  2. Когда процесс, будучи текущим процессом, окажется в состоянии пользователя, запускается особая часть процесса, называемая обработчиком сигналов, а после завершения обработчиком сигналов своих функций выполнение процесса продолжается как до поступления сигнала.
  3. Если при получении сигнала процесс был остановлен или находился в состоянии ожидания, то после завершения обработки сигналов, выполнение процесса  начинается с команды следующей за системным вызовом, переводящим процесс в приостановленное состояние или в состояние ожидания. Если процесс-адресат в момент прихода сигнала выполнял какой-нибудь системный вызов, то обработчик сигналов не вызывается до тех пор, пока ядро не закончит выполнение этого вызова. Однако если при выполнении системного вызова процесс оказался в приостановленном состоянии, например, в драйвере устройства, ожидая прерывание, то он активизируется и продолжает выполнение с точки, следующей за системным вызовом приостановки. Это  позволяет выводить процесс из любого состояния остановки или ожидания.

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

Процедура обработки сигнала определяется как функция

Disp (Signal)

int signal

{

 .

 .

 .

}

При запуске обработчика сигнала ядро прерывает выполнение основной части прикладного процесса и инициализирует её продолжение после завершения выполнения её обработчика. Для того, чтобы эта функция распознавалась, она должна быть установлена прикладным процессом с помощью системной функции intercept(Disp).

После чего функция будет получать управление (запускаться ядром) каждый раз при появлении нового сигнала. Причем через параметр signal ей будет передаваться значение этого сигнала. 

 

Бесплатный хостинг uCoz