T第3章处理机调度与死锁演示_2.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
T第3章处理机调度与死锁演示_2

3.5 产生死锁的原因和必要条件 例1: 设有一个系统,有两个进程,同时申请打印输出;系统只有一台打印机、一个缓冲区。若进程推进顺序不当,申请的顺序如下: buffer=1, printer=1 P甲: P乙: P(buffer); P(printer); P(printer); P(buffer); ; ; V(buffer); V(printer); V(printer); V(buffer); … … 2: 在进程的同步与互斥中,环形缓冲区中,如果颠倒了P操作的顺序也有可能产生死锁。(同属进程推进顺序不当) empty=n, full=0, mutex=1; P2: P(empty); P(mutex); P(mutex); P(full); 生产一个产品; 消费; V(full); P(mutex); V(mutex); P(empty); 在进程对设备、文件等取得了独占性访问权时,会有可能出现死锁。为了尽可能通用化,我们把需要排它性使用的这类对象称作为资源(resource)。 资源可分为两类:可剥夺(抢占)的和不可剥夺的。 可剥夺资源可以从拥有它的进程手中剥夺而不会产生任何副作用,磁盘存储器就是这样一类资源。 不可剥夺资源无法在不引起相关计算失败的情况下把它从主进程剥夺。假若一个进程已开始打印,那么剥夺其占用的打印机并分配给另一进程将使用打印结果一片混乱。打印机是不可剥夺的。死锁常与不可剥夺资源有关。 使用一资源事件的顺序如下: 申请资源 使用资源 释放资源。 假设,如果某个进程申请资源失败,那么它就进入睡眠状态。 死锁(Deadlock)是指多个进程因竞争资源而造成的一种僵局。, 死锁可形式地描述为:有并发进程P1,P2,…,Pn,m(n0,m0,nm)。其中,每个Pi(1≤i≤n)拥有资源Rj(1≤j≤m),直到不再有剩余资源。同时,各Pi又在不释放Rj的前提下要求得到Rk(k≠j,1k≤m),从而造成资源的互相占有和互相等待。在没有外力驱动的情况下,该组并发进程停止往前推进,陷入永久等待状态。 陷入死锁状态的进程称之为死锁进程。系统中一旦有一组进程陷入死锁,那么要求使用被这些死进程所占用的资源或者需要它们进行某种合作的其它进程就会相继陷入死锁。最终可能导致整个系统处于瘫痪状态。 在多道程序系统中,还存在与死锁密切相关的无限延迟(饥饿)现象。 3.5.1 产生死锁的原因 产生死锁的原因可归结为两点: 1.竞争资源。 2.进程推进顺序非法。, 1.互斥条件。 2.请求和保持条件 3.不可剥夺条件 4.环路条件 这四个条件是必要条件而不是充要条件,因此虽然这四个条件存在,系统也并不一定死锁。但是,只要能防止产生死锁的四个必要条件之一出现,。 3.避免死锁 不需事先采取各种限制措施去破坏产生死锁的必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。 4.检测死锁 允许系统在运行过程中发生死锁。可通过系统设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源;然后,采取适当措施,从系统中将已发生的死锁清除掉。解除死锁是与检测死锁相配套的一种措施,用于将进程从死锁状态下解脱出来。 5.解除死锁 3.6 死锁预防(deadlock prevention) 3.6.1 预防死锁 1.防止“互斥条件”出现 先考虑互斥使用条件。如果资源不被单一进程独占,那么死锁肯定不会产生。但这种方法对某些资源是行不通的。允许两个进程同时使用临界资源会产生与时间有关的错误。因此,互斥条件难以破坏。 2.防止“请求和保持”条件出现 采用预先静态分配资源的方法,即系统要求所有进程在运行之前,必须一次申请它所需要的全部资源。。 ,,,,,overhead)。 --和死锁一样地破坏系统的工作。 ”条件出现 允许动态地申请资源,但是规定一个已经获得资源的进程在申请新资源而不能得到满足时,即使进程未运行完毕必须释放已获得资源,以后再重新申请已释放的和后来要求的新资源。 但是可能出现以下问题: ⑴ 一个进程利用已获得的资源完成了一定的工作后,由于申请新资源而得不到满足时,要释放原已占有的资源,不仅会损失以前完成的那一部分工作,而且还会延误作业的完成时间。 ⑵ 当一个进程释放它原有的资源后,会出现再重新申请时却申请不到的现象,进程可能因反复地申请和释放这些相同的资源而被无限延迟。 4.防止“环路等待”条件出现 允许系统动态地、部分地分配资源,但是把系统中所有资源类型都唯一地、顺序地编了序号。。 : ,,,。 ,(user-friendly environm

文档评论(0)

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

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

1亿VIP精品文档

相关文档