• 操作系统(八) 死锁


      如果一个正在等待的进程所申请的资源被其他等待进程占有,那么该等待进程有可能无法改变状态,这种情况称为死锁。

      当一组进程的每个进程等待一个事件,而这一事件只能由这一组进程的另一进程引起,则这组进程处于死锁状态。

     

    一、系统模型

      系统拥有一定数量的资源,资源分成多种类型,每种类型有一定数量的实例。

      进程在使用资源前必须申请资源,在使用资源之后必须释放资源。

      开发多线程应用必须特别关注这个问题,因为多个线程可能因为竞争共享资源而容易产生死锁。

     

    二、死锁的特点

      1、必要条件

    • 互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程使用。如果另一资源申请该资源,那么申请进程必须延迟直到该资源释放为止。
    • 占有并等待:一个进程必须至少占有一个资源,并等待另一资源,而该资源为其他进程所占有。
    • 非抢占:资源不能被抢占,只有在进程完成其任务之后,才会释放其资源。
    • 循环等待:一组进程中一个进程等待的资源被另一个进程占有。

      2、资源分配图

      死锁问题可以用系统资源分配图的有向图进行更精确的描述。

      资源分配图中有两种节点和两种边。节点为:系统活动进程、系统所有资源;边为:申请边和分配边。

      可以证明,如果资源分配图中没有环,那么系统就没有进程死锁,如果有环,就可能存在死锁。

      如果每个资源有多个实例,那么有环不一定会出现死锁。这时只是必要条件。

      死锁出现的充要条件:

      如果每个资源类型只有一个实例,那么有环就意味着出现死锁;

      如果环涉及到一组资源类型,而每个类型只有一个实例,那么就出现了死锁

     

    三、死锁的处理方法

      从原理上分析,有三种方式可以处理死锁:

    • 可以使用协议预防或避免死锁,确保系统不会进入死锁状态;
    • 可允许系统进入死锁状态,然后检测它,加以恢复;
    • 忽视这个问题,认为死锁不可能在系统内发生。

      死锁预防,确保至少一个必要条件不成立;

      死锁避免,要求系统事先得到有关进程申请资源和使用资源的额外信息,有了这些额外信息,可确定:对于一个申请,进程是否应等待。

     

    四、死锁预防

      出现死锁有四个必要条件,确保至少一个不成立,就能预防死锁发生。

    五、死锁避免

      死锁避免算法比预防算法要求低些,只要事先了解进程使用资源的情况即可。

      1、安全状态——按特定顺序为进程分配资源

      2、资源分配图算法

      3、银行家算法——需要知道每个进程所请求的每种资源的最大数量。

     

    六、死锁检测

      一个系统如果既没有死锁预防也没有死锁避免,则应该提供:

    • 一个用来检查系统状态从而确定是否出现死锁的算法;
    • 一个用来从死锁状态中恢复的算法;

    七、死锁恢复

      1、进程终止;

      2、资源抢占

     

     

     

     

     

     

     

     

     

     

     

     

     

     

      

  • 相关阅读:
    蘑菇街2016校园招聘第一个编程题
    杭州天丽笔试题
    2016校园招聘 cvte一面被问到的面试题目
    C#中ArrayList,List,数组的区别
    大白话讲解.NET中挂起线程的Thread.Sleep()方法
    OutLook邮箱获取授权码
    EPIC全速下载游戏加速教程
    远程服务器提示:身份验证错误 要求的函数不受支持解决办法汇总-- Windows远程桌面连接
    华硕主板重装系统以后BIOS设置的启动项就没有了,开机就进BIOS,不进系统
    Windows10访问共享文件夹:此用户无法登录,因为该账户当前已被禁用此用户无法登录,因为该账户当前已被禁用或者直接找不到相应的计算机解决办法
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8641297.html
Copyright © 2020-2023  润新知