NO IMAGE
原著: David A Rusling 翻譯: Banyan & fifa (2001-04-27 13:52:07)
原著: David A Rusling

翻譯: Banyan & fifa
 

——————————————————————————–

 

    本書是為那些想了解Linux核心工作原理的Linux狂熱愛好者而寫。 它並非一本內部手冊。主要描敘了Linux設計的原理與機制;以及Linux核心怎樣工作及其原因。 

Linux還在不斷改進;本書基於目前比較流行且效能穩定的2.0.33核心。 

 

Version 0.8-3 

David A Rusling 

[email protected] 

——————————————————————————–
前言 
Linux是互連網上的獨特現象。雖然它是由學生的業餘愛好發展而來,但是現在它已經成為最為流行的免費作業系統。對很多人來說,Linux是一個謎。免費的東西怎麼會變得如此有價值?在個由少數軟體公司統治的世界,由一幫HACKER們編寫的東西是怎樣與那些公司的產品競爭的? 這些軟體是如何分發給分佈在世界各個角落,希望得到穩定產品的人們的?事實上Linux的確穩定而富有競爭力。許多大學與研究機構都使用Linux完成他們的日常計算任務。人們在家用PC上使用Linux,許多公司也在使用它–儘管他們並不總是樂意承認這點。Linux主要用來瀏覽WEB,管理WEB站點,撰寫與傳送EMAIL,以及玩遊戲。Linux絕對不是玩具而是具有專業水平的作業系統,它的愛好者遍及世界。

Linux的源頭要追溯到最古老的UNIX。1969年,Bell實驗室的Ken Thompson開始利用一臺閒置的 PDP-7計算機開發了一種多使用者,多工作業系統。很快,Dennis Richie加入了這個專案,在他們共同努力下誕生了最早的UNIX。Richie受一個更早的專案——MULTICS的啟發,將此作業系統命名為Unix。早期UNIX是用組合語言編寫的,但其第三個版本用一種嶄新的程式語言C重新設計了。C是Richie設計出來並用於編寫作業系統的程式語言。通過這次重新編寫,Unix得以移植到更為強大的 DEC PDP-11/45與11/70計算機上執行。後來發生的一切,正如他們所說,已經成為歷史。Unix從實驗室走出來併成為了作業系統的主流,現在幾乎每個主要的計算機廠商都有其自有版本的Unix.

Linux起源於一個學生的簡單需求。Linus Torvalds,Linux的作者與主要維護者,在其上大學時所買得起的唯一軟體是Minix. Minix是一個類似Unix,被廣泛用來輔助教學的簡單作業系統。Linus 對Minix不是很滿意,於是決定自己編寫軟體。他以學生時代熟悉的Unix作為原型, 在一臺Intel 386 PC上開始了他的工作。他的進展很快,受工作成績的鼓舞,他將這項成果通過互連網與其他同學共享,主要用於學術領域。有人看到了這個軟體並開始分發。每當出現新問題時,有人會立刻找到解決辦法並加入其中,很快的, Linux成為了一個作業系統。值得注意的是Linux並沒有包括Unix原始碼。它是按照公開的POSIX標準重新編寫的。Linux大量使用了由麻省劍橋免費軟體基金的GNU軟體,同時Linux自身也是用它們構造而成。

許多人將Linux視作簡單工具並將其放入CDROM中來分發。很多Linux使用者使用它來編寫應用程式或者執行別人編寫的應用程式。這些人熱切的閱讀HOWTO手冊,當系統的一部分被正確的設定時,他們總是激動不已,失敗時則沮喪氣餒。只有少部分人敢於編寫裝置驅動程式並將核心的補丁提供給Linus Torvalds,Linus Torvalds從每個志願者那裡接收補充程式碼與對核心的修改程式碼。

這種情形聽起來象非常混亂,但Linus進行了非常嚴格的質量控制並由他負責將所有的新程式碼加入核心。只有少部分人對Linux 核心貢獻了原始碼。 大多數Linux的使用者並不關心繫統是如何工作,或者如何組合在一起的。這種情況令人惋惜,因為閱讀Linux原始碼提供了一個學習作業系統的絕好機會。這不僅僅因為它寫得好,還因為它的原始碼是可以免費得到的。因為雖然作者們對其軟體保留版權,但是在免費軟體基金的GNU公開授權下原始碼是可以自由分發的。第一眼看去,原始碼是非常複雜的。但是通過進一步觀察你可以發現原始碼目錄中包含有Kernel,mm以及net的目錄, 不過要想知道這些目錄中包含了那些程式碼以及程式碼是如何工作的就需要對Linux的總體結構與目標有較深入的理解。簡而言之,這也是本書所希望達到的目標,為讀者提供一個Linux如何工作清晰的印象。當你將檔案從一個目錄拷到另一個目錄或者閱讀電子郵件時,不妨在腦海中勾勒一下系統中正在發生什麼事情,我還清楚的記得當我感到第一次認識到作業系統真的在工作時的興奮。這種興奮正是我想將它帶給本書的讀者的。

