- •Задания для подготовки к экзамену по сппо
- •1. Проблема взаимного исключения: программные методы решения
- •3. Проблема взаимного исключения: использование семафоров
- •Решение:
- •Решение:
- •2. Проблема взаимного исключения и тупика: анализ состояний системы для выявления тупиков
- •3. Прерывания и структурная схема обработки исключений:
- •4. Задачи по теме в-деревья:
Задания для подготовки к экзамену по сппо
1. Проблема взаимного исключения: программные методы решения
Задача: решить программным способом задачу взаимного исключения. Являются ли приведенные ниже процедуры решением поставленной задачи? Если нет, объясните, когда могут возникнуть ошибки?
Решение:
process INIT; common boolean C1. C2;
begin С1:=false; С2:=false; start(P1); start(P2); end;
process P1;
Begin
while true do
begin BEFORE1; C1:=true; while C2 do ; CS1; C1:=false; AFTER1; end
end;
process P2;
Begin
while true do
begin BEFORE2; while C1 do ; C2:=true; CS1; C2:=false; AFTER2; end
end;
Решить задачу взаимного исключения, используя логические переменные и процедуру перевода процесса в состояние задержки (приостановки) Delay(T), где параметр T задает время задержки процесса (время, на которое он выводится из конкуренции за время процессора).
Алгоритм Деккера можно сформулировать следующим образом:
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common boolean C1,C2 ; common integer N ; begin C1 := false ; C2 := false ; N := 1 ; start(P1) ; start(P2) end INIT .
|
process P1; common boolean C1,C2 ; common integer N ; begin while true do begin BEFORE1 ; C1 := true ; while C2 do begin if N<>1 then begin C1 := false ; while N<>1 do ; C1 := true ; end end ; CS1 ; C1 := false; N := 2; AFTER1 ; end end P1 . |
process P2; common boolean C1,C2 ; common integer N ; begin while true do begin BEFORE2 ; C2 := true ; while C1 do begin if N<>2 then begin C2 := false ; while N<>2 do ; C2 := true ; end end ; CS2 ; C2 := false; N:=1; AFTER2 ; end end P2 . |
Написать алгоритм Деккера для N процессов.
Решается ли в приведенных ниже программах проблема взаимного исключения (random – процедура, генерирующая случайное число, delay(T) – процедура задержки процесса на время T, в течение которого процесс не будет конкурировать за время процессора)?
process INIT; common boolean C1. C2; common integer N; common real T1, T2;
begin С1:=false; С2:=false; T1:= random; T2:= random; N:=1; start(P1); start(P2); end;
process P1;
Begin while true do
begin BEFORE1;
C1:=true;
while C2 and (N<>1) do delay(T1);
CS1;
C1:=false; N:=2;
AFTER1;
end
end;
process P2;
Begin while true do
begin BEFORE2;
C2:=true;
while C1 and (N<>2) do delay(T2);
CS2;
C2:=false; N:=1;
AFTER2;
end
end;