2016-10-20 25 views
1

私はSilberschatz G.ガニエにより、オペレーティングシステムの概念を読んでいると、デッドロックの章に、次のようにデッドロック検出のために与えられた擬似コードがあります:デッドロック検出アルゴリズム(擬似コード)

  1. レッツ仕事と終わりは長さmとnのベクトルです。 (n個のプロセスとm個のリソースがあります)

    初期化作業=利用可能です。 Allocation [i] != 0の場合、i = 0,1、...、n-1の場合、Finish [i] = false; それ以外の場合、Finish [i] = true。

  2. 検索インデックスiは、両方の完了[i]を== falseを& &リクエスト[i]を< =動作すること。そのようなiが存在しない場合

    、4

  3. ワーク=仕事+アロケーションに進み[I]

    完了[I] = TRUE;終了[i]を== falseは、いくつかの私のために、システムがデッドロックされている場合はGoは2

  4. をステップ

    。さらに、Finish [i] == falseの場合、プロセスPiはデッドロックされます。

これは銀行家のアルゴリズムと非常によく似ています。しかし、上記の大胆な発言には若干の違いがあります。

オペレーティングシステムがそのプロセスにリソースをスケジューリングしていない場合、アルゴリズムはプロセスiに対してFinish [i]を真に設定する理由を説明できますか?私が知っているように、これは間違いなく、デッドロックされないことを意味するわけではありません。ありがとう!

+0

あなたの質問はどこにも定義していない「割り当て」に基づいています。 –

+0

それに割り当てられたリソースを必要としないプロセスは、確実に終了することができます(つまり、デッドロックの一部になることはできません)。 – Gene

答えて

1

このアルゴリズムを実行すると、現在どのプロセスがデッドロックに関係しているかを検出します。

デッドロックされたプロセスでリソースを保持していない可能性がありますが、デッドロック自体に関与することはできず、残りのアルゴリズムとは無関係です(手順3では無効です)したがって、設定によって無視されます。Finish[i]=true

このアルゴリズムは依然としてデッドロックされたプロセスを正しく識別しません。ステップ4でフラグが立てられたプロセスは、リソースを保持することがあり、デッドロックされたプロセスで待機するのをブロックすることがありますが、デッドロックされたプロセスがなくても、プロセスがデッドロック自体に関与しません。

関連する問題