プロセス制御 - SEGAWA`s Web Site

プロセスの
状態・制御・スケジューリング
オペレーティングシステム
第7回
並 行 処 理(1)

割込みが頻繁に起きる

割込み処理が迅速に行われる

割り込まれたプログラムと
割込み処理プログラムが
同時に実行されているようにみえる
並 行 処 理(2)



TSSはタイマー割込みにより,複数の利用者のプ
ログラムを同時に実行する
物理的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の値
 負でない → 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ー1)
② 優先度順

プロセスに優先度を付ける

優先度の高いものから実行

実行中のプロセスより優先度の高いプロセ
スが実行可能状態になったとき,どうする?
スケジューリング方法(2ー2)


優先度の高いプロセスに切り替える
 プリエンプティブスケジューリング(preemptive
scheduling 横取りスケジューリング)
優先度の低い実行中のプロセスを継続
 ノン プリエンプティブスケジューリング
(nonpreemptive scheduling)
スケジューリング方法(3)
③ ラウンドロビン

順番にタイムスライス分の時間だけ実行す
る

プロセスA,B,C

A→B→C→A→…
スケジューリング方法(4)

いくつかのスケジューリング方法の組合せ
 ラウンドロビン+優先度順

他の点を考慮したスケジューリング

実際にはもっと複雑