ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:31.14KB ,
资源ID:6247532      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6247532.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统原理与实践教程第三版第4章习题答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统原理与实践教程第三版第4章习题答案.docx

1、操作系统原理与实践教程第三版第4章习题答案第4章 进程同步与死锁(1) 什么是进程同步?什么是进程互斥?解:同步是进程间的直接制约关系,这种制约主要源于进程间的合作。进程同步的主要任务就是使并发执行的各进程之间能有效地共享资源和相互合作,从而在执行时间、次序上相互制约,按照一定的协议协调执行,使程序的执行具有可再现性。进程互斥是进程间的间接制约关系,当多个进程需要使用相同的资源,而此类资源在任一时刻却只能供一个进程使用,获得资源的进程可以继续执行,没有获得资源的进程必须等待,进程的运行具有时间次序的特征,谁先从系统获得共享资源,谁就先运行,这种对共享资源的排它性使用所造成的进程间的间接制约关系

2、称为进程互斥。互斥是一种特殊的同步方式。(2) 进程执行时为什么要设置进入区和退出区?解:为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为“进入区”代码;在退出临界区后,必须执行“退出区”代码,用于恢复未被访问标志。(3) 同步机构需要遵循的基本准则是什么?请简要说明。解:同步机制都应遵循下面的4条准则:1.空闲让进。当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行有限的时间。2.忙则等待。当有

3、一个进程在临界区时,其它欲进入临界区的进程必须等待,以保证进程互斥地访问临界资源。3.有限等待。对要求访问临界资源的进程,应保证进程能在有限时间内进入临界区,以免陷入“饥饿”状态。4.让权等待。当进程不能进入临界区时,应立即放弃占用CPU,以使其它进程有机会得到CPU的使用权,以免陷入“饥饿”状态。(4) 整型信号量是否能完全遵循同步机构的四条基本准则?为什么?解:不能。在整型信号量机制中,未遵循“让权等待”的准则。(5) 在生产者-消费者问题中,若缺少了V(full)或V(empty),对进程的执行有什么影响? 解:如果缺少了V(full),那么表明从第一个生产者进程开始就没有对信号量ful

4、l值改变,即使缓冲池存放的产品已满了,但full的值还是0,这样消费者进程在执行P(full)时会认为缓冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。如果缺少了V(empty),例如在生产者进程向n个缓冲区放满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品时empty并没有被改变,直到缓冲池中的产品都取走了,empty的值也一直是0,即使目前缓冲池有n个空缓冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。(6) 在生产者-消费者问题中,若将P(full)和P(empty)交换位置,或将V(full)或V(e

5、mpty)交换位置,对进程执行有什么影响? 解:对full和empty信号量的P、V操作应分别出现在合作进程中,这样做的目的是能正确表征各进程对临界资源的使用情况,保证正确的进程通信联络。 (7) 利用信号量写出不会出现死锁的哲学家进餐问题的算法。解:对哲学家按顺序从0到4编号,哲学家i左边的筷子的编号为i,哲学家右边的筷子的编号为(i+1)%5。semaphore chopstick5=1; /定义信号量数组chopstick5,由于侉子是临街资源(互斥),故设置初值均为1。Pi()/i号哲学家的进程 do if(i(i+1)%5) wait(chopsticki); wait(chopst

6、ick(i+1)%5); else wait(chopstick(i+1)%5); wait(chopsticki); eat signal(chopsticki); signal(chopstick(i+1)%5); think while(1);(8) 利用AND型信号量和管程解决生产者-消费者问题。解:利用AND信号量解决生产者消费者问题的算法描述如下:var mutex,empty,full: semaphore:=1,n,0;buffer: array0,.,n-1 of item;in out: integer := 0, 0;beginparbeginproducer: begi

7、nrepeat.produce an item in nextp;.Swait(empty, mutex); buffer(in) := nextp;in := (in+1) mod n;Ssignal(mutex, full);until false;endconsumer: beginrepeatSwait(full, mutex);nextc := buffer(out);out := (out+1) mod n;Ssignal(mutex, empty);consume the item in nextc;until false;endparendend 利用管程机制解决生产者-消费者

8、问题,首先需要建立一个管程ProducerConsumer,其中包含两个过程insert(item)和consumer(item)。生产者-消费者同步问题可以用伪代码描述如下:monitor ProducerConsumer condition full,empty; int count; void insert(int item) if (count=N) wait(full); insert(item); count=count+1; if (count=1) signal(empty); int remover() if (count=0) wait(empty); remove=rem

9、ove_item; count=count-1; if (count=N-1) signal(full); count=0;end monitorvoid producer() while (true) item=produce_item; ProducerConsumer.insert(item); void consumer() while (true) item=ProducerConsumer.remove; consume(item) (9) 进程的高级通信机制有哪些?请简要说明。解:进程的高级通信机制分为三大类:共享存储系统、消息传递系统和管道通信系统。1.共享存储器系统:在共享存

10、储器系统中,相互通信的进程通过共享某些数据结构或共享存储区实现进程之间的通信。该系统又可进一步细分为两种方式:基于共享数据结构的通信方式和基于共享存储区的通信方式。2.消息传递系统:消息传递机制可以实现不同主机间多个CPU上进程的通信。这种方式需要使用两条原语send和receive来发送和接收格式化的消息(message)。 3.管道通信系统:管道通信是一种以文件系统为基础实现的适用于在进程之间实现大量数据传送的通信方式。(10) 什么是死锁?产生死锁的原因和必要条件是什么?解:所谓死锁是指在一个进程集合中的所有进程都在等待只能由该集合中的其它一个进程才能引发的事件而无限期地僵持下去的局面。

11、 产生死锁的原因可以归结为两点:1)竞争资源, 2)各进程之间的推进顺序不当。 产生死锁的必要条件有四个:1)互斥条件, 2)不剥夺条件, 3)请求和保持条件, 4)环路条件。(11) 死锁的预防策略有哪些?请简要说明。解:死锁的预防策略有三,说明如下:1.摒弃请求和保持条件:为摒弃请求和保持条件,系统中需要使用静态资源分配法,该方法规定每一个进程在开始运行前都必须一次性地申请其在整个运行过程中所需的全部资源。此时,若系统有足够的资源,就把进程需要的全部资源一次性地分配给它;若不能全部满足进程的资源请求,则一个资源也不分给它,即使有部分资源处于空闲状态也不分配给该进程。这样,当一个进程申请某个

12、资源时,它不能占有其它任何资源,在进程运行过程中也不会再提出资源请求。这种方法破坏了请求和保持条件,从而避免死锁的发生。2.摒弃不剥夺条件:要摒弃“不剥夺条件”,可以使用如下策略:进程在需要资源时才提出请求,并且进程是逐个地申请所需资源,如果一个进程已经拥有了部分资源,然后又申请另一个资源而不可得时,其现有资源必须全部释放。在这种方法中,进程只能在获得其原有资源和所申请的新资源时才能继续执行。3.摒弃环路等待条件:为确保环路等待条件不成立,可以在系统中实行资源有序分配策略,即系统中的所有资源按类型被赋予一个唯一的编号,每个进程只能按编号的升序申请资源。(12) 某系统中有A、B、C、D四类资源

13、,且其总数量都是8个。某时刻系统中有5个进程,判断下列资源状态是否安全?若进程P2申请资源(1,1,1,1),能否为其分配?进程NeedA B C DAllocationA B C DP00 0 4 30 0 2 2P12 6 3 01 1 0 0P23 2 1 52 1 0 3P34 0 2 02 0 0 0P40 5 5 40 2 2 2解:现在对该时刻的状态进行安全分析: 由于Available向量为(3,4,4,1),所以Work向量初始化为(3,4,4,1)此时的Work小于任意的Needi向量,所以系统处于不安全状态 由于Request2(1,1,1,1)Available(3,4

14、,4,1)且Request2(1,1,1,1)0并且所有进程的最大需求量之和小于m+n,试证明系统不会产生死锁。解:本题中只有一种资源,不妨设Maxi为第i个进程的资源总共需要量,Needi为第i个进程还需要的资源数量,Allocationi表示第i个进程已经分配到的资源数量,Available为系统剩余的资源数,其中i=1,2,3,n。假设此系统可以发生死锁。系统剩余的资源数量为Available(Available=0),由假设,因为系统处于死锁状态,所以Available个资源无法分配出去,所以每个进程的Needi都大于Available,即 Needi=Available+1所以 Ne

15、edi=n*(Available+1)=n*Available+n, 因为剩下的资源数是Available,所以已经分配出去的资源数为m Available;即 Allocationi=m Available 由式和式可以得到:Needi + Allocationi=n*Available+n+ m Available=(n-1)*Available+m+n 又因为n=1,所以(n-1)=0,又因为Available=0,所以(n-1)*Available=0 由式和式可以得到Needi + Allocationi=0+m+n=m+n 根据题意知: Maxim+n 又因为:Maxi=Needi

16、+Allocationi,所以Maxi= Needi + Allocationi 由式和式得:Needi + Allocationi 0时,它表示可以继续进入购票厅的人数,当s = 0时表示厅内已有20人正在购票,当s 0时| s |表示正等待进入的人数。semaphore S=20;beginparbeginprocedure:beginrepeatwait(s); Enter and buy ticket; signal(s); until false;end parend end 最大值为20,最小值为20-n(17) 在测量控制系统中的数据采集任务时,把所采集的数据送往一单缓冲区;计算

17、任务从该单缓冲区中取出数据进行计算。试写出利用信号量机制实现两个任务共享单缓冲区的同步算法。解:semaphore mutex = 1;semaphore full = 0;semaphore empty = 1;begin parbegincollect:begin repeat collect data in nextp; wait(empty); wait(mutex);buffer:=nextp;signal(mutex);signal(full);until false; endcompute:begin repeat wait(full); wait(mutex);nextc:=b

18、uffer;signal(mutex);signal(empty); compute data in nextc;until false; end parend end(18) 桌上有一空盘,允许存放一只水果。爸爸可以向盘中放苹果,也可以向盘中放桔子,儿子专等着吃盘中的桔子,女儿专等着吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者用,请用信号量实现爸爸、儿子和女儿3个并发进程的同步。解:本题中应设置三个信号量S、So、Sa,信号量S表示盘中是否为空,其初值为1;So表示盘中是否有桔子,其初值为0;Sa表示盘中是否有苹果,其初值为0。同步描述如下:爸爸: P(S); 儿子:P(So); 女儿

19、:P(Sa); 将水果放入盘中 从盘子中取出桔子 从盘子中取出苹果 if (放入的是桔子) v(So); V(S); V(S); else v(Sa); 吃桔子 吃苹果;(19) 设某系统中有3个进程Get、Process和Put,共用两个缓冲区buffer1和buffer2。假设buffer1中最多可以放11个信息,现在已经放入了两个信息;buffer2最多可以放5个信息。Get进程负责不断地将输入信息送入buffer1中,Process进程负责从buffer1中取出信息进行处理,并将处理结果送到buffer2中,Put进程负责从buffer2中读取结果并输出。试用信号量机制实现它们的同步与

20、互斥。解:semaphore empty1=9; /buffer1空的数量semaphore full1=2; /buffer1满的数量semaphore empty2=5; /buffer2空的数量semaphore full2=0; /buffer2满的数量in1,in2,out1,out2:integer := 2,0,1,0;Get()while(1)wait(empty1) in1=(in1+1)mod11 signal(full1) Process()while(1)wait(full1) out1=(out1+1)mod11 signal(empty1) signal(empty

21、2) in2=(in2+1)mod5 signal(full2) Put()while(1)wait(full2) out2=(out2+1)mod5 signal(empty2) (20) 某寺庙有大、小和尚若干,另有一水缸。由小和尚挑水入缸供大和尚饮用。水缸可以容10桶水,水取自同一井。水井很窄,每次只能容一个水桶取水。水桶总数为3。每次入、取缸水仅为1桶,且不可同时进行。试给出取水、入水的同步算法。解:semaphore well=1; / 保证互斥地访问水井的信号量semaphore vat=1; / 保证互斥地访问水缸的信号量semaphore empty=10; / 表示水缸中剩余

22、的空间能容纳的水的桶数semaphore full=0; / 表示水缸中水的桶数semaphore pail=3; / 保证互斥地访问临界资源水桶的信号量/ 大和尚进程big_monk() while(1) wait(full); wait(pail); wait(vat); use pail to get water from vat signal(vat); signal(empty); drink water in the pail signal(pail); / 小和尚进程 little_monk() while(1) wait(empty); wait(pail); wait(wel

23、l); use pail to get water from well signal(well); wait(vat); pour water to the vat signal(vat); signal(full); signal(pail); (21) 在银行家算法中,若出现下述资源分配情况: Process Allocation Need Available P0 0 0 3 2 0 0 1 2 1 6 2 2 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6 P3 0 0 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6 试问: 该状态是否安全?

24、若进程 P2 提出请求 Request( 1, 2, 2, 2 )后,系统能否将资源分配给它?解:现在对该时刻的状态进行安全分析: 由于Available向量为(1,6,2,2),所以Work向量初始化为(1,6,2,2)该时刻的安全性检查表如下:WorkNeedAllocationWork+AllocationFinishABCDABCDABCDABCDP01622001200321654TrueP31654065200321686TrueP416860656001416910TrueP21691023561354291414TrueP129141417501000391414True 如表

25、所示,存在安全序列,所以该时刻处于安全状态。 由于Request2(1,2,2,2)Available(1,6,2,2)且Request2(1,2,2,2)Need2(2,3,5,6),所以先试着把P2所申请的资源分配给它,Available变为(0,4,0,0)得到系统状态如下表所示:AllocationNeedAvailableABCDABCDABCDP0003200120400P110001750P225761134P300320652P400140656 然后进行安全性检测,此时Available为(0,4,0,0),所以Work初始化为(0,4,0,0)。 此时的Work小于任意的Needi向量,所以系统处于不安全状态,即认为不能分配资源(0,2,0)给P2。(22) 设系统中仅有一类数量为M的独占型资源,系统中有N个进程竞争该类资源,其中各进程对该类资源的最大需求量为W。当M、N、W分别取下列值时,试判断哪些情形可能会发生死锁,为什么?(1)M=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1