新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Linux 2.6內(nèi)核的精彩世界

Linux 2.6內(nèi)核的精彩世界

作者: 時間:2011-02-25 來源:網(wǎng)絡(luò) 收藏

Linux 2.6內(nèi)核的精彩世界

Joseph Praneich

Linux內(nèi)核2.6版的開發(fā)已經(jīng)接近尾聲,2.6測試版發(fā)布已經(jīng)二個月了,正式版預(yù)計明年年初發(fā)布。作為一個主要發(fā)布版本,2.6相對于2.4有很大的改動;它引入了許多新的特性,同樣也去除很多過時的特性。它在哪些方面有大的改動?它對Linux的開發(fā)人員以及其他層面的Linux用戶可能有什么樣的影響?閱讀本文,您將得到答案。--譯者
盡管我們第一次啟動Linux 2.4似乎只是昨天的事,時間已經(jīng)流走,內(nèi)核開發(fā)團(tuán)隊(duì)的2.6版內(nèi)核開發(fā)工作已經(jīng)接近完成了。本文將試圖描述2.6內(nèi)核中的許多新特性(側(cè)重i386平臺的Linux)。和封閉源碼的軟件的預(yù)發(fā)布不一樣的是,這里所描述的所有特性當(dāng)前都是2.5版內(nèi)核開發(fā)樹中可用的(其中一些的bug少一些,另一些bug多一些)。(按照Linux的傳統(tǒng),偶數(shù)版本的內(nèi)核是穩(wěn)定的,奇數(shù)版本的只是開發(fā)用的)。也就是說,這里所描述的一些特性在實(shí)際的2.6版本中仍可能被去除或標(biāo)志為"experimental"(試驗(yàn)性)。然而內(nèi)核當(dāng)前處于特性凍結(jié)(feature-freeze)時期,最終的發(fā)行版本應(yīng)該不大可能過于偏離這里的描述。同時也應(yīng)該清楚這里描述的一些"新"特性在第一次出現(xiàn)在2.6系列內(nèi)核后,可能被向后移植到了官方的或者發(fā)行版供應(yīng)商的2.4版內(nèi)核之中。
或許使得這篇文章更為晦澀的是,即將到來的內(nèi)核的版本號至今仍未確定。最可能使用的版本號是2.6,但是一些人提議版本號可以使用3.0,因?yàn)檫@個版本中包含了NUMA以及無MMU系統(tǒng)的支持。為論述方便,本文將一直使用2.6作為即將到來的內(nèi)核的版本號。
您正在閱讀的是本文檔(《Linux 2.6內(nèi)核的精彩世界》)非正式版的第一版,完稿于2003年7月13日,基于2.5.75開發(fā)版內(nèi)核。隨著Linux內(nèi)核最后工作的完成,這份文檔將發(fā)布其他非正式版,但是這份文檔的正式版直到2.6的最后發(fā)布才宣告完成。由于本文是非正式版的第一版,其中可能有錯誤或者疏漏;如果您發(fā)現(xiàn)了它們,請告訴我,我將很高興地去修正它們。

到目前為止的故事...
Linux內(nèi)核始于1991年由Linus Torvalds為他的386開發(fā)的一個類Minix的操作系統(tǒng)。Linus初始曾想命名為這個系統(tǒng)為Freax,但很幸運(yùn)的是最后他最后沒有那樣做。Linux 1.0的官方版發(fā)行于1994年3月,包含了386的官方支持,僅支持單cpu系統(tǒng)。Linux 1.2發(fā)行于1995年3月,它是第一個包含多平臺(Alpha,Sparc,Mips等)支持的官方版本。Linux 2.0發(fā)行于1996年6月,包含很多新的平臺支持,但是最重要的是,它是第一個支持SMP(對稱多處理器)體系的內(nèi)核版本。Linux 2.2在1999年1月到來,它帶來了SMP系統(tǒng)上性能的極大提升,同時支持更多的硬件。最后,Linux 2.4于2001年1月發(fā)布,它進(jìn)一步地提升了SMP系統(tǒng)的擴(kuò)展性,同時它也集成了很多用于支持桌面系統(tǒng)的特性:USB,PC卡(PCMCIA)的支持,內(nèi)置的即插即用,等等。Linux 2.6不僅包含了這些特性,同時也是一個無論對相當(dāng)大的系統(tǒng)還是相當(dāng)小的系統(tǒng)(PDA等)的支持都有很大提升的"大跨越"。

多種平臺支持
能夠支持相當(dāng)廣泛的硬件和平臺,是采用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)勢之一。Linux自1.2版就開始包含對新的處理器類型和特性的支持,最新的Linux 2.6內(nèi)核發(fā)布版本也不例外。這種趨勢不會直接影響到Linux在Intel平臺下的使用,同時使得Linux能在盡可能大的范圍內(nèi)被使用,這一點(diǎn)非常重要。

小規(guī)模 - 系統(tǒng)中的Linux

Linux 2.6 擴(kuò)展多平臺支持的一個主要途徑就是把uClinux的大部并入了主流內(nèi)核(mainstream kernel)。uCLinux(可以發(fā)音為"you-see-Linux",但更正確的拼寫,首字母應(yīng)該式希臘字母"mu")是將Linux應(yīng)用在微控制器平臺的項(xiàng)目。很多年來,這個Linux分支為許多芯片提供了支持,把它更多的集成到主流內(nèi)核中是一件非常有意義的事。
不像通常的Linux移植版本,這里描述的移植版由于硬件限制和通常的Linux相比,不具有所有類似的特性。主要的區(qū)別在于:這些移植版是針對于沒有內(nèi)存管理單元(MMU)的處理器的(Intel的CPU從386開始就有MMU了)。缺少M(fèi)MU的支持,運(yùn)行真正的多任務(wù)系統(tǒng)時,任務(wù)之間沒有內(nèi)存保護(hù)機(jī)制(因此任何程序都可以使得其他程序崩潰),一些有關(guān)進(jìn)程派生的系統(tǒng)調(diào)用也無法實(shí)現(xiàn)。正是因?yàn)闆]有內(nèi)存保護(hù)機(jī)制(或者說,沒有任何安全性可言),它們不適用于多用戶系統(tǒng)。
在對嵌入式處理器支持上,Linux 2.6有四個主要的新進(jìn)步。首先是對Motorola的新型嵌入式m68k系列處理器移植。這些被命名為Dragonball或是ColdFire的處理器可以在Motorola,Lineo,Arcturus或是其他廠商生產(chǎn)的系統(tǒng)或是評估板上找到。大多數(shù)Linux用戶應(yīng)該對這些處理器相當(dāng)熟悉,因?yàn)閺腜alm 1000到最新的Palm III,他們一直是Palm Pilots的心臟。不幸的是,對早期沒有MMU的m68k處理器(比如早期蘋果機(jī)上使用的68000系列)還沒有支持。最新支持的嵌入式平臺還包括日立(Hitachi)的H8/300系列(不包含H8S,但可能會盡快地集成進(jìn)來)以及NEC v850處理器。
無論怎么強(qiáng)調(diào)Linux 2.6旨在支持無MMU系統(tǒng)的主要體系結(jié)構(gòu)變化,都不為過分。所有Linux的前期版本,不論直接或是間接,都起源于Linus最初在Intel 80386上的工作,局限性是固有的。沿著這個方向(對無MMU系統(tǒng)的支持),將來也許會有更多的其他早期的硬件被支持(事實(shí)上,已經(jīng)有關(guān)于此目的的項(xiàng)目啟動)。但是,不像為現(xiàn)代的以及仍在生產(chǎn)中的嵌入式處理器的提供支持,對早期的硬件的支持被更多地認(rèn)為是基于某種愛好,并且對于最終用戶而言很可能是無用的(因此在今后的Linux的官方發(fā)布版本也許不會將其包含在內(nèi))。
最新的Linux版本包含了對Axis通信公司的ETAX CRIS("Code Reduced Instruction Set")處理器的支持(更確切地說,支持ETRAX 100LX及更新的產(chǎn)品),它從技術(shù)的角度而言不是uCLinux合并的一部分(因?yàn)樗琈MU單元)。實(shí)際上對這款處理器的支持在2.4開發(fā)周期就已經(jīng)有了,但它在2.4.0以后才被引入,所以現(xiàn)在應(yīng)該提到它。它是主要用于網(wǎng)絡(luò)設(shè)備的嵌入式處理器。與此相關(guān)的ETRAX 100,是得到uClinux支持的無MMU處理器,但是在主流的Linux內(nèi)核中相關(guān)支持卻沒有集成進(jìn)來。

Opteron支持 - 消費(fèi)級的64位Linux
另一個在2.4.x開發(fā)環(huán)節(jié)就已經(jīng)并入但這里仍然值得提及的是對AMD Opteron芯片(基于AMD64體系結(jié)構(gòu))的支持。Opteron向后與Intel-clone的處理器兼容,并且,甚至可能得到微軟的支持。是它還是Intel的Itanium家族的某一成員成為64位消費(fèi)級產(chǎn)品的事實(shí)標(biāo)準(zhǔn)現(xiàn)在還很難下定論。
盡管2.4系列內(nèi)核的后期版本已經(jīng)可以在該芯片上運(yùn)行,但作為產(chǎn)品應(yīng)用仍受到了很大限制。對高端用戶來說,最嚴(yán)重的問題是,每個應(yīng)用程序的RAM的使用都被限制在512MB以內(nèi)。另一方面,新內(nèi)核對在該平臺上運(yùn)行x86(32位)的程序的支持得到了改進(jìn)。

