- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6.5.4 饥 饿 与死锁和活锁非常相似的一个问题是饥饿(starvation)。在动态运行的系统中,在任何时刻都可能请求资源。这就需要一些策略来决定在什么时候谁获得什么资源。虽然这个策略表面上很有道理,但依然有可能使一些进程永远得不到服务,虽然它们并不是死锁进程。 作为一个例子,考虑打印机分配。设想系统采用某种算法来保证打印机分配不产生死锁。现在假设若干进程同时请求打印机,究竟哪一个进程能获得打印机呢? 6.5.4 饥 饿 一个可能的分配方案是把打印机分配给打印最小文件的进程(假设这个信息可知)。这个方法让尽量多的顾客满意,并且看起来很公平。我们考虑下面的情况:在一个繁忙的系统中,有一个进程有一个文件要打印,每当打印机空闲,系统纵观所有进程,并把打印机分配给打印最小文件的进程。如果存在一个固定的进程流,其中的进程都是只打印小文件,那么,要打印大文件的进程永远也得不到打印机。很简单,它会“饥饿而死”(无限制地推后,尽管它没有被阻塞)。 6.5.4 饥 饿 饥饿可以通过先来先服务资源分配策略来避免。在这种机制下,等待最久的进程会是下一个被调度的进程。随着时间的推移,所有进程都会变成最“老”的,因而,最终能够获得资源而完成。 6.6 哲学家就餐问题 现在来考虑Dijkstra引入的哲学家就餐问题。有五位哲学家住在一栋房子里,在他们的面前有一张餐桌。每位哲学家的生活就是思考和吃饭。通过多年的思考,所有的哲学家一致同意最有助于他们思考的食物是意大利面条。由于缺乏手工技能,每位哲学家需要两把叉子来吃意大利细面条。 6.6 哲学家就餐问题 吃饭的布置很简单,如图6-15所示:一张圆桌上有一大碗面和5个盘子,每位哲学家一个,还有5把叉子。每位想吃饭的哲学家将坐到桌子旁分配给他的位置上,使用盘子两侧的叉子,取面和吃面。问题是:设计一套礼仪(算法)以允许哲学家吃饭。算法必须保证互斥(没有两位哲学家同时使用同一把叉子),同时还要避免死锁和饥饿(此时,该术语的字面含义和算法的意思相同)。 图6-15 哲学家的就餐布局 6.6 哲学家就餐问题 这个问题确实说明了死锁和饥饿中的基本问题。此外,解决方案的研究展现了并发程序设计中的许多困难。哲学家就餐问题可以视为当应用程序中包含并发线程的执行时,协调处理共享资源的一个有代表性的问题。因此,该问题是评价同步方法的一个测试标准。 6.6.1 基于信号量解决方案 图6-16给出了基于信号量的解决方案。每位哲学家首先拿起左边的叉子,然后拿起右边的叉子。在哲学家吃完面后,这两把叉子又被放回桌子。这个解决方案会导致死锁:如果所有的哲学家在同一时刻都感到饥饿,他们都坐下来,都拿起左边的叉子,都伸手拿右边的叉子但都没拿到。在这种有损尊严的状态下,所有的哲学家都会处于饥饿状态。 图6-16 哲学家就餐问题的第一种解决方案 6.6.1 基于信号量解决方案 为避免死锁的危险,可以再另买5把叉子(一种更卫生的解决方案),或者教会哲学家仅用一把叉子吃面。另一种方法是,考虑增加一位服务员,他只允许4位哲学家同时进入餐厅,由于最多有4位哲学家就座,因而至少有一位哲学家可以拿到两把叉子。图6-17显示了这种方案,这里再次使用了信号量,这个方案不会发生死锁和饥饿。 图6-17 哲学家就餐问题的第二种解决方案 6.6.2 基于管程解决方案 图6-18给出了基于管程的哲学家就餐问题的解决方案。这种方案定义了一个含有5个条件变量的向量,每把叉子对应一个条件变量。这些条件变量用来标示哲学家等待的叉子可用情况。另外,用一个布尔向量记录每把叉子的可用情况(true表示叉子可用)。管程包含了两个过程。get_forks函数用于表示哲学家取他/她左边和右边的叉子。如果至少有一把叉子不可用,那么哲学家进程就会在条件变量的队列中等待。这可让另外的哲学家进程进入管程。Release_forks函数用来标示两把叉子可用。 图6-18 哲学家就餐问题 的管程解决为案 6.6.2 基于管程解决方案 注意,这种解决方案的结构和图6-16中的信号量解决方案相似。在这两种方案中,哲学家都是先取左边的叉子,然后取右边的叉子。和信号量不同的是,管程不会发生死锁,因为在同一时刻只有一个进程进入管程。比如,第一位哲学家进程进入管程保证了只要他拿起了左边的叉子,在他右边的哲学家可以拿到其左边的叉子之前(即这位哲学家右边的叉子),就一定可以拿到右边的叉子。 Thanks! 6.4.2 破坏占有和等待条件 这种方法的一个直接问题是很多进程直到运行时才知道它需要多少资源。实际上,如果进程能够知道它需要多少资源,就可以使用银行家算法。 6.4.2 破坏占有和等待条件 另一个问题是这种方法的资源利用率不是最优的。例如,有一个进程先从输入磁带上读取数据,进
您可能关注的文档
- 光传输网组建与维护项目化教程 杜文龙 2课程介绍新.ppt
- 光传输网组建与维护项目化教程 杜文龙 5任务2组网设备规划新.ppt
- 光传输网组建与维护项目化教程 杜文龙 7任务3硬件设备安装新.ppt
- 光子学与光电子学 原荣 第6章 光电效应及应用新.ppt
- 互换性与测量技术 第2版 周文玲 互换性(第2版) 第1章新.ppt
- 互换性与测量技术基础 第3版 周兆元 第二章测量技术基础新.ppt
- 互换性与测量技术基础 第3版 周兆元 第三章尺寸公差、配合与检测新.ppt
- 互换性与测量技术基础 第4版 王伯平 互换性与测量技术基础(王伯平 1)2003版新.ppt
- 互换性与测量技术基础第2版 毛平淮 第5章新.ppt
- 会计基础与技能 何素花 第五章 借贷记账法新.ppt
原创力文档


文档评论(0)