admin管理员组

文章数量:1531658

提示:如果大家想对死锁概念有一个较深的认识可以看我的死锁相关知识的博客操作系统中的死锁
文章的所有图片资源都来自于汤 小丹_计算机操作系统_教材(实在是难得打字了)

银行家算法

  • 避免死锁
    • 一、系统安全状态
      • (1)安全状态
      • (2)安全状态举例
      • (3)由安全状态进入不安全状态
    • 二、利用银行家算法避免死锁
      • (1)银行家算法中的数据结构
      • (2)银行家算法
      • (3)安全性算法
      • (4)银行家算法举例
        • 例题1
        • 例题2
        • 有关银行家算法的例题小结
    • 三、总结


避免死锁

  • 基本思想:确保系统始终处于安全状态。一个系统开始时是处于安全状态的,当有进程请求一个可用资源时,系统须对该进程的请求进行计算,若该资源分配给进程后系统仍处于安全状态。

一、系统安全状态

  • 避免死锁方法中,把系统的状态分为安全状态不安全状态两种。当系统处于安全状态时可以避免发生死锁,而当系统处于不安全状态时,则可能会进入死锁状态。

(1)安全状态

  • 在避免死锁方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。
  • 若此次分配不会导致系统进入不安全状态,则可将资源分配给进程,否则,令进程等待。
  • 所谓安全状态,是系统能按某种推进顺序(P1, P2, … ,Pn),为每个进程 Pi 分配分配其所需的资源,指导满足每个进程对资源的最大需求,进而使每个进程都可顺利完成的一种系统状态。此时,称进程推进顺序(P1, P2, … ,Pn)为安全序列。如果系统找不到一个这样的安全序列,则称系统处于不安全状态。

(2)安全状态举例

(3)由安全状态进入不安全状态


二、利用银行家算法避免死锁

银行家算法是迪杰斯特拉(Dijkstra)提出的,
该算法原本是为银行系统设计的,以确保银行在发放现金贷款时不会发生不能满足所有客户需要的情况。

  • 前提:为实现银行家算法,每个进程在进入系统时,其都必须先声明在运行 过程中可能需要每种资源类型的最大单元数目,该数目不应超过系统所拥有的资源总量。

(1)银行家算法中的数据结构

(2)银行家算法

(3)安全性算法

  • 在实际做题的时候可用更加快速的方法找到一个安全序列
  • 直接进行对比把满足需要的进程已经分配了的资源回收,然后再进行比较,如果全都满足这说明处于安全状态。但是在做题的时候一定要注意,要画表格,这样才有做题的过程,不能直接写一个安全序列在哪里。

(4)银行家算法举例

例题1



例题2


有关银行家算法的例题小结
  • 首先判断当前时刻的安全性(安全性算法)
  • 若安全,当某进程提出资源申请 Request(i) 时,先与 Need 和 Available 比较,再尝试进行预分配
  • 判断预分配后的安全性(安全性算法)
  • 若仍安全,则正式实施预分配;否则,该进程等待

三、总结

  • 银行家算法是十分简单的,关键是要记住银行家算法和安全性算法的几个数据结构。
  • 在做这个题目的时候,主要是注意细节,不要忘记修改表格中的数据,还有就是计算的时候千万不要算错了。
  • 做完之后一定要检查一下,尤其是做完安全性算法的时候检查一下自己最后得到的总的资源数和题目给的总的资源数是否相等。

本文标签: 死锁银行家算法操作系统方法