Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 664 из 715



алгоритм sighandle /* алгоритм обработки сигналов */

входная информация: отсутствует

выходная информация: отсутствует

{

 if (текущий процесс является чьим-то спутником или имеет прототипа)  {

  if (сигнал игнорируется)  return;

  if (сигнал поступил во время выполнения системной функции)

   поставить сигнал перед процессом-спутником;

  else  послать сообщение о сигнале периферийному процессу;

  }

  else { /* периферийный процесс */

   /* поступил ли сигнал во время выполнения системной  функции или нет */

  послать сигнал процессу-спутнику;

 }

}

алгоритм satellite_end_of_syscall /* завершение системной функции, вызванной периферийным процессом */

входная информация: отсутствует

выходная информация: отсутствует

{

 if  (во время выполнения системной функции поступило прерывание)

  послать периферийному процессу сообщение о прерывании, сигнал;

 else /* выполнение системной функции не прерывалось */

  послать ответ: включить флаг, показывающий поступление сигнала;

}

Рисунок 13.7. Обработка сигналов в периферийной системе

Допустим, что периферийный процесс приостановил свою работу на то время, пока процесс-спутник исполняет системную функцию от его имени. Если сигнал возникает в другом месте, процесс-спутник обнаруживает его раньше, чем периферийный процесс. Возможны три случая.

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

2. Если процесс сделал указание об игнорировании сигнала данного типа, спутник продолжает следовать алгоритму выполнения системной функции, не выходя из состояния приостанова по longjmp. В ответе, посылаемом периферийному процессу, сообщение о получении сигнала будет отсутствовать.

3.

|< Пред. 662 663 664 665 666 След. >|

Java книги

Контакты: [email protected]