(2)不一定,当系统中所有进程分别等待各自希望发生的事件时,它们都处于阻塞状态,此时系统中既没有运行进程,也没有就绪进程。这种情况出现时,如果各个进程没有相互等待关系,只要等待的事件发生了,进程就会从等待状态转化为就绪状态。但如果处于阻塞状态的进程相互等待彼此占有的资源,系统就可能发生死锁。
(3)不一定。因为高优先级的进程有可能处于等待状态,进程调度程序只能从就绪队列中挑选一个进程投入运行。被选中进程的优先级在就绪队列中是最高的,但在整个系统中它不一定是最高的,等待队列中进程的优先级有可能高于就绪队列中所有进程的优先级。
9、假如有以下程序段,回答下面问题。S1: a=3-x;S2: b=2*a;S3: c=5+a;(1)并发程序执行的Bernstein条件是什么?(2)试画图表示它们执行时的先后次序。(3)利用Bernstain条件证明,S1、S2和S3哪两个可以并发执行,哪两个不能。
(1)Bernstain提出的程序并发执行的条件如下:
R(Pi)={a1,a2,……am}表示程序Pi在执行期间所要参考的所有变量的集合,称为“读集”;W(Pi)={b1,b2,……bn}表示程序Pi在执行期间要改变的所有变量的集合,称为“写集”。两个程序P1和P2并发执行的条件是,当且仅当
R(P1)?W(P2)?R(P2)?W(P1)?W(P1)?W(P2)={}
(2)三个程序段对应的三个进程的先后执行次序是,S1先于S2和S3运行,如下图所示。
S2 S1 S3
(3) R(S1)={x},W(S1)={a} R(S2)={a},W(S2)={b}
R(S3)={a},W(S3)={c}
所以W(S1)?R(S2)={a},因此S1和S2不能并发执行。W(S1)?R(S3)={a},因此S1和S3也不能并发执行。而
R(S2)?W(S3)?R(S3)?W(S2)?W(S2)?W(S3)={},因此S2和S3可以并发执行。
3 进程同步与通信
1、以下进程之间存在相互制约关系吗?若存在,是什么制约关系?为什么?(1)几个同学去图书馆借同一本书;(2)篮球比赛中两队同学争抢篮板球;(3)果汁流水线生产中捣碎、消毒、灌装、装箱等各道工序;(4)商品的入库和出库;(5)工人做工与农民种粮。
进程之间的相互制约分为互斥关系和同步关系。互斥关系是多个进程之间竞争临界资源,而禁止两个以上的进程同时进入临界区所发生的制约关系。同步关系是合作进程之间协调彼此的工作,而控制自己的执行速度,由此产生的相互合作、相互等待的制约关系。
(1)几个同学去图书馆借同一本书。存在互斥关系。因为一本书只能借给一个同学。
(2)篮球比赛中两队同学争抢篮板球。存在互斥关系。因为篮球只有一个,两队只能有一个队抢到篮
球。
(3)果汁流水线生产中捣碎、消毒、灌装、装箱等各道工序。存在同步关系,因为后一道工序的开始依赖于前一道工序的完成。
(4)商品的入库和出库。存在同步关系,因为商品若没有入库就无法出库,若商品没有出库,装满了库房,也就无法再入库。
(5)工人做工与农民种粮。工人和农民之间没有相互制约关系。 2、说明P、V操作为什么要设计成原语?
用信号量S表示共享资源,其初值为1表示有一个资源。设有两个进程申请该资源,若其中一个进程先执行P操作。P操作中的减1操作由3条机器指令组成:取S送寄存器R;R-1送R;R送S。若P操作不用原语实现,在执行了前述三条指令中的2条,即还未执行R送S时(此时S的值仍为1),进程被剥夺CPU,另一个进程执行也要执行P操作,执行后S的值为0,导致信号量的值错误。正确的结果是两个进程执行完P操作后,信号量的值为-1,进程阻塞。
V操作也同样。所以要把信号量的P、V操作设计成原语,要求该操作中的所有指令要么都做,要么都不做。
3、设有一个售票大厅,可容纳200人购票。如果