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

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

Алгоритм выполнения операции P

Рассмотрим еще один феномен, связанный с использованием семафоров в однопроцессорной системе. Предположим, что два процесса, A и B, конкурируют за семафор. Процесс A обнаруживает, что семафор свободен и что процесс B приостановлен; значение семафора равно -1. Когда с помощью операции V процесс A освобождает семафор, он выводит тем самым процесс B из состояния приостанова и вновь делает значение семафора нулевым. Теперь предположим, что процесс A, по-прежнему выполняясь в режиме ядра, пытается снова заблокировать семафор. Производя операцию P, процесс приостановится, поскольку семафор имеет нулевое значение, несмотря на то, что ресурс пока свободен. Системе придется "раскошелиться" на дополнительное переключение контекста. С другой стороны, если бы блокировка была реализована на основе однопроцессорной схемы (sleep-lock), процесс A получил бы право на повторное использование ресурса, поскольку за это время ни один из процессов не смог бы заблокировать его. Для этого случая схема sleep-lock более подходит, чем схема с использованием семафоров.

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

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

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

{

 Pprim(semaphore.lock);

 увеличить (semaphore.value);

 if (semaphore.value ‹= 0)  {

  удалить из списка процессов, приостановленных по семафору, первый по счету процесс;

  перевести его в состояние готовности к запуску;

 }

 Vprim(semaphore.lock);

}

Рисунок 12.9.

|< Пред. 635 636 637 638 639 След. >|

Java книги

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