Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОИ 17-32.docx
Скачиваний:
14
Добавлен:
25.09.2019
Размер:
57.84 Кб
Скачать
  1. Дайте понятие семафора.

Семафор – это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации.

Двоичные (бинарные) семафоры могут принимать только значения 0 или 1 (true или false), то есть могут находиться в двух состояниях: закрыт и открыт. Считающие семафоры (семафоры со счетчиками) могут принимать целые значения. Считающий семафор открыт, если значение счетчика больше 0.

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

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

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

Процедура инициализации

Первый процесс

Второй процесс

procedure INIT;

binary semaphore B ;

begin

B := 1 ; {Открыт}

start(P1) ;

start(P2)

end INIT .

process P1;

binary semaphore B ;

begin

while true do

begin

BEFORE1 ;

P(B) ;

CS1 ;

V(B) ;

AFTER1 ;

end

end P1 .

process P2;

binary semaphore B ;

begin

while true do

begin

BEFORE2 ;

P(B) ;

CS2 ;

V(B) ;

AFTER2 ;

end

end P2 .

  1. Опишите семафорные примитивы для бинарных семафоров и семафоров со счетчиками.

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

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

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

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

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

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

Операции выборки значения семафорной переменной S, ее изменения и сохранения не могут быть прерваны. Во время выполнения последовательности этих операций в процедурах P и V, вызванных одним процессом, над каким-либо семафором он недоступен для других процессов. Операция hold(S) означает перевод процесса в состояние ожидания на семафоре S и выход из P. Это ожидание не должно быть “занятым”. Для устранения занятого ожидания с каждым семафором связывается список блокирования (список процессов, ожидающих открытия семафора). Процесс, который не может продолжиться после выполнения P(S), будет заблокирован с сохранением его состояния в соответствующем S списке блокирования. Операция release(S) – выполняет проверку списка блокирования, связанного с семафором S, если этот список не пуст, то активизируется некоторый процесс из этого списка, пропускается через семафор, а значение семафора изменяется при этом соответствующим образом (бинарный семафор снова закрывается, а для семафора со счетчиком возвращенная процессом, выполнившем операцию V(S), единица ресурса передается очередному процессу из списка).

S

Бинарный семафор

Считающий семафор

с неотрицательными

значениями счетчика

Общий

считающий семафор

P(S)

if S = 0 then Hold(S)

else S := 0

if S = 0 then Hold(S)

else S := S – 1

S := S – 1;

if S < 0 then Hold(S)

V(S)

if not Empty(S)

then Release (S)

else S := 1 ;

if not Empty(S)

then Release (S)

else S := S + 1 ;

S := S + 1 ;

if S<= 0 then Release (S)