周 巖 李欣穎 曹曉燕
摘要:隨著數(shù)字信息技術(shù)和網(wǎng)絡(luò)技術(shù)的高速發(fā)展,嵌入式產(chǎn)業(yè)迅速崛起,嵌入式系統(tǒng)蘊含著巨大的市場商機。本文對當(dāng)前嵌入式uClinux操作系統(tǒng)的內(nèi)存管理進行了分析和研究,為以后改進uClinux的內(nèi)核做了鋪墊,使其能夠在實時領(lǐng)域有較好的應(yīng)用。
關(guān)鍵詞:Clinux;嵌入式實時操作系統(tǒng):內(nèi)存管理
1嵌入式操作系統(tǒng)概述
隨著基于 Intel微處理器芯片的兼容PC機性價比的不斷提高,在實時應(yīng)用領(lǐng)域,實時系統(tǒng)的應(yīng)用需求發(fā)生了很大
的變化,現(xiàn)代的實時應(yīng)用往往要求大容量的數(shù)據(jù)處理能力、復(fù)雜的圖形用戶接口、網(wǎng)絡(luò)支持等。這就對實時操作系統(tǒng)提出了更高的要求。
Linux操作系統(tǒng)是基于PC機的免費的類UNIX開放式操作系統(tǒng),并采用了源代碼開放的發(fā)布策略。由于全世界各地的Linux用戶和開發(fā)者的不斷努力,Linux已成長為高穩(wěn)定性的、性能優(yōu)異的操作系統(tǒng),基于Linux開發(fā)一個開放的、標(biāo)準(zhǔn)的、高效廉價的實時操作系統(tǒng)是完全可行的。
2 uClinux嵌入式實時操作系統(tǒng)概述
Linux是一種很受歡迎的操作系統(tǒng),它與UNIX系統(tǒng)兼容,開放源代碼。它原本被設(shè)計為桌面系統(tǒng),現(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正逐漸的應(yīng)用于嵌入式設(shè)備。uClinux正是在這種氛圍下產(chǎn)生的。在uClinux這個英文單詞中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是“針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng)”。
嵌入式操作系統(tǒng)是嵌入式系統(tǒng)的靈魂,而且在同一個硬件平臺上可以嵌入不同的嵌入式操作系統(tǒng),嵌入式uClinux操作系統(tǒng)主要由三個基本部分組成:引導(dǎo)程序、uClinux內(nèi)核(由內(nèi)存管理、進程管理和中斷處理等構(gòu)成)和文件系統(tǒng)。uClinux可以通過定制使內(nèi)核小型化,還可以加上GUI(圖形用戶界面)和定制應(yīng)用程序,并將其放在ROM、 RAM、 FLASH或Disk On Chip中啟動。由于嵌入式uClinux操作系統(tǒng)的內(nèi)核定制高度靈活性,開發(fā)者可以按需進行配置,來滿足實際應(yīng)用要求,又由于uClinux是源代碼公開,因此開發(fā)人員完全可以了解內(nèi)核原理,并自己開發(fā)部分應(yīng)用軟件。只有很好地掌握uClinux的原理,才能更好地、更合理地完成移植工作。
uClinux是專為沒有MMU的微處理器設(shè)計的嵌入式Linux操作系統(tǒng),它的內(nèi)核功能結(jié)構(gòu)與Linux基本相同,不同的主要是對內(nèi)存管理和進程管理進行了改寫,以滿足無MMU處理器的要求。另外,由于大多數(shù)內(nèi)核源代碼都被重寫,uClinux的內(nèi)核要比原Linux 2.0內(nèi)核小的多,但保留了Linux操作系統(tǒng)的主要優(yōu)點:穩(wěn)定性、優(yōu)異的網(wǎng)絡(luò)能力以及優(yōu)秀的文件系統(tǒng)支持。
3 uClinux內(nèi)存管理所采用的技術(shù)
對于uClinux來說,其設(shè)計針對沒有MMU的處理器,即uClinux不能使用處理器的虛擬內(nèi)存管理技術(shù)。但是為了便于管理,uClinux仍然采用存儲器的分頁管理,系統(tǒng)在啟動時對實際存儲器進行分頁,在加載應(yīng)用程序時分頁加載。但是由于沒有MMU管理,所以實際上uClinux采用實存儲器管理策略。
uClinux將整個物理內(nèi)存劃分成大小4KB的頁面,由數(shù)據(jù)結(jié)構(gòu)page管理,每個頁面有一個page結(jié)構(gòu),所有page結(jié)構(gòu)組成一個數(shù)組mem_map[]。這些物理頁面可以為代碼、數(shù)據(jù)、堆棧、文件等提供空間,也可以當(dāng)作緩沖區(qū)。
uClinux仍然使用標(biāo)準(zhǔn)Linux內(nèi)核中的變形Buddy機制來管理空閑的物理頁面,bitmap表、free_area數(shù)組及其相關(guān)的函數(shù)或宏_get free_pages(),free_pages()也還在被使用。但由于沒有虛擬內(nèi)存管理,虛擬內(nèi)存段結(jié)構(gòu)vm_area_struct以及由它構(gòu)成的鏈表和AVL樹都不再使用,將頁面換出到外存中的機制因而也不能使用,所以標(biāo)準(zhǔn)Linux中的kswapd頁面換出守護進程和交換空間的頁面管理數(shù)據(jù)結(jié)構(gòu)在uClinux中都被刪除。
uClinux中的內(nèi)存分配,還是通過傳統(tǒng)的函數(shù)kmallocQ和kfreeQ實現(xiàn)的。這些內(nèi)存塊來自于free_ area數(shù)組,由blocksize表、size表、pagewe descriptor結(jié)構(gòu)和block header結(jié)構(gòu)共同管理。而標(biāo)準(zhǔn)Linux中的vmalloc( )和vfree( ),由于是從虛擬空間3GB以上的虛擬空間分配內(nèi)存,所以在uClinux下對它們的實現(xiàn)只是簡單地調(diào)用kmalloc()和kfree(),實際上分配的也是從空閑物理頁面鏈表中獲得的頁面。
4 uClinux內(nèi)存管理的局限性
由于缺少了MMU的硬件支持,uClinux運行真正的多任務(wù)系統(tǒng)時,任務(wù)之間沒有內(nèi)存保護機制,一些有關(guān)進程派生的系統(tǒng)調(diào)用就無法實現(xiàn)。正是因為沒有內(nèi)存保護機制(或者說,沒有任何安全性可言),它們不適用于多用戶系統(tǒng),uClinux的多任務(wù)管理功能受到一定限制:
uClinux中無法實現(xiàn)fork(),而只能使用vfork()。但這并不意味著uClinux不具有多任務(wù)功能,只是父進程在調(diào)用vfork()之后必須在子進程調(diào)用exec()或者exit()之前阻塞。
標(biāo)準(zhǔn)Linux中內(nèi)存分段為應(yīng)用程序提供了接近無限的堆空間和棧空間,而uClinux為可執(zhí)行程序在緊隨它的數(shù)據(jù)段結(jié)束處分配堆??臻g,這樣如果堆棧增長太大,它將可能覆蓋其它的程序或數(shù)據(jù)。
uClinux中沒有自動擴展的棧,也沒有brk()調(diào)用,用戶必須通過使用mmap()來分配內(nèi)存空間,可以在程序的編譯過程中指定它所使用的棧的大小。不具有內(nèi)存保護,任何程序都有可能導(dǎo)致內(nèi)核崩潰。
參考文獻
[1] Free Software Foundation,Inc.1999. GM! Lesser General Public License.http://www. gnu. org/copyleft/lesser. html.2002. 9.
[2] Gcc-2. 95. 3 arm-elf for uClinux.gcc-2. 95. 3. pdf. 2002. 11.
[3] 李善平,劉文峰,李程遠(yuǎn),等.Linux 內(nèi)核2. 4 版源代碼分析大全[M].北京:機械工業(yè)出版社,2002.
[4] 趙炯.Linux內(nèi)核完全注釋.機械工業(yè)出版社,2005.
[5] 吳一民.RT-Linux的實時機制分析.計算機應(yīng)用,2002, 22 (12):110-112.
[6] 魏忠,蔡勇.嵌入式開發(fā)詳解.北京:電子工業(yè)出版社,2003.
作者簡介:周巖(1982-),碩士研究生,助教,工作單位:長春工業(yè)大學(xué)軟件職業(yè)技術(shù)學(xué)院,主要研究方向:軟件工程、嵌入式系統(tǒng)開發(fā)。
李欣穎(1981-),碩士研究生,助教,工作單位:長春工業(yè)大學(xué)軟件職業(yè)技術(shù)學(xué)院,主要研究方向:軟件工程、網(wǎng)絡(luò)編程.
曹曉燕(1977-),碩士研究生,助教,工作單位:長春工業(yè)大學(xué)軟件職業(yè)技術(shù)學(xué)院,主要研究方向:數(shù)據(jù)庫.