死锁:
1. :
* 互斥条件
* 等待和占有条件
* 不剥夺条件
* 循环等待条件
前三个是产生死锁的必要不充分条件,第四个条件是前三个条件同时存在时的结果。
-
:
上述条件只需破坏一个,就可以防止死锁:
1.互斥条件:使资源可以同时访问
2. 等待和占有条件:静态分配
3. 不剥夺条件:剥夺调度
(1)占有资源的进程当要申请新得资源时,需先释放已经占有的资源。
(2)资源管理程序为进程分配新资源的时候,若有则直接分配,否则将剥夺该进程已有的全部资源,资源充足的时候再唤醒它重新申请所有资源。
4. 循环等待条件:采用层次分配策略或者按序分配。
所谓层次分配策略是指:将所有资源排列到不同的层次。一个进程得到某个资源后,只能继续申请到比它层次高(小于或等于它都不可以)的资源。当进程释放某一个层次的资源的时候,必须同时释放它所占有的更高层次的资源。 -
:
死锁防止的各种策略会降低系统并发性,导致低效的资源利用率,影响性能。死锁允许存在上述的前三个必要条件,通过合理的资源分配策略,确保不会出现进程循环等待链,从而避免死锁。
银行家算法: 视频课程示例讲解
银行家算法要求所涉及的进程互不相交,既不能有同步要求,还需要事先知道进程总数及每个进程所需要的最大资源数,这些在实际应用中往往很难获得。 - :
- 检测:
进程-资源分配图:由表示资源类的结点Ri指向表示进程的节点Pi的边称为分配边,由Pi指向Ri的边称为请求边。
(1)如果进程-资源分配图无环路则一定未发生死锁;(2)如果有环路,且每个资源类中只有一个资源,则一定发生了死锁;(3)如果有环路,但是所涉及的资源类有多个资源,则需要进一步判断。判断的方法是:将占有该资源类,但是未发生阻塞、在有限时间内可以释放资源的进程的节点的所有相关边去掉,接着使图中另一个进程获得该资源,重复这个过程。如果最后可以使所有进程都成为孤立点,则称该进程-资源分配图可以简化。
死锁定理:系统处于死锁状态当且仅当此状态的进程-资源分配图是不可以完全简化的。
死锁检测的关键在于多久进行一次,太频繁浪费处理器时间,太稀疏则会导致死锁进程和系统资源会长时间被锁定。
- 恢复:
资源剥夺法、进程回退法、进程撤销法、系统重启法。
1. 结束所有进程,重新启动操作系统。
2. 撤销陷于死锁的所有进程,继续运行。
3. 逐个撤下死锁进程,回收其资源,直到死锁解除。
4. 剥夺死锁进程的资源,但是不结束进程,直到死锁结束。
5. 根据系统保存的检查点让所有进程回退,直到足以解除死锁。
《操作系统教程》 - 费翔林等著