操作系统进程死锁

死锁定义及产生的原因

  1. 死锁定义
    如果一个进程集合中的每个进程都在等待只能由此集合中的其它进程所占有的资源,因而永远无法得到资源而陷入僵持,这种现象被称为进程死锁。

  2. 产生原因
    产生死锁的原因有很多,如进程推进顺序不当、PV操作使用不妥、同类资源分配不均或对某些资源的使用未加限制。产生死锁的因素不仅与系统拥有的资源数量有关,而且与资源分配策略、进程对资源的使用要求以及并发进程的推进顺序有关。

产生死锁的必要条件

  • 互斥:一个资源每次只能给一个进程使用
  • 占有和等待:进程在申请新的资源的同时保持对原有资源的占有
  • 不可抢占:资源申请者不能强行从资源占有者手中夺取资源,资源只能由占有者主动释放
  • 循环等待:存在一个进程等待队列{P1, P2, …,PN, },其中P1等待P2占有的资源, P2等待P3占有的资源,…,PN等待P1占有的资源,形成一个进程等待环路。

当死锁产生的时候一定会有这4个条件,有一个条件不成立都不会造成死锁。

解决死锁的方法

总体解决死锁发生的办法可以分为以下四类:鸵鸟策略、死锁预防、死锁避免、死锁检测与恢复。

鸵鸟策略

  处理死锁的策略是忽略它。当发生死锁不会对用户造成多大影响,或发生死锁的概率很低时,可以采用鸵鸟策略。

死锁预防

  不让死锁发生的静态策略。通过设计合适的资源分配方法,由资源分配策略保证不让死锁发生。

  • 破坏条件一(互斥条件):使资源可同时访问而非互斥使用,并不会发生死锁。如可重入程序、只读数据文件、时钟、磁盘等软硬件资源;
  • 破坏条件二(占有和等待条件):要求每个进程在运行前必须一次性申请它需要的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配;
  • 破坏条件三(不可抢占条件):一个进程在申请新的资源不能立即得到满足而变为等待状态时,必须释放已有资源,若需要再重新申请;
  • 破坏条件四(循环等待条件):主要思想是通过定义资源类型的线性顺序实现。实现方案是资源有序分配法,把系统中所有资源编号,进程在申请资源时必须按照资源编号的递增次序进行,否则操作系统不予分配。实现资源的有序分配时需要考虑如何对资源进行编号,通常可以利用资源使用的频繁性进行排序。

死锁避免

  不让死锁发生的动态策略,以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决定是否分配。
  如果一个进程当前请求资源会导致死锁,系统将拒绝启动此进程;如果一个资源分配会导致下一步死锁,便拒绝本次分配。
  死锁避免方法:银行家算法
  为实现银行家算法,每一个进程进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大数目,其数目不能超多系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这资源分配给进程后,是否会使系统处于不安全状态;如果不会,才将资源分配给它,否则让进程等待。

死锁检测和恢复

  • 何时进行死锁检测?

三种情况:

  1. 当进程由于资源请求得不到满足而等待时进行死锁检测,缺点是系统开销大;
  2. 定时检测;
  3. 系统资源利用率下降时检测死锁。
  • 死锁定理
      当且仅当此状态的进程-资源分配图是不可完全简化的
  • 死锁的检测与恢复
  1. 结束所有进程的执行并重新启动操作系统;
  2. 撤销陷于死锁的所有进程,解除死锁,继续运行;
  3. 逐个撤销陷于死锁的进程,回收器资源并重新分配,直至死锁解除(撤销死锁进程策略:CPU消耗时间最少者、产出的输出量最少者、预计剩余执行时间最长者、优先级最低者等);
  4. 剥夺陷于死锁的进程所占有的资源,但并不撤销此进程,直至死锁解除;
  5. 根据系统保存的检查点让所有进程回退,直到足以解除死锁。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值