操作系统系列3——死锁
操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版
其他系列链接:
文章目录
一、资源
1、可抢占资源
可以从拥有它的进程中抢占而不会产生任何副作用,存储器就是一类可抢占资源
2、不可抢占资源
是指在不引起相关计算失败的情况下,无法把它从占有它的进程处抢占过来
二、定义
如果一个进程集合中的每一个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁
三、必要条件
1、互斥
每个资源要么已经分配给一个进程,要么就是可用的
2、可占和等待
已经得到了某个资源的进程可以再请求新的资源
3、不可抢占
已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放
4、环路等待
死锁发生时,系统中一定有由两个或两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。
四、处理方法
1、鸵鸟算法
把头埋在沙子里,假装根本没发生问题。
因为解决死锁问题的代价很高,因此鸵鸟算法这种不采取任务措施的方案会获得更高的性能。
当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟算法。
2、死锁检测与死锁恢复
-
每种类型一个资源的死锁检测
检测算法:通过检测有向图中是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁发生
-
每种类型多个资源的死锁检测
死锁检测算法如下:
每个进程最开始时都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。
1、寻找一个没有标记的进程Pi,它所请求的资源小于或等于A
2、如果真找到这样一个进程,那么将C矩阵的第i行向量加到A中,标记该进程,并转回第1步
3、如果没有这样的进程,那么算法终止 -
从死锁中恢复
-
1、利用抢占恢复
将进程挂起,强行取走资源给另一个进程使用,用完再放回
-
2、利用回滚恢复
复位到更早的状态,那时它还没有取得所需的资源
-
3、通过杀死进程恢复
杀掉环中的一个进程或多个,牺牲掉一个环外进程
-
3、死锁预防
-
破坏互斥条件
例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。
-
破坏占有个等待条件
1、规定所有进程在开始执行前请求所需要的全部资源。
2、要求当一个进程请求资源时,先暂时释放其当前占用的所有资源,然后在尝试一次获得所需的全部资源。 -
破坏不可抢占条件
1、保证每一个进程在任何时刻只能占用一个资源,如果请求另一个资源必须先释放第一个资源
2、将所有的资源统一编号,进程可以在任何时刻提出资源请求,但是所有请求必须按照资源编号的顺序(升序)提出
-
破坏环路等待
4、避免死锁
定义: 如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
检查一个状态是否安全的算法如下:
1、查找右边的矩阵是否存在一行小于等于向量 A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。
2、假若找到这样一行,将该进程标记为终止,并将其已分配资源加到 A 中。
3、重复以上两步,直到所有进程都标记为终止,则状态时安全的。
如果一个状态不是安全的,需要拒绝进入这个状态。