《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 嵌入式系統(tǒng)中基于閃存平臺(tái)的存儲(chǔ)管理策略
嵌入式系統(tǒng)中基于閃存平臺(tái)的存儲(chǔ)管理策略
來源:電子技術(shù)應(yīng)用2010年第5期
李建勛,樊曉光,,禚真福
空軍工程大學(xué) 工程學(xué)院,,陜西 西安710038
摘要: 開發(fā)了一個(gè)基于閃存平臺(tái)的嵌入式文件系統(tǒng),。為保證閃存扇區(qū)的平均使用率和均衡擦寫次數(shù),,引入了損壞管理策略,,在這種策略中采用了動(dòng)態(tài)存儲(chǔ)空間管理模式和先入先出(FIFO)策略,。所采用的冗余設(shè)計(jì)、快速計(jì)算和跟蹤策略還可以延長核心扇區(qū)使用壽命,,保證系統(tǒng)啟動(dòng)可靠的服務(wù),。
中圖分類號(hào): TP302.1
文獻(xiàn)標(biāo)識(shí)碼: A
Storage management strategy of flash-based platform in embedded system
LI Jian Xun,F(xiàn)AN Xiao Guang,,ZHUO Zhen Fu
Engineering College ,Air Force Engineering University,Xi′an 710038,,China
Abstract: In this paper, a specified file system adapted to embedded system with flash-based memory is developed. To guarantee the average usage of flash storage sectors, the strategy of wear leveling and adaptive damage management is introduced, in which a dynamic storage space management mode and the strategy of first in first out (FIFO) are adopted. Moreover, the strategy of redundancy design and fast-calculation and tracing is also adopted to extend the life of kernel sector, which can guarantee the reliable ser-vice of system booting.
Key words : storage management;embedded system,;flash,;sectors;flash file system

    在嵌入式系統(tǒng)中,,由于閃存成本低,、容量大、非易失,、訪問速度高和機(jī)械故障少的優(yōu)勢已逐漸成為最流行的存儲(chǔ)大量數(shù)據(jù)的存儲(chǔ)器,。然而,閃存常見的用法是簡單的流模式,,它沒有提供文件的存儲(chǔ)和管理功能,。解決問題的方法是建立一個(gè)管理存儲(chǔ)空間和數(shù)據(jù)信息的文件系統(tǒng)。目前,,商用閃存文件系統(tǒng)(FFS)通常是與DOS兼容,,這將產(chǎn)生一個(gè)復(fù)雜的文件目錄[1],這種系統(tǒng)不實(shí)用且浪費(fèi)資源,。
    由于嵌入式系統(tǒng)軟硬件的限制,,在應(yīng)用于通用計(jì)算機(jī)系統(tǒng)的標(biāo)準(zhǔn)文件系統(tǒng)(例如用于Win32/DOS的FAT和用于Linux的EXT)時(shí),必須進(jìn)行相應(yīng)修改以適應(yīng)嵌入式環(huán)境,。在通用的文件系統(tǒng)趨向于簡單化和專業(yè)化的進(jìn)程中,研究主要集中在以下幾個(gè)方面[2,,3]:在一個(gè)小的高速存儲(chǔ)器上實(shí)現(xiàn)嵌入式系統(tǒng)處理速度和有限資源的平衡,;實(shí)現(xiàn)特定性能,如用于滿足不同的嵌入式應(yīng)用環(huán)境的數(shù)據(jù)加密和運(yùn)行的可靠性的功能,;提高嵌入式系統(tǒng)的實(shí)時(shí)性能,。事實(shí)上,不少嵌入式系統(tǒng)是根據(jù)客戶的特殊要求定做的,。針對(duì)這種情況,,開發(fā)了具有高可靠性的簡化嵌入式閃存文件系統(tǒng),與復(fù)雜的商用文件系統(tǒng)相比,,這個(gè)嵌入式計(jì)算機(jī)數(shù)值控制系統(tǒng)更實(shí)用,。
