死锁

作者: R_est | 来源:发表于2020-06-15 23:14 被阅读0次
    小明一家就是这么饿死的——死锁
    我离成功只差一双匡威——死锁
    • 哲学家就餐问题
      五个哲学家围圆,哲学家需要思考休息吃饭,但只有5支筷子
      吃饭使用两支筷子,每次只取一支筷子,且只能取身边的筷子,吃完放下筷子。

    • 死锁的概念
      两个或多个进程无限期地等待永远不会发生地条件地一种系统状态,结果每个进程都永远阻塞。
      在两个或多个进程中,每个进程都持有某种资源,但又仅需申请其他进程已持有的某种资源。此时每个进程都拥有其运行时所需的一部分资源,但又都不够,从而每个进程都不能向前推进,陷于阻塞状态。

    • 死锁的起因
      进程对独占性资源(键盘,打印机等)的竞争而产生死锁
      并发进程的请求和释放资源的顺序不当而产生死锁
      不争取的PV操作也可能产生死锁
      ** 系统资源有限并不会导致死锁**

    • 死锁的一些结论
      参与死锁的进程至少是2个
      参与死锁的进程至少有2个已经占有资源
      参与死锁的所有进程都在等待资源
      参与死锁的进程是当前系统所有进程的子集
      死锁会浪费大量系统资源,甚至导致系统崩溃

    • 死锁的必要条件
      1.互斥条件:进程互斥使用资源,资源具有独占性
      2.不剥夺条件:进程访问完资源前不能被其他进程强制剥夺
      3.部分分配条件:区别于全部分配,进程边运行边申请资源
      4.环路条件:多个进程构成环路,环中每个进程已占有资源被前一个进程申请,想申请的资源被后一个进程占用

      逻辑环路
    • 解决死锁

    策略 方法
    预防策略 通过设置限制条件,破坏4个必要条件中的一个或多个来防止死锁
    避免策略 不事先采取限制区破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估分配资源是否会让系统进入死锁状态,若是,则拒绝此次分配资源,从而避免死锁的方式
    检测策略、恢复策略 允许死锁产生,但通过检测机制及时检测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统已发生的死锁清除,将进程从死锁状态解脱出来
    • 预防策略
      破坏互斥条件(难),破坏不剥夺条件(代价大,不稳定),破坏部分分配条件(预先静态分配),破坏环路条件(有序资源分配)
      较易实现,早期广泛使用,但限制太严格,造成资源利用率和吞吐量降低

    • 预先静态分配,破坏部分分配条件
      策略:进程运行前将所需资源一次性全部分配给它,因此进程再运行过程中不再提出资源请求,从而避免出现阻塞或死锁。
      特点:所需资源不能全部满足时,执行会被延迟;运行前估算资源需求,应用开销增大;资源被占而不用,资源利用率低
      改进:可将资源分配的单位由进程改为程序步

    • 有序资源分配,破坏环路条件
      策略:系统中每个资源分配有以一个唯一序号,进程每次申请资源时,只能申请序号更大的资源,分配资源时检查资源序号是否复合递增规定

    • 避免策略
      银行家算法
      只需要较弱的限制条件,可获取较高的资源利用率和吞吐量,但算法难度大

    • 检测和恢复策略
      检测方法复杂,实现难度大
      恢复方法靠人工,撤销一些进程,回收资源再分配

    • Windows和Linux采用何种死锁解决方案
      死锁解决算法复杂,取得的效益差,因此现有操作系统认为死锁不会发生而不做处理 ,留给用户进行操作:类似鸵鸟策略,对危险视而不见。

    相关文章

      网友评论

          本文标题:死锁

          本文链接:https://www.haomeiwen.com/subject/jifkxktx.html