01 / 導讀
導讀
引用
Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating System Concepts (10th ed.). Wiley.
章節概要
第10版(2018年4月;Wiley標註為1,040頁)分九個部分共21章,另有四個附錄(有影響的作業系統、Windows 7、BSD UNIX和Mach系統),附錄單獨編頁,據序言介紹放在本書網站上提供。序言把本書定位為大學部三、四年級或研究生一年級作業系統入門課程的教材,以直觀描述、圖示和例子而非形式化證明來呈現概念。例子取自Linux、Windows、macOS、Solaris、Android和iOS。每章以練習題(答案在網站上)、更多習題和延伸閱讀結束。本版圍繞作者指出的四大趨勢修訂:移動作業系統、多核系統、虛擬化以及基於非易失性儲存器的儲存。
第一部分 第1–2章:導論;作業系統結構
講作業系統是什麼、做什麼,硬體背景(包括對核心中常用資料結構的概述),以及系統如何設計和構建:服務、系統呼叫、連結器與載入器、作業系統結構以及用GRUB啟動。序言指出,這兩章不涉及內部演算法,適合只想瞭解概貌的讀者。
第二部分 第3–5章:程序;執行緒與併發;CPU排程
把程序作為工作單元,講其記憶體佈局和程序間通訊(包括Mach訊息傳遞和Android RPC);執行緒與隱式執行緒,包括fork-join並行、Java Future、Grand Central Dispatch和Intel Threading Building Blocks;以及CPU排程,從基本演算法講到多核與NUMA感知排程、Linux CFS排程器和Windows 10。
第三部分 第6–8章:同步工具;同步示例;死鎖
原來的同步一章現在分為兩章:第6章講競爭條件和通用工具,從記憶體模型和記憶體屏障到比較並交換(CAS)和無鎖演算法,但不繫結具體API;第7章把這些工具用於經典同步問題,使用POSIX訊號量、條件變數和Java。第8章講死鎖和活鎖,並介紹Linux lockdep等工具。
第四部分 第9–10章:記憶體;虛擬記憶體
講現代硬體上的記憶體管理,包括分頁、以頁為單位的交換和ARMv8 64位體系結構(分段內容已刪除);接著講虛擬記憶體:缺頁、幀分配、NUMA上的分配、記憶體壓縮以及Linux和Windows 10的記憶體管理。
第五部分 第11–12章:大容量儲存結構;I/O系統
把硬碟和非易失性儲存裝置同等對待,講磁碟排程、RAID、雲端儲存和物件儲存;然後講I/O硬體、介面和核心I/O結構、阻塞與非阻塞I/O以及效能。
第六部分 第13–15章:檔案系統介面;檔案系統實現;檔案系統內部
從使用者角度講檔案、目錄、保護和記憶體對映檔案;然後講檔案系統如何實現,包括分配方法、效能、日誌、TRIM和Apple檔案系統;還有新增的一章講檔案系統內部,整合了上一版的相關內容。
第七部分 第16–17章:安全;保護
安全一章現在放在保護之前:講勒索軟體等當前威脅、附程式碼示例的程式碼注入攻擊、加密、認證以及地址空間佈局隨機化等防禦。保護一章講保護環、訪問控制、強制訪問控制、Linux能力機制、沙箱、程式碼簽名以及Java堆疊檢查。
第八部分 第18–19章:虛擬機器;網路與分散式系統
講虛擬化技術和硬體支援、容器、Docker和Kubernetes,以及單一核心(unikernel)等最新研究;然後講以TCP/IP為重點的網路,並結合分散式系統和Google檔案系統、Hadoop等分散式檔案系統。
第九部分 第20–21章:Linux系統;Windows 10
兩個案例研究,把全書概念應用於完整的系統。Linux一章講歷史、設計原則、核心模組、程序管理、排程、記憶體管理、檔案系統、I/O、程序間通訊、網路和安全。
核心概念
第一、二部分:結構與程序
- 系統呼叫與核心結構:程式如何請求服務,以及作業系統的各種組織和構建方式。
- 程序與執行緒:工作單元及其中的執行單元,以及程序之間的通訊。
- CPU排程:選擇下一個執行執行緒的策略,包括多核和NUMA的影響。
第三部分:同步
- 競爭條件與臨界區:為什麼對共享資料的併發訪問需要協調。
- 同步工具:鎖、訊號量、監視器和條件變數,以及無鎖的比較並交換。
- 死鎖與活性:程序永遠等待的條件,以及如何預防、避免或檢測死鎖。
第四至六部分:記憶體、儲存與檔案
- 分頁與虛擬記憶體:虛擬記憶體到實體記憶體的對映、按需調頁和頁面置換。
- 大容量儲存與I/O:磁碟和非易失性儲存裝置、排程、RAID以及核心I/O子系統。
- 檔案系統實現:分配、目錄、日誌和效能。
第七至九部分:安全、高階主題與案例研究
- 安全與保護:抵禦攻擊與控制對資源的訪問。
- 虛擬機器與容器:在共享硬體上執行相互隔離的環境。
- 案例研究:以Linux和Windows 10作為概念的完整例項。
評析
優點
- 概念為先,系統為例。 序言提出的目標是在不依附於某一作業系統的一般框架中呈現概念,並用當今桌面、伺服器和移動系統中的大量例子加以說明。因此,無論課程實踐使用哪種系統,本書都適用。
- 內容新穎的一版。 序言列出了每一章的主要修訂:加強多核、移動和ARM的內容,固態儲存,拆分並擴充的同步內容(包括記憶體模型和無鎖演算法),容器和Kubernetes等。
- 三種環境下的程式設計。 示例使用C語言的POSIX和Pthreads、Java以及Windows API,有時對同一任務(如建立執行緒)三種都給出。可下載的Ubuntu虛擬機器支援程式設計作業,其中一些作業需要編寫Linux核心模組。
- 配套資源豐富。 網站上提供練習題答案、更多習題、複習題、學生學習指南、幻燈片和課程大綱示例。
局限
- 重直觀而非證明。 作者有意省略了大部分形式化證明,代之以圖示和例子,並指引讀者查閱研究論文;想要嚴格論述(例如同步的正確性)的學生需要其他資料。
- 篇幅大。 本書超過1,000頁,既是課程教材也是參考書;序言建議按章節順序學習,但也提供了用於挑選章節的課程大綱示例。
- 先修要求。 序言假定讀者掌握基本資料結構、計算機組成並熟悉C語言;不熟悉C的讀者會覺得程式設計示例很吃力。
- 出版形式。 據作者網站介紹,第10版以電子版單獨銷售,或與刪節版的印刷配套本捆綁銷售(Wiley後來又出了活頁版);想要完整紙質書的讀者應確認所購買的版本。
在課程中的定位
本書是本課程作業系統課的主要教材之一。Tanenbaum和Bos的 Modern Operating Systems 是一本同類的標準教材,以Linux、Android和Windows的詳細案例研究支撐原理;兩者中任何一本都可以作為主教材,另一本作為補充講解。Arpaci-Dusseau夫婦免費提供的 Operating Systems: Three Easy Pieces 圍繞虛擬化、併發和持久化組織內容,對於想從另一個角度(尤其是併發)理解的學生是很好的伴讀。
Ward的 How Linux Works 是實踐性的伴讀,展示第2、3、9–14和20章的概念在一臺執行中的Linux機器上出現在哪裡、如何檢視。Saltzer和Kaashoek的 Principles of Computer System Design 適合之後更廣泛地討論計算機系統設計原則的課程。
如何使用本書
本書適合三、四年級的電腦科學大學部學生(序言所指的程度)、研究生一年級學生,以及想系統瞭解作業系統的從業者。學習前應具備資料結構、計算機組成和C語言基礎。
一學期課程的實用計畫:
- 核心: 第1–7章(概述、程序、執行緒、排程、同步)、第8章(死鎖)、第9–10章(記憶體)和第13–14章(檔案系統)。這些章節承載主要概念和大部分程式設計作業。
- 儲存與I/O: 第11–12章,尤其適合對系統性能感興趣的學生。
- 選讀或第二門課: 第15–19章,講檔案系統內部、安全、保護、虛擬化和分散式系統。
- 案例研究: 如果課程用Linux程式設計,就把第20章與核心章節同步閱讀;如果用Windows,則讀第21章。關於歷史系統的線上附錄可按興趣閱讀。
做完每章末尾的練習題,並對照網站上的答案。儘早安裝Linux虛擬機器並完成程式設計專案,因為程序、執行緒、同步和記憶體管理主要是透過親手程式設計才能真正理解的。複習時可藉助學習指南。
