Linux 2.6內(nèi)核的精彩世界
Linux 2.6內(nèi)核的精彩世界
Joseph Praneich
Linux內(nèi)核2.6版的開(kāi)發(fā)已經(jīng)接近尾聲,2.6測(cè)試版發(fā)布已經(jīng)二個(gè)月了,正式版預(yù)計(jì)明年年初發(fā)布。作為一個(gè)主要發(fā)布版本,2.6相對(duì)于2.4有很大的改動(dòng);它引入了許多新的特性,同樣也去除很多過(guò)時(shí)的特性。它在哪些方面有大的改動(dòng)?它對(duì)Linux的開(kāi)發(fā)人員以及其他層面的Linux用戶可能有什么樣的影響?閱讀本文,您將得到答案。--譯者
盡管我們第一次啟動(dòng)Linux 2.4似乎只是昨天的事,時(shí)間已經(jīng)流走,內(nèi)核開(kāi)發(fā)團(tuán)隊(duì)的2.6版內(nèi)核開(kāi)發(fā)工作已經(jīng)接近完成了。本文將試圖描述2.6內(nèi)核中的許多新特性(側(cè)重i386平臺(tái)的Linux)。和封閉源碼的軟件的預(yù)發(fā)布不一樣的是,這里所描述的所有特性當(dāng)前都是2.5版內(nèi)核開(kāi)發(fā)樹(shù)中可用的(其中一些的bug少一些,另一些bug多一些)。(按照Linux的傳統(tǒng),偶數(shù)版本的內(nèi)核是穩(wěn)定的,奇數(shù)版本的只是開(kāi)發(fā)用的)。也就是說(shuō),這里所描述的一些特性在實(shí)際的2.6版本中仍可能被去除或標(biāo)志為"experimental"(試驗(yàn)性)。然而內(nèi)核當(dāng)前處于特性凍結(jié)(feature-freeze)時(shí)期,最終的發(fā)行版本應(yīng)該不大可能過(guò)于偏離這里的描述。同時(shí)也應(yīng)該清楚這里描述的一些"新"特性在第一次出現(xiàn)在2.6系列內(nèi)核后,可能被向后移植到了官方的或者發(fā)行版供應(yīng)商的2.4版內(nèi)核之中。
或許使得這篇文章更為晦澀的是,即將到來(lái)的內(nèi)核的版本號(hào)至今仍未確定。最可能使用的版本號(hào)是2.6,但是一些人提議版本號(hào)可以使用3.0,因?yàn)檫@個(gè)版本中包含了NUMA以及無(wú)MMU系統(tǒng)的支持。為論述方便,本文將一直使用2.6作為即將到來(lái)的內(nèi)核的版本號(hào)。
您正在閱讀的是本文檔(《Linux 2.6內(nèi)核的精彩世界》)非正式版的第一版,完稿于2003年7月13日,基于2.5.75開(kāi)發(fā)版內(nèi)核。隨著Linux內(nèi)核最后工作的完成,這份文檔將發(fā)布其他非正式版,但是這份文檔的正式版直到2.6的最后發(fā)布才宣告完成。由于本文是非正式版的第一版,其中可能有錯(cuò)誤或者疏漏;如果您發(fā)現(xiàn)了它們,請(qǐng)告訴我,我將很高興地去修正它們。
到目前為止的故事...
Linux內(nèi)核始于1991年由Linus Torvalds為他的386開(kāi)發(fā)的一個(gè)類Minix的操作系統(tǒng)。Linus初始曾想命名為這個(gè)系統(tǒng)為Freax,但很幸運(yùn)的是最后他最后沒(méi)有那樣做。Linux 1.0的官方版發(fā)行于1994年3月,包含了386的官方支持,僅支持單cpu系統(tǒng)。Linux 1.2發(fā)行于1995年3月,它是第一個(gè)包含多平臺(tái)(Alpha,Sparc,Mips等)支持的官方版本。Linux 2.0發(fā)行于1996年6月,包含很多新的平臺(tái)支持,但是最重要的是,它是第一個(gè)支持SMP(對(duì)稱多處理器)體系的內(nèi)核版本。Linux 2.2在1999年1月到來(lái),它帶來(lái)了SMP系統(tǒng)上性能的極大提升,同時(shí)支持更多的硬件。最后,Linux 2.4于2001年1月發(fā)布,它進(jìn)一步地提升了SMP系統(tǒng)的擴(kuò)展性,同時(shí)它也集成了很多用于支持桌面系統(tǒng)的特性:USB,PC卡(PCMCIA)的支持,內(nèi)置的即插即用,等等。Linux 2.6不僅包含了這些特性,同時(shí)也是一個(gè)無(wú)論對(duì)相當(dāng)大的系統(tǒng)還是相當(dāng)小的系統(tǒng)(PDA等)的支持都有很大提升的"大跨越"。
多種平臺(tái)支持
能夠支持相當(dāng)廣泛的硬件和平臺(tái),是采用Linux作為內(nèi)核的操作系統(tǒng)(比如 GNU操作系統(tǒng), 系統(tǒng)和環(huán)境常常是和Linux一塊分發(fā)。Linux一般不被認(rèn)為是獨(dú)立的操作系統(tǒng),只是操作系統(tǒng)的內(nèi)核。)的優(yōu)勢(shì)之一。Linux自1.2版就開(kāi)始包含對(duì)新的處理器類型和特性的支持,最新的Linux 2.6內(nèi)核發(fā)布版本也不例外。這種趨勢(shì)不會(huì)直接影響到Linux在Intel平臺(tái)下的使用,同時(shí)使得Linux能在盡可能大的范圍內(nèi)被使用,這一點(diǎn)非常重要。
小規(guī)模 - 嵌入式系統(tǒng)中的Linux
Linux 2.6 擴(kuò)展多平臺(tái)支持的一個(gè)主要途徑就是把uClinux的大部并入了主流內(nèi)核(mainstream kernel)。uCLinux(可以發(fā)音為"you-see-Linux",但更正確的拼寫,首字母應(yīng)該式希臘字母"mu")是將Linux應(yīng)用在微控制器平臺(tái)的項(xiàng)目。很多年來(lái),這個(gè)Linux分支為許多嵌入式芯片提供了支持,把它更多的集成到主流內(nèi)核中是一件非常有意義的事。
不像通常的Linux移植版本,這里描述的嵌入式移植版由于硬件限制和通常的Linux相比,不具有所有類似的特性。主要的區(qū)別在于:這些移植版是針對(duì)于沒(méi)有內(nèi)存管理單元(MMU)的處理器的(Intel的CPU從386開(kāi)始就有MMU了)。缺少M(fèi)MU的支持,運(yùn)行真正的多任務(wù)系統(tǒng)時(shí),任務(wù)之間沒(méi)有內(nèi)存保護(hù)機(jī)制(因此任何程序都可以使得其他程序崩潰),一些有關(guān)進(jìn)程派生的系統(tǒng)調(diào)用也無(wú)法實(shí)現(xiàn)。正是因?yàn)闆](méi)有內(nèi)存保護(hù)機(jī)制(或者說(shuō),沒(méi)有任何安全性可言),它們不適用于多用戶系統(tǒng)。
在對(duì)嵌入式處理器支持上,Linux 2.6有四個(gè)主要的新進(jìn)步。首先是對(duì)Motorola的新型嵌入式m68k系列處理器移植。這些被命名為Dragonball或是ColdFire的處理器可以在Motorola,Lineo,Arcturus或是其他廠商生產(chǎn)的系統(tǒng)或是評(píng)估板上找到。大多數(shù)Linux用戶應(yīng)該對(duì)這些處理器相當(dāng)熟悉,因?yàn)閺腜alm 1000到最新的Palm III,他們一直是Palm Pilots的心臟。不幸的是,對(duì)早期沒(méi)有MMU的m68k處理器(比如早期蘋果機(jī)上使用的68000系列)還沒(méi)有支持。最新支持的嵌入式平臺(tái)還包括日立(Hitachi)的H8/300系列(不包含H8S,但可能會(huì)盡快地集成進(jìn)來(lái))以及NEC v850處理器。
無(wú)論怎么強(qiáng)調(diào)Linux 2.6旨在支持無(wú)MMU系統(tǒng)的主要體系結(jié)構(gòu)變化,都不為過(guò)分。所有Linux的前期版本,不論直接或是間接,都起源于Linus最初在Intel 80386上的工作,局限性是固有的。沿著這個(gè)方向(對(duì)無(wú)MMU系統(tǒng)的支持),將來(lái)也許會(huì)有更多的其他早期的硬件被支持(事實(shí)上,已經(jīng)有關(guān)于此目的的項(xiàng)目啟動(dòng))。但是,不像為現(xiàn)代的以及仍在生產(chǎn)中的嵌入式處理器的提供支持,對(duì)早期的硬件的支持被更多地認(rèn)為是基于某種愛(ài)好,并且對(duì)于最終用戶而言很可能是無(wú)用的(因此在今后的Linux的官方發(fā)布版本也許不會(huì)將其包含在內(nèi))。
最新的Linux版本包含了對(duì)Axis通信公司的ETAX CRIS("Code Reduced Instruction Set")處理器的支持(更確切地說(shuō),支持ETRAX 100LX及更新的產(chǎn)品),它從技術(shù)的角度而言不是uCLinux合并的一部分(因?yàn)樗琈MU單元)。實(shí)際上對(duì)這款處理器的支持在2.4開(kāi)發(fā)周期就已經(jīng)有了,但它在2.4.0以后才被引入,所以現(xiàn)在應(yīng)該提到它。它是主要用于網(wǎng)絡(luò)設(shè)備的嵌入式處理器。與此相關(guān)的ETRAX 100,是得到uClinux支持的無(wú)MMU處理器,但是在主流的Linux內(nèi)核中相關(guān)支持卻沒(méi)有集成進(jìn)來(lái)。
Opteron支持 - 消費(fèi)級(jí)的64位Linux
另一個(gè)在2.4.x開(kāi)發(fā)環(huán)節(jié)就已經(jīng)并入但這里仍然值得提及的是對(duì)AMD Opteron芯片(基于AMD64體系結(jié)構(gòu))的支持。Opteron向后與Intel-clone的處理器兼容,并且,甚至可能得到微軟的支持。是它還是Intel的Itanium家族的某一成員成為64位消費(fèi)級(jí)產(chǎn)品的事實(shí)標(biāo)準(zhǔn)現(xiàn)在還很難下定論。
盡管2.4系列內(nèi)核的后期版本已經(jīng)可以在該芯片上運(yùn)行,但作為產(chǎn)品應(yīng)用仍受到了很大限制。對(duì)高端用戶來(lái)說(shuō),最嚴(yán)重的問(wèn)題是,每個(gè)應(yīng)用程序的RAM的使用都被限制在512MB以內(nèi)。另一方面,新內(nèi)核對(duì)在該平臺(tái)上運(yùn)行x86(32位)的程序的支持得到了改進(jìn)。
子體系結(jié)構(gòu)(Subarchitecture)支持
Linux 2.6除了對(duì)許多新的處理器體系結(jié)構(gòu)外,還包含了一個(gè)稱為子體系結(jié)構(gòu)(Subarchitecture)的新概念。以前,Linux通常假設(shè)處理器和其他硬件是配套的。也就是說(shuō),i386系列處理器只會(huì)在PC/AT服務(wù)器上使用。這條針對(duì)i386的假設(shè)在Linux 2.4中就被打破,因?yàn)閕386的額外支持使其可以在SGI的視頻工作站(Visual Workstation)中使用。(事實(shí)上,在其他非i386體系結(jié)構(gòu)上,這個(gè)假設(shè)早被打破了。比如,m68k很早就支持Amiga,Michintosh等平臺(tái)。)Linux 2.6對(duì)于此最大的變化就是,讓這個(gè)特性以及概念成為標(biāo)準(zhǔn),以便所有的體系結(jié)構(gòu)都可以用相似而健全的方法來(lái)處理,以便更清晰地劃分模塊。
標(biāo)準(zhǔn)的確立使得i386可以運(yùn)用于兩個(gè)新的平臺(tái)。第一個(gè)是NCR的Voyager體系。這是一個(gè)對(duì)稱多處理器(SMP)系統(tǒng)(在Intel的MP規(guī)范標(biāo)準(zhǔn)確定之前就已經(jīng)開(kāi)發(fā)出來(lái)了),它支持多達(dá)32個(gè)486-686的處理器配置。實(shí)際采取這種體系結(jié)構(gòu)的產(chǎn)品處理器的配置數(shù)目要相對(duì)少一些,而且目前并不是所有的型號(hào)都得到了Linux的支持(最早的就不支持)。第二種得到最新支持的體系結(jié)構(gòu)是更為廣泛使用的由NEC開(kāi)發(fā)的PC-9800平臺(tái),它曾是日本市場(chǎng)占統(tǒng)治地位的PC平臺(tái),一直到最近幾年。最初的PC-9800裝載的是8086處理器,最終發(fā)展到奔騰級(jí)處理器和SMP支持。(當(dāng)然,Linux對(duì)它的支持局限在386以上。)盡管在美國(guó)它完全不為人所知,微軟的Windows 95之前的版本曾移植到這個(gè)平臺(tái)上。該平臺(tái)由于生產(chǎn)商對(duì)標(biāo)準(zhǔn)PC的偏愛(ài),生產(chǎn)已經(jīng)中止。
Linux對(duì)差異細(xì)微的硬件類型支持的形式化,使得操作系統(tǒng)能更容易的移植到其他平臺(tái)上,比如移植到專為存儲(chǔ)設(shè)計(jì)的硬件或者是使用在工業(yè)領(lǐng)域的主流處理器。需要澄清的是,子體系結(jié)構(gòu)也不是任何時(shí)候都管用的,它能夠發(fā)揮作用是因?yàn)檫@些可移植的系統(tǒng)非常底層構(gòu)件(比如IRQ路由)有或多或少的不同。比起在X-box上運(yùn)行Linux的差別來(lái)說(shuō),驅(qū)動(dòng)程序等相對(duì)小的差別還不足以把它們從傳統(tǒng)的i386系統(tǒng)中分開(kāi)。Linux對(duì)X-box的支持,就不是子體系結(jié)構(gòu)的問(wèn)題。
大規(guī)模 - 非一致存儲(chǔ)訪問(wèn)體系結(jié)構(gòu)(NUMA)和大型機(jī)
除了以上所提及的新硬件類型的支持之外,新的Linux內(nèi)核發(fā)行版也包含了對(duì)大型服務(wù)器(一些運(yùn)行i386處理器,也有些運(yùn)行其他處理器)更多的支持。對(duì)Linux來(lái)說(shuō),這樣的特性是新近加入的,還有許多優(yōu)化工作需要完成。這是一個(gè)Linux發(fā)展相當(dāng)迅速的領(lǐng)域,我們能夠預(yù)計(jì)在不久的將來(lái),Linux將成為此領(lǐng)域的有力競(jìng)爭(zhēng)者。
在此方面最大的改變就是Linux對(duì)NUMA服務(wù)器的最新支持。NUMA(非一致存儲(chǔ)訪問(wèn))在多進(jìn)程世界里是超越SMP以及提升多處理器系統(tǒng)效率的一個(gè)進(jìn)步。SMP系統(tǒng)的設(shè)計(jì)上有著許多和對(duì)應(yīng)單處理器系統(tǒng)類似的局限性。其中最大的設(shè)計(jì)局限之一就是系統(tǒng)中只有唯一的一塊內(nèi)存區(qū),所有的處理器對(duì)它都平等地對(duì)它進(jìn)行訪問(wèn)。在多處理器系統(tǒng)里,這樣會(huì)在同一條內(nèi)存總線上的多處理器之間引起相當(dāng)高的競(jìng)爭(zhēng),導(dǎo)致性能瓶頸。NUMA服務(wù)器,通過(guò)引入了以下的理念解決了這個(gè)問(wèn)題:對(duì)于某個(gè)特定的處理器,一些內(nèi)存比其他一些的更為接近(close)。可以這樣簡(jiǎn)單地設(shè)想(同時(shí)技術(shù)上也不會(huì)有嚴(yán)重錯(cuò)誤),你的系統(tǒng)有許多包含了處理器、內(nèi)存以及其他元件(比如I/O擴(kuò)展卡)。系統(tǒng)中有很多這樣的卡,它們可以相互通訊;顯而易見(jiàn),相對(duì)其他卡上的內(nèi)存,每塊卡上的處理器能更快的訪問(wèn)本地內(nèi)存(自己的卡上內(nèi)存)。從許多角度上看,NUMA體系結(jié)構(gòu)就是一個(gè)緊密耦合的集群特例。
為了給NUMA主機(jī)提供良好的支持,Linux十分必要在許多方面進(jìn)行調(diào)整,以使新模型更具效率。首先,建立了一個(gè)內(nèi)部拓?fù)銩PI,以使內(nèi)核知道處理器和內(nèi)存以及其他IO設(shè)備間的相互關(guān)系。有了內(nèi)部拓?fù)銩PI的支持,Linux的進(jìn)程調(diào)度器可以理解這些關(guān)系,并且會(huì)嘗試優(yōu)化任務(wù)以達(dá)到最佳的本地資源使用。此外,許多NUMA主機(jī)在各個(gè)節(jié)點(diǎn)(nodes)的線性內(nèi)存區(qū)域之間存在空洞(holes)。新內(nèi)核已經(jīng)能夠合理的處理這種不連續(xù)情況。內(nèi)核還有許多其他使得Linux可以支持高端(high-end)主機(jī)的變化,這也是內(nèi)核發(fā)展的一個(gè)明確方向。再過(guò)一年,我們可以期待Linux在高端機(jī)型上效率以及其他方面的進(jìn)步。
深入Linux
除了橫向支持越來(lái)越多的硬件,Linux 2.6還在已支持的平臺(tái)上根據(jù)硬件的性能提升進(jìn)行了改進(jìn)。這些針對(duì)特定CPU的優(yōu)化包括:Transmeta的Crusoe系列,Intel’s Pentium 4 Xeon、Pentium 3-M、Pentium 4-M 和AMD移動(dòng)處理器。新版本Linux還解決了某些Athlon處理器自身的bug導(dǎo)致的問(wèn)題。Linux 2.6還解決了在某些多于16個(gè)處理器的系統(tǒng)啟動(dòng)時(shí)偶爾會(huì)掛起的問(wèn)題,盡管這個(gè)bug不會(huì)影響大多數(shù)用戶的正常使用。
超線程
在Linux 2.6中不算新鮮,內(nèi)核在2.4.17發(fā)布中就已經(jīng)開(kāi)始包含對(duì)Intel P4處理器的超線程(Hyperthreading)的支持(在這里提及它,一是因?yàn)樗](méi)有包含在2.4最初的發(fā)布中,二是自那以后內(nèi)核又有了很大的改變)。超線程使得單個(gè)的處理器可以偽裝成操作系統(tǒng)看來(lái)二個(gè)或更多的多個(gè)處理器。最令人激動(dòng)的是,Linux是第一個(gè)把超線程特性引入市場(chǎng)的操作系統(tǒng),盡管早在一年前Intel就發(fā)布了兼容的處理器。有傳聞?wù)f,微軟在對(duì)支持超線程的CPU按一個(gè)CPU還是按兩個(gè)CPU收取授權(quán)費(fèi)(license)的問(wèn)題上拿不定主意。Linux的開(kāi)放模型(以及沒(méi)有基于cpu的授權(quán))使得Linux操作系統(tǒng)第一個(gè)支持這個(gè)新特性。顯然,一個(gè)處理器就算扮作兩個(gè)處理器工作,它還是一個(gè)處理器,性能并不能因此增加很多。2.5中調(diào)度器和其他一些部分在有了新的優(yōu)化,使得處理器的超線程可以真正的發(fā)揮作用。如果是在2.4下加入超線程支持,結(jié)果就不一定了,有時(shí)性能還會(huì)下降。
容量 -- 可擴(kuò)展性的進(jìn)展
除了對(duì)NUMA的支持,Linux 2.6在處于食物鏈頂端的Intel服務(wù)器方面,也有一些變動(dòng)。最重要的就是對(duì)Intel的物理地址擴(kuò)展(PAE)的完全支持,使得較新的32位的x86系統(tǒng)可以訪問(wèn)高達(dá)64GB的內(nèi)存,但僅僅限于頁(yè)面映射模式。另外,通過(guò)加強(qiáng)對(duì)高級(jí)可編程中斷控制器(APIC)的支持,多處理器系統(tǒng)之上的IRQ均衡(balancing)大大提升。
在許多其他方面,內(nèi)部限制在可能的地方都有所放松。Linux系統(tǒng)上用戶和用戶組的數(shù)目從65000越升到了超過(guò)40億(實(shí)際就是16位到32位的變化)。這使得Linux在之前可能超越限制的大型文件和認(rèn)證服務(wù)器上更加實(shí)用。類似的,進(jìn)程標(biāo)識(shí)號(hào)(PID)的數(shù)目也從32000升到10億。這個(gè)改變,與其他PID子系統(tǒng)優(yōu)化一起,將提高在十分繁忙或是長(zhǎng)期工作的系統(tǒng)上的應(yīng)用程序的啟動(dòng)性能。盡管同時(shí)打開(kāi)的文件最大數(shù)目并沒(méi)有增加,但是Linux 2.6不會(huì)再要求你預(yù)先設(shè)定限制值;限制值會(huì)隨著系統(tǒng)的運(yùn)行自動(dòng)調(diào)整。最后,Linux 2.6包含了改進(jìn)的64位的塊設(shè)備支持(當(dāng)然塊設(shè)備本身應(yīng)當(dāng)支持64位模式),即使是在i386這樣的32位平臺(tái)。這樣一來(lái),文件系統(tǒng)的存儲(chǔ)上限可達(dá) 2TB。
內(nèi)核互動(dòng)性以及響應(yīng)性
Linux 2.6中一個(gè)受關(guān)注的焦點(diǎn)就是使得系統(tǒng)對(duì)于桌面用戶以及其他一些需要對(duì)事件進(jìn)行高度人為控制的應(yīng)用具有更具響應(yīng)性(responsitive)。這其中各個(gè)不同的目標(biāo)系統(tǒng)具有很不同的挑戰(zhàn),但內(nèi)核中包含了很多改變,使得它們同時(shí)受益。
2.6中一個(gè)必須理解的主要內(nèi)部改變是現(xiàn)在內(nèi)核自身是可搶占的。在所有之前的Linux版本中,當(dāng)系統(tǒng)運(yùn)行內(nèi)核的相關(guān)事務(wù)時(shí),它不能被打斷(在多處理器系統(tǒng)中,基于各cpu的角度這也是成立的)。Linux 2.6中,內(nèi)核現(xiàn)在允許自身在執(zhí)行任務(wù)時(shí)被打斷,這樣用戶任務(wù)可以繼續(xù)運(yùn)行即使內(nèi)核正在做一些復(fù)雜的事情。(為了避免明顯這可能帶來(lái)的競(jìng)爭(zhēng)情況,內(nèi)核中含有一些具有鎖的代碼段,運(yùn)行于這樣的代碼段的時(shí)候,內(nèi)核不能被打斷。)這個(gè)改變的主要好處是系統(tǒng)的可交互性(比如,對(duì)于桌面用戶)大大提升,系統(tǒng)對(duì)于用戶輸入這樣的事件感覺(jué)起來(lái)快多了。
其他使得Linux成為一個(gè)更加具有響應(yīng)性系統(tǒng)的改變是并入對(duì)新的"futexes"("Fast User-Space Mutexes")的支持,這項(xiàng)支持發(fā)揮作用需要用戶程序的支持(使用futex實(shí)現(xiàn)互斥)。Futexes是一種序列化(serialize)事件使得它們不會(huì)相互沖突的機(jī)制。與傳統(tǒng)的多數(shù)的線程庫(kù)鎖支持的mutex操作不同,這是部分基于內(nèi)核的(partially kernel based),同時(shí)它也支持設(shè)置優(yōu)先級(jí)使得高優(yōu)先級(jí)的應(yīng)用或線程優(yōu)先獲得競(jìng)爭(zhēng)的資源。通過(guò)使用一個(gè)程序去指定一個(gè)等待的任務(wù)比其他的更重要,它帶來(lái)了可能是一個(gè)應(yīng)用的時(shí)序--關(guān)鍵區(qū)域更佳的響應(yīng)性。
Linux的I/O子系統(tǒng)也經(jīng)歷的很大的修改,使得它在各種工作負(fù)荷下都更具響應(yīng)性。這個(gè)變化包括I/O 調(diào)度子系統(tǒng)--決定何時(shí)、哪一進(jìn)程去讀一個(gè)設(shè)備的內(nèi)核代碼的完全重寫。重寫的I/O層現(xiàn)在可以更好地保證沒(méi)有進(jìn)程過(guò)長(zhǎng)時(shí)間地停留在I/O等待上,同時(shí)不排斥以前的優(yōu)化工作使得讀等請(qǐng)求以最有效的次序操作硬件的優(yōu)化工作。
盡管實(shí)時(shí)操作系統(tǒng)(RTOS)的開(kāi)發(fā)者可以從這些改變中受益,Linux 2.6將不會(huì)成為一個(gè)實(shí)時(shí)內(nèi)核。然而,這些以及其他相關(guān)的背景工作使得將Linux轉(zhuǎn)變?yōu)镽TOS成為可能。為用戶或開(kāi)發(fā)者提供這樣的支持的外部patch(尚未合并到官方的內(nèi)核版本)已經(jīng)出現(xiàn)了。
模塊子系統(tǒng) - 設(shè)備驅(qū)動(dòng)程序
在 Linux 2.6的開(kāi)發(fā)歷程中,模塊子系統(tǒng)是另一有重大改進(jìn)的部分。許多代碼被重寫,以提高穩(wěn)定性,并使系統(tǒng)更加透明。除了這些明顯的表層的變化之外,還有更多背后的內(nèi)核如何看待以及使用模塊的改變。
首先,Linux 2.6中內(nèi)核驅(qū)動(dòng)程序最顯而易見(jiàn)的(雖然并沒(méi)有太大作用)的變化是文件擴(kuò)展名改變了。".ko"(kernel object,內(nèi)核目標(biāo)文件)取代了".o"(這是一目標(biāo)文件的常見(jiàn)擴(kuò)展名,通常在程序編譯期間,鏈接生成可執(zhí)行應(yīng)用程序之前創(chuàng)建)。與其說(shuō)這使得模塊并不是真正的中間文件這一點(diǎn)更為清楚,還不如說(shuō)這僅僅是一個(gè)裝飾性(cosmetic)的改動(dòng)。
完完全全實(shí)質(zhì)性的改進(jìn)在于消除存在于很多內(nèi)核版本中的競(jìng)態(tài)的多方面工作。問(wèn)題的關(guān)鍵在于,如果卸載發(fā)生在模塊檢查并確認(rèn)沒(méi)有其它的設(shè)備正在使用它之后,使用一個(gè)正在被卸載的模塊來(lái)啟動(dòng)設(shè)備是有可能的。新的內(nèi)核模塊代碼應(yīng)使得這一條件更難被觸發(fā)。更進(jìn)一步,現(xiàn)在簡(jiǎn)單地完全禁止模塊卸載也是有可能的。
更加透明是新的模塊子系統(tǒng)另一特性。在此之前,幾乎所有的 Linux版本中,模塊是足夠智能的,它們可以通過(guò)掃描總線尋找它識(shí)別(recognized)的設(shè)備ID號(hào),檢測(cè)到它所能夠支持的設(shè)備(比如PCI,ISA PnP以及PC卡)。Linux 2.6標(biāo)準(zhǔn)化了這種支持,使之對(duì)內(nèi)核來(lái)說(shuō)外部化,外部程序以及模塊加載器判斷一個(gè)特定的模塊可以支持哪些設(shè)備將更為容易。這將允許各種硬件管理程序(比如 Redhat的kudzu)對(duì)硬件作出智能化的判斷,即使他們本身對(duì)自己所處理的硬件設(shè)備并不熟悉。如果你的知識(shí)超越了當(dāng)前版本的驅(qū)動(dòng)程序,你可以(通過(guò)新的 sys文件系統(tǒng)中的一個(gè)接口)強(qiáng)制一個(gè)驅(qū)動(dòng)程序工作于某一特定的設(shè)備,即使驅(qū)動(dòng)程序并不知道自己可以支持該設(shè)備。
其他改進(jìn)
除了上述的許多改變之外,還有很多其他可以提升系統(tǒng)性能的普遍性的改變。這其中包括更多的去除了"Big kernel Lock"(早期Linux用于支持SMP系統(tǒng)時(shí)所采用的非細(xì)粒度鎖),以及針對(duì)文件系統(tǒng)預(yù)讀、回寫和小文件操作的優(yōu)化等。
Linux 2.6還解決了一個(gè)更為深刻的穩(wěn)定性問(wèn)題:內(nèi)核將不會(huì)分配多于系統(tǒng)中RAM(加swap)數(shù)量的內(nèi)存。此前,Linux在一些即使系統(tǒng)內(nèi)存耗盡的情況下,仍然允許malloc操作分配內(nèi)存成功。過(guò)量分配(overcommitment)邏輯得到修改,使得這種情況現(xiàn)在不再可能出現(xiàn)。(當(dāng)然,如果你耗盡了系統(tǒng)的RAM,即使沒(méi)有超越最大可用數(shù)量--你需要擔(dān)心更更嚴(yán)重的問(wèn)題。)
Linux總是一個(gè)開(kāi)放標(biāo)準(zhǔn)的支持者。內(nèi)核內(nèi)部的大改變之一就是Linux的線程框架被重寫,以使NPTL(Native POSIX Thread Library)可以運(yùn)行于其上。對(duì)于運(yùn)行負(fù)荷繁重的線程應(yīng)用的Pentium Pro以及更先進(jìn)的處理器而言,這是一個(gè)主要的性能提升;它也是企業(yè)級(jí)應(yīng)用中的很多高端系統(tǒng)一直以來(lái)所期待的。(實(shí)際上,RedHat已經(jīng)將它向后移植到了Linux 2.4,從RedHat 9.0中開(kāi)始包含)線程框架的改變包含LInux線程空間中的許多新的概念,包括線程組、線程各自的本地存儲(chǔ)區(qū)、POSIX風(fēng)格信號(hào)以及其他改變。主要的缺點(diǎn)之一是依賴于老式的Linux-isms而沒(méi)有遵循POSIX標(biāo)準(zhǔn)的應(yīng)用程序(比如Sun Java)將不能運(yùn)行在支持新式線程的系統(tǒng)之上。鑒于使用新的線程模型利遠(yuǎn)大于弊,很明顯,新的內(nèi)核發(fā)布不久,最為重要的那些應(yīng)用都將會(huì)支持這個(gè)改變。
最后,2.6可以支持編譯時(shí)關(guān)閉內(nèi)核對(duì)存儲(chǔ)交換(swap)的支持,盡管對(duì)于絕大多數(shù)Linux之上的應(yīng)用而言,沒(méi)有直接的益處。這使得Linux可以在相對(duì)小的內(nèi)存足跡(footprint)內(nèi)運(yùn)行,對(duì)于不大可能使用交換設(shè)備的嵌入式系統(tǒng)可能也是有益的。
統(tǒng)一設(shè)備模型
作為操作系統(tǒng)中的一個(gè)相對(duì)獨(dú)立的組件,設(shè)備模型對(duì)于那些被設(shè)計(jì)運(yùn)行于用于多種硬件之上的操作系統(tǒng)而言是至關(guān)重要的。簡(jiǎn)單地說(shuō),設(shè)備模型是內(nèi)核中的基礎(chǔ)設(shè)施,用于檢測(cè)和決定系統(tǒng)中所有可選模塊的資源使用。所有的操作系統(tǒng)(包括各版本的Linux)都固有一些設(shè)備的概念。老版本的Linux(2.2或更早)僅使用一種直接的方法操作設(shè)備。系統(tǒng)為不同種類的硬件總線提供驅(qū)動(dòng)程序,各式各樣的設(shè)備驅(qū)動(dòng)程序知道如何探測(cè)它們所支持的設(shè)備總線以尋找對(duì)應(yīng)的硬件設(shè)備。這種系統(tǒng)非常分散,各種各樣的總線提供許多互不兼容的API,用于處理各種不同的操作。Linux 2.4通過(guò)使用一組通用接口將PCI,PC卡以及ISA PnP 整合到一個(gè)單一的設(shè)備結(jié)構(gòu)中,完成了構(gòu)建統(tǒng)一設(shè)備模型的第一步。Linux 2.6更進(jìn)一步地推進(jìn)了這方面的努力,力求在整個(gè)系統(tǒng)的范圍內(nèi),內(nèi)核以一種新的統(tǒng)一的視角看待它所依賴的硬件。
內(nèi)核對(duì)象抽象
新設(shè)備模型基礎(chǔ)的核心是一個(gè)所有底層設(shè)備類型都需使用的新的面向?qū)ο蟮慕涌?。這個(gè)內(nèi)核設(shè)備對(duì)象結(jié)構(gòu)(稱為"kobject")包含用于引用計(jì)數(shù)和操作子設(shè)備的所有接口。底層設(shè)備(例如系統(tǒng)總線)利用這一公共接口層,向內(nèi)核以及用戶空間提供統(tǒng)一的系統(tǒng)視圖。現(xiàn)在,所有這些都被放在了中心位置,這使得Linux可以使用這些信息作許多有用的事。
在內(nèi)核中完整地保存這些新的信息,使得Linux可以更好的支持那些需要有深入的硬件知識(shí)的系統(tǒng)。一個(gè)明顯的例子就是電源管理。近幾年新出現(xiàn)的電源管理標(biāo)準(zhǔn)是ACPI。ACPI,即高級(jí)電源配置管理界面,最早是在Linux 2.4中有支持。不同于APM(高級(jí)電源管理),擁有這種接口的系統(tǒng)在改變電源狀態(tài)時(shí)需要分別通知每一個(gè)兼容的設(shè)備。新的內(nèi)核系統(tǒng)允許子系統(tǒng)跟蹤需要進(jìn)行電源狀態(tài)轉(zhuǎn)換的設(shè)備。另一個(gè)例子是支持熱插拔的總線。機(jī)器啟動(dòng)后依然可以添加設(shè)備的能力在現(xiàn)在看來(lái)顯得很普通,但Linux直到2.2版本才提供相關(guān)支持。到了Linux 2.4,這種支持得到進(jìn)一步的加強(qiáng),范圍也擴(kuò)大到可熱插拔的PCI、PC卡、USB以及Firewire設(shè)備。通過(guò)從根本上消除熱插拔設(shè)備和傳統(tǒng)設(shè)備的差異,新內(nèi)核的集中化設(shè)備系統(tǒng)擴(kuò)展了這一支持。當(dāng)你啟動(dòng)計(jì)算機(jī)的時(shí)候,設(shè)備檢測(cè)例程將"插入"系統(tǒng)中的設(shè)備。無(wú)論在系統(tǒng)啟動(dòng)時(shí),或是啟動(dòng)以后,系統(tǒng)發(fā)現(xiàn)系統(tǒng)中的某個(gè)設(shè)備時(shí),都會(huì)相應(yīng)創(chuàng)建一個(gè)相同的內(nèi)核對(duì)象,這就使得處理可插拔設(shè)備的底層結(jié)構(gòu)簡(jiǎn)單化了。
sys文件系統(tǒng)
最明顯的用戶可見(jiàn)的改變可能是新的sysfs文件系統(tǒng)的出現(xiàn),它集成了下面3種文件系統(tǒng)的信息:針對(duì)進(jìn)程信息的proc文件系統(tǒng)、針對(duì)設(shè)備的devfs文件系統(tǒng)以及針對(duì)偽終端的devpts文件系統(tǒng)。該文件系統(tǒng)(安裝在/sys目錄)是核心看到的設(shè)備樹(shù)的一個(gè)直觀反映。核心通過(guò)緊密合作的核心對(duì)象(kernel object)子系統(tǒng)來(lái)建立這個(gè)信息:當(dāng)一個(gè)核心對(duì)象被創(chuàng)建的時(shí)候,對(duì)應(yīng)的文件和目錄也被創(chuàng)建。(必要的話,也有可能一個(gè)核心對(duì)象被創(chuàng)建的時(shí)候并不在sysfs文件系統(tǒng)中有記錄。)
既然每個(gè)設(shè)備(或者說(shuō)內(nèi)核對(duì)象)在sysfs中都有唯一對(duì)應(yīng)的目錄結(jié)構(gòu),那么下一步可以把設(shè)備的屬性(設(shè)備名,電源模式,中斷處理等)信息輸出到這個(gè)目錄樹(shù)中以供系統(tǒng)管理員讀寫。相應(yīng)的,很多跟設(shè)備相關(guān)的/proc/sys的用法已經(jīng)或者將要移到/sys目錄下。
核心硬件支持
隨著Linux的這些年的發(fā)展并逐步進(jìn)入主流行列,從內(nèi)核所支持的設(shè)備類型來(lái)看,每一次的內(nèi)核發(fā)布,都像是一次跳躍:支持新興的技術(shù)(2.4的USB),支持古老一些的傳統(tǒng)技術(shù)(2.2的MCA)。發(fā)展到Linux2.6,不被Linux支持的設(shè)備已經(jīng)相當(dāng)少了。PC機(jī)上的主流硬件沒(méi)被支持的很少。正是由于這個(gè)原因,多數(shù)(顯然不是所有)關(guān)于硬件支持方面的改進(jìn)(包括上面所說(shuō)的設(shè)備模型)圍繞對(duì)已有支持的加強(qiáng)。
內(nèi)部設(shè)備總線
位于系統(tǒng)底層的總線幾乎與處理器同樣重要;這些總線就像膠合劑,將系統(tǒng)的各個(gè)部件連到一起。在PC世界中,這些總線一直是不可或缺的,無(wú)論是老的ISA(在最初的IBM PC機(jī)中可以找到)總線,還是現(xiàn)在的外部串口以及無(wú)線(wireless)總線。一旦新的總線及設(shè)備變成流行的消費(fèi)產(chǎn)品,Linux總是能以很快的速度去適應(yīng)它;而對(duì)于不很流行的設(shè)備,情況則差很多。
一個(gè)能說(shuō)明這一情況的例子就是ISA總線的PnP(即插即用)特性,Linux直到2.4版本才支持ISA總線的即插即用擴(kuò)展,比其他流行的商業(yè)操作系統(tǒng)要晚很多(在內(nèi)核支持ISA PnP之前,你或許可以勉強(qiáng)使用一些用戶態(tài)的實(shí)用程序使它工作)。Linux 2.6對(duì)這個(gè)子系統(tǒng)做了一個(gè)重要的改進(jìn),使它更完善、更好地集成于新的設(shè)備模型之中。新特性包括完整的PnP BIOS支持、設(shè)備名稱數(shù)據(jù)庫(kù)以及一些其他的使系統(tǒng)更加健壯的特性。這些改進(jìn)的結(jié)果,是使得Linux成為一個(gè)真正意義上的即插即用操作系統(tǒng),并且可以被設(shè)置成就像那些兼容機(jī)的BIOS達(dá)到的那樣。
ISA時(shí)代ISA-PnP的兩個(gè)可選的替代方案是MCA(微通道體系)和EISA(擴(kuò)展ISA),盡管它們不那么流行。在Linux2.6的開(kāi)發(fā)周期中,這兩個(gè)子系統(tǒng)都做了一些改進(jìn)以支持新的設(shè)備模型。此外,通過(guò)引入設(shè)備名稱數(shù)據(jù)庫(kù),EISA與其他子系統(tǒng)一起獲得了更進(jìn)一步的標(biāo)準(zhǔn)化。
除了剛才提到的幾個(gè)重要特性,Linux對(duì)硬件總線的支持也做了許多其它值得關(guān)注的改變。PCI總線是所有總線中最流行也是最重要的總線,Linux 2.6極大地提升了對(duì)它的支持,包括改進(jìn)的熱插拔和電源管理支持。新版本同樣也支持包含多個(gè)AGP總線(即加速圖形端口――基于PCI協(xié)議的一種獨(dú)立高速總線)的系統(tǒng),如高端圖形工作站。就對(duì)PC硬件的支持而言,Linux緊緊跟隨著硬件市場(chǎng)的潮流。
除了這些實(shí)際的設(shè)備總線,Linux2.6也增加了一個(gè)概念上的Legacy總線。這種總線對(duì)每種體系結(jié)構(gòu)都是專有的,這些體系結(jié)構(gòu)包含所有你可能想到的設(shè)備。例如,在一臺(tái)PC機(jī)上,可能會(huì)有板上(on-board)的串口、并口、以及PS/2端口,這些設(shè)備實(shí)際存在著,但不被系統(tǒng)中的任何一個(gè)實(shí)際總線所枚舉(enumerated)。在其他的一些平臺(tái)上,這種Legacy支持可能包含更復(fù)雜的事情(如查詢固件)。但一般來(lái)說(shuō),這只是一層包裝,使得設(shè)備驅(qū)動(dòng)程序在新的驅(qū)動(dòng)模型視圖下能以標(biāo)準(zhǔn)的方式操作這些設(shè)備。
外部總線
雖然早先的設(shè)備標(biāo)準(zhǔn)成熟并鮮有新的特性增加,但USB是一個(gè)例外。USB的支持在最近的內(nèi)核開(kāi)發(fā)周期中有了許多改進(jìn),其中最為顯著的是新內(nèi)核將支持USB 2.0設(shè)備。USB2.0是一種新的標(biāo)準(zhǔn),支持設(shè)備帶寬高達(dá)480M bps(當(dāng)前的USB只有12Mbps)。支持此標(biāo)準(zhǔn)的設(shè)備通常被稱作高速USB設(shè)備,它們正逐步占領(lǐng)市場(chǎng)。另外一個(gè)新的相關(guān)標(biāo)準(zhǔn)叫做USB On-the-Go(或稱作USB OTG),它是USB協(xié)議中一個(gè)點(diǎn)到點(diǎn)的變種,用以直連設(shè)備;Linux 2.6尚未支持它(2.6的補(bǔ)丁是可以支持的)。除了設(shè)備支持外,多數(shù)USB設(shè)備的枚舉方式都作了修正,使得Linux能訪問(wèn)現(xiàn)今許多同類型設(shè)備的所有實(shí)例(instance)。這一點(diǎn)對(duì)于大型打印機(jī)或存儲(chǔ)設(shè)備來(lái)說(shuō)相當(dāng)有益(雖然后者可能更傾向于使用專用存儲(chǔ)總線)。很明顯,這一領(lǐng)域的技術(shù)最近幾年成長(zhǎng)顯著,Linux對(duì)相關(guān)設(shè)備的支持也是緊跟市場(chǎng)的步伐。
無(wú)線設(shè)備
過(guò)去的幾年,無(wú)線技術(shù)在公眾應(yīng)用中真正起飛了??雌饋?lái),在不遠(yuǎn)的將來(lái),線纜(非電源)將成為歷史。無(wú)線設(shè)備既包括網(wǎng)絡(luò)設(shè)備(目前最常見(jiàn)的無(wú)線設(shè)備),也包括更通用的設(shè)備,比如PDA。
在無(wú)線網(wǎng)絡(luò)空間中,設(shè)備可以大致分為長(zhǎng)距(如基于業(yè)余無(wú)線設(shè)備的AX.25)和短距(通常是802.11,但一些舊式協(xié)議也存在)。從很早的時(shí)候(v1.2)起,對(duì)這兩者的支持就成為 Linux的一個(gè)特征。在 2.6 的開(kāi)發(fā)中,它們又都得到了更新。這里最大的改動(dòng)是,用于支持各種板卡、協(xié)議的短距子系統(tǒng)的主要組件合并為一個(gè)單一的"無(wú)線"子系統(tǒng)以及 API。通過(guò)提供一組能工作于所有支持的設(shè)備的用戶空間工具來(lái)實(shí)現(xiàn)不同的設(shè)備統(tǒng)一處理。這種方式解決了原先的不同設(shè)備不同處理所帶來(lái)的很多小的兼容性問(wèn)題。除了這種標(biāo)準(zhǔn)化之外,Linux 2.6版內(nèi)核還有很多全局性的改進(jìn),包括當(dāng)狀態(tài)發(fā)生改變(比如一個(gè)處于"漫游"狀態(tài)的設(shè)備)時(shí)更好的通知能力,以及對(duì)旨在更好地處理無(wú)線設(shè)備中周期性的延遲波動(dòng)的一個(gè)TCP相關(guān)的改動(dòng)。由于人們對(duì)2.4版內(nèi)核中無(wú)線支持的期望,上述的很多特性已經(jīng)包含在2.4版內(nèi)核中了。
在無(wú)線設(shè)備空間,有著類似的主要改進(jìn)。IrDA(以 Infrared Data Associates group命名的紅外線協(xié)議)部分自上一主要發(fā)布以來(lái)有一些改進(jìn),比如電源管理、集成進(jìn)了新的內(nèi)核驅(qū)動(dòng)模型。真正的改進(jìn)還在于提供了對(duì)藍(lán)牙設(shè)備的支持。藍(lán)牙是一種新的無(wú)線協(xié)議,它設(shè)計(jì)為短距,功耗很低,也沒(méi)有 IrDA 中的"視線"的限制。作為一種協(xié)議,藍(lán)牙被設(shè)計(jì)為"到處可用"。它已被應(yīng)用于多種設(shè)備,如 PDA,移動(dòng)電話,打印機(jī),以及更為怪異(bizarre)的設(shè)備如車載設(shè)備。協(xié)議本身由兩種不同的數(shù)據(jù)連接類型組成:用于有損音頻應(yīng)用的SCO(Synchronous Connection Oriented,面向同步連接);以及可以支持重傳等更為強(qiáng)壯的連接L2CAP(Logical Link Control and Adaptation Protocal,邏輯連接控制和適配協(xié)議)。L2CAP 還進(jìn)一步的支持各種子協(xié)議,包括用于點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)的 RFCOMM 以及用于類以太網(wǎng)的 BNEP。Linux對(duì)采用藍(lán)牙技術(shù)的設(shè)備的支持在不斷提升,我們可以相信,當(dāng)足夠多的采用藍(lán)牙技術(shù)的設(shè)備被使用時(shí),這種支持將會(huì)非常成熟。值得一提的是,對(duì)藍(lán)牙最初的支持已經(jīng)集成到了2.4系列內(nèi)核后幾個(gè)版本中。
塊設(shè)備支持
存儲(chǔ)總線
在2.6的開(kāi)發(fā)中,IDE/ATA、SCSI等存儲(chǔ)總線也都得到了主要的更新。最主要的改變集中于被重寫(再一次被重寫)的 IDE 子系統(tǒng),解決了許多可擴(kuò)展性問(wèn)題以及其他限制。比如,現(xiàn)在 IDE CD/RW 設(shè)備可以直接通過(guò)IDE磁盤驅(qū)動(dòng)程序進(jìn)行寫操作,這種實(shí)現(xiàn)方法比過(guò)去的方法要簡(jiǎn)潔的多。(在以前,需要再使用一個(gè)特別的SCSI模擬的驅(qū)動(dòng)程序。這樣顯得很混亂,而且實(shí)現(xiàn)起來(lái)有困難。) 現(xiàn)在,遇到一個(gè)不能識(shí)別的控制器時(shí),IDE 層可以查詢機(jī)器的 BIOS 信息,從而獲取時(shí)序操作所需數(shù)據(jù)或其他數(shù)據(jù)。SCSI部分有不少散布于系統(tǒng)中的小的改進(jìn),使之能支持更多的設(shè)備,同時(shí)提升了可擴(kuò)展性。一個(gè)針對(duì)舊式系統(tǒng)的特別改進(jìn)是,現(xiàn)在的 Linux能夠支持 SCSI-2多通道設(shè)備(這種設(shè)備在單個(gè)設(shè)備上有多于2個(gè)的 LUN)。另一個(gè)重要的改進(jìn)則是現(xiàn)在 Linux 能夠默像 MS Windows那樣檢測(cè)介質(zhì)的變動(dòng),以更好地兼容那些并不完全遵照標(biāo)準(zhǔn)規(guī)范的設(shè)備。既然這些技術(shù)歷經(jīng)時(shí)間的考驗(yàn)穩(wěn)定下來(lái),那么 Linux 也提供對(duì)它們的支持。
Linux現(xiàn)在也包含對(duì)新一些的機(jī)器的EDD(Enhanced Disk Device) BIOS進(jìn)行直接訪問(wèn)的支持,這樣便可以獲得服務(wù)器中的磁盤設(shè)備視圖。EDD BIOS包含所有連接到系統(tǒng)的、BIOS識(shí)別的存儲(chǔ)總線(包括IDE以及SCSI)的信息。除了獲得連接設(shè)備的配置以及其他信息之外,它還有另外幾個(gè)優(yōu)點(diǎn)。比如,這種新的接口使 Linux 能夠知道系統(tǒng)是從哪一個(gè)磁盤設(shè)備上啟動(dòng)的。這在新一些的系統(tǒng)上非常有用,因?yàn)檫@樣的系統(tǒng)中到底是從哪一個(gè)設(shè)備啟動(dòng)的常常不明顯。智能安裝程序也可以考慮使用這些信息,比如在決定把GRUB(一種Linux啟動(dòng)裝載器)安裝在哪里時(shí)。
所有這些改動(dòng)之外,這里需要再次強(qiáng)調(diào)的是,所有的總線設(shè)備類型(硬件、無(wú)線和存儲(chǔ))都集成到了Linux新的設(shè)備模型子系統(tǒng)中。一些改動(dòng)僅僅是"裝飾性"的,另一些則包含了非常顯著的改動(dòng)(比如,甚至是如何檢測(cè)設(shè)備的邏輯都需要修改)。
文件系統(tǒng)
Linux(或其他一些系統(tǒng))下塊設(shè)備的最常見(jiàn)用法是在塊設(shè)備上面建立一個(gè)文件系統(tǒng)。相對(duì)Linux 2.4而言,Linux 2.6對(duì)于文件系統(tǒng)的支持在很多方面都有大的改進(jìn)。關(guān)鍵的變化包括對(duì)擴(kuò)展屬性(extended attributes)以及POSIX標(biāo)準(zhǔn)的訪問(wèn)控制(access controls)的支持。
EXT2/EXT3文件系統(tǒng)作為多數(shù)Linux系統(tǒng)缺省安裝的文件系統(tǒng),是在2.6中改進(jìn)最大的一個(gè)。最主要的變化是對(duì)擴(kuò)展屬性的支持,也即給指定的文件在文件系統(tǒng)中嵌入一些元數(shù)據(jù)(metadata)。一些擴(kuò)展屬性被系統(tǒng)使用,只能由root用戶進(jìn)行讀寫。很多其他操作系統(tǒng),如Windows和MacOS系統(tǒng)已經(jīng)大量地使用了這種擴(kuò)展屬性。不幸的是,UNIX系的操作系統(tǒng)一般都還沒(méi)有很好地支持?jǐn)U展屬性,很多用戶級(jí)的程序(比如tar)需要進(jìn)行更新才能保存和轉(zhuǎn)儲(chǔ)這些擴(kuò)展屬性信息。這是Linux成長(zhǎng)的又一方面;Linux對(duì)擴(kuò)展屬性的支持正在成熟。
新的擴(kuò)展屬性子系統(tǒng)的第一個(gè)用途就是實(shí)現(xiàn)POSIX訪問(wèn)控制鏈表。POSIX訪問(wèn)控制是標(biāo)準(zhǔn)UNIX權(quán)限控制的超集,支持更細(xì)粒度的訪問(wèn)控制。必要的話(比如從NFS輸出文件的時(shí)候),這些訪問(wèn)控制可以被映射到標(biāo)準(zhǔn)的user/group權(quán)限控制上。除了以上,EXT3還有其他一些小的變化。文件系統(tǒng)日志提交(commit)的時(shí)間能夠進(jìn)行調(diào)整得更加適合于筆記本電腦(處于省電模式時(shí),可能會(huì)加速驅(qū)動(dòng)器);缺省的加載選項(xiàng)可以保存在文件系統(tǒng)自身之中(這樣不用每次加載時(shí)都輸入加載選項(xiàng));可以標(biāo)記一個(gè)目錄為"indexed"以加速在這個(gè)目錄中的文件查找。
Linux對(duì)文件系統(tǒng)層還進(jìn)行了大量的改進(jìn)以兼容PC機(jī)的主流操作系統(tǒng)。首先,Linux 2.6支持Windows的邏輯卷管理器(即動(dòng)態(tài)磁盤Dynamic Disks)。這個(gè)是Windows XP及后續(xù)版本中新的分區(qū)表機(jī)制,能夠很方便的支持多分區(qū)系統(tǒng)中的分區(qū)大小的調(diào)整以及新分區(qū)的創(chuàng)建。(當(dāng)然,Linux系統(tǒng)不一定會(huì)馬上使用這一機(jī)制)其次,Linux 2.6對(duì)NTFS文件系統(tǒng)的支持也進(jìn)行了重寫,現(xiàn)在能以讀/寫模式安裝一個(gè)NTFS卷。寫支持仍處于試驗(yàn)階段,在逐步改進(jìn);最終的內(nèi)核發(fā)布版中可能含有也可能不含有寫支持這一部分。最后,Linux對(duì)FAT12(很老的系統(tǒng)或軟盤上使用的DOS文件系統(tǒng))的支持中消除了使用一些MP3播放器時(shí)所遇到的bug。跟蹤PC領(lǐng)域的其他一些技術(shù)將一直是Linux核心向前發(fā)展的一個(gè)重要環(huán)節(jié)。
文件系統(tǒng)部分在與其他操作系統(tǒng)的兼容性方面也有改進(jìn)。對(duì)HPFS文件系統(tǒng)(OS/2和其他系統(tǒng)中使用)的擴(kuò)展屬性的支持有了改進(jìn)。OS/2風(fēng)格的擴(kuò)展屬性被分離到另一個(gè)的名字空間中。XFS文件系統(tǒng)也得到了更新,以達(dá)到與IRIX操作系統(tǒng)的磁盤級(jí)(on-disk)兼容。
此外,Linux文件系統(tǒng)中還有很多分散的變化。配額(quota)管理進(jìn)行了重寫以便系統(tǒng)可以支持更多的用戶;用戶可以標(biāo)記目錄為同步,從而所有變化(增加文件等)都是原子的(這一點(diǎn)對(duì)于郵件系統(tǒng)和基于目錄的數(shù)據(jù)庫(kù)系統(tǒng)尤為重要,而且在磁盤故障的恢復(fù)方面也更好一些);透明壓縮功能(僅Linux支持的擴(kuò)展)被加到ISO9660文件系統(tǒng)(CD-ROM中使用)中。最后,一個(gè)新的基于內(nèi)存的文件系統(tǒng)(hugetlbfs)被創(chuàng)建;創(chuàng)建該文件系統(tǒng)旨在更好地支持基于共享內(nèi)存的數(shù)據(jù)庫(kù)。
輸入輸出設(shè)備
在任何計(jì)算機(jī)系統(tǒng)的更"外部"的一層是輸入輸出設(shè)備,包括像鍵盤、鼠標(biāo)、聲卡、顯卡等顯而易見(jiàn)的東西,還包括像游戲操縱桿以及輔助設(shè)備等不那么常見(jiàn)的東西。在2.6的開(kāi)發(fā)周期里,許多Linux的用戶端子系統(tǒng)得到了擴(kuò)展,但大部分常見(jiàn)設(shè)備都已經(jīng)非常成熟了。Linux 2.6中對(duì)這些設(shè)備的改進(jìn)多半衍生于內(nèi)核對(duì)外部總線支持的改進(jìn),比如藍(lán)牙無(wú)線鍵盤以及其它類似設(shè)備。盡管如此,Linux 在好幾個(gè)領(lǐng)域都有更大的改進(jìn)。
人機(jī)接口設(shè)備
Linux 2.6中一個(gè)主要的內(nèi)部改動(dòng)是人機(jī)接口層的大量重寫。人機(jī)接口層是一個(gè)Linux系統(tǒng)中用戶體驗(yàn)的中心,包括視頻輸出、鼠標(biāo)、鍵盤等。內(nèi)核的新版本中,這一層的重寫以及模塊化工作超出了以前的任何一個(gè)版本。使用新內(nèi)核構(gòu)建一個(gè)不包含對(duì)顯示器等的支持的完全"headless"的Linux系統(tǒng)是可能的。嵌入式系統(tǒng)開(kāi)發(fā)人員或許會(huì)是這一模塊化工作的主要受益者,可以制造出只能通過(guò)網(wǎng)絡(luò)或串行線管理的設(shè)備;另一方面,對(duì)普通用戶也是有好處的,因?yàn)樵S多關(guān)于設(shè)備及體系結(jié)構(gòu)的內(nèi)在假設(shè)被模塊化了。比方說(shuō),之前總是假定如果你擁有一臺(tái)PC,那么你一定需要對(duì)標(biāo)準(zhǔn)AT(i8042)鍵盤控制器的支持。在 Linux 的新版本中移除了這一要求,因而可以在不那么遵照傳統(tǒng)的系統(tǒng)中拋開(kāi)不必要的代碼。
Linux對(duì)顯示器輸出處理的支持也有不少改進(jìn),但大部分只在配置使用內(nèi)核內(nèi)部的幀緩沖控制臺(tái)子系統(tǒng)時(shí)才有用。( 多數(shù)基于Intel體系的Linux機(jī)器并不采用這種方式配置,但其他大部分體系結(jié)構(gòu)卻采用。)在我看來(lái),最大的亮點(diǎn)在于啟動(dòng)圖標(biāo)(如果你從來(lái)沒(méi)有見(jiàn)過(guò),那我告訴你那是一只可愛(ài)的企鵝)現(xiàn)在支持24 bpp的分辨率。這是一個(gè)方面,其它的面向控制臺(tái)的新特性包括可以重設(shè)大小、旋轉(zhuǎn)等(對(duì)PDA及其它類似設(shè)備),還有為更多的硬件提供了硬件加速支持。最后,Linux現(xiàn)在對(duì)VESA監(jiān)視器的顯示能力信息的查詢提供了內(nèi)核支持,雖然XFree86 和大部分發(fā)布版本的安裝系統(tǒng)都在用戶空間提供了這種支持。
除這些比較大的改進(jìn)之外,Linux 2.6 在人機(jī)交互方面還有一系列小的改進(jìn)。比方說(shuō),現(xiàn)在支持觸摸屏了。另外,鼠標(biāo)及鍵盤驅(qū)動(dòng)程序也得到了更新和標(biāo)準(zhǔn)化,現(xiàn)在不管底層的硬件或協(xié)議是什么,系統(tǒng)都只導(dǎo)出一個(gè)單一的設(shè)備節(jié)點(diǎn)(比如 /dev/input/mouse)。一些怪異的鼠標(biāo)(比如有多個(gè)滾輪的)現(xiàn)在也得到了支持。PC鍵盤的鍵值映射得到了更新,以遵循Windows 的"標(biāo)準(zhǔn)"來(lái)支持?jǐn)U展鍵。對(duì)游戲控制桿的支持也得到了提升,這不僅僅得益于許多新的驅(qū)動(dòng)程序(包括 X Box 游戲控制盤的驅(qū)動(dòng)),還歸功于引入了一些新的特性,如力量反饋(force-feedback)。最后(但絕不是最不重要的),新版本內(nèi)核提供了對(duì) Tieman Voyager 的盲人用 TTY設(shè)備的支持,以使盲人用戶更好地使用Linux。(這個(gè)特性是如此的重要,以至于被向后移植到了Linux 2.4。)
順便提一下,Linux 修改了"系統(tǒng)請(qǐng)求"接口以更好地支持那些沒(méi)有本地鍵盤的系統(tǒng)。系統(tǒng)請(qǐng)求接口("sysrq")是系統(tǒng)管理員在本地控制臺(tái)做一些高級(jí)工作的方法,比如獲取調(diào)試信息、強(qiáng)制系統(tǒng)重啟、重新掛載文件系統(tǒng)為只讀等等。因?yàn)?Linux 2.6 現(xiàn)在支持一個(gè)完全"headless"的系統(tǒng),所以現(xiàn)在也可以通過(guò)/proc 文件系統(tǒng)觸發(fā)這些事件。(當(dāng)然,如果你的系統(tǒng)已經(jīng)掛起而你又要強(qiáng)制它做一些事情,這一特性也幫不上你什么忙。)
音頻
對(duì)于桌面用戶而言,Linux 2.6 中最為期望的新特性之一是以ALSA(Advanced Linux Sound Architecture)取代過(guò)時(shí)的聲音系統(tǒng)。舊式的聲音系統(tǒng)OSS(Open Sound System)很早的時(shí)候起便為L(zhǎng)inux提供音頻支持,但是它有許多體系結(jié)構(gòu)上的缺陷。新系統(tǒng)首要的改進(jìn)在于它從設(shè)計(jì)之初開(kāi)始便是完全線程安全的,且能很好的工作于 SMP 系統(tǒng)。這修正了過(guò)去的許多驅(qū)動(dòng)程序在"桌面即意味著單CPU"這一教條的例外情況下不能正常工作的問(wèn)題。更為重要的是,此驅(qū)動(dòng)程序從一開(kāi)始便采用模塊化設(shè)計(jì)(Linux舊版本的用戶應(yīng)該還記得,在Linux 2.2時(shí)代,模塊被解構(gòu)以適應(yīng)聲音系統(tǒng)),這使得系統(tǒng)能更好地支持多塊聲卡,包括不同類型的聲卡。無(wú)論系統(tǒng)內(nèi)部是多么完美,如果沒(méi)有一些令人驚訝的新特性,系統(tǒng)對(duì)于用戶來(lái)說(shuō)仍沒(méi)有任何改進(jìn)。事實(shí)上,新的聲音系統(tǒng)有許多這樣的新特性。其中最為重要的是提供了對(duì)許多新硬件(包括USB音頻及MIDI設(shè)備)的支持,支持全杜比錄音及回放、無(wú)縫混音、支持聲音合成設(shè)備等等。無(wú)論你是一個(gè)音響發(fā)燒友或只是喜歡播放 MP3 的人,Linux提升的聲音支持都將是大受歡迎的一個(gè)進(jìn)步。
多媒體
現(xiàn)今單純的音頻支持似乎遠(yuǎn)遠(yuǎn)不夠,用戶想要的是對(duì)真正新奇的硬件的支持,比如網(wǎng)絡(luò)攝像機(jī),廣播及電視適配器,數(shù)字視頻錄制器等。Linux在2.6版本中對(duì)以上三者的支持都有所提升。
Linux對(duì)廣播卡的支持(通常是通過(guò)用戶空間實(shí)現(xiàn)歷經(jīng)了好幾個(gè)開(kāi)發(fā)周期,而對(duì)電視調(diào)諧器和視頻攝像機(jī)的支持只是在最近的1、2個(gè)主要版本中才有。此系統(tǒng)通常稱為V4L(Vedio4Linux 譯者注: "4" for "for"),在新版本的內(nèi)核開(kāi)發(fā)中得到了重大更新,包括API的清理工作以及對(duì)設(shè)備更多功能的支持。新的API與舊版本不兼容,支持它的應(yīng)用程序需要隨內(nèi)核的升級(jí)而升級(jí)。
作為一個(gè)全新的領(lǐng)域,Linux 2.6首次包含對(duì)DVB(Digital Video Broadcasting,數(shù)字視頻廣播)硬件的支持。這種硬件常見(jiàn)于機(jī)頂盒,它可以使得Linux服務(wù)器通過(guò)適當(dāng)?shù)能浖優(yōu)橐慌_(tái)tivo(類似機(jī)頂盒的設(shè)備)。
軟件方面的改進(jìn)
Linux的改進(jìn)并不只關(guān)注于硬件及其它基礎(chǔ)設(shè)施。沒(méi)有支撐軟件(如文件系統(tǒng)及網(wǎng)絡(luò)協(xié)議),硬件支持將毫無(wú)意義(just so much a dead wood)。
網(wǎng)絡(luò)
先進(jìn)的網(wǎng)絡(luò)支持一直是Linux的主要財(cái)富之一。Linux作為一種操作系統(tǒng),已經(jīng)可以支持世界上大多數(shù)主流網(wǎng)絡(luò)協(xié)議,包括TCP/IP(v4和v6)、AppleTalk、IPX等。(就"等"而言,唯一較為普遍的是微軟老的、復(fù)雜的NETBIOS/NetBEUI協(xié)議。)
像許多其它子系統(tǒng)一樣,網(wǎng)絡(luò)硬件針對(duì)Linux2.6的改變是在幕后進(jìn)行的,顯得并不那么直接。這包括旨在利用Linux的設(shè)備模型底層的改進(jìn)和許多設(shè)備驅(qū)動(dòng)程序的升級(jí)。例如,Linux 2.6提供一個(gè)獨(dú)立的MII(媒體獨(dú)立接口,或是IEEE 802.3u)子系統(tǒng),它被許多網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序使用。新的子系統(tǒng)替換了原先系統(tǒng)中各自運(yùn)行的多個(gè)實(shí)例,消除了原先系統(tǒng)中多個(gè)驅(qū)動(dòng)程序使用重復(fù)代碼、采用類似的方法處理設(shè)備的MII支持的情況。其他改變還包括對(duì)ISDN的改進(jìn)等。
在軟件方面,Linux的一個(gè)重要改進(jìn)是提供了對(duì)IPsec協(xié)議的支持。IPsec,或者稱之為安全I(xiàn)P,是在網(wǎng)絡(luò)協(xié)議層為IPv4和IPv6提供加密支持的一組協(xié)議。由于安全是在協(xié)議層提供的,對(duì)應(yīng)用層是透明的。它與SSL協(xié)議及其他tunneling/security協(xié)議很相似,但是位于一個(gè)低地多的層面。當(dāng)前內(nèi)核支持的加密算法包括SHA("安全散列算法")、DES("數(shù)據(jù)加密標(biāo)準(zhǔn)")等。
在協(xié)議方面,Linux還加強(qiáng)了對(duì)多播網(wǎng)絡(luò)的支持。網(wǎng)絡(luò)多播使得由一點(diǎn)發(fā)出的數(shù)據(jù)包可以被多臺(tái)計(jì)算機(jī)接收(傳統(tǒng)的點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)每次只能有兩方通信)。這一功能主要被即時(shí)通訊系統(tǒng)(如Tibco)以及音頻/視頻會(huì)議軟件使用。Linux 2.6現(xiàn)在支持若干新的SSM協(xié)議(定源多播),包括MLDv2(multicast listner discovery 多播偵聽(tīng)發(fā)現(xiàn))協(xié)議以及IGMPv3(Internet組管理協(xié)議)協(xié)議。這些都是標(biāo)準(zhǔn)協(xié)議,被多數(shù)高端網(wǎng)絡(luò)硬件提供商所支持,如思科。
Linux 2.6也提供了一個(gè)分離的LLC棧。LLC,即邏輯鏈路控制協(xié)議(IEEE 802.2),是一個(gè)底層協(xié)議,在若干個(gè)常用的高層網(wǎng)絡(luò)協(xié)議之下使用,如Microsoft的NetBeui,IPX,以及AppleTalk。作為修改的一部分,IPX,AppleTalk,以及令牌環(huán)驅(qū)動(dòng)程序都已被重寫,以利用這個(gè)新的公用子系統(tǒng)。此外,一個(gè)外部源(an outside source)整合了可以工作的NetBEUI協(xié)議棧,它是否要被加到的標(biāo)準(zhǔn)內(nèi)核中還有待研究。
除了以上這些,還有其他一些小的改變。IPv6做了一些主要的改進(jìn),使其可以運(yùn)行在令牌環(huán)網(wǎng)絡(luò)中。Linux的NAT/Masquerading 支持也得到了擴(kuò)展,從更好地處理需要多個(gè)連接的協(xié)議(H.323,PPTP等)。在Linux的路由器前端,對(duì)配置VLAN的支持也已經(jīng)成熟,不再是"試驗(yàn)性的"的了。
網(wǎng)絡(luò)文件系統(tǒng)
Linux對(duì)網(wǎng)絡(luò)文件系統(tǒng)的支持構(gòu)建在Linux健壯的網(wǎng)絡(luò)協(xié)議支持之上,它也同樣健壯。安裝或者輸出(export)一個(gè)網(wǎng)絡(luò)文件系統(tǒng),是需要內(nèi)核直接參與的為數(shù)不多的幾個(gè)上層網(wǎng)絡(luò)相關(guān)操作之一。(另外比較明顯的還有對(duì)于網(wǎng)絡(luò)塊設(shè)備的支持,在2.6中沒(méi)有特別大的改變,并且也只是在類似文件系統(tǒng)操作的特定應(yīng)用中使用。)所有其他的網(wǎng)絡(luò)相關(guān)操作都可以被放到用戶空間去,而不需要核心開(kāi)發(fā)人員去考慮。
在Linux和類UNIX世界中,最普遍的網(wǎng)絡(luò)文件系統(tǒng)是一個(gè)名為Network File System的文件系統(tǒng),簡(jiǎn)稱NFS。
NFS是一個(gè)復(fù)雜的文件共享協(xié)議,跟UNIX特別是Sun Solaris有相當(dāng)深厚的淵源??梢允褂肨CP或UDP作為NFS的主要傳輸協(xié)議,但也需要其他一些子協(xié)議,這些協(xié)議又各自運(yùn)行在RPC(遠(yuǎn)程過(guò)程調(diào)用)協(xié)議之上。這其中包括獨(dú)立的用于認(rèn)證的mount協(xié)議以及用于文件鎖的NLM(network lock manager)。(通常的實(shí)現(xiàn)版本同時(shí)也跟其他一些基于RPC的協(xié)議緊密地結(jié)合在一起,比如用于身份驗(yàn)證的NIS-網(wǎng)絡(luò)信息服務(wù)--用于認(rèn)證。NIS在Linux機(jī)器上沒(méi)有得到廣泛應(yīng)用,主要因?yàn)樗狈Π踩浴#┛赡苷且驗(yàn)镹FS協(xié)議如此的復(fù)雜性,才沒(méi)有被作為"Internet協(xié)議"廣泛接受。
Linux 2.6中,NFS文件系統(tǒng)得到了很大的更新和改進(jìn)。最大的改進(jìn)就是實(shí)驗(yàn)性地支持新的并且還沒(méi)有被廣泛接受的NFSv4協(xié)議(以前的linux版本支持NFS2和NFS3兩種協(xié)議)在客戶端和服務(wù)器端的實(shí)現(xiàn)。新的版本有更強(qiáng)、更安全的身份認(rèn)證(采用加密技術(shù)),支持更智能化的鎖管理,支持偽文件系統(tǒng)等。Linux還沒(méi)有實(shí)現(xiàn)所有NFS4的新特征,但是目前的版本已經(jīng)比較穩(wěn)定并且能夠支持一些產(chǎn)品級(jí)的應(yīng)用。并且,基于Linux的NFS服務(wù)端的實(shí)現(xiàn)已得到改進(jìn),從而具有了更好的擴(kuò)展性,更好的完整性(支持UDP還支持TCP),更健壯(文件系統(tǒng)在輸出文件的時(shí)候能夠進(jìn)行調(diào)整以維持它們自有的一些特征),更簡(jiǎn)便的管理(通過(guò)新的nfsd文件系統(tǒng),而不再是系統(tǒng)調(diào)用)。還有其他方面的一些改進(jìn),比如分離lockd和nfsd,支持零拷貝傳輸?shù)取FS客戶端也因?yàn)榈讓覴PC協(xié)議在緩存機(jī)制、UDP連接控制以及其他在TCP協(xié)議上的改進(jìn)而受益。Linux支持NFS共享卷作為根文件系統(tǒng)的功能也因?yàn)楹诵膶?duì)TCP協(xié)議上的NFS的改進(jìn)而改進(jìn)。
除了改進(jìn)對(duì)UNIX風(fēng)格的網(wǎng)絡(luò)文件系統(tǒng)的支持,Linux 2.6對(duì)于Windows類型的網(wǎng)絡(luò)文件系統(tǒng)的支持也進(jìn)行了改進(jìn)。Windows服務(wù)器(也包括OS/2和其他一些操作系統(tǒng))的標(biāo)準(zhǔn)共享文件系統(tǒng)是遵循SMB(server message block)協(xié)議的,Linux核心在SMB協(xié)議的客戶端對(duì)該協(xié)議的很多版本都已經(jīng)有了非常優(yōu)秀的支持。然而,Windows2000將SMB協(xié)議的一個(gè)超集的升級(jí)版標(biāo)準(zhǔn)化了,即熟知的CIFS("common internet filesystem")。CIFS修改的主要目的是簡(jiǎn)化與精煉SMB協(xié)議中一些比較混亂的部分。(注:協(xié)議之前的定義很松散,甚至?xí)霈F(xiàn)Win95/98/ME版與WinNT/Win2k版不兼容的情況。)CIFS達(dá)到了修改的目的,并且增加了UNICODE支持,改善了文件鎖,支持硬鏈接,徹底消除了對(duì)NetBIOS的依賴,并給Windows用戶增加了一些新的特征。既然Linux用戶不打算始終呆在被遺忘的角落(譯者注:CIFS是Windows系統(tǒng)提出的標(biāo)準(zhǔn),之前僅在Windows系統(tǒng)之上有實(shí)現(xiàn)),Linux 2.6核心對(duì)本地安裝CIFS文件系統(tǒng)的部分徹底進(jìn)行了重寫。Linux 2.6現(xiàn)在也支持SMB和CIFS的擴(kuò)展--SMB-UNIX,該擴(kuò)展使得Linux可以訪問(wèn)SMB服務(wù)器(比如Samba)上的可能存在的非Windows的文件類型(比如設(shè)備節(jié)點(diǎn)和符號(hào)鏈接)。
盡管現(xiàn)在已經(jīng)不常見(jiàn)到,但是Linux還是沒(méi)有完全忘記Novell NetWare用戶。Linux 2.6最多允許256個(gè)Linux客戶端安裝同一個(gè)使用NCP(NetWare Core Protocol)文件系統(tǒng)驅(qū)動(dòng)的NetWare卷。
Linux 2.6也加入了相對(duì)新的一些分布式網(wǎng)絡(luò)文件系統(tǒng)(即在一個(gè)邏輯卷上的文件可以分布在多個(gè)節(jié)點(diǎn)中)的支持。除了Linux 2.4中引入的CODA文件系統(tǒng),Linux現(xiàn)在也包含對(duì)另兩個(gè)分布式文件系統(tǒng):AFS和InterMezzo的支持。AFS,即the Andrew filesystem(如此命名是因?yàn)樗畛跏荂MU開(kāi)發(fā)的),特性非常有限,目前只支持讀操作。另一個(gè)新支持的文件系統(tǒng)InterMezzo(也是CMU開(kāi)發(fā)的)也在Linux2.6中得到支持;它具有一些更為先進(jìn)的特性,如:無(wú)連接操作(工作在客戶端的緩存中),適合要求高可用性的應(yīng)用,在那些應(yīng)用環(huán)境中,需要保證存儲(chǔ)區(qū)永遠(yuǎn)可用。同時(shí)它也支持保持?jǐn)?shù)據(jù)在多個(gè)計(jì)算機(jī)之間(比如筆記本電腦、PDA和桌面電腦)同步的應(yīng)用。很多對(duì)這些新的文件系統(tǒng)提供支持的項(xiàng)目都是在Linux平臺(tái)上實(shí)現(xiàn)的,這也使得Linux能夠走在對(duì)這些新特性支持的最前面。
其他特性
安全性
Linux2.6的另一個(gè)沒(méi)有引起足夠注意的大的變化是跟安全相關(guān)的變化。甚至本質(zhì)上,整個(gè)基于核心的安全體系(在類UNIX操作系統(tǒng)中的超級(jí)用戶權(quán)限)已經(jīng)被劃分成一些可以被替換的安全模塊。(不過(guò)目前提供的安全模式只有缺省的一個(gè),權(quán)當(dāng)一個(gè)向我們展示如何自定義安全模塊的例子。)作為這個(gè)變化的一部分,核心所有的部分都被更新以具有更細(xì)粒度的用戶訪問(wèn)控制,而不是象以前的"超級(jí)用戶"系統(tǒng)。雖然幾乎所有的Linux系統(tǒng)中將仍然存在一個(gè)具有完全訪問(wèn)權(quán)限的root用戶,但上述的改變使得類Linux系統(tǒng)可以不再必須如此。另一個(gè)安全相關(guān)的變化是一些二進(jìn)制模塊(比如硬件廠商提供的驅(qū)動(dòng)程序)不能再重載系統(tǒng)調(diào)用,也不能看到以及修改系統(tǒng)調(diào)用表。這極大地限制了非開(kāi)放源碼的模塊在核心中的訪問(wèn),同時(shí)也修補(bǔ)了GPL版權(quán)協(xié)議在這方面的一些可能存在的漏洞。最后一個(gè)跟安全相關(guān)的變化就是新的核心能夠使用硬件隨機(jī)數(shù)生成器(一些新的處理器中提供),而不是依靠隨機(jī)的硬件熵值變化。
虛擬Linux
Linux 2.6一個(gè)很有趣的特點(diǎn)是自包含了一個(gè)"用戶態(tài)(user-mode)"的體系結(jié)構(gòu)。它本質(zhì)上是一種移植--將Linux移植到它自身(正如移植到不同的硬件體系那樣),從而允許一個(gè)完全虛擬的Linux-on-Linux運(yùn)行環(huán)境。新的Linux實(shí)例像普通應(yīng)用程序一樣運(yùn)行。在這個(gè)新的Linux內(nèi)部,你可以配置偽網(wǎng)絡(luò)、文件系統(tǒng)或者其他一些設(shè)備,整個(gè)過(guò)程通過(guò)專用的驅(qū)動(dòng)程序與宿主Linux進(jìn)行安全交互。這被證明不僅是在開(kāi)發(fā)方面(進(jìn)行分析、統(tǒng)計(jì)等),而且在安全分析和密罐(honeypots)技術(shù)中都是非常有用的。當(dāng)然大多數(shù)用戶還不需要這樣的支持,它只是被當(dāng)作了一個(gè)可以運(yùn)行在你的機(jī)器上的很酷的特性而已。(給你的朋友留下深刻的印象?。?
筆記本電腦
除了上面提到的一些通用的支持(比如APM和ACPI的改進(jìn),以及對(duì)無(wú)線支持的改進(jìn)等),Linux還有兩個(gè)很難分類的與筆記本電腦用戶相關(guān)的特征。第一個(gè)是新核心支持的軟停機(jī)磁盤存儲(chǔ)(sofware-suspend-to-disk 譯者注:保存內(nèi)存鏡像到磁盤,之后停機(jī)--類似halt,再次開(kāi)機(jī)時(shí)內(nèi)核從磁盤獲取保存的內(nèi)存鏡像并恢復(fù)運(yùn)行;軟停機(jī)功能不需要APM、ACPI等硬件支持)。
另一個(gè)是對(duì)現(xiàn)代移動(dòng)處理器的可根據(jù)用戶是否在使用機(jī)器從而作出cpu運(yùn)行速度(以及相應(yīng)的電源需求)自動(dòng)調(diào)節(jié)的支持。
向后兼容
盡管Linux 2.6是大的內(nèi)核升級(jí),但是對(duì)用戶層應(yīng)用的影響幾乎是不存在的。主要的例外是線程,一些能夠在2.4或2.2上運(yùn)行的多線程程序?qū)⒉荒茉?.6上運(yùn)行。
當(dāng)然,一些底層的應(yīng)用如模塊工具將肯定不能工作。另外,/proc目錄和/dev目錄下的一些文件和格式也發(fā)生了變化,如果上層應(yīng)用對(duì)此有依賴,也可能不能繼續(xù)工作。(當(dāng)更多的內(nèi)容被移動(dòng)到/sys虛擬文件系統(tǒng)中的時(shí)候,情況尤其如此。在/dev目錄中,向后兼容的設(shè)備名很容易就能推出來(lái)。)
除了提到的這些明顯的變化,還有很多小的變化可能會(huì)對(duì)一些應(yīng)用環(huán)境產(chǎn)生影響。首先,非常陳舊的(linux 2.0或更早)交換分區(qū)需要重新格式化才能在2.6中使用。(由于交換分區(qū)并不包含永久數(shù)據(jù),這對(duì)用戶來(lái)說(shuō)不會(huì)是問(wèn)題。)由于多數(shù)抑制Apache,Zeus等http服務(wù)器接近內(nèi)核速度的的性能瓶頸已經(jīng)被解決,之前的允許核心直接提供網(wǎng)頁(yè)服務(wù)的kHTTPd守護(hù)進(jìn)程也被去除。
對(duì)諸如陳舊硬盤的OnTrack和EzDriveDOS磁盤管理器以及相應(yīng)的DOS兼容性的支持也被去除。從軟盤上含有核心的啟動(dòng)扇區(qū)進(jìn)行啟動(dòng)的支持也被去除,取而代之的是SysLinux。最后,soundmodem功能也被去除了,但是用戶空間的版本維護(hù)地更好,并且更加實(shí)用。
寫在最后
這篇文檔主要出自BitKeeper changelogs的長(zhǎng)時(shí)間的閱讀,對(duì)源代碼的"賞玩"(looking at and playing with),對(duì)郵件列表的閱讀,以及很多很多為完成本文所進(jìn)行的Google和Lycos或這或那的搜索。盡管如此,文中可能有遺漏或者理解有誤的地方。我也盡量地小心地不過(guò)分使用那些被合并入內(nèi)核的項(xiàng)目網(wǎng)頁(yè),因?yàn)樗鼈兿鄬?duì)官方的內(nèi)核版本支持要"大大超前"。如果您發(fā)現(xiàn)這篇文檔中的任何錯(cuò)誤,或者希望email給我詢問(wèn)我的情況,您可以email給jpranevich@kniggit.net。
具有更多技術(shù)背景的人可能只需要一個(gè)公告列表,Dave Jones編寫了另一份出色的2.6開(kāi)發(fā)進(jìn)展的總括:http:/www.codemonkey.org.uk/post-halloween-2.5.txt。他的工作與本文的任何相似之處純屬巧合,因?yàn)槲覀兌际加谠创a,并且都側(cè)重于x86體系。
pid控制相關(guān)文章:pid控制原理
linux相關(guān)文章:linux教程
評(píng)論