Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО-Вопросы к экзамену-2014 (Восстановлен).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.16 Mб
Скачать
  1. Программные методы реализации взаимного исключения: примеры на псевдокоде, анализ и сравнение вариантов. Примеры.

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

N –н ачальное значение этой переменной должно быть установлено при инициализации системы (до запуска процессов P1 и P2). Предположим, что первым в критическую секцию должен быть допущен процесс P1.

Процедура инициализации

Первый процесс

Второй процесс

procedure INIT;

common integer N ;

begin

N := 1 ;

start(P1) ;

start(P2)

end INIT .

process P1;

common integer N ;

begin

while true do

begin

BEFORE1 ;

while N = 2 do ;

CS1 ;

N := 2 ;

AFTER1 ;

end

end P1 .

process P2;

common integer N ;

begin

while true do

begin

BEFORE2 ;

while N = 1 do ;

CS2 ;

N := 1 ;

AFTER2 ;

end

end P2 .

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

Минус: процесс имеющий право на вход в свою критическую секцию, но пока не вошедший в нее блокирует вход в критические секции другим процессам, которые могут быть готовы к обработке общих данных, но не могут получить к ним доступ

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

Процедура инициализации

Первый процесс

Второй процесс

procedure INIT;

common boolean C1,C2 ;

begin

C1 := false ;

C2 := false ;

start(P1) ;

start(P2)

end INIT .

process P1;

common boolean C1,C2 ;

begin

while true do

begin

BEFORE1 ;

while C2 do ;

C1 := true ;

CS1 ;

C1 := false ;

AFTER1 ;

end

end P1 .

process P2;

common boolean C1,C2 ;

begin

while true do

begin

BEFORE2 ;

while C1 do ;

C2 := true ;

CS2 ;

C2 := false ;

AFTER2 ;

end

end P2 .

Перед входом в критическую секцию каждый процесс проверяет, не находится ли его конкурент в своей критической секции, если нет, то в процессе устанавливается признак (значение true соответствующего этому процессу флажка), что он вошел в критическую секцию (занял ресурс), а после выхода из критической секции этот флажок снова сбрасывается в false, освобождая ресурс. Однако в том случае, когда (хоть это и маловероятно) оба процесса одновременно подойдут к проверке значений флажков своих конкурентов перед входом в критическую секцию, они смогут пройти в нее одновременно. Таким образом, нарушается самое главное требование к реализации критической секции - требование взаимного исключения.

3.Алгоритм Деккера

Процедура инициализации

Первый процесс

Второй процесс

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 ;

begin

while true do

begin BEFORE1 ;

C1 := true ;

while C2 do

begin

if N = 2 then

begin

C1 := false ;

while N=2 do ;

C1 := true ;

end

end ;

CS1 ;

C1 := false; N := 2;

AFTER1 ;

end

end P1 .

process P2;

common boolean C1,C2 ;

begin

while true do

begin BEFORE2 ;

C2 := true ;

while C1 do

begin

if N = 1 then

begin

C2 := false ;

while N=1 do ;

C2 := true ;

end

end ;

CS2 ;

C2 := false; N:=1;

AFTER2 ;

end

end P2 .

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