【ITニュース解説】Operating Systems — Day 4: Process Scheduling
2025年09月23日に「Medium」が公開したITニュース「Operating Systems — Day 4: Process Scheduling」について初心者にもわかりやすく解説しています。
ITニュース概要
OSの「プロセススケジューリング」とは、複数のプログラムを効率よく動かすために、CPUの実行順序を管理する仕組みだ。これにより、限られたCPU資源を有効活用し、ユーザーは快適にPCを利用できる。システムエンジニアにとって基礎知識だ。
ITニュース解説
コンピュータ上で複数のプログラムが同時に動いているように見えるのは、オペレーティングシステムがプロセスの「スケジューリング」という重要な役割を担っているからだ。プログラムが実行状態になると、それは「プロセス」と呼ばれる。例えば、Webブラウザを開いたり、音楽を再生したり、文書を作成したりするそれぞれの動作が独立したプロセスとして扱われる。しかし、ほとんどのコンピュータにはCPUが一つしかなく、同時に一つ以上の処理を物理的に実行することはできない。そこで、オペレーティングシステムは、複数のプロセスにCPUを効率よく、かつ公平に割り当てるための仕組みが必要となる。これがプロセススケジューリングの基本的な考え方である。
プロセスは実行中に様々な状態を遷移する。まず、新しいプロセスが作成されると「New(生成)」状態となる。その後、実行可能な状態になると「Ready(実行可能)」状態に移り、CPUの利用を待つ。オペレーティングシステムがReady状態のプロセスの中から一つを選び、CPUを割り当てると、そのプロセスは「Running(実行中)」状態となる。Running状態のプロセスはCPU上で実際に命令を実行する。プロセスがI/O処理(例えば、キーボード入力やディスクからのデータ読み込みなど)を必要とする場合、I/Oが完了するまでCPUを解放し、「Waiting(待機)」状態となる。I/O処理が完了すると、プロセスは再びReady状態に戻り、CPUの割り当てを待つ。プロセスが実行を終えるか、エラーによって中断されると、「Terminated(終了)」状態となり、そのライフサイクルを終える。これらの状態遷移を管理することで、オペレーティングシステムは複数のプロセスを適切に制御し、限られたリソースを最大限に活用している。
このプロセスの状態遷移とCPU割り当てを管理するのが「スケジューラ」と呼ばれるオペレーティングシステムの一部である。スケジューラには主に三つの種類がある。一つ目は「長期スケジューラ(Long-term Scheduler)」、別名ジョブスケジューラと呼ばれるものだ。これはシステムに提出された複数のジョブ(プロセス)の中から、どのジョブをメモリにロードし、Ready状態にするかを決定する。長期スケジューラはシステムのマルチプログラミング度合い、つまりメモリ上に同時に存在できるプロセスの数を制御する役割を担う。あまりにも多くのプロセスをメモリにロードすると、メモリ不足を招き、システムのパフォーマンスが低下する可能性があるため、そのバランスを考慮する。
二つ目は「短期スケジューラ(Short-term Scheduler)」、別名CPUスケジューラである。これは三種類のスケジューラの中で最も頻繁に動作し、システム全体のパフォーマンスに直接的な影響を与える。短期スケジューラの役割は、Ready状態にある複数のプロセスの中から、次にCPUに割り当てられるプロセスを迅速に選択することだ。例えば、Webブラウザのタブ切り替えがスムーズに行われたり、音楽再生が途切れることなく続いたりするのは、短期スケジューラが適切に動作しているおかげである。短期スケジューラは、現在CPUを使用しているプロセスが時間切れになったり、I/O処理のためにCPUを自ら解放したりするたびに起動し、次に実行すべきプロセスを選ぶ。この選択の基準は、様々なスケジューリングアルゴリズムによって決定される。
三つ目は「中期スケジューラ(Medium-term Scheduler)」である。これはメモリの負荷を調整するために使用される。システムメモリが不足しそうになったり、特定のプロセスが長期間I/O待機状態になったりした場合、中期スケジューラはそのプロセスを一時的にメモリからディスクに移動させる(これを「スワップアウト」と呼ぶ)。これにより、メモリの空き容量を確保し、他の実行可能なプロセスがメモリにロードされる機会を増やすことができる。その後、必要に応じて再びディスクからメモリに戻す(「スワップイン」)。中期スケジューラは長期スケジューラよりも頻繁に、短期スケジューラよりはまれに動作する。
オペレーティングシステムがプロセススケジューリングを行う上で目指す目標はいくつかある。まず一つは「CPU利用率(CPU utilization)」の最大化だ。これはCPUがアイドル状態(何も処理していない状態)になる時間を最小限に抑え、常に何か有用な処理を実行している状態を保つことを意味する。CPUはシステム内で最も高価なリソースの一つであり、その利用率を高めることはシステムの全体的な効率向上に繋がる。
次に「スループット(Throughput)」の最大化である。スループットとは、単位時間あたりに完了するプロセスの数のことだ。より多くのプロセスを短時間で完了させることができれば、それだけシステムは効率的に動作していると言える。
さらに「ターンアラウンドタイム(Turnaround time)」の最小化も重要な目標だ。これはプロセスがシステムに提出されてから、その実行が完全に完了するまでの総時間を示す。ユーザーがプログラムを実行してから結果が得られるまでの時間が短いほど、ユーザー体験は向上する。
「待機時間(Waiting time)」の最小化も目指される。これはプロセスがReadyキューの中でCPUの割り当てを待っている合計時間のことである。待機時間が長くなると、ユーザーはプログラムの応答が遅いと感じるため、この時間を短縮することは重要だ。
特にインタラクティブなシステムでは、「応答時間(Response time)」の最小化が非常に重要となる。これはプロセスが最初の要求(例えば、キーボード入力)を行ってから、最初の応答(例えば、画面表示の更新)を受け取るまでの時間を示す。応答時間が短いほど、ユーザーはシステムが「きびきびと動いている」と感じる。
最後に「公平性(Fairness)」の確保がある。いくらシステム全体の効率が高くても、特定のプロセスだけがCPUを独占し、他のプロセスがほとんど実行されないようでは、公平とは言えない。オペレーティングシステムは、全てのプロセスに公平にCPUリソースを割り当てることで、どのプロセスもいつかは実行される機会を得られるようにする必要がある。
これらの目標はしばしばトレードオフの関係にある。例えば、CPU利用率を最大化しようとすると、一部のプロセスの応答時間が犠牲になる可能性がある。そのため、オペレーティングシステムはシステムの用途(例えば、サーバーか、デスクトップPCか)に応じて、これらの目標のどれを優先するかを考慮し、最適なスケジューリングアルゴリズムを選択・適用している。プロセススケジューリングは、コンピュータが複数のタスクを効率的に実行し、私たちユーザーに快適な体験を提供する上で、基盤となる極めて重要な機能なのである。