這里開發了一個基于閃存平臺的嵌入式文件系統。為保證閃存扇區的平均使用率和均衡擦寫次數,引入了損壞管理辦法,在這種辦法中采用了動態存儲空間管理模式和先入先出(FIFO)策略。所采用的冗余設計、快速計算和跟蹤辦法還可以延長核心扇區使用壽命,保證系統啟動可靠的服務。
1 FFS存儲結構和框架
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適用于應用系統對功能,對可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。
閃存的英文名稱是 \“Flash Memory\” ,一般簡稱為 \“Flash\” ,它也屬于內存器件的一種。不過閃存的物理特性與常見的內存有根本性的差異:目前各類 DDR 、 SDRAM 或者 RDRAM 都屬于揮發性內存,只要停止電流供應內存中的數據便無法保持,因此每次電腦開機都需要把數據重新載入內存;閃存則是一種不揮發性 (Non-Volatile) 內存,在沒有電流供應的條件下也能夠長久地保持數據,其存儲特性相當于硬盤,這項特性正是閃存得以成為各類便攜型數字設備的存儲介質的基礎。
嵌入式系統中閃存有以下特點:(1)閃存以扇區為單位執行,如果修改扇區內1 B的數據,則整個扇區的數據都將被重寫;(2)通常任一扇區可重寫大約0.1~1萬次;(3)損壞扇區難免。在計算機數控系統中應用了閃存特性和局部處理程序訪問特征,在邏輯上非結構化的數據流模式被應用到FFS,在物理上存儲空間以扇區為基礎分成不同的塊。閃存文件系統(FFS)不僅提供了根據文件名查找和訪問文件,使得有限的存儲空間得到合理和充分利用,而且還提供基于存儲內容的擦寫策略損壞扇區的適應性管理。
為了使閃存文件系統在不同的平臺上更易于進行維護、升級和移植,基于Madnick分層模型設計了一個文件系統分層結構。圖1所示的文件系統包括2個主要部分:文件管理單元和存儲空間管理單元。較低層為上層部分提供服務。每一層僅涉及接口,而不是更低或上層內部結構。
2 存儲空間管理
作為嵌入式系統的一部分,閃存存儲管理的主要功能包括提高使用效率、加快執行速度和根據其物理特性使用特殊算法管理閃存內存單元的使用頻率。存儲空間管理單元在邏輯上由3個層次組成:文件物理層、存儲設備分配層和閃存驅動層。閃存驅動層為上層提供最基本的驅動程序,如下:
2.1 存儲扇區管理
本文開發的FFS存儲結構類似于MS-DOS的FAT,是FAT系統的修改。圖2顯示了一系列模式的基本存儲結構。
系統記錄區(SRA)存儲介質信息和最重要的文件系統信息,如閃存類型、容量、扇區數和扇區利用現狀。這個扇區的利用狀況包括文件數、損壞扇區數、第一個和最后一個未使用的扇區編號。圖3顯示了在SRA上的內存分配。文件信息區域(FIA)用于存儲文件的詳細信息,如文件名、文件類型、文件大小、文件屬性和閃存鏈表項。程序數據區(PDA)用于存儲程序數據。圖3為SRA上的內存分配情況,不同部分存儲特定的記錄信息:1為閃存內存類型;2為閃存內存容量;3為扇區數;4為文件數;5為未使用扇區數;6為損壞的扇區數;7為最后一次寫入FIA的扇區組數;8為第一個未使用扇區號;9為最后未使用扇區號;10為系統記錄控制的關鍵字;11為下一個要寫入的扇區號。
不同的系統有不同的存儲空間管理模式,最簡單的可能是一個命令模式。另一個常用的方式是靜態存儲模式,這意味著每一個文件分配固定的扇區數。在這種情況下,如果文件大小超過了給定的空間,雖然仍有未使用的扇區,但寫操作卻不能成功完成。同樣,小文件顯然將導致存儲空間浪費。另外,由于過度頻繁地訪問同一個文件,與其他的扇區相比這種更容易損壞。所以,靜態存儲模式不是一個很好的選擇。
基于MS-DOS的FAT系統只為數據區提供損害管理,忽視了文件系統結構區域。相對地,SRA作為FFS結構區域,由于存儲了系統關鍵信息而成為最重要的區域。而且因頻繁訪問, SRA往往更易損壞。所以,這一區域應當運用一種安全策略。可以充分利用閃存存儲能力,寫校驗時間將會減少,從而寫速度將有所改善。
2.2 SRA的平均擦除和寫入管理
為了實現對System record area(SRA)平均擦除和寫管理,避免由系統記錄扇區物理損傷而導致整體系統的故障,SRA被平均劃分成3個小組。3組依次進行寫操作,可以為系統記錄存儲安全提供一個冗余策略,從而提高系統的可靠性,延長系統壽命。這對于每次在系統通電之后獲取SRA代碼值是必要的。由系統記錄關鍵字(SysKeyword)控制的值,標記著系統關閉前最后一次寫操作的系統扇區的執行記錄,它顯示為:
在系統初始化時,SRA中每組的相應系統變量關鍵字(1~3)初始化為0。在后續操作中,各組關鍵字(SysKeyword)的真實值應該更新,在系統每次啟動時分別從SRA讀出。因此,SysCodeValue的值可根據式(1)得到。執行最后一次寫操作的組號可以通過調用函數GetLastGroup-Num()獲得。一旦SRA的記錄數據被更改,系統關鍵字應該相應更新。然后包括SysKeyword的記錄數據,應寫入到根據以下方法獲得的相應扇區。
下一次將被寫入的該系統記錄扇區的組號與轉移的參量LastGroupNum可以通過調用函數GetNextGroupNum(Uchar LastGroupNum)共同獲得。SysCodeValue的值將更新如下:
SysCodeValue=SysCodeValue∧2NextGroupNum-1 (2)
通過組合式(1)和式(2)可以得到每組SysKeyword的值,因此,可以迅速查出最新和最舊的記錄。該方法是一種快速計算和跟蹤策略,這樣,根據得到的組號和SysKeyword的值,寫操作可以順利執行。
該系統記錄扇區的詳細參數值如表1所示。
3 文件管理
文件管理層(FML)封裝了整個文件系統,并且為操作系統和上層的應用程序提供統一標準的程序接口(APIs)。用戶操作請求將被APIs移交到文件的邏輯層(FLL),然后將請求發送到文件的物理層(FPL)。
3.1 文件編輯
文件系統應提供友好的用戶界面,圖4顯示編輯一個存儲在閃存的文件流程圖。首先要遍歷文件信息鏈表,根據文件名來查找存儲此文件信息的節點。因此,該文件存儲空間的第一個扇區可獲取,后續扇區依次獲取。然后,每個扇區將逐個讀取,數據將被寫入緩沖區。通過建立一個雙鏈表顯示數據,然后通過人機界面進行編輯操作。最后,將修改后的數據寫回到閃存,文件信息和系統記錄將自動更新。
3.2 文件存儲和文件刪除
連續的文件存儲結構模式(如圖5中的文件N005和N011)在存儲前,文件通常被劃分成為大小相等的多個數據塊。塊的數量是由文件和塊大小決定,而塊的大小與存儲介質有關。在本文中,閃存的存儲單元(即扇區)為256 B,因此,該塊的大小建議不超過256 B。塊的數量(即被占用的扇區數)可以計算出,這是最低整數不少于文件字節大小除以塊字節大小所得的商數。然后未使用的扇區鏈表的頭節點作為這個文件存儲空間的第一個扇區。緊隨第一個扇區,很多未使用的扇區被取出后,整個文件的存儲空間可用。該文件成功保存。
閃存的地址空間不允許隨意被刪除,刪除一個文件時必須把扇區作為一個刪除單元。因此,刪除一個文件,要使用與編輯操作相同的手段獲得該文件節點的存儲信息,這樣文件的信息可以使用。有了文件信息,文件的存儲空間的第一個扇區可以得到,其他的也可以依次得到。然后未使用的扇區鏈表上的扇區可以通過調用函數FreeSect釋放第一個扇區。最后,根據雙鏈表的原則,這個節點將被刪除。
要創建一個文件(文件名為N005,大小為912 B,第一個扇區是5號),未使用扇區鏈表的頭節點作為這個文件的存儲空間的第一個扇區。同時,在文件信息鏈表的尾節點寫文件信息。這個文件的存儲扇區數可以計算出來,結果被證明是4。然后,從未使用的扇區鏈表頭部,4個扇區依次用于存儲文件數據。從而,文件信息和系統記錄更新后,文件的創建操作完成。
為了提高存儲及管理嵌入式平臺上文件數據的性能,本文提出了一種新的應用于閃存文件系統(FFS)的辦法,有以下特點:
(1)減少寫周期提高寫入速度;
(2)采用動態分配存儲空間,提高利用效率和延長閃存的使用壽命;
(3)相應的文件被刪除后,存儲扇區可以很快被釋放,并可以連接到未使用的扇區鏈表;
(4)當損壞扇區的數量到達設置值時自動報警,確保系統處于良好狀態;
(5)FAT分配的內存空間存儲指針以數組的形式作為全局變量;
(6)為延長內核扇區壽命確保系統啟動可靠服務,采用冗余設計、快速計算和追蹤策略。
因此,本文中的FFS,特別是在可靠性、存儲效率和良好的可移植性方面已獲得明顯的成效。
-
嵌入式
+關注
關注
5090文章
19176瀏覽量
306969 -
FlaSh
+關注
關注
10文章
1642瀏覽量
148463 -
存儲
+關注
關注
13文章
4353瀏覽量
86075
發布評論請先 登錄
相關推薦
評論