死锁的处理-死锁的检测与解除
如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。
在这种情况下,系统应当提供两个算法:
1.死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁。 2.死锁解除算法:当认定系统中已经发生了死锁,利用该算法可将系统从死锁状态中解脱出来。
一、死锁的检测
为了能对系统是否已发生了死锁进行检测,必须:
1.用某种数据结构来保存资源的请求和分配信息;
2.提供一种算法,利用上述信息来检测系统是否已进入死锁状态。
1.数据结构资源分配图:
1.两种结点
进程结点:对应一个进程
资源结点:对应一类资源,一类资源可能有多个
2.两种边
进程结点——>资源结点:表示进程想申请几个资源(每条边代表一个)
资源节点——>进程结点:表示已经为进程分配了几个资源(每条边代表一个)
如果系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时是不会阻塞的,可以顺利地执行下去。
如果这个进程执行结束了把资源归还系统,就可能使某些正在等待资源的进程被激活,并顺利地执行下去。
相应的,这些被激活的进程执行完了之后又会归还一些资源,这样可能又会激活另外一些阻塞的进程..
如果按上述过程分析,最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列) 如果最终不能消除所有边,那么此时就是发生了死锁
可以消除所有边-说明未发生死锁
不能消除所有边-说明发生了死锁
最终还连着边的那些进程就是处于死锁状态的进程
2.检测死锁的算法
1.在资源分配图中,找出既不阻塞又不是孤点的进程Pi
(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中已有空闲资源数量。如下图中,R1没有空闲资源,R2有一个空闲资源。若所有的连接该进程的边均满足上述条件,则这个进程能继续运行直至完成,然后释放它所占有的所有资源)。
消去它所有的请求边和分配变,使之称为孤立的结点。在下图中,P1是满足这一条件的进程结点,于是将P1的所有边消去。
2.进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。在下图中,P2就满足这样的条件。根据1中的方法进行一系列简化后,若能消去途中所有的边,则称该图是可完全简化的。
死锁定理:如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁
二、死锁的解除
一旦检测出死锁的发生,就应该立即解除死锁。
补充:并不是系统中所有的进程都是死锁状态,用死锁检测算法化简资源分配图后,还连着边的那些进程就是死锁进程
1.解除死锁的主要方法有:
1.资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。
2.撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。
3.进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。
如何决定“对谁动手” 1.进程优先级 2.已执行多长时间 3.还要多久能完成 4.进程已经使用了多少资源5.进程是交互式的还是批处理式的
三、总结
死锁的处理-死锁的检测与解除相关推荐
- 二十四、死锁的处理策略---检测和解除
一.知识总览 如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁.在这种情况下,系统应当提供两个算法: 1)死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁. 2 ...
- 操作系统(三十一)死锁的检测和解除
2.4.4 死锁的检测和解除 目录 2.4.4 死锁的检测和解除 2.4.4.1 死锁的检测 2.4.4.2 死锁的解除 2.4.4.1 死锁的检测 死锁检测算法:用于检测系统状态,以确定系统中是否发 ...
- 2.4操作系统之死锁详解(预防、避免、检测、解除)+思维导图
文章目录 0.思维导图 1.什么是死锁? 2.死锁.饥饿.死循环的区别 3.死锁产生的四个必要条件 4.什么时候会发生死锁? 5.死锁的处理策略 (1)预防死锁 ① 破坏互斥条件 ② 破坏不可剥夺条件 ...
- 操作系统之进程管理:20、死锁的检测和解除
20.死锁的检测和解除 思维导图 死锁检测 死锁解除 思维导图 死锁检测 P1.P2:进程:R1.R2:某一类资源集合 绿边:已经被使用掉的资源个数:蓝边:进程请求的资源个数 由上图可知: P1使用了 ...
- 操作系统(13)-操作系统中的死锁及其预防、避免、检测与解除
1 死锁的基本概念 死锁的定义:一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程.如果死锁发生,会浪费大量系统资源 ...
- 死锁的充分必要条件、死锁预防、死锁避免、死锁检测和解除
2.19.2 死锁的条件 必要条件 互斥:一次只有一个进程可以使用一个资源 占有且等待:当进程等待其他资源时继续占有已有的资源 不可抢占:进程不能强行占有其他进程占有的进程 充分条件 循环等待:存在一 ...
- 预防死锁的方法以及死锁的检测与解除
3.6 预防死锁的方法 一.预防死锁 二.系统安全状态 三.利用银行家算法避免死锁 预防死锁和避免死锁这两种方法,实质上都是通过施加某些限制条件,来预防发生死锁: 两者的区别主要在于: 预防死锁: 施 ...
- 死锁的处理策略—预防死锁、避免死锁、检测和解除死锁
一.死锁的处理策略--预防死锁 (一)破坏互斥条件 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁. 如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态.比如: SPOOLing ...
- 死锁的预防、避免、检测、解除
1.死锁的概念: 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互 ...
- 预防死锁,检测死锁,避免死锁,解除死锁....
什么是死锁 在并发环境下,各个进程因竞争资源而造成的一种互相等待对方手里的资源,导致各个进程都阻塞,都无法向前推进的现象就是死锁.发生死锁后如果没有外力干涉就会导致任务无法向前推进. 进程死锁.饥饿. ...
最新文章
- Android Studio不安装opencv manager配置
- HDU 1599 find the mincost route
- 中文信息处理——分词评价程序(计算分词结果的准确率,召回率,F测度)
- Forget Yourself
- 拆分是解决大规模应用问题的本质
- linux命令行翻页
- 最新亲测可用的免费google翻译api
- 计算机三级 数据库技术 学习笔记
- angular 单击和双击事件分开
- 信号处理学习笔记2——维纳滤波器
- Java中多个pdf文件合并为一个
- python九宫格矩阵排数
- #loj3090 [BJOI2019] 勘破神机
- ThinkPad E450 进入dos界面快捷键 按F1
- php发送邮件二种方法 php使用smtp发送邮件
- 赛轮转债上市价格预测
- 嵌入式系统概述2-嵌入式系统组成和应用
- 教育邮箱怎么申请?教育邮箱怎么登录?
- 使用GloVe训练自己的语料
- 2021年度十大开源SLAM算法
热门文章
- openlayers 给数据点(散点)添加点击事件 和hover事件
- 王伦便起身把盏 加密软件
- 计算机系统要解决的问题输入,电脑切换不出来输入法,详细教您解决切换输入法的问题...
- 女生java_女生适合选JAVA后端吗?
- 微信小程序实现下拉选择及手动输入查询
- 我与WIFI宝的一段奇缘
- 从程序员到项目经理(9):程序员加油站 --要执着但不要固执
- html css3风车,CSS3 风力发电 风车动画
- 记录服务器宕机事件:解决dell服务器system halted的方法
- bose耳机信号断续_在我跑坏了第三副耳机后 我总算是懂了