これはバンカーのアルゴリズムです。 デッドロックを回避する そして 資源を割り当てます コンピュータシステムの各プロセスに安全に転送します。 ' S ステート」 各プロセスへの割り当てを許可するかどうかを決定する前に、考えられるすべてのテストまたはアクティビティを検査します。また、オペレーティング システムがすべてのプロセス間でリソースを正常に共有するのにも役立ちます。銀行家のアルゴリズムは、銀行システムが割り当てリソースを安全にシミュレートできるように、個人に融資金額を制裁すべきかどうかをチェックすることから名付けられました。このセクションでは、 バンカーのアルゴリズム 詳細に。また、それに基づいて問題を解決します。 バンカーのアルゴリズム 。バンカーのアルゴリズムを理解するために、まず実際の例を見てみましょう。
特定の銀行の口座所有者の数が「n」で、銀行にある合計金額が「T」であるとします。口座名義人がローンを申請した場合。まず、銀行は全額の現金から融資額を差し引き、現金の差額が T より大きいと推定して融資額を承認します。このような措置が取られるのは、他の人がローンを申請したり、銀行からいくらかの金額を引き出したりした場合に、銀行が銀行システムの機能を制限することなくすべてを管理および運用できるようにするためです。
同様に、それは オペレーティング·システム 。コンピューター システムで新しいプロセスが作成されると、そのプロセスは、今後のプロセス、リソースの要求、プロセスのカウント、遅延など、あらゆる種類の情報をオペレーティング システムに提供する必要があります。これらの基準に基づいて、オペレーティング システムは、システム内でデッドロックが発生しないように、どのプロセス シーケンスを実行するか待機するかを決定します。したがって、次のようにも知られています。 デッドロック回避アルゴリズム または デッドロック検出 オペレーティングシステム内で。
利点
バンカーのアルゴリズムの重要な特徴は次のとおりです。
- 各プロセスの要件を満たすさまざまなリソースが含まれています。
- 各プロセスは、今後のリソース要求、リソースの数、リソースが保持される期間に関する情報をオペレーティング システムに提供する必要があります。
- これは、オペレーティング システムがコンピュータ システム内の各種類のリソースに対するプロセス要求を管理および制御するのに役立ちます。
- このアルゴリズムには、各プロセスがシステム内で最大数のリソースを保持できることを表す Max resource 属性があります。
短所
- 固定数のプロセスが必要であり、プロセスの実行中にシステム内で追加のプロセスを開始することはできません。
- このアルゴリズムでは、タスクの処理中にプロセスが最大のニーズを交換することはできなくなりました。
- 各プロセスは、システムの最大リソース要件を事前に認識し、明示する必要があります。
- 限られた時間内に許可できるリソース要求の数は、リソースの割り当ての期限は 1 年です。
銀行家のアルゴリズムを使用する場合、次の 3 つのことについて知る必要があります。
- 各プロセスがシステム内の各リソースに対して要求できる量。 [ で表されます。 マックス ] リクエスト。
- 各プロセスが現在システム内の各リソースをどれだけ保持しているか。 [ で表されます。 割り当て済み ] リソース。
- これは、システム内で現在利用可能な各リソースの数を表します。 [ で表されます。 利用可能 ] リソース。
以下は、バンカーのアルゴリズムに適用される重要なデータ構造用語です。
n がプロセスの数、m がコンピュータ システムで使用される各種リソースの数であるとします。
Nedd[i][j] = Max[i][j] - 割り当て[i][j]。
バンカー アルゴリズムは、プロセスを制御してシステムのデッドロックを回避するための安全アルゴリズムとリソース要求アルゴリズムを組み合わせたものです。
安全アルゴリズム
これは、システムが安全な状態にあるかどうか、または銀行家のアルゴリズムの安全なシーケンスに従っているかどうかをチェックするために使用される安全アルゴリズムです。
1. ベクトルは 2 つあります 中華鍋 そして 仕上げる 安全アルゴリズムにおける長さ m と n 。
初期化: 作業 = 使用可能
終了[i] = false; I = 0、1、2、3、4…n - 1の場合。
2. 次のような各タイプのリソース [i] の可用性ステータスを確認します。
必要[i]<= work
終了[i] == false
i が存在しない場合は、手順 4 に進みます。=>
3. Work = Work +Allocation(i) // 新しいリソース割り当てを取得します
終了[i] = true
ステップ 2 に進み、次のプロセスのリソースの利用可能状況を確認します。
4. Finish[i] == true の場合。これは、システムがすべてのプロセスに対して安全であることを意味します。
リソース要求アルゴリズム
リソース要求アルゴリズムは、プロセスがシステム内の各種リソース要求を要求マトリックスとして行ったときにシステムがどのように動作するかをチェックします。
プロセス P[i] ごとにリソース要求配列 R[i] を作成しましょう。リソースリクエストの場合私[j] は「K」に等しく、プロセス P[i] がシステム内にリソース タイプ R[j] のインスタンスを「k」個必要とすることを意味します。
1. の数のとき 要求されたリソース 各タイプの値は 必要 リソースの場合はステップ 2 に進み、条件が失敗した場合は、プロセス P[i] がリソースの最大要求を超えていることを意味します。この表現が示すように:
リクエスト(i)の場合<= need
ステップ 2 に進みます。=>
2. 要求された各種類のリソースの数が、各プロセスで使用可能なリソースよりも少ない場合は、手順 (3) に進みます。この表現が示すように:
リクエスト(i)の場合<= available
それ以外の場合、プロセス P[i] はリソースを使用できないため、待機する必要があります。=>
3. 要求されたリソースが状態の変更によってプロセスに割り当てられる場合:
利用可能 = 利用可能 - リクエスト
割り当て(i) = 割り当て(i) + リクエスト(i)
必要私= 必要私- リクエスト私
リソース割り当て状態が安全な場合、そのリソースはプロセス P(i) に割り当てられます。そして、新しい状態が安全でない場合、プロセス P (i) は、各タイプの要求 R(i) を待って、古いリソース割り当て状態を復元する必要があります。
例: 5 つのプロセス P1、P2、P3、P4、P5 と 3 つのリソース タイプ A、B、C を含むシステムを考えます。リソース タイプは次のとおりです。A には 10 個、B には 5 個のインスタンスがあり、リソース タイプ C には 7 つのインスタンスがあります。
プロセス | 割り当て A B C | マックス A B C | 利用可能 A B C |
---|---|---|---|
P1 | 0 1 0 | 7 5 3 | 3 3 2 |
P2 | 200 | 3 2 2 | |
P3 | 3 0 2 | 9 0 2 | |
P4 | 2 1 1 | 2 2 2 | |
P5 | 0 0 2 | 4 3 3 |
銀行家のアルゴリズムを使用して、次の質問に答えてください。
- ニーズマトリックスの参照先は何ですか?
- システムが安全かどうかを判断します。
- プロセス P1 のリソース要求 (1, 0, 0) をシステムがすぐに受け入れることができたらどうなるでしょうか?
何年も。 2: ニーズマトリックスのコンテキストは次のとおりです。
必要量 [i] = 最大 [i] - 割り当て [i]
P1 の必要性: (7, 5, 3) - (0, 1, 0) = 7, 4, 3
P2 の必要性: (3, 2, 2) - (2, 0, 0) = 1, 2, 2
P3 の必要性: (9, 0, 2) - (3, 0, 2) = 6, 0, 0
P4 の必要性: (2, 2, 2) - (2, 1, 1) = 0, 1, 1
P5 の必要性: (4, 3, 3) - (0, 0, 2) = 4, 3, 1
プロセス | 必要 A B C |
---|---|
P1 | 7 4 3 |
P2 | 1 2 2 |
P3 | 6 0 0 |
P4 | 0 1 1 |
P5 | 4 3 1 |
そこで、ニーズマトリックスのコンテキストを作成しました。
答え。 2: バンカーのアルゴリズムを適用します。
A、B、C の利用可能なリソースは 3、3、2 です。
次に、各タイプのリソース要求が各プロセスで利用可能かどうかを確認します。
ステップ1: プロセス P1 の場合:
必要<= available< p>
7、4、3<= 2 3, condition is 間違い 。=>
そこで、別のプロセスである P2 を調べます。
ステップ2: プロセス P2 の場合:
必要<= available< p>
1、2、2<= 2 3, condition 真実=>
新規利用可能 = 利用可能 + 割り当て
(3, 3, 2) + (2, 0, 0) => 5, 3, 2
同様に、別のプロセス P3 を調べます。
ステップ 3: プロセス P3 の場合:
P3 の必要性<= available< p>
6、0、0<= 2 5, 3, condition is 間違い 。=>
同様に、別のプロセスである P4 を調べます。
ステップ 4: プロセス P4 の場合:
P4 の必要性<= available< p>
0、1、1<= 2 5, 3, condition is 真実=>
新しい利用可能なリソース = 利用可能な + 割り当て
5、3、2 + 2、1、1 => 7、4、3
同様に、別のプロセス P5 を調べます。
ステップ5: プロセス P5 の場合:
P5 の必要性<= available< p>
4、3、1<= 3 7, 4, condition is 真実=>
新しく利用可能なリソース = 利用可能 + 割り当て
7、4、3 + 0、0、2 => 7、4、5
ここで、プロセス P1 と P3 の各タイプのリソース要求を再度調べます。
ステップ6: プロセス P1 の場合:
P1 ニーズ<= available< p>
7、4、3<= 5 7, 4, condition is 真実=>
新しい利用可能なリソース = 利用可能な + 割り当て
雪と氷
7、4、5 + 0、1、0 => 7、5、5
そこで、別のプロセス P2 を調べます。
ステップ 7: プロセス P3 の場合:
P3 の必要性<= available< p>
6、0、0<= 5 7, 5, condition is true< p>
新しい利用可能なリソース = 利用可能な + 割り当て
7、5、5 + 3、0、2 => 10、5、7
したがって、バンカーのアルゴリズムを実行して、P2、P4、P5、P1、P3 などの安全な状態と安全なシーケンスを見つけます。
何年も。 3: リクエスト (1, 0, 2) を許可するには、まず次のことを確認する必要があります。 リクエスト<= available< strong>、つまり (1, 0, 2)<= (3, 3, 2), since the condition is true. so process p1 gets request immediately.< p>
=>=>