zoukankan      html  css  js  c++  java
  • 操作系统 第五章 死锁(一)

    死锁(deadlock)定义:

    在多道程序中,由于多个并发进程共享系统的资源,如果使用不当可能会造成一种僵局,即当某个进程提出资源的使用请求后,使得系统中一些进程处于无休止的阻塞状态,在无外力的作用下,这些进程将无法继续进行下去,这就是死锁。

    产生死锁的环境:

    1、多道程序设计技术

    2、多个并发进程

    3、资源共享(独占)

    4、没有外力可以借助

    使用不当造成的死锁示例

    1、P、V操作不当

     2、竞争资源

      多个进程共享不可抢占的资源就可能引起死锁

    3、进程申请顺序不当

    发生进程的四个必要条件(1971年提出)

    1、互斥条件

    2、不剥夺条件

    3、请求和保持

    4、循环等待

    死锁的危害

    轻则系统资源利用率严重下降,重则系统崩溃

    解决死锁的策略:

    死锁的预防

    静态的方法;在进程执行前采取的措施,通过设置某些限制条件,去破坏产生死锁的四个必要条件之一,防止发生死锁。

    死锁的避免

    动态的方法;在进程执行过程中采取的措施,不需事先采取限制措施破坏产生死锁的必要条件,而是在进程申请资源时用某种方法去防止系统进入不安全状态,从而避免发生死锁。

    死锁的检测和解除

    这种方法预先并不采用任何限制措施,允许系统在运行过程中发生死锁。但可通过系统设置的检测机构及时检测死锁的发生,如检测到死锁,则采用撤销进程等死锁解除方法使系统正常工作。

    死锁的检测和解除的提出原因:预防策略虽然可以杜绝死锁发生,但是它提出的策略可能会或多或少影响到系统效率。

    思想:可以容忍死锁的发生,事后处理。

    优点:灵活,效率高。

    破坏死锁产生的必要条件

    破坏互斥条件

    这种方法是通过使用SPOOLing来解决问题的,SPOOLing让这个打印机变成了一个虚拟设备,当打印机正在被进程使用时,别的进程来申请,此时这个进程不会被阻塞,而是会在SPOOLing系统这提交一个申请表,相当于是在这排队,这样就间接破坏了死锁的互斥条件。 

    局限:破坏“互斥”比较困难,而且对很多资源行不通。

    破坏不可剥夺条件

    思想:允许进程还未执行完成时释放已经占有的资源

    方法:

    1、已经占有部分资源,还需要资源,如果得不到满足,则释放自己所占有的所有资源,以后再申请。

    2、正在使用资源,有高优先级的进程请求相同资源,则低优先级进程放弃资源。

    局限:实现困难,为例恢复现场需要耗费很多时间和空间,因此只适合类似CPU、存储器这样的资源。

    破坏请求和保持条件

    常常采用静态策略:进程创建时就由系统分配了所有需要的资源,然后才执行,并且以后没有资源申请要求,进程执行完后,释放资源。

    缺点:系统效率低,并发性下降,资源浪费严重。

    破坏循环等待条件:

    方法:给资源编号,进程必须按序申请资源。

    局限:

    1、资源编号困难:尽管资源的按序分配方法消除了死锁的问题,但给资源编号很困难,很难满足每一个进程的要求。

    2、资源的编号很难和进程申请资源的顺序一致:资源顺序分配法是按资源编号申请资源,可能与实际使用资源的顺序不一致,使得一些先申请的资源因暂时不用,而长时间闲置,降低了系统资源利用率。

    结论:

    死锁的预防是以破坏死锁产生的必要条件为基本方法,从而防止死锁发生的。其中由于对资源的申请加上了诸多的限制,因此这种策略虽有一定的效果,但其资源的利用率和效率比较低,很难令人满意。

    死锁的避免

    思想

    允许死锁产生的条件存在,但通过动态的、明智的选择----在分配资源之前,系统判断假若满足进程的要求是否会发生死锁,如果会,资源就不予分配,从而确保永远不会到达死锁点,避免死锁的发生。

    优点:比预防此略更为灵活实用,允许更多的并发,其资源利用率和效率也更高。

    系统的状态

    安全状态:指在某个时刻,当多个进程动态的申请资源时,如果存在一种顺序,使得系统按照这种顺序逐次地为每个进程分配资源后,每个进程都可以在最终得到最大需求量后,依次顺利地完成。

    与安全状态相反的就是不安全状态。

    避免死锁的关键就是:让系统在动态分配资源的过程中,不要进入不安全状态,

     单银行家算法(Banker's  Algorithm)

    基本思想:借用了银行借贷系统的分配策略,基于这样的一些规则:

    1、第一次申请需要声明最大资金需求量

    2、满足最大需求后要及时归还资金

    3、客户申请的贷款数量不超过它自己拥有的最大值时,银行要尽量满足客户需求。

     

     

     

     

  • 相关阅读:
    九度-剑指Offer
    Fiddler如何模拟弱网环境进行测试
    登录功能测试点
    【转】移动应用崩溃日志收集工具对比
    【转】高扩展性网站的50条原则
    互联网常见架构接口压测性能分析及调优手段建议
    安装JDK时提示 IllegalArgumentException:Invalid characters in hostname的解决方法
    JAVA+Maven+TestNG搭建接口测试框架及实例
    Jmeter(二)Jmeter目录介绍
    性能测试-Gatling(一)
  • 原文地址:https://www.cnblogs.com/fate-/p/13210198.html
Copyright © 2011-2022 走看看