练习题1
问:进程A、B、C、D该执行什么PV操作?
答:
进程A——剁肉;V(Sa) 进程B——切葱花;V(Sb) 进程C——切姜粒;V(Sc)
进程D——搅拌肉馅;P(Sa)、P(Sb)、P(Sc)、V(Sd)
进程E——包饺子;P(Sd)
前趋图:是为了描述一个程序的各部分间的依赖关系,或者是一个大的计算的各个子任务间的因果关系的图示。
练习题2
进程P1、P2、P3、P4、P5的前趋图如下:
若用PV操作控制进程并发执行的过程,则需要设置4个信号量S1、S2、S3和S4且信号量初值都等于零。下图中a和b应分别填写(1) ,c和d应分别填写(2), e和f应分别填写(3)。
第一空:
A. P(S1)和P(S2)
B. P(S1)和V(S2)
C. V(S1)和V(S2)
D. V(S1)和P(S2)
第二空:
A. P(S1)、P(S2)和V(S3)、V(S4)
B. P(S1)、P(S2)和P(S3)、P(S4)
C. V(S1)、V(S2)和P(S3)、P(S4)
D. V(S1)、V(S2)和V(S3)、V(S4)
第三空:
A. P(S3)和P(S4)
B. P(S3)和V(S4)
C. V(S3)和V(S4)
D. V(S3)和P(S4)
注意:此题我们可以将信号量S1…S4依次标注在图1的4个箭头上,在用PV操作去思考解题思路。
练习题3
假设某系统采用非抢占式优先级调度算法,若该系统有两个优先级相同的进程P1和P2,各进程的程序段如下所示,若信号量S1和S2的初值都为0。进程P1和P2并发执行后a、b和c的结果分别为:a=_ (1) _、b= _ (2) _、c= _ (3) _。
P1程序段begin{ P2程序段begin{ a:=1; b:=2; a:=a+1; b:=b+1; V(S1); P(S1); c:=a+5; b:=a+b; P(S2); V(S2); a:=a+c; c:=b+c; } } end end
(1) A. 9 B. 12 C. 13 D. 14
(1) A. 5 B. 6 C. 9 D. 10
(1) A. 4 B. 6 C. 12 D. 13
注意:此题着重说明了不考虑优先级,所以我们不能按照常规的PV操作去思考本题。在进程P1阻塞的情况下,当P2去唤醒P1时不生效,P2还是依次执行完毕后再次执行P2。得到的结果如下图所示: