Andrew Tanenbaum & Albert Woodhull:operating Systems——design And Implementation@2006 (第3版)
這本由 Andrew S. Tanenbaum 和 Albert S. Woodhull 合著的《作業系統設計與實作 第三版》,其核心主旨在於為讀者提供一個理論與實務兼具的學習體驗,深入解釋作業系統的基本原理,並透過一個詳盡的範例系統來展示這些原理如何被應用於實際建構一個作業系統。書本著重於平衡學術理論與工程實踐,認為單純的理論教學不足以讓學生全面理解作業系統的複雜性。
書中採用的範例系統是 MINIX 3,這是一個經過大幅修改與簡化的 Unix-like 作業系統,專為教學、高可靠性及嵌入式系統應用而重新設計。與其前身版本相比,MINIX 3 在設計理念上進行了根本性的轉變,以應對當代作業系統在肥大、緩慢和不可靠等方面的挑戰。這構成了本書一個主要且重要的論點:MINIX 3 的微核心及客戶端-伺服器架構,相較於傳統的單核心作業系統,在可靠性、模組化及易於理解方面具有顯著優勢,使其成為學習作業系統原理的理想範例,並為未來更穩健系統的設計提供了潛力模型。
這一論點的核心在於對傳統單核心(monolithic kernel)設計的批判。作者指出,現代作業系統(如 Windows、Linux、macOSX、FreeBSD)的單核心通常包含數百萬行的程式碼,所有程式碼都編譯成一個單一的巨大可執行程式,並在具有最高權限的核心模式下運行。這種設計模式意味著程式碼中任何一行的一個錯誤都可能導致整個系統崩潰。更甚者,約 70% 的程式碼通常是來自第三方廠商提供的設備驅動程式,這些驅動程式的品質難以由作業系統開發者完全控制。將如此龐大且包含大量第三方程式碼的系統做到完全無誤幾乎是不可能的任務,這直接導致了單核心作業系統的不穩定性,並使其容易受到病毒、蠕蟲等惡意軟體的攻擊。
相較之下,MINIX 3 提出了一種截然不同的設計思路。其核心(kernel)極小,程式碼行數僅約 4000 行。除了時鐘驅動程式外,其餘大部分作業系統功能,包括所有設備驅動程式、檔案系統、記憶體管理器等,都被實現為獨立、小型、模組化的使用者模式程序(user-mode processes)。這些程序在核心模式之外運行,並且每個程序都被嚴格限制其權限以及可以通訊的其他程序。這種設計的優勢在於,即使某個設備驅動程式或伺服器程序出現錯誤而崩潰,由於其運行在使用者模式且權限受限,通常只會導致該程序本身失效,而不會牽連到核心或整個系統,顯著提高了系統的整體可靠性。對於嵌入式系統或資源受限的小型 PC 而言,這種精簡和模組化的特性也具有重要意義。
本書的另一項重要論點是:透過以 MINIX 3 為範例,書本為讀者提供了一個獨特的機會,可以深入檢視一個真實作業系統的內部運作機制,這種實踐性的學習方式是理解作業系統設計原理的關鍵。 傳統上,許多作業系統課程只側重於理論,因為主流作業系統(如 UNIX)的原始碼不易取得或過於龐大複雜,不適合在課堂上進行詳細分析。MINIX 的誕生(第一版於 1987 年發布)改變了這種局面,它提供了一個功能齊全但程式碼相對精簡的 Unix-like 系統,並附帶完整的原始碼供學生學習。MINIX 3 延續了這一優良傳統,並且由於其模組化設計,核心的程式碼量更小,使得學生更容易理解作業系統的核心部分如何工作,而不必一次面對數百萬行的程式碼。書中也附帶了 MINIX 3 的程式碼列表(儘管是精簡版),並提供 live CD 和網站以方便讀者實際操作和研究。
本書還詳細解釋了作業系統的關鍵概念,包括程序(processes)、程序間通訊(IPC)、排程(scheduling)、輸入/輸出(I/O)、死結(deadlocks)、設備驅動程式(device drivers)、記憶體管理(memory management)、分頁(paging)演算法、檔案系統(file systems)設計、安全(security)與保護機制(protection mechanisms)。這些理論概念的講解是全面的,而後續章節會結合 MINIX 3 的具體實現來展示這些概念如何在實踐中落地。例如,在討論程序和 IPC 時,書中會介紹 MINIX 3 中程序如何創建、終止,以及如何透過訊息傳遞進行通訊,並探討其在實現上的細節。這種理論與實作的結合是本書重要的教學特色。
總而言之,這本作業系統教科書不僅系統地講解了作業系統的核心原理,更透過 MINIX 3 這個精心設計、高度模組化且可靠的範例系統,為讀者提供了一個獨特的視角來理解這些原理如何在一個真實的作業系統中被實現。書本強調了 MINIX 3 的微核心/客戶端-伺服器架構在可靠性和教育方面的優勢,並鼓勵讀者透過研究和修改這個系統來深入學習,而非僅停留在抽象的理論層面。
comments
comments for this post are closed