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