マルチレベルフィードバックキュー(MLFQ)とは?適応型CPUスケジューリングアルゴリズムを徹底解説
MLFQとは
マルチレベルフィードバックキュー(MLFQ:Multilevel Feedback Queue)は、複数のレディーキューを持ち、各キューに異なる優先度とタイムクォンタム(時間割り当て量)を設定するCPUスケジューリングアルゴリズムです。新規プロセスは最上位のキューから実行を開始し、その後の動作に応じてキュー間で昇格・降格が行われます。この適応型の設計により、対話型プロセスとCPU集中型プロセスの双方のニーズをバランスよく満たすことができます。
キュー構成の例
- キュー0(最優先):タイムクォンタム=1。新規プロセスはここから開始する
- キュー1(中優先度):タイムクォンタム=2。キュー0で時間を使い切ったプロセスが降格してくる
- キュー2(最下位):FCFS(先着順)方式。長時間のCPU処理が必要なプロセスが最終的に到達する
プロセス移動のルール
- 新規プロセスは必ずキュー0から開始する
- タイムクォンタム内に処理が完了しなかった場合、次に低い優先度のキューへ降格する
- エージング(aging)機構により、長時間待機したプロセスは上位キューへ昇格し、スタベーション(飢餓状態)を防止する
MLFQの仕組み
MLFQは以下の基本原則に基づいて動作します。
- 優先度ベースのスケジューリング:常に優先度の高いキューから順に実行される
- 可変タイムクォンタム:優先度の高いキューほど短いタイムスライスが割り当てられる
- 動的な優先度調整:プロセスの実際の動作(CPU使用時間やI/O待ちなど)に基づいてキュー間を移動する
- エージング機構:長期間待たされているプロセスを昇格させ、スタベーションを防止する
実行例
以下の3つのプロセスを例に考えてみましょう。
| プロセス | 到着時刻 | CPUバースト時間 | 初期キュー |
|---|---|---|---|
| P1 | 0 | 8 | キュー0 |
| P2 | 1 | 4 | キュー0 |
| P3 | 2 | 2 | キュー0 |
条件は、キュー0のタイムクォンタム=1、キュー1のタイムクォンタム=2、キュー2はFCFS方式とします。
実行タイムライン
| 時間 | 実行プロセス | 所属キュー |
|---|---|---|
| 0〜1 | P1 | Q0 |
| 1〜2 | P2 | Q0 |
| 2〜3 | P3 | Q0 |
| 3〜4 | P2 | Q1 |
| 4〜6 | P1 | Q1 |
| 6〜8 | P2 | Q1 |
| 8〜14 | P1 | Q2(FCFS) |
このように、新しく到着したプロセスはまず最上位キューで短いタイムスライスを与えられ、より多くのCPU時間を必要とするプロセスは徐々に下位のキューへ降格していきます。短い対話型処理を素早く捌きつつ、CPU集中型の処理にも継続的にCPU時間を与えられる点がMLFQの大きな特徴です。
主なユースケース
- 対話型アプリケーション:Webブラウザ、テキストエディタ、GUIアプリケーションなど、ユーザー操作への迅速な応答が求められる環境
- タイムシェアリングシステム:対話型処理とバッチ処理が共存するマルチユーザーシステム
- リアルタイムシステム:重要タスクと非重要タスクに異なる優先度を与える必要があるシステム
- ゲームアプリケーション:音声やネットワーク通信などのバックグラウンド処理を管理しつつ、入力への高い応答性を維持する必要があるゲーム
メリット
- 応答時間の向上:短いプロセスは高優先度キューで素早く処理される
- 動的な優先度調整:プロセスの動作パターンに自動的に適応する
- スタベーションの防止:エージング機構により、長時間待機したプロセスも最終的にCPU時間を確保できる
- 良好なスループット:対話型処理とバッチ処理のニーズを効果的にバランスさせる
- 柔軟なチューニング:ワークロードに応じてタイムクォンタムやキュー数を調整可能
デメリット
- 実装の複雑さ:異なるポリシーを持つ複数のキューを管理する必要があり、システム全体が複雑になる
- オーバーヘッドの増加:キュー間の移動判定や優先度の再計算など、スケジューラ自体の処理コストが増大する
- パラメータ調整の難易度:キュー数やタイムクォンタムの設定次第で性能が大きく変わり、最適化には経験と検証が必要
- 悪用への対策が必要:プロセスが意図的にI/O待ちを発生させて高優先度を維持するといった「スケジューラのゲーム化」を防ぐ仕組みが求められる
まとめ
MLFQは、プロセスの振る舞いを観察しながら優先度を動的に調整することで、応答性とスループットの両立を実現する洗練されたスケジューリング手法です。実装の複雑さやオーバーヘッドという課題はあるものの、対話型処理とバッチ処理が混在する現代のOS環境において非常に有効なアルゴリズムであり、多くの実用的なシステムで採用されています。
-
ランダウの記号(O記法)とは?アルゴリズムの計算量を表す漸近記号の基本を解説
漸近記号(Asymptotic Notations)とは漸近記号とは、アルゴリズムの計算量を漸近的に評価するために用いられる数学的な表現手法です。入力サイズ n が十分大きくなったときの実行時間やメモリ使用量の増加傾向に着目することで、異なるアルゴリズムの効率性を簡潔に比較できます。一般的によく使われる漸近記号には、主に次の3種類があります。O(ビッグオー)記法: 関数の上界(増加率の上限)を表します。Ω(オメガ)記法: 関数の下界(増加率の下限)を表します。Θ(シータ)記法: 上限・下限の両方を満たす、厳密な増加率を表します。ビッグオー記法(O記法)の概要ビッグオー記法は、関数 f(n) の
-
データ構造のバイナリヒープ(二分ヒープ)とは?基本概念とMax Heap・Min Heapの違いを解説
ヒープ(Heap)、またはバイナリヒープ(二分ヒープ/Binary Heap)は、平衡二分探索木のデータ構造の一種であり、その特殊なケースにあたります。最大の特徴は、「完全二分木(Complete Binary Tree)」という構造を持っている点です。 完全二分木としての性質 完全二分木では、葉のレベルを l としたとき、l − 1 レベルまでのすべてのノードが埋まった状態になり、最後の l レベルにおいては、ノードが必ず左詰めで配置されるという規則があります。この厳密な構造により、配列を使って効率的にヒープを実装できるという利点が生まれます。 ヒープの順序性(ヒープ条件) バイナリヒー