死锁

死锁的必要条件

  • 互斥条件:资源是独占且排他使用,进程互斥使用资源,及任意时刻一个资源只能给一个进程使用。
  • 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
  • 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
  • 循环等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2所占有的资源,P2等待P3所占有的资源,…,Pn等待P1所占有的资源,行成一个进程等待环路,环路中每一个进程所占用的资源同时被另一个申请,也即是前一个进程占有后一个进程所申请的资源。

死锁的解决方法

死锁预防

  1. 破环“不可剥夺条件”:一个进程如果不能获得所需要的全部资源便处于等待状态,等待期间他所占有的资源将被隐式的释放重新加入到系统资源列表中,可以被其他进程所使用,而等待的进程只有重新获得自己原有的资源以及新申请的新资源才能重新启动,执行。
  2. 破坏“请求与保持条件”:第一种方法是静态分配,即每个进程在开始执行时就申请到他所需要的全部资源;第二种方法是动态分配,即每个进程在申请所需要的资源时它本身不占用系统资源。
  3. 破坏“循环等待”条件:采用资源有序分配,其基本思想是将系统中所有资源顺序编号,将紧缺的、稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程之哟获得较小的进程才能申请较大的进程。

死锁避免

死锁避免的基本思想:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。

如果操作系统能保证所有的进程在有限的时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的。

  1. 安全状态:如果系统存在有安全序列{P1,P2,…,Pn},则系统处于安全状态。一个进程序列是安全的,如果对其中每一个进程Pi(i>=1&&i<=n),他以后尚需要的资源不超过系统当前剩余资源量与进程Pj(j<i)当前占有资源量之和,系统处于安全状态则不会发生死锁。
  2. 不安全状态:如果哦不存在任何一个安全序列,则系统处于不安全状态。
    在这里插入图片描述
目前占有量最大需求量尚需要量
P1297
P25105
P3242
系统剩余资源量-3-

系统剩余3个资源,可以把其中2个分配给P3,此时P3已经获得了所有的资源,执行完毕后还能还给系统4分资源,此时系统剩余5个资源所以满足(P2所需要的资源不超过系统当前剩余量与P3当前占有资源量之和),同理P1可以在P2执行完毕后获得自己需要的资源。

如果P1提出再申请一个资源的要求,系统从剩余的资源中分配一个给进程P1,此时系统剩余2个资源。

目前占有量最大需求量尚需要量
P1396
P25105
P3242
系统剩余资源量-2-

系统当前剩余2个资源,分配给 P3后 P3执行完毕还给系统4个资源,但是 P2需要5个资源, P1需要6个资源,它们都无法获得资源执行完成,因此找不到一个安全序列,系统转到不安全状态。

当进程请求一组资源时,假设统一该请求,从而改变了系统状态,然后确定结果是否还处于安全状态。如果是,同意;否则,阻塞该进程直到同意该请求后系统状态仍然是安全的。

检测死锁

  1. 首先为每个进程和每个资源指定一个唯一的号码;
  2. 然后建立资源分配表和进程等待表;
  3. 有向图算法:检测是否有环

解除死锁

  • 剥夺资源:从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
  • 撤销进程:可以直接撤销死锁进程或撤销代价最小的进程,直至有足够的而资源可用,死锁状态解除为止;(所谓代价就是指优先级、运行代价、进程的重要性和价值等)

参考:
https://www.cnblogs.com/zeze/p/9711792.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值