🙌

【OS】CPUスケジューリングの基本

に公開

はじめに

現代のコンピュータは、一見すると同時に複数の作業をこなしているように見えます。音楽を再生しながらウェブブラウジングをし、同時にファイルのダウンロードも行なう
——このようなマルチタスクを可能にしているのが、OSの「CPUスケジューリング」という仕組みです。
本記事では、この重要な概念を初心者の方にもわかりやすく解説していきます。

CPUスケジューリングとは何か

CPUスケジューリングとは、限られたCPUリソースを複数のプロセスにどのように割り当てるかを決定するOSの基本的な機能です。単一のCPUコアしかないシステムでも、あたかも複数のプログラムが同時に実行されているように見せるのは、このスケジューリングが非常に短い時間間隔で実行するプロセスを切り替えているからです。
CPUはどのプロセスをどの順序で、どれだけの時間実行するかを絶えず判断しています。

スケジューリングが必要な理由

コンピュータシステムでは、通常、実行可能なプロセスの数が利用可能なCPUコアの数を上回っています。特に、現代のアプリケーションは多くのバックグラウンドプロセスを伴うため、この傾向が顕著です。CPUスケジューリングがないと、一つのプロセスがCPUを独占し、他のプロセスがまったく実行されない「飢餓」状態が発生してしまいます。

また、対話型アプリケーション(例えばテキストエディタやウェブブラウザ)では、ユーザーの操作に対して素早く応答することが求められます。一方で、バックグラウンドでのファイル転送やデータ処理などは、スループット(単位時間当たりの処理量)が重要です。CPUスケジューラはこれらの異なる要求をバランスよく満たすように設計されています。

主要なスケジューリングアルゴリズム

ラウンドロビン方式

ラウンドロビン方式は、最も基本的で広く使われているスケジューリングアルゴリズムの一つです。この方式では、各プロセスに一定の時間(タイムスライスまたはクオンタムと呼ばれる)が割り当てられ、その時間が経過すると次のプロセスにCPUが割り当てられます。すべてのプロセスに均等に機会が与えられるため、公平性が高いという特徴があります。

タイムスライスの長さはパフォーマンスに大きな影響を与えます。短すぎるとコンテキストスイッチ(プロセス切り替え)のオーバーヘッドが大きくなり、長すぎると対話型アプリケーションの応答性が低下します。一般的なOSでは、10msから100ms程度の値が使われています。

優先度ベースのスケジューリング

より洗練されたシステムでは、プロセスに優先度を割り当て、優先度の高いプロセスを優先的に実行する方式が採用されています。
例えば、ユーザーの操作に直接関わるプロセスは高い優先度を持ち、バックグラウンドのバッチ処理は低い優先度が割り当てられます。

ただし、高い優先度のプロセスが常に存在すると、低優先度のプロセスがまったく実行されない「飢餓」状態が発生する可能性があります。この問題を防ぐために、多くのシステムでは優先度を動的に調整する仕組みを備えています。長時間実行されているプロセスの優先度を徐々に下げたり、長時間待機しているプロセスの優先度を上げたりする方法が取られます。

マルチコアプロセッサ時代のスケジューリング

現代のCPUはほとんどが複数のコアを備えており、スケジューリングの複雑さは増しています。単純に各コアで独立にスケジューリングを行なうと、キャッシュの効率が悪化したり、プロセス間の負荷バランスが崩れたりする可能性があります。

このため、現代のOSでは「スケジューリングドメイン」や「Load Balancing」といった概念が導入されています。スケジューラは、プロセスをできるだけ同じコアで実行させることでキャッシュの効率を維持しつつ、各コアの負荷が偏らないようにプロセスを移動させます。また、電力消費を抑えるために、使用されていないコアを低速化または停止させる機能も重要な考慮事項です。

スケジューリングがパフォーマンスに与える影響

CPUスケジューリングの設計は、システム全体のパフォーマンスに大きな影響を与えます。適切に設計されたスケジューリングアルゴリズムは、以下のようなバランスを取る必要があります。

まず、対話型アプリケーションの応答性とバックグラウンドジョブのスループットの間のトレードオフです。また、コンテキストスイッチのオーバーヘッドとタイムスライスの長さの関係も重要です。さらに、電力消費と処理性能のバランスも、特にモバイルデバイスでは無視できません。

実際のOSでは、これらの要件を満たすために、複数のアルゴリズムを組み合わせたり、ワークロードに応じて動的にパラメータを調整したりする高度な手法が採用されています。
例えば、LinuxのCFS(Completely Fair Scheduler)は、仮想時間という概念を導入して、すべてのプロセスが公平にCPU時間を受け取れるように設計されています。

まとめ

CPUスケジューリングは、現代のコンピューティングを支える基本的かつ重要な技術です。一見魔法のように見えるマルチタスクの背後には、入念に設計されたスケジューリングアルゴリズムが働いています。この仕組みを理解することで、プログラムのパフォーマンスチューニングやシステム設計において、より適切な判断ができるようになります。
最後までお読みいただき、ありがとうございました。

参考・画像引用元URL

https://www.momoyama-usagi.com/entry/info-calc-sys18
https://www.scaler.com/topics/operating-system/cpu-scheduling/
https://www.linkedin.com/pulse/cpu-scheduling-operating-systems-ritesh-kumar-65tmc
https://www.geeksforgeeks.org/time-slicing-in-cpu-scheduling/
https://medium.com/@tanmaykumarchaursia/understanding-cpu-scheduling-a-comprehensive-guide-to-efficient-process-management-2169b701b953

Discussion