電腦科學

Operating System Concepts(作業系統概念)

Abraham Silberschatz; Peter Baer Galvin; Greg Gagne

英文原名: Operating System Concepts

Operating System Concepts(作業系統概念) cover

涵蓋程序、同步、記憶體與儲存的作業系統綜合教材,以多平臺例子及程式設計練習連線抽象和實現,適合按課程主題選擇閱讀。

需要的基礎

需C或Java、基礎資料結構與計算機組成;同步前先能區分共享和執行緒私有狀態,以及互斥與先後順序。

版次
10
出版年份
2018
難度等級
中級
學術層次
大學部
operating systemsprocessesconcurrencymemory managementfile systems教科書

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版。請以課程指定的版本為準。

Wiley出版社頁面