CH3应用题参考答案.docx

上传人:b****6 文档编号:8699308 上传时间:2023-02-01 格式:DOCX 页数:17 大小:55.58KB
下载 相关 举报
CH3应用题参考答案.docx_第1页
第1页 / 共17页
CH3应用题参考答案.docx_第2页
第2页 / 共17页
CH3应用题参考答案.docx_第3页
第3页 / 共17页
CH3应用题参考答案.docx_第4页
第4页 / 共17页
CH3应用题参考答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

CH3应用题参考答案.docx

《CH3应用题参考答案.docx》由会员分享,可在线阅读,更多相关《CH3应用题参考答案.docx(17页珍藏版)》请在冰豆网上搜索。

CH3应用题参考答案.docx

CH3应用题参考答案

CH3应用题参考答案

1有三个并发进程:

R负责从输入设备读入信息块,M负责对信息块加工处理;P负责打印输出信息块。

今提供;

1)一个缓冲区,可放置K个信息块;

2)二个缓冲区,每个可放置K个信息块;

试用信号量和P、V操作写出三个进程正确工作的流程。

答:

1)varB:

array[0,k-1]ofitem;

sread:

semaphore:

=k;

smanage:

semaphore:

=0;

swrite:

semaphore:

=0;

rptr:

integer:

=0;

mptr:

integer:

=0;

wptr:

integer:

=0;

x:

item

cobegin

processreader;

begin

L1:

readamessageintox;

P(sread);

B[rptr]:

=x;

rptr:

=(rptr+1)modk;

V(smanage);

gotoL1;

end;

processmanager;

begin

L2:

P(smanage);

x:

=B[mptr];

mptr:

=(mptr+1)modk;

managethemessageinx;

B[mptr]:

=x;

V(swrite);

gotoL2;

end;

processwriter;

begin

L3:

P(swrite);

x:

=B[wptr];

wptr:

=(wptr+1)modk;

V(sread);

Printthemessageinx;

gotoL3;

end;

coend

2)varA,B:

array[0,k-1]ofitem;

sput1:

semaphore:

=k;

sput2:

semaphore:

=k;

sget1:

semaphore:

=0;

sget2:

semaphore:

=0;

put1:

integer:

=0;

put2:

integer:

=0;

get1:

integer:

=0;

get2:

integer:

=0;

cobegin

processreader;

begin

L1:

readamessageintox;

P(sput1);

A[put1]:

=x;

put1:

=(put1+1)modk;

V(sget1);

GotoL1;

end;

processmanager;

begin

L2:

P(sget1);

x:

=A[get1];

get1:

=(get1+1)modk;

V(sput1);

Managethemessageintox;

P(sput2);

B[put2]:

=x;

put2:

=(put2+1)modk;

V(sget2);

GotoL2;

end;

processwriter;

begin

L3:

P(sget2);

x:

=B[get2];

get2:

=(get2+1)modk;

V(sput2);

Printthemessageinx;

GotoL3;

end;

coend

2设有n个进程共享一个互斥段,如果:

(1)每次只允许一个进程进入互斥段;

(2)每次最多允许m个进程(m≤n)同时进入互斥段。

试问:

所采用的信号量初值是否相同?

信号量值的变化范围如何?

答:

所采用的互斥信号量初值不同。

1)互斥信号量初值为1,变化范围为[-n+1,1]。

当没有进程进入互斥段时,信号量值为1;当有1个进程进入互斥段但没有进程等待进入互斥段时,信号量值为0;当有1个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为-1;最多可能有n-1个进程等待进入互斥段,故此时信号量的值应为-(n-1)也就是-n+1。

2)互斥信号量初值为m,变化范围为[-n+m,m]。

当没有进程进入互斥段时,信号量值为m;当有1个进程进入互斥段但没有进程等待进入互斥段时,信号量值为m-1;当有m个进程进入互斥段且没有一个进程等待进入互斥段时,信号量值为0;当有m个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为-1;最多可能有n-m个进程等待进入互斥段,故此时信号量的值应为-(n-m)也就是-n+m。

3有两个优先级相同的进程P1和P2,各自执行的操作如下,信号量S1和S2初值均为0。

试问P1、P2并发执行后,x、y、z的值各为多少?

P1:

P2:

beginbegin

y:

=1;x:

=1;

y:

=y+3;x:

=x+5;

V(S1);P(S1);

z:

=y+1;x:

=x+y;

P(S2);V(S2);

y:

=z+yz:

=z+x;

end.end.

答:

现对进程语句进行编号,以方便描述。

P1:

P2:

beginbegin

y:

=1;①x:

=1;⑤

y:

=y+3;②x:

=x+5;⑥

V(S1);P(S1);

z:

