
計算機系統
📘 深度概覽
資料來源與整理脈絡#
本筆記整合自多條學習路線:jserv 在成功大學開設的「計算機結構」與「Linux 核心設計」公開課程、課程指定的教科書(Patterson & Hennessy 的 Computer Organization and Design、Tanenbaum 的 Modern Operating Systems、Bovet & Cesati 的 Understanding the Linux Kernel)、官方 RISC-V Privileged/Unprivileged ISA 規格書、Linux kernel 原始碼(6.x 系列)以及 LWN.net 的核心觀察文章。切入角度刻意「由硬體往上推」:先確立 ISA 契約與微架構成本,再進入作業系統抽象,最後落到 Linux 的具體實作。與市面教科書多採並列章節不同,本筆記強調抽象之間的對應——例如把通識層的「上下文切換」與 Linux 的 task_struct、CFS/EEVDF 排程器直接連起來。
完整摘要#
筆記環繞「指令集(ISA, Instruction Set Architecture)—作業系統(Operating System)—Linux 核心」這條主軸展開,共六大模組四十餘篇章。ISA 與計算機架構 從馮紐曼架構(Von Neumann architecture)出發,對照 CISC(Complex Instruction Set Computer)與 RISC(Reduced Instruction Set Computer)的設計取捨,再進入二補數、IEEE-754、CPU 快取(cache)的層級設計、指令管線化(pipeline)、分支預測(branch prediction)與 hazards,最後收於組譯器與連結器;這些章節為後續所有效能討論建立詞彙與量化直覺。開發工具鏈 聚焦系統程式特有的 GDB、GCC、Makefile、man-pages,是除錯與 build 的基本功。作業系統 從 UNIX/BSD/Linux 演化史開始,貫穿動態記憶體分配、上下文切換、排程演算法(Round-Robin、CFS、即時排程)、軟硬體交界、檔案系統、shell 實作、特權模式與 microkernel/monolithic 之爭,建立平台中立的觀念骨架。並行程式設計 用 POSIX Thread 為實作載體,討論 race condition、spinlock 與 semaphore,並把死結(deadlock)與活結(livelock)的條件講清楚。RISC-V 實作 把通識落到具體 ISA:RV32I 指令集與暫存器、控制暫存器(CSR)與 trap、PLIC 中斷控制器,最終做出一個能跑的最小 OS 與 trap handler。Linux 核心內部 是全筆記分量最重的章節,從核心架構、C 慣用法(如 container_of、likely/unlikely)、可載入核心模組(LKM, Loadable Kernel Module)、字元裝置驅動,一路推進到系統呼叫、行程管理(CFS ➡️ EEVDF)、記憶體管理(分頁、buddy、slab、page fault、OOM、reclaim)、核心同步(atomic、barrier、RCU)、中斷管理(softirq、tasklet、workqueue)、debug 與 tracing(printk、ftrace、perf、KASAN、kdump)、VFS 與 page cache,以及虛擬化與容器(KVM、namespace、cgroup)。版本基準鎖定 Linux 6.x,API 在 5.x ➡️ 6.x 之間的差異會就地註記。
適用情境與閱讀路徑#
目標讀者是想跨過「會用」進到「會做」的工程師:包含想自幹作業系統的學生、需要對效能瓶頸給出根因(root cause)的後端工程師,以及準備往核心或雲端基礎設施鑽研的開發者。建議閱讀路徑依目標而分:計算機背景補強 走「01 ISA ➡️ 03 作業系統」;自幹 OS 走「02 工具鏈 ➡️ 05 RISC-V ➡️ 03 作業系統 ➡️ 06 Linux 核心」對照主流實作差異;效能調校與除錯 聚焦核心內部的記憶體、同步、中斷、debug/tracing 章節;雲端與容器方向 走「行程 ➡️ 記憶體 ➡️ 虛擬化與容器」。讀完應能在閱讀任何系統層 bug report 或 perf 報表時,從硬體 cache、TLB、scheduler、syscall 路徑一路追下去,而不是停在「OS 黑魔法」這個層次。
知識架構總覽#
| 模組 | 說明 | 章節數 |
|---|---|---|
| ISA 與計算機架構 | 馮紐曼、CISC/RISC、Cache、Pipeline、IEEE-754 | 9 |
| 開發工具鏈 | GDB、GCC、Makefile、man-pages | 4 |
| 作業系統 | 行程、記憶體、上下文、排程、檔案系統、特權模式 | 9 |
| 並行程式設計 | Process/Thread、Pthread、Race、Spinlock、Semaphore | 5 |
| RISC-V 實作 | RV32I、CSR/Trap、PLIC、最小 OS | 5 |
| Linux 核心內部 | 模組、syscall、mm、排程、同步、中斷、VFS、容器 | 12 |
閱讀建議#
- 計算機背景補強:先讀 ISA 與計算機架構,建立硬體與指令集的基本概念,再進入作業系統章節。
- 自幹 OS 路線:開發工具鏈 ➡️ RISC-V 實作 ➡️ 作業系統,最後對照 Linux 核心內部觀察主流實作的差異。
- 效能調校與除錯:聚焦 Linux 核心內部的記憶體管理、同步、偵錯與追蹤章節。
- 雲端/容器方向:行程管理 ➡️ 記憶體管理 ➡️ 虛擬化與容器,理解隔離機制的底層。