ソフトウェアとOS — 部品を動かし、アプリを支える

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

概要 — まず全体をつかむ

中級ではカーネル・システムコール・仮想メモリを見ました。上級では、スケジューラ・メモリ変換・並行性・隔離の内部へ。

詳細 — 1段階ずつ追う

カーネルの中と権限

  • 構造 — モノリシック(Linux)/マイクロカーネル。ドライバや機能をどこに置くか
  • 特権レベル(リング) — ユーザーモードとカーネルモードを分け、境界越えはトラップ(システムコール)
  • コンテキストスイッチ — プロセス/スレッドを切り替える。レジスタ退避・TLBフラッシュなどのコストがある

スケジューリングとメモリ変換

  1. スケジューラ — 公平性(LinuxのCFS。カーネル6.6以降は後継のEEVDFに刷新)や優先度、リアルタイム制約で「次に走らせる」を決める
  2. ページング — メモリをページ単位で管理。ページテーブルで仮想→物理を変換
  3. TLB — 変換結果をキャッシュして高速化。ミスすると遅い
  4. デマンドページング — 使う瞬間にページを割り当て、足りなければ退避(スワップ)
  5. コピーオンライト — fork時などは共有し、書き込み時に初めて複製

並行性と隔離

  • 同期プリミティブ — ミューテックス/セマフォ/スピンロック/futex。粒度と競合の設計
  • 割り込みとDMA — 入出力はポーリングでなく割り込みで、大量転送はDMAでCPUを介さず
  • コンテナnamespace+cgroups でカーネルを共有しつつ隔離(VMより軽量)
  • ファイルシステム — ジャーナリングで障害時の整合を守る、ページキャッシュで高速化

⚠️ 深部の不具合

  • スラッシング — スワップが多発し、処理よりページ入替に時間を食う
  • 優先度逆転 — 低優先度がロックを握り、高優先度が待たされる(優先度継承で対処)
  • ロック競合/デッドロック — 粒度が粗い・順序が不整合
  • コンテキストスイッチ過多 — スレッド乱立で切替コストが支配的に
  • メモリ順序の落とし穴 — ロックレス並行処理での可視性・並べ替え

関連する知識

理解度チェック

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

1. 仮想メモリで、仮想アドレス→物理アドレスの変換を高速化するCPU内のキャッシュは?

2. 低優先度のタスクがロックを握ったまま、高優先度のタスクを待たせてしまう「優先度逆転」への典型的な対処はどれ?

3. スワップが多発し、本来の処理よりページの入れ替えに時間を食われて極端に遅くなる状態を指すのはどれ?

4. 大量のデータ転送を、CPUをほとんど介さずに行うための仕組みはどれ?

5. プロセスやスレッドを切り替える「コンテキストスイッチ」で生じるコストとして本文が挙げているのはどれ?

6. Linuxカーネル6.6以降で、従来のCFSに代わって採用された新しいプロセススケジューラの名称を英字5文字で答えてください。

7. fork時などにメモリをいったん共有し、書き込みが起きた瞬間に初めて複製する最適化を、カタカナで何と呼ぶ?

8. コンテナが「1つのOSカーネルを共有しつつ、プロセスを隔離」するのに使う主なカーネル機能は?

ソフトウェアとOS — 部品を動かし、アプリを支える | Kotowary