资源
- 需要互斥(排他性)使用的资源叫做资源。
- 资源可以是硬件设备或者一组信息。
进程对设备、文件进行互斥(排他Exclusive)的访问时候,可能会出现死锁。
资源的分类
- 可抢占资源:从拥有它的进程抢占而不会产生副作用,如存储器。
- 不可抢占资源:无法在不引起计算失败的情况下,把他从占有它的进程抢过来。如内存。
死锁与不可抢占资源有关。
使用资源的事件顺序
- 请求资源
- 请求失败时:可能被阻塞,可能等待然后重试。不同操作系统的处理不同。
- 使用资源
- 释放资源
死锁的建模表示方法:资源分配图
死锁简介
- 死锁定义:如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
资源死锁
- 定义: 每个进程所等待的事件时释放进程集合中其他进程已经占有的资源。也就是,这个进程集合中的每个进程都在等待另一个死锁进程已经占有的资源。
- 资源死锁发生必须同时满足下面四个条件
- 互斥条件。
- 占有和等待条件。
- 不可抢占条件。
- 环路等待条件。
预防死锁就是通过破坏上面的条件实现的
鸵鸟算法:忽略死锁
- 当死锁发生的频率低、严重性不高,可以选择忽略该问题。
死锁的检测与恢复
- 系统允许思索发生,检测到死锁后,采取措施恢复。
死锁检测算法
- 假设资源类型个数为m
- E(E1,E2,E3…Ei)是现有资源向量,Ei代表资源类型i的资源个数。
- A(A1,A2,A3…Ai)是可用资源向量,Ai表示当前可以使用的资源数(没有分配的资源)。
- C是当前分配矩阵:Cij代表进程Pi所持有资源j的数量。
- R请求矩阵:Rij代表Pi所需要的资源j的数量。
死锁检测算法
1 ) 寻找一个没有被标记的进程Pi,满足Ri小于等于A
2 ) 如果找到了这样的进程,将C矩阵的第i行向量加到A中,标记该进程,转到1 )
3 ) 如果没有找到,算法终止
算法结束时,没有被标记过的进程都是死锁进程。
死锁的恢复:成功检测到死锁后的操作
- 利用抢占恢复:将某个资源从当前所有者那里转移给另一个进程。
- 利用回滚恢复:周期性的进程检查点检查。死锁发生后,从最近的检查的恢复。
- 通过杀死进程恢复:直接杀死一个或者若干个环中的进程。
死锁避免
假设一个进程请求资源,一次就请求所有资源。
- 避免思索地算法基于一个安全状态的概念。
安全状态
- 当前状态的定义:当前状态包括了E、A、C、R。如果没有死锁发生,并且所有进程突然请求对资源的最大需求,也还存在着某种调度次序能够使得一个进程运行完毕,则该状态是安全的。
安全状态与不安全状态的区别:从安全状态触发,系统能保证所有进程都能够完成;从不安全状态出发,就不能保证。
银行家算法
- 已分配资源矩阵
- 还需要的资源矩阵
- E:系统现有资源
- P: 系统已经分配资源
- A:系统可用资源
检查安全性的算法步骤:
- 从需要的资源矩阵中,找到是否有资源数小于等于A的一行。如果不存在,会死锁,
- 如果找到了,假设他获得资源并结束,把他标记为终止,并且把他的已分配资源加到A上。
- 重复上面两步,如果所有进程标记都是终止,初始状态就是安全的,否则发生死锁。
思考?是否存在多个满足的进程,然后其中一个满足安全状态,一个不满足安全状态。
死锁预防
- 破坏互斥条件
- 资源不被一个进程独占。采用脱机打印机技术,允许多个进程同时输出。真正使用打印机的是打印机守护进程。
- 破坏占有并等待条件。开始执行前,请求所需的全部资源。或者,在一个进程请求资源时候,先释放当前左右资源,再次尝试一次获得所需的全部资源。
- 破坏不可抢占条件
- 破坏环路等待条件。对资源进行编号。
条件 | 处理方式 |
---|---|
互斥 | 一切都使用假脱机技术 |
占有和等待 | 在开始之前就请求全部资源 |
不可抢占 | 抢占资源 |
环路等待 | 对资源进行编号 |