13 デッドロック - 九州大学(kyushu...

27
13 デッドロック 1

Upload: others

Post on 19-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

13 デッドロック

1

Page 2: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックとは? 暗礁! にっちもさっちもいかなくなった状態

2

・・・

図8.1 川の横断

・・・

図8.2 川の横断中に発生するデッドロック状態

Page 3: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックの防止

何か約束事(プロトコル)を決めないといけない. (例) 河を渡っている人数を1人にする. ↓ 河を渡る時に,横断中の人数を知る.

決定すべき事項 横断中の検知機構 同時に2人が渡りたい場合は,どうするか? 1人の決定 優先度

飢餓状態(starvation)の回避

3

Page 4: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

システムモデル

資源の構成要素 資源の型

プロセッサ,メモリ,ファイル,入出力装置(プリンタ,CDなど)

実体 同一型内の数

– 例:プロセッサ3台,プリンタ2台,...

資源の使用順序 要求 使用 解放

資源の要求,解放はシステムコール ファイルのオープン,クローズ

4

Page 5: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックの性質

デッドロックであるための必要条件

以下の4つを全て満たしていると,システムはデッドロック状態になっている.

1)相互排除(mutual exclusion) 少なくとも1つの資源が非共有モードで確保されなけばならない.

一度に1つのプロセスのみが,その資源を使用できる.

2)確保と待機 以下の状態のプロセスが少なくとも1つは存在する.

– 少なくとも1つの資源を確保し,かつ他のプロセスが確保している資源を獲得しようとしている.

3)横取り不能 資源の横取りは不可能

4)循環待機 待機待資源が循環している.

{p0, p1, p2, …., pn}

Pi: プロセス

P0は,p1が確保している資源を待つ

注意:必要条件2)確保と待機は,必要条件4)循環待機に含まれる.

5

Page 6: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

資源割当てグラフ(1/2)

6

プロセスと資源からなる有向グラフ

図8.3 プロセスと資源からなる有向グラフ

p1 p2 p3

r1 r3

r2

r4

資源 プロセス

Page 7: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

資源割当てグラフ(2/2)

7

循環の存在は,デッドロックが生じているための必要条件 十分条件ではない.

p1 p2 p3

r1 r3

r2

r4

図8.4 デッドロックが存在する資源割当グラフ

r2

r1

p1

p2

p3

p4

図8.5 循環はあるが,デッドロックは存在しない資源割当グラフ

Page 8: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロック処理技法

デッドロックに対する対処

種類

1)デッドロックにならないことを保証する.

1-1)デッドロック防止

1-2)デッドロック回避

2)デッドロックからの回復

8

Page 9: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロック防止

必要条件の少なくとも1つが成立しないことを保証

1)相互排除

2)確保と待機

3)横取り不能

4)循環待機

不成立させることの可能性を考察

9

Page 10: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

1)相互排除について

すべての資源を非共有にできるか?(相互排除しないようにできるか?)

非共有:複数プロセスからの同時アクセスを許す.

(例)

読出し専用ファイル

非共有OK

読書きファイル

非共有できない!

全ての資源を非相互排除的アクセスにすることは不可能!

10

Page 11: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

2)確保と待機について(1/2) (確保と待機)必要条件を不成立にする方法

確保と待機が同時に生じないようにする.

1)待機が生じないようにする.

各プロセスが実行中に必要な資源を,実行前にあらかじめ全て確保しておくこと.

2)待機の時,確保していないようにする.

実行中に資源を要求するときは,確保している資源を解放した後で資源を要求する.

(例)

データのソーティング

1)カードリーダ → ディスクファイルへのコピー

2)ディスクファイル内のデータのソーティング

3)ソーティング結果をプリンタに出力

4)磁気テープにコピー

方法:1)待機が生じないようにする.

実行前に,ハードウェアローダ,ディスクファイル,プリンタ,磁気テープ装置を全て確保する.

方法:2)待機の時,確保していないようにする.

最初:カードリーダとディスクファイル,の確保

次: カードリーダ,ディスクファイル,を解放

ディスクファイル,プリンタ,の確保

最後:ディスクファイル,プリンタ,の解放

