MHuiG

「看庭前花开花落,望天上云卷云舒」

银行家算法

# 银行家算法

银行家算法（Banker’s Algorithm）是一个避免死锁（Deadlock）的著名算法，是由艾兹格・迪杰斯特拉在 1965 年为 T.H.E 系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础，判断并保证系统的安全运行。

## 背景

在银行中，客户申请贷款的数量是有限的，每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量，在满足所有贷款要求时，客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时，都应尽量满足客户的需要。在这样的描述中，银行家就好比操作系统，资金就是资源，客户就相当于要申请资源的进程。

## 进程

         Allocation　　　Max　　　Available
    　　 ＡＢＣＤ　　  ＡＢＣＤ　　ＡＢＣＤ
    P1   ００１４　　  ０６５６　　１５２０
    P2　 １４３２　　  １９４２
    P3　 １３５４　  　１３５６
    P4 　１０００　　  １７５０

我们会看到一个资源分配表，要判断是否为安全状态，首先先找出它的 Need，Need 即 Max (最多需要多少资源) 减去 Allocation (原本已经分配出去的资源)，计算结果如下：

      NEED
    ＡＢＣＤ
    ０６４２
    ０５１０
    ０００２
    ０７５０

然后加一个全都为 false 的字段

    FINISH
    false
    false
    false
    false

接下来找出 need 比 available 小的 (千万不能把它当成 4 位数 他是 4 个不同的数)

      NEED　　  Available
    ＡＢＣＤ　　ＡＢＣＤ
    ０６４２　　１５２０
    ０５１０<-
    ０００２
    ０７５０

P2 的需求小于能用的，所以配置给他再回收

     NEED　　   Available
    ＡＢＣＤ　　ＡＢＣＤ
    ０６４２　　１５２０
    ００００　＋１４３２
    ０００２－－－－－－－
    ０７５０　　２９５２

此时 P2 FINISH 的 false 要改成 true (己完成)

    FINISH
    false
    true
    false
    false

接下来继续往下找，发现 P3 的需求为 0002，小于能用的 2952，所以资源配置给他再回收

    　NEED　　    Available
    ＡＢＣＤ　　Ａ　Ｂ　Ｃ　Ｄ
    ０６４２　　２　９　５　２
    ００００　＋１　３　５　４
    ００００－－－－－－－－－－
    ０７５０　　３　12　10　6

依此类推，做完 P4→P1，当全部的 FINISH 都变成 true 时，就是安全状态。

## 安全和不安全的状态

如果所有过程有可能完成执行（终止），则一个状态（如上述范例）被认为是安全的。由于系统无法知道什么时候一个过程将终止，或者之后它需要多少资源，系统假定所有进程将最终试图获取其声明的最大资源并在不久之后终止。在大多数情况下，这是一个合理的假设，因为系统不是特别关注每个进程运行了多久（至少不是从避免死锁的角度）。此外，如果一个进程终止前没有获取其它能获取的最多的资源，它只是让系统更容易处理。

基于这一假设，该算法通过尝试寻找允许每个进程获得的最大资源并结束（把资源返还给系统）的进程请求的一个理想集合，来决定一个状态是否是安全的。不存在这个集合的状态都是不安全的。

进程同步之信号量机制

信号量机制 进程同步之信号量机制 信号量（semaphore）的数据结构为一个值和一个指针，指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。 信号量机制信号量机制...

留言区

Notes
OS
本文目录
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are you Robot?</pjax>