死锁的原理:
相互竞争系统资源或者进行通信的进程永久阻塞
当一组进程中的每个进程都在等待这个事件,而只有在这组进程中的其他被阻塞的进程才可以触发这个事件
可重用资源:
资源分为两类:可重用的和可消耗的
可重用资源:一次只能供一个进程安全的使用,并且不会由于使用而耗尽的资源
可消耗资源:
可消耗资源是指可以被创建和销毁的资源
可消耗资源是指可以被创建和销毁的资源
当消费进程得到一个资源时,该资源就不再存在了
死锁的条件:
- 互斥
- 占用并等待
- 不可抢占
没有上述的任何一种,不会出现死锁,前三个条件是出现死锁的可能性
4.循环等待
要出现死锁必须需要条件4
死锁的定义也可以是不可解的循环等待
前三个条件都存在时才会出现敏感区
如果出现循环等待的情况,说明已经进入敏感区了
死锁的预防:
- 间接的死锁预防方法
- 直接的死锁预防方法
互斥:
该条件不可能被禁止,需要对资源的互斥访问,则操作系统必须互斥
占有并等待:
进程一次性地请求所有需要的资源,并且阻塞这个进程直到所有的请求都满足
- 一个进程可能被阻塞很长时间,以满足其所有的资源请求
- 分配给一个进程的资源可能在相当一段时间内都不会被使用
- 一个进程有可能事先并不知道自己所需要的资源
不可抢占:
- 占用某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它占用的资源
- 一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个资源
循环等待:
循环等待条件可以通过定义资源类型的线性顺序来预防的
死锁的避免:
- 进程启动拒绝
- 资源分配拒绝
安全状态:至少有一个资源分配序列不会导致死锁
允许三个必要条件,但是通过明智的选择,确保永远不会到达死锁点,死锁避免比死锁预防有更多的并发
死锁避免的方法:
- 如果一个进程的请求会导致死锁,则不启动该进程
- 如果一个进程增加的资源请求会导致死锁,则不允许此分配
死锁避免策略不能确切的预测死锁,仅仅是预料死锁的可能性并确保永远不出现这种可能
死锁避免的限制:
- 声明每个进程请求的最大资源
- 进程执行的顺序没有任何同步要求的限制
- 分配的资源数目必须固定
- 在占用资源时,进程不能退出
死锁的恢复:
- 取消所有的死锁进程,操作系统最常用的方法
- 把死锁进程回滚到前面定义的某些检查点,还有可能存在死锁
- 连续取消死锁进程直到不存在死锁
- 连续抢占资源
- 目前为止消耗的处理器时间最少
- 目前为止产生的输出最少
- 预计剩下的时间最长
- 目前为止分配的资源总量最少
- 优先级最低