專利名稱:供電安全的數(shù)據(jù)管理系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
背景技術(shù):
固態(tài)存儲介質(zhì)允許非??焖俚淖x寫時間。因此固態(tài)存儲驅(qū)動器控制器的處理速度對讀寫呑吐量的有顯著的影響。固態(tài)存儲驅(qū)動器還必須保持和固態(tài)存儲系統(tǒng)數(shù)據(jù)的一致性。如果固態(tài)存儲系統(tǒng)突然斷電,它必須能夠恢復(fù)到可用狀態(tài)并能夠保持,比如,寫操作過程中正要寫入到存儲器的數(shù)據(jù)必須是安全的
發(fā)明內(nèi)容
、
體現(xiàn)本發(fā)明不同特性的系統(tǒng)和方法參照以下附圖被描述。圖I示出一個非易失性存儲設(shè)備的概況。圖2A,圖3A和圖3B示出根據(jù)實施例記錄系統(tǒng)狀態(tài)的主記錄內(nèi)容。圖2B,圖4A和圖4B示出根據(jù)實施例管理主記錄內(nèi)容的流程圖。圖5A和5B顯示存儲在非易失性存儲介質(zhì)的主記錄恢復(fù)系統(tǒng)狀態(tài)的流程圖。
具體實施例方式雖然本發(fā)明描述了某些實施例,但這些實施例只是作為例子而已,不是想要限制本發(fā)明的范圍。事實上,這里描述的本發(fā)明系統(tǒng)和方法的創(chuàng)新性可以實施為其他不同形式。此外,可以不偏離本發(fā)明的精神,對這里描述的系統(tǒng)和方法形式做出各種省略、替換、變更。系統(tǒng)概沭本發(fā)明實施例的目的g在為非易失性存儲系統(tǒng)控制器提供減少讀寫延遲的系統(tǒng)和方法,同時保持非易失性存儲系統(tǒng)活動記錄用于系統(tǒng)恢復(fù)。在實施例中,系統(tǒng)活動記錄可以用來恢復(fù)系統(tǒng)狀態(tài),并在斷電的情況下保持一致性。在本應(yīng)用中,“非易失性存儲器”通常是指如NAND的固態(tài)閃存存儲器。然而,此本發(fā)明披露的系統(tǒng)和方法也可用于傳統(tǒng)的硬盤驅(qū)動器和混合驅(qū)動器,包括固態(tài)硬盤驅(qū)動器及其組件。正如,固態(tài)驅(qū)動器的某些內(nèi)部典型操作,如“損耗調(diào)平”和“垃圾回收”等類似操作,硬盤驅(qū)動器也可以利用。在本發(fā)明中,術(shù)語“超級快”被定義為非易失性存儲介質(zhì)上的地址組。這個地址的分組可以泛指任何分組地址的方法(例如,頁、塊等)。在一些實施例中,這些分組可以包括非易失性存儲介質(zhì)多個模組的至少ー個寫入地址塊。在一些實施例中,這些分組可以使用一個控制器,有效地組織數(shù)據(jù)存取操作和管理非易失性存儲系統(tǒng)。參照圖1,其示出了根據(jù)實施例中非易失性存儲裝置100和主機130通信的系統(tǒng)圖。正如實施例所描述的,非易失性存儲裝置100包括非易失性存儲器陣列120和控制器110。控制器110與非易失性存儲器陣列120和130主機通信。本實施例中控制器包括一個用戶數(shù)據(jù)管理器111,ー個主記錄112,內(nèi)部操作管理器113,以及介質(zhì)存取請求執(zhí)行器114。用戶數(shù)據(jù)管理器111和主機130上的設(shè)備驅(qū)動器140通信,并可接收和處理來自主機驅(qū)動程序140存儲請求。內(nèi)部操作管理器113可包括系統(tǒng)清理和維護任務(wù),如垃圾收集和損耗調(diào)平來維護非易失性存儲器陣列120。存儲器陣列120可包括多個與控制器110聯(lián)接的固態(tài)存儲裝置。陣列可包括,例如,閃存集成電路,硫?qū)傧嘧儍?nèi)存(C-RAM),相變存儲器(PC-RAM 或 PRAM),可編程金屬化單元 RAM(PMC_RAM 或 PMCm),Ovonic 統(tǒng)一存儲器(OUM),電阻RAM(RRAM),NAND存儲器,NOR存儲器,EEPR0M,鐵電存儲器(FeRAM),或其它分立的NVM(非易失性存儲器)芯片。固態(tài)存儲裝置在現(xiàn)有技術(shù)中可物理分解為面、塊、頁和扇區(qū)。其他存儲形式(例如,揮發(fā)性的電池備份DRAM或SRAM器件,磁盤驅(qū)動器等)可在另外或可選情況下使用。介質(zhì)存取請求可以從用戶數(shù)據(jù)管理器111或內(nèi)部操作管理器113發(fā)送介質(zhì)存取請求給非易失性存儲器陣列120上的介質(zhì)存取請求執(zhí)行器114。在一個實施例中,介質(zhì)存取請求執(zhí)行器114規(guī)劃非易失性存儲器陣列的命令執(zhí)行,并對非易失性存儲器陣列120的存儲 器塊上任何執(zhí)行剩下的轉(zhuǎn)換任務(wù)負責(zé)。當(dāng)用戶數(shù)據(jù)管理器111或內(nèi)部操作管理器113執(zhí)行寫命令,寫命令可以在指定給寫命令的下ー個寫入超級塊上執(zhí)行。每個超級塊可從非易失性存儲器陣列多個物理模塊中為寫命令指定一個選定的塊。在控制器110的操作過程中,每個寫操作,比如用戶數(shù)據(jù)管理器111和內(nèi)部操作管理器113,可對應(yīng)于運行過程中指定的超級塊。由于每道エ序完成后寫的地址分配給它的超級,它可以過渡到另ー個超級繼續(xù)寫的非易失性存儲器陣列120。當(dāng)完成對每個指定的超級塊地址寫入操作時,他可遷移到非易失性存儲器120的另ー個超級塊繼續(xù)寫入。主記錄112能保持控制器110內(nèi)的操作狀態(tài)。例如,主記錄112可以保持指定給每個寫入進程的超級塊(S)。在一個實施例中,主記錄112保留在非易失性存儲器中。因此,在一個實施例中主記錄112可定期刷新(例如,通過控制器或在控制器上執(zhí)行寫入進程即通過給介質(zhì)存取請求執(zhí)行器114的寫命令),因此,它的信息保存到非易失性存儲器陣列120。在一個實施例中,保存在主記錄112中的信息應(yīng)足以斷電的情況下系統(tǒng)能恢復(fù)運行狀態(tài),同時保持數(shù)據(jù)的一致性。記錄處理圖2A示出根據(jù)實施例描述的主記錄200。主記錄包括能記錄設(shè)備運行狀態(tài)的數(shù)據(jù)。圖2A所描述的實施例,主記錄200包括寫入進程信息201。寫入進程可以包括用戶數(shù)據(jù)管理器,內(nèi)部操作管理器或其他向非易失性存儲陣列發(fā)出寫命令的過程。正如這里使用的,“進程”是指在處理器控制器上執(zhí)行的ー個線程,多個線程可以在同一處理器上并行執(zhí)行。雖然這里所描述的是針對單個寫入進程的數(shù)據(jù),但是主記錄可以保持由控制器執(zhí)行的所有寫入進程數(shù)據(jù)。此寫入進程201的數(shù)據(jù)包括指定給這個進程的超級塊(S)。另外,主記錄可以保持一個空閑池202以反映超級塊可以被寫入進程使用。當(dāng)ー個超級塊被分配給ー個寫入進程,則它從空閑池刪除以反映它不可用于其他進程。擦除隊列203反映的數(shù)據(jù)可表明超級塊正在非易失性存儲陣列的即將擦除隊列中。當(dāng)非易失性存儲陣列已成功擦除超級塊,則超級塊從擦除隊列203中刪除,放置在空閑池202中。這樣擦除隊列確保數(shù)據(jù)的完整性,因為如果電源中斷而超級塊正在擦除過程中,擦除將在恢復(fù)供電后被重新啟動。主記錄200還可包括關(guān)閉隊列204,反映已完成寫入的超級塊,但在寫過程完成對超級塊的寫入后仍然需要額外的檢查或行動。主記錄200還可包括系統(tǒng)表205,其中包括系統(tǒng)狀態(tài)記錄,如非易失性存儲器陣列損壞的塊,轉(zhuǎn)換表,映射表和/或其他系統(tǒng)表。在一個實施例中,每個超級塊的長度也被保存在主記錄中。在一個實施例中ー個超級塊可包括2,048頁,盡管現(xiàn)有技術(shù)中有包括任何頁數(shù)(或其他存儲單元)的成熟技術(shù)。 圖2B所示流程圖是和圖2A所示主記錄關(guān)聯(lián)的寫入進程方法的實施例。在塊210,寫入進程到達為這個進程指定的超級塊末端。在塊220,進程從空閑池為隨后的寫入進程分配一個新的超級塊。在塊230,進程保留最新分配的超級塊在主記錄中。在塊240,進程觸發(fā)器刷新非易失性存儲器的主記錄(及最新分配的超級塊信息)。在塊250,進程等待主記錄刷新完成。進程等待完成刷新優(yōu)于隨后的塊寫入進程是因為,如果寫入進程優(yōu)于刷新,系統(tǒng)被迫在刷新前返回非易失性存儲器主記錄的ー個副本,(例如,在斷電后),非易失性存儲器中的記錄不會反映設(shè)置給寫入進程對隨后的塊寫入。之前保存的副本仍然會提示寫入進程優(yōu)于塊210正在對超級塊寫入。等待主記錄更新信息,直到最新分配的超級塊已被刷新到非易失性存儲器中,從而確保失去供電后的正確恢復(fù)。在非易失性存儲器主記錄刷新后,在塊260,進程可以寫入新的超級塊中。在一個實施例中,由控制器110執(zhí)行的寫入進程如圖I所示。軺級塊預(yù)分配雖然在塊250中的等待確保數(shù)據(jù)的正確恢復(fù),但產(chǎn)生等待時間且刷新増加系統(tǒng)開銷并降低性能。下面實施例的描述和參考圖能消除或減少等待時間,且刷新主記錄。通過主記錄配置涉及預(yù)分配和跟蹤寫入地址組使消除等待在一個實施例中成為可能,如圖3A和3B所示。實施例這里描述的所述性能增強,可以選擇性地應(yīng)用于對性能敏感/關(guān)鍵的進程。例如,這些實施例,控制器可配置為對僅用于用戶數(shù)據(jù)管理器和/或垃圾收集的寫入進程實施。對于不視為是性能敏感/關(guān)鍵的其他進程,可以使用如圖2A和2B所示的實施例。在此實施例中,如在圖3A所示,寫入進程數(shù)據(jù)310包括與幾個分配的超級塊有關(guān)的數(shù)據(jù)。在此實施例中,寫入進程數(shù)據(jù)310保持以前超級塊311,當(dāng)前超級塊312,和下ー個超級塊313有關(guān)的數(shù)據(jù)。在這個圖中,以前超級塊311表示超級塊“16”是上ー個完成寫入的超級塊。當(dāng)前超級塊312表示超級塊“25”是進程目前指定的待寫入超級塊。下一個超級313表示超級塊“46”是當(dāng)前超級塊312完成寫入后待寫入的地址組。當(dāng)進程完成寫入指定給當(dāng)前超級塊312的超級塊后,這個進程可以繼續(xù)對指定給超級塊313的下ー個超級塊寫入,并在主記錄300中旋轉(zhuǎn)相應(yīng)的超級塊。其他組件320,330,340和350的操作和上面圖2A(202,203,204和205)所述的相同。系統(tǒng)表350還包括反映了系統(tǒng)當(dāng)前和未來操作的超級塊數(shù)據(jù),以及活動日志。圖3B反映在已旋轉(zhuǎn)分配的超級塊后主記錄300的狀態(tài)。旋轉(zhuǎn)會發(fā)生在寫入進程到達當(dāng)前超級塊末端并開始寫下一個超級塊地址吋。所圖所示,上ー個超級塊311現(xiàn)在持有的選擇值“25”是在之前的當(dāng)前超級塊312。當(dāng)前超級塊312現(xiàn)在持有的值“46”是與之前的下ー個超級塊313關(guān)聯(lián)的。下ー個超級塊313現(xiàn)在持有的是為超級塊最新分配的值“67”。如上所述,超級塊“67”可從空閑池320獲得。在本實施例中,超級塊被預(yù)分配給寫入進程優(yōu)于寫入進程完成對當(dāng)前超級塊的寫入。這種方式,記錄反映了被寫入進程寫入的未來選擇。給主記錄的寫入進程預(yù)分配未來超級塊有幾個好處。寫入進程到達當(dāng)前超級塊末端后,立即寫入下一個超級塊而不需要在繼續(xù)寫之前等待分配一個新的超級塊。如果在寫入進程已經(jīng)開始寫入下一個超級塊后但在主記錄對非易失性存儲器更新和刷新之前失去供電,主記錄可以恢復(fù)系統(tǒng)狀態(tài),并通過參考當(dāng)前和下一個超級塊確定寫入進程最后寫入的位置。而且,在實施例中,控制器被配置為對非易失性存儲器定期刷新而不管是否寫入進程是否到達ー個新的超級塊。在實施例中,主記錄以比進程完成對新超級塊寫入的幾率較高的頻率定期刷新。這樣就能消除以上提及的等待時間,進ー步說明如下面的圖4A和4B進程描述。另外,允許保持以前的超級塊用于針對日志活動的,但沒有記錄在失去供電前的日志活動的,由寫入進程完成的日志進程,進一步解釋如下圖5A和5B所示。圖4A和4B示出用于寫入進程方法并和圖3A和3B所示主記錄兼容的實施例。如圖4A所示的塊400中,寫入進程到達當(dāng)前超級塊末端。寫入進程在塊410繼續(xù)從空閑池分配下一個新的超級塊。在某些實施例中可觸發(fā)對空閑池的刷新。在塊420中,寫入進程在主記錄中指定下一個超級塊作為當(dāng)前超級塊,并分配一超級塊作為下ー個新的超級塊(例如在圖3A和3B所示旋轉(zhuǎn)進程)。同樣的,在塊420中,寫入進程在主記錄中記錄新的寫入 進程狀態(tài)。在塊430中,寫入進程觸發(fā)對非易失性存儲系統(tǒng)主記錄的刷新。在塊440中,寫入進程可以不用等待刷新完成就在進程開始時對被分配為下ー個超級塊(剛剛被指定為當(dāng)iu超級塊)與入。如圖4B所示,超級塊分配進程并不需要由寫入進程執(zhí)行。在圖4B所示的實施例中,ー個獨立的的主記錄管理器管理超級塊分配和管理保持在主記錄中這些塊相關(guān)的數(shù)據(jù)。圖I中主記錄管理器可以是控制器Iio內(nèi)的組件,或控制器110執(zhí)行的進程。在塊450,寫入進程到達當(dāng)前超級塊末端。寫入進程可發(fā)送信號到主記錄管理器表示它已經(jīng)完成對當(dāng)前超級塊的寫入。在塊460寫入進程可立即寫入下ー個超級塊(因為下ー個超級塊在主記錄已經(jīng)分配好)。在塊470主記錄管理器收到從寫入進程的信號并為寫入進程分配ー個新的超級塊,然后將其指定為下ー個超級塊。在塊480新的下ー個超級塊保存在主記錄管理器中且在塊490主記錄管理器可以觸發(fā)主紀錄刷新。在實施例中,在超級塊保存(如圖所示)后可立即進行刷新,在N次寫入后定期刷新,或設(shè)置一定數(shù)量的寫入進程已保存了新的下ー個超級塊。寫入進程可通過參考主記錄或通過從主記錄管理器中正通過的新超級塊獲得新的下ー個超級塊。在一個實施例中,圖4A和4B描述的寫入進程可由如圖I所示的控制器110執(zhí)行。因此,通過上述預(yù)分配方案,本發(fā)明實施例消除了在電カ安全得到保證時由于等待對非易失性存儲器主記錄刷新而造成的延時。如上述所討論的,在實施例中,寫準(zhǔn)備就緒的超級塊自動預(yù)分配給每個對性能關(guān)鍵的寫入進程/線程(如來自用戶數(shù)據(jù)管理器或用于垃圾回收)。在實施例中,在主記錄任何給定的時間內(nèi)的這些線程/進程,一個超級塊被指定為“當(dāng)前”超級塊,而另外ー個被超級塊指定為“下ー個”所以它會在“當(dāng)前”超級塊是滿時被寫入。在一個實施例中,這些對性能關(guān)鍵線程地址塊的預(yù)分配是自動完成的,因此,從“當(dāng)前”超級塊溢出到“下ー個”超級塊,并分配一個ー個新的“下一個”超級塊鏈接在剛剛被指定的舊的“下ー個”超級塊被指定為“當(dāng)前”超級塊后面,這些寫操作是很快的。本發(fā)明各種實施例的優(yōu)點在于對性能敏感的線程并不需要等待主記錄的刷新,由于在“下一個”超級塊信息被丟棄之前主記錄保證被刷新,所以是絕對電カ安全的。這是因為,在不同的實施例中,一旦幾個或幾十個操作完成,包括數(shù)千頁和主記錄的超級塊被規(guī)劃定期刷新。當(dāng)主記錄改動時通過設(shè)置一個標(biāo)志來規(guī)劃主記錄刷新。在某些實施例中,將主記錄放置在寫執(zhí)行隊列中可立即安排刷新。在這些實施例中,隊列中其他的寫請求可對應(yīng)于為“下ー個”超級塊指定的寫入(“當(dāng)前”在準(zhǔn)備寫的主記錄中)。在一個實施例中,隊列有一個隊列深度為32的隊列,因此在31個中的大多其他操作在現(xiàn)在的“當(dāng)前”超級塊被執(zhí)行后,主記錄將被刷新。在一個實施例中,由于每個超級塊通常有數(shù)千頁,主記錄刷新將在現(xiàn)在的“當(dāng)前”超級塊填補剩余空間的操作前完成。在其他實施例中,隊列深度可不同,但可保證主記錄刷新完成在另ー個超級塊旋轉(zhuǎn)之前,只要隊列深度配置小于超級塊容量。另一方面,對性能非關(guān)鍵數(shù)據(jù),當(dāng)滿足ー個或多個條件時,實施例配置為手動觸發(fā)分配新的超級塊。
本發(fā)明實施例能保證存儲系統(tǒng)是電力安全的和確保,任何永久的,不可逆轉(zhuǎn)的介質(zhì)活動時(像對非易失性存儲器的寫和擦除),恢復(fù)的關(guān)鍵數(shù)據(jù)將被保存在主記錄里面,直到介質(zhì)活動確認成功完成。該保證可適用于下列情況在實施例中,有擦除隊列機制植入到主記錄中詳細描述什么超級塊被刪除。只有當(dāng)擦除已成功完成才從隊列中刪除超級塊。因此,如果擦除過程中發(fā)生失去供電,超級塊將在重新上電后再次從隊列刪除直到刪除成功完成。在實施例中,主記錄保持超級塊是“開放”的記錄,比如,超級塊當(dāng)前是運行的,即使之前他被用作如上解釋的那樣。這樣,實施例中的控制器實質(zhì)跟蹤所有可能被寫入任何固體組件(例如,用戶數(shù)據(jù)管理器)的超級塊。進ー步說明如下圖5A和5B所示,上電時,固體可掃描這些超級塊來尋找上次寫入的最后頁面和正確更新表格(例如,映射表,頁無效表,無效計數(shù)器表,超級塊表等)。一個關(guān)鍵是對非易失性存儲器(如NAND)與入有關(guān)的恢復(fù)數(shù)據(jù)不會被丟棄,直到非易失性存儲器中的表被成功更新和刷新(以及更新)。在實施例中,主記錄還包括如與損耗調(diào)平和垃圾回收相關(guān)的內(nèi)部操作的“檢查點”。失去供電的情況下,實施例為恢復(fù)供電后重啟提供內(nèi)部操作有價值的信息,比如(I)塊或超級塊正在工作的每個操作,(2)成功完成的“檢查點”(3)是否從最后ー個檢查點繼續(xù)或重新啟動并像正常一祥前行。在某些實施例中,檢查點可用于活動日志顯示哪些項是相關(guān)的,哪些是過時的。在實施例中,植入到主記錄的關(guān)閉隊列機制列出正在等待被關(guān)閉的超級塊。關(guān)閉隊列確保超級塊跟蹤不結(jié)束只要他們都被填充著。跟蹤不能結(jié)束是因為某些系統(tǒng)表僅在易失性存儲器內(nèi)已更新以反映那些填充的超級塊實施的最后操作,但這些表尚未刷新到非易失性存儲器中。在一個實施例中,僅當(dāng)必要的系統(tǒng)表更新已被成功刷新到非易失性存儲器中,該機制才刪除關(guān)閉隊列中的超級塊。系統(tǒng)狀杰恢復(fù)圖5A和5B說明從主記錄恢復(fù)系統(tǒng)寫狀態(tài)的方法。雖然這里描述的是指系統(tǒng)上電,這些技術(shù)可用于需要從非易失性存儲器載入儲存的系統(tǒng)狀態(tài)的任何時候。圖5A顯示了ー個對應(yīng)于圖2A主記錄恢復(fù)系統(tǒng)寫狀態(tài)的方法。在塊501,系統(tǒng)上電。在塊502,存儲在非易失性存儲器中主記錄數(shù)據(jù)由控制器加載。在塊503,控制器從主記錄檢查上次登錄頁(記錄在非易失性存儲器中與數(shù)據(jù)操作相關(guān)的最后ー頁)并從記錄上次寫入頁的登錄頁掃描指定給每個寫入進程的超級塊。在某些實施例中,主記錄沒有保持最后登錄頁的記錄,在塊503的情形下從當(dāng)前超級塊開始掃描最后寫入頁。主記錄可保持記錄寫活動的記錄(例如,活動日志)用于內(nèi)部維護目的。確定最后寫入頁能使控制器指定地址作為該進程下一個寫入位置。通過這種方式,該系統(tǒng)可以恢復(fù)進程到最后寫入頁,即使該位置沒有儲存在主記錄中。在塊504為進程設(shè)置下ー個寫位置。在一個實施例中,在塊505,重建活動日志捕捉尚未被記錄(從最后登錄頁到最后寫入頁)的操作。圖5B說明主記錄指定以前,當(dāng)前和下ー個超級塊(如圖3A和3B的例子所示)的恢復(fù)系統(tǒng)寫狀態(tài)的方法。如圖5B,在塊511系統(tǒng)上電和在塊512加載主記錄數(shù)據(jù)。主記錄數(shù)據(jù)可包括參考每個寫入進程的最后登錄頁。最后登錄頁可在指定為“在先”或指定為“在先”的超級塊內(nèi)。最后記錄頁可能來自指定為“在先”的超級塊內(nèi),例如,如果在登錄進程對以前的超級塊登錄之前寫入進程進入到新的超級塊并刷新主記錄。最后記錄頁可能來自指 定為“下一個”的超級塊內(nèi),例如,如果在對主記錄成功刷新之前寫入進程繼續(xù)進入到下一個超級塊并登錄。在塊513,對對應(yīng)最后登錄頁的超級塊掃描最后寫入頁。由于掃描了超級塊,超級塊驅(qū)動器的活動可以記錄在活動日志中來重建日志,從而使得日志對以前未記錄的數(shù)據(jù)操作更新。在塊514,系統(tǒng)檢查被掃描超級塊的最后寫入頁是否被檢測。如果不是,那么在塊515系統(tǒng)掃描隨后的超級塊。例如,如果剛被掃描的超級塊是被指定為“以前”的,隨后的超級塊就是“當(dāng)前”超級塊。同樣,如果掃描的超級塊是被指定為“當(dāng)前”的,隨后的超級塊就是“下一個”超級塊。最后寫入頁可在隨后的超級塊內(nèi),因為在寫入進程開始寫入隨后的超級塊但在旋轉(zhuǎn)超級塊的分配被刷新到非易失性介質(zhì)之前,系統(tǒng)中斷是可能的。最后的寫入位置可設(shè)置在塊516的寫入進程中。如上面所討論的,通過這個進程,系統(tǒng)可判斷必須記錄的頁(在最后登錄頁和最后寫入頁之間的那些頁)來重建活動日志且寫入進程可從最后實際發(fā)生的寫的位置繼續(xù),即使它不是“當(dāng)前”超級塊。結(jié)論雖然本發(fā)明描述了某些實施例,但這些實施例只是作為例子而已,不是想要限制本發(fā)明的范圍。事實上,這里描述的本發(fā)明系統(tǒng)和方法的創(chuàng)新性可以體現(xiàn)為其他不同形式。此外,這里描述的各種系統(tǒng)和方法形式的省略、替換、變更,可以認為不偏離本發(fā)明的精神。附隨的權(quán)利要求極其等價物用于覆蓋這些形式或落入屬于本發(fā)明范圍和精神的改進。例如,本領(lǐng)域技術(shù)人員可能意識到如圖28,44,48,54,58所示不同實施例的進程步驟,實際步驟可能會和所述圖有所不同。根據(jù)實施例,上面所述的例子中某些步驟可能被刪除,有些會増加,且步驟的順序被改變和/或并行執(zhí)行ー些步驟。雖然本發(fā)明例子中描述的數(shù)據(jù)儲存在組塊術(shù)語稱為超級塊內(nèi),本領(lǐng)域技術(shù)人員應(yīng)認識到本發(fā)明的不同實施例也應(yīng)用到存儲器系統(tǒng)其他的存儲器計量單位,如面、塊、頁、扇區(qū)等。此外,具體實施例所披露的特點和屬性,可以組合成不同的方式形成更多的實施例,而這些都落入本發(fā)明的范圍內(nèi)。雖然本發(fā)明披露提供了ー些優(yōu)選實施例和應(yīng)用,其他對本領(lǐng)域技術(shù)人員來說是顯而易見的實施例,包括沒有提供所有特點和優(yōu)點的實施例,也在本發(fā)明的范圍內(nèi)。據(jù)此,本發(fā)明范圍界定僅參考附加的權(quán)利要求。
權(quán)利要求
1.一種由固態(tài)存儲子系統(tǒng)的控制器執(zhí)行的用于免受失去供電的方法,其包括 保持所述存儲子系統(tǒng)的易失性存儲器內(nèi)驅(qū)動器狀態(tài)的記錄,對于寫入進程所述記錄包括,與第一組寫入地址和第二組寫入地址相關(guān)的數(shù)據(jù),所述第一組寫入地址被指定為所述寫入進程正在寫入到的當(dāng)前地址組,其中所述寫入地址指定在非易失性固態(tài)存儲陣列中的地址位置; 寫入到所述第一組寫入地址; 在寫入到所述第一組寫入地址的最后寫入地址時,指定所述第二組寫入地址為所述寫入進程將寫入的當(dāng)前寫入地址組,所述指定反映在到驅(qū)動器狀態(tài)的記錄中; 在指定后開始到所述固態(tài)存儲子系統(tǒng)的所述非易失性存儲器的所述記錄的刷新,所述刷新包括保存所述記錄到所述非易失性存儲陣列的一部分; 在所述記錄的刷新完成前寫入到所述第二組寫入地址,從而所述寫入進程不會因所述記錄的刷新而延時, 上述方法由所述存儲子系統(tǒng)的控制器實施。
2.如權(quán)利要求I所述的方法,其中所述記錄儲存在所述易失性存儲器的主記錄內(nèi),且所述主記錄定期被刷新至所述非易失性存儲器。
3.如權(quán)利要求I所述的方法,其中所述寫入地址組為超級塊,其中每個超級塊包括來自所述非易失性固態(tài)存儲陣列中多個模組的至少ー個寫入塊。
4.如權(quán)利要求I所述的方法,進ー步包括在失去供電后,參考保存的記錄重構(gòu)系統(tǒng)表和寫狀態(tài)的步驟。
5.如權(quán)利要求4所述的方法,其中所述記錄還包括和第三組寫入地址相關(guān)的數(shù)據(jù),其中所述指定進一步包括 指定所述第一組寫入地址為在先寫入的寫入地址組;以及 在寫入到所述第二組寫入地址的最后ー個地址時指定所述第三組寫入地址為待寫入的寫入地址組。
6.如權(quán)利要求5所述的方法,其中在失去供電后,被指定為在先寫入的寫入地址組的所述第一組寫入地址被用于恢復(fù)寫入進程的日志。
7.如權(quán)利要求5所述的方法,其中所述重構(gòu)包括參考與所述第一組寫入地址相關(guān)的數(shù)據(jù)和與第二組寫入地址相關(guān)的數(shù)據(jù)重構(gòu)寫日志。
8.如權(quán)利要求I所述的方法,其中所述記錄包括擦除隊列,關(guān)閉隊列和寫入地址組空閑池中的至少ー個。
9.ー種被配置為在預(yù)期失去供電時保存系統(tǒng)狀態(tài)信息的固態(tài)存儲系統(tǒng),其包括 固態(tài)存儲器陣列,其包括多個存儲器単元,每個存儲器單元包括多個物理寫入地址; 控制器,其被配置以控制對所述固態(tài)存儲器陣列寫入數(shù)據(jù)的多個寫入進程,所述多個寫入進程包括用戶數(shù)據(jù)寫入進程和內(nèi)部系統(tǒng)寫入進程,根據(jù)分配給所述寫入進程的存儲器単元,每個所述寫入進程寫入所述固態(tài)存儲器陣列的對應(yīng)部分; 主機系統(tǒng)接ロ,所述系統(tǒng)通過所述主機系統(tǒng)接ロ接收將由所述用戶數(shù)據(jù)寫入進程執(zhí)行的存儲器命令; 其中所述控制器被配置為 保持ー記錄,所述記錄包括指示驅(qū)動器活動狀態(tài)的數(shù)據(jù),以及對于所述多個寫入進程中的每個進程,與分配的存儲器単元和下一存儲器單元相關(guān)的數(shù)據(jù),所述下一存儲器單元表示在被分配的存儲器単元中的物理寫入地址被用盡后所述寫入進程將要寫入的存儲器單元;以及 刷新所述紀錄到所述固態(tài)存儲器陣列,所述刷新的執(zhí)行獨立于正在完成的對其被分配的存儲器単元的寫入并開始對下一存儲器單元的寫入的所述多個寫入進程中的任何寫入進程,從而多個寫入進程中對下ー個存儲器単元寫入的寫入進程不取決于刷新所述記錄到所述固態(tài)存儲器陣列的完成。
10.如權(quán)利要求9所述的固態(tài)存儲系統(tǒng),其中所述記錄進ー步包括,對于所述多個寫入進程中的每個進程,與記錄所述進程已經(jīng)被寫入的物理寫入地址的關(guān)聯(lián)在先存儲器単元相關(guān)的數(shù)據(jù)。
11.如權(quán)利要求10所述的固態(tài)存儲系統(tǒng),其中當(dāng)所述寫入進程完成對分配的存儲器單元的寫入并開始對所述下一存儲器單元的寫入時,所述控制器進ー步被配置為重新分配所述記錄內(nèi)與所述分配的存儲器相關(guān)的數(shù)據(jù)作為與所述在先存儲器単元相關(guān)的數(shù)據(jù),以及重新分配所述記錄內(nèi)與所述下一存儲器單元相關(guān)的數(shù)據(jù)作為與所述分配的存儲器単元相關(guān)的數(shù)據(jù)。
12.如權(quán)利要求9所述的固態(tài)存儲系統(tǒng),其中當(dāng)所述寫入進程完成對所述分配的存儲器単元的寫入并開始對所述下一存儲器單元的寫入時,所述記錄被更新以反映所述寫入進程的當(dāng)前寫入狀態(tài),并從所述多個存儲器単元中分配新的存儲器単元作為所述寫入進程的下一個存儲器単元。
13.如權(quán)利要求12所述的固態(tài)存儲系統(tǒng),其中所述記錄進ー步包括擦除隊列和關(guān)閉隊列,其每個包括所述多個存儲器単元的一部分,并且當(dāng)所述記錄被更新以從所述多個存儲器単元中分配新的存儲器單元時,從所述多個存儲器単元選擇的被分配的存儲器単元不是包括在所述擦除隊列或關(guān)閉隊列中的存儲器単元。
14.如權(quán)利要求13所述的固態(tài)存儲系統(tǒng),其中所述記錄進ー步包括存儲器単元的空閑池,其中從所述多個存儲器単元中選擇的被分配的存儲器單元是包括在所述存儲器単元的空閑池中的存儲器単元。
15.如權(quán)利要求9所述的固態(tài)存儲系統(tǒng),其中每個所述存儲器単元包括超級塊。
16.如權(quán)利要求9所述的固態(tài)存儲系統(tǒng),其中所述控制器被配置為在通電后通過所述記錄重構(gòu)所述固態(tài)存儲系統(tǒng)狀態(tài)。
17.—種記錄固態(tài)存儲系統(tǒng)的狀態(tài)的方法,其包括 通過所述固態(tài)存儲系統(tǒng)的控制器執(zhí)行的進程修改在固態(tài)存儲陣列中第一地址子集的數(shù)據(jù); 為所述進程分配所述固態(tài)存儲陣列中的第二地址子集,以便在所述進程完成對在所述第一地址子集的數(shù)據(jù)的修改之前,所述第二子集不會被所述進程修改; 在所述固態(tài)存儲陣列中存儲包括反映所述第二地址子集的數(shù)據(jù)的記錄; 通過所述進程,修改在所述第二地址子集的數(shù)據(jù),其中在完成儲存步驟之前開始修改在所述第二地址子集的數(shù)據(jù),以便對在所述第二地址子集的數(shù)據(jù)的修改不反映在所述固態(tài)介質(zhì)存儲陣列中儲存的記錄中; 檢索儲存在所述固態(tài)存儲陣列中的所述記錄;掃描檢索的記錄中數(shù)據(jù)反映的所述第一地址子集和所述第二地址子集,從而確定在所述記錄儲存后由所述進程在所述第二地址子集執(zhí)行的修改。
18.如權(quán)利要求17所述的方法,其中所述進程是用戶數(shù)據(jù)管理器、損耗平衡進程或垃圾收集進程中的ー個。
19.如權(quán)利要求17所述的方法,其中所述檢索和掃描在失去供電事件后執(zhí)行。
全文摘要
本發(fā)明提供一種供電安全的數(shù)據(jù)管理系統(tǒng),并具體涉及一種在意外失去供電后,恢復(fù)系統(tǒng)狀態(tài)和保持驅(qū)動器一致性的系統(tǒng)和方法。尤其是,該系統(tǒng)和方法通過預(yù)分配寫入地址組和在非易失性存儲器中記錄預(yù)分配地址組,減少了用于保持驅(qū)動器一致性的開銷。寫入進程可寫入預(yù)分配的地址組,而下一組的地址被預(yù)分配并記錄到非易失性存儲器中。
文檔編號G06F11/14GK102722339SQ20121008654
公開日2012年10月10日 申請日期2012年3月28日 優(yōu)先權(quán)日2011年3月28日
發(fā)明者F·H·阿迪, L·S·趙 申請人:西部數(shù)據(jù)技術(shù)公司