適宜于嵌入式多媒體應(yīng)用的Flash文件系統(tǒng)
在嵌入式系統(tǒng)中應(yīng)用Flash存儲(chǔ)器最好的辦法是在其上構(gòu)造一個(gè)文件系統(tǒng),對(duì)Flash存儲(chǔ)器中的數(shù)據(jù)內(nèi)容進(jìn)行基于文件代號(hào)的存儲(chǔ)管理,同時(shí)對(duì)于Flash存儲(chǔ)器本身的壞損單元自動(dòng)進(jìn)行應(yīng)用透明的壞損管理。目前在通用計(jì)算機(jī)上已經(jīng)有很多成熟的文件系統(tǒng),如DOS下的FAT文件系統(tǒng)、Windows NT下的NTFS文件系統(tǒng)及UNIX文件系統(tǒng)等[2]。
但是這些文件系統(tǒng)并不適合直接用到嵌入式系統(tǒng)中進(jìn)行多媒體數(shù)據(jù)內(nèi)容的存儲(chǔ):第一,嵌入式系統(tǒng)的應(yīng)用條件遠(yuǎn)比計(jì)算機(jī)惡劣,電源電壓的不穩(wěn)定以及突發(fā)性斷電將對(duì)Flash的存儲(chǔ)造成災(zāi)難性的影響,通用文件系統(tǒng)對(duì)于可靠性的設(shè)計(jì)考慮不足;第二,通用文件系統(tǒng)是針對(duì)系統(tǒng)資源非常豐富的計(jì)算機(jī)平臺(tái)并基于速度較慢的磁盤(pán)驅(qū)動(dòng)器,它們常常大量使用緩存技術(shù),如注重文件系統(tǒng)的速度特性,要耗費(fèi)比較多的系統(tǒng)資源。這與嵌入式系統(tǒng)中系統(tǒng)資源十分有限,F(xiàn)lash存儲(chǔ)器又相對(duì)于磁盤(pán)驅(qū)動(dòng)器較快的應(yīng)用情況不同;第三,嵌入式系統(tǒng)中存儲(chǔ)于Flash上的內(nèi)容很多是多媒體數(shù)據(jù)資料,這些數(shù)據(jù)內(nèi)容往往允許一定程度的誤碼損傷,未必需要如通用文件系統(tǒng)那樣嚴(yán)格保證存儲(chǔ)的正確性。通過(guò)靈活的校驗(yàn)機(jī)制與壞損管理,達(dá)到更優(yōu)化的存儲(chǔ)速度與更高效的存儲(chǔ)空間利用,這對(duì)成本敏感的嵌入式系統(tǒng)來(lái)說(shuō)尤其具有幫助。
基于上述考慮,設(shè)計(jì)了一個(gè)適合嵌入式多媒體應(yīng)用的Flash文件系統(tǒng)。它不僅支持文件代號(hào)管理、文件指針存取以及對(duì)應(yīng)用透明的自動(dòng)壞損管理這些通用文件系統(tǒng)所具有的功能,并且在文件系統(tǒng)的可靠性以及文件系統(tǒng)的額外資源消耗方面進(jìn)行了改善;此外還引入了基于存儲(chǔ)內(nèi)容自適應(yīng)的壞損管理策略,從而使該Flash文件系統(tǒng)更加適合嵌入式多媒體應(yīng)用。
1 Flash存儲(chǔ)器的操作特點(diǎn)
Flash存儲(chǔ)器在讀取方面與普通的SRAM存儲(chǔ)器類似,一般可以實(shí)現(xiàn)完全隨機(jī)的讀取。Flash存儲(chǔ)器最大的不同在于寫(xiě)操作方面。Flash存儲(chǔ)器的寫(xiě)操作需要經(jīng)過(guò)"擦除-寫(xiě)入"兩個(gè)操作過(guò)程。當(dāng)希望對(duì)Flash存儲(chǔ)器的某一個(gè)單元進(jìn)行寫(xiě)入時(shí),首先必須對(duì)這個(gè)存儲(chǔ)單元所在的區(qū)塊(Block)執(zhí)行擦除操作,擦除操作成功完成后,整個(gè)區(qū)塊的數(shù)據(jù)內(nèi)容都被清空(一般被設(shè)置成0xFF);然后對(duì)目的單元所在的頁(yè)面(Page)執(zhí)行寫(xiě)入操作,需要一次寫(xiě)入整個(gè)頁(yè)面的全部數(shù)據(jù)內(nèi)容(也有一些Flash存儲(chǔ)器支持部分頁(yè)的寫(xiě)入,這樣可以分多次寫(xiě)完一個(gè)頁(yè)面,但是一旦寫(xiě)過(guò)的存儲(chǔ)單元數(shù)據(jù)就不能再被更改),操作成功后要進(jìn)行數(shù)據(jù)正確性的校驗(yàn)。
一個(gè)區(qū)塊(Block)包含一個(gè)或多個(gè)頁(yè)面(Page),一個(gè)頁(yè)面包含多個(gè)數(shù)據(jù)存儲(chǔ)單元(字節(jié)或字)。為了增強(qiáng)所設(shè)計(jì)Flash文件系統(tǒng)在不同F(xiàn)lash存儲(chǔ)器上的移植能力,選取了3個(gè)最基本的操作作為本Flash文件系統(tǒng)與Flash存儲(chǔ)器設(shè)備的應(yīng)用接口:區(qū)塊擦除(Block_Erase)、頁(yè)面寫(xiě)入(Page_Write)、頁(yè)面讀出 ( Page _ Read )。這樣雖然可能會(huì)忽略某些Flash存儲(chǔ)器產(chǎn)品的獨(dú)有特性,但卻增加了所設(shè)計(jì)的Flash文件系統(tǒng)對(duì)不同F(xiàn)lash存儲(chǔ)器產(chǎn)品的適應(yīng)能力。另外,F(xiàn)lash存儲(chǔ)器寫(xiě)入的時(shí)間瓶頸并不在于數(shù)據(jù)傳遞,而是Flash存儲(chǔ)器內(nèi)部的擦除和寫(xiě)操作等待;Flash存儲(chǔ)器讀出的速度和微處理器處理數(shù)據(jù)的速度都很快,因此雖然將讀和寫(xiě)的基本單位擴(kuò)大到了頁(yè)面,但額外增加的操作時(shí)間是很短的。
2 Flash文件系統(tǒng)的基本結(jié)構(gòu)
本Flash文件系統(tǒng)在基本結(jié)構(gòu)上與MS-DOS的FAT文件系統(tǒng)類似[3]。MS-DOS是一個(gè)應(yīng)用了幾十年的商業(yè)化軟件產(chǎn)品,其FAT文件系統(tǒng)技術(shù)成熟、結(jié)構(gòu)簡(jiǎn)單、系統(tǒng)資源開(kāi)銷(xiāo)小,易于在嵌入式系統(tǒng)的硬件平臺(tái)上實(shí)現(xiàn)。本FLASH文件系統(tǒng)的基本結(jié)構(gòu)如圖1所示,整個(gè)文件系統(tǒng)包括如下幾個(gè)部分:
(1)系統(tǒng)記錄(SR, System Record) 存放媒質(zhì)信息和最重要的文件系統(tǒng)信息。媒質(zhì)信息諸如Flash存儲(chǔ)器的類型、容量,劃分成多少個(gè)區(qū)塊,每區(qū)塊包含多少個(gè)頁(yè)面等。文件系統(tǒng)信息包括版本信息、保留區(qū)塊的數(shù)目和位置、文件分配表和文件登記表所在的位置和大小、數(shù)據(jù)區(qū)域的位置和大小等。
(2)文件分配表(FAT, File Allocation Table) 存放著Flash存儲(chǔ)器上所有區(qū)塊的占用與空閑情況以及每個(gè)文件的存儲(chǔ)鏈接結(jié)構(gòu)。MS-DOS FAT文件系統(tǒng)中有12位、16位、32位三種不同的FAT格式??紤]到在微處理器上實(shí)現(xiàn)的方便性并權(quán)衡Flash文件系統(tǒng)應(yīng)用的規(guī)模,選擇將文件分配表固定為16位的格式。
(3)文件登記表(FRT, File Register Table) 存放著Flash文件系統(tǒng)中每一個(gè)文件的文件代號(hào)、文件長(zhǎng)度、文件屬性以及該文件的存儲(chǔ)鏈在文件分配表中的入口。考慮到嵌入式系統(tǒng)的應(yīng)用范圍,本Flash文件系統(tǒng)不支持子目錄結(jié)構(gòu)。
(4)數(shù)據(jù)區(qū)域(Data Area)用于存放文件的數(shù)據(jù)內(nèi)容。本Flash文件系統(tǒng)中,數(shù)據(jù)分配的最小單位是Flash存儲(chǔ)器的一個(gè)基本擦除單位,即一個(gè)物理區(qū)塊(Block)。本Flash文件系統(tǒng)提供:文件系統(tǒng)的格式化(Format)、文件的創(chuàng)建(Create)、刪除(Delete)、打開(kāi)(Open)、關(guān)閉(Close)、讀(Read)、寫(xiě)(Write)、文件指針的移動(dòng)(Seek)、位置讀取(Tell)等基本的功能。程序主體代碼以ANSI C語(yǔ)言寫(xiě)成,使用一個(gè)非常小的Flash存儲(chǔ)器設(shè)備驅(qū)動(dòng)接口,擴(kuò)展及移植的能力都比較好。
3 提高Flash文件系統(tǒng)的可靠性
在MS-DOS的FAT文件系統(tǒng)中,僅僅對(duì)數(shù)據(jù)區(qū)域提供壞損管理,而對(duì)于它的主引導(dǎo)記錄、文件分配表和根目錄這三個(gè)極重要的文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)卻未做任何保護(hù)(雖然MS-DOS的FAT文件系統(tǒng)中存在著兩張F(tuán)AT表,但是DOS只是簡(jiǎn)單地復(fù)寫(xiě)第二張F(tuán)AT表而從不使用它。一旦這三個(gè)區(qū)域的內(nèi)容出現(xiàn)一點(diǎn)失效,將必然導(dǎo)致文件數(shù)據(jù)的大量損失。另外,如果這些數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)區(qū)域發(fā)生物理性損壞,更會(huì)導(dǎo)致整張磁盤(pán)的報(bào)廢。這在由Flash存儲(chǔ)器占據(jù)很大成本比重的嵌入式應(yīng)用中,是非常不希望的。
歸結(jié)起來(lái),嵌入式系統(tǒng)中的Flash存儲(chǔ)器主要面臨兩大類不穩(wěn)定因素:一是Flash存儲(chǔ)器本身可能出現(xiàn)物理性的損壞;二是嵌入式系統(tǒng)面對(duì)較多的突發(fā)掉電與重啟動(dòng),造成Flash存儲(chǔ)器寫(xiě)操作的異常終止。
針對(duì)Flash存儲(chǔ)器的物理?yè)p壞問(wèn)題,除對(duì)文件數(shù)據(jù)區(qū)域提供壞損管理外,還將系統(tǒng)記錄、文件分配表和文件登記表這三個(gè)文件系統(tǒng)重要數(shù)據(jù)結(jié)構(gòu)采用浮動(dòng)位置的方法存儲(chǔ)。即不僅對(duì)文件數(shù)據(jù)存儲(chǔ)進(jìn)行動(dòng)態(tài)的分配管理,對(duì)于Flash文件系統(tǒng)中的這三個(gè)重要數(shù)據(jù)結(jié)構(gòu)也不固定其存儲(chǔ)位置。這樣可以避免因它們的存儲(chǔ)區(qū)域發(fā)生物理?yè)p壞造成整個(gè)文件系統(tǒng)失效。具體做法是:對(duì)于系統(tǒng)記錄定義一個(gè)系統(tǒng)記錄保留區(qū),將系統(tǒng)記錄存在這個(gè)區(qū)域內(nèi),確切的位置在文件系統(tǒng)初始化的時(shí)候通過(guò)標(biāo)識(shí)幻數(shù)(Magic Number)的方法掃描找到;而文件分配表和文件登記表則存放在文件數(shù)據(jù)區(qū)域內(nèi),通過(guò)系統(tǒng)記錄中的索引項(xiàng)找到。
針對(duì)Flash存儲(chǔ)器的寫(xiě)操作異常終止問(wèn)題,將系統(tǒng)記錄、文件分配表和文件登記表這三個(gè)對(duì)Flash文件系統(tǒng)最重要的數(shù)據(jù)結(jié)構(gòu)均進(jìn)行雙份的存儲(chǔ)以改善其安全性。在文件系統(tǒng)的操作中,程序?qū)γ恳粋€(gè)表結(jié)構(gòu)的兩個(gè)備份進(jìn)行順次修改,以此確保Flash存儲(chǔ)器上總是存有一整套完好的系統(tǒng)記錄表、文件分配表和文件登記表。在系統(tǒng)被啟動(dòng)運(yùn)行時(shí),文件系統(tǒng)會(huì)首先進(jìn)行自檢,通過(guò)這三個(gè)表結(jié)構(gòu)中的標(biāo)識(shí)幻數(shù),以及最開(kāi)頭和最末尾的更新序列號(hào)可以確定每一張表備份的合法性和時(shí)效性,判斷出前次系統(tǒng)關(guān)閉中存在著的操作異常終止并及時(shí)更正。通過(guò)這樣的設(shè)計(jì),即使文件系統(tǒng)在使用中出現(xiàn)了寫(xiě)操作異常終止的情況,錯(cuò)誤將只涉及當(dāng)時(shí)被操作的文件數(shù)據(jù),不會(huì)擴(kuò)散給FLASH文件系統(tǒng)中的其它文件,更不會(huì)因此損壞三個(gè)文件系統(tǒng)表結(jié)構(gòu),造成整個(gè)文件系統(tǒng)的徹底癱瘓。
通過(guò)以上兩個(gè)方面的改進(jìn),本Flash文件系統(tǒng)的可靠性相比于MS-DOS FAT文件系統(tǒng)有了很大的提高。從實(shí)驗(yàn)1和實(shí)驗(yàn)2的仿真結(jié)果可以看到,即使在Flash極不可靠和寫(xiě)操作異常終止頻發(fā)的最惡劣工作條件下,本Flash文件系統(tǒng)也能夠保持可靠工作,從而使之能夠適合于嵌入式系統(tǒng)的應(yīng)用。
4 降低Flash文件系統(tǒng)的資源消耗
嵌入式系統(tǒng)相對(duì)于通用計(jì)算機(jī)系統(tǒng)來(lái)講,往往有苛刻得多的成本要求,需要嵌入式系統(tǒng)盡可能低的系統(tǒng)資源配置。尤其對(duì)于Flash文件系統(tǒng)這種用于增強(qiáng)系統(tǒng)功能的服務(wù)性質(zhì)模塊,就更需要降低對(duì)系統(tǒng)資源的消耗,才能夠擴(kuò)大其使用的范圍。
就Flash文件系統(tǒng)的資源消耗來(lái)講,主要包括程序代碼開(kāi)銷(xiāo)、處理器占用時(shí)間、運(yùn)行時(shí)內(nèi)存開(kāi)銷(xiāo)以及額外的Flash存儲(chǔ)器消耗。其中,運(yùn)行時(shí)內(nèi)存開(kāi)銷(xiāo)最限制Flash文件系統(tǒng)的應(yīng)用,同時(shí)設(shè)計(jì)結(jié)構(gòu)的改善與運(yùn)行時(shí)內(nèi)存開(kāi)銷(xiāo)直接相關(guān)。所以針對(duì)資源消耗的結(jié)構(gòu)優(yōu)化主要著重于降低運(yùn)行時(shí)的內(nèi)存開(kāi)銷(xiāo)。
Flash存儲(chǔ)器的擦除單位是區(qū)塊(Block),這是本Flash文件系統(tǒng)中數(shù)據(jù)存儲(chǔ)分配的最小單元。如果不采用任何措施的話,運(yùn)行時(shí)內(nèi)存開(kāi)銷(xiāo)中將至少包括備份一個(gè)完整區(qū)塊數(shù)據(jù)的緩沖區(qū)。但一個(gè)Flash存儲(chǔ)器的區(qū)塊可能很大(Sumsung[TM] KM29U128是16KB),這在很多嵌入式系統(tǒng)中都是過(guò)大的資源開(kāi)銷(xiāo)(最通用的8位微處理器MCS-51系列,總線尋址的能力只有64KB),必須進(jìn)行改進(jìn)。
為此,采用交換緩沖區(qū)(Swap Buffer)技術(shù)來(lái)解決這個(gè)困難。當(dāng)需要準(zhǔn)備某一個(gè)區(qū)塊的數(shù)據(jù)時(shí),并不直接向該區(qū)塊寫(xiě)入,而是首先擦除用于做交換緩沖區(qū)的區(qū)塊,然后逐步向交換緩沖區(qū)填入目的數(shù)據(jù)內(nèi)容。因?yàn)榇藭r(shí),任何有用數(shù)據(jù)內(nèi)容都未被破壞,所以運(yùn)行內(nèi)存中的緩沖就可以做得比較小。當(dāng)交換緩沖區(qū)填寫(xiě)完成后,再擦除目的區(qū)塊,拷貝交換緩沖區(qū)內(nèi)容到目的區(qū)塊。
采用交換緩沖區(qū)后,對(duì)內(nèi)存中的緩沖區(qū)大小沒(méi)有特別要求,考慮到Flash存儲(chǔ)器的操作特性,選取Flash存儲(chǔ)器的頁(yè)面(Page)容量作為內(nèi)存緩沖區(qū)大小。在結(jié)構(gòu)上作了上述改進(jìn)后,雖然大大降低了Flash文件系統(tǒng)的運(yùn)行時(shí)內(nèi)存消耗,但代價(jià)是將一個(gè)數(shù)據(jù)區(qū)塊的寫(xiě)入時(shí)間延長(zhǎng)了一倍。不過(guò)一般的Flash存儲(chǔ)器中都有一特別制作的區(qū)塊,該區(qū)塊保證不會(huì)損壞,正好適用做交換緩沖區(qū)。這樣就可以省去中間交換緩沖過(guò)程的數(shù)據(jù)完整性檢驗(yàn),加快寫(xiě)操作的速度。 表1給出了在與MCS-51兼容的微處理器上本Flash文件系統(tǒng)實(shí)例,對(duì)Sumsung KM29U128 Flash存儲(chǔ)器(16KB/Block
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車(chē)電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論