歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Linux核心--1.前言

Linux核心--1.前言

日期:2017/3/6 15:40:39   编辑:關於Unix
原著: David A Rusling 翻譯: Banyan fifa -------------------------------------------------------------------------------- 本書是為那些想了解Linux內核工作原理的Linux狂熱愛好者而寫。 它並非一本內部手冊。主要描敘了Linux設計的原理與機制;以及Li 原著: 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核心資源的有用信息。

Copyright © Linux教程網 All Rights Reserved