两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種NandFlash緩沖管理方法

文檔序號:6470757閱讀:151來源:國知局
專利名稱:一種NandFlash緩沖管理方法
技術領域
本發(fā)明涉及一種NandFlash緩沖管理方法,特別是一種利用散列鏈表數(shù)組 和多個緩存單元配合管理NandFlash緩沖的方法。
背景技術
NandFlash作為 一種常用的非易失性閃存已被廣泛地應用在各種數(shù)碼產(chǎn)品 中。系統(tǒng)對NandFlash的訪問速度是影響整個產(chǎn)品性能的重要因素,NandFlash 的結構是以塊為單位的,每個塊包含固定大小的頁,每個頁包括固定大小的比 特值。
系統(tǒng)對NandFlash訪問的常用方法有兩種
直接訪問,即沒有系統(tǒng)緩存單元,直接的驅(qū)動NandFlash進行讀寫。這種 做法雖然簡單,易于實現(xiàn),但缺點明顯。由于NandFlash修改某個比特時,只 能從1修改為0,即便是對一個比特的修改也需要將該比特所在整個塊擦除, 再重新寫入。所以在這種方式中,往塊A中寫入數(shù)據(jù)的流程如圖1所示,先申 請一個塊大小的連續(xù)內(nèi)存空間緩存,將要寫入到塊A中的數(shù)據(jù)對應的寫入到緩 存中,對塊A執(zhí)行塊擦除操作,然后將緩存寫回到塊A。不難看出這種方法效 率很低。
另 一個方法是系統(tǒng)申請一個塊大小的連續(xù)內(nèi)存空間緩存,并保留與緩存中 數(shù)據(jù)對應的塊號A,執(zhí)行讀出寫入塊B的某些數(shù)據(jù)的操作。具體來說,系統(tǒng)首 先判斷待讀出或?qū)懭氲膲KB的塊號與緩存中的塊號A是否相同,如果相同則直 接在緩存中讀出數(shù)據(jù),如果A與B不相同,則將塊緩存中的數(shù)據(jù)寫回到塊號A 所對應的物理塊上,并將塊B中的數(shù)據(jù)讀出寫入到多爰存中,此過程分別如圖2、 圖3所示。在此種方法中,無論讀寫操作,系統(tǒng)都先訪問緩存,判斷緩存內(nèi)容 是否為需要的數(shù)據(jù),如果是則直接使用緩存中的數(shù)據(jù),如果不是則將緩存中的 數(shù)據(jù)寫回其對應的物理塊中再將塊B的內(nèi)容寫入緩存。
這樣的操作雖然減少了反復擦除NandFlash塊的操作,但是如果遇到系統(tǒng) 頻繁訪問NandFlash,并且訪問區(qū)域分布于不同的塊上,這樣筒單的讀寫方法不 能滿足需求。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種NandFlash緩沖管理方法,能較好 的提高緩存的訪問效率,力口快系統(tǒng)對NandFlash的訪問速度,提高系統(tǒng)的整體 性能。
為了達到上述目的,本發(fā)明一種NandFlash緩沖管理方法,包括 在內(nèi)存中建立一個與NandFlash物理塊地址——對應的《連表數(shù)組; 在內(nèi)存中開辟多個緩存單元用于緩存NandFlash中的數(shù)據(jù);和 根據(jù)所述鏈表數(shù)組與多個緩存單元配合對NandFlash進行讀寫操作。 進一步地,所述多個緩存單元由一個鏈表頭采用雙向鏈表的形式鏈接成數(shù)
據(jù)鏈表;所述鏈表數(shù)組包括鏈表索引數(shù)組,用于在鏈表數(shù)組中定位對應的
NandFlash物理地址,鏈表數(shù)組中的數(shù)據(jù)所對應的NandFlash物理地址與同 一個
NandFlash物理地址在鏈表數(shù)組中相應的元素對應。
進一步地,在讀寫操作中,將寫入數(shù)據(jù)的緩存單元通過指針鏈入NandFlash
物理地址對應的鏈表凄t組中,^"改該寫入數(shù)據(jù)的緩存單元的單元修改標記,所
述單元修改標記用于標識該緩存單元是否被修改過。
進一步地,根據(jù)最近最少使用原則將寫入數(shù)據(jù)的緩存單元移動到鏈表頭后
面緊挨鏈表頭的位置。
進一步地,在讀寫過程中,將緩存單元內(nèi)的數(shù)據(jù)與該數(shù)據(jù)在NandFlansh上
對應的物理塊關聯(lián),當緩存單元內(nèi)數(shù)據(jù)被修改且有新的數(shù)據(jù)需要寫入該緩存單
元中的時候,將該緩存單元中的舊有數(shù)據(jù)寫回其對應的物理塊中。 進一步地,所述方法在讀NandFlash操作的過程包括 步驟101, 計算出待讀出NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù)
組中鏈表索引數(shù)組的位置;
步驟102,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待
讀出數(shù)據(jù),如果不包含則執(zhí)行步驟103;
步驟103,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果不包含則執(zhí)行步驟
104;
步驟104, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟105;
步驟105,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 106,否則直接執(zhí)行步驟106;
步驟106, 從所述物理塊中將待讀出數(shù)據(jù)讀入到所述目標緩存單元中,同 時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟107;
步驟107, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟108;
步驟108, 計算出待讀出NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 鏈表索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟110;
步驟110, 從目標緩存單元中讀出數(shù)據(jù)到指定的位置。
進一步地,在步驟102中,如果包含所述待讀出數(shù)據(jù),則執(zhí)行步驟109;
步驟109,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個。
進一步地,在步驟103中,如果包括空閑緩存單元,則將空閑緩存單元設 為目標緩存單元并執(zhí)行步驟107。
進一步地,所述方法在寫NandFlash操:作的過程包括
步驟201, 計算出待寫入NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù) 組中鏈表索引數(shù)組的位置;
步驟202,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待 讀出數(shù)據(jù),如果不包含則執(zhí)行步驟203;
步驟203,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果不包含則執(zhí)行步驟
204;
步驟204, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟205;
步驟205,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 206,否則直接執(zhí)行步驟206;
步驟206, 從所述物理塊中將待寫入數(shù)據(jù)讀入到所述目標緩存單元中,同
時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟207;
步驟207, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟208;
步驟208, 計算出待寫入NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 #索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟210;
步驟210, 將待寫入數(shù)據(jù)寫入目標緩存單元中,修改目標緩存單元的單元 修改標記為修改過。
進一步地,在步驟202中,如果包含所述待讀出數(shù)據(jù),則執(zhí)行步驟209;
步驟209,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個。
進一步地,在步驟203中,如果包括空閑緩存單元,則將空閑緩存單元設 為目標緩存單元并執(zhí)行步驟207。
進一步地,所述鏈表索引數(shù)組位置的計算采用哈希算法,所述鏈表數(shù)組為 散列鏈表數(shù)組。
進一步地,所述方法在系統(tǒng)的初始化階段包括以下步驟
分配若干緩存單元;
對每個緩存單元分配管理結構體并初始化另其指向各自的緩存單元;
分配鏈表索引數(shù)組并初始化,令其指向NULL;和
分配數(shù)據(jù)鏈表頭,將所有緩存單元鏈入到雙向數(shù)據(jù)鏈表中。
進一步地,所述內(nèi)存中開辟緩存單元的大小為NandFlash—個或多個塊的
大小,或者一個或多個頁的的大小,或者一個或多個字節(jié)的大小。 進一步地,所述存儲單元的大小和數(shù)量根據(jù)需要隨時調(diào)整。 本發(fā)明通過采用多個緩存提高了讀寫效率,同時引入鏈表數(shù)組并且采用雙
鏈表嵌套,提高了對緩存單元的訪問效率。在數(shù)據(jù)鏈表中采用最近最少使用的
方法,提高了數(shù)據(jù)鏈表的訪問效率。同時緩存單元采用更小的頁或者字節(jié)長度
作為緩存單元的大小,使讀寫更加靈活。


