私はSilberschatz G.ガニエにより、オペレーティングシステムの概念を読んでいると、デッドロックの章に、次のようにデッドロック検出のために与えられた擬似コードがあります:デッドロック検出アルゴリズム(擬似コード)
レッツ仕事と終わりは長さmとnのベクトルです。 (n個のプロセスとm個のリソースがあります)
初期化作業=利用可能です。 Allocation [i] != 0の場合、i = 0,1、...、n-1の場合、Finish [i] = false; それ以外の場合、Finish [i] = true。
検索インデックスiは、両方の完了[i]を== falseを& &リクエスト[i]を< =動作すること。そのようなiが存在しない場合
、4
ワーク=仕事+アロケーションに進み[I]
完了[I] = TRUE;終了[i]を== falseは、いくつかの私のために、システムがデッドロックされている場合はGoは2
をステップ
。さらに、Finish [i] == falseの場合、プロセスPiはデッドロックされます。
これは銀行家のアルゴリズムと非常によく似ています。しかし、上記の大胆な発言には若干の違いがあります。
オペレーティングシステムがそのプロセスにリソースをスケジューリングしていない場合、アルゴリズムはプロセスiに対してFinish [i]を真に設定する理由を説明できますか?私が知っているように、これは間違いなく、デッドロックされないことを意味するわけではありません。ありがとう!
あなたの質問はどこにも定義していない「割り当て」に基づいています。 –
それに割り当てられたリソースを必要としないプロセスは、確実に終了することができます(つまり、デッドロックの一部になることはできません)。 – Gene