《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 一種微嵌入式Flash文件系統——μEFFS

一種微嵌入式Flash文件系統——μEFFS

2008-07-02
作者:胡德鵬1,2,李仁發1

? 摘 要: 針對Flash存儲器的特性提出一種分層文件系統" title="文件系統">文件系統架構,抽象出邏輯存儲器作為中間層" title="中間層">中間層,屏蔽了底層物理器件操作上的不足。本文件系統非常適合1GB以下容量的Flash存儲器,具有可移植性高、訪問效率高、壽命均衡等特性。
? 關鍵詞: Flash存儲器, Block, Page, 邏輯存儲器, FAT

?

? 隨著嵌入式系統" title="嵌入式系統">嵌入式系統應用的迅速發展,嵌入式系統被廣泛應用于各行各業,嵌入式系統的數據存儲問題隨之變成了一個最核心的關鍵問題。由于Flash器件的迅速普及,使得Flash存儲器的使用變得十分重要。同時,Flash器件本身固有的擦寫壽命、不可字節擦除等特點也使Flash器件存儲管理" title="存儲管理">存儲管理變得非常復雜。
? 目前嵌入式系統領域已有了一些較為成熟的Flash文件系統,如:嵌入式Linux中普遍使用的JFFS2日志文件系統、YAFFS文件系統。但是這些文件系統本身比較大,適合于大系統運行;并且經實踐檢驗,這些文件系統對壽命的均衡處理并不像宣傳的那樣好,文件系統效率和可靠性也有待提高。
? 本文通過中間抽象邏輯存儲器建立一種短小精煉、高性能、高可靠性、適合于嵌入式小型設備的嵌入式Flash文件系統——μEFFS。
? 實際上,通過更改底層物理存儲器(軟件),此文件系統也可以很方便地移植到其他器件上。而且通用文件系統(如:FAT文件系統)很容易移植到本文提出的中間層邏輯存儲器上,從而使得通用文件系統也獲得了Flash文件系統的特性,如:壽命均衡。
1 Flash存儲器特性
? (1)NAND Flash器件特點:高存儲密度,采用頁讀寫(讀寫速度快)、塊擦除方式操作;容易發生位反轉;存在壞塊(存儲不可靠性);容量一般較大(大于32MB);擦寫壽命一般為100萬次。
? (2)NOR Flash器件特點:隨機讀寫、塊擦除;壞塊少;器件本身存儲可靠性高;擦寫速度較慢;容量一般較小(小于16MB),擦寫壽命一般為10萬次。
? (3)塊(block):擦除的最小單元。
? (4)頁(page):即扇區,寫的最小單元(NorFlash寫的最小單元是字節,無頁的概念)。
? (5)擦除:存儲單元的相應數據位由“0”變成“1”。Flash器件和普通存儲器件不一樣,它只能采用塊擦除和片擦除兩種操作方式。
2 Flash器件存儲管理
? 由于Flash器件的讀寫特性,使Flash器件存儲管理較為復雜,且容易出問題。
? (1)壽命均衡問題:如果經常對同一單元進行擦寫操作,這些單元將很快達到壽命極限,導致損壞。
? (2)效率問題:如果每次改寫1個字節的數據都采用擦寫方式,將導致操作效率低下。
? (3)NOR和NAND兩種Flash區別明顯。
? 嵌入式Flash文件系統需解決的核心問題都是圍繞壽命均衡產生的,同時要兼顧性能和可靠性,最好能同時兼容兩種Flash器件(NOR和NAND)。
3 μEFFS的核心原理
? 建立一種完美的“邏輯存儲器”,在此邏輯存儲器上,可以完全像操作硬盤一樣進行讀、寫操作。
系統層次結構如圖1所示。

?????????????????????????????????
? 這樣利用抽象中間層邏輯存儲器完全屏蔽了底層物理存儲器的具體實現,同時各層之間接口簡單,簡化了系統,提高了系統的可移植性。中間層邏輯存儲器將復雜的Flash操作簡單化。系統結構如圖2所示。

??????????????????????
? 中間層邏輯存儲器是對物理器件的一種抽象,這樣做的好處是上層文件系統無需考慮底層的具體實現,同時有利于移植到其他物理器件上。
? 為適應各種不同的器件需要,系統建立統一的邏輯扇區Logic Sector(LS)。邏輯扇區大小和物理扇區相等,但是邏輯扇區的物理位置不固定,其實際地址通過BSAT來確定。同時系統為每個邏輯扇區編號(LSN),這個就是邏輯扇區訪問的惟一指示器。對于每個物理塊建立一個BSAT(塊內扇區分配表,占用該塊第一個扇區),用以描述這個塊內所有扇區使用情況,分配表的每個單元最高2位表示扇區使用情況,剩下各位為邏輯扇區號。例如BSAT表項采用16位(即BSAT16),BSAT表項結構如表1所示。這樣對整個存儲系統的訪問就完全變成對邏輯扇區的訪問了。系統本質是建立邏輯扇區到物理扇區的映射表,同時在操作過程中維護這個映射表。

