亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

讀取數(shù)據(jù)方法以及數(shù)據(jù)寫入方法

文檔序號(hào):6486514閱讀:246來源:國知局
讀取數(shù)據(jù)方法以及數(shù)據(jù)寫入方法
【專利摘要】本發(fā)明實(shí)施例提供了一種向NAND閃存寫入數(shù)據(jù)方法以及讀取NAND閃存中數(shù)據(jù)的方法,向NAND閃存寫入數(shù)據(jù)方法包括:將本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換成相應(yīng)的邏輯地址與邏輯頁地址;確定最新物理地址,從所述最新物理地址的下一物理頁地址開始依次將所述本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域;根據(jù)本次寫操作中邏輯頁地址、物理頁地址以及物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)所述鏈表的原始動(dòng)態(tài)映射頁中的對(duì)應(yīng)關(guān)系進(jìn)行更新。采用本發(fā)明實(shí)施例的寫入數(shù)據(jù)方法可以提高物理頁的使用率以及讀寫NAND閃存的速率。
【專利說明】讀取數(shù)據(jù)方法以及數(shù)據(jù)寫入方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,更具體的說,是涉及一種讀取數(shù)據(jù)方法以及數(shù)據(jù)寫入方法。
【背景技術(shù)】
[0002]目前,NAND 閃存中的 NFTL (NAND Flash Translation Layer, NAND FLASH 轉(zhuǎn)換層)是以邏輯地址與物理塊按照以塊為映射,頁的相對(duì)偏移原則存儲(chǔ)數(shù)據(jù)的,在向物理塊中寫入數(shù)據(jù)時(shí),寫的操作必須是完全順序的,即邏輯頁第一頁必須寫在物理頁第一頁,邏輯頁第二頁必須寫在物理頁第二頁,以此類推。
[0003]不支持跳寫的NAND閃存,當(dāng)物理頁X被寫入數(shù)據(jù)時(shí),所有小于X的物理頁必須已經(jīng)被寫過數(shù)據(jù),如果物理塊第X-1頁未寫入數(shù)據(jù),而直接在物理頁第X頁寫數(shù)據(jù),那么該物理塊中的數(shù)據(jù)位將會(huì)發(fā)生翻轉(zhuǎn),導(dǎo)致物理塊的數(shù)據(jù)錯(cuò)誤,這時(shí)可以先在所有小于X的空白物理頁中寫入一些臟數(shù)據(jù),再在物理頁第X頁寫數(shù)據(jù),這樣物理塊中的數(shù)據(jù)位就不會(huì)發(fā)生翻轉(zhuǎn)了,支持跳寫的NAND閃存,如果首先在物理頁X被寫入數(shù)據(jù),再需要在物理頁第X-1頁寫入數(shù)據(jù)時(shí),需要增加一新空閑物理塊,并在增加的空閑物理塊的第X-1頁寫入數(shù)據(jù);NAND閃存不支持覆蓋寫,如果物理塊中已經(jīng)寫滿了數(shù)據(jù),當(dāng)需要對(duì)該物理塊中的第X頁進(jìn)行修改時(shí),即該物理塊中物理頁X中的數(shù)據(jù)為無效數(shù)據(jù),需要在增加一個(gè)空閑物理塊,將第X頁中需要重寫的數(shù)據(jù)寫入新增加的空閑物理塊的第X頁中,在新增加的空閑物理塊的物理頁X中存儲(chǔ)的數(shù)據(jù)是有效數(shù)據(jù),而新增加的物理塊的第X-1頁之前都是空白頁或者被寫入了臟數(shù)據(jù);NAND閃存不支持回頭寫,如果一空閑物理塊中首先寫入了邏輯頁X即在物理頁X寫入了數(shù)據(jù),再向物理頁X-1寫邏輯頁X-1對(duì)應(yīng)的數(shù)據(jù)時(shí),只能新增加一物理塊,在新增加的物理塊的第X-1頁寫入邏輯頁X-1,而新增加的物理塊的第X-2頁之前都是空白頁或者被寫入了臟數(shù)據(jù)。
[0004]因此,現(xiàn)有技術(shù)的缺點(diǎn)主要有:第一,不支持跳寫的NAND閃存需要在小于寫入頁之前的空白物理頁寫入臟數(shù)據(jù),第二,支持跳寫的NAND閃存在進(jìn)行覆蓋寫或者回頭寫以及跳寫時(shí)需要進(jìn)行分配新的空閑物理塊,所以物理塊的頁使用率較低。

【發(fā)明內(nèi)容】

[0005]有鑒于此,本發(fā)明提供了一種讀取數(shù)據(jù)方法以及數(shù)據(jù)寫入方法,以克服不支持跳寫的NAND閃存需要在小于寫入頁之前的空白物理頁寫入臟數(shù)據(jù),以及支持跳寫的NAND閃存在進(jìn)行覆蓋寫或者回頭寫以及跳寫時(shí)需要進(jìn)行分配新的空閑物理塊,導(dǎo)致的物理塊的頁使用率較低的問題。
[0006]為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
[0007]—種向NAND閃存寫入數(shù)據(jù)方法,包括:A1、將本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換成相應(yīng)的邏輯地址與邏輯頁地址;A2、確定所述邏輯地址對(duì)應(yīng)的鏈表的當(dāng)前鏈表頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的最新物理地址;A3、從所述最新物理地址的下一物理頁地址開始依次將所述本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域,每一物理頁包括數(shù)據(jù)存儲(chǔ)區(qū)域以及地址存儲(chǔ)區(qū)域;A4、根據(jù)本次寫操作中每一邏輯頁地址、所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)所述鏈表原始的動(dòng)態(tài)映射頁中的邏輯頁地址與物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新,所述動(dòng)態(tài)映射頁存儲(chǔ)有有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。
[0008]一種讀取NAND閃存中數(shù)據(jù)的方法,包括:B1、將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為邏輯地址與邏輯頁地址;B2:確定所述邏輯地址對(duì)應(yīng)的鏈表;B3:根據(jù)與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,確定出所述需要讀取的數(shù)據(jù)對(duì)應(yīng)的物理塊地址和物理頁地址,讀取所述物理塊地址與物理頁地址中存儲(chǔ)的數(shù)據(jù),所述動(dòng)態(tài)映射頁存儲(chǔ)有有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。
[0009]經(jīng)由上述的技術(shù)方案可知,本發(fā)明實(shí)施例公開的數(shù)據(jù)寫入方法,在執(zhí)行寫操作時(shí),由于邏輯頁地址與該邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址與該邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址,三者的對(duì)應(yīng)關(guān)系存儲(chǔ)在動(dòng)態(tài)映射頁中,所以物理頁地址為一的物理頁中可以不寫入邏輯頁地址一對(duì)應(yīng)的數(shù)據(jù)。對(duì)于物理頁地址而言,還是需要從物理頁低地址寫至物理頁高地址。所以在進(jìn)行覆蓋寫、回頭寫及跳寫時(shí),例如,需要重新寫入邏輯頁地址一對(duì)應(yīng)的數(shù)據(jù)(覆蓋寫),或者首先寫入了邏輯頁地址三對(duì)應(yīng)的數(shù)據(jù)后,現(xiàn)在需要寫邏輯頁地址二對(duì)應(yīng)的數(shù)據(jù)(回頭寫),或者在寫入邏輯頁地址二對(duì)應(yīng)的數(shù)據(jù)后,需要寫入邏輯頁地址四對(duì)應(yīng)的數(shù)據(jù)(跳寫)時(shí),如果當(dāng)前鏈表頭已經(jīng)寫滿,則增加一新空閑物理塊,但是寫入的數(shù)據(jù)可以寫在新增加的物理塊地址為零的物理頁中,并不需要寫在與邏輯頁地址一致的物理頁中,如果當(dāng)前鏈表頭沒有被寫滿,那么直接將需要寫入的數(shù)據(jù)寫入最新物理地址的下一物理頁地址開始的物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,從理論上說每一物理塊中的每一物理頁都可以寫入數(shù)據(jù),從而提高了物理塊中物理頁的使用率,不支持跳寫的NAND閃存,由于實(shí)現(xiàn)了邏輯頁的跳寫,并不存在也不需要物理頁的跳寫,所以不需要寫入臟數(shù)據(jù),從而提高了讀寫數(shù)據(jù)的速率。
【專利附圖】

