解决死锁的方法

1.解决死锁主要方法如下:

(1)不考虑此问题,乐观的角度,鸵鸟算法

(2)不让死锁发生:

    ①死锁预防。

      静态策略,通过设计合适的资源分配算法,不让死锁发生

    ②死锁避免

      动态策略,以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配

(3)让死锁发生:死锁的检测与解除

2.死锁预防的具体方法:主要是破坏产生死锁的四个必要条件中的任何一个条件。

(1)破坏“互斥使用/资源独占”条件

  使用资源转换技术,将独占资源变为共享资源

(2)破坏“占有且等待”条件

①方案1:每个进程在运行前必须一次性的申请它所要求的全部资源,且仅当该进程所要的资源均可满足时才一次性的分配。

    资源利用率低,“饥饿”现象

②在允许进程动态申请资源的前提下规定,一个进行在申请新资源,且不能立即得到满足,必须释放已占有的全部资源。若需要再重新申请

(3)破坏“不可抢占”条件

可以通过操作系统抢占这一资源(根据进程的不同优先级)

局限性:适用于状态易于保存和恢复的资源,如CPU(抢占式的调度算法),内存(页面置换算法)

(4)破坏“循环等待”条件

通过定义资源类型的线性顺序实现

方案:资源有序分配法。(如哲学家就餐问题)

     也就是把资源中所有的资源编号,进程在申请资源时,必须严格按照资源编号的递增次序进行,否则操作系统不予分配。(资源使用的频繁性?)

3.死锁避免的方法

(1)对不同分区进行不同的处理,左下可同时分配资源;右下区域可能会产生死锁,应该先分配P,释放后再分配Q;左上同理;右上区域时会产生死锁现象,不予分配资源。对可能发生死锁和可能产生死锁的不予分配资源,否则(安全状态)分配资源。

(2)安全状态是指每个进程Pi以后还需要的资源量不超过系统当前剩余资源量与所有进程Pj当前占有资源量之和。

4.死锁的检测与解除

(1)允许死锁发生,但是操作系统会不断监视系统进展情况,判断死锁是否真的发生。(进程等待时检测,定时检测,系统资源利用率下降)

(2)一旦死锁发生,采用专门的措施,解除死锁并以最小的代价恢复系统运行。

原文地址:https://www.cnblogs.com/sunnyCx/p/8108687.html