1 FFS存儲(chǔ)結(jié)構(gòu)和框架
    嵌入式系統(tǒng)中閃存有以下特點(diǎn):(1)閃存以扇區(qū)為單位執(zhí)行,如果修改扇區(qū)內(nèi)1 B的數(shù)據(jù),則整個(gè)扇區(qū)的數(shù)據(jù)都將被重寫,;(2)通常任一扇區(qū)可重寫大約0.1~1萬次,;(3)損壞扇區(qū)難免。在計(jì)算機(jī)數(shù)控系統(tǒng)中應(yīng)用了閃存特性和局部處理程序訪問特征,,在邏輯上非結(jié)構(gòu)化的數(shù)據(jù)流模式被應(yīng)用到FFS,,在物理上存儲(chǔ)空間以扇區(qū)為基礎(chǔ)分成不同的塊[4]。閃存文件系統(tǒng)(FFS)不僅提供了根據(jù)文件名查找和訪問文件,,使得有限的存儲(chǔ)空間得到合理和充分利用,,而且還提供基于存儲(chǔ)內(nèi)容的擦寫策略損壞扇區(qū)的適應(yīng)性管理,因此,,在某種程度上FFS的可靠性有所提高,。
    為了使閃存文件系統(tǒng)在不同的平臺(tái)上更易于進(jìn)行維護(hù)、升級(jí)和移植,,基于Madnick分層模型設(shè)計(jì)了一個(gè)文件系統(tǒng)分層結(jié)構(gòu),。圖1所示的文件系統(tǒng)包括2個(gè)主要部分:文件管理單元和存儲(chǔ)空間管理單元。較低層為上層部分提供服務(wù),。每一層僅涉及接口,,而不是更低或上層內(nèi)部結(jié)構(gòu)。

2 存儲(chǔ)空間管理
    作為嵌入式系統(tǒng)的一部分,,閃存存儲(chǔ)管理的主要功能包括提高使用效率,、加快執(zhí)行速度和根據(jù)其物理特性使用特殊算法管理閃存內(nèi)存單元的使用頻率[5]。存儲(chǔ)空間管理單元在邏輯上由3個(gè)層次組成:文件物理層,、存儲(chǔ)設(shè)備分配層和閃存驅(qū)動(dòng)層[6],。閃存驅(qū)動(dòng)層為上層提供最基本的驅(qū)動(dòng)程序,如下:

2.1 存儲(chǔ)扇區(qū)管理
    本文開發(fā)的FFS存儲(chǔ)結(jié)構(gòu)類似于MS-DOS的FAT,,是FAT系統(tǒng)的修改,。圖2顯示了一系列模式的基本存儲(chǔ)結(jié)構(gòu)。

    系統(tǒng)記錄區(qū)(SRA)存儲(chǔ)介質(zhì)信息和最重要的文件系統(tǒng)信息,,如閃存類型,、容量、扇區(qū)數(shù)和扇區(qū)利用現(xiàn)狀,。這個(gè)扇區(qū)的利用狀況包括文件數(shù),、未使用的扇區(qū)數(shù)、損壞扇區(qū)數(shù),、第一個(gè)和最后一個(gè)未使用的扇區(qū)編號(hào),。圖3顯示了在SRA上的內(nèi)存分配。文件信息區(qū)域(FIA)用于存儲(chǔ)文件的詳細(xì)信息,,如文件名,、文件類型、文件大小、文件屬性和閃存鏈表項(xiàng),。程序數(shù)據(jù)區(qū)(PDA)用于存儲(chǔ)程序數(shù)據(jù),。在圖2陰影部分是每個(gè)區(qū)域損壞的扇區(qū)。如果損壞的扇區(qū)數(shù)達(dá)到給定界限值,,警報(bào)將自動(dòng)啟動(dòng),。圖3為SRA上的內(nèi)存分配情況,不同部分存儲(chǔ)特定的記錄信息:1為閃存內(nèi)存類型,;2為閃存內(nèi)存容量,;3為扇區(qū)數(shù);4為文件數(shù),;5為未使用扇區(qū)數(shù),;6為損壞的扇區(qū)數(shù);7為最后一次寫入FIA的扇區(qū)組數(shù),;8為第一個(gè)未使用扇區(qū)號(hào),;9為最后未使用扇區(qū)號(hào);10為系統(tǒng)記錄控制的關(guān)鍵字,;11為下一個(gè)要寫入的扇區(qū)號(hào),。

    不同的系統(tǒng)有不同的存儲(chǔ)空間管理模式,最簡單的可能是一個(gè)命令模式,,但它并不適用于某些特殊應(yīng)用,。例如,在計(jì)算機(jī)數(shù)控系統(tǒng)中使用命令模式,,用戶不方便編輯,、修改或者刪除由各種機(jī)器處理指令組成的G代碼程序。另一個(gè)常用的方式是靜態(tài)存儲(chǔ)模式,,這意味著每一個(gè)文件分配固定的扇區(qū)數(shù),。在這種情況下,如果文件大小超過了給定的空間,,雖然仍有未使用的扇區(qū),,但寫操作卻不能成功完成。同樣,,小文件顯然將導(dǎo)致存儲(chǔ)空間浪費(fèi)。此外,,由于過度頻繁地訪問同一個(gè)文件,,與其他的扇區(qū)相比這樣的扇區(qū)更易于損壞。因此,,靜態(tài)存儲(chǔ)模式不是一個(gè)很好的選擇,。
    為了克服這些問題,提出了一個(gè)動(dòng)態(tài)存儲(chǔ)空間管理模式,采用平均擦除和寫入策略,。先入先出(FIFO)的引入,,保證了閃存存儲(chǔ)扇區(qū)的平均使用。當(dāng)系統(tǒng)第一次加電,,未使用的扇區(qū)都初始化為一個(gè)雙鏈表,。此后,這些扇區(qū)應(yīng)該從鏈表頭節(jié)點(diǎn)轉(zhuǎn)到尾節(jié)點(diǎn),。這樣,,在訪問每個(gè)扇區(qū)的頻率將趨于平等,每個(gè)扇區(qū)將不會(huì)過度頻繁讀取/寫入,。假設(shè)鏈表有N個(gè)節(jié)點(diǎn),,每個(gè)扇區(qū)訪問的概率只有1/N,因此,,閃存的使用壽命可以明顯延長,。
    相對(duì)而言,基于MS-DOS的FAT系統(tǒng)只為數(shù)據(jù)區(qū)提供損害管理,,卻忽視了文件系統(tǒng)結(jié)構(gòu)區(qū)域,。相對(duì)地,SRA作為FFS結(jié)構(gòu)區(qū)域,,由于存儲(chǔ)了系統(tǒng)關(guān)鍵信息而成為最重要的區(qū)域,。而且,由于頻繁訪問,, SRA往往更易損壞,。因此,這一區(qū)域應(yīng)當(dāng)運(yùn)用一種安全策略,。根據(jù)在SRA,、FIA和PDA存放的數(shù)據(jù)的重要性不同,不同存儲(chǔ)區(qū)域應(yīng)當(dāng)分配不同的可靠性要求,。因此,,可以充分利用閃存存儲(chǔ)能力,寫校驗(yàn)時(shí)間將會(huì)減少,,從而寫速度將有所改善,。
