Читайте также:
|
|
Объектом операций Р и V является "семафор" (аналог с железнодорожным - путь открыт или закрыт), как неотрицательная целая переменная. Для каждого запрошенного ресурса и события заводится свой семафор. К семафору применяются две операции: Р (имя семафора) - уменьшает семафор на единицу, если возможно (когда не 0) и V (имя светофора) - увеличивает семафор на единицу. Необходимое условие: Р и V должны выполняться как неделимые.
Формально операции P и V для семафора S можно определить следующим образом:
P(S): if S>0
then S=S-1
else блокировать процесс по S, поставить процесс в "ожидание".
V(S): if есть ожидающий процесс по семафору S
then перевести процесс в "готов"
S=S+1
Как неделимые последовательности они выполняются под управлением ОС. Операции P(S) и V(S) включаются в каждую программу, которая имеет критические интервалы для взаимоисключения и в точки синхронизации. По ним осуществляется программно-управляемое прерывание.
Семафор S можно реализовать в виде записи с двумя полями. В одном поле хранится целое значение S, во втором - указатель на список процессов, заблокированных по S. В PCB для каждого ожидающего процесса указывается причина ожидания по семафору S.
P(S) включается в начале критического интервала, а V(S) - в конце. S при запуске (инициализации) устанавливается в "1". Если S для выполняющегося процесса ¹0, то операция P(S) уменьшает S, в противном случае процесс переводится в "ожидание". Другие процессы по мере получения ЦП доходят до P(S) и, если S=0, то операция P(S) переводит их в состояние "ожидание", т.е. только один процесс может войти в критический интервал. По достижении V(S) выполняющегося процесса (он выполнял критический интервал) в S будет записана "1". Если хотя бы один процесс был остановлен этим семафором, он будет переведен в состояние "готово".
Для синхронизации по данным или событиям семафор инициализируется в 0. P(S) ставится в точке синхронизации процесса, который должен ожидать выполнения какого-либо события. Пока S=0, этот процесс будет находиться в режиме "ожидание". Второй процесс в точке свершения события имеет V(S). Как только второй процесс дойдет до V(S), семафор переводится в "1", а первый процесс перейдет в "готово". Если второй процесс раньше достигнет V(S), чем первый процесс - P(S), то первый не перейдет в "ожидание", так как S=1.
В ряде машин имеются специальные команды по реализации P(S) и V(S). Современные ОС имеют средства работы с семафорами.
Например, в OS/2 имеются системные (именованные) семафоры и локальные (неименованные). Системные семафоры обычно используются для синхронизации задач в разных процессах, локальные — как средство синхронизации задач в рамках одного процесса. Наборы функций, используемых для управления системными и локальными семафорами, почти полностью совпадают. Только в некоторых случаях, оговариваемых особо и связанных с межпроцессными взаимодействиями, можно использовать системные семафоры.
Дата добавления: 2015-10-02; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Синхронизация процессов | | | Монитор Хоара |