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

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



алгоритм semop /* операции над семафором */

входная информация:

 (1) дескриптор семафора

 (2) список операций над семафором

 (3) количество элементов в списке

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

{

 проверить корректность дескриптора семафора;

start:

 считать список операций над семафором из пространства задачи в пространство ядра;

 проверить наличие разрешений на выполнение всех операций;

 for (каждой операции в списке)  {

  if (код операции имеет положительное значение)  {

  прибавить код операции к значению семафора;

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

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

  вывести из состояния приостанова все процессы, ожидающие увеличения значения семафора;

 }

 else

  if (код операции имеет отрицательное значение)  {

   if (код операции + значение семафора ›= 0) {

    прибавить код операции к значению семафора;

    if (флаг UNDO установлен)

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

    if (значение семафора равно 0)

     вывести из состояния приостанова все процессы, ожидающие обнуления значения семафора;

   continue;

  }

  выполнить все произведенные над семафором в данном сеансе операции в обратной последовательности (восстановить старое значение семафора);

  если (флаги не велят приостанавливаться)

   вернуться с ошибкой;

  приостановиться (до тех пор, пока значение семафора не увеличится);

  перейти на start

|< Пред. 595 596 597 598 599 След. >|

Java книги

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