2.2 SRA的平均擦除和寫入管理
    為了實(shí)現(xiàn)對(duì)System record area(SRA)平均擦除和寫管理,避免由系統(tǒng)記錄扇區(qū)物理損傷而導(dǎo)致整體系統(tǒng)的故障,,SRA被平均劃分成3個(gè)小組,。3組依次進(jìn)行寫操作,可以為系統(tǒng)記錄存儲(chǔ)安全提供一個(gè)冗余策略,,從而提高系統(tǒng)的可靠性,,延長系統(tǒng)壽命,。這對(duì)于每次在系統(tǒng)通電之后獲取SRA代碼值是必要的。由系統(tǒng)記錄關(guān)鍵字(SysKeyword)控制的值,,標(biāo)記著系統(tǒng)關(guān)閉前最后一次寫操作的系統(tǒng)扇區(qū)的執(zhí)行記錄,,它顯示為:
   
    在系統(tǒng)初始化時(shí),SRA中每組的相應(yīng)系統(tǒng)變量關(guān)鍵字(1~3)初始化為0,。在后續(xù)操作中,,各組關(guān)鍵字(SysKeyword)的真實(shí)值應(yīng)該更新,在系統(tǒng)每次啟動(dòng)時(shí)分別從SRA讀出,。因此,,SysCodeValue的值可根據(jù)式(1)得到。執(zhí)行最后一次寫操作的組號(hào)可以通過調(diào)用函數(shù)GetLastGroup-Num()獲得,。一旦SRA的記錄數(shù)據(jù)被更改,,系統(tǒng)關(guān)鍵字應(yīng)該相應(yīng)更新。然后包括SysKeyword的記錄數(shù)據(jù),,應(yīng)寫入到根據(jù)以下方法獲得的相應(yīng)扇區(qū),。

    下一次將被寫入的該系統(tǒng)記錄扇區(qū)的組號(hào)與轉(zhuǎn)移的參量LastGroupNum可以通過調(diào)用函數(shù)GetNextGroupNum(Uchar LastGroupNum)共同獲得。SysCodeValue的值將更新如下:
    SysCodeValue=SysCodeValue∧2NextGroupNum-1   (2)
    通過組合式(1)和式(2)可以得到每組SysKeyword的值,,因此,,可以迅速查出最新和最舊的記錄。該方法是一種快速計(jì)算和跟蹤策略,,這樣,,根據(jù)得到的組號(hào)和SysKeyword的值,寫操作可以順利執(zhí)行,。
    該系統(tǒng)記錄扇區(qū)的詳細(xì)參數(shù)值如表1所示,。

