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