🔧🔄💻
オペレーティングシステム入門 ②

CPUスケジューリング

マルチタスクの裏側を解剖する

音楽を聴きながらブラウザもLINEも動く——
でも CPU のコアは1度に1つの仕事しかできない。
OS はどうやって「同時に動いている」ように見せているのか?

⏱ 所要:25–35分難易度:★★☆前提:OSの基礎
Section 1

CPUは1回に1仕事しかできない

でも私たちは毎日「同時に」何十ものアプリを使っている

❌ もし順番待ちだったら…

🎵 音楽アプリが 5秒 CPU を使う
🌐 ← ブラウザは 5秒間フリーズ
💬 ← LINE も 10秒間止まる

これは使い物にならない!

✅ スケジューリングの解決策

CPU 時間を 1〜10ms の「タイムスライス」に分割
🔄 各アプリに順番に時間を配る
🎭 切り替えが速すぎて「同時」に見える

これが「時分割(Time-sharing)」だ!

💡 映画のコマ送りアナロジー:
映画は実は1秒間に24枚の静止画を連続表示しているだけ。CPUスケジューリングも同じ原理で、 アプリの切り替えが1秒間に何百回も起きるから「全部同時に動いている」ように錯覚する。 この切り替えの仕組みを OS の スケジューラ が担っている。

📊 プロセスの5つの状態

新規 (New)
生成直後
準備完了
(Ready)
順番待ち
実行中
(Running)
CPU 使用中
終了
(Exit)
完了
待機
(Waiting)
I/O 待ちなど

スケジューラは「準備完了」キューから次に実行するプロセスを選ぶ

Section 2

3つのスケジューリングアルゴリズム

「誰を次に選ぶか」の方針がアルゴリズムだ

🚶

FCFS

First Come, First Served

到着順に1つずつ処理。シンプルだが、長いプロセスが来ると後続が全員待たされる(護送船団問題)。

先着順の銀行窓口。1人が長い手続きをすると全員待ち。
🎠

ラウンドロビン (RR)

Round Robin

全プロセスに均等な「タイムスライス(量子)」を順番に配る。現代のOSの基本。応答性が高い。

回転寿司。誰も独占できず、みんなに同じ時間がくる。
🏆

優先度スケジューリング

Priority Scheduling

各プロセスに優先度を設定。高優先度が先に実行される。低優先度プロセスが無期限に待つ「飢餓」問題あり。

救急外来のトリアージ。重症患者が先に診てもらえる。
アルゴリズム 応答時間 スループット 飢餓 主な用途
FCFS ✗ 悪い △ 普通 なし バッチ処理
ラウンドロビン ✓ 良い ✓ 良い なし 対話型OS(基本)
優先度 △ 条件付 △ 条件付 あり リアルタイムOS
Section 3

スケジューリング シミュレータ

プロセスを追加してガントチャートを見てみよう

アルゴリズム選択

プロセス一覧

プロセス名
バースト時間(CPU使用時間)
到着時刻

⚙️ CPU コア ― 今何を実行中?

💤 アイドル
⏱ 現在の時刻:0
📋 実行中:
🔢 残りタスク:0

📊 ガントチャート

各行 = プロセス、各列 = 時刻
実行中 アイドル 未実行

📈 パフォーマンス統計

Section 4

現代OSのスケジューラ

教科書より遥かに複雑な現実

🐧

Linux — CFS

Completely Fair Scheduler。仮想実行時間(vruntime)を追跡し、 最も「仮想時間が少ない」プロセスを次に選ぶ赤黒木ベースのアルゴリズム。 「完全に公平」な CPU 時間配分を目指す。

Linux 2.6.23 (2007) から採用。Androidもこれを使用。
🪟

Windows — MLFQ

Multi-Level Feedback Queue。複数の優先度キューを持ち、 CPU をたくさん使うプロセスは自動的に低優先度に降格。 対話的(UIをよく触る)プロセスは高優先度に昇格。

「ゲームやブラウザを快適に」しながらバックグラウンド処理もこなす。
🍎

macOS/iOS — GCD

Grand Central Dispatch。スレッドではなくキューベースの非同期処理。 QoS(Quality of Service)クラスで優先度を指定。 「UI は必ず最優先」が保証される。

「スクロールがカクつかない」Mac・iPhoneの秘密がここに。
🏭

リアルタイムOS

工場の制御システム・自動車のブレーキ制御など、「必ず〇ms以内に応答」を 保証しなければならない場面では、EDF(Earliest Deadline First)などのリアルタイム スケジューラが使われる。

FreeRTOS、VxWorks など。車の ABS はこれで動いている。
🔮 マルチコア時代のスケジューリング:
現代の CPU は複数コアを持つ(例:M3 Pro は12コア)。OS はコア間の負荷分散も管理する。 同じプロセスをどのコアで動かすか、コアを跨いでプロセスを移動する際のキャッシュ効率、 さらに CPU の「大小コア」を使い分ける ヘテロジニアス設計 (Apple Silicon / Arm big.LITTLE) など、現代のスケジューリングは非常に複雑だ。
Section 5

理解度チェック