圖1是現(xiàn)有技術中簡單的塊寫入操作流程圖; 圖2是現(xiàn)有技術中基于系統(tǒng)緩存的讀操作示意圖3是現(xiàn)有技術中基于系統(tǒng)緩存的寫"t喿作示意圖4為本發(fā)明一個具體的實施例中對系統(tǒng)初始化的流程圖5為本發(fā)明 一個具體實施例中對NandFlash緩沖管理方法框圖6為本發(fā)明一個具體實施例中對NandFlash進行讀操作的流程圖;和
圖7為本發(fā)明一個具體實施例中對NandFlash進行寫操作的流程圖
具體實施例方式
為使本發(fā)明的目的、技術方案和優(yōu)點表達得更加清楚明白,下面結合附圖 及具體實施例對本發(fā)明再作進一步詳細的i兌明。
本發(fā)明目的在于采用多緩存與鏈表數(shù)組相互嵌套提高讀寫效率,其步驟包

步驟1 ,在內(nèi)存中建立一個與NandFlash物理塊地址——對應的鏈表數(shù)組; 所述鏈表數(shù)組是一個包括鏈表索引數(shù)組的散列鏈表數(shù)組,其通過哈希算法 將NandFlash地址與鏈表數(shù)組地址——對應,在查找鏈表數(shù)組的時候首先通過 哈希算法算出待操作NandFlash物理塊在鏈表索《1數(shù)組中的位置,根據(jù)鏈表索 引數(shù)組中的位置,具體算出鏈表^t組中詳細的位置。
所述哈希算法為本領域技術人員的常用技術手l殳,在此不作贅述。
步驟2,在內(nèi)存中開辟多個緩存單元用于緩存NandFlash中的數(shù)據(jù);
步驟3,根據(jù)所述鏈表數(shù)組與多個緩存單元配合對NandFlash進行讀寫操作。
所述多個緩存單元由一個鏈表頭將全部緩存單元釆用雙向鏈表的方式串接
起來組成數(shù)據(jù)鏈表。下面詳細介紹如何利用本發(fā)明對NandFlash進行讀寫操作。
在進行讀寫操作前,系統(tǒng)首先對NandFlash進行初始化,初始化的步驟如
圖4所示。
步驟a,分配若干緩存單元;
步驟b,對每個緩存單元分配管理結構體并初始化另其指向各自的緩存單
元;
所述管理結構體定義方法如下 typedef struct tag_DiskBufHead {
intmodifyFlag; /*緩存單元修改標記,為0表示沒有被
修改過,即緩存單元中內(nèi)容與物理塊上面的數(shù)據(jù)一致;為l表示緩存單元中數(shù) 據(jù)曾經(jīng)被修改過,即緩存單元內(nèi)容與物理塊內(nèi)容不一致*/
int block; /*對應的物理塊編號,表明緩存單元存儲的
是那個物理塊中的數(shù)據(jù)*/
char*buf; /*緩存單元指針,緩存單元大小*/
struct tag_DiskBufHead *pFreePrev; /*數(shù)據(jù)鏈表前項517
struct tag_DiskBufHead *pFreeNext; /*數(shù)據(jù)鏈表后項*/
struct tag—DiskBufHead *pHashNext;/*鏈表數(shù)組后項*/ } TDiskBufHead, *PTDiskBufHead;
管理結構體中包括了
緩存單元的修改標記,為0表示沒有被修改過,即緩存單元中內(nèi)容與物理 塊上面的數(shù)據(jù)一致;為1表示緩存單元中數(shù)據(jù)曾經(jīng)被修改過,即緩存單元內(nèi)容 與物理塊內(nèi)容不一致;
對應物理塊編號,表明緩存單元存儲的是哪個物理塊中的數(shù)據(jù),當緩存單 元中存儲的內(nèi)容發(fā)生變化時,所述對應物理塊編號要相應修改;
緩存單元指針,指明緩存單元大小,緩存單元大小可以為一個或多個塊, 可以為一個或多個頁,甚至一個或多個字節(jié)。
對于修改緩存單元大小和數(shù)量的方法,只需要修改上述緩存單元分配結構 體中對應參數(shù)值進行修改即可。比如修改葉uf變量,可以改變緩存單元的大小。 緩存單元的大小和數(shù)量并不一定要在系統(tǒng)初始化的時候修改,在系統(tǒng)運行中也 可以隨時改變。
步驟c,分配鏈表索引數(shù)組并初始化,令其指向NULL;
在初始化階段,鏈表索引數(shù)組為空。
步驟d,分配數(shù)據(jù)鏈表頭,將所有緩存單元鏈入到雙向數(shù)據(jù)鏈表中。 初始化后,系統(tǒng)中的鏈表索引數(shù)組為空,所有緩存單元中沒有數(shù)據(jù)。 為了使本發(fā)明更清楚,現(xiàn)在將NandFlash物理塊、鏈表數(shù)組、鏈表索引數(shù) 組、數(shù)據(jù)鏈表之間的關系詳細介紹一下。請參看圖5所示,圖5為NandFlash
緩沖管理方法框圖。圖中是系統(tǒng)運行一段時間之后的狀態(tài)圖。
圖中所有的緩存單元都已經(jīng)被寫滿了數(shù)據(jù),每一個緩存單元中都記錄著一
塊NandFlash物理塊中的內(nèi)容,所有的緩存單元由鏈表頭鏈接成雙向數(shù)據(jù)鏈表, 并且遵循最近最少使用的原則,將當前使用的緩存單元鏈接到鏈表頭后面緊鄰 鏈表頭的位置。如果待讀寫數(shù)據(jù)中的內(nèi)容沒有出現(xiàn)在數(shù)據(jù)鏈表中,則將鏈表頭 前面的緩存單元提取使用,并在使用后將其鏈入鏈表頭后緊鄰鏈表頭的位置。
當前使用的緩存單元在鏈接到鏈表頭后面的同時,鏈接到NandFlash物理 地址對應的鏈表數(shù)組末尾。所述對應鏈表數(shù)組為根據(jù)NandFlash物理地址計算 出的鏈表索引數(shù)組所對應的鏈表數(shù)組。
當對NandFlash的待處理物理塊進行讀操作時,請參看圖6所示,圖6為 本發(fā)明一個具體實施例中對NandFlash進行讀操作的流程圖。
步驟101, 計算出待讀出NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù) 組中鏈表索引數(shù)組的位置;
步驟102,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待 讀出數(shù)據(jù),如果包含則執(zhí)行步驟109,否則執(zhí)行步驟103;
步驟103,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果包含則將空閑緩存 單元設為目標緩存單元并執(zhí)行步驟107,否則執(zhí)行步驟104;
步驟104, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟105;
步驟105,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 106,否則直接執(zhí)行步驟106;
步驟106, 從所述物理塊中將待讀出數(shù)據(jù)讀入到所述目標緩存單元中,同 時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟107;
步驟107, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟108;
步驟108, 計算出待讀出NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 鏈表索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟110;
步驟109,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個;
步驟110, 從目標緩存單元中讀出數(shù)據(jù)到指定的位置。
當對NandFlash的待處理物理塊進行寫操作時,請參看圖7所示,圖7為 本發(fā)明一個具體實施例中對NandFlash進行寫操作的流程圖。
步驟201 , 計算出待寫入NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù) 組中鏈表索引數(shù)組的位置;
步驟202,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待 讀出數(shù)據(jù),如果包含則執(zhí)行步驟209,否則執(zhí)行步驟203;
步驟203,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果包含則將空閑緩存 單元設為目標緩存單元并執(zhí)行步驟207,否則執(zhí)行步驟204;
步驟204, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟205;
步驟205,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 206,否則直接執(zhí)行步驟206;
步驟206, 從所述物理塊中將待寫入數(shù)據(jù)讀入到所述目標緩存單元中,同 時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟207;
步驟207, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟208;
步驟208, 計算出待寫入NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 鏈表索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟210;
步驟209,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個;
步驟210, 將待寫入數(shù)據(jù)寫入目標緩存單元中,修改目標緩存單元的單元 修改標記為^務改過。
這樣便完成了一次讀或?qū)懖僮?。對于緩沖單元的選取采用比塊更小的頁或 者字節(jié)為單位,方便了上層的使用。
本發(fā)明采用鏈表數(shù)組和數(shù)據(jù)鏈表配合的方法,大大提高了 NandFlash的讀 寫效率,采用鏈表數(shù)組又省去了遍歷數(shù)據(jù)鏈表的操作,可以快速進行定位,對 于頻繁讀寫操作或者大緩存和大NandFlash物理空間來說效率提高更加明顯。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)
明的精神和原則之內(nèi),所作的任何修改、等同替換等,均應包含在本發(fā)明的保 護范圍之內(nèi)。
權利要求
1. 一種NandFlash緩沖管理方法,包括在內(nèi)存中建立一個與NandFlash物理塊地址一一對應的鏈表數(shù)組;在內(nèi)存中開辟多個緩存單元用于緩存NandFlash中的數(shù)據(jù);和根據(jù)所述鏈表數(shù)組與多個緩存單元配合對NandFlash進行讀寫操作。
2. 根據(jù)權利要求1所述的方法,其特征在于,所述多個緩存單元由一個4連 表頭采用雙向鏈表的形式鏈接成數(shù)據(jù)鏈表;所述鏈表數(shù)組包括鏈表索引數(shù)組, 用于在鏈表數(shù)組中定位對應的NandFlash物理地址,鏈表數(shù)組中的數(shù)據(jù)所對應 的NandFlash物理地址與同一個NandFlash物理地址在鏈表數(shù)組中相應的元素 對應。
3. 根據(jù)權利要求2所述的方法,其特征在于,在讀寫操作中,將寫入數(shù)據(jù) 的緩存單元通過指針鏈入NandFlash物理地址對應的鏈表數(shù)組中,修改該寫入 數(shù)據(jù)的緩存單元的單元修改標記,所述單元修改標記用于標識該緩存單元是否 被修改過。
4. 根據(jù)權利要求3所述的方法,其特征在于,根據(jù)最近最少使用原則將寫 入數(shù)據(jù)的緩存單元移動到鏈表頭后面緊挨鏈表頭的位置。
5. 根據(jù)權利要求3所述的方法,其特征在于,在讀寫過程中,將緩存單元 內(nèi)的數(shù)據(jù)與該數(shù)據(jù)在NandFlansh上對應的物理塊關聯(lián),當緩存單元內(nèi)數(shù)據(jù)被修改且有新的數(shù)據(jù)需要寫入該緩存單元中的時候,將該緩存單元中的舊有數(shù)據(jù)寫 回其對應的物理塊中。
6. 根據(jù)權利要求3所述的方法,其特征在于,所述方法在讀NandFlash操 作的過程包括步驟101, 計算出待讀出NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù) 組中鏈表索引數(shù)組的位置;步驟102,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待 讀出數(shù)據(jù),如果不包含則執(zhí)行步驟103;步驟103,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果不包含則執(zhí)行步驟104;步驟104, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟105; 步驟105,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 106,否則直接執(zhí)行步驟106;步驟106, 從所述物理塊中將待讀出數(shù)據(jù)讀入到所述目標緩存單元中,同 時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟107;步驟107, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟108;步驟108, 計算出待讀出NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 鏈表索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟110;步驟110, 從目標緩存單元中讀出數(shù)據(jù)到指定的位置。
7. 根據(jù)權利要求6所述的方法,其特征在于,在步驟102中,如果包含所 述待讀出數(shù)據(jù),則執(zhí)行步驟109;步驟109,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個。
8. 根據(jù)權利要求6所述的方法,其特征在于,在步驟103中,如果包括空 閑緩存單元,則將空閑緩存單元設為目標緩存單元并執(zhí)行步驟107。
9. 據(jù)權利要求3所述的方法,其特征在于,所述方法在寫NandFlash操作 的過程包括步驟201, 計算出待寫入NandFlash數(shù)據(jù)所在物理塊的物理地址在鏈表數(shù) 組中鏈表索引數(shù)組的位置;步驟202,根據(jù)鏈表索引數(shù)組的位置查找判斷鏈表數(shù)組中是否包含所述待 讀出數(shù)據(jù),如果不包含則執(zhí)行步驟203;步驟203,判斷數(shù)據(jù)鏈表是否包括空閑緩存單元,如果不包含則執(zhí)行步驟204;步驟204, 取鏈表頭前面一個緩存單元為目標緩存單元,執(zhí)行步驟205;步驟205,判斷所述目標緩存單元的單元修改標記是否為修改過,如果修 改過將該緩存單元中的舊有數(shù)據(jù)寫回其對應的NandFlash物理塊中,執(zhí)行步驟 206,否則直接執(zhí)行步驟206;步驟206, 從所述物理塊中將待寫入數(shù)據(jù)讀入到所述目標緩存單元中,同 時修改目標緩存單元的單元修改標記為沒有修改過并執(zhí)行步驟207;步驟207, 將所述目標緩存單元鏈接到數(shù)據(jù)鏈表頭的后緊鄰鏈表頭的位 置,執(zhí)行步驟208;步驟208, 計算出待寫入NandFlash數(shù)據(jù)所對應的物理塊在鏈表數(shù)組中的 鏈表索引數(shù)組的位置,將目標緩存單元鏈入到計算出的鏈表索引數(shù)組所對應的 鏈表的末尾并執(zhí)行步驟210;步驟210, 將待寫入數(shù)據(jù)寫入目標緩存單元中,修改目標緩存單元的單元 修改標記為+務改過。
10. 根據(jù)權利要求9所述的方法,其特征在于,在步驟202中,如果包含 所述待讀出數(shù)據(jù),則執(zhí)行步驟209;步驟209,將該緩沖區(qū)在雙向數(shù)據(jù)鏈表中的位置移動到鏈表頭的后一個。
11. 根據(jù)權利要求9所述的方法,其特征在于,在步驟203中,如果包括 空閑緩存單元,則將空閑緩存單元設為目標緩存單元并執(zhí)行步驟207。
12. 據(jù)權利要求6-11之一所述的方法,其特征在于,所述鏈表索引數(shù)組位 置的計算采用哈希算法,所述鏈表數(shù)組為散列鏈表數(shù)組。
13. 據(jù)權利要求2所述的方法,其特征在于,所述方法在系統(tǒng)的初始化階 段包括以下步驟分配若干緩存單元;對每個緩存單元分配管理結構體并初始化另其指向各自的緩存單元; 分配鏈表索引數(shù)組并初始化,令其指向NULL;和 分配數(shù)據(jù)鏈表頭,將所有緩存單元鏈入到雙向數(shù)據(jù)鏈表中。
14. 根據(jù)權利要求1所述的方法,其特征在于,所述內(nèi)存中開辟緩存單元 的大小為NandFlash—個或多個塊的大小,或者一個或多個頁的的大小,或者 一個或多個字節(jié)的大小。
15. 根據(jù)權利要求1所述的方法,其特征在于,所述存儲單元的大小和數(shù) 量根據(jù)需要隨時調(diào)整。
全文摘要
本發(fā)明涉及一種NandFlash緩沖管理方法通過采用多個緩存提高了讀寫效率,引入鏈表數(shù)組并且采用雙鏈表嵌套,提高了對緩存單元的訪問效率,在數(shù)據(jù)鏈表中采用最近最少使用的方法,提高了數(shù)據(jù)鏈表的訪問效率。
文檔編號G06F12/08GK101393537SQ20081022250
公開日2009年3月25日 申請日期2008年9月18日 優(yōu)先權日2008年9月18日
發(fā)明者李棟梁, 游明琦, 國 艾 申請人:北京中星微電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
临高县| 从化市| 科技| 民乐县| 古浪县| 游戏| 宁乡县| 津南区| 嘉义县| 子洲县| 竹山县| 泾阳县| 岑巩县| 洛浦县| 满城县| 常德市| 蒙城县| 三江| 兴安县| 安阳县| 凌源市| 平凉市| 类乌齐县| 敖汉旗| 瓮安县| 南江县| 太仓市| 南昌县| 保康县| 武安市| 竹溪县| 通州市| 新河县| 滁州市| 平远县| 容城县| 仲巴县| 当雄县| 云梦县| 景宁| 精河县|