操作系统作业答案.doc
《操作系统作业答案.doc》由会员分享,可在线阅读,更多相关《操作系统作业答案.doc(8页珍藏版)》请在冰豆网上搜索。
![操作系统作业答案.doc](https://file1.bdocx.com/fileroot1/2022-10/19/bc14ef91-c466-4f8e-8170-5a964d4ac4a5/bc14ef91-c466-4f8e-8170-5a964d4ac4a51.gif)
习题一
1、举例说明为什么对并发执行的程序不加控制会产生与执行时间有关的错误?
解:
程序在并发执行时由于资源是共享的,而且常常资源数少于程序对这些资源的需求数,致使这些并发执行的程序之间因为竞争资源导致存在间接制约关系,这种间接制约使得并发执行的程序具有随机性(异步性),即“执行—暂停—执行”,它们何时启动、何时停止是未知的。
例如:
飞机售票系统、堆栈的存数与取数过程等(示例说明略)。
2、程序并发执行为什么会失去顺序执行时的封闭性和可再现性?
解:
所谓“封闭性”是指程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。
在程序并发执行时由于资源共享,导致这些资源的状态将由多个程序来改变,又由于存在程序执行的随机性,所以程序的运行失去封闭性。
由于失去了封闭性,也将导致其失去可再现性。
即虽然它们执行时的环境和初始条件相同,但得到的结果却可能各不相同。
习题二
1、试用加锁的方法解决飞机售票系统的问题。
例:
民航售票系统,n个售票处
2、用机器指令(testAndset)解决飞机售票系统中任一进程的算法。
习题三
1、进程在做P、V操作时对自己和其他进程有何影响?
进程在信号量上执行P操作后,若信号量的值为正,当前进程继续执行;若信号量的值为负,当前进程变为等待状态、放弃处理机,其它进程则有机会获得CPU。
进程在信号量上执行V操作后,不会对自己有任何影响,但当信号量的值不大于0时,需要唤醒在该信号量上所对应的等待队列中的进程。
2、设课程的前驱、后继关系如下,若每修一门课程看作进程Px(x∈1..6)试用P、V操作算法描述这种前驱与后继关系。
答:
Semaphore:
S1:
=S2:
=S3:
=S4:
=S5:
=S6:
=0;
BeginCobeginP1、P2、P3、P4、P5、P6coend;end.
P1() P2() P3()
Begin begin begin
修计算机导论; P(S1); P(S2);
V(S1);修高级语言程序设计修计算机组成原理;
V(S2);V(S3) V(S4);
End; End; End;
P4()P5() P6()
Begin begin begin
P(S3); P(S4); P(S5);
修数据结构;修86汇编语言;P(S6);
V(S5);V(S6);修操作系统;
End; End; End;
习题四
1、有三个进程R、W1、W2,进程R从输入设备上读数据送缓冲区B,若是奇数由W1进程从B取数输出;若是偶数则由W2进程从B取数输出。
设缓冲区B只有一个单元,试用信号量机制设计实现算法。
1、se,sf1,sf2:
semaphore;
se:
=1;sf1:
=sf2:
=0;
R()、W1()、W2()并发执行
ProcessRprocessW1processW2
repeatrepeatrepeat
读数; P(sf1);P(sf2);
P(se);从B中取数;从B中取数;
送数到B;V(se);V(se);
ifBmod2!
=0thenuntilfalseuntilfalse
V(sf1);
else
V(sf2);
untilfalse
2、设有一台计算机,挂有一台输入机和一台打印机。
现在从输入机上把数据输入到缓冲区B中,处理程序处理后再把结果送到缓冲区B中,(设B只能放1个数据)然后在打印机上输出。
问:
(1)系统可设哪些进程来完成这一任务?
(2)这些进程之间有什么样的制约关系?
(3)用PV操作写出这些进程的同步算法.
答:
(1)输入进程、处理进程、输出进程
(2)处理进程不能在输入进程之前执行、输出进程不能在处理进程之前执行;输入进程在未得到处理进程、输出进程的消息前不能运行。
(3)输入()、处理()、输出()进程并发执行
Semaphore:
s1、s2、s3;S1:
=1;S2:
=S3:
=0;
process输入()process处理()process输出()
L1:
读数L2:
P(S2)L3:
P(S3)
P(S1)从B取数处理后再送B从B取数输出
送数到BV(S3)V(S1)
V(S2)GotoL2GotoL3
GotoL1
习题五
1、设系统中有M个资源,N个进程,每个进程都要求K个资源;若M=5、N=5、K=2,问:
(1)如何分配会导致死锁?
(2)要不死锁应该如何分配?
•如果对每个进程平均分配1个资源,则系统中的可用资源为0,而每个进程都还需要1个资源,才能向前推进;因此、系统发生死锁。
•只要保证有1个进程能获得2个资源,则它在有限的时间内就可以运行完成并释放资源,这样系统就不会死锁。
例如、先给4个进程各分配1个资源,让它们先运行,通过安全性算法测试可以知道第5个进程的资源申请将被拒绝;再把最后1个资源分配给这4个进程中的1个即可。
2、假设甲、乙、丙三个并发进程间的PV操作同步算法如下所示,信号量S1,S2,S3的初值都为1,问这些算法在什么情况下发生死锁?
如何防止死锁?
甲乙丙
...
L1:
P(S1)L2:
P(S2)L3:
P(S3)
P(S2)P(S3)P(S1)
...
V(S2)V(S3)V(S1)
V(S1)V(S2)V(S3)
...
gotoL1gotoL2gotoL3
答:
甲P(S1)后暂停、乙P(S2)后暂停、丙P(S3)后暂停
采用按序分配,丙改为P(S1)、P(S3)。
也可以改甲或乙进程的P、V操作次序,以限制进程的并发执行。
习题六
1.设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。
但是,桌子上总共只有5支筷子,在每人两边分开各放一支。
哲学家们在肚子饥饿时才试图分两次从两边拾起筷子就餐。
条件:
(1)只有拿到两支筷子时,哲学家才能吃饭。
(2)如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷子。
(3)任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子。
试:
(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。
(2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。
(3)在什么情况下,5个哲学家全部吃不上饭?
答:
使用非对称解决–即奇数号的哲学家先拿起他左边的筷子,接着拿起他右边的筷子,而偶数号的哲学家先拿起他右边的筷子,接着再拿他左边的筷子。
(1)设信号量c[0]~c[4],初始值均为1,分别表示i号筷子被拿(i=0,1,2,3,4),
send(i):
第i个哲学家要吃饭
begin
think;
P(c[i]);P(c[i+1mod5]);
eat;
V(c[i+1mod5]);V(c[i]);
End;
该过程能保证两邻座不同时吃饭,但会出现5个哲学家一人拿一只筷子,谁也吃不上饭的死锁情况
(2)解决的思路:
让奇数号的哲学家先取右手边的筷子,让偶数号的哲学家先取左手边的筷子.这样,任何一个哲学家拿到一只筷子之后,就已经阻止了他邻座的一个哲学家吃饭的企图,除非某个哲学家一直吃下去,否则不会有人会饿死.
send(i):
第i个哲学家要吃饭
Begin
think;
Ifimod2==0then{
P(c[i]);P(c[i+1]mod5))
eat;
V(c[i];c[i+1mod5])}
else{
P(c[i+1mod5])
P(c[i])
Eat
V(c[i+1mod5])
V(c[i])}
End
(3)
非对称解决,并发主程序略
Programdiningphilosophers;
Varchopstick:
array[0..4]ofsemaphore(:
=1),i:
integer;
Procedurephilosopher(i:
integer);
Begin
Repeat
Think;
If(imod2!
=0)then
Begin
P(chopstick[i]);P(chopstick[(i+1)mod5]);吃面;
V(chopstick[(i+1)mod5]);V(chopstick[i]);
End
Else
Begin
P(chopstick[(i+1)mod5]);P(chopstick[i]);吃面;
V(chopstick[(i+1)mod5]);V(chopstick[i]);
End
Forever
End
习题七
1、某程序在虚拟(逻辑)地址100处有一条取数指令LOAD1,500而500单元存放数据51888。
若程序分配