Daniel Bovet & Marco Cesati:understanding The Linux Kernel@2005 (第3版)
《深入理解 Linux 核心 第三版》主要論點闡釋
本書《深入理解 Linux 核心 第三版》(Understanding the Linux Kernel, 3rd Edition)由 Daniel P. Bovet 與 Marco Cesati 合著,旨在引導讀者深入 Linux 作業系統的核心,揭示其內部運作機制、設計原理、關鍵資料結構與演算法。本書的出版目的,是為了讓對 Linux 核心充滿好奇、想了解其「內部真正運作方式」以及為何能在眾多系統上表現出色的讀者,能夠透過詳盡的解釋和程式碼片段剖析,成為真正的「Linux Hacker」。
以下為本書提煉出的主要論點及詳盡解釋:
-
本書的核心宗旨是引導讀者深入理解 Linux 核心的內部運作機制與設計細節。
- 作者明確指出,要透徹了解 Linux 的運作方式及其在多樣化系統上的優異表現,必須深入其核心。核心負責處理 CPU 與外部世界的互動,決定哪些程式分享處理器時間及順序,管理有限記憶體以高效支援數百個程序,並專業組織資料傳輸以減少 CPU 等待相對較慢磁碟的時間。
- 本書第三版(涵蓋 Kernel 2.6.11 版本)被定位為一次「導覽」,帶領讀者探究核心中最顯著的資料結構、演算法及程式設計技巧。作者超越表面特徵,提供有價值的見解,旨在幫助讀者理解事物「在機器內部真正如何運作」。
- 透過對相關程式碼片段的逐行解剖,並闡釋 Linux 採取特定做法的理論基礎和原因,本書不僅僅是學術性的演練,更旨在讓讀者了解在何種條件下 Linux 能發揮最佳效能,以及它如何在程序排程、檔案存取和記憶體管理等多樣化環境中提供良好的系統回應。最終目標是幫助讀者充分利用他們的 Linux 系統。
-
本書聚焦於 Linux 核心版本 2.6.11,並特別關注該版本中經過顯著變革的子系統。
- 本書明確標明其涵蓋的 kernel 版本是 2.6.11。這是非常重要的資訊,因為核心版本之間可能存在顯著差異。
- 作者特別提到,Linux 2.6 版本相較於之前的版本,在幾乎所有核心子系統上都經歷了重大變化,尤其是在記憶體管理和塊設備領域。這意味著本書不僅描述了 2.6 版本的整體架構,還會深入探討這些變動較大的關鍵領域。
- 本書鎖定的具體主題範圍包括:記憶體管理(涵蓋檔案緩衝、程序交換、直接記憶體存取 DMA)、虛擬檔案系統層及 Ext2 和 Ext3 檔案系統、程序建立與排程、信號與中斷及設備驅動程序的基本介面、計時、核心內部同步、程序間通訊 (IPC) 以及程序執行。這些主題構成了理解核心運作的基石。
-
本書採用由硬體相關到硬體獨立的「由下而上」組織方式,並集中描述 80×86(i386)架構,以提供具體且深入的分析。
- 作者在編寫本書時面臨一個關鍵決策:是否針對特定硬體平台進行描述。他們決定選擇前者,並集中於非常流行且廉價的 IBM 相容個人電腦,即 80×86 微處理器及相關支援晶片。
- 選擇特定硬體的原因有二:高效的核心會利用硬體特性(如位址技術、快取、處理器異常、特殊指令等),理解核心運作必須先了解硬體提供的支援;雖然大部分 Unix 核心程式碼是處理器獨立的 C 語言,但關鍵部分是組合語言,需要研究與硬體互動的程式碼片段。
- 作者的策略是僅素描完全由硬體驅動的特性,而詳細描述需要軟體支援的部分,因為他們更關注核心設計而非計算機架構。這種方法旨在讓讀者透過對最流行的平台實現細節的學習,更好地理解分頁的通用理論以及如何在其他平台上研究實現。這種具體化的描述方式是本書的一大特色。
- 書中章節的組織遵循由下而上的方法,從硬體相關主題開始,以硬體獨立主題結束。但作者也承認,由於記憶體管理、程序管理和檔案系統等領域相互交織,一些前向參考(指向尚未解釋的主題)是不可避免的。每個章節通常從理論概述開始,然後深入探討資料結構和函數,最後常常展示使用者應用程式發出的系統呼叫如何得到支援。
-
相較於其他 Unix 變體,本書強調 Linux 的獨特優勢,尤其是在其開放性、靈活性、高效能和社群支援方面。
- 本書開篇即將 Linux 定位為 Unix-like 家族的一員,並與 SVR4、BSD、Solaris 等商業 Unix 以及 FreeBSD、NetBSD 等開源核心進行對比。
- 作者詳細列舉了 Linux 在技術層面的競爭力:單體式核心、出色的動態模組支援(自動載入/卸載)、使用輕量級程序(LWP,不同於其他系統的內核線程)、可搶佔核心(2.6 版本)、優良的 SMP 支援(涵蓋 NUMA)、多樣化的日誌檔案系統支援(Ext3、ReiserFS 等),但也指出其沒有 STREAMS I/O 子系統。
- 更重要的是,本書強調了 Linux 作為開源軟體的非商業優勢:免費、完全可自訂(可讀可改源碼、編譯選項)、能在廉價硬體上運行、強大且高效能(充分利用硬體特性,設計注重效率)、極度穩定、核心小巧精簡、高度相容(支援多種檔案系統和網路協定,甚至可執行為其他作業系統編寫的程式)、以及得益於龐大活躍社群而提供的出色支援(快速獲得補丁、驅動程序和技術解答)。這些優勢是本書認為吸引讀者深入研究 Linux 核心的重要動機。
-
本書不僅解釋程式碼的「如何」運作,更闡釋核心設計的「為何」,強調其理論基礎與歷史沿革。
- 作者在簡介部分即提到,他們的目標是「超越表面特徵」,並「提供一個背景,例如主要功能的歷史和它們被使用的原因」。這不僅限於程式碼本身的功能,更深入探討 Linux 如此設計的理論基礎。
- 書中各章節的開頭通常會提供理論概述,這與對應主題的程式碼實現形成對比。例如,在討論記憶體管理時,會先介紹虛擬記憶體、分頁、快取等通用概念,然後才進入 Linux 特定的頁描述符、分區管理、好友系統等實現細節。
- 這種理論與實踐結合的方式,使得本書不僅適用於想閱讀原始碼的讀者,對於那些想了解現代作業系統關鍵設計問題的人來說,也能從中獲得寶貴的見解。它將 Linux 的設計置於更廣闊的作業系統理論和 Unix 發展歷史的背景下進行解釋。
總結來說,本書的核心論點是:Linux 核心是一個複雜但設計精良、高效且獨具優勢的開源作業系統核心,透過深入探討其在 2.6.11 版本的具體實現細節(特別是在 80×86 硬體上),並結合通用的作業系統原理和歷史背景,讀者可以全面理解其內部機制,從而提升對 Linux 系統的掌握能力,甚至成為一名核心開發者。本書的價值在於其深入的技術分析、對關鍵資料結構和演算法的詳細描述、以及對設計選擇背後原因的闡釋。
comments
comments for this post are closed