嵌入式系統中基于閃存平臺的存儲管理策略
本文開發的FFS存儲結構類似于MS-DOS的FAT,是FAT系統的修改。圖2顯示了一系列模式的基本存儲結構。本文引用地址:http://www.104case.com/article/151786.htm
系統記錄區(SRA)存儲介質信息和最重要的文件系統信息,如閃存類型、容量、扇區數和扇區利用現狀。這個扇區的利用狀況包括文件數、未使用的扇區數、損壞扇區數、第一個和最后一個未使用的扇區編號。圖3顯示了在SRA上的內存分配。文件信息區域(FIA)用于存儲文件的詳細信息,如文件名、文件類型、文件大小、文件屬性和閃存鏈表項。程序數據區(PDA)用于存儲程序數據。在圖2陰影部分是每個區域損壞的扇區。如果損壞的扇區數達到給定界限值,警報將自動啟動。圖3為SRA上的內存分配情況,不同部分存儲特定的記錄信息:1為閃存內存類型;2為閃存內存容量;3為扇區數;4為文件數;5為未使用扇區數;6為損壞的扇區數;7為最后一次寫入FIA的扇區組數;8為第一個未使用扇區號;9為最后未使用扇區號;10為系統記錄控制的關鍵字;11為下一個要寫入的扇區號。
不同的系統有不同的存儲空間管理模式,最簡單的可能是一個命令模式,但它并不適用于某些特殊應用。例如,在計算機數控系統中使用命令模式,用戶不方便編輯、修改或者刪除由各種機器處理指令組成的G代碼程序。另一個常用的方式是靜態存儲模式,這意味著每一個文件分配固定的扇區數。在這種情況下,如果文件大小超過了給定的空間,雖然仍有未使用的扇區,但寫操作卻不能成功完成。同樣,小文件顯然將導致存儲空間浪費。此外,由于過度頻繁地訪問同一個文件,與其他的扇區相比這樣的扇區更易于損壞。因此,靜態存儲模式不是一個很好的選擇。
為了克服這些問題,提出了一個動態存儲空間管理模式,采用平均擦除和寫入策略。先入先出(FIFO)的引入,保證了閃存存儲扇區的平均使用。當系統第一次加電,未使用的扇區都初始化為一個雙鏈表。此后,這些扇區應該從鏈表頭節點轉到尾節點。這樣,在訪問每個扇區的頻率將趨于平等,每個扇區將不會過度頻繁讀取/寫入。假設鏈表有N個節點,每個扇區訪問的概率只有1/N,因此,閃存的使用壽命可以明顯延長。
相對而言,基于MS-DOS的FAT系統只為數據區提供損害管理,卻忽視了文件系統結構區域。相對地,SRA作為FFS結構區域,由于存儲了系統關鍵信息而成為最重要的區域。而且,由于頻繁訪問, SRA往往更易損壞。因此,這一區域應當運用一種安全策略。根據在SRA、FIA和PDA存放的數據的重要性不同,不同存儲區域應當分配不同的可靠性要求。因此,可以充分利用閃存存儲能力,寫校驗時間將會減少,從而寫速度將有所改善。
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)
評論