マルチタスクの裏側を解剖する
音楽を聴きながらブラウザもLINEも動く——
でも CPU のコアは1度に1つの仕事しかできない。
OS はどうやって「同時に動いている」ように見せているのか?
でも私たちは毎日「同時に」何十ものアプリを使っている
これは使い物にならない!
これが「時分割(Time-sharing)」だ!
スケジューラは「準備完了」キューから次に実行するプロセスを選ぶ
「誰を次に選ぶか」の方針がアルゴリズムだ
First Come, First Served
到着順に1つずつ処理。シンプルだが、長いプロセスが来ると後続が全員待たされる(護送船団問題)。
Round Robin
全プロセスに均等な「タイムスライス(量子)」を順番に配る。現代のOSの基本。応答性が高い。
Priority Scheduling
各プロセスに優先度を設定。高優先度が先に実行される。低優先度プロセスが無期限に待つ「飢餓」問題あり。
| アルゴリズム | 応答時間 | スループット | 飢餓 | 主な用途 |
|---|---|---|---|---|
| FCFS | ✗ 悪い | △ 普通 | なし | バッチ処理 |
| ラウンドロビン | ✓ 良い | ✓ 良い | なし | 対話型OS(基本) |
| 優先度 | △ 条件付 | △ 条件付 | あり | リアルタイムOS |
プロセスを追加してガントチャートを見てみよう
教科書より遥かに複雑な現実
Completely Fair Scheduler。仮想実行時間(vruntime)を追跡し、 最も「仮想時間が少ない」プロセスを次に選ぶ赤黒木ベースのアルゴリズム。 「完全に公平」な CPU 時間配分を目指す。
Multi-Level Feedback Queue。複数の優先度キューを持ち、 CPU をたくさん使うプロセスは自動的に低優先度に降格。 対話的(UIをよく触る)プロセスは高優先度に昇格。
Grand Central Dispatch。スレッドではなくキューベースの非同期処理。 QoS(Quality of Service)クラスで優先度を指定。 「UI は必ず最優先」が保証される。
工場の制御システム・自動車のブレーキ制御など、「必ず〇ms以内に応答」を 保証しなければならない場面では、EDF(Earliest Deadline First)などのリアルタイム スケジューラが使われる。