B04 · 作業系統基礎(後端視角) 詳細 ROADMAP

計畫文件,不會被 Quartz 渲染。 回主 roadmap → backend/ROADMAP.md


章節目標

不是 OS 課,是「後端工程師遇到的 OS 知識」。你的 process 為什麼會被 OOM killer 殺掉?為什麼 ulimit -n 重要?Signal handling 怎麼做 graceful shutdown?Container 底層到底用了什麼 kernel feature?本章目標是讓讀者看 production incident log 能知道發生什麼事


🌱 基本介紹

#主題SlugStage大綱
01後端工程師該懂多少 OS01-what-os-for-backend🌱從 application 層到 kernel 的邊界;要懂到哪一層夠

❓ 為什麼需要

#主題SlugStage大綱
02為什麼不懂 file descriptor 會爆02-why-fd-matters🌱“Too many open files” 實際案例、connection / log file / socket 都是 fd、ulimit 調多少才對
03為什麼 graceful shutdown 一定要懂 signal03-why-signal-matters🌱K8s 送 SIGTERM → 你沒處理 → 15 秒後 SIGKILL → 流量斷、連線掉、資料不一致
04為什麼 container 不是 VM04-why-container-not-vm🌱namespace / cgroup 機制、資源隔離程度、container escape 風險

🕰️ 演進

#主題SlugStage大綱
05Unix Process 模型演進05-process-model-evolution🌱fork/exec → Thread pthread → lightweight thread(goroutine / M:N)→ async / coroutine
06容器化技術演進06-container-tech-evolution🌱chroot → LXC → Docker → OCI 標準 → containerd / Podman / CRI-O

🧠 知識型

F04-A Process / Thread

#主題SlugStage大綱
07Process vs Thread07-process-vs-thread🌱記憶體共用差異、context switch cost、fork 成本、Copy-on-Write
08Thread Pool 底層08-thread-pool🌱為什麼不要每 request 開一個 thread;Java ThreadPoolExecutor / Python concurrent.futures 底層
09綠色執行緒 / 纖程(Fiber)09-green-thread-fiber🌱Goroutine / Erlang process / Java Project Loom 虛擬執行緒

F04-B IO 與 File Descriptor

#主題SlugStage大綱
10File Descriptor 深入10-file-descriptor🌱fd 是什麼、process 層的 fd table、system-wide limit、為什麼 socket / file / pipe 都是 fd
11select / poll / epoll / kqueue / io_uring11-io-multiplexing🌱從 O(n) 到 O(1)、epoll LT vs ET、io_uring(2019+)改變遊戲規則
12Blocking vs Non-blocking IO12-blocking-vs-nonblocking🌱核心差異、怎麼切 non-blocking mode、EAGAIN 怎麼處理

F04-C Signal

#主題SlugStage大綱
13Signal 基礎13-signal-basics🌱SIGTERM / SIGKILL / SIGINT / SIGHUP / SIGPIPE、async-signal-safe、signal handler 限制
14Graceful Shutdown 實作14-graceful-shutdown🌱收 SIGTERM → 停止接新 request → 等舊 request 完 → 關 DB/MQ 連線 → 退出;跟 K8s readiness probe 連動

F04-D 記憶體管理

#主題SlugStage大綱
15Virtual Memory 基礎15-virtual-memory🌱page、page fault、mmap;為什麼 free -h 數字看起來怪
16OOM Killer 與 cgroup memory limit16-oom-killer🌱OOM score、K8s container OOM、memory request/limit 怎麼設

F04-E 容器底層

#主題SlugStage大綱
17容器化基礎⛔️ fundamentals/containerization🌿跨系列
18Linux Namespace18-linux-namespace🌱PID / Net / Mount / UTS / IPC / User namespace 各自隔離什麼
19cgroup v1 vs v219-cgroup🌱資源限制實作、CPU / Memory / IO controller、K8s 用的版本
20Container Runtime 深入20-container-runtime-deep🌱runc / crun / gVisor、OCI spec、K8s CRI

🔧 小實作注意事項

#主題SlugStage大綱
21看 process 狀態(/proc)21-proc-filesystem🌱/proc/{pid}/statusfdmaps、常用診斷方式
22用 strace 抓 syscall22-strace🌱查「卡在哪」、看 file / network syscall、Docker 內 strace 問題
23用 lsof 查檔案 / socket23-lsof🌱找誰占用某 port、查 fd 洩漏
24實作一個 graceful shutdown(跨語言)24-graceful-shutdown-impl🌱Go / Python / Node.js / Java 各自實作

💣 Anti-pattern

#主題SlugStage大綱
25OS-level Anti-patterns25-os-antipatterns🌱ulimit -n 沒調(預設 1024 根本不夠)、沒處理 SIGPIPE(寫斷掉 socket 整個程式崩)、子 process spawn 完沒 wait 變 zombie、container 跑 root、memory limit 忘設、container 不做 process reaper(PID 1 問題)

🧰 對應檢查工具

#主題SlugStage大綱
26OS 診斷工具26-os-diagnostic-tools🌱top / htop、iotop、vmstat、sar、pidstat、strace、lsof、ss、bpftrace / bcc / eBPF

📎 補充

#主題SlugStage大綱
S01eBPF 給後端工程師s01-ebpf-for-backend🌱為什麼 2020+ 後端運維界瘋 eBPF、實戰工具(bpftrace / Cilium / Pixie)
S02Linux Cgroup v2 的 K8s 影響s02-cgroup-v2-k8s🌱為什麼 K8s 1.25+ 推 cgroup v2、memory behavior 變化

章節進度統計

  • 知識主題:26 + 2 補充 = 28 項
  • 🌿 growing:1(跨系列)
  • 🌱 seed:27

跨系列連結

  • fundamentals/containerization
  • backend/deployment/ B18(container / K8s)
  • backend/observability/ B17(eBPF trace)
  • infra/ 容器相關