?? 00000008.htm
字號(hào):
<HTML><HEAD> <TITLE>BBS水木清華站∶精華區(qū)</TITLE></HEAD><BODY><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER>發(fā)信人: axp33a (無聊中...), 信區(qū): Linux <BR>標(biāo) 題: Linux內(nèi)核源代碼分析3-1 <BR>發(fā)信站: BBS 水木清華站 (Thu Aug 3 11:25:10 2000) WWW-POST <BR> <BR>第3章 內(nèi)核體系結(jié)構(gòu)概述
<BR>本章從較高層次上對(duì)內(nèi)核進(jìn)行說明。從順序上來說,本章首先介紹內(nèi)核設(shè)計(jì)目標(biāo),接下來 <BR>介紹內(nèi)核體系結(jié)構(gòu),最后介紹內(nèi)核源程序目錄結(jié)構(gòu)。
<BR>3.1 內(nèi)核設(shè)計(jì)目標(biāo)
<BR>Linux 的內(nèi)核展現(xiàn)出了幾個(gè)相互關(guān)聯(lián)的設(shè)計(jì)目標(biāo),它們依次是:清晰性、兼容性、可移植 <BR>性、健壯性、安全性和速度。這些目標(biāo)有時(shí)是互補(bǔ)的,有時(shí)則是矛盾的。但是它們被盡可 <BR>能的保持在相互一致的狀態(tài),內(nèi)核設(shè)計(jì)和實(shí)現(xiàn)的特性通常都要回歸到這些問題上來。本節(jié) <BR>接下來的部分將分別討論這些設(shè)計(jì)目標(biāo),同時(shí)還將對(duì)它們之間的取舍與平衡進(jìn)行簡要的說 <BR>明。
<BR>3.1.1 清晰性
<BR>稍微簡化點(diǎn)說,內(nèi)核目標(biāo)是在保證速度和健壯性的前提下盡量清晰。這和現(xiàn)在的大多數(shù)應(yīng) <BR>用程序的開發(fā)有所區(qū)別,后者的目標(biāo)通常是在保證清晰性和健壯性的基礎(chǔ)上盡量提高速度 <BR>。因而在內(nèi)核內(nèi)部,速度和清晰性經(jīng)常是一對(duì)矛盾。
<BR>在某種程度上,清晰性是健壯性的必要補(bǔ)充:一個(gè)很容易理解的實(shí)現(xiàn)方法比較容易證明是 <BR>正確的;或者即使不正確,也能比較容易的找出其問題所在。從而這兩個(gè)目標(biāo)很少會(huì)發(fā)生 <BR>沖突。
<BR>但是清晰性和速度通常卻是一對(duì)矛盾。經(jīng)過仔細(xì)手工優(yōu)化的算法通常都使用了編譯器生成 <BR>代碼的類似技術(shù),很少可能是最清晰的解決方案。當(dāng)內(nèi)核中清晰性和速度要求不一致時(shí), <BR>通常都是以犧牲清晰性來保證速度的。即便如此,程序員仍然清楚地知道清晰性的重要性 <BR>,而且他們也做了大量的工作以使用最清晰的方法保證速度。
<BR>3.1.2 兼容性
<BR>正如第1章中所述,Linux最初的編寫目的是為了實(shí)現(xiàn)一個(gè)完整的、與Unix兼容的操作系統(tǒng) <BR>內(nèi)核。隨著開發(fā)過程的展開,它也開始以符合POSIX標(biāo)準(zhǔn)為目標(biāo)。就內(nèi)核而言,兼容Unix <BR>(至少是同某一現(xiàn)代的Unix實(shí)現(xiàn)相兼容)和符合POSIX標(biāo)準(zhǔn)并沒有什么區(qū)別,因此我們也 <BR>不會(huì)在這個(gè)問題上詳細(xì)追究。
<BR>內(nèi)核提供了另外一種類型的兼容性。基于Linux 的系統(tǒng)能夠提供可選擇的對(duì)Java.class文 <BR>件的本地運(yùn)行支持(據(jù)說Linux是第一個(gè)提供這種支持的操作系統(tǒng))。盡管實(shí)際負(fù)責(zé)Java <BR>程序解釋執(zhí)行的是另外一個(gè)Java虛擬機(jī)進(jìn)程,該虛擬機(jī)并沒有內(nèi)置到內(nèi)核中。但是內(nèi)核提 <BR>供的這種機(jī)制可以使得這種支持對(duì)用戶是透明的。通過內(nèi)核本身提供的程度不同的支持( <BR>這并不代表大部分工作像Java的解決方式一樣能夠通過外部進(jìn)程實(shí)現(xiàn)),對(duì)其他可執(zhí)行文 <BR>件格式的支持也能夠以同樣的方式插入內(nèi)核中。這方面的內(nèi)容將在第7章中詳細(xì)介紹。
<BR>另外需要說明的是,GNU/Linux系統(tǒng)作為一個(gè)整體通過DOSEMU仿真機(jī)器提供了對(duì)DOS可執(zhí)行 <BR>程序的支持,而且也通過WINE設(shè)計(jì)提供了對(duì)Windows可執(zhí)行程序的部分支持。系統(tǒng)還以同 <BR>樣的方式通過SAMBA提供了對(duì)Windows兼容文件和打印服務(wù)的支持。但是這些都不是同內(nèi)核 <BR>密切相關(guān)的問題,因此在本書中我們不再對(duì)它們進(jìn)行討論。
<BR>兼容性的另外一個(gè)方面是兼容異種文件系統(tǒng),本章中稍后會(huì)有更為詳細(xì)的介紹,但是大部 <BR>分內(nèi)容已經(jīng)超出了本書的范圍。Linux能夠支持很多文件系統(tǒng),例如ext2(“本地”文件 <BR>系統(tǒng))、ISO-9660(CD-ROM使用的文件系統(tǒng))、MS-DOS、網(wǎng)絡(luò)文件系統(tǒng)(NFS)等許多其 <BR>他文件系統(tǒng)。如果你有使用其他操作系統(tǒng)格式的磁盤或者一個(gè)網(wǎng)絡(luò)磁盤服務(wù)器,那么 <BR>Linux將能夠和這些不同的文件系統(tǒng)進(jìn)行交互。
<BR>兼容性的另外一個(gè)問題是網(wǎng)絡(luò),這在當(dāng)今Internet流行的時(shí)代尤為重要。作為Unix的一個(gè) <BR>變種,Linux自然從很早就開始提供對(duì)TCP/IP的支持。內(nèi)核還支持其他許多網(wǎng)絡(luò)協(xié)議,它 <BR>們包括AppleTalk協(xié)議的代碼,這使得Linux單元可以和Macintosh機(jī)自由通訊;Novell的 <BR>網(wǎng)絡(luò)協(xié)議,也就是網(wǎng)絡(luò)報(bào)文交換(IPX),分組報(bào)文交換(SPX)和NetWare核心協(xié)議(NCP <BR>);IP協(xié)議的新版本IPv6以及其它一些不太出名的協(xié)議。
<BR>兼容性考慮的最后一個(gè)方面是硬件兼容性。似乎每個(gè)不常見的顯卡、市場份額小的網(wǎng)卡、 <BR>非標(biāo)準(zhǔn)的CD-ROM接口和專用磁帶設(shè)備都有Linux的驅(qū)動(dòng)程序(只要它不是專為特定操作系 <BR>統(tǒng)設(shè)計(jì)的專用硬件)。而且只要越來越多的廠商也逐漸認(rèn)識(shí)到Linux的優(yōu)勢,并為更容易 <BR>地實(shí)現(xiàn)向Linux上移植而開放相應(yīng)的源程序代碼,Linux對(duì)硬件支持會(huì)越來越好。
<BR>這些兼容性必須通過一個(gè)重要的子目標(biāo):模塊度(modularity)來實(shí)現(xiàn)。在可能的情況下 <BR>,內(nèi)核只定義子系統(tǒng)的抽象接口,這種抽象接口可以通過任何方法來實(shí)現(xiàn)。例如,內(nèi)核對(duì) <BR>于新文件系統(tǒng)的支持將簡化為對(duì)虛擬文件系統(tǒng)(VFS)接口的代碼實(shí)現(xiàn)。第7章中介紹的是 <BR>另外一個(gè)例子,內(nèi)核對(duì)二進(jìn)制句柄的抽象支持是實(shí)現(xiàn)對(duì)諸如Java之類的新可執(zhí)行格式的支 <BR>持的方法。增加新的可執(zhí)行格式的支持將轉(zhuǎn)變?yōu)閷?duì)相應(yīng)的二進(jìn)制句柄接口的實(shí)現(xiàn)。
<BR> 3.1.3 可移植性
<BR>與硬件兼容性相關(guān)的設(shè)計(jì)目標(biāo)是可移植性,也就是在不同硬件平臺(tái)上運(yùn)行Linux的能力。 <BR>系統(tǒng)最初是為運(yùn)行在標(biāo)準(zhǔn)IBM兼容機(jī)上的Intel x86 CPU而設(shè)計(jì)的,當(dāng)時(shí)根本沒有考慮到可 <BR>移植性的問題。但是從那以后情況已經(jīng)發(fā)生了很大的變化。現(xiàn)在正式的內(nèi)核移植包括向基 <BR>于Alpha、ARM、Motorola 68x0、MIPS、PowerPC、SPARC及SPARC-64 CPU系統(tǒng)的移植。因 <BR>而,Linux可以在Amigas、舊版或新版的Macintosh、Sun和SGI工作站及NeXT機(jī)等機(jī)器上運(yùn) <BR>行。而且這些還只是標(biāo)準(zhǔn)內(nèi)核發(fā)行版本的移植范圍。從老的DEC VAX到3Com掌上系列個(gè)人 <BR>數(shù)字助理(例如Palm III)的非正式的移植工作也在不斷進(jìn)行中。成功的非正式移植版本 <BR>后來通常都會(huì)變成正式的移植版本,因此這些非正式的移植版本很多最終都會(huì)出現(xiàn)在主開 <BR>發(fā)樹中。
<BR>廣泛平臺(tái)支持之所以能夠成功的部分原因在于內(nèi)核把源程序代碼清晰地劃分為體系結(jié)構(gòu)無 <BR>關(guān)部分和體系結(jié)構(gòu)相關(guān)部分。在本章的后續(xù)部分將對(duì)這個(gè)問題進(jìn)行更深入的討論。
<BR>3.1.4 健壯性和安全性
<BR>Linux必須健壯、穩(wěn)定。系統(tǒng)自身應(yīng)該沒有任何缺陷,它還應(yīng)該可以保護(hù)進(jìn)程(用戶)以 <BR>防止互相干擾,這就像把整個(gè)系統(tǒng)從其他系統(tǒng)中隔離開來加以保護(hù)一樣。后一種考慮很大 <BR>程度上是受信任的用戶空間應(yīng)用程序領(lǐng)域的問題,但是內(nèi)核至少也應(yīng)該提供支撐安全體系 <BR>的原語(primitive)。健壯性和安全性比任何別的目標(biāo)都要重要,包括速度。(系統(tǒng)崩 <BR>潰的速度很快又有什么好處呢?)
<BR>保證Linux健壯性和安全性的唯一一個(gè)最重要的因素是其開放的開發(fā)過程,它可以被看作 <BR>是一種廣泛而嚴(yán)格的檢查。內(nèi)核中的每一行代碼、每一個(gè)改變都會(huì)很快由世界上數(shù)不清的 <BR>程序員檢驗(yàn)。還有一些程序員專門負(fù)責(zé)尋找和報(bào)告潛在的缺陷—他們這樣做完全是出于自 <BR>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -