[情報] Linux 2.6內核的精彩世界

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