子體系結(jié)構(gòu)(Subarchitecture)支持
Linux 2.6除了對許多新的處理器體系結(jié)構(gòu)外,還包含了一個稱為子體系結(jié)構(gòu)(Subarchitecture)的新概念。以前,Linux通常假設(shè)處理器和其他硬件是配套的。也就是說,i386系列處理器只會在PC/AT服務(wù)器上使用。這條針對i386的假設(shè)在Linux 2.4中就被打破,因?yàn)閕386的額外支持使其可以在SGI的視頻工作站(Visual Workstation)中使用。(事實(shí)上,在其他非i386體系結(jié)構(gòu)上,這個假設(shè)早被打破了。比如,m68k很早就支持Amiga,Michintosh等平臺。)Linux 2.6對于此最大的變化就是,讓這個特性以及概念成為標(biāo)準(zhǔn),以便所有的體系結(jié)構(gòu)都可以用相似而健全的方法來處理,以便更清晰地劃分模塊。
標(biāo)準(zhǔn)的確立使得i386可以運(yùn)用于兩個新的平臺。第一個是NCR的Voyager體系。這是一個對稱多處理器(SMP)系統(tǒng)(在Intel的MP規(guī)范標(biāo)準(zhǔn)確定之前就已經(jīng)開發(fā)出來了),它支持多達(dá)32個486-686的處理器配置。實(shí)際采取這種體系結(jié)構(gòu)的產(chǎn)品處理器的配置數(shù)目要相對少一些,而且目前并不是所有的型號都得到了Linux的支持(最早的就不支持)。第二種得到最新支持的體系結(jié)構(gòu)是更為廣泛使用的由NEC開發(fā)的PC-9800平臺,它曾是日本市場占統(tǒng)治地位的PC平臺,一直到最近幾年。最初的PC-9800裝載的是8086處理器,最終發(fā)展到奔騰級處理器和SMP支持。(當(dāng)然,Linux對它的支持局限在386以上。)盡管在美國它完全不為人所知,微軟的Windows 95之前的版本曾移植到這個平臺上。該平臺由于生產(chǎn)商對標(biāo)準(zhǔn)PC的偏愛,生產(chǎn)已經(jīng)中止。
Linux對差異細(xì)微的硬件類型支持的形式化,使得操作系統(tǒng)能更容易的移植到其他平臺上,比如移植到專為存儲設(shè)計的硬件或者是使用在工業(yè)領(lǐng)域的主流處理器。需要澄清的是,子體系結(jié)構(gòu)也不是任何時候都管用的,它能夠發(fā)揮作用是因?yàn)檫@些可移植的系統(tǒng)非常底層構(gòu)件(比如IRQ路由)有或多或少的不同。比起在X-box上運(yùn)行Linux的差別來說,驅(qū)動程序等相對小的差別還不足以把它們從傳統(tǒng)的i386系統(tǒng)中分開。Linux對X-box的支持,就不是子體系結(jié)構(gòu)的問題。

大規(guī)模 - 非一致存儲訪問體系結(jié)構(gòu)(NUMA)和大型機(jī)
除了以上所提及的新硬件類型的支持之外,新的Linux內(nèi)核發(fā)行版也包含了對大型服務(wù)器(一些運(yùn)行i386處理器,也有些運(yùn)行其他處理器)更多的支持。對Linux來說,這樣的特性是新近加入的,還有許多優(yōu)化工作需要完成。這是一個Linux發(fā)展相當(dāng)迅速的領(lǐng)域,我們能夠預(yù)計在不久的將來,Linux將成為此領(lǐng)域的有力競爭者。
在此方面最大的改變就是Linux對NUMA服務(wù)器的最新支持。NUMA(非一致存儲訪問)在多進(jìn)程世界里是超越SMP以及提升多處理器系統(tǒng)效率的一個進(jìn)步。SMP系統(tǒng)的設(shè)計上有著許多和對應(yīng)單處理器系統(tǒng)類似的局限性。其中最大的設(shè)計局限之一就是系統(tǒng)中只有唯一的一塊內(nèi)存區(qū),所有的處理器對它都平等地對它進(jìn)行訪問。在多處理器系統(tǒng)里,這樣會在同一條內(nèi)存總線上的多處理器之間引起相當(dāng)高的競爭,導(dǎo)致性能瓶頸。NUMA服務(wù)器,通過引入了以下的理念解決了這個問題:對于某個特定的處理器,一些內(nèi)存比其他一些的更為接近(close)??梢赃@樣簡單地設(shè)想(同時技術(shù)上也不會有嚴(yán)重錯誤),你的系統(tǒng)有許多包含了處理器、內(nèi)存以及其他元件(比如I/O擴(kuò)展卡)。系統(tǒng)中有很多這樣的卡,它們可以相互通訊;顯而易見,相對其他卡上的內(nèi)存,每塊卡上的處理器能更快的訪問本地內(nèi)存(自己的卡上內(nèi)存)。從許多角度上看,NUMA體系結(jié)構(gòu)就是一個緊密耦合的集群特例。
為了給NUMA主機(jī)提供良好的支持,Linux十分必要在許多方面進(jìn)行調(diào)整,以使新模型更具效率。首先,建立了一個內(nèi)部拓?fù)銩PI,以使內(nèi)核知道處理器和內(nèi)存以及其他IO設(shè)備間的相互關(guān)系。有了內(nèi)部拓?fù)銩PI的支持,Linux的進(jìn)程調(diào)度器可以理解這些關(guān)系,并且會嘗試優(yōu)化任務(wù)以達(dá)到最佳的本地資源使用。此外,許多NUMA主機(jī)在各個節(jié)點(diǎn)(nodes)的線性內(nèi)存區(qū)域之間存在空洞(holes)。新內(nèi)核已經(jīng)能夠合理的處理這種不連續(xù)情況。內(nèi)核還有許多其他使得Linux可以支持高端(high-end)主機(jī)的變化,這也是內(nèi)核發(fā)展的一個明確方向。再過一年,我們可以期待Linux在高端機(jī)型上效率以及其他方面的進(jìn)步。


深入Linux
除了橫向支持越來越多的硬件,Linux 2.6還在已支持的平臺上根據(jù)硬件的性能提升進(jìn)行了改進(jìn)。這些針對特定CPU的優(yōu)化包括:Transmeta的Crusoe系列,Intel’s Pentium 4 Xeon、Pentium 3-M、Pentium 4-M 和AMD移動處理器。新版本Linux還解決了某些Athlon處理器自身的bug導(dǎo)致的問題。Linux 2.6還解決了在某些多于16個處理器的系統(tǒng)啟動時偶爾會掛起的問題,盡管這個bug不會影響大多數(shù)用戶的正常使用。

超線程
在Linux 2.6中不算新鮮,內(nèi)核在2.4.17發(fā)布中就已經(jīng)開始包含對Intel P4處理器的超線程(Hyperthreading)的支持(在這里提及它,一是因?yàn)樗]有包含在2.4最初的發(fā)布中,二是自那以后內(nèi)核又有了很大的改變)。超線程使得單個的處理器可以偽裝成操作系統(tǒng)看來二個或更多的多個處理器。最令人激動的是,Linux是第一個把超線程特性引入市場的操作系統(tǒng),盡管早在一年前Intel就發(fā)布了兼容的處理器。有傳聞?wù)f,微軟在對支持超線程的CPU按一個CPU還是按兩個CPU收取授權(quán)費(fèi)(license)的問題上拿不定主意。Linux的開放模型(以及沒有基于cpu的授權(quán))使得Linux操作系統(tǒng)第一個支持這個新特性。顯然,一個處理器就算扮作兩個處理器工作,它還是一個處理器,性能并不能因此增加很多。2.5中調(diào)度器和其他一些部分在有了新的優(yōu)化,使得處理器的超線程可以真正的發(fā)揮作用。如果是在2.4下加入超線程支持,結(jié)果就不一定了,有時性能還會下降。

容量 -- 可擴(kuò)展性的進(jìn)展

