Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзу по ОС.doc
Скачиваний:
1
Добавлен:
19.09.2019
Размер:
450.05 Кб
Скачать

16 Марта 2012 г.

8. Асинхронные параллельные процессы.

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

Ag a

Par begin

Оператор1; оператор2; …; операторN;

Par end.

X:=(–b+(b^2–4*a*c)^0,5)/(2*a)

Par begin

R1:= –b;

R2:=b^2;

R3:=4*a;

R4:=2*a;

Par end

R5:=R3*c;

R5:=R2–R5;

R5:=R5^0,5;

R5:=R1+R5;

X:=R5/R4;

При параллельном вычислении процессам приходится обращаться к общим данным (ресурсам). Ситуации, при которых конечный результат одновременной работы с общими данными зависит оттого, кто из них был первым, называются состояниями состязания. Подобные ситуации необходимо исключать путем введения определенных правил обращения к разделяемым данным.

Если во время обращения одного процесса к совместно-используемым данным всем другим процессам это запрещается, то такой способ взаимодействия называется взаимным исключением.

Если процесс обращается к разделяемым данным, то говорят, что он находится в своем критическом участке, а часть программы, в которой есть обращение к разделяемым данным, называется критической секцией или областью. Впервые программа реализации взаимного исключения была разработана Деккером. Свойства этого алгоритма:

  • не требует специальных аппаратных команд

  • процесс, работающий вне своего критического участка, не может помешать другому процессу войти в его критический участок

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

Var N: integer;

Procedure Процесс1;

Begin

While true do

Begin

While N=2 do;

КритическийУчасток1;

N:=2;

ПрочиеОператоры1;

end;

end;

procedure Процесс2;

begin

while true do

begin

while N=1 do;

КритическийУчасток2;

N:=1;

ПрочиеОператоры2;

End; end;

BEGIN

N:=1;

Par begin

Процесс1; Процесс2;

Par end

END.

Примитив «вход взаимного исключения» реализуется как один цикл while, который повторяется до тех пор, пока переменная «номер процесса» не станет равной номеру данного процесса. Примитив «выход» реализуется как одна команда, который устанавливает для переменной N значение, равное номеру другого процесса. Алгоритм Деккера реализует взаимного исключения для двух процессов.

1981 год – алгоритм Петерсона.

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

9.Семафоры.

Концепция семафоров была предложена Дейкстра. Семафор представляет собой целочисленную переменную S, с которой ассоциирована очередь ожидающих процессов. Пытаясь пройти через семафор, процесс одновременно вычитает из S единицу. Если S>=1 (семафор открыт), то процесс проходит сквозь семафор, если S=0 (семафор закрыт), то процесс останавливается и ставится в очередь.

Закрытие семафора соответствует захвату объекта или ресурса, доступ к которому контролируется этим семафором. Если объект захвачен, остальные процессы вынуждены ждать его освобождения. Закончив работу с объектом, процесс увеличивает значения семафора на единицу, открывая его. В простейшем случае работает двоичный семафор, который может быть либо нулем, либо единицей. Есть семафоры общего вида, принимающие любые целочисленные значения, соответствуют случаю, когда с объектом могут работать несколько процессов, разрешается добавлять и отнимать у S любое значение, есть реализации, у которых S<0, значение семафора можно читать и менять с помощью специальных операций, которые обозначаются Р и V, а также операцией инициализации Init Sem (Имя семафора, начальное значение). P(S): if S>0 then S:=S–1; else остановка процесса и помещение его в очередь ожидания. V(S): S:=S+1; активация одного из ожидающих процессов.

  • К переменной S нет доступа других процессов во время выполнения.

  • Выборка, наращивание и запоминание не могут быть прерваны.

  • Никакие прерывания во время выполнения примитивов Р и V недопустимы.

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

Участки взаимоисключения обрамляются операциями P и V. Если одновременно несколько процессов попытаются выполнить V, то это будет разрешено только одному из них.

Program BinSemaphore

Var S: semaphore;

Procedure процесс1;

Begin

While true do

begin

P(S);

КритическийУчасток1;

V(S);

End; end;

Procedure процесс2;

Begin

While true do

Begin

P(S);

КритическийУчасток2;

V(S);

End; end;

BEGIN

Init Sem (S,1);

Par begin

Процесс1; процесс2;

Par end

END.

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

20 марта 2012 г.