一.死锁发生的条件
死锁的发生必须具备下列4个必要条件:
–互斥:任一时刻只允许一个进程使用资源
–请求和保持:进程在请求其余资源时,不主动释放已经占用的资源
–非剥夺:进程已经占用的资源,不会被强制剥夺
–环路等待:环路中的每一条边是进程在请求另一进程已经占有的资源。
1.预防死锁:破坏四个必要条件中的一个或几个条件; 易于实现,但会导致资源利用率和系统吞吐量降低
预防死锁的3种策略:
–摒弃“请求和保持”条件:要求所有进程一次性申请所需全部资源,保证不等待资源;
-摒弃“不剥夺”条件:对于已经保持了某些资源的进程,当他再提出新的资源要求而不能立即满足时,必须释放已保持的所有资源,待以后需要时重新申请。
–摒弃“环路等待”条件:把资源分类按顺序排列,所有进程对资源的请求必须严格按照资源序号递增的次序提出,保证不形成环路;
2.避免死锁:用某种方法在资源动态分配过程中,防止系统进入不安全状态。 实现有难度,但可获得较高的资源利用率和系统吞吐量。
1.系统的安全状态
2.利用银行家算法避免死锁
3.检测死锁:允许死锁发生。通过检测机构检测,然后采取措施,清除死锁。
4.解除死锁:与检测配套完成。常通过撤销或挂起一些进程实现。
1.重新启动
2.进程回退:回滚每个死锁进程到前一个检查点,重新执行每个进程。
3.撤销死锁进程:全部撤销;按照某种原则逐个选择死锁进程进行撤消,直到解除系统死锁
4.剥夺资源:按照某种原则逐个剥夺进程资源,直到解除死锁。