除了對NUMA的支持,Linux 2.6在處于食物鏈頂端的Intel服務(wù)器方面,也有一些變動。最重要的就是對Intel的物理地址擴(kuò)展(PAE)的完全支持,使得較新的32位的x86系統(tǒng)可以訪問高達(dá)64GB的內(nèi)存,但僅僅限于頁面映射模式。另外,通過加強(qiáng)對高級可編程中斷控制器(APIC)的支持,多處理器系統(tǒng)之上的IRQ均衡(balancing)大大提升。
在許多其他方面,內(nèi)部限制在可能的地方都有所放松。Linux系統(tǒng)上用戶和用戶組的數(shù)目從65000越升到了超過40億(實(shí)際就是16位到32位的變化)。這使得Linux在之前可能超越限制的大型文件和認(rèn)證服務(wù)器上更加實(shí)用。類似的,進(jìn)程標(biāo)識號(PID)的數(shù)目也從32000升到10億。這個改變,與其他PID子系統(tǒng)優(yōu)化一起,將提高在十分繁忙或是長期工作的系統(tǒng)上的應(yīng)用程序的啟動性能。盡管同時打開的文件最大數(shù)目并沒有增加,但是Linux 2.6不會再要求你預(yù)先設(shè)定限制值;限制值會隨著系統(tǒng)的運(yùn)行自動調(diào)整。最后,Linux 2.6包含了改進(jìn)的64位的塊設(shè)備支持(當(dāng)然塊設(shè)備本身應(yīng)當(dāng)支持64位模式),即使是在i386這樣的32位平臺。這樣一來,文件系統(tǒng)的存儲上限可達(dá) 2TB。

內(nèi)核互動性以及響應(yīng)性

Linux 2.6中一個受關(guān)注的焦點(diǎn)就是使得系統(tǒng)對于桌面用戶以及其他一些需要對事件進(jìn)行高度人為控制的應(yīng)用具有更具響應(yīng)性(responsitive)。這其中各個不同的目標(biāo)系統(tǒng)具有很不同的挑戰(zhàn),但內(nèi)核中包含了很多改變,使得它們同時受益。
2.6中一個必須理解的主要內(nèi)部改變是現(xiàn)在內(nèi)核自身是可搶占的。在所有之前的Linux版本中,當(dāng)系統(tǒng)運(yùn)行內(nèi)核的相關(guān)事務(wù)時,它不能被打斷(在多處理器系統(tǒng)中,基于各cpu的角度這也是成立的)。Linux 2.6中,內(nèi)核現(xiàn)在允許自身在執(zhí)行任務(wù)時被打斷,這樣用戶任務(wù)可以繼續(xù)運(yùn)行即使內(nèi)核正在做一些復(fù)雜的事情。(為了避免明顯這可能帶來的競爭情況,內(nèi)核中含有一些具有鎖的代碼段,運(yùn)行于這樣的代碼段的時候,內(nèi)核不能被打斷。)這個改變的主要好處是系統(tǒng)的可交互性(比如,對于桌面用戶)大大提升,系統(tǒng)對于用戶輸入這樣的事件感覺起來快多了。
其他使得Linux成為一個更加具有響應(yīng)性系統(tǒng)的改變是并入對新的"futexes"("Fast User-Space Mutexes")的支持,這項(xiàng)支持發(fā)揮作用需要用戶程序的支持(使用futex實(shí)現(xiàn)互斥)。Futexes是一種序列化(serialize)事件使得它們不會相互沖突的機(jī)制。與傳統(tǒng)的多數(shù)的線程庫鎖支持的mutex操作不同,這是部分基于內(nèi)核的(partially kernel based),同時它也支持設(shè)置優(yōu)先級使得高優(yōu)先級的應(yīng)用或線程優(yōu)先獲得競爭的資源。通過使用一個程序去指定一個等待的任務(wù)比其他的更重要,它帶來了可能是一個應(yīng)用的時序--關(guān)鍵區(qū)域更佳的響應(yīng)性。
Linux的I/O子系統(tǒng)也經(jīng)歷的很大的修改,使得它在各種工作負(fù)荷下都更具響應(yīng)性。這個變化包括I/O 調(diào)度子系統(tǒng)--決定何時、哪一進(jìn)程去讀一個設(shè)備的內(nèi)核代碼的完全重寫。重寫的I/O層現(xiàn)在可以更好地保證沒有進(jìn)程過長時間地停留在I/O等待上,同時不排斥以前的優(yōu)化工作使得讀等請求以最有效的次序操作硬件的優(yōu)化工作。
盡管實(shí)時操作系統(tǒng)(RTOS)的開發(fā)者可以從這些改變中受益,Linux 2.6將不會成為一個實(shí)時內(nèi)核。然而,這些以及其他相關(guān)的背景工作使得將Linux轉(zhuǎn)變?yōu)镽TOS成為可能。為用戶或開發(fā)者提供這樣的支持的外部patch(尚未合并到官方的內(nèi)核版本)已經(jīng)出現(xiàn)了。

模塊子系統(tǒng) - 設(shè)備驅(qū)動程序
在 Linux 2.6的開發(fā)歷程中,模塊子系統(tǒng)是另一有重大改進(jìn)的部分。許多代碼被重寫,以提高穩(wěn)定性,并使系統(tǒng)更加透明。除了這些明顯的表層的變化之外,還有更多背后的內(nèi)核如何看待以及使用模塊的改變。
首先,Linux 2.6中內(nèi)核驅(qū)動程序最顯而易見的(雖然并沒有太大作用)的變化是文件擴(kuò)展名改變了。".ko"(kernel object,內(nèi)核目標(biāo)文件)取代了".o"(這是一目標(biāo)文件的常見擴(kuò)展名,通常在程序編譯期間,鏈接生成可執(zhí)行應(yīng)用程序之前創(chuàng)建)。與其說這使得模塊并不是真正的中間文件這一點(diǎn)更為清楚,還不如說這僅僅是一個裝飾性(cosmetic)的改動。
完完全全實(shí)質(zhì)性的改進(jìn)在于消除存在于很多內(nèi)核版本中的競態(tài)的多方面工作。問題的關(guān)鍵在于,如果卸載發(fā)生在模塊檢查并確認(rèn)沒有其它的設(shè)備正在使用它之后,使用一個正在被卸載的模塊來啟動設(shè)備是有可能的。新的內(nèi)核模塊代碼應(yīng)使得這一條件更難被觸發(fā)。更進(jìn)一步,現(xiàn)在簡單地完全禁止模塊卸載也是有可能的。
更加透明是新的模塊子系統(tǒng)另一特性。在此之前,幾乎所有的 Linux版本中,模塊是足夠智能的,它們可以通過掃描總線尋找它識別(recognized)的設(shè)備ID號,檢測到它所能夠支持的設(shè)備(比如PCI,ISA PnP以及PC卡)。Linux 2.6標(biāo)準(zhǔn)化了這種支持,使之對內(nèi)核來說外部化,外部程序以及模塊加載器判斷一個特定的模塊可以支持哪些設(shè)備將更為容易。這將允許各種硬件管理程序(比如 Redhat的kudzu)對硬件作出智能化的判斷,即使他們本身對自己所處理的硬件設(shè)備并不熟悉。如果你的知識超越了當(dāng)前版本的驅(qū)動程序,你可以(通過新的 sys文件系統(tǒng)中的一個接口)強(qiáng)制一個驅(qū)動程序工作于某一特定的設(shè)備,即使驅(qū)動程序并不知道自己可以支持該設(shè)備。

其他改進(jìn)
除了上述的許多改變之外,還有很多其他可以提升系統(tǒng)性能的普遍性的改變。這其中包括更多的去除了"Big kernel Lock"(早期Linux用于支持SMP系統(tǒng)時所采用的非細(xì)粒度鎖),以及針對文件系統(tǒng)預(yù)讀、回寫和小文件操作的優(yōu)化等。
Linux 2.6還解決了一個更為深刻的穩(wěn)定性問題:內(nèi)核將不會分配多于系統(tǒng)中RAM(加swap)數(shù)量的內(nèi)存。此前,Linux在一些即使系統(tǒng)內(nèi)存耗盡的情況下,仍然允許malloc操作分配內(nèi)存成功。過量分配(overcommitment)邏輯得到修改,使得這種情況現(xiàn)在不再可能出現(xiàn)。(當(dāng)然,如果你耗盡了系統(tǒng)的RAM,即使沒有超越最大可用數(shù)量--你需要擔(dān)心更更嚴(yán)重的問題。)
Linux總是一個開放標(biāo)準(zhǔn)的支持者。內(nèi)核內(nèi)部的大改變之一就是Linux的線程框架被重寫,以使NPTL(Native POSIX Thread Library)可以運(yùn)行于其上。對于運(yùn)行負(fù)荷繁重的線程應(yīng)用的Pentium Pro以及更先進(jìn)的處理器而言,這是一個主要的性能提升;它也是企業(yè)級應(yīng)用中的很多高端系統(tǒng)一直以來所期待的。(實(shí)際上,RedHat已經(jīng)將它向后移植到了Linux 2.4,從RedHat 9.0中開始包含)線程框架的改變包含LInux線程空間中的許多新的概念,包括線程組、線程各自的本地存儲區(qū)、POSIX風(fēng)格信號以及其他改變。主要的缺點(diǎn)之一是依賴于老式的Linux-isms而沒有遵循POSIX標(biāo)準(zhǔn)的應(yīng)用程序(比如Sun Java)將不能運(yùn)行在支持新式線程的系統(tǒng)之上。鑒于使用新的線程模型利遠(yuǎn)大于弊,很明顯,新的內(nèi)核發(fā)布不久,最為重要的那些應(yīng)用都將會支持這個改變。
最后,2.6可以支持編譯時關(guān)閉內(nèi)核對存儲交換(swap)的支持,盡管對于絕大多數(shù)Linux之上的應(yīng)用而言,沒有直接的益處。這使得Linux可以在相對小的內(nèi)存足跡(footprint)內(nèi)運(yùn)行,對于不大可能使用交換設(shè)備的可能也是有益的。

