索引 / 001 ZH-TW
電腦系統設計原理 cover

電腦科學

電腦科學

電腦系統設計原理

Jerome H. Saltzer and M. Frans Kaashoek

英文原名: Principles of Computer System Design: An Introduction

一本講解複雜電腦系統設計原則的系統類教科書,圍繞模組化、抽象、分層與命名展開。紙本涵蓋強制模組化、虛擬化與效能;容錯、原子性、一致性、網路與安全則位於線上發布的第二部分。

難度等級
高級
學術層次
大學部
電腦系統作業系統網路抽象系統設計可靠性

01 / 導讀

導讀

引用

Saltzer, J. H., & Kaashoek, M. F. (2009). Principles of Computer System Design: An Introduction. Morgan Kaufmann.

章節概要

本書源自 MIT 6.033 課程「計算機系統工程」(Computer System Engineering)四十多年間積累的講義。全書分兩部分出版。第一部分(第1–6章)是摩根·考夫曼出版社的印刷本;第二部分(第7–11章)由作者和 MIT 開放課程(OpenCourseWare)作為開放教育資源提供。貫穿全書的主題是強制模組化:第一部分介紹防止一個模組中的偶然錯誤擴散到其他模組的方法,第二部分介紹抵禦元件故障和惡意攻擊的更強形式的模組化。書中為一些設計原則命名(如端到端論證),在使用處加以標示,並在書前彙總成表。

第1章:系統

開篇一章把複雜性當作系統的核心問題。1.1 節考察各領域系統的共同問題,系統、元件、介面與環境,以及複雜性本身;1.2 節講複雜性的來源,即相互疊加和相互作用的需求,以及維持高利用率;1.3 節講應對之道:模組化、抽象、分層和層次結構,以及用名字建立連線。1.4 節解釋計算機系統為什麼「相同而又不同」,即組合沒有近處的邊界,技術變化前所未有;1.5 節再回到通過迭代與保持簡單來應對複雜性。

第2章:計算機系統組織的要素

第2章指出三種基本抽象:儲存器、直譯器和通訊鏈路(2.1),然後建立計算機系統中命名的模型:預設與顯式的上下文引用、路徑名與遞迴名字解析、在分層上下文中查詢、名字比較和名字發現(2.2)。2.3 節用名字和分層來組織系統,以匯流排為硬體層、以檔案抽象為軟體層。案例研究(2.5)逐層剖析 UNIX 檔案系統,從塊層直到符號連結層。

第3章:命名方案的設計

本章把命名模型轉化為設計時的考慮:模組化共享、後設資料與名字的過載、作為定位物件的名字的地址、生成唯一名字、使用者友好的名字,以及名字、值與繫結的相對生命週期。案例研究講統一資源定位符(URL),「戰爭故事」則收集了名字使用中的真實病症,從名字衝突到電話號碼耗盡。

第4章:用客戶與服務強制模組化

第4章從軟模組化走向強制模組化,描述客戶/服務組織、多個客戶和服務、可信中介和遠端過程呼叫,包括 RPC 與普通過程呼叫的不同。兩個案例研究是網際網路域名系統(名字解析、層次化的名字管理、響應的可信性)和網路檔案系統(它定義的遠端過程呼叫、擴充套件 UNIX 檔案系統以支援它,以及一致性)。

第5章:用虛擬化強制模組化

第5章展示同樣的客戶/服務思想如何通過虛擬化在一臺計算機內部得到強制實施。內容包括:使用 SEND 和 RECEIVE 與有界緩衝區的虛擬鏈路,涉及競態條件、鎖、先後(before-or-after)操作和死鎖;用域、核心態與使用者態以及門來強制記憶體中的模組化;用頁對映和轉換後備緩衝區(TLB)虛擬化記憶體,段作為進階主題;用執行緒虛擬化處理器及其序列協調原語;以及 Intel x86 中強制模組化的演進。最後講虛擬機器。

第6章:效能

第一部分的最後一章討論面向效能的設計:度量(容量、利用率、延遲、吞吐量)、處理瓶頸的系統方法、並行、排隊與過載,以及批處理、拖延和推測。然後講多級儲存,包括訪問區域性性、工作集和頁面移除策略,以及資源排程與排程策略,並以磁碟臂排程為案例。

第7–8章:網路;容錯(第二部分)

第7章「作為系統及系統元件的網路」講網路的性質、分層(鏈路層、網路層和端到端層)、擁塞控制,以及將網際網路對映到乙太網路的案例研究。第8章「容錯:用不可靠的元件構造可靠的系統」講故障與失效、可靠性的度量、容忍活動故障、對軟體和資料應用冗餘,以及 CMOS RAM 的容錯模型。

第9–11章:原子性;一致性;資訊安全(第二部分)

第9章區分全有或全無(all-or-nothing)與先後(before-or-after)兩種原子性,並分別從概念和實踐兩方面討論,隨後講跨層和多站點的原子性。第10章「一致性」講約束、快取一致性、由地理上分隔的副本實現的持久儲存,以及調和。第11章「資訊安全」講主體與訊息的認證、機密性、安全協議、授權、TLS 的案例研究,以及安全事故的「戰爭故事」。

核心概念

第1–3章:系統、名字與分層

  • 模組化、抽象、分層、層次結構:書中介紹的應對複雜性的四種技術。
  • 命名模型:把名字、上下文和名字解析作為通用機制。
  • 三種基本抽象:儲存器、直譯器和通訊鏈路。

第4–6章:強制模組化與效能

  • 客戶/服務組織:模組只通過訊息互動,使錯誤不會擴散。
  • 虛擬化:執行緒、虛擬記憶體和有界緩衝區,是在一臺計算機內強制模組化的手段。
  • 瓶頸與排程:第6章的效能主題。

第7–11章:網路、可靠性、原子性、一致性與安全

  • 端到端論證:設計原則列表中概括為「應用最瞭解」。
  • 全有或全無與先後原子性:事務的兩種性質。
  • 最小特權與完全仲裁:書前列出的安全原則。

評析

優點

  • 以原則為先的設計。 出版社稱其為第一本採取基於原則的方法講計算機系統設計的教材,使用作業系統、網路、資料庫和分散式系統所共有的抽象。設計原則有名字,在定義處以粗體標出,在使用處加以標記,並彙總成表。
  • 貫穿多個領域的案例研究。 案例的選擇是為了在不同領域重複運用同樣的思想:UNIX 檔案系統、URL、DNS、NFS、x86、磁碟臂排程、TLS 等,並配有虛擬碼片段作為具體例子。
  • 評論者的看法。 出版社援引加州大學聖迭戈分校的 Joe Pasquale 的評語,稱這是一本關於計算機系統設計原則、而非通常的「事物如何運作」的機制的獨特、有雄心而重要的書,並指出據他所知沒有別的書把這麼多原則明確提出來。
  • 免費的配套材料。 第二部分、習題集、術語表和索引可從 MIT 開放課程免費獲取,同時還有 6.033 的課程資料。
  • 有來歷的習題。 習題和習題集取自數十年的考試,每道題都標有年份、考試編號和題號。

侷限

  • 印刷本只有一半內容。 印刷版只含第1–6章;容錯、原子性、一致性、網路和安全位於線上的第二部分。購買印刷本的讀者應計劃同時使用線上章節。
  • 不是機制層面的作業系統教材。 本書通過選定的案例講原則,並非對作業系統機制的完整巡禮,不能取代標準的作業系統教材。
  • 案例研究反映 2009 年的情形。 例子(NFS、Intel x86、TLS、DNS)反映的是出版時這些系統的狀態;原則的表述是一般性的,但細節需對照當前實踐核實。
  • 第二部分是單獨的版本。 免費章節標註為 5.0 版(2009 年 6 月),勘誤最晚更新到 2022 年 2 月,並以非商業用途許可釋出。

在課程中的定位

這是一本系統設計書,而不是第一門作業系統課程。《Operating System Concepts》和《Modern Operating Systems》是傳統教材,依次講行程、記憶體、檔案系統和 I/O,並配有真實系統的案例;《Operating Systems: Three Easy Pieces》是對虛擬化、並行和持久性的免費、敘述式講解;《How Linux Works》是面向真實系統的實用指南。Saltzer 和 Kaashoek 的第2、4、5章與這些內容有所重疊,但其目的是提煉其中的設計思想(命名、分層、強制模組化),並把它們帶入網路、容錯和安全。

最好在讀過其中一本教材之後,或與之並行閱讀,適合想了解機制背後的設計詞彙的讀者。

如何使用本書

本書面向作業系統、分散式系統或計算機系統設計課程的大學三、四年級學生,以及專業的系統設計人員,出版社給出的讀者物件也是如此。

實用安排:

  • 核心: 第1章,掌握複雜性的詞彙;第2–3章,學習命名;第4–5章,學習強制模組化。
  • 隨後: 第6章講效能,再按興趣讀第二部分各章:第7章講網路,第8–10章講可靠性與事務,第11章講安全。
  • 進階主題: 標明為進階的小節(例如 5.4.5 的段和 11.7 的認證推理)可留到第二遍閱讀。
  • 參考材料: 手邊備好設計原則列表和術語表;用習題和習題集檢驗理解。