以下に関する1つの特定の混乱を除いて、すべて整理しました。
割り当てi != 0 の場合、Finish[i] := false; それ以外の場合、Finish[i] := true。
これは、その特定の行の合計がゼロであることを意味しますか?
アルゴリズム:
データ構造:
- Available: 長さ m のベクトルは、各タイプの使用可能なリソースの数を示します。
- 割り当て: nxm 行列は、各プロセスに現在割り当てられている各タイプのリソースの数を定義します。
- リクエスト: nxm マトリックスは、各プロセスの現在のリクエストを示します。Request[i][j] = k の場合、プロセス P iは、リソース タイプ R jのさらに k 個のインスタンスを要求しています。
- Work: 長さ m のベクトル。
- Finish: 長さ n のベクトル。
アルゴリズム:
- 初期化作業 := 利用可能。
- i = 1, 2, …, n の場合、Allocation i != 0 の場合、Finish[i] := false; それ以外の場合、Finish[i] := true。
- 次の両方を満たすインデックス i を見つけます。
- (a) Finish[i] = false
- (b) リクエストi <= 仕事
- そのような i が存在しない場合は、ステップ 4 に進みます。
- 仕事 := 仕事 + 割り当てi
- 終了[i] := true
- ステップ 2 に進みます
- Finish[i] = false の場合、一部の i について 1 <= i...n の場合、システムはデッドロック状態になります。さらに、Finish[i] = false の場合、プロセス P iはデッドロック状態になります。2 つのベクトル間の以下の関係 (<=) は次のように定義されます。X と Y を長さ n のベクトルとします。すべての i = 1, 2, ..., n に対して x[i] <= y[i] である場合に限り、X <= Y であると言います。Allocation および Request マトリックスの行はベクトルとして扱われ、アルゴリズムではAllocation iおよび Request iと呼ばれます。