統(tǒng)一設(shè)備模型
作為操作系統(tǒng)中的一個相對獨(dú)立的組件,設(shè)備模型對于那些被設(shè)計運(yùn)行于用于多種硬件之上的操作系統(tǒng)而言是至關(guān)重要的。簡單地說,設(shè)備模型是內(nèi)核中的基礎(chǔ)設(shè)施,用于檢測和決定系統(tǒng)中所有可選模塊的資源使用。所有的操作系統(tǒng)(包括各版本的Linux)都固有一些設(shè)備的概念。老版本的Linux(2.2或更早)僅使用一種直接的方法操作設(shè)備。系統(tǒng)為不同種類的硬件總線提供驅(qū)動程序,各式各樣的設(shè)備驅(qū)動程序知道如何探測它們所支持的設(shè)備總線以尋找對應(yīng)的硬件設(shè)備。這種系統(tǒng)非常分散,各種各樣的總線提供許多互不兼容的API,用于處理各種不同的操作。Linux 2.4通過使用一組通用接口將PCI,PC卡以及ISA PnP 整合到一個單一的設(shè)備結(jié)構(gòu)中,完成了構(gòu)建統(tǒng)一設(shè)備模型的第一步。Linux 2.6更進(jìn)一步地推進(jìn)了這方面的努力,力求在整個系統(tǒng)的范圍內(nèi),內(nèi)核以一種新的統(tǒng)一的視角看待它所依賴的硬件。

內(nèi)核對象抽象

新設(shè)備模型基礎(chǔ)的核心是一個所有底層設(shè)備類型都需使用的新的面向?qū)ο蟮慕涌?。這個內(nèi)核設(shè)備對象結(jié)構(gòu)(稱為"kobject")包含用于引用計數(shù)和操作子設(shè)備的所有接口。底層設(shè)備(例如系統(tǒng)總線)利用這一公共接口層,向內(nèi)核以及用戶空間提供統(tǒng)一的系統(tǒng)視圖?,F(xiàn)在,所有這些都被放在了中心位置,這使得Linux可以使用這些信息作許多有用的事。
在內(nèi)核中完整地保存這些新的信息,使得Linux可以更好的支持那些需要有深入的硬件知識的系統(tǒng)。一個明顯的例子就是電源管理。近幾年新出現(xiàn)的電源管理標(biāo)準(zhǔn)是ACPI。ACPI,即高級電源配置管理界面,最早是在Linux 2.4中有支持。不同于APM(高級電源管理),擁有這種接口的系統(tǒng)在改變電源狀態(tài)時需要分別通知每一個兼容的設(shè)備。新的內(nèi)核系統(tǒng)允許子系統(tǒng)跟蹤需要進(jìn)行電源狀態(tài)轉(zhuǎn)換的設(shè)備。另一個例子是支持熱插拔的總線。機(jī)器啟動后依然可以添加設(shè)備的能力在現(xiàn)在看來顯得很普通,但Linux直到2.2版本才提供相關(guān)支持。到了Linux 2.4,這種支持得到進(jìn)一步的加強(qiáng),范圍也擴(kuò)大到可熱插拔的PCI、PC卡、USB以及Firewire設(shè)備。通過從根本上消除熱插拔設(shè)備和傳統(tǒng)設(shè)備的差異,新內(nèi)核的集中化設(shè)備系統(tǒng)擴(kuò)展了這一支持。當(dāng)你啟動計算機(jī)的時候,設(shè)備檢測例程將"插入"系統(tǒng)中的設(shè)備。無論在系統(tǒng)啟動時,或是啟動以后,系統(tǒng)發(fā)現(xiàn)系統(tǒng)中的某個設(shè)備時,都會相應(yīng)創(chuàng)建一個相同的內(nèi)核對象,這就使得處理可插拔設(shè)備的底層結(jié)構(gòu)簡單化了。

sys文件系統(tǒng)

最明顯的用戶可見的改變可能是新的sysfs文件系統(tǒng)的出現(xiàn),它集成了下面3種文件系統(tǒng)的信息:針對進(jìn)程信息的proc文件系統(tǒng)、針對設(shè)備的devfs文件系統(tǒng)以及針對偽終端的devpts文件系統(tǒng)。該文件系統(tǒng)(安裝在/sys目錄)是核心看到的設(shè)備樹的一個直觀反映。核心通過緊密合作的核心對象(kernel object)子系統(tǒng)來建立這個信息:當(dāng)一個核心對象被創(chuàng)建的時候,對應(yīng)的文件和目錄也被創(chuàng)建。(必要的話,也有可能一個核心對象被創(chuàng)建的時候并不在sysfs文件系統(tǒng)中有記錄。)
既然每個設(shè)備(或者說內(nèi)核對象)在sysfs中都有唯一對應(yīng)的目錄結(jié)構(gòu),那么下一步可以把設(shè)備的屬性(設(shè)備名,電源模式,中斷處理等)信息輸出到這個目錄樹中以供系統(tǒng)管理員讀寫。相應(yīng)的,很多跟設(shè)備相關(guān)的/proc/sys的用法已經(jīng)或者將要移到/sys目錄下。

核心硬件支持

隨著Linux的這些年的發(fā)展并逐步進(jìn)入主流行列,從內(nèi)核所支持的設(shè)備類型來看,每一次的內(nèi)核發(fā)布,都像是一次跳躍:支持新興的技術(shù)(2.4的USB),支持古老一些的傳統(tǒng)技術(shù)(2.2的MCA)。發(fā)展到Linux2.6,不被Linux支持的設(shè)備已經(jīng)相當(dāng)少了。PC機(jī)上的主流硬件沒被支持的很少。正是由于這個原因,多數(shù)(顯然不是所有)關(guān)于硬件支持方面的改進(jìn)(包括上面所說的設(shè)備模型)圍繞對已有支持的加強(qiáng)。

內(nèi)部設(shè)備總線

位于系統(tǒng)底層的總線幾乎與處理器同樣重要;這些總線就像膠合劑,將系統(tǒng)的各個部件連到一起。在PC世界中,這些總線一直是不可或缺的,無論是老的ISA(在最初的IBM PC機(jī)中可以找到)總線,還是現(xiàn)在的外部串口以及無線(wireless)總線。一旦新的總線及設(shè)備變成流行的消費(fèi)產(chǎn)品,Linux總是能以很快的速度去適應(yīng)它;而對于不很流行的設(shè)備,情況則差很多。
一個能說明這一情況的例子就是ISA總線的PnP(即插即用)特性,Linux直到2.4版本才支持ISA總線的即插即用擴(kuò)展,比其他流行的商業(yè)操作系統(tǒng)要晚很多(在內(nèi)核支持ISA PnP之前,你或許可以勉強(qiáng)使用一些用戶態(tài)的實(shí)用程序使它工作)。Linux 2.6對這個子系統(tǒng)做了一個重要的改進(jìn),使它更完善、更好地集成于新的設(shè)備模型之中。新特性包括完整的PnP BIOS支持、設(shè)備名稱數(shù)據(jù)庫以及一些其他的使系統(tǒng)更加健壯的特性。這些改進(jìn)的結(jié)果,是使得Linux成為一個真正意義上的即插即用操作系統(tǒng),并且可以被設(shè)置成就像那些兼容機(jī)的BIOS達(dá)到的那樣。
ISA時代ISA-PnP的兩個可選的替代方案是MCA(微通道體系)和EISA(擴(kuò)展ISA),盡管它們不那么流行。在Linux2.6的開發(fā)周期中,這兩個子系統(tǒng)都做了一些改進(jìn)以支持新的設(shè)備模型。此外,通過引入設(shè)備名稱數(shù)據(jù)庫,EISA與其他子系統(tǒng)一起獲得了更進(jìn)一步的標(biāo)準(zhǔn)化。
除了剛才提到的幾個重要特性,Linux對硬件總線的支持也做了許多其它值得關(guān)注的改變。PCI總線是所有總線中最流行也是最重要的總線,Linux 2.6極大地提升了對它的支持,包括改進(jìn)的熱插拔和電源管理支持。新版本同樣也支持包含多個AGP總線(即加速圖形端口――基于PCI協(xié)議的一種獨(dú)立高速總線)的系統(tǒng),如高端圖形工作站。就對PC硬件的支持而言,Linux緊緊跟隨著硬件市場的潮流。
除了這些實(shí)際的設(shè)備總線,Linux2.6也增加了一個概念上的Legacy總線。這種總線對每種體系結(jié)構(gòu)都是專有的,這些體系結(jié)構(gòu)包含所有你可能想到的設(shè)備。例如,在一臺PC機(jī)上,可能會有板上(on-board)的串口、并口、以及PS/2端口,這些設(shè)備實(shí)際存在著,但不被系統(tǒng)中的任何一個實(shí)際總線所枚舉(enumerated)。在其他的一些平臺上,這種Legacy支持可能包含更復(fù)雜的事情(如查詢固件)。但一般來說,這只是一層包裝,使得設(shè)備驅(qū)動程序在新的驅(qū)動模型視圖下能以標(biāo)準(zhǔn)的方式操作這些設(shè)備。