3 文件管理
    文件管理層(FML)封裝了整個(gè)文件系統(tǒng),并且為操作系統(tǒng)和上層的應(yīng)用程序提供統(tǒng)一標(biāo)準(zhǔn)的程序接口(APIs),。用戶操作請求將被APIs移交到文件的邏輯層(FLL),,然后將請求發(fā)送到文件的物理層(FPL)。
3.1 文件編輯
    文件系統(tǒng)應(yīng)提供友好的用戶界面,,用戶可以操作文件,,無需考慮文件的結(jié)構(gòu)或物理位置。圖4顯示編輯一個(gè)存儲(chǔ)在閃存的文件流程圖,。首先要遍歷文件信息鏈表,,根據(jù)文件名來查找存儲(chǔ)此文件信息的節(jié)點(diǎn)。因此,,該文件存儲(chǔ)空間的第一個(gè)扇區(qū)可獲取,,后續(xù)扇區(qū)依次獲取。然后,,每個(gè)扇區(qū)將逐個(gè)讀取,,數(shù)據(jù)將被寫入緩沖區(qū)。通過建立一個(gè)雙鏈表顯示數(shù)據(jù),,然后通過人機(jī)界面進(jìn)行編輯操作,。最后,將修改后的數(shù)據(jù)寫回到閃存,,文件信息和系統(tǒng)記錄將自動(dòng)更新,。

