1. 产生死锁的必要条件
- 互斥:任何时刻只能有一个进程使用一个资源实例。
- 持有并等待:进程保持至少一个资源,并正在等待获取其他进程持有的资源。
- 非抢占:资源只能在进程使用后自愿释放。
- 循环等待。
2. 处理方法
鸵鸟策略:把头埋在沙子里,假装根本没发生问题。
死锁预防:确保系统永远不会进入死锁状态。
- 破坏互斥条件:把互斥的共享资源封装成可同时访问。
- 破坏占有和等待条件:进程请求资源时,要求它不持有任何其他资源;仅允许进程在开始执行时,一次请求所有需要的资源。
- 破坏不可抢占条件:如进程请求不能立即分配的资源,则释放已有占有资源;只在能够同时获得所有所需资源时,才执行分配操作。
- 破坏环路等待:对资源排序,要求进程按顺序请求资源。
死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源。
银行家算法:
如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。如果一个状态不是安全的,需要拒绝进入这个状态。
死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复。
检测:每种类型一个资源的死锁检测可采用有向图环路检测算法;每种类型多个资源的死锁检测采用基于矩阵的算法。
恢复:进程终止;资源抢占;进程回退。