18
1 Operating System 共有資源と資源管理 2017-09

Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

1

Operating System共有資源と資源管理

2017-09

Page 2: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

OSの役割(復習)p 資源の管理

n コンピュータの資源=リソース

p CPU,メモリ,ディスク,画面,etc…n コンピュータ資源の効率的利用を図る

p コンピュータシステムの制御n メモリやディスクをコントロールする

n 資源へのアクセス制御を行う

n コンピュータシステムの交通整理をする

p 仮想計算機の提供n ソフトウェアに分かりやすいハードウェアモデルを提供する

n ハードウェアや周辺機器の違いを吸収する

資源

ワープロ ゲーム

その他ソフトウェア

2

Page 3: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

3

共有資源

p 共有資源とはn 複数のプロセスが共有する資源

shared resource n 共有資源の例:入出力デバイス,CPU,共有メモリ領域

n 共有資源でない例:プロセスに個別に割り当てたメモリ領域

p 共有資源の「競合」n ほとんどの共有資源は,複数のプロセスから同時にアクセスされるとトラブルが起きる(可能性がある)

n 各プロセスが資源を独占するために他のプロセスを排除しようとすると,資源を奪い合う「競合」が起きる

n 競合を調整するのは,OSの役割(排他制御機能)

資源(リソース)

ワープロ ゲーム

その他ソフトウェア

Page 4: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

共有資源の問題

2017 H. SHIOZAWA http://vilab.org

4

プロセスA プロセスB

200

共有変数 x

a = x;

a = a + 100;

x = a;

b = x;

b = b - 20;

x = b;

200

200

180

300

クリティカルセクション

時刻 t1

時刻 t2

クリティカルセクション

Page 5: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

5

クリティカルセクション

p クリティカルセクションn 「臨界領域」「きわどい部分」 (critical=致命的)n プログラムの処理の中で,共有資源にアクセスする処理の部分

n 同じ共有資源に関するクリティカルセクションに,複数のプロセスが入ってしまうと,データや処理の一貫性が保てなくなってしまう

n 【注】 クリティカルセクションは,プログラムの中の部分(処理手順)のことで,何かの便利な機能の名前ではない

p たとえ話…n 漫画家のX氏とY氏は,2人共同で1つの漫画を描いている。n ある日,X氏が原稿(=共有資源)の1ページに誤りを見つけて書き直した(=クリティカルセクションに入った)。

n ところが,次の日に原稿を差し替えようとすると,Y氏も同じ箇所を書き換えていた(=クリティカルセクションに入っていた)ことが判明した。

Page 6: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

6

排他制御p 排他制御とは

n 共有資源の使用に不可欠なOSの機能n あるプロセスがクリティカルセクションに入っているとき,別のプロセスが新しく入ってこないように,“お互いに排除”するための機能

n クリティカルセクションの入口と出口で,資源の「獲得」と「解放」を行う

p 資源の「獲得」n クリティカルセクションに入るプロセスは,資源の「獲得」を試みる

n 資源を獲得できた場合は,そのままクリティカルセクションに入れる

n 資源が獲得できなかった場合は,獲得できるまでそこで待機する

p 資源の「解放」n クリティカルセクションを出るプロセスは,使った資源を「解放」する

Page 7: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

排他制御

2017 H. SHIOZAWA http://vilab.org

7

プロセスA プロセスB

200

共有変数 x

a = x;

a = a + 100;

x = a;

b = x;

b = b - 20;

x = b;

待機クリティカル

セクション

クリティカル

セクション300

獲得

獲得

獲得失敗

解放

解放

Page 8: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

8

排他制御の難しさ

p 排他制御の難しさn 資源の獲得と解放は,他の処理よりも優先されなければならない

n 使用されなくなった資源は,ただちに解放されなければならない

n 実行プロセスを切り替えても,破綻しないようにしなければならない

p 排他制御の対策n プロセスAが資源を使用中にプロセスBに実行が切り替わったら?⇒ 【対策】 プロセスBはその資源を獲得できないようにする

n プロセスAが資源を獲得したまま(エラー等で)実行を中止したら?⇒ 【対策】 プロセスAの資源はOSが強制的に解放する

n プロセスAが資源が空いているかチェックし,OKと判断した瞬間に,コンテクストスイッチが起きて,プロセスBに切り替わったら?⇒ 【対策】 そういうタイミングでのコンテクストスイッチは禁止する

Page 9: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

9

単純な排他制御

p スピンロック(繁忙待機)n も初期からある単純な方法

n 資源が空くまでひたすらループで待つ

n 資源が「使用中」(1)か「空き」(0)かを状態変数の値で管理する

n 資源の「獲得」は,変数に1にセットするn 資源の「解放」は,変数を0にクリアする

p スピンロックの特徴n OSに特別な機能が要らないn CPUには,変数のテストとセット(赤字部分)の途中で割り込み等が発生しない“アトミック”な操作命令(test-and-set)が必要

n 待ちが確実に瞬時に終わるようなケースでは,単純で効率的な方式(マルチプロセッサシステムで用いられる)

while (1) {if (状態変数 == 0) {状態変数 = 1;break;

}}

/* 資源を使用した処理 */

状態変数 = 0;

Page 10: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

10

OSによる排他制御p スピンロックの問題点

n 資源の空きをひたすらチェックし続けるので,時間と電力を浪費する

n その間,他のプロセスの実行時間を奪うことになり,効率が悪い

p ではどうすればいいのか…n OSが排他制御を管理する(APIを通した排他制御)n 資源が使えない時点で,OSがそのプロセスを“眠らせる”= プロセスの状態を「待ち状態」に遷移させる

