操作系统第三版孙钟秀主编课后习题3应用题参考答案.docx
- 文档编号:10995856
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:20
- 大小:55.63KB
操作系统第三版孙钟秀主编课后习题3应用题参考答案.docx
《操作系统第三版孙钟秀主编课后习题3应用题参考答案.docx》由会员分享,可在线阅读,更多相关《操作系统第三版孙钟秀主编课后习题3应用题参考答案.docx(20页珍藏版)》请在冰豆网上搜索。
操作系统第三版孙钟秀主编课后习题3应用题参考答案
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; ifc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统第三版孙钟秀主编 课后习题3应用题参考答案 操作系统 第三 版孙钟秀 主编 课后 习题 应用题 参考答案