スケジューリングとは
スケジューリングとは、OS(オペレーティングシステム)が、限られたCPUの処理時間をどのプロセスやスレッドに割り当てるかを決定し、実行順序を管理・調整する仕組みのことです。CPUの数は有限ですが、動かしたいプログラムは多数存在するため、効率的かつ公平にCPUを使わせる必要があります。代表的なアルゴリズムには、一定時間ごとに順番に処理を切り替える「ラウンドロビン」や、緊急性の高い処理を優先する「優先度順」などがあります。
具体例
- ラウンドロビン方式の例:3つのタスク(A、B、C)がある場合、CPUが「Aを0.01秒実行」→「Bを0.01秒実行」→「Cを0.01秒実行」→「再びAを0.01秒実行」というように、順番に均等な時間枠を割り当てていきます。これにより、どのプログラムも少しずつ均等に処理が進みます。
- 優先度順方式の例:システムの警告通知やマウスの操作といった「ユーザーの応答に直結する高優先度のタスク」を、裏で動いているファイルのコピーなどの「低優先度のタスク」よりも先にCPUに実行させます。
もう少し詳しく
スケジューリング(Scheduling)とは、複数のプロセスやスレッドが存在する環境において、OS内の「スケジューラ」というコンポーネントが「どのプロセスに」「いつ」「どれだけの時間」CPUを使用させるかを決定する全体的な仕組みとアルゴリズムのことです。システム内には、ユーザーが直接操作している画面描画の処理から、裏で動作しているウイルススキャンのような処理まで、重要度や特性が異なる多様なタスクが混在しています。スケジューリングの目的は、限られたCPU資源を最適に配分し、「システム全体の処理効率(スループット)を最大化する」「ユーザーの操作に対する応答時間(レスポンスタイム)を最小化する」「特定のプロセスだけが待たされ続ける不公平をなくす」といった、相反する要求をバランスよく満たすことにあります。
スケジューリングの具体的なアルゴリズムには様々な種類があります。最も単純な「到着順方式(FCFS:First Come First Served)」は、文字通り処理待ちの行列に並んだ順に実行する方式ですが、処理時間の長いタスクが前方にいると後ろのタスクが延々と待たされる「コンボイ効果」という欠点があります。現代の汎用OSで最も基礎となっているのが「ラウンドロビン方式」で、これは全てのタスクに均等な短い持ち時間(タイムクォンタム)を与え、時間が切れたら行列の最後尾に並び直させることで、公平性と応答性を担保する方式です。実際のOSではこれらをさらに高度化させ、タスクに優先度を設定し、複数の待ち行列を準備して、タスクの性質(対話型かバッチ処理か)に応じて優先度を動的に変動させる「多重レベルフィードバックキュー」などの非常に複雑なアルゴリズムが組み合わせて採用されています。
試験でのポイント
各種スケジューリングアルゴリズムの名称と特徴を結びつける問題や、計算問題が出題されるポイントです。
- ラウンドロビン方式:「タイムクォンタム(タイムスライス)」や「一定時間ごとに順繰りに切り替える」というキーワードが出たらラウンドロビン方式です。各タスクに均等にCPUを割り当てるため、会話型処理(タイムシェアリングシステム)に適している点がよく問われます。
- 処理時間順(最短処理時間優先:SJF)方式:待ち行列の中で、完了までの実行時間が最も短いタスクから優先して処理する方式です。システム全体の平均待ち時間を最小化できるという理論上のメリットがありますが、処理時間の長いタスクがいつまでも実行されない「スタベーション(飢餓状態)」に陥るリスクがあることが頻出です。
- ターンアラウンドタイムの計算:タスクがシステムに到着してから、処理が完全に終了するまでにかかる時間を「ターンアラウンドタイム」と呼びます。「到着時間」「処理時間」「アルゴリズム(到着順など)」が表で与えられ、特定のタスクのターンアラウンドタイムを計算させる問題は、基本情報技術者試験などの定番です。
関連する用語
ラウンドロビン、ターンアラウンドタイム、スタベーション