外部總線

雖然早先的設(shè)備標(biāo)準(zhǔn)成熟并鮮有新的特性增加,但USB是一個例外。USB的支持在最近的內(nè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)市場。另外一個新的相關(guān)標(biāo)準(zhǔn)叫做USB On-the-Go(或稱作USB OTG),它是USB協(xié)議中一個點(diǎn)到點(diǎn)的變種,用以直連設(shè)備;Linux 2.6尚未支持它(2.6的補(bǔ)丁是可以支持的)。除了設(shè)備支持外,多數(shù)USB設(shè)備的枚舉方式都作了修正,使得Linux能訪問現(xiàn)今許多同類型設(shè)備的所有實(shí)例(instance)。這一點(diǎn)對于大型打印機(jī)或存儲設(shè)備來說相當(dāng)有益(雖然后者可能更傾向于使用專用存儲總線)。很明顯,這一領(lǐng)域的技術(shù)最近幾年成長顯著,Linux對相關(guān)設(shè)備的支持也是緊跟市場的步伐。

無線設(shè)備
過去的幾年,無線技術(shù)在公眾應(yīng)用中真正起飛了??雌饋?,在不遠(yuǎn)的將來,線纜(非電源)將成為歷史。無線設(shè)備既包括網(wǎng)絡(luò)設(shè)備(目前最常見的無線設(shè)備),也包括更通用的設(shè)備,比如PDA。
在無線網(wǎng)絡(luò)空間中,設(shè)備可以大致分為長距(如基于業(yè)余無線設(shè)備的AX.25)和短距(通常是802.11,但一些舊式協(xié)議也存在)。從很早的時候(v1.2)起,對這兩者的支持就成為 Linux的一個特征。在 2.6 的開發(fā)中,它們又都得到了更新。這里最大的改動是,用于支持各種板卡、協(xié)議的短距子系統(tǒng)的主要組件合并為一個單一的"無線"子系統(tǒng)以及 API。通過提供一組能工作于所有支持的設(shè)備的用戶空間工具來實(shí)現(xiàn)不同的設(shè)備統(tǒng)一處理。這種方式解決了原先的不同設(shè)備不同處理所帶來的很多小的兼容性問題。除了這種標(biāo)準(zhǔn)化之外,Linux 2.6版內(nèi)核還有很多全局性的改進(jìn),包括當(dāng)狀態(tài)發(fā)生改變(比如一個處于"漫游"狀態(tài)的設(shè)備)時更好的通知能力,以及對旨在更好地處理無線設(shè)備中周期性的延遲波動的一個TCP相關(guān)的改動。由于人們對2.4版內(nèi)核中無線支持的期望,上述的很多特性已經(jīng)包含在2.4版內(nèi)核中了。
在無線設(shè)備空間,有著類似的主要改進(jìn)。IrDA(以 Infrared Data Associates group命名的紅外線協(xié)議)部分自上一主要發(fā)布以來有一些改進(jìn),比如電源管理、集成進(jìn)了新的內(nèi)核驅(qū)動模型。真正的改進(jìn)還在于提供了對藍(lán)牙設(shè)備的支持。藍(lán)牙是一種新的無線協(xié)議,它設(shè)計為短距,功耗很低,也沒有 IrDA 中的"視線"的限制。作為一種協(xié)議,藍(lán)牙被設(shè)計為"到處可用"。它已被應(yīng)用于多種設(shè)備,如 PDA,移動電話,打印機(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)對點(diǎn)網(wǎng)絡(luò)的 RFCOMM 以及用于類以太網(wǎng)的 BNEP。Linux對采用藍(lán)牙技術(shù)的設(shè)備的支持在不斷提升,我們可以相信,當(dāng)足夠多的采用藍(lán)牙技術(shù)的設(shè)備被使用時,這種支持將會非常成熟。值得一提的是,對藍(lán)牙最初的支持已經(jīng)集成到了2.4系列內(nèi)核后幾個版本中。
塊設(shè)備支持

存儲總線
在2.6的開發(fā)中,IDE/ATA、SCSI等存儲總線也都得到了主要的更新。最主要的改變集中于被重寫(再一次被重寫)的 IDE 子系統(tǒng),解決了許多可擴(kuò)展性問題以及其他限制。比如,現(xiàn)在 IDE CD/RW 設(shè)備可以直接通過IDE磁盤驅(qū)動程序進(jìn)行寫操作,這種實(shí)現(xiàn)方法比過去的方法要簡潔的多。(在以前,需要再使用一個特別的SCSI模擬的驅(qū)動程序。這樣顯得很混亂,而且實(shí)現(xiàn)起來有困難。) 現(xiàn)在,遇到一個不能識別的控制器時,IDE 層可以查詢機(jī)器的 BIOS 信息,從而獲取時序操作所需數(shù)據(jù)或其他數(shù)據(jù)。SCSI部分有不少散布于系統(tǒng)中的小的改進(jìn),使之能支持更多的設(shè)備,同時提升了可擴(kuò)展性。一個針對舊式系統(tǒng)的特別改進(jìn)是,現(xiàn)在的 Linux能夠支持 SCSI-2多通道設(shè)備(這種設(shè)備在單個設(shè)備上有多于2個的 LUN)。另一個重要的改進(jìn)則是現(xiàn)在 Linux 能夠默像 MS Windows那樣檢測介質(zhì)的變動,以更好地兼容那些并不完全遵照標(biāo)準(zhǔn)規(guī)范的設(shè)備。既然這些技術(shù)歷經(jīng)時間的考驗(yàn)穩(wěn)定下來,那么 Linux 也提供對它們的支持。
Linux現(xiàn)在也包含對新一些的機(jī)器的EDD(Enhanced Disk Device) BIOS進(jìn)行直接訪問的支持,這樣便可以獲得服務(wù)器中的磁盤設(shè)備視圖。EDD BIOS包含所有連接到系統(tǒng)的、BIOS識別的存儲總線(包括IDE以及SCSI)的信息。除了獲得連接設(shè)備的配置以及其他信息之外,它還有另外幾個優(yōu)點(diǎn)。比如,這種新的接口使 Linux 能夠知道系統(tǒng)是從哪一個磁盤設(shè)備上啟動的。這在新一些的系統(tǒng)上非常有用,因?yàn)檫@樣的系統(tǒng)中到底是從哪一個設(shè)備啟動的常常不明顯。智能安裝程序也可以考慮使用這些信息,比如在決定把GRUB(一種Linux啟動裝載器)安裝在哪里時。
所有這些改動之外,這里需要再次強(qiáng)調(diào)的是,所有的總線設(shè)備類型(硬件、無線和存儲)都集成到了Linux新的設(shè)備模型子系統(tǒng)中。一些改動僅僅是"裝飾性"的,另一些則包含了非常顯著的改動(比如,甚至是如何檢測設(shè)備的邏輯都需要修改)。
文件系統(tǒng)
Linux(或其他一些系統(tǒng))下塊設(shè)備的最常見用法是在塊設(shè)備上面建立一個文件系統(tǒng)。相對Linux 2.4而言,Linux 2.6對于文件系統(tǒng)的支持在很多方面都有大的改進(jìn)。關(guān)鍵的變化包括對擴(kuò)展屬性(extended attributes)以及POSIX標(biāo)準(zhǔn)的訪問控制(access controls)的支持。
EXT2/EXT3文件系統(tǒng)作為多數(shù)Linux系統(tǒng)缺省安裝的文件系統(tǒng),是在2.6中改進(jìn)最大的一個。最主要的變化是對擴(kuò)展屬性的支持,也即給指定的文件在文件系統(tǒng)中嵌入一些元數(shù)據(jù)(metadata)。一些擴(kuò)展屬性被系統(tǒng)使用,只能由root用戶進(jìn)行讀寫。很多其他操作系統(tǒng),如Windows和MacOS系統(tǒng)已經(jīng)大量地使用了這種擴(kuò)展屬性。不幸的是,UNIX系的操作系統(tǒng)一般都還沒有很好地支持?jǐn)U展屬性,很多用戶級的程序(比如tar)需要進(jìn)行更新才能保存和轉(zhuǎn)儲這些擴(kuò)展屬性信息。這是Linux成長的又一方面;Linux對擴(kuò)展屬性的支持正在成熟。
新的擴(kuò)展屬性子系統(tǒng)的第一個用途就是實(shí)現(xiàn)POSIX訪問控制鏈表。POSIX訪問控制是標(biāo)準(zhǔn)UNIX權(quán)限控制的超集,支持更細(xì)粒度的訪問控制。必要的話(比如從NFS輸出文件的時候),這些訪問控制可以被映射到標(biāo)準(zhǔn)的user/group權(quán)限控制上。除了以上,EXT3還有其他一些小的變化。文件系統(tǒng)日志提交(commit)的時間能夠進(jìn)行調(diào)整得更加適合于筆記本電腦(處于省電模式時,可能會加速驅(qū)動器);缺省的加載選項(xiàng)可以保存在文件系統(tǒng)自身之中(這樣不用每次加載時都輸入加載選項(xiàng));可以標(biāo)記一個目錄為"indexed"以加速在這個目錄中的文件查找。
Linux對文件系統(tǒng)層還進(jìn)行了大量的改進(jìn)以兼容PC機(jī)的主流操作系統(tǒng)。首先,Linux 2.6支持Windows的邏輯卷管理器(即動態(tài)磁盤Dynamic Disks)。這個是Windows XP及后續(xù)版本中新的分區(qū)表機(jī)制,能夠很方便的支持多分區(qū)系統(tǒng)中的分區(qū)大小的調(diào)整以及新分區(qū)的創(chuàng)建。(當(dāng)然,Linux系統(tǒng)不一定會馬上使用這一機(jī)制)其次,Linux 2.6對NTFS文件系統(tǒng)的支持也進(jìn)行了重寫,現(xiàn)在能以讀/寫模式安裝一個NTFS卷。寫支持仍處于試驗(yàn)階段,在逐步改進(jìn);最終的內(nèi)核發(fā)布版中可能含有也可能不含有寫支持這一部分。最后,Linux對FAT12(很老的系統(tǒng)或軟盤上使用的DOS文件系統(tǒng))的支持中消除了使用一些MP3播放器時所遇到的bug。跟蹤PC領(lǐng)域的其他一些技術(shù)將一直是Linux核心向前發(fā)展的一個重要環(huán)節(jié)。
文件系統(tǒng)部分在與其他操作系統(tǒng)的兼容性方面也有改進(jìn)。對HPFS文件系統(tǒng)(OS/2和其他系統(tǒng)中使用)的擴(kuò)展屬性的支持有了改進(jìn)。OS/2風(fēng)格的擴(kuò)展屬性被分離到另一個的名字空間中。XFS文件系統(tǒng)也得到了更新,以達(dá)到與IRIX操作系統(tǒng)的磁盤級(on-disk)兼容。
此外,Linux文件系統(tǒng)中還有很多分散的變化。配額(quota)管理進(jìn)行了重寫以便系統(tǒng)可以支持更多的用戶;用戶可以標(biāo)記目錄為同步,從而所有變化(增加文件等)都是原子的(這一點(diǎn)對于郵件系統(tǒng)和基于目錄的數(shù)據(jù)庫系統(tǒng)尤為重要,而且在磁盤故障的恢復(fù)方面也更好一些);透明壓縮功能(僅Linux支持的擴(kuò)展)被加到ISO9660文件系統(tǒng)(CD-ROM中使用)中。最后,一個新的基于內(nèi)存的文件系統(tǒng)(hugetlbfs)被創(chuàng)建;創(chuàng)建該文件系統(tǒng)旨在更好地支持基于共享內(nèi)存的數(shù)據(jù)庫。

