• 操作系统:死锁


    • 什么是死锁

      • 在并发环境下,各进程因竞争资源而造成的一种互相等待对方资源,导致各进程都阻塞,都无法向前推进的现象。
      • 发生死锁后,若无外力干涉,这些进程都将无法向前推进。
    • 进程死锁、饥饿、死循环的区别

      • 死锁:各进程互相等待对方手里的资源,导致各进程阻塞,都无法向前推进的现象。
      • 饥饿:由于长期得不到想要的资源,某进程无法向前推进的现象。
      • 死循环:某进程执行过程中一直跳不出某个循环的现象。
      共同点 区别
      死锁 进程无法顺利向前推进 至少有两个或两个以上的进程同时发生死锁。发生死锁的进程一定处于阻塞态
      饥饿 进程无法顺利向前推进 可能只有一个进程发生饥饿。既可能是阻塞态(得不到I/O设备),也可能是就绪态(得不到处理机)
      死循环 进程无法顺利向前推进 可能只有一个进程发生死循环。可以是运行态。死锁和饥饿是管理者(操作系统)的问题,死循环是被管理者的问题。
    • 死锁产生的必要条件

      • 互斥条件:只有对互斥使用的资源的竞争才会导致死锁。
      • 不剥夺条件:进程获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
      • 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占用,此时请求进程被阻塞,但又对自己已有的资源保持不放。
      • 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程以获得的资源同时被下一个进程所请求。
      • 注意:发生死锁时一定有循环等待,但是发生循环等待时未必死锁。
    • 死锁的处理策略

      • 预防死锁:破坏死锁产生的四个必要条件中的一个或几个。

        • 破坏互斥条件:把只能互斥使用的资源改造成允许共享使用。但是很多时候都无法破坏互斥条件。
        • 破坏不剥夺条件:
          • 方案一:当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。
          • 方案二:当某个进程需要的资源被其他进程占用的时候,可以由操作系统协助,将想要的资源强行剥夺。
          • 缺点:实现起来比较复杂;释放已经获得的资源会造成前一阶段工作的失效;反复申请和释放资源会增加系统开销,降低系统吞吐量。
        • 破坏请求和保持条件:
          • 采用静态分配方法:即进程在运行前一次申请完它所需要的全部资源,在它的资源为满足前,不让它投入运行。
          • 缺点:资源利用率低;也有可能导致某些进程饥饿。
        • 破坏循环等待条件:
          • 采用顺序资源分配:首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源。
          • 缺点:不方便增加新设备(需要重新分配所有的编号);浪费资源(使用资源的顺序和编号递增的顺序不一致)。
      • 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)。

        • 安全序列:指如果系统按照这种序列分配资源,则每个进程都能顺利完成。(安全序列可能有多个)
        • 不安全状态:系统找不出任何一个安全序列。如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态。
        • 银行家算法:在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。
      • 死锁的检测和解除:允许死锁的发生,操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

        • 死锁的检测
          • 用某种数据结构来保存资源的请求和分配信息
          • 提供一种算法,利用上述信息来检测系统是否已进入死锁状态
        • 死锁的解除
          • 资源剥夺法:挂起某些死锁进程,并抢夺它的资源,将这些资源分配给其他的死锁进程。
          • 撤销进程法:强制撤销部分甚至全部死锁进程,并剥夺这些进程的资源。
          • 进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。
    • 数据库系统中如何解决死锁

      • 查出线程杀死
      • 设置锁的超时时间
      • 指定获取锁的顺序
  • 相关阅读:
    BZOJ4644 经典傻逼题 (线段树分治+可撤销线性基+Xor)
    CF678E Another Sith Tournament(思维+dp)
    HDU 6511
    HDU6513 Reverse It(容斥+Cnk)
    一篇最浅显易懂的Splay讲解(试问谁能比我的更易懂
    [CTSC2016]时空旅行 (线段树分治+凸壳
    关于dsu on tree 和一些例题 CF 741 D
    关于区间开根号+区间询问
    [FJOI2015]火星商店问题 --线段树分治+可持久化trie
    线段树 关于pushup的技巧
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12266849.html
Copyright © 2020-2023  润新知