プロセスの状態・制御・スケジューリング

プロセスの
状態・制御・スケジューリング
オペレーティングシステム
第7回
並 行 処 理(1)

割込みが頻繁に起きる

割込み処理が迅速に行われる

割り込まれたプロセスと
割込み処理のプロセスが
同時に実行されているようにみえる
並 行 処 理(2)



TSSはタイマ割込みにより,複数のプロセスを同
時に実行する
物理CPUがひとつでも,複数の擬似CPUで複数
のプロセスを(見かけ上)同時に実行することが
できる
並行処理
CPUがひとつだけなら,
ある時点では
ひとつのプロセスしか
実行されていない
並行処理と並列処理



物理的CPUが複数あると,“本当”に複数のプロ
セスが同時に処理される
並列処理
最近は,マルチコアが普通になった(?)ので,当
たり前のことになった(?)
プ ロ セ ス の 状 態(1)




プロセスは3つの状態を遷移する
実行中(状態)(running)
 物理CPUが割り当てられていて,実際に処理
が進んでいる
実行可能状態(ready)
 物理CPUが割り当てられるのを待っている
待ち状態(wait)
 何らかの事象が起きるのを待っている
プ ロ セ ス の 状 態(2)
プロセス消滅
プロセス生成

矢印の方向にだけ遷移する
プ ロ セ ス の 状 態(3)

状態遷移のきっかけの例
① 実行中→実行可能状態

タイムスライス分の割当て時間経過

このようなプロセスは,CPUが割り当てられ
れば,直ちに実行中になる
② 実行可能状態→実行中

CPUが割り当てられる
プ ロ セ ス の 状 態(4)
③ 実行中→待ち状態

データ入力が必要になった(事象待ち)

このようなプロセスは,CPUが割り当てられ
ても,実行中になれない

CPUの割り当て対象としない
④ 待ち状態→実行可能状態

必要なデータ入力が終了(事象発生)
プ ロ セ ス の 状 態(5)
プロセス消滅
プロセス生成
赤矢印の遷移が
ない理由

矢印の方向にだけ遷移する
プロセスの実行制御
ク リ テ ィ カ ル レ ー ス(1)



並行処理されている複数のプロセス
同じデータを同時に読み書き
 読むだけなら問題ない
タイミングにより誤った結果
ク リ テ ィ カ ル レ ー ス(2)


銀行口座の残高更新
① 残高読み出し
② 残高再計算
③ 計算結果の書き込み
入金と引出しが同時に行われたら?
ク リ テ ィ カ ル レ ー ス(3)
① 50,000
③ 60,000
⑤と⑥を実行する
タイミングにより
結果が変わる!
② 50,000
④ 35,000
60,000円
35.000円
⑤ 60,000
⑥ 35,000
⑤と⑥が逆になると,
60,000が残高!
これが残高!
クリティカルセクション


際どい部分(critical section)
 あるプロセス中で,他のプロセスと同時に実行
すると問題が起こりうる部分
クリティカルセクションを実行するプロセスをひと
つにする
 排他制御
同期基本命令

プロセスの制御を行う

いろいろある

代表例 セマフォ(semaphore)
セ マ フ ォ(1)


Dijkstra,E.W. が提案
腕木信号とか手旗信号(旧交通博物館)
セ マ フ ォ(2)


排他的に実行されるふたつの命令
 P 命令と V命令
その引数である変数(セマフォ変数)
セ マ フ ォ(3)



命令P(sem)
セマフォsemの値を1減らす
結果のsemの値
 正または0 → Pを呼び出したプロセスの実行
は続く
 負 → Pを呼び出したプロセスは待ち状態にな
る
セ マ フ ォ(4)




semを1増やした結果が
負または0ということは
増やす前は負ということ!
semを負にしたプロセスが
命令V(sem)
あるはず!
semの値を1増やす
それは待ち状態
Vを呼び出したプロセスの実行は続く
semの値が負または0
P(sem)で待ち状態になったプロセスが
あるはずなので,そのひとつを実行
可能状態にする
セ マ フ ォ(5)
入金処理が先
このP命令でsが 0
入金処理は先に進む
出金処理が後
sは-1となり,
待ち状態となる
出金処理が
実行可能状態
残高60,000円
このV命令でsが 0
入金処理終了
セ マ フ ォ(6)

