專利名稱:基于nand閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及使用嵌入式文件系統(tǒng)的各個嵌入式產(chǎn)品,特別是涉及一種基于 NAND閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡的方法。
背景技術(shù):
由于嵌入式設(shè)備體積小,所以不能使用硬盤作為存儲器,而閃存憑借其存 取速度快、存儲容量大、價格低廉等優(yōu)點,成為了嵌入式系統(tǒng)中廣泛采用的主 流存儲器。閃存按照存儲矩陣結(jié)構(gòu)的不同分為NOR型和NAND型兩種。NAND (一種目前主要的非易失閃存技術(shù),適用于大容量消除和寫入的速度快,但只能 讀取塊單位,隨機(jī)讀取慢)型閃存強(qiáng)調(diào)降低每比特的成本,更高的性能,并且 像磁盤一樣可以通過接口輕松升級,是高密度數(shù)據(jù)存儲的理想解決方案,被大 量應(yīng)用于移動存儲設(shè)備、移動媒體設(shè)備和嵌入式設(shè)備中。閃存的壽命是有限的, 其壽命的長短是由擦寫塊的最大可擦除次數(shù)決定的,NAND閃存的最大可擦除 次數(shù)大約為100萬次左右。由于任何一個擦寫塊達(dá)到擦除次數(shù)的上限時,整個 閃存都將無法使用。所以為了延長閃存的使用壽命,避免由于某個擦寫塊被過 度擦寫而使得整個閃存無法使用,應(yīng)該在盡量小的性能影響下使擦寫操作均勻 的分布在每個擦寫塊上。這個過程就叫做損耗均衡。
目前可用于NAND型閃存的文件系統(tǒng)包括集中索引的文件系統(tǒng)和專門為 NAND閃存設(shè)計的文件系統(tǒng)。集中索引的文件系統(tǒng)是磁盤存儲器中常用的文件 系統(tǒng),主要包括基于Windows的FAT系列和基于Linux的Ext系列。由于閃存 設(shè)備能夠通過閃存轉(zhuǎn)譯層FTL (Flash Translation Layer)驅(qū)動來模擬成與磁盤相 似的塊設(shè)備,所以該類文件系統(tǒng)可以直接基于FTL在閃存上應(yīng)用。在閃存中采 用集中索引的文件系統(tǒng)存在下面的兩個問題:①集中索引的文件系統(tǒng)采用"覆寫" 的方式更新數(shù)據(jù),而在閃存中"覆寫"需要先擦除才能寫入,如果在數(shù)據(jù)被擦除后 系統(tǒng)發(fā)生斷電,可能會導(dǎo)致數(shù)據(jù)的丟失;②集中索引的文件系統(tǒng)索引與數(shù)據(jù)分 開存放,而索引的更新頻率遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)部分的更新頻率,所以不能很好的實 現(xiàn)損耗均衡。
基于上面的兩個問題,所以針對NAND閃存設(shè)計了專門的文件系統(tǒng)YAFFS (Yet Another Flash File-System)。到目前為止,YAFFS系列是唯一專門針對 NAND閃存而設(shè)計的文件系統(tǒng)。YAFFS系列有YAFFS和YAFFS2兩個版本。 為了解決集中索引文件系統(tǒng)中的問題①,YAFFS中采用了日志的概念,不再采 用"覆寫"的更新方式,而是采用"前向?qū)懭?的方式。針對問題②,YAFFS采用 一種多策略混合的算法來進(jìn)行垃圾回收,將貪心策略和隨機(jī)選擇策略分別用在 不同的情況下。這種算法的優(yōu)點是對更新頻繁的數(shù)據(jù)能夠很好的實現(xiàn)了損耗均 衡;缺點是沒有考慮占用大部分存儲空間的靜態(tài)數(shù)據(jù)的損耗均衡。所以,YAFFS 不能實現(xiàn)整個閃存器件的損耗均衡。
因此,如果能實現(xiàn)嵌入式文件系統(tǒng)中靜態(tài)數(shù)據(jù)的損耗均衡算法,對于延長 閃存的使用壽命是很有意義的。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于NAND閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡 的方法。
本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下
1) 將整個的NAND閃存的擦除塊分為空閑塊、干凈塊、臟塊、壞塊四種; 空閑塊表示擦除塊上面所有的頁面都是空閑的,可直接進(jìn)行分配;干凈塊表示 擦除塊上面的所有數(shù)據(jù)均有效;臟塊表示擦除塊上至少含有一頁由于數(shù)據(jù)更新 或者文件刪除留下的無效數(shù)據(jù);壞塊包括出廠時的固有壞塊和使用過程中產(chǎn)生 的壞塊;文件系統(tǒng)以鏈表的形式管理各種擦除塊,形成了四種鏈表空閑塊鏈 表,干凈塊鏈表,臟塊鏈表、壞塊鏈表;空閑塊鏈表按照擦除次數(shù)由小到大對 擦除塊進(jìn)行鏈接;
2) 設(shè)定閾值TH;文件系統(tǒng)在垃圾回收操作被觸發(fā)時,讀取干凈塊鏈表中所 有擦除塊的附加區(qū)字段中的擦除次數(shù)字段EraSe_Nmn,從中找出擦除次數(shù)最大 的擦除塊和擦除次數(shù)最小的擦除塊;然后將擦除次數(shù)最大的擦除塊和擦除次數(shù) 最小的擦除塊做差,如果差值2TH,便斷定擦除次數(shù)最小的擦除塊上存儲的是靜 態(tài)數(shù)據(jù),靜態(tài)數(shù)據(jù)更新的頻率非常低,需要對靜態(tài)數(shù)據(jù)進(jìn)行搬移操作;
3) 將擦除次數(shù)最大的塊記為A,擦除次數(shù)最小的塊記為B;從空閑塊鏈表中 選取一塊,將A擦除塊上的數(shù)據(jù)復(fù)制到空閑塊上;然后對A擦除塊進(jìn)行擦除操 作,然后將B擦除塊上面的數(shù)據(jù)復(fù)制到A擦除塊上面;然后將B擦除塊放到臟 塊鏈表中,對B擦除塊進(jìn)行擦除后用于存放更新頻繁數(shù)據(jù)。
本發(fā)明與背景技術(shù)相比,具有的有益的效果是-
本發(fā)明是一種用于實現(xiàn)基于NAND閃存的文件系統(tǒng)中靜態(tài)數(shù)據(jù)的損耗均衡 方法。它通過設(shè)定閾值,識別靜態(tài)數(shù)據(jù)塊,然后對識別出的靜態(tài)數(shù)據(jù)塊和擦除 次數(shù)較大的數(shù)據(jù)塊進(jìn)行搬移操作。即先從空閑塊中找出擦除次數(shù)最大的擦除塊,
將靜態(tài)數(shù)據(jù)從原來的擦除塊移動到該塊上,并對原來的擦除塊進(jìn)行擦除然后將 其插入到空閑塊中用來存儲動態(tài)數(shù)據(jù)。這樣便可以平衡靜態(tài)數(shù)據(jù)塊與動態(tài)數(shù)據(jù) 塊的擦除次數(shù),從而取得整個閃存器件的損耗均衡。
圖1是實驗得到的加入靜態(tài)數(shù)據(jù)損耗均衡方法的狀態(tài)圖。
圖2是實驗得到的未加入靜態(tài)數(shù)據(jù)損耗均衡方法的狀態(tài)圖。 圖3是兩者的均衡方法的比較圖。圖中線A代表未加入靜態(tài)數(shù)據(jù)損耗均衡 方法的狀態(tài),線B代表加入靜態(tài)數(shù)據(jù)損耗均衡方法的狀態(tài)。
具體實施例方式
下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步說明。
本發(fā)明提出的用于實現(xiàn)基于NAND閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡的方 法應(yīng)用于使用嵌入式文件系統(tǒng)的嵌入式產(chǎn)品中。本方法的使用是以Blackfm531 為系統(tǒng)目標(biāo)板,采用的嵌入式操作系統(tǒng)是uClinux,步驟進(jìn)行如下
一、 配置交叉編譯環(huán)境
1. 獲得開發(fā)工具安裝包;
2. 用root登陸,安裝開發(fā)工具;
3. 配置超級終端;
4. 編譯uClinux內(nèi)核,加入對包含本方法的文件系統(tǒng)的支持。
(1) 在內(nèi)核中加入平臺編譯信息;
(2) 在fs目錄下建立一個目錄,把本方法所在的文件系統(tǒng)的相關(guān)文件拷到目 錄中去;
(3) 新建一個Makefile,加入以下命令
(4) 修改fs目錄下面Kconfig和Makefile,把本方法所在的文件系統(tǒng)連接進(jìn)
去
(5) 加入NAND閃存分區(qū)信息;
(6) 編譯內(nèi)核。
二、 搭建目標(biāo)平臺
1、 將Blackfin531目標(biāo)板的JTAG 口與計算機(jī)并口相連,串口、網(wǎng)線與主機(jī)
連好;
2、 編譯bootloaden
3 、 Visual DSP中通過JTAG將bootloader燒入目標(biāo)板;
4、通過使用bootloader中的命令將之前編譯好的內(nèi)核鏡像下載到目標(biāo)板。
三、當(dāng)前文件系統(tǒng)中存放的文件的特點大多數(shù)文件是一些小文件,但是 大文件占用了大部分的存儲空間。按照這個特點,文件系統(tǒng)中存放占據(jù)閃存大
部分空間的只讀靜態(tài)數(shù)據(jù)文件3個,大小分別為1M、 IOM、 16M;存放300 個小文件,其容量不超過IOK。其中靜態(tài)數(shù)據(jù)文件被訪問的概率為20%,小文 件被訪問的概率為80%。
四、實施方法FMNFS中采用的方法是通過設(shè)定閾值,記為TH,識別并搬 移靜態(tài)數(shù)據(jù)塊和擦除次數(shù)較大的數(shù)據(jù)塊,從而取得整個閃存器件的損耗均衡。
對于損耗均衡算法中用到的閾值TH,它的意思是有效數(shù)據(jù)擦除塊中最大擦 除次數(shù)與最小擦除次數(shù)之間的差值的下限,當(dāng)差值大于TH時便對靜態(tài)數(shù)據(jù)進(jìn)行 搬移操作。由于靜態(tài)數(shù)據(jù)通常都比較大,所以太頻繁的進(jìn)行搬移操作對系統(tǒng)的 效率會產(chǎn)生嚴(yán)重的影響,所以TH不可以過小。通常TH的值被設(shè)為200-500
之間的某個值效果比較好。
在垃圾回收操作被觸發(fā)時,讀取干凈塊鏈表中所有擦除塊的附加區(qū)字段中 的擦除次數(shù)字段Emse一Num,從中找出擦除次數(shù)最多的擦除塊和擦除次數(shù)最少 的塊。然后將兩者做差,如果差值^設(shè)定的閾值時,便可以斷定擦除次數(shù)最小 的擦除塊上存儲的是靜態(tài)數(shù)據(jù),其更新的頻率非常低,需要對其進(jìn)行搬移操作。 同時,由于這些靜態(tài)數(shù)據(jù)通常都比較大,其所占用的擦除塊的數(shù)量也比較多, 而且都是連續(xù)的,所以滿足"Erase—Nmt^-最小擦除次數(shù)"條件的擦除塊多于1。 因此,為了更好的實現(xiàn)擦除均衡需要在搬移完一個塊后需要再次掃描干凈塊鏈 表,找出擦除次數(shù)最大的擦除塊。其具體的做法可以分為以下幾步
(1) 掃描干凈塊列表,找出擦除次數(shù)最大和擦除次數(shù)最小的塊,擦除次數(shù) 分別記為Erase—Max和Erase—Min。同時將他們所在的塊分別記為A和B。
(2) 對Erase—Min禾Q Erase—Max ^f故差。如果I Erase—Max — Erase_Min I > TH,說明B擦除塊存放的是靜態(tài)數(shù)據(jù),需要對其進(jìn)行搬移操作;
(3) 從空閑塊鏈表中選取一塊,將A擦除塊上的數(shù)據(jù)復(fù)制到空閑塊上;然 后對A擦除塊進(jìn)行擦除操作,然后將B擦除塊上面的數(shù)據(jù)復(fù)制到A擦除塊上面; 然后將B擦除塊放到臟塊鏈表中,對其進(jìn)行擦除后用于存放更新頻繁數(shù)據(jù)。 重復(fù)(1)、 (2)、 (3)的步驟,直到"I Erase—Max - Erase—Min |》TH"不滿足, 即所有的靜態(tài)數(shù)據(jù)全部搬移完為止。
然后對NAND閃存的2500個擦除塊不斷的進(jìn)行擦除操作,得到如圖1所示 的損耗均衡情況。圖2顯示了未考慮靜態(tài)數(shù)據(jù)損耗均衡的狀態(tài)圖,圖3是兩者 的均衡方法的比較圖。
權(quán)利要求
1.一種基于NAND閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡的方法,其特征在于該方法的步驟如下1)將整個的NAND閃存的擦除塊分為空閑塊、干凈塊、臟塊、壞塊四種;空閑塊表示擦除塊上面所有的頁面都是空閑的,可直接進(jìn)行分配;干凈塊表示擦除塊上面的所有數(shù)據(jù)均有效;臟塊表示擦除塊上至少含有一頁由于數(shù)據(jù)更新或者文件刪除留下的無效數(shù)據(jù);壞塊包括出廠時的固有壞塊和使用過程中產(chǎn)生的壞塊;文件系統(tǒng)以鏈表的形式管理各種擦除塊,形成了四種鏈表空閑塊鏈表,干凈塊鏈表,臟塊鏈表、壞塊鏈表;空閑塊鏈表按照擦除次數(shù)由小到大對擦除塊進(jìn)行鏈接;2)設(shè)定閾值TH;文件系統(tǒng)在垃圾回收操作被觸發(fā)時,讀取干凈塊鏈表中所有擦除塊的附加區(qū)字段中的擦除次數(shù)字段Erase_Num,從中找出擦除次數(shù)最大的擦除塊和擦除次數(shù)最小的擦除塊;然后將擦除次數(shù)最大的擦除塊和擦除次數(shù)最小的擦除塊做差,如果差值≥TH,便斷定擦除次數(shù)最小的擦除塊上存儲的是靜態(tài)數(shù)據(jù),靜態(tài)數(shù)據(jù)更新的頻率非常低,需要對靜態(tài)數(shù)據(jù)進(jìn)行搬移操作;3)將擦除次數(shù)最大的塊記為A,擦除次數(shù)最小的塊記為B;從空閑塊鏈表中選取一塊,將A擦除塊上的數(shù)據(jù)復(fù)制到空閑塊上;然后對A擦除塊進(jìn)行擦除操作,然后將B擦除塊上面的數(shù)據(jù)復(fù)制到A擦除塊上面;然后將B擦除塊放到臟塊鏈表中,對B擦除塊進(jìn)行擦除后用于存放更新頻繁數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種基于NAND閃存文件系統(tǒng)中靜態(tài)數(shù)據(jù)損耗均衡的方法。將整個的NAND閃存的擦除塊分為空閑塊、干凈塊、臟塊、壞塊四種,形成了四種鏈表,空閑塊鏈表按照擦除次數(shù)由小到大對擦除塊進(jìn)行鏈接;設(shè)定閾值TH;從空閑塊鏈表中選取一塊,將擦除次數(shù)最大的A擦除塊上的數(shù)據(jù)復(fù)制到空閑塊上;然后對A擦除塊進(jìn)行擦除操作,然后將擦除次數(shù)最小的B擦除塊上面的數(shù)據(jù)復(fù)制到A擦除塊上面;然后將B擦除塊放到臟塊鏈表中,對B擦除塊進(jìn)行擦除后用于存放更新頻繁數(shù)據(jù)。本發(fā)明可以平衡靜態(tài)數(shù)據(jù)塊與動態(tài)數(shù)據(jù)塊的擦除次數(shù),從而取得整個閃存器件的損耗均衡。
文檔編號G06F12/06GK101369252SQ20081016160
公開日2009年2月18日 申請日期2008年9月16日 優(yōu)先權(quán)日2008年9月16日
發(fā)明者卜佳俊, 笑 周, 李海霞, 智 楊, 純 陳 申請人:浙江大學(xué)