- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.5 死锁 多道进程的并发执行可以改善系统的资源利用率,但也可能导致死锁的发生。 1. 死锁的概念 死锁是指多个进程因竞争系统资源或相互通信而处于永久阻塞状态,若无外力作用,这些进程都将永远不能向前推进。 2. 死锁产生的原因和必要条件 死锁产生的原因是与资源的使用相关。下面介绍资源分类。 可剥夺和非剥夺资源 可剥夺资源是指某进程获得这类资源后,该资源可以被其他进程或系统剥夺。如CPU,存储器。 非剥夺资源又称不可剥夺资源,是指系统将这类资源分配给进程后,再不能强行收回,只能在进程使用完后主动释放。如打印机、读卡机。 永久性资源和消耗性资源 永久性资源:可顺序重复使用的资源。如打印机。 消耗性资源:由一个进程产生,被另一个进程使用短暂时间后便无用的资源,又称为临时性资源。如消息。 死锁产生的原因 死锁产生的原因是: 竞争资源:多个进程竞争资源,而资源又不能同时满足其需求。 进程推进顺序不当:进程申请资源和释放资源的顺序不当。 竞争资源引起的进程死锁 竞争非剥夺资源例。如,打印机R1和读卡机R2供进程P1和P2共享。 竞争消耗性资源引起的死锁 如消息通信按下述顺序进行,则不会发生死锁: P1:...Release(S1);Request(S2);... P2:...Release(S2);Request(S1);... 若按下述顺序,则可能发生死锁: P1:... Request(S2);Release(S1);... P2:... Request(S1);Release(S2);... 进程推进顺序不当引起的死锁 当进程P1、P2共享资源A、B时,若推进顺序合法则不会产生死锁,否则会产生死锁。 合法的推进路线:①②③ 不合法的推进线路:④ 死锁产生的必要条件 互斥条件:在一段时间内某资源仅为一个进程所占有。 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走。 请求和保持条件:又称部分分配条件。当进程因请求资源被阻塞时,已分配资源保持不放。 循环等待条件:死锁发生时,存在一个进程资源的循环。 注意 死锁是因资源竞争造成的僵局 死锁至少涉及两个进程 死锁与部分进程及资源相关 3.处理死锁的基本方法 用于处理死锁的方法主要有: 忽略死锁。这种处理方式又称鸵鸟算法,指像鸵鸟一样对死锁视而不见。 预防死锁:设置某些限制条件,通过破坏死锁产生的四个必要条件之一来预防死锁。 避免死锁:在资源的动态分配过程中,用某种方法来防止系统进入不安全状态。 检测死锁及解除:系统定期检测是否出现死锁,若出现则解除死锁。 4. 死锁的预防 预防死锁。通过破坏产生死锁的四个必要条件中的一个或几个条件,来防止发生死锁。 特点:较易实现,广泛使用,但限制较严,资源利用率低。 破坏互斥条件 互斥是设备本身固有的属性,此条件不能破坏。 破坏请求和保持条件 要求进程一次申请它所需的全部资源,若有足够的资源则分配给进程,否则不分配资源,进程等待。这种方法称为静态资源分配法。 特点:简单、安全且易于实现;但资源利用率低,进程延迟运行。 破坏不剥夺条件 一个已获得某些资源的进程,若新的资源请求得不到满足,则它必须释放已获得的所有资源。 特点:实现较复杂,释放已获得资源可能造成前一段工作的失效,重复申请和释放资源会增加系统开销,降低系统吞吐量。 破坏循环等待条件 将所有资源按类型排队,并赋予不同序号,要求进程均严格按照序号递增的次序请求资源,同类资源一次申请完。这种方法称为有序资源分配法。 特点:比前两种方法资源利用率高,吞吐量大。但要求资源序号相对稳定,从而限制了新设备的增加;使用资源的顺序与系统规定顺序不同,造成资源的浪费;使用资源的次序限制用户编程。 为什么有序资源分配法可以防止死锁1 假设循环已经出现并且含于环中的进程是p0、…、pn, 这意味着pi正占有ri类资源,而请求ri+1类资源, 设函数f能获得资源序号,则有f(ri)f(ri+1), 故f(r0)f(r1)… f(rn)f(r0)。 矛盾,原假设不成立。 为什么有序资源分配法可以防止死锁2 采用有序资源分配法,系统中的进程必须按照资源编号的升序申请资源。因此在任一时刻,系统中总会存在一个进程,它占有已申请资源中编号最高的资源,且它继续请求的资源必定是空闲的,因而它可以一直向前推进直至完成。当该进程运行完成后,即会释放它所占有的全部资源。这样剩余进程集合中又会存在一个进程,它占有已申请资源中编号最高的资源,且它继续请求的资源必定是空闲的,因而它也可以一直向前推进直至完成。以此类推,最终所有进程均可运行完成,故不会发生死锁。 5. 死锁的避免 死锁的避免是在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁的发生。 特点:以较弱的限制获得较高的利用率,但
文档评论(0)