Основные задачи параллельного программирования. Конспект лекций. Степанов Б.М. - 12 стр.

UptoLike

Составители: 

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