アプリとOSは何が違うのか

中級の解説は準備中のため、中級の内容を表示しています。

概要 — まず全体をつかむ

初級では「お願いする側と、引き受けて仕切る側」という関係を見ました。ここではその境界線が何によって強制されているのかを、実際の名前で追います。読み終わる頃には、タスクマネージャの見方と「なぜ強制終了してもPC全体は無事なのか」が理屈で分かるはずです。

用語には「※1・※2…」と番号を付けて、各セクション末尾の「登場人物メモ」で説明します。

アニメーション『保存ボタンの裏側』を開く
あなたアプリ(メモ帳)OSストレージ(円盤)
  • あなた保存ボタンを押す人
  • アプリ(メモ帳)画面と機能を持つ係。ただし機械そのものには触れない
  • OS機械の中の世話役。アプリの「お願い」を一手に引き受ける
  • ストレージ(円盤)データを物理的に記録しておく部品。電源を切っても消えない
「▶ 再生」で通しで見るか、「次へ」で1手ずつ進めてください。
0 / 8

詳細 — 1段階ずつ追う

① アプリは「お願い」しかできない

🎬 アニメーション『保存ボタンの裏側』の ②〜③ のところです!

「アプリは部品に触れない」は、行儀の問題ではなくCPUの機能で強制されています:

  1. CPUにはユーザーモード / カーネルモード※1 という2つの動作モードがある
  2. 部品への入出力など危険な命令は、カーネルモードでしか実行できない
  3. アプリは常にユーザーモードで動く。部品に用があるときはシステムコール※2 で境界を越え、OS側のコード(カーネル)に処理を委ねる
  4. 実際にはアプリが直接システムコールを書くことは少なく、標準ライブラリ※3 が包んでくれている

登場人物メモ(※の説明):

  • ※1 ユーザーモード / カーネルモード — CPU自体が持つ権限の切り替え。境界の強制力の源
  • ※2 システムコール — モードの境界を越えるための正式な窓口。open / read / write / send など数百種類ある
  • ※3 標準ライブラリ — システムコールを使いやすく包んだ部品集。「ファイルを開く」と書くと、内部で適切なシステムコールに翻訳される

⚠️ イレギュラー(境界が破られるとき):

  • カーネルの脆弱性 — 境界そのものに穴があると、アプリがカーネル権限を奪える(権限昇格攻撃)。OSアップデートが最重要と言われる理由
  • 昔のOS — この境界が緩い時代は、1つのアプリのバグがOSごと巻き込んで青画面・全体フリーズを起こしていた

② OSは世話役と交通整理

🎬 アニメーション『保存ボタンの裏側』の ④〜⑤ のところです!

初級で見た「区切り」と「順番の調整」の正式名はこうです:

  1. 実行中のアプリの単位をプロセス※1 と呼ぶ。タスクマネージャに並んでいるアレ
  2. 各プロセスは仮想メモリ※2 により「自分専用のメモリ空間」を持っているように見える——実際の物理メモリとの対応表はOSが管理し、他人の領域はそもそも見えない
  3. CPUの割り当てはスケジューラ※3 が数ミリ秒単位でプロセスを高速交代させる。「同時に動いている」は錯覚で、実体は超高速な切り替え
  4. 交代はタイマー割り込みによる強制。アプリの協力に頼らない(プリエンプティブ※4)

登場人物メモ(※の説明):

  • ※1 プロセス — 実行中のプログラム1個分の入れ物(メモリ空間 + 実行状態)
  • ※2 仮想メモリ — 「見かけの番地」と「物理の番地」を分離する仕組み。隔離と、メモリ不足時のディスク退避を両立する
  • ※3 スケジューラ — どのプロセスに次のCPU時間を与えるか決める係。優先度もここで効く
  • ※4 プリエンプティブ — 「OSが強制的に取り上げる」方式。譲り合い頼み(協調的)の対義語

⚠️ イレギュラー(区切りが効いている証拠):

  • 1つのアプリが無限ループ — そのプロセスのCPU時間を食い潰すだけで、他は動き続ける。タスクマネージャからの強制終了は「プロセスごと回収」
  • メモリを食い尽くすアプリ — 仮想メモリの退避(スワップ)で全体が重くなることはあるが、他プロセスのデータが壊れることはない

③ 部品が実行して、報告が遡る

🎬 アニメーション『保存ボタンの裏側』の ⑥〜⑧ のところです!

部品とのやり取りにも、隠れた工夫が2つあります:

  1. 割り込み※1 — 部品の作業完了をCPUが待ち続けるのは無駄なので、部品側から「終わりました」と通知させる。OSはその間、他のプロセスを動かしている
  2. 書き込みキャッシュ※2 — 遅いストレージへの書き込みは、いったんメモリに溜めてからまとめて行う。「保存しました」の表示時点で、実はまだ書き終わっていないことがある
  3. だから突然の電源断で「保存したはずのデータ」が消えることがあり、USBメモリに「安全な取り外し」が存在する

登場人物メモ(※の説明):

  • ※1 割り込み — 部品からCPUへの「手が空いたら見て」の通知。待ち時間をゼロにする仕組みで、キーボード入力もマウスも全部これ
  • ※2 書き込みキャッシュ — 速いメモリを遅いストレージの手前に挟む緩衝。性能と引き換えに「表示と実態のズレ」が生まれる

⚠️ イレギュラー(報告と実態のズレ):

  • 電源ぶち抜き — キャッシュ未書き込み分が消える。データベースや一部アプリが「本当に書き切る」指示(フラッシュ)をわざわざ発行するのはこのため
  • 「安全な取り外し」スキップ — 最近のOSは既定でキャッシュを弱めて耐性を上げているが、「表示=記録済み」ではない原理は変わらない
タスクマネージャは「今日の内容」の実況中継

Windowsのタスクマネージャ(Macのアクティビティモニタ)を開くと、今日の登場人物が全員見えます: 並んでいる行がプロセス、CPU列はスケジューラの配分結果、メモリ列は仮想メモリの使用量。フリーズしたアプリを「タスクの終了」で消せるのは、OSがプロセス単位で区切って管理しているからです。このユニットを読んだ後に開くと、ただの表が仕組み図に見えるはずです。

まとめ——初級の「全部の道がOSを通る」の正体は、CPUのモード(強制力)/ プロセスと仮想メモリ(隔離)/ スケジューラ(交代)/ 割り込みとキャッシュ(部品との緩衝)でした。この4点は、この先のコンテナ・仮想マシン・サーバ運用の話すべての土台になります。

関連する知識

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. USBメモリの「安全な取り外し」が必要とされる技術的な理由はどれ?

2. CPUが1個でも複数のアプリが「同時に」動いているように見える理由はどれ?

3. 昔の「協調的マルチタスク」が、行儀の悪いアプリ1つで全体フリーズを起こしたのはなぜ?

4. アプリのソースに「ファイルを開く」と書くだけで動くのは、アプリとOSの間に何が入っているからか?

5. OSがタイマー割り込みでアプリからCPUを強制的に取り上げて交代させる方式を「〜マルチタスク」と呼ぶ。〜に入る語をカタカナで答えてください。

6. Windows用アプリがMacで動かない理由として、最も正確なものはどれ?

7. ユーザーモードとカーネルモードの区別が存在する目的はどれ?

8. 各アプリ(プロセス)が「自分専用のメモリ空間」を持っているように見える仕組みはどれ?