《操作系统原理教程第4版26习题答案16页.docx》由会员分享,可在线阅读,更多相关《操作系统原理教程第4版26习题答案16页.docx(17页珍藏版)》请在第一文库网上搜索。
1、2-9.(1)x=3运行顺序为Px,P3,P5,P6,P9T=(x+(x+3)+(x+3+5)+(x+3+5+6)+(x+3+5+6+9)5=x+9.63x=5运行顺序为P3,Px,P5,P6,P9T=(3+(3+x)+(3+x+5)+(3+x5+6)+(3+x+5+6+9)5=0.8x+10.25v=6T=0.6x+11.2(4) 6x=9T=0.4x+12.4(5) 9xT=0.2x+14.2212计算采用FCFS、SJF.HRN的平均周转时间和平均带权周转时间:作业号提交时刻估计运行时间开始运行时刻完成时刻FCFSSJNRHNFCFSSJNRHN18.002.08.08.08.010.0
2、10.010.029.001.210.010.810.511.212.011.739.500.511.210.010.011.710.510.5410.200.311.710.511.712.010.812.02.05/3.3071.65/1.8751.875/2.81251) FCFS作业运行顺序:12,3,4各作业的周转时间Ti和平均周转时间T:T1=10.0-8.00=2.0T2=11.2-9.00=2.2T3=11.7-9.5=2.2T4=12.0-10.2=1.8T=(T1+T2T3+T4)4=(2.0+2.2+2.2+1.8)/4=8.2/4=2.05各个作业的平均带权周转时间W计
3、算如下:W=(22+2.21.2+2.2/0.5+1.8/0.3)=(1+1.83+4.4+6)/4=3.3072) SJN作业运行顺序:b3,4,2T1=I0.0-8.00=2.0T2=12-9.00=3T3=10.5-9.5=1.0T4=10.8-10.2=0.6T=(T1+T2+T3+T4)4=(2.0+3.0+1.0+0.6)/4=6.6/4=1.65各个作业的平均带权周转时间W计算如下:W=(22+31.2+1/0.5+0.6/0.3)/4=1.8753) HRN作业运行顺序:1,3,2,4先选择作业1从8.0010.00o当作业1完成时,究竟选谁运行,只有通过计算,选择响应比高者运
4、行:作业2的响应比二(IO-9.0)+1.2)/1.2=1.83作业3的响应比二(IO-9.5)+0.5)/0.5=2.0作业4还未到,只能选作业3运行。作业3运行至J10.5结束,再计算剩余的作业2和4:作业2的响应比二(10.5-9.0)+1.2)/1.2=2.25作业4的响应比二(IO.5-10.2)+0.3)/0.3=2选作业2运行。作业2到11.7完成。最后运行作业4。运行到12Q全部结束。各个作业的周转时间计算如下:t1=2t2=11.7-9=2.7t3=10.5-9.5=1t4=12-10.2=1.8各个作业的平均周转时间计算如下:T=(2+2.7+1+1.8)/4=1.875各
5、个作业的平均带权周转时间计算如下:W=(22+2.71.2+1/0.5+1.8/0.3)/4=2.81252-13.己知作业A,B,C,D,E需要的运行时间分别为10,6,2,4,8分钟,优先级分别为3,521,4。(1)轮转法(假定时间片=2分钟)作业完成的顺序为C,D,B,E,A开始作业轮转一周需10分钟,作业C的周转时间:TC=IO分钟(6分)C完成后,剩下四个作业,轮转一周需8分钟,作业D的周转时间:Td=IO+8义(4-2)/2=18分钟(16分)D完成后,剩下三个作业,轮转一周需6分钟,作业B的周转时间:Tb=18+6(6-2-2)/2=24(22分)B完成后,剩下两个作业,轮转一
6、周需4分钟,作业E的周转时间:Te=24+4=28分钟(28分)E完成后,只剩下作业A,作业A的周转时间:Ta=28+2=30分钟(30分)平均周转时间:T=(IO+18+24+28+30)/5=22分(20.4分)(2)优先级调度法作业完成顺序为:B,E,A,C,DTb=6分,Te=6+8=14分,Ta=I4+10=24分,TC=24+2=26分,Td=26+4=30分。平均周转时间:T=(6+14+24+26+30)/5=20分第3章答案3-7.系统中有n+1个进程。其中A1、A2An分别通过缓冲区向进程B发送消息。相互之间的制约关系为:发送进程A1、A2An要互斥地向BUF中送消息,当接
7、收进程B还未将消息接收完之前,任何一个发送不能再送。同样,B不能重复接收同一个消息。为此,应设置两个信号量S1和S2。设系统只有容纳个消息的缓冲区,川信号量S1表示,其初值为1,它用来制约发送进程。信号量s2用来制约接收进程,其初值为Oo1A11An进程B执行的过程为:beginP(S2)从缓冲区BUF取消息V(S1)消耗消息end现可用PV操作描述如下:进程A1An执行的过程为:begin准备消息P(s1)将消息送入BUFV(s2)end若缓冲区容量为m个,这个问题就变为生产者和消费者问题。3-8.首先这里的IN和OUT分别表示读写指针,而不是信号量。在系统初启时,环行缓冲区为空,此时IN和
8、OUT都初始化为0。当并发进程通过环行缓冲区通信时,写进程不断地写,读进程不断地读,使得读写指针不断变化。写进程的速度太快,缓冲区会满;读进程的速度太快,缓冲区会空。已知循环缓冲区的容量为IOOo则当(IN+1)%100=OUT时,说明缓冲区已满。当IN=OUT时,说明缓冲区已空。初始化时,IN=OUT=Oo一段时间以后:B1B2B3B4OUTIN3-9.为描述阅览室,用一个登记表来记录使用情况。表中共有100项。每当有读者进入阅览室时,为了正确地登记,各读者应互斥使用。为此设两个信号量。mutex:互斥信号量,用来制约各读者互斥地进行登记,其初值为1;empty同步信号量,用来制约各读者能同
9、时进入阅览室的数量,初值为100。下面用两个过程描述对表格应执行的动作:登记过程:擦除过程:beginbeginp(empty)p(mutex)p(mutex)找到自己的登记项擦除找到一个登记项登记v(mutex)v(mutex)v(empty)endend为了正确地描述读者的动作,我们可以将读者看成进程。若干读者希望进入阅览室时,调用登记过程,退出阅览室时,调用擦除过程。可见一个程序可对应多个读者。可设的进程数由读者数决定。其动作如下:begin调用登记过程进入阅览室阅读准备退出调用擦除过程end3-14.证明:假定会死锁,则根据死锁定义,N个进程之间相互等待,至少需要N个单位资源,又系统M
10、个资源已分完,故所有进程需求总和大于或等于M+N,这与题中的所有进程需求总和小于M+N矛盾,故假设不成立。因此,在这种情况下不会死锁。证明:假设当n个进程最多需要的资源之和小于m+n,系统死锁。Emaxitn+n/=II,最多需求ZNeedi=Zmaxi-Z1oanj=1/=1=1还需求匚二已占有因为系统死锁E1Oani=mZNeedin时,每个进程最多可以请求加/个该类资源当m=n时,每个进程最多可以请求1个该类资源当mn时,每个进程最多可以请求(m+n1)n个该类资源)3-16.叉子是临界资源,在一段时间内只允许一个哲学家使用。一个信号量表示一把叉子,五个信号量构成信号量数组,这些信号量的
11、初值为1。intfork0=fork1=.=fork4=1;第i个哲学家所执行的程序:doP(mutex);P(forki);P(fork(i+1)mod5);V(mutex);吃饭V(forki);V(fork(i+1)mod5);whi1e(1);3-17.(1)公平竞争(无写者时,读者仍遵循多个读者可以同时读)rmutex互斥共享readcount;rwmutex读写互斥,写写互斥;读写进程在z上排队。intutex=1,rwmutex=1,readcount=0;beginreader:P(z);读写进程在z上排队。p(rmutex);if(readcount=0)thenp(rwmu
12、tex);endif+readcount;v(rmutex);v(z);无写者时,多个读者可以同时读.readdata;p(rmutex);end(2)写者优先intreadcount,writecount;semaphorermutex=1,wmutex=1,rwmutex=1,z=1,x=1;reader:当来了一个写进程时,通过P(X)禁止其后读进程读,直到写进程写完为止。whi1e(1)P(z);其他读进程在z上排队P(X);一个读进程与一个写进程在X上竞争p(rmutex);读进程互斥访问readcount+readcount;if(readcount=1)p(rwmutex);v(
13、rmutex);v(x);V(z);readdata;临界区rp(rmutex);readcount;if(readcount=0)v(rwmutex);v(rmutex);Writer:whi1e(1)1p(wmutex);写进程互斥访问writecount+writecount;if(writecount=1)p(x);一个写进程与一个读进程在X上竞争Jv(wmutex);p(rwmutex);其他写进程在rwmutex上排队writedata;临界区v(rwmutex);p(wmutex);writecount;if(writecount=0)v(x);写进程都写完时,通过V(X)允许读进程读v(wmutex);附加题:读者优先,规定仅允许5个进程同时读,怎样修改程序?解:增加一个资源信号量s,初值为5。ints=5;Reader:beginP(rmutex);readcount=readcount+1;if(readcount=1)thenP(rwmutex);V(rmutex);P(s);read_fi1e();V(s);P(rmutex);readcount=readcount-1;if(rea