本發(fā)明涉及NAND Flash存儲器存儲數(shù)據(jù)領(lǐng)域,尤其是涉及降低混合映射算法中映射表內(nèi)存資源占用的方法。本發(fā)明針對現(xiàn)有技術(shù)存在的問題,提供了一種降低混合映射算法中映射表內(nèi)存資源占用的方法,可以降低基于頁映射的日志塊映射表的緩存占用,對與系統(tǒng)內(nèi)存資源較為寶貴的嵌入式的片上系統(tǒng)具有實際意義。
背景技術(shù):
半導(dǎo)體行業(yè)的蓬勃發(fā)展,出現(xiàn)了高性能的存儲器NAND Flash,NAND Flash存儲器使用半導(dǎo)體作為存儲介質(zhì),具有高速,低能耗和防震等優(yōu)點,但NAND Flash存儲器本身也存在一些不足。首先,它的存儲塊的擦除次數(shù)是有限的;其次,NAND Flash必須要擦除之后才能重新寫入,導(dǎo)致寫入性能較低。因此,磨損均衡顯得尤為重要,好的磨損均衡管理方法不但能夠提高NAND Flash性能和效率,還能夠大大的延長NAND Flash的使用壽命。基于此,出現(xiàn)了專門為NAND Flash存儲器所使用的文件系統(tǒng),如JFFS、JFFS2、YAFFS、TrueFFS等,這些NAND Flash專用的文件系統(tǒng)進(jìn)行存儲管理為NAND Flash設(shè)備提供專門的驅(qū)動和更好的數(shù)據(jù)管理。但是對于一個小型的SoC,由于資源的限制,想采用以上的文件系統(tǒng)對NAND Flash進(jìn)行管理不太現(xiàn)實,所以亟需一個輕量級的管理方法,能夠在有限資源的條件下,滿足對NAND Flash的磨損均衡控制。目前對于小型的系統(tǒng),常采用的管理方法為FTL(Flash Translation Layer)。
典型的FTL管理機(jī)制采用以頁為單位進(jìn)行存儲管理的方式,如圖1所示,將物理頁地址與邏輯頁地址來進(jìn)行一一對應(yīng),讀、寫操作都是按頁進(jìn)行,數(shù)據(jù)存儲時存儲在空白的頁面存儲區(qū)中,數(shù)據(jù)寫入完成后需更新地址映射表中的轉(zhuǎn)換信息。這種管理算法比較直接,但是由于采用的頁映射機(jī)制,對于容量小、頁數(shù)少的存儲器,是極為方便的一種方法。但是,對于大容量NAND Flash來說,就顯得比較吃力,例如,對于美光公司的MT29F32G08CBACA這個型號的NAND Flash來說,共有4096個物理塊,每塊有256頁,基于頁映射共需要4096*256*4 = 4MB的內(nèi)存空間來保存當(dāng)前的映射表,對于片上系統(tǒng)來說內(nèi)存消耗過大。
為了解決這個問題,提出了混合映射(Hybrid mapping)算法,它是基于塊和頁的混合映射的機(jī)制,如圖2所示,在該算法中,將NAND Flash在邏輯上分為數(shù)據(jù)塊和日志塊兩個部分,日志塊是有多個空閑塊組成。同時,在內(nèi)存中存儲著兩個表:基于塊映射的數(shù)據(jù)塊地址映射表DBMT和基于頁映射的日志塊頁映射表LPMT。根據(jù)混合映射算法,以MT29F32G08CBACA型號的NAND Flash為例,物理結(jié)構(gòu)如圖3,DBMT塊映射表映射粒度為塊,MT29F32G08CBACA共有4096個塊,則DBMT存儲的數(shù)值范圍為0~0x1000,用2個字節(jié)就可以表示出完整的信息,LPMT頁映射表映射粒度為頁,MT29F32G08CBACA共有4096*256個塊,數(shù)值范圍為0~0x100000,需要4個字節(jié)才可以表示出完整的信息,需要消耗的內(nèi)存如下:4096*2+ (TBN-X)*256*4,其中(TBN-X)為分配的日志塊個數(shù),可以看出,該算法所消耗的內(nèi)存與日志塊個數(shù)(TBN-X)有關(guān),若(TBN-X)為128,則需要消耗內(nèi)存為:4096*2+ 128*256*4 = 136KB。相對于基于頁映射的算法,該算法內(nèi)存消耗已經(jīng)大大降低,但是經(jīng)過分析發(fā)現(xiàn),內(nèi)存消耗主要部分為日志映射表LPMT,并且內(nèi)存消耗與(TBN-X)相關(guān),成倍數(shù)增長。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種降低內(nèi)存資源占用的方法,包括如下步驟:
步驟一:預(yù)先定義對應(yīng)于NAND Flash的數(shù)據(jù)結(jié)構(gòu)CPMT[N]及數(shù)據(jù)結(jié)構(gòu)LatestW[M],存儲項字節(jié)數(shù)分別為X、Y, 上述兩個數(shù)據(jù)結(jié)構(gòu)均存儲在內(nèi)存中;N、M、X、Y為預(yù)先定義好的整數(shù);所述CPMT[N]用于記錄物理塊內(nèi)物理頁邏輯地址到物理地址的映射信息。LatestW[M]用于記錄NAND Flash所有物理塊最后一次被寫的物理頁頁號信息。
步驟二:將NAND Flash每個物理頁的存儲空間分成兩個部分,一部分用于存儲用戶數(shù)據(jù),一部分用于存儲CPMT[N],每個物理塊最后一次寫入的物理頁上的CPMT[N]保存該物理塊最新的物理頁映射信息。
步驟三:對NAND Flash進(jìn)行讀,包括如下步驟:
步驟3.1 獲取用戶數(shù)據(jù)。
步驟3.2 根據(jù)主機(jī)下發(fā)的邏輯地址計算對應(yīng)物理塊的塊號Block_Num。
步驟3.3 根據(jù)該Block_Num查詢LatestW[M]數(shù)據(jù)結(jié)構(gòu),得到該物理塊的最后一次寫入的數(shù)據(jù)頁號LatestW_Page_Num。
步驟3.3 讀取LatestW_Page_Num頁號數(shù)據(jù),獲得CPMT[N] ,分配新的物理頁,頁號為LatestW_Page_Num+1。
步驟3.5 更新LatestW[M]數(shù)據(jù)結(jié)構(gòu),記錄最后操作的物理頁的頁號,更新CPMT[N]數(shù)據(jù)結(jié)構(gòu),記錄最新的邏輯地址到物理地址映射信息。
步驟3.6 向新的物理頁寫入用戶數(shù)據(jù),同時寫入的CPMT[N]數(shù)據(jù)結(jié)構(gòu)到該物理頁中。
優(yōu)選的,還包括讀操作流程,包括如下步驟:
步驟1:根據(jù)主機(jī)下發(fā)的邏輯地址計算對應(yīng)物理塊的塊號Block_Num。
步驟2:根據(jù)Block_Num查詢LatestW[M]數(shù)據(jù)結(jié)構(gòu),得到該物理塊的最后一次寫入的數(shù)據(jù)頁號LatestW_Page_Num。
步驟3:讀取LatestW_Page_Num頁號數(shù)據(jù),獲取最新的CPMT[N]。
步驟4:根據(jù)CPMT[N]獲取主機(jī)下發(fā)的邏輯地址對應(yīng)的實際物理頁的物理地址Page_Addr;
步驟5:讀取Page_Addr對應(yīng)物理頁,得到主機(jī)所需的數(shù)據(jù)。
進(jìn)一步的,N等于物理頁頁數(shù)。
進(jìn)一步的,M等于物理塊塊數(shù)。
進(jìn)一步的,CPMT[N] 的存儲項字節(jié)數(shù)為4。
進(jìn)一步的,LatestW[M] 的存儲項字節(jié)數(shù)為4。
進(jìn)一步的,NAND Flash物理頁內(nèi)用于存儲用戶數(shù)據(jù)的空間大小為該物理頁的總存儲字節(jié)數(shù)減去N*4的差值。
本發(fā)明的有益效果為:
本發(fā)明提出了一種資源消耗小的算法,可廣泛應(yīng)用于資源有限的片上SoC中,提升系統(tǒng)寫入數(shù)據(jù)的性能。
采用本發(fā)明,成本無需增加就能取得很好的技術(shù)效果,具有廣泛的應(yīng)用前景。
附圖說明
圖1 基于頁映射的映射表示意圖;
圖2 基于混合映射的映射表示意圖;
圖3 NAND Flash結(jié)構(gòu)示意圖;
圖4 用戶數(shù)據(jù)與CMPT數(shù)據(jù)結(jié)構(gòu)存儲示意圖;
圖5 數(shù)據(jù)寫入流程圖;
圖6 數(shù)據(jù)讀取流程圖。
具體實施方式
在執(zhí)行本方法前,需要預(yù)先確定NAND Flash,用B代表NAND Flash具有的物理塊數(shù)量,用P代表每個物理塊中有具有的物理頁數(shù)量,B、P均為整數(shù)。
下面對本發(fā)明進(jìn)行步驟性說明。
步驟一:預(yù)先定義對應(yīng)于NAND Flash的數(shù)據(jù)結(jié)構(gòu)CPMT[N]及數(shù)據(jù)結(jié)構(gòu)LatestW[M],存儲項字節(jié)數(shù)分別為X、Y,上述兩個數(shù)據(jù)結(jié)構(gòu)均存儲在內(nèi)存中。N、M、X、Y為預(yù)先定義好的整數(shù)。所述CPMT[N]用于記錄物理塊內(nèi)物理頁邏輯地址到物理地址的映射信息,LatestW[M]用于記錄NAND Flash所有物理塊最后一次被寫的物理頁頁號信息。
X、Y為預(yù)先定義好的整數(shù)。其中N大小與NAND Flash介質(zhì)相關(guān),若一片NAND Flash有B個物理塊,每個物理塊中有P個物理頁,則為了保存該物理塊的映射表信息,則需要P個表項,即N為P, M為B。應(yīng)該理解,N為P,M為B的設(shè)計不會浪費存儲空間,并使得各個物理塊及物理頁信息都得到存儲。
在本發(fā)明中采用將用戶數(shù)據(jù)與CPMT[N]同步更新的方式保證每個NAND Flash物理塊中最后一次被寫的物理頁中保存著該物理塊的最新CPMT[N]信息。
步驟二:將NAND Flash每個物理頁的存儲空間分成兩個部分,一部分用于存儲用戶數(shù)據(jù),一部分用于存儲CPMT[N]。(如圖4所示)。
設(shè)NAND Flash一個物理頁大小為Dpage字節(jié), 則用于存儲用戶數(shù)據(jù)的空間大小為Duser=Dpage– N*X字節(jié)。
步驟三:對NAND Flash進(jìn)行寫操作,如圖5所示,包括如下步驟:
步驟3.1 獲取用戶數(shù)據(jù)。
步驟3.2 根據(jù)主機(jī)下發(fā)的邏輯地址計算對應(yīng)物理塊的塊號Block_Num。
步驟3.3 根據(jù)該Block_Num查詢LatestW[M]數(shù)據(jù)結(jié)構(gòu),得到該物理塊的最后一次寫入的數(shù)據(jù)頁號LatestW_Page_Num。
步驟3.4 讀取LatestW_Page_Num頁號數(shù)據(jù),獲得CPMT[N] ,分配新的物理頁,頁號為LatestW_Page_Num+1。
步驟3.5 更新LatestW[M]數(shù)據(jù)結(jié)構(gòu),記錄最后操作的頁號,更新CPMT[N]數(shù)據(jù)結(jié)構(gòu),記錄最新的邏輯頁到物理頁映射信息。
步驟3.6 向新的物理頁寫入用戶數(shù)據(jù),同時寫入的CPMT[N]數(shù)據(jù)結(jié)構(gòu)到該物理頁中。
當(dāng)然,還可以對NAND Flash進(jìn)行讀操作時,如圖6所示,包括如下步驟:
步驟1:根據(jù)主機(jī)下發(fā)的邏輯地址計算對應(yīng)物理塊的塊號Block_Num。
步驟2:根據(jù)Block_Num查詢LatestW[M]數(shù)據(jù)結(jié)構(gòu),得到該物理塊的最后一次寫入的數(shù)據(jù)頁號LatestW_Page_Num。
步驟3:讀取LatestW_Page_Num頁號數(shù)據(jù),獲取最新的CPMT[N]。
步驟4:根據(jù)CPMT[N]獲取主機(jī)下發(fā)的邏輯地址對應(yīng)的實際物理地址Page_Addr。
步驟5:讀取Page_Addr數(shù)據(jù),得到主機(jī)所需的數(shù)據(jù)。
下面舉例說明利用本發(fā)明所述方法后資源情況:
選用美光公司MT29F32G08CBACA型NAND Flash作為試驗對象,物理結(jié)構(gòu)如圖3所示。該NAND Flash有4096個物理塊,每個塊有256個物理頁,每個物理頁大小有4096字節(jié)存儲空間,則用于記錄頁映射表的數(shù)據(jù)結(jié)構(gòu)為CPMT[256],存儲字節(jié)數(shù)為4字節(jié),共占用空間為1K字節(jié);用于記錄每個物理塊最后一次編程的頁頁號信息的數(shù)據(jù)結(jié)構(gòu)為LatestW[4096],存儲字節(jié)數(shù)為4字節(jié),共占用空間為16K字節(jié);所以該算法一共占用16+1 = 17K字節(jié),遠(yuǎn)遠(yuǎn)小于采用頁映射算法所需的4M字節(jié)以及采用通用混合映射算法所需的136K字節(jié),并且該算法占用空間恒定,與其他參數(shù)無關(guān),對小型的SoC上實現(xiàn)NAND Flash管理算法具有很重要的實際意義。