ディスクファイル,磁気テープ装置の確保

11

Page 12: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

2)確保と待機について(2/2)

欠点

方法:1)待機が生じないようにする.

資源の使用効率が低下する.

あまり使わないのに最初から確保

飢餓状態が発生する可能性大

全ての資源が最初に確保できないと実行できない.

方法:2)待機の時,確保していないようにする.

プロセスの実行が非効率

実行中,常時使用する資源でも,他の資源を要求する度に,

解放,確保しなければならない.

解放,確保はシステムコール

12

Page 13: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

3)横取り不能について

3)横取り不能,を生じさせないようにする.

資源の横取りを可能にする.

方法1: 確保できないときは,確保した資源も解放する.

要求した資源を確保できない時,今まで確保している

資源を解放して,他プロセスからの横取りを許す.

方法2: 確保できない時,(可能ならば)欲しい資源を無

理やり確保する.

可能ならば:

欲しい資源を他プロセス(プロセスP)が確保しているが,そ

のプロセスPが別の資源を確保できないため待機中になっ

ている場合,プロセスPが確保している資源(欲しい資源)を

横取りして確保する.

13

Page 14: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

4)循環待機について

循環待機にならないことを保証する.

資源を順序付けて管理する.

順序付け関数:F

F(カードリーダ)=1

F(ディスク装置)=5

F(テープ装置)=7

F(プリンタ)=12

方法: 資源 i を要求する時,

F(j)≧F(i) なる資源 j を解放した後,資源 i を要求する.

関数Fの決め方

通常の使用順序に従って決定

F(カードリーダ) < F(プリンタ)

14

Page 15: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックの回避

デッドロック防止の問題点

装置の使用率,スループット

低下!

デッドロックの回避

時々刻々変化する状態をみて,制御する.

15

Page 16: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックの回避:イメージ:例題(1/2)

プロセス(3つ):P0, P1,,P2

磁気テープ:12台

最大磁気テープ要求数

16

プロセス 最大要求数

P0 10台

P1 4台

P2 9台

プロセス 最大要求数 現在の割当数 不足数

P0 10 5 5

P1 4 2 2

P2 9 2 7

時刻T0の状態

3台空き

今後の割当をうまく制御すれば,デッドロックにはならない.

Page 17: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロックの回避:イメージ:例題(2/2)

17

プロセス 割当許可数 空き装置数

P1 2 1

P1 解放 5

P0 5 0

P0 解放 10

P2 7 3

OK!

P1, P0, P2の順に割当て要求を満たしてやる. 時刻T0の状態は安全な状態

割当制御方法

プロセス 最大要求数

P0 10台

P1 4台

P2 9台

Page 18: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

デッドロック回避の方法

18

負荷情報を利用して,いつも安全な状態になるように制御する. 負荷情報: 最大要求数

安全な状態とは?

安全な順序が存在する状態

安全な順序とは? プロセスの順序<P0,P1,…Pn>が次の条件を満たすとき,現在の状態に対して安全な順序である.

任意のi (0 ≦i ≦ n)に対して, Pi がまだ要求できる数 ≧ 空き数 + ∑ (Pj が確保している数)

割当方法

P0, P1, ..., Pn の順に割当要求を許可する.

Page 19: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

防止と回避の違い

19

防止: 強い安全策 必要条件を不成立にするよう制御

回避: 弱い制御

様子をみて制御

デッドロック 不安全

安全

図8.6 安全,不安全およびデッドロック状態空間

Page 20: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズム(banker’s algorithm)

20

デッドロック回避アルゴリズム プロセス数 =n 資源タイプ数 = m

データ構造 Availabe

利用可能数(空き数)を表すベクトル(長さ:m) Avalable[j] = k: 資源タイプ rj の利用可能数がk(k個空いている)

Max 各プロセスの最大要求数 Max[i, j ] = k : プロセスpi が資源タイプ rj に要求する最大数がk

Allocation 各プロセスに現在割り当てられている数 Allocation[i , j] = k : プロセス pi に資源タイプ rj がk個割当てられている.

Need 不足数 Need[i, j] = k : プロセス pi に資源タイプ rj がk個不足している.

