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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!