中級還沒有評分

作業系統:從行程到 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

學習地圖

    1. 1-1課程導覽學作業系統要從哪裡開始?13 分
    2. 1-2準備練習環境怎麼在自己電腦架一台跑著 nginx、API 和 Redis 的後端主機?18 分
    3. 1-3作業系統在做什麼少了作業系統,程式還能跑嗎?12 分
    4. 1-4使用者態、核心態與中斷為什麼程式不能直接碰硬體?13 分
    5. 1-5系統呼叫一個 read() 背後,程式請核心做了什麼?15 分
    6. 1-6實作:一次請求的系統呼叫處理一次 HTTP 請求,伺服器呼叫了核心幾次?18 分

期末考

通過期末考,才算讀完整門課。

題數
30 題
及格分數
80 分
限時
不限時
沒過後要等
24 小時