The design of the UNIX Operating System 33 страница



дет вызов V(mutex).

 

Как строится работа процесса-отправителя с номером i? Процесс, посылающий сообщение, тоже ждет, пока он не сможет иметь монополию на использование разделяемой памяти, выполнив операцию P(mutex). Далее он проверяет, есть ли место в буфере, и если да, то помещает сообщение в буфер, изме-няет счетчики и смотрит, есть ли процессы, ожидающие сообщения. Если нет, выполняет V(mutex) и вы-ходит из критической области, если есть, "будит" один из них (с номером j), вызывая V(cj), с одновре-менным удалением этого процесса из списка процессов, ожидающих сообщений, и выходит из критиче-ского региона без вызова V(mutex), предоставляя тем самым возможность разбуженному процессу про-читать сообщение. Если места в буфере нет, то процесс -отправитель заносит себя в очередь процессов, ожидающих возможности записи, и вызывает V(mutex) и P(ci).

 

Реализация семафоров и передачи сообщений с помощью мониторов

 

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

 

Самый простой способ такой реализации выглядит следующим образом. Заведем внутри монитора пере-менную-счетчик, связанный с эмулируемым семафором список блокируемых процессов и по одной ус-ловной переменной на каждый процесс. При выполнении операции P над семафором вызывающий про-цесс проверяет значение счетчика. Если оно больше нуля, уменьшает его на 1 и выходит из монитора. Если оно равно 0, процесс добавляет себя в очередь процессов, ожидающих события, и выполняет опера-цию wait над своей условной переменной. При выполнении операции V над семафором процесс увеличи-вает значение счетчика, проверяет, есть ли процессы, ожидающие этого события, и если есть, удаляет один из них из списка и выполняет операцию signal для условной переменной, соответствующей процес-су.

 

Реализация семафоров и мониторов с помощью очередей сообщений

 

Покажем, наконец, как реализовать семафоры с помощью очередей сообщений. Для этого воспользуемся более хитрой конструкцией, введя новый синхронизирующий процесс. Этот процесс имеет счетчик и очередь для процессов, ожидающих включения семафора. Для того чтобы выполнить операции P и V,


Основы операционных систем 64

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

 

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

 

Поскольку мы показали ранее, как из семафоров построить мониторы, мы доказали эквивалентность мо-ниторов, семафоров и сообщений.

 

Заключение

 

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


Дата добавления: 2021-01-21; просмотров: 92; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!