ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »