01 / 導讀
導讀
作業系統:選鎖之前先解釋交錯執行
比較免費概念教材、小型RISC-V核心與綜合參考,用原創事件軌跡和同步變式區分原子性、互斥、確定順序及模型邊界。
學習計畫與例題由 University Reading List 編輯整理。
引用
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章:記憶體;虛擬記憶體
第9章講現代硬體上的記憶體管理,包括分頁、以頁為單位的交換和ARMv8 64位體系結構;分段內容已刪除。第10章講虛擬記憶體:缺頁、幀分配、NUMA上的分配、記憶體壓縮以及Linux和Windows 10的記憶體管理。
第五部分 第11–12章:大容量儲存結構;I/O系統
第11章把硬碟和非揮發性記憶體裝置同等對待,講磁碟排程、RAID、雲端儲存和物件儲存。第12章講I/O硬體、介面和核心I/O結構、阻塞與非阻塞I/O以及效能。
第六部分 第13–15章:檔案系統介面;檔案系統實現;檔案系統內部
- 第13章: 從使用者角度講檔案、目錄、保護和記憶體對映檔案。
- 第14章: 檔案系統如何實現,包括分配方法、效能、日誌、TRIM和Apple檔案系統。
- 第15章: 新增的一章,講檔案系統內部,整合了上一版的相關內容。
第七部分 第16–17章:安全;保護
安全一章現在放在保護之前:講勒索軟體等當前威脅、附程式碼示例的程式碼注入攻擊、加密、認證以及地址空間佈局隨機化等防禦。保護一章講保護環、訪問控制、強制訪問控制、Linux能力機制、沙箱、程式碼簽名以及Java堆疊檢查。
第八部分 第18–19章:虛擬機器;網路與分散式系統
第18章講虛擬化技術和硬體支援、容器、Docker和Kubernetes,以及單一核心(unikernel)等最新研究。第19章講以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核心模組。
- 配套資源豐富。 網站上提供附線上答案的練習題、更多習題、複習題、學生學習指南、幻燈片和課程大綱示例。
- 2024年秋季課程仍在使用。 下文「常見課程指定閱讀」中有兩門2024年秋季課程指定了第10版。
局限
- 重直觀而非證明。 作者有意省略了大部分形式化證明,代之以圖示和例子,並指引讀者查閱研究論文;想要嚴格論述(例如同步的正確性)的學生需要其他資料。
- 篇幅大。 本書超過1,000頁,既是課程教材也是參考書;序言建議按章節順序學習,但也提供了用於挑選章節的課程大綱示例。
- 先修要求。 序言假定讀者掌握基本資料結構、計算機組成並熟悉C語言;不熟悉C的讀者會覺得程式設計示例很吃力。
- 是概論,不是實驗手冊。 這是一本經典的概論型教材,課程常常搭配書中沒有的系統程式設計作業或專案。實作的大部分負擔應預期由課程自己的作業承擔。
- 版本差異。 第9版和第10版在2024年的課程大綱中都還出現,兩者的章節編號和內容不同。例如,第10版把同步拆成兩章並刪除了分段。在按章節編號閱讀之前,請先確認課程指定的是哪一版。
- 出版形式。 據作者網站介紹,第10版以電子版單獨銷售,或與刪節版的印刷配套本捆綁銷售;Wiley後來又出了活頁版。想要完整紙質書的讀者應確認所購買的版本。
在課程中的定位
本書是大學作業系統課的主要教材之一。下文「常見課程指定閱讀」所列的2024年秋季課程顯示,它位於標準的入門課位置,其中兩門使用第10版,一門仍使用第9版。
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虛擬機器並完成程式設計專案,因為程序、執行緒、同步和記憶體管理主要是透過親手程式設計才能真正理解的。複習時可藉助學習指南。
常見課程指定閱讀
奧克拉荷馬大學,CS 3113 Intro to Operating Systems(2024年秋季,第10版,ISBN-13 978-1-119-32091-3)。 這與本指南所描述版本的ISBN相同。其暫定的每週進度與上述核心計畫高度一致:
- 第1週:第1章,作業系統概述
- 第3週:第2章,作業系統結構;程序
- 第4週:第3章,程序間通訊
- 第5週:第4章,執行緒
- 第6週:第5章,CPU排程
- 第7週:第6章,同步、訊號量、臨界區
- 第8週:第7章,監視器與原子交易
- 第9–10週:第8章,死鎖
- 第11–12週:第9章,記憶體管理、分頁、分段
- 第13週:第10章,虛擬記憶體
- 第14週:檔案管理
這份暫定進度以記憶體與檔案管理結束,沒有列出後面的部分。其中部分主題標籤(例如第9章下的分段)看起來像較早版本的標題。如前所述,第10版已從該章刪除分段內容,因此這一主題請以課程講義為準。
科羅拉多州立大學,CS370 Operating Systems(2024年秋季)。 CSU透過Wiley電子版套裝(ISBN-13 978-1119127482)指定第10版。其課程大綱頁面著重於評分與先修要求,沒有逐週章節列表。
德州大學達拉斯分校,CS/SE 4348 HON(2024年秋季)。 UTD列出的是第9版(ISBN 978-1-118-06333-0)。所列主題為程序管理、記憶體、虛擬記憶體、I/O、檔案系統、臨界區和死鎖。這與本指南的版本不一致:第9版的章節編號與第10版對不上。如果你修的是這類課程,請按主題而非按編號,把指定內容對應到第10版的章節。
聚焦閱讀與版本界線
以下試做使用本站配套指南的原創題,請先開啟題目,核對條件和資料。
閱讀路線: 在2018年第10版中按標題選讀程序/執行緒、同步和所需的記憶體管理章節。
繼續前試做: 比較互斥、順序與進展三類要求。檢查標準: 互斥可阻止重疊,卻不自動決定誰先,也不規定排程策略。
版本與存取: 本指南所列的是Wiley電子版(ISBN 9781119320913),與上文奧克拉荷馬大學課程所列ISBN相同。其他第10版套裝及紙本配套編號不同,例如上文科羅拉多州立大學課程使用的電子版套裝為978-1119127482;上文德州大學達拉斯分校的課程則仍指定第9版。請以課程指定的版本為準。
