<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2012-04-06 來(lái)源:網(wǎng)絡(luò ) 收藏




首先,將未保存于隊列中的節點(diǎn)保存,清未保存隊列。 然后將塊隊列中的所有文件節點(diǎn)轉移到空簇中,同時(shí)將文件路徑上的各級目錄加入到未存盤(pán)隊列中。對于塊隊列中的目錄節點(diǎn),則將它和其路徑上的各級目錄加入未存盤(pán)隊列中,按照未保存隊列的順序,依次將各個(gè)目錄寫(xiě)入 中,最后寫(xiě)入最新的索引節點(diǎn)。因為目錄節點(diǎn)加入未存盤(pán)隊列時(shí),按照目錄層數的大小排列,所以按照未保存隊列的順序寫(xiě)入時(shí),可以保證當一個(gè)目錄要被寫(xiě)入 時(shí),它的所有下級目錄已被寫(xiě)入 中。 所有下級目錄在Flash 中的存儲地址都已確定。當該的空間將達到存儲上限時(shí),可能會(huì )出現特殊情況,即廢簇回收時(shí),空簇的空間不足,無(wú)法將所有干凈簇重寫(xiě)。為此建立了應急機制,先將文件節點(diǎn)內容存在內存中,這時(shí)新建一個(gè)臨時(shí)未保存隊列,專(zhuān)門(mén)保存文件節點(diǎn),在塊擦寫(xiě)完成后,將剩余的文件節點(diǎn)寫(xiě)入新的空簇中,其算法與圖7 所示流程大致相同。 但是,一旦在擦寫(xiě)時(shí)斷電,會(huì )導致該塊上的所有數據丟失。

斷電錯誤處理機制 

當系統遭遇斷電重新啟動(dòng)后,索引節點(diǎn)中的信息會(huì )與系統中的狀態(tài)不符,這時(shí)便需要錯誤處理機制。 錯誤一般是索引節點(diǎn)中標注的空簇已被寫(xiě)入了數據,錯誤處理就是將此簇標志為臟簇,并查找下一個(gè)空簇重新寫(xiě)入。

多任務(wù)處理機制 

允許同時(shí)打開(kāi)多個(gè)文件,在多任務(wù)操作系統下,為了避免沖突建立了多任務(wù)處理機制。系統允許打開(kāi)的多個(gè)文件在內存中同時(shí)被編輯修改,但是對Flash 寫(xiě)入操作有限制。 處理方法是設立Flash 寫(xiě)入保護區,在此區中只允許當前正在執行的任務(wù)執行Flash 寫(xiě)入操作。 實(shí)現Flash 寫(xiě)入保護區的方法是建立一個(gè)初始值為1 的信號量,當一個(gè)節點(diǎn)需要Flash 寫(xiě)入時(shí),首先申請信號量,完成后再釋放信號量。 Flash 寫(xiě)入保護區見(jiàn)圖6 、圖7。在圖6 中,空操作語(yǔ)句是用來(lái)對多個(gè)文件的保存進(jìn)行同步。 例如,有文件1 和文件2 需要保存,先將文件1 的內容寫(xiě)入Flash 中,文件1 路徑下的目錄節點(diǎn)被添加到未保存隊列中,再將文件2 的內容寫(xiě)入Flash 中,文件2 路徑下的目錄節點(diǎn)也被添加到未保存隊列中,最后將未保存隊列中的所有節點(diǎn)都寫(xiě)入Flash 中。這樣,如果同一路徑下的兩個(gè)文件同時(shí)存盤(pán),可避免路徑下的相同目錄節點(diǎn)被寫(xiě)入兩次,從而提高了效率。不足之處在于,如果很多文件同時(shí)存盤(pán),會(huì )導致索引節點(diǎn)在一段時(shí)間內都無(wú)法寫(xiě)入Flash ,有斷電丟失的危險。但對于一般系統來(lái)說(shuō),很少會(huì )碰到這種情況。當進(jìn)行Flash擦寫(xiě)時(shí),在取塊隊列首節點(diǎn)至索引節點(diǎn)寫(xiě)入完成這段時(shí)間內都不允許進(jìn)行其他Flash 的寫(xiě)入操作,這是為了保證數據的完整性,同時(shí)也提高了文件系統的穩定性。

無(wú)目錄文件系統的優(yōu)化

