ch09死锁及饿死.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学要求 本章目的: 本章介绍因操作系统共享资源,各进程在争用资源时产生死锁的现象、成因和解决方案。 教学目标: 掌握死锁的形成原因和条件;掌握死锁的预防、避免和预测的概念及其有关算法。 重点与难点: 死锁形成的必要条件;银行家算法;死锁的检查算法。 专业术语: 死锁预防、死锁避免、死锁检测 9.1 死锁的形成 死锁是由于并发进程只能按互斥方式访问临界资源等多种因素应起的,且与执行速度和时间密切相关的错误现象。 定义:各并发进程彼此互相等待对方所拥有的资源,并且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源,从而造成的无法向前推进的状态称为死锁。 如果没有外界干预,所有进程都将永久僵持下去。所以死锁是操作系统必须解决的问题,也是一个研究领域。 解决死锁的方法有:死锁的预防、死锁的避免和死锁的检测。 9.2 死锁的必要条件 互斥(Mutual exclusion):独占资源,即一次只有一个进程可以使用资源。 占有且等待(Hold and wait):允许一个进程在不释放已分配到的资源的情况下,请求并等待分配新的资源。 非剥夺(No preemption):不可抢占性,即不可能从已经占有资源的进程中强行剥夺资源。 循环等待(Circular wait):存在一个封闭的进程链,使得每个资源至少占有下一个进程所需要的资源。即P1等待P0占有的资源,P2等待P1占有的资源,……。 前三个条件是死锁的必要条件,但不是充分条件。第4个条件蕴含了前三个条件的成立。也就是说,如果前三个条件存在,可能发生的一系列事件导致不可解决的循环等待。这实际上就是死锁的定义。前三个条件起决定作用,而第4条是取决于所涉及到的进程请求和释放资源的顺序而可能发生的一种情况。这4条构成了充分必要条件。 9.3 死锁的预防(deadlock prevention) 死锁的预防采用的是在系统中排除发生死锁的可能性的方法。其方法之一是防止前3个必要条件中的任何一个发生;另一方法是防止第4条条件的发生。 互斥:对于多数情况下,计算机资源时需要互斥使用。 破坏占有且等待条件:有两个方法处理这个问题:一是要求每个进程在运行之前申请他所需要的全部资源,这样在运行时就不需要再申请资源。二是规定每个进程在请求新的资源之前必须释放所占有的资源。 破坏非剥夺条件:收回进程已经占有的资源有两个方法:一是如果占有资源的进程申请新的资源时,不能立即分配到,则该进程必须立即释放它占有的资源。第二个方法是,如果一个进程请求当前被另一个进程占有的一个资源,而这个占有资源的进程在等待更多的资源,操作系统可以剥夺这个等待进程的资源。 破坏循环等待条件:为确保系统在任何时候都不会进入循环等待的状况,将所有资源分类线性编码排序。即给每类每个资源一个唯一的编号,并按编号的大小给资源定序。 9.4 死锁的避免(deadlock avoidance) 在系统动态分配资源的过程中模拟测算出死锁发生的可能性并加以预防。进行模拟分配的测算算法为“银行家算法”。 资源分配状态和安全性。如果操作系统能保证所有的进程在有限的时间能得到需要的全部资源,则称系统处于安全状态。否则是不安全的。 9.4 死锁的避免. 银行家算法的数据结构 9.4 死锁的避免. 银行家算法的关系 9.4 死锁的避免. 银行家算法的目标 在系统给定向量Resource和矩阵Claim确定的情况下,看向量Available是否满足矩阵Request,如果在匹配过程中都能满足所有进程的需要,则这次分配是安全的。 9.4 死锁的避免. 银行家算法的案例 在(a1)状态时(见(a1)、(b1)和(c1)),进程B提出对打印机的需求。 9.4 死锁的避免. 银行家算法的案例 (1) 在安全状态下,系统接到一个进程的资源请求后,假定接受这一请求,把需要的资源分配给这个进程。修改矩阵Allocation、Request和向量Available。见(a2)、(b2)和(c2) (2) 在这一假设下,检查每一个进程对资源的需要数。看能否在矩阵Request中找到一个进程的资源需求数小于系统剩余资源数Available。如果找不到,那么系统就有可能存在死锁。因为任何进程都无法运行结束。 (3) 如果找到了,就假设它获得了最大资源数,并能运行结束。我们看到D进程只需一个打印机,Available能完全满足它。于是我们完全满足D进程的资源需求,使其运行完成。见(a3)、(b3)和(c3)。然后把D进程的finish标志设置为1。收回它使用的所有资源,修改Available向量。见(a4)、(b4)和(c4)。 (4) 在finish标志为0的进程中重复以上两步,直到找不到资源需要数小于系统剩余资源数的进程为止。首先我们找到进程A能满足,于

文档评论(0)

yyh892289 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档