作業系統:從行程到 epoll
從行程、執行緒、排程、鎖到虛擬記憶體、檔案與 I/O,用一台跑著 nginx、Python API 與 Redis 的後端主機貫穿全課,每個觀念都在 Linux 上親眼看到,準備好面試會追問的原理。
10 章・55 單元・約 12 小時 36 分鐘
課程介紹
這門課從作業系統在做什麼、使用者態與核心態、系統呼叫開始,一路學到行程與執行緒、CPU 排程、競爭條件與鎖、死結與行程間通訊、虛擬記憶體與缺頁、mmap 與寫入時複製、檔案描述子與 page cache,以及 select、poll、epoll 與零拷貝,最後把全部串成面試常問的「一個請求進到伺服器,作業系統做了哪些事」,並實際查一台變慢的伺服器。
全課用同一個情境:「豪享小舖」的後端主機上跑著 nginx、一個預先 fork 好 worker 的 Python 商品 API 與 Redis。每章放大這台主機的一部分:用 ps 與 /proc 看行程與記憶體、用 strace 看程式請核心做了什麼、用 py-spy 看執行緒卡在哪裡,觀念都親眼看到它發生。每段指令後面就是實際執行的結果,讀課文就看得懂;想動手的話,第一章會教你在自己電腦用 Docker 架起這台主機跟著做。範例以 Python 為主,只有 fork、執行緒、段錯誤、競爭條件、mmap 五個地方用 C,不用會寫 C。
每個單元還有「面試這樣答」,把觀念整理成面試時可以直接講的回答,並預想面試官會怎麼追問。
用哪個版本
原理先教、不以版本為主軸:行程與執行緒、排程演算法、鎖與死結、分頁與缺頁、I/O 多工要解決的問題,這些幾十年沒變過,面試問的也是這些;Linux 只當觀察的工具,不教系統管理。課文的指令與結果在 Docker 上實際跑過:Linux 核心 5.15(Windows 的 Docker Desktop),工作台映像是 Python 3.12.16(Debian 13)加上 gcc 14、strace 6.13、gdb 16、py-spy 0.4,服務是 nginx 1.30.6 與 Redis 8.10.2。Linux 排程器從 CFS 到 EEVDF、I/O 從 epoll 到 io_uring、容器用的 namespace 與 cgroup(以 v2 為主)這些近年的演進,集中在第 10 章一次講清楚。
你會學到
- 說清楚使用者態與核心態、系統呼叫的過程,用 strace 看出一個請求呼叫了核心哪些事
- 講得出行程與執行緒的差別、行程狀態、fork/exec/wait、殭屍與孤兒、上下文切換為什麼貴,以及常見的排程演算法
- 說明競爭條件、互斥鎖與自旋鎖、條件變數、樂觀鎖,死結的四個條件與預防方法,以及行程間通訊與訊號
- 看懂虛擬記憶體、分頁與 TLB、缺頁與頁面置換、寫入時複製,判斷一個行程用了多少記憶體、記憶體不夠時會發生什麼
- 說明 inode 與檔案描述子、page cache 與 fsync、阻塞與非阻塞、select/poll/epoll 的差別與零拷貝
- 用 ps、/proc、strace、py-spy 找出伺服器變慢是卡在 CPU、記憶體、鎖還是 I/O
學習地圖
期末考
通過期末考,才算讀完整門課。
- 題數
- 30 題
- 及格分數
- 80 分
- 限時
- 不限時
- 沒過後要等
- 24 小時