セマフォの初期値の値の数だけのプロセスが命
令Pを通過できる
スケジューリング
どのプロセスにCPUを割り当てるか!
プロセスの特性



もっぱら計算中心のもの
 CPUを長時間使う
入出力中心のもの
 CPUの比重は低い
うまく割り当てると効率が良くなる
スケジューリング方法(1)
① 到着順

実行可能状態になったプロセスから順に

計算中心のプロセスが実行状態になると,
他のプロセスはなかなか実行状態にならな
い
スケジューリング方法(2)
② 優先度順

プロセスに優先度を付ける

優先度の高いものから実行

実行中のプロセスより優先度の高いプロセ
スが実行可能状態になったとき,どうするか
により,二つに分けられる(次のスライド)
スケジューリング方法(3)


優先度の高いプロセスに切り替える
 プリエンプティブスケジューリング(preemptive
scheduling 横取りスケジューリング)
優先度の低い実行中のプロセスを継続
 ノン プリエンプティブスケジューリング
(nonpreemptive scheduling)
スケジューリング方法(4)
③ ラウンドロビン

順番にタイムスライス分の時間だけ実行す
る

例 プロセスA,B,C

A→B→C→A→…

ただし,タイムスライス分経過する前に,“待
ち状態”になると,次のプロセスが“実行中”
になる
スケジューリング方法(5)

ラウンドロビンの例
 プロセスが三つ A,B,C
 タイムスライス 10ミリ秒
Aが実行中
 A → B → C → A → … の順序
10ミリ秒
10ミリ秒経過すると,
Bが実行中になる
BとCは実行
可能状態
スケジューリング方法(6)

ラウンドロビンの例(続)
 ただし,各プロセス共に途中でデータの入出
力のために待ち状態になる
Bが実行中になって
5ミリ秒後に
待ち状態になる
Cが実行中になる
このあたりで,待ち状態から
実行可能状態になっても,
次にBが実行中になるのは…
スケジューリング方法(7)

実際にはもっと複雑

いくつかのスケジューリング方法を組み合わせる


ラウンドロビン+優先度順
 優先度ごとに並べて,優先度の高いプロセス
のタイムスライスを長くする
“優先度の高いプロセスを先に片づける”という
考え方
スケジューリング方法(8)

“ラウンドロビン+優先度順”の例(1)





プロセス A1,A2 (優先度は同じ)
プロセス B1,B2 (優先度は同じ)
A1,A2 の優先度 > B1,B2 の優先度
A1 → A2 → A1 → … (*)
A1,A2 が待ち状態の時に
B1 → B2 → B1 → …
ただし,A1,A2が実行可能状態になったら,(*)に戻
る
スケジューリング方法(9)

“ラウンドロビン+優先度順”の例(2)
 プロセスと優先度
A>B>C
 その1
タイムスライス A を15ミリ秒,B を10ミリ秒,C
を5ミリ秒
 その2
タイムスライスは同じ
A → B → A → B → A → C を繰り返す
スケジューリング方法(10)


優先度順の優先度が変化
一定時間,実行中(実行中になった回数でも同じ
)だと優先度を下げる
 優先度が上の実行可能状態のプロセスがあ
れば,そちらを実行
 “時間のかかるプロセスは後回し”という考え
方
補足

スケジューリング
 説明したものは,CPUの割り当て
 プロセススケジューリング


入出力スケジューリング
入出力装置の割り当て
ま と め(1)

プロセスの状態
 実行中(状態)
 実行可能状態
 待ち状態
ま と め(2)
プロセス消滅
プロセス生成

矢印の方向にだけ遷移する
ま と め(3)

平行処理されている複数のプロセス

同じデータを同時に読み書き

タイミングによる問題を起こす

クリティカルレース
 排他制御
ま と め(4)

スケジューリング
 到着順
 優先度順
 ラウンドロビン
 …