[OS] バンカーズアルゴリズム

セキュリティシーケンス

システムがこの順序でリソースを割り当てれば、各プロセスはスムーズに完了します。安全なシーケンスが見つかる限り、システムは安全な状態にあります。

当然,安全序列可能有多个

一般的な理解モデル

この時点で、あなたは 100 億を手にした成功した銀行家です...

現在、あなたに融資をお願いしたい会社はB社、A社、T社の3社です。

B: 「兄さん、70億まで借りたいんです」

A: 「兄さん、40億まで借りたいんです」

T:「兄さん、50億まで借りたいんです」

ルールがあります:会社に貸したお金が会社が提示する最大要件を満たさない場合、借りたお金は無駄になります。

もちろん、お金を無駄にしたくないので、100 億を無駄にしないように借り方を検討する必要があります。

初回ローン

最大要件 すでに借りています せいぜい借りてください
B 70 20 50
40 10 30
T 50 30 20

此时你手里还有40亿

お金を借りる際のセキュリティシーケンスを分析する

  1. このときBさんはあなたから30億借りたいと思っていますが、あえて借りることができますか?

    1. 同意する場合: 30 億 B を貸します。那么你的手里还有10亿上の図は、以下に示すようにわずかに変更されます。

    2. 最大要件 すでに借りています せいぜい借りてください
      B 70 20+30=50 50-30=20
      40 10 30
      T 50 30 20
    3. 別の会社がさらに 20 億借りようと提案したら、あなたは死んでしまい、当然借りられなくなり、お金が無駄になるため、このお金は借りられなくなります。不安全

  2. この時、Aさんはあなたから20億借りたいと思っていますが、あえて借りることができますか?

    1. 同意する場合: 20 億を貸しました。那么你的手里还有20亿上の図は、以下に示すようにわずかに変更されています。

    2. 最大要件 すでに借りています せいぜい借りてください
      B 70 20 50
      40 10+20=30 30-20=10
      T 50 30 20
    3. 次に、20億をすべてT社に貸すことができます。お金を全額返すと50億が手元にあり、そのお金をB社に貸します。お金を全額返すと70億が手元に残り、最終的にA社に貸します。こうすれば全額が戻ってきます。

    4. したがって、この融資シーケンス (安全なシーケンス): T->B->A

    5. 上記の考えに従って、このシーケンスを自分で検証してください: A->T->B

銀行家のアルゴリズム

本旨

プロセスがリソースの申請を行う場合、まず、预判この割り当てによってシステムが に入るかどうかを確認します不安全状态安全でない状態になる場合、リクエストは一時的に許可されず、プロセスはブロックされて最初に待機されます。

核となるのは: セキュリティ アルゴリズム

リソース表現

1 次元の数値を多次元ベクトルに拡張します。例: システム内に 5 つのプロセス P0 ~ P4、3 種類のリソース R0 ~ R2 があり、初期番号は (10, 5, 7)

プロセス 最大のニーズ すでに割り当てられています せいぜい必要な
P0 (7,5,3) (0,1,0) (7,4,3)
P1 (3,2,2) (2,0,0) (1,2,2)
P2 (9,0,2) (3,0,2) (6,0,0)
P3 (2,2,2) (2,1,1) (0,1,1)
P4 (4,3,3) (0,0,2) (4,3,1)

この時点で (7,2,5) が割り当てられ、(3,3,2) が残ります。

セキュリティアルゴリズム分析システムのステータス

  1. 現時点でシステムは安全な状態ですか? その場合は、安全なシーケンスを見つけてください。

    1. まず、残りのリソースが各プロセスのニーズを満たしているかどうかを確認します

    2. P1 と P3 のニーズを満たすことができることがわかりました。次に、それを最初に P1 に割り当て (セキュリティ シーケンスに P1 を追加)、P1 が終了するのを待ちます。その後、残りのリソースは (5,3,2) になり、次に P3 に割り当てます (セキュリティ シーケンスに P3 を追加)。彼が終了すると、残りのリソースは (7,4,3) になります。以下に示すように:

    3. プロセス 最大のニーズ すでに割り当てられています せいぜい必要な
      P0 (7,5,3) (0,1,0) (7,4,3)
      P2 (9,0,2) (3,0,2) (6,0,0)
      P4 (4,3,3) (0,0,2) (4,3,1)
    4. P4、P2、P0 (必要なリソースの最大数は残りのリソースより少ない) をセキュリティ シーケンスに追加すると、最終的にセキュリティ シーケンスを取得できます。安全性算法

  2. 実際に問題を実行する場合 (手計算)、より高速な方法を使用して安全な順序を見つけることができます。

    1. (3, 3, 2) は P1 と P3 を満たすことができます。つまり、いずれの場合でも、これら 2 つのプロセスのリソース要件が順番に満たされる必要があるため、P1 と P3 は正常に実行され、リソースが返される必要があります。P1 と P3 を最初にセキュリティ シーケンスに追加できます。(2, 0, 0) + (2, 1, 1) + (3, 3, 2) = (7, 4, 3) 残りの P0
      、P2、P4 を満たすことができます。同様に、これらのプロセスはすべてセキュリティ シーケンスに参加できます。したがって、説明したように、5 つのプロセスすべてがセキュリティ シーケンスに追加されます此时系统处于安全状态, 暂不可能发生死锁
  3. 特殊: 安全なシーケンス インスタンスが見つかりません

    1. プロセス 最大のニーズ すでに割り当てられています せいぜい必要な
      P0 (8、5、3) (0、1、0) (8, 4, 3)
      P1 (3,2,2) (2,0,0) (1,2,2)
      P2 (9、5、2) (3、0、2) (6, 5, 0)
      P3 (2,2,2) (2,1,1) (0,1,1)
      P4 (4、3、6) (0、0、2) (4, 3, 4)
    2. 合計リソース (10、5、7)、残りの利用可能なリソース (3、3、2)

    3. (3, 3, 2) P1 と P3 を満たすことができ、P1 と P3 を最初にセキュリティ シーケンスに追加でき、残りの利用可能なリソースは (7, 4, 3) です。

    4. プロセス 最大のニーズ 割り当て済み せいぜい必要な
      P0 (8、5、3) (0、1、0) (8, 4, 3)
      P2 (9、5、2) (3、0、2) (6, 5, 0)
      P4 (4、3、6) (0、0、2) (4, 3, 4)
    5. 残りは満足できず、あらゆる点で対照的です。残りの P0 には (8、4、3) が必要です。(7, 4, 3) P2 には (6、5、0) が必要です。(7, 4, 3) P4 には (4、3、4) が​​必要です。

    6. 无法找到任何一个安全序列, 说明此时系统处于不安全状态, 有可能发生死锁

