計算機システム概論 - 情報科学研究科 | NAIST

計算機システム概論・2回目
本日のトピック:プロセスについて
プロセスとは
プロセスのスケジューリングについて
多重プロセスの問題
排他制御
プロセス間通信
1
前回の復習:時分割処理
時分割処理(タイムシェアリング)
プロセッサが,複数のプログラムを少しずつ実行する
短い時間(タイムスライス)で,プログラムを切替える
遂次処理
時分割処理
時間経過
考え方次第では...
ユーザに仮想計算機を割り当て,
仮想計算機の動作を,少しずつ
シミュレートして進めていく
時間経過
実際の
計算機
仮想計算機
2
シミュレートとは
シミュレート = 模擬,真似
仮想計算機をシミュレートするとは...
計算機の中に別の仮想計算機(V)があると想定する
Vは独自のプログラムを持っている
Vがどのような振る舞いをするか,Vのプログラムに
従って(外部の計算機)が計算する
(必要であれば)ユーザとVと
の間で,入出力の中継を行う
V
3
仮想計算機とプロセス
仮想計算機が保持すべきもの
独自のプログラム
独自のメモリ状態
独自のレジスタ状態
独自の入出力管理状態
その仮想計算機の状態
その仮想計算機のユーザ名
他の仮想計算機との関係
:
プロセス=仮想計算機
(他の意味づけも可能)
実際の
計算機
仮想計算機
プロセス
4
プロセスを「見る」
身近なOSで,実際にプロセスを見てみる
Windows: タスクマネージャを起動
UNIX系OS: ps コマンドを利用
確認できること
多くのプロセスが同時並行的に実行されている
ユーザのプロセス以外に,システムのプロセスが存在
システムプロセスは,OSの機能をサポートするもの
5
プロセスの一生
プロセスは,動的に生成されたり消滅したりする
プロセスの典型的な一生:
1. ユーザまたはOSにより生成(起動)される
(正確には,ユーザやOSのプロセスにより生成...後述)
2.
必要な処理や計算を行う [活動中]
3.
自主的に終了する,
または外部から強制的に終了させられる
6
プロセスの状態
活動中のプロセスが取りうる状態は3種類ある:
実行中状態
プロセッサの時分割処理の順番がまわってきて,
処理が実際に進んでいる状態
実行待ち状態
プロセッサがまわってくるのを待っている状態
入出力待ち状態
入出力処理が終わるのを待っている状態
プロセスの状態は,OSによって変更される
7
プロセスの状態遷移
実行待ち状態
プロセス生成
強制終了
順番がまわってくる
タイムスライス終了
実行中状態
入出力処理完了
プロセス終了
入出力処理開始
入出力待ち状態
強制終了
8
プロセススケジューラ
システムには,一般に複数のプロセスが存在する
プロセスの交通整理が必要
プロセススケジューラ:
プロセスの状態を制御するための,OSの「部品」
どのプロセスを,どの状態にするか管理する
別のプロセスに切り替えるときに,プロセスを
実行する環境のセットアップを行う
現在実行中プロセスの状態を退避
新しく実行されるプロセスの状態を復帰
9
プロセススケジューラの動作概念図
スケジューラにより,プロセス状態が同期的に変更される
実行中状態にあるプロセスは一個だけ
(プロセッサが複数あるシステムは除く)
スケジューラの動作
P1
P2
P3
P4
P5
時間経過
入出力処理中
入出力処理中
実行中
実行待ち
入出力待ち
10
プロセススケジューラの仕組み
交通整理のために,スケジューラはプロセスを分類管理
実行中プロセス
実行待ちプロセス
入出力待ちプロセス
P1
a
c
P2 P3 P7
P4 P5 P6 P8
b
プロセススケジューラの行う操作:
a. 実行中プロセスを入出力待ちプロセスに(sleep)
b. 入出力待ちプロセスを実行待ちプロセスに(wakeup)
c. 実行中プロセスを切り替え (switch)
11
プロセススケジューラの動作イメージ
プロセススケジューラは...
常にプロセスを監視しているわけではない
普段は眠っていて,何かのキッカケで起きて来て操作を行う
タイマー
キッカケ = 割り込み
割り込みも何種類かある
プロセス
スケジューラ
外部装置
プロセス
12
割り込み1:API呼び出し
入出力処理依頼
プロセスは,入出力装置に直接アクセスできない
API (Application Program Interface)を介し,OS に処理を依頼
⇒ 仕事を依頼したら,自分は「スリープ」状態に入る
...正確には,プロセススケジューラが,プロセスを「眠らせる」
プロセスA
OSの入出力処理部
プロセスB
API
入出力開始
呼出元sleep
switch
実行中
実行待ち
入出力待ち
13
割り込み2:入出力完了
入出力完了
「Aさんに頼まれた仕事,終わったよ」
⇒ プロセス A を「起こし」,順番待ち行列に並ばせる
プロセスA プロセスB
入出力
完了
OSの割込み処理部
2
制御横取り
3
wakeup
4
制御返却
割
込
1
実行中
実行待ち
入出力待ち
14
割り込み3:タイマー
タイマ割込み処理からの呼び出し
タイマ...タイムスライスの終了を知らせる
プロセスA プロセスB
タイマ
OSの割込み処理部
2
制御横取り
3
switch
割
込
1
実行中
実行待ち
15
プロセススケジュールの戦略
プロセススケジューラの仕事:
プロセスや入出力の進行にあわせ,交通整理をすること
プロセスの切り替え(switch)を行うとき,
どの実行待ちプロセスを処理するか決定すること
...いくつかの戦略が知られている
スケジュール戦略を変えると,システムの振舞いが変わる
16
スケジューリングの性能指標(1)
スケジュール戦略を考えるときに考慮すべき要素:
CPU利用率
スループット:単位時間あたりの仕事量
ターンアラウンド時間:
プロセスを起動してから完了するまでの時間
プロセス起動
プロセス終了
時間
ターンアラウンド時間
17
スケジューリングの性能指標(2)
スケジュール戦略を考えるときに考慮すべき要素:
待ち時間:
プロセスが,実行待ち状態で過ごす時間の合計
応答時間:
最初の処理が行われるまでの時間
プロセス起動
プロセス終了
時間
待待 待待待 待待 待待待
応答時間
待ち時間
平均値,最大値,最小値のどれに着目するかも重要
18
スケジュール戦略:単純な方式
横取りのない戦略(non-preemptive, 時分割処理は不要)
先着順
大きなプロセスの後ろは,長時間待たされる
早く終わりそうなものを先に済ます
実行時間をあらかじめ見積もるのは難しい
優先度順
優先度の決め方が問題
優先度の低いプロセスが,なかなか終わらない
⇒エージングによる優先度の調整:
長時間待っているプロセスの優先度を上げる
19
スケジュール戦略:やや複雑な方式
横取りのある戦略(preemptive, 時分割処理が必要)
「タイムスライスをどのように割り当てるか」
ラウンドロビン
実行待ちプロセスに公平に割り当てる
AB CAB CAB CAB C
優先度順+ラウンドロビン
優先度の高いプロセスは,割当の頻度を上げる
ABACABACABAC
...プロセスAの優先度が高い場合
20
スケジュール戦略:さらに複雑な方式
横取りのある戦略(preemptive, 時分割処理が必要)
多段フィードバック方式
プロセスを優先度ごとにまとめる
同じ優先度の中ではラウンドロビン
一定時間内に実行が終わらなければ,
プロセスの優先度が下げられる
優先度
高
A
B
C
A
B
低
D
E
F
C
D
E
F
21
多重プロセスの問題
ここまでの話:
個々のプロセスは,互いに独立している...という立場
ここからの話:
複数のプロセスが存在する場合特有の問題
(多重プロセスの問題)
プロセスの生成について
プロセスが互いに邪魔をしないための仕組み
プロセスが互いに協力するための仕組み
22
プロセスの生成
プロセスは誰が作るのか...
基本的には,プロセスが新しいプロセスを作る
プロセス1 ...プロセス3の親プロセス
プロセス2
プロセス4
プロセス3 ...プロセス1の子プロセス
プロセス5
プロセス6
23
プロセスの構成例
RedHat Linux:
ps – eo “%p %c %P” で表示された情報の一部を抜粋して図示
0: init
2: keventd
3: ksoftirqd
4: kswapd
5: bdflush
6: kupdated
7: jfsIO
722: syslogd
747: portmap
775: rpc.statd
870: rpciod
871: lockd
31840: in.telnetd
1031: xinetd
1086: lpd
1320: smbd
30676: smbd
1325: nmbd
1388: gdm
1396: gdm
1397: X
18169: tcsh
32097: ps
ユーザのプロセス
24
UNIXにおけるプロセスの生成
forkシステムコールによるプロセス複製
execシステムコールによるプログラム切り替え
:
child = fork();
if (child == 0) exec(子プロセス);
親プロセスの処理
:
fork
親
複製
子
親プロセス
fork
fork
親
子
子プロセス
25
排他制御
複数のプロセスに共用される資源:
複数プロセスにより同時に参照される可能性がある
例:「整数値が書かれたファイルを参照し,値を1増やす」
3
P1
3
P1
4
5
期待する動作
P2
4
P2
4
少しタイミングがずれた場合
読んでから書くまで,他のプロセスにファイルを参照させない
ようにプロセスを制御する必要がある ... 排他制御
26
クリティカルセクション
クリティカルセクション(CS):
他のプロセスとは,排他的に実行しなければならない部分
排他制御を適切に実行するためには...
CSの最初と最後で,他プロセスに “stop”, “go”をかける
CSに入るときは,“go” が出るまで待機する
プロセス1
CS
プロセス2
待機
CS
27
排他制御を実現する仕組み
排他制御のため,stop, go をかける必要がある
stop, go をかける操作も,排他的に実行の必要あり
OSが stop, go の操作を提供することで,ジレンマを解決
stop, go 操作の実現方法:何通りか知られている
lock, unlock
セマフォ
モニタ
28
デッドロック
同時に複数のstop, go が必要になる場合も
プロセス1
ファイルAをオープン
ファイルBをオープン×
A
B
プロセス2
ファイルBをオープン
×ファイルAをオープン
ファイルAをクローズ
ファイルBをクローズ
ファイルBをクローズ
ファイルAをクローズ
どちらのプロセスも永久に進めない ⇒ デッドロック状態
stopのかけ方に順番を定める等,運用で回避する必要アリ
29
プロセス間の協調機構
排他制御と同じ仕組みを利用する方式:
排他制御:CSか否かの1ビットを他プロセスに伝える
基本的に同じ仕組みで,より大きな情報を伝達可能
ソケット:
プロセスとプロセスをつなぐ「仮想通信路」
パイプ:
ソケットの特殊な用法
UNIXで頻繁に利用される
30
本日のまとめ
プロセスとは
OSにおけるプロセスの取り扱い
プロセススケジューラについて
排他制御と協調機構
次回の講義...入出力機構について
課題(結果の提出不要):
自分が普段使っているコンピュータで,どのような
プロセスが走っているか確認せよ
31