新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux2.4內(nèi)核為我們帶來(lái)了什么?

Linux2.4內(nèi)核為我們帶來(lái)了什么?

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


關(guān)鍵詞: MMX MMX2 SCSI IDE

評(píng)論


相關(guān)推薦

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

關(guān)閉