新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Flash存儲器的嵌入式文件系統設計

        基于Flash存儲器的嵌入式文件系統設計

        作者: 時間:2012-04-06 來源:網絡 收藏



        內存中的文件節點不包含文件真正的數據,而使用指針。文件被打開時,在內存中創建一塊新存儲區域存放數據,數據指針便指向此存儲區,未被打開時,此指針指向空。 對于每個目錄有1 個目錄層數,表示此目錄的深度,如根目錄的目錄層數為0 ,根目錄的下一級目錄則為1 ,依此類推。 存儲地址保存文件或目錄在 中的地址。文件和目錄都被存在上一級目錄下,所屬目錄指針即指向上一級目錄在內存中的數據結構,根目錄的所屬目錄指針即為空。對于同目錄下的不同節點,在內存中使用鏈表將其串聯,同目錄文件指針即聯成鏈表。 鏈表的首指針保存在上一級目錄中,首目錄項指針即指向鏈表的首項。為提高塊擦寫的效率,存儲在同一個可擦寫塊中的各個節點在內存中也建立一個鏈表,塊隊列指針即用于連成此鏈表。為標識被修改的節點,利用一個未保存隊列,未保存隊列指針即用來建立此隊列。

        載入(mount ) 時,首先順序掃描 中的每個索引節點,查找出最大的索引節點更新號,此更新號對應的索引節點即為最新的索引節點。查找到最新索引節點后,將簇狀態表等信息映射到內存的數據結構中。依據索引節點中的根目錄信息,遍歷所有節點,建立內存中的目錄文件結構,并將節點添加到對應的擦寫塊隊列中。 對一個文件編輯并保存的過程見圖6。


        文件打開時,先在內存中分配一塊空間作為數據區,將內容寫入,并定位文件節點的數據指針指向該內存中的數據區。如果文件內容被修改,就將文件節點添加到未存盤隊列,依次寫入 中,并修改簇狀態表。 保存時將內存中數據區內容寫入Flash 中,釋放申請的內存空間,修改節點中的數據指針和簇狀態表,再將文件的所有上級目錄重新寫入Flash ,最后將更新后的索引節點內容寫入Flash。如果文件未被修改,則只需修改數據指針即可。

        節點加入未存盤隊列的順序按照目錄層數的大小排列,文件節點排在隊列首,目錄層數最大的排在其后,目錄層數為1 的排在隊列末尾,根目錄不加入未存盤隊列。

        特殊處理機制

        均衡擦寫機制 

        為了避免任意一個可擦除塊因擦寫次數過多而過早報廢,對Flash擦寫時采用了均衡擦寫機制。 考慮到系統的精簡性,擦寫在整片Flash 的各塊中依次進行,一塊擦寫完后,下一個被擦寫的塊即為后一個塊,在系統的索引節點中保存了下一個要擦除的塊號。當文件系統中的剩余空間減少到設定值時,系統會擦除此塊,以回收臟簇占用的空間。對應每個可擦寫塊都有一個節點隊列,此塊中包含的節點都加入其中。塊擦除的流程見圖7。

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


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石楼县| 拜城县| 昔阳县| 通江县| 通辽市| 栾城县| 蓬溪县| 西青区| 阳曲县| 聊城市| 台东市| 石城县| 彭州市| 芦山县| 十堰市| 江西省| 广水市| 柳河县| 娄烦县| 德庆县| 福建省| 靖边县| 双辽市| 曲靖市| 颍上县| 腾冲县| 云林县| 永定县| 昌江| 林甸县| 将乐县| 轮台县| 内乡县| 左贡县| 兴仁县| 饶平县| 广昌县| 临朐县| 汉沽区| 中卫市| 贵定县|