死锁

一、关于死锁

死锁(Deadlock):指多个进程在运行过程中,因争夺资源而造成的一种僵局。当进程处于这种状态时,若无外力作用,它们都将无法再向前推进

  • 死锁和饥饿的区别:
    死锁:指进程之间无休止地互相等待,进程处于阻塞状态
    饥饿:指一个进程无休止地等待,进程处于就绪状态

二、产生死锁的原因

资源问题:
1.可重用性资源和消耗性资源
2.可抢占性资源和不可抢占性资源
竞争不可抢占性资源和竞争可消耗资源都会引起死锁
总结:
①竞争资源
②进程间推进顺序非法
进程间推进顺序对死锁的影响
解释:若并发进程P1和P2按曲线④所示的顺序推进,它们将进入不安全区D内。此时P1保持了资源R1, P2保持了资源R2, 系统处于不安全状态。因为,这时两进程再向前推进,便可能发生死锁。例如,当P1运行到P1:Request(R2)时,将因R2已被P2占用而阻塞;当P2运行到P2: Request(R1)时,也将因R1已被P1占用而阻塞,于是发生了进程死锁。

三、产生死锁的必要条件和处理方法

  1. 形成死锁的四个必要条件:(四个缺一不可)
    (1)互斥条件
    进程对所分配到的资源进行排他性使用
    (2)请求和保持条件
    进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程
    (3)不可抢占条件
    进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放
    (4)环路等待条件
    哲学家问题
  2. 处理死锁的方法:
    (1)预防死锁
    破坏四个必要条件的一个或几个
    (2)避免死锁
    动态资源分配
    (3)检测死锁
    能精确确定与死锁有关的进程和资源;然后采取适当的措施,从系统中将已发生的死锁清除掉
    (4)解除死锁
    撤销或挂起一些进程,以便回收一些资源并将他们分配给已阻塞进程
    死锁的检测与解除措施,有可能使系统获得较好的资源利用率和吞吐量(死锁几率不一定很高),但在实现上难度也最大

四、预防死锁的方法

  1. 预防死锁
    由于互斥条件时非共享设备所必备的,故要破坏产生死锁的后三个条件
    a. 破坏“保持和请求条件”
    ①必须一次性的申请其在整个运行过程中所需要的全部资源
    算法简单、易于实现且很安全。但缺点是资源浪费严重、或进程延迟运行
    ②只允许一个进程只获得在运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用完的全部资源,然后在请求新的资源
    b. 破坏“不剥夺(即不可抢占)”条件
    允许进程先运行,但当提出的新要求不被满足时必须释放它已保持的所有资源,待以后需要时再重新申请。实现比较复杂且付出很大代价。可能会造成前功尽弃,反复申请和释放等情况
    c. 破坏“环路等待”条件
    对系统所有资源类型进行排序并赋予不同的序号,所有进程对资源的请求必须严格按照资源序号递增的次序提出。例如:输入设备规定较低的序号,输出设备规定较高的序号
    与前两种策略比较,资源利用率和系统吞吐量都有较明显的改善。
    但也存在严重问题:
    ①资源编号限制新设备的增加;
    ②应用中的使用设备顺序与规定的顺序并不协调;
    ③限制了用户编程自由

    例题:
    在这里插入图片描述

  2. 避免死锁
    避免死锁的方法是只施加较弱限制条件,从而获得令人满意的系统性能
    a.安全状态:系统能按某种进程顺序为每个进程分配所需资源,直至满足每个进程对资源的最大需求,并能顺利完成。
    b.不安全状态:系统无法找到一种使多个进程能够顺利分配资源执行完的安全序列
    注:
    只要使系统始终处于安全状态,便可避免发生死锁
    不是所有的不安全状态都是死锁状态
    并非所有不安全状态都必然会转为死锁状态

    c.银行家算法
    随时对系统中的所有资源信息进行统计,包括每种资源的数量、已分配给各进程的数量;每当进程提出某种资源请求时判断该请求分配后是否安全,如果安全才分配。对每个资源请求的处理都要保证系统始终从一个安全状态到另一个安全状态
    例题:

    ==》
    在这里插入图片描述
    在这里插入图片描述

五、死锁的检测和预防

  1. 检测时机:
    (1)当进程等待时检测死锁
    (2)定时检测
    (3)系统资源利用率下降时检测死锁
    S状态为死锁状态的充分条件是当且仅当S状态的资源分配图是不可完全简化的。<死锁定理>
    ===》
    利用资源分配图简化法来检测死锁。
    ①在资源分配图中找出一个既不阻塞又非独立的进程结点Pi,在顺利的情况下运行完毕,释放其占有的全部资源。
    ②由于释放了资源,这样能使其它被阻塞的进程获得资源继续运行。消去了Pi的边。
    ③经过一系列简化后,若能消去图中所有边,使结点都孤立,称该图是可完全简化的。
    在这里插入图片描述在这里插入图片描述
  2. 死锁的解除:
    当发现进程死锁时,便应立即把它们从死锁状态中解脱出来。
    (1)由操作员来以人工方法处理死锁
    (2)死锁解除算法
    常采用的死锁解除方法是:
    剥夺资源。从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态。
    撤销进程
    a.最简单的是让全部进程都死掉;
    b.温和一点的是按照某种顺序逐个撤销进程,直至有足够的资源可用,使死锁状态消除为止。
    死锁处理方法的比较:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值