Linux2.4內(nèi)核為我們帶來了什么?
支持更多的體系結(jié)構(gòu)
以純代碼行的觀點來看,Linux內(nèi)核主要是一些驅(qū)動程序。事實上,對于最近發(fā)行的幾個版本來說,Linux核心的容量增加得并不太多。有些驅(qū)動程序具有獨立的結(jié)構(gòu),例如IDE驅(qū)動程序。也就是說,這些程序可以在多個平臺上運行。其他的驅(qū)動程序則依賴于一個特定的結(jié)構(gòu)。例如,ADB(蘋果桌面總線)鼠標(biāo)驅(qū)動程序就不適用于也不支持i386端口。Linux內(nèi)核開發(fā)者努力使驅(qū)動程序盡可能通用化,以便獲得一個設(shè)備時,很容易就能使驅(qū)動程序在不同的平臺上重復(fù)利用。將Linux內(nèi)核視為一個整體是最方便的,不過有些功能會根據(jù)平臺的不同而不同。
Linux2.4增加了對三個新架構(gòu)的支持:IA64(Itanium)、S/390和SuperH(WindowsCE硬件)。Linux2.4也包含了對更新的64位MIPS處理器的支持。
Linux2.4能支持最新的PentiumIV處理器,也支持MMX和MMX2。并且還增加了對所有處理器的最優(yōu)化指令來加速Linux,尤其對較新的處理器,如PentiumIII處理器的優(yōu)化。它還支持與Intel兼容的芯片,例如那些由AMD和Cyrix生產(chǎn)的CPU。另外,Linux2.4將包含對其他硬件的支持,這些硬件經(jīng)常出現(xiàn)在更新的芯片上,包括非Intel的各種各樣的MTRR(Memory Type Range Registers),這些MTRR將在一些高帶寬的設(shè)備上改進性能。Linux2.2包含了在多處理器系統(tǒng)上對于IO-APIC(高級可編程的中斷控制器)的支持,Linux2.4也將支持這些在多功能處理器系統(tǒng)上的新技術(shù),并且也支持帶有多IO-APIC的機器。對于多IO-APIC系統(tǒng)的支持將允許Linux2.4具有比先前的基于高端硬件的Linux版本更好的量身定制的功能。
隨著處理器的不斷升級,Linux內(nèi)核也需要隨之發(fā)展。2.4內(nèi)核中新添加的功能是對2G以上處理器的支持。
在產(chǎn)品發(fā)布給期待已久的用戶之前,Intel的64位處理器芯片就已經(jīng)開始取代X86生產(chǎn)線了。在沒有得到芯片以前,支持這些芯片以及它們后續(xù)芯片的補丁已經(jīng)被包含在Linux的主流內(nèi)核版本中了,同時Linux也移植了一些對64位芯片(如康柏的Alpha和SPARC64)的支持。
內(nèi)部功能的擴充與優(yōu)化
Linux 2.2是在Linux 2.0和Linux1.x基礎(chǔ)上的重大突破。它支持許多新的文件系統(tǒng),一個新的文件緩沖系統(tǒng),并且容易升級。Linux 2.4就是在這樣的基礎(chǔ)上建立起來的,幾乎是可以運行在各種環(huán)境中的內(nèi)核。
Linux的內(nèi)核可以看作是各種模塊和子系統(tǒng)的集合,這些模塊和子系統(tǒng)包括驅(qū)動程序、協(xié)議以及其他部件。它們通過API和編程接口,粘合在內(nèi)核周圍,然后由API和編程接口提供調(diào)用內(nèi)核的標(biāo)準(zhǔn)方法。本文的大部分篇幅將集中在Linux的這些部件上,因為大部分任務(wù)都是由這些部件完成的:驅(qū)動磁盤、讀取文件和其他顯然是物理性的工作。Linux2.4還遠不止這些,這些模塊圍繞在Linux內(nèi)核的中心周圍。這個中心結(jié)構(gòu)的基本特征就是調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)和資源分配。
Linux2.4是第一個具有全功能的資源管理子系統(tǒng)的Linux版本。我們現(xiàn)在熟悉的“即插即用”的功能在以前的Linux版本中被認為是很不支持或者僅僅有一點支持的痕跡。跟其他的內(nèi)部變化不同,很多用戶可以直接感受到這種變化使內(nèi)核分配資源并報告的過程變得簡單了。由于這個變化的緣故,在Linux2.2里不能識別的PCI卡數(shù)據(jù)庫又被重新啟用,因此所有的資源可以有一個與之相關(guān)聯(lián)的設(shè)備名,而勝于只是一個關(guān)聯(lián)的驅(qū)動程序。
Linux2.4修正了一些VFS層(虛擬文件系統(tǒng))的問題并對文件緩沖區(qū)做了修改。在舊版本的Linux中,文件緩沖獨立于一個雙緩沖區(qū)系統(tǒng)之上,這個系統(tǒng)簡化了很多問題,但是卻使那些不得不保證緩沖區(qū)同步的程序員感到頭痛。另外,冗余緩沖的使用加大了內(nèi)存的開銷,并且使系統(tǒng)不得不做額外的工作來保證這些緩沖的同步,降低了性能。Linux2.4用一個簡單的單緩沖系統(tǒng)解決了這個問題。
很多Linux2.4的變化被稱為是“企業(yè)級”的。這意味著這些加強系統(tǒng)整體的變化對于桌面系統(tǒng)的用戶來說,不會立即體現(xiàn)出它們的效用。在大多數(shù)情況下,這些附加的性能不會明顯降低Linux在普通環(huán)境下的性能。首先,Linux2.4可以通過升級到多處理器系統(tǒng)或者提供一個可配置的線程限制,處理更多的并發(fā)線程。其次,一個更新的更高效率的調(diào)度器能處理更多的并發(fā)線程。第三,更新的Linux內(nèi)核可以處理驚人數(shù)量的用戶和組――大約42億。另外,新的內(nèi)核支持更多強大的硬件。2G的文件大小的限制也被突破了。這一切變化都表明,Linux可以勝任更多的環(huán)境。
Linux2.4使改進后的共享內(nèi)存的處理更加符合標(biāo)準(zhǔn)。改動后的副作用是,Linux2.4必須加載一個特殊的“共享內(nèi)存”文件系統(tǒng)才能使POSIX類型的共享內(nèi)存片斷正常工作。而SysV型共享內(nèi)存則不需要另外的文件系統(tǒng)。該文件系統(tǒng)的加載需要Linux2.4發(fā)行時提供。
Linux內(nèi)核的這個新版本中的另一個“老”變動是對VFS層的改進。以前的版本甚至是Unix的每個版本,每次都只能加載一個文件系統(tǒng),但Linux2.4現(xiàn)在則允許任何文件系統(tǒng)加載多次,并使所有改動立即顯示在其他加載點上。這對像/proc這樣需要在initrd中加載多次的文件系統(tǒng)是非常適用的。此外,它還允許統(tǒng)一加載,即同時加載包含多個文件系統(tǒng)的文件。
一個經(jīng)常被提到的問題是Linux 2.4需要多少內(nèi)存。很多操作系統(tǒng)似乎隨著他們的成熟而需要越來越多的內(nèi)存和資源。但是,Linux2.4有力地遏制了這種趨勢。在特定的環(huán)境下,Linux2.4需要更少的內(nèi)存。當(dāng)然,Linux2.4包含了比Linux2.2更多的功能,而很多的新特性都需要資源。
支持更多的系統(tǒng)總線
Linux2.2支持Intel硬件內(nèi)部的所有主要總線,包括(E)ISA、VLB、PCI以及MCA。Linux2.4除此以外還包括對ISA即插即用設(shè)備(這種方案使ISA設(shè)備幾乎與PCI一樣智能)和智能輸入/輸出(I2O)設(shè)備的支持。最重要的是,Linux2.4是首個提供資源管理的強大系統(tǒng)的Linux內(nèi)核版本。在開發(fā)Linux2.4的過程中發(fā)現(xiàn),要使Linux完全支持USB、PC卡或其他先進的硬件,這是Linux作為一個“現(xiàn)代的”操作系統(tǒng)所必需的。
ISA PnP一直是Linux用戶的主要問題。雖然由于更強大的PCI硬件的出現(xiàn),對ISA硬件的支持已經(jīng)縮小,但使用ISA PnP的設(shè)備仍在銷售。以前,Linux用戶使用ISA PnP硬件都是用pnp實用程序,它通常需要幾個小時才能完成。有些版本試圖自動完成這個過程,但都沒有成功。而Linux2.4將ISA PnP支持同資源管理器結(jié)合在一起,從而解決了這一問題。不過對不太普遍的PnP硬件來說,Linux 2.4對ISA PnP的內(nèi)核級支持還沒有實現(xiàn)。
Linux 2.4也包括對I2O的支持,I2O是PIC的超集,PIC提供對內(nèi)存、寄存器的集中管理。而I2O設(shè)備更深一層,可以在設(shè)備級上提供API,從而為設(shè)備提供操作系統(tǒng)的獨立驅(qū)動程序。底層的操作系統(tǒng)需要識別“通配”的I2O API,而不是指定的硬件。由于這項技術(shù)還比較新,沒有多少設(shè)備使用了該項技術(shù),但這種產(chǎn)品一旦投放市場,Linux能馬上做好準(zhǔn)備。
目前對設(shè)備進行的主要工作并不是內(nèi)部總線,而是外部總線,如PC卡總線和各種串行總線。Linux2.4也增強了對外部設(shè)備的PC卡支持。很多發(fā)行版本已經(jīng)包含它了。不過為了更好地使用這些設(shè)備,Linux 2.4仍然需要一個外部的daemon(進程)和其他一些部件。
USB是許多新設(shè)備很歡迎的選件,包括非Intel的硬件。雖然,Linux對這些設(shè)備的支持還處于初期階段,但是Linux內(nèi)核已經(jīng)支持大部分的通用USB硬件(包括鍵盤、鼠標(biāo)、話筒等)。
Linux 2.4還增加了對Firewire(IEEE1394)的支持,F(xiàn)irewire一直以來受到很多高帶寬設(shè)備的青睞。然而,至今很多現(xiàn)有的驅(qū)動程序或者設(shè)備不支持這些硬件體系結(jié)構(gòu),但是隨著時間的推移,當(dāng)該體系結(jié)構(gòu)成熟的時候,這些支持將很可能得到改善。
改進的塊設(shè)備支持
在簡單的列表中,塊設(shè)備被描述為一個可以不連續(xù)訪問的字節(jié)數(shù)組。這將包括磁盤(你可以讀你想要的任何扇區(qū)),但不是串口(因為你只能在線的末端讀?。?。延伸這個概念(例如彈出磁盤等)在Linux中通過ioctls(I/O控制)變得很容易。但是塊設(shè)備的概念很長時間沒有改變,第一個Linux內(nèi)核修訂本就支持已存在的IDE和SCSI磁盤驅(qū)動器。
在Linux2.4中,所有塊設(shè)備的驅(qū)動程序都重寫了一些,塊設(shè)備API從接口中去掉了一些遺留的垃圾,并在內(nèi)核級將模塊API完全同文件API分開。但是如果模塊維護人員運用了主子目錄之外的模塊,則需要對源碼進行更新(沒有人假定API與主要修訂版內(nèi)核完全兼容)。
在臺式機中,普遍使用的是IDE總線磁盤驅(qū)動器。Linux從早期內(nèi)核就開始支持IDE,Linux2.4在許多方法上增強了對這些設(shè)備的支持。首先,擁有多個IDE控制器的高端系統(tǒng),如果將IDE控制器數(shù)從4增加到10個,則效果會更好。大多數(shù)的主板最多只有2個IDE控制器,這并不會對臺式機的使用者產(chǎn)生多大的影響。其次,這些IDE驅(qū)動程序的改動提高Linux2.4對PCI和即插即用IDE控制器的支持,包括IDE軟盤和磁帶機、DVD和CD-ROM;最后,Linux 2.4包括了可以逐步解決一些IDE芯片驅(qū)動程序更新的問題,并且更好地支持其他先進的特性,例如ATA66。
看起來似乎SCSI子系統(tǒng)沒有IDE子系統(tǒng)改動的多,SCSI子系統(tǒng)在外殼中進行了大量的重寫,另外,這個版本中支持了許多新的SCSI控制器。
Linux2.4內(nèi)核中一個全新的特性是實現(xiàn)了raw I/O設(shè)備,raw設(shè)備不通過高速緩存層處理,自動尋找到低級設(shè)備。萬一一個復(fù)雜的程序要求完全的控制,用緩存方式無法滿足,這時可以使用raw設(shè)備。raw設(shè)備能夠用于數(shù)據(jù)要求嚴格的情況下,例如:我們確保數(shù)據(jù)立即寫入磁盤,系統(tǒng)失敗時不會遺失數(shù)據(jù)。以前的版本沒有合適的方法,包括它們字面上需要加倍設(shè)備節(jié)點數(shù)以使每個塊設(shè)備都有一個raw設(shè)備節(jié)點(這是一些商業(yè)Unix使用的方法),本版本使用一組設(shè)備節(jié)點來實現(xiàn),它可以連接任意的塊設(shè)備。
Linux 2.4一個主要改進是在主流內(nèi)核中加入了LVM(邏輯卷管理)子系統(tǒng)。這在一些企業(yè)級的Unix,如HP-UX和Tru64 Unix中是一個系統(tǒng)和標(biāo)準(zhǔn),它完全重新考慮管理文件系統(tǒng)和卷的方法。
評論