前言



Linux是Internet的產物,從屬於一個學生(Linus Torvalds)的個人愛好演變成為一 個當今最流行的免費作業系統。對許多人而言,Linux是乎是個迷。 一個免費的東 西怎麼會有價值?在一個被一群軟體巨頭統治的(系統)軟體王國裡,一個由一些電 腦hackers編寫的作業系統如何能夠參與競爭?一個由不同的國家許多不同的人編寫 的軟體如何能夠保持其穩定性和高效性?這裡的答案是Linux具有非常好的可靠性, 高效性和競爭能力。許多大學和研究機構都在用Linux來作計算。許多人們已在其 PC上安裝了Linux。絕大多數公司都或多或少地在使用Linux。Linux被廣泛地用來瀏 覽web站點,檔案處理,發送email ,玩電腦游戲。Linux絕不是一個電腦界的 玩具,而是一個由全世界的愛好者開發的非常完善的,專業化的作業系統。 Linux 的源頭可以追溯到Unix 家族。1969年,貝爾實驗室的研究人員Ken Thompson其 開始在一台空閒的PDP-7機器上實驗其多用戶,多任務的作業系統(multi-user, multi-tasking operating system) 。不久Dennis Richie和其他兩位同事加入了他的行列。他們與 實驗室中的其他同事一道開發出了最早期的Unix版本。Richie在早期的項目MULTICS 中發揮了很大的作用。Unix其實是MULTICS的雙關語。早期的Unix是用組合語言寫的。第 3版時採用了C語言。C語言是Richie設計並編寫的,以用來作為編寫作業系統設計的 語言。用C改寫過的Unix使得Unix可以被移植PDP-11/45 和DIGITAL 11/70 電腦上。 Unix移植到DIGITAL 11/70是一個歷史性的轉折,使得Unix正式從實驗室走向大型主機 計算環境。很快,絕大多數的電腦制造商都發布了其相應的Unix版本。 Linux誕生的原因極其簡單。Linus Torvalds,Linux的作者和主要管理者,當時窮 的只能夠付的起Minix。Minix是一個非常簡單,Unix風格的,被廣泛用在教學上的 作業系統。Linus對Minix的功能不是很滿意(譯者注:不知Andrew Tanenbaum看見這 句話會有何感想。“後生可畏?”。有興趣的讀者可以存取Andrew的主頁.) 決定自己動手編寫一個軟體。因為在學校裡每天用的都是Unix, 所以他選擇將Unix作 為他的軟體的模型.最開始的工作是在一台Intel 386 的PC機上。他的進展很迅速。 Linus對他所做的事情充滿了興趣,並通過剛剛出現的,還侷限在學術領域的電腦網路, 將已有的程式碼共享給其他的學生。 其他的人看見了Linus的軟體並開始加入開發的行列。 不同的人由於在使用Linux時碰到不同的問題,所以這個軟體也就不斷地被更新和完善。 不久之後,Linux就成為一個完整的作業系統了。值得注意的是Linux中沒有任何Unix程式碼, 而是根據POSIX標準重新編寫的Linux中使用了許多在Cam bridge , Massachusetts的Free Software Foundation的提供GNU軟體。 多數人僅把Linux 當做一個簡單的工具來使用。也有許多用戶在Linux進行應用程式 的開發。只有很少數的人敢於為Linux寫設備驅動程式和核心的patches(譯者注:這 個詞不太好翻譯)。 Linus Torvalds接受來自任何人和地方的關於核心的補充和修改。 這似乎有點像無政府主義。當Linus嚴把質量關並由他自己將新的程式碼加入核心。當 然,在任何時候,從事Linux核心開發的人員畢竟是只有一少部份人。 大多數Linux用戶似乎不關心這個作業系統是如何構造和運行的。這不是個明智的決 定因為學習Linux是更多理解一個作業系統功能的有利途徑。Linux不僅僅是設計的 很好,更重要的是其原始碼是公開的。這是因為雖然作者擁有這個軟體的版權,但 在Free Software Foundation's GNU Public License的基礎上,原始碼是可以免費 獲取的。對剛接觸原始碼的人,起初會覺得迷惑當看見一些叫做kernel,mm,和net的 幾個目錄。它們含有些什麼?這些程式碼是如何工作的?為了解決上述問題,我們需要 的是對整個Linux的結構有個總體的了解。這也正是本書的目的:提供一個關於Linux核 心如何工作的清楚的畫面,從而使得當你在運行一些應用程式時,你可以明白操作 系統核心處正在發生著什麼(譯者注:這一點是為什麼要鼓勵應用程式開發者了解作業 系統的結構。例如,不理解作業系統的排程,很難想像一個應用程式開發者可以 編出一個高效的多執行緒並發程式)。 (此處譯者略去原作者的自我介紹,有興趣的讀者可以存取其site) 這本書講述的是Alpha AXP-based Linux版本(譯者注:這是因為作者在寫此書時在 Digital公司(後來被Compag吞並﹔著名的Alta Vista seearch engine出自Digital)任 職。然而95%的Linux核心原始碼是與具體的硬體平台無關的。換而言之,本書95%的 內容是講述與硬體無關的Linux核心。 關於讀者 本書不要求讀者必須具備任何知識和經驗的前提。我們假設讀者會在需要時補充相 關的知識。具備一定的電腦知識和C語言功底將幫助讀者更好地理解本書。 本書的組織 本書並不是關於Linux內部的手冊。它是關於通常意義上的作業系統,特別是對於Linux的 介紹。每一章節按照從”普通到特殊“的規則來概觀。首先在具體介紹細節之前, 我們給出一個對核心子系統的綜述。 關於核心的具體演算法被特意地略去。有興趣的讀者可以參閱具體的原始碼。本書將 重點放在核心資料結構和其之間的關系上。 本書每一章都相對獨立,就像每一個Linux子系統完成相對獨立的功能一樣。當然章 節之間也是相關聯的。例如,你不能很好地描述一個程序如果不理解虛擬記憶體是如 何工作的。 硬體基礎章節給出一個對當代PC的簡要介紹。一個作業系統必須工作在一個硬體基 礎上。作業系統中的某些功能是與硬體相關的。為了理解Linux作業系統,讀者需要 具備一定的底層硬體知識。 軟體基礎章節介紹了基本的軟體知識原理並論及了組合語言和C語言。它們都是編寫一個 作業系統不可缺少的工具。另外本章給出了對作業系統的功能和目標的一個綜述。 記憶體管理章節描述了Linux如何管理系統中的實體和虛擬記憶體。 程序章節描述了什麼是一個程序,Linux核心如何創建,管理和刪除系統中的程序。 程序之間,程序與核心之間通過通訊來調整/安排它們的行為。Linux支援很多種進 程間通訊--IPC(Inter-Process Communication)機制。信號與管道是其中的兩種Linux還 支援System V IPC機制。關於IPC機制的內容在IPC章節描述。 PCI標準是一個高效的PC匯流排。PCI章節講述了Linux核心如何初始化合使用PCI匯流排 和系統中的PCI 設備。 中斷和中斷處理章節探討了Linux核心如何處理中斷。盡管作業系統核心裡提供一些 通用的機制和介面來處理中斷,一些關於中斷處理的細節是與硬體體系結構有關的。 Linux的優點之一是它支援許多硬體設備。設備驅動程式章節描述了Linux核心如何 控制系統中的實體設備。 檔案系統章節講述了Linux核心如何維護其檔案系統中的檔案,描述了虛擬檔案系統 (Virtual File System)和如何支援Linux核心中的真正檔案系統。 網路與Linux是一對同義詞。從某種真實的意義上講,Linux是Internet或World Wide Web (WWW)的產物。Linux的開發和使用 者通過web來交換信息和程式碼 。Linux通常 被用來支援機構的網路需求。網路章節描述了Linux如何支援TCP/IP通訊協定族。 核心機制章節探討了Linux核心需要支援/完成的一些通用任務和機制,以用來使得 核心其他部份有效地工作在一起。 模組章節講述了Linux如何動態地裝載功能模組,例如檔案系統。 原始碼章節描述了對應於特定的核心功能的Linux核心原始碼位址。讀者可以依據本 章的介紹來開始閱讀原始碼。 本書的約定 serif font 用戶必須輸入的命令或文本。 Type font 資料結構和資料結構中的域。 本書中所引用的原始程式都基於相對路徑/usr/src/linux。如foo/bar.c,則其實際的 路徑是/usr/src/linux/foo/bar.c。 商標 Caldera, OpenLinux and the ``C'' logo are trademarks of Caldera, Inc. Caldera OpenDOS 1997 Caldera, Inc. DEC is a trademark of Digital Equipment Corporation. DIGITAL is a trademark of Digital Equipment Corporation. Linux is a trademark of Linus Torvalds. Motif is a trademark of The Open System Foundation, Inc. MSDOS is a trademark of Microsoft Corporation. Red Hat, glint and the Red Hat logo are trademarks of Red Hat Software, Inc. UNIX is a registered trademark of X/Open. XFree86 is a trademark of XFree86 Project, Inc. X Window System is a trademark of the X Consortium and the Massachusetts Institute of Technology. 感謝 I must thank the many people who have been kind enough to take the time to e-mail me with comments about this book. I have attempted to incorporated those comments in each new version that I have produced. Special thanks must go to John Rigby and Michael Bauer who gave me full, detailed review notes of the whole book. Not an easy task.