死锁的概念
- 死锁:指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向前推进
- 死锁产生的原因
- 系统资源的竞争
- 进程推进顺序非法
- 进程在运行过程中,请求和释放资源的顺序不当,会导致死锁
- 信号量使用不当也会造成死锁
- 死锁产生的必要条件
- 互斥条件
- 不剥夺条件
- 请求并保持条件
- 循环等待条件
不可以将系统资源不足当作死锁的原因
- 死锁的处理策略
- 死锁预防:破坏四个必要一个或多个
- 避免死锁:防止系统进入不安全状态
- 死锁的检测及解除:允许发生死锁,系统检测出死锁,并解除死锁
预防死锁和避免死锁是事先预防策略
死锁处理方法
死锁预防(静态策略)
- 破坏互斥条件
例如SPOOLing技术,但大多数情况是无法破坏该条件的 - 破坏不剥夺条件
- 当一个已保持了某些不可剥夺资源的进程请求新的资源而得不到满足时,它必须释放已经保持的所有资源,待以后需要时重新申请
- 实现复杂,会增加系统开销,降低系统吞吐量,常用于状态易于保存和恢复的资源
- 破坏请求并保持条件
- 采用预先静态分配方法
- 资源利用率极低,还会导致“饥饿”现象
- 破坏循环等待条件.
- 采用顺序资源分配法
- 限制了新类型设备的增加,造成了资源的浪费,这种按规定次序申请资源的方法,也必然会给用户的编程带来麻烦
死锁避免(动态策略)
并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,就可能进入死锁状态
只要系统处于安全状态,系统便可避免进入死锁状态
银行家算法⭐
银行家算法不能判断系统是否处于死锁状态,只能判断是否处于不安全状态
死锁检测和解除
资源分配图
死锁定理:S为死锁的条件是当且仅当S状态的资源分配图是不可完全化简的
死锁解除
- 资源剥夺法
- 撤销进程法
撤销的原则(思考的方向):1.已执行多久;2.还需要多久;3.已使用多久;4.进程是交互式还是批处理式 - 进程回退法
通常不会从非死锁进程处抢夺资源