操作系统习题答案第3.docx
- 文档编号:30108976
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:93
- 大小:59.13KB
操作系统习题答案第3.docx
《操作系统习题答案第3.docx》由会员分享,可在线阅读,更多相关《操作系统习题答案第3.docx(93页珍藏版)》请在冰豆网上搜索。
操作系统习题答案第3
CH3应用题参考答案
1、有三个并发进程:
R负责从输入设备读入信息块,M负责对信息块加工处理;P负责打印输出信息块。
今提供;
l)一个缓冲区,可放置K个信息块;
2)二个缓冲区,每个可放置K个信息块;
试用信号量和P、V操作写出三个进程正确工作的流程。
答:
1)varB:
array[0,k-1]ofitem;
sread:
semaPhore:
=k;
smanage:
semaPhore:
=0;
swrite:
semaphore:
=0;
rptr:
integer:
=O;
mptr:
integer:
=O;
wptr:
integer:
=0;
x:
item
cobegin
processreader;processmanager;processwriter;
beginbeginbegin
LI:
readamessageintox;L2:
P(smanage);L3:
P(swnte);
P(sread);x:
=B[mptr];x:
=B[swrite];
B[rptr]:
=x;mptr:
=(mptr+1)modk;wptr:
=(wptr+1)modk;
Rptr:
=(rptr+1)modk;managethemessageinx;V(sread);
V(smanage);B[mptr]:
=x;printthemessageinx;
GotoL1;V(swrite);gotoL3;
End;gotoL2;end;
End;
coend
2)varA,B:
array[0,k-l]ofitem;
sPut1:
semaphore:
=k;
SPut2:
semaPhore:
=k;
sget1:
semaPhore:
=0;
sget2:
semaphore:
=0;
put1:
integer:
=O;
put2:
integer:
=0;
get1:
integer:
=O;
get2:
integer:
=O;
cobegin
processreader;processnmanager;processWriter;
beginbeginbegin
Ll:
readamessageintox;L2:
P(sgetl);L3:
P(sgetZ);
P(SPut1);x:
=A[get1];x:
=B[get2];
A[put1]:
=x;get1:
(get1+1)modk;get2:
=(get2+l)modk;
Put1:
=(put1+1)modk;V(sput1);V(sput2);
V(sget1);managethemessageintox;printthemessageinx;
GotoL1;P(sput2);gotoL3;
Put2:
=(put2+1)modk;
V(sget2);
GotoL2;
End;
Coend
2设有n个进程共享一个互斥段,如果:
(1)每次只允许一个进程进入互斥段;
(2)每次最多允许m个进程(m簇n)同时进入互斥段。
试问:
所采用的信号量初值是否相同?
信号量值的变化范围如何?
答:
所采用的互斥信号量初值不同。
1)互斥信号量初值为1,变化范围为[-n+l,1]。
当没有进程进入互斥段时,信号量值为1;当有1个进程进入互斥段但没有进程等待进入互斥段时,信号量值为O;当有1个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为-1;最多可能有n-1个进程等待进入互斥段,故此时信号量的值应为-(n-1)也就是-n+1。
2)互斥信号量初值为m,变化范围为[-n+m,m]。
当没有进程进入互斥段时,信号量值为m;当有1个进程进入互斥段但没有进程等待进入互斥段时,信号量值为m-1:
当有m个进程进入互斥段且没有一个进程等待进入互斥段时,信号量值为0:
当有m个进程进入互斥段且有一个进程等待进入互斥段时,信号量值为一l;最多可能有n-m个进程等待进入互斥段,故此时信号量的值应为-(n-m)也就是-n+m.
3有两个优先级相同的进程P1和P2,各自执行的操作如下,信号量S1和S2初值均为0。
试问Pl、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+y;z:
=z+x;
Endend
答:
现对进程语句进行编号,以方便描述.
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;⑧
Endend
①、②、⑤和⑥是不相交语句,可以任何次序交错执行,而结果是唯一的。
接着无论系统如何调度进程并发执行,当执行到语句⑦时,可以得到x=10,y=4。
按Bernstein条件,语句③的执行结果不受语句⑦的影响,故语句③执行后得到z=5。
最后,语句④和⑧并发执行,这时得到了两种结果为:
语句④先执行:
x=10,y=9,z=150
语句⑧先执行:
x=10,y=19,z=15
此外,还有第三种情况,语句③被推迟,直至语句⑧后再执行,于是依次执行以下三个语句:
7:
二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。
4有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名,读者离开时要注销登记信息;假如阅览室共有100个座位。
试用:
l)信号量和P、V操作;2)管程,来实现用户进程的同步算法。
答:
1)使用信号量和P、v操作:
varname:
array[l…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:
=l;seatcount:
=100;
cobegin
{
processreaderi(varreadename:
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
2)使用管程操作:
TYPEreadbook=monitor
VARR:
condition;
I,seatcount:
integer;
name:
array[l:
100]ofstring;
DEFINErcadercome,readerleave;
USEcheck,wait,signal,release;
Procedurereadercome(readername)
begin
check(IM);
ifseatcount≥100wait(R,IM)
seatcount:
=seatcount+1;
fori=1to100doi++
ifname[i]==nullthenname[i]:
=readername;
gettheseatnumber=i;
release(IM);
end
procedurereaderleave(readername)
begin
check(IM);
seatcount--;
fori=1to100doi++
ifname[i]readernamethenname[i]:
null;
release(IM);
end
begin
seatcount:
=1OO;name:
=null;
end
cobegin
{
processreaderi(i=1,2.…)
begin
readercome(readername);
readthebook;
readerleave(readername);
leavethereadroom;
end
}
coend.
5.在一个盒子里,混装了数量相等的黑白围棋子·现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1和P2,其中P1拣白子;P2拣黑子。
规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣.试写出两进程P1和P2能并发正确执行的程序。
答1:
实质上是两个进程的同步问题,设信号量s1和s2分别表示可拣白子和黑子,不失一般性,若令先拣白子。
varS1,S2:
semaphore;
S1:
=l;S2:
=0;
cobegin
{
processP1
begin
repeat
P(S1);
拣白子
V(S2);
untilfalse;
end
processP2
begin
repeat
P(S2);
拣黑子
V(S1);
untilfalse;
end
}
coend.
答2:
TYPEpickup-chess=MONITOR
VARflag:
boolean;
S-black,s-white:
codition;
DEFINEpickup-black,pickup-white;
USEwait,signal,check,release;
procedurepickup-black;
begin
check(IM);
ifflagthenwait(s-black,IM);
flag:
=true;
pickupablack;
signal(S-white,IM);
release(IM);
end
procedurepickup-white;
begin
check(IM);
ifnotflagthenwait(S-white,IM);
flag:
=false;
pickupawhite;
signal(S-black,IM);
release(IM);
end
begin
flag:
=true;
end
main()
{cobegin
process-B();
process-W();
coend
}
process-B()
begin
pickup-chess.pickup-black();
other;
end
process-W()
begin
pickup-chess.pickup-white();
other;
end
6管程的同步机制使用条件变量和wait及signal,尝试为管程设计一种仅仅使用一个原语操作的同步机制。
答:
可以采用形如waituntil<条件表达式>的同步原语。
如waituntil(numbersum+number 7设公共汽车上,司机和售票员的活动分别如下: 司机的活动: 启动车辆: 正常行车;到站停车。 售票员的活动: 关车门;售票;开车门。 在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系? 用信号量和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(51) 售票; P(S2) 开车门; 上下乘客; } end 8、一个快餐厅有4类职员: (l)领班: 接受顾客点菜; (2)厨师: 准备顾客的饭菜;(3)包工: 将做好的饭菜打包;(4)出纳员: 收款并提交食品。 每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。 答: 典型的进程同步问题,可设四个信号量51、S2、S3和S4来协调进程工作。 varS1,S2,S3,S4: semaphore; S1: =1;S2: =S3: =S4: =0; cobegin {processP1 begin repeat 有顾客到来; P(S1); 接受顾客点菜; V(52); untilefalse; end processP2 begin repeat P(S2); 准备顾客的饭菜; v(S3); untilefalse; end processP3 begin repeat P(S3); 将做好的饭菜打包; V(S4); untilefalse; end processP4 begin repeat P(54); 收款并提交食品;V(51); ufltilefalse; end } coend. 9、在信号量S上作P、v操作时,S的值发生变化,当S>0、S=0、S<0时,它们的的物理意义是什么? 答: S的值表示它代表的物理资源的使用状态: S>0表示还有共享资源可供使用。 S阅表示共享资源正被进程使用但没有进程等待使用资源。 S<0表示资源已被分配完,还有进程等待使用资源。 10 (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+l;②k: =0;④ untilfalse;untilfalse; l)K的初值为5,故P1执行两个循环后,K=23。 2)语句并发执行有以下情况: ①、②、③、④,这时的打印值为: 47 ③、④、①、②,这时的打印值为: 23 ①、③、②、④,这时的打印值为: 46 ①、③、④、②,这时的打印值为: 46 ③、①、②、④,这时的打印值为: 23 ③、①、④、②,这时的打印值为: 23 由于进程P1和P2并发执行,共享了变量K,故产生了‘结果不唯一’。 11证明信号量与管程的功能是等价的: (l)用信号量实现管程; (2)用管程实现信号量。 答: (1)用信号量实现管程; Hoare是用信号量实现管程的一个例子,详见课文内容。 下面介绍另一种简单方法: 每一个管程都对应一个mutex,其初值为1,用来控制进程互斥调用管程。 再设一个初值为0的信号量,用来阻塞等待资源的进程。 相应的用信号量实现的管程库过程为: Varmutex,c: semaphore; mutex: =1;c: =0; voidenter-monitor()/*进入管程代码,保证互斥 P(mutex); } voidleave-monitor-normally()/*不发信号退出管程 { V(mutex); } voidleave-with-sigal(c)/*在条件c上发信号并退出管程,释放一个等待c条件的进程。 {注意这时没有开放管程,因为刚刚被释放的进程己在管程中。 V(c); } voidwait(c)/*等待条件c,开放管程 { V(mutex); P(c); } (2)用管程实现信号量。 TYPEsemaphore=monitor VARS;condition; C: integer; DEFINEP,V; USEcheck,wait,signal,release; procedureP begin check(IM); C: =C-1: ifC<0thenwait(S,IM); release(IM); end procedureV begin check(IM): C: =C+1; ifC≤0thensignal(S,IM); release(IM); end begin C: =初值; End. 12证明消息传递与管程的功能是等价的: (1)用消息传递实现管程; (2)用管程实现消息传递。 答: (1)用消息传递实现管程; 用消息传递可以实现信号量(见13 (2)),用信号量可以实现管程(见11 (1)),那么,把两种方法结合起来,就可以用用消息传递实现管程。 (2)用管程实现消息传递。 TYPEmailbox=monitor VARr,k,count: integer; buffer: array[0…n-1]ofmessage; full,empty: condition; DEFINEadd,get; USEcheck,wait,signal,release; procedureadd(r); begin check(IM); ifcount=nthenwait(full,IM); buffer[r]: =message; r: =(r+1)modn count: =count+1; ifcount=1thensighal(empty,IM); release(IM); end procedureget(m); begin check(IM); ifcount=0thenwait(empty,IM); m: =buffer[k」; count: =count-1; ifcount=n-1thensignal(full,IM); release(IM); end begin r: =0;k: =0;count: =0; end 13证明信号量与消息传递是等价的: (1)用信号量实现消息传递; (2)用消息传递实现信号量。 答: (l)用信号量实现消息传递; 1)把消息队列组织成一个共享队列,用一个互斥信号量管理对该队列的入队操作和出队操作. 2)发送消息是一个入队操作,当队列存储区满时,设计一个同步信号量阻塞send操作。 3)接收消息是一个出队操作,当队列存储区空时,设计另一个同步信号量阻塞receive操作。 (2)用消息传递实现信号量。 l)为每一个信号量建立一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 习题 答案