3.2 文件存儲(chǔ)和文件刪除
    連續(xù)的文件存儲(chǔ)結(jié)構(gòu)模式(如圖5中的文件N005和N011)在存儲(chǔ)前,文件通常被劃分成為大小相等的多個(gè)數(shù)據(jù)塊(除最后一個(gè)塊的大小可能小于其他塊),。塊的數(shù)量是由文件和塊大小決定,,而塊的大小與存儲(chǔ)介質(zhì)有關(guān)。在本文中,,閃存的存儲(chǔ)單元(即扇區(qū))為256 B,,因此,該塊的大小建議不超過256 B,。在這里,,把文件劃分為252 B大小的塊,每個(gè)數(shù)據(jù)塊占用一個(gè)扇區(qū)的存儲(chǔ)空間,。因此,,塊的數(shù)量(即被占用的扇區(qū)數(shù))可以計(jì)算出,這是最低整數(shù)不少于文件字節(jié)大小除以塊字節(jié)大小所得的商數(shù),。然后未使用的扇區(qū)鏈表的頭節(jié)點(diǎn)作為這個(gè)文件存儲(chǔ)空間的第一個(gè)扇區(qū),。緊隨第一個(gè)扇區(qū),很多未使用的扇區(qū)被取出后,,整個(gè)文件的存儲(chǔ)空間可用,。因此,該文件成功保存,。

    閃存的地址空間不允許隨意被刪除,,刪除一個(gè)文件時(shí)必須把扇區(qū)作為一個(gè)刪除單元。因此,,刪除一個(gè)文件,,要使用與編輯操作相同的手段獲得該文件節(jié)點(diǎn)的存儲(chǔ)信息,這樣文件的信息可以使用,。有了文件信息,,文件的存儲(chǔ)空間的第一個(gè)扇區(qū)可以得到,其他的也可以依次得到,。然后未使用的扇區(qū)鏈表上的扇區(qū)可以通過調(diào)用函數(shù)FreeSect(Ulong SectNum)釋放第一個(gè)扇區(qū),。最后,根據(jù)雙鏈表的原則,,這個(gè)節(jié)點(diǎn)將被刪除,。
    圖5為一個(gè)文件創(chuàng)建和刪除過程的示例,。要?jiǎng)?chuàng)建一個(gè)文件(文件名為N005,大小為912 B,,第一個(gè)扇區(qū)是5號(hào)),,未使用扇區(qū)鏈表的頭節(jié)點(diǎn)作為這個(gè)文件的存儲(chǔ)空間的第一個(gè)扇區(qū)(扇區(qū)號(hào)為5)。同時(shí),,在文件信息鏈表的尾節(jié)點(diǎn)寫文件信息,。這個(gè)文件的存儲(chǔ)扇區(qū)數(shù)可以計(jì)算出來,結(jié)果被證明是4,。然后,,從未使用的扇區(qū)鏈表頭部,4個(gè)扇區(qū)依次用于存儲(chǔ)文件數(shù)據(jù),。從而,,文件信息和系統(tǒng)記錄更新后,文件的創(chuàng)建操作完成,。
    要?jiǎng)h除文件(文件名是N011,,文件大小為2 026 B,第一個(gè)扇區(qū)編號(hào)為6),,根據(jù)文件名N011,,通過遍歷文件信息鏈表獲取文件信息節(jié)點(diǎn),根據(jù)存儲(chǔ)在此節(jié)點(diǎn)文件信息,,可以獲得文件大小和存儲(chǔ)空間項(xiàng)(即文件的第一個(gè)扇區(qū)),。扇區(qū)數(shù)目也可以計(jì)算出來。由于指針?biāo)饕赶蛳乱粋€(gè)節(jié)點(diǎn),,每個(gè)扇區(qū)被釋放,,并連接到未使用扇區(qū)鏈表尾節(jié)點(diǎn)。最后的操作是從文件信息鏈表刪除這個(gè)節(jié)點(diǎn),。與此同時(shí),,文件信息和系統(tǒng)的記錄應(yīng)該更新。
    通過在一個(gè)嵌入式計(jì)算機(jī)數(shù)控系統(tǒng)上的有效且成功應(yīng)用充分展示了FFS的良好性能,。這個(gè)FFS經(jīng)過略微的修改即可在不同的嵌入式平臺(tái)上進(jìn)行移植,,且具有一定的普遍性。
    為了提高存儲(chǔ)和管理嵌入式平臺(tái)上文件數(shù)據(jù)的性能,,本文提出了一種新的應(yīng)用于閃存文件系統(tǒng)(FFS)的策略,,其特點(diǎn)可以描述如下:
    (1)減少寫周期提高寫入速度。
    (2)采用動(dòng)態(tài)分配存儲(chǔ)空間,,提高利用效率和延長閃存的使用壽命,。
    (3)相應(yīng)的文件被刪除后,存儲(chǔ)扇區(qū)可以很快被釋放,,并可以連接到未使用的扇區(qū)鏈表,。
    (4)當(dāng)損壞扇區(qū)的數(shù)量到達(dá)設(shè)置值時(shí)自動(dòng)報(bào)警,,確保系統(tǒng)處于良好狀態(tài)。
    (5)FAT分配的內(nèi)存空間存儲(chǔ)指針以數(shù)組的形式作為全局變量,。
    (6)為延長內(nèi)核扇區(qū)壽命確保系統(tǒng)啟動(dòng)可靠服務(wù),,采用冗余設(shè)計(jì)、快速計(jì)算和追蹤策略,。
    因此,本文中的FFS,,特別是在可靠性,、存儲(chǔ)效率和良好的可移植性方面已獲得明顯的成效。
參考文獻(xiàn)
[1] ZHAO Kui,,ZHANG Fan.A storage management scheme for embedded system[J].Technological Development of Enterprise,,2005,24(1):23-26.
[2] 周興德,,孟曉風(fēng).實(shí)時(shí)系統(tǒng)軟件設(shè)計(jì)方法[J].計(jì)算機(jī)自動(dòng)測量與控制,,2000(4-6).
[3] NOERGAARD T.Embedded systems architecture:a comprehensive guide for engineers and programmers[M].Newnes,USA,,2005:369-412.
[4] ROSENBLUM M,,OUSTERHOUT J K.The design and implementation of a log-structured file system[J].ACM Transactions on Computer Systems(TOCS),1992,,10(1):26-52.
[5] Kim Han Joon,,Lee Sang Goo.A new flash memory management for flash storage system[C].In:Proceedings of the  TwentyThird Annual International Computer Software and Applications Conference.IEEE Computer Society,Washington  DC,,USA,,1999:284-289.
[6] WANG Tao.Research on developing platform for CNC system based on MCX314 motion control chip[D].School of  Mechanical Engineering,,Tianjin University,,Tianjin,China,,2005.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。