專利名稱:閃存的數(shù)據(jù)存儲方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)存儲方法,尤其涉及一種閃存的數(shù)據(jù)存儲方法。
背景技術(shù):
目前閃存技術(shù)高速發(fā)展,但其基本讀寫方式卻未改變,即,以頁 為單位寫入,以塊為單位擦除,而且必須經(jīng)擦除之后才能寫入數(shù)據(jù)。 因為閃存的這個特性, 一般是以塊為單位進行閃存的數(shù)據(jù)存儲。.而操 作系統(tǒng)的讀寫一般是以扇區(qū)為單位進行的,因此,操作系統(tǒng)可能只對 塊的一小部分寫入數(shù)據(jù),而剩下部分的數(shù)據(jù)寫入需要由底層軟件來執(zhí) 行。這就需要閃存內(nèi)部具有至少一個交換塊來進行數(shù)據(jù)交換。
基于上述提到的閃存的特性,如果操作系統(tǒng)寫入多個較小數(shù)據(jù)且 其地址不連續(xù),會導致閃存產(chǎn)生頻繁的數(shù)據(jù)搬遷(即,將數(shù)據(jù)復制到 交換塊中的動作)。
此外,對于具有鏈式結(jié)構(gòu)的文件系統(tǒng),文件的鏈與其具體內(nèi)容并 非放在同一個位置,而是按照一定的協(xié)議放在磁盤的不同位置。于是 在操作系統(tǒng)對一個文件執(zhí)行復制或?qū)懭霑r,需要在不同位置進行操作 才能完成。
例如,假設(shè)操作系統(tǒng)有兩個文件需要寫入,則對于每個文件,操
作系統(tǒng)都會寫入以下三個區(qū)域鏈表區(qū)、目錄區(qū)和數(shù)據(jù)區(qū)。以常用的 FAT文件系統(tǒng)為例,三個區(qū)域在磁盤中的位置關(guān)系如圖1所示。操作 系統(tǒng)一般按照以下順序?qū)懭霐?shù)據(jù)區(qū)、目錄區(qū)、鏈表區(qū)。當操作系統(tǒng) 寫完一個文件以后,再重復上述順序?qū)懴乱粋€文件。
當操作系統(tǒng)要寫入數(shù)據(jù)時,底層軟件取出 一個交換塊并將數(shù)據(jù)寫 入此交換塊,然后,將待寫入數(shù)據(jù)的塊的剩余區(qū)域從該塊復制到交換 塊中,之后,跳轉(zhuǎn)到操作系統(tǒng)要求的地址進行下一次寫入。下面我們將舉例說明傳統(tǒng)的閃存數(shù)據(jù)存儲操作。
假設(shè)一片閃存具有IO個塊,每個塊有256個扇區(qū)。則我們可以建 立如圖2所示的對照表。其中,邏輯第0塊對應物理第0塊,邏輯第 1塊對應物理第1塊,依此類推。
傳統(tǒng)的閃存數(shù)據(jù)存儲方法只使用一個交換塊,例如使用第9塊作 為交換塊。當操作系統(tǒng)向邏輯第3塊寫數(shù)據(jù)時,底層軟件將數(shù)據(jù)寫到 第9塊,之后,將第3塊中的原有數(shù)據(jù)搬到第9塊并在對照表上交換 兩個塊,然后將第3塊作為交換塊。此時對照表變?yōu)槿鐖D3所示,物 理第9塊變?yōu)檫壿嫷?塊,而物理第3塊則成為交換塊。
現(xiàn)在,假設(shè)操作系統(tǒng)要寫入兩個文件,其中鏈表區(qū)在邏輯第0塊, 目錄區(qū)在邏輯第l塊,數(shù)據(jù)區(qū)在邏輯第2至6塊。作為一個示例,假 設(shè)操作系統(tǒng)將完成以下任務(wù)
(1) 寫入第一個文件的數(shù)據(jù),寫入邏輯第2塊,寫100個扇區(qū)。
(2) 寫入第一個文件的目錄,寫入邏輯第l塊,寫1個扇區(qū)。
(3) 寫入第一個文件的鏈表,寫入邏輯第0塊,寫10個扇區(qū)。
(4) 寫入第二個文件的數(shù)據(jù),因為第一個文件的數(shù)據(jù)沒有占滿一 個塊,因此仍寫入邏輯第2塊,寫100個扇區(qū)。
(5) 寫入第二個文件的目錄,寫入邏輯第l塊,寫1個扇區(qū)。
(6) 寫入第二個文件的鏈表,寫入邏輯第0塊,寫10個扇區(qū)。
根據(jù)傳統(tǒng)的閃存數(shù)據(jù)儲存方法,上述寫入兩個文件的操作按照如下步驟進行
(a) 操作系統(tǒng)寫第一個文件,首先寫邏輯第2塊。底層軟件將數(shù) 據(jù)寫入交換塊(物理第9塊)。
(b) 操作系統(tǒng)寫邏輯第1塊。底層軟件先把原邏輯第2塊的原有 數(shù)據(jù)搬遷到交換塊,然后在對照表上互換兩個塊。因此對照表變?yōu)槿?圖4a所示。然后,底層軟件將接收的數(shù)據(jù)寫入新的交換塊,即物理第 2塊。
(c) 操作系統(tǒng)寫邏輯第0塊。底層軟件先把原邏輯第1塊的原有 數(shù)據(jù)搬遷到交換塊,然后在對照表上互換兩個塊。因此對照表變?yōu)槿?圖4b所示。然后,底層軟件將接收的數(shù)據(jù)寫入新的交換塊,即物理第1塊。
(d) 操作系統(tǒng)開始寫第二個文件,首先寫邏輯第2塊,底層軟件先將原邏輯第O塊的原有數(shù)據(jù)搬遷到交換塊,然后在對照表上互換兩個塊。因此對照表變?yōu)槿鐖D4c所示。然后,底層軟件將接收的數(shù)據(jù)寫 入新的交換塊,即物理第0塊。
(e) 操作系統(tǒng)寫邏輯第l塊。底層軟件先把原邏輯第2塊的原有數(shù)據(jù)搬遷到交換塊,然后在對照表上互換兩個塊。因此對照表變?yōu)槿鐖D4d所示。然后,底層軟件將接收的數(shù)據(jù)寫入新的交換塊,即物理第 9塊。
(f) 操作系統(tǒng)寫邏輯第0塊。底層軟件先把原邏輯第1塊的原有數(shù)據(jù)搬遷到交換塊,然后在對照表上互換兩個塊。因此對照表變?yōu)槿鐖D4e所示。然后,底層軟件將接收的數(shù)據(jù)寫入新的交換塊,即物理第2塊。
(g) 操作系統(tǒng)完成文件寫入。這時,底層軟件需要對剩余的數(shù)據(jù)執(zhí)行搬遷,即把邏輯第O塊的剩余數(shù)據(jù)搬到交換塊,并互換兩個塊在對照表的位置。這時,對照表變?yōu)槿鐖D4f所示。從而完成了寫入兩個文件的4喿作。
從以上所舉的傳統(tǒng)的閃存數(shù)據(jù)存儲的示例可以看出,在對閃存進行較小數(shù)據(jù)的寫入操作時,需要頻繁地操作數(shù)據(jù)區(qū)和FAT區(qū),造成了大量無謂的數(shù)據(jù)拷貝操作,從而增加了閃存的擦寫次數(shù),既影響速度, 也降低了閃存使用壽命。
發(fā)明內(nèi)容
鑒于現(xiàn)有的閃存數(shù)據(jù)存儲方法的上述缺陷,本發(fā)明的目的在于通過算法的優(yōu)化,減少因為操作系統(tǒng)的讀寫不規(guī)律而導致的閃存性能下降和使用壽命的縮短。
為實現(xiàn)上述目的,本發(fā)明提供了一種閃存的數(shù)據(jù)存儲方法,所述方法包括(1)為所述閃存設(shè)置至少一個交換塊,并為每個交換塊設(shè) 置相應的結(jié)構(gòu)體;(2)將數(shù)據(jù)寫入交換塊,并對該交換塊的結(jié)構(gòu)體賦 值;(3)根據(jù)所述交換塊的結(jié)構(gòu)體的值進行數(shù)據(jù)搬遷;(4)將每個
所述結(jié)構(gòu)體的值復位。
優(yōu)選地,當一次寫入操作包含多個數(shù)據(jù)寫入動作時,根據(jù)本發(fā)明的閃存數(shù)據(jù)存儲方法中的寫入數(shù)據(jù)并對結(jié)構(gòu)體賦值的步驟包括(2-1 ) 將第一數(shù)據(jù)寫入第一交換塊,對所述第一交換塊的結(jié)構(gòu)體賦值;(2-2) 檢查每個具有已賦值結(jié)構(gòu)體的交換塊,根據(jù)其結(jié)構(gòu)體的值判斷應將第 二數(shù)據(jù)寫入新交換塊還是寫入一個具有已賦值結(jié)構(gòu)體的交換塊; (2-3)如果判斷應將第二數(shù)據(jù)寫入新交換塊,則將所述第二數(shù)據(jù)寫入 新交換塊,并對所述新交換塊的結(jié)構(gòu)體進行賦值,否則,將所述第二 數(shù)據(jù)寫入所述具有已賦值結(jié)構(gòu)體的交換塊,并對該交換塊的結(jié)構(gòu)體重 新賦值;(2-4)重復步驟(2-1)至(2-3),直至完成所述多個數(shù)據(jù) 寫入動作。
根據(jù)本發(fā)明的方法,在將數(shù)據(jù)寫入交換塊之后,并不立即進行數(shù) 據(jù)搬遷,而是繼續(xù)進行下一個數(shù)據(jù)寫入動作,待本次寫入操作的所有 數(shù)據(jù)均已寫入適當交換塊之后再根據(jù)交換塊的結(jié)構(gòu)體統(tǒng)一執(zhí)行數(shù)據(jù)搬 遷。而傳統(tǒng)的做法是每次將數(shù)據(jù)寫入交換塊之后便立即進行數(shù)據(jù)搬遷。
因此,根據(jù)本發(fā)明的方法,能夠通過為每個交換塊所設(shè)置的結(jié)構(gòu) 體,記住交換塊與待寫入數(shù)據(jù)的塊的對應關(guān)系。同樣,由于結(jié)構(gòu)體, 使得能夠在進行數(shù)據(jù)寫入之前,迅速判斷是否需要進行數(shù)據(jù)搬遷和重 新取得交換塊。在寫入的多個數(shù)據(jù)地址不連續(xù)的情況下,通過本發(fā)明 的方法能夠減少大量的數(shù)據(jù)搬遷,從而節(jié)省了處理時間,提高了速度。 同時,由于減少了閃存的擦寫次數(shù),使得閃存的使用壽命得以延長。
圖1是示出了鏈式結(jié)構(gòu)文件系統(tǒng)在磁盤中的存儲方式的示意圖2是示出了一個示例性閃存結(jié)構(gòu)的對照表;
圖3是根據(jù)現(xiàn)有技術(shù)、對具有圖2所示結(jié)構(gòu)的閃存進行寫入一個 數(shù)據(jù)操作后的對照表;
圖4a至圖4f是根據(jù)現(xiàn)有技術(shù)、對具有圖2所示結(jié)構(gòu)的閃存進行 寫入兩個文件的操作過程的對照表;
圖5是示出了根據(jù)本發(fā)明的閃存的數(shù)據(jù)存儲方法的流程圖6是示出了根據(jù)本發(fā)明的執(zhí)行多個數(shù)據(jù)寫入動作的流程圖7是示出了根據(jù)本發(fā)明一個實施例寫入兩個文件之后的對照表。
具體實施例方式
下面結(jié)合附圖,對本發(fā)明的方法進行詳細地描述。
參照圖5,其示出了根據(jù)本發(fā)明的閃存的數(shù)據(jù)存儲方法的處理流 程。首先,為閃存設(shè)置至少一個交換塊,每個交換塊具有相應的結(jié)構(gòu) 體來記錄其信息(步驟501)。根據(jù)本發(fā)明的方法,當操作系統(tǒng)寫數(shù) 據(jù)時,首先將數(shù)據(jù)寫入交換塊,并對該交換塊所對應的結(jié)構(gòu)體賦值(步 驟502 )。然后,根據(jù)交換塊的結(jié)構(gòu)體的值進行數(shù)據(jù)搬遷(步驟503 ), 并將結(jié)構(gòu)體的值復位。
當 一次寫入操作包括多個數(shù)據(jù)寫入動作時,根據(jù)本發(fā)明的方法能 夠顯著提高數(shù)據(jù)存儲速度。在這種情況下,上述的步驟502可以細分 為以下子步驟首先,將一個數(shù)據(jù)寫入一個交換塊,并對該交換塊的 結(jié)構(gòu)體賦值(步驟5021 )。在寫入下一數(shù)據(jù)之前,首先檢查每個具有 已賦值結(jié)構(gòu)體的交換塊(即,已經(jīng)寫入了數(shù)據(jù)的交換塊),根據(jù)該交 換塊的結(jié)構(gòu)體值判斷是將新數(shù)據(jù)寫入新的交換塊還是寫入該之前已寫 入數(shù)據(jù)的交換塊(步驟5022),如果是前者,則將數(shù)據(jù)寫入新的交換 塊并對該交換塊的結(jié)構(gòu)體進行賦值(步驟5023 );如果是后者,則將 數(shù)據(jù)寫入已寫入了數(shù)據(jù)的交換塊,并對該交換塊的結(jié)構(gòu)體重新賦值(步 驟5024)。如此重復以上操作,直至所有數(shù)據(jù)均已寫入。
作為一個實施例,交換塊的結(jié)構(gòu)體具有以下數(shù)據(jù)結(jié)構(gòu)
Struct {
OlsBlockAddress; NewBlockAddress;ActSector; LogicAddress;
}
其中,OldBlockAddress表示待寫入數(shù)據(jù)的塊的物理地址,NewBlockAddress表示交才奐塊的4勿理i也i止,ActSector表示當前塊中口那 個扇區(qū)正在被操作系統(tǒng)訪問,如果操作系統(tǒng)正在訪問其他塊,則此變 量表示上次系統(tǒng)訪問過的扇區(qū)的下一個扇區(qū)。LogicAddress表示 ActSector所對應的邏輯扇區(qū)地址。
仍以上面描述的情況為例,即,對具有10個塊、每個塊具有256 個扇區(qū)的閃存進行數(shù)據(jù)存儲操作,該閃存的文件對照表如圖2所示。 假設(shè)操作系統(tǒng)要寫入兩個文件,其中鏈表區(qū)在邏輯第0塊,目錄區(qū)在 邏輯第l塊,數(shù)據(jù)區(qū)在邏輯第2至6塊。操作系統(tǒng)具體將完成的任務(wù) 在上面已經(jīng)詳細描述,此處不再贅述。
與現(xiàn)有閃存的數(shù)據(jù)存儲方式不同,根據(jù)本發(fā)明的 一個實施例的閃 存數(shù)據(jù)存儲方法采用三個塊作為交換塊,例如,將邏輯第7、 8和9 塊分別作為交換塊O、 1和2。
根據(jù)本發(fā)明的這一 實施例,寫入兩個文件的#:作二換照如下步驟進行
(a,)操作系統(tǒng)寫邏輯第2塊。底層軟件把數(shù)據(jù)寫入交換塊O(物 理第7塊),并如下設(shè)置交換塊O的結(jié)構(gòu)體的值 S wap0 01dBlockAddress=2; SwapO.NewBlockAddress=7; Swap0.ActSector=100;
SwapO丄ogicAddress二612; //邏輯0塊的扇區(qū)數(shù)+邏輯1塊的扇區(qū) 數(shù)+ ActSector 。
(b,)操作系統(tǒng)寫邏輯第1塊。底層軟件首先檢查交換塊0的結(jié) 構(gòu)體的值,通過LogicAddress表示的已寫入了數(shù)據(jù)的扇區(qū)邏輯地址計 算出其物理地址,并將該扇區(qū)物理地址與本次的寫入命令中的扇區(qū)物 理地址相比較。底層軟件發(fā)現(xiàn)上述兩個扇區(qū)地址不連續(xù),從而判斷出 本次的數(shù)據(jù)將寫入不同于之前寫入動作所操作的塊中。底層軟件重新 取出一個交換塊1 (物理第8塊),將數(shù)據(jù)寫入交換塊1并如下設(shè)置 對應的結(jié)構(gòu)體的值
Swapl .OldBlockAddress=l;
Swap 1 .NewBlockAddress=8;
Swap 1. ActSector= 1;
SwapLLogicAddress=257; 〃邏輯0塊的扇區(qū)數(shù)+ ActSector。
(c,)操作系統(tǒng)寫邏輯第0塊。與步驟(b,)類似,底層軟件首 先檢查交換塊0的結(jié)構(gòu)體。底層軟件發(fā)現(xiàn)待寫入數(shù)據(jù)的扇區(qū)地址與交 換塊0的已寫入了數(shù)據(jù)的扇區(qū)地址不連續(xù),因而檢查交換塊1的結(jié)構(gòu) 體。同樣,底層軟件發(fā)現(xiàn)待寫入數(shù)據(jù)的扇區(qū)地址與交換塊1的已寫入 了數(shù)據(jù)的扇區(qū)地址也不連續(xù),因此判斷應將數(shù)據(jù)寫入新的交換塊。底 層軟件重新取出一個交換塊2(物理第9塊),并將數(shù)據(jù)寫入交換塊2 并如下設(shè)置對應的結(jié)構(gòu)體值
Swap2.OldBlockAddress=0;
Swap2.NewBlockAddress=9;
Swap2.ActSector=10;
Swap2丄ogicAddress二10; 〃ActSector地址。
(d,)操作系統(tǒng)開始寫第二個文件,重新寫邏輯第2塊。類似地, 底層軟件檢查交換塊0的結(jié)構(gòu)體,發(fā)現(xiàn)待寫入數(shù)據(jù)的扇區(qū)地址與交換 塊0的結(jié)構(gòu)體所記錄的已寫入了數(shù)據(jù)的扇區(qū)地址連續(xù)。這時,底層軟 件不再重新取得交換塊,而是直接把數(shù)據(jù)寫入交換塊0,并將對應的 結(jié)構(gòu)體的值如下修改
Swap0.OldBlockAddress=2;
SwapO.NewBlockAddress=7;
SwapO.ActSector=200;
Swap(XLogicAddress=712; 〃邏輯0塊的扇區(qū)數(shù)+邏輯第1塊的扇 區(qū)凄丈+ ActSector 。
(c,)操作系統(tǒng)寫邏輯第1塊。同樣,底層軟件發(fā)現(xiàn)待寫入數(shù)據(jù) 的扇區(qū)地址與交換塊1的結(jié)構(gòu)體所記錄的已寫入了數(shù)據(jù)的扇區(qū)地址連 續(xù),于是直接把數(shù)據(jù)寫入交換塊1,并將對應的結(jié)構(gòu)體的值如下修改:
Swapl .01dBlockAddress=l;
Swap 1 .NewBlockAddress=8;
Swapl .ActSector=2;
SwapllogicAddress=258; 〃邏輯第0塊的扇區(qū)數(shù)+ActSector。
(f')操作系統(tǒng)寫邏輯第0塊。底層軟件發(fā)現(xiàn)待寫入數(shù)據(jù)的扇區(qū)
地址與交換塊2的結(jié)構(gòu)體所記錄的已寫入了數(shù)據(jù)的扇區(qū)地址連續(xù),因 而直接把數(shù)據(jù)寫入交換塊2,并修改對應的結(jié)構(gòu)體的值如下
Swap2.OldBlockAddress=0;
Swap2 .Ne wBlockAddress=9;
Swap2.ActSector=20;
Swap21ogicAddress=20; //ActSector。
(g')操作系統(tǒng)完成兩個文件的寫入。底層軟件通過交換塊0、 1 和2的結(jié)構(gòu)體值,進行剩余數(shù)據(jù)的搬遷。具體而言,對于交換塊0, 其結(jié)構(gòu)體中01dBlockAddress=2且NewBlockAddress=7,因此可知針 對該交換塊的數(shù)據(jù)搬遷的源塊是邏輯第2塊,目標塊是邏輯第7塊(即 交換塊0),也就是說,將邏輯第2塊原有數(shù)據(jù)搬遷到邏輯第7塊。 類似地,底層軟件根據(jù)交換塊1和2的結(jié)構(gòu)體值,將邏輯第l塊的原 有數(shù)據(jù)搬遷到邏輯第8塊(交換塊1 ),將邏輯第0塊的原有數(shù)據(jù)搬 遷到邏輯第9塊(交換塊2)。然后,在對照表上互換對應的塊,并 將各交換塊的結(jié)構(gòu)體的值復位。此時,完成了寫入兩個文件的操作的 對照表如圖7所示。
以上描述的是本發(fā)明的優(yōu)選實施方式,本領(lǐng)域的技術(shù)人員可以根 據(jù)本發(fā)明的教導,進行各種修改、增加和替換。
權(quán)利要求
1. 一種閃存的數(shù)據(jù)存儲方法,其特征在于,所述方法包括(1)為所述閃存設(shè)置至少一個交換塊,并為每個交換塊設(shè)置相應的結(jié)構(gòu)體;(2)將數(shù)據(jù)寫入交換塊,并對該交換塊的結(jié)構(gòu)體賦值;(3)根據(jù)所述至少一個交換塊的結(jié)構(gòu)體的值進行數(shù)據(jù)搬遷;(4)將每個所述結(jié)構(gòu)體的值復位。
2. 如權(quán)利要求1所述的閃存的數(shù)據(jù)存儲方法,其特征在于,所述 結(jié)構(gòu)體具有以下數(shù)據(jù)結(jié)構(gòu)Struct {O畫ockAddress; NewBlockAddress; ActSector; LogicAddress;其中,OldBlockAddress表示待寫入數(shù)據(jù)的塊的物理地址, NewBlockAddress表示交換塊的物理地址,ActSector表示當前塊中明卩 個扇區(qū)正在^皮:操作系統(tǒng)訪問,LogicAddress表示ActSector所對應的邏輯扇區(qū)地址。
3. 如權(quán)利要求2所述的閃存的數(shù)據(jù)存儲方法,其特征在于,所述 數(shù)據(jù)搬遷的步驟(3)包括基于OldBlockAddress值所代表的源塊地 址和NewBlockAddress值所代表的目標塊地址,將所述源塊的原有數(shù) 據(jù)復制到所述目標塊中。
4. 如權(quán)利要求1所述的閃存的數(shù)據(jù)存儲方法,其特征在于,當一 次寫入操作包含多個數(shù)據(jù)寫入動作時,所述步驟(2)包括(2-1 )將第一數(shù)據(jù)寫入第一交換塊,對所述第一交換塊的結(jié)構(gòu)體賦值;(2-2 )檢查每個具有已賦值結(jié)構(gòu)體的交換塊,根據(jù)其結(jié)構(gòu)體的值 判斷應將第二數(shù)據(jù)寫入新交換塊還是寫入一個具有已賦值結(jié)構(gòu)體的交 換塊;(2-3)如果判斷應將第二數(shù)據(jù)寫入新交換塊,則將所述第二數(shù)據(jù) 寫入新交換塊,并對所述新交換塊的結(jié)構(gòu)體進行賦值,否則,將所述 第二數(shù)據(jù)寫入所述具有已賦值結(jié)構(gòu)體的交換塊,并對該交換塊的結(jié)構(gòu)體重新賦值;(2-4)重復步驟(2-1)至(2-3),直至完成所述多個數(shù)據(jù)寫入動作。
5. 如權(quán)利要求4所述的閃存的數(shù)據(jù)存儲方法,其特征在于,所述 結(jié)構(gòu)體具有以下數(shù)據(jù)結(jié)構(gòu)Struct {OldblockAddress; NcwBlockAddress; ActSector; LogicAddress;}其中,OldBlockAddress表示待寫入數(shù)據(jù)的塊的物理地址, NewBlockAddress表示交換塊的物理地址,ActSector表示當前塊中哪 個扇區(qū)正在被操作系統(tǒng)訪問,LogicAddress表示ActSector所對應的邏 輯扇區(qū)地址。
6. 如權(quán)利要求5所述的閃存的數(shù)據(jù)存儲方法,其特征在于,所述 判斷步驟(2-2)進一步包括(2-2-1)對一個具有已賦值結(jié)構(gòu)體的交換塊進行檢查,通過其結(jié) 構(gòu)體中的LogicAddress值計算出已寫入了數(shù)據(jù)的扇區(qū)物理地址;(2-2-2 )判斷待寫入的第二數(shù)據(jù)的扇區(qū)地址與所述已寫入了數(shù)據(jù) 的扇區(qū)物理地址是否連續(xù);(2-2-3)如果連續(xù),則所述第二數(shù)據(jù)應寫入所述具有已賦值結(jié)構(gòu) 體的交換塊,否則,重復步驟(2-2-1)至(2-2-3),直至找到所述第 二數(shù)據(jù)應寫入的、具有已賦值結(jié)構(gòu)體的交換塊,或者完成對所有具有 已賦值結(jié)構(gòu)體的交換塊的檢查。
全文摘要
本發(fā)明公開了一種閃存的數(shù)據(jù)存儲方法,該方法包括以下步驟設(shè)置至少一個交換塊,并為每個交換塊設(shè)置相應的結(jié)構(gòu)體;將數(shù)據(jù)寫入交換塊,并對該交換塊的結(jié)構(gòu)體賦值;根據(jù)所述至少一個交換塊的結(jié)構(gòu)體的值進行數(shù)據(jù)搬遷;將每個結(jié)構(gòu)體的值復位。通過本發(fā)明的方法,在將數(shù)據(jù)寫入交換塊之后,并不立即進行數(shù)據(jù)搬遷,而是待本次寫入操作的所有數(shù)據(jù)均已寫入適當交換塊之后再根據(jù)交換塊的結(jié)構(gòu)體統(tǒng)一執(zhí)行數(shù)據(jù)搬遷。因此,本發(fā)明的方法降低了數(shù)據(jù)搬遷頻率,從而提高了數(shù)據(jù)存儲速度。同時,由于減少了閃存的擦寫次數(shù),使得閃存的使用壽命得以延長。
文檔編號G06F12/02GK101206617SQ20061016786
公開日2008年6月25日 申請日期2006年12月20日 優(yōu)先權(quán)日2006年12月20日
發(fā)明者鐘智淵 申請人:深圳市朗科科技有限公司