コレクション 01
デスクトップ(3)
Windows
Windows NT 系
Microsoft の OS。デスクトップで圧倒的シェアを持ち、業務ソフト・ゲーム・周辺機器の対応が広い。Windows Server としてサーバ用途にも展開する。
Linux
Unix 系
オープンソースの Unix 系 OS。サーバ・クラウドで事実上の標準だが、デスクトップ・組込み・Android の基盤としても広く使われる“どこにでもいる”OS。
macOS
Unix 系(BSD ベース)
Apple の Unix 系デスクトップ OS。洗練された UX とハード統合が魅力で、開発(特に Web/iOS)やクリエイティブ用途に人気。Apple のハードでのみ動く。
コレクション 04
組込み・その他(2)
Linux
Unix 系
オープンソースの Unix 系 OS。サーバ・クラウドで事実上の標準だが、デスクトップ・組込み・Android の基盤としても広く使われる“どこにでもいる”OS。
RTOS / 組込み OS
リアルタイム OS(RTOS)
マイコンや組込み機器で動く小型 OS の総称。「決められた時間内に必ず応答する(リアルタイム性)」を最優先し、家電・車載・産業機器・IoT を支える。
| 項目 | Linux | RTOS / 組込み OS |
|---|---|---|
| 区分 | デスクトップ / サーバ / 組込み・その他 | 組込み・その他 |
| 系統 | Unix 系 | リアルタイム OS(RTOS) |
| カーネル | モノリシック(Linux カーネル) | リアルタイムカーネル(プリエンプティブ) |
| ライセンス | オープンソース(GPL) | 様々(FreeRTOS=MIT、Zephyr=Apache 等) |
| 主な用途 | サーバ / クラウド | マイコン・組込み機器 |
操作して学ぶ
OSの系譜図
1961年のCTSSから Windows 11 まで、いま使っているOSには半世紀の家系があります。 実線はコードを受け継いだ派生・後継、 破線はコードを継がない設計の影響。 ドラッグとズームで探検し、気になるOSをクリックすると解説と関連記事が出ます。
ノードをクリックすると、そのOSの解説と関連記事がここに表示されます。
操作して学ぶ
CPUキャッシュ可視化 — なぜ連続アクセスは速いのか
連続・ストライド・ランダムでヒット率と実効レイテンシがどう変わるか。空間的・時間的局所性を動かして体感。
リファレンス
ポート・シグナル・errno 早見表 — 意味つきで検索
22 SSH・443 HTTPS、SIGKILL・SIGTERM、ENOENT・ECONNREFUSED… 日々引く3種を番号や意味で検索。
操作して学ぶ
CPUパイプライン可視化 — ストール・フォワーディング・分岐予測
フォワーディングを切ると依存が牙を剥く。ロード・ユースだけは1サイクル逃げ切れない理由も体感。
操作して学ぶ
銀行家アルゴリズム可視化 — デッドロックを起こさせない判定
資源を要求すると「承認すると全員終われなくなる」要求が拒否される。安全な実行順序も表示。
操作して学ぶ
ページ置換アルゴリズム可視化 — FIFO・LRU・Clock・OPTを同時比較
4方式を同じ参照列で横並び比較。フレームを増やすとFIFOだけフォルトが増えるBeladyの異常も再現できる。
解説記事
考え方・概念
プロセス・メモリ・ファイルシステムなど、OS が裏で何をしているか。まず TL;DR で。
/procと/sysによるカーネル情報の公開機構
topやpsが見ているのは実体のないファイル。procfsとsysfsはカーネル内部の状態を読み書きでそのまま操作できる窓口です。両者の実装と使い分けを原理から押さえれば、設定変更やデバッグの勘所がつかめます。
ACPIと電源・デバイス状態の抽象化
ノートPCの蓋を閉じて復帰する一連の動きを、ACPI の状態モデルから理解できます。S/C/D/G 状態の定義とサスペンド・ハイバネートの実装、ファームウェアと OS の責務分担を構造で押さえます。
B-treeとファイルシステムインデックス構造
巨大ディレクトリでもファイル検索が一瞬で終わる理由を、ext4のHTreeとXFS/BtrfsのB+Tree、ディスク向けノード設計の原理から正確に理解できます。
CFS(完全公平スケジューラ)の内部動作
Linuxが各タスクへ公平にCPUを配る仕組みが原理から分かります。赤黒木とvruntime、nice値の重み付け、遅延と粒度の調整まで一気に押さえられます。
cgroup v2の階層モデルとコントローラ
コンテナの資源制御がなぜv2で一本化されたのかが腑に落ちます。統一階層・委譲・no internal processの制約を設計判断から押さえ、CPU/IO/memoryの効き方を予測できるようになります。
CPUアフィニティとロードバランシングの内部
なぜピン留めしたプロセスが速くなり、isolcpusで隔離した瞬間に安定するのかが腑に落ちます。スケジューラドメイン・定期/アイドル/wakeupの3種の均し方・キャッシュ温存を原理から押さえ、配置を設計判断で決められるようになります。
CPUモードと特権リング・保護の仕組み
なぜユーザーアプリはカーネルメモリを壊せないのか。x86のリング0〜3と特権命令、ページ保護、SMEP/SMAPまで原理で押さえ、現代OSが2リングに集約した設計判断まで腑に落とせます。
CRIU(チェックポイント・リストア)
動いているプロセスを止めずに丸ごと保存し、別ホストで続きから再開する。コンテナのライブマイグレーションを支える仕組みと、復元できない資源の壁を原理から理解できます。
CXLメモリ拡張とプーリング
サーバーのメモリ容量とコストのジレンマが解ける仕組みが分かります。CXL.memによる拡張・プーリングと、新たなレイテンシ階層の設計判断を原理から押さえられます。
DMAとIOMMUによるデバイスメモリアクセス
デバイスがCPUを介さず直接メモリへ書き込む仕組みと、その暴走を防ぐIOMMUの原理がわかります。スキャッタギャザーやコヒーレンシ管理まで押さえ、I/O性能と安全性の勘所を掴めます。
eBPFとカーネルの拡張機構
カーネルを再ビルドせず、再起動もせずに振る舞いを足せる。検証器が安全を保証し、JITが実速度で走る、その仕組みを原理から解き明かします。
EEVDFスケジューラとCFSからの移行
Linux 6.6で標準になったEEVDFの仕組みが原理から分かります。lag・eligibility・仮想デッドラインの三点で、CFSが苦手だったレイテンシ要求を正確に扱えます。
ELFバイナリのロードとリンカ・ローダの内部
実行ファイルをダブルクリックしてから最初の命令が走るまでの空白が埋まります。プログラムヘッダのmmap配置、ld.soの再配置とシンボル解決、PLT/GOTの遅延束縛を原理から解剖します。
Exokernelとアプリケーション特化OSの原理
OSの抽象化が遅いのは「全員に同じ抽象を押しつける」から。Exokernelは資源を生のままアプリへ晒し、保護だけ担う。なぜ特化最適化が解禁され、誰でもlibOSを差し替えられるのかを原理から解きます。
false sharingとキャッシュライン設計
並列化したのに遅い原因の多くはfalse sharing。無関係な変数の同一ライン同居を、パディングとアラインメント、per-CPU設計で消し、コア数に比例してスケールさせる勘所をつかめます。
futexの内部動作とユーザ空間ロックの実装
ロックは取れて当たり前。競合しない普通の場合はシステムコールを一切呼ばずユーザ空間で完結し、本当に待つときだけカーネルへ落ちる――その「速いロックの正体」futexを原理からつかめます。
gVisor(ユーザー空間カーネル)
コンテナの脆弱性はホストカーネル直撃になりがち。システムコールをユーザー空間で横取り・再実装するgVisorのSentryなら、性能を落としつつも攻撃面を大きく縮小できます。
I/OスケジューラとブロックI/O層
HDD時代の常識がSSDで覆る理由を内部から理解。エレベータからblk-mqまで、ディスク要求の並べ替えがどう速さを生むかが一本でつながります。
initシステムの系譜(SysV init・Upstart・systemd)
なぜ起動はsystemdで速くなったのか。PID1の役割から、SysV initの逐次起動、Upstartのイベント駆動、systemdの依存解決と並列化まで、設計の進化を系統で整理し起動を内部から読み解けるようにします。
inotify/fanotifyによるファイルシステム監視
ファイル変更をポーリングなしで検知する仕組みを原理から解説。inotifyのwatch管理とイベントキュー、fanotifyの権限イベントによるアクセス遮断、そして大規模監視で詰まる限界までつかめます。
IPCの設計比較(パイプ・SysV・POSIX・mq)
同じ「プロセス間通信」でも、帯域・レイテンシ・名前空間・永続性はまるで違います。パイプからSysV/POSIX共有メモリ、Unixドメインソケットまで、選定の軸を系統で整理し迷わず選べるようになります。
KVMとQEMUによる仮想マシンの実行モデル
なぜKVMだけでVMが動かず、QEMUと組むのか。カーネルがVMX/SVMを握り、QEMUがデバイスを演じる分業を、vCPUスレッドとvirtioまで原理で押さえ、仮想化の性能勘所を掴めます。
Landlock(非特権サンドボックス)
root権限もCAP_SYS_ADMINも要らず、プロセス自身がファイルアクセスを絞り込める。Landlockのルールセットとホワイトリスト方式を原理から解説します。
Linux Security Module(LSM)とアクセス制御フック
SELinuxやAppArmorはどこでアクセスを止めているのか。カーネル内に張られたLSMフックという共通の差し込み点から、型強制とパス基準の設計思想の違いまで原理で解き明かします。
Linuxケーパビリティによる特権分割
root権限を全か無かではなく必要な一片だけに絞れます。5つのケーパビリティ集合とファイルケーパビリティの原理から、setuidより安全で壊れにくい特権設計を解き明かします。
Linuxディストリビューション派生図(Debian・Red Hat・Arch系)
なぜディストリビューションごとにapt・dnf・pacmanと流儀が違うのか。Debian・Red Hat・Arch・SUSEの派生関係とパッケージ管理の系譜を年代と表で一枚に俯瞰し、選定の勘所を整理します。
Machメッセージパッシングとポート権の仕組み
マイクロカーネルIPCの原典であるMachを、ポート権・メッセージ・out-of-line転送から正確に理解できます。ケーパビリティ型IPCの設計判断を原理から押さえられます。
macOS/XNUカーネルとMach・BSDのハイブリッド構造
macOSやiOSが堅牢さと速さを両立できる理由は、XNUがMachとBSDを1つのアドレス空間に同居させた折衷設計にあります。Machポートの仕組みからI/O Kitまで内側を解き明かします。
NUMAとメモリアクセス局所性
マルチソケットで性能が伸びない理由が腑に落ちます。ノード間アクセスの非対称コスト、メモリポリシー、自動NUMAバランシングを設計判断の軸で押さえられます。
OOM Killerとメモリ過剰コミットの設計
Linuxはメモリを実体より多く約束し、足りなくなるとプロセスを殺す。なぜそんな設計なのか、誰が犠牲になるのかを押さえれば、本番で突然プロセスが消える事故の原因と対策が腑に落ちます。
OSスケジューラの系譜(O(n)→O(1)→CFS→EEVDF)
Linuxスケジューラがなぜ4世代も作り直されたかが一本の線で分かります。計算量・公平性・レイテンシという設計動機の連鎖で、各方式の必然性をつかめます。
OSの起動後メモリ初期化とブートメモリアロケータ
通常のアロケータが無い起動初期に、カーネルはどう自分用メモリを確保するのか。メモリマップから memblock、buddy、struct page 配列までを原理から追い、起動時メモリ問題を読み解けます。
OS仮想化技術の系統(ハイパーバイザとコンテナ)
Type-1とType-2、準仮想化と完全仮想化、コンテナの違いを系統で一望できます。VT-xやEPTが何を解決したのかまで原理から整理し、選定の軸を手に入れます。
perfとハードウェアパフォーマンスカウンタ
推測でなく実測でボトルネックを特定できる。CPU内蔵のカウンタでキャッシュミスや分岐予測ミスを数え、低オーバーヘッドで原因に迫る仕組みを原理から解説します。
POSIXスレッドとカーネルスレッドのマッピングモデル
なぜLinuxのスレッドは1:1なのか。N:1やM:Nが理論上は美しいのに実装が廃れた理由を、スケジューラ・シグナル・プリエンプションの実装制約から腑に落とせます。
ptraceとデバッガ・トレーサの仕組み
gdb がブレークポイントで止め、strace が全syscallを覗ける理由を、ptraceという1本のシステムコールの内部動作から腑に落とせます。INT3挿入・レジスタ操作・停止と再開の原理まで押さえます。
RCU(Read-Copy-Update)の原理
読み取りをロックもアトミック操作もゼロにする同期の極北がRCU。grace periodとクォースセント状態という発想で、なぜLinuxカーネルが大量採用したのかを原理からつかめます。
RCUの実装詳細(grace period検出とコールバック)
RCUの原理は分かっても「数百コアでgrace periodをどう検出するのか」が謎のまま――Tree RCUの階層集約と状態機械、call_rcuの非同期処理を追えば、その実装の巧みさが腑に落ちます。
rootlessコンテナとuser名前空間による非特権隔離
root権限なしでもコンテナを動かせるのはなぜか。user名前空間のID写像とsubuid/subgidの仕組みから、newuidmapやfuse-overlayfsが補う制約までを原理から解き明かします。
Rust for Linux(カーネルモジュールのRust化)
メモリ破壊バグの7割はカーネルコードが温床。所有権とコンパイル時検査で、そのクラスごと排除できる仕組みを原理から解説します。
SCHED_DEADLINEとCBS(Constant Bandwidth Server)
締め切りを必ず守るスケジューリングの原理が分かります。runtime/deadline/periodの3パラメータ、EDFとCBSによる帯域分離、許容制御の不等式までを内部動作から押さえられます。
seccompによるシステムコールフィルタリング
信頼できないコードに渡すカーネルの窓口を最小化できる。プロセスが呼べるシステムコールを絞り、攻撃面を削る seccomp-bpf の仕組みを原理から解説します。
seL4と形式検証されたマイクロカーネル
カーネルにバグが無いことを「数学的に証明済み」と言い切れます。seL4のケーパビリティ制御・IPC高速化・形式証明が保証する範囲と限界を原理から押さえられます。
SSDとFTL(Flash Translation Layer)の影響
SSDが速い理由と突然遅くなる理由を内部から理解。FTLとウェアレベリング、書き込み増幅とTRIMの連携まで、I/O設計の勘所が一本でつながります。
systemdのアーキテクチャとユニット・依存解決
systemctlの裏で何が動くかが構造から腑に落ちます。PID1マネージャ・ユニット依存グラフ・socket活性化・cgroup隔離・journald/logindの役割を内部まで追い、サービスの挙動を予測できます。
TPMによる測定起動とリモートアテステーション
起動チェーンの改ざんを後から検知可能にする仕組みを内部から理解できます。PCR拡張・シーリング・アテステーションの原理を押さえ、ディスク暗号化やゼロトラスト設計の判断力が身につきます。
tracepointとftrace・カーネルトレーシング機構
本番カーネルを止めず、再ビルドもせずに「何が・いつ・どれだけ」を覗ける。tracepointとftraceの仕掛けを、低オーバーヘッドの理由まで含めて原理から腑に落とせます。
Transparent Huge Pages(THP)と巨大ページの内部
巨大ページでTLBミスを減らし性能を上げたいが、断片化やフォルト遅延が怖い。THPの自動昇格と割当のしくみ、hugetlbfsとの使い分けを内部から理解できます。
Unixドメインソケットとfd受け渡し
特権プロセスが開いたソケットやファイルを非特権ワーカーへ安全に手渡す――その仕組みがSCM_RIGHTSです。双方向通信からfd受け渡し、権限移譲、abstract socketまで、権限分離設計の土台が腑に落ちます。
Unix系統樹と系譜(BSD・System V・Linux派生図)
なぜBSDとLinuxはライセンスもカーネルも違うのか。1969年の一本のUnixから現代OSへ枝分かれした系譜を年代と表で一枚に俯瞰し、設計思想の根を整理します。
userfaultfdによるユーザー空間ページフォルト処理
ページフォルトの解決をカーネルからユーザー空間へ肩代わりさせる仕組みで、ライブマイグレーションのダウンタイムを劇的に縮められます。
VFS(仮想ファイルシステム)層の抽象化
ext4もNFSもprocも同じopen/readで触れるのはVFSのおかげ。inode・dentry・file・superblockの4オブジェクトとdキャッシュを原理から押さえれば、パス解決の速さとマウントの仕組みが腑に落ちます。
virtioとパラ仮想化I/Oの仕組み
ゲストI/Oが遅い原因はVM exitの乱発。virtioが共有リングでI/Oをまとめ、vhostでデータ経路をカーネルへ降ろす原理を押さえれば、仮想マシンの性能勘所が掴めます。
vmallocと高位メモリ・カーネルアドレス空間レイアウト
カーネルの仮想アドレスがどう区画されているかが腑に落ちます。direct map/vmalloc/vmemmap/fixmap の役割分担と、KASLR・ハイメモリの背景を64bitの実レイアウトで押さえられます。
WASMランタイムによるサンドボックス化
プロセスやVMより軽い隔離を、起動1ms未満・容量数MBで実現できる。WASMのスタックマシン検証とWASIのcapabilityモデルが攻撃面をどう縮小するかを原理から整理します。
Windows NTカーネルのアーキテクチャ
WindowsがUnix系と何が違うのかを、層構造とオブジェクト指向設計から一気に掴めます。Executive・Kernel・HALの分担、ハンドルとオブジェクトマネージャ、I/Oマネージャとドライバスタックを原理から整理します。
WSLとWindowsのLinux互換レイヤの仕組み
WSL1がなぜ速いのに非互換が残り、WSL2がなぜ互換だがファイルが遅いのか。syscall変換と軽量VMの違いを内部から押さえれば、どちらを選ぶべきか自分で判断できるようになります。
XDPとAF_XDPによる高速パケット処理
カーネルスタックを通さずにライン速度でパケットを裁ける。XDPのフックとDROP/PASS/TX/REDIRECT、AF_XDPのゼロコピー、DPDKとの設計差まで、Linux高速I/Oの正体を原理から掴めます。
アトミック命令とリードモディファイライトの原理
並行処理が壊れる根本原因は、読んで・変えて・書くの3手が割り込まれること。LOCKプレフィックスやCAS、LL/SCがこれを1手にまとめる仕組みを、CPUとキャッシュの動作から理解できます。
アドレス変換キャッシュの階層(TLB・PWC・ASID)
アドレス変換はなぜ遅延の支配要因にならないのか。L1/L2 TLBとページウォークキャッシュ、PCIDによるフラッシュ回避、シュートダウンのIPIコストを原理から押さえ、性能の勘所を掴めます。
イベント駆動I/Oモデルの系譜(select/poll/epoll/kqueue)
なぜLinuxはepoll、BSDはkqueue、Windowsはまったく別物のIOCPなのか。同じ多重化I/Oでも設計思想が割れた経緯を、O(n)スキャンから登録モデル・通知/完了モデルまで系統で整理します。
カーネルのRCUと並行データ構造の設計パターン
ロックフリー構造で必ずぶつかる「いつメモリを解放してよいか」を、RCU・ハザードポインタ・エポック回収の三択で整理できます。読み取りコストと回収レイテンシのトレードオフを原理から選び分けられます。
カーネルのロックフリー同期とCAS
ロックを使わずに並行データ構造を安全に更新する仕組みを、CASという1命令から原理で理解できます。ABA問題やウェイトフリーとの違い、楽観的同時実行の考え方まで一気につかめます。
カーネルのロック機構(spinlock・mutex・seqlock)
カーネルのロックは種類ごとに「眠れる場所・眠れない場所」が決まっている。spinlock・mutex・rwlock・seqlock・RCUの使い分けと、割り込み下での制約、スケールするロックの仕組みまでつかめます。
カーネルパニックとwatchdog・ハング検出
サーバーが固まる障害を「なぜ・どこで止まったか」から切り分けられます。パニック/Oops/BUGの差、ソフト/ハードロックアップとhung task検出、NMIウォッチドッグ、再起動・ダンプの動作までを原理から整理します。
カーネルプリエンプションとレイテンシ
カーネル内部のどこまで横取りを許すかでシステムの応答性が決まります。4つのプリエンプションモデルとリアルタイム性・スループットの設計判断を原理から押さえられます。
カーネルモードとユーザーモード
OS の中核だけを特権で動かしてシステムを守る、カーネルモードとユーザーモードの2層構造。アプリがシステムコール経由でカーネルに処理を頼む流れまで理解できます。
カーネルモジュール署名とLockdownモード
root権限を奪われてもカーネルの改ざんを防げます。モジュール署名検証とLockdownモードが塞ぐ昇格経路、セキュアブートとの連携までを内部動作から解説。
グリーンスレッドとユーザ空間スケジューラの原理
goroutineが数万本軽く回るのに、なぜOSスレッドは数千で頭打ちなのか。ランタイムがスタックとスケジューラを自前で持つ仕組みを、協調/プリエンプティブの境目まで原理から腑に落とせます。
コアダンプとクラッシュ解析の仕組み
再現しない本番クラッシュも落ちた瞬間のメモリ像から死因を特定できる。コアダンプ生成とELFコアの中身、kdumpのカーネル解析を原理で押さえる。
コピーオンライト(CoW)
コピーオンライトは、コピーを要求された時点では実体を共有し、書き込みが起きた瞬間に初めて複製する遅延戦略です。fork やスナップショットを高速・省メモリにします。
コピーオンライト型ファイルシステム(ZFS/Btrfs)
上書きしないファイルシステムなら、スナップショットが一瞬で取れ、サイレントなデータ破損まで検知できます。ZFSとBtrfsがどうやってそれを実現するかを内部構造から解き明かします。
コルーチンとステートマシン変換の原理
async/awaitは魔法ではなく、コンパイラがコードを状態機械へ書き換える機械的変換です。スタックフルとスタックレスの違い、サスペンド/レジュームの実コストまで原理から腑に落とせます。
コンテキストスイッチ
1つの CPU を多数のプロセスで同時実行しているように見せる仕組み。レジスタなどの状態を退避・復元して切り替えるコンテキストスイッチの正体と、その代償を解説します。
コンテナイメージのレイヤとコンテンツアドレッシング
同じベースを使うイメージがディスクをほとんど食わず、ビルドが2回目から一瞬で終わる理由がわかります。レイヤのtar差分・ダイジェスト・コンテンツアドレッシングを原理から解説します。
コンテナのオーバーレイファイルシステム(OverlayFS)
数百MBのイメージから数十個のコンテナを瞬時に起動できるのは、ディスクを複製していないからです。OverlayFSがレイヤ共有とコピーアップをどう実現するか、内部構造から解き明かします。
コンテナランタイムの内部(runc・OCI仕様)
コンテナ起動の中身を分解すると、runc が namespace・cgroup・capability・seccomp を仕様どおり組み立てているだけと分かる。OCI仕様と high/low-level の分業を原理から押さえます。
シグナル
終了して、中断してといった合図をプロセスへ番号で送る軽量な非同期通知がシグナル。OS やプロセスがどう送り、受け手がハンドラでどう応じるかを解説します。
シグナル配送の内部とシグナルセーフティ
ハンドラ内の malloc がなぜデッドロックを生むのか、その根を断てます。ペンディング集合・ブロックマスク・配送タイミングからasync-signal-safeの制約までを原理から解説します。
システムコールテーブルとvDSOの内部
システムコール番号がなぜ「永久欠番」になるのか、なぜvDSOだと時刻取得が速いのかが腑に落ちます。ディスパッチテーブルの仕組みとvsyscall廃止のセキュリティ経緯まで原理から押さえられます。
システムコールとカーネル
アプリはなぜファイルやネットワークを直接触れないのか。OS の中核カーネルへ安全に処理を依頼する窓口がシステムコール。世界をユーザーとカーネルに分ける保護の仕組みを図解で。
システムコールのABIと呼び出し機構の内部
システムコールが「ただの関数より重い」本当の理由を、命令レベルで腑に落とせます。syscall命令のモード遷移、レジスタ規約、vDSO、seccompまで原理から押さえます。
ジャーナリングファイルシステムの内部(ext4/XFS)
クラッシュしてもファイルシステムが壊れない理由を、ext4のジャーナルとエクステント、XFSのB+TreeとAllocation Groupの内部構造から正確に理解できます。
スケジューラの状態遷移とランキュー構造
プロセスがどの状態を行き来し、カーネルがどの構造で次の1つを選ぶのかが原理から分かります。状態遷移とper-CPUランキュー、ロードバランシングまで一気に押さえられます。
ストレージ階層とキャッシュ階層の統合設計
なぜ速いメモリほど小さいのか、その理由が腑に落ちます。レジスタからディスクまでの記憶階層を、各層のレイテンシ・容量・コストと、OSがどの層をどう管理するかまで一気通貫で俯瞰します。
スピンロックの設計(ティケット・MCS・qspinlock)
スピンロックがコア数に逆スケールする正体はキャッシュ行の奪い合い。ティケットで公平に、MCSでコア局所スピンに、qspinlockで両者の長所を統合するまで、設計の進化を原理から追えます。
スラブアロケータの内部(SLUB)詳解
kmallocがロックなしで一瞬に返る仕組みが、per-CPUキャッシュとフリーリストの構造から腑に落ちます。partial/full slabの管理、フリーポインタ難読化、SLAB/SLOBとの設計差までキャッシュ効率の観点で解剖します。
スレッドプール
スレッドの生成・破棄コストを省き、同時実行数を抑えつつ多数のタスクをさばく。あらかじめ作ったスレッドを使い回すスレッドプールの仕組みと使いどころを解説。
スワッピングとページング機構の内部
メモリ不足でも動き続ける裏側を、匿名ページのスワップアウトからkswapdのリクレイム、swappinessの効き方、zram/zswapの圧縮スワップまで内部動作で理解できます。
セマフォとミューテックスの古典的同期問題
セマフォの計数/二値、生産者消費者・読者書込者・食事する哲学者をどう定式化し解くかを原理から整理。ミューテックスとの所有権の違いまで押さえれば、並行設計のバグを構造で潰せる。
ゼロコピーI/Oの技法(sendfile・splice・mmap)
ファイル送信のCPUとメモリ帯域を食い潰すのは「無駄なコピー」です。sendfile・splice・mmap・MSG_ZEROCOPYがコピー回数とモード切替をどう削るのかを原理から掴み、適材適所で選べるようになります。
ゾーンドストレージ(ZNS)
SSDの寿命と速度を削るFTLの変換表とGCを、ホスト側の追記制約で丸ごと引き剥がす発想を原理から理解。ログ構造ファイルシステムとの相性まで一本でつながります。
ソケットとTCP接続のカーネル状態管理
ackなのに接続が詰まる、backlog溢れでSYNが捨てられる――その原因をカーネル内部から解明。送受信キュー・acceptキュー・TCP状態機械・TIME_WAITの実体が腑に落ちます。
ゾンビプロセスと孤児プロセス
残り続けるゾンビプロセスと親を失った孤児プロセスは何が違い、どう片付くのか。前者は wait での回収、後者は init の引き取りで処理される仕組みを整理。
タイマ割り込みとタイマホイールの構造
何万個のタイマを抱えても登録・取消を平均O(1)で扱える理由が分かります。現行Linuxの段別粒度と非再カスケード設計、hrtimerの赤黒木との使い分けまで押さえられます。
ダイレクトI/OとバッファドI/Oの設計判断
データベースが自前バッファを持ちO_DIRECTを選ぶ理由が腑に落ちます。ページキャッシュ経由のバッファドI/Oとダイレクトの違い、二重バッファリングを避ける設計判断を原理から押さえます。
デッドロック
プロセスが互いの資源を待ち合って永久に止まるデッドロック。なぜ起きるのかを発生条件から理解し、予防・回避・検出で詰まりを防ぐ手法まで整理します。
デッドロック回避と銀行家アルゴリズム
デッドロックの4条件から銀行家アルゴリズムの安全状態判定までを原理で押さえられます。回避・防止・検出・無視の4戦略をどう使い分けるか、なぜ汎用OSが回避を採らないのかまで設計判断の根拠が分かります。
デバイスドライバモデルとカーネルモジュールの仕組み
ホットプラグでデバイスが勝手に使えるのも、modprobe 一発で機能が増えるのも、device・driver・bus の三角形と参照カウントが支えています。sysfs の階層からモジュールのシンボル解決まで内側を解き明かします。
デマンドページングとページフォルト処理
プログラムが必要としたページだけを実際に触れた瞬間に読み込む仕組みと、ページフォルトでカーネルが何を判定し何を埋めるのかを、マイナー・メジャーの分岐から内部動作で理解できます。
ネストした仮想化とシャドウVMCS
VMの中でVMを動かす仕組みを原理から理解できます。物理CPUは一段しか仮想化を持たないのに、なぜ多段が成立するのか。トラップ転送、シャドウVMCS、シャドウEPTによる多段変換の畳み込みと、その性能オーバーヘッドの正体を押さえられます。
ネットワークスタックのカーネル内データパス
パケットがNICからアプリへ届くまでカーネル内で何が起きるか。sk_buffのゼロコピー、NAPIの割り込み緩和、GRO/TSOのオフロードまで、Linuxネットワークの速さの正体を原理から掴めます。
ハードウェア仮想化拡張の内部(VT-x/AMD-V)
ゲストを無改変・高速に走らせる仕組みを、CPUの動作モードから解き明かします。VMX root/non-rootとVMCS、VM exitの遷移、EPT/NPTの二段変換まで原理で押さえ、仮想化の性能勘所を掴めます。
ハイブリッドコア(P-core/E-core)とスケジューラ対応
なぜ高性能コアと省電力コアが混在すると素朴な負荷分散が裏目に出るのかが腑に落ちます。Thread DirectorのITMTヒントとEASの消費電力モデルを原理から押さえ、配置がどう決まるかを設計判断で読めるようになります。
ファイルシステム
ただのバイトの並びでしかないディスクを、ファイルとディレクトリという扱える形に変えるファイルシステム。メタデータ・inode・ブロックで中身と位置をどう管理するかが分かります。
ファイルシステムのアロケーション戦略
大きなファイルが断片化せず高速に読める理由を、ブロックグループ・遅延割当・エクステント・予約領域というアロケータの設計判断から原理で理解できます。
ファイルシステムのクラッシュ整合性とfsync保証
電源断でデータが壊れない仕組みと、fsyncが本当に守る範囲がわかります。ジャーナリング・CoW・ログ構造に共通する原理と、書き込み順序とバリアの正しい使い方まで整理します。
ファイルシステムのマウントと名前空間の伝播
コンテナでホストのデバイスだけ見せて他は隔離する、その匙加減はマウント伝播で決まります。shared/slave/private/unbindableの4種別とbind/rbindの原理を、マウントツリー構造から正確に解き明かします。
ファイルディスクリプタとオープンファイルテーブルの構造
dupやforkでfdを共有するとオフセットまで連動するのはなぜか。fdテーブル・オープンファイル記述・inodeの三層構造を押さえれば、共有の範囲とリダイレクトの挙動が原理から読めるようになります。
ファイルロック機構(flock・fcntl・リース)
なぜforkでfcntlロックが消えるのか、なぜ同一プロセスの二重openでロックが自滅するのか。flock・fcntl・OFDロック・リースの所有権モデルを押さえれば、ファイルロックの落とし穴を原理から回避できます。
ブートチェーンの内部(UEFI・ブートローダ・initramfs)
電源投入から init 起動まで、誰がどの順で制御を渡すのか。UEFI・Secure Boot・GRUB・カーネル展開・initramfs の各段を内部動作まで追い、起動トラブルを切り分けられる地力がつきます。
プロセスアドレス空間のレイアウトとASLR
セグメンテーション違反やスタックオーバーフローが起きる番地の理由が腑に落ちます。テキストからスタックまでの仮想配置と、ASLRがどこをどう動かすかを内部から解剖します。
プロセススケジューリング
1つの CPU を多数のプロセスで代わりばんこに使う仕組み。誰にどれだけ CPU を渡すかを決めるスケジューラの役割と、代表的な方式の考え方が分かります。
プロセスとスレッド
隔離を取るか、軽さ・共有を取るか。独立したメモリを持つプロセスと、その中でメモリを共有して走るスレッドの違いを押さえ、使い分けの判断軸が身につきます。
プロセス会計とリソース使用量の計測機構
topやmemory.statの数字が「どう作られ、どこまで正確か」を原理から押さえれば、メトリクスの誤読を避けられます。rusageの集計、CPU時間のuser/sys/steal按分、cgroup統計とPSIまで一気に整理します。
プロセス間通信(IPC)
互いのメモリを覗けない独立プロセス同士で、データや合図をやり取りするプロセス間通信(IPC)。パイプ・共有メモリ・ソケットなど手段ごとの向き不向きが分かります。
プロセス生成の内部(fork/clone/vfork/exec)
fork が巨大プロセスでも一瞬で複製できる理由を、CoWとページテーブルの実装から腑に落とせます。clone のフラグ設計、vfork の最適化、exec のイメージ置換まで原理から押さえます。
ブロックI/O層とマルチキュー(blk-mq)の構造
NVMeの数百万IOPSをカーネルが取りこぼさない理由を構造から理解。bioとリクエストの正体、単一キューが頭打ちになった必然、二段キューの設計までが一本でつながります。
ページキャッシュとライトバックの仕組み
ファイルI/Oが速い理由はカーネルがメモリに溜め込んでいるから。ページキャッシュとライトバックの原理を押さえれば、fsyncが守る範囲とデータが消える条件まで腑に落ちます。
ページングとスワップ
物理メモリより大きなプログラムを動かせる理由がページング。仮想メモリを固定長のページで割り当て、足りなければスワップで補う流れとページフォルトの仕組みを解説します。
ページ置換アルゴリズム(LRU・Clock・WSClock)
物理メモリが満杯のときどのページを追い出すかで、スワップの頻度とシステム速度が決まります。FIFOからLRU・Clock・WSClockまで、各アルゴリズムの原理とBeladyの異常、スラッシングの数理を整理します。
ホットプラグ(CPU・メモリ)とオフライン化の機構
クラウドのCPU/メモリ増減や障害コア切り離しが、なぜ稼働中に無停止でできるのかが腑に落ちます。オンライン/オフラインの状態遷移とタスク退避、メモリのセクション管理を原理から押さえられます。
マイクロVM(Firecracker・gVisor)の隔離設計
マルチテナントで信頼できないコードを安全に走らせたい。コンテナの弱い隔離を、軽量VMのFirecrackerとユーザー空間カーネルのgVisorがどう補い、攻撃面と性能をどう天秤にかけるかを原理で押さえます。
マイクロカーネルとモノリシックカーネルの設計比較
カーネルをどこまで太らせるかで、性能・堅牢性・拡張性は大きく変わります。モノリシックからマイクロまで主要アーキテクチャの設計トレードオフを原理から整理できます。
メモリcgroup(cgroup v2)によるリソース制御の内部
コンテナのメモリ制限が「なぜ効くのか」が腑に落ちます。課金・リクレイム・low/high/maxの階層制限・PSIまで原理から押さえ、OOMやスロットルの挙動を予測できるようになります。
メモリアロケータの内部(buddy systemとslab)
mallocが速い理由と断片化が起きる理由が、カーネルの内側から腑に落ちます。物理ページを配るbuddy、小物を配るslab、ユーザー空間のアリーナまで一気通貫で解剖します。
メモリオーダリングとメモリバリア
ロックなしの並行処理で「なぜか壊れる」の正体は、CPUとコンパイラによる命令の並べ替え。acquire/release/seq_cstとメモリバリアの仕組みを、ハードウェアの動作からつかめます。
メモリコンパクションと断片化対策
空きメモリは十分あるのに巨大ページ確保が失敗する謎が解けます。外部断片化の発生機構、移動可能ページの分離配置、コンパクションによる連続領域づくりまでを内部動作で押さえられます。
メモリバリアの種類とアーキテクチャ別の振る舞い
x86で動いたロックフリーコードがARMで壊れる理由を、TSOと弱順序の差から原理でつかめます。smp_mb/rmb/wmbとacquire/releaseの対応、コンパイラバリアとの違いまで具体例で整理します。
メモリマップトファイル(mmap)
read/write 呼び出しを介さず、ファイルをポインタ経由でメモリのように読み書きできるメモリマップトファイル(mmap)。大きなファイルを効率よく扱う仕組みが分かります。
メモリマップトファイルとページフォルトの連携
巨大ファイルを read/write の繰り返しなしに扱える mmap が、ページフォルトと結びついてどう遅延ロードし、CoW や書き戻しを実現するのかを原理から理解できます。
メモリ回収の優先順位とLRUリスト管理
メモリ逼迫時にカーネルがどのページから捨てるかは、active/inactiveの二段LRUとrefault検出で決まります。回収の優先順位を理解すれば、スラッシングやキャッシュ消失の原因まで読み解けます。
メモリ階層とキャッシュコヒーレンシ(MESIプロトコル)
マルチコアで各コアが同じデータを別々にキャッシュしても値が壊れないのはなぜか。MESIプロトコルとフォルスシェアリングの正体を、ハードウェアの動作から掴めます。
メモリ管理(スタックとヒープ)
メモリリークやスタックオーバーフローの正体が見える。自動で片付く速いスタックと、自分で確保して管理する自由なヒープ。2つの領域の違いを押さえる入門です。
メモリ重複排除(KSM)と同一ページ共有
同じVMを多数詰め込むとメモリが先に枯れる。KSMは内容が同一のページを1枚へ統合してRSSを削り、VM密度を底上げします。安定木による走査の仕組みとサイドチャネルの代償まで理解できます。
メモリ整合性モデルとシーケンシャル一貫性
並行コードが「ハードでは動くのに理論では未定義」になる理由を、整合性モデルの階層から原理でつかめます。SC・TSO・PSO・弱順序・リリース一貫性の強弱と、言語メモリモデルがなぜ要るかを整理します。
ユニカーネルとライブラリOSの設計思想
アプリと最小限のOS機能を1つのアドレス空間に静的リンクし、極小・高速起動・小さな攻撃面を狙うユニカーネルの原理を、Exokernelからの系譜と特化の代償までまとめて整理できます。
ライブパッチング(kpatch/livepatch)の仕組み
再起動なしでカーネルの脆弱性を塞げる。ftraceで関数を丸ごと差し替え、全タスクが安全点を通った瞬間に切り替える、その整合性の作り方を原理から解説します。
ライブロックとスタベーションの発生と対策
止まっていないのに進まないライブロックと、特定の処理だけ永久に待たされるスタベーションの正体が分かります。なぜ譲り合いが膠着を生むのか、バックオフ・ランダム化・公平性保証がどう解くかを原理からつかめます。
リアルタイムLinux(PREEMPT_RT)の設計
汎用Linuxを実時間化する設計判断が原理から分かります。割り込みのスレッド化、スピンロックのmutex化、優先度継承で最悪レイテンシをマイクロ秒級まで詰める仕組みを押さえられます。
リアルタイムスケジューリング(SCHED_FIFO/RR/DEADLINE)
締め切りを守るスケジューリングの原理が分かります。SCHED_FIFO/RRの固定優先度と、CBSとEDFで帯域を保証するSCHED_DEADLINE、優先度逆転と継承プロトコルまで一気に押さえられます。
リアルタイムスケジューリングのスケジューラビリティ解析
周期タスクが本当に締め切りを守れるかを設計段階で証明できます。RM/EDFの最適性、Liu-Layland境界、利用率テストと応答時間解析まで、机上で可否を判定する数理を一気に押さえられます。
リーダ・ライタロックとシーケンスロックの内部
読み取りが圧倒的に多いのにライタを排他しすぎて遅い――その悩みを、rwlockの優先度設計とseqlockの楽観的読み取りという2つの武器の原理からほどき、読み書き比率で正しく選べるようにします。
ログ構造化ファイルシステムとF2FS
なぜランダム書き込みをすべて追記に変えると速くなるのか、その代償であるガベージコレクションのコストまで、LFSの原理とF2FSのフラッシュ最適化から正確に理解できます。
ワーキングセットモデルとスラッシングの数理
メモリを増やしても遅いのは多重度の上げ過ぎが原因かもしれません。ワーキングセットの定義からPFF制御、スラッシングが崖のように起きる閾値と多重度制御までを数理で押さえ、原因を切り分けられます。
仮想記憶(ページング)
物理メモリ以上に使え、各プロセスに自分専用の広いメモリがあるように見せる。アドレスを翻訳し足りなければディスクへ逃がす、仮想記憶とページングの仕組み。
仮想記憶のアドレス変換とMMU/TLBの内部
アクセスのたびに走るアドレス変換が、なぜ遅くならないのか。多段ページテーブルとMMU、TLBの内部構造を原理から押さえ、性能の勘所を掴めます。
割り込みコントローラの仕組み(APIC・GIC・MSI-X)
割り込みがどのコアへどの優先度で届くかを構造から理解できます。x86 の LAPIC/IO-APIC/x2APIC、ARM GIC、MSI-X を整理して押さえます。
割り込みと入出力(I/O)
CPU を無駄に待たせず、必要なときだけ反応させて I/O を効率よくさばく割り込みの仕組み。デバイスの準備完了をどう知らせ、処理に移るのかをやさしく解説します。
割り込み処理の二段構え(上半分/下半分)
割り込みハンドラを軽くするだけで応答性とスループットが両立できる仕組みがわかります。上半分で最小限だけ受け、重い処理を下半分へ逃がす設計を原理から押さえられます。
機密計算(Confidential VM・TEE)
クラウド事業者にもメモリの中身を見せずにVMを動かせる仕組みが分かります。AMD SEV-SNPとIntel TDXのメモリ暗号化・完全性保護・証明の原理を押さえ、既存の仮想化拡張との違いを整理できます。
起動(ブート)プロセス
電源を入れてから OS が使えるようになるまで、裏で何が起きているのかが分かる。ファームウェア(BIOS/UEFI)→ ブートローダ → カーネル → 初期化とバトンを渡す流れを順に解説。
共有メモリIPCとメモリ同期の落とし穴
共有メモリは最速のIPCだが、同じ物理ページを2つのプロセスへ別アドレスで張る仕組みと、ロックを共有領域に置く作法、メモリバリアの要否を外すと壊れます。原理からつかめます。
高性能I/Oモデル(epoll・io_uring)の内部
数万接続を1スレッドでさばく現代サーバーの心臓部。selectのO(n)をepollがどう潰し、io_uringがシステムコールすら消す原理まで一気に理解できます。
高分解能タイマとカーネルの時間管理
カーネルが時刻とタイマをどう作るかが分かれば、遅延やドリフトの原因を原理から切り分けられます。jiffiesからhrtimer、NO_HZ、単調時計とウォール時計の差まで一気に押さえられます。
省電力スケジューリング(EAS)
スマホがなぜ小さいコアを優先するのかが原理から分かります。エネルギーモデルとutilでタスク配置を選ぶEASの判断基準を、CFS/EEVDFの土台と結び付けて正確に押さえられます。
省電力とCPU周波数・アイドル状態の管理
CPUの電力を削る仕組みを原理から押さえれば、なぜ低負荷でも熱いのか、なぜ応答が遅れるのかを切り分けられます。P-stateとC-state、cpufreqガバナ、tickless動作、電力と応答性のトレードオフを設計判断として整理します。
条件変数とモニタ・スレッド間同期の原理
なぜ条件変数の待ちは必ずwhileで囲むのか。モニタの相互排他とwait/signalの意味論、Mesa対Hoareの違いから、再検査ループが「作法」ではなく「必然」である理由まで原理でつかめます。
多段ページテーブルの構造(4/5レベルページング)
巨大な64bitアドレス空間を、なぜ数KBの表で表せるのか。x86-64の4/5レベルページングのインデックス分割とエントリ構造、巨大ページ、メモリ消費を構造で読み解けます。
投機実行とサイドチャネル(Spectre/Meltdown)のOS対策
性能のために投機実行したCPUが、捨てたはずの結果をキャッシュに痕跡として残す。MeltdownとSpectreの原理から、KPTI・retpoline・IBRSなどOSの緩和策とそのコストまで筋道立てて理解できます。
動的リンクと共有ライブラリの仕組み
同じlibcを何百プロセスで使ってもメモリが増えない理由が腑に落ちます。共有ライブラリの物理ページ共有、位置独立コード、シンボルのバージョニング、preload/RPATH/RUNPATHの解決順序を内部から解剖します。
排他制御とデッドロック
同じデータを同時にいじってデータが壊れるのを防ぐのが排他制御(ロック)。ただし掛け方を誤ると全員が固まるデッドロックに陥る——その仕組みと回避の勘所を解説。
非同期I/Oの実装(POSIX AIO・io_uring)
ディスクI/Oで待たされないための非同期I/O。なぜPOSIX AIOは実用にならず、libaioはO_DIRECT必須で、io_uringだけが汎用の非同期I/Oを実現できたのかを実装の中身から理解できます。
名前空間と cgroups(コンテナの基盤)
コンテナの軽い隔離はどう実現されているのか。見える範囲を区切る名前空間と、使える資源を制限する cgroups という Linux カーネルの2機能から仕組みを解き明かします。
名前空間の内部実装(PID・mount・network・user)
コンテナの隔離は魔法ではなく、カーネル構造体の付け替えで動く。PID階層の番号変換やUIDマッピングの原理まで踏み込み、非特権コンテナが成り立つ理由を解き明かします。
優先度逆転と優先度継承プロトコル
最優先タスクが格下に追い越される優先度逆転の正体が分かります。なぜ待ち時間が無限に延びるのか、継承と上限の2プロトコルがどう有界化するか、Mars Pathfinderの事例まで原理から押さえられます。
例外・トラップ・フォルト・アボートの分類と処理
例外のどれが命令をやり直せてどれが致命的かを原理から判別できます。フォルト・トラップ・アボートの違いと、IDTディスパッチ・ダブルフォルトまで押さえます。