=y+1;③x:

=x+y;⑦

P(S2);V(S2);

y:

=z+y④z:

=z+x;⑧

end.end.

①、②、⑤和⑥是不相交语句,可以任何次序交错执行,而结果是唯一的。

接着无论系统如何调度进程并发执行,当执行到语句⑦时,可以得到x=10,y=4。

按Bernstein条件,语句③的执行结果不受语句⑦的影响,故语句③执行后得到z=5。

最后,语句④和⑧并发执行,最后结果为:

语句④先执行:

x=10,y=9,z=15。

语句⑧先执行:

x=10,y=19,z=15。

4有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假如阅览室共有100个座位。

试用:

1)信号量和P、V操作;2)管程,来实现用户进程的同步算法。

答:

1)使用信号量和P、V操作:

varname:

array[1..100]ofA;

A=record

number:

integer;

name:

string;

end

fori:

=1to100do{A[i].number:

=i;A[i].name:

=null;}

mutex,seatcount:

semaphore;

i:

integer;mutex:

=1;seatcount:

=100;

cobegin

{

processreaderi(varreadername:

string)(i=1,2,…)

{

P(seatcount);

P(mutex);

fori:

=1to100doi++

ifA[i].name=nullthenA[i].name:

=readername;

readergettheseatnumber=i;/*A[i].number

V(mutex)

进入阅览室,座位号i,座下读书;

P(mutex);

A[i]name:

=null;

V(mutex);

V(seatcount);

离开阅览室;

}

}

coend.

 

5在一个盒子里,混装了数量相等的黑白围棋子。

现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1和P2,其中P1拣白子;P2拣黑子。

规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣。

试写出两进程P1和P2能并发正确执行的程序。

答:

实质上是两个进程的同步问题,设信号量S1和S2分别表示可拣白子和黑子,不失一般性,若令先拣白子。

varS1,S2:

semaphore;

S1:

=1;S2:

=0;

cobegin

{

processP1

begin

repeat

P(S1);

拣白子

V(S2);

untilfalse;

end

processP2

begin

repeat

P(S2);

拣黑子

V(S1);

untilfalse;

end

}

coend.

 

6设公共汽车上,司机和售票员的活动分别如下:

司机的活动:

启动车辆:

正常行车;到站停车。

售票员的活动:

关车门;售票;开车门。

在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?

用信号量和P、V操作实现它们的同步。

答:

在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:

售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。

因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。

应设置两个信号量:

s1、s2;s1表示是否允许司机启动汽车(其初值为0);s2表示是否允许售票员开门(其初值为0)。

用P、V原语描述如下:

vars1,s2:

semaphore;

s1=0;s2=0;

cobegin

{

driver();

busman();

}

coend

driver()

begin

while

(1)

{

P(s1)

启动车辆;

正常行车;

到站停车;

V(s2);

}

end

busman()

begin

while

(1)

{

关车门;,

V(s1)

售票;

P(s2)

开车门;

上下乘客;

}

end

 

7在信号量S上作P、V操作时,S的值发生变化,当S>0、S=0、S<0时,它们的物理意义是什么?

答:

S的值表示它代表的物理资源的使用状态:

S>0表示还有共享资源可供使用。

S=0表示共享资源正被进程使用但没有进程等待使用资源。

S<0表示资源已被分配完,还有进程等待使用资源。

8

(1)两个并发进程并发执行,其中,A、B、C、D、E是原语,试给出可能的并发执行路径。

ProcessPProcessQ

beginbegin

A;D;

B;E;

C;end;

end;

(2)两个并发进程P1和P2并发执行,它们的程序分别如下:

P1P2

repeatrepeat

k:

=k×2;printk;

k:

=k+1;k:

=0;

untilfalse;untilfalse;

若令k的初值为5,让P1先执行两个循环,然后,P1和P2又并发执行了一个循环,写出可能的打印值,指出与时间有关的错误。

答:

(1)共有10种交错执行的路径:

A、B、C、D、E;A、B、D、E、C;A、B、D、C、E;

A、D、B、E、C;A、D、B、C、E;A、D、E、B、C;

D、A、B、E、C;D、A、B、C、E;D、A、E、B、C;D、E、A、B、C。

(2)把语句编号,以便于描述:

P1P2

repeatrepeat

k:

=k×2;①printk;③

k:

=k+1;②k:

=0;④

untilfalse;untilfalse;

1)K的初值为5,故P1执行两个循环后,K=23。

2)语句并发执行有以下情况:

①、②、③、④,这时的打印值为:

47

③、④、①、②,这时的打印值为:

23

①、③、②、④,这时的打印值为:

46

①、③、④、②,这时的打印值为:

46

③、①、②、④,这时的打印值为:

23

③、①、④、②,这时的打印值为:

23

由于进程P1和P2并发执行,共享了变量K,故产生了‘结果不唯一’。

 

9另一个经典同步问题:

吸烟者问题(patil,1971)。

三个吸烟者在一个房间内,还有一个香烟供应者。

为了制造并抽掉香烟,每个吸烟者需要三样东西:

烟草、纸和火柴,供应者有丰富货物提供。

三个吸烟者中,第一个有自己的烟草,第二个有自己的纸和第三个有自己的火柴。

供应者随机地将两样东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。

当吸烟者完成吸烟后唤醒供应者,供应者再把两样东西放在桌子上,唤醒另一个吸烟者。

试采用:

(1)信号量和P、V操作,

(2)管程编写他们同步工作的程序。

答:

(1)用信号量和P、V操作。

varS,S1,S2,S3;semaphore;

S:

=1;S1:

=S2:

=S3:

=0;

flag1,flag2,flag3:

Boolean;

flag1:

=flag2:

=flag3:

=true;

cobegin

{

process供应者

begin

repeat

P(S);

取两样香烟原料放桌上,由flagi标记;/*flage1、flage2、flage3代表烟草、纸、火柴

ifflag2&flag3thenV(S1);/*供纸和火柴

elseifflag1&flag3thenV(S2);/*供烟草和火柴

elseV(S3);/*供烟草和纸

untilefalse;

end

process吸烟者1

begin

repeat

P(S1);

取原料;

做香烟;

V(S);

吸香烟;

untilefalse;

process吸烟者2

begin

repeat

P(S2);

取原料;

做香烟;

V(S);

吸香烟;

untilefalse;

process吸烟者3

begin

repeat

P(S3);

取原料;

做香烟;

V(S);

吸香烟;

untilefalse;

}

coend.

10系统有同类资源m个,被n个进程共享,问:

当m>n和m≤n时,每个进程最多可以请求多少个这类资源时,使系统一定不会发生死锁?

答:

当m≤n时,每个进程最多请求1个这类资源时,系统一定不会发生死锁。

当m>n时,如果m/n不整除,每个进程最多可以请求”商+1”个这类资源,否则为”商”个资源,使系统一定不会发生死锁?

11N个进程共享M个资源,每个进程一次只能申请/释放一个资源,每个进程最多需要M个资源,所有进程总共的资源需求少于M+N个,证明该系统此时不会产生死锁。

答:

设max(i)表示第i个进程的最大资源需求量,need(i)表示第i个进程还需要的资源量,alloc(i)表示第i个进程已分配的资源量。

由题中所给条件可知:

max

(1)+┅+max(n)=(need

(1)+┅+need(n))+((alloc

(1)+┅+alloc(n))

如果在这个系统中发生了死锁,那么一方面m个资源应该全部分配出去,

alloc

(1)+┅+alloc(n)=m

另一方面所有进程将陷入无限等待状态。

可以推出

need

(1)+┅+need(n)

上式表示死锁发生后,n个进程还需要的资源量之和小于n,这意味着此刻至少存在一个进程i,need(i)=0,即它已获得了所需要的全部资源。

既然该进程已获得了它所需要的全部资源,那么它就能执行完成并释放它占有的资源,这与前面的假设矛盾,从而证明在这个系统中不可能发生死锁。

12设当前的系统状态如下,系统此时Available=(1,1,2):

(1)

计算各个进程还需要的资源数Cki-Aki?

(2)系统是否处于安全状态,为什么?

(3)P2发出请求向量request1(1,0,1),系统能把资源分给它吗?

(4)若在P2申请资源后,若P1发出请求向量request0(1,0,1),系统能把资源分给它吗?

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

答:

(1)P1,P2,P3,P4的Cki-Aki分别为:

(2,2,2)、(1,0,2)、(1,0,3)、(4,2,0)

(3)系统处于安全状态,存在安全序:

P2,P1,P3,P4

(4)可以分配,存在安全序列:

P2,P1,P3,P4。

(5)不可以分配。

(6)不可以分配。

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

Process

Allocation

Claim

Available

ABCD

ABCD

ABCD

P0

0032

0044

1622

P1

1000

2750

P2

1354

361010

P3

0332

0984

P4

0014

06610

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

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

为什么?

答:

(1)系统处于安全状态,存在安全序列:

P0,P3,P4,P1,P2。

(2)不能分配,否则系统会处于不安全状态。

14把死锁检测算法用于下面的数据,并请问:

Available=(1,0,2,0)

 

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

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

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

答:

(1)此时可以找出进程安全序列:

P4,P1,P5,P2,P3。

故系统处于安全状态。

(2)可以分配,存在安全序列:

P4,P1,P5,P2,P3。

(3)不可分配,系统进入不安全状态。

 

15某系统有R1设备3台,R2设备4台,它们被P1、P2、P3和P4进程共享,且已知这4个进程均按以下顺序使用设备:

→申请R1→申请R2→申请R1→释放R1→释放R2→释放R1

(1)系统运行中可能产生死锁吗?

为什么?

(2)若可能的话,请举出一种情况,并画出表示该死锁状态的进程—资源图。

答:

(1)系统四个进程需要使用的资源数为R1各2台,R2各1台。

可见资源数不足,同时各进程申请资源在先,有可能产生死锁发生的四个条件,故系统可能产生死锁。

(2)当三个进程执行完申请资源R1,开始执行申请资源R2时,第四个进程会因没有资源R1而被阻塞。

当三个进程执行完申请资源R2后,系统还剩1个R2资源。

而这三个进程因执行申请第二个资源R1而全部被阻塞,系统进入死锁。

16假定某计算机系统有R1和R2两类可再使用资源(其中R1有两个单位,R2有一个单位),它们被进程P1,P2所共享,且已知两个进程均以下列顺序使用两类资源。

→申请R1→申请R2→申请R1→释放R1→释放R2→释放R1→

试求出系统运行过程中可能到达的死锁点,并画出死锁点的资源分配图(或称进程-资源图)。

答:

当两个进程都执行完第一步(都占用R1)时,系统进入不安全状态。

这时无论哪个进程执行完第二步,死锁都会发生。

可能到达的死锁点:

进程P1占有一个R1和一个R2,而进程P2占有一个R1。

或者相反。

这时己形成死锁。

进程---资源图为:

 

17桌上有一只盘子,最多可以容纳两个水果,每次仅能放入或取出一个水果。

爸爸向盘子中放苹果(apple),妈妈向盘子中放桔子(orange),两个儿子专等吃盘子中的桔子,两个女儿专等吃盘子中的苹果。

试用:

(1)信号量和P、V操作,

(2)管程,来实现爸爸、妈妈、儿子、女儿间的同步与互斥关系。

答:

(1)用信号量和P、V操作。

类似于课文中的答案,扩充如下:

1)同步信号量初值为2;2)要引进一个互斥信号量mutex,用于对盘子进行互斥;3)盘子中每一项用橘子、苹果2个枚举值。

var

plateARRAY[0,1]of(apple,orange);

flag0,flag1:

boolean;

mutex:

semaphore;

sp:

semaphore;/*盘子里可以放几个水果*/

sg1,sg2:

semaphore;/*盘子里有桔子,有苹果?

*/

sp:

=2;/*盘子里允许放入二个水果*/

sg1:

=sg2:

=0;/*盘子里没有桔子,没有苹果*/

flag0:

=flag1:

=false;mutex:

=1;

cobegin

processfather

begin

L1:

削一个苹果;

P(sp);

P(mutex);

if(flag0==false)then

{plate[0]:

=苹果;flag0:

=true;}

else{plate[1]:

=苹果;flag1:

=true;}

V(mutex);

V(sg2);

gotoL1;

end;

processmother

begin

L2:

剥一个桔子;

P(sp);

P(mutex);

if(flag0==false)then

{plate[0]:

=桔子;flag0:

=true;}

else{plate[1]:

=桔子;flag1:

=true;}

V(mutex);

V(sg1);

gotoL2;

end;

processson

begin

L3:

P(sg1);

P(mutex);

if(flag0&plate[0]==桔子)then

{x:

=plate[0];flag0:

=false;}

else{x:

=plate[1];flag1:

=false;}

V(mutex);

V(sp);

吃桔子;

gotoL3;

end;

processdaughter

begin

L4:

P(sg2);

P(mutex);

if(flag0&plate[0]==苹果)then

{x:

=plate[0];flag0:

=false;}

else{x:

=plate[1];flag1:

=false;}

V(mutex);

V(sp);

吃苹果;

gotoL4;

end;

coend.

18有P1、P2、P3三个进程共享一个表格F,P1对F只读不写,P2对F只写不读,P3对F先读后写。

进程可同时读F,但有进程写时,其他进程不能读和写。

(1)信号量和P、V操作,

(2)管程编写三进程能正确工作的程序。

答:

(1)信号量和P、V操作。

这是读--写者问题的变种。

其中,P3既是读者又是写者。

读者与写者之间需要互斥,写者与写者之间需要互斥,为提高进程运行的并发性,可让读者尽量优先。

varrmutex,wmutex:

semaphore;

rmutex:

=wmutex:

=1;

count:

integer;count:

=0;

cobegin

{

processP1

begin

repeat

P(rmutex);

count:

=count+1;

ifcount=1thenP(w

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1