死锁的处理策略“检测和解除”-第三十九天

发布时间:2024年01月04日

目录

前言

死锁的检测

数据结构资源分配图

基于“图”检测死锁

可以消除所有边

?不能消除所有边

结论

死锁定理

死锁的解除

本节思维导图


前言

????????如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁,在这种情况下,系统应当提供两个算法:

①死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁

②死锁解除算法:当认定系统中已经发生了死锁,该算法可将系统从死锁状态中解脱出来

死锁的检测

①用某种数据结构来保持资源的请求和分配信息

②提供一种算法,利用上述信息来检测系统是否已经进入死锁状态

数据结构资源分配图

基于“图”检测死锁

核心思想:根据是否可以消除所有边确定系统是否发生死锁

能消除所有的边,即称该图是可完全简化地,一定未发生死锁,相当于找到了一个安全序列

检测规则:

  1. 系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时不会被阻塞,可顺利执行
  2. 进程执行结束将资源归还系统,就可能使某些正在等待资源地进程被激活,开始执行
  3. 被激活进程执行完后又会归还一些资源,这可能又会激活另外一些阻塞的进程

可以消除所有边

  1. P1进程向R2资源请求了一个资源,R2此时被分配后还有一个资源,所以P1进程不会被阻塞
  2. P2进程向R1资源请求了一个资源,R1此时被分配后没用资源,所以P2进程被阻塞
  3. 当P1进程完成后会将R1分配的资源和向R2请求的资源全部返回,此时P2进程就可以被唤醒
  4. P2进程被唤醒后,执行完后也会将被分配的资源和申请的资源返回,至此所有边均被消除

?不能消除所有边

  1. ?P1进程向R2申请两个资源,但R2没有资源剩余,P1进程阻塞
  2. P2进程向R1申请一个资源,但R1也没有资源剩余,P2进程也被阻塞
  3. P3进程在接收完R2进程提供的资源后可以顺利执行,执行完后释放一个R2资源
  4. 此时R2有一个资源,但是P1要两个资源所以P1进程依然被阻塞,同样的P1阻塞导致R1的剩余资源不满足P2的要求,所以P2也依然会被阻塞?

?

分配边表示已经为进程分配的资源个数,请求边表示在已有资源基础上仍需要的资源个数?

结论

?最终还连着边的那些进程就是处于死锁状态的进程

死锁定理

如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁

死锁的解除

基本思想:一旦检测出死锁的发生,就应该立即解除死锁

注意事项:并不是系统中所有的进程都是死锁状态,用死锁检测算法简化资源分配图后还连着边的进程就是死锁进程

实现方法:

  1. 资源剥夺法:挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饿死
  2. 撤销进程法:(或称终止进程法)强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这些方式的优点是实现简单,但所付出的代价可能会很大,因为有些进程可能已经运行了很长时间了,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来
  3. 进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步,这就要求系统要记录进程的历史信息,设置还原点

如何决定对谁动手(剥夺、撤销还是回退):

  1. 进程优先级
  2. 已执行多少时间
  3. 还要多久能完成
  4. 进程已经使用了多少资源
  5. 进程是交互式还是批处理式的

本节思维导图

~over~

文章来源:https://blog.csdn.net/m0_73975164/article/details/135386389
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。