復習
← Deep Dive Technology

OSとプロセス Deep Dive

プロセス・スレッド・仮想メモリ・ファイル・システムコール・I/Oモデル、そしてNode.jsのイベントループとlibuvまで。情報系を履修していない実務エンジニアが「なぜNode.jsは1スレッドで大量の接続をさばけるのか」「なぜ本番でOOMKilledになるのか」を根拠を持って説明できるようになるための全12章。CPUシリーズの一つ上の層として、CTSSからLinux 7.x・Node.js 26までを一次情報と手元での実測で辿る

#OS#Linux#プロセス#Node.js#コンピュータサイエンス

目次

  1. 第1章
    第1章: なぜWebエンジニアがOSを学ぶのか — CTSSからNode.jsまでの系譜OSの3つの役割(抽象化・資源管理・保護)と、CTSS→Unix→Linux→Node.jsへ続く歴史を辿り、全12章の地図を手に入れる
    →
  2. 第2章
    第2章: カーネルとシステムコール — ユーザー空間とカーネル空間の境界ユーザーモードとカーネルモード、syscall命令とvDSO、システムコールの直接コストと間接コスト、モノリシック対マイクロカーネル論争
    →
  3. 第3章
    第3章: プロセスの一生 — fork・exec・シグナル・ゾンビtask_struct、プロセス状態(R/S/D/Z)、forkとコピーオンライト、execとwait、シグナル、終了コード128+N、ゾンビと孤児
    →
  4. 第4章
    第4章: スレッドとスケジューラ — 何を共有するかがスレッドを決めるclone()の共有フラグ、コンテキストスイッチのコスト、並行と並列、CFSからEEVDFへ移ったLinuxスケジューラ
    →
  5. 第5章
    第5章: 仮想メモリ — RSS・VSZ・ページフォールト・OOM Killerアドレス空間とページング、TLB、マイナー/メジャーページフォールト、スワップ、オーバーコミットとOOM Killer、Node.jsのheapUsedとRSSの違い
    →
  6. 第6章
    第6章: ファイルとファイルディスクリプタ — Everything is a fileFDとopen file description、VFS、ページキャッシュとfsync、パイプとソケット、EMFILEとulimit
    →
  7. 第7章
    第7章: I/Oモデルの進化 — selectからepoll・kqueue・io_uringへ同期/非同期とブロッキング/ノンブロッキングの2軸、UNPの5モデル、readiness型とcompletion型、C10K問題とnginx
    →
  8. 第8章
    第8章: 並行処理モデル比較 — プロセス・スレッド・イベントループ・軽量スレッドprefork、スレッドプール、イベントループ、goroutineとVirtual Threads、async/awaitを比較し、PayPal・LinkedIn・Cloudflare・Discordの事例から選び方を学ぶ
    →
  9. 第9章
    第9章: Node.jsのイベントループとlibuv — 本当にシングルスレッドなのかV8・バインディング・libuvの3層構造、イベントループの各フェーズ(Node 20.3.0以降)、nextTickとマイクロタスクのCJS/ESM差、スレッドプール
    →
  10. 第10章
    第10章: イベントループを止めない設計 — ReDoS・巨大JSON・スレッドプール枯渇Cloudflareの2019年障害に学ぶReDoS、JSON処理、スレッドプール枯渇、worker_threads・child_process・clusterの使い分けと計測方法
    →
  11. 第11章
    第11章: コンテナとプロセス運用 — cgroups・OOMKilled・SIGTERM・PID 1namespacesとcgroup v2、終了コード137の正体、graceful shutdown、PID 1問題とtini、コンテナを考慮したV8のヒープ上限
    →
  12. 第12章
    第12章: 手を動かして確かめる — straceで覗くNode.jsと2026年の動向Docker上のstraceでNode.jsのシステムコールを観察し、スレッドプールとブロッキングを実験で確かめる。sched_ext・io_uring・Node.js 26 LTSの動向と学習ロードマップ
    →