輸入輸出設(shè)備
在任何計算機(jī)系統(tǒng)的更"外部"的一層是輸入輸出設(shè)備,包括像鍵盤、鼠標(biāo)、聲卡、顯卡等顯而易見的東西,還包括像游戲操縱桿以及輔助設(shè)備等不那么常見的東西。在2.6的開發(fā)周期里,許多Linux的用戶端子系統(tǒng)得到了擴(kuò)展,但大部分常見設(shè)備都已經(jīng)非常成熟了。Linux 2.6中對這些設(shè)備的改進(jìn)多半衍生于內(nèi)核對外部總線支持的改進(jìn),比如藍(lán)牙無線鍵盤以及其它類似設(shè)備。盡管如此,Linux 在好幾個領(lǐng)域都有更大的改進(jìn)。

人機(jī)接口設(shè)備

Linux 2.6中一個主要的內(nèi)部改動是人機(jī)接口層的大量重寫。人機(jī)接口層是一個Linux系統(tǒng)中用戶體驗(yàn)的中心,包括視頻輸出、鼠標(biāo)、鍵盤等。內(nèi)核的新版本中,這一層的重寫以及模塊化工作超出了以前的任何一個版本。使用新內(nèi)核構(gòu)建一個不包含對顯示器等的支持的完全"headless"的Linux系統(tǒng)是可能的。開發(fā)人員或許會是這一模塊化工作的主要受益者,可以制造出只能通過網(wǎng)絡(luò)或串行線管理的設(shè)備;另一方面,對普通用戶也是有好處的,因?yàn)樵S多關(guān)于設(shè)備及體系結(jié)構(gòu)的內(nèi)在假設(shè)被模塊化了。比方說,之前總是假定如果你擁有一臺PC,那么你一定需要對標(biāo)準(zhǔn)AT(i8042)鍵盤控制器的支持。在 Linux 的新版本中移除了這一要求,因而可以在不那么遵照傳統(tǒng)的系統(tǒng)中拋開不必要的代碼。
Linux對顯示器輸出處理的支持也有不少改進(jìn),但大部分只在配置使用內(nèi)核內(nèi)部的幀緩沖控制臺子系統(tǒng)時才有用。( 多數(shù)基于Intel體系的Linux機(jī)器并不采用這種方式配置,但其他大部分體系結(jié)構(gòu)卻采用。)在我看來,最大的亮點(diǎn)在于啟動圖標(biāo)(如果你從來沒有見過,那我告訴你那是一只可愛的企鵝)現(xiàn)在支持24 bpp的分辨率。這是一個方面,其它的面向控制臺的新特性包括可以重設(shè)大小、旋轉(zhuǎn)等(對PDA及其它類似設(shè)備),還有為更多的硬件提供了硬件加速支持。最后,Linux現(xiàn)在對VESA監(jiān)視器的顯示能力信息的查詢提供了內(nèi)核支持,雖然XFree86 和大部分發(fā)布版本的安裝系統(tǒng)都在用戶空間提供了這種支持。
除這些比較大的改進(jìn)之外,Linux 2.6 在人機(jī)交互方面還有一系列小的改進(jìn)。比方說,現(xiàn)在支持觸摸屏了。另外,鼠標(biāo)及鍵盤驅(qū)動程序也得到了更新和標(biāo)準(zhǔn)化,現(xiàn)在不管底層的硬件或協(xié)議是什么,系統(tǒng)都只導(dǎo)出一個單一的設(shè)備節(jié)點(diǎn)(比如 /dev/input/mouse)。一些怪異的鼠標(biāo)(比如有多個滾輪的)現(xiàn)在也得到了支持。PC鍵盤的鍵值映射得到了更新,以遵循Windows 的"標(biāo)準(zhǔn)"來支持?jǐn)U展鍵。對游戲控制桿的支持也得到了提升,這不僅僅得益于許多新的驅(qū)動程序(包括 X Box 游戲控制盤的驅(qū)動),還歸功于引入了一些新的特性,如力量反饋(force-feedback)。最后(但絕不是最不重要的),新版本內(nèi)核提供了對 Tieman Voyager 的盲人用 TTY設(shè)備的支持,以使盲人用戶更好地使用Linux。(這個特性是如此的重要,以至于被向后移植到了Linux 2.4。)
順便提一下,Linux 修改了"系統(tǒng)請求"接口以更好地支持那些沒有本地鍵盤的系統(tǒng)。系統(tǒng)請求接口("sysrq")是系統(tǒng)管理員在本地控制臺做一些高級工作的方法,比如獲取調(diào)試信息、強(qiáng)制系統(tǒng)重啟、重新掛載文件系統(tǒng)為只讀等等。因?yàn)?Linux 2.6 現(xiàn)在支持一個完全"headless"的系統(tǒng),所以現(xiàn)在也可以通過/proc 文件系統(tǒng)觸發(fā)這些事件。(當(dāng)然,如果你的系統(tǒng)已經(jīng)掛起而你又要強(qiáng)制它做一些事情,這一特性也幫不上你什么忙。)

音頻
對于桌面用戶而言,Linux 2.6 中最為期望的新特性之一是以ALSA(Advanced Linux Sound Architecture)取代過時的聲音系統(tǒng)。舊式的聲音系統(tǒng)OSS(Open Sound System)很早的時候起便為Linux提供音頻支持,但是它有許多體系結(jié)構(gòu)上的缺陷。新系統(tǒng)首要的改進(jìn)在于它從設(shè)計之初開始便是完全線程安全的,且能很好的工作于 SMP 系統(tǒng)。這修正了過去的許多驅(qū)動程序在"桌面即意味著單CPU"這一教條的例外情況下不能正常工作的問題。更為重要的是,此驅(qū)動程序從一開始便采用模塊化設(shè)計(Linux舊版本的用戶應(yīng)該還記得,在Linux 2.2時代,模塊被解構(gòu)以適應(yīng)聲音系統(tǒng)),這使得系統(tǒng)能更好地支持多塊聲卡,包括不同類型的聲卡。無論系統(tǒng)內(nèi)部是多么完美,如果沒有一些令人驚訝的新特性,系統(tǒng)對于用戶來說仍沒有任何改進(jìn)。事實(shí)上,新的聲音系統(tǒng)有許多這樣的新特性。其中最為重要的是提供了對許多新硬件(包括USB音頻及MIDI設(shè)備)的支持,支持全杜比錄音及回放、無縫混音、支持聲音合成設(shè)備等等。無論你是一個音響發(fā)燒友或只是喜歡播放 MP3 的人,Linux提升的聲音支持都將是大受歡迎的一個進(jìn)步。

