操作系统-死锁
死锁
资源问题
了解死锁前,先了解一些系统中的资源分类
- 可重用性资源和消耗性资源
- 可重用性资源是一种可供用户重复使用多次的资源,每一个资源的单位只能分配给一个进程使用,每一类资源中的单元数目都是相对固定的,进程在运行期间不能创建也不能删除它
- 可消耗性资源在进程运行期间,由进程动态的创建和消耗。资源的单元数目在进程运行期间是可以不断变化的,有时很多,有时为0,在进程运行过程可以不断创建资源的单元,放入资源类的缓冲区中,也可以不断请求资源消耗,不在返回。最典型的可消耗资源就是用于进程间通信的消息等
- 可抢占性资源和不可抢占性资源
- 可抢占性资源 进程在获得这类资源后,该资源可以再被其他进程或系统抢占
- 不可抢占性资源 一旦系统分为配资源给进程后,就不能将它强行收回,只能在进程用完后自行释放。
计算机系统中的死锁
- 竞争不可抢占性资源
- 竞争可消耗性资源
- 进程推进的顺序不当
死锁的定义
> 如果一组进程中的每一个进程都在等待仅有该组进程中的其他进程才能引发事件,那么改组进程是死锁的
产生死锁的必要条件
-
互斥条件
在某一段时间内,某资源只能被一个进程占用
-
请求和保持条件
进程已经保持了至少一个资源,但有提出新的资源请求
-
不可抢占条件
进程已获取的资源在未使用完之前不能被抢占
-
循环等待条件
在发生死锁时,必然存在一个进程一资源的循环链
处理死锁的方法
-
预防死锁
该方法通过破坏四个必要条件的一个或几个来产生死锁
-
破坏“请求和保持”条件
-
第一种协议
所有进程在开始运行的时候,必须一次性地申请其在整个运行过程中所需要用到的全部资源
-
第二种协议 第二种协议是对第一中协议的改进,允许一个进程只获得运行初期所需要的资源便可开始运行,在运行过程中是释放已经分配给自己的,且已用毕的的资源,然后再请求新的资源
-
-
破坏“不可抢占”条件
当一个已经保持了某些不可被抢占资源的进程,提出新的资源不能满足的时候,就必须释放已经保持的所有资源,以后需要再申请
-
破坏“循环等待”条件
对系统所有的资源类型进行线性排序,并赋予不同的序号,假如进程已经申请到了高序号的资源,想要申请低序号的资源的时候,它必须释放所有具有相同或更高序号的资源,这样才可申请低序号的资源
-
-
避免死锁
属于事先预防策略,当它并不是事先采取各种限制,去破坏死锁的四个必要条件,而是在资源动态分配中,用某种方法防止系统进入不安全的状态
-
检测死锁
通过检测机构及时的检测出死锁的发生
-
解除死锁
- 抢占资源
- 终止或撤销进程