我第一次接觸Linux在1994年下半年當我拜訪Jim Paradis時,當時他正在致力於將Linux移植到Alpha AXP處理器系統上。從1984年開始,我曾經在DEC公司任職,主要工作是網路與通訊。1992年我開始為新成立的Digital Semiconductor分部工作。此分部的任務是全面進入商用晶片市場並銷售晶片,特別是Alpha AXP系列處理器以及DEC以外的Alpha AXP系統板。當首次聽到Linux時我便立刻意識到了這是一個有趣的機會。Jim的狂熱是鼓惑人心的,我也開始幫他一起工作。在工作中,我越來越喜歡這個作業系統及創造它的工程師團體。 

Alpha AXP僅僅是Linux可以執行的多種平臺中的一個。大多數Linux核心工作在基於Intel處理器 的系統上,但非Intel系統的Linux使用者也越來越多。它們是Alpha AXP, ARM, MIPS, Sparc與Power PC。 雖然我可以根據上敘任何一種平臺來編寫本書的內容,但是我的技術知識與背景讓我主要根據Alpha AXP處理器和ARM處理器來編寫。這是本書有時使用非Intel硬體來描敘一些重要觀點。值得注意的是,不管執行在哪種平臺上,95%的Linux核心程式碼都是相同的。同樣,本書95%的內容是關於Linux 核心的機器無關部分的討論。

本書對讀者的知識與經驗沒有任何要求。我相信對於某一事物的興趣是鼓勵自學的必要因素。不過對於計算機,或者PC和C程式語言的瞭解將有助於讀者從有關材料中獲益。

本書的組織
本書並不是特意一本Linux的內部手冊。相反它是對作業系統的介紹,同時以Linux作為示例。書中每一章遵循“從共性到特性”的原則。它們將首先給出核心子系統的概敘,然後進行儘可能的詳細描敘。 我不會用routine_X()呼叫routine_Y()來增加bar資料結構中foo域的值這種方式來描敘核心演算法。 你自己可以通過閱讀程式碼發現它。每當需要理解一段程式碼時,我總是將其資料結構畫出來。這樣我發現了許多相關的核心資料結構以及它們之間的關係。 每一章都是非常獨立的,就象Linux核心子系統一樣。當然有時它們還是有聯絡的,比如說,如果你沒有理解虛擬記憶體工作原理就無法描敘程序。 硬體基本概念一章對現代PC做了簡要介紹。作業系統必須與硬體系統緊密結合在一起協同工作。作業系統需要一些只能夠由硬體提供的服務。為了全面理解Linux,你必須瞭解有關硬體的基礎知識。 軟體基本概念一章介紹了軟體基本原理與C程式語言。討論了建立Linux這樣的作業系統的工具並且給出了作業系統的目標與功能的概敘。 記憶體管理這章描敘了Linux如何處理實體記憶體以及虛擬儲存技術。 程序管理描敘了程序的概念以及Linux核心是如何建立、管理與刪除系統中的程序。 程序間及程序與核心間通訊以協調它們的活動。Linux支援大量程序間通訊(IPC)機制。訊號與管道是 其中的兩種,Linux同時還支援系統V IPC機制。這些程序間通訊機制在IPC一章中描敘。 外部裝置互連(PCI)標準已經成為PC上低價位高數傳率的匯流排標準。PCI一章將描敘Linux核心是如何初始化並使用PCI匯流排及裝置的。 中斷及中斷處理一章將著重於Linux核心對中斷的處理。雖然處理中斷有通用的機制與介面,但某些細節是與硬體及CPU體系結構相關的。 Linux的一個長處是其對現代PC的硬體裝置強有力的支援。裝置驅動程式一章將描敘Linux核心是如何控制系統中的物理裝置。 檔案系統一章描敘了Linux核心是如何維護它所支援的檔案系統中的檔案。同時還描敘了虛擬檔案系統(VFS)及Linux核心的每種檔案系統是如何得到支援。 網路與Linux幾乎是同義的。在某種意義上Linux是WWW時代互連網的產物。其開發者通過Web來交換資訊及程式碼。網路一章描敘了Linux是如何支援TCP/IP這些網路協議。 核心機制一章主要討論能使Linux核心其他部分有效工作而由核心所提供的一些通用任務與機制。 動態模組一章描敘Linux核心是如何僅在需要時動態載入某些模組,比如檔案系統。 處理器一章給出了目前Linux可以在其上執行的一些處理器的簡要介紹。 資源一章則提供了有關Linux核心資源的有用資訊。