多媒體

現(xiàn)今單純的音頻支持似乎遠(yuǎn)遠(yuǎn)不夠,用戶想要的是對真正新奇的硬件的支持,比如網(wǎng)絡(luò)攝像機(jī),廣播及電視適配器,數(shù)字視頻錄制器等。Linux在2.6版本中對以上三者的支持都有所提升。
Linux對廣播卡的支持(通常是通過用戶空間實(shí)現(xiàn)歷經(jīng)了好幾個開發(fā)周期,而對電視調(diào)諧器和視頻攝像機(jī)的支持只是在最近的1、2個主要版本中才有。此系統(tǒng)通常稱為V4L(Vedio4Linux 譯者注: "4" for "for"),在新版本的內(nèi)核開發(fā)中得到了重大更新,包括API的清理工作以及對設(shè)備更多功能的支持。新的API與舊版本不兼容,支持它的應(yīng)用程序需要隨內(nèi)核的升級而升級。
作為一個全新的領(lǐng)域,Linux 2.6首次包含對DVB(Digital Video Broadcasting,數(shù)字視頻廣播)硬件的支持。這種硬件常見于機(jī)頂盒,它可以使得Linux服務(wù)器通過適當(dāng)?shù)能浖優(yōu)橐慌_tivo(類似機(jī)頂盒的設(shè)備)。
軟件方面的改進(jìn)
Linux的改進(jìn)并不只關(guān)注于硬件及其它基礎(chǔ)設(shè)施。沒有支撐軟件(如文件系統(tǒng)及網(wǎng)絡(luò)協(xié)議),硬件支持將毫無意義(just so much a dead wood)。

網(wǎng)絡(luò)
先進(jìn)的網(wǎng)絡(luò)支持一直是Linux的主要財富之一。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ò)硬件針對Linux2.6的改變是在幕后進(jìn)行的,顯得并不那么直接。這包括旨在利用Linux的設(shè)備模型底層的改進(jìn)和許多設(shè)備驅(qū)動程序的升級。例如,Linux 2.6提供一個獨(dú)立的MII(媒體獨(dú)立接口,或是IEEE 802.3u)子系統(tǒng),它被許多網(wǎng)絡(luò)設(shè)備驅(qū)動程序使用。新的子系統(tǒng)替換了原先系統(tǒng)中各自運(yùn)行的多個實(shí)例,消除了原先系統(tǒng)中多個驅(qū)動程序使用重復(fù)代碼、采用類似的方法處理設(shè)備的MII支持的情況。其他改變還包括對ISDN的改進(jìn)等。
在軟件方面,Linux的一個重要改進(jìn)是提供了對IPsec協(xié)議的支持。IPsec,或者稱之為安全I(xiàn)P,是在網(wǎng)絡(luò)協(xié)議層為IPv4和IPv6提供加密支持的一組協(xié)議。由于安全是在協(xié)議層提供的,對應(yīng)用層是透明的。它與SSL協(xié)議及其他tunneling/security協(xié)議很相似,但是位于一個低地多的層面。當(dāng)前內(nèi)核支持的加密算法包括SHA("安全散列算法")、DES("數(shù)據(jù)加密標(biāo)準(zhǔn)")等。
在協(xié)議方面,Linux還加強(qiáng)了對多播網(wǎng)絡(luò)的支持。網(wǎng)絡(luò)多播使得由一點(diǎn)發(fā)出的數(shù)據(jù)包可以被多臺計算機(jī)接收(傳統(tǒng)的點(diǎn)對點(diǎn)網(wǎng)絡(luò)每次只能有兩方通信)。這一功能主要被即時通訊系統(tǒng)(如Tibco)以及音頻/視頻會議軟件使用。Linux 2.6現(xiàn)在支持若干新的SSM協(xié)議(定源多播),包括MLDv2(multicast listner discovery 多播偵聽發(fā)現(xiàn))協(xié)議以及IGMPv3(Internet組管理協(xié)議)協(xié)議。這些都是標(biāo)準(zhǔn)協(xié)議,被多數(shù)高端網(wǎng)絡(luò)硬件提供商所支持,如思科。
Linux 2.6也提供了一個分離的LLC棧。LLC,即邏輯鏈路控制協(xié)議(IEEE 802.2),是一個底層協(xié)議,在若干個常用的高層網(wǎng)絡(luò)協(xié)議之下使用,如Microsoft的NetBeui,IPX,以及AppleTalk。作為修改的一部分,IPX,AppleTalk,以及令牌環(huán)驅(qū)動程序都已被重寫,以利用這個新的公用子系統(tǒng)。此外,一個外部源(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ò)展,從更好地處理需要多個連接的協(xié)議(H.323,PPTP等)。在Linux的路由器前端,對配置VLAN的支持也已經(jīng)成熟,不再是"試驗(yàn)性的"的了。

網(wǎng)絡(luò)文件系統(tǒng)

Linux對網(wǎng)絡(luò)文件系統(tǒng)的支持構(gòu)建在Linux健壯的網(wǎng)絡(luò)協(xié)議支持之上,它也同樣健壯。安裝或者輸出(export)一個網(wǎng)絡(luò)文件系統(tǒng),是需要內(nèi)核直接參與的為數(shù)不多的幾個上層網(wǎng)絡(luò)相關(guān)操作之一。(另外比較明顯的還有對于網(wǎng)絡(luò)塊設(shè)備的支持,在2.6中沒有特別大的改變,并且也只是在類似文件系統(tǒng)操作的特定應(yīng)用中使用。)所有其他的網(wǎng)絡(luò)相關(guān)操作都可以被放到用戶空間去,而不需要核心開發(fā)人員去考慮。
在Linux和類UNIX世界中,最普遍的網(wǎng)絡(luò)文件系統(tǒng)是一個名為Network File System的文件系統(tǒng),簡稱NFS。
NFS是一個復(fù)雜的文件共享協(xié)議,跟UNIX特別是Sun Solaris有相當(dāng)深厚的淵源??梢允褂肨CP或UDP作為NFS的主要傳輸協(xié)議,但也需要其他一些子協(xié)議,這些協(xié)議又各自運(yùn)行在RPC(遠(yuǎn)程過程調(diào)用)協(xié)議之上。這其中包括獨(dú)立的用于認(rèn)證的mount協(xié)議以及用于文件鎖的NLM(network lock manager)。(通常的實(shí)現(xiàn)版本同時也跟其他一些基于RPC的協(xié)議緊密地結(jié)合在一起,比如用于身份驗(yàn)證的NIS-網(wǎng)絡(luò)信息服務(wù)--用于認(rèn)證。NIS在Linux機(jī)器上沒有得到廣泛應(yīng)用,主要因?yàn)樗狈Π踩?。)可能正是因?yàn)镹FS協(xié)議如此的復(fù)雜性,才沒有被作為"Internet協(xié)議"廣泛接受。
Linux 2.6中,NFS文件系統(tǒng)得到了很大的更新和改進(jìn)。最大的改進(jìn)就是實(shí)驗(yàn)性地支持新的并且還沒有被廣泛接受的NFSv4協(xié)議(以前的linux版本支持NFS2和NFS3兩種協(xié)議)在客戶端和服務(wù)器端的實(shí)現(xiàn)。新的版本有更強(qiáng)、更安全的身份認(rèn)證(采用加密技術(shù)),支持更智能化的鎖管理,支持偽文件系統(tǒng)等。Linux還沒有實(shí)現(xiàn)所有NFS4的新特征,但是目前的版本已經(jīng)比較穩(wěn)定并且能夠支持一些產(chǎn)品級的應(yīng)用。并且,基于Linux的NFS服務(wù)端的實(shí)現(xiàn)已得到改進(jìn),從而具有了更好的擴(kuò)展性,更好的完整性(支持UDP還支持TCP),更健壯(文件系統(tǒng)在輸出文件的時候能夠進(jìn)行調(diào)整以維持它們自有的一些特征),更簡便的管理(通過新的nfsd文件系統(tǒng),而不再是系統(tǒng)調(diào)用)。還有其他方面的一些改進(jìn),比如分離lockd和nfsd,支持零拷貝傳輸?shù)?。NFS客戶端也因?yàn)榈讓覴PC協(xié)議在緩存機(jī)制、UDP連接控制以及其他在TCP協(xié)議上的改進(jìn)而受益。Linux支持NFS共享卷作為根文件系統(tǒng)的功能也因?yàn)楹诵膶CP協(xié)議上的NFS的改進(jìn)而改進(jìn)。
除了改進(jìn)對UNIX風(fēng)格的網(wǎng)絡(luò)文件系統(tǒng)的支持,Linux 2.6對于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é)議的客戶端對該協(xié)議的很多版本都已經(jīng)有了非常優(yōu)秀的支持。然而,Windows2000將SMB協(xié)議的一個超集的升級版標(biāo)準(zhǔn)化了,即熟知的CIFS("common internet filesystem")。CIFS修改的主要目的是簡化與精煉SMB協(xié)議中一些比較混亂的部分。(注:協(xié)議之前的定義很松散,甚至?xí)霈F(xiàn)Win95/98/ME版與WinNT/Win2k版不兼容的情況。)CIFS達(dá)到了修改的目的,并且增加了UNICODE支持,改善了文件鎖,支持硬鏈接,徹底消除了對NetBIOS的依賴,并給Windows用戶增加了一些新的特征。既然Linux用戶不打算始終呆在被遺忘的角落(譯者注:CIFS是Windows系統(tǒng)提出的標(biāo)準(zhǔn),之前僅在Windows系統(tǒng)之上有實(shí)現(xiàn)),Linux 2.6核心對本地安裝CIFS文件系統(tǒng)的部分徹底進(jìn)行了重寫。Linux 2.6現(xiàn)在也支持SMB和CIFS的擴(kuò)展--SMB-UNIX,該擴(kuò)展使得Linux可以訪問SMB服務(wù)器(比如Samba)上的可能存在的非Windows的文件類型(比如設(shè)備節(jié)點(diǎn)和符號鏈接)。
盡管現(xiàn)在已經(jīng)不常見到,但是Linux還是沒有完全忘記Novell NetWare用戶。Linux 2.6最多允許256個Linux客戶端安裝同一個使用NCP(NetWare Core Protocol)文件系統(tǒng)驅(qū)動的NetWare卷。
Linux 2.6也加入了相對新的一些分布式網(wǎng)絡(luò)文件系統(tǒng)(即在一個邏輯卷上的文件可以分布在多個節(jié)點(diǎn)中)的支持。除了Linux 2.4中引入的CODA文件系統(tǒng),Linux現(xiàn)在也包含對另兩個分布式文件系統(tǒng):AFS和InterMezzo的支持。AFS,即the Andrew filesystem(如此命名是因?yàn)樗畛跏荂MU開發(fā)的),特性非常有限,目前只支持讀操作。另一個新支持的文件系統(tǒng)InterMezzo(也是CMU開發(fā)的)也在Linux2.6中得到支持;它具有一些更為先進(jìn)的特性,如:無連接操作(工作在客戶端的緩存中),適合要求高可用性的應(yīng)用,在那些應(yīng)用環(huán)境中,需要保證存儲區(qū)永遠(yuǎn)可用。同時它也支持保持?jǐn)?shù)據(jù)在多個計算機(jī)之間(比如筆記本電腦、PDA和桌面電腦)同步的應(yīng)用。很多對這些新的文件系統(tǒng)提供支持的項(xiàng)目都是在Linux平臺上實(shí)現(xiàn)的,這也使得Linux能夠走在對這些新特性支持的最前面。
其他特性


