Семафоры


Для управления синхронизацией процессов используются семафоры – неотрицательная целая переменная. Для каждого семафора доступны 2 операции: 1. р – операция – уменьшение семафора на 1, захват ресурса: уменьшает семафор если значение положительно. Иначе процесс, вызвавший операцию должен ждать, пока уменьшение не станет возможным. 2. v – операция – увеличение семафора, освобождение ресурса. Производится одной инструкцией для того, чтобы предотвратить доступ к другим процессам. Если существует процесс в состоянии ожидания, то v операция переводит его в состоянии готовности.
Двоичный семафор.
Это семафор, для которого возможны два состояния — 0 и 1. Т. к. только один процесс может уменьшить состояние семафора до 0, то гарантируется взаимное исключение процессов.
Алгоритм:
Set s=1;
P1: p(s);
………
Критический участок кода.
………
v(s);
goto p1
Ассемблерная реализация двоичного семафора.
sem db 1
wait: mov AL,0
xcng AL,sem
cmp AL,0
je wait
<Критический участок кода>
mov sem,1

Множественные семафоры.
n = 3 – троичный семафор.

Ограничивает количество процессов, одновременно использующих критический ресурс до максимального значения, определяемого при создании семафора.
Виды семафоров
1. Счетные семафоры. Допускают изменение значения семафора на некоторое число R.(p – операция p(s,R);v – операция v(s,R)). Смысл заключается в следующем: существует некоторое R количество ресурса. Операция захвата уменьшает количество ресурса на R единиц. V – операция освобождает ресурс размером R.
2. Тест семафоры — содержат ещё один параметр Т, который показывает сколько ресурса должно оставаться свободным, при входе в критический участок кода.

Загрузка...