2.4.4 死锁的检测和解除

目录

2.4.4 死锁的检测和解除

2.4.4.1 死锁的检测

2.4.4.2 死锁的解除


2.4.4.1 死锁的检测

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

对于死锁检测算法有一种专门的数据结构称为资源分配图:

一般用矩形表示资源结点,矩形中的小圆代表该类资源的数量。
死锁检测算法:
  (1) 在资源分配图中,找出一个既不阻塞又非独立的进程结点 Pi。在顺利的情况下,Pi可获得所需资源而继续运行,直至运行完毕,再释放其所占有的全部资源,这相当于消去pi所求的请求边和分配边,使之成为孤立的结点。
  (2) p1释放资源后,便可使 p2获得资源而继续运行,直至 p2完成后又释放出它所占有的全部资源。
  (3) 在进行一系列的简化后,若能消去图中所有的边,使所有的进程结点都成为孤立结点,则称该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。

S 为死锁状态的充分条件是:当且仅当 S 状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理

2.4.4.2 死锁的解除

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

1. 资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。

2. 撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。

3. 进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

操作系统(三十一)死锁的检测和解除相关推荐

  1. 操作系统之进程管理:20、死锁的检测和解除

    20.死锁的检测和解除 思维导图 死锁检测 死锁解除 思维导图 死锁检测 P1.P2:进程:R1.R2:某一类资源集合 绿边:已经被使用掉的资源个数:蓝边:进程请求的资源个数 由上图可知: P1使用了 ...

  2. 预防死锁的方法以及死锁的检测与解除

    3.6 预防死锁的方法 一.预防死锁 二.系统安全状态 三.利用银行家算法避免死锁 预防死锁和避免死锁这两种方法,实质上都是通过施加某些限制条件,来预防发生死锁: 两者的区别主要在于: 预防死锁: 施 ...

  3. 死锁(什么是死锁、怎样预防死锁、避免死锁、检测和解除)

    知识总览 什么是死锁 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是"死锁".发生死锁后若无外力干涉,这些进程都将无 ...

  4. 死锁的处理策略—预防死锁、避免死锁、检测和解除死锁

    一.死锁的处理策略--预防死锁 (一)破坏互斥条件 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁. 如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态.比如: SPOOLing ...

  5. 死锁的处理-死锁的检测与解除

    如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁. 在这种情况下,系统应当提供两个算法: 1.死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁. 2.死锁解除算 ...

  6. 操作系统—死锁的检测和解除

    建议将思维导图保存下来观看,或点击这里在线观看

  7. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  8. 2.5操作系统(预防死锁 避免死锁 检测和解除死锁)

    目录 1.死锁 1.什么是死锁? 2.死锁.饥饿.死循环的区别 3.死锁产生的必要条件 4.什么时候会发生死锁 5.死锁的处理策略 2.死锁的处理策略--预防死锁 1.破坏互斥条件 2.破坏不剥夺条件 ...

  9. 2.4操作系统之死锁详解(预防、避免、检测、解除)+思维导图

    文章目录 0.思维导图 1.什么是死锁? 2.死锁.饥饿.死循环的区别 3.死锁产生的四个必要条件 4.什么时候会发生死锁? 5.死锁的处理策略 (1)预防死锁 ① 破坏互斥条件 ② 破坏不可剥夺条件 ...

最新文章

  1. Reveal真机查看任意APP
  2. 企业管理:高层不狠,中层不坏,累死三军
  3. 【转】Spring Boot快速入门
  4. C++ 最大公约数排序
  5. 前端协商缓存强缓存如何使用_前端强缓存和协商缓存
  6. 【php】用filter_var实现的简单参数验证
  7. Securing Spring Cloud Microservices With OAuth2
  8. Java Double类doubleToLongBits()方法与示例
  9. 腐蚀国内稳定服务器_工控机箱和服务器机箱区别在哪里
  10. linux文件系统管理知识导图,Linux磁盘和文件系统管理基础知识自测
  11. ORM框架 Dapper
  12. 操作系统学习思维导图——2处理器管理
  13. matlab小波分析张德丰,MATLAB小波分析
  14. python 麦克风人声检测_人声后期混音教程:13条人声处理技巧
  15. 安川机器人如何注释化指令_关于安川机器人I/O注释导入的报告
  16. 按键精灵找图找色找字比色等图色命令失败的通用解决思路
  17. 如何用命令行的形式进行仿真及do脚本的使用(仿真工具使用技巧)【Modesim/Questasim】
  18. vue组件开发之仿CSDN发布博客时面包屑标签和checkbox选中效果
  19. 以潘金莲和西门公子为例讲述Java静态代理和动态代理
  20. 在阿里,我们如何管理测试环境?

热门文章

  1. jQuery使用(十二):工具方法之type()之类型判断
  2. C++快速输入输出优化
  3. ng-init,ng-controller,ng-model
  4. css3中clip属性
  5. 还有Html.EditorFor和Html.Html.TextBox到底差什么呢
  6. 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...
  7. Eclipse 3.7 3.x SWT/Jface 开发环境搭建
  8. 如何屏蔽TCP 报头中的内容-位置字段中显示的 IP 地址
  9. mac 下代码合并比较的工具(changes)
  10. 正则化与L0、L1、L2范数祥解