專利名稱:具有控制數(shù)據(jù)管理的非易失性存儲(chǔ)器和方法
技術(shù)領(lǐng)域:
本發(fā)明上體上涉及非易失性半導(dǎo)體存儲(chǔ)器,且明確地說(shuō)涉及具有對(duì)控制數(shù)據(jù)進(jìn)行關(guān)鍵處理的存儲(chǔ)器區(qū)塊管理系統(tǒng)的非易失性半導(dǎo)體存儲(chǔ)器。
背景技術(shù):
能夠進(jìn)行電荷的非易失性存儲(chǔ)的固態(tài)存儲(chǔ)器,尤其是封裝成小形狀因數(shù)卡的EEPROM和快閃EEPROM的形式的固態(tài)存儲(chǔ)器,近來(lái)已成為多種移動(dòng)和手提裝置中所選擇的存儲(chǔ)器,特別是信息設(shè)備和消費(fèi)型電子產(chǎn)品。與同樣是固態(tài)存儲(chǔ)器的RAM(隨機(jī)存取存儲(chǔ)器)不同,快閃存儲(chǔ)器為非易失性的,且即使在關(guān)閉電源之后仍能保留其存儲(chǔ)的數(shù)據(jù)。并且,與ROM(只讀存儲(chǔ)器)不同,快閃存儲(chǔ)器類似于磁盤存儲(chǔ)裝置都是可重寫的。盡管成本較高,但快閃存儲(chǔ)器日益用于大容量存儲(chǔ)應(yīng)用中。基于旋轉(zhuǎn)磁性媒體的常規(guī)大容量存儲(chǔ)器(例如,硬磁盤驅(qū)動(dòng)器和軟盤),并不適合移動(dòng)和手提環(huán)境。這是因?yàn)榇疟P驅(qū)動(dòng)器傾向于體積龐大,容易出現(xiàn)機(jī)械故障且具有高等待時(shí)間和高功率需求。這些不合需要的屬性使得基于磁盤的存儲(chǔ)器無(wú)法在大多數(shù)的移動(dòng)和便攜式應(yīng)用中使用。另一方面,嵌入式和抽取式卡形式的快閃存儲(chǔ)器均理想地適用于移動(dòng)和手持環(huán)境,因?yàn)槠涑叽缧?、功率消耗低、高速和高可靠性特征?br>
快閃EEPROM與EEPROM(電可擦除且可編程只讀存儲(chǔ)器)的類似之處在于,快閃EEPROM是可被擦除且可將新的數(shù)據(jù)寫入或“編程”到其存儲(chǔ)器單元中的非易失性存儲(chǔ)器。兩者均利用場(chǎng)效晶體管結(jié)構(gòu)的位于半導(dǎo)體襯底中通道區(qū)上方且在源極與漏極區(qū)之間的浮動(dòng)(未連接)導(dǎo)電柵極。接著在浮柵上方提供控制柵極。浮柵上保留的電荷量控制晶體管的閾值電壓特性。也就是說(shuō),對(duì)于浮柵上給定電平的電荷,存在必須在“開啟”晶體管之前向控制柵極施加的相應(yīng)電壓(閾值),以允許在其源極與漏極區(qū)之間導(dǎo)電。尤其,例如快閃EEPROM的快閃存儲(chǔ)器允許同時(shí)擦除存儲(chǔ)器單元的整個(gè)區(qū)塊。
浮柵可保持某一電荷范圍,且因此可編程為閾值電壓窗口內(nèi)的任何閾值電壓電平。閾值電壓窗口的尺寸受限于裝置的最小和最大閾值電平,而裝置的最小和最大閾值電平對(duì)應(yīng)于可編程到浮柵上的電荷范圍。閾值窗口一般根據(jù)存儲(chǔ)器裝置的特性、操作條件和歷史記錄而定。原則上,在此窗口內(nèi),每一截然不同的、可解析的閾值電壓電平范圍均可用來(lái)指定單元的明確的存儲(chǔ)器狀態(tài)。
通常通過(guò)兩種機(jī)制的一種,將作為存儲(chǔ)器單元的晶體管編程為“已編程”狀態(tài)。在“熱電子注入”中,施加于漏極的高電壓加速跨越在襯底通道區(qū)上的電子。同時(shí),施加于控制柵極的高電壓吸引熱電子通過(guò)薄柵極電介質(zhì)到浮柵上。在“隧穿注入”中,相對(duì)于襯底而向控制柵極施加高電壓。依此方式,將電子從襯底吸引到介入的浮柵。雖然習(xí)慣使用術(shù)語(yǔ)“編程”描述通過(guò)將電子注入到存儲(chǔ)器單元的初始擦除的電荷存儲(chǔ)單位來(lái)寫入到存儲(chǔ)器以改變存儲(chǔ)器狀態(tài),但此術(shù)語(yǔ)現(xiàn)已與例如“寫入”或“記錄”的較為常見的術(shù)語(yǔ)互換使用。
可通過(guò)許多機(jī)制來(lái)擦除存儲(chǔ)器裝置。對(duì)于EEPROM而言,通過(guò)相對(duì)于控制柵極而向襯底施加高電壓以便誘導(dǎo)浮柵的電子隧穿經(jīng)過(guò)薄氧化物到襯底通道區(qū)(即,F(xiàn)owler-Nordheim隧穿),使存儲(chǔ)器單元為電可擦除的。通常,EEPROM可逐字節(jié)地擦除。對(duì)于快閃EEPROM而言,可以一次電擦除全部或每次電擦除一個(gè)或一個(gè)以上最小可擦除區(qū)塊的方式擦除存儲(chǔ)器,其中最小可擦除區(qū)塊可能由一個(gè)或一個(gè)以上扇區(qū)組成,且每一扇區(qū)可存儲(chǔ)512字節(jié)或更多數(shù)據(jù)。
存儲(chǔ)器裝置通常包含可安裝在卡上的一個(gè)或一個(gè)以上存儲(chǔ)器芯片。每一存儲(chǔ)器芯片包含外圍電路(例如,解碼器和擦除、寫入與讀取電路)支持的存儲(chǔ)器單元陣列。較為精密的存儲(chǔ)器裝置還附有執(zhí)行智能型且較高級(jí)存儲(chǔ)器操作和接口連接的控制器。
如今正使用的是許多市售成功的非易失性固態(tài)存儲(chǔ)器裝置。這些存儲(chǔ)器裝置可為快閃EEPROM,或可使用其它類型的非易失性存儲(chǔ)器單元。美國(guó)專利第5,070,032號(hào)、第5,095,344號(hào)、第5,315,541號(hào)、第5,343,063號(hào)和第5,661,053號(hào)、第5,313,421號(hào)和第6,222,762號(hào)中給出了快閃存儲(chǔ)器和系統(tǒng)及其制造方法的實(shí)例。明確地說(shuō),美國(guó)專利第5,570,315號(hào)、第5,903,495號(hào)、第6,046,935號(hào)中描述了具有NAND串結(jié)構(gòu)的快閃存儲(chǔ)器裝置。并且,也可利用具有用于存儲(chǔ)電荷的介電層的存儲(chǔ)器單元來(lái)制造非易失性存儲(chǔ)器裝置。使用介電層來(lái)取代前面所描述的導(dǎo)電浮柵元件。Eitan等人的2000年11月的IEEE Electron DeviceLetters,第21卷,第11號(hào),第543-545頁(yè)中的“NROMA Novel Localized Trapping,2-BitNonvolatile Memory Cell”中已描述這些利用介電存儲(chǔ)元件的存儲(chǔ)器裝置。ONO介電層延伸穿過(guò)源極與漏極擴(kuò)散之間的通道。一個(gè)數(shù)據(jù)位的電荷局限在鄰近于漏極的介電層中,且另一個(gè)數(shù)據(jù)位的電荷局限在鄰近于源極的介電層中。例如,美國(guó)專利第5,768,192號(hào)和第6,011,725號(hào)揭示具有夾在兩個(gè)二氧化硅層之間的捕集電介質(zhì)的非易失性存儲(chǔ)器單元。通過(guò)分離地讀取電介質(zhì)內(nèi)的空間上分離的電荷存儲(chǔ)區(qū)域的二進(jìn)制狀態(tài)來(lái)實(shí)施多狀態(tài)數(shù)據(jù)存儲(chǔ)。
為了改進(jìn)讀取和編程性能,并行地讀取或編程陣列中多個(gè)電荷存儲(chǔ)元件或存儲(chǔ)器晶體管。因此,一起讀取或編程存儲(chǔ)器元件的“頁(yè)”。在現(xiàn)有的存儲(chǔ)器結(jié)構(gòu)中,行通常含有若干交叉的頁(yè)或其可構(gòu)成一頁(yè)。頁(yè)的所有存儲(chǔ)器元件將被一起讀取或編程。
在快閃存儲(chǔ)器系統(tǒng)中,擦除操作可能需要多達(dá)長(zhǎng)于讀取和編程操作的數(shù)目級(jí)。因此,希望具有大尺寸的擦除區(qū)塊。以此方式,將擦除時(shí)間分?jǐn)傇诖罅康拇鎯?chǔ)器單元上。
依照快閃存儲(chǔ)器的性質(zhì),數(shù)據(jù)必須寫入到已擦除的存儲(chǔ)器位置。如果要更新主機(jī)的某一邏輯地址的數(shù)據(jù),一種方式是將更新數(shù)據(jù)重寫在相同的物理存儲(chǔ)器位置。也就是說(shuō),邏輯到物理地址映射不變。然而,這將意味著將必須首先擦除含有所述物理位置的整個(gè)擦除區(qū)塊,且接著用已更新的數(shù)據(jù)進(jìn)行重寫。尤其在要更新的數(shù)據(jù)只占據(jù)擦除區(qū)塊的小部分時(shí),此更新方法效率較低,因?yàn)槠湫枰脸⒅貙懻麄€(gè)擦除區(qū)塊。此也將導(dǎo)致存儲(chǔ)器區(qū)塊的比較頻繁的擦除再循環(huán),這鑒于此類型存儲(chǔ)器裝置的有限耐久性并不理想。
管理快閃存儲(chǔ)器系統(tǒng)的另一問(wèn)題關(guān)于系統(tǒng)控制和目錄數(shù)據(jù)。在各種存儲(chǔ)器操作的過(guò)程期間產(chǎn)生并存取數(shù)據(jù)。因此,其有效處理和迅速存取將直接影響性能。由于快閃存儲(chǔ)器用來(lái)存儲(chǔ)且為非易失性的,所以希望在快閃存儲(chǔ)器中維持此類型的數(shù)據(jù)。然而,因?yàn)榭刂破髋c快閃存儲(chǔ)器之間存在介入文件管理系統(tǒng),所以無(wú)法直接存取數(shù)據(jù)。并且,系統(tǒng)控制和目錄數(shù)據(jù)傾向于成為活躍的且成為片段,此并不有益于具有大尺寸區(qū)塊擦除的系統(tǒng)中的存儲(chǔ)。常規(guī)地,在控制器RAM中設(shè)定此類型的數(shù)據(jù),藉此允許由控制器直接存取。在為存儲(chǔ)器裝置上電之后,初始化過(guò)程使得能夠掃描快閃存儲(chǔ)器以便編輯將要放在控制器RAM中的必要的系統(tǒng)控制和目錄信息。此過(guò)程耗費(fèi)時(shí)間且需要控制器RAM容量,對(duì)于持續(xù)增加的快閃存儲(chǔ)器容量更是如此。
US 6,567,307揭示一種在大擦除區(qū)塊中處理扇區(qū)更新的方法,其包括在多個(gè)充當(dāng)高速暫存存儲(chǔ)器(scratch pad)的擦除區(qū)塊中記錄更新數(shù)據(jù),和最后在各種區(qū)塊中合并有效扇區(qū),并在按邏輯循序次序?qū)ζ溥M(jìn)行重新排列之后重寫扇區(qū)。以此方式,在每一最微小的更新時(shí),不必擦除和重寫區(qū)塊。
WO 03/027828和WO 00/49488均揭示一種處理大擦除區(qū)塊中更新的存儲(chǔ)器系統(tǒng),所述處理包括將邏輯扇區(qū)地址分割成區(qū)。保留邏輯地址范圍的較小區(qū)用于活躍系統(tǒng)控制數(shù)據(jù),所述較小區(qū)與用于用戶數(shù)據(jù)的另一區(qū)分離。以此方式,對(duì)系統(tǒng)控制數(shù)據(jù)的在其自身區(qū)中的操控將不與另一區(qū)中關(guān)聯(lián)的用戶數(shù)據(jù)互相作用。更新處于邏輯扇區(qū)層級(jí),且寫入指針指向?qū)⒁獙懭氲膮^(qū)塊中的相應(yīng)物理扇區(qū)。映射信息緩沖在RAM中,且最后被存儲(chǔ)在主存儲(chǔ)器的扇區(qū)配置表中。邏輯扇區(qū)的最新版本將使現(xiàn)有區(qū)塊中的所有先前版本過(guò)時(shí),現(xiàn)有區(qū)塊因此變得部分過(guò)時(shí)。執(zhí)行垃圾收集以將部分過(guò)時(shí)區(qū)塊保持為可接受的數(shù)目。
現(xiàn)有技術(shù)系統(tǒng)傾向于使更新數(shù)據(jù)分布在許多區(qū)塊上,或更新數(shù)據(jù)可使許多現(xiàn)有的區(qū)塊部分過(guò)時(shí)。結(jié)果通常是部分過(guò)時(shí)區(qū)塊必須進(jìn)行大量垃圾收集,此效率較低且促使存儲(chǔ)器提早老化。并且,與非循序更新相比,沒(méi)有處理循序更新的系統(tǒng)且有效的方式。
因此,普遍需要高容量且高性能的非易失性存儲(chǔ)器。明確地說(shuō),需要一種能夠在大區(qū)塊中執(zhí)行存儲(chǔ)器操作而沒(méi)有上述問(wèn)題的高容量非易失性存儲(chǔ)器。
發(fā)明內(nèi)容
一種非易失性存儲(chǔ)器系統(tǒng)組織在物理存儲(chǔ)器位置的物理群組中。每一物理群組(元區(qū)塊)可作為單位而擦除且可用來(lái)存儲(chǔ)一邏輯群組的數(shù)據(jù)。存儲(chǔ)器管理系統(tǒng)允許通過(guò)配置專用于記錄邏輯群組的更新數(shù)據(jù)的元區(qū)塊來(lái)更新一邏輯群組的數(shù)據(jù)。更新元區(qū)塊以接收次序來(lái)記錄更新數(shù)據(jù),且對(duì)于記錄以原始存儲(chǔ)的正確邏輯次序(循序)與否(混亂)并不存在限制。最后對(duì)進(jìn)一步的記錄關(guān)閉更新元區(qū)塊。將發(fā)生若干過(guò)程的一個(gè)過(guò)程,但最終將以取代原始元區(qū)塊的以正確次序完全填滿的元區(qū)塊結(jié)束。在混亂的情況下,以有益于頻繁更新的方式將目錄數(shù)據(jù)維持在非易失性存儲(chǔ)器中。系統(tǒng)支持正同時(shí)更新的多個(gè)邏輯群組。
本發(fā)明的一個(gè)特征允許以逐個(gè)邏輯群組的方式來(lái)更新數(shù)據(jù)。因此,在更新邏輯群組時(shí),邏輯單位的分布(以及由于更新而過(guò)時(shí)的存儲(chǔ)器單位的散布)在范圍上受到限制。當(dāng)邏輯群組正常地包含在物理區(qū)塊內(nèi)時(shí)尤為如此。
在邏輯群組的更新期間,通常需要分配一個(gè)或兩個(gè)區(qū)塊來(lái)緩沖已更新的邏輯單位。因此,只需要在相對(duì)較少數(shù)目的區(qū)塊上執(zhí)行垃圾收集。通過(guò)合并或壓縮可執(zhí)行混亂區(qū)塊的垃圾收集。
更新過(guò)程的經(jīng)濟(jì)性在更新區(qū)塊的一般處理中會(huì)愈加明顯,從而與循序區(qū)塊相比,無(wú)需為混亂(非循序)更新分配附加的區(qū)塊。所有的更新區(qū)塊均被配置為循序的更新區(qū)塊,且任何更新區(qū)塊均可改變?yōu)榛靵y的更新區(qū)塊。當(dāng)然,更新區(qū)塊從循序到混亂的改變是任意的。
系統(tǒng)資源的有效使用允許同時(shí)更新多個(gè)邏輯群組。這可進(jìn)一步增加效率并減少額外開銷。
分布在多個(gè)存儲(chǔ)器平面上的存儲(chǔ)器的對(duì)準(zhǔn)根據(jù)本發(fā)明的另一方面,對(duì)于組織成可擦除區(qū)塊并由多個(gè)存儲(chǔ)器平面構(gòu)成(從而可并行地讀取邏輯單位或?qū)⑦壿媶挝痪幊痰蕉鄠€(gè)平面中)的存儲(chǔ)器陣列,當(dāng)將更新存儲(chǔ)在給定存儲(chǔ)器平面中的第一區(qū)塊的原始邏輯單位時(shí),規(guī)定將已更新的邏輯單位保持在與原始相同的平面中。這可通過(guò)將已更新的邏輯單位記錄到仍在相同平面中的第二區(qū)塊的下一可用位置而完成。優(yōu)選地,將邏輯單位存儲(chǔ)在平面中具有與它的其它版本相同的偏移位置,使得給定邏輯單位的所有版本由相同組的感測(cè)電路提供服務(wù)。
在優(yōu)選實(shí)施例中,相應(yīng)地用邏輯單位的當(dāng)前版本來(lái)填補(bǔ)從上一個(gè)編程的存儲(chǔ)器單位到下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位之間的任何介入的間隙。通過(guò)用邏輯上跟隨著上一個(gè)編程的邏輯單位的邏輯單位的當(dāng)前版本以及用邏輯上在存儲(chǔ)在下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位中的邏輯單位之前的邏輯單位的當(dāng)前版本來(lái)填充間隙,從而完成填補(bǔ)。
以此方式,將邏輯單位的所有版本維持在相同平面中具有與原始相同的偏移,從而在垃圾收集操作中,不需要從不同平面檢索邏輯單位的最新版本而降低性能。在優(yōu)選實(shí)施例中,用最新的版本來(lái)更新或填補(bǔ)平面上的每一存儲(chǔ)器單位。因此,可并行地讀出來(lái)自每一平面的邏輯單位,此將按照邏輯循序次序而無(wú)需進(jìn)一步重新排列。
此方案通過(guò)允許在平面上重新排列邏輯群組的邏輯單位的最新版本并避免需要從不同的存儲(chǔ)器平面搜集最新版本,來(lái)縮短合并混亂區(qū)塊的時(shí)間。這是有益的,因?yàn)橹鳈C(jī)接口的性能規(guī)格限定存儲(chǔ)器系統(tǒng)完成扇區(qū)寫入操作的最大等待時(shí)間。
分階段程序錯(cuò)誤處理根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的存儲(chǔ)器中,在時(shí)間緊急(time-critical)存儲(chǔ)器操作期間,通過(guò)繼續(xù)中斷區(qū)塊(breakout block)中的編程操作來(lái)處理區(qū)塊中的程序失敗。稍后,在較不緊急的時(shí)間,將中斷前記錄在失敗區(qū)塊中的數(shù)據(jù)傳送到也可能是中斷區(qū)塊的另一區(qū)塊。接著,可丟棄失敗區(qū)塊。以此方式,當(dāng)遇到缺陷區(qū)塊時(shí),可在不損失數(shù)據(jù)且不會(huì)因必須立刻傳送缺陷區(qū)塊中的存儲(chǔ)的數(shù)據(jù)而超過(guò)指定的時(shí)間限制的前提下進(jìn)行處理。此錯(cuò)誤處理對(duì)于垃圾收集操作尤其關(guān)鍵,從而在緊急時(shí)間期間不需要對(duì)嶄新的區(qū)塊重復(fù)整個(gè)操作。隨后,在適宜的時(shí)間,可通過(guò)重新定位到另一區(qū)塊來(lái)挽救來(lái)自缺陷區(qū)塊的數(shù)據(jù)。
程序失敗處理在合并操作期間尤其重要。正常的合并操作將駐存在原始區(qū)塊和更新區(qū)塊中的邏輯群組的所有邏輯單位的當(dāng)前版本合并到合并區(qū)塊中。在合并操作期間,如果在合并區(qū)塊中發(fā)生程序失敗,那么將提供另一個(gè)區(qū)塊充當(dāng)中斷合并區(qū)塊以接收剩余邏輯單位的合并。以此方式,不必將邏輯單位復(fù)制一次以上,且仍可在為正常合并操作指定的時(shí)段內(nèi)完成例外處理的操作。在適宜的時(shí)間,可通過(guò)將群組的所有未處理完成的邏輯單位合并到中斷區(qū)塊中來(lái)完成合并操作。適宜的時(shí)間將是在當(dāng)前主機(jī)寫入操作以外的有時(shí)間執(zhí)行合并的一些其它時(shí)段期間。一個(gè)此適宜的時(shí)間是在存在更新但沒(méi)有關(guān)聯(lián)的合并操作的另一主機(jī)寫入期間。
實(shí)質(zhì)上,可將程序失敗處理的合并視為以多個(gè)階段實(shí)施。在第一階段中,在發(fā)生程序失敗之后,將邏輯單位合并到一個(gè)以上區(qū)塊中以便避免將每一邏輯單位合并一次以上。在適宜的時(shí)間完成最后階段,其中優(yōu)選地通過(guò)以循序次序?qū)⑺羞壿媶挝皇占街袛嗪喜^(qū)塊中,將邏輯群組合并到一個(gè)區(qū)塊中。
非循序更新區(qū)塊索引根據(jù)本發(fā)明的另一方面,在具有支持具有非循序邏輯單位的更新區(qū)塊的區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,非循序更新區(qū)塊中邏輯單位的索引被緩沖在RAM中,并周期性地存儲(chǔ)到非易失性存儲(chǔ)器中。在一個(gè)實(shí)施例中,索引存儲(chǔ)在專用于存儲(chǔ)索引的區(qū)塊中。在另一實(shí)施例中,索引存儲(chǔ)在更新區(qū)塊本身中。在又一實(shí)施例中,索引存儲(chǔ)在每一邏輯單位的標(biāo)題中。在另一方面,在上一個(gè)索引更新之后但在下一個(gè)索引更新之前寫入的邏輯單位的索引信息存儲(chǔ)在每一邏輯單位的標(biāo)題中。以此方式,在電源中斷之后,不必在初始化期間執(zhí)行掃描即可確定最近寫入的邏輯單位的位置。在又一方面,將區(qū)塊管理成部分循序和部分非循序,指向一個(gè)以上邏輯子群組。
控制數(shù)據(jù)完整性&管理根據(jù)本發(fā)明的另一方面,如果一式兩份地維持例如控制數(shù)據(jù)的一些或全部的關(guān)鍵數(shù)據(jù),那么保證其額外等級(jí)的可靠性。以一方式執(zhí)行復(fù)制,使得對(duì)于使用兩次編程技術(shù)來(lái)連續(xù)地編程相同組的存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,第二次中的任何編程錯(cuò)誤將不破壞第一次建立的數(shù)據(jù)。復(fù)制也有助于檢測(cè)寫入中止、檢測(cè)誤測(cè)(misdetection)(即,兩個(gè)副本均具有良好的ECC但數(shù)據(jù)不同),并增加額外等級(jí)的可靠性。已考慮數(shù)據(jù)復(fù)制的若干技術(shù)。
在一個(gè)實(shí)施例中,在稍早的一次編程中已編程給定數(shù)據(jù)的兩個(gè)副本之后,后續(xù)的一次編程避免編程存儲(chǔ)兩個(gè)副本中的至少一個(gè)的存儲(chǔ)器單元。以此方式,在后續(xù)的一次編程在完成之前中止并破壞稍早的一次的數(shù)據(jù)的事件中,兩個(gè)副本中至少一個(gè)不會(huì)受到影響。
在另一實(shí)施例中,給定數(shù)據(jù)的兩個(gè)副本存儲(chǔ)在兩個(gè)不同的區(qū)塊中,其中兩個(gè)副本中至多一個(gè)的存儲(chǔ)器單元在后續(xù)的一次編程中被編程。
在又一實(shí)施例中,在一次編程中已存儲(chǔ)給定數(shù)據(jù)的兩個(gè)副本之后,將不再對(duì)存儲(chǔ)兩個(gè)副本的存儲(chǔ)器單元組執(zhí)行進(jìn)一步編程??赏ㄟ^(guò)存儲(chǔ)器單元組的最終一次編程中編程兩個(gè)副本來(lái)達(dá)成此目的。
在又一實(shí)施例中,可在二進(jìn)制編程模式中將給定數(shù)據(jù)的兩個(gè)副本編程到多狀態(tài)存儲(chǔ)器中,從而將不會(huì)對(duì)已編程的存儲(chǔ)器單元進(jìn)行進(jìn)一步編程。
在又一實(shí)施例中,對(duì)于使用兩次編程技術(shù)來(lái)連續(xù)地編程相同組的存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,使用容錯(cuò)碼來(lái)編碼多個(gè)存儲(chǔ)器狀態(tài),從而稍早的一次編程所建立的數(shù)據(jù)不會(huì)受到后續(xù)的一次編程中的錯(cuò)誤的影響。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,實(shí)施存儲(chǔ)器區(qū)塊的“控制垃圾收集”或搶先式重新定位以避免大量的更新區(qū)塊均恰巧同時(shí)需要重新定位的情況。例如,在更新用于控制區(qū)塊管理系統(tǒng)操作的控制數(shù)據(jù)時(shí)可發(fā)生此情況。控制數(shù)據(jù)類型的層級(jí)可以不同程度的更新頻率而存在,從而導(dǎo)致其關(guān)聯(lián)的更新區(qū)塊需要以不同速率進(jìn)行垃圾收集或重新定位。將存在一個(gè)以上控制數(shù)據(jù)類型的垃圾收集操作同時(shí)發(fā)生的某些時(shí)間。在極端的情況中,所有控制數(shù)據(jù)類型的更新區(qū)塊的重新定位階段可排隊(duì),從而導(dǎo)致所有的更新區(qū)塊均需要同時(shí)重新定位。
從以下對(duì)本發(fā)明的優(yōu)選實(shí)施例的描述中將了解本發(fā)明的附加特征和優(yōu)點(diǎn),應(yīng)結(jié)合附圖來(lái)閱讀所述描述。
圖1示意地說(shuō)明適于實(shí)施本發(fā)明的存儲(chǔ)器系統(tǒng)的主要硬件組件。
圖2說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例組織成扇區(qū)(或元區(qū)塊)的物理群組并由控制器的存儲(chǔ)器管理器管理的存儲(chǔ)器。
圖3A(i)到圖3A(iii)示意地說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例邏輯群組與元區(qū)塊之間的映射。
圖3B示意地說(shuō)明邏輯群組與元區(qū)塊之間的映射。
圖4說(shuō)明元區(qū)塊與物理存儲(chǔ)器中的結(jié)構(gòu)的對(duì)準(zhǔn)。
圖5A說(shuō)明通過(guò)鏈接不同平面的最小擦除單位而構(gòu)成的元區(qū)塊。
圖5B說(shuō)明從每一平面選擇最小擦除單位(MEU)以鏈接到元區(qū)塊中的一個(gè)實(shí)施例。
圖5C說(shuō)明其中從每一平面選擇一個(gè)以上MEU以鏈接到元區(qū)塊中的另一實(shí)施例。
圖6是如控制器和快閃存儲(chǔ)器中實(shí)施的元區(qū)塊管理系統(tǒng)的示意方框圖。
圖7A說(shuō)明以循序次序?qū)懭氲窖虻母聟^(qū)塊的邏輯群組中的扇區(qū)的實(shí)例。
圖7B說(shuō)明以混亂次序?qū)懭氲交靵y的更新區(qū)塊的邏輯群組中的扇區(qū)的實(shí)例。
圖8說(shuō)明由于具有邏輯地址不連續(xù)性的兩個(gè)分離的主機(jī)寫入操作而以循序次序?qū)懭氲窖虻母聟^(qū)塊的邏輯群組中的扇區(qū)的實(shí)例。
圖9是說(shuō)明根據(jù)本發(fā)明的一般實(shí)施例更新區(qū)塊管理器更新一邏輯群組的數(shù)據(jù)的過(guò)程的流程圖。
圖10說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例更新區(qū)塊管理器更新一邏輯群組的數(shù)據(jù)的過(guò)程的流程圖。
圖11A是更加詳細(xì)地說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的合并過(guò)程的流程圖。
圖11B是更加詳細(xì)地說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的壓縮過(guò)程的流程圖。
圖12A說(shuō)明邏輯群組的所有可能的狀態(tài),和在各種操作下其間的可能的轉(zhuǎn)換。
圖12B是羅列邏輯群組的可能的狀態(tài)的表。
圖13A說(shuō)明元區(qū)塊的所有可能的狀態(tài),和在各種操作下其間的可能的轉(zhuǎn)換。元區(qū)塊是對(duì)應(yīng)于邏輯群組的物理群組。
圖13B是羅列元區(qū)塊的可能的狀態(tài)的表。
圖14(A)到圖14(J)是展示對(duì)邏輯群組的狀態(tài)以及對(duì)物理元區(qū)塊的各種操作的效果的狀態(tài)圖。
圖15說(shuō)明用于追蹤開啟和關(guān)閉的更新區(qū)塊及用于配置的已擦除區(qū)塊的配置區(qū)塊列表(ABL)結(jié)構(gòu)的優(yōu)選實(shí)施例。
圖16A說(shuō)明混亂區(qū)塊索引(CBI)扇區(qū)的數(shù)據(jù)字段。
圖16B說(shuō)明記錄在專用元區(qū)塊中的混亂區(qū)塊索引(CBI)扇區(qū)的實(shí)例。
圖16C是說(shuō)明存取經(jīng)歷混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。
圖16D是說(shuō)明根據(jù)已將邏輯群組分割成子群組的替代實(shí)施例,存取經(jīng)歷混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。
圖16E說(shuō)明對(duì)于將每一邏輯群組分割成多個(gè)子群組的實(shí)施例中,混亂區(qū)塊索引(CBI)扇區(qū)及其功能的實(shí)例。
圖17A說(shuō)明群組地址表(GAT)扇區(qū)的數(shù)據(jù)字段。
圖17B說(shuō)明記錄在GAT區(qū)塊中的群組地址表(GAT)扇區(qū)的實(shí)例。
圖18是說(shuō)明使用并再循環(huán)已擦除區(qū)塊的控制和目錄信息的分布和流程的示意方框圖。
圖19是展示邏輯到物理地址轉(zhuǎn)換的過(guò)程的流程圖。
圖20說(shuō)明在存儲(chǔ)器管理的操作過(guò)程中,對(duì)控制數(shù)據(jù)結(jié)構(gòu)執(zhí)行的操作的層級(jí)。
圖21說(shuō)明由多個(gè)存儲(chǔ)器平面構(gòu)成的存儲(chǔ)器陣列。
圖22A說(shuō)明根據(jù)本發(fā)明的一般實(shí)施方案具有平面對(duì)準(zhǔn)的更新的方法的流程圖。
圖22B說(shuō)明圖22A所示的流程圖中存儲(chǔ)更新的步驟的優(yōu)選實(shí)施例。
圖23A說(shuō)明不管平面對(duì)準(zhǔn)如何以循序次序?qū)懭氲窖虻母聟^(qū)塊的邏輯單位的實(shí)例。
圖23B說(shuō)明不管平面對(duì)準(zhǔn)如何以非循序次序?qū)懭氲交靵y更新區(qū)塊的邏輯單位的實(shí)例。
圖24A說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23A的循序更新實(shí)例。
圖24B說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例具有平面對(duì)準(zhǔn)但不進(jìn)行填補(bǔ)的圖23B的混亂更新實(shí)例。
圖24C說(shuō)明根據(jù)本發(fā)明的另一優(yōu)選實(shí)施例具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23B的混亂更新實(shí)例。
圖25說(shuō)明每一頁(yè)含有用于存儲(chǔ)兩個(gè)邏輯單位(例如,兩個(gè)邏輯扇區(qū))的兩個(gè)存儲(chǔ)器單位的示范性存儲(chǔ)器組織。
圖26A與圖21的存儲(chǔ)器結(jié)構(gòu)類似,只是每一頁(yè)含有兩個(gè)扇區(qū)而不是一個(gè)扇區(qū)。
圖26B說(shuō)明圖26A所示的具有以示意線性方式布局的存儲(chǔ)器單位的元區(qū)塊。
圖27說(shuō)明在不填補(bǔ)將要從一個(gè)位置復(fù)制到另一位置的邏輯單位的情況下更新區(qū)塊中的平面對(duì)準(zhǔn)的替代方案。
圖28說(shuō)明合并操作期間缺陷區(qū)塊中發(fā)生程序失敗時(shí)對(duì)另一區(qū)塊重復(fù)合并操作的方案。
圖29示意地說(shuō)明具有允許足夠時(shí)間以完成寫入(更新)操作以及合并操作的定時(shí)或?qū)懭氲却龝r(shí)間的主機(jī)寫入操作。
圖30說(shuō)明根據(jù)本發(fā)明的一般方案程序失敗處理的流程圖。
圖31A說(shuō)明程序失敗處理的一個(gè)具體實(shí)施例,其中第三(最后的重新定位)區(qū)塊不同于第二(中斷)區(qū)塊。
圖31B說(shuō)明程序失敗處理的另一實(shí)施例,其中第三(最后的重新定位)區(qū)塊與第二(中斷)區(qū)塊相同。
圖32A說(shuō)明導(dǎo)致合并操作的初始更新操作的流程圖。
圖32B說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例多階段合并操作的流程圖。
圖33說(shuō)明多階段合并操作的第一和最后階段的示范性定時(shí)。
圖34A說(shuō)明中斷合并區(qū)塊不用作更新區(qū)塊而更大程度上用作合并操作已中斷的合并區(qū)塊的情況。
圖34B說(shuō)明始于圖34A的多階段合并的第三和最后階段。
圖35A說(shuō)明將中斷合并區(qū)塊維持為接收主機(jī)寫入的更新區(qū)塊而不是合并區(qū)塊的情況。
圖35B說(shuō)明第二情況的始于圖35A的多階段合并的第三和最后階段。
圖36A說(shuō)明應(yīng)用于主機(jī)寫入觸發(fā)更新區(qū)塊的關(guān)閉且更新區(qū)塊為循序時(shí)的情況的分階段程序錯(cuò)誤處理方法。
圖36B說(shuō)明在更新區(qū)塊的更新的情況中應(yīng)用于(局部區(qū)塊系統(tǒng))的分階段程序錯(cuò)誤處理方法。
圖36C說(shuō)明處理垃圾收集操作的分階段程序錯(cuò)誤,或不支持映射到元區(qū)塊的邏輯群組的存儲(chǔ)器區(qū)塊管理系統(tǒng)中的清除。
圖37說(shuō)明在相同邏輯群組的每N個(gè)扇區(qū)寫入之后將CBI扇區(qū)寫入到關(guān)聯(lián)的混亂索引扇區(qū)區(qū)塊的程序安排的實(shí)例。
圖38A說(shuō)明直到在預(yù)定數(shù)目的寫入之后在其中記錄CBI扇區(qū)時(shí)的更新區(qū)塊。
圖38B說(shuō)明圖38A的在索引扇區(qū)之后在其中進(jìn)一步記錄數(shù)據(jù)頁(yè)1、2和4的更新區(qū)塊。
圖38C說(shuō)明圖38B的寫入有觸發(fā)索引扇區(qū)的下一次記錄的另一邏輯扇區(qū)的更新區(qū)塊。
圖39A說(shuō)明存儲(chǔ)在混亂更新區(qū)塊中的每一數(shù)據(jù)扇區(qū)標(biāo)題中的中間寫入的中間索引。
圖39B說(shuō)明在寫入的每一扇區(qū)的標(biāo)題中存儲(chǔ)中間寫入的中間索引的實(shí)例。
圖40說(shuō)明存儲(chǔ)在混亂更新區(qū)塊的每一數(shù)據(jù)扇區(qū)標(biāo)題中的混亂索引字段中的信息。
圖41A說(shuō)明當(dāng)每一存儲(chǔ)器單元存儲(chǔ)兩個(gè)位的數(shù)據(jù)時(shí),4狀態(tài)存儲(chǔ)器陣列的閾值電壓分布。
圖41B說(shuō)明使用葛萊碼的現(xiàn)有的2次編程方案。
圖42說(shuō)明通過(guò)一式兩份地保存每一扇區(qū)來(lái)保護(hù)關(guān)鍵數(shù)據(jù)的方式。例如,將扇區(qū)A、B、C、和D保存在復(fù)制的副本中。如果一個(gè)扇區(qū)副本中存在數(shù)據(jù)破壞,那么可改為讀取另一扇區(qū)副本。
圖43說(shuō)明將復(fù)制扇區(qū)通常保存在多狀態(tài)存儲(chǔ)器中的非穩(wěn)固性。
圖44A說(shuō)明將關(guān)鍵數(shù)據(jù)的交錯(cuò)的復(fù)制的副本保存到多狀態(tài)存儲(chǔ)器中的一個(gè)實(shí)施例。
圖44B說(shuō)明將關(guān)鍵數(shù)據(jù)的復(fù)制的副本只保存到多狀態(tài)存儲(chǔ)器的邏輯上頁(yè)的另一實(shí)施例。
圖44C說(shuō)明以多狀態(tài)存儲(chǔ)器的二進(jìn)制模式保存關(guān)鍵數(shù)據(jù)的復(fù)制的副本的又一實(shí)施例。
圖45說(shuō)明同時(shí)將關(guān)鍵數(shù)據(jù)的復(fù)制的副本保存到兩個(gè)不同的元區(qū)塊的又一實(shí)施例。
圖46A在說(shuō)明4狀態(tài)存儲(chǔ)器陣列的閾值電壓分布方面與圖41A類似,且展示為圖46B的參考。
圖46B說(shuō)明通過(guò)使用容錯(cuò)碼同時(shí)保存關(guān)鍵數(shù)據(jù)的復(fù)制的副本的又一實(shí)施例。
圖47是展示數(shù)據(jù)的兩個(gè)副本的可能的狀態(tài)和數(shù)據(jù)有效性的表。
圖48說(shuō)明存儲(chǔ)控制數(shù)據(jù)的存儲(chǔ)器區(qū)塊的搶先式重新定位的流程圖。
具體實(shí)施例方式
圖1示意地說(shuō)明適于實(shí)施本發(fā)明的存儲(chǔ)器統(tǒng)的主要硬件組件。存儲(chǔ)器統(tǒng)20通常通過(guò)主機(jī)接口以主機(jī)10進(jìn)行操作。存儲(chǔ)器系統(tǒng)通常為存儲(chǔ)卡或嵌入式存儲(chǔ)器系統(tǒng)的形式。存儲(chǔ)器系統(tǒng)20包括由控制器100控制操作的存儲(chǔ)器200。存儲(chǔ)器200包含分布在一個(gè)或一個(gè)以上集成電路芯片上的一個(gè)或一個(gè)以上陣列的非易失性存儲(chǔ)器單元??刂破?00包括接口110、處理器120、任選的協(xié)處理器121、ROM 122(只讀存儲(chǔ)器)、RAM 130(隨機(jī)存取存儲(chǔ)器)、和可任選地編程的非易失性存儲(chǔ)器124。接口110具有一個(gè)將控制器連接到主機(jī)的組件和另一個(gè)連接到存儲(chǔ)器200的組件。存儲(chǔ)在非易失性ROM 122和/或任選的非易失性存儲(chǔ)器124中的韌件為處理器120提供代碼以實(shí)施控制器100的功能。處理器120或任選的協(xié)處理器121可處理錯(cuò)誤校正碼。在替代實(shí)施例中,由狀態(tài)機(jī)(未圖示)來(lái)實(shí)施控制器100。在又一實(shí)施例中,控制器100在主機(jī)內(nèi)實(shí)施。
邏輯和物理區(qū)塊結(jié)構(gòu)圖2說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例的存儲(chǔ)器,其被組織成扇區(qū)(或元區(qū)塊)的物理群組并由控制器的存儲(chǔ)器管理器進(jìn)行管理。將存儲(chǔ)器200組織成元區(qū)塊,其中每一元區(qū)塊是一組可一起擦除的物理扇區(qū)S0、...、SN-1。
主機(jī)10在文件系統(tǒng)或操作系統(tǒng)下執(zhí)行應(yīng)用程序時(shí)存取存儲(chǔ)器200。通常,主機(jī)以邏輯扇區(qū)為單位來(lái)定址數(shù)據(jù),其中,例如,每一扇區(qū)可含有512字節(jié)的數(shù)據(jù)。并且,主機(jī)通常以邏輯群集為單位來(lái)讀取或?qū)懭氲酱鎯?chǔ)器系統(tǒng),每一邏輯群集由一個(gè)或一個(gè)以上邏輯扇區(qū)組成。在一些主機(jī)系統(tǒng)中,可能存在任選的主機(jī)側(cè)(host-side)存儲(chǔ)器管理器以在主機(jī)處執(zhí)行較低級(jí)的存儲(chǔ)器管理。在大多數(shù)情況下,在讀取或?qū)懭氩僮髌陂g,主機(jī)10本質(zhì)上向存儲(chǔ)器系統(tǒng)20發(fā)布命令以讀取或?qū)懭牒幸淮哂羞B續(xù)地址的數(shù)據(jù)邏輯扇區(qū)的程序段。
存儲(chǔ)器側(cè)存儲(chǔ)器管理器實(shí)施在存儲(chǔ)器系統(tǒng)20的控制器100中以便管理快閃存儲(chǔ)器200的元區(qū)塊中主機(jī)邏輯扇區(qū)的數(shù)據(jù)的存儲(chǔ)和檢索。在優(yōu)選的實(shí)施例中,存儲(chǔ)器管理器含有用于管理元區(qū)塊的擦除、讀取和寫入操作的許多軟體模塊。存儲(chǔ)器管理器還維持與其在快閃存儲(chǔ)器200和控制器RAM 130中的操作關(guān)聯(lián)的系統(tǒng)控制和目錄數(shù)據(jù)。
圖3A(i)到圖3A(iii)示意地說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例邏輯群組與元區(qū)塊之間的映射。物理存儲(chǔ)器的元區(qū)塊具有用于存儲(chǔ)邏輯群組的N個(gè)邏輯扇區(qū)的數(shù)據(jù)的N個(gè)物理扇區(qū)。圖3A(i)展示來(lái)自邏輯群組LGi的數(shù)據(jù),其中邏輯扇區(qū)呈現(xiàn)連續(xù)的邏輯次序0、1、...、N-1。圖3A(ii)展示正以相同的邏輯次序存儲(chǔ)在元區(qū)塊中的相同數(shù)據(jù)。當(dāng)以此方式存儲(chǔ)時(shí),將元區(qū)塊視為“循序的”。一般來(lái)說(shuō),元區(qū)塊可具有以不同次序存儲(chǔ)的數(shù)據(jù),在此情況下,將元區(qū)塊視為“非循序的”或“混亂的”。
邏輯群組的最低地址與其映射到的元區(qū)塊的最低地址之間可能存在偏移。在此情況下,邏輯扇區(qū)地址在元區(qū)塊內(nèi)以環(huán)形的方式從邏輯群組的底部卷繞回頂部。例如,在圖3A(iii)中,元區(qū)塊在其始于邏輯扇區(qū)k的數(shù)據(jù)的第一位置中進(jìn)行存儲(chǔ)。在到達(dá)最后的邏輯扇區(qū)N-1時(shí),元區(qū)塊卷繞到扇區(qū)0,且最終在其最后的物理扇區(qū)中存儲(chǔ)與邏輯扇區(qū)k-1關(guān)聯(lián)的數(shù)據(jù)。在優(yōu)選的實(shí)施例中,使用頁(yè)標(biāo)記來(lái)識(shí)別任何偏移,例如,識(shí)別存儲(chǔ)在元區(qū)塊的第一物理扇區(qū)中的數(shù)據(jù)的起始邏輯扇區(qū)地址。當(dāng)兩個(gè)區(qū)塊僅由于頁(yè)標(biāo)記而不同時(shí),將認(rèn)為兩個(gè)區(qū)塊以類似的次序存儲(chǔ)其邏輯扇區(qū)。
圖3B示意地說(shuō)明邏輯群組與元區(qū)塊之間的映射。除了數(shù)據(jù)正被更新的少量邏輯群組外,每一邏輯群組均映射到唯一的元區(qū)塊。邏輯群組在已更新之后可映射到不同的元區(qū)塊。將映射信息維持在一組邏輯到物理目錄中,稍后將更詳細(xì)地進(jìn)行描述。
也考慮其它類型的邏輯群組到元區(qū)塊映射。例如,由Alan Sinclair在與本申請(qǐng)案同一天申請(qǐng)的標(biāo)題為“Adaptive Metablocks”的共同待決并共同擁有的美國(guó)專利申請(qǐng)案中揭示了具有可變尺寸的元區(qū)塊。所述共同待決的申請(qǐng)案的全部揭示內(nèi)容以引用的方式并入本文中。
本發(fā)明的一個(gè)特征為,系統(tǒng)以單一邏輯分割操作,和存儲(chǔ)器系統(tǒng)的整個(gè)邏輯地址范圍中的邏輯扇區(qū)群組均以相同的方式進(jìn)行處理。例如,可將含有系統(tǒng)數(shù)據(jù)的扇區(qū)和含有用戶數(shù)據(jù)的扇區(qū)分布在邏輯地址空間中的任何地方。
與現(xiàn)有技術(shù)系統(tǒng)不同,并不為了將可能含有高頻率和小尺寸更新的數(shù)據(jù)的扇區(qū)局限在邏輯地址空間中而將系統(tǒng)扇區(qū)(即,與文件配置表、目錄或子目錄有關(guān)的扇區(qū))特別地進(jìn)行分割或分區(qū)。實(shí)際上,更新扇區(qū)的邏輯群組的本方案將有效地處理典型的系統(tǒng)扇區(qū)的存取樣式以及典型的文件數(shù)據(jù)的存取樣式。
圖4說(shuō)明元區(qū)塊與物理存儲(chǔ)器中的結(jié)構(gòu)的對(duì)準(zhǔn)??扉W存儲(chǔ)器包含可作為單位而一起擦除的存儲(chǔ)器單元的區(qū)塊。此擦除區(qū)塊是快閃存儲(chǔ)器的最小擦除單位或存儲(chǔ)器的最小可擦除單位(MEU)。最小擦除單位是存儲(chǔ)器的硬件設(shè)計(jì)參數(shù),但在支持多個(gè)MEU擦除的一些存儲(chǔ)器系統(tǒng)中,可能配置包含一個(gè)以上MEU的“超級(jí)MEU”。對(duì)于快閃EEPROM,MEU可包含一個(gè)扇區(qū),但優(yōu)選地包含多個(gè)扇區(qū)。在所示的實(shí)例中,其具有M個(gè)扇區(qū)。在優(yōu)選的實(shí)施例中,每一扇區(qū)可存儲(chǔ)512字節(jié)的數(shù)據(jù)且具有用戶數(shù)據(jù)部分和用于存儲(chǔ)系統(tǒng)或額外開銷數(shù)據(jù)的標(biāo)題部分。如果元區(qū)塊由P個(gè)MEU構(gòu)成,且每一MEU含有M個(gè)扇區(qū),那么每一元區(qū)塊將具有N=P*M個(gè)扇區(qū)。
在系統(tǒng)層級(jí)上,元區(qū)塊代表存儲(chǔ)器位置的群組,例如,可一起擦除的扇區(qū)。將快閃存儲(chǔ)器的物理地址空間視為一組元區(qū)塊,元區(qū)塊是最小的擦除單位。本說(shuō)明書中,術(shù)語(yǔ)“元區(qū)塊”和“區(qū)塊”用來(lái)同義地定義在系統(tǒng)層級(jí)上媒體管理的最小擦除單位,且術(shù)語(yǔ)“最小擦除單位”或MEU用來(lái)表示快閃存儲(chǔ)器的最小擦除單位。
鏈接最小擦除單位(MEU)以形成元區(qū)塊為了使編程速度和擦除速度最大化,盡可能利用并行方式對(duì)將要并行編程的處于多個(gè)MEU中的多頁(yè)信息和將要并行擦除的多個(gè)MEU進(jìn)行排列。
在快閃存儲(chǔ)器中,頁(yè)是可在單一操作中一起編程的存儲(chǔ)器單元的編組。頁(yè)可包含一個(gè)或一個(gè)以上扇區(qū)。并且,可將存儲(chǔ)器陣列分割成一個(gè)以上平面,其中一次只可編程或擦除平面內(nèi)的一個(gè)MEU。最后,可將平面分布在一個(gè)或一個(gè)以上存儲(chǔ)器芯片中。
在快閃存儲(chǔ)器中,MEU可包含一個(gè)或一個(gè)以上頁(yè)??蓪⒖扉W存儲(chǔ)器芯片內(nèi)的MEU組織在平面中。由于可同時(shí)編程或擦除每一平面的一個(gè)MEU,所以通過(guò)從每一平面選擇一個(gè)MEU來(lái)形成多個(gè)MEU元區(qū)塊是有利的(參看下文圖5B)。
圖5A說(shuō)明通過(guò)鏈接不同平面的最小擦除單位而構(gòu)成的元區(qū)塊。每一元區(qū)塊(例如,MB0、MB1、...)由來(lái)自存儲(chǔ)器系統(tǒng)的不同平面的MEU構(gòu)成,其中不同平面可分布在一個(gè)或一個(gè)以上芯片中。圖2所示的元區(qū)塊鏈接管理器170管理每一元區(qū)塊的MEU的鏈接。除非MEU中的一者失敗,否則在初始格式化過(guò)程期間配置每一元區(qū)塊,并在系統(tǒng)的整個(gè)壽命期間保留其組成MEU。
圖5B說(shuō)明從每一平面選擇一個(gè)最小擦除單位(MEU)以便鏈接成元區(qū)塊的一個(gè)實(shí)施例。
圖5C說(shuō)明從每一平面選擇一個(gè)以上MEU以便鏈接成元區(qū)塊的另一實(shí)施例。在另一實(shí)施例中,可從每一平面選擇一個(gè)以上MEU以形成超級(jí)MEU。例如,超級(jí)MEU可由兩個(gè)MEU形成。在此情況下,可能采取一次以上的過(guò)程來(lái)進(jìn)行讀取或?qū)懭氩僮鳌?br>
由Carlos Gonzales等人在與本申請(qǐng)案同一天申請(qǐng)的標(biāo)題為“Adaptive DeterministicGrouping of Blocks into Multi-Block Structures”的共同待決并共同擁有的美國(guó)專利申請(qǐng)案中也揭示了將MEU鏈接和再鏈接成元區(qū)塊。所述共同待決的申請(qǐng)案的全部揭示內(nèi)容以引用的方式并入本文中。
元區(qū)塊管理圖6是如控制器和快閃存儲(chǔ)器中實(shí)施的元區(qū)塊管理系統(tǒng)的示意方框圖。元區(qū)塊管理系統(tǒng)包含實(shí)施在控制器100中的各種功能模塊,并將各種控制數(shù)據(jù)(包括目錄數(shù)據(jù))維持在依照階層而分布在快閃存儲(chǔ)器200和控制器RAM 130中的表和列表中。實(shí)施在控制器100中的功能模塊包括接口模塊110、邏輯到物理地址轉(zhuǎn)換模塊140、更新區(qū)塊管理器模塊150、擦除區(qū)塊管理器模塊160和元區(qū)塊鏈接管理器170。
接口110允許元區(qū)塊管理系統(tǒng)與主機(jī)系統(tǒng)進(jìn)行接口連接。邏輯到物理地址轉(zhuǎn)換模塊140將來(lái)自主機(jī)的邏輯地址映射到物理存儲(chǔ)器位置。更新區(qū)塊管理器模塊150管理存儲(chǔ)器中給定的數(shù)據(jù)邏輯群組的數(shù)據(jù)更新操作。已擦除區(qū)塊管理器160管理元區(qū)塊的擦除操作及其用于存儲(chǔ)新信息的配置。元區(qū)塊鏈接管理器170管理扇區(qū)的最小可擦除區(qū)塊的子群組的鏈接以構(gòu)成給定的元區(qū)塊。這些模塊的具體實(shí)施方式
將在其個(gè)別段落中給出。
在操作期間,元區(qū)塊管理系統(tǒng)產(chǎn)生控制數(shù)據(jù)(例如,地址、控制與狀態(tài)信息)并結(jié)合控制數(shù)據(jù)來(lái)工作。由于許多控制數(shù)據(jù)傾向于是經(jīng)常變化的小型數(shù)據(jù),所以不可容易地有效地存儲(chǔ)并維持在具有大區(qū)塊結(jié)構(gòu)的快閃存儲(chǔ)器中。為了在非易失性快閃存儲(chǔ)器中存儲(chǔ)較靜態(tài)的控制數(shù)據(jù),同時(shí)在控制器RAM中定位較少數(shù)目的較有變化的控制數(shù)據(jù),以便進(jìn)行更有效的更新和存取,使用階層式與分散式方案。在電源關(guān)機(jī)或故障的事件中,此方案允許通過(guò)掃描非易失性存儲(chǔ)器中的一小組的控制數(shù)據(jù)來(lái)在快速地重建易失性控制器RAM中的控制數(shù)據(jù)。這是可能的,因?yàn)楸景l(fā)明限制與給定的邏輯群組的數(shù)據(jù)的可能的活動(dòng)關(guān)聯(lián)的區(qū)塊數(shù)目。以此方式限制掃描。另外,將需要持久性的一些控制數(shù)據(jù)存儲(chǔ)在可逐扇區(qū)更新的非易失性元區(qū)塊中,每一更新導(dǎo)致記錄取代先前扇區(qū)的新扇區(qū)。為控制數(shù)據(jù)使用扇區(qū)索引方案以便在元區(qū)塊中追蹤逐扇區(qū)的更新。
非易失性快閃存儲(chǔ)器200存儲(chǔ)相對(duì)較靜態(tài)的大量控制數(shù)據(jù)。此包括群組地址表(GAT)210、混亂區(qū)塊索引(CBI)220、已擦除區(qū)塊列表(EBL)230和MAP 240。GAT210追蹤扇區(qū)的邏輯群組與其相應(yīng)元區(qū)塊之間的映射。除非經(jīng)歷更新,否則映射不會(huì)改變。CBI 220追蹤更新期間邏輯上非循序的扇區(qū)的映射。EBL 230追蹤已擦除的元區(qū)塊的集區(qū)(pool)。MAP 240是展示快閃存儲(chǔ)器中所有元區(qū)塊的擦除狀態(tài)的位圖。
易失性控制器RAM 130存儲(chǔ)經(jīng)常變化并被存取的一小部分控制數(shù)據(jù)。此包括配置區(qū)塊列表(ABL)134和已清除區(qū)塊列表(CBL)136。ABL 134追蹤用于記錄更新數(shù)據(jù)的元區(qū)塊配置,而CBL 136追蹤已解除配置并擦除的元區(qū)塊。在優(yōu)選實(shí)施例中,RAM 130充當(dāng)存儲(chǔ)在快閃存儲(chǔ)器200中的控制數(shù)據(jù)的高速緩沖存儲(chǔ)器。
更新區(qū)塊管理器更新區(qū)塊管理器150(如圖2所示)處理邏輯群組的更新。根據(jù)本發(fā)明的一個(gè)方面,向經(jīng)歷更新的扇區(qū)的每一邏輯群組配置用于記錄更新數(shù)據(jù)的專用更新元區(qū)塊。在優(yōu)選實(shí)施例中,將邏輯群組的一個(gè)或一個(gè)以上扇區(qū)的任何程序段記錄在更新區(qū)塊中??晒芾砀聟^(qū)塊以接收循序次序或非循序(也稱為“混亂”)次序的已更新數(shù)據(jù)。混亂更新區(qū)塊允許在邏輯群組內(nèi)以任何次序更新扇區(qū)數(shù)據(jù),并任意重復(fù)個(gè)別扇區(qū)。明確地說(shuō),循序的更新區(qū)塊可變成混亂更新區(qū)塊而不需要重新定位任何數(shù)據(jù)扇區(qū)。對(duì)于混亂數(shù)據(jù)更新不需要預(yù)定的區(qū)塊配置;任何邏輯地址的非循序?qū)懭胱詣?dòng)地適應(yīng)。因此,與現(xiàn)有技術(shù)系統(tǒng)不同,關(guān)于邏輯群組的各種更新程序段是以邏輯循序還是非循序次序并不存在特殊處理。一般更新區(qū)塊將僅僅用來(lái)以主機(jī)請(qǐng)求的次序記錄各種程序段。例如,即使主機(jī)系統(tǒng)數(shù)據(jù)或系統(tǒng)控制數(shù)據(jù)傾向于以混亂方式更新,但不需要以與具有主機(jī)用戶數(shù)據(jù)的區(qū)域不同的方式來(lái)處理邏輯地址空間的對(duì)應(yīng)于主機(jī)系統(tǒng)數(shù)據(jù)的區(qū)域。
優(yōu)選地將扇區(qū)的完整邏輯群組的數(shù)據(jù)以邏輯上循序次序存儲(chǔ)在單一元區(qū)塊中。以此方式,預(yù)定義已存儲(chǔ)的邏輯扇區(qū)的索引。當(dāng)元區(qū)塊以預(yù)定義的次序存儲(chǔ)給定邏輯群組的所有扇區(qū)時(shí),其可稱為“完整的”。對(duì)于更新區(qū)塊,當(dāng)其最終以邏輯上循序次序用更新數(shù)據(jù)填滿時(shí),接著更新區(qū)塊將變成容易地取代原始元區(qū)塊的已更新的完整元區(qū)塊。另一方面,如果更新區(qū)塊以邏輯上與完整區(qū)塊不同的次序被更新數(shù)據(jù)填滿,那么更新區(qū)塊為非循序或混亂更新區(qū)塊且必須進(jìn)一步處理次序紊亂的程序段從而最終以與完整區(qū)塊的次序相同的次序存儲(chǔ)邏輯群組的更新數(shù)據(jù)。在優(yōu)選的情況下,單一元區(qū)塊中為邏輯上循序次序。進(jìn)一步的處理涉及將更新區(qū)塊中的已更新扇區(qū)和原始區(qū)塊中的未變化的扇區(qū)合并到又一更新元區(qū)塊中。接著,合并的更新區(qū)塊將為邏輯上循序次序并可用來(lái)取代原始區(qū)塊。在某一預(yù)定條件下,合并過(guò)程之前進(jìn)行一個(gè)或一個(gè)以上壓縮過(guò)程。壓縮過(guò)程僅僅將混亂更新區(qū)塊的扇區(qū)重新記錄到取代的混亂更新區(qū)塊中,同時(shí)除去已被相同邏輯扇區(qū)的后續(xù)更新致使過(guò)時(shí)的任何復(fù)制的邏輯扇區(qū)。
更新方案允許多達(dá)預(yù)定義的最大值的多個(gè)更新線程同時(shí)運(yùn)行。每一線程是使用其專用更新元區(qū)塊經(jīng)歷更新的邏輯群組。
循序數(shù)據(jù)更新當(dāng)首先更新屬于邏輯群組的數(shù)據(jù)時(shí),元區(qū)塊經(jīng)配置并專用作邏輯群組的更新數(shù)據(jù)的更新區(qū)塊。當(dāng)從主機(jī)接收寫入邏輯群組(現(xiàn)有的元區(qū)塊已完整地存儲(chǔ)其所有扇區(qū))的一個(gè)或一個(gè)以上扇區(qū)的程序段的命令時(shí),配置更新區(qū)塊。對(duì)于第一主機(jī)寫入操作,將第一程序段的數(shù)據(jù)記錄在更新區(qū)塊上。由于每一主機(jī)寫入是具有連續(xù)邏輯地址的一個(gè)或一個(gè)以上扇區(qū)的程序段,所以遵循第一更新在性質(zhì)上始終循序。在后續(xù)的主機(jī)寫入中,以從主機(jī)接收的次序?qū)⑾嗤壿嬋航M內(nèi)的更新程序段記錄在更新區(qū)塊中。區(qū)塊繼續(xù)接受管理作為循序的更新區(qū)塊,同時(shí)在關(guān)聯(lián)的邏輯群組內(nèi)由主機(jī)更新的扇區(qū)保持邏輯上循序。在此邏輯群組中更新的所有扇區(qū)寫入到此循序的更新區(qū)塊直到區(qū)塊關(guān)閉或轉(zhuǎn)換為混亂更新區(qū)塊為止。
圖7A說(shuō)明由于兩個(gè)分離的主機(jī)寫入操作而以循序次序?qū)懭氲窖虻母聟^(qū)塊的邏輯群組中的扇區(qū)的實(shí)例,同時(shí)邏輯群組的原始區(qū)塊中的相應(yīng)扇區(qū)變得過(guò)時(shí)。在主機(jī)寫入操作#1中,更新邏輯扇區(qū)LS5-LS8中的數(shù)據(jù)。已更新為L(zhǎng)S5′-LS8′的數(shù)據(jù)記錄在新配置的專用更新區(qū)塊中。
為了方便,將邏輯群組中將要更新的第一扇區(qū)記錄在始于第一物理扇區(qū)位置的專用更新區(qū)塊中。一般而言,將要更新的第一邏輯扇區(qū)不一定是群組的邏輯第一扇區(qū),且因此邏輯群組的起始與更新區(qū)塊的起始之間可能存在偏移。此偏移稱為頁(yè)標(biāo)記,如先前結(jié)合圖3A所描述。以邏輯上循序次序更新后續(xù)的扇區(qū)。當(dāng)寫入邏輯群組的最后扇區(qū)時(shí),群組地址卷繞且寫入序列從群組的第一扇區(qū)繼續(xù)。
在主機(jī)寫入操作#2中,更新邏輯扇區(qū)LS9-LS12中數(shù)據(jù)的程序段。更新為L(zhǎng)S9′-LS12′的數(shù)據(jù)記錄在直接跟隨著寫入結(jié)束處的位置中的專用更新區(qū)塊中??煽吹絻蓚€(gè)主機(jī)寫入使得更新數(shù)據(jù)已以邏輯上循序次序記錄在更新區(qū)塊中,即LS5′-LS12′。更新區(qū)塊可視為循序的更新區(qū)塊,因?yàn)槠湟岩赃壿嬌涎虼涡虮惶畛洹S涗浽诟聟^(qū)塊中的更新數(shù)據(jù)使原始區(qū)塊中的相應(yīng)數(shù)據(jù)過(guò)時(shí)。
混亂數(shù)據(jù)更新當(dāng)關(guān)聯(lián)的邏輯群組內(nèi)由主機(jī)更新的任何扇區(qū)為邏輯上非循序時(shí),為現(xiàn)有的循序的更新區(qū)塊啟始混亂更新區(qū)塊管理。混亂更新區(qū)塊是數(shù)據(jù)更新區(qū)塊的形式,其中關(guān)聯(lián)的邏輯群組內(nèi)的邏輯扇區(qū)可以任何次序進(jìn)行更新并重復(fù)任意次。其可在主機(jī)寫入的扇區(qū)是邏輯上非循序時(shí)通過(guò)從循序的更新區(qū)塊轉(zhuǎn)換成正被更新的邏輯群組內(nèi)的先前已寫入的扇區(qū)而得以建立。隨后在此邏輯群組中更新的所有扇區(qū)寫入在混亂更新區(qū)塊中的下一可用扇區(qū)位置,而無(wú)論其在群組內(nèi)的邏輯扇區(qū)地址如何。
圖7B說(shuō)明由于五個(gè)分離的主機(jī)寫入操作而正以混亂次序?qū)懭氲交靵y更新區(qū)塊的邏輯群組中的扇區(qū)的實(shí)例,同時(shí)邏輯群組的原始區(qū)塊中被取代的扇區(qū)和混亂更新區(qū)塊中被復(fù)制的扇區(qū)變得過(guò)時(shí)。在主機(jī)寫入操作#1中,更新存儲(chǔ)在原始元區(qū)塊中的給定邏輯群組的邏輯扇區(qū)LS10-LS11。已更新的邏輯扇區(qū)LS10′-LS11′存儲(chǔ)在新配置的更新區(qū)塊中。此時(shí),更新區(qū)塊為循序的更新區(qū)塊。在主機(jī)寫入操作#2中,將邏輯扇區(qū)LS5-LS6更新為L(zhǎng)S5′-LS6′并記錄在緊緊跟隨著上一個(gè)寫入的位置中的更新區(qū)塊中。此可使更新區(qū)塊從循序的轉(zhuǎn)換為混亂的更新區(qū)塊。在主機(jī)寫入操作#3中,再次更新邏輯扇區(qū)LS10并將其記錄在更新區(qū)塊的下一位置作為L(zhǎng)S10″。此時(shí),更新區(qū)塊中的LS10″取代先前記錄中的LS10′,而LS10′進(jìn)而取代原始區(qū)塊中的LS10。在主機(jī)寫入操作#4中,再次更新邏輯扇區(qū)LS10中的數(shù)據(jù)并將其記錄在更新區(qū)塊的下一位置作為L(zhǎng)S10。因此,LS10現(xiàn)為邏輯扇區(qū)LS10的最后且唯一有效的數(shù)據(jù)。在主機(jī)寫入操作#5中,更新邏輯扇區(qū)LS30中的數(shù)據(jù)并將其記錄在更新區(qū)塊中作為L(zhǎng)S30′。因此,此實(shí)例說(shuō)明可以任何次序并以任意重復(fù),將邏輯群組內(nèi)的邏輯扇區(qū)寫入在混亂更新區(qū)塊中。
強(qiáng)制循序更新圖8說(shuō)明由于具有邏輯地址不連續(xù)性的兩個(gè)分離的主機(jī)寫入操作而正以循序次序?qū)懭氲窖蚋聟^(qū)塊的邏輯群組中的扇區(qū)的實(shí)例。在主機(jī)寫入#1中,將邏輯扇區(qū)LS5-LS8中的更新數(shù)據(jù)記錄在專用更新區(qū)塊中作為L(zhǎng)S5′-LS8′。在主機(jī)寫入#2中,將邏輯扇區(qū)LS14-LS16中的更新數(shù)據(jù)記錄在跟隨著上一個(gè)寫入的更新區(qū)塊中作為L(zhǎng)S14′-LS16′。然而,LS8與LS14之間存在地址跳躍,且主機(jī)寫入#2通常將致使更新區(qū)塊非循序。由于地址跳躍并不很多,所以一個(gè)選擇是在執(zhí)行主機(jī)寫入#2之前通過(guò)將來(lái)自原始區(qū)塊的介入的扇區(qū)的數(shù)據(jù)復(fù)制到更新區(qū)塊而首先執(zhí)行填補(bǔ)操作(#2A)。以此方式,保持更新區(qū)塊的循序性質(zhì)。
圖9是說(shuō)明根據(jù)本發(fā)明的一般實(shí)施例更新區(qū)塊管理器更新邏輯群組的數(shù)據(jù)的過(guò)程的流程圖。更新過(guò)程包含以下步驟步驟260將存儲(chǔ)器組織成區(qū)塊,將每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)一邏輯單位的數(shù)據(jù)。
步驟262將數(shù)據(jù)組織成邏輯群組,將每一邏輯群組分割成邏輯單位。
步驟264在標(biāo)準(zhǔn)情況下,根據(jù)第一指定次序,優(yōu)選地以邏輯上循序次序,將邏輯群組的所有邏輯單位存儲(chǔ)在原始區(qū)塊的存儲(chǔ)器單位中。以此方式,獲知用于存取區(qū)塊中個(gè)別邏輯單位的索引。
步驟270對(duì)于給定邏輯群組(例如,LGx)的數(shù)據(jù),請(qǐng)求更新LGx內(nèi)的邏輯單位。(邏輯單位更新作為實(shí)例而給出。一般而言,更新將是LGx內(nèi)一個(gè)或一個(gè)以上連續(xù)邏輯單位的程序段。)步驟272所請(qǐng)求的更新邏輯單位將存儲(chǔ)在專用于記錄LGx的更新的第二區(qū)塊中。記錄次序根據(jù)第二次序,通常是請(qǐng)求更新的次序。本發(fā)明的一個(gè)特征允許將更新區(qū)塊初始設(shè)置成通用于以邏輯上循序或混亂次序記錄數(shù)據(jù)。因此根據(jù)第二次序,第二區(qū)塊可為循序的區(qū)塊或混亂的區(qū)塊。
步驟274當(dāng)過(guò)程循環(huán)返回到步驟270時(shí),第二區(qū)塊繼續(xù)記錄所請(qǐng)求的邏輯單位。在關(guān)閉的預(yù)定條件實(shí)現(xiàn)時(shí),將關(guān)閉第二區(qū)塊以不接收進(jìn)一步的更新。在此情況下,過(guò)程繼續(xù)進(jìn)行到步驟276。
步驟276確定已關(guān)閉的第二區(qū)塊是否以與原始區(qū)塊類似的次序記錄其更新邏輯單位。當(dāng)兩個(gè)區(qū)塊記錄邏輯單位僅相差一頁(yè)標(biāo)記時(shí),即認(rèn)為兩個(gè)區(qū)塊具有類似次序,如結(jié)合圖3A所描述。如果兩個(gè)區(qū)塊具有類似次序,那么過(guò)程繼續(xù)進(jìn)行到步驟280,否則,需要在步驟290中執(zhí)行稍許垃圾收集。
步驟280由于第二區(qū)塊具有與第一區(qū)塊相同的次序,所以其可用來(lái)取代原始的第一區(qū)塊。接著,更新過(guò)程結(jié)束于步驟299。
步驟290從第二區(qū)塊(更新區(qū)塊)和第一區(qū)塊(原始區(qū)塊)中搜集給定邏輯群組的每一邏輯單位的最新版本。接著以與第一區(qū)塊類似的次序?qū)⒔o定邏輯群組的已合并的邏輯單位寫入到第三區(qū)塊。
步驟292由于第三區(qū)塊(已合并的區(qū)塊)具有與第一區(qū)塊類似的次序,所以其可用來(lái)取代原始的第一區(qū)塊。接著,更新過(guò)程結(jié)束于步驟299。
步驟299當(dāng)停閉過(guò)程建立完整的更新區(qū)塊時(shí),其變成給定邏輯群組的新標(biāo)準(zhǔn)區(qū)塊。邏輯群組的更新線程將終止。
圖10是說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例,更新區(qū)塊管理器更新邏輯群組的數(shù)據(jù)的過(guò)程的流程圖。更新過(guò)程包含以下步驟步驟310對(duì)于給定邏輯群組(例如,LGx)的數(shù)據(jù),請(qǐng)求更新LGx內(nèi)的邏輯扇區(qū)。(扇區(qū)更新作為實(shí)例而給出。一般而言,更新將是LGx內(nèi)的一個(gè)或一個(gè)以上連續(xù)邏輯扇區(qū)的程序段。)步驟312如果專用于LGx的更新區(qū)塊尚未存在,那么繼續(xù)進(jìn)行到步驟410以啟始邏輯群組的新的更新線程。此將通過(guò)配置專用于記錄邏輯群組的更新數(shù)據(jù)的更新區(qū)塊而實(shí)現(xiàn)。如果已存在開啟的更新區(qū)塊,那么繼續(xù)進(jìn)行到步驟314以開始將更新扇區(qū)記錄到更新區(qū)塊上。
步驟314如果當(dāng)前更新區(qū)塊已混亂(即,非循序),那么直接繼續(xù)進(jìn)行到步驟510,以便將所請(qǐng)求的更新扇區(qū)記錄到混亂更新區(qū)塊上。如果當(dāng)前更新區(qū)塊為循序的,那么繼續(xù)進(jìn)行到步驟316以便處理循序的更新區(qū)塊。
步驟316本發(fā)明的一個(gè)特征允許于將更新區(qū)塊初始地設(shè)定成通用于以邏輯上循序或混亂次序記錄數(shù)據(jù)。然而,由于邏輯群組最終將其數(shù)據(jù)以邏輯上循序次序存儲(chǔ)在元區(qū)塊中,所以希望盡可能將更新區(qū)塊保持為循序的。接著,當(dāng)對(duì)進(jìn)一步的更新關(guān)閉更新區(qū)塊時(shí),將需要較少的處理,因?yàn)閷⒉恍枰M(jìn)行垃圾收集。
因此,確定所請(qǐng)求的更新是否將遵循更新區(qū)塊的當(dāng)前循序次序。如果更新循序進(jìn)行,那么繼續(xù)進(jìn)行到步驟510以執(zhí)行循序更新,且更新區(qū)塊將維持循序。另一方面,如果更新不循序進(jìn)行(混亂更新),那么其將在未采取其它行動(dòng)的情況下將循序更新區(qū)塊轉(zhuǎn)換成混亂更新區(qū)塊。
在一個(gè)實(shí)施例中,不會(huì)進(jìn)行更多的行動(dòng)來(lái)挽救此情況,且過(guò)程直接進(jìn)行到步驟370,其中允許更新將更新區(qū)塊變成混亂更新區(qū)塊。
任選的強(qiáng)制循序過(guò)程在另一實(shí)施例中,任選地執(zhí)行強(qiáng)制循序過(guò)程步驟320以顧及到待決的混亂更新而盡可能保存循序更新區(qū)塊。存在兩種情況,其兩者均需要復(fù)制原始區(qū)塊的遺失扇區(qū)以維持記錄在更新區(qū)塊上的邏輯扇區(qū)的循序次序。第一種情況是更新建立短的地址跳躍。第二種情況是提早結(jié)束更新區(qū)塊以將其保持為循序。強(qiáng)制循序過(guò)程步驟320包含以下子步驟步驟330如果更新建立的邏輯地址跳躍不大于預(yù)定的量CB,那么過(guò)程繼續(xù)進(jìn)行到步驟350的強(qiáng)制循序更新過(guò)程,否則過(guò)程繼續(xù)進(jìn)行到步驟340以考慮其是否適合進(jìn)行強(qiáng)制循序停閉。
步驟340如果未填充的物理扇區(qū)數(shù)目超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CC(其典型值為更新區(qū)塊尺寸的一半),那么更新區(qū)塊相對(duì)地未被使用且將不提早關(guān)閉。過(guò)程繼續(xù)進(jìn)行到步驟370,且更新區(qū)塊將變得混亂。另一方面,如果實(shí)質(zhì)上填充了更新區(qū)塊,那么認(rèn)為其已被充分利用且因此進(jìn)入步驟360以進(jìn)行強(qiáng)制循序停閉。
步驟350只要地址跳躍不超過(guò)預(yù)定的量CB,強(qiáng)制循序更新允許當(dāng)前循序更新區(qū)塊維持循序。實(shí)質(zhì)上,復(fù)制更新區(qū)塊的關(guān)聯(lián)的原始區(qū)塊的扇區(qū)以填充地址跳躍跨越的間隙。因此,在繼續(xù)進(jìn)行到步驟510之前,將用介入的地址中的數(shù)據(jù)填補(bǔ)循序更新區(qū)塊以便循序記錄當(dāng)前的更新。
步驟360如果當(dāng)前循序更新區(qū)塊實(shí)質(zhì)上已被填充而不是由待決的混亂更新轉(zhuǎn)換為混亂更新區(qū)塊,那么強(qiáng)制循序停閉允許當(dāng)前循序的更新區(qū)塊結(jié)束。將混亂或非循序更新定義為具有未被上述地址跳躍例外涵蓋的前向地址轉(zhuǎn)換、后向地址轉(zhuǎn)換或地址重復(fù)的更新。為了防止循序更新區(qū)塊被混亂更新轉(zhuǎn)換,通過(guò)復(fù)制更新區(qū)塊的關(guān)聯(lián)的原始部分過(guò)時(shí)區(qū)塊的扇區(qū)來(lái)填充更新區(qū)塊的未寫入的扇區(qū)位置。接著原始區(qū)塊完全過(guò)時(shí)且被擦除。現(xiàn)在,當(dāng)前更新區(qū)塊具有完整組的邏輯扇區(qū),且接著結(jié)束而作為取代原始元區(qū)塊的完整的元區(qū)塊。接著,過(guò)程繼續(xù)進(jìn)行到步驟430以在其位置中配置新的更新區(qū)塊,從而接受在步驟310中首先請(qǐng)求的待決的扇區(qū)更新的記錄。
轉(zhuǎn)換成混亂更新區(qū)塊步驟370當(dāng)待決的更新不以循序次序且為任選的時(shí),如果無(wú)法滿足強(qiáng)制循序條件,那么在過(guò)程繼續(xù)進(jìn)行到步驟510時(shí),通過(guò)允許在更新區(qū)塊上記錄具有非循序地址的待決更新扇區(qū)允許將循序更新區(qū)塊轉(zhuǎn)換為混亂更新區(qū)塊。如果存在最大數(shù)目的混亂更新區(qū)塊,那么在允許轉(zhuǎn)換繼續(xù)進(jìn)行之前,必須關(guān)閉最久未存取的混亂更新區(qū)塊;因此防止超過(guò)混亂區(qū)塊的最大數(shù)目。最久未存取的混亂更新區(qū)塊的識(shí)別與步驟420中所描述的一般情況相同,但僅限于混亂更新區(qū)塊。此時(shí)可通過(guò)如步驟550中所描述的合并來(lái)實(shí)現(xiàn)關(guān)閉混亂更新區(qū)塊。
配置受到系統(tǒng)限制的新的更新區(qū)塊步驟410將擦除元區(qū)塊配置為更新區(qū)塊的過(guò)程始于確定是否超過(guò)預(yù)定的系統(tǒng)限制。由于資源有限,存儲(chǔ)器管理系統(tǒng)通常允許同時(shí)存在更新區(qū)塊的預(yù)定最大數(shù)目CA。此限制為循序更新區(qū)塊和混亂更新區(qū)塊的總數(shù),且為設(shè)計(jì)參數(shù)。在優(yōu)選實(shí)施例中,此限制為(例如)最大8個(gè)更新區(qū)塊。并且,由于對(duì)系統(tǒng)資源的較高需求,對(duì)可同時(shí)開啟的混亂更新區(qū)塊的最大數(shù)目也可能存在相應(yīng)的預(yù)定限制(例如,4)。
因此,在已配置CA個(gè)更新區(qū)塊時(shí),接著只有在關(guān)閉現(xiàn)有的已配置的請(qǐng)求中的一者之后才可滿足下一配置請(qǐng)求。過(guò)程繼續(xù)進(jìn)行到步驟420。當(dāng)開啟的更新區(qū)塊的數(shù)目小于CA時(shí),過(guò)程直接進(jìn)行到步驟430。
步驟420在超過(guò)更新區(qū)塊的最大數(shù)目CA的事件中,關(guān)閉最久未存取的更新區(qū)塊并執(zhí)行垃圾收集。將最久未存取的更新區(qū)塊識(shí)別為與最久未存取的邏輯區(qū)塊關(guān)聯(lián)的更新區(qū)塊。為了確定最久未存取的區(qū)塊,存取包括邏輯扇區(qū)的寫入和選擇性讀取。以存取的次序維持開啟的更新區(qū)塊的列表;初始化時(shí),不假設(shè)存取次序。在更新區(qū)塊為循序時(shí),更新區(qū)塊的關(guān)閉遵循結(jié)合步驟360和步驟530而描述的類似過(guò)程,且在更新區(qū)塊為混亂時(shí),遵循結(jié)合步驟540而描述的類似過(guò)程。此關(guān)閉可為在步驟430中配置新的更新區(qū)塊創(chuàng)造空間。
步驟430通過(guò)配置新的元區(qū)塊作為專用于給定邏輯群組LGX的更新區(qū)塊來(lái)滿足配置請(qǐng)求。接著,過(guò)程繼續(xù)進(jìn)行到步驟510。
將更新數(shù)據(jù)記錄到更新區(qū)塊上步驟510將所請(qǐng)求的更新扇區(qū)記錄到更新區(qū)塊的下一可用物理位置上。接著,過(guò)程繼續(xù)進(jìn)行到步驟520以確定更新區(qū)塊是否準(zhǔn)備就緒即可停閉。
更新區(qū)塊停閉步驟520如果更新區(qū)塊仍具有接受附加更新的空間,那么繼續(xù)進(jìn)行到步驟570。否則繼續(xù)進(jìn)行到步驟522以停閉更新區(qū)塊。在當(dāng)前所請(qǐng)求的寫入嘗試寫入多于區(qū)塊的空間能夠容納的邏輯扇區(qū)時(shí),存在填充更新區(qū)塊的兩個(gè)可能的實(shí)施方案。在第一實(shí)施方案中,將寫入請(qǐng)求分成兩個(gè)部分,第一部分寫入直到區(qū)塊的最后物理扇區(qū)。接著關(guān)閉區(qū)塊且寫入的第二部分將視為下一請(qǐng)求的寫入。在另一實(shí)施方案中,抑制所請(qǐng)求的寫入,同時(shí)區(qū)塊填補(bǔ)它的其余扇區(qū)并接著關(guān)閉。所請(qǐng)求的寫入將視為下一請(qǐng)求的寫入。
步驟522如果更新區(qū)塊為循序的,那么繼續(xù)進(jìn)行到步驟530以進(jìn)行循序關(guān)閉。如果更新區(qū)塊為混亂的,那么繼續(xù)進(jìn)行到步驟540以進(jìn)行混亂關(guān)閉。
循序更新區(qū)塊停閉步驟530由于更新區(qū)塊為循序的且已完全填充,所以存儲(chǔ)在其中的邏輯群組為完整的。元區(qū)塊為完整的并取代原始的元區(qū)塊。此時(shí),原始區(qū)塊完全過(guò)時(shí)且可被擦除。接著,過(guò)程繼續(xù)進(jìn)行到步驟570,其中給定邏輯群組的更新線程結(jié)束。
混亂更新區(qū)塊停閉步驟540由于更新區(qū)塊被非循序填充且可能含有一些邏輯扇區(qū)的多個(gè)更新,所以執(zhí)行垃圾收集以挽救其中的有效數(shù)據(jù)?;靵y更新區(qū)塊將為已壓縮或已合并。在步驟542中將確定執(zhí)行哪一過(guò)程。
步驟542為了執(zhí)行壓縮或合并將視更新區(qū)塊的退化而定。如果邏輯扇區(qū)已更新多次,那么其邏輯地址高度退化。將有相同邏輯扇區(qū)的多個(gè)版本記錄在更新區(qū)塊上,且只有最后記錄的版本為邏輯扇區(qū)的有效版本。在含有多個(gè)版本的邏輯扇區(qū)的更新區(qū)塊中,截然不同的邏輯扇區(qū)的數(shù)目將大大少于邏輯群組的數(shù)目。
在優(yōu)選實(shí)施例中,當(dāng)更新區(qū)塊中截然不同的邏輯扇區(qū)的數(shù)目超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CD(其典型值為邏輯群組尺寸的一半)時(shí),停閉過(guò)程將在步驟550中執(zhí)行合并,否則過(guò)程將繼續(xù)進(jìn)行到步驟560進(jìn)行壓縮。
步驟550如果將要合并混亂更新區(qū)塊,那么將以含有已合并數(shù)據(jù)的新的標(biāo)準(zhǔn)元區(qū)塊取代原始區(qū)塊和更新區(qū)塊。合并之后,更新線程將結(jié)束于步驟570。
步驟560如果將要壓縮混亂更新區(qū)塊,那么其將由載有已壓縮數(shù)據(jù)的新的更新區(qū)塊取代。壓縮之后,已壓縮的更新區(qū)塊的處理將結(jié)束于步驟570。或者,可將壓縮延遲直到再次對(duì)更新區(qū)塊進(jìn)行寫入為止,因此排除壓縮之后進(jìn)行沒(méi)有介入的更新的合并的可能性。接著,當(dāng)步驟502中出現(xiàn)在LGX中進(jìn)行更新的下一請(qǐng)求時(shí),將在給定邏輯區(qū)塊的進(jìn)一步更新中使用新的更新區(qū)塊。
步驟570當(dāng)停閉過(guò)程建立完整的更新區(qū)塊時(shí),所述區(qū)塊變成給定邏輯群組的新標(biāo)準(zhǔn)區(qū)塊。邏輯群組的更新線程將終止。在停閉過(guò)程建立取代現(xiàn)有更新區(qū)塊的新的更新區(qū)塊時(shí),將使用新的更新區(qū)塊來(lái)記錄為給定邏輯群組請(qǐng)求的下一更新。在更新區(qū)塊未結(jié)束時(shí),過(guò)程將在步驟310中出現(xiàn)在LGX中進(jìn)行更新的下一請(qǐng)求時(shí)繼續(xù)。
從上述過(guò)程可知,在關(guān)閉混亂更新區(qū)塊時(shí),進(jìn)一步處理記錄在其上的更新數(shù)據(jù)。明確地說(shuō),通過(guò)壓縮到另一個(gè)混亂區(qū)塊的過(guò)程,或通過(guò)和其關(guān)聯(lián)的原始區(qū)塊一起合并以形成新的標(biāo)準(zhǔn)循序區(qū)塊的過(guò)程,對(duì)其有效數(shù)據(jù)進(jìn)行垃圾收集。
圖11A為更詳細(xì)地說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的合并過(guò)程的流程圖。混亂更新區(qū)塊合并是在更新區(qū)塊正結(jié)束時(shí)(例如,當(dāng)更新區(qū)塊已填滿其寫入的最后物理扇區(qū)位置時(shí))執(zhí)行的兩個(gè)可能過(guò)程的一者。當(dāng)區(qū)塊中寫入的截然不同的邏輯扇區(qū)數(shù)目超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CD時(shí),選擇進(jìn)行合并。圖10所示的合并過(guò)程步驟550包含以下子步驟步驟551在混亂更新區(qū)塊正關(guān)閉時(shí),將配置取代其的新的元區(qū)塊。
步驟552在混亂更新區(qū)塊及其關(guān)聯(lián)的原始區(qū)塊中搜集每一邏輯扇區(qū)的最新版本并忽略所有的過(guò)時(shí)扇區(qū)。
步驟554將所搜集的有效扇區(qū)以邏輯上循序次序記錄在新的元區(qū)塊上以形成完整的區(qū)塊,即,以循序次序記錄的邏輯群組的所有邏輯扇區(qū)的區(qū)塊。
步驟556以新的完整區(qū)塊取代原始區(qū)塊。
步驟558擦除已結(jié)束的更新區(qū)塊和原始區(qū)塊。
圖11B為更詳細(xì)地說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的壓縮過(guò)程的流程圖。當(dāng)區(qū)塊中寫入的截然不同的邏輯扇區(qū)數(shù)目低于預(yù)定的設(shè)計(jì)參數(shù)CD時(shí),選擇進(jìn)行壓縮。圖10所示的壓縮過(guò)程步驟560包含以下子步驟步驟561在混亂更新區(qū)塊正被壓縮時(shí),將配置取代其的新的元區(qū)塊。
步驟562在將要壓縮的現(xiàn)有混亂更新區(qū)塊中搜集每一邏輯扇區(qū)的最新版本。
步驟564將所搜集的扇區(qū)記錄在新的更新區(qū)塊上以形成具有已壓縮扇區(qū)的新的更新區(qū)塊。
步驟566以具有已壓縮扇區(qū)的新的更新區(qū)塊取代現(xiàn)有的更新區(qū)塊。
步驟568擦除停閉的更新區(qū)塊。
邏輯和元區(qū)塊狀態(tài)圖12A說(shuō)明邏輯群組的所有可能狀態(tài),和其之間在各種操作下可能的轉(zhuǎn)換。
圖12B是羅列邏輯群組的可能狀態(tài)的表。邏輯群組狀態(tài)定義如下1.完整可能已使用頁(yè)標(biāo)記環(huán)繞方式以邏輯上循序次序?qū)⑦壿嬋航M中的所有邏輯扇區(qū)寫入在單一元區(qū)塊中。
2.未寫入邏輯群組中未曾寫入邏輯扇區(qū)。邏輯群組在群組地址表中標(biāo)示為未寫入且不具有已配置的元區(qū)塊。響應(yīng)于對(duì)此群組內(nèi)每一扇區(qū)的主機(jī)讀取而返回預(yù)定的數(shù)據(jù)樣式。
3.循序更新可能已使用頁(yè)標(biāo)記以邏輯上循序次序?qū)⑦壿嬋航M內(nèi)的一些扇區(qū)寫入元區(qū)塊中,因此其取代了來(lái)自所述群組的任何先前完整狀態(tài)的對(duì)應(yīng)邏輯扇區(qū)。
4.混亂更新可能已使用頁(yè)標(biāo)記以邏輯上非循序次序?qū)⑦壿嬋航M內(nèi)的一些扇區(qū)寫入在元區(qū)塊中,因此其取代了來(lái)自所述群組的任何先前完整狀態(tài)的對(duì)應(yīng)邏輯扇區(qū)。群組內(nèi)的扇區(qū)可被寫入一次以上,最新版本取代所有先前版本。
圖13A說(shuō)明元區(qū)塊的所有可能狀態(tài),和在各種操作下其間的可能的轉(zhuǎn)換。
圖13B是羅列元區(qū)塊的可能狀態(tài)的表。元區(qū)塊狀態(tài)定義如下1.已擦除元區(qū)塊中的所有扇區(qū)已被擦除。
2.循序更新可能已使用頁(yè)標(biāo)記部分地寫入元區(qū)塊,其扇區(qū)為邏輯上循序次序。所有扇區(qū)均屬于相同的邏輯群組。
3.混亂更新已部分或完全寫入了元區(qū)塊,其扇區(qū)為邏輯上非循序次序。任何扇區(qū)均可被寫入一次以上。所有扇區(qū)均屬于相同的邏輯群組。
4.完整可能已使用頁(yè)標(biāo)記以邏輯上循序次序完全寫入了元區(qū)塊。
5.原始元區(qū)塊先前為完整的但至少一個(gè)扇區(qū)已因主機(jī)數(shù)據(jù)更新而過(guò)時(shí)。
圖14(A)到圖14(J)是展示對(duì)邏輯群組的狀態(tài)以及物理元區(qū)塊的各種操作的效果的狀態(tài)圖。
圖14(A)展示對(duì)應(yīng)于第一寫入操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。主機(jī)以邏輯上循序次序?qū)⑾惹拔磳懭氲倪壿嬋航M的一個(gè)或一個(gè)以上扇區(qū)寫入到新配置的已擦除元區(qū)塊。邏輯群組和元區(qū)塊進(jìn)入循序更新狀態(tài)。
圖14(B)展示對(duì)應(yīng)于第一完整操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。先前未寫入的循序更新邏輯群組因主機(jī)循序?qū)懭胨猩葏^(qū)而變成完整的。如果卡通過(guò)以預(yù)定的數(shù)據(jù)樣式填充其余未寫入的扇區(qū)來(lái)填滿群組,那么也可發(fā)生轉(zhuǎn)換。元區(qū)塊變得完整。
圖14(C)展示對(duì)應(yīng)于第一混亂操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。先前未寫入的循序更新邏輯群組在主機(jī)已非循序地寫入至少一個(gè)扇區(qū)時(shí)變得混亂。
圖14(D)展示對(duì)應(yīng)于第一壓縮操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊區(qū)塊將先前未寫入的混亂更新邏輯群組內(nèi)的所有有效扇區(qū)復(fù)制到新的混亂元區(qū)塊,接著將其擦除。
圖14(E)展示對(duì)應(yīng)于第一合并操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊的混亂區(qū)塊移動(dòng)先前未寫入的混亂更新邏輯群組內(nèi)的所有有效扇區(qū),以便以邏輯上循序次序填充新配置的已擦除區(qū)塊。以預(yù)定的數(shù)據(jù)樣式填充主機(jī)未寫入的扇區(qū)。接著擦除舊的混亂區(qū)塊。
圖14(F)展示對(duì)應(yīng)于循序?qū)懭氩僮鞯倪壿嬋航M和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。主機(jī)以邏輯上循序次序?qū)⑼暾壿嬋航M的一個(gè)或一個(gè)以上扇區(qū)寫入到新配置的已擦除元區(qū)塊。邏輯群組和元區(qū)塊進(jìn)入循序更新狀態(tài)。先前完整的元區(qū)塊變成原始元區(qū)塊。
圖14(G)展示對(duì)應(yīng)于循序填充操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。循序更新邏輯群組在主機(jī)循序?qū)懭肫渌猩葏^(qū)時(shí)變得完整。此也可發(fā)生在用來(lái)自原始區(qū)塊的有效扇區(qū)填充循序更新邏輯群組以使其完整的垃圾收集期間,在此之后擦除原始區(qū)塊。
圖14(H)展示對(duì)應(yīng)于非循序?qū)懭氩僮鞯倪壿嬋航M和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。循序更新邏輯群組在主機(jī)非循序地寫入至少一個(gè)扇區(qū)時(shí)變得混亂。非循序扇區(qū)寫入可促使更新區(qū)塊或相應(yīng)的原始區(qū)塊中的有效扇區(qū)變得過(guò)時(shí)。
圖14(I)展示對(duì)應(yīng)于壓縮操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊區(qū)塊將混亂更新邏輯群組內(nèi)的所有有效扇區(qū)復(fù)制到新的混亂元區(qū)塊,接著將其擦除。原始區(qū)塊不受影響。
圖14(J)展示對(duì)應(yīng)于合并操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊的混亂區(qū)塊復(fù)制混亂更新邏輯群組內(nèi)的所有有效扇區(qū),以便以邏輯上循序次序填充新配置的已擦除區(qū)塊。接著擦除舊的混亂區(qū)塊和原始區(qū)塊。
更新區(qū)塊追蹤和管理圖15說(shuō)明用于追蹤已開啟和已關(guān)閉的更新區(qū)塊及已擦除區(qū)塊以進(jìn)行配置的配置區(qū)塊列表(ABL)的結(jié)構(gòu)的優(yōu)選實(shí)施例。配置區(qū)塊列表(ABL)610保存在控制器RAM 130中以允許管理已擦除區(qū)塊、已配置的更新區(qū)塊、關(guān)聯(lián)的區(qū)塊和控制結(jié)構(gòu)的配置,并使得能夠進(jìn)行正確的邏輯到物理地址轉(zhuǎn)換。在優(yōu)選實(shí)施例中,ABL包括已擦除區(qū)塊的列表、開啟的更新區(qū)塊列表614、和關(guān)閉的更新區(qū)塊列表616。
開啟的更新區(qū)塊列表614是ABL中具有開啟更新區(qū)塊的屬性的區(qū)塊條目組。開啟的更新區(qū)塊列表具有當(dāng)前開啟的每一數(shù)據(jù)更新區(qū)塊的一個(gè)條目。每一條目保存以下信息。LG是當(dāng)前更新元區(qū)塊專用的邏輯群組地址。循序/混亂是表示用循序或混亂更新數(shù)據(jù)填充更新區(qū)塊的狀態(tài)。MB是更新區(qū)塊的元區(qū)塊地址。頁(yè)標(biāo)記是記錄在更新區(qū)塊的第一物理位置處的起始邏輯扇區(qū)。寫入的扇區(qū)號(hào)碼表示當(dāng)前寫入到更新區(qū)塊上的扇區(qū)號(hào)碼。MB0是關(guān)聯(lián)的原始區(qū)塊的元區(qū)塊地址。Page Tag0是關(guān)聯(lián)的原始區(qū)塊的頁(yè)標(biāo)記。
關(guān)閉的更新區(qū)塊列表616是配置區(qū)塊列表(ABL)的子集。其為ABL中具有關(guān)閉的更新區(qū)塊的屬性的區(qū)塊條目組。關(guān)閉的更新區(qū)塊列表具有已關(guān)閉的每一數(shù)據(jù)更新區(qū)塊的一個(gè)條目,但其條目在邏輯到主物理目錄中尚未更新。每一條目保存以下信息。LG是當(dāng)前更新區(qū)塊專用的邏輯群組地址。MB是更新區(qū)塊的元區(qū)塊地址。頁(yè)標(biāo)記是記錄在更新區(qū)塊的第一物理位置處的起始邏輯扇區(qū)。MB0是關(guān)聯(lián)的原始區(qū)塊的元區(qū)塊地址。
混亂區(qū)塊索引循序更新區(qū)塊具有以邏輯上循序次序存儲(chǔ)的數(shù)據(jù),因此可容易地定位區(qū)塊中的任何邏輯扇區(qū)?;靵y更新區(qū)塊具有其以紊亂的次序存儲(chǔ)的邏輯扇區(qū)且也可存儲(chǔ)邏輯扇區(qū)的多個(gè)更新世代。必須維持附加信息以追蹤每一有效邏輯扇區(qū)定位在混亂更新區(qū)塊中的位置。
在優(yōu)選實(shí)施例中,混亂區(qū)塊索引數(shù)據(jù)結(jié)構(gòu)允許追蹤并快速存取混亂區(qū)塊中的所有有效扇區(qū)?;靵y區(qū)塊索引獨(dú)立地管理小區(qū)域的邏輯地址空間,并有效地處理系統(tǒng)數(shù)據(jù)和用戶數(shù)據(jù)的熱區(qū)(hot region)。索引數(shù)據(jù)結(jié)構(gòu)實(shí)質(zhì)上允許在快閃存儲(chǔ)器中維持具有不常更新需求的索引信息,從而性能不會(huì)明顯受到影響。另一方面,將混亂區(qū)塊中最近寫入扇區(qū)的列表保存在控制器RAM中的混亂扇區(qū)列表中。并且,將來(lái)自快閃存儲(chǔ)器的索引信息的高速緩沖存儲(chǔ)器保存在控制器RAM中,以便減少用于地址轉(zhuǎn)換的快閃扇區(qū)存取的數(shù)目。每一混亂區(qū)塊的索引存儲(chǔ)在快閃存儲(chǔ)器中的混亂區(qū)塊索引(CBI)扇區(qū)中。
圖16A說(shuō)明混亂區(qū)塊索引(CBI)扇區(qū)的數(shù)據(jù)字段?;靵y區(qū)塊索引扇區(qū)(CBI扇區(qū))在邏輯群組中含有每一扇區(qū)的映射到混亂更新區(qū)塊的索引,從而界定邏輯群組的每一扇區(qū)在混亂更新區(qū)塊或其關(guān)聯(lián)的原始區(qū)塊內(nèi)的位置。CBI扇區(qū)包括用于追蹤混亂區(qū)塊內(nèi)有效扇區(qū)的混亂區(qū)塊索引字段、用于追蹤混亂區(qū)塊的地址參數(shù)的混亂區(qū)塊信息字段、和用于追蹤存儲(chǔ)CBI扇區(qū)的元區(qū)塊(CBI區(qū)塊)內(nèi)的有效CBI扇區(qū)的扇區(qū)索引字段。
圖16B說(shuō)明記錄在專用元區(qū)塊中的混亂區(qū)塊索引(CBI)扇區(qū)的實(shí)例。專用的元區(qū)塊將稱為CBI區(qū)塊620。在更新CBI扇區(qū)時(shí),將其寫入在CBI區(qū)塊620中下一可用的物理扇區(qū)位置。因此,CBI扇區(qū)的多個(gè)副本可存在于CBI區(qū)塊中,其中只有最后寫入的副本為有效的。例如,已用作為有效版本的最新版本將邏輯群組LG1的CBI扇區(qū)更新三次。區(qū)塊中最后寫入的CBI扇區(qū)中的一組索引識(shí)別CBI區(qū)塊中每一有效扇區(qū)的位置。在此實(shí)例中,區(qū)塊中最后寫入的CBI扇區(qū)是LG136的CBI扇區(qū),且其索引組是取代所有先前索引組的有效索引組。當(dāng)CBI區(qū)塊最終變成用CBI扇區(qū)完全填充時(shí),通過(guò)將所有有效扇區(qū)重寫到新的區(qū)塊位置,在控制寫入操作期間壓縮區(qū)塊。接著擦除整個(gè)區(qū)塊。
CBI扇區(qū)內(nèi)的混亂區(qū)塊索引字段含有邏輯群組或自群組內(nèi)的每一邏輯扇區(qū)的映射到混亂更新區(qū)塊的索引條目。每一索引條目表示相應(yīng)的邏輯扇區(qū)的有效數(shù)據(jù)所在的混亂更新區(qū)塊內(nèi)的偏移。保留的索引值表示混亂更新區(qū)塊中不存在邏輯扇區(qū)的有效數(shù)據(jù),且關(guān)聯(lián)的原始區(qū)塊中的相應(yīng)扇區(qū)為有效的。一些混亂區(qū)塊索引字段條目的高速緩沖存儲(chǔ)器保存在控制器RAM中。
CBI扇區(qū)內(nèi)的混亂區(qū)塊信息字段含有存在于系統(tǒng)中的每一混亂更新區(qū)塊的一個(gè)條目,從而記錄區(qū)塊的地址參數(shù)信息。此字段中的信息只在CBI區(qū)塊中的最后寫入的扇區(qū)中有效。此信息也出現(xiàn)在RAM中的數(shù)據(jù)結(jié)構(gòu)中。
每一混亂更新區(qū)塊的條目包括三個(gè)地址參數(shù)。第一地址參數(shù)是與混亂更新區(qū)塊關(guān)聯(lián)的邏輯群組(或邏輯群組號(hào)碼)的邏輯地址。第二地址參數(shù)是混亂更新區(qū)塊的元區(qū)塊地址。第三地址參數(shù)是寫入在混亂更新區(qū)塊中的最后的扇區(qū)的物理地址偏移。偏移信息設(shè)定初始化期間混亂更新區(qū)塊的掃描起點(diǎn)以在RAM中重建數(shù)據(jù)結(jié)構(gòu)。
扇區(qū)索引字段含有CBI區(qū)塊中的每一有效CBI扇區(qū)的條目。其界定CBI區(qū)塊內(nèi)有關(guān)每一許可的混亂更新區(qū)塊的最近寫入的CBI扇區(qū)所在的偏移。索引中偏移的保留值表示許可的混亂更新區(qū)塊并不存在。
圖16C為說(shuō)明存取正在進(jìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。在更新過(guò)程期間,將更新數(shù)據(jù)記錄在混亂更新區(qū)塊中,同時(shí)未改變的數(shù)據(jù)保留在與邏輯群組關(guān)聯(lián)的原始元區(qū)塊中。在混亂更新下存取邏輯群組的邏輯扇區(qū)的過(guò)程如下步驟650開始定位給定邏輯群組的給定邏輯扇區(qū)。
步驟652在CBI區(qū)塊中定位最后寫入的CBI扇區(qū)。
步驟654通過(guò)查找最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段來(lái)定位與給定邏輯群組關(guān)聯(lián)的混亂更新區(qū)塊或原始區(qū)塊。此步驟可在步驟662之前的任何時(shí)間執(zhí)行。
步驟658如果最后寫入的CBI扇區(qū)指向給定的邏輯群組,那么定位CBI扇區(qū)。繼續(xù)進(jìn)行到步驟662。否則,繼續(xù)進(jìn)行到步驟660。
步驟660通過(guò)查找最后寫入的CBI扇區(qū)的扇區(qū)索引字段來(lái)定位給定邏輯群組的CBI扇區(qū)。
步驟662通過(guò)查找已定位的CBI扇區(qū)的混亂區(qū)塊索引字段來(lái)定位混亂區(qū)塊或原始區(qū)塊中的給定邏輯扇區(qū)。
圖16D是說(shuō)明根據(jù)已將邏輯群組分割成子群組的替代實(shí)施例,存取正進(jìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。CBI扇區(qū)的有限容量?jī)H可追蹤預(yù)定最大數(shù)目的邏輯扇區(qū)。當(dāng)邏輯群組具有多于單一CBI扇區(qū)可處理的邏輯扇區(qū)時(shí),將邏輯群組分割成多個(gè)子群組,向每一子群組分配CBI扇區(qū)。在一個(gè)實(shí)例中,每一CBI扇區(qū)的容量足以追蹤由256個(gè)扇區(qū)組成的邏輯群組和多達(dá)8個(gè)混亂更新區(qū)塊。如果邏輯群組的尺寸超過(guò)256個(gè)扇區(qū),那么存在用于邏輯群組內(nèi)每一256扇區(qū)子群組的分離的CBI扇區(qū)。CBI扇區(qū)可存在而用于邏輯群組內(nèi)多達(dá)8個(gè)子群組,從而支持尺寸為多達(dá)2048個(gè)扇區(qū)的邏輯群組。
在優(yōu)選實(shí)施例中,使用間接索引方案來(lái)促進(jìn)索引的管理。扇區(qū)索引的每一條目具有直接和間接字段。
直接扇區(qū)索引可界定CBI區(qū)塊內(nèi)關(guān)于特定混亂更新區(qū)塊的所有可能CBI扇區(qū)所在的偏移。此字段中的信息僅在關(guān)于所述特定混亂更新區(qū)塊的最后寫入的CBI扇區(qū)中有效。索引中偏移的保留值表示CBI扇區(qū)并不存在,因?yàn)殛P(guān)于混亂更新區(qū)塊的相應(yīng)的邏輯子群組也不存在,或由于配置了更新區(qū)塊而尚未更新。
間接扇區(qū)索引界定CBI區(qū)塊內(nèi)的關(guān)于每一許可的混亂更新區(qū)塊的最近寫入的CBI扇區(qū)所在的偏移。索引中偏移的保留值表示許可的混亂更新區(qū)塊并不存在。
圖16D展示在混亂更新下存取邏輯群組的邏輯扇區(qū)的過(guò)程,如下步驟670將每一邏輯群組分割成多個(gè)子群組并向每一子群組分配CBI扇區(qū)。
步驟680開始定位給定邏輯群組的給定子群組的給定邏輯扇區(qū)。
步驟682在CBI區(qū)塊中定位最后寫入的CBI扇區(qū)。
步驟684通過(guò)查找最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段來(lái)定位與給定子群組關(guān)聯(lián)的混亂更新區(qū)塊或原始區(qū)塊。此步驟可在步驟696之前的任何時(shí)間執(zhí)行。
步驟686如果最后寫入的CBI扇區(qū)指向給定的邏輯群組,那么繼續(xù)進(jìn)行到步驟691。否則,繼續(xù)進(jìn)行到步驟690。
步驟690通過(guò)查找最后寫入的CBI扇區(qū)的間接扇區(qū)索引字段來(lái)定位給定邏輯群組的多個(gè)CBI扇區(qū)中最后寫入的CBI扇區(qū)。
步驟691已定位與給定邏輯群組的子群組的一者關(guān)聯(lián)的至少一CBI扇區(qū)。繼續(xù)。
步驟692如果所定位的CBI扇區(qū)指向給定子群組,那么定位給定子群組的CBI扇區(qū)。繼續(xù)進(jìn)行到步驟696。否則,繼續(xù)進(jìn)行到步驟694。
步驟694通過(guò)查找當(dāng)前定位的CBI扇區(qū)的直接扇區(qū)索引字段來(lái)定位給定子群組的CBI扇區(qū)。
步驟696通過(guò)查找給定子群組的CBI扇區(qū)的混亂區(qū)塊索引字段來(lái)定位混亂區(qū)塊或原始區(qū)塊中的給定邏輯扇區(qū)。
圖16E說(shuō)明對(duì)于將每一邏輯群組分割成多個(gè)子群組的實(shí)施例,混亂區(qū)塊索引(CBI)扇區(qū)及其功能的實(shí)例。邏輯群組700最初將其完整的數(shù)據(jù)存儲(chǔ)在原始元區(qū)塊702中。接著,邏輯群組配合配置專用的混亂更新區(qū)塊704進(jìn)行更新。在本實(shí)例中,將邏輯群組700分割成子群組,這些子群組A、B、C、D每一者具有256個(gè)扇區(qū)。
為了在子群組B中定位第i個(gè)扇區(qū),首先定位CBI區(qū)塊620中最后寫入的CBI扇區(qū)。最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段提供定位給定邏輯群組的混亂更新區(qū)塊704的地址。同時(shí),其提供寫入在混亂區(qū)塊中的最后扇區(qū)的位置。此信息用于掃描和重建索引的事件中。
如果最后寫入的CBI扇區(qū)結(jié)果是給定邏輯群組的四個(gè)CBI扇區(qū)的一者,那么將進(jìn)一步確定其是否正是含有第i個(gè)邏輯扇區(qū)的給定子群組B的CBI扇區(qū)。如果是,那么CBI扇區(qū)的混亂區(qū)塊索引將指向用于存儲(chǔ)第i個(gè)邏輯扇區(qū)的數(shù)據(jù)的元區(qū)塊位置。扇區(qū)位置可能在混亂更新區(qū)塊704中或在原始區(qū)塊702中。
如果最后寫入的CBI扇區(qū)結(jié)果是給定邏輯群組的四個(gè)CBI扇區(qū)的一者但不恰好屬于子群組B,那么查找其直接扇區(qū)索引以定位子群組B的CBI扇區(qū)。一旦定位了此確切的CBI扇區(qū),查找混亂區(qū)塊索引以在混亂更新區(qū)塊704和原始區(qū)塊702中定位第i個(gè)邏輯扇區(qū)。
如果最后寫入的CBI扇區(qū)結(jié)果不是給定邏輯群組的四個(gè)CBI扇區(qū)的任一者,那么查找其間接扇區(qū)索引以定位四個(gè)CBI扇區(qū)中的一者。在圖16E所示的實(shí)例中,定位了子群組C的CBI扇區(qū)。接著,查找子群組C的此CBI扇區(qū)的直接扇區(qū)索引以定位子群組B的確切的CBI扇區(qū)。此實(shí)例展示在查找混亂區(qū)塊索引時(shí),發(fā)現(xiàn)第i個(gè)邏輯扇區(qū)未改變,且將在原始區(qū)塊中定位其有效數(shù)據(jù)。
在給定邏輯群組的子群組C中定位第j個(gè)邏輯扇區(qū)時(shí)進(jìn)行類似的考慮。此實(shí)例展示最后寫入的CBI扇區(qū)結(jié)果不是給定邏輯群組的四個(gè)CBI扇區(qū)的任何一者。其間接扇區(qū)索引指向給定群組的四個(gè)CBI扇區(qū)的一者。所指向的四個(gè)中的最后寫入結(jié)果也正是子群組C的CBI扇區(qū)。在查找其混亂區(qū)塊索引時(shí),發(fā)現(xiàn)第j個(gè)邏輯扇區(qū)定位在混亂更新區(qū)塊704中的指定位置。
控制器RAM中存在系統(tǒng)中每一混亂更新區(qū)塊的混亂扇區(qū)列表。每一列表均含有自從相關(guān)CBI扇區(qū)在快閃存儲(chǔ)器中最后被更新之后,寫入在混亂更新區(qū)塊中的扇區(qū)的記錄。特定混亂更新區(qū)塊的邏輯扇區(qū)地址(其可保存在混亂扇區(qū)列表中)的數(shù)目是典型值為8到16的設(shè)計(jì)參數(shù)。將列表的最佳尺寸確定為其對(duì)混亂數(shù)據(jù)寫入操作的額外開銷的作用與初始化期間的扇區(qū)掃描時(shí)間之間的權(quán)衡。
在系統(tǒng)初始化期間,為了識(shí)別自從關(guān)聯(lián)的CBI扇區(qū)的一者的先前更新之后寫入的有效扇區(qū),必須掃描每一混亂更新區(qū)塊。在控制器RAM中,構(gòu)建每一混亂更新區(qū)塊的混亂扇區(qū)列表。只需要在最后寫入的CBI扇區(qū)中,從每一區(qū)塊的混亂區(qū)塊信息字段中界定的最后扇區(qū)地址開始掃描每一區(qū)塊。
在配置混亂更新區(qū)塊時(shí),寫入CBI扇區(qū)以對(duì)應(yīng)于所有的已更新邏輯子群組。將混亂更新區(qū)塊的邏輯和物理地址會(huì)寫入在扇區(qū)中可用的混亂區(qū)塊信息字段中,其中零條目(null entry)在混亂區(qū)塊索引字段中。在控制器RAM中開啟混亂扇區(qū)列表。
在關(guān)閉混亂更新區(qū)塊時(shí),以從扇區(qū)中混亂區(qū)塊信息字段去除的區(qū)塊的邏輯和物理地址寫入CBI扇區(qū)。RAM中相應(yīng)的混亂扇區(qū)列表變成未使用的。
修改控制器RAM中的相應(yīng)的混亂扇區(qū)列表以包括寫入到混亂更新區(qū)塊的扇區(qū)的記錄。當(dāng)控制器RAM中的混亂扇區(qū)列表沒(méi)有可用空間用于對(duì)混亂更新區(qū)塊進(jìn)行進(jìn)一步扇區(qū)寫入的記錄時(shí),為關(guān)于列表中扇區(qū)的邏輯子群組寫入已更新的CBI扇區(qū),且清除列表。
當(dāng)CBI區(qū)塊620變滿時(shí),將有效的CBI扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,且擦除先前的CBI區(qū)塊。
地址表圖2所示的邏輯到物理地址轉(zhuǎn)換模塊140負(fù)責(zé)在快閃存儲(chǔ)器中將主機(jī)的邏輯地址關(guān)聯(lián)到相應(yīng)的物理地址。邏輯群組與物理群組(元區(qū)塊)之間的映射存儲(chǔ)在分布在非易失性快閃存儲(chǔ)器200和易失性但較敏捷的RAM 130(參看圖1)中的一組表和列表中。地址表維持在存儲(chǔ)器系統(tǒng)中含有每一邏輯群組的元區(qū)塊地址的快閃存儲(chǔ)器中。另外,最近寫入的扇區(qū)的邏輯到物理地址記錄暫時(shí)保存在RAM中。在系統(tǒng)上電之后進(jìn)行初始化時(shí),可從快閃存儲(chǔ)器中的區(qū)塊列表和數(shù)據(jù)扇區(qū)標(biāo)題中重新構(gòu)建這些易失性記錄。因此,快閃存儲(chǔ)器中的地址表只需要偶而更新,從而導(dǎo)致控制數(shù)據(jù)的額外開銷寫入操作的低百分比。
邏輯群組的地址記錄的層級(jí)包括RAM中的開啟的更新區(qū)塊列表、關(guān)閉的更新區(qū)塊列表,和維持在快閃存儲(chǔ)器中的群組地址表(GAT)。
開啟的更新區(qū)塊列表是控制器RAM中當(dāng)前開啟用于寫入已更新的主機(jī)扇區(qū)數(shù)據(jù)的數(shù)據(jù)更新區(qū)塊的列表。區(qū)塊的條目在區(qū)塊關(guān)閉時(shí)移動(dòng)到關(guān)閉的更新區(qū)塊列表。關(guān)閉的更新區(qū)塊列表是控制器RAM中已關(guān)閉的數(shù)據(jù)更新區(qū)塊的列表。列表中條目的子集在控制寫入操作期間移動(dòng)到群組地址表中的扇區(qū)。
群組地址表(GAT)是存儲(chǔ)器系統(tǒng)中主機(jī)數(shù)據(jù)的所有邏輯群組的元區(qū)塊地址的列表。GAT含有根據(jù)邏輯地址循序排序的每一邏輯群組的一個(gè)條目。GAT中的第n個(gè)條目含有具有地址n的邏輯群組的元區(qū)塊地址。在優(yōu)選實(shí)施例中,其為快閃存儲(chǔ)器中的表,包含具有界定存儲(chǔ)器統(tǒng)中每一邏輯群組的元區(qū)塊地址的條目的一組扇區(qū)(稱為GAT扇區(qū))。在快閃存儲(chǔ)器中,將GAT扇區(qū)定位在一個(gè)或一個(gè)以上專用的控制區(qū)塊(稱為GAT區(qū)塊)中。
圖17A說(shuō)明群組地址表(GAT)扇區(qū)的數(shù)據(jù)字段。GAT扇區(qū)可(例如)具有足夠的容量以含有一組128個(gè)連續(xù)邏輯群組的GAT條目。每一GAT扇區(qū)包括兩個(gè)成分,即用于范圍內(nèi)每一邏輯群組的元區(qū)塊地址的一組GAT條目,和GAT扇區(qū)索引。第一成分含有用于定位與邏輯地址關(guān)聯(lián)的元區(qū)塊的信息。第二成分含有用于定位GAT區(qū)塊內(nèi)所有有效GAT扇區(qū)的信息。每一GAT條目具有三個(gè)字段,即元區(qū)塊號(hào)碼、如先前結(jié)合圖3A(iii)所描述的頁(yè)標(biāo)記、和表示元區(qū)塊是否已重新鏈接的標(biāo)志。GAT扇區(qū)索引羅列出GAT區(qū)塊中有效GAT扇區(qū)的位置。此索引處于每一GAT扇區(qū)中但被GAT區(qū)塊中下一寫入的GAT扇區(qū)的版本取代。因此只有最后寫入的GAT扇區(qū)中的版本為有效的。
圖17B說(shuō)明正記錄在一個(gè)或一個(gè)以上GAT區(qū)塊中的群組地址表(GAT)扇區(qū)的實(shí)例。GAT區(qū)塊是專用于記錄GAT扇區(qū)的元區(qū)塊。在更新GAT扇區(qū)時(shí),將其寫入在GAT區(qū)塊720中下一個(gè)可用的物理扇區(qū)位置。因此,GAT扇區(qū)的多個(gè)副本可存在于GAT區(qū)塊中,其中只有最后寫入的副本為有效的。例如,GAT扇區(qū)255(含有邏輯群組LG3968-LG4098的指針)至少已用作為有效版本的最新版本更新了兩次。區(qū)塊中最后寫入的GAT扇區(qū)中的一組索引識(shí)別GAT區(qū)塊中每一有效扇區(qū)的位置。在此實(shí)例中,區(qū)塊中最后寫入的GAT扇區(qū)是GAT扇區(qū)236,且其索引組是取代所有先前索引組的有效索引組。當(dāng)GAT區(qū)塊最后變成用GAT扇區(qū)完全填充時(shí),通過(guò)將所有有效扇區(qū)重寫到新的區(qū)塊位置,在控制寫入操作期間壓縮區(qū)塊。接著擦除整個(gè)區(qū)塊。
如先前所描述,GAT區(qū)塊在邏輯地址空間的區(qū)域中含有邏輯上連續(xù)組的群組的條目。GAT區(qū)塊內(nèi)的GAT扇區(qū)每一者含有128個(gè)連續(xù)邏輯群組的邏輯到物理映射信息。在GAT區(qū)塊所跨越的地址范圍內(nèi),存儲(chǔ)所有邏輯群組的條目所需的GAT扇區(qū)數(shù)目?jī)H占區(qū)塊中總扇區(qū)位置的一部分。因此,通過(guò)將GAT扇區(qū)寫入在區(qū)塊中下一個(gè)可用扇區(qū)位置,可更新GAT扇區(qū)。GAT區(qū)塊中所有有效GAT扇區(qū)及其位置的索引維持在最近寫入的GAT扇區(qū)中的索引字段中。GAT區(qū)塊中由有效GAT扇區(qū)占用的總扇區(qū)的一部分為系統(tǒng)設(shè)計(jì)參數(shù),其通常為25%。然而,每一GAT區(qū)塊中最多有64個(gè)有效GAT扇區(qū)。在大邏輯容量的系統(tǒng)中,可能必須在一個(gè)以上的GAT區(qū)塊中存儲(chǔ)GAT扇區(qū)。在此情況下,每一GAT區(qū)塊與固定范圍的邏輯群組關(guān)聯(lián)。
可將GAT更新執(zhí)行為控制寫入操作的一部分,此操作在ABL用盡配置的區(qū)塊時(shí)被觸發(fā)(參看圖18)。其與ABL填充和CBL清空操作同時(shí)執(zhí)行。在GAT更新操作期間,一個(gè)GAT扇區(qū)具有用來(lái)自關(guān)閉的更新區(qū)塊列表中的相應(yīng)條目的信息更新的條目。當(dāng)更新GAT條目時(shí),從關(guān)閉的更新區(qū)塊列表(CUBL)去除任何相應(yīng)的條目。例如,基于關(guān)閉的更新區(qū)塊列表中的第一條目來(lái)選擇將要更新的GAT扇區(qū)。將已更新扇區(qū)寫入到GAT區(qū)塊中的下一可用扇區(qū)位置。
當(dāng)沒(méi)有扇區(qū)位置可供已更新的GAT扇區(qū)使用時(shí),在控制寫入操作期間進(jìn)行GAT重寫操作。配置新的GAT區(qū)塊,且從整個(gè)GAT區(qū)塊以循序次序復(fù)制GAT索引所界定的有效GAT扇區(qū)。接著擦除整個(gè)GAT區(qū)塊。
GAT高速緩沖存儲(chǔ)器是控制器RAM 130中,GAT扇區(qū)中的128個(gè)條目的再分部分(subdivision)中的條目的副本。GAT高速緩沖存儲(chǔ)器條目的數(shù)目是系統(tǒng)設(shè)計(jì)參數(shù),典型值為32。每次從GAT扇區(qū)讀取條目時(shí),建立相關(guān)扇區(qū)再分部分的GAT高速緩沖存儲(chǔ)器。維持多個(gè)GAT高速緩沖存儲(chǔ)器。其數(shù)目是典型值為4的設(shè)計(jì)參數(shù)。GAT高速緩沖存儲(chǔ)器根據(jù)最久未使用以不同扇區(qū)再分部分的條目進(jìn)行重寫。
已擦除的元區(qū)塊管理圖2所示的擦除區(qū)塊管理器160使用用于維持目錄和系統(tǒng)控制信息的一組列表來(lái)管理擦除區(qū)塊。這些列表分布在控制器RAM 130和快閃存儲(chǔ)器200中。當(dāng)必須配置已擦除的元區(qū)塊以存儲(chǔ)用戶數(shù)據(jù)或存儲(chǔ)系統(tǒng)控制數(shù)據(jù)結(jié)構(gòu)時(shí),選擇保存在控制器RAM中的配置區(qū)塊列表(ABL)中的下一可用元區(qū)塊號(hào)碼(參看圖15)。類似地,在退出元區(qū)塊之后將其擦除時(shí),將其號(hào)碼添加到也保存在控制器RAM中的已清除區(qū)塊列表(CBL)。相對(duì)較靜態(tài)的目錄和系統(tǒng)控制數(shù)據(jù)存儲(chǔ)在快閃存儲(chǔ)器中。這些包括羅列快閃存儲(chǔ)器中所有元區(qū)塊的已擦除狀態(tài)的已擦除區(qū)塊列表和位圖(MAP)。已擦除區(qū)塊列表和MAP存儲(chǔ)在個(gè)別扇區(qū)中并記錄到稱為MAP區(qū)塊的專用元區(qū)塊。這些分布在控制器RAM和快閃存儲(chǔ)器中的列表提供已擦除區(qū)塊記錄的層級(jí)以有效地管理已擦除元區(qū)塊的使用。
圖18是說(shuō)明使用和再循環(huán)已擦除區(qū)塊的控制和目錄信息的分布和流程的示意方框圖??刂坪湍夸洈?shù)據(jù)維持在列表中,所述列表保存在控制器RAM 130中或保存在駐存在快閃存儲(chǔ)器200中的MAP區(qū)塊750中。
在優(yōu)選實(shí)施例中,控制器RAM 130保存配置區(qū)塊列表(ABL)610和已清除區(qū)塊列表(CBL)740。如先前結(jié)合圖15所描述,配置區(qū)塊列表(ABL)追蹤最近已配置哪些元區(qū)塊以存儲(chǔ)用戶數(shù)據(jù)或存儲(chǔ)系統(tǒng)控制數(shù)據(jù)結(jié)構(gòu)。在需要配置新的已擦除元區(qū)塊時(shí),在配置區(qū)塊列表(ABL)中選擇下一可用的元區(qū)塊號(hào)碼。類似地,使用已清除區(qū)塊列表(CBL)來(lái)追蹤已解除配置并擦除的更新元區(qū)塊。在控制器RAM 130(參看圖1)中保存ABL和CBL以便在追蹤相對(duì)活躍的更新區(qū)塊時(shí)進(jìn)行快速存取和簡(jiǎn)易操控。
配置區(qū)塊列表(ABL)追蹤將成為更新區(qū)塊的已擦除元區(qū)塊的集區(qū)和已擦除元區(qū)塊的配置。因此,這些元區(qū)塊中的每一者可由指定其是否為ABL待決配置中的已擦除區(qū)塊、開啟的更新區(qū)塊、或關(guān)閉的更新區(qū)塊的屬性來(lái)描述。圖18展示ABL含有已擦除的ABL列表612、開啟的更新區(qū)塊列表614、和關(guān)閉的更新區(qū)塊列表616。另外,與開啟的更新區(qū)塊列表614關(guān)聯(lián)的是關(guān)聯(lián)的原始區(qū)塊列表615。類似地,與關(guān)閉的更新區(qū)塊列表關(guān)聯(lián)的是關(guān)聯(lián)的已擦除原始區(qū)塊列表617。如先前圖15所示,這些關(guān)聯(lián)的列表分別是開啟的更新區(qū)塊列表614和關(guān)閉的更新區(qū)塊列表616的子集。已擦除的ABL區(qū)塊列表612、開啟的更新區(qū)塊列表614、和關(guān)閉的更新區(qū)塊列表616全部為配置區(qū)塊列表(ABL)610的子集,每一者中的條目分別具有相應(yīng)的屬性。
MAP區(qū)塊750是專用于存儲(chǔ)快閃存儲(chǔ)器200中的擦除管理記錄的元區(qū)塊。MAP區(qū)塊存儲(chǔ)MAP區(qū)塊扇區(qū)的時(shí)間序列,其中每一MAP扇區(qū)為擦除區(qū)塊管理(EBM)扇區(qū)760或MAP扇區(qū)780。因?yàn)橐巡脸齾^(qū)塊配置用盡且在退出元區(qū)塊時(shí)再循環(huán),所以關(guān)聯(lián)的控制和目錄數(shù)據(jù)優(yōu)選地包含在可在MAP區(qū)塊中更新的邏輯扇區(qū)中,將更新數(shù)據(jù)的每一例項(xiàng)(instance)記錄在新的區(qū)塊扇區(qū)中。EBM扇區(qū)760和MAP扇區(qū)780的多個(gè)副本可存在于MAP區(qū)塊750中,其中只有最新版本為有效的。有效的MAP扇區(qū)的位置的索引包含在EMB區(qū)塊的字段中。有效的EMB扇區(qū)總是在控制寫入操作期間最后被寫入在MAP區(qū)塊中。當(dāng)MAP區(qū)塊750已滿時(shí),通過(guò)將所有有效扇區(qū)重寫到新的區(qū)塊位置而在控制寫入操作期間將其壓縮。接著擦除整個(gè)區(qū)塊。
每一EBM扇區(qū)760含有已擦除的區(qū)塊列表(EBL)770,此為已擦除區(qū)塊的總體的子集地址的列表。已擦除的區(qū)塊列表(EBL)770充當(dāng)含有已擦除的元區(qū)塊號(hào)碼的緩沖器,從所述緩沖器中周期性地取用元區(qū)塊號(hào)碼以重新填充ABL,并周期性地將元區(qū)塊號(hào)碼添加到所述緩沖器中以重新清空CBL。EBL 770為可用的區(qū)塊緩沖器(ABB)772、已擦除的區(qū)塊緩沖器(EBB)774和已清除的區(qū)塊緩沖器(CBB)776充當(dāng)緩沖器。
可用的區(qū)塊緩沖器(ABB)772含有緊接著先前ABL填充操作的ABL 610中條目的副本。其實(shí)際上是恰好在ABL填充操作之后的ABL的備份副本。
已擦除的區(qū)塊緩沖器(EBB)774含有先前已從MAP扇區(qū)780或從CBB列表776傳送的已擦除的區(qū)塊地址(描述如下),且所述地址可用于在ABL填充操作期間傳送到ABL610。
已清除的區(qū)塊緩沖器(CBB)776含有在CBL清空操作期間已從CBL 740傳送并隨后將傳送到MAP扇區(qū)780或傳送到EBB列表774的已擦除區(qū)塊的地址。
MAP扇區(qū)780的每一者含有稱為MAP的位圖結(jié)構(gòu)。MAP為快閃存儲(chǔ)器中的每一元區(qū)塊使用一個(gè)位,所述位用來(lái)表示每一區(qū)塊的擦除狀態(tài)。對(duì)應(yīng)于EBM扇區(qū)中的ABL、CBL或已擦除的區(qū)塊列表中羅列的區(qū)塊地址的位在MAP中不設(shè)定為已擦除狀態(tài)。
區(qū)塊配置算法永遠(yuǎn)不使用在MAP、已擦除的區(qū)塊列表、ABL或CBL內(nèi)的不含有有效數(shù)據(jù)結(jié)構(gòu)且不指定為已擦除區(qū)塊的任何區(qū)塊,且因此所述區(qū)塊不可被存取用來(lái)存儲(chǔ)主機(jī)或控制數(shù)據(jù)結(jié)構(gòu)。此提供從可存取的快閃存儲(chǔ)器地址空間排除具有缺陷位置的區(qū)塊的簡(jiǎn)單機(jī)制。
圖18所示的層級(jí)允許有效地管理已擦除區(qū)塊記錄,并提供存儲(chǔ)在控制器的RAM中述區(qū)塊地址列表的完全安全性。以非頻繁的方式在這些區(qū)塊地址列表與一個(gè)或一個(gè)以上MAP扇區(qū)780之間交換已擦除的區(qū)塊條目。在電源關(guān)閉之后的系統(tǒng)初始化期間,可通過(guò)存儲(chǔ)在快閃存儲(chǔ)器中的扇區(qū)中的已擦除區(qū)塊列表和地址變換表中的信息和對(duì)快閃存儲(chǔ)器中少量被引用的數(shù)據(jù)區(qū)塊進(jìn)行的有限的掃描,來(lái)重建這些列表。
為了更新已擦除元區(qū)塊記錄的層級(jí)而采用的算法以一次序來(lái)配置使用已擦除區(qū)塊將來(lái)自MAP區(qū)塊750的按照地址次序的區(qū)塊突發(fā)(burst)與來(lái)自CBL 740的區(qū)塊地址突發(fā)交叉,其反映主機(jī)更新區(qū)塊的次序。對(duì)于大多數(shù)元區(qū)塊尺寸和系統(tǒng)存儲(chǔ)器容量而言,單一MAP扇區(qū)可為系統(tǒng)中的所有元區(qū)塊提供位圖。在此情況下,已擦除的區(qū)塊總是以與記錄在此MAP扇區(qū)中相同的地址次序而被配置使用。
擦除區(qū)塊管理操作如上述,ABL 610是具有可經(jīng)配置使用的已擦除元區(qū)塊和最近已配置為數(shù)據(jù)更新區(qū)塊的元區(qū)塊的地址條目的列表。ABL中的區(qū)塊地址的實(shí)際數(shù)目在作為系統(tǒng)設(shè)計(jì)變數(shù)的最大與最小限制之間。在制造期間,格式化的ABL條目的數(shù)目是卡類型和容量的函數(shù)。另外,由于可用的已擦除區(qū)塊的數(shù)目因壽命期間區(qū)塊的故障而縮減,所以ABL中條目的數(shù)目可能縮減接近系統(tǒng)壽命的終點(diǎn)。例如,在填充操作之后,ABL中的條目可指定可用于以下目的的區(qū)塊。每一區(qū)塊具有一個(gè)條目的部分寫入數(shù)據(jù)更新區(qū)塊的條目不超過(guò)對(duì)于同時(shí)開啟的更新區(qū)塊的最大限度的系統(tǒng)限制。對(duì)于用于配置為數(shù)據(jù)更新區(qū)塊的已擦除區(qū)塊,條目在一個(gè)到二十個(gè)之間。對(duì)于用于配置為控制區(qū)塊的已擦除區(qū)塊,條目為四個(gè)。
ABL填充操作由于ABL 610因配置而變得耗盡,所以需要對(duì)其進(jìn)行重新填充。填充ABL的操作發(fā)生在控制寫入操作期間。此在以下情況時(shí)被觸發(fā)必須配置區(qū)塊,但ABL含有的已擦除區(qū)塊條目不足以用于配置為數(shù)據(jù)更新區(qū)塊或用于一些其它控制數(shù)據(jù)更新區(qū)塊。在控制寫入期間,ABL填充操作與GAT更新操作同時(shí)進(jìn)行。
在ABL填充操作期間發(fā)生以下動(dòng)作。
1.保留具有當(dāng)前數(shù)據(jù)更新區(qū)塊的屬性的ABL條目。
2.保留具有關(guān)閉的數(shù)據(jù)更新區(qū)塊的屬性的ABL條目,除非區(qū)塊的條目正在同時(shí)進(jìn)行的GAT更新操作中被寫入,此情況下從ABL中去除所述條目。
3.保留用于未配置的擦除區(qū)塊的ABL條目。
4.壓縮ABL以便去除因去除條目而產(chǎn)生的間隙,從而維持條目的次序。
5.通過(guò)附加來(lái)自EBB列表的下一可用條目來(lái)完全填充ABL。
6.用ABL中的當(dāng)前條目重寫ABB列表。
CBL清空操作CBL是控制器RAM中已擦除區(qū)塊地址的列表,對(duì)已擦除區(qū)塊條目的數(shù)目的限制與ABL相同。清空CBL的操作發(fā)生在控制寫入操作期間。因此,其與ABL填充/GAT更新操作或CBI區(qū)塊寫入操作同時(shí)進(jìn)行。在CBL清空操作中,從CBL 740去除條目并將其寫入到CBB列表776。
MAP交換操作當(dāng)EBB列表774清空時(shí),MAP扇區(qū)780中的擦除區(qū)塊信息與EBM扇區(qū)760之間的MAP交換操作可周期性地發(fā)生在控制寫入操作期間。如果系統(tǒng)中的所有已擦除元區(qū)塊均記錄在EBM扇區(qū)760中,那么不存在MAP扇區(qū)780且不執(zhí)行MAP交換。在MAP交換操作期間,將用于向給EBB 774饋送已擦除區(qū)塊的MAP扇區(qū)視為源MAP扇區(qū)782。相反地,將從CBB776接收已擦除區(qū)塊的MAP扇區(qū)視為目的地MAP扇區(qū)784。如果只存在一個(gè)MAP扇區(qū),那么如下文所界定其可充當(dāng)源MAP扇區(qū)和目的地MAP扇區(qū)兩者。
在MAP交換期間執(zhí)行以下動(dòng)作。
1.以遞增指針為基礎(chǔ)來(lái)選擇源MAP扇區(qū)。
2.以不在源MAP扇區(qū)中的第一CBB條目中的區(qū)塊地址為基礎(chǔ)來(lái)選擇目的地MAP扇區(qū)。
3.如CBB中相關(guān)條目所界定來(lái)更新目的地MAP扇區(qū),且從CBB中去除所述條目。
4.除非不存在分離的源MAP扇區(qū),否則將已更新的目的地MAP扇區(qū)寫入在MAP區(qū)塊中。
5.如CBB中相關(guān)條目所界定來(lái)更新源MAP扇區(qū),且從CBB中去除所述條目。
6.將CBB中剩余的條目附加到EBB。
7.用從源MAP扇區(qū)界定的已擦除扇區(qū)地址盡可能地填充EBB。
8.將已更新的源MAP扇區(qū)寫入在MAP區(qū)塊中。
9.將已更新的EBM扇區(qū)寫入在MAP區(qū)塊中。
列表管理圖18展示各種列表之間的控制和目錄信息的分布和流程。為了方便,在列表元素之間移動(dòng)條目或改變條目屬性的操作,在圖18中識(shí)別為[A]到[O],如下。
在將已擦除區(qū)塊配置為主機(jī)數(shù)據(jù)的更新區(qū)塊時(shí),將其在ABL中的條目屬性從已擦除的ABL區(qū)塊改變?yōu)殚_啟的更新區(qū)塊。
在將已擦除的區(qū)塊配置為控制區(qū)塊時(shí),去除其在ABL中的條目。
在建立具有開啟的更新區(qū)塊屬性的ABL條目時(shí),將關(guān)聯(lián)的原始區(qū)塊字段添加到條目以記錄正被更新的邏輯群組的原始元區(qū)塊地址。從GAT獲得此信息。
當(dāng)關(guān)閉更新區(qū)塊時(shí),其在ABL中的條目屬性從開啟的更新區(qū)塊改變?yōu)殛P(guān)閉的更新區(qū)塊。
當(dāng)關(guān)閉更新區(qū)塊時(shí),擦除其關(guān)聯(lián)的原始區(qū)塊,且將其在ABL中的條目的關(guān)聯(lián)的原始區(qū)塊字段的屬性改變?yōu)橐巡脸脑紖^(qū)塊。
在ABL填充操作期間,地址在相同控制寫入操作期間在GAT中更新的任何關(guān)閉的更新區(qū)塊將其條目從ABL中去除。
在ABL填充操作期間,在從ABL去除關(guān)閉的更新區(qū)塊的條目時(shí),將其關(guān)聯(lián)的已擦除原始區(qū)塊的條目移動(dòng)到CBL。
在擦除控制區(qū)塊時(shí),將用于其的條目添加到CBL。
在ABL填充操作期間,從EBB列表將已擦除區(qū)塊條目移動(dòng)到ABL,且賦予已擦除區(qū)塊條目已擦除ABL區(qū)塊的屬性。
在ABL填充操作期間修改所有相關(guān)的ABL條目之后,ABL中的區(qū)塊地址取代ABB列表中的區(qū)塊地址。
與控制寫入期間的ABL填充操作同時(shí)進(jìn)行,將CBL中已擦除區(qū)塊的條目移動(dòng)到CBB列表。
在MAP交換操作期間,從CBB列表將所有相關(guān)條目移動(dòng)到MAP目的地扇區(qū)。
在MAP交換操作期間,從CBB列表將所有相關(guān)條目移動(dòng)到MAP源扇區(qū)。
在MAP交換操作期間的[L]和[M]之后,從CBB列表將所有其余條目移動(dòng)到EBB列表。
在MAP交換操作期間的[N]之后,如果可能,那么從MAP源扇區(qū)移動(dòng)除了在[M]中移動(dòng)的條目以外的條目,以便填充EBB列表。
邏輯到物理地址轉(zhuǎn)換為了在快閃存儲(chǔ)器中定位邏輯扇區(qū)的物理位置,圖2所示的邏輯到物理地址轉(zhuǎn)換模塊140執(zhí)行邏輯到物理地址轉(zhuǎn)換。除了最近已更新的邏輯群組外,可使用駐存在控制器RAM 130中的快閃存儲(chǔ)器200或GAT高速緩沖存儲(chǔ)器中的群組地址表(GAT)來(lái)執(zhí)行大多數(shù)的轉(zhuǎn)換。最近已更新的邏輯群組的地址轉(zhuǎn)換將需要查找主要駐存在控制器RAM 130中的更新區(qū)塊的地址列表。因此,邏輯扇區(qū)地址的邏輯到物理地址轉(zhuǎn)換的過(guò)程視與定位有扇區(qū)的邏輯群組關(guān)聯(lián)的區(qū)塊的類型而定。區(qū)塊的類型為完整區(qū)塊、循序數(shù)據(jù)更新區(qū)塊、混亂數(shù)據(jù)更新區(qū)塊、關(guān)閉的數(shù)據(jù)更新區(qū)塊。
圖19是展示邏輯到物理地址轉(zhuǎn)換過(guò)程的流程圖。實(shí)質(zhì)上,通過(guò)首先使用邏輯扇區(qū)地址查找各種更新目錄(例如,開啟的更新區(qū)塊列表和關(guān)閉的更新區(qū)塊列表),定位相應(yīng)的元區(qū)塊和物理扇區(qū)。如果關(guān)聯(lián)的元區(qū)塊不是更新過(guò)程的一部分,那么由GAT提供目錄信息。邏輯到物理地址轉(zhuǎn)換包括以下步驟步驟800給定邏輯扇區(qū)地址。
步驟810查找控制器RAM中開啟的更新區(qū)塊列表614中的給定邏輯地址(參看圖15和圖18)。如果查找失敗,那么繼續(xù)進(jìn)行到步驟820,否則繼續(xù)進(jìn)行到步驟830。
步驟820在關(guān)閉的更新區(qū)塊列表616中查找給定的邏輯地址。如果查找失敗,給定的邏輯地址不是任何更新過(guò)程的一部分;繼續(xù)進(jìn)行到步驟870,以進(jìn)行GAT地址轉(zhuǎn)換。否則繼續(xù)進(jìn)行到步驟860以進(jìn)行關(guān)閉的更新區(qū)塊地址轉(zhuǎn)換。
步驟830如果含有給定邏輯地址的更新區(qū)塊為循序的,那么繼續(xù)進(jìn)行到步驟840以進(jìn)行循序更新區(qū)塊地址轉(zhuǎn)換。否則繼續(xù)進(jìn)行到步驟850以進(jìn)行混亂更新區(qū)塊地址轉(zhuǎn)換。
步驟840使用循序更新區(qū)塊地址轉(zhuǎn)換來(lái)獲得元區(qū)塊地址。繼續(xù)進(jìn)行到步驟880。
步驟850使用混亂更新區(qū)塊地址轉(zhuǎn)換來(lái)獲得元區(qū)塊地址。繼續(xù)進(jìn)行到步驟880。
步驟860使用關(guān)閉的更新區(qū)塊地址轉(zhuǎn)換來(lái)獲得元區(qū)塊地址。繼續(xù)進(jìn)行到步驟880。
步驟870使用群組地址表(GAT)轉(zhuǎn)換來(lái)獲得元區(qū)塊地址。繼續(xù)進(jìn)行到步驟880。
步驟880將元區(qū)塊地址轉(zhuǎn)換為物理地址。轉(zhuǎn)換方法視元區(qū)塊是否已重新鏈接而定。
步驟890獲得物理扇區(qū)地址。
更詳細(xì)地描述各種地址轉(zhuǎn)換處理,如下循序更新區(qū)塊地址轉(zhuǎn)換(步驟840)可直接從開啟的更新區(qū)塊列表614中的信息完成與循序更新區(qū)塊關(guān)聯(lián)的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換(圖15和圖18),如下。
1.從列表中的“頁(yè)標(biāo)記”和“寫入的扇區(qū)號(hào)碼”字段確定目標(biāo)邏輯扇區(qū)是否已定位在更新區(qū)塊或其關(guān)聯(lián)的原始區(qū)塊中。
2.從列表中讀取適合目標(biāo)邏輯扇區(qū)的元區(qū)塊地址。
3.從合適的“頁(yè)標(biāo)記”字段確定元區(qū)塊內(nèi)的扇區(qū)地址。
混亂更新區(qū)塊地址轉(zhuǎn)換(步驟850)與混亂更新區(qū)塊關(guān)聯(lián)的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換序列如下。
1.如果從RAM中的混亂扇區(qū)列表確定扇區(qū)是最近寫入的扇區(qū),那么可直接從其在此列表中的位置來(lái)完成地址轉(zhuǎn)換。
2.在CBI區(qū)塊中最近寫入的扇區(qū)在其混亂區(qū)塊數(shù)據(jù)字段內(nèi)含有與目標(biāo)邏輯扇區(qū)地址相關(guān)的混亂更新區(qū)塊的物理地址。其在間接扇區(qū)索引字段內(nèi)也含有關(guān)于此混亂更新區(qū)塊的最后寫入的CBI扇區(qū)的CBI區(qū)塊內(nèi)的偏移(參看圖16A到圖16E)。
3.這些字段中的信息均被存儲(chǔ)在RAM中,從而排除在后續(xù)的地址轉(zhuǎn)換期間讀取扇區(qū)的需要。
4.讀取步驟3處由間接扇區(qū)索引字段識(shí)別的CBI扇區(qū)。
5.將最近存取的混亂更新子群的直接扇區(qū)索引字段存儲(chǔ)在RAM中,而從而排除在步驟4處執(zhí)行讀取以重復(fù)存取相同的混亂更新區(qū)塊的需要。
6.在步驟4或步驟5處讀取的直接扇區(qū)索引字段進(jìn)而識(shí)別關(guān)于含有目標(biāo)邏輯扇區(qū)地址的邏輯子群組的CBI扇區(qū)。
7.從步驟6中識(shí)別的CBI扇區(qū)讀取目標(biāo)邏輯扇區(qū)地址的混亂區(qū)塊索引條目。
8.最近讀取的混亂區(qū)塊索引字段可存儲(chǔ)在控制器RAM中,從而排除執(zhí)行步驟4和步驟7處的讀取以重復(fù)存取相同的邏輯子群組的需要。
9.混亂區(qū)塊索引條目界定目標(biāo)邏輯扇區(qū)在混亂更新區(qū)塊或關(guān)聯(lián)的原始區(qū)塊中的位置。如果目標(biāo)邏輯扇區(qū)的有效副本處于原始區(qū)塊中,那么通過(guò)使用原始元區(qū)塊和頁(yè)標(biāo)記信息來(lái)對(duì)其進(jìn)行定位。
關(guān)閉的更新區(qū)塊地址轉(zhuǎn)換(步驟860)可直接從關(guān)閉的區(qū)塊更新列表中的信息來(lái)完成與關(guān)閉的更新區(qū)塊關(guān)聯(lián)的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換(參看圖18),如下。
1.從列表中讀取分配到目標(biāo)邏輯群組的元區(qū)塊地址。
2.從列表中的“頁(yè)標(biāo)記”字段確定元區(qū)塊內(nèi)的扇區(qū)地址。
GAT地址轉(zhuǎn)換(步驟870)如果邏輯群組不受到開啟或關(guān)閉的區(qū)塊更新列表的參考,那么其在GAT中的條目為有效的。由GAT參考的邏輯群組中的目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換序列如下。
1.評(píng)估RAM中可用的GAT高速緩沖存儲(chǔ)器的范圍,以便確定目標(biāo)邏輯群組的條目是否包含在GAT高速緩沖存儲(chǔ)器中。
2.如果在步驟1中發(fā)現(xiàn)目標(biāo)邏輯群組,那么GAT高速緩沖存儲(chǔ)器含有全部群組地址信息,包括元區(qū)塊地址和頁(yè)標(biāo)記兩者,從而允許轉(zhuǎn)換目標(biāo)邏輯扇區(qū)地址。
3.如果目標(biāo)地址不在GAT高速緩沖存儲(chǔ)器中,那么必須讀取目標(biāo)GAT區(qū)塊的GAT索引以識(shí)別關(guān)于目標(biāo)邏輯群組地址的GAT扇區(qū)的位置。
4.最后存取的GAT區(qū)塊的GAT索引保存在控制器RAM中,且不需要從快閃存儲(chǔ)器讀取扇區(qū)即可進(jìn)行存取。
5.將每一GAT區(qū)塊的元區(qū)塊地址和寫入在每一GAT區(qū)塊中的扇區(qū)數(shù)目的列表保存在控制器RAM中。如果步驟4處所需要的GAT索引不可用,那么可立即從快閃存儲(chǔ)器中進(jìn)行讀取。
6.從由步驟4或步驟6處獲得的GAT索引界定的GAT區(qū)塊中的扇區(qū)位置讀取關(guān)于目標(biāo)邏輯群組地址的GAT扇區(qū)。用含有目標(biāo)條目的扇區(qū)的再分部分來(lái)更新GAT高速緩沖存儲(chǔ)器。
7.從目標(biāo)GAT條目?jī)?nèi)的元區(qū)塊地址和“頁(yè)標(biāo)記”字段獲得目標(biāo)扇區(qū)地址。
元區(qū)塊到物理地址轉(zhuǎn)換(步驟880)如果與元區(qū)塊地址關(guān)聯(lián)的標(biāo)志表示元區(qū)塊已被重新鏈接,那么從BLM區(qū)塊讀取相關(guān)的LT扇區(qū)以確定目標(biāo)扇區(qū)地址的擦除區(qū)塊地址。否則,直接從元區(qū)塊地址確定擦除區(qū)塊地址。
控制數(shù)據(jù)管理圖20說(shuō)明在存儲(chǔ)器管理的操作過(guò)程中,對(duì)控制數(shù)據(jù)結(jié)構(gòu)執(zhí)行的操作層級(jí)。數(shù)據(jù)更新管理操作對(duì)駐存在RAM中的各種列表發(fā)揮作用。控制寫入操作對(duì)快閃存儲(chǔ)器中各種控制數(shù)據(jù)扇區(qū)和專用區(qū)塊發(fā)揮作用,且還與RAM中的列表交換數(shù)據(jù)。
在RAM中對(duì)ABL、CBL和混亂扇區(qū)列表執(zhí)行數(shù)據(jù)更新管理操作。當(dāng)將已擦除的區(qū)塊配置為更新區(qū)塊或控制區(qū)塊時(shí),或當(dāng)關(guān)閉更新區(qū)塊時(shí),更新ABL。當(dāng)擦除控制區(qū)塊時(shí),或當(dāng)將關(guān)閉的更新區(qū)塊的條目寫入到GAT時(shí),更新CBL。當(dāng)將扇區(qū)寫入到混亂更新區(qū)塊時(shí),更新更新混亂扇區(qū)列表。
控制寫入操作促使將來(lái)自RAM中的控制數(shù)據(jù)結(jié)構(gòu)的信息寫入到快閃存儲(chǔ)器中的控制數(shù)據(jù)結(jié)構(gòu),必要時(shí)隨之更新快閃存儲(chǔ)器和RAM中其它支持的控制數(shù)據(jù)結(jié)構(gòu)。當(dāng)ABL不含有將被配置為更新區(qū)塊的已擦除區(qū)塊的其它條目時(shí),或當(dāng)重寫CBI區(qū)塊時(shí),觸發(fā)控制寫入操作。
在優(yōu)選實(shí)施例中,在每一控制寫入操作期間執(zhí)行ABL填充操作、CBL清空操作和EBM扇區(qū)更新操作。當(dāng)含有EBM扇區(qū)的MAP區(qū)塊變滿時(shí),將有效的EBM和MAP扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,且接著擦除先前的MAP區(qū)塊。
在每一控制寫入操作期間,寫入一個(gè)GAT扇區(qū),且相應(yīng)地修改關(guān)閉的更新區(qū)塊列表。當(dāng)GAT區(qū)塊變滿時(shí),執(zhí)行GAT重寫操作。
如上所述,在某些混亂扇區(qū)寫入操作之后,寫入CBI扇區(qū)。當(dāng)CBI區(qū)塊變滿時(shí),將有效的CBI扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,且接著擦除先前的CBI區(qū)塊。
如上所述,當(dāng)EBM扇區(qū)中的EBB列表中不存在其它已擦除的區(qū)塊條目時(shí)執(zhí)行MAP交換操作。
每當(dāng)重寫MAP區(qū)塊時(shí),在專用的MAPA區(qū)塊中寫入記錄MAP區(qū)塊的當(dāng)前地址的MAP地址(MAPA)扇區(qū)。當(dāng)MAPA區(qū)塊變滿時(shí),將有效的MAPA扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,且接著擦除先前的MAPA區(qū)塊。
每當(dāng)重寫MAPA區(qū)塊時(shí),將啟動(dòng)扇區(qū)寫入當(dāng)前的啟動(dòng)區(qū)塊中。當(dāng)啟動(dòng)區(qū)塊變滿時(shí),將有效的啟動(dòng)扇區(qū)從啟動(dòng)區(qū)塊的當(dāng)前版本復(fù)制到備份版本,接著所述備份版本變成當(dāng)前版本。先前的當(dāng)前版本被擦除并變成備份版本,且將有效的啟動(dòng)扇區(qū)寫入回其中。
分布在多個(gè)存儲(chǔ)器平面上的存儲(chǔ)器的對(duì)準(zhǔn)如先前結(jié)合圖4和圖5A到圖5C所描述,為了增加性能,并行地操作多個(gè)存儲(chǔ)器平面?;旧?,每一平面具有其自身的讀出放大器組作為讀取和程序電路的一部分,以便并行地服務(wù)跨越平面的存儲(chǔ)器單元的相應(yīng)頁(yè)。在組合多個(gè)平面時(shí),可并行地操作多個(gè)頁(yè),從而使性能更為提高。
根據(jù)本發(fā)明的另一方面,對(duì)于組織成可擦除區(qū)塊并由多個(gè)存儲(chǔ)器平面構(gòu)成(因而可并行地讀取邏輯單位或?qū)⑦壿媶挝徊⑿械鼐幊痰蕉鄠€(gè)平面中)的存儲(chǔ)器陣列,當(dāng)將要更新存儲(chǔ)在給定存儲(chǔ)器平面中的第一區(qū)塊的原始邏輯單位時(shí),提供所需以將已更新的邏輯單位保持在與原始相同的平面中。此通過(guò)將已更新的邏輯單位記錄到仍在相同平面中的第二區(qū)塊的下一可用位置而完成。優(yōu)選地,將邏輯單位存儲(chǔ)在平面中與其它版本相同的偏移位置,從而給定邏輯單位的所有版本由相同組的感測(cè)電路服務(wù)。
在優(yōu)選實(shí)施例中,因此用邏輯單位的當(dāng)前版本來(lái)填補(bǔ)上一已編程存儲(chǔ)器單位與下一可用平面對(duì)準(zhǔn)存儲(chǔ)器單位之間的任何介入的間隙。通過(guò)用邏輯上跟隨著上一已編程邏輯單位的邏輯單位的當(dāng)前版本,且用邏輯上在存儲(chǔ)在下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位中的邏輯單位前面的邏輯單位的當(dāng)前版本來(lái)填充間隙,而完成填補(bǔ)。
以此方式,將邏輯單位的所有版本維持在具有與原始相同偏移的相同平面中,從而在垃圾收集操作中,不需要從不同平面檢索邏輯單位的最新版本而降低性能。在優(yōu)選實(shí)施例中,用最新的版本來(lái)更新或填補(bǔ)每一平面上的每一存儲(chǔ)器單位。因此,在多個(gè)平面上的并行操作中,邏輯單位將按照邏輯循序次序而無(wú)需進(jìn)一步重新排列。
此方案通過(guò)允許平面上重新排列邏輯群組的邏輯單位的最新版本,且避免需要搜集不同存儲(chǔ)器平面的最新版本,而縮短合并混亂區(qū)塊的時(shí)間。此是有益的,因?yàn)橹鳈C(jī)接口的性能規(guī)格限定由存儲(chǔ)器系統(tǒng)完成扇區(qū)寫入操作的最大等待時(shí)間。
圖21說(shuō)明由多個(gè)存儲(chǔ)器平面構(gòu)成的存儲(chǔ)器陣列。存儲(chǔ)器平面可來(lái)自相同的存儲(chǔ)器芯片或多個(gè)存儲(chǔ)器芯片。每一平面910具有其自身的讀取和程序電路912以并行地服務(wù)存儲(chǔ)器單元的頁(yè)914。在不損失一般性的情況下,在所示的實(shí)例中,存儲(chǔ)器陣列具有四個(gè)并行操作的平面。
一般而言,邏輯單位是主機(jī)系統(tǒng)存取的最小單位。通常邏輯單位是尺寸為512字節(jié)的扇區(qū)。頁(yè)是平面中并行讀取或編程的最大單位。通常邏輯頁(yè)含有一個(gè)或一個(gè)以上邏輯單位。因此,在組合多個(gè)平面時(shí),可將并行讀取或編程的最大總數(shù)單位視為存儲(chǔ)器單元的元頁(yè),其中元頁(yè)由多個(gè)平面的每一者的頁(yè)構(gòu)成。例如,如MP0的元頁(yè)具有四頁(yè),來(lái)自平面P0、P1、P2和P3的每一者一頁(yè),其并行地存儲(chǔ)邏輯頁(yè)LP0、LP1、LP2、LP3。因此,與僅在一個(gè)平面中操作相比,存儲(chǔ)器的讀取和寫入性能增加四倍。
將存儲(chǔ)器陣列進(jìn)一步組織成元區(qū)塊,例如MB0、...、MBj,其中每一元區(qū)塊內(nèi)的所有存儲(chǔ)器單元可作為單位而一起擦除。例如MB0的元區(qū)塊由多個(gè)存儲(chǔ)器位置構(gòu)成,用于存儲(chǔ)數(shù)據(jù)的邏輯頁(yè)914,例如LP0-LPN-1。元區(qū)塊中的邏輯頁(yè)根據(jù)其被填充在元區(qū)塊中的次序,以預(yù)定的序列分布在四個(gè)平面P0、P1、P2和P3上。例如,在以邏輯上循序次序填步邏輯頁(yè)時(shí),以第一平面中的第一頁(yè)、第二平面中的第二頁(yè)等循環(huán)次序訪問(wèn)平面。在到達(dá)最后的平面之后,填充以循環(huán)的方式返回以便在下一元頁(yè)中從第一平面再次開始。以此方式,可在所有平面均被并行操作時(shí)并行地存取連續(xù)系列的邏輯頁(yè)。
一般而言,如果存在并行地操作的W個(gè)平面,且以邏輯上循序次序填充元區(qū)塊,那么元區(qū)塊中第k個(gè)邏輯頁(yè)將駐存在平面x中,其中x=k MOD W。例如,在四個(gè)平面的情況下,W=4,在以邏輯循序次序填充區(qū)塊時(shí),第5個(gè)邏輯頁(yè)LP5將駐存在由5 MOD 4給定的平面中,即平面1,如圖21中可以看到。
每一存儲(chǔ)器平面中的存儲(chǔ)器操作由一組讀取/寫入電路912來(lái)執(zhí)行。進(jìn)出讀取/寫入電路的每一者的數(shù)據(jù)在控制器920的控制下通過(guò)數(shù)據(jù)總線930進(jìn)行傳送。控制器920中的緩沖器922通過(guò)數(shù)據(jù)總線930來(lái)幫助緩沖數(shù)據(jù)的傳送。明確地說(shuō),在第一平面中的操作需要存取第二平面中的數(shù)據(jù)時(shí),需要兩個(gè)步驟的過(guò)程??刂破魇紫葟牡诙矫孀x出數(shù)據(jù),接著通過(guò)數(shù)據(jù)總線和緩沖器將數(shù)據(jù)傳送到第一平面。事實(shí)上,在大多數(shù)存儲(chǔ)器結(jié)構(gòu)中,在兩個(gè)不同的位線之間傳送數(shù)據(jù)也需要通過(guò)數(shù)據(jù)總線920交換數(shù)據(jù)。
至少,此涉及在一個(gè)平面中從一組讀取/寫入電路傳送出去,并進(jìn)入另一平面中的另一組讀取/寫入電路。在平面來(lái)自不同芯片的情況下,將需要在芯片之間進(jìn)行傳送。本發(fā)明提供存儲(chǔ)器區(qū)塊管理的結(jié)構(gòu)和方案,從而避免一個(gè)平面從另一平面存取數(shù)據(jù),以便使性能最大化。
如圖21所示,元頁(yè)由多個(gè)邏輯頁(yè)(每一平面中一個(gè)邏輯頁(yè))形成。每一邏輯頁(yè)可由一個(gè)或一個(gè)以上邏輯單位組成。當(dāng)數(shù)據(jù)正以逐邏輯單位的方式記錄到跨越平面的區(qū)塊中時(shí),每一邏輯單位將落在四個(gè)存儲(chǔ)器平面的一者中。
在更新邏輯單位時(shí)發(fā)生平面對(duì)準(zhǔn)的問(wèn)題。在當(dāng)前的實(shí)例中,為了說(shuō)明的目的,將邏輯單位視為512字節(jié)的邏輯扇區(qū),且邏輯頁(yè)也為邏輯單位寬。由于快閃存儲(chǔ)器不允許在不首先擦除整個(gè)區(qū)塊的情況下重寫區(qū)塊的一部分,所以不將邏輯頁(yè)的更新寫入在現(xiàn)有的位置上,而是將其記錄在區(qū)塊的未使用的位置中。接著將邏輯單位的先前版本(一個(gè)或多個(gè))視為過(guò)時(shí)的。在許多更新之后,區(qū)塊可能含有由于已更新而因此變得過(guò)時(shí)的許多邏輯單位。因此可稱此區(qū)塊“變臟”,且垃圾收集操作將忽略臟邏輯單位而收集每一個(gè)別邏輯單位的最新版本并以邏輯上循序次序?qū)⑵渲匦掠涗浽谝粋€(gè)或一個(gè)以上新的區(qū)塊中。接著擦除并再循環(huán)臟區(qū)塊。
當(dāng)將已更新的邏輯單位記錄在區(qū)塊中的下一未使用的位置中時(shí),其通常不被記錄在與其先前版本相同的存儲(chǔ)器平面中。當(dāng)要進(jìn)行垃圾收集操作(例如合并或壓縮)時(shí),邏輯單位的最新版本將記錄在與原始相同的平面中以維持原始次序。然而,如果必須從另一平面檢索最新版本,那么性能將降低。
因此,根據(jù)本發(fā)明的另一方面,當(dāng)將要更新存儲(chǔ)在給定平面中的第一區(qū)塊的原始邏輯單位時(shí),提供所需以保持已更新的邏輯單位處于與原始相同的平面中。此通過(guò)將已更新的邏輯單位記錄到仍在相同平面中的第二區(qū)塊的下一可用位置而完成。在優(yōu)選實(shí)施例中,用與原始區(qū)塊中的原始邏輯單位相同的相對(duì)位置中的邏輯單位的當(dāng)前版本來(lái)填補(bǔ)(即,通過(guò)復(fù)制來(lái)填充)上一已編程存儲(chǔ)器單位與下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位之間的介入的間隙。
圖22A是說(shuō)明根據(jù)本發(fā)明的一般實(shí)施方案,具有平面對(duì)準(zhǔn)的更新的方法的流程圖。
步驟950在組織成區(qū)塊的非易失性存儲(chǔ)器中,將每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)邏輯單位的數(shù)據(jù)。
步驟952用多個(gè)存儲(chǔ)器平面構(gòu)成存儲(chǔ)器,每一平面具有用于并行地服務(wù)存儲(chǔ)器頁(yè)的一組感測(cè)電路,所述存儲(chǔ)器頁(yè)含有一個(gè)或一個(gè)以上存儲(chǔ)器單位。
步驟954根據(jù)第一次序?qū)⑦壿媶挝坏牡谝话姹敬鎯?chǔ)在第一區(qū)塊的存儲(chǔ)器單位中,將每一第一版本邏輯單位存儲(chǔ)在存儲(chǔ)器平面的一者中。
步驟956根據(jù)不同于第一次序的第二次序?qū)⑦壿媶挝坏暮罄m(xù)版本存儲(chǔ)在第二區(qū)塊中,將每一后續(xù)版本存儲(chǔ)在與第一版本相同的平面中的下一可用存儲(chǔ)器單位中,從而可通過(guò)相同組的感測(cè)電路從相同平面存取邏輯單位的所有版本。
圖22B說(shuō)明在圖22A所示的流程圖中存儲(chǔ)更新的步驟的優(yōu)選實(shí)施例。
步驟956′包括步驟957、步驟958和步驟959。
步驟957將每一區(qū)塊分割成元頁(yè),每一元頁(yè)由每一平面的頁(yè)構(gòu)成。此步驟可在存儲(chǔ)步驟的任一者之前執(zhí)行。
步驟958根據(jù)與第一次序不同的第二次序?qū)⑦壿媶挝坏暮罄m(xù)版本存儲(chǔ)到第二區(qū)塊,將每一后續(xù)版本存儲(chǔ)在在元頁(yè)中具有與第一版本相同偏移的下一可用存儲(chǔ)器單位中。
步驟959與存儲(chǔ)邏輯單位的后續(xù)版本同時(shí)進(jìn)行,通過(guò)根據(jù)第一次序復(fù)制邏輯單位的當(dāng)前版本,以逐元頁(yè)的方式填補(bǔ)在所述下一可用存儲(chǔ)器單位之前的任何未使用的存儲(chǔ)器單位。
圖23A說(shuō)明不論平面對(duì)準(zhǔn)如何而以循序次序?qū)懭氲窖蚋聟^(qū)塊的邏輯單位的實(shí)例。所述實(shí)例展示每一邏輯頁(yè)為邏輯扇區(qū)的尺寸,例如LS0、LS1...。在四平面的實(shí)例中,可將每一區(qū)塊(例如MB0)視為分割成元頁(yè)MP0、MP1、...,其中每一元頁(yè)(例如MP0)含有分別來(lái)自平面P0、P1、P2和P3的四個(gè)扇區(qū)(例如LS0、LS1、LS2和LS3)。因此,以循環(huán)次序以逐扇區(qū)的邏輯單位將區(qū)塊填充在平面P0、P1、P2和P3中。
在主機(jī)寫入操作#1中,正更新邏輯扇區(qū)LS5-LS8中的數(shù)據(jù)。將作為L(zhǎng)S5′-LS8′的已更新數(shù)據(jù)記錄在始于第一可用位置的新配置的更新區(qū)塊中。
在主機(jī)寫入操作#2中,正更新邏輯扇區(qū)LS9-LS12中數(shù)據(jù)的程序段。將作為L(zhǎng)S9′-LS12′的已更新數(shù)據(jù)記錄在緊接著最后寫入結(jié)束處的位置中的更新區(qū)塊中。可以看到,兩次主機(jī)寫入使得已以邏輯上循序次序?qū)⒏聰?shù)據(jù)記錄在更新區(qū)塊中,即LS5′-LS12′。更新區(qū)塊可視為循序更新區(qū)塊,因?yàn)槠湟岩赃壿嬌涎虼涡虮惶畛洹S涗浽诟聟^(qū)塊中的更新數(shù)據(jù)使原始區(qū)塊中的相應(yīng)的數(shù)據(jù)過(guò)時(shí)。
然而,根據(jù)下一個(gè)可用位置但不論平面對(duì)準(zhǔn)如何而將更新邏輯扇區(qū)記錄在更新區(qū)塊中。例如,扇區(qū)LS5原始地記錄在平面P1中,但已更新的LS5′現(xiàn)記錄在P0中。類似地,其它更新扇區(qū)全部未對(duì)準(zhǔn)。
圖23B說(shuō)明不論平面對(duì)準(zhǔn)如何而以非循序次序?qū)懭氲交靵y更新區(qū)塊的邏輯單位的實(shí)例。
在主機(jī)寫入操作#1中,更新存儲(chǔ)在原始元區(qū)塊中的給定邏輯群組的邏輯扇區(qū)LS10-LS11。將已更新的邏輯扇區(qū)LS10′-LS11′存儲(chǔ)在新配置的更新區(qū)塊中。此時(shí),更新區(qū)塊為循序的更新區(qū)塊。在主機(jī)寫入操作#2中,將邏輯扇區(qū)LS5-LS6更新為L(zhǎng)S5′-LS6′并將其記錄在緊接著上一寫入的位置中的更新區(qū)塊中。此將循序的更新區(qū)塊轉(zhuǎn)換為混亂的更新區(qū)塊。在主機(jī)寫入操作#3中,再次更新邏輯扇區(qū)LS10′并將其作為L(zhǎng)S10″而記錄在更新區(qū)塊的下一位置中。此時(shí),更新區(qū)塊中的LS10″取代先前記錄中的LS10′,而LS10′進(jìn)而取代原始區(qū)塊中的LS10。在主機(jī)寫入操作#4中,再次更新邏輯扇區(qū)LS10″中的數(shù)據(jù)并將其作為L(zhǎng)S10而記錄在更新區(qū)塊的下一位置中。因此,LS10現(xiàn)為邏輯扇區(qū)LS10的最后且唯一有效的版本。LS10的所有先前版本現(xiàn)均過(guò)時(shí)。在主機(jī)寫入操作#5中,更新邏輯扇區(qū)LS30中的數(shù)據(jù)并將其作為L(zhǎng)S30′而記錄在更新區(qū)塊中。在此實(shí)例中,可以任何次序并以任何重復(fù)將邏輯群組內(nèi)的邏輯單位寫入在混亂更新區(qū)塊中。
同樣,根據(jù)下一可用位置但不論平面對(duì)準(zhǔn)如何而將更新邏輯扇區(qū)記錄在更新區(qū)塊中。例如,扇區(qū)LS10原始地記錄在平面P2(即,MP2、第三平面)中,但已更新的LS10′現(xiàn)記錄在P0(即,MP0′,第一平面)中。類似地,在主機(jī)寫入#3中,再次將邏輯扇區(qū)LS10′更新為L(zhǎng)S10″并放置在結(jié)果也在平面P0(MP1′中的第一平面)中的下一可用位置中。因此,可以看到,一般而言,將更新扇區(qū)記錄到區(qū)塊的下一可用位置中可導(dǎo)致已更新扇區(qū)被存儲(chǔ)在與其先前版本不同的平面中。
具有通過(guò)填補(bǔ)而填充的介入間隙的平面對(duì)準(zhǔn)的循序更新區(qū)塊圖24A說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23A的循序更新實(shí)例。
在主機(jī)寫入操作#1中,將更新為L(zhǎng)S5′-LS8′的數(shù)據(jù)記錄在始于第一可用平面對(duì)準(zhǔn)位置的新配置的更新區(qū)塊中。在此情況下,LS5原始地在P1中,P1是元頁(yè)的第二平面。因此,將在更新區(qū)塊的第一可用元頁(yè)MP0的相應(yīng)平面中編程LS5′-LS7′。同時(shí),用原始區(qū)塊的元頁(yè)中在LS5之前的邏輯扇區(qū)LS4的當(dāng)前版本填補(bǔ)MP0′中未使用的第一平面的間隙。接著將原始LS4視為過(guò)時(shí)的數(shù)據(jù)。接著將剩余的LS8′記錄在下一元頁(yè)MP1′的第一個(gè)平面中并進(jìn)行平面對(duì)準(zhǔn)。
在主機(jī)寫入操作#2中,將更新為L(zhǎng)S9′-LS12′的數(shù)據(jù)記錄在下一可用平面對(duì)準(zhǔn)位置中的更新區(qū)塊中。因此,將LS9′記錄在下一可用平面對(duì)準(zhǔn)存儲(chǔ)器單位中,其為MP1′的第二平面。在此情況下,不會(huì)產(chǎn)生間隙,且不必要進(jìn)行填補(bǔ)。將更新區(qū)塊視為循序更新區(qū)塊,因?yàn)槠湟岩赃壿嬌涎虼涡虮惶畛?。此外,其因每一更新邏輯單位與其原始的一樣處于相同平面中而進(jìn)行了平面對(duì)準(zhǔn)。
具有介入間隙的平面對(duì)準(zhǔn)的混亂更新區(qū)塊圖24B說(shuō)明根據(jù)本發(fā)明的一個(gè)優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和不進(jìn)行填補(bǔ)的圖23B的混亂更新實(shí)例。
在主機(jī)寫入操作#1中,將已更新的邏輯扇區(qū)LS10′-LS11′存儲(chǔ)在新配置的更新區(qū)塊中。不是將其存儲(chǔ)在下一可用的存儲(chǔ)器單位中,而是將其存儲(chǔ)在下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位中。由于LS10′和LS11′原始地分別存儲(chǔ)在平面P2和P3(原始區(qū)塊的MP2的第三和第四平面)中,所以下一可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位將處于更新區(qū)塊的MP0′的第三和第四平面中。此時(shí),更新區(qū)塊為非循序的,以未填充、未填充、LS10′和LS11′的次序填充元頁(yè)MP0′的頁(yè)。
在主機(jī)寫入操作#2中,將邏輯扇區(qū)LS5-LS6更新為L(zhǎng)S5′-LS6′并將其記錄在下一可用的平面對(duì)準(zhǔn)的位置中。因此,第二(P1)和第三(P2)平面或原始區(qū)塊的MP1的存儲(chǔ)器單位中的LS5′和LS6′將被編程到更新區(qū)塊中的下一可用的元頁(yè)MP1′的相應(yīng)平面中。此在MP1′中留下位于前面的未使用的第一平面。
在主機(jī)寫入操作#3中,再次更新邏輯扇區(qū)LS10′并將其作為L(zhǎng)S10″而記錄在更新區(qū)塊的下一平面對(duì)準(zhǔn)位置中。因此,其將被寫入到下一可用的第三平面(將在MP2′中)。此留下MP1′的最后平面和MP2′的前兩個(gè)平面的位于前面的間隙。此將使MP0′中的LS10′過(guò)時(shí)。
在主機(jī)寫入操作#4中,再次更新邏輯扇區(qū)LS10″中的數(shù)據(jù)并將其作為L(zhǎng)S10而記錄在更新區(qū)塊中的元頁(yè)MP2′的下一可用第三平面中。因此,LS10現(xiàn)為邏輯扇區(qū)LS10的最后且唯一有效的版本。此留下由MP2′中的最后平面和MP3′中的前兩個(gè)平面組成的間隙。
在主機(jī)寫入操作#5中,更新邏輯扇區(qū)LS30中的數(shù)據(jù)并將其作為L(zhǎng)S30′而記錄在更新區(qū)塊中。由于原始的LS30駐存在元頁(yè)的P2或第三平面中,所以其將被寫入到更新區(qū)塊中的下一可用的第三平面。在此情況下,其將為MP4′的第三平面。從MP3′的最后平面到MP4′的前兩個(gè)平面產(chǎn)生間隙。因此,此實(shí)例說(shuō)明可以平面對(duì)準(zhǔn)的方式,以任何次序并以任何重復(fù),將邏輯群組內(nèi)的邏輯扇區(qū)寫入在混亂更新區(qū)塊中。在后續(xù)的垃圾收集操作中,將便利地由相同組的感測(cè)電路來(lái)服務(wù)給定邏輯扇區(qū)的所有版本,尤其是最新版本。
具有通過(guò)填補(bǔ)而填充的介入間隙的平面對(duì)準(zhǔn)的混亂更新區(qū)塊圖24C說(shuō)明根據(jù)本發(fā)明的另一優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23B的混亂更新實(shí)例。
此操作與圖24B所示的操作類似,但首先通過(guò)填補(bǔ)來(lái)填充介入間隙。在主機(jī)寫入操作#1中,首先用駐存在原始區(qū)塊中的LS8和LS9的當(dāng)前版本來(lái)填補(bǔ)由元頁(yè)MP0′的第一和第二未使用的平面產(chǎn)生的間隙。此致使原始區(qū)塊中的LS8和LS9過(guò)時(shí)。此時(shí),更新區(qū)塊是循序的更新區(qū)塊,其中以LS8、LS9、LS10′和LS11′的次序填充元頁(yè)MP0′。
在主機(jī)寫入操作#2中,MP1′中位于前面的未使用的第一平面產(chǎn)生間隙,且首先用LS4來(lái)填補(bǔ)間隙。此將致使原始區(qū)塊中的LS4過(guò)時(shí)。與之前一樣,第二寫入將循序更新區(qū)塊轉(zhuǎn)換為混亂更新區(qū)塊。
在主機(jī)寫入操作#3中,MP1′中未使用的最后平面和MP2′的前兩個(gè)平面產(chǎn)生間隙。首先用跟隨著上一已編程的LS6′的LS7來(lái)填補(bǔ)MP1′的最后平面,且用在LS10之前的邏輯單位(即LS8和LS9)來(lái)填補(bǔ)MP2′的前兩個(gè)平面。此將使MP0′中的LS10′和原始區(qū)塊中的LS7-LS9過(guò)時(shí)。
在主機(jī)寫入操作#4中,產(chǎn)生由MP2′中的最后平面和MP3′中的前兩個(gè)平面組成的間隙。由作為元頁(yè)MP2′中跟隨著最后寫入的LS10″的邏輯單位的當(dāng)前版本的LS11′填補(bǔ)MP2′的最后平面。與元頁(yè)MP3′中在LS10之前的邏輯單位一樣,分別由LS8和LS9填補(bǔ)MP3′的前兩個(gè)平面。
在主機(jī)寫入操作#5中,將相應(yīng)地填補(bǔ)(即,分別用LS11′、LS28和LS29)從MP3′的最后平面到MP4′前兩個(gè)平面的間隙。因此,此實(shí)例說(shuō)明可以平面對(duì)準(zhǔn)的方式,以任何次序并以任何重復(fù),將邏輯群組內(nèi)的邏輯扇區(qū)寫入在混亂更新區(qū)塊中。
在優(yōu)選實(shí)施例中,元頁(yè)含有來(lái)自個(gè)別平面的循環(huán)系列的頁(yè)。由于可并行地讀取或編程元頁(yè),所以便利地以元頁(yè)的粒度實(shí)施每一主機(jī)更新。如果存在任何填補(bǔ),那么以逐元頁(yè)的方式與已更新的邏輯單位一起記錄填補(bǔ)。
在圖24A和圖24C的實(shí)例所說(shuō)明的實(shí)施例中,在每一主機(jī)寫入期間,對(duì)在將要編程更新的平面對(duì)準(zhǔn)存儲(chǔ)器單位之前的未使用的存儲(chǔ)器單位執(zhí)行填補(bǔ)。在下一主機(jī)寫入之前,延后跟隨著上一已編程存儲(chǔ)器單位的任何未使用的存儲(chǔ)器單位的動(dòng)作。一般而言,在每一元頁(yè)的邊界內(nèi)填補(bǔ)任何位于前面的未使用的存儲(chǔ)器單位。也就是說(shuō),如果位于前面的間隙跨越兩個(gè)元頁(yè),那么以適合于每一元頁(yè)的邏輯上循序次序?qū)γ恳辉?yè)執(zhí)行填補(bǔ),但不論邊界上的連續(xù)性如何。在合并區(qū)塊的事件中,如果最后寫入的元頁(yè)是部分寫入的話,那么將通過(guò)填補(bǔ)對(duì)其進(jìn)行完全填充。
在另一實(shí)施例中,任何部分填充的元頁(yè)在移動(dòng)到下一元頁(yè)之前被完全填補(bǔ)。
存儲(chǔ)器單位粒度視個(gè)別存儲(chǔ)器結(jié)構(gòu)所支持的適應(yīng)性而定,讀取或編程的單位可能存在變化。個(gè)別平面的獨(dú)立特性允許獨(dú)立地讀取和編程元頁(yè)中個(gè)別平面的每一頁(yè)。上文給出的實(shí)例具有成為每一平面中的頁(yè)的最大編程單位。在元頁(yè)內(nèi),可能進(jìn)行小于所有頁(yè)的局部元頁(yè)編程。例如,可能編程元頁(yè)的前三頁(yè),且接著隨后編程第四頁(yè)。
并且,在平面層級(jí),物理頁(yè)可含有一個(gè)或一個(gè)以上存儲(chǔ)器單位。如果每一存儲(chǔ)器單位可存儲(chǔ)數(shù)據(jù)扇區(qū),那么物理頁(yè)可存儲(chǔ)一個(gè)或一個(gè)以上扇區(qū)。一些存儲(chǔ)器結(jié)構(gòu)支持局部頁(yè)編程,其中可通過(guò)抑制頁(yè)內(nèi)選定的存儲(chǔ)器單位的編程,在多次編程中,在不同的時(shí)間個(gè)別地編程選定的邏輯單位。
在存儲(chǔ)器平面內(nèi)用于邏輯群組的混亂更新的邏輯單位對(duì)準(zhǔn)在區(qū)塊存儲(chǔ)器管理系統(tǒng)中,以邏輯上循序次序?qū)⑦壿媶挝坏倪壿嬋航M存儲(chǔ)在原始區(qū)塊中。在更新邏輯群組時(shí),將邏輯單位的后續(xù)版本存儲(chǔ)在更新區(qū)塊中。如果將邏輯單位混亂地(即,非循序地)存儲(chǔ)在更新區(qū)塊中,那么最終執(zhí)行垃圾收集以收集原始區(qū)塊和更新區(qū)塊中邏輯單位的最新版本,并循序?qū)⑵浜喜⒌叫碌脑紖^(qū)塊中。如果將給定邏輯單位的已更新版本全部存儲(chǔ)在與其原始區(qū)塊中的原始版本對(duì)準(zhǔn)的更新區(qū)塊中,使得相同組的感測(cè)電路可存取所有版本,那么垃圾收集操作將更為有效。
根據(jù)本發(fā)明的另一方面,在上述區(qū)塊存儲(chǔ)器管理系統(tǒng)中,在將存儲(chǔ)器組織成一系列存儲(chǔ)器頁(yè)時(shí)(其中存儲(chǔ)器單位的每一頁(yè)由一組感測(cè)電路并行地服務(wù)),如果給定邏輯單位的所有版本在其被存儲(chǔ)的頁(yè)中全部具有相同的偏移位置,那么所有版本均對(duì)準(zhǔn)。
圖25說(shuō)明每一頁(yè)含有用于存儲(chǔ)兩個(gè)邏輯單位(例如,兩個(gè)邏輯扇區(qū))的兩個(gè)存儲(chǔ)器單位的示范性存儲(chǔ)器組織。在原始區(qū)塊中,由于以邏輯上循序次序存儲(chǔ)邏輯扇區(qū),所以將邏輯扇區(qū)LS0和LS1存儲(chǔ)在頁(yè)P(yáng)0中,將邏輯扇區(qū)LS2和LS3存儲(chǔ)在頁(yè)P(yáng)1中,并將邏輯扇區(qū)LS4和LS5存儲(chǔ)在頁(yè)P(yáng)3中,等等。將看到,在此兩個(gè)扇區(qū)的頁(yè)中,從左邊起第一扇區(qū)的頁(yè)偏移為“0”,且第二扇區(qū)的頁(yè)偏移為“1”。
在更新循序存儲(chǔ)在原始區(qū)塊中的邏輯扇區(qū)的邏輯群組時(shí),將已更新的邏輯扇區(qū)記錄在更新區(qū)塊中。例如,邏輯扇區(qū)LS2駐存在原始區(qū)塊中具有偏移“0”的頁(yè)P(yáng)0中。如果在第一寫入中,如果將LS2更新為L(zhǎng)S2′,那么其將存儲(chǔ)在具有相同頁(yè)偏移“0”的更新區(qū)塊中的第一可用位置。此將處于頁(yè)P(yáng)0′的第一存儲(chǔ)器單位中。如果在第二寫入中,將LS5更新為L(zhǎng)S5′,那么其將存儲(chǔ)在具有相同頁(yè)偏移“1”的更新區(qū)塊中的第一可用位置。此將處于具有頁(yè)P(yáng)1′的偏移“1”的第二存儲(chǔ)器單位中。然而,在存儲(chǔ)LS5′之前,將通過(guò)在其中復(fù)制至少在每一頁(yè)內(nèi)將維持邏輯循序次序的邏輯扇區(qū)的最新版本,首先填補(bǔ)具有P0′中的偏移“1”和P1′中的偏移“0”的未使用的存儲(chǔ)器單位。在此情況下,LS3將被復(fù)制到P0′中偏移“1”位置且LS4復(fù)制到P1′中偏移“0”位置。如果在第三寫入中,再次將LS2′更新為L(zhǎng)S2″,那么其將存儲(chǔ)在P2′的偏移“0”中。如果在第四寫入中,分別將LS22和LS23更新為L(zhǎng)S22′和LS23′,那么其分別將存儲(chǔ)在P3′的偏移“0”和“1”中。然而,在此之前,用LS3填補(bǔ)具有P2′中的偏移“1”的未使用的存儲(chǔ)器單位。
上述更新序列假設(shè)可能在頁(yè)內(nèi)編程個(gè)別扇區(qū)。對(duì)于不支持局部頁(yè)編程的一些存儲(chǔ)器結(jié)構(gòu),必須將頁(yè)內(nèi)的所有扇區(qū)一起編程。在此情況下,在第一寫入中,將LS2′和LS3一起編程到P0′中。在第二寫入中,將LS4和LS5′一起編程到P1′中。在第三寫入中,將LS2″和LS3一起編程到P2′中,等等。
元頁(yè)內(nèi)的平面對(duì)準(zhǔn)或者,編程的單位可具有元頁(yè)的粒度。如果對(duì)混亂更新區(qū)塊進(jìn)行寫入的粒度變成元頁(yè),那么結(jié)合圖16A和圖16B所述的CBI區(qū)塊中的條目可與元頁(yè)有關(guān),而不是與扇區(qū)有關(guān)。增加的粒度減少必須為混亂更新區(qū)塊記錄的條目的數(shù)目,并允許直接消除索引且每一元區(qū)塊使用單一CBI扇區(qū)。
圖26A與圖21的存儲(chǔ)器結(jié)構(gòu)類似,只是每一頁(yè)含有兩個(gè)扇區(qū)而不是一個(gè)。因此,可以看到,元頁(yè)MP0的頁(yè)的每一者現(xiàn)能夠存儲(chǔ)兩個(gè)邏輯單位的數(shù)據(jù)。如果每一邏輯單位是扇區(qū),那么將邏輯扇區(qū)循序存儲(chǔ)在平面P0中LS0和LS1和平面P1中LS2和LS3等的MP0中。
圖26B說(shuō)明圖26A所示的具有以示意線性樣式布局的存儲(chǔ)器單位的元區(qū)塊。與圖21的單一扇區(qū)頁(yè)相比,邏輯扇區(qū)以循環(huán)的方式存儲(chǔ)在每一頁(yè)中具有兩個(gè)扇區(qū)的四個(gè)頁(yè)中。
一般而言,如果存在W個(gè)并行操作的平面且每一頁(yè)存在K個(gè)存儲(chǔ)器單位,且以邏輯上循序次序填充元區(qū)塊,那么元區(qū)塊中第k個(gè)邏輯頁(yè)將駐存在平面x中,其中x=k′MODW,其中k′=INT(k/K)。例如,在四個(gè)平面的情況下,W=4,且每一頁(yè)2個(gè)扇區(qū),K=2,那么對(duì)于k=5(表示第五個(gè)邏輯扇區(qū)LS5),其將駐存在由2 MOD 4給定的平面中(平面2),如圖24A所示。一般而言,相同原理適用于實(shí)施上述的平面對(duì)準(zhǔn)。
上文給出的實(shí)例用于多平面結(jié)構(gòu)中頁(yè)與平面的對(duì)準(zhǔn)。在具有多個(gè)扇區(qū)的頁(yè)的情況下,也維持頁(yè)內(nèi)的扇區(qū)對(duì)準(zhǔn)將較為有利。以此方式,可便利地對(duì)于相同邏輯扇區(qū)的不同版本使用相同組的感測(cè)電路。有效地執(zhí)行例如扇區(qū)的重新定位和“讀取-修改-寫入”的操作。在對(duì)準(zhǔn)頁(yè)內(nèi)的扇區(qū)次序時(shí),可使用與將頁(yè)與平面對(duì)準(zhǔn)相同的技術(shù)。并且視實(shí)施例而定,可能填補(bǔ)或可能不填補(bǔ)任何介入間隙。
不進(jìn)行填補(bǔ)的邏輯單位或平面對(duì)準(zhǔn)圖27說(shuō)明在不填補(bǔ)將要從一個(gè)位置復(fù)制到另一位置的邏輯單位的情況下,在更新區(qū)塊中進(jìn)行平面對(duì)準(zhǔn)的替代方案??蓪⑴c更新區(qū)塊相交的四個(gè)平面的部分視為收集從主機(jī)接收的平面對(duì)準(zhǔn)的已更新邏輯單位的四個(gè)緩沖器。在不在合適緩沖器的下一可用存儲(chǔ)器單位中進(jìn)行填補(bǔ)的情況下,編程從主機(jī)接收的每一邏輯單位。根據(jù)從主機(jī)接收的邏輯單位地址的序列,可能會(huì)有不同數(shù)目的邏輯單位被編程在每一平面中。
混亂更新區(qū)塊MB′1可含有邏輯元頁(yè)的所有邏輯單位的已更新版本,例如對(duì)于MP′0。其還可含有少于元頁(yè)的所有邏輯單位,例如對(duì)于MP′1。在MP′1的情況下,可從相應(yīng)的原始區(qū)塊MB0獲得遺失的邏輯單位LS4。
此替代方案在存儲(chǔ)器結(jié)構(gòu)支持并行讀取每一平面的任意邏輯頁(yè)時(shí)尤其有效。以此方式,即使個(gè)別邏輯頁(yè)不是來(lái)自相同行,也可在單一并行讀取操作中讀取元頁(yè)的所有邏輯頁(yè)。
分階段程序錯(cuò)誤處理當(dāng)區(qū)塊中存在程序失敗時(shí),那么通常將要存儲(chǔ)到區(qū)塊的所有數(shù)據(jù)移動(dòng)到另一區(qū)塊并將失敗的區(qū)塊標(biāo)示為不良。視遇到失敗的操作的定時(shí)規(guī)格而定,可能沒(méi)有足夠的時(shí)間來(lái)另外將存儲(chǔ)的數(shù)據(jù)移動(dòng)到另一區(qū)塊。最壞的情況是在正常垃圾收集操作期間的程序失敗,其中需要另一類似的垃圾收集操作將所有數(shù)據(jù)重新定位到另一區(qū)塊。在此情況下,可能違反給定的主機(jī)/存儲(chǔ)器裝置的規(guī)定的寫入等待時(shí)間限制,因?yàn)樗鱿拗仆ǔ=?jīng)設(shè)計(jì)而容納一次(而非兩次)垃圾收集操作。
圖28說(shuō)明在合并操作期間缺陷區(qū)塊中發(fā)生程序失敗時(shí)在另一區(qū)塊上重復(fù)合并操作的方案。在此實(shí)例中,區(qū)塊1是以邏輯上循序次序存儲(chǔ)邏輯群組的完整邏輯單位的原始區(qū)塊。為了說(shuō)明的目的,原始區(qū)塊含有扇區(qū)A、B、C和D,每一者存儲(chǔ)邏輯單位的子群組。當(dāng)主機(jī)更新群組的特定邏輯單位時(shí),將邏輯單位的較新版本記錄在更新區(qū)塊中,即區(qū)塊2。如先前結(jié)合更新區(qū)塊所描述,視主機(jī)而定,更新可以循序或非循序(混亂)次序來(lái)記錄邏輯單位。最后,因?yàn)楦聟^(qū)塊已滿或一些其它原因而關(guān)閉更新區(qū)塊不再接收進(jìn)一步的更新。當(dāng)更新區(qū)塊(區(qū)塊2)關(guān)閉時(shí),將駐存在更新區(qū)塊或原始區(qū)塊(區(qū)塊1)上的邏輯單位的當(dāng)前版本合并到新的區(qū)塊(區(qū)塊3)上,以便形成邏輯群組的新的原始區(qū)塊。此實(shí)例展示更新區(qū)塊在扇區(qū)B和D中含有邏輯單位的較新版本。為了方便,將扇區(qū)B和D示意地說(shuō)明在區(qū)塊2中未必是其被記錄的位置,而是對(duì)準(zhǔn)其在區(qū)塊1中的原始位置。
在合并操作中,以循序次序?qū)⒃嫉伛v存在區(qū)塊1中的邏輯群組的所有邏輯單位的當(dāng)前版本記錄在合并區(qū)塊(區(qū)塊3)中。因此,首先從區(qū)塊1將扇區(qū)A的邏輯單位復(fù)制到區(qū)塊3,接著從區(qū)塊2將扇區(qū)B復(fù)制到區(qū)塊3。在此實(shí)例中,在從區(qū)塊1將扇區(qū)C的邏輯單位復(fù)制到區(qū)塊3時(shí),區(qū)塊3的缺陷導(dǎo)致程序失敗。
一種處理程序失敗的方式是在全新的區(qū)塊(區(qū)塊4)上重新啟動(dòng)合并程序。因此,將扇區(qū)A、B、C、D復(fù)制到區(qū)塊4上,且接著丟棄缺陷區(qū)塊3。然而,此將意味著前后執(zhí)行兩個(gè)合并操作,此可導(dǎo)致復(fù)制多達(dá)兩個(gè)充滿邏輯單位的區(qū)塊。
存儲(chǔ)器裝置具有完成特定操作的特定時(shí)間容限。例如,在主機(jī)對(duì)存儲(chǔ)器裝置進(jìn)行寫入時(shí),預(yù)計(jì)寫入操作在指定的時(shí)間內(nèi)完成,稱為“寫入等待時(shí)間”。當(dāng)存儲(chǔ)器裝置(例如,存儲(chǔ)卡)正忙于寫入主機(jī)的數(shù)據(jù)時(shí),向主機(jī)發(fā)送信號(hào)“占用”狀態(tài)。如果“占用”狀態(tài)持續(xù)的時(shí)間超過(guò)寫入等待時(shí)間時(shí)段,那么主機(jī)將使寫入操作暫停,并登記寫入操作的例外或錯(cuò)誤。
圖29示意說(shuō)明具有允許足夠時(shí)間完成寫入(更新)操作以及合并操作的定時(shí)或?qū)懭氲却龝r(shí)間的主機(jī)寫入操作。主機(jī)寫入操作具有寫入等待時(shí)間Tw,其將提供足夠的時(shí)間以供完成將主機(jī)數(shù)據(jù)寫入到更新區(qū)塊的更新操作972(圖29(A))。如先前在區(qū)塊管理系統(tǒng)中所描述,對(duì)更新區(qū)塊的主機(jī)寫入可觸發(fā)合并操作。因此,定時(shí)除了更新操作972之外也允許合并操作974(圖29(B))。然而,必須響應(yīng)于失敗的合并操作而再一次重新啟動(dòng)合并操作,這可能花費(fèi)太多時(shí)間并超過(guò)指定的寫入等待時(shí)間。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的存儲(chǔ)器中,通過(guò)繼續(xù)中斷區(qū)塊中的編程操作來(lái)處理時(shí)間緊急的存儲(chǔ)器操作期間區(qū)塊中的程序失敗。稍后,在較不緊急的時(shí)間,將中斷之前記錄在失敗區(qū)塊中的數(shù)據(jù)傳送到也可能是中斷區(qū)塊的另一區(qū)塊。接著可丟棄失敗的區(qū)塊。以此方式,在遇到缺陷區(qū)塊時(shí),可在不損失數(shù)據(jù)且不會(huì)因必須立刻傳送缺陷區(qū)塊中的存儲(chǔ)的數(shù)據(jù)而超過(guò)指定的時(shí)間限制的前提下進(jìn)行處理。此錯(cuò)誤處理對(duì)于垃圾收集操作尤其關(guān)鍵,從而在緊急時(shí)間期間不需要對(duì)嶄新的區(qū)塊重復(fù)整個(gè)操作。隨后,在適宜的時(shí)間,可通過(guò)重新定位到另一區(qū)塊來(lái)挽救來(lái)自缺陷區(qū)塊的數(shù)據(jù)圖30說(shuō)明根據(jù)本發(fā)明一般方案的程序失敗處理的流程圖。
步驟1002將非易失性存儲(chǔ)器組織成區(qū)塊,將每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)邏輯單位的數(shù)據(jù)。
程序失敗處理(第一階段)步驟1012在第一區(qū)塊中存儲(chǔ)邏輯單位的數(shù)據(jù)的序列。
步驟1014響應(yīng)于存儲(chǔ)許多邏輯單位之后第一區(qū)塊處的存儲(chǔ)失敗,在充當(dāng)?shù)谝粎^(qū)塊的中斷區(qū)塊的第二區(qū)塊中存儲(chǔ)后續(xù)的邏輯單位。
程序失敗處理(最后階段)步驟1020響應(yīng)于預(yù)定義的事件,將存儲(chǔ)在第一區(qū)塊中的邏輯單位傳送到第三區(qū)塊,其中第三區(qū)塊與第二區(qū)塊可能相同或可能不同。
步驟1022丟棄第一區(qū)塊。
圖31A說(shuō)明程序失敗處理的一個(gè)實(shí)施例,其中第三(最后的重新定位)區(qū)塊與第二(中斷)區(qū)塊不同。在階段I期間,在第一區(qū)塊上記錄邏輯單位的序列。如果邏輯單位來(lái)自主機(jī)寫入,那么可將第一區(qū)塊視為更新區(qū)塊。如果邏輯單位來(lái)自壓縮操作的合并,那么可將第一區(qū)塊視為重新定位區(qū)塊。如果在某點(diǎn)處在區(qū)塊1中遇到程序失敗,那么提供充當(dāng)中斷區(qū)塊的第二區(qū)塊。將未能記錄在區(qū)塊1中的邏輯單位和任何后續(xù)邏輯單位改為記錄在中斷區(qū)塊上。以此方式,不需要附加的時(shí)間來(lái)取代失敗的區(qū)塊1和駐存在其上的數(shù)據(jù)。
在中間階段II中,可在區(qū)塊1與區(qū)塊2之間取得序列的所有已記錄的邏輯單位。
在最后階段III中,通過(guò)將邏輯單位重新定位到可充當(dāng)重新定位區(qū)塊的區(qū)塊3,取代失敗的區(qū)塊1和駐存在其上的數(shù)據(jù)。因此,挽救了失敗區(qū)塊中的數(shù)據(jù),接著可丟棄失敗的區(qū)塊。對(duì)最后階段進(jìn)行定時(shí),使得其不與任何同時(shí)的存儲(chǔ)器操作的定時(shí)沖突。
在此實(shí)施例中,重新定位區(qū)塊3與中斷區(qū)塊2截然不同。此在中間階段期間已以附加的邏輯單位記錄中斷區(qū)塊時(shí)較為方便。因此,中斷區(qū)塊已變成更新區(qū)塊,且可能不適于將缺陷區(qū)塊1的邏輯單位重新定位到其中。
圖31B說(shuō)明程序失敗處理的另一實(shí)施例,其中第三(最后的重新定位)區(qū)塊與第二(中斷)區(qū)塊相同。階段I和II與圖31A所示的第一實(shí)施例類似。然而,在階段III中,將缺陷區(qū)塊1的邏輯單位重新定位到中斷區(qū)塊2。此在未以先前寫入操作的原始序列以外的附加邏輯單位記錄中斷區(qū)塊2時(shí)較為方便。以此方式,存儲(chǔ)所討論的邏輯單位需要最少的區(qū)塊。
合并期間的程序失敗處理的實(shí)施例程序失敗處理在合并操作期間尤其重要。正常的合并操作將駐存在原始區(qū)塊和更新區(qū)塊中的邏輯群組的所有邏輯單位的當(dāng)前版本合并到合并區(qū)塊中。在合并操作期間,如果合并區(qū)塊中發(fā)生程序失敗,那么將提供充當(dāng)中斷合并區(qū)塊的另一區(qū)塊來(lái)接收其余邏輯單位的合并。以此方式,不必復(fù)制邏輯單位一次以上,且仍可在為正常合并操作指定的時(shí)段內(nèi)完成例外處理的操作。在適宜的時(shí)間,通過(guò)將群組的所有未完成的邏輯單位合并到中斷區(qū)塊中,可完成合并操作。適宜的時(shí)間將是在當(dāng)前主機(jī)寫入操作以外的有時(shí)間執(zhí)行合并的一些其它時(shí)段期間。一個(gè)此適宜的時(shí)間是在存在更新但沒(méi)有關(guān)聯(lián)的合并操作的另一主機(jī)寫入期間。
實(shí)質(zhì)上,可將程序失敗處理的合并視為以多個(gè)階段實(shí)施。在第一階段中,在發(fā)生程序失敗之后,將邏輯單位合并到一個(gè)以上區(qū)塊中以便避免將每一邏輯單位合并一次以上。在適宜的時(shí)間完成最后階段,其中優(yōu)選地通過(guò)以循序次序?qū)⑺羞壿媶挝皇占街袛嗪喜^(qū)塊中,將邏輯群組合并到一個(gè)區(qū)塊中。
圖32A說(shuō)明引起合并操作的初始更新操作的流程圖。
步驟1102將非易失性存儲(chǔ)器組織成區(qū)塊,將每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)邏輯單位的數(shù)據(jù)。
步驟1104將數(shù)據(jù)組織成復(fù)數(shù)個(gè)邏輯群組,每一邏輯群組為可存儲(chǔ)在區(qū)塊中的邏輯單位的群組。
步驟1112接收封裝在邏輯單位中的主機(jī)數(shù)據(jù)。
步驟1114通過(guò)根據(jù)第一次序在第一區(qū)塊中存儲(chǔ)邏輯群組的邏輯單位的第一版本,建立邏輯群組的原始區(qū)塊。
步驟1116通過(guò)根據(jù)第二次序在第二區(qū)塊中存儲(chǔ)包括邏輯群組的邏輯單位的后續(xù)版本,建立邏輯群組的更新區(qū)塊。
步驟1119在如前文段落所描述的某一預(yù)定義的事件時(shí),執(zhí)行垃圾收集以便在各種區(qū)塊中收集邏輯單位的當(dāng)前版本,并將其重新記錄到新的區(qū)塊中。
圖32B說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例多階段合并操作的流程圖。
合并失敗處理(階段I)錯(cuò)誤處理的合并,階段I操作1120包含步驟1122和步驟1124。
步驟1122通過(guò)以與第一次序類似的次序在第三區(qū)塊中存儲(chǔ)邏輯群組的邏輯單位的當(dāng)前版本,建立邏輯群組的合并區(qū)塊。
步驟1124響應(yīng)于合并區(qū)塊的存儲(chǔ)失敗,通過(guò)以與第一次序類似的次序在第四區(qū)塊中存儲(chǔ)第三區(qū)塊所沒(méi)有的邏輯群組的邏輯單位,提供中斷合并區(qū)塊。
由于已將區(qū)塊1和區(qū)塊2中的數(shù)據(jù)傳送到區(qū)塊3和區(qū)塊4,所以可擦除區(qū)塊1和區(qū)塊2以釋放空間。在優(yōu)選實(shí)施例中,可立即將區(qū)塊2釋放到EBL(已擦除的區(qū)塊列表,參看圖18)并重新使用。如果區(qū)塊1為關(guān)閉的更新區(qū)塊且存在相應(yīng)的GAT條目指向的另一區(qū)塊,那么才可釋放區(qū)塊1。
實(shí)質(zhì)上,區(qū)塊3變成邏輯群組的原始區(qū)塊,且區(qū)塊4變成區(qū)塊3的取代循序更新區(qū)塊。
在完成階段I合并之后,存儲(chǔ)器裝置通過(guò)釋放占用信號(hào)而向主機(jī)發(fā)送信號(hào)。
中間操作(階段II)階段II(中間操作1130)可在階段III合并操作1140之前發(fā)生。如步驟1132、1134和1136中任一者所給出,可能存在許多可能的情況。
步驟1132或者在邏輯群組的寫入操作中,對(duì)作為更新區(qū)塊的第四區(qū)塊(中斷合并區(qū)塊)進(jìn)行寫入。
如果主機(jī)對(duì)所討論的邏輯群組進(jìn)行寫入,那么區(qū)塊4(其為中斷合并區(qū)塊且其至此已承擔(dān)取代循序更新區(qū)塊的角色)將用作正常更新區(qū)塊。視主機(jī)寫入而定,其可維持循序或變成混亂狀態(tài)。作為更新區(qū)塊,其將在某點(diǎn)觸發(fā)關(guān)閉另一混亂區(qū)塊,如先前優(yōu)選實(shí)施例所描述。
如果主機(jī)對(duì)另一邏輯群組進(jìn)行寫入,那么直接進(jìn)行到階段III操作。
步驟1134或者在讀取操作中,讀取其中第三區(qū)塊作為邏輯群組的原始區(qū)塊且第四區(qū)塊作為更新區(qū)塊的存儲(chǔ)器。
在此情況下,將從作為邏輯群組的原始區(qū)塊的區(qū)塊3讀取扇區(qū)A和B的邏輯單位,且將從作為群組的更新區(qū)塊的區(qū)塊4讀取扇區(qū)C和D的邏輯單位。由于只可從區(qū)塊3讀取扇區(qū)A和B,所以將無(wú)法存取編程失敗的頁(yè),且無(wú)法存取其后未寫入的部分。雖然尚未更新快閃存儲(chǔ)器中的GAT條目,且GAT條目仍指向作為原始區(qū)塊的區(qū)塊1,但將不從中讀取數(shù)據(jù),且此區(qū)塊本身已在先前被擦除。
另一可能性是主機(jī)讀取邏輯群組中邏輯單位。在此情況下,將從作為邏輯群組原始區(qū)塊的區(qū)塊3讀取扇區(qū)A和B的邏輯單位,且將從作為群組的循序更新區(qū)塊的區(qū)塊4讀取扇區(qū)C和D的邏輯單位。
步驟1136或者在上電初始化中,通過(guò)掃描第一到第四區(qū)塊中的任一者的內(nèi)容來(lái)重新識(shí)別第一到第四區(qū)塊中的任一者。
中間階段的另一可能性是關(guān)閉存儲(chǔ)器裝置的電源,并接著重新啟動(dòng)。如上文所描述,在上電初始化期間,掃描配置區(qū)塊列表中的區(qū)塊(將要使用的擦除集區(qū)的區(qū)塊,參看圖15和圖18)以識(shí)別已成為邏輯群組的特殊狀態(tài)原始區(qū)塊(區(qū)塊3)和關(guān)聯(lián)的循序更新區(qū)塊(區(qū)塊4)的缺陷合并區(qū)塊。中斷區(qū)塊(區(qū)塊4)的第一邏輯單位中的標(biāo)志將指示關(guān)聯(lián)的區(qū)塊為已遭遇程序錯(cuò)誤的原始區(qū)塊(區(qū)塊3)。通過(guò)查閱區(qū)塊目錄(GAT),接著可定位區(qū)塊3。
在一個(gè)實(shí)施例中,將標(biāo)志編程到中斷合并區(qū)塊(區(qū)塊4)中的第一邏輯單位中。此幫助指示邏輯群組的特殊狀態(tài)即,其已被合并到兩個(gè)區(qū)塊(即,區(qū)塊3和區(qū)塊4)中。
使用標(biāo)志來(lái)識(shí)別具有缺陷區(qū)塊的邏輯群組的替代方法是,利用不像原始區(qū)塊應(yīng)為已滿的特性(除非錯(cuò)誤發(fā)生在最后頁(yè)中,且最后頁(yè)沒(méi)有ECC錯(cuò)誤)檢測(cè)在掃描期間為缺陷的區(qū)塊。并且,視實(shí)施方案而定,可能存在關(guān)于存儲(chǔ)在快閃存儲(chǔ)器中的控制數(shù)據(jù)結(jié)構(gòu)中的失敗群組/區(qū)塊的信息記錄,而不只是寫入到中斷合并區(qū)塊(區(qū)塊4)的第一扇區(qū)的標(biāo)題區(qū)域中的標(biāo)志。
合并完成(階段III)步驟1142響應(yīng)于預(yù)定義的事件,且對(duì)于從階段I之后未進(jìn)一步記錄第四區(qū)塊的第一情況,以與第一次序類似的次序,在其中存儲(chǔ)邏輯群組的所有未完成的邏輯單位的當(dāng)前版本;且對(duì)于從階段I之后已進(jìn)一步記錄第四區(qū)塊的第二情況,將第三和第四區(qū)塊合并到第五區(qū)塊中。
步驟1144此后,對(duì)于第一情況,操作存儲(chǔ)器時(shí),以已合并的第四區(qū)塊作為邏輯群組的原始區(qū)塊;且對(duì)于第二情況,操作存儲(chǔ)器時(shí),以第五區(qū)塊作為邏輯群組的原始區(qū)塊。
只要存在不會(huì)違反任何指定時(shí)間限制的機(jī)會(huì),可執(zhí)行階段III中的最后合并。優(yōu)選的情況是,在存在對(duì)另一邏輯群組的不附帶有合并操作的更新操作時(shí),“捎帶(piggy-back)”在下一主機(jī)寫入時(shí)隙上。如果對(duì)于另一邏輯群組的主機(jī)寫入觸發(fā)本身的垃圾收集,那么將使階段III合并延后。
圖33說(shuō)明多階段合并操作的第一和最后階段的示范性定時(shí)。主機(jī)寫入等待時(shí)間是具有時(shí)段TW的每一主機(jī)寫入時(shí)隙的寬度。主機(jī)寫入1是簡(jiǎn)單的更新,且邏輯群組LG1中第一組邏輯單位的當(dāng)前版本記錄在關(guān)聯(lián)的更新區(qū)塊上。
在主機(jī)寫入2,在邏輯群組LG1上發(fā)生更新,致使更新區(qū)塊關(guān)閉(如,已滿)。將提供新的更新區(qū)塊以便記錄其余的更新。提供新的更新區(qū)塊可觸發(fā)垃圾收集,垃圾收集引起對(duì)于LG4的合并操作,以便再循環(huán)區(qū)塊以供重新使用。以循序次序?qū)G4群組的當(dāng)前邏輯單位記錄在合并區(qū)塊上。合并操作繼續(xù)進(jìn)行直到在合并區(qū)塊中遭遇缺陷為止。然后調(diào)用階段I合并,其中合并操作在中斷合并區(qū)塊上繼續(xù)。同時(shí),LG4的最后合并(階段III)等待下一機(jī)會(huì)。
在主機(jī)寫入3,也發(fā)生邏輯群組LG2的邏輯單位的寫入以觸發(fā)LG2的合并。此意味著已經(jīng)完全利用時(shí)隙。
在主機(jī)寫入4,操作只是將LG2的一些邏輯單位記錄到其更新區(qū)塊。時(shí)隙中剩余的時(shí)間提供執(zhí)行LG4的最后合并的機(jī)會(huì)。
不將中斷合并區(qū)塊轉(zhuǎn)換為更新區(qū)塊的實(shí)施例圖34A和圖34B分別說(shuō)明圖28和圖31的實(shí)例適用的多階段合并的階段I和階段III操作的第一情況。
圖34A說(shuō)明中斷合并區(qū)塊不用作更新區(qū)塊而是用作合并操作已中斷的合并區(qū)塊的情況。明確地說(shuō),圖34A表示圖33所示的主機(jī)寫入#2,其中主機(jī)寫入屬于邏輯群組LG1的邏輯單位的更新,且在此期間,此操作也觸發(fā)與另一邏輯群組LG4關(guān)聯(lián)的區(qū)塊的合并。
原始區(qū)塊(區(qū)塊1)和更新區(qū)塊(區(qū)塊2)的形成方式與圖28的實(shí)例相同。類似地,在合并操作期間,已知合并區(qū)塊(區(qū)塊3)在合并扇區(qū)C的邏輯單位時(shí)具有缺陷。然而,不像圖28所示的重新合并方案,本多階段方案在充當(dāng)中斷合并區(qū)塊的新提供的區(qū)塊(區(qū)塊4)上繼續(xù)合并操作。因此,在階段I合并操作中,已在合并區(qū)塊(區(qū)塊3)中合并扇區(qū)A和B中的邏輯單位。當(dāng)合并區(qū)塊中發(fā)生程序失敗時(shí),循序?qū)⑸葏^(qū)C和D中其余的邏輯單位復(fù)制到中斷合并區(qū)塊(區(qū)塊4)。
如果主機(jī)原始地在第一邏輯群組中寫入更新而觸發(fā)與第二邏輯群組關(guān)聯(lián)的區(qū)塊的合并操作,那么將第一邏輯群組的更新記錄到第一邏輯群組的更新區(qū)塊(通常為新的更新區(qū)塊)中。此時(shí),中斷合并區(qū)塊(區(qū)塊4)不用來(lái)記錄合并操作以外的任何更新數(shù)據(jù)并仍然是尚待完成的中斷合并區(qū)塊。
由于區(qū)塊1和區(qū)塊2中的數(shù)據(jù)現(xiàn)完全包含在另一區(qū)塊(區(qū)塊3和區(qū)塊4)中,所以可將其擦除以便再循環(huán)。地址表(GAT)經(jīng)更新以指向作為邏輯群組的原始區(qū)塊的區(qū)塊3。更新區(qū)塊的目錄信息(在ACL中,參看圖15和圖18)也經(jīng)更新以指向已成為邏輯群組(例如,LG4)的循序更新區(qū)塊的區(qū)塊4。
結(jié)果,已合并的邏輯群組不局限在一個(gè)區(qū)塊中,而是分布在缺陷合并區(qū)塊(區(qū)塊3)和中斷合并區(qū)塊(區(qū)塊4)上。此方案的重要特征是,群組中的邏輯單位只在此階段期間合并一次,以將合并散布在一個(gè)以上區(qū)塊為代價(jià)。以此方式,可在正常指定的時(shí)間內(nèi)完成合并操作。
圖34B說(shuō)明始于圖34A的多階段合并的第三和最后階段。如結(jié)合圖33所描述,在第一階段之后的適宜時(shí)間(例如,在不觸發(fā)隨附合并操作的后續(xù)主機(jī)寫入期間)執(zhí)行階段III合并。明確地說(shuō),圖34B表示發(fā)生圖33所示的主機(jī)寫入#4的時(shí)隙。在此時(shí)段期間,主機(jī)寫入更新屬于邏輯群組LG2的邏輯單位而不會(huì)觸發(fā)另一附加的合并操作。因此,可便利地利用時(shí)隙中剩余的時(shí)間來(lái)進(jìn)行階段III操作,以便完成邏輯群組LG4的合并。
此操作將尚不處于中斷區(qū)塊中的LG4的所有未完成的邏輯單位合并到中斷區(qū)塊中。在此實(shí)例中,這意味著將從區(qū)塊3以邏輯上循序次序?qū)⑸葏^(qū)A和B復(fù)制到中斷區(qū)塊(區(qū)塊4)。由于區(qū)塊中邏輯單位的繞回方案和使用頁(yè)標(biāo)記(參看圖3A),即使實(shí)例展示在區(qū)塊4中,在扇區(qū)C和D之后記錄扇區(qū)A和B,但也將已記錄的序列視為等同于A、B、C、D的循序次序。視實(shí)施方案而定,優(yōu)選地從區(qū)塊3獲得將要復(fù)制的未完成的邏輯單位的當(dāng)前版本,因?yàn)槠湟褳橐押喜⒌男问?,但也可從尚未被擦除的區(qū)塊1和區(qū)塊2中收集。
在中斷區(qū)塊(區(qū)塊4)上完成最后合并之后,其將被指定為邏輯群組的原始區(qū)塊,且將相應(yīng)地更新合適的目錄(例如,GAT,參看圖17A)。類似地,將失敗的物理區(qū)塊(區(qū)塊3)標(biāo)示為不良并將其排除。其它區(qū)塊(區(qū)塊1和區(qū)塊2)將被擦除并再循環(huán)。同時(shí),將LG2的更新記錄在與LG2關(guān)聯(lián)的更新區(qū)塊中。
將中斷合并區(qū)塊變成更新區(qū)塊的實(shí)施例圖35A和圖35B分別說(shuō)明圖28和圖33的實(shí)例適用的多階段合并的階段I和階段III操作的第二情況。
圖35A說(shuō)明將中斷合并區(qū)塊維持為接收主機(jī)寫入的更新區(qū)塊而不是合并區(qū)塊的情況。此適用于(例如)更新邏輯群組LG4的主機(jī)寫入,且在此過(guò)程中,也觸發(fā)相同邏輯群組中的合并。
與圖34A的情況一樣,繼續(xù)將區(qū)塊1和區(qū)塊2合并到區(qū)塊3上,直到在處理扇區(qū)C時(shí)遇到程序失敗為止。接著在中斷合并區(qū)塊(區(qū)塊4)上繼續(xù)合并。在中斷區(qū)塊(區(qū)塊4)中已合并未完成的邏輯單位(例如,在扇區(qū)C和D中)之后,并在階段III中等待完成其中的邏輯群組合并,而是將中斷區(qū)塊維持為更新區(qū)塊。此情況尤其適于主機(jī)寫入更新邏輯群組并觸發(fā)相同邏輯群組的合并的情況。在此實(shí)例中,此使得能夠?qū)⑦壿嬋航MLG4的主機(jī)更新的記錄記錄在中斷合并區(qū)塊(區(qū)塊4)中,而不是記錄到新的更新區(qū)塊。更新區(qū)塊(先前為中斷合并區(qū)塊(區(qū)塊4))可視其中所記錄的主機(jī)數(shù)據(jù)而定為循序的或變得混亂。在所示的實(shí)例中,區(qū)塊4已變得混亂,因?yàn)樯葏^(qū)C中邏輯單位的后續(xù)較新版本使得區(qū)塊4中的先前版本過(guò)時(shí)。
在中間階段期間,區(qū)塊3將被視為L(zhǎng)G4的原始區(qū)塊,且區(qū)塊4將為關(guān)聯(lián)的更新區(qū)塊。
圖35B說(shuō)明始于第二情況的圖35A的多階段合并的第三和最后階段。如結(jié)合圖33所描述,在第一階段之后的適宜時(shí)間(例如,在不觸發(fā)隨附合并操作的后續(xù)主機(jī)寫入期間)執(zhí)行階段III合并。在此時(shí)段期間,主機(jī)寫入更新屬于邏輯群組的邏輯單位而不會(huì)觸發(fā)合并操作。因此,可便利地利用時(shí)隙中剩余的時(shí)間來(lái)進(jìn)行階段III操作,以便完成邏輯群組LG4的合并。
接著從區(qū)塊3和區(qū)塊4將邏輯群組LG4的垃圾收集到新的合并區(qū)塊(區(qū)塊5)。接著將區(qū)塊3標(biāo)示為不良,將區(qū)塊4再循環(huán),且新的合并區(qū)塊(區(qū)塊5)將變成邏輯群組LG4的新的原始區(qū)塊。其它區(qū)塊(區(qū)塊1和區(qū)塊2)也會(huì)被擦除并再循環(huán)。
分階段程序失敗處理的其它實(shí)施例圖31A、圖31B、圖34A、圖34B、圖35A和圖35B中所描述的實(shí)例適用于優(yōu)選的區(qū)塊管理系統(tǒng),其中每一物理區(qū)塊(元區(qū)塊)僅存儲(chǔ)屬于相同邏輯群組的邏輯單位。本發(fā)明同樣適用于不存在邏輯群組到物理區(qū)塊對(duì)準(zhǔn)的其它區(qū)塊管理系統(tǒng),例如WO 03/027828和WO 00/49488中所揭示的區(qū)塊管理系統(tǒng)。圖36A、圖36B和圖36C中說(shuō)明在這些其它系統(tǒng)中實(shí)施分階段程序失敗處理方法的一些實(shí)例。
圖36A說(shuō)明如適用于主機(jī)寫入觸發(fā)更新區(qū)塊的關(guān)閉且更新區(qū)塊為循序的情況的分階段程序錯(cuò)誤處理方法。此情況中的關(guān)閉通過(guò)將原始區(qū)塊2的其余的有效數(shù)據(jù)(B和C)復(fù)制到循序更新區(qū)塊3而完成。在數(shù)據(jù)部分C編程開始時(shí)發(fā)生程序失敗的情況下,將把部分C編程到保留的區(qū)塊4。接著可將新的主機(jī)數(shù)據(jù)寫入到新的更新區(qū)塊5(未圖示)。此方法的階段II和III與混亂區(qū)塊關(guān)閉的情況相同。
圖36B說(shuō)明如可適合用于更新區(qū)塊的更新的情況中(局部區(qū)塊系統(tǒng))的分階段程序錯(cuò)誤處理方法。在此情況下,將邏輯群組存儲(chǔ)在原始區(qū)塊1和其它更新區(qū)塊中。合并操作包括從原始區(qū)塊1和其它更新區(qū)塊2將數(shù)據(jù)復(fù)制到更新區(qū)塊的一者(根據(jù)一些規(guī)則選定,圖中的區(qū)塊3)。與已描述的主要情況的區(qū)別在于,區(qū)塊3已被部分地寫入。
圖36C說(shuō)明處理垃圾收集操作的分階段程序錯(cuò)誤,或不支持映射到元區(qū)塊的邏輯群組的存儲(chǔ)器區(qū)塊管理系統(tǒng)中的清除。WO 03/027828 A1中描述了此存儲(chǔ)器區(qū)塊管理(循環(huán)存儲(chǔ))系統(tǒng)。循環(huán)存儲(chǔ)系統(tǒng)的明顯的特征是不為單一邏輯群組配置區(qū)塊。支持元區(qū)塊中控制數(shù)據(jù)的多個(gè)邏輯編組。垃圾收集涉及從部分過(guò)時(shí)的區(qū)塊將可能沒(méi)有任何關(guān)系(隨機(jī)邏輯區(qū)塊地址)的有效數(shù)據(jù)扇區(qū)取到可能已具有某些數(shù)據(jù)的重新定位區(qū)塊。如果重新定位區(qū)塊在操作期間變滿,那么將開啟另一區(qū)塊。
非循序更新區(qū)塊索引在上文關(guān)于混亂區(qū)塊索引并結(jié)合圖16A到圖16E的段落中,CBI扇區(qū)可用來(lái)存儲(chǔ)追蹤隨機(jī)地存儲(chǔ)在混亂或非循序更新區(qū)塊中的邏輯扇區(qū)的位置的索引。
根據(jù)本發(fā)明的另一方面,在具有支持具有非循序邏輯單位的更新區(qū)塊的區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,將緩沖在RAM中的更新區(qū)塊中的邏輯單位的索引周期性地存儲(chǔ)在非易失性存儲(chǔ)器中。在一個(gè)實(shí)施例中,將索引存儲(chǔ)在專用于存儲(chǔ)索引的區(qū)塊中。在另一實(shí)施例中,將索引存儲(chǔ)在更新區(qū)塊中。在又一實(shí)施例中,將索引存儲(chǔ)在每一邏輯單位的標(biāo)題中。在另一方面,在上一索引更新之后但在下一索引更新之前寫入的邏輯單位將其索引信息存儲(chǔ)在每一邏輯單位的標(biāo)題中。以此方式,在電源中斷之后,不必在初始化期間執(zhí)行掃描,即可確定最近寫入的邏輯單位的位置。在又一方面,將區(qū)塊管理成部分循序且部分非循序,指向一個(gè)以上邏輯子群組。
在預(yù)定觸發(fā)事件之后存儲(chǔ)在CBI區(qū)塊中的CBI扇區(qū)中的索引指針根據(jù)結(jié)合圖16A到圖16E所描述的方案,將混亂區(qū)塊中最近寫入的扇區(qū)的列表保存在控制器RAM中。只在與給定的混亂區(qū)塊關(guān)聯(lián)的邏輯群組中的預(yù)定數(shù)目的寫入之后,才將含有最新索引信息的CBI扇區(qū)寫入到快閃存儲(chǔ)器(CBI區(qū)塊620)。以此方式,縮減對(duì)CBI區(qū)塊進(jìn)行的更新的數(shù)目。
在邏輯群組的CBI扇區(qū)的下一更新之前,將邏輯群組的最近寫入的扇區(qū)的列表保存在控制器RAM中。此列表在存儲(chǔ)器裝置遭遇電源關(guān)閉時(shí)遺失,但可在電源啟動(dòng)之后的初始化中通過(guò)掃描已更新區(qū)塊而得以重建。
圖37說(shuō)明在相同邏輯群組的每N個(gè)扇區(qū)寫入之后將CBI扇區(qū)寫入到關(guān)聯(lián)的混亂索引扇區(qū)區(qū)塊的程序安排的實(shí)例。此實(shí)例展示進(jìn)行同時(shí)更新的兩個(gè)邏輯群組LG3和LG11。最初,將LG3的邏輯扇區(qū)以循序次序存儲(chǔ)在原始區(qū)塊中。以主機(jī)指定的次序?qū)⑷航M中邏輯扇區(qū)的更新記錄在關(guān)聯(lián)的更新區(qū)塊上。此實(shí)例展示混亂更新序列。同時(shí),也以與其更新區(qū)塊類似的方式更新邏輯群組LG11。在每一邏輯扇區(qū)寫入之后,將其在更新區(qū)塊中的位置保存在控制器RAM中。在每一預(yù)定的觸發(fā)事件之后,以混亂索引扇區(qū)的形式將更新區(qū)塊中邏輯扇區(qū)的當(dāng)前索引寫入到非易失性混亂索引扇區(qū)區(qū)塊。例如,在每N個(gè)寫入之后發(fā)生預(yù)定的觸發(fā)事件,其中N可能為3。
雖然給出的實(shí)例關(guān)于作為扇區(qū)的數(shù)據(jù)邏輯單位,但所屬領(lǐng)域的技術(shù)人員將了解,邏輯單位可為一些其它集合體,例如含有扇區(qū)或扇區(qū)群組的頁(yè)。并且,循序區(qū)塊中的第一頁(yè)不一定是邏輯頁(yè)0,因?yàn)槔@回的頁(yè)標(biāo)記可能在適當(dāng)位置。
在預(yù)定觸發(fā)事件之后存儲(chǔ)在混亂更新區(qū)塊中的CBI扇區(qū)中的索引指針在另一實(shí)施例中,在其中每N個(gè)寫入之后,將索引指針存儲(chǔ)在混亂更新區(qū)塊本身中的專用CBI扇區(qū)中。此方案與先前描述的也將索引存儲(chǔ)在CBI扇區(qū)中的實(shí)施例類似。區(qū)別在于,在先前的實(shí)施例中,將CBI扇區(qū)記錄在CBI扇區(qū)區(qū)塊中,而不是更新區(qū)塊本身中。
此方法基于將所有混亂區(qū)塊索引信息保存在混亂更新區(qū)塊本身中。圖37A、圖37B和圖37C分別說(shuō)明同樣以三個(gè)不同階段存儲(chǔ)CBI扇區(qū)的更新區(qū)塊的狀態(tài)。
圖38A說(shuō)明直到在預(yù)定數(shù)目的寫入之后在其中記錄CBI扇區(qū)時(shí)的更新區(qū)塊。在此實(shí)例中,在主機(jī)已循序?qū)懭脒壿嬌葏^(qū)0-3之后,其接著發(fā)布再次寫入邏輯扇區(qū)1的另一版本的命令,因此破壞數(shù)據(jù)寫入的連續(xù)序列。接著實(shí)施CBI扇區(qū)中載送的混亂區(qū)塊索引,將更新區(qū)塊轉(zhuǎn)換為混亂更新區(qū)塊。如上文所描述,CBI是含有混亂區(qū)塊的所有邏輯扇區(qū)的索引的索引。例如,第0個(gè)條目表示第0個(gè)邏輯扇區(qū)的更新區(qū)塊的偏移,且類似地,第n個(gè)條目表示第n個(gè)邏輯扇區(qū)的偏移。將CBI扇區(qū)寫入到更新區(qū)塊中的下一可用位置。為了避免頻繁的快閃存取,在每N個(gè)數(shù)據(jù)扇區(qū)寫入之后寫入CBI扇區(qū)。在此實(shí)例中,N為4。如果此時(shí)損失電源,那么最后寫入的扇區(qū)將為CBI扇區(qū),且此區(qū)塊將被視為混亂更新區(qū)塊。
圖38B說(shuō)明圖38A的更新區(qū)塊在索引扇區(qū)之后進(jìn)一步在其中記錄邏輯扇區(qū)1、2和4。邏輯扇區(qū)1和2的較新版本取代先前記錄在更新區(qū)塊中的較舊版本。此時(shí)在電源周期的情況下,必須首先找到最后寫入的扇區(qū),且接著必須掃描多達(dá)N個(gè)扇區(qū)以便找到最后寫入的索引扇區(qū)和最近寫入的數(shù)據(jù)扇區(qū)。
圖38C說(shuō)明圖38B的更新區(qū)塊寫入另一邏輯扇區(qū)以觸發(fā)索引扇區(qū)的下一記錄。另外N個(gè)(N=4)扇區(qū)寫入之后的相同更新區(qū)塊記錄CBI扇區(qū)的另一當(dāng)前版本。
此方案的優(yōu)點(diǎn)是不需要分離的CBI區(qū)塊。同時(shí),不必?fù)?dān)心物理快閃扇區(qū)的額外開銷數(shù)據(jù)區(qū)域是否足夠大而容納混亂更新區(qū)塊中有效扇區(qū)的索引所需要的數(shù)目的條目。接著,混亂更新區(qū)塊含有所有的信息,且地址轉(zhuǎn)換不需要外部數(shù)據(jù)。此使算法比較簡(jiǎn)單,縮減關(guān)于CBI區(qū)塊壓縮的控制更新的數(shù)目且級(jí)聯(lián)(cascade)控制更新較短。(參看上文關(guān)于CBI區(qū)塊管理的段落)。
關(guān)于存儲(chǔ)在混亂更新區(qū)塊中的數(shù)據(jù)扇區(qū)標(biāo)題中的最近寫入的扇區(qū)的信息根據(jù)本發(fā)明的另一方面,在每N個(gè)寫入之后,將記錄在區(qū)塊中的邏輯單位的索引存儲(chǔ)在非易失性存儲(chǔ)器中,且將關(guān)于中間寫入的邏輯單位的當(dāng)前信息存儲(chǔ)在寫入的每一邏輯單位的額外開銷部分中。以此方式,在電源重新啟動(dòng)之后,不必掃描區(qū)塊,即可從區(qū)塊中最后寫入的邏輯單位的額外開銷部分快速獲得關(guān)于從上一索引更新之后寫入的邏輯單位的信息。
圖39A說(shuō)明存儲(chǔ)在混亂更新區(qū)塊中每一數(shù)據(jù)扇區(qū)的標(biāo)題中的中間寫入的中間索引。
圖39B說(shuō)明在寫入的每一扇區(qū)的標(biāo)題中存儲(chǔ)中間寫入的中間索引的實(shí)例。在此實(shí)例中,在已寫入四個(gè)扇區(qū)LS0-LS3之后,寫入CBI索引作為區(qū)塊中的下一扇區(qū)。其后,將邏輯扇區(qū)LS′1、LS′2和LS4寫入到區(qū)塊。每次,標(biāo)題將存儲(chǔ)從上一CBI索引之后寫入的邏輯單位的中間索引。因此,LS′2中的標(biāo)題將具有給出上一CBI索引的偏移(即,位置)以及LS′1的偏移的索引。類似地,LS4中的標(biāo)題將具有給出上一CBI索引的偏移以及LS′1和LS′2的偏移的索引。
最后寫入的數(shù)據(jù)扇區(qū)始終含有關(guān)于多達(dá)N個(gè)最后寫入的頁(yè)的信息(即,一直到最后寫入的CBI扇區(qū))。只要電源重新啟動(dòng),上一CBI索引提供在CBI索引扇區(qū)之前寫入的邏輯單位的索引信息,且在最后寫入的數(shù)據(jù)扇區(qū)的標(biāo)題中找到寫入的后續(xù)邏輯單位的索引信息。此優(yōu)點(diǎn)在于在初始化時(shí)不必為其后寫入的扇區(qū)掃描區(qū)塊以確定其位置。
在數(shù)據(jù)扇區(qū)的標(biāo)題中存儲(chǔ)中間索引信息的方案同樣適用于無(wú)論CBI索引扇區(qū)存儲(chǔ)在更新區(qū)塊本身中還是存儲(chǔ)在分離的CBI扇區(qū)區(qū)塊中,如前文段落中所描述。
存儲(chǔ)在混亂更新區(qū)塊中的數(shù)據(jù)扇區(qū)標(biāo)題中的索引指針在另一實(shí)施例中,將整個(gè)CBI索引存儲(chǔ)在混亂更新區(qū)塊中每一數(shù)據(jù)扇區(qū)的額外開銷部分中。
圖40說(shuō)明存儲(chǔ)在混亂更新區(qū)塊中的每一數(shù)據(jù)扇區(qū)標(biāo)題中的混亂索引字段中的信息。
扇區(qū)標(biāo)題的信息容量有限,且因此可將由任何單一扇區(qū)提供的索引范圍設(shè)計(jì)為層級(jí)索引方案的一部分。例如,存儲(chǔ)器的特定平面內(nèi)的扇區(qū)可僅向平面內(nèi)的扇區(qū)提供索引。并且,可將邏輯地址的范圍劃分成許多子范圍以允許采用間接索引方案。例如,如果將具有64個(gè)邏輯地址的扇區(qū)存儲(chǔ)在平面中,那么每一扇區(qū)可具有用于扇區(qū)偏移值的3個(gè)字段,每一字段能夠存儲(chǔ)4個(gè)偏移值。第一字段定義邏輯偏移范圍0-15、15-31、32-47和48-63內(nèi)最后寫入的扇區(qū)的物理偏移。第二字段定義在其相關(guān)范圍內(nèi)每一4個(gè)扇區(qū)的4個(gè)子范圍的物理偏移值。第三字段定義在其相關(guān)子范圍內(nèi)4個(gè)扇區(qū)的物理偏移值。因此,通過(guò)讀取多達(dá)3個(gè)扇區(qū)的間接偏移值,可確定混亂更新區(qū)塊內(nèi)邏輯扇區(qū)的物理偏移。
此方案的優(yōu)點(diǎn)是也不需要分離的CBI區(qū)塊或CBI扇區(qū)。然而,此可能只有當(dāng)物理快閃扇區(qū)的額外開銷數(shù)據(jù)區(qū)域足夠大而容納混亂更新區(qū)塊中有效扇區(qū)的索引所需要的數(shù)目的條目時(shí)才適用。
混亂更新區(qū)塊的邏輯群組內(nèi)有限的邏輯范圍在邏輯群組內(nèi),縮減可非循序地寫入的扇區(qū)的邏輯范圍。此技術(shù)的主要優(yōu)點(diǎn)為由于只需要讀取一個(gè)多扇區(qū)頁(yè)(在多芯片的情況下,可并行讀取頁(yè))來(lái)獲得目的地頁(yè)的所有數(shù)據(jù)(假設(shè)源與目的地對(duì)準(zhǔn),如果未對(duì)準(zhǔn),那么可能需要另一讀取),使得可更快速地完成循序?qū)懭氲臄?shù)據(jù)的復(fù)制,所以范圍以外的扇區(qū)在原始區(qū)塊中保持循序?qū)懭?,且垃圾收集操作可在更短的時(shí)間內(nèi)完成。并且,可使用芯片上的副本特征,將循序數(shù)據(jù)從源復(fù)制到目的地,而不需要在控制器之間來(lái)回傳送數(shù)據(jù)。如果源數(shù)據(jù)已分散(如混亂區(qū)塊中所發(fā)生),那么可能需要每一扇區(qū)讀取多達(dá)一個(gè)頁(yè)以便收集將要寫入到目的地的所有扇區(qū)。
在一個(gè)實(shí)施例中,不是完全地將邏輯范圍限制為某數(shù)目的扇區(qū),而是通過(guò)限制CBI的數(shù)目來(lái)完成(只限制大群組/元區(qū)塊的混亂范圍較合理,此需要多個(gè)混亂區(qū)塊索引來(lái)覆蓋整個(gè)邏輯群組的范圍)。例如,如果元區(qū)塊/群組具有2048個(gè)扇區(qū),那么其將需要多達(dá)8個(gè)CBI扇區(qū),每一CBI扇區(qū)覆蓋256個(gè)扇區(qū)的一個(gè)子群組的連續(xù)邏輯范圍。如果將CBI的數(shù)目限制為4,那么混亂區(qū)塊可用來(lái)寫入多達(dá)4個(gè)子群組的扇區(qū)(其中任何一個(gè))。因此,允許邏輯群組具有多達(dá)4個(gè)部分或完全混亂的子群組,且最少有4個(gè)子群組將保持完全循序。如果混亂區(qū)塊具有與其關(guān)聯(lián)的4個(gè)有效CBI扇區(qū),且主機(jī)寫入在這些CBI扇區(qū)范圍以外(混亂子群組)的扇區(qū),那么應(yīng)合并并關(guān)閉混亂邏輯群組。但這極不可能發(fā)生,因?yàn)樵趯?shí)際應(yīng)用中,主機(jī)在2048個(gè)扇區(qū)的范圍(邏輯群組)內(nèi)不需要多于4個(gè)的256個(gè)扇區(qū)的混亂范圍(子群組)。因此,在正常情況下,垃圾收集時(shí)間也不會(huì)受到影響,但限制規(guī)則的防范形成垃圾收集太長(zhǎng)(可能觸發(fā)主機(jī)的逾時(shí))的極端情況。
部分循序混亂更新區(qū)塊的索引當(dāng)循序更新區(qū)塊在將區(qū)塊轉(zhuǎn)換為混亂管理模式之前已被部分地寫入時(shí),邏輯群組的已循序更新的扇區(qū)的全部或部分可繼續(xù)被視為已循序更新,且可將混亂更新管理僅應(yīng)用于邏輯群組的地址范圍的子集。
控制數(shù)據(jù)完整性&管理存儲(chǔ)在存儲(chǔ)器裝置中的數(shù)據(jù)可能因?yàn)殡娫粗袛嗷蛱囟ù鎯?chǔ)器位置變得有缺陷被破壞。如果遭遇存儲(chǔ)器區(qū)塊缺陷,那么將數(shù)據(jù)重新定位到不同的區(qū)塊并將缺陷區(qū)塊丟棄。如果錯(cuò)誤不擴(kuò)大,那么可通過(guò)與數(shù)據(jù)一起保存的錯(cuò)誤校正碼(ECC)在運(yùn)行中進(jìn)行校正。然而,存在ECC無(wú)法校正已破壞數(shù)據(jù)的情況。例如,當(dāng)錯(cuò)誤位的數(shù)目超過(guò)ECC的容量時(shí)。此對(duì)于例如與存儲(chǔ)器區(qū)塊管理系統(tǒng)關(guān)聯(lián)的控制數(shù)據(jù)的關(guān)鍵數(shù)據(jù)是無(wú)法接受的。
控制數(shù)據(jù)的實(shí)例為目錄信息和與存儲(chǔ)器區(qū)塊管理系統(tǒng)關(guān)聯(lián)的區(qū)塊配置信息,例如結(jié)合圖20所描述。如上文所描述,將控制數(shù)據(jù)維持在高速RAM和較慢的非易失性存儲(chǔ)器區(qū)塊中。將任何經(jīng)常變更的控制數(shù)據(jù)維持在具有周期性控制寫入的RAM中以便更新存儲(chǔ)在非易失性元區(qū)塊中的同等的信息。以此方式,將控制數(shù)據(jù)存儲(chǔ)在非易失性但較慢的快閃存儲(chǔ)器中而不需要經(jīng)常存取。例如圖20所示的GAT、CBI、MAP和MAPA的控制數(shù)據(jù)結(jié)構(gòu)的層級(jí)維持在快閃存儲(chǔ)器中。因此,控制寫入操作促使RAM中控制數(shù)據(jù)結(jié)構(gòu)的信息更新快閃存儲(chǔ)器中同等的控制數(shù)據(jù)結(jié)構(gòu)。
關(guān)鍵數(shù)據(jù)復(fù)制根據(jù)本發(fā)明的另一方面,如果一式兩份地維持例如控制數(shù)據(jù)的一些或全部的關(guān)鍵數(shù)據(jù),那么保證額外等級(jí)的可靠性。以一方式執(zhí)行復(fù)制,使得對(duì)于使用兩次編程技術(shù)來(lái)連續(xù)地編程相同組的存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,第二次中的任何編程錯(cuò)誤將不破壞第一次建立的數(shù)據(jù)。復(fù)制也有助于檢測(cè)寫入中止、檢測(cè)誤測(cè)(即,兩個(gè)副本均具有良好的ECC但數(shù)據(jù)不同),并增加額外等級(jí)的可靠性。已考慮數(shù)據(jù)復(fù)制的若干技術(shù)。
在一個(gè)實(shí)施例中,在稍早的一次編程中已編程給定數(shù)據(jù)的兩個(gè)副本之后,后續(xù)的一次編程避免編程存儲(chǔ)兩個(gè)副本中的至少一個(gè)的存儲(chǔ)器單元。以此方式,在后續(xù)的一次編程在完成之前中止并破壞稍早的一次的數(shù)據(jù)的事件中,兩個(gè)副本中至少一個(gè)不會(huì)受到影響。
在另一實(shí)施例中,給定數(shù)據(jù)的兩個(gè)副本存儲(chǔ)在兩個(gè)不同的區(qū)塊中,其中兩個(gè)副本中至多一個(gè)的存儲(chǔ)器單元在后續(xù)的一次編程中被編程。
在又一實(shí)施例中,在一次編程中已存儲(chǔ)給定數(shù)據(jù)的兩個(gè)副本之后,將不再對(duì)存儲(chǔ)兩個(gè)副本的存儲(chǔ)器單元組執(zhí)行進(jìn)一步編程??赏ㄟ^(guò)存儲(chǔ)器單元組的最終一次編程中編程兩個(gè)副本來(lái)達(dá)成此目的。
在又一實(shí)施例中,可在二進(jìn)制編程模式中將給定數(shù)據(jù)的兩個(gè)副本編程到多狀態(tài)存儲(chǔ)器中,從而將不會(huì)對(duì)已編程的存儲(chǔ)器單元進(jìn)行進(jìn)一步編程。
在又一實(shí)施例中,對(duì)于使用兩次編程技術(shù)來(lái)連續(xù)地編程相同組的存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,使用容錯(cuò)碼來(lái)編碼多個(gè)存儲(chǔ)器狀態(tài),從而稍早的一次編程所建立的數(shù)據(jù)不會(huì)受到后續(xù)的一次編程中的錯(cuò)誤的影響。
在每一存儲(chǔ)器單元存儲(chǔ)一位以上數(shù)據(jù)的多狀態(tài)存儲(chǔ)器中引發(fā)數(shù)據(jù)復(fù)制的復(fù)雜性。例如,4狀態(tài)存儲(chǔ)器可由兩個(gè)位表示。一種現(xiàn)有的技術(shù)是使用2次編程來(lái)編程此存儲(chǔ)器。第一位(下頁(yè)位)由第一次編程進(jìn)行編程。隨后,在第二次編程中編程相同單元以表示所要的第二位(上頁(yè)位)。為了不改變第二次編程中第一位的值,使第一位的存儲(chǔ)器狀態(tài)表示依賴于第二位的值。因此,在第二位的編程期間,如果因電源中斷或其它原因而發(fā)生錯(cuò)誤并造成不正確的存儲(chǔ)器狀態(tài),那么也會(huì)破壞第一位的值。
圖41A說(shuō)明當(dāng)每一存儲(chǔ)器單元存儲(chǔ)兩個(gè)位的數(shù)據(jù)時(shí),4狀態(tài)存儲(chǔ)器陣列的閾值電壓分布。四個(gè)分布表示四個(gè)存儲(chǔ)器狀態(tài)“U”、“X”、“Y”和“Z”的總體。在編程存儲(chǔ)器單元之前,首先將其擦除到其“U“或“未寫入”狀態(tài)。隨著存儲(chǔ)器單元逐漸被編程,累進(jìn)地達(dá)到存儲(chǔ)器狀態(tài)“X”、“Y”和“Z”。
圖41B說(shuō)明使用葛萊碼的現(xiàn)有的2次編程方案。四個(gè)狀態(tài)可由兩個(gè)位表示,下頁(yè)位和上頁(yè)位,例如(上頁(yè)位,下頁(yè)位)。對(duì)于將要并行編程的單元的頁(yè),實(shí)際上存在兩個(gè)邏輯頁(yè)邏輯下頁(yè)和邏輯上頁(yè)。第一次編程只編程邏輯下頁(yè)。通過(guò)合適的編碼,對(duì)于單元的相同頁(yè)的后續(xù)第二次編程將編程邏輯上頁(yè)而不用重設(shè)邏輯下頁(yè),。一般使用的代碼是葛萊碼,其中只有一個(gè)位在轉(zhuǎn)換到鄰近的狀態(tài)時(shí)發(fā)生改變。因此,此代碼的優(yōu)點(diǎn)為因?yàn)橹簧婕耙粋€(gè)位,所以對(duì)于錯(cuò)誤校正的要求較少。
使用葛萊碼的一般方案是假設(shè)“1”表示“不編程”條件。因此,已擦除的存儲(chǔ)器狀態(tài)“U”可表示為(上頁(yè)位,下頁(yè)位)=(1,1)。在編程邏輯下頁(yè)的第一次編程中,存儲(chǔ)數(shù)據(jù)“0”的任何單元的邏輯狀態(tài)將因此從(x,1)轉(zhuǎn)換為(x,0),其中“x”表示上位的“任意(don′t care)”值。然而,由于上位尚未被編程,所以為了一致,也可將“x”標(biāo)示為“1”。通過(guò)將單元編程為存儲(chǔ)器狀態(tài)“X”來(lái)表示(1,0)邏輯狀態(tài)。也就是說(shuō),在第二次編程之前,下位值“0”可由存儲(chǔ)器狀態(tài)“X”表示。
執(zhí)行第二次編程來(lái)存儲(chǔ)邏輯上頁(yè)的位。只有需要值為“0”的上頁(yè)位的那些單元將被編程。在第一次編程之后,頁(yè)中的單元處于邏輯狀態(tài)(1,1)或(1,0)。為了保存第二次編程中下頁(yè)的值,必須區(qū)分下位值“0”或“1”。對(duì)于從(1,0)到(0,0)的轉(zhuǎn)換,將所討論的存儲(chǔ)器單元編程為存儲(chǔ)器狀態(tài)“Y”。對(duì)于從(1,1)到(0,1)的轉(zhuǎn)換,將所討論的存儲(chǔ)器單元編程為存儲(chǔ)器狀態(tài)“Z”。以此方式,在讀取期間,可通過(guò)確定在單元中編程的存儲(chǔ)器狀態(tài)來(lái)解碼下頁(yè)位和上頁(yè)位。
然而,葛萊碼2次編程方案在第二次編程錯(cuò)誤時(shí)可能產(chǎn)生問(wèn)題。例如,在下位為“1”時(shí)將上頁(yè)位編程為“0”,將造成(1,1)轉(zhuǎn)換成(0,1)。此需要將存儲(chǔ)器單元累進(jìn)地從“U”進(jìn)行編程通過(guò)“X”和“Y”而到達(dá)“Z”。如果在完成編程之前發(fā)生電源中斷,那么存儲(chǔ)器單元可能在轉(zhuǎn)換存儲(chǔ)器狀態(tài)的一者中(比如,“X”)結(jié)束。在讀取存儲(chǔ)器單元時(shí),“X”將被解碼為邏輯狀態(tài)(1,0)。此對(duì)于上位和下位造成不正確的結(jié)果,因?yàn)槠浔緫?yīng)該為(0,1)。類似地,如果編程在達(dá)到“Y”時(shí)受到中斷,那么其將對(duì)應(yīng)于(0,0)。雖然上位現(xiàn)為正確的,但下位仍有誤。
因此,可以看出上頁(yè)編程的問(wèn)題可破壞已處于下頁(yè)中的數(shù)據(jù)。尤其當(dāng)?shù)诙尉幊躺婕霸谥虚g存儲(chǔ)器狀態(tài)上通過(guò)時(shí),程序中止可能使編程在所述存儲(chǔ)器狀態(tài)中結(jié)束,從而造成解碼不正確的下頁(yè)位。
圖42說(shuō)明通過(guò)一式兩份地保存每一扇區(qū)來(lái)保護(hù)關(guān)鍵數(shù)據(jù)的方式。例如,將扇區(qū)A、B、C和D保存在復(fù)制副本中。如過(guò)一個(gè)扇區(qū)副本中存在數(shù)據(jù)破壞,那么可改為讀取另一扇區(qū)副本。
圖43說(shuō)明通常將復(fù)制扇區(qū)保存在多狀態(tài)存儲(chǔ)器中的非穩(wěn)固性。如上文所描述,在示范性4狀態(tài)存儲(chǔ)器中,多狀態(tài)頁(yè)實(shí)際上包括分別在兩次編程中編程的邏輯下頁(yè)和邏輯上頁(yè)。在所示的實(shí)例中,頁(yè)為四個(gè)扇區(qū)寬。因此,扇區(qū)A及其復(fù)制件將同時(shí)編程在邏輯下頁(yè)中,且類似地,對(duì)于扇區(qū)B及其復(fù)制件也是如此。接著在邏輯上頁(yè)中的后續(xù)第二次編程中,將同時(shí)編程扇區(qū)C,C,且對(duì)于扇區(qū)D,D也是如此。如果在編程扇區(qū)C,C的中間發(fā)生程序中止,那么將破壞下頁(yè)中的扇區(qū)A,A。除非在上頁(yè)編程之前首先讀取并緩沖了下頁(yè)扇區(qū),否則下頁(yè)扇區(qū)如果受到破壞可能無(wú)法修復(fù)。因此,同時(shí)保存關(guān)鍵數(shù)據(jù)的兩個(gè)副本(例如,扇區(qū)A,A)無(wú)法防止其由于其上頁(yè)中對(duì)扇區(qū)C,C的后續(xù)有疑問(wèn)的保存而受到破壞。
圖44A說(shuō)明將關(guān)鍵數(shù)據(jù)的交錯(cuò)的復(fù)制副本保存到多狀態(tài)存儲(chǔ)器的一個(gè)實(shí)施例。基本上,以與圖43相同的方式保存下頁(yè),即,扇區(qū)A,A和扇區(qū)B,B。然而,在上頁(yè)編程中,扇區(qū)C和D與其復(fù)制件交叉成C,D,C,D。如果支持局部頁(yè)編程,那么可同時(shí)編程扇區(qū)C的兩個(gè)副本,且對(duì)于扇區(qū)D的兩個(gè)副本也是如此。如果(比如)兩個(gè)扇區(qū)C的程序遭到中止,那么只可在扇區(qū)A的一個(gè)副本和扇區(qū)B的一個(gè)副本上破壞下頁(yè)。其它副本維持不受影響。因此,如果在第一次編程中存儲(chǔ)的關(guān)鍵數(shù)據(jù)存在兩個(gè)副本,那么其應(yīng)該不會(huì)受到同時(shí)進(jìn)行的后續(xù)第二次編程影響。
圖44B說(shuō)明只將關(guān)鍵數(shù)據(jù)的復(fù)制副本保存到多狀態(tài)存儲(chǔ)器的邏輯方頁(yè)的另一實(shí)施例。在此情況下,不使用下頁(yè)中的數(shù)據(jù)。關(guān)鍵數(shù)據(jù)及其復(fù)制件(例如,扇區(qū)A,A和扇區(qū)B,B)只保存到邏輯上頁(yè)。以此方式,如果存在程序中止,那么可將關(guān)鍵數(shù)據(jù)重寫在另一邏輯上頁(yè)中,而對(duì)下頁(yè)數(shù)據(jù)的任何破壞將無(wú)關(guān)緊要。此辦法基本上使用每一多狀態(tài)頁(yè)的存儲(chǔ)容量的一半。
圖44C說(shuō)明以多狀態(tài)存儲(chǔ)器的二進(jìn)制模式保存關(guān)鍵數(shù)據(jù)的復(fù)制副本的又一實(shí)施例。在此情況下,以二進(jìn)制模式編程每一存儲(chǔ)器單元,其中僅將其閾值范圍劃分成兩個(gè)區(qū)域。因此僅存在一次編程,且在發(fā)生程序中止時(shí)可在不同位置中重新啟動(dòng)編程。此辦法也使用每一多狀態(tài)頁(yè)的存儲(chǔ)容量的一半。美國(guó)專利第6,456,528 B1號(hào)中描述了以二進(jìn)制模式操作多狀態(tài)存儲(chǔ)器,所述專利的全部揭示內(nèi)容以引用的方式并入本文中。
圖45說(shuō)明同時(shí)將關(guān)鍵數(shù)據(jù)的復(fù)制副本保存到兩個(gè)不同元區(qū)塊的又一實(shí)施例。如果區(qū)塊的一者變成不可用,那么可從另一區(qū)塊讀取數(shù)據(jù)。例如,關(guān)鍵數(shù)據(jù)包含在扇區(qū)A、B、C、D和E、F、G、H和I、J、K、L中。一式兩份地保存每一扇區(qū)。兩個(gè)副本將同時(shí)寫入到兩個(gè)不同的區(qū)塊,區(qū)塊0和區(qū)塊1。如果將一個(gè)副本寫入到邏輯下頁(yè),那么另一副本將寫入到邏輯上頁(yè)。以此方式,將始終存在編程到邏輯上頁(yè)的副本。如果發(fā)生程序中止,那么可將其重新編程到另一邏輯上頁(yè)。同時(shí),如果下頁(yè)遭受破壞,那么在另一區(qū)塊中始終存在另一上頁(yè)副本。
圖46B說(shuō)明通過(guò)使用容錯(cuò)碼來(lái)同時(shí)保存關(guān)鍵數(shù)據(jù)的復(fù)制副本的又一實(shí)施例。圖46A在說(shuō)明4狀態(tài)存儲(chǔ)器陣列的閾值電壓分布方面與圖41A類似,且展示為圖46B的參考。容錯(cuò)碼實(shí)質(zhì)上避免在任何中間狀態(tài)中轉(zhuǎn)換的任何上頁(yè)編程。因此,在第一次下頁(yè)編程中,邏輯狀態(tài)(1,1)轉(zhuǎn)換為(1,0),如表示為將已擦除的存儲(chǔ)器狀態(tài)“U”編程為“Y”。在將上頁(yè)位編程為“0”的第二次編程中,如果下頁(yè)位為“1”,那么邏輯狀態(tài)(1,1)轉(zhuǎn)換為(0,1),如表示為將已擦除的存儲(chǔ)器狀態(tài)“U”編程為“X”。如果下頁(yè)位為“0”,那么邏輯狀態(tài)(1,0)轉(zhuǎn)換為(0,0),如表示為將存儲(chǔ)器狀態(tài)“Y”編程為“Z”。由于上頁(yè)編程僅涉及編程為下一鄰近的存儲(chǔ)器狀態(tài),因此程序中止不改變下頁(yè)位。
串列寫入關(guān)鍵數(shù)據(jù)的復(fù)制副本優(yōu)選地如上所述被同時(shí)寫入。避免同時(shí)破壞兩個(gè)副本的另一方式是循序?qū)懭敫北?。此方法較緩慢,但副本本身指示在控制器檢查兩個(gè)副本時(shí)其編程是否成功。
圖47是展示兩個(gè)數(shù)據(jù)副本的可能狀態(tài)和數(shù)據(jù)有效性的表。
如果第一和第二副本沒(méi)有ECC錯(cuò)誤,那么認(rèn)為數(shù)據(jù)的編程已完全成功??蓮娜我桓北精@得有效數(shù)據(jù)。
如果第一副本沒(méi)有ECC錯(cuò)誤但第二副本具有ECC錯(cuò)誤,那么可意味著編程在第二副本編程的中間受到中斷。第一副本含有有效數(shù)據(jù)。即使錯(cuò)誤為可校正的,第二副本數(shù)據(jù)也不可信賴。
如果第一副本沒(méi)有ECC錯(cuò)誤且第二副本已清空(擦除),那么可意味著編程在第一副本編程結(jié)束之后但在第二副本開始之前受到中斷。第一副本含有有效數(shù)據(jù)。
如果第一副本有ECC錯(cuò)誤且第二副本已清空(擦除),那么可意味著編程在第一副本編程的中間受到中斷。即使錯(cuò)誤為可校正的,第一副本可能仍含有無(wú)效數(shù)據(jù)。
為了讀取一式兩份地維持的數(shù)據(jù),以下技術(shù)為優(yōu)選的,因?yàn)槠淅脧?fù)制副本的存在。讀取并比較兩個(gè)副本。在此情況下,圖47所示的兩個(gè)副本的狀態(tài)可用來(lái)確保不存在錯(cuò)誤誤測(cè)。
在另一實(shí)施例中,控制器只讀取一個(gè)副本,為了顧及速度和簡(jiǎn)單性,優(yōu)選地在兩個(gè)副本之間交替進(jìn)行副本讀取。例如,在控制器讀取控制數(shù)據(jù)時(shí),其讀取(比如)副本1,下一控制讀取(任何控制讀取)應(yīng)來(lái)自副本2,接著再次為副本1等。以此方式,將可定期讀取兩個(gè)副本并檢查兩個(gè)副本的完整性(ECC檢查)。此減少無(wú)法在因惡化的數(shù)據(jù)保留所造成的時(shí)間錯(cuò)誤中進(jìn)行檢測(cè)的風(fēng)險(xiǎn)。例如,如果通常只讀取副本1,那么副本2可能逐漸惡化達(dá)到錯(cuò)誤再也無(wú)法被ECC挽救的程度,且無(wú)法再使用第二副本。
搶先式數(shù)據(jù)重新定位如結(jié)合圖20所述,區(qū)塊管理系統(tǒng)在其操作期間在快閃存儲(chǔ)器中維持一組控制數(shù)據(jù)。此組控制數(shù)據(jù)存儲(chǔ)在與主機(jī)數(shù)據(jù)相同的元區(qū)塊中。因此,控制數(shù)據(jù)本身將受到區(qū)塊管理,且將受到更新的影響,并因此受到垃圾收集操作的影響。
也已描述了控制數(shù)據(jù)的層級(jí),其中較低層級(jí)中的控制數(shù)據(jù)比較高層級(jí)中的控制數(shù)據(jù)更新得更為頻繁。例如,假設(shè)每一控制區(qū)塊具有N個(gè)將要寫入的控制扇區(qū),那么通常發(fā)生控制更新和控制區(qū)塊重新定位的以下序列。再次參看圖20,每N個(gè)CBI更新填滿CBI區(qū)塊并觸發(fā)CBI重新定位(重寫)和MAP更新。如果混亂區(qū)塊被關(guān)閉,那么也觸發(fā)GAT更新。每一GAT更新觸發(fā)MAP更新。每N個(gè)GAT更新填滿區(qū)塊并觸發(fā)GAT區(qū)塊重新定位。此外,當(dāng)MAP區(qū)塊變滿時(shí),也觸發(fā)MAP區(qū)塊重新定位和MAPA區(qū)塊(如果存在的話,否則BOOT區(qū)塊直接指向MAP)更新。此外,當(dāng)MAPA區(qū)塊變滿時(shí),也觸發(fā)MAPA區(qū)塊重新定位、BOOT區(qū)塊更新和MAP更新。此外,在BOOT區(qū)塊變滿時(shí),觸發(fā)另一BOOT區(qū)塊的活躍BOOT區(qū)塊重新定位。
由于通過(guò)頂部處的BOOT控制數(shù)據(jù),隨后是MAPA、MAP,且接著GAT來(lái)形成層級(jí),因此,在每N3個(gè)GAT更新中,將存在“級(jí)聯(lián)控制更新”,其中將重新定位所有的GAT、MAP、MAPA和BOOT區(qū)塊。在此情況下,在因主機(jī)寫入導(dǎo)致的混亂或循序更新區(qū)塊關(guān)閉而引起GAT更新時(shí),也存在垃圾收集操作(即,重新定位或重寫)。在混亂更新區(qū)塊垃圾收集的情況下,將更新CBI,而這也會(huì)觸發(fā)CBI區(qū)塊重新定位。因此,在此極端的情況中,需要同時(shí)收集大量元區(qū)塊的垃圾。
可以看到,層級(jí)的每一控制數(shù)據(jù)區(qū)塊在得以填補(bǔ)和重新定位方面具有其自身的周期性。如果每一控制數(shù)據(jù)區(qū)塊運(yùn)作正常,那么將存在發(fā)生以下情形的時(shí)候大量區(qū)塊的階段將排隊(duì)并觸發(fā)同時(shí)涉及所有那些區(qū)塊的大量重新定位或垃圾收集。許多控制區(qū)塊的重新定位將花費(fèi)較長(zhǎng)時(shí)間,且應(yīng)加以避免,因?yàn)椴糠种鳈C(jī)不容許因大量控制操作而造成的長(zhǎng)時(shí)間延遲。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,實(shí)施存儲(chǔ)器區(qū)塊的“控制垃圾收集”或搶先式重新定位以避免發(fā)生大量的更新區(qū)塊均恰巧同時(shí)需要進(jìn)行重新定位的情況。例如,在更新用于控制區(qū)塊管理系統(tǒng)的操作的控制數(shù)據(jù)時(shí)可發(fā)生此情況??刂茢?shù)據(jù)類型的層級(jí)可以不同程度的更新頻率而存在,從而導(dǎo)致其關(guān)聯(lián)的更新區(qū)塊需要以不同速率進(jìn)行垃圾收集或重新定位。將存在一個(gè)以上控制數(shù)據(jù)類型的垃圾收集操作同時(shí)發(fā)生的某些時(shí)間。在極端的情況中,所有控制數(shù)據(jù)類型的更新區(qū)塊的重新定位階段可排隊(duì),從而導(dǎo)致所有的更新區(qū)塊均需要同時(shí)重新定位。
本發(fā)明避免了這種不合需要的情況,其中當(dāng)前的存儲(chǔ)器操作無(wú)論何時(shí)均可適應(yīng)自發(fā)性的垃圾收集操作,更新區(qū)塊的搶先式重新定位預(yù)先在完全填充區(qū)塊之前發(fā)生。明確地說(shuō),將優(yōu)先權(quán)提供給具有最慢速率的處于最高層級(jí)的數(shù)據(jù)類型的區(qū)塊。以此方式,在重新定位最慢速率區(qū)塊之后,將不需要進(jìn)行相對(duì)較長(zhǎng)時(shí)間的另一垃圾收集。并且,處于較高層級(jí)的較慢速率區(qū)塊不具有許多將要觸發(fā)的重新定位的級(jí)聯(lián)??蓪⒈景l(fā)明方法視為為了避免所討論的各種區(qū)塊的階段對(duì)準(zhǔn)而將某種抖動(dòng)(dithering)引入到事物的整體混合中。因此,只要存在機(jī)會(huì),將搶先地重新定位具有不被完全填充的微小容限的緩慢填充區(qū)塊。
在處于較低層級(jí)的控制數(shù)據(jù)因級(jí)聯(lián)效應(yīng)而比處于較高階層的控制數(shù)據(jù)變化得更快的控制數(shù)據(jù)層級(jí)系統(tǒng)中,將優(yōu)先權(quán)提供給處于較高階層的控制數(shù)據(jù)的區(qū)塊。執(zhí)行自發(fā)性搶先式重新定位的機(jī)會(huì)的一個(gè)實(shí)例發(fā)生在以下情況時(shí)主機(jī)寫入本身不觸發(fā)重新定位,因此可利用其等待時(shí)間時(shí)段中的任何剩余時(shí)間來(lái)進(jìn)行搶先式重新定位操作。一般而言,務(wù)必需要重新定位的區(qū)塊前的容限是在區(qū)塊全滿之前預(yù)定數(shù)目的未寫入存儲(chǔ)器單位。所考慮的容限足以促成在完全填充的區(qū)塊前但不過(guò)早而導(dǎo)致資源浪費(fèi)的重新定位。在優(yōu)選實(shí)施例中,預(yù)定數(shù)目的未寫入存儲(chǔ)器單位在一與六個(gè)存儲(chǔ)器單位之間。
圖48說(shuō)明存儲(chǔ)控制數(shù)據(jù)的存儲(chǔ)器區(qū)塊的搶先式重新定位的流程圖。
步驟1202將非易失性存儲(chǔ)器組織成區(qū)塊,每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位。
步驟1204維持不同類型的數(shù)據(jù)。
步驟1206對(duì)不同類型的數(shù)據(jù)分配等級(jí)(ranking)。
步驟1208將所述不同類型數(shù)據(jù)的更新存儲(chǔ)在復(fù)數(shù)個(gè)區(qū)塊中,使得每一區(qū)塊實(shí)質(zhì)上存儲(chǔ)相同類型的數(shù)據(jù)。
步驟1210響應(yīng)于具有少于預(yù)定數(shù)目的清空存儲(chǔ)器單位且具有所述復(fù)數(shù)個(gè)區(qū)塊中最高等級(jí)的數(shù)據(jù)類型的區(qū)塊,將所述區(qū)塊的數(shù)據(jù)的當(dāng)前更新重新定位到另一區(qū)塊。如果未受到中斷,進(jìn)行步驟1208。
用于實(shí)施圖20所示控制數(shù)據(jù)的搶先式重新定位的示范性算法如下
如果((不存在因用戶數(shù)據(jù)而造成的垃圾收集)或(MAP留有6個(gè)或更少的未寫入扇區(qū))或(GAT留有3個(gè)或更少的未寫入扇區(qū))那么如果(BOOT留有1個(gè)未寫入扇區(qū))那么重新定位BOOT(即,重新定位到區(qū)塊)否則如果(MAPA留有1個(gè)未寫入扇區(qū))那么重新定位MAPA并更新MAP否則如果(MAP留有1個(gè)未寫入扇區(qū))那么重新定位MAP否則如果(上一已更新或最大的GAT留有1個(gè)未寫入扇區(qū))那么重新定位GAT否則如果(CBI留有1個(gè)未寫入扇區(qū))那么重新定位CBI否則否則退出因此,搶先式重新定位通常在不發(fā)生用戶數(shù)據(jù)垃圾收集時(shí)完成。在最糟的情況下,當(dāng)每一主機(jī)寫入觸發(fā)用戶數(shù)據(jù)垃圾收集,但存在足夠的時(shí)間進(jìn)行一個(gè)區(qū)塊的自發(fā)性重新定位時(shí),一次可執(zhí)行一個(gè)控制區(qū)塊的搶先式重新定位。
由于用戶數(shù)據(jù)垃圾收集操作和控制更新可能與物理錯(cuò)誤同時(shí)發(fā)生,所以較佳地通過(guò)事先(比如在區(qū)塊仍具有2個(gè)或更多未寫入存儲(chǔ)器單位(例如,扇區(qū))時(shí))先行進(jìn)行搶先式重新定位或受控的垃圾收集來(lái)獲得較大的安全容限。
雖然已參照特定實(shí)施例描述了本發(fā)明的各種方面,但應(yīng)了解,本發(fā)明受所附權(quán)利要求書的完整范圍的保護(hù)。
權(quán)利要求
1.一種在一具有一存儲(chǔ)器單元陣列的多狀態(tài)存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)的兩個(gè)副本的方法,每一存儲(chǔ)器單元能夠存儲(chǔ)數(shù)據(jù)的多個(gè)位,可通過(guò)對(duì)每一存儲(chǔ)器單元進(jìn)行連續(xù)次的編程來(lái)編程所述多個(gè)位的每一者,所述方法包含使用來(lái)自每一存儲(chǔ)器單元的所述多個(gè)位的一者,將所述數(shù)據(jù)的第一和第二副本同時(shí)編程到一存儲(chǔ)器單元群組中;和在所述存儲(chǔ)器單元群組的所述多個(gè)位中的其它位的一后續(xù)編程中,排除使用與所述兩個(gè)副本中的至少一者關(guān)聯(lián)的存儲(chǔ)器單元,從而因所述后續(xù)編程而產(chǎn)生的任何問(wèn)題將不會(huì)破壞所述數(shù)據(jù)的兩個(gè)副本。
2.根據(jù)權(quán)利要求1所述的方法,其中所述排除包括使用來(lái)自在一最后一次連續(xù)編程中編程的每一存儲(chǔ)器單元的所述多個(gè)位中的一最終一個(gè)位將所述數(shù)據(jù)的第一和第二副本同時(shí)編程到所述存儲(chǔ)器單元群組中,從而將不發(fā)生進(jìn)一步的編程。
3.根據(jù)權(quán)利要求1所述的方法,其中所述排除包括使用所述多狀態(tài)存儲(chǔ)器的一二進(jìn)制模式將所述數(shù)據(jù)的第一和第二副本同時(shí)編程到所述存儲(chǔ)器單元群組中,從而將不發(fā)生進(jìn)一步的編程。
4.根據(jù)權(quán)利要求1所述的方法,其中將所述多狀態(tài)存儲(chǔ)器組織成存儲(chǔ)器單元的區(qū)塊,存儲(chǔ)器單元的每一區(qū)塊可一起擦除;和將所述兩個(gè)副本同時(shí)編程到兩個(gè)不同的區(qū)塊中。
5.根據(jù)權(quán)利要求2所述的方法,其中將所述多狀態(tài)存儲(chǔ)器組織成存儲(chǔ)器單元的區(qū)塊,存儲(chǔ)器單元的每一區(qū)塊可一起擦除;和將所述兩個(gè)副本同時(shí)編程到兩個(gè)不同的區(qū)塊中。
6.根據(jù)權(quán)利要求3所述的方法,其中將所述多狀態(tài)存儲(chǔ)器組織成存儲(chǔ)器單元的區(qū)塊,存儲(chǔ)器單元的每一區(qū)塊可一起擦除;和將所述兩個(gè)副本同時(shí)編程到兩個(gè)不同的區(qū)塊中。
7.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
8.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器為快閃EEPROM。
9.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器為NROM。
10.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器處于一存儲(chǔ)卡中。
11. 一種在一具有一存儲(chǔ)器單元陣列的多狀態(tài)存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)的兩個(gè)副本的方法,每一存儲(chǔ)器單元能夠存儲(chǔ)數(shù)據(jù)的多個(gè)位,可通過(guò)對(duì)每一存儲(chǔ)器單元進(jìn)行連續(xù)次的編程來(lái)編程所述多個(gè)位的每一者,所述方法包含相對(duì)于所述多個(gè)存儲(chǔ)器狀態(tài)編碼所述多個(gè)位,從而使在稍早的一次編程中編程的一個(gè)位不受后續(xù)的一次編程中一不完整的編程的影響;和使用來(lái)自每一存儲(chǔ)器單元的所述多個(gè)位中的一者將所述數(shù)據(jù)的第一和第二副本同時(shí)編程到一存儲(chǔ)器單元群組中。
12.根據(jù)權(quán)利要求11所述的方法,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
13.根據(jù)權(quán)利要求11所述的方法,其中所述非易失性存儲(chǔ)器為快閃EEPROM。
14.根據(jù)權(quán)利要求11所述的方法,其中所述非易失性存儲(chǔ)器為NROM。
15. 根據(jù)權(quán)利要求11所述的方法,其中所述非易失性存儲(chǔ)器處于一存儲(chǔ)卡中。
16.一種在一組織成區(qū)塊的非易失性存儲(chǔ)器中存儲(chǔ)并更新數(shù)據(jù)的方法,每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位,所述方法包含(a)維持不同類型的數(shù)據(jù);(b)向所述不同類型的數(shù)據(jù)分配一等級(jí);(c)將所述不同類型數(shù)據(jù)的更新存儲(chǔ)在復(fù)數(shù)個(gè)區(qū)塊中,使得每一區(qū)塊實(shí)質(zhì)上存儲(chǔ)相同類型的數(shù)據(jù);(d)響應(yīng)于具有一少于清空存儲(chǔ)器單位的預(yù)定數(shù)目并具有所述復(fù)數(shù)個(gè)區(qū)塊中最高等級(jí)的數(shù)據(jù)類型的一區(qū)塊,將所述區(qū)塊的數(shù)據(jù)的當(dāng)前更新重新定位到另一區(qū)塊;和(e)如果未被中斷,那么重復(fù)(c)到(d)。
17.根據(jù)權(quán)利要求16所述的方法,其中在一第一類型的數(shù)據(jù)的更新次數(shù)少于一第二類型的數(shù)據(jù)的更新次數(shù)時(shí),使所述第一數(shù)據(jù)類型的等級(jí)高于所述第二數(shù)據(jù)類型。
18.根據(jù)權(quán)利要求16所述的方法,其中在實(shí)質(zhì)上填充一區(qū)塊的一第二類型的更新數(shù)據(jù)的一級(jí)聯(lián)效應(yīng)引起一第一類型數(shù)據(jù)的一更新時(shí),使所述第一數(shù)據(jù)類型的等級(jí)高于所述第二數(shù)據(jù)類型。
19.根據(jù)權(quán)利要求16所述的方法,其中清空存儲(chǔ)器單位的所述預(yù)定數(shù)目在一與六之間。
20.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
21.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器為快閃EEPROM。
22.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器為NROM。
23.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器處于一存儲(chǔ)卡中。
24.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位數(shù)據(jù)的存儲(chǔ)器單元。
25.根據(jù)權(quán)利要求16到19中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位以上數(shù)據(jù)的存儲(chǔ)器單元。
26.一種非易失性存儲(chǔ)器,其包含一組織成區(qū)塊的存儲(chǔ)器陣列,每一區(qū)塊分割成可一起擦除的存儲(chǔ)器單位;復(fù)數(shù)個(gè)區(qū)塊,其每一者用于存儲(chǔ)一種數(shù)據(jù)類型更新,每一數(shù)據(jù)類型具有復(fù)數(shù)個(gè)等級(jí)中的一等級(jí);和一控制器,其用于響應(yīng)于具有一少于清空存儲(chǔ)器單位的預(yù)定數(shù)目且具有所述復(fù)數(shù)個(gè)區(qū)塊中最高等級(jí)的數(shù)據(jù)類型的所述區(qū)塊,將一區(qū)塊中的當(dāng)前更新重新定位到另一區(qū)塊。
27.根據(jù)權(quán)利要求26所述的非易失性存儲(chǔ)器,其中在一第一類型的數(shù)據(jù)的更新次數(shù)少于一第二類型的數(shù)據(jù)的更新次數(shù)時(shí),使所述第一數(shù)據(jù)類型的等級(jí)高于所述第二數(shù)據(jù)類型。
28.根據(jù)權(quán)利要求26所述的非易失性存儲(chǔ)器,其中在實(shí)質(zhì)上填充一區(qū)塊的一第二類型的更新數(shù)據(jù)的一級(jí)聯(lián)效應(yīng)引起一第一類型數(shù)據(jù)的一更新時(shí),使所述第一數(shù)據(jù)類型的等級(jí)高于所述第二數(shù)據(jù)類型。
29.根據(jù)權(quán)利要求26所述的非易失性存儲(chǔ)器,其中清空存儲(chǔ)器單位的所述預(yù)定數(shù)目在一與六之間。
30.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
31.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器為快閃EEPROM。
32.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器為NROM。
33.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器處于一存儲(chǔ)卡中。
34.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位數(shù)據(jù)的存儲(chǔ)器單元。
35.根據(jù)權(quán)利要求26到29中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位以上數(shù)據(jù)的存儲(chǔ)器單元。
全文摘要
在具有區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,一式兩份地維持區(qū)塊管理系統(tǒng)的關(guān)鍵數(shù)據(jù)(例如,控制數(shù)據(jù))。本發(fā)明描述用于在多狀態(tài)存儲(chǔ)器中穩(wěn)固地寫入和讀取關(guān)鍵數(shù)據(jù)的兩個(gè)副本的各種方法。在本發(fā)明的另一方面,含有控制數(shù)據(jù)的存儲(chǔ)器區(qū)塊上的搶先式垃圾收集避免以下不合意的情況需要同時(shí)對(duì)大量此種存儲(chǔ)器區(qū)塊進(jìn)行垃圾收集。
文檔編號(hào)G06F12/02GK1973334SQ200480041968
公開日2007年5月30日 申請(qǐng)日期2004年12月22日 優(yōu)先權(quán)日2003年12月30日
發(fā)明者瑟吉·阿納托利耶維奇·戈羅別茨, 艾倫·道格拉斯·布萊斯, 艾倫·戴維·貝內(nèi)特 申請(qǐng)人:桑迪士克股份有限公司