プロセススケジューリングを行う場合の基準としてターンアラウンドタイムに着目することがあります。
プロセススケジューリングはCPUの利用率やスループットを大きくして、ターンアラウンドタイムを短くすることです。
このことは、システムの効率性を高めるための重要な概念です。
この記事では、ターンアラウンドタイムの定義やプロセススケジューリングを用いた具体例について解説しています。
プロセススケジューリングについて知らなくても問題ありません。この記事を読んで、ターンアラウンドタイムについて理解していきましょう!
- ターンアラウンドタイム
ターンアラウンドタイムの定義


コンピュータシステムにおけるターンアラウンドタイムは、ジョブ(タスク)がシステムに投入されてから、その処理が完了するまでの総時間を指します。
ターンアラウンドタイム(turnaround time)を求める式
$Turnaround Time = 終了時刻 – 到着時刻$
ジョブが到着してからという点に注意してください。
処理が完了するまでの間に以下の時間が含まれます。
- 待機時間
- CPU実行時間
- I/O時間
I/O時間とは、入出力デバイスの操作時間のことです。
スケジューリングの種類やジョブの流れによっては、ジョブに待ち状態が含まれてしまうこともあります。そのため、常にターンアラウンドタイム=ジョブの処理時間になるとは限りません。
ターンアラウンドタイムの重要性

ターンアラウンドタイムを考えるシーンとして以下が挙げられます。
- システムの効率性を示す指標
- ユーザー体験の向上
- リソース配分の最適化
短いターンアラウンドタイムは、システムがジョブを効率よく処理していることを示します。逆に、長いターンアラウンドタイムは、スケジューリングやリソースの管理に問題がある可能性を示唆します。次の章で詳しく見てみます。
バッチ処理が多いシステムでは、ターンアラウンドタイムが短いほど、結果を早く得られます。例えば、研究者が大量のデータを分析する場合、ターンアラウンドタイムが短ければ、その分迅速に次のステップに進めます。
ターンアラウンドタイムを短縮することで、CPUやメモリ、ストレージといったシステム資源の利用効率が向上します。
ターンアラウンドタイムを計算してみよう

この章では実際にターンアラウンドタイムを計算してみましょう。
まず、プロセススケジューリングの1種であるSRTF(Shortest Remaining Time First)について軽く説明します。
SRTFとは、ジョブ(プロセス)の実行時間が短いものを優先して処理する方式です。
SRTFにはpreemptive(横取り)があるため、ジョブの実行中に実行時間の短いジョブが到着したときに、実行中のジョブを一旦「実行可能状態」に変えてCPUのリソースを奪います。
ジョブの実行時間をあらかじめ知っておくことはできるのかと疑問に思う方もいると思いますが、ここでは知っているという前提で議論を進めます。実際は、処理時間によって処理順序を定めることができないことの方が多いです。
具体例を見ていきましょう。
ジョブ | 到着時間 | 実行時間 |
ジョブA | 0 | 6 |
ジョブB | 2 | 3 |
上記のようなジョブが流れてきたとします。また、開始時間を0としてSRTFでジョブスケジューリングを行います。
まず、処理開始とともにジョブAが実行されます。
時間が2になると、ジョブBがやってきました。SRTFは処理の残り時間でジョブを優先するか、しないか決めるものでした。
時間が2におけるジョブAの残り実行時間は$(6-2=)4$です。一方、ジョブBの残り実行時間は$(3-0=)3$です。よって、ジョブBの方が残り実行時間が短いため、ジョブAを「実行可能状態」へと遷移させ、ジョブBを「実行状態」にします。
ジョブBが終了するとき、時刻は$(2+3=)5$です。ジョブBが終了したとき、実行可能状態であったジョブAを再度実行します。
ジョブAが終了する時刻は$(5+4=)9$となり、すべてのジョブを実行することができました。
ここで、ジョブの到着時間と終了時間を確認しましょう。
ジョブ | 到着時間 | 終了時間 |
ジョブA | 0 | 9 |
ジョブB | 2 | 5 |
それぞれのジョブのターンアラウンドタイムを求めていきましょう。
ターンアラウンドタイムは、ジョブが到着してから処理が完了するまでの時間でした。そのため、以下の式で求めることができます。
\(Turnaround Time = 終了時間 – 到着時間\)
したがって、各ジョブのターンアラウンドタイムは
ジョブAのターンアラウンドタイム:$9-0=9$
ジョブBのターンアラウンドタイム:$5-2=3$
となります。
無事にターンアラウンドタイムを求めることができました!
まとめ

SRTF(Shortest Remaining Time First)は、効率のよいスケジューリングを考えるときの重要な要素です。
残り実行時間が最短のジョブを優先することで、システム全体のターンアラウンドタイムを最小化することを目指します。
ただし、実行時間をあらかじめ正確に求めることは難しいため、現実では処理順序をSRTFで決めることも難しいです。
最後までご覧いただき、ありがとうございます。お疲れ様でした。
コメント