• 操作系统【OS】死锁


    常考点

    系统资源不足不是系统产生死锁的原因,资源不足只会对进程造成“饥饿”【详见王道操作系统书P153第4题】

    A:资源不足和资源分配不足还是有区别的啦~

     

     

    死锁是什么?

    • 死锁是多个进程因为竞争资源而造成的一种互相等待

     

    为什么会出现死锁?

    系统资源的竞争【空间上】

    • 系统中不可剥夺资源不足以满足多个进程
    • 只有对不可剥夺资源(如磁带机,打印机)的竞争才可能产生死锁

    进程推进顺序非法【时间上】

    • 进程运行时,请求和释放资源的顺序不当
    • 系统对独占资源分配不当

     

    产生死锁的必要条件

    • 以下四个条件都要满足才会出现死锁

    互斥条件

    多个线程不能同时使用同一个资源

    不剥夺条件

    进程A已经拥有资源1,在自己使用完之前不能被其他进程获取

    请求并保持条件

    进程A已经有资源1,想申请资源2,但是资源2被进程B持有,进程A处于等待状态,但是进程A不释放资源1

    循环等待条件

    两个线程获取资源的顺序构成了环形链

     

    死锁的充分条件:资源分配图中每种资源只有一个,又出现了环路

     

    如何解决死锁?【重点考各种方法,注意不要混淆了这些方法】

    死锁预防

     

    定义

    举例

    破坏互斥条件

    • 缺点:如打印机等临界资源只能互斥使用

    该方法不太可行

    破坏不剥夺条件

    • 常用于状态易于保存和恢复的资源(CPU的寄存器和内存资源)

    剥夺资源法

    破坏请求并保持条件

    • 可能会导致饥饿现象

    一次性分配策略、静态分配策略

    破坏循环等待条件

    • 可采用顺序资源分配法,但是编号必须相对稳定,限制了新类型设备的增加

    资源有序分配策略

    • 破坏以下一个或几个即可

    死锁避免

    • 防止系统进入不安全的状态
    • 安全性算法
    • 银行家算法
      • 系统处于安全状态时,一定无死锁;
      • 系统处于不安全状态时,不一定出现死锁
      • PS:
        • 死锁避免时不会限制用户申请资源的顺序【因为会试分配】
        • 需要进程运行所需资源总量信息;
        • 不会给可能导致死锁的进程分配资源

    死锁的检测

    资源分配图

    • 资源分配图是一个有向图,用于表示某时刻系统资源与进程之间的状态
    • 圆圈代表进程代表一类资源
    • 从进程到资源的边叫做请求边;从资源到进程的边叫做分配边

    死锁定理

    S为死锁的条件是当且仅当S状态的资源分配图是不可完全简化的

    死锁的解除

    资源剥夺法

    • 挂起某些死锁进程,并抢占它的资源

    撤销进程法

    • 强制撤销部分甚至全部死锁进程并剥夺这些进程的资源

    进程回退法

    • 让一个或多个进程回退到足以回避死锁的地步

    各个策略的比较

  • 相关阅读:
    【神经网络与深度学习】概率神经网络PNN
    使用commons-beanutils向java 类动态添加属性
    UG\NX二次开发 获取所有子部件,封装两个函数
    实现java类型和JDBC类型的相互转换 - 使用BaseTypeHandler实现数据库某一个字段的嵌套json的解析(不定数量的key-value键值对)
    JAVA面试中的SSM框架基础面试题
    采用sFlow工具实现流量监控--实验
    flask后端进行yolov5检测模型的部署(填坑)
    2023 Google 开发者大会:Web平台新动向
    jenkins 2.346.1 从git拉取后自动构建部署springboot maven项目
    同三维T80004EHL-W-4K30 4K HDMI编码器,支持WEBRTC协议
  • 原文地址:https://blog.csdn.net/weixin_42932602/article/details/134065180