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

UptoLike

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

14
Для б):
Установить (S):
S:=S-1;
if S<0 then
begin
Перевести процесс, выполнитьУстановитьвблокированноесостояние;
Включить этот процесс в очередь S;
Выполнить процедуруПереключитьдля запуска очередногоготовогопроцесса.
End;
Освободить (S);
S:=S-1;
if
S=<0 then
Выбрать процесс из очереди S и перевести его из состоянияблокированв состояниего-
тов”;
Числовой семафор с отрицательными значениями показывает число процессов, нахо-
дящихся в очереди S. С каждым S может быть связана как очередь, работающая по принципу
FIFO, так и некоторый список процессов, из которого выбор процессов может осуществлять-
ся, например, согласно их приоритету. Основной вопрособеспечение неделимости опера-
цийУстановить”, “Освободить”.
В однопроцессорной системе неделимость этих операций можно обеспечить путём запреще-
ния прерываний.
В многопроцессорном комплексе, работающем с общей памятью, этого недостаточно.
Рассмотрим случай однопроцессорной системы. Семафор предоставляется 2-мя полями:
type
семафор = record
счётчик : integer;
начало очереди : связь6; {переменная ссылочного типа}
end;
элемент очереди = record
следующий : связь6;
адрес дискриптора : связь
end;
Procedure Установить(S: семафор);
Var
P1: связь;
begin
Запретить прерывания;
if S.счётчик = 1 then S.счётчик := 0;
{Закрыть семафор}
else
begin
Перевести (текущий процесс, начало САП, начало СБП);
Счётчик
Начало очереди
Ссылка н
а
дискрип-
тор про-
цесса
Nil
Для б):
Установить (S):
S:=S-1;
if S<0 then
begin
Перевести процесс, выполнить “Установить” в “блокированное” состояние;
Включить этот процесс в очередь S;
Выполнить процедуру “Переключить” для запуска очередного “готового” процесса.
End;
Освободить (S);
S:=S-1;
if S=<0 then
Выбрать процесс из очереди S и перевести его из состояния “блокирован” в состояние “го-
тов”;

       Числовой семафор с отрицательными значениями показывает число процессов, нахо-
дящихся в очереди S. С каждым S может быть связана как очередь, работающая по принципу
FIFO, так и некоторый список процессов, из которого выбор процессов может осуществлять-
ся, например, согласно их приоритету. Основной вопрос – обеспечение неделимости опера-
ций “Установить”, “Освободить”.
В однопроцессорной системе неделимость этих операций можно обеспечить путём запреще-
ния прерываний.
       В многопроцессорном комплексе, работающем с общей памятью, этого недостаточно.
Рассмотрим случай однопроцессорной системы. Семафор предоставляется 2-мя полями:
              Счётчик   Начало очереди                             Nil
                                         Ссылка на
                                         дискрип-
                                          тор про-
                                           цесса



type
       семафор = record
       счётчик : integer;
       начало очереди : связь6; {переменная ссылочного типа}
       end;

       элемент очереди = record
       следующий : связь6;
       адрес дискриптора : связь
       end;

Procedure Установить(S: семафор);
Var
        P1: связь;
begin
Запретить прерывания;
if S.счётчик = 1 then S.счётчик := 0;
{Закрыть семафор}
else
begin
Перевести (текущий процесс, начало САП, начало СБП);

                                           14