新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統中基于閃存平臺的存儲管理策略

        嵌入式系統中基于閃存平臺的存儲管理策略

        作者: 時間:2010-06-21 來源:網絡 收藏
        2.1 扇區
        本文開發的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)

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武邑县| 罗甸县| 桦川县| 泽库县| 墨竹工卡县| 广宁县| 南通市| 忻城县| 六枝特区| 东乡| 仪征市| 扶沟县| 旺苍县| 云南省| 元谋县| 屏东县| 涞水县| 班玛县| 大邑县| 安阳市| 利辛县| 阳城县| 萨迦县| 济阳县| 洪洞县| 庆阳市| 镇平县| 萝北县| 阿图什市| 枣庄市| 澄城县| 汝城县| 滦平县| 项城市| 江孜县| 宿迁市| 德保县| 改则县| 宁河县| 柏乡县| 稷山县|