專利名稱:一種Flash存儲器的數(shù)據(jù)存儲方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種存儲器的存儲方法,具體地說,是涉及一種Flash存儲器 的數(shù)據(jù)存儲方法,屬于存儲器技術(shù)領(lǐng)域。
背景技術(shù):
Flash作為一種存儲介質(zhì),在存儲領(lǐng)域得到廣泛的應(yīng)用。Flash在物理結(jié)構(gòu) 上分成若干個物理區(qū)塊(Block),區(qū)塊之間相互獨(dú)立,其自身具有以下特性 (1)由于Flash的寫操作只能將數(shù)據(jù)位從1寫成0,不能從O寫成l,所以在 對flash存儲器進(jìn)行寫入之前必須先執(zhí)行擦梯:作,將預(yù)寫入的數(shù)據(jù)位初始化為 1,且擦除操作的最小單位是一個區(qū)塊,而不是單個字節(jié);(2)Flash的擦寫壽 命有次數(shù)限制;(3) Flash在使用過程中,可能導(dǎo)致某些區(qū)塊的損壞,而區(qū)塊 一旦損壞,將無法進(jìn)行^^復(fù);(4)由于Flash固有的電器特性,在讀寫數(shù)據(jù)過 程中,偶然會產(chǎn)生一位或幾位數(shù)據(jù)錯誤,這稱為位反轉(zhuǎn),位反轉(zhuǎn)無法避免,只 能通過其他手段對結(jié)果進(jìn)行事后處理;(5)塊擦除的時間比較長。
為解決Flash存在的上述問題,目前有一種基于靜態(tài)虛擬扇區(qū)的Flash存 儲管理方法,其原理如圖1所示。整個Flash存儲空間分為N個可擦除的Block, 每個Block劃分為n個更小的虛擬邏輯塊VSS,稱為虛擬小扇區(qū),每個扇區(qū)的 大小及存儲數(shù)據(jù)類型根據(jù)應(yīng)用在模塊初始化時設(shè)定。每個Block前面的一個固 定單元作為扇區(qū)分配表SAT,用于記錄本Block中扇區(qū)分配的使用情況。 一個 SAT中包含有n個SAT單元,每個SAT單元對應(yīng)一個虛擬小扇區(qū)VSS,且每個 SAT單元包括有扇區(qū)屬性及扇區(qū)邏輯號VSS ID。在進(jìn)行數(shù)據(jù)讀寫或修改時,以 虛擬小扇區(qū)的大小為單位。要修改某一扇區(qū)的凄t據(jù)時,先讀出這個扇區(qū)的內(nèi)容,
4重新找一個未使用的扇區(qū),把修改后的內(nèi)容寫入這個新扇區(qū)。然后,修改原來 扇區(qū)的屬性值為無效,修改新扇區(qū)的屬性為有效,拷貝虛擬扇區(qū)邏輯號到新扇
區(qū)對應(yīng)的SAT單元中。這樣,當(dāng)某一個Block中的SAT屬性都標(biāo)為無效時,才 對當(dāng)前Block進(jìn)行擦寫??梢?,以虛擬扇區(qū)大小為單位的存儲管理,對Flash 塊的擦寫次數(shù)可大大減少,從而提高了系統(tǒng)性能,延長了 Flash的使用壽命。
但是,這種靜態(tài)存儲管理方法存在下述缺陷1、由于每個虛擬扇區(qū)的大小 及存儲數(shù)據(jù)類型在模塊初始化時已經(jīng)設(shè)定,每個Block只能存儲同一種類型的 固定長度的數(shù)據(jù),當(dāng)可用的Block個數(shù)較少而需要存儲的數(shù)據(jù)類型較多時,或 者某種數(shù)據(jù)類型的數(shù)據(jù)實(shí)際長度變化較大時,或者同一類型的數(shù)據(jù)比一個 Block還大時,則會造成空間的極大浪費(fèi),甚至無法將數(shù)據(jù)寫入至Block中;2、 沒有考慮數(shù)據(jù)的備份,如果需要進(jìn)行數(shù)據(jù)備份,只能再分配同樣大小的另一個 Block來保存數(shù)據(jù),因此,非常浪費(fèi)存儲空間,且備份效率較低;3、由于靜態(tài) 存儲方法沒有對數(shù)據(jù)記錄和SAT進(jìn)行有效地校驗(yàn),導(dǎo)致數(shù)據(jù)的安全性較差。
發(fā)明內(nèi)容
種Flash存儲器的數(shù)據(jù)存儲方法,有效地解決了現(xiàn)有存儲方法中Flash存儲空
間利用率較低的技術(shù)問題。
為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案予以實(shí)現(xiàn)
一種Flash存儲器的數(shù)據(jù)存儲方法,其特征在于,包括下述步驟
a 、將整個Flash存儲空間劃分為若干個用來存儲至少 一種類型的數(shù)據(jù)記錄
的邏輯分區(qū),每個邏輯分區(qū)包括一個或多個連續(xù)的物理區(qū)塊;
b、將每條數(shù)據(jù)記錄所占據(jù)的存儲空間作為一個虛擬扇區(qū),并對每個虛擬扇
區(qū)設(shè)置一個描述所述數(shù)據(jù)記錄的屬性的虛擬扇區(qū)分配表;
入至所述邏輯分區(qū)的物理區(qū)塊中。才艮據(jù)本發(fā)明,所述每個虛擬扇區(qū)分配表中包括有用來標(biāo)示與所述虛擬扇區(qū) 分配表相對應(yīng)的數(shù)據(jù)記錄的新舊程度的版本號,以及標(biāo)示所述數(shù)據(jù)記錄的類型 的數(shù)據(jù)類型。
記錄寫入至所述邏輯分區(qū)的物理區(qū)塊中時,若預(yù)寫入的凄i據(jù)記錄與已寫入的彩: 據(jù)記錄的數(shù)據(jù)類型相同,則將預(yù)寫入的彰:據(jù)記錄所對應(yīng)的虛擬扇區(qū)分配表中的 版本號加1。
才艮據(jù)本發(fā)明,在所述邏輯分區(qū)剩余一塊空的物理區(qū)塊時,對所述邏輯分區(qū) 中最早寫入的物理區(qū)塊進(jìn)行數(shù)據(jù)清理。
根據(jù)本發(fā)明,在對所述物理區(qū)塊進(jìn)行數(shù)據(jù)清理時,若讀取到的數(shù)據(jù)記錄對 應(yīng)的版本號與已寫入的同類型數(shù)據(jù)記錄的最大版本號之差大于設(shè)定值,則丟棄 所讀取到的數(shù)據(jù)記錄;否則,將所讀取到的數(shù)據(jù)記錄寫入至所述空的物理區(qū)塊中。
所述設(shè)定值優(yōu)選為1,這樣,同樣類型的數(shù)據(jù)能夠保留至少兩個版本號, 既盡可能地減少對Flash存儲器空間的占用,又能兼顧數(shù)據(jù)錯誤時對歷史數(shù)據(jù) 進(jìn)行追溯。
根據(jù)本發(fā)明,所述每個虛擬扇區(qū)分配表中還包括有描述所述數(shù)據(jù)記錄的屬 性的數(shù)據(jù)記錄長度、數(shù)據(jù)記錄ID號及數(shù)據(jù)記錄校驗(yàn)碼。其中,所述數(shù)據(jù)記錄校 驗(yàn)碼優(yōu)選為CRC32校驗(yàn)碼,所述CRC32校驗(yàn)碼的值根據(jù)所述數(shù)據(jù)記錄的數(shù)據(jù)及 與所述數(shù)據(jù)記錄相對應(yīng)的虛擬扇區(qū)分配表中的數(shù)據(jù)計算得到。
表中數(shù)據(jù)正確性的奇偶校-險碼。
才艮據(jù)本發(fā)明,在所述邏輯分區(qū)中的每一個物理區(qū)塊的頭部設(shè)置有區(qū)塊標(biāo)志;
物理區(qū)塊當(dāng)前工作狀態(tài)的狀態(tài)標(biāo)志。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)和積極效果是1、 根據(jù)實(shí)際應(yīng)用動態(tài)分配邏輯分區(qū),將邏輯分區(qū)中每條數(shù)據(jù)記錄作為讀寫
操作的基本單元,從而能夠充分利用Flash的存儲空間,也即相當(dāng)于減少了 Flash中Block的擦除次數(shù),從而提高了數(shù)據(jù)的讀寫速度,提高了 Flash的壽 命。
2、 通過保存數(shù)據(jù)記錄的版本號實(shí)現(xiàn)Flash存儲器中數(shù)據(jù)的備份,有效減少 了重復(fù)^f分不需要備份的數(shù)據(jù)而占用大量存儲器空間的問題,同時提高了數(shù)據(jù) 存儲的效率。
3、 通過設(shè)置校驗(yàn)碼對讀寫數(shù)據(jù)記錄進(jìn)行校驗(yàn),提高了 Flash數(shù)據(jù)讀寫的安 全性和可靠性。
圖1是現(xiàn)有技術(shù)中基于靜態(tài)虛擬扇區(qū)的F1 a sh存儲管理實(shí)現(xiàn)方法的原理圖; 圖2為本發(fā)明所述的Flash存儲器數(shù)據(jù)存儲方法一個實(shí)施例的流程圖; 圖3為本發(fā)明所述Flash邏輯分區(qū)中數(shù)據(jù)存儲位置一個實(shí)施例的示意圖; 圖4和圖5為圖2中將數(shù)據(jù)寫入至邏輯分區(qū)的流程圖。
具體實(shí)施例方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一 步詳細(xì)的說明。
請參閱圖2所示的本發(fā)明Flash存儲器數(shù)據(jù)存儲方法一個實(shí)施例的流程圖。 該實(shí)施例所述的數(shù)據(jù)存儲方法按照下述步驟進(jìn)行 SI01:流程開始。
S102:將Flash存儲空間劃分為若干個邏輯分區(qū)(Logic Partition),每 個邏輯分區(qū)包括n個連續(xù)的物理區(qū)塊Block,所述n為大于等于1的自然凄t。 每個邏輯分區(qū)可以用來存儲一種或者多種數(shù)據(jù)類型的數(shù)據(jù)記錄。
所述數(shù)據(jù)記錄,就是指一個char型字符串,例如 一條節(jié)目信息可以作為 一條數(shù)據(jù)記錄;全部的系統(tǒng)配置信息也可以看作一條數(shù)據(jù)記錄。在本發(fā)明所述數(shù)據(jù)存儲方法中,F(xiàn)lash存儲器以所述數(shù)據(jù)記錄為基本單元進(jìn)行數(shù)據(jù)的讀寫操 作。
S103:將每條數(shù)據(jù)記錄所占據(jù)的存儲空間作為一個虛擬扇區(qū);為了能夠確 定每個虛擬扇區(qū)中存儲的數(shù)據(jù)的相關(guān)屬性值,對每個虛擬扇區(qū)設(shè)置一個虛擬扇 區(qū)分配表SAT。
所述實(shí)施例為盡量減少對Flash存^fp者空間的占用,定義所述每個虛擬扇區(qū) 分配表的長度為96bit,其具體數(shù)據(jù)結(jié)構(gòu)為
0~31bit共32bit用來存儲CRC校驗(yàn)碼,也即CRC32校驗(yàn)碼。所述校驗(yàn)碼 是對數(shù)據(jù)記錄的數(shù)據(jù)及與其對應(yīng)的虛擬扇區(qū)分配表中的數(shù)據(jù)一并計算后的校驗(yàn) 值,用于校驗(yàn)數(shù)據(jù)記錄的數(shù)據(jù)及與其對應(yīng)的虛擬扇區(qū)分配表中的數(shù)據(jù),確保數(shù) 據(jù)的安全性。
33 48bU共16bit用來存儲數(shù)據(jù)記錄的ID號,通過所述數(shù)據(jù)記錄的ID號, 能夠區(qū)分不同的數(shù)據(jù)記錄。
49 55bit共7bit用來存儲數(shù)據(jù)記錄的數(shù)據(jù)類型。 56 79bit共24bit用來存儲數(shù)據(jù)記錄長度。
80 95bit共16bit用來存儲標(biāo)示數(shù)據(jù)記錄新舊程度的版本號,每種數(shù)據(jù)類 型的數(shù)據(jù)記錄的版本號從0開始計數(shù)。
第32bit用來存儲奇偶校驗(yàn)碼,所述奇偶才交驗(yàn)碼用來校驗(yàn)所述虛擬扇區(qū)分 配表中前63位數(shù)據(jù),即版本號、數(shù)據(jù)記錄長度、數(shù)據(jù)類型及數(shù)據(jù)記錄ID號等 凄t據(jù)的正確性。
根據(jù)所述數(shù)據(jù)類型,可以知道所述數(shù)據(jù)記錄的長度、邏輯分區(qū)的開始地址 等信息,方法如下根據(jù)Flash分區(qū)的配置信息,直接可以得到該分區(qū)的開始 地址、包含的Block個數(shù)等信息;根據(jù)這些配置信息還可以計算出某一種數(shù)據(jù) 類型對應(yīng)的分區(qū),檢索該分區(qū)上存儲的虛擬扇區(qū)分配表,每個虛擬扇區(qū)分配表 都對應(yīng)了數(shù)據(jù)記錄的數(shù)據(jù)長度,通過累加的方式就能夠很容易計算出某個虛擬 扇區(qū)分配表對應(yīng)數(shù)據(jù)記錄的存儲位置,方便用戶讀M目應(yīng)的數(shù)據(jù)記錄。S104:所述虛擬扇區(qū)分配表及與之相對應(yīng)的數(shù)據(jù)記錄依次寫入至所述邏輯 分區(qū)的物理區(qū)塊中。 S105:流程結(jié)束。
本實(shí)施例通過動態(tài)分配邏輯分區(qū),將邏輯分區(qū)中每條數(shù)據(jù)記錄作為讀寫操 作的基本單元,從而能夠充分利用Flash的存儲空間;同時,通過保存數(shù)據(jù)記 錄的版本號實(shí)現(xiàn)Flash存儲器中數(shù)據(jù)的備份,有效減少了重復(fù)備份不需要"^f分 數(shù)據(jù)而占用大量存儲器空間的問題,同時提高了數(shù)據(jù)存儲的效率;此外,通過 設(shè)置校驗(yàn)碼對讀寫數(shù)據(jù)記錄及虛擬扇區(qū)分配表中的數(shù)據(jù)進(jìn)行校驗(yàn),提高了 Flash數(shù)據(jù)讀寫的安全性和可靠性。
此外,本實(shí)施例在所述邏輯分區(qū)中的每一個物理區(qū)塊的頭部設(shè)置有區(qū)塊標(biāo) 志,即Block標(biāo)志,用來標(biāo)示對應(yīng)Block是否已經(jīng)格式^f匕以及當(dāng)前Block的狀 態(tài)。所述Block標(biāo)志共有16bit,其中,高8bit為才各式化標(biāo)志,低8位為Block 狀態(tài)標(biāo)志。本實(shí)施例定義了 Block的四種狀態(tài),分別為(l)格式化完成,尚 未寫入任何數(shù)據(jù);(2)、正在進(jìn)行數(shù)據(jù)寫入;(3)、數(shù)據(jù)已寫滿;(4)、正在進(jìn)行 數(shù)據(jù)清理。
圖3示出了本發(fā)明所述Flash邏輯分區(qū)中數(shù)據(jù)存儲位置一個實(shí)施例的示意 圖。所述邏輯分區(qū)包括有n個Block,每個Block的頭部均設(shè)置有Block標(biāo)志。 第一個虛擬扇區(qū)分配表SATO接在BlockO的Block標(biāo)志之后寫入,與SATO相對 應(yīng)的數(shù)據(jù)記錄Data record 0緊接在所述SATO之后寫入;然后依次寫入后續(xù)的 虛擬扇區(qū)分配表SAT1及與之對應(yīng)的數(shù)據(jù)記錄Data record 1,直至所述BlockO 寫滿,再轉(zhuǎn)至Blockl繼續(xù)寫入數(shù)據(jù)。
圖4和圖5按順序構(gòu)成了圖2中將數(shù)據(jù)寫入至Flash存儲器的一個邏輯分 區(qū)的流程圖,圖5是圖4所示流程的延續(xù)。以所述邏輯分區(qū)包含有n個Block 為例,所述n個Block分別為BlockO、 Blockl、…Blockn-l,下面詳細(xì)介紹3夸 數(shù)據(jù)寫入至所述邏輯分區(qū)的過程
S201:流程開始。S202:首先格式化所述邏輯分區(qū),在所述邏輯分區(qū)中的每個Block頭部寫 入相應(yīng)的區(qū)塊標(biāo)志,區(qū)塊標(biāo)志中的狀態(tài)標(biāo)志為"格式化完成,尚未寫入任何數(shù) 據(jù)"。
S203:選4奪邏輯分區(qū)中的一個Block為當(dāng)前Block,改變所述Block的區(qū) 塊標(biāo)志中的狀態(tài)標(biāo)志為"正在進(jìn)行數(shù)據(jù)寫入"。例如,選擇第一個Block,即 BlockO作為當(dāng)前Block。
S204:依次寫入虛擬扇區(qū)分配表及與其相對應(yīng)的數(shù)據(jù)記錄至當(dāng)前Block中。
S205:判定預(yù)寫入的數(shù)據(jù)記錄與已寫入的數(shù)據(jù)記錄類型是否相同。若類型 相同,執(zhí)行步驟S206;否則,轉(zhuǎn)至步驟S207。
S206:將預(yù)寫入的數(shù)據(jù)記錄對應(yīng)的虛擬扇區(qū)分配表的版本號加1。
S207:在寫入數(shù)據(jù)的過程中,判定當(dāng)前Block的剩余空間是否不足。若當(dāng) 前Block剩余空間不足以寫入新的虛擬扇區(qū)分配表及數(shù)據(jù)記錄,則轉(zhuǎn)至步驟 S208;如果當(dāng)前Block剩余空間還足夠存儲數(shù)據(jù),則轉(zhuǎn)至步驟S204,繼續(xù)將新 的虛擬扇區(qū)分配表及it據(jù)記錄寫入至當(dāng)前Block中。
S208:在當(dāng)前Block剩余空間不足時,首先判斷所述邏輯分區(qū)中是否只剩 余一塊空Block。若只剩余一塊空Block,需要進(jìn)行Block的數(shù)據(jù)清理過程,執(zhí) 行步驟S211;若所述邏輯分區(qū)中剩余的空Block多于一塊,則執(zhí)行步驟S209, 將數(shù)據(jù)寫入至下一個Block中。
S209:將當(dāng)前剩余空間不足的Block區(qū)塊標(biāo)志中的狀態(tài)標(biāo)志設(shè)置為"數(shù)據(jù) 已寫滿",然后轉(zhuǎn)入下一個Block。例如,若當(dāng)前Block為BlockO,則轉(zhuǎn)入至 Blockl。
S210:將所轉(zhuǎn)入的下一個Block、如Blockl作為當(dāng)前Block,并改變其區(qū) 塊標(biāo)志中的狀態(tài)標(biāo)志為"正在進(jìn)行數(shù)據(jù)寫入",然后轉(zhuǎn)至步驟S204,執(zhí)行數(shù)據(jù) 寫入過程。
S211:在所述邏輯分區(qū)只剩余一塊空Block,例如,只剩余一塊空的Block n-l時,對最早寫入的Block、即BlockO進(jìn)行數(shù)據(jù)清理。S212:首先改變所述最早寫入的Block的區(qū)塊標(biāo)志中的狀態(tài)標(biāo)志為"正在 進(jìn)行數(shù)據(jù)清理"。
S213:從所述最早寫入的Block中依次讀取凄t據(jù)。
S214:將讀取到的數(shù)據(jù)記錄的版本號與已寫入的同類型數(shù)據(jù)記錄的最大版 本號進(jìn)行比較,判斷兩者相差是否大于l。若兩者之差大于l,執(zhí)行步驟S215; 否則執(zhí)行步驟S216。
S215:丟棄所讀取到的數(shù)據(jù)記錄,然后轉(zhuǎn)至步驟S217。如果所讀到的數(shù)據(jù) 的版本號與已寫入的同類型數(shù)據(jù)記錄的最大版本號相差大于1,說明所讀到的 數(shù)據(jù)已經(jīng)比較舊,而在存儲空間中還存在兩個以上版本的比較新的數(shù)據(jù)記錄, 因此將較舊的數(shù)據(jù)記錄丟棄掉,以盡量節(jié)省存儲器的存儲空間。
S216:在讀取到的數(shù)據(jù)記錄與已寫入的同類型數(shù)據(jù)記錄的最大版本號相差 不大于l時,說明讀取的數(shù)據(jù)記錄是版本號比較高、數(shù)據(jù)比較新的數(shù)據(jù)記錄, 則將所讀取到的數(shù)據(jù)記錄寫入至空的Block中;然后轉(zhuǎn)至步驟S217。
S217:判斷最早寫入的Block數(shù)據(jù)是否清理完畢。若已清理完畢,執(zhí)行步 驟S218;否則轉(zhuǎn)至步驟S213,繼續(xù)進(jìn)行數(shù)據(jù)的讀取。
S218:在最早寫入的Block數(shù)據(jù)清理完畢后,將其格式化,并改變其區(qū)塊 標(biāo)志中的狀態(tài)標(biāo)志為"格式化完成,尚未寫入任何數(shù)據(jù)"。
S219:流程結(jié)束。
在所述流程中,在寫入一個新塊前、 一個塊寫滿后、纟察除一個塊后及對一 個塊清理前都需要重新寫入相應(yīng)塊的區(qū)塊標(biāo)志中的狀態(tài)標(biāo)志,目的是在突然斷 電等異常事件發(fā)生后,仍然能夠知道每個塊的工作狀態(tài)。
上述過程是描述了在一個完整邏輯分區(qū)中寫入數(shù)據(jù)及清理一個Block的過 程。當(dāng)然,在執(zhí)行完步驟S218的清理并格式化Block之后,可以繼續(xù)按照數(shù)據(jù) 寫入的步驟向有足夠存儲空間的Block中寫入數(shù)據(jù),并且在只剩余一塊空Block 時,再對最早寫入的Block進(jìn)行清理。例如,將BlockO中的有效數(shù)據(jù)寫入至 Blockn-1中、才各式化Blockl之后,繼續(xù)向Blockn-1中寫入凄t據(jù),此時BlockO
ii為一塊空的Block;在Blockn-1數(shù)據(jù)寫滿時,開始清理Blockl中的數(shù)據(jù),并 將清理后的有效數(shù)據(jù)寫入至空的BlockO中。如此往復(fù),實(shí)現(xiàn)對Flash存儲器一 個邏輯分區(qū)持續(xù)的數(shù)據(jù)存儲過程。
當(dāng)然,以上所述僅是本發(fā)明的一種優(yōu)選實(shí)施方式而已,應(yīng)當(dāng)指出,對于本 技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若 干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1、一種Flash存儲器的數(shù)據(jù)存儲方法,其特征在于,包括下述步驟a、將整個Flash存儲空間劃分為若干個用來存儲至少一種類型的數(shù)據(jù)記錄的邏輯分區(qū),每個邏輯分區(qū)包括一個或多個連續(xù)的物理區(qū)塊;b、將每條數(shù)據(jù)記錄所占據(jù)的存儲空間作為一個虛擬扇區(qū),并對每個虛擬扇區(qū)設(shè)置一個描述所述數(shù)據(jù)記錄的屬性的虛擬扇區(qū)分配表;c、所述虛擬扇區(qū)分配表及與所述虛擬扇區(qū)分配表相對應(yīng)的數(shù)據(jù)記錄依次寫入至所述邏輯分區(qū)的物理區(qū)塊中。
2、 根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲方法,其特征在于,所述每個虛擬扇區(qū) 分配表中包括有用來標(biāo)示與所述虛擬扇區(qū)分配表相對應(yīng)的數(shù)據(jù)記錄的新舊程度 的版本號以及標(biāo)示所述數(shù)據(jù)記錄的類型的數(shù)據(jù)類型。
3、 根據(jù)權(quán)利要求2所述的數(shù)據(jù)存儲方法,其特征在于,在將虛擬扇區(qū)分配 表及與所述虛擬扇區(qū)分配表相對應(yīng)的數(shù)據(jù)記錄寫入至所述邏輯分區(qū)的物理區(qū)塊 中時,若預(yù)寫入的數(shù)據(jù)記錄與已寫入的數(shù)據(jù)記錄的數(shù)據(jù)類型相同,則將預(yù)寫入 的數(shù)據(jù)記錄所對應(yīng)的虛擬扇區(qū)分配表中的版本號加1。
4、 根據(jù)權(quán)利要求3所述的數(shù)據(jù)存儲方法,其特征在于,在所述邏輯分區(qū)剩 余一塊空的物理區(qū)塊時,對所述邏輯分區(qū)中最早寫入的物理區(qū)塊進(jìn)4亍數(shù)據(jù)清理。
5、 才艮據(jù)權(quán)利要求4所述的數(shù)據(jù)存儲方法,其特征在于,在對所述物理區(qū)塊 進(jìn)行數(shù)據(jù)清理時,若讀取到的數(shù)據(jù)記錄對應(yīng)的版本號與已寫入的同類型數(shù)據(jù)記 錄的最大版本號之差大于設(shè)定值,則丟棄所讀取到的數(shù)據(jù)記錄;否則,將所讀 取到的數(shù)據(jù)記錄寫入至所述空的物理區(qū)塊中。
6、 根據(jù)權(quán)利要求5所述的數(shù)據(jù)存儲方法,其特征在于,所述設(shè)定值為1。
7、 才艮據(jù)權(quán)利要求2所述的數(shù)據(jù)存儲方法,其特征在于,所述每個虛擬扇區(qū) 分配表中還包括有描述所述數(shù)據(jù)記錄的屬性的數(shù)據(jù)記錄長度、數(shù)據(jù)記錄ID號及 數(shù)據(jù)記錄校驗(yàn)碼。
8、 根據(jù)權(quán)利要求7所述的數(shù)據(jù)存儲方法,其特征在于,所述數(shù)據(jù)記錄校驗(yàn)碼為CRC32校驗(yàn)碼;所述CRC32校驗(yàn)碼的值根據(jù)所述數(shù)據(jù)記錄的數(shù)據(jù)及與所述 數(shù)據(jù)記錄相對應(yīng)的虛擬扇區(qū)分配表中的數(shù)據(jù)計算得到。
9、 根據(jù)權(quán)利要求8所述的數(shù)據(jù)存儲方法,其特征在于,所述虛擬扇區(qū)分配
10、 根據(jù)權(quán)利要求1至9中任一項(xiàng)所述的數(shù)據(jù)存儲方法,其特征在于,在 所述邏輯分區(qū)中的每一個物理區(qū)塊的頭部設(shè)置有區(qū)塊標(biāo)志;所述區(qū)塊標(biāo)志包括 標(biāo)示所述物理區(qū)塊是否格式化的格式化標(biāo)志,以及標(biāo)示所述物理區(qū)塊當(dāng)前工作 狀態(tài)的狀態(tài)標(biāo)志。
全文摘要
本發(fā)明公開了一種Flash存儲器的數(shù)據(jù)存儲方法,包括下述步驟a.將整個Flash存儲空間劃分為若干個用來存儲至少一種類型的數(shù)據(jù)記錄的邏輯分區(qū),每個邏輯分區(qū)包括一個或多個連續(xù)的物理區(qū)塊;b.將每條數(shù)據(jù)記錄所占據(jù)的存儲空間作為一個虛擬扇區(qū),并對每個虛擬扇區(qū)設(shè)置一個描述所述數(shù)據(jù)記錄的屬性的虛擬扇區(qū)分配表;c.所述虛擬扇區(qū)分配表及與所述虛擬扇區(qū)分配表相對應(yīng)的數(shù)據(jù)記錄依次寫入至所述邏輯分區(qū)的物理區(qū)塊中。利用本發(fā)明所述的數(shù)據(jù)存儲方法,能夠有效地解決現(xiàn)有存儲方法中Flash存儲空間利用率較低的技術(shù)問題。
文檔編號G06F11/10GK101546294SQ20091001502
公開日2009年9月30日 申請日期2009年4月30日 優(yōu)先權(quán)日2009年4月30日
發(fā)明者田友強(qiáng) 申請人:青島海信寬帶多媒體技術(shù)有限公司