為什麼要讀核心#

如果你只想用 Linux,不需要讀核心。但如果你想真正搞懂「為什麼這個 syscall 慢」、「為什麼伺服器在某個負載下突然 stall」、「為什麼 OOM killer 殺了我的程式」,那你必須往下看一層。核心是所有抽象的盡頭:page cache、scheduler、IRQ、VFS、namespace ── 這些名詞最終都對應到 linux/ 原始碼裡可以讀的程式。

這個章節假設你已經讀過 作業系統併發 兩個章節,掌握了通識層的概念(行程、執行緒、虛擬記憶體、鎖)。本章把這些概念落實到 Linux 的具體實作。

學習路徑建議#

  • 新手:01 ➡️ 02 ➡️ 03 ➡️ 04(先寫一個能跑的模組與驅動,建立信心)
  • 想理解效能瓶頸:07 ➡️ 08 ➡️ 09 ➡️ 10(記憶體、鎖、中斷、觀測工具)
  • 想做雲端 / 容器:06 ➡️ 07 ➡️ 12(行程、記憶體、隔離機制)
  • 想貢獻核心:02 ➡️ 08 ➡️ 09 ➡️ 10(語言慣用法 + 同步 + 中斷 + 觀測)

版本基準#

本章內容以 Linux 6.x 為準。CFS 在 6.6 後逐漸由 EEVDF 取代,文中會註明差異。其他 API 若在 5.x ➡️ 6.x 之間有變動,會以 > [!NOTE] 標出。