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

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

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

Оставшуюся часть алгоритма можно рассмотреть в качестве упражнения.



12.3.3.2 Wait



многопроцессорная версия алгоритма wait

{

 для (;;) { /* цикл */

перебор всех процессов-потомков:

  if (потомок находится в состоянии "прекращения существования") return ;

  P(zombie_semaphore);   /* начальное значение — 0 */

 }

}

Рисунок 12.15. Многопроцессорная версия алгоритма wait

Из главы 7 мы уже знаем о том, что во время выполнения системной функции wait процесс приостанавливает свою работу до момента завершения выполнения своего потомка.

|< Пред. 642 643 644 645 646 След. >|

Java книги

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