n 資源が使えるようになったら,OSがプロセスを“目覚めさせる”= プロセスの状態を「実行可能状態」に遷移させる

p OSの排他制御機能n セマフォ,ミューテックス,モニタなど(次回説明)

Page 11: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

11

デッドロック

p デッドロックn 排他制御のせいで,プログラムやシステムが停止してしまう状態

n deadlock=「行き詰まり」,「膠着状態」

p なぜ起きるのか

n 複数のプロセスが,お互いの確保している資源が空くのを待ちあって,どちらも先に進めなくなくなってしまう

p どんな状態かn プロセスP1は資源R2を確保したまま資源R1が空くのを待ち,プロセスP2は資源R1を確保したまま資源R2を待つ

n このように,必ず“循環待ち”が含まれる

循環P1 P2

R1

R2

Page 12: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

12

考えてみよう…p ある日,A君とB君が電車のおもちゃで遊ぼうとしたのだが,おもちゃは1セットしかない・・・

p A君は列車を組み立ててからレールを組み立てようとして,まず,列車を「獲得」した。

p B君はレールを組み立ててから列車を組み立てようとして,まず,レールを「獲得」した。

p しばらくして,互いの持っているものを待って(または奪おうとして)遊びは中断した(けんかになった)。(デッドロック)

p どういう遊び方のルールを決めておけば、こういう問題が起きないか?(仲良く遊ぶという解決策以外で)

Page 13: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

13

資源割付けグラフ

p 資源割付けグラフ

n プロセスの資源要求状態を表す図(グラフ構造)

p デッドロックの検出n 資源割付グラフを簡約化する

R1

R2

R1

プロセス 資源(2個)

資源を要求している

プロセス 資源(2個)

資源が割り付けられているプロセスのすべての資源要求が満足されたら,矢印を削除していく

P4

P2

P3

P1

P1

P1

R1

Page 14: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

資源割付けグラフの簡約化

2017 H. SHIOZAWA http://vilab.org

14

R1

R2

P4

P2

P3

P1

R1

R2

P4

P2

P3

P1

R1

R2

P4

P2

P3

P1

P2,P4は順調に実行 P1, P3が資源を獲得 デッドロックなく終了

R1

P2

P4

P1

R3

P3R2

R1

P2

P4

P1

R3

P3R2

R1

P2

P4

P1

R3

P3R2

P3は順調に実行 R2をP1が獲得してしまうと デッドロック発生

Page 15: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

15

デッドロックの発生条件p 条件1 「相互排除条件」

n プロセスは,資源を利用するときに他のプロセスを排除する

p 条件2 「待ち条件」n プロセスは,さらに別の資源が空くのを待っている間,すでに自分に割り付けられた資源は保持し続ける

p 条件3 「横取り不可能条件」n プロセスが保持している資源は,利用が終わるまで取り上げられない

p 条件4 「循環待ち条件」n プロセスAが要求している資源をプロセスBが保持し,プロセスBが要求している資源をプロセスAが保持するような,循環待ちが存在する

p 以上の条件すべてが当てはまると,デッドロックが発生!

Page 16: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

16

デッドロックへの対策

p デッドロックの発生を防止するn デッドロックの発生条件が絶対に成り立たないようにする

n または,なるべく成り立たないように工夫する

p デッドロックを検出し回復する

n 資源割り付けグラフを一定時間ごとにチェックし,デッドロックを検出したら回復する,またはデッドロック発生前に戻ってやり直す

n ある時点まで戻ってやり直すことを,ロールバック(rollback)という

p 他の解決策…n 後は無視する!

n 個人ユーザ向けOSなら,デッドロックの発生確率を十分に下げれば,あとは無視してもあまり問題ない ⇒ もし発生したら,再起動…

Page 17: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

17

デッドロックの防止p 防止策1 「待ち条件の防止」

n 例) プロセスは,一連の処理に必要な全資源を一度に要求する

n つまり,ある資源を確保したまま他の資源を待たないようにする

p 防止策2 「横取り不可能条件の防止」n 例) プロセスが資源の獲得に失敗した場合は,保持している資源を全部手放す(いったん他のプロセスに譲る)

n つまり,資源を使い続けたくても,途中で使用を止めて解放する

p 防止策3 「循環待ち条件の防止」n 例) 資源に順番(番号)をつけ,確保するときはその順番を守る

p 以上は,デッドロックの発生条件2・3・4にそれぞれ対応し,どれか1つでも実現できればデッドロックを防止できる

Page 18: Operating System - viLabvilab.org/os2017/OS2017-09.pdf2017 H. SHIOZAWA OSの役割(復習) p資源の管理 n コンピュータの資源=リソース pCPU,メモリ,ディスク,画面,etc

2017 H. SHIOZAWA http://vilab.org

18

演習課題(後日提出)

p 課題 9a デッドロックの防止n 電車のおもちゃのたとえ話について,デッドロックの発生を防止するにはどうすればよいか。授業で説明した3つのデッドロックの防止策に対応した3つ(またはそれ以上)の遊びのルールを考えよ。

n 注:人間的な交渉による解決策(例:話し合って一緒に遊ぶ)はダメ。

【たとえ話】

n ある日,A君とB君が電車のおもちゃで遊ぼうとしたのだが,おもちゃは1セットしかない・・・

n A君は列車を組み立ててからレールを組み立てようとして,まず,列車を「獲得」した。

n B君はレールを組み立ててから列車を組み立てようとして,まず,レールを「獲得」した。

n しばらくして,互いに相手のものを待つことになり,遊びは中断した。