Need[i, j] = Max[i, j] - Allocation[i, j]

Page 21: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズムー表記法ー

21

表記法 Need(i):

= ( Need[i, 0], Need[i, 1], ..., Need[i, m], )

Allocation(i)も同じ

X, Y :長さnのベクトル

X ≧ Y : すべてのi( 0≦i ≦n)に対して,X[i] ≧ Y[i] X > Y: X ≧ Y ,かつ X≠Y

Page 22: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズムーアルゴリズム概要ー

22

プロセスpiが資源タイプrjの割り当てを要求したとき,その割当を許可するか否か?

要求数: Request[i, j] 要求ベクトルをRequest(i)とする.

①Request(i) ≦ Need(i)ならば②へ. そうでない場合は,誤り(宣言した数以上の数を要求したから)

②Request(i) ≦ Available ならば③へ

そうでない場合は,pi を待たせる(許可しない) (資源が利用できないから

③次の状態に更新する.

Available := Available - Request(i) ; Allocation(i) := Allocation(i) + Request(i) ; Need(i) := Need(i) - Request(i) ;

割り当てた結果が安全な状態であれば,pi に資源を割り当てる. 〃 でなければ,pi を待たせて,状態(変数の値)を元に戻す.

Page 23: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

安全アルゴリズム ー安全な状態かどうかを判定するアルゴリズムー

23

①Work, Finish: それぞれ長さm,nのベクトル 初期化: Work := Available ; Finish[i] := false; 全てのi

②次を満たすi を(1つ)見つける.

a) Finish[i] := false,かつ b) Need(i) ≦ Work なければ,④へ.

③ Work := Work + Allocation(i) ; Finish[i] := true ; ②へ. (上記③が意味するもの:プロセスiに残りの要求数を割り当てることができたら,プロセスiは最大数を確保できるから,プロセスiは最後まで実行することができる.その後,いずれプロセスiは実行を終了し,確保した資源を解放して,workに戻すことになる.) ④全てのiに対してFinish[i] = true ならば,システムは安全な状態である.

Page 24: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズム:例題(1/3)

24

プロセス(5つ): p0, p1, …., p4 資源タイプ(3つ): A, B, C: A: 10個,B: 5個,C:7個

Allocation Max Available

プロセス ABC ABC ABC

P0 010 753 332

P1 200 322

P2 302 902

P3 211 222

p4 002 433

時刻T0の状態

行列Needの内容は, Max-Allocationで定義され,右の表のようになる.

Need

プロセス ABC

P0 743

P1 122

P2 600

P3 011

p4 431

Page 25: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズム:例題(2/3)

25

時刻T0での状態は,安全な状態である 安全な順序

<p1, p3, p4, p2, p0>.

Page 26: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

銀行家アルゴリズム:例題(3/3)

26

時刻T0後,プロセスp1がAを1個,Cを2個要求するとする.この要求を許可してよいか? 上記をチェックする. ①Request(i) ≦ Need(i)ならば②へ.

そうでない場合は,誤り(宣言した数以上の数を要求したから) (チェック):Request(1) = ( 1, 0, 2),Need(1) = ( 7, 4, 3)で,OKなので,②へ

②Request(i) ≦ Available ならば③へ そうでない場合は,pi を待たせる(許可しない) (資源が利用できないから) (チェック):Request(1) = ( 1, 0, 2),Available = ( 3, 3, 2)で,OKなので,③へ

③次の状態に更新する. Available := Available - Request(i) ; Allocation(i) := Allocation(i) + Request(i) ; Need(i) := Need(i) - Request(i) ;

Allocation Max Available

プロセス ABC ABC ABC

P0 010 743 230

P1 302 020

P2 302 600

P3 211 011

p4 002 431

更新した状態(右の状態)が安全な状態かどうかをチェックする.

安全アルゴリズムでチェックした結果,OK(安全な状態)(詳細は,省略)

Page 27: 13 デッドロック - 九州大学(KYUSHU UNIVERSITY)fukuda/HijyoukinH25/kitakyushu/...デッドロックの防止 何か約束事(プロトコル)を決めないといけない.

以上

27