操作系统教程_孙钟秀(第四版)课后习题答案 下载本文

l )计算各个进程还需要的资源数Cki - Aki ( 2 )系统是否处于安全状态,为什么?

( 3 ) P2 发出请求向量request2 ( 1 , o , 1 ) ,系统能把资源分给它吗? ( 4 )若在P2 申请资源后,若P1 发出请求向量req 够stl ( 1 ,0, l ) ,系统能把资源分给它吗?

( 5 )若在P1 申请资源后,若P3 发出请求向量request3 ( 0 ,0,l ) ,系统能把资源分给它吗?

答:( 1 ) P1 , P2 , P3 , P4 的Cki . Aki 分别为:( 2 , 2 , 2 )、(1 , 0 , 2 )、(1 , 0 , 3 )、(4 , 2 , 0 ) ( 4 )系统处于安全状态,存在安全序:P2 , P1 , P3 , P4

( 5 )可以分配,存在安全序列:P2 , P1 , P3 , P4 . ( 6 )不可以分配,资源不足。 ( 7 )不可以分配,不安全状态。

27 系统有A 、B 、C 、D 共4 种资源,在某时刻进程PO 、Pl 、PZ 、P3 和P4 对资源的占有和需求情况如表,试解答下列问题:

系统此时处于安全状态吗?

若此时P2 发出request2 ( 1 、2 、2 、2 ) ,系统能分配资源给它吗?为什么?

答:( l )系统处于安全状态,存在安全序列:P0, P3 , P4 , P1 , P2 。 ( 2 )不能分配,否则系统会处于不安全状态。 28 把死锁检测算法用于下面的数据,并请问: Available=(1,0,2,0)

( l )此时系统处于安全状态吗?

( 2 )若第二个进程提出资源请求request2( 0 , 0 , 1 , 0 ) 系统能分配资源给它吗?

(3)执行(2)之后,若第五个进程提出资源请求request5( 0 ,0 ,1 ,0 )系统能分配资源给它吗?

答:( l )此时可以找出进程安全序列:P4 , P1 , P5 , P2 , P3 。故系统处于安全状态。

( 2 )可以分配,存在安全序列:P4 , P1 , P5, P2 , P3 。 ( 3 )不可分配,系统进入不安全状态。

29 )考虑一个共有巧0 个存储单元的系统,如下分配给三个进程,P1 最大需求70 ,己占有25 ; 以P2 最大需求60 ,己占有40 ; P3 最大需求60 ,己占有45 。使用银行家算法,以确定下面的任何一个请求是否安全。(l ) P4 进程到达,P4 最大需求60 ,最初请求25 个。(2 ) P4 进程到达,P4 最大需求60 ,最初请求35 。如果安全,找出安全序列;如果不安全,给出结果分配情况。 答:

( l )由于系统目前还有150-25-40-45=40 个单元,P4 进程到达,把25 个单元分给它。这时系统还余15 个单元,可把15 个单元分给P3 ,它执行完后会释放60 个单元。于是可供P1 (还要45 个单元), P2 (还要20 个单元), P4(还要35 个单元)任何一个执行。 安全序列为:

(1)P4进程到达,P4最大需求60,最初请求35 。如果把35 个单元分给P4 ,系统还余5个单元,不再能满足任何一个进程的需求,系统进入不安全状态。 30 有一个仓库,可存放X 、Y 两种产品,仓库的存储空间足够大,但要求:( l )每次只能存入一种产品X或Y , ( 2 )满足-N<X 产品数量-Y 产品数量<M 。其中,N 和M 是正整数,试用信号量与P 、V 操作实现产品X 与Y 的入库过程。 答:本题给出的表达式可分解为制约条件: -N < X 产品数量-Y 产品数量 X 产品数量-Y 产品数量<M

也就是说,X 产品的数量不能比Y 产品的数量少N 个以上,X 产品的数量不能比Y 产品的数量多M 个以上。可以设置两个信号量来控制X 、Y 产品的存放数量:

SX 表示当前允许X 产品比Y 产品多入库的数量,即在当前库存量和Y 产品不入库的情况下,还可以允许SX个X产品入库;初始时,若不放Y而仅放X产品,则SX最多为M-1个。

