死锁的条件、预防、避免、检测
死锁的必要条件
- 互斥条件:一个资源一次只能给一个进程使用,非共享
- 请求与保持条件:保持自己资源的同时请求其他资源,该资源可能被占有
- 非剥夺条件:不能强行夺走资源,只能等别的进程主动释放
- 循环等待条件:每个进程都在等待另一个进程占有的资源,形成死循环
死锁预防
- 破坏互斥条件:共享资源
- 破坏请求与保持条件:一次性申请所有必须的资源,申请的时候要释放已有资源
- 破坏非剥夺条件:强行释放资源给优先级更高的进程
- 破坏循环等待条件:按照顺序申请资源,避免循环
死锁避免 - 银行家算法
- 系统状态:记录每个进程最多需要多少资源,已分配多少资源,还剩下多少可用资源
- 安全状态:按照顺序分配资源,确保每个进程都可以完成任务释放资源
- 资源请求处理:检查是否超过最大需求,有没有足够资源,怎么分配
死锁检测
允许死锁,发现死锁再采取措施(终止,强行释放)