云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 第三章 作业参考答案

第三章 作业参考答案

  • 62 次阅读
  • 3 次下载
  • 2025/5/1 20:04:01

第三章作业参考答案

P181 第3题:

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

P1: P2: begin begin

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。

此外,还有第三种情况,语句③被推迟,直至语句⑧后再执行,于是依次执行以下三个语句:

z:=z+x; z:=y+1;

y:=z+y;

这时z的值只可能是y+1=5,故y=z+y=5+4=9,而x=10。

第三种情况为:x=10,y=9,z=5。

P181 第5题:

解:设信号量empty,mutex;

empty:=100; mutex:=1; parbegin

读者进入:begin

P(empty); P(mutex); 登记; P(mutex); End;

读者离开:begin

P(mutex); 撤消登记; V(mutex); V(empty); End;

1 / 8

Parend;

P181 第6题:

答:实质上是两个进程的同步问题,设信号量S1和S2分别表示可拣白子和黑子,不失

一般性,若令先拣白子。 Main( )

{ int S1=1, S2=0; Cobegin

P1( ); P2( ); Coend }

P1( )

{ while(拣子工作没完成)

{

P(S1);

拣白子

V(S2);

} }

P182第15题:

Dijkstra临界区软件算法描述如下:

var flag:array[0…n] of (idle,want-in,in_cs);

turn:integer;tune:0 or 1 or…or,n-1; process Pi(i=0,1,…,n-1) var j;integer; begin repeat

repeat

flag[i]:=want_in; while turn≠i do

if flag[turn]==idle then turn:=i; flag[i]:=in_cs; j:=0;

while (j

until false;

2 / 8

P2( ) { while(拣子工作没完成) { P(S2); 拣黑子 V(S1); } } end.

试说明该算法满足临界区原则。

答:为方便描述,把Dijkstra程序的语句进行编号:

repeat

flag[i]:=want_in; ① while turn≠i do ② if flag[turn]==idle then turn:=i; ③ flag[i]:=in_cs; ④ j:=0;

while (j

flag[i]:=idle; ⑦ …

(1) 满足互斥条件

当所有的Pj都不在临界区中,满足flag[j]≠in_cs (对于所有j,j≠i)条件时,Pi才能进入它的临界区,而且进程Pi不会改变除自己外的其他进程所对应的flag[j]的值。另外,进程Pi总是先置自己的flag[i]为in_cs后,才去判别Pj进程的flag[j]的值是否等于in_cs,所以,此算法能保证n个进程互斥地进入临界区。 (2) 不会发生无休止等待进入临界区

由于任何一个进程Pi在执行进入临界区代码时先执行语句①,其相应的flag[i]的值不会是idle。注意到flag[i]=in_cs并不意味着turn的值一定等于i。我们来看以下情况,不失一般性,令turn的初值为0,且P0不工作,所以,flag[turn]=flag[0]=idle。但是若干个其他进程是可能同时交替执行的,假设让进程Pj(j=1,2,..,n-1)交错执行语句①后(这时flag[j]=want_in),再做语句②(第一个while语句),来查询flag[turn]的状态。显然,都满足turn≠i,所以,都可以执行语句③,让自己的turn为j。但turn仅有一个值,该值为最后一个执行此赋值语句的进程号,设为k、即turn=k(1≤k≦n-1)。接着,进程Pj(j=1,2,..,n-1)交错执行语句④,于是最多同时可能有n-1个进程处于in_cs状态,但不要忘了仅有一个进程能成功执行语句④,将turn置为自己的值。

假设{P1,P2,…Pm}是一个已将flag[i]置为in_cs(i=1,2,…,m)(m≤n-1)的进程集合,并且已经假设当前turn=k(1≤k≤m),则Pk必将在有限时间内首先进入临界区。因为集合中除了Pk之外的所有其他进程终将从它们执行的语句⑤(第二个while循环语句)退出,且这时的j值必小于n,故内嵌until起作用,返回到起始语句①重新执行,再次置flag[i]=want_in,继续第二轮循环,这时的情况不同了,flag[turn]=flag[k]必定≠idle(而为in_cs)。而进程Pk发现最终除自身外的所有进程Pj的flag[j]≠in_cs,并据此可进入其临界区。

P183第21题:

21.Jurassic公园有一个恐龙博物馆和一个花园,有m个旅客和n辆车,每辆车仅能乘一个旅客。旅客在博物馆逛了一会,然后,排队乘坐旅行车,当一辆车可用时,它载入一个旅客,再绕花园行驶任意长的时间。若n辆车都已被旅客乘坐游玩,则想坐车的旅客需要等待。如果一辆车已经空闲,但没有游玩的旅客了,那么,车辆要等待。试用信号量和P、V操作同步m个旅客和n辆车子。

3 / 8

答:这是一个汇合机制,有两类进程:顾客进程和车辆进程,需要进行汇合、即顾客要坐进车辆后才能游玩,开始时让车辆进程进入等待状态。 var scl,sck,sc,kx,xc,mutex:semaphore; sck := kx:= sc:= xc:=0; sc1:=n;mutex:=1;

sharearea:一个登记车辆\\被服务乘客信息的共享区; cobegin

process 顾客i(i=1,2,…) begin

P(scl); /*车辆最大数量信号量 P(mutex); /*封锁共享区,互斥操作

在共享区sharearea登记被服务的顾客的信息:起始和到达地点,行驶时间 V(sck); /*释放一辆车,即顾客找到一辆空车 P(kx); /*车辆要配备驾驶员,顾客等待被载, 上车;

V(sc); /*顾客进程已汇合到车辆进程,即顾客坐进车里 P(xc); /*待游玩结束后后,顾客等待下车 V(scl); /*空车辆数加1 end

Process 车辆j(j=1,2,…) begin

L: P(sck); /*车辆等待有硕客来使用

在共享区sharearea登记那一辆车被使用,并与顾客进程汇合; V(mutex); /*这时可开放共享区,让另一顾客雇车 V(kx); /*允许顾客用此车辆 P(sc); /*车辆等待顾客上车 车辆载着顾客开行到目的地;

v(xc); /*允许顾客下车 goto L; end coend

P184第24题:

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

Allocation A B C D 0 0 3 2 1 0 0 0 1 3 5 4 0 3 3 2 0 0 1 4 Claim A B C D 0 0 4 4 2 7 5 0 3 6 10 10 0 9 8 4 0 6 6 10 Available A B C D 1 6 2 2 Process P0 P1 P2 P3 P4

4 / 8

搜索更多关于: 第三章 作业参考答案 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第三章作业参考答案 P181 第3题: 答:现对进程语句进行编号,以方便描述。 P1: P2: begin begin 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

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com