sy 表示当前允许Y 产品比x 产品多入库的数量,即在当前库存量和x 产品不入库的情况下,还可以允许sy 个Y 产品入库.初始时,若不放X 而仅放Y 产品,则sy 最多为N -1 个。当往库中存放入一个X 产品时,则允许存入Y 产品的数量也增加1 ,故信号量sy 应加1 :当往库中存放入一个Y 产品时,则允许存入X 产品的数量也增加1 ,故信号量sx 应加1 . var mutex : semaphore = 1 /*互斥信号量*/ sx , sy : semaphore;

sx = M-1 ; sy = = N - l ; cobegin {

process X {repeat P(sx ) ;

P (mutex ) ; 将X 产品入库; V(mutex ) ; V ( sy ) ; until false }

process Y { repeat P ( sy ) ; P (mutex ) ; 将Y 产品入库; V (mutex ) ; V ( px ) ; until false } }

coend .

31 有一个仓库可存放A 、B 两种零件,最大库容量各为m 个。生产车间不断地取A 和B 进行装配,每次各取一个.为避免零件锈蚀,按先入库者先出库的原则。有两组供应商分别不断地供应A 和B ,每次一个。为保证配套和合理库存,当某种零件比另一种零件超过n ( n < m )个时,暂停对数量大的零件的进货,集中补充数量少的零件.试用信号量与P 、V 操作正确地实现它们之间的同步关系。

答:按照题意,应满足以下控制关系:A 零件数量-B 零件数量≤n ; B 零件数

量-A 零件数量≤n : A 零件数量≤m ; B 零件数量≤m .四个控制关系分别用信号量sa 、sb 、empty1 和empty2 实施。为遵循先入库者先出库的原则,A 、B 零件可以组织成两个循形队列,并增加入库指针in1 、in2 和出库指针out1 、out2 来控制顺序。并发程序编制如下:

Var empty1,empty2,full1,full2:semaphore; Mutex ,sa,sb:semaphore; In1,in2,out1,out2:integer;

Buffer1,buffer2:array[0?m-1]of item; Empty1:=empty2:=m; Sa:=sb:=n;

In1:=in2=out1:=out2:=0; Cobegin {

Process producerA {repeat P(empty1); P(sa); P(mutex);

Buffer1[in1]:=A零件; In1:=(in1+1)mod m; V(mutex); V(sb); V(full1);

Untile false; }

Process producer B {repeat P(empty2); P(sb); P(mutex);

Buffer2[in2]:=B零件; In2:=(in2+1)mod m; V(mutex); V(sa); V(full2);

Untile false; }

Process take {repeat P(full1); P(full2); P(mutex);

Take from buffer1[out1] and buffer2[out2]中的A,B零件; Out1:=(out1+1)mod m;

Out2:=(out2+1)mod m; V(mutex); V(empty1); V(empty2);

把A和B装配成产品; Until false } }

Coend.

32 进程Al 、A2 、?、An1 通过m 个缓冲区向进程B1 、B2 、? 、Bn2 不断地发送消息.发送和接收工作符合以下规则: ( l )每个发送进程每次发送一个消息,写进一个缓冲区,缓冲区大小与消息长度相等; ( 2 )对每个消息,Bl 、BZ 、二、BnZ 都需接收一次,并读入各自的数据区内; ( 3 )当M 个缓冲区都满时,则发送进程等待,当没有消息可读时,接收进程等待.

试用信号量和PV 操作编制正确控制消息的发送和接收的程序。

答:本题是生产者一消费者问题的一个变形,一组生产者A1 , A2 ,? An1 和一组消费者B1 , B2 ,? Bn2 共用m 个缓冲区,每个缓冲区只要写一次,但需要读n2 次。因此,可以把这一组缓冲区看成n2 组缓冲区,每个发送者需要同时写n2 组缓冲区中相应的n2 个缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。

应设置一个信号量mutex 实现诸进程对缓冲区的互斥访问;两个信号量数组empty[n2]和full[n2]描述n2 组缓冲区的使用情况.其同步关系描述如下: var mutex , empty[n2],full[n2]:semaphore ; i :integer ; mutex=1 ; for(i=0;i<=n2-1;i++) {

empty[i]=m; Full[i]=0; }

main ( ) {

cobegin A1 ( ) ; A2 ( ) ; ?

An1 ( ) ; B1 ( ) ; B2 ( ) ; ?

Bn2 ( ) ;