下面进入正题:银行家算法的实现

银行家算法实现

进程 最大需求Max 已分配Allocation 最多还需要Need
P0 (7, 5, 3) (0, 1, 0) (7, 4, 3)
P1 (3, 2, 2) (2, 0, 0) (1, 2, 2)
P2 (9, 0 ,2) (3, 0, 2) (6, 0, 0)
P3 (2, 2, 2) (2, 1, 1) (0, 1, 1)
P4 (4, 3, 3) (0, 0, 2) (4, 3, 1

数据结构:

n*m 矩阵 Max 表示各进程对资源的最大需求数

n*m 矩阵 Allocation 表示已经给各进程分配 了多少资源

Max – Allocation = Need 矩阵表示各进程最多还需要多少资源

长度为 m 的一维数组 Available 表示还有多少可用资源 [表示:Available = (3, 3, 2)]

用长度为 m 的一位数组 Requesti表示进程此次申请的各种资源数 [表示:Request0 = (2, 1, 1) ]

思路分析

  1. 如果 Requesti[j]≤Need[i, j] (0≤j≤m)便转向 2 ; 否则认为出错 :因为它所需要的资源数已超过它所宣布的最大值

  2. 如果 Requesti[j]≤Available[j] (0≤j≤m), 便转向 3 ; 否则表示尚无足够资源, Pi必须等待

  3. 系统试探着把资源分配给进程Pi, 并修改相应的数据(并非真的分配, 修改数值只是为了做预判

    Available = Available - Requesti;
    Allocation[i, j] = Allocation[i, j] + Requesti[j];
    Need[i, j] = Need[i, j]Requesti[j]  
    
  4. 操作系统执行安全性算法, 检查此次资源分配后, 系统是否处于安全状态。 若安全, 才正式分配; 否则, 恢复相
    应数据, 让进程阻塞等待

银行家算法步骤

  1. 检查此次申请是否超过了之前声明的最大需求数
  2. 检查此时系统剩余的可用资源是否还能满足这次请求\
  3. 试探着分配, 更改各数据结构
  4. 用安全性算法检查此次分配是否会导致系统进入不安全状态

安全性算法步骤

检查当前的剩余可用资源是否能满足某个进程的最大需求, 如果可以, 就把该进程加入安全序列,并把该进程持有的资源全部回收。
不断重复上述过程, 看最终是否能让所有进程都加入安全序列。

系统处于不安全状态未必死锁, 但死锁时一定处于不安全状态。 系统处于安全状态一定不会死锁

升华思维

死锁预防是保证系统不进入死锁状态的静态策略,其解决办法是破坏产生死锁的四个必要条件之一、下列方法中 破坏了“循环等待”条件的是( )。

A. 银行家算法
B. 一-次性分配策略
C. 剥夺资源法
D. 资源有序分配策略

产生死锁的四个必要条件:互斥、不剥夺、请求和保持、循环等待
资源有序分配策略可以限制循环等待条件的发生。选项A判断是否为不安全状态;选项B破坏了占有请求条件;选项C破坏了非剥夺条件。

某系统中有三个并发进程都需要四个同类资源,则该系统必然不会发生死锁的最少资源是( )。

A. 9
B. 10
C. 11
D. 12

资源数为9时,存在三个进程都占有三个资源,为死锁;资源数为10 时,必然存在一个进程能拿到4个资源,然后可以顺利执行完其他进程。

在这里插入图片描述

A. Ⅱ、Ⅲ

B. Ⅰ、Ⅱ

C. Ⅰ

D. Ⅰ、Ⅲ

在这里插入图片描述

おすすめ

転載: blog.csdn.net/qq_43216714/article/details/124484094