- 相關推薦
大容量內存文件系統設計及μC/OS下的實現
摘要:針對某些嵌入式系統中處理數據量大和速度要求高的特點,提出一種應用于嵌入式系統中的大容量內存文件系統的實現方案。該方案通過在內存中建立文件系統,將臨時數據有效組織于內存中,既提高訪問速度又節省外存空間,因而能滿足要求;通過將其移植到μC/OS系統下,便可進行性能測試和分析。結果表明,本內存文件系統具有較高的查找效率和內存利用率。引言
嵌入式系統憑借其特有的功能和資源占用量少的特點,在各個領域得到了越來越多的應用。根據成本和設計的需要,一般的嵌入式系統都配置很少的外部存儲空間甚至不帶外部磁盤。但隨著用戶需求和功能復雜度的增加,越來越多的嵌入式系統需要處理大容量的數據,或者在運行過程中會產生大量的臨時數據。一方面這些數據處理完后不能立即刪除;另一方面這些臨時文件不需要長期保存。例如,用來上網沖浪的機頂盒設備在用戶瀏覽過程中不斷從互聯網上接收數據,因此用戶訪問后的頁面很可能再次瀏覽,所不能將瀏覽后的網頁立即清除,當然,系統不需要也不可能將所有瀏覽過的頁面保存于硬盤中。所以,處理數據量的增大給嵌入式系統的設計提供了新的要求。
一般來說,嵌入式系統處理大容量臨時數據的有效方法是設計一個內存文件系統存儲這些數據。內存文件系統MFS(Memory File System)是一個在內存中對文件實行按名存取的底層軟件。和普通磁盤文件系統相比,內存文件系統具有存取速度快、可動態改變文件系統大小和數據掉電即丟失的優點,因此它適用于高速的臨時數據處理。Linux下的Tmpfs、Proc文件系統以及Freebsd下的MFS都是一種內存文件系統。但是,這些通用操作系統上的內存文件系統不能夠直接運用于到嵌入式系統中:其一,它們都是為資源豐富的通用PC平臺設計的,不適用于資源有限的嵌入式系統;其二,這些通用內存文件系統的設計方案一般是利用內存來模擬磁盤文件系統,在內存中會建立文件系統緩沖區。這就是說除了文件系統本身占據了內存之外,磁盤緩沖區又會占所一些內存,這些就會導致內存的浪費和利用率的下降。根據上述考慮,本文設計了一適合于嵌放式大容量數據處理的嵌入式內存文件系統EMFS(Fmbedded Momory File System)。文中首先闡述了EMFS嵌入式系統的設計要點,隨后討論了如果將其移植到μC/OS系統,最后對其性能進行了分析和測試。
1 EMFS的設計
從前面分析得知,本文設計的EMFS不采用通用文件系統的磁盤設計方法,如Linux系統的Ext2節點結構和Windows的FAT結構。EMFS對文件的主要管理方式為:
①文件的各個屬性單獨存儲在文件信息表(file status table)中;
②文件數據塊用鏈表來分配和管理,文件數據塊大小可以動態改變,這樣可以避免在系統運行過程中產生大量的碎片;
③為了提高文件的讀寫和查找速度,設置一個全局散列表(Hash表)作為文件的讀寫及查找入口;每個文件根據其文件名、文件長度計算出一個Hash值;然后在Hash表找到文件對應的Hash項,這樣就可以讀出文件的屬性和數據。
圖1表示了EMFS在內存中的組織結構。
每一個存儲于EMFS的文件在全局Hash表都有個對應的入口項。其文件屬性和文件名、文件長度、創建時間等存入文件狀態表,文件內容存儲于從空閑塊鏈表申請到的數據塊中。文件的Hash表、狀態表和數據塊通過指針鏈接起來,如圖2所示,下面分別介紹文件系統的Hash表、狀態表和數據塊鏈表。
1.1 全局Hash表
(1)Hash值的產生
從圖2可看出,Hash表是整個文件系統讀寫和查找的入口,通過計算文件的Hash值來找到其在Hash表中的位置,從而訪問文件狀態表和數據塊。因此文件系統的查找效率主體現在,如何通過文件信息計算其對應的Hash值以及如何有效地組織Hash表。圖3表示了EMFS系統中Hash表的構成情況,每個文件對應8字節的Hash值。其中前2個字節是文件名長度和文件名第一個字節的ASCII碼值,接下來的2個字節是文件名的16CRC(循環冗余校驗編碼),最后4個字節文件名的32CRC編碼。這里為了減少同文件對應相同Hash值的概率,文件名的Hash值中既包含了文件名的16CRC編碼又包含了32CRC編碼。
(2)Hash表的組織和查找
在獲得Hash值后,如何將8個字節的Hash值有效地組織在全局Hash表中來獲得最高的查找速度是一個關鍵問題。根據數據結構算法理論可知,將Hash表順序組織為一個有序表,可以通過折半查找法來獲得最高的查找效率。其比較次數最多為└log2n┘ 1(n為表中的記錄個數),其平均查找長度ASL(Average Search Length)近似為log2(n 1)-1。然而,隨著文件的動態增加或刪除,每個文件對應的Hash值或大或小,這樣系統的Hash表并不能保證是一個順序表,因此就不能采用折半查找法。如果首先將無序的Hash表排列為有序表再采用折半法查找,那么即使在最好的情況下,排序操作所需要的時間復雜度也為O(nlogn),同時還需要其它的輔助存儲,這樣在排序操作上就要花費大量的時間和存儲空間,使整個系統的查找效率大大降低。針對此不足,本文采用鏈地址法組織全局Hash表,將全局Hash表分為兩部分:其本表和溢出表。其基本思想為:首先分配一個固定大。ㄟ@里假設取1024項)的順序表作為基本表,每個文件計算得出的Ha
【大容量內存文件系統設計及μC/OS下的實現】相關文章:
256×32大容量中文矩陣系統的設計03-18
基于閃存的星載大容量存儲器的研究和實現03-18
B2C 電子商務網站的設計與實現03-01
試論將μC/OS-II用于單片機教學03-18