• 死锁和死锁的处理


    什么是死锁

    在这里插入图片描述

    • 死锁问题 就是各自的进程互相等待对方手上的资源,导致各个进程都阻塞,无法前进的情况

    死锁、饥饿、死循环的区别

    image-20221029230546775

    • 死锁的进程一定是处于阻塞态的

    什么时候会发生死锁

    在这里插入图片描述

    • 对临界区资源的竞争

    死锁的四大必要条件

    在这里插入图片描述

    • 互斥条件
    • 不可剥夺
    • 请求和保持
    • 循环等待

    死锁的处理

    预防死锁

    • 预防死锁的核心就是破坏四大必要条件的一个或者几个条件

    破坏互斥条件

    在这里插入图片描述

    • 破坏互斥条件 不是所有情况都能破坏互斥条件 因为有些地方为了安全必须保证互斥条件

    破坏不可剥夺条件

    在这里插入图片描述

    • 两种方案

      • 就是当一个进程请求新的资源不满足,就释放保持的所有资源
      • 当进程需要的资源被其他进程所占的时候,由操作系统协助,直接将想要的资源剥夺
    • 缺点

      • 释放已经获得的资源可能造成前一阶段的工作失效,所以适合用于易保存和恢复状态的资源(如CPU资源,我们有一种对应的剥夺式的调度方式)

      • 反复的申请和释放资源会造成大量的系统开销,降低性能

    破坏请求和保持条件

    在这里插入图片描述

    • 大概实现的思想就是 只有进程能够收集运行需要的所有的资源才能投入运行 一旦运行,这些资源就是他的,该进程就不会请求别的资源
    • 缺点
      • 因为破坏了请求这种思想,所以对于一个进程来说,这个资源只需要很短的时间,但是会一直保持到进程结束,资源的利用率很低,,而且也会可能造成某些进程饥饿

    破坏循环等待条件

    在这里插入图片描述

    • 这种还是比较能够实现的
    • 顺序资源分配法,也就是将我们的资源排序,原理是只有获得小编号的资源,才能有资格神奇更大编号的资源 按此规则 已持有大编号的资源的进程不能逆向的回来神奇小编号的资源,也就不会产生循环等待的现象
    • 缺点
      • 不方便新增新的设备
      • 进程实际使用的资源的顺序根编号的递增顺序不一致,会导致资源的浪费
      • 编程比较麻烦

    避免死锁

    • 用某种方法防止系统进入不安全的状态,从而导致死锁,可以用银行家算法避免

    安全序列、安全状态、不安全状态、死锁之间的联系

    在这里插入图片描述

    • 所谓的安全序列就是如果系统按照这种序列分配资源,则每个进程都能顺利完成,只要找出一个安全序列,系统就是安全的状态
    • 系统处于不安全状态,就可能会死锁 如果发生死锁,那么系统肯定是不安全的状态 如果是安全状态,肯定不会发生死锁

    银行家算法

    image-20221030001212495

    死锁的检测和解除

    在这里插入图片描述

    死锁的检测

    在这里插入图片描述

    • 如果能消除所有的边,就说明不会发生死锁,如果不行,就说明会发生死锁

    死锁的解除

    在这里插入图片描述

  • 相关阅读:
    MiddleWare ❀ MySQL基础概述
    OpenLDAP 自助修改密码系统——筑梦之路
    Vuex基础使用存取值+异步&请求后台
    个人C语言问题记录
    RT-Thread正式成为RISC-V基金会战略会员!
    Servlet原理及应用
    安装集群kafka
    输入法在 Android13上候选词 候选区域 不显示的问题
    17.webpack4优化配置介绍
    moco接口框架介绍
  • 原文地址:https://blog.csdn.net/qq_50985215/article/details/127594518