專利名稱:固態(tài)存儲裝置遭遇斷電后的數(shù)據(jù)存儲方法
技術領域:
本發(fā)明是有關于一種固態(tài)存儲裝置及其控制方法,且特別是有關于一種不預期斷電后固態(tài)存儲裝置中的數(shù)據(jù)存儲方法。
背景技術:
眾所周知,固態(tài)存儲裝置(Solid State Drive,簡稱SSD)使用與非門閃存(NANDflash memory)為主要存儲元件,而此類的存儲裝置為一種非揮發(fā)性(non-volatile)的存儲器元件。也就是說,當數(shù)據(jù)寫入閃存后,一旦系統(tǒng)電源關閉,數(shù)據(jù)仍保存在固態(tài)存儲裝置中。與非門閃存依據(jù)不同的設計,可分為單層晶胞(single-level cell,簡稱SLC)、多層晶胞(mult1-level cell,簡稱MLC)、以及三層晶胞(triple-level cell,簡稱TLC)的閃存。SLC閃存的特點為訪問速度快、價格貴、可擦除次數(shù)約為數(shù)萬次以上,但是一個晶胞(cell)僅可存儲I位的數(shù)據(jù)。TLC閃存的特性為訪問速度慢、價格便宜、可擦除次數(shù)約為I千次以下,但是一個晶胞可存儲3位的數(shù)據(jù)。而MLC閃存的特性介于SLC閃存與TLC閃存之間,訪問速度與價格一般、可擦除次數(shù)約為I千至5千次之間,而一個晶胞可存儲2位的數(shù)據(jù)。換句話說,由相同晶胞數(shù)目所組成的閃存,TLC閃存將有最大的容量,SLC閃存的容量最小。請參照圖1,其所繪示為現(xiàn)有固態(tài)存儲裝置的示意圖。固態(tài)存儲裝置10中包括一控制單元101與一閃存105??刂茊卧?01與閃存105之間利用一內(nèi)部總線104進行數(shù)據(jù)的存取,而控制單元101利用一外部總線20與主機(host) 12之間進行指令與數(shù)據(jù)的傳遞。其中,外部總線20可為USB總線、IEEE 1394總線或SATA總線等等,而閃存可為SLC、MLC、或TLC閃存。此外,控制單元101內(nèi)部包括一映射單元(mapping unit) 107可用來管理閃存105內(nèi)部的數(shù)據(jù),映射單元107可為靜態(tài)隨機存取存儲器(SRAM)或動態(tài)隨機存取存儲器(DRAM)。而映射單元107中至少包括一邏輯至實體對應表(Logical to PhysicalTable,簡稱L2P表)以及一點陣列表格(Bitmap)。L2P表可將主機發(fā)出的邏輯配置地址(Logical Allocation Address,簡稱LAA)對應至閃存105內(nèi)部的實體配置地址(PhysicalAllocation Address,簡稱PAA);點陣列表格里記載了閃存105中每個頁(page)里的數(shù)據(jù)為有效數(shù)據(jù)或者為無效數(shù)據(jù)。當固態(tài)存儲裝置10未連接電源時,映射單元107中L2P表以及點陣列表格中的數(shù)據(jù)將被刪除。當固態(tài)存儲裝置10連接電源時,控制單元101需要先將映射單元107中L2P表以及點陣列表格重建完成后才可以開始正常動作。一般來說,閃存中105包括許多區(qū)塊(block),而每個區(qū)塊中又包括多個頁或稱為段(sector)。例如,一個區(qū)塊中有64頁,而每個頁的容量為4K bytes。此外,由于閃存105的特性,每次數(shù)據(jù)寫入時是以頁為最小單位,而每次擦除(erase)時則是以區(qū)塊為單位進行數(shù)據(jù)擦除。由于閃存105的特性,當區(qū)塊中某一個頁的數(shù)據(jù)需要更改時,控制單元101將無法直接修改該頁中的數(shù)據(jù),因此控制單元101是將需要修改的數(shù)據(jù)寫在另一空白頁(blank page),而原來舊的頁將被視為無效頁(invalid page),里面的數(shù)據(jù)將被視為無效數(shù)據(jù)(invalid data)。而當主機12經(jīng)過多次的存取之后,在閃存105中將會出現(xiàn)許多的無效頁以及無效數(shù)據(jù),并且占據(jù)了整個閃存的空間。因此,利用垃圾搜集動作(garbagecollection)可搜集各區(qū)塊中的有效數(shù)據(jù)并集中在另一區(qū)塊中。以下以圖2A 圖2F詳細介紹閃存的數(shù)據(jù)存儲動作。如圖2A所示,假設閃存105中有4個區(qū)塊(BlockJ) Block_3),每個區(qū)塊中有8個頁,其中每個頁可對應至一個實體配置地址。由圖2A可知,四個區(qū)塊都為空白區(qū)塊,且第0區(qū)塊(BL0CK_0)的實體配置地址為PAA(OO) PAA (07),第I區(qū)塊(BL0CK_1)的實體配置地址為PAA (08) PAA(OF),第2區(qū)塊(BL0CK_2)的實體配置地址為PAA(IO) PAA (17),第3區(qū)塊(BL0CK_3)的實體配置地址為PAA(18) PAA(IF)。而控制單元101可設定其中一個區(qū)塊(例如第一區(qū)塊(BL0CK_1))為啟用區(qū)塊(open block),而欲寫入的數(shù)據(jù)即可寫入啟用區(qū)塊。如圖2B所示,假設主機12發(fā)出七個邏輯配置地址(LAA)的寫入數(shù)據(jù)(D0 D6)至閃存105,則控制單元101將這些數(shù)據(jù)依次寫入第一區(qū)塊(BL0CK_1)。而控制單元101會保留最后一個頁,并填入第一區(qū)塊(BL0CK_1)中所有實體配置地址(PAA)與邏輯配置地址(LAA)之間的對應數(shù)據(jù)(P2L-datal)。之后,設定第一區(qū)塊(BL0CK_1)為一關閉區(qū)塊(closeblock)。接著,設定另一個區(qū)塊(例如第二區(qū)塊(BL0CK_2))為啟用區(qū)塊。換句話說,關閉區(qū)塊可視為已經(jīng)完成數(shù)據(jù)寫入的區(qū)塊。如圖2C所示,假設主機12發(fā)出七個邏輯配置地址(LAA)的寫入數(shù)據(jù)(Dl’、D6’、D7、D8、D5’、D9、D2’ )至閃存 105。其中,Dl,、D6,、D5,、D2,數(shù)據(jù)是取代第一區(qū)塊(BL0CK_1)中的D1、D6、D5、D2數(shù)據(jù)。因此,控制單元101將這些數(shù)據(jù)依次寫入第二區(qū)塊(BL0CK_2),并且設定第一區(qū)塊(BL0CK_1)中 PAA(09)、PAA(OA)、PAA(OD)、PAA(OE)內(nèi)的 Dl、D2、D5、D6 數(shù)
據(jù)為無效數(shù)據(jù)(斜線表示)。此外,控制單元101會保留最后一個頁,并填入第二區(qū)塊(BL0CK_2)中所有實體配置地址(PAA)與邏輯配置地址(LAA)之間的對應數(shù)據(jù)(P2L-data2)。之后,設定第二區(qū)塊(BL0CK_2)為一關閉區(qū)塊。接著,設定另一個區(qū)塊(例如第零區(qū)塊(BL0CK_0))為啟用區(qū)塊。如圖2D所示,假設主機12發(fā)出七個邏輯配置地址(PAA)的寫入數(shù)據(jù)(D0’、D9’、D10、D3,、D8,、D5"、D1")至閃存105。其中,D0,、D3,數(shù)據(jù)是取代第一區(qū)塊(BL0CK_1)中的 D0、D3 數(shù)據(jù);D9’、D8’、D5"、D1"數(shù)據(jù)是取代第二區(qū)塊(BL0CK_2)中的 D9、D8、D5’、Dl ’數(shù)據(jù)。因此,控制單元101將這些數(shù)據(jù)依次寫入第二區(qū)塊(BL0CK_2)。接著,設定第一區(qū)塊(BL0CK_1)中PAA(08)、PAA(OB)中的DO、D3數(shù)據(jù)為無效數(shù)據(jù);設定第二區(qū)塊(BL0CK_2)中PAA(IO)、PAA(13)、PAA(14)、PAA(15)中的 Dl’、D8、D5’、D9 數(shù)據(jù)為無效數(shù)據(jù)。此外,控制單元101會保留最后一個頁,并填入第零區(qū)塊(BL0CK_0)中所有實體配置地址(PAA)與邏輯配置地址(LAA)之間的對應數(shù)據(jù)(P2L-dataO),并且設定第零區(qū)塊(BL0CK_0)為一關閉區(qū)塊。接著,設定另一個區(qū)塊(例如第三區(qū)塊(BL0CK_3))為啟用區(qū)塊。由以上圖2A至圖2D的說明可知,當主機12經(jīng)過多次的存取之后,在閃存105中將會出現(xiàn)許多的無效數(shù)據(jù),并且占據(jù)了整個閃存的空間。因此,控制單元101可以在適當時間發(fā)動垃圾搜集動作。所謂的垃圾搜集動作即是將分散于各區(qū)塊中的有效數(shù)據(jù)集中在另一區(qū)塊中。一般來說,垃圾搜集動作是在主機12與固態(tài)存儲裝置10之間沒有進行數(shù)據(jù)存取時才會進行,當然也有可能在數(shù)據(jù)存取時進行,但是會降低固態(tài)存儲裝置10的效率。舉例來說,如圖2E所示,控制單元101將第一區(qū)塊(BL0CK_1)中PAA(OC)中的有效數(shù)據(jù)D4轉(zhuǎn)存至啟用區(qū)塊(也就是第三區(qū)塊(BL0CK_3)),而以D4-G數(shù)據(jù)來代表D4數(shù)據(jù)是由于垃圾搜集動作而被移動至PAA (18),并且將第一區(qū)塊(BL0CK_1)中PAA(OC)的D4設定為無效數(shù)據(jù)。同理,將第二區(qū)塊(BL0CK_2)中PAA(Il)、PAA(12)、PAA(16)中的有效數(shù)據(jù)D6’、D7、D2’轉(zhuǎn)存至啟用區(qū)塊(也就是第三區(qū)塊(BL0CK_3)),而以D6’ _G、D7_G、D2’ -G數(shù)據(jù)來代表D6’、D7、D2’數(shù)據(jù)是由于垃圾搜集動作而被移動至PAA (19)、PAA (IA)、PAA (IB),并且將第二區(qū)塊(BL0CK_2)中 PAA (I I)、PAA (12)、PAA (16)中的 D6’、D7、D2’ 設定為無效數(shù)據(jù)。很明顯地,由圖2E可知,完成垃圾搜集動作后,第一區(qū)塊(BL0CK_1)的PAA (08) PAA(OE)內(nèi)都為無效數(shù)據(jù)以及第二區(qū)塊(BL0CK_2)的PAA (10) PAA (16)內(nèi)都為無效數(shù)據(jù)。并且,PAA(OF)中的P2L-datal數(shù)據(jù)以及PAA(17)中的P2L_data2數(shù)據(jù)已經(jīng)不會再被利用了。因此,控制單元101可以在任何時間將第一區(qū)塊(BL0CK_1)與第二區(qū)塊(BL0CK_2)擦除為空白區(qū)塊。舉例來說,如圖2F所示,在垃圾搜集動作之后,控制單元101將第一區(qū)塊(BL0CK_1)擦除為空白區(qū)塊。接著,主機12發(fā)出二個邏輯配置地址(LAA)的寫入數(shù)據(jù)(D11、D12)至閃存105,而控制單元101將寫入數(shù)據(jù)(D11、D12)依次寫入啟用區(qū)塊(第三區(qū)塊(BL0CK_3))中。由于固態(tài)存儲裝置10具有即插即用的特性,因此固態(tài)存儲裝置10常常在不預期的情況下被使用者拔除電源。舉例來說,使用者常常在不小心的狀況下碰撞到固態(tài)存儲裝置10使得外部總線20脫落而造成固態(tài)存儲裝置10斷電?;蛘撸脩粽`認為固態(tài)存儲裝置10與主機12之間并未進行數(shù)據(jù)存取,而將固態(tài)存儲裝置10拔除,也會造成固態(tài)存儲裝置10不預期的斷電。以MLC與TLC閃存所設計的固態(tài)存儲裝置10為例,當閃存105正在一特定區(qū)塊的一特定頁寫入數(shù)據(jù)且遭遇到不預期的斷電時,除了造成該特定頁的數(shù)據(jù)損壞之外,很有可能也會造成其他頁的數(shù)據(jù)一并損壞。或者,在固態(tài)存儲單元10在恢復供電后,該特定區(qū)塊中的所有數(shù)據(jù)也會逐漸損壞或者消失。因此,如何在恢復供電后適當?shù)乇4鏀?shù)據(jù)的完整性即為本發(fā)明所欲達成的目的。
發(fā)明內(nèi)容
本發(fā)明提出一種固態(tài)存儲裝置遭遇斷電之后的數(shù)據(jù)存儲方法,該固態(tài)存儲裝置中的一閃存包括多個區(qū)塊,每一個區(qū)塊中包括多個頁,而這些區(qū)塊的其中之一被設定為一舊的開啟區(qū)塊,當該固態(tài)存儲裝置重新接通一電源時,將該舊的開啟區(qū)塊內(nèi)所有的有效數(shù)據(jù)存儲至一新的開啟區(qū)塊中。
圖1所繪示為現(xiàn)有固態(tài)存儲裝置的示意圖。圖2A 圖2F詳細介紹閃存的數(shù)據(jù)存儲動作。圖3A與圖3B所繪示為本發(fā)明的第一實施例及其舉例說明示意圖。圖4A與圖4B所繪示為本發(fā)明的第二實施例及其舉例說明示意圖。
具體實施例方式為了對本發(fā)明的上述及其他方面有更好的了解,下文特舉優(yōu)選實施例,并配合所附附圖,作詳細說明如下:由于本發(fā)明并未改變固態(tài)存儲裝置的電路結(jié)構(gòu),僅新增控制單元101的運行方式,使得本發(fā)明可以有效的保存不預期斷電后的數(shù)據(jù)完整性。因此,本發(fā)明在圖1的架構(gòu)下詳細介紹本發(fā)明。由于控制單元101在寫入數(shù)據(jù)之前需要先設定一開啟區(qū)塊,而僅有開啟區(qū)塊可以存儲數(shù)據(jù)。當該開啟區(qū)塊的空間被存儲完畢后,控制單元101會將該開啟區(qū)塊改設定為關閉區(qū)塊,并且再次設定另一可使用的區(qū)塊為開啟區(qū)塊。換句話說,當固態(tài)存儲裝置10遭遇不預期的斷電時,會受到影響的區(qū)塊即為開啟區(qū)塊,而已經(jīng)存儲完成的關閉區(qū)塊則不會受影響。根據(jù)本發(fā)明的實施例,當固態(tài)存儲裝置10再次接通到電源而開始動作時,控制單元10需要保存開啟區(qū)塊中數(shù)據(jù)的有效性,防止開啟區(qū)塊中的數(shù)據(jù)逐漸損壞或者丟失。因此,控制單元101需要在固態(tài)存儲裝置10再次被供電時,將該開啟區(qū)塊中的所有有效數(shù)據(jù)再次存儲于新的開啟區(qū)塊中。以下詳細介紹本發(fā)明保存開啟區(qū)塊中數(shù)據(jù)的各種方法。請參照圖3A,其所繪示為本發(fā)明的第一實施例。當固態(tài)存儲裝置10重新接通電源后(步驟S300),將舊的開啟區(qū)塊加上一電源標記(power mark,簡稱PM)后,設定為一第一關閉區(qū)塊(步驟S302)。接著,將閃存105中的一可使用區(qū)塊設定為一新的開啟區(qū)塊(步驟S304)。將第一關閉區(qū)塊中所有的有效數(shù)據(jù)存儲至新的開啟區(qū)塊(步驟S306)。接著,將第一關閉區(qū)塊中的有效數(shù)據(jù)設定為無效數(shù)據(jù)(步驟S308)。而圖3B,為本發(fā)明第一實施例的舉例說明。其中,該固態(tài)存儲裝置10是在圖2F的情況下遭遇到不預期的斷電。而當固態(tài)存儲裝置10重新接通電源后,控制單元101可確定閃存105中,第三區(qū)塊(BL0CK_3)為舊的開啟區(qū)塊。接著,控制單元101在舊的開啟區(qū)塊加上一電源標記后,設定為一第一關閉區(qū)塊,而第三區(qū)塊(BL0CK_3)的最后一頁PAA(IF)中會記載一電源標記以及所有實體配置地址(PAA)與邏輯配置地址(LAA)之間的對應數(shù)據(jù)(P2L-Data3+PM),并且成為一第一關閉區(qū)塊。接著,控制單元101將閃存105中的一可使用區(qū)塊(例如第一區(qū)塊(BL0CK_1))設定為一新的開啟區(qū)塊,之后控制單元101將第一關閉區(qū)塊(第三區(qū)塊(Block_3))中的所有有效數(shù)據(jù)存儲至新的開啟區(qū)塊(第一區(qū)塊(BL0CK_1))。接著,設定第一關閉區(qū)塊(第三區(qū)塊(Block_3))中的所有有效數(shù)據(jù)為無效數(shù)據(jù)。由本發(fā)明的第一實施例可知,當固態(tài)存儲裝置10重新接通電源后,先將舊的開啟區(qū)塊設定為第一關閉區(qū)塊后,將第一關閉區(qū)塊內(nèi)的所有有效數(shù)據(jù)全部另行存儲至新的開啟區(qū)塊。也就是,如圖3B所示,新的開啟區(qū)塊(第一區(qū)塊(BL0CK_1))內(nèi)已經(jīng)存儲第一關閉區(qū)塊(第三區(qū)塊(BL0CK_3))中的數(shù)據(jù)。因此,第一實施例可以有效的防止第一關閉區(qū)塊中的數(shù)據(jù)在恢復供電之后逐漸損壞或者丟失的問題。當然,由于第一關閉區(qū)塊內(nèi)已經(jīng)沒有有效數(shù)據(jù),所以控制單元101可以在任意時間擦除第一關閉區(qū)塊。此外,為了防止第一關閉區(qū)塊的數(shù)據(jù)在復制到新的開啟區(qū)塊的過程再次遭遇不預期的斷電,本發(fā)明設定一電源標記于該第一關閉區(qū)塊。當固態(tài)存儲裝置10再次接通電源時,若有任何一個具有電源標記的區(qū)塊內(nèi)仍舊存儲有效數(shù)據(jù)時,則該有效數(shù)據(jù)也需要利用第一實施例的方式再次被存儲至新的開啟區(qū)塊。另外,由于舊的開啟區(qū)塊中的有效數(shù)據(jù)可能為主機所產(chǎn)生的數(shù)據(jù),或者是經(jīng)由垃圾搜集動作而由其他區(qū)塊所復制的數(shù)據(jù)。因此,本發(fā)明的第二實施例將舊的開啟區(qū)塊中的數(shù)據(jù)先區(qū)分為二個群組。第一個群組為主機所產(chǎn)生的數(shù)據(jù),另一個群組為經(jīng)由垃圾搜集動作所產(chǎn)生的搜集數(shù)據(jù)。請參照圖4A,其所繪示為本發(fā)明的第二實施例。當固態(tài)存儲裝置10重新接通電源后(步驟S400),將舊的開啟區(qū)塊加上一電源標記后,設定為一第一關閉區(qū)塊(步驟S402)。接著,將閃存105中的一可使用區(qū)塊設定為一新的開啟區(qū)塊(步驟S404)。接著,將第一關閉區(qū)塊中的有效數(shù)據(jù)區(qū)分為主機產(chǎn)生的數(shù)據(jù)以及垃圾搜集動作所產(chǎn)生的數(shù)據(jù)(步驟S406)。接著,在垃圾搜集動作所產(chǎn)生的數(shù)據(jù)中,將可恢復的第一部分數(shù)據(jù)恢復為垃圾搜集動作前之狀態(tài),并將不可恢復的第二部分數(shù)據(jù)以及主機產(chǎn)生的數(shù)據(jù)存儲于新的開啟區(qū)塊(步驟S408);之后,將第一關閉區(qū)塊中的有效數(shù)據(jù)改為無效數(shù)據(jù)(步驟S410)。而圖4B,為本發(fā)明第二實施例的舉例說明。其中,該固態(tài)存儲裝置10是在圖2F的情況下遭遇到不預期的斷電。而當固態(tài)存儲裝置10重新接通電源后,控制單元101可確定閃存105中,第三區(qū)塊(BL0CK_3)為舊的開啟區(qū)塊。接著,控制單元101在舊的開啟區(qū)塊加上一電源標記后,設定為一第一關閉區(qū)塊,而第三區(qū)塊(BL0CK_3)的最后一頁PAA(IF)中會記載一電源標記以及所有實體配置地址(PAA)與邏輯配置地址(LAA)之間的對應數(shù)據(jù)(P2L-Data3+PM),并且成為一第一關閉區(qū)塊。接著,控制單元101將閃存105中的一可使用區(qū)塊(例如第一區(qū)塊(BL0CK_1))設定為一新的開啟區(qū)塊。根據(jù)本發(fā)明的第二實施例,控制單元101可將第一關閉區(qū)塊中的有效數(shù)據(jù)區(qū)分為主機產(chǎn)生的數(shù)據(jù)以及垃圾搜集動作所產(chǎn)生的數(shù)據(jù)。很明顯地,第一關閉區(qū)塊(第三區(qū)塊(BL0CK_3))中,D4-G、D6’ _G、D7_G、D2’ -G數(shù)據(jù)是由垃圾搜集動作所產(chǎn)生的數(shù)據(jù),而D11、D12是由主機所產(chǎn)生的數(shù)據(jù)。換句話說,由垃圾搜集動作所產(chǎn)生的D4-G、D6 ’ _G、D7_G、D2 ’ -G數(shù)據(jù),其來源頁(source page)雖然已經(jīng)被標示為無效頁,但是該無效頁所對應的區(qū)塊可能尚未被擦除。在此情況下,部分數(shù)據(jù)可以恢復成為垃圾搜集動作前的狀態(tài)。因此,由圖4B可知,D6’ _G、D7_G、D2’ -G數(shù)據(jù)的來源頁是在第二區(qū)塊(BL0CK_2)中,而該第二區(qū)塊(BL0CK_2)尚未被擦除。因此控制單元101可將該第二區(qū)塊(BL0CK_2)的來源頁PAA(Il)、PAA (12)、PAA (16)恢復為有效頁使得D6’、D7、D2’數(shù)據(jù)恢復為有效數(shù)據(jù)。換句話說,可恢復的D6’ -G、D7_G、D2’ _G數(shù)據(jù)是同時被存儲于該第一關閉區(qū)塊(BL0CK_3)以及另一個關閉區(qū)塊(第二區(qū)塊(BLC0K_2))中。并且存儲在另一個關閉區(qū)塊(第二區(qū)塊(BLC0K_2))中的D6’、D7、D2’數(shù)據(jù)系被設定為無效數(shù)據(jù)。而恢復為該垃圾搜集動作之前的狀態(tài)時,系將另一個關閉區(qū)塊(第二區(qū)塊(BLC0K_2))中的06’、07、02’數(shù)據(jù)再次設定為有效數(shù)據(jù)。另外,由于D4-G數(shù)據(jù)的來源頁系在第一區(qū)塊(BL0CK_1),而第一區(qū)塊(BLC0K_1)已經(jīng)在垃圾搜集動作后被擦除,因此D4-G數(shù)據(jù)無法被恢復。因此,控制單元101將不可恢復的第二部分數(shù)據(jù)(D4-G)以及主機產(chǎn)生的數(shù)據(jù)(D11、D12)存儲于新的開啟區(qū)塊(第一區(qū)塊(BLOCK_l))。接著,設定第一關閉區(qū)塊(第三區(qū)塊(BLOCK_3))中的所有數(shù)據(jù)為無效數(shù)據(jù)。由本發(fā)明的第二實施例可知,當固態(tài)存儲裝置10重新接通電源后,先將舊的開啟區(qū)塊設定為第一關閉區(qū)塊。接著,將第一關閉區(qū)塊中的有效數(shù)據(jù)區(qū)分為主機產(chǎn)生的數(shù)據(jù)以及垃圾搜集動作所產(chǎn)生的數(shù)據(jù)。接著,在垃圾搜集動作所產(chǎn)生的數(shù)據(jù)中,將第一部分可恢復的數(shù)據(jù)恢復為垃圾搜集動作之前的狀態(tài);而第二部分無法恢復的數(shù)據(jù)以及主機所產(chǎn)生的數(shù)據(jù)寫入新的開啟區(qū)塊內(nèi)。因此,第二實施例也可以有效的防止第一關閉區(qū)塊中的數(shù)據(jù)在恢復供電之后逐漸損壞或者丟失的問題。同理,為了防止第一關閉區(qū)塊的數(shù)據(jù)在復制到新的開啟區(qū)塊的過程再次遭遇不預期的斷電,本發(fā)明設定一電源標記于該第一關閉區(qū)塊。當固態(tài)存儲裝置10再次接通電源時,若有任何一個具有電源標記的區(qū)塊內(nèi)尚有存儲有效數(shù)據(jù),則該有效數(shù)據(jù)也需要再次利用第二實施例的方式進行判斷,并且保存數(shù)據(jù)。由以上的說明可知,本發(fā)明的優(yōu)點是可以在固態(tài)存儲單元恢復供電時,將舊的開啟區(qū)塊中的所有有效數(shù)據(jù)再次存儲于新的開啟區(qū)塊中。這樣,可實時的保存開啟區(qū)塊中的數(shù)據(jù),防止該數(shù)據(jù)在恢復供電之后逐漸損壞或者丟失的問題。此外,當舊的開啟區(qū)塊中的數(shù)據(jù)都為主機所產(chǎn)生的有效數(shù)據(jù)時,控制單元101可直接根據(jù)第一實施例的方式來進行并保存數(shù)據(jù)。同理,當舊的開啟區(qū)塊中的數(shù)據(jù)都為垃圾搜集動作所產(chǎn)生的數(shù)據(jù)時,控制單元101可直接根據(jù)第二實施例的方式來進行并保存數(shù)據(jù),當然也可以直接根據(jù)第一實施例的方式來進行并保存數(shù)據(jù)。值得一提的是,由于固態(tài)存儲裝置10并無法判斷是否確實遭遇到不預期的斷電或者是用戶利用正常程序的斷電。因此,本發(fā)明默認固態(tài)存儲裝置10所有的斷電都為不預期的斷電。而在固態(tài)存儲裝置10再次供電時,利用本發(fā)明的實施例來保存舊的開啟區(qū)塊中的有效數(shù)據(jù)。 綜上所述,雖然本發(fā)明已以優(yōu)選實施例公開如上,然其并非用以限定本發(fā)明。本發(fā)明所屬技術領域中普通技術人員,在不脫離本發(fā)明的精神和范圍內(nèi),當可作各種的更改與修飾。因此,本發(fā)明的保護范圍當視權利要求所界定者為準。
權利要求
1.一種固態(tài)存儲裝置遭遇斷電之后的數(shù)據(jù)存儲方法,該固態(tài)存儲裝置中的一閃存包括多個區(qū)塊,每一個區(qū)塊中包括多個頁,而這些區(qū)塊的其中之一被設定為一舊的開啟區(qū)塊,其特征在于,當該固態(tài)存儲裝置重新接通一電源時,將該舊的開啟區(qū)塊內(nèi)的有效數(shù)據(jù)存儲至一新的開啟區(qū)塊中。
2.根據(jù)權利要求1所述的數(shù)據(jù)存儲方法,其特征在于,還包括下列步驟: 將該舊的開啟區(qū)塊加上一電源標記后設定為一第一關閉區(qū)塊; 尋找這些區(qū)塊中的一可使用區(qū)塊,并設定為一新的開啟區(qū)塊; 將該第一關閉區(qū)塊中的所有有效數(shù)據(jù)存儲至該新的開啟區(qū)塊;以及 將該第一關閉區(qū)塊內(nèi)的所有有效數(shù)據(jù)設定為無效數(shù)據(jù)。
3.根據(jù)權利要求2所述的數(shù)據(jù)存儲方法,其特征在于,還包括下列步驟: 當該固態(tài)存儲裝置重新接通該電源時,若具有該電源標記的該第一關閉區(qū)塊中具有有效數(shù)據(jù)時,將所有有效數(shù)據(jù)存儲至該新的開啟區(qū)塊。
4.根據(jù)權利要求1所述的數(shù)據(jù)存儲方法,其特征在于,該舊的開啟區(qū)塊內(nèi)所有的有效數(shù)據(jù)是由一主機產(chǎn)生以及經(jīng)由一垃圾搜集動作后所產(chǎn)生。
5.根據(jù)權利要求1所述的數(shù)據(jù)存儲方法,其特征在于,該舊的開啟區(qū)塊內(nèi)所有的有效數(shù)據(jù)是由一主機產(chǎn)生或者經(jīng)由一垃圾搜集動作后所產(chǎn)生。
6.根據(jù)權利要求1所述的數(shù)據(jù)存儲方法,其特征在于,還包括下列步驟: 將該舊的開啟區(qū)塊加上一電源標記后設定為一第一關閉區(qū)塊; 尋找這些區(qū)塊中的一可使用區(qū)塊,并設定為一新的開啟區(qū)塊; 將該第一關閉區(qū)塊中的所有有效數(shù)據(jù)區(qū)分為一主機產(chǎn)生的數(shù)據(jù)以及經(jīng)由一垃圾搜集動作產(chǎn)生的數(shù)據(jù); 在該垃圾搜集動作所產(chǎn)生的數(shù)據(jù)中,將可恢復的一第一部分數(shù)據(jù)恢復為該垃圾搜集動作之前的狀態(tài); 在該垃圾搜集動作所產(chǎn)生的數(shù)據(jù)中,將不可恢復的一第二部分數(shù)據(jù)以及該主機產(chǎn)生的數(shù)據(jù)存儲于該新的開啟區(qū)塊;以及 將該第一關閉區(qū)塊內(nèi)的所有有效數(shù)據(jù)設定為無效數(shù)據(jù)。
7.根據(jù)權利要求6所述的數(shù)據(jù)存儲方法,其特征在于,可恢復的該第一部分數(shù)據(jù)中包括一第一數(shù)據(jù),該第一數(shù)據(jù)是同時被存儲于該第一關閉區(qū)塊以外的一第二關閉區(qū)塊內(nèi)且被設定為無效數(shù)據(jù)。
8.根據(jù)權利要求7所述的數(shù)據(jù)存儲方法,其特征在于,在恢復為該垃圾搜集動作之前的狀態(tài)時,將該第二關閉區(qū)塊內(nèi)的該第一數(shù)據(jù)設定為有效數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種固態(tài)存儲裝置遭遇斷電之后的數(shù)據(jù)存儲方法。該固態(tài)存儲裝置中的一閃存包括多個區(qū)塊,每一個區(qū)塊中包括多個頁,而這些區(qū)塊的其中之一被設定為一舊的開啟區(qū)塊,當該固態(tài)存儲裝置重新接通一電源時,將該舊的開啟區(qū)塊內(nèi)所有的有效數(shù)據(jù)存儲至一新的開啟區(qū)塊中,從而使得本發(fā)明可以有效的保存不預期斷電后的數(shù)據(jù)完整性。
文檔編號G06F12/06GK103164345SQ201110406260
公開日2013年6月19日 申請日期2011年12月8日 優(yōu)先權日2011年12月8日
發(fā)明者黃志偉, 范綱銘 申請人:建興電子科技股份有限公司