《操作系统》——进程管理(下)死锁

死锁

  • 为什么会产生死锁?产生死锁的条件?

  • 有什么办法可以解决死锁问题?

一、死锁的概念

(一)什么是死锁

  • 在并发环境下,个进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。发生死锁后如没有外力干涉,进程将无法向前推进。

(二)进程死锁、饥饿、死循环的区别

  • 死锁:个进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象。(进程处于阻塞态)
  • 饥饿:由于长期得不到想要的资源,某进程无法向前推进。例如短进程优先算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”(进程处于阻塞态或就绪态)
  • 死循环:某进程执行过程中一直跳不出某个循环的现象,有时是因为程序逻辑bug,有时是程序猿故意设计的(进程可以处于运行态)

在这里插入图片描述

(三)死锁产生的必要条件

  • 互斥条件:只有对必须互斥使用的资源争抢才会导致死锁
  • 不剥夺条件:不能由其他进程强行夺走
  • 请求和保持条件:自己占了资源,又申请新的资源
  • 循环等待条件:存在一种进程资源的循环等待链
    发生死锁时,一定有循环等待,但发生循环等待时未必死锁(循环等待是死锁的必要不充分条件),(在同类资源数大于1的情况下未必发生死锁,但如果系统中每类资源都只有一个,那循环等待就是死锁的充分必要条件了)
    在这里插入图片描述

(四)什么时候发生死锁

对不可剥夺资源的不合理分配,可能导致死锁
unreasonable allocation of inalienable resources, which may result in deadlocks
在这里插入图片描述

(五)死锁的处理策略

  • 预防死锁(破坏四条件)
  • 避免死锁(银行家算法)
  • 死锁的检测和解除
    在这里插入图片描述

二、预防死锁

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

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

三、避免死锁

(一)什么是安全序列safe sequence

进入不安全状态未必会发生死锁,但发生死锁一定处于不安全状态
Entering an unsafe state does not necessarily result in a deadlock, but a deadlock must result in an unsafe state
系统处于安全状态一定不会死锁
在这里插入图片描述

(二)什么是系统的不安全状态,与死锁有何联系

银行家算法的核心思想:在资源分配之前,先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞。
The core idea of the banker algorithm is to judge whether the allocation will lead to an unsafe state before the allocation of resources,so as to decide whether to respond the resource allocation request. If an unsafe state is entered, withhold the request and let the process block.

(三)如何避免系统进入不安全状态——银行家算法

找到安全序列
在这里插入图片描述
简单的手算方法:把当前所有能分配完到的进程加入安全序列(顺序无所谓)
在这里插入图片描述
一个找不到安全序列的例子
在这里插入图片描述
代码实现
在这里插入图片描述
银行家算法——通过试探分配更新当前的分配状态
安全性算法——判断银行家算法更新的新状态是否处于不安全状态
在这里插入图片描述

四、死锁检测和解除(允许死锁发生)

(一)死锁的检测

1、资源分配图
  • 数据结构:资源分配图在这里插入图片描述

  • 算法:判断该资源分配图是否可以完全简化(死锁定理)
    依次消除与不阻塞进程相连的边,直到无边可消

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

  • 若检测出死锁,要进行解除(化简完资源分配图后,还连着边的进程就是死锁进程)

(二)死锁的解除

  • 资源剥夺法:把某些进程的资源剥夺,把进程暂时挂起到外存。缺点:防止被挂起的饥饿
  • 撤销进程法(终止进程法):强制剥夺进程资源,强制撤销死锁进程。缺点:功亏一篑
  • 进程回退法:让一个或者多个死锁进程回退到足以避免死锁的地步。缺点:需要系统记录进程的历史信息,设置还原点。

如何决定“对谁下手”
1、进程优先级(保护优先级高的)
2、已执行多长时间(干掉执行时间短的)
3、还要多久能完成(保护马上能完成的)
4、进程掌握了多少资源(先干掉资源多的)
5、进程是交互式的(用户敏感)还是批处理的
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值