оценка логики процессов в операционной системе - PullRequest
1 голос
/ 03 ноября 2010

Рассмотрим однопроцессорную систему, выполняющую одновременно два процесса P и Q. Каждый процесс выполняет код, указанный ниже, процесс P-процедура P и процесс Q-процедура Q. Оба процесса прибывают в очень короткое время друг от друга, но нетможно сделать предположения о времени начала выполнения и их относительной скорости.Все операторы, используемые в приведенном ниже коде от A до K, являются атомарными, т.е.они либо исполняются полностью, либо не исполняются вовсе.Выполнение процессов синхронизируется двумя двоичными семафорами 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. Дайте по крайней мере четыре возможных порядка выполнения для операторов A доK.

A, C, D, E, K

A, D, C, E, K

F, C, D, E, K

F, D, C, E, K

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

S1 – used for waiting

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

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

d.Возможно ли выполнение оператора K перед оператором A?Обоснуйте свой ответ.

1 Ответ

0 голосов
/ 04 ноября 2010

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

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)

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

...