多重プログラミングの概念
CPUを無駄なく使いたい
開始 遊休状態:
入力
ジョブA
遊休状態:
入力
開始 遊休状態:
入力
ジョブB
遊休状態:
入力
図4.1 二つの上部A,Bの実行
停止
停止
2
図4.2 多重プログラミング機構のない場合のジョブ実行
開始 遊休状態:
入力
ジョブA
遊休状態:
入力 停止
開始 遊休状態:
入力
ジョブB
遊休状態:
入力 停止
待 ち
多重プログラミングの概念
開始 遊休状態:
入力
ジョブA
遊休状態:
入力 停止
開始 遊休状態:
入力
ジョブB
遊休状態:
入力 停止
プロセスの状態
活動中
新規
待機中
停止
図4.6 プロセス状態遷移図
実行中
新規
待機中
実行待ち 停止
プロセス制御ブロック(PCB: Process Control Block)
プロセスに関する情報を格納しておく器
必要な情報(詳細はOS,ハードウェアによって異なる)
プロセスの状態
新規,実行待ち,実行中,...
プログラムカウンタ
レジスタの内容
レジスタの種類はプロセッサによって異なる.
メモリ管理情報
上限/下限レジスタ,ページ表(ページングシステ
ム),..
課金情報
CPU使用時間,実使用時間,課金番号,ジョブ番号,..
入出力情報
未完了の入出力要求,割当てられている入出力装置,
オープンされているファイル,..
CPUスケジューリング情報
プロセスの優先度,レディキューへのポインタ,...
プログラムカウンタ
レジスタ類
開かれたファイルのリスト
記憶範囲
プロセス番号
プロセス
状態
ポインタ
・
・
・
図4.8 プロセス制御ブロック
6
コンテキストスイッチ:プログラムの切り替え
レジスタ退避
・
・
・
レジスタ復元
レジスタ退避
・
・
・
レジスタ復元
利用者プログラムA
オペレーティングシステム
利用者プログラムB
割込みまたはスーパバイザコール
割込みまたはスーパバイザコール
実行状態
実行状態
実行状態
遊休状態
遊休
状態
遊休
状態
図4.9 利用者間でのCPUの切り替え 8
スケジューリングのためのキュー(1/2)
レディキュー(Ready queue,実行待ち列)
実行可能状態のプロセスをつないでおくキュー
デバイスのためのキュー(デバイスキュー,装置待
ち列)
装置が空くのを待っているプロセスのキュー
図4.10 実行待ち列と種々の入出力装置待ち列(図:準備中
)
スケジューリングのためのキュー(2/2)
図4.12 単純化した待ち列図式(図:準備中)
図4.11 CPUスケジューリングの待ち列図式表現(図:準備中)
スケジューリングアルゴリズム
評価基準: 何を目標にするか?
CPU使用率
スループット(throughput)
単位時間当りに完了したジョブ数
ターンアラウンド時間(turnaround time)
ジョブ投入からジョブ完了までにかかった時間
待ち時間(waiting time)
レディキューにいる時間
応答時間(response time)
会話型システム:コマンド投入からプロンプトが帰ってくるまでの時間
理想
CPU使用率,スループット → 最大
ターンアラウンド時間,待ち時間,応答時間 → 最小
先着順サービス方式(FCFS, First-Come-First-Served)
ジョブ バースト時間
1 24
2 3
3 3
到着した順番に実行する.
例
ジョブ2
ジョブ1 ジョブ3
0 24 27 30
ガント図
時刻0でほとんど同時にジョブ1,2,3が到着したが,
ジョブ1,ジョブ2,ジョブ3の順で到着した場合:
ジョブ2 ジョブ3 ジョブ1
0 3 6 30
時刻0でほとんど同時にジョブ1,2,3が到着したが,
ジョブ2,ジョブ3,ジョブ1の順で到着した場合:
平均ターンアラウンド時間=(24+27+30)/3 =
27
平均ターンアラウンド時間=(30+3+6)/3 =
13
ガント図
16
最短ジョブ優先方式
ジョブ バースト時間
1 6
2 3
3 8
4 7
実行時間の短い順に実行する.
理論的に最小の待ち時間を与える.
仮定:横取りがない.
例
ガント図
時刻0でほとんど同時にジョブ1,2,3,4が到着した場合.
ジョブ2 ジョブ1 ジョブ3
0 3 9 16 24
ジョブ4
横取りのある最短ジョブ優先方式
ジョブ 到着時刻 バースト時間
1 0 8
2 1 4
3 2 9
4 3 5
最小残り時間優先方式(Shortest-Remaining-Time-First)とも言う.
例
ガント図
ジョブ2 ジョブ1 ジョブ3
0 1 5 26
平均ターンアラウンド時間
=((17-0)+(5-1)+(26-2)+(10-3))/4
= 13
10
ジョブ4
17
横取り
ジョブ1
横取りのない最短ジョブ優先方式の場合:
平均ターンアラウンド時間 = 57/4 = 14.25
20
ラウンドロビン(Round-Robin,巡回スケジューリング)(1/3)
ジョブ バースト時間
1 24
2 3
3 3
一定時間CPUを割り当てる.
一定時間: タイムスライス(time-slice,
量子時間)
終了しなければ,次に回す(レディキューの最
後尾につなぐ)
例
ジョブ2
ジョブ1 ジョブ3
0 26 30
ガント図
平均ターンアラウンド時間=47/3 = 16
22
10 14
4 7 18
ジョブ1 ジョブ1
ジョブ1 ジョブ1 ジョブ1
下記は,タイムスライス=4の場合のガント図
仮定:時刻0で,ジョブ1,2,3の順で到着
タイムスライスについて
タイムスライス → ∞ : FCFS(先着順サービス)
ラウンドロビン(Round-Robin,巡回スケジューリング)(2/3)
ジョブ バースト時間
1 13
2 6
3 11
例の追加(右表) 例
ジョブ2
ジョブ1 ジョブ3
0 26 30
ガント図
平均ターンアラウンド時間=(30+18+29)/3 = 77/3
22
12 16
4 8 18
ジョブ3
ジョブ1
2 ジョブ1 ジョブ3
下記は,タイムスライス=4の場合のガント図
仮定:時刻0で,ジョブ1,2,3の順で到着
29
1
22
ラウンドロビン(Round-Robin,巡回スケジューリング)(3/3)
■タイムスライスの終了時の処理
プロセスの入れ替え: コンテキストスイッチング(Context switching)
コンテキストの入れ替え
古い(今実行していた)プロセスのレジスタ内容を退避
新しいプロセスのレジスタ内容をレジスタにロード
オーバヘッドが生じる
タイムスライスを短くするとコンテキストのオーバヘッドが大
図4.16 状態切換えを増加させるより小さな量子時間(タイムスライス)値(図:準備中
)
多重レベル待ち列
タイプの異なるジョブ
フォアグランドジョブ(foreground,会話的ジョブ等)
バックグランドジョブ(background,バッチ等)
キュー毎に異なるスケジューリングアルゴリズム
CPUの割当方法:優先度,時間配分
システムタスク
会話型
編集
バッチ
学生バッチ
最高優先度
最高優先度
図4.18 多重待ち列スケジューリング方式 24
多重レベルフィードバック列
キュー間の移動を許す.
自由度の高いスケジューリング
パラメータ
キューの数
各キューのスケジューリングアルゴリズム
移動の決定方策
最初に入れるキューの決定方法
パラメータの決定が困難
キュー2
キュー1
キュー0
タイムスライス=16
タイムスライス=8