• 解决死锁的方法


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

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

    (2)不让死锁发生:

        ①死锁预防。

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

        ②死锁避免

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    3.死锁避免的方法

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

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

    4.死锁的检测与解除

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

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

  • 相关阅读:
    用Keytool和OpenSSL生成和签发数字证书
    Maven 的插件和生命周期的绑定
    MySQL 存储过程基本函数
    MySQL 存储过程游标
    MySQL 存储过程控制语句
    MySQL 存储过程
    Shell 编程基础之 && 与 ||
    Shell 编程基础之 [ 与 [[ 的异同
    Linux 任务控制
    《深入理解Java虚拟机》笔记3
  • 原文地址:https://www.cnblogs.com/sunnyCx/p/8108687.html
Copyright © 2020-2023  润新知