ВУЗ:
Составители:
12
Лекция 4. Решение задачи взаимного исключения с помощью семафоров
Семафоры - специальные переменные, которые могут разделяться параллельно вы-
полняемыми процессами. Если такая переменная может принимать 2 значения {1 и 0}, то она
называется двоичным семафором.
С каждой такой переменной связывается очередь, содержащая список процессов,
ожидающих открытия семафора. Если переменная равна единице, то семафор открыт, а при
равенстве нулю- закрыт. Кроме того, над каждым семафором S определяются специальные
операции P(S) и V(S):
P(S) – установить (S)
V(S) – освободить (S)
Будем рассматривать их как функции, реализуемые ядром операционной системы.
Выполнение этих операций может быть связано с изменением состояния процесса,
обратившегося к супервизору, а так же– с изменением состояния очереди семафора.
Для двоичного семафора определим:
Установить (S)
begin
if
S=1 then S:=0 {закрыть семафор}
else
begin
Перевести процесс, выполняющий операцию “Установить”, из состояния “активный” в со-
стояние “блокированный”;
Включить этот процесс в очередь к семафору S;
Выбрать очередной процесс для исполнения;
end;
end;
Освободить (S):
begin
if очередь семафора S не пуста then
Выбрать процесс из очереди и перевести его из состояния “блокированный” в состояние “го-
тов”;
else {открыть семафор} S:=1;
end.
Алгоритм решения задачи взаимного исключения с помощью семафоров.
Var
S: семафоp;
Begin
S:=1;
cobegin
процесс 1:begin
Установить (S);
Критический интервал 1;
Освободить (S);
Основная часть процесса 1;
end
процесс 2:begin
Установить (S);
Критический интервал 2;
Освободить (S);
Лекция 4. Решение задачи взаимного исключения с помощью семафоров
Семафоры - специальные переменные, которые могут разделяться параллельно вы-
полняемыми процессами. Если такая переменная может принимать 2 значения {1 и 0}, то она
называется двоичным семафором.
С каждой такой переменной связывается очередь, содержащая список процессов,
ожидающих открытия семафора. Если переменная равна единице, то семафор открыт, а при
равенстве нулю- закрыт. Кроме того, над каждым семафором S определяются специальные
операции P(S) и V(S):
P(S) – установить (S)
V(S) – освободить (S)
Будем рассматривать их как функции, реализуемые ядром операционной системы.
Выполнение этих операций может быть связано с изменением состояния процесса,
обратившегося к супервизору, а так же– с изменением состояния очереди семафора.
Для двоичного семафора определим:
Установить (S)
begin
if S=1 then S:=0 {закрыть семафор}
else begin
Перевести процесс, выполняющий операцию “Установить”, из состояния “активный” в со-
стояние “блокированный”;
Включить этот процесс в очередь к семафору S;
Выбрать очередной процесс для исполнения;
end;
end;
Освободить (S):
begin
if очередь семафора S не пуста then
Выбрать процесс из очереди и перевести его из состояния “блокированный” в состояние “го-
тов”;
else {открыть семафор} S:=1;
end.
Алгоритм решения задачи взаимного исключения с помощью семафоров.
Var
S: семафоp;
Begin
S:=1;
cobegin
процесс 1:begin
Установить (S);
Критический интервал 1;
Освободить (S);
Основная часть процесса 1;
end
процесс 2:begin
Установить (S);
Критический интервал 2;
Освободить (S);
12
Страницы
- « первая
- ‹ предыдущая
- …
- 10
- 11
- 12
- 13
- 14
- …
- следующая ›
- последняя »
