摘要:本文對Linux裁剪進行了基本的闡述和說明,對文件系統的裁剪提出了具體的思路,取消預先分配策略和使用B+樹的查找算法來提高文件系統的性能。
關鍵詞:VFS;Ext2;B+樹
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)31-1000-01
A Research on the optimization of Linux File System's Cutting
JIANG Chun-mao, GAO Yuan, ZHANG Li-jun
(Department of Computer Science and Information Engieer, HarbinNormal University, Harbin 150050, China)
Abstract: This paper expatiate embed-Linux on a basic and the file system's cutting express the concrete ideas, abolition of pre-allocation strategy and the use of B+tree to find algorithms to improve file system performance.
Key words: VFS; Ext2; B+tree
1 引言
隨著嵌入式技術的日益發展,Linux作為嵌入式操作系統越來越廣泛的使用著,由于Linux是開發源代碼,內核功能強大,穩定,支持多任務等與生俱來的特點,使用Linux作為嵌入式OS的PDA,手機等設備越來越多了,針對特定的硬件設備,我們要將Linux進行裁剪,移植,Linux自身具備一整套工具鏈,容易建立交叉開發環境和運行環境,在目前常用的嵌入式開發技術中,基于Linux的移植技術已經得到了長足的進展。
Linux的文件系統廣泛使用Ext2,Ext3等文件格式,在使用的過程中由于限于硬件環境,或多或少的不相適應,因此出現了很多嵌入式的文件系統,但是,Linux通用的文件系統還是具有通用性,精巧性等特點,因此對于它們的優化也是很重要的問題。
2 Linux裁剪的基本思路
Linux的裁剪目前主要手段集中在基于源代碼分析上,有采用圖調用的方式來輔助進行,但是從根本上來講還是要從代碼本身下手,通過內核配置工具生成描述內核功能選項的配置文件,然后再根據該配置文件編譯生成定制的內核目標文件,即通過內核代碼中的條件編譯,裁剪掉內核中不必要的功能部分從而獲得面向特定應用需求、體積較小的嵌入式Linux內核。
目前的裁剪主要在內核裁剪,函數庫裁剪,文件系統裁剪幾個方面進行,下面做簡要的闡述:
1)內核的裁剪
對內核的裁剪主要集中在利用Linux本身的配置工具,使用make xconfig或者make menuconfig來進行選擇,選擇以后進行編譯,編譯內核需要3個步驟,分別是創建內核依賴關系,創建內核映像文件和創建內核模塊。用以下幾條命令對內核進行編譯,之后生成我們所需要的映像文件。
make dep
make bzImage
make modules
make modules_install
通過這種方式,可以對于特定硬件不需要的功能進行刪除,達到體積較小,操作比較簡單,但是缺點也很明顯,粒度過大,精度較小。況且未必所有的硬件都支持,在這種情況下,就需要對Linux的底層進行分析和裁剪,這些工作都需要對Linux系統的功能模塊和底層硬件比較熟悉。
2)函數庫的裁剪
由于Linux是由C的大量函數庫組成,存在一些共享庫可能根本就沒有被調用,也存在一些庫中的函數從未被使用過,然后對此進行處理是一件非常煩瑣的事情,一般可以采用源代碼分析,確定函數間的調用關系,確定程序和函數之間的關系,對于那些從未使用過的進行剪掉。我們也可以在編譯目標應用程序的時候,使用靜態連接的方法,這樣效果較好,但是隨之帶來的是重復的連接占據內存空間太大。另外,在編寫應用程序時可以調用任意需要的庫函數,應用程序編寫好后,根據應用程序的需求,分析庫中應該提供的函數,然后形成新的鏈接腳本,最終重新編譯鏈接庫文件源代碼,將所有沒有調用到的庫函數從庫中刪除。當然目前有很多成品的替代庫,如uclbic等可以直接為我們使用。
3)文件系統的裁剪
目前Linux在嵌入式設備上有很多成型的文件系統,比如JFFS2,tmpfs等,對于通用Linux的Ext2,Ext3等文件系統一般也可以使用在嵌入式設備上。JFFS2系統在文件系統接近滿的時候速度變慢。Linux采用VFS(虛擬文件系統),這樣可以支持多個不同的文件系統,VFS是一組標準抽象的文件操作構成,可以使用系統調用的形式加載。因此,可以對VFS的數據結構和系統調用兩個方面進行簡化,比如可以對struct super_lock ,inode進行簡化,使得VFS更加簡單。當然,busybox提供了一個很好的工具集,為文件系統的裁剪提供了簡單的方式。
3 Linux文件系統裁剪的優化
在文件系統的格式的各個要素中,主要關心的參數是:磁盤塊的大小,塊的分片,索引節點的個數和保留空間大小。磁盤塊無論過大或者過小都不好,過小,一個文件將占用過多塊,讀取時間變長,過大,空間利用率降低。具體的應用不同,磁盤塊的大小選擇不同,有時候1k的大小其值恰好,有時,4k的大小利用率更高。而索引節點的個數和磁盤塊的大小又密切相關的,磁盤塊過多,將導致索引項目占空間增加。
另外,也可以對文件系統進行不完全解壓來實現系統性能的折中。
Linux廣泛采用Ext2作為它的文件系統,但是針對嵌入式的設備需要進行一些改造,數據塊的預分配機制能有效的減少文件擴展所造成的文件系統碎片,并且提高分配效率。在存儲資源足夠的情況下,可以采用預先分配的機制。對于PDA這類設備,取消預分配的機制可能會提高系統性能,降低文件操作時間。
■
由此圖可以看出,有預先分配和取消預先分配時間上差別不大,但是從空間角度來看,取消預先分配卻節省了很多的空間。
B+樹是一種平衡多路查找樹,能夠很好的應用到文件系統中,在B+樹中,每一個非終端結點的結構中I節點號,即關鍵字用來進行查詢。首先從根節點出發,根據根節點指針找到其所指的節點,然后根據此節點的關鍵字判斷是否與指定值相等,依次遞推。利用B+樹改造文件系統的索引方法,根據B+樹的特點,可以從最小關鍵字順序查找,也可以從根節點隨機查找。
4 總結
Linux的裁剪是一個理論和實踐并重的課題,在理論上,建立一個通用的裁剪模型,多目標的裁剪研究。在實踐上,Linux在嵌入式設備上的開發和應用前景廣闊。本文給出了Linux裁剪的一般方法和文件系統裁剪的研究,今后還要對Linux嵌入式緩沖機制等進行深入的研究。
參考文獻:
[1] RussellKing.KernelMemoryLayoutonAMRLinux[EB/OL].[2003-05-29].http://www.arm.linux.org.uk/develPer.
[2] 彭小明,王強.Linux核心源代碼分析[M].北京:人民郵電出版社.
[3] wiliimasatllnigs.操作系統:精做與原理[M].3版.北京:清華大學出版社,1995.
[4] 毛德操,胡希明.Linux內核源代碼情景分析(上下冊)[M].1版.北京:浙江大學出版社,2001.