中級ではカーネル・システムコール・仮想メモリを見ました。上級では、スケジューラ・メモリ変換・並行性・隔離の内部へ。
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
カーネルの中と権限
- 構造 — モノリシック(Linux)/マイクロカーネル。ドライバや機能をどこに置くか
- 特権レベル(リング) — ユーザーモードとカーネルモードを分け、境界越えはトラップ(システムコール) で
- コンテキストスイッチ — プロセス/スレッドを切り替える。レジスタ退避・TLBフラッシュなどのコストがある
やさしく言うと(中級)
OSの核がカーネル。アプリ(ユーザー空間)と、ハードを直接触る領域(カーネル空間)を分け、境界越しに安全にやり取りします。
- システムコール — アプリがカーネルに処理を頼む窓口
- プロセス/スレッド — 実行単位。プロセスは独立、スレッドは同一プロセス内で並行。プロセスには実行/待機/レディなどの状態があり、切り替えながら進む
- ドライバ — 各ハードを操作するためのカーネルの部品
アニメーション『プロセスとスレッド』を開く
登場人物メモ:
- ※1 ユーザー空間/カーネル空間 — 権限を分けた2つの領域
- ※2 スケジューラ — どのプロセスにCPUを、いつ渡すかを決める係
スケジューリングとメモリ変換
- スケジューラ — 公平性(LinuxのCFS。カーネル6.6以降は後継のEEVDFに刷新)や優先度、リアルタイム制約で「次に走らせる」を決める
- ページング — メモリをページ単位で管理。ページテーブルで仮想→物理を変換
- TLB — 変換結果をキャッシュして高速化。ミスすると遅い
- デマンドページング — 使う瞬間にページを割り当て、足りなければ退避(スワップ)
- コピーオンライト — fork時などは共有し、書き込み時に初めて複製
やさしく言うと(中級)
- CPUスケジューリング — 多数のプロセスに、CPU時間を細切れ(タイムスライス/時分割)で順に割り当てる。これで見かけ上の同時実行=マルチタスクを実現する
- メモリ管理 — 仮想メモリで各プロセスに広い空間を見せ、足りなければスワップ
アニメーション『仮想メモリ(見せかけの広い空間)』を開く
- ファイルシステム — ストレージ上のデータを、名前とディレクトリで扱えるようにする
- 入出力 — ドライバ経由で周辺機器を操作する
並行性と隔離
- 同期プリミティブ — ミューテックス/セマフォ/スピンロック/futex。粒度と競合の設計
- 割り込みとDMA — 入出力はポーリングでなく割り込みで、大量転送はDMAでCPUを介さず
- コンテナ — namespace+cgroups でカーネルを共有しつつ隔離(VMより軽量)
- ファイルシステム — ジャーナリングで障害時の整合を守る、ページキャッシュで高速化
やさしく言うと(中級)
- 保護 — 権限(ユーザー空間)を分け、アプリがカーネルやハードを直接壊せないようにする
- 隔離 — プロセスごとにメモリ空間を分け、干渉を防ぐ
- 並行制御 — 共有資源はロック等で守る(不備はデッドロックの原因)
⚠️ 深部の不具合
- スラッシング — スワップが多発し、処理よりページ入替に時間を食う
- 優先度逆転 — 低優先度がロックを握り、高優先度が待たされる(優先度継承で対処)
- ロック競合/デッドロック — 粒度が粗い・順序が不整合
- コンテキストスイッチ過多 — スレッド乱立で切替コストが支配的に
- メモリ順序の落とし穴 — ロックレス並行処理での可視性・並べ替え
やさしく言うと(中級)
- スワップ多発 — 仮想メモリの使いすぎで、ストレージ待ちが増え激遅に
- デッドロック — 複数プロセスが互いのロックを待って止まる
- メモリリーク — 解放し忘れでメモリを食い潰す
- ゾンビプロセス — 親が終了状態を回収せず、プロセス表にPID枠だけが残る(CPU・メモリはほぼ消費しない)
- 暴走プロセス — 無限ループや解放漏れで、CPU・メモリを占有し続ける
関連する知識
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. 仮想メモリで、仮想アドレス→物理アドレスの変換を高速化するCPU内のキャッシュは?
問2. 低優先度のタスクがロックを握ったまま、高優先度のタスクを待たせてしまう「優先度逆転」への典型的な対処はどれ?
問3. スワップが多発し、本来の処理よりページの入れ替えに時間を食われて極端に遅くなる状態を指すのはどれ?
問4. 大量のデータ転送を、CPUをほとんど介さずに行うための仕組みはどれ?
問5. プロセスやスレッドを切り替える「コンテキストスイッチ」で生じるコストとして本文が挙げているのはどれ?
問6. Linuxカーネル6.6以降で、従来のCFSに代わって採用された新しいプロセススケジューラの名称を英字5文字で答えてください。
問7. fork時などにメモリをいったん共有し、書き込みが起きた瞬間に初めて複製する最適化を、カタカナで何と呼ぶ?
問8. コンテナが「1つのOSカーネルを共有しつつ、プロセスを隔離」するのに使う主なカーネル機能は?