• 操作系统【OS】死锁


    常考点

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

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

     

     

    死锁是什么?

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

     

    为什么会出现死锁?

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

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

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

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

     

    产生死锁的必要条件

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

    互斥条件

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

    不剥夺条件

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

    请求并保持条件

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

    循环等待条件

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

     

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

     

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

    死锁预防

     

    定义

    举例

    破坏互斥条件

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

    该方法不太可行

    破坏不剥夺条件

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

    剥夺资源法

    破坏请求并保持条件

    • 可能会导致饥饿现象

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

    破坏循环等待条件

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

    资源有序分配策略

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

    死锁避免

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

    死锁的检测

    资源分配图

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

    死锁定理

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

    死锁的解除

    资源剥夺法

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

    撤销进程法

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

    进程回退法

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

    各个策略的比较

  • 相关阅读:
    设计模式:外观模式(C++实现)
    测试员都是背锅侠?测试人员避“锅”攻略,拿走不谢
    数据结构与算法之二叉树、二叉搜索树、平衡二叉树、红黑树、B - 树、哈夫曼树等详细教程(更新中)
    C++ Reference: Standard C++ Library reference: Containers: deque: deque: resize
    【多媒体技术与实践】使用OpenCV处理图像(实验三.上)
    线上故障突突突?如何紧急诊断、排查与恢复
    什么是MogaFX外汇储备?定义和重要性
    Spring Boot中使用JSR-303实现请求参数校验
    如何成为一名获得Adobe认证的专业人员?
    多线程编程
  • 原文地址:https://blog.csdn.net/weixin_42932602/article/details/134065180