【附圖說明】
[0010]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
[0011]圖1為本發(fā)明實(shí)施例公開的第一種向NAND閃存寫入數(shù)據(jù)方法的流程圖;
[0012]圖2為本發(fā)明實(shí)施例公開的第二種向NAND閃存寫入數(shù)據(jù)方法的流程圖;
[0013]圖3為固定映射鏈表向轉(zhuǎn)換成隨機(jī)映射鏈表的過程意圖;
[0014]圖4為本發(fā)明實(shí)施例提供的第一種在隨機(jī)映射鏈中寫入數(shù)據(jù)的方法的流程圖;[0015]圖5為本發(fā)明實(shí)施例提供的第二種在隨機(jī)映射鏈表中寫入數(shù)據(jù)的方法的流程圖;
[0016]圖6為物理塊I與物理塊2中各個(gè)物理頁的spare oob信息圖示;
[0017]圖7為本發(fā)明實(shí)施例公開的第一種讀取NAND閃存中數(shù)據(jù)的方法的流程圖;
[0018]圖8為本發(fā)明實(shí)施例公開的第二種讀取NAND閃存中數(shù)據(jù)的方法的流程圖;
[0019]圖9為本發(fā)明實(shí)施例公開的一種將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為物理塊地址與物理頁地址的方法流程圖;
[0020]圖10為將實(shí)施例六與實(shí)施例七相結(jié)合的一個(gè)具體實(shí)現(xiàn)算法流程圖;
[0021]圖11為本發(fā)明實(shí)施例公開的第一種加載動(dòng)態(tài)映射頁的方法的流程圖;
[0022]圖12為本發(fā)明實(shí)施例公開的第二種加載動(dòng)態(tài)映射頁的方法的流程圖。
【具體實(shí)施方式】
[0023]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0024]實(shí)施例一
[0025]請(qǐng)參閱附圖1,為本發(fā)明實(shí)施例公開的第一種向NAND閃存寫入數(shù)據(jù)方法的流程圖,該方法可以包括:
[0026]步驟SlOl:將本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換成相應(yīng)的邏輯地址與邏輯頁地址;
[0027]假設(shè)需要寫入NAND閃存的數(shù)據(jù)對(duì)應(yīng)的頁碼為120,而NAND閃存中每一物理塊有100個(gè)物理頁,那么頁碼數(shù)數(shù)為120的數(shù)據(jù)對(duì)應(yīng)的邏輯地址為1,對(duì)應(yīng)的邏輯頁地址為20。
[0028]步驟S102:確定上述邏輯地址對(duì)應(yīng)的鏈表的當(dāng)前鏈表頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的最新物理地址,從最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域;
[0029]每一物理頁包括兩個(gè)區(qū)域:數(shù)據(jù)存儲(chǔ)區(qū)域以及地址存儲(chǔ)區(qū)域??梢詫⑽锢眄撝写鎯?chǔ)的邏輯頁對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至一個(gè)結(jié)構(gòu)體中,那么地址存儲(chǔ)區(qū)域就為該結(jié)構(gòu)體的存儲(chǔ)區(qū)域。
[0030]每一邏輯地址對(duì)應(yīng)一個(gè)鏈表,每一鏈表中個(gè)各個(gè)物理塊對(duì)應(yīng)同一邏輯地址,即邏輯地址與鏈表是——對(duì)應(yīng)的。如果當(dāng)前鏈表頭共有100個(gè)物理頁,物理頁0-80都已經(jīng)被寫入數(shù)據(jù),那么最新物理地址為80。
[0031]鏈表中如果包括至少兩個(gè)物理塊,那么最初被寫入數(shù)據(jù)的物理塊為鏈表尾,最后被寫入數(shù)據(jù)的物理塊為鏈表頭,如果鏈表中只有一個(gè)物理塊,那么該物理塊既是鏈表頭,又是鏈表尾。由于鏈表的鏈表頭的物理塊地址可能會(huì)發(fā)生變換,例如,鏈表的鏈表頭被寫滿數(shù)據(jù)了,需要增加一新的空閑物理塊,新增加的這一空閑物理塊就變?yōu)殒湵淼逆湵眍^,所以稱鏈表的鏈表頭為當(dāng)前鏈表頭。
[0032]空閑物理塊是指每一物理頁中均沒有被寫入數(shù)據(jù)的物理塊,或者原本物理頁中有數(shù)據(jù),但是每一物理頁中的數(shù)據(jù)又都被擦除,且現(xiàn)在每一物理頁中均沒有數(shù)據(jù)的物理塊。[0033]在寫入數(shù)據(jù)時(shí),需要確定當(dāng)前鏈表頭中上次寫操作中最后被寫入數(shù)據(jù)的物理頁的物理頁地址即最新物理地址,因?yàn)樵趯懭霐?shù)據(jù)時(shí),需要以所述最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域。在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁中,目的是為了保存邏輯頁地址與存儲(chǔ)該邏輯頁地址對(duì)應(yīng)數(shù)據(jù)的物理頁的物理頁地址的對(duì)應(yīng)關(guān)系,只有將該對(duì)應(yīng)關(guān)系保存至存儲(chǔ)該邏輯頁地址對(duì)應(yīng)數(shù)據(jù)的物理頁中,才可以繼續(xù)后續(xù)的寫操作。
[0034]步驟S103:根據(jù)本次寫操作中每一邏輯頁地址、所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)上述鏈表的原始動(dòng)態(tài)映射頁中的邏輯頁地址與物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新。
[0035]動(dòng)態(tài)映射頁存儲(chǔ)有鏈表中有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。動(dòng)態(tài)映射頁存儲(chǔ)在內(nèi)存中。
[0036]在進(jìn)行覆蓋寫時(shí),假設(shè)已經(jīng)將邏輯頁地址九對(duì)應(yīng)的數(shù)據(jù)寫入物理地址為二的物理頁中,現(xiàn)在需要重新寫入邏輯頁地址九對(duì)應(yīng)的數(shù)據(jù),那么物理頁地址為二的物理頁中存儲(chǔ)的數(shù)據(jù)為無效數(shù)據(jù),若確定出當(dāng)前鏈表頭中最新物理地址為五,那么可以將邏輯頁地址九對(duì)應(yīng)的數(shù)據(jù)寫入物理地址為六的物理頁中,這時(shí)邏輯頁地址九與物理頁地址六相對(duì)應(yīng),原始的動(dòng)態(tài)映射頁中的邏輯頁地址九與物理頁地址二相對(duì)應(yīng),所以需要對(duì)原始的動(dòng)態(tài)映射頁進(jìn)行更新。同理在寫入新數(shù)據(jù)時(shí),也需要將邏輯頁地址、物理塊地址與物理頁地址的對(duì)應(yīng)關(guān)系更新至原始的動(dòng)態(tài)映射頁中。
[0037]本發(fā)明實(shí)施例公開的數(shù)據(jù)寫入方法,在執(zhí)行寫操作時(shí),由于邏輯頁地址與該邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址與該邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址,三者的對(duì)應(yīng)關(guān)系存儲(chǔ)在動(dòng)態(tài)映射頁中,所以物理頁地址為一的物理頁中可以不寫入邏輯頁地址一對(duì)應(yīng)的數(shù)據(jù)。對(duì)于物理頁地址而言,還是需要從物理頁低地址寫至物理頁高地址。所以在進(jìn)行覆蓋寫、回頭寫及跳寫時(shí),例如,需要重新寫入邏輯頁地址一對(duì)應(yīng)的數(shù)據(jù)(覆蓋寫),或者首先寫入了邏輯頁地址三對(duì)應(yīng)的數(shù)據(jù)后,現(xiàn)在需要寫邏輯頁地址二對(duì)應(yīng)的數(shù)據(jù)(回頭寫),或者在寫入邏輯頁地址二對(duì)應(yīng)的數(shù)據(jù)后,需要寫入邏輯頁地址四對(duì)應(yīng)的數(shù)據(jù)(跳寫)時(shí),如果當(dāng)前鏈表頭已經(jīng)寫滿,則增加一新空閑物理塊,但是寫入的數(shù)據(jù)可以寫在新增加的物理塊地址為零的物理頁中,并不需要寫在與邏輯頁地址一致的物理頁中,如果當(dāng)前鏈表頭沒有被寫滿,那么直接將需要寫入的數(shù)據(jù)寫入最新物理地址的下一物理頁地址對(duì)應(yīng)的物理頁中,從理論上說每一物理塊中的每一物理頁都可以寫入數(shù)據(jù),從而提高了物理塊中物理頁的使用率,不支持跳寫的NAND閃存,由于實(shí)現(xiàn)了邏輯頁的跳寫,并不存在也不需要物理頁的跳寫,所以不需要寫入臟數(shù)據(jù),從而提高了讀寫數(shù)據(jù)的速率。
[0038]實(shí)施例二
[0039]請(qǐng)參閱附圖2,為本發(fā)明實(shí)施例公開的第二種向NAND閃存寫入數(shù)據(jù)方法的流程圖,該方法可以包括:
[0040]步驟S200:將本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換成相應(yīng)的邏輯地址與邏輯頁地址;[0041 ] 在步驟S200之前還可以包括:
[0042]步驟S2001:判斷NAND閃存中空閑物理塊的數(shù)目是否大于預(yù)設(shè)閾值,如果是,則進(jìn)入步驟S2002,如果否,則進(jìn)入步驟S200 ;
[0043]步驟S2002:判斷垃圾隊(duì)列中是否存在垃圾鏈,如果是,則進(jìn)入步驟S2003,如果否,則進(jìn)入步驟S200 ;
[0044]步驟S2003:對(duì)垃圾隊(duì)列中的垃圾鏈進(jìn)行回收。
[0045]系統(tǒng)空閑物理塊比較少的原因可能是有太多的垃圾鏈,所以可以根據(jù)系統(tǒng)當(dāng)前的空閑物理塊的數(shù)目與預(yù)設(shè)閾值進(jìn)行比較,如果目前的空閑物理塊小少于預(yù)設(shè)閾值時(shí),則判斷是否有垃圾連存在,如果有則回收垃圾鏈,垃圾鏈回收操作最好在系統(tǒng)開機(jī)時(shí)執(zhí)行,因?yàn)檫@個(gè)時(shí)候用戶可能不會(huì)對(duì)NAND閃存進(jìn)行任何寫操作,所以可以在用戶感覺不到的情況下回收垃圾鏈,從而獲得空閑物理塊,如果在用戶向NAND閃存中寫入數(shù)據(jù)時(shí)回收垃圾鏈,用戶可能會(huì)感覺到寫操作的速度慢。
[0046]步驟S201:確定上述鏈表的當(dāng)前鏈表頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的最新物理地址;
[0047]步驟S202:判斷上述邏輯地址對(duì)應(yīng)的鏈表是否為固定映射鏈表,如果是,則進(jìn)入步驟S203,如果否,則進(jìn)入步驟S205 ;
[0048]步驟S201可以在步驟S202之后,只是為了畫圖方便所以才規(guī)定了順序。
[0049]上述鏈表包括至少一個(gè)物理塊,固定映射鏈表是指鏈表中的所有物理塊均為固定映射塊的鏈表,固定映射塊是指每一物理頁地址與寫入所述每一物理頁的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址相同的物理塊。
[0050]具體的,每一鏈表對(duì)應(yīng)一數(shù)組,該數(shù)組中的字符可以表示該鏈表是否為固定映射鏈表,假設(shè)數(shù)組中的字符為I時(shí),表示鏈表為固定映射鏈表,數(shù)組中的字符為O時(shí),表示鏈表為隨機(jī)定映射鏈表?;蛘吖潭ㄓ成滏湵砗碗S機(jī)映射鏈表可以使用一個(gè)位圖保存,例如邏輯地址相應(yīng)位為I表示固定映射鏈表,O為隨機(jī)映射鏈表。隨機(jī)映射鏈表是指至少有一物理塊為隨機(jī)映射塊的鏈表,隨機(jī)映射塊是指至少有一邏輯頁地址與存儲(chǔ)所述邏輯頁地址對(duì)應(yīng)數(shù)據(jù)的物理頁的物理頁地址不相同。
[0051]步驟S203:判斷本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁地址是否比所述最新物理地址大一,如果是,則進(jìn)入步驟S204,如果否,則進(jìn)入步驟S205 ;
[0052]本步驟的目的是判斷初始邏輯頁地址與要寫入初始邏輯頁地址對(duì)應(yīng)的數(shù)據(jù)的物理頁的物理頁地址是否相同,如果相同,那么該固定映射鏈表仍為固定映射鏈表,如果不同,固定映射鏈表就變?yōu)殡S機(jī)映射鏈表,此時(shí)還需要將與上述鏈表對(duì)應(yīng)的固定映射鏈表標(biāo)識(shí)修改為隨機(jī)映射鏈表標(biāo)識(shí)。
[0053]下面舉例說明固定映射鏈表向轉(zhuǎn)換成隨機(jī)映射鏈表的過程。請(qǐng)參閱圖3,圖3中的固定映射塊a、固定映射塊b以及隨機(jī)映射塊c是同一物理塊,該物理塊一共有12個(gè)物理頁,假設(shè)寫入每一物理頁中的數(shù)字代表寫入物理頁中的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址,固定映射塊a中的每一物理頁地址均與相應(yīng)的邏輯頁地址相同,所以為固定映射塊,固定映射塊b中是在固定映射塊a的基礎(chǔ)上又在物理頁地址10中寫入了邏輯頁地址10的數(shù)據(jù),所以該物理塊仍為固定映射塊,隨機(jī)映射塊c是在固定映射塊b的基礎(chǔ)上在物理頁地址11中寫入了邏輯頁地址5對(duì)應(yīng)的數(shù)據(jù),所以該物理塊由固定映射塊轉(zhuǎn)變?yōu)殡S機(jī)映射塊,該物理塊所在的鏈表也由固定映射鏈表轉(zhuǎn)變?yōu)殡S機(jī)映射鏈表。由于在一次寫操作中需要寫入的邏輯頁一定是連續(xù)的,例如邏輯頁三、邏輯頁四以及邏輯頁5,所以可以一次寫入。
[0054]步驟S204:從最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域,結(jié)束本次寫操作。
[0055]固定映射鏈中由于物理頁地址與邏輯頁地址相同,所以不需要?jiǎng)討B(tài)映射頁。不論是固定映射塊還是隨機(jī)映射塊,都需要保存一些必要的信息,以方便在讀寫數(shù)據(jù)時(shí)能更快的建立所需要的信息,在每一物理頁中都會(huì)保存的信息是:參數(shù)BlkLogicAddr,該參數(shù)表示物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址,該參數(shù)的名稱并不一定為BlkLogicAddr,可以為其它。物理頁地址零中還包括物理塊對(duì)應(yīng)的邏輯地址的參數(shù),這個(gè)參數(shù)可以在物理頁地址零對(duì)應(yīng)的物理頁中,也可以在其它物理頁中,在此不作具體限定。
[0056]步驟S205:從最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至這一物理頁的地址存儲(chǔ)區(qū)域,并進(jìn)入步驟S206。
[0057]步驟S205中依次寫入本次寫操作需要寫入的數(shù)據(jù)具體可以包括:
[0058]Al、判斷當(dāng)前鏈表頭是否被寫滿,如果是,則進(jìn)入步驟A2,如果否,則從最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,并在寫入的過程中返回步驟Al判斷當(dāng)前鏈表頭是否被寫滿;
[0059]A2、為鏈表增加一空閑物理塊,將需要寫入的數(shù)據(jù)寫入增加的空閑物理塊中,新增加的空閑物理塊為當(dāng)前鏈表頭。
[0060]在當(dāng)前鏈表頭中寫入數(shù)據(jù)時(shí),首先判斷當(dāng)前鏈表頭是否有可以寫入數(shù)據(jù)的空白物理頁,如果否,則直接增加一空閑物理塊,如果是,則直接將數(shù)據(jù)寫入空白物理頁中,如果當(dāng)前鏈表頭中剩余的空白物理頁的頁數(shù)不足夠保存要寫的數(shù)據(jù)對(duì)應(yīng)的頁數(shù),將先將當(dāng)前鏈表頭寫滿,再為鏈表重新分配一個(gè)空閑物理塊,然后將剩余的數(shù)據(jù)寫入重新分配的空閑物理塊中。
[0061 ] 空白物理頁是指沒有存儲(chǔ)數(shù)據(jù)的物理頁。
[0062]步驟S205與步驟S204不同,由于步驟S204中的鏈表為固定映射鏈,當(dāng)前鏈表頭也為固定映射塊,所以在當(dāng)前物理塊中可以寫完需要寫入的數(shù)據(jù),如果當(dāng)前物理塊中寫不完需要寫入的數(shù)據(jù),那么在增加一新空閑物理塊后,向增加的這一空閑物理塊中寫入數(shù)據(jù)時(shí),邏輯頁地址與物理頁地址肯定不相同,那么固定映射鏈就轉(zhuǎn)換成隨機(jī)映射鏈了,所以步驟S204中不需要增加新的空閑物理塊。
[0063]在步驟S205之后,步驟S206之前還可以包括:
[0064]Cl、判斷上述鏈表中的物理塊個(gè)數(shù)是否大于預(yù)設(shè)物理塊值,如果是,則進(jìn)入步驟C2,如果否,則進(jìn)入步驟S206 ;
[0065]C2、將上述鏈表添加至垃圾隊(duì)列,選擇一空閑物理塊,并將上述鏈表中的有效數(shù)據(jù)寫入選擇的空閑物理塊中,選擇的所述空閑物理塊為所述邏輯地址對(duì)應(yīng)的鏈表的當(dāng)前鏈表頭,進(jìn)入步驟S206。
[0066]鏈表被添加至垃圾隊(duì)列后,該鏈表變?yōu)槔湣?br> [0067]步驟Cl與步驟C2也可以在步驟S102與步驟S103之間。[0068]步驟S206:根據(jù)本次寫操作中每一邏輯頁地址與所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址,以及所述每一邏輯頁地址對(duì)應(yīng)的的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)上述鏈表的原始動(dòng)態(tài)映射頁中的邏輯頁地址、物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新。
[0069]動(dòng)態(tài)映射頁存儲(chǔ)有鏈表中有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址與所述邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址,以及所述邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址。
[0070]在進(jìn)行讀寫數(shù)據(jù)時(shí),由于需要對(duì)隨機(jī)映射鏈中的每一邏輯頁地址、物理頁地址以及物理塊地址進(jìn)行索引,所以引入動(dòng)態(tài)映射頁,用動(dòng)態(tài)映射頁保存隨機(jī)映射鏈中所有的邏輯頁地址、物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系,即某個(gè)邏輯頁的數(shù)據(jù)存儲(chǔ)在哪個(gè)物理塊的那個(gè)物理頁中。
[0071]動(dòng)態(tài)映射頁中邏輯頁地址、物理頁地址和物理塊地址的對(duì)應(yīng)的關(guān)系的數(shù)據(jù)結(jié)構(gòu)可以但不限定為:
[0072]Typedef struct tag_Akmtd_Nand_pageinfo
[0073]{
[0074]FakeAddr -J/邏輯頁所在的物理塊的物理塊地址
[0075]PageAddr ;//邏輯頁所在物理頁的物理頁地址
[0076]}本數(shù)據(jù)結(jié)構(gòu)中并沒有定義各個(gè)變量的類型,由于各個(gè)變量的類型不影響本發(fā)明實(shí)施例的實(shí)現(xiàn),所以在此不作具體限定。
[0077]本發(fā)明實(shí)施例,不僅僅有實(shí)施例一中的有益效果,而且在向鏈表中寫入數(shù)據(jù)時(shí),先判斷該鏈表是否為固定映射鏈表,如果是,則直接向當(dāng)前鏈表中寫入數(shù)據(jù),如果否,則向當(dāng)前鏈表中寫入數(shù)據(jù)后,還需要將動(dòng)態(tài)映射頁中的對(duì)應(yīng)關(guān)系進(jìn)行那個(gè)更新,由于只有隨機(jī)映射鏈表才具有動(dòng)態(tài)映射頁,所以節(jié)省了內(nèi)存空間。
[0078]實(shí)施例三
[0079]請(qǐng)參閱圖4,為本發(fā)明實(shí)施例提供的第一種在隨機(jī)映射鏈中寫入數(shù)據(jù)的方法的流程圖,該方法可以包括:
[0080]步驟S401:確定隨機(jī)映射鏈的當(dāng)前鏈表頭中當(dāng)前寫操作需要寫入數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁對(duì)應(yīng)的第一當(dāng)前最新物理地址,判斷第一當(dāng)前最新物理地址是否是預(yù)設(shè)關(guān)鍵信息頁的倍數(shù),如果是,則進(jìn)入步驟S402,如果否,則進(jìn)入步驟S404 ;
[0081]關(guān)鍵信息頁存儲(chǔ)有該關(guān)鍵信息頁所在物理頁的物理頁地址之前的每一有效物理頁地址與所述每一有效物理頁存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址的對(duì)應(yīng)關(guān)系,有效物理頁地址是指存儲(chǔ)的數(shù)據(jù)是有效數(shù)據(jù)的物理頁對(duì)應(yīng)的物理頁地址。
[0082]由于隨機(jī)映射鏈表中物理頁地址、邏輯頁地址與物理塊地址的對(duì)應(yīng)關(guān)系為隨機(jī)狀態(tài),因?yàn)橛心承┫到y(tǒng)內(nèi)存中并不能保存所有隨機(jī)映射鏈內(nèi)的物理頁地址、邏輯頁地址與物理塊地址的對(duì)應(yīng)關(guān)系即動(dòng)態(tài)映射頁,所以引入關(guān)鍵信息頁,以便為了更加快速的加載動(dòng)態(tài)映射頁。
[0083]若本次寫操作中沒有寫入數(shù)據(jù),那么第一當(dāng)前最新物理地址等于最新物理地址加一,如果本次寫操作中已經(jīng)寫入了部分?jǐn)?shù)據(jù),那么第一當(dāng)前最新物理地址是指本次寫操作中前一次在當(dāng)前鏈表頭中最后被寫入數(shù)據(jù)的物理頁的物理地址加一。預(yù)設(shè)關(guān)鍵信息頁的間隔值可以根據(jù)實(shí)際情況而定,例如物理頁地址為32的倍數(shù)的物理頁為關(guān)鍵信息頁,則預(yù)設(shè)關(guān)鍵信息頁的間隔值為31。
[0084]步驟S402:從第一當(dāng)前最新物理地址對(duì)應(yīng)的物理頁開始,按照物理頁地址由高至低依次遍歷各個(gè)物理頁中的地址存儲(chǔ)區(qū)域,直至遍歷至與第一當(dāng)前最新物理地址最近的關(guān)鍵信息頁;
[0085]由于關(guān)鍵信息頁中存儲(chǔ)有該關(guān)鍵信息頁所在物理頁的物理頁地址之前所有物理頁地址與其相應(yīng)的邏輯頁地址的對(duì)應(yīng)關(guān)系,所以遍歷至與第一當(dāng)前最新物理地址最近的關(guān)鍵信息頁就相當(dāng)于遍歷了所有的物理頁,這樣可以節(jié)省遍歷物理頁的時(shí)間。
[0086]步驟S403:將遍歷的每一邏輯頁地址與存儲(chǔ)所述每一邏輯頁地址對(duì)應(yīng)的數(shù)據(jù)的物理頁的物理頁地址的對(duì)應(yīng)關(guān)系,存儲(chǔ)至物理頁地址為第一當(dāng)前最新物理地址的物理頁中;
[0087]步驟S404:確定當(dāng)前鏈表頭在當(dāng)前寫操作需要寫入數(shù)據(jù)的對(duì)應(yīng)的初始邏輯頁地址對(duì)應(yīng)的第二當(dāng)前最新物理地址,計(jì)算從所述第二當(dāng)前最新物理地址至需要寫入下一關(guān)鍵信息頁時(shí),所需的物理頁頁數(shù)NUMl ;
[0088]如果是由步驟S401轉(zhuǎn)向的步驟S404,那么第二當(dāng)前最新物理地址等于第一當(dāng)前最新物理地址,如果是由步驟S403轉(zhuǎn)向的步驟S404,那么第二當(dāng)前最新物理地址等于第一當(dāng)前最新物理地址加一。
[0089]假設(shè)每一物理塊中共有20個(gè)物理頁,第二當(dāng)前最新物理地址為5,預(yù)設(shè)關(guān)鍵信息頁的間隔值為6,即物理頁地址為7的倍數(shù)的物理頁為關(guān)鍵信息頁,當(dāng)前寫操作需要寫入數(shù)據(jù)的邏輯頁頁數(shù)為5,與第二當(dāng)前最新物理地址為5最近的關(guān)鍵信息頁所在物理頁地址為零,那么下一關(guān)鍵信息頁所對(duì)應(yīng)的物理頁地址為7,所以NUM1=2。
[0090]步驟S405:判斷所需的物理頁頁數(shù)NUMl是否不小于當(dāng)前需要寫入NAND閃存中的邏輯頁頁數(shù)NUM2,如果是,則進(jìn)入步驟S406,如果否,則進(jìn)入步驟S407 ;
[0091]步驟S406:從所述當(dāng)前鏈表頭中物理頁地址為所述第二當(dāng)前最新物理地址開始依次寫入需要寫入的數(shù)據(jù),并進(jìn)入步驟S408 ;
[0092]步驟S407:從所述當(dāng)前鏈表頭中物理頁地址為所述第二當(dāng)前最新物理地址開始依次寫入所述當(dāng)前需要寫入NAND閃存中的NUMl個(gè)邏輯頁對(duì)應(yīng)的數(shù)據(jù),并返回步驟S401 ;
[0093]仍以步驟S404中的舉例進(jìn)行說明,由于NUM2=5,NUM1=2,所以只能寫入NUMl個(gè)邏輯頁的數(shù)據(jù)。
[0094]步驟S408:根據(jù)本次寫操作中每一邏輯頁地址、所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)上述鏈表的原始動(dòng)態(tài)映射頁中的邏輯頁地址、物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新。
[0095]本發(fā)明實(shí)施例中,因?yàn)橛心承┫到y(tǒng)內(nèi)存中并不能保存所有隨機(jī)映射鏈內(nèi)的物理頁地址、邏輯頁地址與物理塊地址的對(duì)應(yīng)關(guān)系即動(dòng)態(tài)映射頁,所以引入關(guān)鍵信息頁,以便為了更加快速的加載動(dòng)態(tài)映射頁。
[0096]實(shí)施例四
[0097]請(qǐng)參閱圖5,為本發(fā)明實(shí)施例提供的第二種在隨機(jī)映射鏈表中寫入數(shù)據(jù)的方法的流程圖,該步驟可以包括:[0098]步驟S501:確定隨機(jī)映射鏈表的當(dāng)前鏈表頭在當(dāng)前寫操作需要寫入數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁對(duì)應(yīng)的第一當(dāng)前最新物理地址,判斷第一當(dāng)前最新物理地址是否等于零,如果是,則進(jìn)入步驟S504,如果否,則進(jìn)入步驟S502 ;
[0099]步驟S502:判斷第一當(dāng)前最新物理地址是否是預(yù)設(shè)關(guān)鍵信息頁的倍數(shù),如果是,則進(jìn)入步驟S503,如果否,則進(jìn)入步驟S506;
[0100]步驟S503:判斷物理頁地址為第一當(dāng)前最新物理地址的物理頁與離其最近的關(guān)鍵信息頁之間的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁連續(xù)段的段數(shù),是否超過預(yù)設(shè)邏輯頁連續(xù)段的段數(shù)值,如果是,則進(jìn)入步驟S504,如果否,則進(jìn)入步驟S506 ;
[0101]邏輯頁連續(xù)段是指物理地址由小到大順序相鄰的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址也是由小到大順序相鄰,邏輯頁連續(xù)段至少由一個(gè)物理頁組成。假設(shè)兩個(gè)相鄰的關(guān)鍵信息頁之間共有5個(gè)物理頁,如果物理頁1(表示物理頁地址為I的物理頁中,為了方便才這樣寫,后面的寫法類似的意義相同)中存儲(chǔ)邏輯頁2 (表示邏輯頁地址2對(duì)應(yīng)的數(shù)據(jù),為了方便才這樣寫,后面寫法類似的意義相同)、物理頁2中存儲(chǔ)邏輯頁3、物理頁3中存儲(chǔ)物理頁1、物理頁4中存儲(chǔ)邏輯頁5以及物理頁5中存儲(chǔ)邏輯頁4,那么邏輯頁段的段數(shù)為4段,因?yàn)檫壿嬳?與邏輯頁3是連續(xù)的,其他頁都不是連續(xù)的。步驟S504:從第一當(dāng)前最新物理地址對(duì)應(yīng)的物理頁依次往前遍歷各個(gè)物理頁的物理頁地址與其對(duì)應(yīng)的邏輯頁地址的對(duì)應(yīng)關(guān)系,直至遍歷至與第一當(dāng)前最新物理地址最近的關(guān)鍵信息頁;
[0102]步驟S505:將遍歷的每一邏輯頁地址與所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址的對(duì)應(yīng)關(guān)系存儲(chǔ)至物理頁地址為第一當(dāng)前最新物理地址的物理頁中;
[0103]關(guān)鍵信息頁可以只包括數(shù)據(jù)存儲(chǔ)區(qū)域,不用包括地址存儲(chǔ)區(qū)域。
[0104]步驟S506:確定當(dāng)前鏈表頭在當(dāng)前寫操作需要寫入數(shù)據(jù)的初始物理頁的第二當(dāng)前最新物理地址,計(jì)算從第二當(dāng)前最新物理地址至需要寫入下一關(guān)鍵信息頁時(shí),所需的物理頁頁數(shù)NUMl ;
[0105]步驟S507:判斷所需的物理頁頁數(shù)NUMl是否不小于當(dāng)前需要寫入NAND閃存中的邏輯頁頁數(shù)NUM2,如果是,則進(jìn)入步驟S508,如果否,則進(jìn)入步驟S509 ;
[0106]步驟S508:從當(dāng)前鏈表頭中物理頁地址為第二當(dāng)前最新物理地址開始依次寫入需要寫入的數(shù)據(jù),并進(jìn)入步驟S510 ;
[0107]步驟S509:從當(dāng)前鏈表頭中物理頁地址為第二當(dāng)前最新物理地址開始依次寫入所述當(dāng)前需要寫入NAND閃存中的NUMl個(gè)邏輯頁對(duì)應(yīng)的數(shù)據(jù),并返回步驟S501。
[0108]步驟S510:根據(jù)本次寫操作中每一邏輯頁地址、所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)上述鏈表的原始動(dòng)態(tài)映射頁中的邏輯頁地址、物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新。
[0109]本發(fā)明實(shí)施例中,必須將物理頁地址為零的物理頁作為關(guān)鍵信息頁,若某一物理頁地址為預(yù)設(shè)關(guān)鍵信息頁的倍數(shù),但是該物理頁與離其最近的關(guān)鍵信息頁之間的邏輯頁連續(xù)段的段數(shù)比預(yù)設(shè)邏輯頁連續(xù)段的段數(shù)值小,則說明該物理頁與離其最近的關(guān)鍵信息頁之間的邏輯頁的連續(xù)性較好,所以不需要將該物理頁最為關(guān)鍵信息頁,可以直接在該物理頁中寫入數(shù)據(jù),相當(dāng)于節(jié)省了一個(gè)物理頁,從而提高了物理頁的使用率。上述各個(gè)實(shí)施例中的每一物理頁中可以包含如下參數(shù),可以將這些信息統(tǒng)稱為spare oob信息,spare oob信息可以方便在讀寫數(shù)據(jù)或者開機(jī)時(shí)能更快的建立所有需要的支撐系統(tǒng)運(yùn)行的信息:參數(shù)PageFlags,最高位表示是關(guān)鍵信息頁還是普通的存儲(chǔ)數(shù)據(jù)的物理頁(假設(shè)O表示普通的存儲(chǔ)數(shù)據(jù)的物理頁,I表示關(guān)鍵信息頁),低位表示該物理塊在邏輯鏈上層數(shù);參數(shù)GarbageTime,記錄該物理塊被放入垃圾隊(duì)列的次數(shù),被放入垃圾隊(duì)列一次此值將被加一,該參數(shù)可以只存在物理頁地址零對(duì)應(yīng)的物理頁中,并且該參數(shù)只在該物理塊被放入垃圾隊(duì)列時(shí)才被使用;參數(shù)BlkLogicAddr,物理地址為零的物理頁中的該參數(shù)表示此物理塊對(duì)應(yīng)的邏輯地址,其它物理頁中的該參數(shù)表示物理頁對(duì)應(yīng)的邏輯頁地址;參數(shù)EraseTimeOrContinuePage:如果是物理頁地址為零的物理頁該參數(shù)表示該物理塊被擦除的次數(shù)EraseTime,其它物理頁中的該參數(shù)表示前面有多少個(gè)頁是連續(xù)的ContinuePage ;參數(shù)RSV,表示預(yù)留空間。
[0110]參數(shù)GarbageTime的作用,假設(shè)系統(tǒng)中允許的鏈表最多包括2個(gè)物理塊,當(dāng)鏈表A包括3個(gè)物理塊時(shí),需要將鏈表A中的數(shù)據(jù)搬移至新的空閑物理塊中,新的空閑塊組成的鏈表為鏈表B,并將原來鏈表A放入垃圾隊(duì)列中,如果在數(shù)據(jù)搬移過程中掉電了,在上電后由于鏈表A中參數(shù)GarbageTime比鏈表B中的參數(shù)GarbageTime值大,所以鏈表B中的數(shù)據(jù)為最新的數(shù)據(jù)。
[0111]參數(shù)RSV是為了以后進(jìn)行修改使用,由于有預(yù)留空間所以不必修改內(nèi)部的數(shù)據(jù)結(jié)構(gòu),從而使NAND閃存有更好的兼容性。
[0112]每一個(gè)物理頁中必須有參數(shù)BlkLogicAddr,其他的參數(shù)可以有也可以沒有,可以有其中的一個(gè)或者任意幾個(gè)的組合都不影響本發(fā)明實(shí)施例實(shí)現(xiàn),所以每一物理頁中到底有幾個(gè)參數(shù),這里不做具體限定。上述參數(shù)的名稱是根據(jù)各個(gè)參數(shù)的含義用英文縮寫定義的,但是并不限制于此。
[0113]可以將上述的參數(shù)封裝在一個(gè)結(jié)構(gòu)體中。
[0114]如圖6所示,為物理塊I與物理塊2,物理塊I中物理頁5中的spare oob信息為:物理頁5不是關(guān)鍵信息頁而是普通的存儲(chǔ)數(shù)據(jù)的物理頁,物理頁5所在的物理塊被放入垃圾隊(duì)列的次數(shù)為0,由于物理塊I的前一物理塊地址為END,所以物理塊I是鏈表尾,連續(xù)頁頁數(shù)為5。物理塊2中的物理O為關(guān)鍵信息頁,關(guān)鍵信息頁中其他參數(shù)的功能可以不用關(guān)心。
[0115]每一物理頁中有了上述參數(shù),在系統(tǒng)啟動(dòng)時(shí),如果系統(tǒng)在上次掉電不是正常的掉電,那么可以從根據(jù)物理頁中的spare oob信息還原上次掉電前的信息,讀每一物理頁中的spare oob信息,其實(shí)就是讀取驅(qū)動(dòng)的NAND,驅(qū)動(dòng)會(huì)返回讀寫的成功以及失敗的狀態(tài),如果返回成功狀態(tài),則當(dāng)前讀取的物理頁所在的物理塊是可以正常被讀物數(shù)據(jù)的物理塊即好塊,如果返回失敗狀態(tài),則說明當(dāng)前讀取的物理頁所在物理塊為壞塊,即不能正常被讀物數(shù)據(jù)的物理塊,并標(biāo)記該物理塊是壞塊,在下次讀讀取數(shù)據(jù)時(shí),就不會(huì)讀取這一物理塊中的數(shù)據(jù)了,或者對(duì)壞塊進(jìn)行修復(fù)。
[0116]上述實(shí)施例詳細(xì)說明了如何在NAND閃存寫數(shù)據(jù),對(duì)于本發(fā)明實(shí)施例中寫入數(shù)據(jù)的方法可采用多種讀取數(shù)據(jù)的方法,因此本發(fā)明還公開了幾種讀取數(shù)據(jù)的方法,下面給出具體的實(shí)施例進(jìn)行詳細(xì)說明。
[0117]實(shí)施例五[0118]請(qǐng)參閱圖7,為本發(fā)明實(shí)施例公開的第一種讀取NAND閃存中數(shù)據(jù)的方法的流程圖,該方法可以包括:
[0119]步驟S701:將本次讀操作需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為邏輯地址與邏輯頁地址;
[0120]步驟S702:確定所述邏輯地址對(duì)應(yīng)的鏈表;
[0121]步驟S703:根據(jù)與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,確定出所述需要讀取的數(shù)據(jù)對(duì)應(yīng)的物理塊地址和物理頁地址,讀取所述物理塊地址與物理頁地址中存儲(chǔ)的數(shù)據(jù)。
[0122]動(dòng)態(tài)映射頁中存儲(chǔ)有鏈表中有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。
[0123]本發(fā)明實(shí)施例寫入NAND閃存中數(shù)據(jù)的方法與實(shí)施例一中的方法一致,所以讀取數(shù)據(jù)時(shí),可以先獲得需要讀取數(shù)據(jù)對(duì)應(yīng)的物理頁地址以及物理塊地址,這樣就可以從相應(yīng)的物理塊地址與物理頁地址讀取數(shù)據(jù)了。實(shí)施例六
[0124]請(qǐng)參閱圖8,為本發(fā)明實(shí)施例公開的第二種讀取NAND閃存中數(shù)據(jù)的方法的流程圖,該方法可以包括:
[0125]步驟S800:將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為邏輯地址與邏輯頁地址;
[0126]步驟S801:確定上述邏輯地址對(duì)應(yīng)的鏈表;
[0127]步驟S802:根據(jù)與鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,確定出初始邏輯頁對(duì)應(yīng)的物理塊地址與物理頁地址;
[0128]步驟S803:根據(jù)需要讀取的初始邏輯頁地址與需要讀取的邏輯頁的總數(shù),得到需要讀取的結(jié)束邏輯頁地址;
[0129]步驟S804:將物理連續(xù)頁設(shè)置為零;
[0130]步驟S805:判斷下一邏輯頁與初始邏輯頁是否在同一物理塊中以及所述下一邏輯頁對(duì)應(yīng)的物理頁地址是否比初始邏輯頁對(duì)應(yīng)的物理頁地址大一,如果是,則進(jìn)入步驟S807,如果否,則進(jìn)入步驟S808 ;
[0131]步驟S805只是在比較下一邏輯頁與初始邏輯頁時(shí),才執(zhí)行其他時(shí)候不執(zhí)行。
[0132]步驟S806:判斷下一邏輯頁與當(dāng)前需要讀取數(shù)據(jù)的邏輯頁是否在同一物理塊中以及所述下一邏輯頁對(duì)應(yīng)的物理頁地址是否比當(dāng)前需要讀取數(shù)據(jù)的邏輯頁對(duì)應(yīng)的物理頁地址大一,如果是,則進(jìn)入步驟S807,如果否,則進(jìn)入步驟S809 ;
[0133]本步驟是為了判斷從初始邏輯頁開始共有幾個(gè)連續(xù)頁,即參數(shù)ContinuePage的值。
[0134]步驟S807:將所述物理連續(xù)頁加一,并判斷所述下一邏輯頁地址是否大于所述結(jié)束邏輯頁地址,如果否,則所述下一邏輯頁為當(dāng)前需要讀取數(shù)據(jù)的邏輯頁,并返回步驟S806,如果是,則進(jìn)入步驟S809 ;
[0135]步驟S808:將物理連續(xù)頁設(shè)置為一;
[0136]步驟S809:從初始邏輯頁開始讀取所述物理連續(xù)頁個(gè)邏輯頁中的數(shù)據(jù)。
[0137]本發(fā)明實(shí)施例,如果讀取的邏輯頁數(shù)很多,可以先判斷需要讀取的邏輯頁是否連續(xù),可以一次讀取ContinuePage個(gè)邏輯頁的數(shù)值,這樣就可以減少讀取數(shù)據(jù)的時(shí)間。例如需要讀取邏輯頁O至邏輯頁3中的數(shù)據(jù),那么判斷邏輯頁O至邏輯頁3中的數(shù)據(jù)是否連續(xù),如果邏輯頁O中的數(shù)據(jù)存儲(chǔ)于物理頁I中,邏輯頁I中的數(shù)據(jù)存儲(chǔ)與物理頁2中,邏輯頁2中的數(shù)據(jù)存儲(chǔ)于物理頁4中,邏輯頁3中的數(shù)據(jù)存儲(chǔ)與物理頁3中,那么邏輯頁O與邏輯頁I是連續(xù)的。
[0138]實(shí)施例七
[0139]請(qǐng)參閱圖9,為本發(fā)明實(shí)施例公開的一種將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為物理塊地址與物理頁地址的方法流程圖,該方法可以包括:
[0140]步驟S901:將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為邏輯地址與邏輯頁地址;
[0141]步驟S902:根據(jù)需要讀取的初始邏輯頁地址與需要讀取的邏輯頁的總數(shù),得到需要讀取的結(jié)束邏輯頁地址;
[0142]步驟S903:判斷所述邏輯地址對(duì)應(yīng)的鏈表是否為固定映射鏈表,如果是,則進(jìn)入步驟S904,如果否,則進(jìn)入步驟S907 ;
[0143]鏈表包括至少一個(gè)物理塊,固定映射鏈表是指鏈表中的所有物理塊均為固定映射塊,固定映射塊是指每一物理頁地址與寫入所述每一物理頁的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址相同的物理塊。
[0144]步驟S904:判斷初始邏輯頁是否大于鏈表的當(dāng)前鏈表頭的最新物理地址,如果否,則進(jìn)入步驟S905,如果是,則進(jìn)入步驟S906 ;
[0145]最新物理地址是指當(dāng)前鏈表頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的物理頁地址。
[0146]步驟S905:初始邏輯頁對(duì)應(yīng)的物理塊地址為當(dāng)前鏈表頭的物理地址,初始邏輯頁對(duì)應(yīng)的物理頁地址為初始邏輯頁對(duì)應(yīng)的邏輯頁地址,結(jié)束。
[0147]由于鏈表為固定映射鏈,所以邏輯頁地址與物理頁地址是相同的,如果物理塊中有90個(gè)物理頁,物理頁地址由O至99,邏輯頁O對(duì)應(yīng)的數(shù)據(jù)寫在物理頁O中,邏輯頁I對(duì)應(yīng)的數(shù)據(jù)寫在物理頁I中,以此類推,所以如果鏈表中如果有兩個(gè)物理塊,必定是鏈表尾被寫滿了,如果鏈表頭也被寫滿數(shù)據(jù),說明鏈表尾存儲(chǔ)的數(shù)據(jù)已經(jīng)是無效數(shù)據(jù)了,可以將鏈表尾舍棄,所以在一個(gè)固定映射鏈中最多有兩個(gè)物理塊。
[0148]步驟S906:初始邏輯頁對(duì)應(yīng)的物理塊地址為鏈表的鏈表尾的物理地址,初始邏輯頁對(duì)應(yīng)的物理頁地址為初始邏輯頁對(duì)應(yīng)的邏輯頁地址,結(jié)束。
[0149]步驟S907:判斷所述鏈表是否存在與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,如果否,則進(jìn)入步驟S908,如果是,則進(jìn)入步驟S909 ;
[0150]步驟S908:將鏈表中每一有效物理頁地址與所述每一有效物理頁存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址以及所述每一有效物理頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系加載至與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁中;
[0151]有效物理頁地址是指存儲(chǔ)的數(shù)據(jù)為有效數(shù)據(jù)的物理頁的物理頁地址。
[0152]步驟S909:從動(dòng)態(tài)映射頁中獲取初始邏輯頁對(duì)應(yīng)的物理塊地址與物理頁地址。
[0153]有可能需要讀取的邏輯頁對(duì)應(yīng)的數(shù)據(jù)并沒有寫入NAND閃存中,這時(shí)在動(dòng)態(tài)映射頁中該邏輯頁地址對(duì)應(yīng)的物理頁地址為Oxff,物理塊地址為Oxff。當(dāng)然也可以是其他數(shù)值,位數(shù)也不一定是16位。
[0154]為了進(jìn)一步說明實(shí)施例六與實(shí)施例七,下面將寫出一個(gè)具體的算法,由于編程語言有很多種,在此只寫出一種但并不代表本發(fā)明實(shí)施例保護(hù)的范圍僅限于此。[0155]請(qǐng)參閱圖10,為將實(shí)施例六與實(shí)施例七相結(jié)合的一個(gè)具體實(shí)現(xiàn)算法流程圖。
[0156]圖中各個(gè)變量的含義如下=Logpage表示要讀的初始邏輯頁地址,PageNum表示要讀取的邏輯頁總數(shù),EndLogPage表示要讀的結(jié)束邏輯頁地址,PreBlock表示前一個(gè)需要讀取的邏輯頁所在的物理塊的物理塊地址,PreFirstPage表示前一個(gè)邏輯頁對(duì)應(yīng)的物理頁地址,ContinuePage表示目前有多少個(gè)頁是從PreFirstPage開始連續(xù)的。
[0157]步驟SlOOl:獲得需要讀取數(shù)據(jù)對(duì)應(yīng)的頁碼所在的邏輯塊的邏輯地址LogBlk和邏輯頁的邏輯頁地址LogPage ;
[0158]步驟S1002:為變量賦值:EndLogPage=LogPage+PageNum, PreBlock=OxFFFF,PreFirstPage=OxFFFF, ContinuePage=O ;
[0159]步驟S1003:根據(jù)邏輯地址LogBlk和邏輯頁的邏輯頁地址LogPage,獲得對(duì)應(yīng)的物理塊地址與物理頁地址,并將物理塊地址保存至CurBlock中,將物理頁地址保存至CurPage 中;
[0160]步驟S1004:判斷(PreBlock!=CurBlockI PreFirstPage+ContinuePage! =CurPage),如果是,則進(jìn)入步驟S1005,如果否,則進(jìn)入步驟SlOll ;
[0161]步驟S1005:判斷PreBlock!=OxFFFF,如果是,則進(jìn)入步驟S1006,如果否,則進(jìn)入步驟S1007 ;
[0162]步驟S1006:從 PreFirstPage 到 PreFirstPage+ContinuePage 讀 ContinuePage 個(gè)連續(xù)頁,進(jìn)入步驟S1009 ;
[0163]步驟S1007:判斷ContinuePage !=0,如果是,則進(jìn)入步驟S1008,如果否,則進(jìn)入步驟 S1009 ;
`[0164]步驟S1008:該邏輯頁的數(shù)據(jù)未寫入物理頁中,將Oxff賦值給CurBlock以及CurPage ;
[0165]步驟S1009:PreBlock=CurBlock, PreFirstPage=CurPage, ContinuePage=I ;
[0166]步驟SlOlO:LogPage++ ;
[0167]步驟S1012:判斷LogPage〈EndLogPage,如果是,則返回步驟S1003,如果否,貝丨J進(jìn)入步驟S1013 ;
[0168]步驟S1013:判斷ContinuePage==O,如果否,則進(jìn)入步驟S1014,如果是,則進(jìn)入步驟 S1015 ;
[0169]步驟S1014:從 PreFirstPage 到 PreFirstPage+CuntinuePage 讀取 ContinuePage個(gè)頁,進(jìn)入步驟S1015 ;
[0170]步驟SlOll:ContinuePage++,進(jìn)入步驟 SlOlO ;
[0171]步驟S1015:結(jié)束。
[0172]實(shí)施例八
[0173]理論上每個(gè)隨機(jī)映射鏈都會(huì)有一個(gè)動(dòng)態(tài)映射頁,但是考慮到內(nèi)存不夠的情況,可以在內(nèi)存中存儲(chǔ)幾個(gè)常用的鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,這時(shí)就需要判斷內(nèi)存中的各個(gè)動(dòng)態(tài)映射頁是否是經(jīng)常使用的,如果在內(nèi)存中并沒有某個(gè)經(jīng)常使用的鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,此時(shí)可以加載所述某個(gè)經(jīng)常使用的鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁至內(nèi)存中,并將內(nèi)存中不經(jīng)常使用的動(dòng)態(tài)映射頁刪除。如果內(nèi)存足夠大,可以將所有的鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁存儲(chǔ)至內(nèi)存中。
[0174]請(qǐng)參閱圖11,為本發(fā)明實(shí)施例公開的第一種加載動(dòng)態(tài)映射頁的方法的流程圖,該方法可以包括:
[0175]步驟SllOl:從鏈表的最新物理地址開始按照物理地址由大至小依次往前遍歷各個(gè)物理頁中的地址存儲(chǔ)區(qū)域;
[0176]步驟S1102:判斷遍歷的當(dāng)前物理頁是否為關(guān)鍵信息頁,如果是,則進(jìn)入步驟S1103,如果否,則進(jìn)入步驟S1104 ;
[0177]關(guān)鍵信息頁存儲(chǔ)有該關(guān)鍵信息頁所在物理頁地址之前的每一有效邏輯頁地址與所述每一有效邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理地址的對(duì)應(yīng)關(guān)系。
[0178]步驟S1103:將當(dāng)前物理頁存儲(chǔ)的數(shù)據(jù)加載至動(dòng)態(tài)映射頁中,加載動(dòng)態(tài)映射頁結(jié)束;
[0179]步驟S1104:將當(dāng)前物理頁的物理頁地址與當(dāng)前物理頁存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址以及當(dāng)期物理頁所在的物理塊地址的對(duì)應(yīng)關(guān)系加載至動(dòng)態(tài)映射頁中,并獲取需要遍歷的下一物理頁,返回步驟S1102。
[0180]在加載動(dòng)態(tài)映射頁時(shí),通過關(guān)鍵信息頁可以更快的加載動(dòng)態(tài)映射頁。
[0181]實(shí)施例九
[0182]請(qǐng)參閱圖12,為本發(fā)明實(shí)施例公開的第二種加載動(dòng)態(tài)映射頁的方法的流程圖,該方法可以包括:
[0183]步驟S1201:從鏈表的最新物理地址對(duì)應(yīng)的物理頁依次往前遍歷各個(gè)物理頁;
[0184]步驟S1202:判斷遍歷的當(dāng)前物理頁是否為關(guān)鍵信息頁,如果是,則進(jìn)入步驟S1203,如果否,則進(jìn)入步驟S1204 ;
[0185]步驟S1203:將當(dāng)前物理頁存儲(chǔ)的數(shù)據(jù)加載至動(dòng)態(tài)映射頁中,加載動(dòng)態(tài)映射頁結(jié)束;
[0186]步驟S1204:將當(dāng)前物理頁中存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址與當(dāng)前物理頁地址和所述當(dāng)前物理塊所在物理塊的物理塊地址的對(duì)應(yīng)關(guān)系加載至動(dòng)態(tài)映射頁中;
[0187]步驟S1205:確定從當(dāng)前物理頁開始邏輯頁連續(xù)段的頁數(shù)N,并將所述邏輯頁連續(xù)段中各個(gè)邏輯頁地址與存儲(chǔ)所述邏輯頁對(duì)應(yīng)數(shù)據(jù)的物理頁的物理頁地址以及所述存儲(chǔ)所述邏輯頁對(duì)應(yīng)數(shù)據(jù)的物理頁所在物理塊的物理塊地址的對(duì)應(yīng)關(guān)系加載至動(dòng)態(tài)映射頁中;
[0188]邏輯頁連續(xù)段是指物理地址由小到大順序相鄰的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址也是由小到大順序相鄰。
[0189]具體的,每一物理頁中存儲(chǔ)有參數(shù)EraseTimeOrContinuePage,如果是物理塊中的第一個(gè)物理頁那么該參數(shù)表示塊的擦除次數(shù),其它物理頁中該參數(shù)表示前面有多少個(gè)頁是連續(xù)的,例如物理頁O中存儲(chǔ)有邏輯頁O對(duì)應(yīng)的數(shù)據(jù)、物理頁I中存儲(chǔ)有邏輯頁6對(duì)應(yīng)的數(shù)據(jù)、物理頁2中存儲(chǔ)有邏輯頁I對(duì)應(yīng)的數(shù)據(jù)、物理頁3中存儲(chǔ)有邏輯頁2對(duì)應(yīng)的數(shù)據(jù)、物理頁4中存儲(chǔ)有邏輯頁3中的數(shù)據(jù)、物理頁5中存儲(chǔ)有邏輯頁5中的數(shù)據(jù),那么物理頁I中該參數(shù)等于O、物理頁2中該參數(shù)等于O、物理頁3中該參數(shù)等于1、物理頁4中該參數(shù)等于
2、物理頁5中該參數(shù)等于O。所以根據(jù)該參數(shù)可知邏輯頁連續(xù)段的頁數(shù)N,如果N大于等于1,則說明前一物理頁肯定不是關(guān)鍵信息頁。
[0190]步驟S1206:當(dāng)前物理頁對(duì)應(yīng)的物理頁地址減去N+1,獲得下一個(gè)需要遍歷的物理頁,并返回步驟S1202。
[0191]本發(fā)明實(shí)施例中,不僅僅具有實(shí)施例八的有益效果,而且由于讓當(dāng)前物理頁對(duì)應(yīng)的物理地址減去N+1,這樣獲得的物理頁地址對(duì)應(yīng)的物理頁可能是關(guān)鍵信息頁。減小了遍歷次數(shù),加快了讀取速度。
[0192]結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或【技術(shù)領(lǐng)域】內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
[0193]對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
【權(quán)利要求】
1.一種向NAND閃存寫入數(shù)據(jù)方法,其特征在于,包括: Al、將本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換成相應(yīng)的邏輯地址與邏輯頁地址; A2、確定所述邏輯地址對(duì)應(yīng)的鏈表的當(dāng)前鏈表頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的最新物理地址; A3、從所述最新物理地址的下一物理頁地址開始依次將所述本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域,每一物理頁包括數(shù)據(jù)存儲(chǔ)區(qū)域以及地址存儲(chǔ)區(qū)域; A4、根據(jù)本次寫操作中每一邏輯頁地址、所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述每一邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系,對(duì)所述鏈表原始的動(dòng)態(tài)映射頁中的邏輯頁地址與物理頁地址和物理塊地址的對(duì)應(yīng)關(guān)系進(jìn)行更新,所述動(dòng)態(tài)映射頁存儲(chǔ)有有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。
2.根據(jù)權(quán)利要求1所述方法,其特征在于,在步驟A3具體包括: A31、判斷所述邏輯地址對(duì)應(yīng)的鏈表是否為固定映射鏈表,所述鏈表包括至少一個(gè)物理塊,所述固定映射鏈表是指所述鏈表中的所有物理塊均為固定映射塊,所述固定映射塊是指每一物理頁地址與寫入所述每一物理頁的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址相同的物理塊,如果是,則進(jìn)入步驟A32,如果否,則進(jìn)入步驟A34 ; A32、判斷本次寫操作需要寫入的數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁地址是否比所述最新物理地址大一,如果是,則進(jìn)入步驟A33,`如果否,則進(jìn)入步驟A34 ; A33、從所述最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域,結(jié)束本次寫操作; A34、從所述最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域,在每寫完一物理頁后,將寫入這一物理頁中數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址存儲(chǔ)至所述這一物理頁的地址存儲(chǔ)區(qū)域,并進(jìn)入步驟A4。
3.根據(jù)權(quán)利要求2所述方法,其特征在于,步驟所述從所述最新物理地址的下一物理頁地址開始依次將本次寫操作需要寫入的數(shù)據(jù)寫入物理頁的數(shù)據(jù)存儲(chǔ)區(qū)域具體包括: A341、確定所述當(dāng)前鏈表頭中當(dāng)前寫操作需要寫入數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁對(duì)應(yīng)的第一當(dāng)前最新物理地址,判斷所述第一當(dāng)前最新物理地址是否是預(yù)設(shè)關(guān)鍵信息頁的倍數(shù),如果是,則進(jìn)入步驟A342,如果否,則進(jìn)入步驟A344,所述關(guān)鍵信息頁存儲(chǔ)有所述關(guān)鍵信息頁所在物理頁地址之前的每一有效物理頁地址與所述每一有效物理頁存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址的對(duì)應(yīng)關(guān)系,所述有效物理頁地址是指存儲(chǔ)的數(shù)據(jù)是有效數(shù)據(jù)的物理頁對(duì)應(yīng)的物理頁地址; A342、從所述第一當(dāng)前最新物理地址對(duì)應(yīng)的物理頁開始,按照物理頁地址由高至低依次遍歷各個(gè)物理頁中的地址存儲(chǔ)區(qū)域,直至遍歷至與所述第一當(dāng)前最新物理地址最近的關(guān)鍵信息頁; A343、將遍歷的每一邏輯頁地址與存儲(chǔ)所述每一邏輯頁地址對(duì)應(yīng)的數(shù)據(jù)的物理頁的物理頁地址的對(duì)應(yīng)關(guān)系存儲(chǔ)至物理頁地址為所述第一當(dāng)前最新物理地址的物理頁中; A344、確定所述當(dāng)前鏈表頭在當(dāng)前寫操作需要寫入數(shù)據(jù)對(duì)應(yīng)的初始邏輯頁地址對(duì)應(yīng)的第二當(dāng)前最新物理地址,計(jì)算從所述第二當(dāng)前最新物理地址至需要寫入下一關(guān)鍵信息頁時(shí),所需的物理頁頁數(shù)NUMl ; A345、判斷所需的物理頁頁數(shù)NUMl是否不小于當(dāng)前需要寫入NAND閃存中的邏輯頁頁數(shù)NUM2,如果是,則進(jìn)入步驟A346,如果否,則進(jìn)入步驟A347 ; A346、從所述當(dāng)前鏈表頭中物理頁地址為所述第二當(dāng)前最新物理地址開始依次寫入需要寫入的數(shù)據(jù),并進(jìn)入步驟A4 ; A347、從所述當(dāng)前鏈表頭中物理頁地址為所述第二當(dāng)前最新物理地址開始依次寫入所述當(dāng)前需要寫入NAND閃存中的NUMl個(gè)邏輯頁對(duì)應(yīng)的數(shù)據(jù),并返回步驟A341。
4.根據(jù)權(quán)利要求3所述方法,其特征在于,所述判斷所述第一當(dāng)前最新物理地址是否是預(yù)設(shè)關(guān)鍵信息頁的倍數(shù)具體包括: A3411、判斷所述第一當(dāng)前最新物理地址是否等于零,如果是,則進(jìn)入步驟A342,如果否,則進(jìn)入步驟A3412 ; A3412、判斷所述第一當(dāng)前最新物理地址是否是所述預(yù)設(shè)關(guān)鍵信息頁的倍數(shù),如果是,則進(jìn)入步驟A3413,如果否,則進(jìn)入步驟A344; A3413、判斷物理頁地址為所述第一當(dāng)前最新物理地址的物理頁與離其最近的關(guān)鍵信息頁之間的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁連續(xù)的段數(shù),是否超過預(yù)設(shè)邏輯頁連續(xù)段的值,所述邏輯頁連續(xù)段是指物理地址由小到大順序相鄰的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址也是由小到大順序相鄰,所述邏輯頁連續(xù)段至少由一個(gè)物理頁組成,如果是,則進(jìn)入步驟A342,如果`否,則進(jìn)入步驟A344。
5.根據(jù)權(quán)利要求1所述方法,其特征在于,在步驟A3之后,步驟A4之前還包括: Cl、判斷所述鏈表中的物理塊個(gè)數(shù)是否大于預(yù)設(shè)物理塊值,如果是,則進(jìn)入步驟C2,如果否,則進(jìn)入步驟A4; C2、將所述鏈表添加至垃圾隊(duì)列,選擇一空閑物理塊,并將所述鏈表中的有效數(shù)據(jù)寫入選擇的空閑物理塊中,選擇的所述空閑物理塊為所述邏輯地址對(duì)應(yīng)的鏈表的當(dāng)前鏈表頭,進(jìn)入步驟A4。
6.一種讀取NAND閃存中數(shù)據(jù)的方法,其特征在于,包括: B1、將需要讀取的數(shù)據(jù)對(duì)應(yīng)的頁碼轉(zhuǎn)換為邏輯地址與邏輯頁地址; B2:確定所述邏輯地址對(duì)應(yīng)的鏈表; B3:根據(jù)與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,確定出所述需要讀取的數(shù)據(jù)對(duì)應(yīng)的物理塊地址和物理頁地址,讀取所述物理塊地址與物理頁地址中存儲(chǔ)的數(shù)據(jù),所述動(dòng)態(tài)映射頁存儲(chǔ)有有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址、所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理頁的物理頁地址以及所述有效數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址對(duì)應(yīng)的邏輯頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系。
7.根據(jù)權(quán)利要求6所述方法,其特征在于,所述讀取所述物理塊地址與物理頁地址中存儲(chǔ)的數(shù)據(jù)具體包括: B31、根據(jù)本次讀操作需要讀取的初始邏輯頁地址與需要讀取的邏輯頁的總數(shù),得到需要讀取的結(jié)束邏輯頁地址;B32、將物理連續(xù)頁設(shè)置為零; B33、判斷下一邏輯頁與所述初始邏輯頁是否在同一物理塊中以及所述下一邏輯頁對(duì)應(yīng)的物理頁地址是否比所述初始邏輯頁對(duì)應(yīng)的物理頁地址大一,如果是,則進(jìn)入步驟B35,如果否,則進(jìn)入步驟B36; B34、判斷下一邏輯頁與當(dāng)前需要讀取數(shù)據(jù)的邏輯頁是否在同一物理塊中以及所述下一邏輯頁對(duì)應(yīng)的物理頁地址是否比當(dāng)前需要讀取數(shù)據(jù)的邏輯頁對(duì)應(yīng)的物理頁地址大一,如果是,則進(jìn)入步驟B35,如果否,則進(jìn)入步驟B37 ; B35、將所述物理連續(xù)頁加一,并判斷所述下一邏輯頁地址是否大于所述結(jié)束邏輯頁地址,如果否,則所述下一邏輯頁為當(dāng)前需要讀取數(shù)據(jù)的邏輯頁,并返回步驟B34,如果是,則進(jìn)入步驟B37 ; B36、將所述物理連續(xù)頁設(shè)置為一; B37、從所述初始邏輯頁開始讀取所述物理連續(xù)頁個(gè)邏輯頁中的數(shù)據(jù)。
8.根據(jù)權(quán)利要求6所述方法,其特征在于,所述鏈表中至多由兩個(gè)物理塊組成,所述確定出所述需要讀取的數(shù)據(jù)對(duì)應(yīng)的物理塊地址和物理頁地址具體包括: B321、判斷所述邏輯地址對(duì)應(yīng)的鏈表是否為固定映射鏈表,所述鏈表包括至少一個(gè)物理塊,所述固定映射鏈表是指所述鏈表中的所有物理塊均為固定映射塊,所述固定映射塊是指每一物理頁地址與寫入所述每一物理頁的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址相同的物理塊,如果是,則進(jìn)入步驟B322,如果否,則進(jìn)入步驟B325 ; B322、判斷所述初始邏輯頁是否大于所述鏈表的當(dāng)前鏈表頭的最新物理地址,所述最新物理地址是指所述當(dāng)前鏈表`頭在上次寫操作中最后被寫入數(shù)據(jù)的物理頁的物理頁地址,如果否,則進(jìn)入步驟B323,如果是,則進(jìn)入步驟B324 ; B323、所述初始邏輯頁對(duì)應(yīng)的物理塊地址為所述當(dāng)前鏈表頭的物理地址,所述初始邏輯頁對(duì)應(yīng)的物理頁地址為所述初始邏輯頁對(duì)應(yīng)的邏輯頁地址; B324、所述初始邏輯頁對(duì)應(yīng)的物理塊地址為所述鏈表的鏈表尾的物理地址,所述初始邏輯頁對(duì)應(yīng)的物理頁地址為所述初始邏輯頁對(duì)應(yīng)的邏輯頁地址; B325、判斷所述鏈表是否存在與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁,如果否,則進(jìn)入步驟B326,如果是,則進(jìn)入步驟B327 ; B326、將所述鏈表中每一有效物理頁地址與所述每一有效物理頁存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址以及所述每一有效物理頁所在的物理塊的物理塊地址的對(duì)應(yīng)關(guān)系加載至與所述鏈表對(duì)應(yīng)的動(dòng)態(tài)映射頁中,所述有效物理頁地址是指存儲(chǔ)的數(shù)據(jù)為有效數(shù)據(jù)的物理頁的物理頁地址; B327、從所述動(dòng)態(tài)映射頁中獲取所述初始邏輯頁對(duì)應(yīng)的物理塊地址與物理頁地址。
9.根據(jù)權(quán)利要求8所述方法,其特征在于,步驟B326具體包括: B3261、從所述鏈表的最新物理地址開始按照物理地址由大至小依次往前遍歷各個(gè)物理頁中的地址存儲(chǔ)區(qū)域; B3262、判斷遍歷的當(dāng)前物理頁是否為關(guān)鍵信息頁,關(guān)鍵信息頁存儲(chǔ)有所述關(guān)鍵信息頁所在物理頁地址之前的每一有效物理頁地址與所述每一有效物理頁存儲(chǔ)數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址的對(duì)應(yīng)關(guān)系,如果是,則進(jìn)入步驟B3263,如果否,則進(jìn)入步驟B3264 ; B3263、將所述當(dāng)前物理頁存儲(chǔ)的數(shù)據(jù)加載至所述動(dòng)態(tài)映射頁中,并進(jìn)入步驟B327 ;B3264、將所述當(dāng)前物理頁的物理頁地址與所述當(dāng)前物理頁存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁地址以及所述當(dāng)期物理頁所在的物理塊地址的對(duì)應(yīng)關(guān)系加載至動(dòng)態(tài)映射頁中,獲得需要遍歷的下一物理頁,返回步驟B3262。
10.根據(jù)權(quán)利要求9所述方法,其特征在于,所述獲得需要遍歷的下一物理頁具體包括: B32641:確定從所述當(dāng)前物理頁開始邏輯頁連續(xù)段的段數(shù)N,N大于等于1,N為正整數(shù),并將所述邏輯頁連續(xù)段中各個(gè)邏輯頁地址與存儲(chǔ)所述邏輯頁對(duì)應(yīng)數(shù)據(jù)的物理頁的物理頁地址以及所述存儲(chǔ)所述邏輯頁對(duì)應(yīng)數(shù)據(jù)的物理頁所在物理塊的物理塊地址的對(duì)應(yīng)關(guān)系加載至動(dòng)態(tài)映射頁中,所述邏輯頁連續(xù)段是指物理地址由小到大順序相鄰的物理頁中存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的邏輯頁的邏輯頁地址也是由小到大順序相鄰; B32642、所述當(dāng)前物理頁減去N+1,獲得下一個(gè)需要遍歷的物理頁,并返回步驟B3262。
【文檔編號(hào)】G06F12/06GK103514104SQ201210216196
【公開日】2014年1月15日 申請(qǐng)日期:2012年6月27日 優(yōu)先權(quán)日:2012年6月27日
【發(fā)明者】莊玉平, 艾駿, 胡勝發(fā) 申請(qǐng)人:安凱(廣州)微電子技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1