• 検索結果がありません。

と辺の集合 E

ドキュメント内 オペレーティングシステム (ページ 34-54)

リソース割り当てグラフ

• プロセス

• 4 つのインスタンスをもつリソース

P i R j を要求

P iR j を保持している

P

i

Rj

P

i

リソース割り当てグラフの例

デッドロック状態

循環グラフになっているが

デッドロック状態ではない場合

基本性質

• グラフに閉路あり

– デッドロックなし

• グラフに閉路あり

– リソースの種類一つにつき、それらのインスタンスはただ一 つの場合、デッドロック

– リソースの種類一つにつき、それらのインスタンスは複数あ る場合、デッドロックの可能性あり

.

デッドロック問題に対する手法

• デッドロック予防 (Deadlock Prevention)

– デッドロック状態にならないように共有資源の使い方を決定

• デッドロック回避 (Deadlock Avoidance)

– デッドロック状態になると検知したらそれを回避

• 多くのシステムではデッドロック回避手法は実装されていない

• OS 自身はデッドロックが生じないように注意深く設計

• プログラムがデッドロックするかどうかをソースプログラム

(あるいは仕様)からあらかじめ検査する研究

– モデル検査

Deadlock Prevention

Mutual Exclusion

資源によっては、

Mutual Exclusion

を回避することは不可能

Hold and Wait

この状態を作らないようにするには、プロセスが資源を要求する時は、

そのプロセスは他の資源を占有しない

方法1

実行前に使用する資源全てを占有

方法2

プロセスが資源を要求する時は、そのプロセスは何も資源を占有していな いときに限定

– 問題点

リソースが利用性が低下

飢餓状態になる可能性

4つの状態が同時に生じないようにプログラミング

Deadlock Prevention (Cont.)

No Preemption

– いくつかの資源を占有しているプロセスが、ある資源を占有 しようとして失敗したら、占有していた資源を解放

– 開放された資源は、このプロセスの資源リストに追加

– このプロセスは必要とする資源が開放されたら、再度資源の 占有を実行

Circular Wait

– 全ての資源の total ordering を決め、その順番に資源を占有

Circular Wait != 十分条件

• 循環待ち → デッドロック発生

R1 が2個の資源を持つ場合

P3

が終われば

P1

が動作

...

プロセスP2 プロセスP1 プロセスP3 資源R1 資源R2

デッドロックの回避

• それぞれのプロセスが必要なリソースの最大値をあらかじ め宣言(単純かつ最も有用)

• Circular-wait 状態をさけるため、リソースの確保状況を動的

に検査

リソースの確保状況とは、利用可能な数とすでに確保されている数、

プロセスからの要求の最大値によって定義

システムは、いくつかのアプリオリな情報を利用可能であるこ とが必要

ここでは、詳細な話はしない

デッドロックの回避

• スケジューリングによってデッドロックを回避

• 銀行家のアルゴリズム

デッドロックを起こさない資源のプロセスへの割付け順を決定

(銀行家が資源の貸し出しを制御)

プロ セス

保持している 資源数 U

必要な資源 の最大数 N

A B A B

P1 2 0 3 2

P2 0 1 2 1

ある時点の実行状態

必要な資源の最大数-保持している資源数

=残りの必要な資源数

R

例:資源

A

は5個,資源Bは2個存在 現在の空き資源数

F=(2 0)

残りの必要な資源数

R=((1 2) (2 0) (1 1))

デッドロックの回避

• 例:資源 A は5個,資源Bは2個存在

現在の空き資源数

F=(2 0)

残りの必要な資源数

R=((1 2) (2 0) (1 1))

★ 初期値:W=(2 0), S=(偽 偽 偽)

1. WとRから要求を満足できるプロセスを探索

P2のみ

2. WとSを更新しP2実行後の状態を計算

W=W+(0 1)=(2 0)+(0 1)=(2 1)

S=(偽 真 偽)

3.

1へ.ただし,P2を除く

プロ セス

保持している 資源数 U

必要な資源 の最大数 N

A B A B

P1 2 0 3 2

P2 0 1 2 1

F =

デッドロックの回避

• 例:資源 A は5個,資源Bは2個存在

現在の空き資源数

F=(2 0)

残りの必要な資源数

R=((1 2) (2 0) (1 1))

W=(2 1), S=(偽 偽)

1. WとRから要求を満足できるプロセスを探索

P3のみ

2. WとSを更新

W=W+(1 1)=(2 1)+(1 1)=(3 2)

S=(偽 真 真)

3. 1へ.ただし,P2,P3を除く

P1にも割付可能

プロ セス

保持している 資源数 U

必要な資源 の最大数 N

A B A B

P1 2 0 3 2

P2 0 1 2 1

P3 1 1 2 2

デッドロックを回避する割り当て

• 通常はプロセスが実行に合わせて資源要求を出してくる

それを受け入れて良いかどうかの判断が必要

資源を与えてなお、デッドロック回避が可能(=安全)な実行順があるか?

• 手順

要求が残り必要な資源数

R

を超えていないことを確認

要求が利用可能な資源数

F

を超えていたら、そのプロセスは待ち

そうでなければ次ステップの確認

要求を割り当てた後の残り必要資源

R

を計算

利用可能資源

F

から、要求の分を引いて

W

を初期化

デッドロック回避が可能な実行順があるか調査

なければ、そのプロセスは待ちにして残り必要資源

R

の状態を元に戻す

デッドロックを回避する割り当て

保持している 資源数 U

必要な最大 資源数 N

残り必要 資源数 R

A B A B A B

P1 2 0 3 2 1 2

P2 0 1 2 1 2 0

P3 1 1 2 2 1 1

総資源数:

A 5

個、

B 2

資源要求列

P3: A 1

P2: A 1

P1: A 1

P1: B 1

P3: B 1

P2: A 1

P1: B 1

個 残り資源:

A

個、

B

2 0

ここでは、必要最大資源数が割 り当てられたらすぐにプロセス

1

2

1 0

2 1

1 0

P2 終了

3

5

P3 終了

6

7

2 1 0

4

0

2

デッドロック検出と回復

• 検出

システムがデッドロ ック状態か?

• 資源割付グラフ

要求

(P → R) –

割付

(R → P)

• 左図の一番下は デッドロック

P1 R1 R2 P2

P3 R3 P4

P5

R4

P6

R5

P1 R1 P2

P4 R2 P3

デッドロックの検出

• グラフの簡約

あるプロセスの資源要求が 満足されるとき,グラフは 当該プロセスにより簡約可 能という

矢印を削除可能

• それでも循環待ちが残れば

デッドロック状態

デッドロックからの回復

• デッドロックを検出

– 循環待ちを解除しデッドロックから回復 – 具体的手法は以下のどちらか

1. デッドロック状態のプロセスを1つ異常終了

➡リスクはあるが最悪の事態は回避

2. デッドロック状態のプロセスを1つ前の状態に戻し (rollback), やり直し

➡プログラムの実行状態を時々保存

(チェックポインティング)

演習問題 3.10 銀行家のアルゴリズム

• 資源A: 10 個, B : 5 個, C : 7 個

プロセス 保持している資源数 必要な資源の最大数

A B C A B C

P1 0 1 0 7 5 3

P2 2 0 0 3 2 2

P3 3 0 2 9 0 2

P4 2 1 1 2 2 2

ある実行時点の状態

ドキュメント内 オペレーティングシステム (ページ 34-54)

関連したドキュメント