评估操作系统中进程的逻辑

时间:2010-11-03 04:53:30

标签: semaphore

考虑一个单处理器系统同时执行两个进程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

女,d,C,E,K

湾在给定的例子中,每个信号量S1和S2的功能是什么?

S1 – used for waiting

℃。语句E是否可以在语句F之前执行?证明你的答案。

是的,(但我不确定,有人可以确认吗?)

d。语句K是否可以在语句A之前执行?证明你的答案。

1 个答案:

答案 0 :(得分:0)

一个。我想知道为什么你遗漏了B,F,G,H和J的陈述。你认为他们没有被处决吗?我想,一旦你回答了b,你就可以轻松回答。

湾所有信号量都可以等待,但这就是它们的工作方式,而不是它们的用途。你可以说得更详细点吗?信号量可以用于同步(foo必须在bar之后发生)和排除(在这两个代码段之间,一次只能执行一个)。您认为这两个信号量在这里使用的是什么?

℃。 E可能需要在F之前执行什么?这种情况存在吗?或者,从另一个角度来看:在F之前保持E执行需要什么?这种情况出现了吗?

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)

你看到了区别吗?重新检查作业中的代码,看看它现在是否更有意义。