2010-11-03 2 views
1

Рассмотрим однопроцессорную систему, выполняющую одновременно два процесса P и Q. Каждый процесс выполняет приведенный ниже код, обрабатывает P-процедуру P и обрабатывает Q-процедуру Q. Оба процесса поступают в пределах очень короткое время друг друга, но не могут быть сделаны предположения о времени их запуска и их относительной скорости. Все утверждения, используемые в коде ниже от А до К, являются атомарными, т.е. они либо выполняются полностью, либо вообще не выполняются. Выполнение процессов синхронизируется двумя двоичными семафорами S1 и S2. Семафора S1, инициализируется 1, а семафор S2 инициализируется в 0. Код, выполняемый процессов выглядит следующим образом:Оценка логики процессов в операционной системе

procedure P 
begin 
A; 
wait(S1); 
B; 
signal(S1); 
C; 
D; 
signal(S2); 
E; 
end 

procedure Q 
begin 
F; 
wait(S1); 
G; 
H; 
J; 
signal(S1); 
wait(S2); 
K; 
end 

a.Give по крайней мере, четыре возможных порядков исполнения для операторов А до К.

А, С, D, Е, К

А, D, С, Е, К

Р, С, D, Е, К

F, D, С, Е , K

b. Какова функция каждого из семафоров S1 и S2 в данном примере?

S1 – used for waiting 

c. Можно ли выполнить оператор E перед оператором F? Обосновать ответ.

Да, (но я не уверен, кто-то может подтвердить?)

d. Можно ли выполнить оператор K перед оператором A? Обосновать ответ.

ответ

0

a. Интересно, почему вы оставили инструкции B, F, G, H и J. Вы полагаете, что они не исполняются? Я думаю, что как только вы ответили b, вы легко ответите.

b. Все семафоры могут ждать, но так они работают, а не то, для чего они нужны. Можете быть более конкретными? Семафоры могут использоваться для синхронизации (foo должно происходить после бара) и для исключения (между этими двумя разделами кода только один может выполняться за раз). Как вы думаете, для чего используются два семафора?

c. Что потребуется для того, чтобы E мог выполнить до F? Это условие присутствует? Или, посмотрите на это по-другому: что потребовалось бы, чтобы E не исполнялся до F? Это условие присутствует?

d. См. C.


Здесь семафор используется для того, чтобы бар происходит после того, как Foo:

S = 0 
process 1: 
    foo 
    signal(S) 
process 2: 
    wait(S) 
    bar 

А вот семафор используется для того, чтобы только один из двух секций кода выполняется в то время, :

S = 1 
process 1: 
    wait(S) 
    foo 
    signal(S) 
process 2: 
    wait(S) 
    bar 
    signal(S) 

Вы видите разницу? Пересмотрите код в своей домашней работе и посмотрите, имеет ли он сейчас больше смысла.

+0

Хорошо, я стараюсь все, но я не уверен, как заказать – user494310

+0

I _just_ добавил последний раздел, объяснив два способа использования семафоров. Это помогает? –

Смежные вопросы