許多系統設計中雖沒(méi)有目錄管理的要求,但是對執行效率和資源消耗的要求較高。 對于不要求有目錄管理的精簡(jiǎn)文件系統,在設計時(shí)也進(jìn)行了優(yōu)化。精簡(jiǎn)文件系統在Flash 中的存儲格式與上述設計相同,文件系統中的所有文件信息都保存在索引節點(diǎn)的根目錄信息表中。精簡(jiǎn)文件系統在內存中的映象則要簡(jiǎn)單很多,只包含索引節點(diǎn)中的信息,包括簇狀態(tài)表、下一個(gè)擦除塊、下一個(gè)新節點(diǎn)的標號和根目錄信息,而不用為每個(gè)文件都建立內存中的映象,節省大量的內存空間。 文件的編輯存盤(pán)過(guò)程簡(jiǎn)化為:打開(kāi)文件、編輯、將文件寫(xiě)入Flash 存儲器、將修改后的索引節點(diǎn)寫(xiě)入Flash 存儲器。擦寫(xiě)則只需通過(guò)查詢(xún)根目錄信息表中的各個(gè)目錄項,將塊中的所有文件節點(diǎn)寫(xiě)入空簇即可。在無(wú)目錄管理的情況下,精簡(jiǎn)文件系統占用的內存資源可以減少,操作也可便捷,提高了效率。 對于大量只需要按名存取的簡(jiǎn)單文件管理的小型系統而言,針對Flash 存儲器的簡(jiǎn)單文件系統將占用資源少,執行效率高,有很大的應用價(jià)值。

嵌入式文件系統實(shí)現及性能分析


該文件系統的實(shí)現采用了分層方法,分為3 層4 個(gè)部分:應用程序接口、文件系統核心、操作系統調用接口、Flash 存儲器驅動(dòng),實(shí)現結構見(jiàn)圖8。


實(shí)現平臺中RTOS 為μC/OSOII 實(shí)時(shí)操作系統,CPU 使用三星S4510B作為處理器,Flash 存儲器芯片為FUJ ITSU 的29LV160 TE。 針對不同的實(shí)時(shí)操作系統和Flash 存儲器芯片需要實(shí)現不同的操作系統接口和Flash 存儲器驅動(dòng)。

針對μC/ OSOII 編寫(xiě)操作系統調用接口,包括5個(gè)函數: ①系統調用接口初始化FS_Sys_Interface_Init ( ) ,創(chuàng )建互斥信號量和內存分區; ② Flash 寫(xiě)入關(guān)閉FS_Sys_Write_Lock ( ) ,禁止Flash 寫(xiě)入操作,調用μC/OS-II 中OSMutePend ( ) ; ③ Flash寫(xiě)入打開(kāi)FS_Sys_Write_Unlock ( ) ,重新允許Flash 寫(xiě)入操作,調用μC/OS-II 中OSMutePost() ; ④內存空間申請FS_Sys_Mem_Alloc( ) 和內存空間添加FS_Sys_Mem_Add ( ) , 都調用OSMemGet ( ) 來(lái)完成; ⑤內存空間釋放FS_Sys_Mem_Free ( ) ,調用OSMemPut ( ) 完成,將申請的內存塊全部釋放。針對29LV160 TE 這款Flash 存儲器芯片,定義一個(gè)FlashDef 結構體的全局變量, 用于存儲Flash 器件信息,并且編寫(xiě)針對此款Flash 的塊擦寫(xiě)函數FS_Device_Sector_Erase ( ) 和數據寫(xiě)入函數FJ FS_Device_Write ( ) 。

完成這兩部分的實(shí)現后,該系統就可運行調試。 測試應用程序接口(API) 。應該提供的各部分功能,并在突然斷電情況下,測試文件系統的恢復情況。無(wú)目錄管理的精簡(jiǎn)文件系統的載入,可在2μs內完成,文件寫(xiě)入耗時(shí)主要為閃存的等待時(shí)間,系統本身只占用不到200 個(gè)字節的內存,產(chǎn)生的代碼段大小為7 K。完整的文件系統載入時(shí),需要建立內存中映象,耗時(shí)根據文件數量的多少而不同,一般為10μs ,產(chǎn)生的代碼段大小為11 K。系統寫(xiě)入效率較高,在無(wú)目錄管理的配置下尤其明顯。試驗中系統在多次斷電的情況下,系統仍能恢復至上次存盤(pán)的狀態(tài),雖會(huì )導致個(gè)別文件未更新,但不會(huì )導致文件系統崩潰。

結 語(yǔ)

針對Flash 存儲器的固有缺陷設計了一種基于Flash 存儲器的嵌入式文件系統。 在文件讀寫(xiě)時(shí),極大減少了Flash 存儲器擦寫(xiě)的次數,提高了效率。 此系統代碼精簡(jiǎn),運行時(shí)占用內存資源少,運行效率高,而且有斷電保護,有較高的安全性。

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

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: Flash 存儲器 嵌入式 文件系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>