コンピュータは、部品(ハードウェア)だけでは動きません。それを動かすソフトウェア、その中心にいるOSの話です。(アプリとOSの関係をやさしい例で先に見るなら、姉妹ユニット アプリとOSは何が違うのか)
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
ハードとソフト、そしてOS
- ハードウェア — 体(CPU・メモリ・ストレージなどの部品)
- ソフトウェア — 動き(何をするかの指示・プログラム)
- OS — 全体の世話役。ハードを管理し、アプリに資源を配る
料理店でいえば、OSは店長(司会・仲介)。誰がコンロ(CPU)をいつ使うか、材料(メモリ)をどう配るかを采配します。
登場人物メモ:
- ※1 アプリ — 個別の仕事をするソフト(ブラウザ・表計算など)
- ※2 プロセス — 実行中のアプリ(動いている状態の1つ)
この部分をもっと深く(中級)
OSの核がカーネル。アプリ(ユーザー空間)と、ハードを直接触る領域(カーネル空間)を分け、境界越しに安全にやり取りします。
- システムコール — アプリがカーネルに処理を頼む窓口
- プロセス/スレッド — 実行単位。プロセスは独立、スレッドは同一プロセス内で並行。プロセスには実行/待機/レディなどの状態があり、切り替えながら進む
- ドライバ — 各ハードを操作するためのカーネルの部品
アニメーション『プロセスとスレッド』を開く
登場人物メモ:
- ※1 ユーザー空間/カーネル空間 — 権限を分けた2つの領域
- ※2 スケジューラ — どのプロセスにCPUを、いつ渡すかを決める係
OSは何をしている?
- ハードを管理 — CPU・メモリ・ストレージ・周辺機器をまとめて面倒を見る
- 資源を配る — どのアプリにCPUの時間・メモリの場所を渡すか采配
- 仲介する — アプリの「画面に出して」「ファイルを開いて」を受けて、ハードに橋渡し
- 守る — アプリどうしが干渉しないよう隔離する
だからアプリは、ハードの細かい違いを気にせず作れます。
この部分をもっと深く(中級)
- CPUスケジューリング — 多数のプロセスに、CPU時間を細切れ(タイムスライス/時分割)で順に割り当てる。これで見かけ上の同時実行=マルチタスクを実現する
- メモリ管理 — 仮想メモリで各プロセスに広い空間を見せ、足りなければスワップ
アニメーション『仮想メモリ(見せかけの広い空間)』を開く
- ファイルシステム — ストレージ上のデータを、名前とディレクトリで扱えるようにする
- 入出力 — ドライバ経由で周辺機器を操作する
なぜOSが要る?
- 共通の窓口 — アプリはOSにお願いするだけ。機種ごとの違いをOSが吸収する
- 同時に動かす — 複数アプリを、順番に少しずつ動かして「同時」に見せる
- 安全 — 1つのアプリの暴走が、他やハードを壊さないようにする
この部分をもっと深く(中級)
- 保護 — 権限(ユーザー空間)を分け、アプリがカーネルやハードを直接壊せないようにする
- 隔離 — プロセスごとにメモリ空間を分け、干渉を防ぐ
- 並行制御 — 共有資源はロック等で守る(不備はデッドロックの原因)
⚠️ うまくいかないとき
- フリーズ — あるプロセスが暴走し、応答しなくなる
- アプリが落ちる — そのプロセスだけ強制終了される(OSが他を守る)
- 重い — メモリやCPUの取り合い(資源不足)
この部分をもっと深く(中級)
- スワップ多発 — 仮想メモリの使いすぎで、ストレージ待ちが増え激遅に
- デッドロック — 複数プロセスが互いのロックを待って止まる
- メモリリーク — 解放し忘れでメモリを食い潰す
- ゾンビプロセス — 親が終了状態を回収せず、プロセス表にPID枠だけが残る(CPU・メモリはほぼ消費しない)
- 暴走プロセス — 無限ループや解放漏れで、CPU・メモリを占有し続ける
関連する知識
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. OS(オペレーティングシステム)の役割に最も近いのは?
問2. アプリとOSの関係で正しいのは?
問3. 1つのアプリ(プロセス)が暴走して応答しなくなったとき、OSに期待される動きに最も近いのはどれ?
問4. 「アプリを作る人が、機種ごとのハードの細かい違いを気にせず作れる」のは、OSの何のおかげ?
問5. 本文の料理店のたとえで、OSはどの役にあたる?
問6. 複数のアプリを開くと動作が「重い」とき、その主な原因に最も近いのはどれ?
問7. 「実行中のアプリ(動いている状態の1つ)」を指すカタカナの言葉を答えてください。
問8. ハードウェアを管理し、複数のアプリに資源を配って仲介する「全体の世話役」となる基本ソフトを、英字2文字で答えてください。