專利名稱::用于方便快速喚醒快閃存儲器系統(tǒng)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及用于維護(hù)可以用于方便喚醒閃存管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的方法和系統(tǒng)。
背景技術(shù):
:在發(fā)明人為Lasser并且名為"MethodForFastWake-UpofaFlashMemorySystem"的美國專利No.6,510,488中/>開了一種在快閃存儲器系統(tǒng)通電之后,即使閃存系統(tǒng)軟件依賴于管理表并且從暫存區(qū)(scratch)中生成管理表的處理非常耗時(shí),也能使快閃存儲器系統(tǒng)獲得快速喚醒時(shí)間的方法和系統(tǒng)。并且這種快速喚醒時(shí)間是在不犧牲數(shù)據(jù)完整性的情況下獲得的。在這里,出于如完全在此提出的全部目的,Lasser的上述專利將被全部引入作為參考。如在Lasser的專利中說明的那樣,將快閃存儲器設(shè)備用于計(jì)算機(jī)數(shù)據(jù)存儲通常需要位于主計(jì)算機(jī)的操作系統(tǒng)與設(shè)備底層存取例程之間的某些軟件轉(zhuǎn)換層。這是因?yàn)殚W存技術(shù)存在某些使用限制,并且取。這其中的一個限制是無法隨機(jī)改寫任何期望的存儲器位置。因此,要將新內(nèi)容寫入快閃存儲器位置,首先需要擦除包含該位置的整個塊(保留仍舊需要的其他位置的內(nèi)容),然后僅寫入新的內(nèi)容。轉(zhuǎn)換層為作為宿主的操作系統(tǒng)提供了關(guān)于獨(dú)立數(shù)據(jù)區(qū)的隨機(jī)存取可尋址陣列的虛擬視圖,同時(shí)隱藏并處理了將這些虛擬地址映射到其在閃存介質(zhì)中的真實(shí)位置的細(xì)節(jié)。這種轉(zhuǎn)換機(jī)制并不是微不足道的,并且在發(fā)明人為AmirBan的美國專利No.5,937,425中公開了這種快閃存儲器轉(zhuǎn)換層的一個實(shí)例,其中該專利在這里引入作為參考。Ban公開的是一種用于在虛擬和物理閃存地址之間實(shí)施映射機(jī)制的方法。此外,在美國專利6,678,785中還公開了這種系統(tǒng)的另一個實(shí)例,其中該專利同樣在這里引入作為參考。轉(zhuǎn)換處理依賴于內(nèi)部轉(zhuǎn)換表,該轉(zhuǎn)換表為閃存系統(tǒng)軟件提供了將主計(jì)算機(jī)數(shù)據(jù)存取請求轉(zhuǎn)換成實(shí)際閃存存取請求所需要的信息。這些轉(zhuǎn)換表是在系統(tǒng)喚醒過程中(或者如果是由宿主軟件請求的,則是在稍后時(shí)間)由軟件基于存儲在閃存設(shè)備內(nèi)部的控制信息來構(gòu)造的。雖然在理論上可以不構(gòu)造這種表并且改為只使用來自閃存的原始控制數(shù)據(jù),但這在實(shí)踐中卻是無法使用的,這是因?yàn)獒槍Υ嫒≌埱蟮捻憫?yīng)時(shí)間將會太慢。此外,出現(xiàn)這種情況的原因還在于存取閃存中的數(shù)據(jù)要遠(yuǎn)遠(yuǎn)慢于存取常規(guī)計(jì)算機(jī)RAM存儲器中的數(shù)據(jù),并且存儲表通常優(yōu)化的。舉例來說,閃存物理單元可以包含映射到其上的虛擬單元編號。在程序運(yùn)行時(shí),我們有可能頻繁需要將虛擬單元編號轉(zhuǎn)換成其物理對應(yīng)物。如果我們只能依賴于快閃存儲控制數(shù)據(jù),那么我們有可能需要掃描所有單元,直到我們發(fā)現(xiàn)具有指定虛擬單元編號的單元為止,如果借助的是簡單媒體存取標(biāo)準(zhǔn),那么這個處理將會是一個非常漫長的過程。但是,通過在系統(tǒng)喚醒時(shí)對閃存設(shè)備掃描一次,并且構(gòu)造一個將每個虛擬單元編號映射到相應(yīng)物理單元編號的表,我們將能夠在以后非常有效地實(shí)施這種映射。這其中的問題在于在系統(tǒng)喚醒時(shí)掃描快閃數(shù)據(jù)存儲設(shè)備可能會耗費(fèi)很長的時(shí)間,對大容量設(shè)備來說尤為如此。特別地,對于那些用戶希望即時(shí)開啟的系統(tǒng)和設(shè)備(也就是蜂窩電話、PDA等等)來說,這種處理將會令人感到煩惱。簡單地將表存儲在閃存中是適用于只讀存儲設(shè)備,例如僅僅存儲了無法被用戶改變的計(jì)算機(jī)可執(zhí)行代碼的閃存設(shè)備。但是,當(dāng)使用那些用來存儲有可能頻繁變化的數(shù)據(jù)的設(shè)備時(shí),如果僅僅將表存儲在閃存中,那么將是無法取得成功的。這是因?yàn)樵趯υO(shè)備進(jìn)行連續(xù)寫入并改變其內(nèi)容的時(shí)候,轉(zhuǎn)換表的內(nèi)容同樣也會改變。如果當(dāng)其每次在存儲器中發(fā)生變化時(shí)都更新閃存中的表的拷貝,那么所招致的開銷將會極大地減慢系統(tǒng)的速度,因此,這種處理是不切實(shí)際的。由此,在存儲于閃存的表與存儲器中的"正確"表之間將會累積差別?,F(xiàn)在,如果用戶切斷電源并且隨后再將其打開,那么在沒有對表進(jìn)行更新的情況下,軟件將會從閃存中讀取錯誤的轉(zhuǎn)換表,其結(jié)果則是在寫入新數(shù)據(jù)時(shí)發(fā)生數(shù)據(jù)丟失。依照Lasser公開的某些實(shí)施例,這個問題可以通過將轉(zhuǎn)換表存無效化的裝置來解決。這其中的可能實(shí)施方式(但不是唯一的實(shí)施方式)包括添加一個使所有條目總和與某個固定的已知值相等的校驗(yàn)和值,或者為所存儲的表添加有效性標(biāo)志。此外,我們還可以要求應(yīng)用軟件在關(guān)閉系統(tǒng)之前調(diào)用轉(zhuǎn)換層中的特定函數(shù)。以這些方式,當(dāng)系統(tǒng)經(jīng)歷有序關(guān)機(jī)時(shí),快閃存儲器設(shè)備能夠啟動快速喚醒處理,并且會在系統(tǒng)經(jīng)歷無序關(guān)機(jī)時(shí)回復(fù)為正常喚醒。雖然這種解決方案在很多情況下都是有用的,但是這種解決方案無法勝任的情況也是存在的。這種解決方案有可能無法勝任的第一個實(shí)例是頻繁出現(xiàn)突然掉電的情形,并且很多(甚至是大多數(shù))通電事件預(yù)期將會遭遇到無效存儲表,并且將會導(dǎo)致速度很慢的正常喚醒。這種解決方案有可能無法勝任的第二個實(shí)例是充當(dāng)快閃存儲器系統(tǒng)宿主的設(shè)備的操作系統(tǒng)沒有為軟件應(yīng)用提供有序卸載或關(guān)機(jī)的服務(wù)。雖然Limix之類的復(fù)雜操作系統(tǒng)提供了這種服務(wù),但是還有很多更為簡單并且更小的被設(shè)計(jì)成在通電時(shí)啟動存儲系統(tǒng)以及永遠(yuǎn)都不將其關(guān)閉的操作系統(tǒng)。在這種情況下,Lasser的方法將會導(dǎo)致在每次為系統(tǒng)通電時(shí)都執(zhí)行閃存管理系統(tǒng)的正常喚醒處理,由此將會從這些方法中一無所獲。這種解決方案有可能無法勝任的第三個實(shí)例是對于系統(tǒng)通電與系統(tǒng)預(yù)備工作之間的時(shí)間間隔長度存在嚴(yán)格的限制。由此,即使很少發(fā)生電源故障并且?guī)缀跛型娗闆r都會快速喚醒閃存管理系統(tǒng),但是,無論電源故障如何少見,所述電源故障都會導(dǎo)致隨后的正常通電序列,而這仍舊是無法接受的。對本公開來說,術(shù)語"塊,,被定義成是可以在單次操作中擦除的最小快閃存儲器單元。術(shù)語"頁"被定義成是可以在單次操作中寫入(也被稱為"編程")的最小快閃存儲器單元。一般來說,一個塊包含很多頁。對本公開來說,術(shù)語"閃存管理系統(tǒng),,和"閃存文件系統(tǒng)"是同義詞,并且是可以交換使用的。對這里的每個術(shù)語來說,無論模塊輸出的接口是面向文件(具有"打開文件,,或"寫入文件"之類的命令)還是面向塊的(具有"讀取塊"或"寫入塊"之類的命令),并且無論軟件模塊是在單純專用于閃存管理的控制器上運(yùn)行,還是在運(yùn)行了使用存儲系統(tǒng)的應(yīng)用的同一主計(jì)算機(jī)上運(yùn)行,這些術(shù)語都是指用于管理快閃存儲器設(shè)備中的數(shù)據(jù)存儲的軟件模塊。由此廣泛認(rèn)為需要一種可以在不損害快閃數(shù)據(jù)結(jié)構(gòu)完整性的情況下始終確保快速喚醒快閃存儲器系統(tǒng)的方法和系統(tǒng),如果具有這種方法和系統(tǒng),那么將會是非常有利的。
發(fā)明內(nèi)容某些或所有前述需要以及其他需要可以通過本發(fā)明的若干個方面來滿足。發(fā)明人現(xiàn)在公開的是這樣一種技術(shù),其中當(dāng)發(fā)生了快閃存儲器系統(tǒng)的某些但并非所有事件之后,這時(shí)可以借助該技術(shù)來更新一個或多個閃存管理表,并且將其保存在非易失快閃存儲器中。在喚醒時(shí),如果最終結(jié)果是保存在非易失閃存中的指定閃存管理表包含過期信息,那么所存儲的一個或多個表仍舊可以為系統(tǒng)喚醒提供便利,并且沒有必要使這些過期的表無效。與無效這種表所不同,當(dāng)喚醒時(shí),在關(guān)機(jī)和/或電力損失之前保存在快閃存儲器中的過期閃存表存儲表可以用于重新構(gòu)造"正確的"表(也就是反映系統(tǒng)的當(dāng)前狀態(tài))。在某些實(shí)施例中,該處理可以通過同時(shí)在快閃存儲器中維護(hù)事件日志來執(zhí)行。在喚醒時(shí),保存在事件日志中的數(shù)據(jù)可以用于更新閃存存儲表,由此即使在沒有電力損失或關(guān)機(jī)之前沒有按順序退出,也可以保持?jǐn)?shù)據(jù)的完整性。在某些實(shí)施例中,從保存在快閃存儲器中的"過期"表推導(dǎo)出"最新,,表的處理要比通過掃描閃存存儲設(shè)備來構(gòu)造最新數(shù)據(jù)表的處理更快。現(xiàn)在,在這里將首次公開一種根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法。當(dāng)前公開的這種方法包括(a)在快閃存儲器中維護(hù)至少一個閃存管理表,其中這些閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);(b)在快閃存儲器中維護(hù)關(guān)于至少一個時(shí)間點(diǎn)的事件日志,(i)最近存儲的至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及(ii)至少在事件日志中保存比所述至少一個較早狀態(tài)更新的至少一個事件。根據(jù)某些實(shí)施例,在至少一個時(shí)間點(diǎn)期間,最新的事件被保存在事件日志中。根據(jù)某些實(shí)施例,在至少一個時(shí)間點(diǎn)期間,快閃存儲器系統(tǒng)的當(dāng)前狀態(tài)由所存儲的事件日志以及所存儲的至少一個閃存管理表的內(nèi)容反映。該特征可以用于保持?jǐn)?shù)據(jù)完整性,由此可以在以后例如在喚醒時(shí)構(gòu)造經(jīng)過更新的閃存管理表。根據(jù)某些實(shí)施例,當(dāng)前公開的方法還包括(c)從至少一個指示較早狀態(tài)的表以及從事件日志中產(chǎn)生至少一個指示快閃存儲器系統(tǒng)的更接近當(dāng)前的狀態(tài)的表。根據(jù)某些實(shí)施例,更接近當(dāng)前的狀態(tài)是快閃存儲器系統(tǒng)在生成時(shí)的最接近當(dāng)前的狀態(tài)。根據(jù)某些實(shí)施例,所述生成是在喚醒時(shí)實(shí)施的。根據(jù)某些實(shí)施例,維護(hù)至少一個管理表包括在與所述至少一個時(shí)間點(diǎn)不同的另一個時(shí)間點(diǎn)將至少一個閃存管理表與事件日志中的最近記錄的事件相同步。根據(jù)某些實(shí)施例,在快閃存儲器中維護(hù)至少一個閃存管理表包括在快閃存儲器中廚期性地將至少一個閃存管理表與當(dāng)前狀態(tài)相同步。根據(jù)某些實(shí)施例,在快閃存儲器中維護(hù)至少一個閃存管理表包括對于快閃存儲器系統(tǒng)的每N個狀態(tài)改變,在快閃存儲器中將至少一個閃存管理表與當(dāng)前狀態(tài)相同步,其中>>=2。根據(jù)某些實(shí)施例,在閃存存儲表中維護(hù)至少一個閃存管理表包括i)在發(fā)生第一預(yù)定類型的狀態(tài)改變時(shí),在快閃存儲器中將至少一個閃存管理表與當(dāng)前狀態(tài)相同步;以及ii)在發(fā)生第二預(yù)定類型的狀態(tài)改變時(shí),在快閃存儲器中不將至少一個閃存管理表與當(dāng)前狀態(tài)相同步。根據(jù)某些實(shí)施例,在快閃存儲器中更新至少一個閃存管理表的頻率是根據(jù)快閃存儲器系統(tǒng)的資源可用性來確定的。根據(jù)某些實(shí)施例,至少一個閃存管理表包括將虛擬塊編號映射成物理塊編號的轉(zhuǎn)換表。根據(jù)某些實(shí)施例,至少一個閃存管理表包括自由塊表。根據(jù)某些實(shí)施例,所述維護(hù)包括在快閃存儲器中維護(hù)多個閃存管理表。根據(jù)某些實(shí)施例,在快閃存儲器中維護(hù)事件日志包括使用快閃存儲器的快速寫入模式而將數(shù)據(jù)寫入快閃存儲器。根據(jù)某些實(shí)施例,快閃存儲器提供MLC和SLC模式,并且在快閃存儲器中維護(hù)事件日志是使用SLC模式執(zhí)行的。根據(jù)某些實(shí)施例,維護(hù)日志是作為快閃存儲器系統(tǒng)的緩存操作的一部分執(zhí)行的?,F(xiàn)在,在這里將首次公開一種快閃存儲器系統(tǒng)中的喚醒方法。當(dāng)前公開的這種方法包括I)在喚醒時(shí),(a)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)的狀態(tài)的閃存管理表;(b)從快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件日志;(c)對于保存在事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新至少一個閃存管理表。根據(jù)某些實(shí)施例,所述更新將會重復(fù)執(zhí)行,直至根據(jù)事件日志中的最近事件更新了至少一個閃存管理表為止。根據(jù)某些實(shí)施例,所述至少一個閃存管理表包括將虛擬塊編號映射成物理塊編號的轉(zhuǎn)換表。根據(jù)某些實(shí)施例,所述至少一個閃存管理表包括自由塊表。根據(jù)某些實(shí)施例,多個閃存管理表是從快閃存儲器中讀取和更新的?,F(xiàn)在,在這里將首次公開一種快閃存儲器系統(tǒng),包括(a)用于存儲數(shù)據(jù)的快閃存儲器;以及(b)用于維護(hù)用于存取快閃存儲器的數(shù)據(jù)結(jié)構(gòu)的閃存管理軟件,其中該閃存管理軟件用于i)在快閃存儲器中維護(hù)至少一個閃存管理表,其中該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);以及b)在快閃存儲器中維護(hù)事件日志,由此對于至少一個時(shí)間點(diǎn),I)最近存儲的至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及II)在事件日志中存儲至少一個比所述較早狀態(tài)更近的事件。現(xiàn)在,在這里將首次公開一種快閃存儲器系統(tǒng),包括(a)用于存儲數(shù)據(jù)的快閃存儲器;以及(b)用于維護(hù)用于存取快閃存儲器的至少一個數(shù)據(jù)結(jié)構(gòu)的閃存管理軟件,其中在喚醒時(shí),該閃存管理軟件用于(I)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)的狀態(tài)的閃存管理表;(II)從快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件日志;(III)對于存儲在事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新至少一個閃存管理表?,F(xiàn)在,在這里將首次公開一種計(jì)算機(jī)可讀存儲介質(zhì),在所述計(jì)算機(jī)可讀存儲介質(zhì)中嵌入計(jì)算機(jī)可讀代碼,該計(jì)算機(jī)可讀代碼包括根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的指令,其中該指令包括如下指令(a)在快閃存儲器中維護(hù)至少一個閃存管理表,其中該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);(b)對于至少一個時(shí)間點(diǎn),在快閃存儲器中維護(hù)的事件日志,(i)最近存儲的至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及(ii)在事件曰志中存儲比所述較早狀態(tài)更新的至少一個事件?,F(xiàn)在,在這里將首次公開一種計(jì)算機(jī)可讀存儲介質(zhì),在該計(jì)算機(jī)可讀存儲介質(zhì)中嵌入計(jì)算機(jī)可讀代碼,該計(jì)算機(jī)可讀代碼包括根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的指令,其中該指令包括如下指令(I)在喚醒時(shí),(a)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)的狀態(tài)的閃存管理表;(b)從快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件日志;(c)對于存儲在事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新至少一個閃存管理表?,F(xiàn)在,在這里將首次公開一種根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法,該方法包括(a)在快閃存儲器中維護(hù)至少一個閃存管理表,其中該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);(b)在快閃存儲器中維護(hù)事件日志;以及(c)在維護(hù)至少一個閃存管理表的同時(shí),在快閃存儲器中維護(hù)唯一標(biāo)識事件日志中的特定事件的數(shù)據(jù)。在某些實(shí)施例中,該特定事件是與至少一個表的內(nèi)容相對應(yīng)的最近事件(例如影響和/或修改了表的內(nèi)容的最近事件)。現(xiàn)在,在這里將首次公開一種根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法。當(dāng)前公開的這種方法包括(a)在快閃存儲器中維護(hù)至少一個閃存管理表,該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);(b)在快閃存儲器中維護(hù)事件日志;以及(c)在維護(hù)事件日志的同時(shí),在快閃存儲器中維護(hù)唯一標(biāo)識事件日志中的特定事件的數(shù)據(jù)。根據(jù)某些實(shí)施例,維護(hù)唯一標(biāo)識數(shù)據(jù)包括在快閃存儲器中維護(hù)事件日志中的最近事件的指示。從以下的詳細(xì)描述和實(shí)例中將會清楚了解這些和其他實(shí)施例。圖1是根據(jù)本發(fā)明某些實(shí)施例的例示快閃存儲器系統(tǒng)的框圖。圖2A2B提供的是根據(jù)本發(fā)明某些實(shí)施例的例示轉(zhuǎn)換表的圖示《圖3、56提供的是用于描述根據(jù)本發(fā)明某些實(shí)施例而在快閃存儲器中維護(hù)一個或多個閃存管理表以及事件日志的不同例程的流程圖。圖4、8A8C提供的是根據(jù)本發(fā)明某些實(shí)施例的例示事件日志的圖示。圖7提供的是用于喚醒的例示例程的流程圖。具體實(shí)施方式現(xiàn)在將根據(jù)具體的例示實(shí)施例來描述本發(fā)明。應(yīng)該理解的是,本發(fā)明并不局限于所公開的例示實(shí)施例。此外還應(yīng)該理解,對當(dāng)前公開的根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)數(shù)據(jù)結(jié)構(gòu)的方法、設(shè)備和計(jì)算機(jī)可讀代碼來說,并不是其中的每一個特征都是實(shí)施附加權(quán)利要求中的任何一個權(quán)利要求的發(fā)明所必需的。在這里描述設(shè)備的不同部件和特征是為了充分地啟用本發(fā)明。此外還應(yīng)該理解,在本公開中,當(dāng)顯示或描述處理或方法時(shí),除非從上下文中可以清楚了解某個步驟依賴于首先執(zhí)行的另一個步驟,否則所述方法的步驟可以按照任何順序執(zhí)行或是同時(shí)執(zhí)行。舉例來說,在有可能遭遇到頻繁的電源故障的環(huán)境中,當(dāng)前公開的用于維護(hù)數(shù)據(jù)結(jié)構(gòu)的方法、系統(tǒng)和計(jì)算機(jī)可讀代碼有助于為快閃存儲器系統(tǒng)的"快速喚醒,,提供便利。但是,這一點(diǎn)不應(yīng)被理解成是對本發(fā)明的限制,并且它僅僅是作為當(dāng)前公開的用于維護(hù)快閃存儲器系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的技術(shù)的非限制性應(yīng)用而被公開的。特別地,即使在頻繁發(fā)生非預(yù)期電源故障的情況下,當(dāng)前公開的技術(shù)也可用于提供快速喚醒閃存管理系統(tǒng),而不會犧牲數(shù)據(jù)完整性。圖1是根據(jù)本發(fā)明某些實(shí)施例的非限制性的例示快閃存儲器系統(tǒng)100的框圖。該例示系統(tǒng)包括用于存儲數(shù)據(jù)的存儲器模塊120,以及經(jīng)由主機(jī)接口180而與存儲器模塊120通信的主機(jī)設(shè)備110(例如微型計(jì)算機(jī)、智能卡終端或其他任何設(shè)備)。存儲器模塊包括任何類型的快閃存儲器130,以及根據(jù)通過主機(jī)接口180接收的讀取和/或?qū)懭牒?或擦除請求來存取快閃存儲器的控制器140。對于圖l所示的實(shí)例,控制器包括CPU150、ROM160(其中存儲了CPU執(zhí)行的代碼)以及由CPU用來支持其代碼執(zhí)行的RAM170。圖1的非限制性實(shí)例的這個框圖代表了典型的非易失存儲模塊,例如安全數(shù)字閃存存儲卡或便攜式USB閃存驅(qū)動器。閃存管理表應(yīng)該指出的是,快閃存儲器系統(tǒng)IOO通常在非易失存儲器中存儲一個或多個閃存管理表,其中舉例來說,所述非易失存儲器可以是存儲器模塊120的RAM170、主機(jī)設(shè)備110的RAM或是其他任何恰當(dāng)?shù)奈恢?。關(guān)于這種閃存管理表的一個非限制性實(shí)例是提供從虛擬塊編號到物理塊編號的地址轉(zhuǎn)換的轉(zhuǎn)換表,存在于眾多閃存管理系統(tǒng)之中的映射,例如美國專利5,937,425的系統(tǒng)中的映射。應(yīng)該指出的是,相同的概念和方法同樣適用于其他任何類型的閃存管理表,例如表示哪些塊能夠自由使用以及哪些塊不能自由使用的自由塊表,表示從虛擬塊編號到一個或多個物理塊編碼的群組的映射的表等等。對本公開來說,"閃存管理表,,是包含閃存管理系統(tǒng)用來支持其算法操作的數(shù)據(jù)的任何表,其中該表中處于任何特定時(shí)間點(diǎn)(Pointintime)的數(shù)據(jù)表示存儲系統(tǒng)在特定時(shí)間具有的某些狀態(tài)特性(aspect)。舉例來說,如果閃存管理表是包含快閃存儲器中每個塊一比特的表,其中該比特指示相應(yīng)的塊是否能夠自由使用,那么該表在第一時(shí)間點(diǎn)統(tǒng)狀態(tài)特性的第一比特圖案。在稍后的時(shí)間點(diǎn),該表中的比特圖案可以與第一時(shí)間點(diǎn)不同,這意味著某些自由塊變成不自由以及某些非自由塊變成自由所導(dǎo)致的自由和非自由塊的不同混合。隨著時(shí)間的流逝,存儲在快閃存儲器中的數(shù)據(jù)有可能發(fā)生變化,并且與快閃存儲器相關(guān)的不同輔助數(shù)據(jù)同樣有可能改變。在發(fā)生了閃存管理系統(tǒng)的不同事件(例如寫入請求、內(nèi)務(wù)操作等等)時(shí),快閃存儲器系統(tǒng)的"狀態(tài)"將會隨時(shí)間而改變。應(yīng)該指出的是,每一個閃存管理表都表示閃存管理系統(tǒng)的總體"狀態(tài),,的一個或多個特性。由此,任何指定的閃存管理表或表的集合沒有必要表示該系統(tǒng)的完整狀態(tài),而是只代表了它的某些特性。在上述自由塊表的實(shí)例中,關(guān)于哪些塊自由以及哪些塊不自由的知識無疑是不足以定義系統(tǒng)的完整狀態(tài)的。非自由塊可能只包含單獨(dú)的已使用頁面,此外它的所有頁面也可能都被寫入了有效數(shù)據(jù)。這一點(diǎn)并沒有被自由塊表所反映,而是通過其他的閃存管理表或是通過某些其他手段反映的,但是該表仍舊沒有表示系統(tǒng)狀態(tài)的某些特性,由此將會落入閃存管理表的定義。由此,當(dāng)在易失或非易失存儲器中存儲一個或多個用于表示快閃存儲器系統(tǒng)的"當(dāng)前狀態(tài)"或"較早狀態(tài)"或"稍后狀態(tài)"或"最近狀態(tài)"的特定閃存存儲表時(shí),這表示所述一個或多個特定閃存存儲表表示的快閃存儲器系統(tǒng)特性的"較早"或"當(dāng)前"或"稍后"或"最近"狀態(tài)。隨著時(shí)間的流逝,閃存管理表會在狀態(tài)序列之間移動,其中對指定時(shí)間來說,每個狀態(tài)都代表了快閃存儲器系統(tǒng)在該時(shí)間的一個或多個特性。由表模擬的系統(tǒng)狀態(tài)特性會在離散的狀態(tài)之間切換,并且這些狀態(tài)具有與快閃存儲器系統(tǒng)的事件相對應(yīng)的確定轉(zhuǎn)換點(diǎn)。例示的閃存管理表圖2A顯示的是在第一時(shí)間點(diǎn)(t-tj將虛擬塊編號映射到物理塊編號的例示閃存管理表的內(nèi)容。這個表是用虛擬塊編號索引的,并且將會產(chǎn)生物理塊編號,其中所述物理塊編號當(dāng)前包含了相應(yīng)虛擬塊的數(shù)據(jù)。在實(shí)際的實(shí)施方式中,由于所述表是用所述虛擬塊編號排序的,并且由此可以被直接標(biāo)引到正確條目,因此未必需要分配用于存儲虛擬塊編號的空間。但是為了便于表示,該表被顯示成實(shí)際提供了這兩個列的樣子。對圖2描繪的虛擬-物理映射狀態(tài)來說,如果必須存取虛擬塊編號2,那么該表將會告訴我們相應(yīng)的物理塊是塊編號172。在某個時(shí)間點(diǎn),發(fā)送到閃存管理系統(tǒng)的命令(或者即使是在沒有外部命令的情況下由系統(tǒng)采取的內(nèi)部內(nèi)務(wù)操作,例如無用信息收集操作)有可能導(dǎo)致所述映射發(fā)生變化。例如,將新數(shù)據(jù)寫入虛擬塊編號2并且由此改寫其先前數(shù)據(jù)的命令有可能導(dǎo)致閃存管理系統(tǒng)分配另一個物理塊與虛擬塊編號2相對應(yīng),并且新的數(shù)據(jù)被存儲在所述塊中。圖2B顯示的是在稍后時(shí)間(t=t2)發(fā)生了變化之后的虛擬-物理閃存管理表的內(nèi)容?,F(xiàn)在,虛擬塊編號2在所述表中與物理塊編號777相對應(yīng),并且不再與物理塊172相對應(yīng)。由此,該表將會從第一狀態(tài)切換到第二狀態(tài)。閃存管理表的內(nèi)容的任何改變都被定義成是所述表的狀態(tài)改變。應(yīng)該強(qiáng)調(diào)的是,并不是在閃存管理系統(tǒng)中發(fā)生的每個寫入操作都會導(dǎo)致該系統(tǒng)的所有閃存管理表的狀態(tài)改變。舉例來說,如果物理塊172的某些頁面未被使用,并且寫入操作被指引到了虛擬塊編號2,那么根據(jù)閃存管理系統(tǒng)的算法,新的數(shù)據(jù)將被存儲到物理塊172的這些未使用頁面,這樣一來,在所述寫入操作之后,虛擬-物理映射不會改變,并且所述表將會保持不變。由此,閃存管理表狀態(tài)的改變速率通常慢于系統(tǒng)內(nèi)部執(zhí)行操作的速率。此外,如果在同一個閃存管理系統(tǒng)內(nèi)部維護(hù)了多個閃存管理表(每一個都代表了該系統(tǒng)狀態(tài)的不同特性),那么,每一個表都可以在不同時(shí)間點(diǎn)改變其狀態(tài)。存儲在喚醒時(shí)有用的數(shù)據(jù)結(jié)構(gòu)(也就是一個或多個表以及事件日士)如上所述,當(dāng)在通電之后初始化系統(tǒng)時(shí),管理軟件有可能需要在RAM中創(chuàng)建它所使用的任何一個閃存管理表的完全更新的拷貝。為了實(shí)現(xiàn)系統(tǒng)的快速喚醒,通常,只從散布于存儲系統(tǒng)的塊的數(shù)據(jù)中重新產(chǎn)生表的內(nèi)容的處理是不能接受的,這是因?yàn)檫@種處理的速度很慢。此外,對于在每次狀態(tài)改變時(shí)都將表的拷貝存入非易失快閃存儲器的相反替換方案來說,由于該方案添加了很高的開銷并且降低了系統(tǒng)性能,因此這種方案同樣是無法接受的。由本發(fā)明不同實(shí)施例提供的技術(shù)提出的是在這兩種現(xiàn)有技術(shù)方案之間進(jìn)行折衷。由此,閃存管理表可以只在某些狀態(tài)改變時(shí)才被存入非易失存儲器,而不是在每次發(fā)生狀態(tài)改變的時(shí)候。在圖3中對這種情況進(jìn)行了描述,該圖描述的是依照本發(fā)明的某些實(shí)施例而在快閃存儲器中維護(hù)閃存管理系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的例示例程。這里使用的"在快閃存儲器中維護(hù)"包括在快閃存儲器中進(jìn)行存儲。通常,在快閃存儲器中維護(hù)包括將表和/或用于填充所述表的相關(guān)數(shù)據(jù)保存在易失存儲器/RAM中,以及對于多個時(shí)間點(diǎn),在快閃存儲器中存儲更新版本的表(也就是與快閃存儲器系統(tǒng)的當(dāng)前狀態(tài)相同步)。根據(jù)圖3的非限制性實(shí)施例,應(yīng)該指出的是,在非限制性實(shí)施例中,系統(tǒng)在某些時(shí)間點(diǎn)有可能是空閑的,并且系統(tǒng)可以等待206下一個事件。一旦對閃存管理系統(tǒng)2的事件進(jìn)行處理210,那么通常會在易失存儲器中根據(jù)發(fā)生的事件來更新214—個或多個表。在指定事件之后,在非易失閃存中既可以更新所述一個或多個表,也可以不對其進(jìn)行更新。關(guān)于例示事件日志的說明發(fā)明人現(xiàn)在描述的是在發(fā)生了某些但不是全部事件之后,閃存管理表將被存儲的某些情況下,這時(shí),較為有益的是在快閃存儲器中維護(hù)一個事件日志。在例示實(shí)施例中,這個事件日志包含了多個記錄,其中每一個記錄都包含了描述閃存管理系統(tǒng)的特定事件的數(shù)據(jù)。雖然并非本發(fā)明的限制,但是應(yīng)該指出的是,一般來說,這種事件日志是在每一個事件之后在快閃存儲器中更新的。如果在快閃存儲器中并沒有始終保存經(jīng)過更新的一個或多個表(也即是依照快閃存儲器系統(tǒng)的最近事件進(jìn)行更新),那么在這種情況下,上述處理將會有益于維護(hù)數(shù)據(jù)完整性。對于提供了數(shù)據(jù)完整性的實(shí)施例來說(也就是說,即使在具有電力損失的情況下),通常,在任何指定時(shí)間,下列條件之一是成立的a)在非易失閃存中存儲依照最近事件更新的表,b)在快閃存儲器中存儲依照較早狀態(tài)更新的表(也就是說,早于最近的事件,換言之,從"較早,,事件時(shí)起,在快閃存儲器系統(tǒng)中已經(jīng)發(fā)生了其他事件),此外,存儲在快閃存儲器中的事件日志包含了從"較早事件,,時(shí)起發(fā)生的所有事件。關(guān)于事件日志的一個例示實(shí)施方式是注冊了影響系統(tǒng)狀態(tài)(也就是存儲在一個或多個閃存管理表中的"系統(tǒng)的至少一個特性,,的狀態(tài))的每個事件的順序序列,其中該事件可以是外部寫入命令、內(nèi)部內(nèi)務(wù)操作、或是其他任何影響狀態(tài)的事件。在圖4中以圖形方式顯示了關(guān)于這種順序事件日志的一個非限制性的可能實(shí)施方式,該實(shí)施方式是一個循環(huán)隊(duì)列,其中該隊(duì)列會在達(dá)到其最高地址之后折回到其最低地址。根據(jù)圖4的實(shí)例,循環(huán)序列的大小是"M,,(可以保存多達(dá)M個事件)。根據(jù)圖4的實(shí)例,在閃存中通常維護(hù)了兩個指針。其中一個指針(在圖4中指向事件M-2)被表示為PointerMOSTrecentevent。這個指針指向日志中的最后一個注冊條目。只要在日志中添加了新的條目,那么該指針首先將會循環(huán)遞增,以便指向下一個條目位置(圖3的步驟218),然后則會將新的條目(圖3的步驟222)記錄在所指向的條目中。應(yīng)該指出的是,在事件日志中重復(fù)記錄222快閃存儲器系統(tǒng)的事件的處理被定義為"在快閃存儲器中維護(hù)事件日志"。通常,PointerMOSTRECENTevent被保存218在閃存中(通過在曰志中存儲指示數(shù)據(jù)來顯性或隱性存儲,由此確定PointerMOSTRECENTEVENT的位置)。在一個實(shí)例中,沒有明確的PointerMOsTrecentevent,并且事件日志被構(gòu)造成可以在不需要附加信息的情況下通過掃描其內(nèi)容來識別其最新條目。根據(jù)該實(shí)例,這個特征很容易就可以通過在每個條目中包含"產(chǎn)生(generation)"字段來實(shí)現(xiàn),其中所述產(chǎn)生是隨每個連續(xù)條目遞增的數(shù)字。然后,日志中的最新條目將會是具有最高生成字段的條目。此外,用于實(shí)現(xiàn)這個特征的其他實(shí)施方式同樣是可行的(例如存儲一個明確的PointerMOST—recent—event)-可以理解的是,用以指示P0interMOST—recenteve!vt的數(shù)據(jù)可以存儲在閃存中的任何位置,并且沒有必要與事件日志一起存儲在閃存中的單獨(dú)位置。根據(jù)"循環(huán)隊(duì)列,,的非限制性實(shí)例,如果分配給日志的空間足夠大,由此它在任何閃存管理表的兩個連續(xù)保存操作之間都不會填滿,那么沒有必要監(jiān)視隊(duì)列的內(nèi)容,并且新的條目可以非常安全地改寫隊(duì)列末端處的最早條目?,F(xiàn)在將對圖4中的第二指針PointerMOSTrecenttablesave進(jìn)行描述。如圖3所示,對快閃存儲器系統(tǒng)的某些但不是所有事件來說(也就是說,只對滿足226"保存表,,條件的事件——在下文中將對所述條件進(jìn)行討論),在閃存中存入230—個或多個閃存管理表。由此,在某些實(shí)施例中,只要將一個或多個閃存管理表存入非易失閃存,則也保存最近事件的更新指示P0interMOSTrecenttable—SAVE。這時(shí),保存在非易失閃存中的閃存管理表被認(rèn)為與快閃存儲器系統(tǒng)的"與最近狀態(tài)同步,,或"與最近事件相同步"。這時(shí),圖4所示的"間隙"將會消失。如果隨后在未將經(jīng)過更新的一個或多個表存入快閃存儲器的情況下更新日志(對于至少一個事件),那么P0interM0STrecenttable—save將會開始落在最近事件(用PointerMOSTrecentevent表示)之后,并且間隙將會再次產(chǎn)生。參考步驟230,應(yīng)該指出的是,當(dāng)在非易失緩存中保存指示快閃存儲器系統(tǒng)的當(dāng)前狀態(tài)的表時(shí),這被定義為"在快閃存儲器中將表與當(dāng)前狀態(tài)同步"。對于在不同事件之后將一個或多個閃存管理表存儲在快閃存儲器中的處理總體被定義為"在快閃存儲器中維護(hù)表"。在不同的時(shí)間點(diǎn),另一個版本的一個或多個閃存管理表(通常,每一個后續(xù)版本表示快閃存儲器系統(tǒng)的稍后狀態(tài))由此將會被存儲在快閃存儲器中。因此,"在快閃存儲器中維護(hù)表"并不需要在任何給定時(shí)刻將最近保存在快閃存儲器中的表與快閃存儲器系統(tǒng)的當(dāng)前狀態(tài)相同步。關(guān)于圖3的檢查表明有可能存在這樣的時(shí)段,在該時(shí)段中,最近存儲的一個或多個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài)(也就是在快閃存儲器系統(tǒng)中發(fā)生更接近當(dāng)前的事件之前的系統(tǒng)的狀態(tài))。應(yīng)該指出的是,可以在以后從閃存中檢索指示PointerMOSTrecenttablesave,例如在閃存系統(tǒng)通電之后。通過將以在任何給定時(shí)間確定所保存的一個或多個閃存管理表是否反映了系統(tǒng)的最近狀態(tài)(也就是表中描述的狀態(tài)特性)。雖然事件日志的上述實(shí)施方式非常簡單并且易于實(shí)施,但這并不是唯--種可行的實(shí)施方式,并且其他的實(shí)施方式同樣是可行的。應(yīng)該指出的是,在某些實(shí)施例中,為事件日志中的每個事件所記錄的數(shù)據(jù)至少包含重新產(chǎn)生事件對系統(tǒng)狀態(tài)所造成的影響所需要的所有數(shù)據(jù)。在事件日志中沒有必要記錄與事件相關(guān)聯(lián)的實(shí)際數(shù)據(jù),并且在例示實(shí)施例中,實(shí)際數(shù)據(jù)并未被記錄。舉例來說,如果事件是來自外部主機(jī)系統(tǒng)的要求寫入一頁數(shù)據(jù)的命令,那么日志中的相應(yīng)記錄包含的是被寫入?yún)^(qū)段的虛擬地址,而不是所要寫入的數(shù)據(jù)。如上所述,在某些實(shí)施例中,當(dāng)在閃存中更新一個或多個表時(shí),可以在每一個事件之后保存PointerMOSTRECENT—event,而只在某些事件之后才保存指示PointerMOSTrecenttablesave的數(shù)據(jù)。用于確定何時(shí)將已更新的一個或多個閃存管理表存入非易失快閃存儲器的策略任何用于確定將已更新的表存入快閃存儲器的事件構(gòu)成的策略——也就是說,步驟226的"保存條件,,都在本發(fā)明的范圍以內(nèi)。發(fā)明人現(xiàn)在公開多種依照本發(fā)明特定實(shí)施例的策略。在第一實(shí)施例中(如圖5所示),在表的狀態(tài)每發(fā)生N次變化時(shí)保存所述表,其中N是預(yù)先確定的。舉例來說,當(dāng)保存開銷很低時(shí),N可以和2—樣小,而當(dāng)保存開銷很高時(shí),它可以與100—樣大,甚至可以更大。由此,如圖5所示,計(jì)數(shù)器變量將被初始化218為零。在每一個事件之后,這個計(jì)數(shù)器變量將會遞增240。如果計(jì)數(shù)器變量超出244預(yù)定閾值W,則將一個或多個表存入快閃存儲器230,并且PointerMOSTRECENTTABLESAVE將會在快閃存儲器中與事件日志中的事mostrecenttablesave相比較,可件中的最近事件同步。在第二實(shí)施例中(如圖6所示),根據(jù)最近事件觸發(fā)的狀態(tài)改變確定"保存表,,條件(在步驟226中出現(xiàn))。為此目的,狀態(tài)改變將被分成"次要,,改變或"主要,,改變。表狀態(tài)中次要的改變不會導(dǎo)致即時(shí)(也就是在處理210下一個事件之前)保存該表(也就是步驟226B之后的"否"分支),而主要的改變則會導(dǎo)致即時(shí)保存。關(guān)于將改變分成次要和主要的非限制性實(shí)例是自由塊閃存管理表,其中將自由塊變成非自由塊的改變被認(rèn)為是次要的,而將非自由塊變成自由塊的改變則是主要的。此外,對于何時(shí)將閃存管理表存入非易失快閃存儲器的策略的其他實(shí)施例也是可能的。在第三實(shí)施例中,只要預(yù)定時(shí)間間隔到期,則對一個或多個表執(zhí)行周期性保存。通常,在表被更新的頻繁程度與在將一個或多個閃存管理表存入非易失閃存中耗費(fèi)的系統(tǒng)資源量之間存在折衷。另一方面,如果較頻繁地保存一個或多個管理表,那么這意味著平均來說,在喚醒過程中從快閃存儲器中檢索的表更有可能得到更多更新,由此將會提供更快的喚醒。應(yīng)該指出的是,任何時(shí)間間隔都處于本發(fā)明的范圍以內(nèi)。在例示的非限制性實(shí)施例中,時(shí)間間隔介于0.1秒與5分鐘或更長時(shí)間之間。在第四實(shí)施例中,表被更新的頻率是根據(jù)系統(tǒng)資源的可用性確定的。在一個實(shí)例中,當(dāng)控制器140處理眾多讀/寫/擦除請求時(shí),或者在有很多內(nèi)務(wù)操作的時(shí)段中,這時(shí),將一個或多個閃存管理表存入非易失閃存的處理將會減少,由此節(jié)約系統(tǒng)資源。在"低使用"時(shí)段中,當(dāng)系統(tǒng)以其他方式空閑或者遭遇到很低的使用率時(shí),這時(shí)可以更為頻繁地將一個或多個閃存管理表存入非易失閃存,而不會對閃存系統(tǒng)性能產(chǎn)生顯著影響。如果較為頻繁地將一個或多個閃存管理表存入閃存,那么將可以提供更快的喚醒,尤其是在沒有按序退出的情況下(例如非預(yù)期的電力損失)。由于并不是每一個狀態(tài)改變都會觸發(fā)表的保存,因此在最后保存的表的拷貝與其在RAM中的最近更新拷貝之間最終將會出現(xiàn)一個間隙或失配。當(dāng)保存表時(shí),這個間隙將會消除,并且這兩個拷貝(也就是易失RAM存儲器中的拷貝和保存在非易失閃存中的拷貝)將會相同,但是未導(dǎo)致表的存儲的新的狀態(tài)改變將會再次產(chǎn)生間隙。喚醒在某些實(shí)施例中,當(dāng)應(yīng)用執(zhí)行按序退出時(shí),已更新的一個或多個閃存管理表(也就是依照快閃存儲器系統(tǒng)的最近事件更新)將被存入快閃存儲器。然后,在喚醒時(shí),從快閃存儲器中檢索所述一個或多個閃存管理表。如果沒有按序退出,那么在喚醒時(shí)可以將一個或多個"過期,,閃存管理表從快閃存儲器檢索到易失存儲器中,然后,根據(jù)存儲在事件日志中的記錄,在易失存儲器中更新過期的閃存管理表。由此,本發(fā)明的實(shí)施例不再需要像在Lasser的US6,510,488中公開的那樣無效過期的表。圖7提供的是描述了根據(jù)本發(fā)明某些實(shí)施例的例示喚醒例程的流程圖。在通電410之后,閃存管理系統(tǒng)將會檢索414所保存的閃存管理表的拷貝。然后,閃存管理系統(tǒng)檢索418再將一個或多個閃存管理表存入非易失緩存時(shí)指向最近事件的PointefMOST—recent_table_save<接下來,閃存管理系統(tǒng)將會確定422PointerMOSTrecenteventj其中舉例來說,所述確定可以通過掃描事件日志以及標(biāo)識其最近條目來實(shí)現(xiàn),也可以通過從非易失快閃存儲器中檢索顯性值來實(shí)現(xiàn),還可以通過其他技術(shù)來實(shí)現(xiàn)。PointerMOSTrecentevent指向最近i己入日志的事件-在系統(tǒng)關(guān)機(jī)之前發(fā)生的最近事件。如果在最后保存了閃存管理表之后以及在表的狀態(tài)發(fā)生附加變化之前(舉例來說,如果是"有序退出,,或是其他任何情況)系統(tǒng)立即關(guān)機(jī),那么這兩個指針(也就是PointerMOSTrecenttablesave和PointerMOSTRECENTEVENT)應(yīng)該是相同的。但是,如果在表的最后保存之后以及在系統(tǒng)關(guān)機(jī)之前發(fā)生了一個或多個閃存管理表的一個或多個狀態(tài)改變,那么在這兩個指針之間應(yīng)該會看到差別。PointerMOsTrecenttablesave指向事件日志中已被所保存的表反映了其對表的狀態(tài)的影響的最近事件。在該事件之后在日志中出現(xiàn)的所有事件,直至由PointerMOST—RECENT—EVENT指向的日志中的最后一個事件,并沒有在所保存的表中反映。對此,能夠"回放"表中尚未反映的新的事件。為此目的,來自事件日志的條目(也就是在最近通電410之前被存入事件日志的"預(yù)存儲,,事件)可以按照從最舊(即由PointerMOSTrecenttablesave指向的)到最新(即由PointerMOSTRECENTEVENT指向的)的順序而-皮逐一讀取434。對每一個此類事件來i兌,一個或多個閃存管理表的狀態(tài)可以采用與影響狀態(tài)的初始事件完全相同的方式得到更新438(例如在易失存儲器中)。為此目的,在某些非限制性實(shí)施方式中,較為有利的是定義一個"臨時(shí),,指針PointerTEMP,這個指針充當(dāng)了一個"迭代器,,變量,并且指向事件日志中當(dāng)前處理的事件。在一開始,Pointertemp的值4皮i殳置426成PointerMOSTRECENTtable—save(如圖8A所示)。對從日志表檢索434的每一個事件(如圖8A8C所示)來說,每一個閃存管理表(如果具有一個以上的閃存管理表)都會被更新438,以便反映為其應(yīng)用的特定狀態(tài)改變。在處理了事件日志中保存的每個事件(例如由PointerTEMP指向的)之后,該指針(例如PointerTEMP)可被提前442,以便指向事件日志中的下一個事件。一旦處理了最近的日志條目(參見圖8C),那么Pointertemp=PointerMOsTrecentevent,并且我們將會完成處理。在某些實(shí)施例中,確定指定日志條目是否為"最近,,日志條目的處理可以通過將"迭代"指針值(例如PointerTEMP)與PointerMOSTrecentevent進(jìn)行比較430來實(shí)施。這時(shí),當(dāng)Pointertemp=PointerMosTrecentevent時(shí),一個或多個閃存管理表現(xiàn)在將會得到完全更新,并且每一個閃存管理表反映其在系統(tǒng)關(guān)機(jī)之前具有的最近狀態(tài)。作為選擇,一個或多個現(xiàn)在更新的閃存管理表被存入446非易失存儲器(連同已更新的PointerMOST_RECENT_TABLE—SAVE一起),由此,所述表的任何未來的重新產(chǎn)生的處理(如果需要的話)都是從當(dāng)前狀態(tài)開始的。當(dāng)確定在易失存儲器以及可選地在非易失存儲器中更新一個或多個閃存管理表之后,這時(shí)可以以快閃存儲器系統(tǒng)的正常操作進(jìn)行450。關(guān)于性能的一般論述由本發(fā)明的特定實(shí)施例提供的一個益處是讀取保存的閃存管理表的拷貝以及回放未在所保存的表的拷貝中反映的日志條目的處理與通過掃描存儲系統(tǒng)的眾多的塊來從暫存器中重新創(chuàng)建表的處理相比,耗費(fèi)的時(shí)間將會極大縮短。如果在保存了表之后并且在附加狀態(tài)改變發(fā)生之前系統(tǒng)關(guān)閉(舉例來說,如果有序退出,或者如果我們足夠"幸運(yùn)的,,在PointerMOSTRECENTEVENT=PointerMOSTRECENTTABLESAVE時(shí)關(guān)機(jī)),那么在某些實(shí)施例中,喚醒時(shí)間將會是最快的,這與有序關(guān)機(jī)時(shí)的Lasser的方法相同。但是,即使在最后保存了所述表之后發(fā)生某些狀態(tài)改變,系統(tǒng)的喚醒時(shí)間也未必會像Lasser的方法在沒有有序關(guān)機(jī)的時(shí)候那樣糟糕。在很多情況下,只需要讀取日志中的少量條目,并且只需要重新創(chuàng)建其對所述表的狀態(tài)的影響。這種處理耗費(fèi)的確切時(shí)間通常取決于所要回放的條目的數(shù)量。而這轉(zhuǎn)而可以取決于用以將表存入非易失存儲器的速率。所述速率越高,平均將要被回放的條目就越少,并且喚醒處理平均來說將會越快。另一方面,保存速率越高,在系統(tǒng)正常操作中在保存中花費(fèi)的時(shí)間開銷也會越高。另一個有可能相關(guān)的因素是寫入事件日志條目所耗費(fèi)的開銷。通常,在提供數(shù)據(jù)完整性的實(shí)施例中,日志是基于每個事件而被寫入的,這意味著它必須在每次發(fā)生可能影響閃存管理表的狀態(tài)的每個系統(tǒng)狀態(tài)改變的時(shí)候?qū)懭?。我們有可能希望知道維護(hù)事件日志的開銷成本是否沒有高于在每次狀態(tài)改變時(shí)保存閃存管理表的開銷。由此,在某些實(shí)施例中,閃存管理系統(tǒng)可以被設(shè)計(jì)成將事件記錄以最快寫入的方式寫入事件曰志。為此目的,當(dāng)閃存介質(zhì)提供一個以上的寫模式時(shí),這時(shí)可以使用較快的寫模塊。用于將至少一個記錄寫入事件日志,以及將指示一個或多個閃存管理表的數(shù)據(jù)寫入非易失快閃存儲器)。這其中的一個實(shí)例是使用同時(shí)提供多級單元(MLC)和單級單元(SLC)模式的快閃存儲器設(shè)備的閃存系統(tǒng)。在發(fā)明人為Chen的美國專利6,456,528中公開這種設(shè)備,并且該專利在這里將被全部引入。為了實(shí)現(xiàn)最高的存儲密度,使用較慢的MLC模式寫入保存在系統(tǒng)中的"常規(guī)數(shù)據(jù)"(例如使用來自主機(jī)設(shè)備110的寫入請求傳遞的數(shù)據(jù)),使用更快的SLC模式寫入事件日志。將日志作為快閃存儲器系統(tǒng)的緩存操作的一部分來加以維護(hù)在某些實(shí)施例中,無論閃存管理表具有怎樣的考慮因素,當(dāng)前公開的一種或多種技術(shù)都可以在必須維護(hù)事件日志的情況下提供特定的優(yōu)點(diǎn)。當(dāng)閃存管理系統(tǒng)為輸入數(shù)據(jù)使用緩存處理時(shí),這種情況將會出現(xiàn),其中輸入數(shù)據(jù)首先會在其到達(dá)時(shí)被保存在快閃存儲器中的第一個位置,在稍后的時(shí)間,該數(shù)據(jù)將會移動到第二個位置,以便進(jìn)行長期存儲。這里使用的"緩存"是指寫入第一個位置。由此,在此類系統(tǒng)中,將數(shù)據(jù)保存在第一個位置(也就是緩存)的處理可以采用一種同樣提供了事件日志功能的方式來實(shí)施。在這種情況下,其中并沒有用于實(shí)施日志的額外開銷,并且本發(fā)明的這種方法的益處將會是最高的。雖然上述說明主要集中于閃存管理系統(tǒng)內(nèi)部的單個閃存管理表,但是本發(fā)明同樣適用于多個閃存管理表,其中每一個閃存管理表都代表了系統(tǒng)狀態(tài)的一個不同特性。如果存在多個表,那么每一個表都可以使用其自己的保存策略來進(jìn)行存儲,而不需要在相同時(shí)間點(diǎn)存儲。在通電時(shí),閃存管理表可以使用上述方法并結(jié)合用于所有表的相同事件日志而纟皮重新構(gòu)造。關(guān)于當(dāng)前公開的系統(tǒng)的附加論述當(dāng)前公開的技術(shù)可以使用硬件、固件和軟件的任何組合來實(shí)施。在一個非限制性示例中,保存閃存管理表的處理以及在通電時(shí)恢復(fù)和重建所述閃存管理表的處理全都是由控制140執(zhí)行的,或者更確切的說,這些處理是由執(zhí)行來自ROM160的代碼的CPU150執(zhí)行的。但是,這并不是可用于使用本發(fā)明的唯一系統(tǒng)架構(gòu)。舉例來說,本發(fā)明的方法還可以由主計(jì)算機(jī)IIO中運(yùn)行的代碼來實(shí)施,這種情況會在存儲模塊是板栽NAND閃存設(shè)備并且沒有獨(dú)立控制器的情況下出現(xiàn)。另一種可能性是本發(fā)明的方法至少部分由主計(jì)算機(jī)110執(zhí)行,并且部分由控制器140執(zhí)行的。所有這些架構(gòu)和眾多其他架構(gòu)全都在本發(fā)明的范圍內(nèi)。在本申請的說明書和權(quán)利要求書中,每一個動詞"包括"、"包含,,和"具有"及其動詞變化都被用于表示動詞的一個或多個客體未必完整列舉了動詞的一個或多個主語所具有的元件、組件、部件或部分。這里引用的所有參考文獻(xiàn)都被全部引入作為參考。參考文獻(xiàn)的引用并不承認(rèn)該參考文獻(xiàn)是現(xiàn)有技術(shù)。這里4吏用的冠詞"一"和"一個,,指的是該冠詞的一個或一個以上(也就是至少一個)語法客體。例如,"一個部件"指的是一個部件或一個以上的部件。這里使用的術(shù)語"包括"指的是短語"包括但不局限于",并且它可以與該短語交換使用。除非在上下文中以其他方式明確指示,否則這里使用的術(shù)語"或"指的是"和/或",并且可以與之交換使用。這里使用的術(shù)語"例如"是指短語"例如但不局限于,,,并且它可以與該短語交換使用。在這里使用作為實(shí)例提供的優(yōu)選實(shí)施例的詳述對本發(fā)明進(jìn)行了描述,并且這些實(shí)施例并沒有限制本發(fā)明的范圍。所描述的實(shí)施例包含了不同的特征,但是并非所有這些特征在本發(fā)明的所有實(shí)施例中都是需要的。本發(fā)明的某些實(shí)施例僅僅使用了其中某些特征或是這些特征的可能組合。對本領(lǐng)域技術(shù)人員來說,所描述的本發(fā)明實(shí)施例變體權(quán)利要求1.一種根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法,該方法包括(a)在快閃存儲器中維護(hù)至少一個閃存管理表,其中所述閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);(b)在所述快閃存儲器中維護(hù)事件日志,其中對于至少一個時(shí)間點(diǎn),i)最近存儲的所述至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及ii)在所述事件日志中存儲比所述較早狀態(tài)更新的至少一個事件。2.如權(quán)利要求l所述的方法,其中,對于所述至少一個時(shí)間點(diǎn),最新的事件被存儲在所述事件日志中。3.如權(quán)利要求l所述的方法,其中,對于所述至少一個時(shí)間點(diǎn),快閃存儲器系統(tǒng)的當(dāng)前狀態(tài)由所述存儲的事件日志以及所述存儲的至少一個閃存管理表的內(nèi)容反映。4.如權(quán)利要求2所述的方法,還包括(c)從所述至少一個指示所述較早狀態(tài)的表以及從所述事件日志中產(chǎn)生至少一個指示快閃存儲器系統(tǒng)的更接近當(dāng)前的狀態(tài)的表。5.如權(quán)利要求4所述的方法,其中,所述更接近當(dāng)前的狀態(tài)是快閃存儲器系統(tǒng)在所述產(chǎn)生時(shí)的最接近當(dāng)前的狀態(tài)。6.如權(quán)利要求4所述的方法,其中,所述產(chǎn)生在喚醒時(shí)實(shí)施。7.如權(quán)利要求l所述的方法,其中,所述維護(hù)所述至少一個管理表包括在與所述至少一個時(shí)間點(diǎn)不同的另一個時(shí)間點(diǎn),將所述至少一個閃存管理表與所述事件日志中的最近記錄的事件相同步。8.如權(quán)利要求l所述的方法,其中,所述在所述快閃存儲器中維護(hù)所述至少一個閃存管理表包括在所述快閃存儲器中周期性地將所述至少一個閃存管理表與當(dāng)前狀態(tài)相同步。9.如權(quán)利要求l所述的方法,其中,所述在所述快閃存儲器中維護(hù)所述至少一個閃存管理表包括對于快閃存儲器系統(tǒng)的每N個狀態(tài)改變,在所述快閃存儲器中將所述至少一個閃存管理表與當(dāng)前狀態(tài)相同步,其中N>=2。10.如權(quán)利要求l所述的方法,其中,所述在所述快閃存儲器中維護(hù)所述至少一個閃存管理表包括i)在發(fā)生第一預(yù)定類型的狀態(tài)改變時(shí),在所述快閃存儲器中將所述至少一個閃存管理表與當(dāng)前狀態(tài)相同步;以及ii)在發(fā)生第二預(yù)定類型的狀態(tài)改變時(shí),在所述快閃存儲器中不將所述至少一個閃存管理表與所述當(dāng)前狀態(tài)相同步。11.如權(quán)利要求l所述的方法,其中,在所述快閃存儲器中更新所述至少一個閃存管理表的頻率是根據(jù)快閃存儲器系統(tǒng)的資源可用性來確定的。12.如權(quán)利要求l所述的方法,其中,所述至少一個閃存管理表包括將虛擬塊編號映射成物理塊編號的轉(zhuǎn)換表。13.如權(quán)利要求l所述的方法,其中,所述至少一個閃存管理表包括自由塊表。14.如權(quán)利要求l所述的方法,其中,所述維護(hù)包括在所述快閃存儲器中維護(hù)多個所述閃存管理表。15.如權(quán)利要求l所述的方法,其中,所述在所述快閃存儲器中維護(hù)事件日志包括使用所述快閃存儲器的加快寫入模式而將數(shù)據(jù)寫入所述快閃存儲器。16.如權(quán)利要求1所述的方法,其中,所述快閃存儲器提供MLC和SLC模式,并且在快閃存儲器中維護(hù)事件日志是使用所述SLC模式執(zhí)行的。17.如權(quán)利要求l所述的方法,其中,所述維護(hù)所述日志的處理是作為快閃存儲器系統(tǒng)的緩存操作的一部分執(zhí)行的。18.—種快閃存儲器系統(tǒng)中的喚醒方法,該方法包括I)在喚醒時(shí),a)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)狀態(tài)的閃存管理表;b)從所述快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件曰志;c)對于保存在所述事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新所述至少一個閃存管理表。19.如權(quán)利要求18所述的方法,其中所述更新重復(fù)執(zhí)行,直至根據(jù)所述事件日志中的最近事件更新了所述至少一個閃存管理表為止。20.如權(quán)利要求18所述的方法,其中所述至少一個閃存管理表包括將虛擬塊編號映射成物理塊編號的轉(zhuǎn)換表。21.如權(quán)利要求18所述的方法,其中所述至少一個閃存管理表包括自由塊表。22.如權(quán)利要求18所述的方法,其中多個所述閃存管理表是從所述快閃存儲器中讀取和并被更新。23.—種快閃存儲器系統(tǒng),包括a)用于存儲數(shù)據(jù)的快閃存儲器;以及b)維護(hù)用于存取所述快閃存儲器的數(shù)據(jù)結(jié)構(gòu)的閃存管理軟件,其中所述閃存管理軟件用于i)在所述快閃存儲器中維護(hù)至少一個閃存管理表,其中該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);以及ii)在所述快閃存儲器中維護(hù)事件日志,使得對于至少一個時(shí)間點(diǎn),I)最近存儲的所述至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及II)在所述事件日志中存儲至少一個比所述較早狀態(tài)更近的事件。24.—種快閃存儲器系統(tǒng),包括a)用于存儲數(shù)據(jù)的快閃存儲器;以及b)用于維護(hù)用于存取所述快閃存儲器的至少一個數(shù)據(jù)結(jié)構(gòu)的閃存管理軟件,其中,在喚醒時(shí),所述閃存管理軟件用于i)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)的狀態(tài)的閃存管理表;ii)從所述快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件曰'志;Hi)對于存儲在所述事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新所述至少一個閃存管理表。25.—種計(jì)算機(jī)可讀存儲介質(zhì),在所述計(jì)算機(jī)可讀存儲介質(zhì)中嵌入了計(jì)算機(jī)可讀代碼,所述計(jì)算機(jī)可讀代碼包括根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的指令,其中所述指令包括如下指令a)在快閃存儲器中維護(hù)至少一個閃存管理表,其中所述閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);b)在所述快閃存儲器中維護(hù)事件日志,其中對于至少一個時(shí)間點(diǎn),i)最近存儲的所述至少一個閃存管理表指示快閃存儲器系統(tǒng)的較早狀態(tài);以及ii)在所述事件日志中存儲比所述較早狀態(tài)更新的至少一個事件。26.—種計(jì)算機(jī)可讀存儲介質(zhì),在所述計(jì)算機(jī)可讀存儲介質(zhì)中嵌入了計(jì)算機(jī)可讀代碼,所述計(jì)算機(jī)可讀代碼包括根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的指令,其中所述指令包括如下指令I(lǐng))在喚醒時(shí),a)從快閃存儲器中讀取至少一個描述快閃存儲器系統(tǒng)的狀態(tài)的閃存管理表;b)從所述快閃存儲器中讀取包含快閃存儲器系統(tǒng)的預(yù)存儲事件的記錄的事件日志;c)對于保存在所述事件日志中的至少一個事件,根據(jù)所述至少一個事件產(chǎn)生的變化來更新所述至少一個閃存管理表。27.—種根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法,該方法包括a)在快閃存儲器中維護(hù)至少一個閃存管理表,該閃存管理表的內(nèi)容指示快閃存儲器系統(tǒng)的狀態(tài);b)在所述快閃存儲器中維護(hù)事件日志;以及c)在所述維護(hù)所述至少一個閃存管理表的同時(shí),在所述快閃存儲器中維護(hù)唯一標(biāo)識所述事件日志中的特定事件的數(shù)據(jù),其中所述特定事件是與所述至少一個表的所述內(nèi)容相對應(yīng)的最近事件。全文摘要本發(fā)明涉及用于方便快速喚醒快閃存儲器系統(tǒng)的方法和系統(tǒng)。在這里公開的是根據(jù)快閃存儲器系統(tǒng)的事件來維護(hù)快閃數(shù)據(jù)結(jié)構(gòu)的方法、系統(tǒng)和計(jì)算機(jī)可讀代碼。在快閃存儲器中同時(shí)存儲事件日志以及至少一個閃存管理表。對于至少一個時(shí)間點(diǎn),最近存儲的閃存存儲表指示快閃存儲器系統(tǒng)的較早狀態(tài),而在事件日志中則存儲了比所述較早狀態(tài)更為接近當(dāng)前的至少一個事件。在通電時(shí),從快閃存儲器中檢索閃存管理表。如果閃存存儲表中的最接近的事件早于事件日志中的最近事件,則從事件日志中檢索事件,以便更新閃存存儲表。作為選擇,更新的閃存存儲表將被保存到快閃存儲器中。文檔編號G06F12/00GK101218566SQ200680021190公開日2008年7月9日申請日期2006年5月9日優(yōu)先權(quán)日2005年5月9日發(fā)明者曼納切姆·拉瑟申請人:晟碟以色列有限公司