CPUスケジューリングの計算ツール
OSが、実行を待っている複数のプロセスにCPUをどの順番で割り当てるかを決めるCPUスケジューリングの動きを、ガントチャートで表示します。到着順・処理時間順・残り処理時間順・ラウンドロビン・優先度順を切り替えて、平均の待ち時間やターンアラウンド時間がどう変わるかを比べられます。
結果
- 平均ターンアラウンド時間
- –
- 平均待ち時間
- –
- 平均応答時間
- –
- すべて終わる時刻
- –
方式ごとの比較
ターンアラウンド時間 = 終了時刻 − 到着時刻、待ち時間 = ターンアラウンド時間 − 実行時間、応答時間 = 初めてCPUを割り当てられた時刻 − 到着時刻です。条件が同じプロセスは、到着の早い順、それも同じなら表の上の順に選びます。ラウンドロビンでは、時間切れになったプロセスを、同じ時刻に到着したプロセスの後ろに並べます。切り替えにかかる時間(コンテキストスイッチのオーバーヘッド)は0として計算します。
グラフで見る
ほかの入力は今の値のまま、選んだ入力だけを今の値の1/4〜4倍の範囲で変えたときの結果です。赤い点が今の値です。
CPUスケジューリングとは
CPUが1つなら、同時に実行できるプロセスは1つだけです。実行できる状態のプロセスが複数あるとき、次にどれにCPUを割り当てるかを決めるのがOSのCPUスケジューラです。評価には、到着してから終わるまでのターンアラウンド時間、実行可能なのに待たされた待ち時間、初めて動き出すまでの応答時間などを使います。同じプロセスの組でも、割り当ての順番によってこれらの平均は大きく変わります。例「全員が時刻0に到着」では、24の長いプロセスを先にする到着順の平均待ち時間は17ですが、短い順にすると3まで減ります。
到着順・処理時間順・残り処理時間順
到着順(FCFS)は、来た順に最後まで実行する最も簡単な方式です。長いプロセスの後ろに短いプロセスが並ぶと、短いプロセスまで長く待たされます(護送船団効果)。処理時間順(SJF)は、実行時間の短いプロセスから実行し、平均待ち時間を小さくします。残り処理時間順(SRT)は、新しいプロセスが到着するたびに残り時間を比べ、より短いものが来たら実行中のプロセスから横取り(プリエンプション)します。SRTは平均待ち時間を最小にしますが、実行時間を前もって知る必要があり、長いプロセスがいつまでも後回しにされる(飢餓状態)おそれがあります。
ラウンドロビンとタイムクォンタム
ラウンドロビンは、決まった時間(タイムクォンタム、タイムスライス)ずつ順番にCPUを割り当て、時間切れになったプロセスを待ち行列の最後に回す方式です。どのプロセスもすぐに少しずつ動き出すので応答時間が短く、対話的なシステムに向いています。クォンタムが長すぎると到着順と同じになり、短すぎるとプロセスの切り替え(コンテキストスイッチ)が増えてその手間が無視できなくなります。タイムクォンタムを変えて、比較の表の平均応答時間と切り替えの回数がどう変わるかを確かめてみてください。
優先度順と実際のOS
優先度順は、優先度の高いプロセスから実行する方式で、横取りなしと横取りありがあります。優先度の低いプロセスが待たされ続ける飢餓状態を防ぐため、待った時間に応じて優先度を上げるエージングという工夫を使います。実際のOSは、これらを組み合わせています。たとえば、優先度ごとに待ち行列を分け、同じ優先度の中ではラウンドロビンで回し、CPUをよく使うプロセスの優先度を少しずつ下げる多段フィードバック待ち行列や、実行した時間の少ないプロセスを優先するLinuxのCFSなどがあります。
OSの問題を解く
- Aそのプロセスが使っているディスクのファイルの中身
- Bレジスタの値やプログラムカウンタなど、CPUの実行の状態
- Cそのプロセスの物理メモリの全内容
答えと解説を見る
正解:B. レジスタの値やプログラムカウンタなど、CPUの実行の状態
コンテキストスイッチでは、あとで同じ状態から再開できるように、汎用レジスタ、プログラムカウンタ、スタックポインタ、動作モードなどのCPUの状態を保存し、次に動かすプロセスの状態を読み込みます。プロセスを切り替える場合は、ページテーブルの場所を示すレジスタも切り替えます。メモリやファイルの中身はそのまま残っているので、切り替えのたびに保存する必要はありません。
- A切り替えのたびに、CPUのクロック周波数が下がるから
- B切り替えのたびに、プログラムをディスクから読み直すから
- C切り替え後、キャッシュやTLBのミスが増えるから
答えと解説を見る
正解:C. 切り替え後、キャッシュやTLBのミスが増えるから
レジスタの保存と復元そのものは短時間で済みますが、切り替えたあとのプロセスにとって、キャッシュやTLBの中身は前のプロセスのもので、必要なデータや変換結果を読み込み直すまでミスが続きます。ASIDのないCPUでは、アドレス空間を切り替えるときにTLBを空にする必要もあります。この間接的なコストが、直接の切り替え時間より大きくなることがあります。クロックが下がったり、プログラムをディスクから読み直したりはしません。
よくある質問
待ち時間とターンアラウンド時間の違いは何ですか?
ターンアラウンド時間は、プロセスが到着してから終わるまでの時間全体です。待ち時間は、そのうち実行可能なのにCPUを割り当てられずに待っていた時間で、ターンアラウンド時間から実行時間を引いたものです(入出力待ちがない場合)。
平均待ち時間が最も短くなるのはどの方式ですか?
全員が同時に到着する場合は処理時間順(SJF)、途中で到着するプロセスがあり横取りできる場合は残り処理時間順(SRT)が、平均待ち時間を最小にします。ただし実行時間を前もって知る必要があり、実際には過去の実行時間から予測します。
同じ時刻に2つのプロセスが条件を満たすときは、どちらを選びますか?
このツールでは、到着の早いほう、それも同じなら表の上の行を選びます。試験の問題では、同じ条件のときの選び方が問題文に書かれていることが多いので、それに合わせて表の順番を並べてください。
試験ではどのように問われますか?
基本情報技術者試験や応用情報技術者試験では、プロセスの到着時刻と処理時間の表が与えられ、ある方式で特定のプロセスが終わる時刻や、平均のターンアラウンド時間を求める問題がよく出ます。表を入力してガントチャートと結果の表で確かめられます。