?????????????????????
4 底層物理存儲器
? 用于訪問物理層硬件的主要函數有:
? (1)FlashEraseChip():芯片整片擦除。
? (2)FlashEraseBlock(INT32U dwBlockNo):塊擦除。
? (3)FlashWrite(INT32U dwAddr,INT8U * pBuff,INT32U dwSzie):將緩沖區的數據寫入目標地址處。
? (4)FlashWrite1Sec(INT32U dwSecNo,INT8U * pBuff):向目標扇區寫數據。
? (5)FlashRead(INT8U * pBuff,INT32 dwAddr,INT32U dwSzie):從指定地址處讀數據。
? (6)FlashRead1Sec(INT8U * pBuff,INT32U dwSecNo):從指定扇區讀數據。
5 中間層邏輯存儲器
5.1 系統初始化
? 對Flash進行掃描,建立Flash空扇區表和物理扇區映射表。
? (1)空扇區表:EmptySecTable[SecNum/8],表中每一位表示一個扇區,為1表示該扇區為空,否則該扇區非空。
? (2)物理扇區映射表:PhySecTable[LogicSecNum],表中每個單元的值為物理扇區號。
5.2 讀訪問
? (1)根據PhySecTable[]找到邏輯扇區對應的物理扇區號。
? (2)根據物理扇區號計算出物理地址。
? (3)根據物理地址和扇區大小讀取數據。
5.3 修改訪問
? (1)先按讀訪問,讀取扇區數據。
? (2)在內存中修改數據。
? (3)根據EmptySecTable[]選取一個空扇區,將修改后的數據寫入新扇區。
? (4)改寫新扇區所在塊的BSAT表,標記該扇區為有效狀態,同時將邏輯扇區號寫入BSAT。
? (5)修改EmptySecTable[]表中該扇區為非空扇區。
? (6)修改原扇區的BSAT項,標記為無效狀態。
? 注:修改訪問都選擇一個新物理扇區(page),然后寫入數據,再將原物理扇區標記為無效,從而達到壽命均衡訪問。
5.4 緩沖塊
? 系統保留兩個塊用于碎片整理緩沖,緩沖塊也稱交換塊,如果要實現更好的壽命均衡,也可以采用邏輯塊的形式建立緩沖塊。
5.5 Flash碎片整理
? Flash碎片整理分為手動整理和自動整理。如果系統空扇區少于20%時,系統將自動進行碎片整理。
? (1)系統復位初始化時,通過EmptySecTable[]判斷是否需要整理;如果需要,則整理出一個塊(block)。
? (2)增加數據或修改數據時,如果發現空扇區少于10%,則整理出一個塊,然后再進行操作。
? (3)由于碎片整理比較耗時,所以每次只整理出一個塊,目的是提高單次操作的性能。
? (4)手動整理將對整個存儲器進行整理,它可以在空扇區少于40%的情況下進行。
? (5)整理過程:先擦除緩沖塊(Buff block),然后將欲整理的塊中有效扇區全部按順序轉移到緩沖塊中,再擦除該塊,? 最后將緩沖塊中的數據原樣復制到該塊。整理后需要更新空扇區表和塊扇區分配表。
? (6)整個系統只有碎片整理程序才會進行擦除操作,因此各塊的壽命(次數)實際上就等于碎片整理的次數。
? (7)碎片整理均衡策略:碎片整理每次只整理一個物理塊,設立一個碎片整理塊指針,用于指示下次需整理的塊。這樣保證均衡整理各塊,均衡了各塊壽命。
5.6 中間層邏輯存儲器主要函數
? (1)LogicMemFormat():擦除整片Flash,供上層調用。
? (2)LogicMemInit():系統復位初始化調用,通過掃描Flash產生空扇區表和物理扇區映射表。
? (3)ReadLogicSec(INT8U * buff,INT16U wLogicSecNo):根據邏輯扇區號讀取扇區數據。
? (4)WriteLogicSec(INT16U wLogicSecNo,INT8U * buff):將數據寫入邏輯扇區,這個要考慮是追加還是修改。
? (5)INT16U GetAFreeSec():獲取一個空扇區號(未使用的物理扇區號)。
? (6)FlashMemRep1Block():碎片整理1塊。
? (7)FlashMemRepAll():整片碎片整理。
6 上層文件系統
? 在中間層邏輯存儲器的基礎上,可以建立各種類型的文件系統。這樣建立的文件系統已經具有良好的Flash文件系統特性。本文件系統采用類似于FAT文件系統的處理方法。
? (1)主引導記錄MBR(保留區):包含啟動代碼和分區表" title="分區表">分區表,這個區主要借鑒了已有文件系統的設計思想(采用磁盤文件系統類似的方法處理),主引導記錄占用邏輯扇區0。實際上只要有BIOS的支持,本文件系統完全可以和已有的文件系統一樣引導操作系統或者應用軟件(只要搜索到邏輯算區0就找到了主引導記錄);采用分區表的方法則有利于擴大整個文件系統管理空間的大小(如采用FAT16格式,4個分區表項分別指示4個不同的分區,相當于文件系統所能管理的空間擴大了4倍)。
主引導記錄占用邏輯扇區0。
? (2)系統引導記錄DBR:用于指示文件分配表的位置、大小、個數和根目錄區位置、大小、項數。系統引導記錄占用邏輯扇區1。
? (3)文件分配表(FAT):用于指示文件的邏輯扇區號鏈,由于建立了物理扇區映射表,所以,可以高效地進行數據訪問。文件分配表本身占用邏輯扇區號,文件分配表的大小、個數,由系統引導記錄指示。
? (4)文件目錄表(FDT):分為根目錄和子目錄。子目錄實際上也是文件(和普通文件完全一樣),這里不詳細討論。根目錄表主要目的用于指示根目錄中各文件(含子目錄)在FAT中的第一個扇區號。
根目錄的位置和大小在系統引導記錄中指示。
7 系統整體運行機制
? (1)系統初始化:系統啟動時進行初始化,構建中間層邏輯存儲器。此時建立空扇區表和邏輯扇區到物理扇區的映射表。
? (2)文件讀、寫操作:根據主引導記錄(邏輯扇區0)找到所在分區引導記錄(系統引導記錄);根據分區引導記錄找到根目錄區;根據根目錄項,找到文件分配表(FAT)中相應的入口;根據FAT入口進行文件讀、寫操作。上述所有操作都是根據邏輯扇區號進行訪問的,實際訪問通過查找物理扇區映射表進行。
? 本文通過中間層抽象邏輯存儲器建立了一種Flash文件系統,并命名為μEFFS。μEFFS特別適合于小型嵌入式系統(8位、16位、32位系統均可良好運行),具有壽命均衡、性能好、可靠性高的特點,經受了實踐的考驗。通過對本系統的裁剪,很容易將其移植到單片機系統中,這樣也給目前的低端8位單片機系統提供了一種數據存儲解決方案。
參考文獻
[1] 馬忠梅,李善平,康慨,等.ARM&Linux嵌入式系統教程.北京:北京航空航天大學出版社,2005.
[2] 周立功.ARM嵌入式系統實驗教程(2).廣州:廣州周立功單片機發展有限公司,2005.
[3] LABROSSE J J著,邵貝貝譯.?滋C/OS-Ⅱ-源代碼公開的實時嵌入式操作系統.北京:中國電力出版社,2001.
[4] MALIK V.JFFS-Aracticalguid.http://www.embeddelinuxworks.com/articles/,2001,05.

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 999久久久免费精品国产牛牛 | 久久制服丝袜 | 欧美三级 欧美一级 | 国内精品久久久久久影院老狼 | 亚洲一级毛片免费在线观看 | 成年人免费观看网站 | 成人精品免费网站 | 乡村乱肉第19部全文小说 | 久久精品免看国产 | 精品亚洲欧美高清不卡高清 | 你懂的视频在线观看 | 日日操日日| 黄色a∨ | 男女第一次弄进去的视频 | 天天爱天天爽 | a级大片免费观看 | 日韩色爱 | 欧美一区高清 | 亚洲欧美不卡中文字幕 | 欧美18一19xxx | 日批软件在线观看 | 亚洲国产第一区二区三区 | 欧美中文字幕在线观看 | 午夜视频福利在线观看 | 日韩国产欧美一区二区三区在线 | 18av黄动漫网站在线观看 | 最近最新中文字幕高清免费 | 亚洲爱视频| 国产特黄特色一级特色大片 | 免费看黄在线看 | 最近中文字幕 | 成人国产第一区在线观看 | 丝袜国产在线 | 在线精品播放 | 男女男在线精品网站免费观看 | 亚洲视频一区网站 | 久久人人爱 | 你懂的在线免费视频 | 日本精品视频一区 | 成人羞羞视频免费看 | 欧美成人手机视频 |