安全性

Linux2.6的另一個沒有引起足夠注意的大的變化是跟安全相關(guān)的變化。甚至本質(zhì)上,整個基于核心的安全體系(在類UNIX操作系統(tǒng)中的超級用戶權(quán)限)已經(jīng)被劃分成一些可以被替換的安全模塊。(不過目前提供的安全模式只有缺省的一個,權(quán)當(dāng)一個向我們展示如何自定義安全模塊的例子。)作為這個變化的一部分,核心所有的部分都被更新以具有更細(xì)粒度的用戶訪問控制,而不是象以前的"超級用戶"系統(tǒng)。雖然幾乎所有的Linux系統(tǒng)中將仍然存在一個具有完全訪問權(quán)限的root用戶,但上述的改變使得類Linux系統(tǒng)可以不再必須如此。另一個安全相關(guān)的變化是一些二進(jìn)制模塊(比如硬件廠商提供的驅(qū)動程序)不能再重載系統(tǒng)調(diào)用,也不能看到以及修改系統(tǒng)調(diào)用表。這極大地限制了非開放源碼的模塊在核心中的訪問,同時也修補(bǔ)了GPL版權(quán)協(xié)議在這方面的一些可能存在的漏洞。最后一個跟安全相關(guān)的變化就是新的核心能夠使用硬件隨機(jī)數(shù)生成器(一些新的處理器中提供),而不是依靠隨機(jī)的硬件熵值變化。

虛擬Linux

Linux 2.6一個很有趣的特點(diǎn)是自包含了一個"用戶態(tài)(user-mode)"的體系結(jié)構(gòu)。它本質(zhì)上是一種移植--將Linux移植到它自身(正如移植到不同的硬件體系那樣),從而允許一個完全虛擬的Linux-on-Linux運(yùn)行環(huán)境。新的Linux實(shí)例像普通應(yīng)用程序一樣運(yùn)行。在這個新的Linux內(nèi)部,你可以配置偽網(wǎng)絡(luò)、文件系統(tǒng)或者其他一些設(shè)備,整個過程通過專用的驅(qū)動程序與宿主Linux進(jìn)行安全交互。這被證明不僅是在開發(fā)方面(進(jìn)行分析、統(tǒng)計等),而且在安全分析和密罐(honeypots)技術(shù)中都是非常有用的。當(dāng)然大多數(shù)用戶還不需要這樣的支持,它只是被當(dāng)作了一個可以運(yùn)行在你的機(jī)器上的很酷的特性而已。(給你的朋友留下深刻的印象?。?

筆記本電腦

除了上面提到的一些通用的支持(比如APM和ACPI的改進(jìn),以及對無線支持的改進(jìn)等),Linux還有兩個很難分類的與筆記本電腦用戶相關(guān)的特征。第一個是新核心支持的軟停機(jī)磁盤存儲(sofware-suspend-to-disk 譯者注:保存內(nèi)存鏡像到磁盤,之后停機(jī)--類似halt,再次開機(jī)時內(nèi)核從磁盤獲取保存的內(nèi)存鏡像并恢復(fù)運(yùn)行;軟停機(jī)功能不需要APM、ACPI等硬件支持)。
另一個是對現(xiàn)代移動處理器的可根據(jù)用戶是否在使用機(jī)器從而作出cpu運(yùn)行速度(以及相應(yīng)的電源需求)自動調(diào)節(jié)的支持。
向后兼容
盡管Linux 2.6是大的內(nèi)核升級,但是對用戶層應(yīng)用的影響幾乎是不存在的。主要的例外是線程,一些能夠在2.4或2.2上運(yùn)行的多線程程序?qū)⒉荒茉?.6上運(yùn)行。
當(dāng)然,一些底層的應(yīng)用如模塊工具將肯定不能工作。另外,/proc目錄和/dev目錄下的一些文件和格式也發(fā)生了變化,如果上層應(yīng)用對此有依賴,也可能不能繼續(xù)工作。(當(dāng)更多的內(nèi)容被移動到/sys虛擬文件系統(tǒng)中的時候,情況尤其如此。在/dev目錄中,向后兼容的設(shè)備名很容易就能推出來。)
除了提到的這些明顯的變化,還有很多小的變化可能會對一些應(yīng)用環(huán)境產(chǎn)生影響。首先,非常陳舊的(linux 2.0或更早)交換分區(qū)需要重新格式化才能在2.6中使用。(由于交換分區(qū)并不包含永久數(shù)據(jù),這對用戶來說不會是問題。)由于多數(shù)抑制Apache,Zeus等http服務(wù)器接近內(nèi)核速度的的性能瓶頸已經(jīng)被解決,之前的允許核心直接提供網(wǎng)頁服務(wù)的kHTTPd守護(hù)進(jìn)程也被去除。
對諸如陳舊硬盤的OnTrack和EzDriveDOS磁盤管理器以及相應(yīng)的DOS兼容性的支持也被去除。從軟盤上含有核心的啟動扇區(qū)進(jìn)行啟動的支持也被去除,取而代之的是SysLinux。最后,soundmodem功能也被去除了,但是用戶空間的版本維護(hù)地更好,并且更加實(shí)用。

寫在最后

這篇文檔主要出自BitKeeper changelogs的長時間的閱讀,對源代碼的"賞玩"(looking at and playing with),對郵件列表的閱讀,以及很多很多為完成本文所進(jìn)行的Google和Lycos或這或那的搜索。盡管如此,文中可能有遺漏或者理解有誤的地方。我也盡量地小心地不過分使用那些被合并入內(nèi)核的項(xiàng)目網(wǎng)頁,因?yàn)樗鼈兿鄬俜降膬?nèi)核版本支持要"大大超前"。如果您發(fā)現(xiàn)這篇文檔中的任何錯誤,或者希望email給我詢問我的情況,您可以email給jpranevich@kniggit.net。
具有更多技術(shù)背景的人可能只需要一個公告列表,Dave Jones編寫了另一份出色的2.6開發(fā)進(jìn)展的總括:http:/www.codemonkey.org.uk/post-halloween-2.5.txt。他的工作與本文的任何相似之處純屬巧合,因?yàn)槲覀兌际加谠创a,并且都側(cè)重于x86體系。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

pid控制相關(guān)文章:pid控制原理


linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