專利名稱:具有階段性編程失敗處置的非易失性存儲(chǔ)器和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及非易失性半導(dǎo)體存儲(chǔ)器,尤其涉及具有時(shí)間緊要的編程失敗處置的存儲(chǔ)器區(qū)塊管理系統(tǒng)的非易失性半導(dǎo)體存儲(chǔ)器。
背景技術(shù):
能夠進(jìn)行電荷的非易失性存儲(chǔ)的固態(tài)存儲(chǔ)器,尤其是封裝成小型存儲(chǔ)器卡的EEPROM和快閃EEPROM的形式,近來(lái)已成為各種移動(dòng)和手持裝置選擇的存儲(chǔ)裝置,特別是信息家電和消費(fèi)性電子產(chǎn)品。不像也是固態(tài)存儲(chǔ)器的RAM(隨機(jī)存取存儲(chǔ)器),快閃存儲(chǔ)器是非易失性,即使在關(guān)閉電源后仍能保留其存儲(chǔ)的數(shù)據(jù)。還有,不像ROM(只讀存儲(chǔ)器),快閃存儲(chǔ)器和磁盤存儲(chǔ)裝置一樣都可再寫。盡管成本較高,但在大量存儲(chǔ)應(yīng)用中,快閃存儲(chǔ)器的使用漸增?;谛D(zhuǎn)磁性媒體的常規(guī)大量存儲(chǔ)裝置,例如硬盤和軟盤,并不適合移動(dòng)和手持環(huán)境。這是因?yàn)榇疟P驅(qū)動(dòng)器傾向于體積龐大,容易發(fā)生機(jī)械故障且具有較高的等待時(shí)間和高功率需求。這些不想要的屬性使得基于磁盤的存儲(chǔ)裝置無(wú)法在大多數(shù)的移動(dòng)和可攜式應(yīng)用中使用。另一方面,既為內(nèi)嵌式且為抽取式存儲(chǔ)器卡的形式的快閃存儲(chǔ)器理想地適合移動(dòng)和手持環(huán)境,因其尺寸小、功率消耗低、高速和高可靠性等特性。
快閃EEPROM和EEPROM(電子可擦除和可程序只讀存儲(chǔ)器)的相似處在于,它是能夠被擦除且能將新的數(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ū)塊。
浮柵可以保持某個(gè)電荷范圍,因此,可經(jīng)編程為臨界電壓窗內(nèi)的任何臨界電壓電平。臨界電壓窗的尺寸受限于裝置的最小和最大臨界電平,而裝置的最小和最大臨界電平對(duì)應(yīng)于可經(jīng)編程到浮柵上的電荷范圍。臨界窗一般根據(jù)存儲(chǔ)器裝置的特性、操作條件和記錄而定。原則上,在這個(gè)窗內(nèi),各有所不同的、可解析的臨界電壓電平范圍均可用于指定單元的明確的存儲(chǔ)器狀態(tài)。
通常會(huì)通過(guò)兩種機(jī)制之一,將作為存儲(chǔ)器單元的晶體管編程為「已編程」?fàn)顟B(tài)。在「熱電子注入」中,施加到汲極的高電壓可加速越過(guò)襯底通道區(qū)的電子。同時(shí),施加到控制柵極的高電壓可吸引熱電子通過(guò)薄柵極介電質(zhì)到浮柵上。在「隧穿注入」中,會(huì)相對(duì)于所述襯底施加一高電壓給所述控制柵極。以這種方式,可將襯底的電子吸引到中間的浮柵。雖然習(xí)慣使用術(shù)語(yǔ)「編程」描述通過(guò)將電子注入到存儲(chǔ)器單元的初始擦除電荷存儲(chǔ)單位來(lái)寫入存儲(chǔ)器以改變存儲(chǔ)器狀態(tài),現(xiàn)已和較為常見(jiàn)的術(shù)語(yǔ),如「寫入」或「記錄」交換使用。
可以利用下面數(shù)種機(jī)制來(lái)擦除所述存儲(chǔ)器裝置。對(duì)EEPROM而言,通過(guò)相對(duì)于所述控制柵極施加一高電壓給所述襯底,從而可在所述浮柵中引誘出電子,使其隧穿一薄氧化物進(jìn)入所述襯底通道區(qū)(也就是,F(xiàn)owler-Nordheim隧穿效應(yīng)),便可電擦除一存儲(chǔ)器單元。一般來(lái)說(shuō),EEPROM可以逐字節(jié)的方式來(lái)擦除。對(duì)快閃EEPROM而言,可每次電擦除所有的存儲(chǔ)器或是每次電擦除一個(gè)以上最小可擦除區(qū)塊,其中一最小可擦除區(qū)塊可能是由一個(gè)以上的扇區(qū)組成且每一扇區(qū)均可存儲(chǔ)512個(gè)字節(jié)以上的數(shù)據(jù)。
所述存儲(chǔ)器裝置通常包括可安裝在一存儲(chǔ)器卡上的一個(gè)以上存儲(chǔ)器芯片。各存儲(chǔ)器芯片包含為外圍電路(如解碼器和擦除、寫入和讀取電路)所支持的存儲(chǔ)器單元陣列。較為精密的存儲(chǔ)器裝置還附有執(zhí)行智能型和較高水平存儲(chǔ)器操作和接口連接的控制器。
現(xiàn)已有許多市售成功的非易失性固態(tài)存儲(chǔ)器裝置。這些存儲(chǔ)器裝置可以是快閃EEPROM,或是可采用其它類型的非易失性存儲(chǔ)器單元??扉W存儲(chǔ)器與系統(tǒng)和其制造方法的實(shí)例在美國(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)中有揭示。明確地說(shuō),具NAND線串結(jié)構(gòu)的快閃存儲(chǔ)器裝置在美國(guó)專利案第5,570,315號(hào)、第5,903,495號(hào)、第6,046,935號(hào)之中有描述。另外,還可利用具有一用來(lái)存儲(chǔ)電荷的介電層的存儲(chǔ)器單元來(lái)制造非易失性存儲(chǔ)器裝置。其利用一介電層來(lái)取代前面所述的導(dǎo)電浮柵元件。這些利用介電存儲(chǔ)元件的存儲(chǔ)器裝置已在Eitan等人在2000年11月在IEEE Electron Device Letters,第21冊(cè),第11號(hào),第543-545頁(yè)中所發(fā)表的「NROMA Novel Localized Trapping,2-Bit Nonvolatile MemoryCell」一文中有描述。一ONO介電層會(huì)延伸越過(guò)源極與汲極擴(kuò)散區(qū)間的通道。其中一個(gè)數(shù)據(jù)位的電荷會(huì)在靠近所述汲極的介電層中被局部化,而另一個(gè)數(shù)據(jù)位的電荷會(huì)在靠近所述源極的介電層中被局部化。舉例來(lái)說(shuō),美國(guó)專利第5,768,192號(hào)和第6,011,725號(hào)揭示一種在兩層二氧化硅層間夾放一陷捕介電質(zhì)的非易失性存儲(chǔ)器單元。通過(guò)單獨(dú)讀取所述介電質(zhì)內(nèi)空間分離的電荷存儲(chǔ)區(qū)域的二進(jìn)制狀態(tài),可實(shí)現(xiàn)多狀態(tài)的數(shù)據(jù)存儲(chǔ)。
為了提高讀取和編程性能,會(huì)并行讀取或編程陣列中的多個(gè)電荷存儲(chǔ)元件或存儲(chǔ)器晶體管。因此,會(huì)一起讀取或編程存儲(chǔ)器元件的「頁(yè)」。在現(xiàn)有的存儲(chǔ)器架構(gòu)中,一列通常含有若干交錯(cuò)的頁(yè)或一列可構(gòu)成一個(gè)頁(yè)。一個(gè)頁(yè)的所有存儲(chǔ)器元件會(huì)被一起讀取或編程。
在快閃存儲(chǔ)器系統(tǒng)中,擦除操作可能需要多達(dá)長(zhǎng)于讀取和編程操作的數(shù)量級(jí)。因此,希望能夠具有充分尺寸的擦除區(qū)塊。以這種方式,可降低總數(shù)很大的存儲(chǔ)器單元上的擦除時(shí)間。
依照快閃存儲(chǔ)器的性質(zhì),數(shù)據(jù)必須寫入已擦除的存儲(chǔ)器位置。如果要更新主機(jī)的特定邏輯地址的數(shù)據(jù),一個(gè)方式是將更新數(shù)據(jù)再寫入相同的物理存儲(chǔ)器位置中。也就是說(shuō),邏輯到物理地址映射不會(huì)改變。然而,這就表示必須先擦除含有所述物理位置的整個(gè)擦除區(qū)塊,然后再以更新數(shù)據(jù)寫入。這種更新方法很沒(méi)有效率,因其需要擦除和再寫入整個(gè)擦除區(qū)塊,尤其在待更新的數(shù)據(jù)只占用擦除區(qū)塊的一小部分時(shí)。此外,還會(huì)造成比較頻繁的存儲(chǔ)器區(qū)塊的擦除再循環(huán),而這對(duì)這種類型存儲(chǔ)器裝置的有限耐久性而言并不理想。
另一個(gè)管理快閃存儲(chǔ)器系統(tǒng)的問(wèn)題是必須處理系統(tǒng)控制和目錄數(shù)據(jù)。各種存儲(chǔ)器操作的過(guò)程期間會(huì)產(chǎn)生并存取數(shù)據(jù)。因此,其有效處理和迅速存取將直接影響性能。由于快閃存儲(chǔ)器是用來(lái)存儲(chǔ)且是非易失性,因此希望能夠在快閃存儲(chǔ)器中維持這種類型的數(shù)據(jù)。然而,因?yàn)樵诳刂破骱涂扉W存儲(chǔ)器之間有中間文件管理系統(tǒng),所以無(wú)法直接存取數(shù)據(jù)。還有,系統(tǒng)控制和目錄數(shù)據(jù)傾向于起作用和被分段,而這對(duì)于具有大尺寸區(qū)塊擦除的系統(tǒng)中的存儲(chǔ)毫無(wú)幫助。照慣例,會(huì)在控制器RAM中設(shè)定這種類型的數(shù)據(jù),進(jìn)而允許由控制器直接存取。在開啟存儲(chǔ)器裝置的電源后,初始化程序會(huì)掃描快閃存儲(chǔ)器,來(lái)編譯要放在控制器RAM中的必要的系統(tǒng)控制和目錄信息。這個(gè)過(guò)程既耗時(shí)又需要控制器RAM容量,對(duì)于持續(xù)增加的快閃存儲(chǔ)器容量更是如此。
US 6,567,307揭示一種在大擦除區(qū)塊中處理扇區(qū)更新的方法,其包括在多個(gè)充當(dāng)可用記憶區(qū)的擦除區(qū)塊中記錄更新數(shù)據(jù),和最后在各個(gè)區(qū)塊中合并有效扇區(qū),且按邏輯順序次序重新排列有效扇區(qū)后將其再寫入。以這種方式,在每一最微小的更新時(shí),不必擦除和再寫入?yún)^(qū)塊。
WO 03/027828和WO 00/49488均揭示一種處理大擦除區(qū)塊中更新的存儲(chǔ)器系統(tǒng),其中包括以區(qū)域?yàn)閱挝粍澐诌壿嬌葏^(qū)地址。小區(qū)域的邏輯地址范圍經(jīng)保留用于和另一個(gè)用于用戶數(shù)據(jù)的區(qū)域分開的作用中系統(tǒng)控制數(shù)據(jù)。以這種方式,其自身區(qū)域中的系統(tǒng)控制數(shù)據(jù)操控便不會(huì)和另一區(qū)域中關(guān)聯(lián)的用戶數(shù)據(jù)互相作用。更新屬于邏輯扇區(qū)層級(jí),而且寫入指針會(huì)指向要寫入的區(qū)塊中的對(duì)應(yīng)物理扇區(qū)。映射信息會(huì)在RAM中緩沖,且最后被存儲(chǔ)在主存儲(chǔ)器的扇區(qū)配置表中。邏輯扇區(qū)的最新版本會(huì)使現(xiàn)有區(qū)塊中的所有先前版本過(guò)時(shí),這些區(qū)塊因此變成部分過(guò)時(shí)。執(zhí)行垃圾收集可保持部分廢棄區(qū)塊是可接受的數(shù)量。
現(xiàn)有技術(shù)的系統(tǒng)傾向于使更新數(shù)據(jù)分布在許多區(qū)塊上或更新數(shù)據(jù)會(huì)使許多現(xiàn)有的區(qū)塊受到部分廢棄。結(jié)果通常是大量為部分廢棄的區(qū)塊所需的垃圾收集,這很沒(méi)有效率且會(huì)造成存儲(chǔ)器提早老化。還有,和非順序更新相比,更缺少有系統(tǒng)和有效的方式來(lái)處理順序更新。
因此,普遍需要高容量和高性能的非易失性存儲(chǔ)器。尤其,更需要能夠在大區(qū)塊中執(zhí)行存儲(chǔ)器操作且沒(méi)有上述問(wèn)題的高容量非易失性存儲(chǔ)器。
發(fā)明內(nèi)容
一種非易失性存儲(chǔ)器系統(tǒng)按照物理存儲(chǔ)器位置的物理群組來(lái)組織。各物理群組(元區(qū)塊)是可擦除的單位且能用來(lái)存儲(chǔ)一個(gè)邏輯群組的數(shù)據(jù)。存儲(chǔ)器管理系統(tǒng)允許通過(guò)配置記錄邏輯群組的更新數(shù)據(jù)專用的元區(qū)塊來(lái)更新一個(gè)邏輯群組的數(shù)據(jù)。更新元區(qū)塊按照所接收的次序記錄更新數(shù)據(jù),且對(duì)記錄按照原始存儲(chǔ)的正確邏輯次序(順序)與否(混亂)并沒(méi)有限制。最后會(huì)關(guān)閉更新元區(qū)塊以進(jìn)行其它記錄。會(huì)發(fā)生若干過(guò)程之一,但最終會(huì)以按正確次序完全填滿的取代原始元區(qū)塊的元區(qū)塊停止。在混亂的例子中,會(huì)以有助于經(jīng)常更新的方式將目錄數(shù)據(jù)維持在非易失性存儲(chǔ)器中。系統(tǒng)支持同時(shí)更新多個(gè)邏輯群組。
本發(fā)明的一個(gè)特點(diǎn)允許以逐邏輯群組的方式來(lái)更新數(shù)據(jù)。因此,在更新邏輯群組時(shí),會(huì)限制邏輯單位的分布(還有更新廢棄的存儲(chǔ)器單位的散布)范圍。這在邏輯群組通常包含在物理區(qū)塊內(nèi)時(shí)更是如此。
在邏輯群組的更新期間,通常必須指派一或兩個(gè)緩沖已更新的邏輯單位的區(qū)塊。因此,只需要在相對(duì)較少數(shù)量的區(qū)塊上執(zhí)行垃圾收集。通過(guò)合并或壓縮即可執(zhí)行混亂區(qū)塊的垃圾收集。
與循序區(qū)塊相比,更新過(guò)程的經(jīng)濟(jì)性在更新區(qū)塊的一般處理中會(huì)愈加明顯,使得無(wú)須為混亂(無(wú)序)更新配置任何額外的區(qū)塊。所有的更新區(qū)塊均被配置為循序的更新區(qū)塊,而且任何更新區(qū)塊均可被改變成混亂的更新區(qū)塊。更確切地說(shuō),可任意地將一更新區(qū)塊從循序變成混亂。
有效使用系統(tǒng)資源允許同時(shí)更新多個(gè)邏輯群組。這可進(jìn)一步增加效率并減少過(guò)度額外開銷。
分布在多個(gè)存儲(chǔ)器平面上的存儲(chǔ)器對(duì)準(zhǔn)根據(jù)本發(fā)明的另一方面,對(duì)于被組織成可擦除區(qū)塊且由多個(gè)存儲(chǔ)器平面構(gòu)成,使得可并行讀取邏輯單位或?qū)⑦壿媶挝徊⑿械鼐幊檀鄠€(gè)平面之中的存儲(chǔ)器陣列,當(dāng)要更新存儲(chǔ)在特定存儲(chǔ)器平面中的第一區(qū)塊的原始邏輯單位時(shí),會(huì)供應(yīng)所需以將已更新的邏輯單位保持在和原始平面相同的平面中。這可通過(guò)以下方式來(lái)完成將已更新的邏輯單位記錄到在相同平面中的第二區(qū)塊的下一個(gè)可用位置。優(yōu)選將邏輯單位存儲(chǔ)在和其它版本相同的平面中且具有相同的偏移位置,使得給定邏輯單位的所有版本是由相同組的感測(cè)電路服務(wù)。
因此,在優(yōu)選實(shí)施例中,以邏輯單位的當(dāng)前版本來(lái)填補(bǔ)介于上一個(gè)編程存儲(chǔ)器單位與下一個(gè)可用平面對(duì)準(zhǔn)存儲(chǔ)器單位之間的任何中間空隙。將邏輯上位于最后被編程的邏輯單位后面的邏輯單位的當(dāng)前版本和邏輯上位于被存儲(chǔ)在下一個(gè)可用的平面排列存儲(chǔ)器單位中的邏輯單位前面的邏輯單位的當(dāng)前版本填入空隙中,可完成所述填補(bǔ)操作。
以這種方式,可將邏輯單位的所有版本維持在和原始具有相同偏移的相同平面中,使得在垃圾收集操作中,不必從不同平面擷取邏輯單位的最新版本,以免降低性能。在優(yōu)選實(shí)施例中,可利用所述最新的版本來(lái)更新或填補(bǔ)平面上的每一存儲(chǔ)器單位。因此,可從每一平面中并行地讀出一邏輯單位,其將會(huì)具有邏輯循序次序而無(wú)需進(jìn)一步重新排列。
這種方案通過(guò)允許平面上重新排列邏輯群組的邏輯單位的最新版本,且不必搜集不同存儲(chǔ)器平面的最新版本,而縮短合并混亂區(qū)塊的時(shí)間。這很有好處,其中主機(jī)接口的性能規(guī)格可限定由存儲(chǔ)器系統(tǒng)完成扇區(qū)寫入操作的最大等待時(shí)間。
階段性編程錯(cuò)誤處置根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的存儲(chǔ)器中,在時(shí)間緊要的存儲(chǔ)器操作期間,區(qū)塊中的編程失敗可通過(guò)繼續(xù)中斷區(qū)塊(breakout block)中的編程操作來(lái)處置。稍后,在較不緊要的時(shí)間,可將中斷前記錄在失敗區(qū)塊中的數(shù)據(jù)傳送到其它可能也是中斷區(qū)塊的區(qū)塊。接著可丟棄失敗的區(qū)塊。以這種方式,在遇到缺陷區(qū)塊時(shí),不會(huì)因必須立刻傳送缺陷區(qū)塊中存儲(chǔ)的數(shù)據(jù)而損失數(shù)據(jù)和超過(guò)指定的時(shí)間限制,可加以處理。這種錯(cuò)誤處置對(duì)于垃圾收集操作尤其重要,因此在緊要時(shí)間期間不需要在一嶄新的區(qū)塊上重復(fù)進(jìn)行整個(gè)操作。其后,在適當(dāng)時(shí)間,通過(guò)重新定位到其它區(qū)塊,即可挽救缺陷區(qū)塊的數(shù)據(jù)。
編程失敗處置在合并操作期間尤其重要。正常的合并操作可將駐存在原始區(qū)塊和更新區(qū)塊中的邏輯群組的所有邏輯單位的當(dāng)前版本合并到合并區(qū)塊。在合并操作期間,如果在合并區(qū)塊中發(fā)生編程失敗,那么會(huì)提供另一個(gè)充當(dāng)中斷合并區(qū)塊的區(qū)塊,以接收其余邏輯單位的合并。以這種方式,不必復(fù)制邏輯單位一次以上,而仍可在正常合并操作指定的時(shí)期內(nèi)完成例外處理的操作。在適當(dāng)時(shí)間,將群組所有未處理完成的邏輯單位合并到中斷區(qū)塊中,即可完成合并操作。適當(dāng)時(shí)間將是在當(dāng)前主機(jī)寫入操作以外的一些其它有時(shí)間執(zhí)行合并時(shí)的時(shí)期期間。一個(gè)這種適當(dāng)時(shí)間是在其中有更新但無(wú)關(guān)聯(lián)的合并操作的另一個(gè)主機(jī)寫入期間。
實(shí)質(zhì)上,可將編程失敗處置的合并看成以多階段來(lái)實(shí)施。在第一階段中,在發(fā)生編程失敗后,會(huì)將邏輯單位合并到一個(gè)以上區(qū)塊中,以避免合并各邏輯單位一次以上。在適當(dāng)時(shí)間會(huì)完成最后階段,其中會(huì)將邏輯群組合并到一個(gè)區(qū)塊中,優(yōu)選通過(guò)按循序次序?qū)⑺羞壿媶挝皇占街袛嗪喜^(qū)塊中。
無(wú)序更新區(qū)塊索引根據(jù)本發(fā)明的另一方面,在具有支持具無(wú)序邏輯單位的更新區(qū)塊的區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,無(wú)序更新區(qū)塊中邏輯單位的索引被緩沖存儲(chǔ)在RAM中,并定期將其存儲(chǔ)到非易失性存儲(chǔ)器中。在一實(shí)施例中,將索引存儲(chǔ)在專用于存儲(chǔ)索引的區(qū)塊中。在另一實(shí)施例中,將索引存儲(chǔ)在更新區(qū)塊本身中。在另一實(shí)施例中,將索引存儲(chǔ)在各邏輯單位的標(biāo)頭中。在另一方面中,在上一個(gè)索引更新之后但在下一個(gè)索引更新之前寫入的邏輯單位會(huì)將其索引信息存儲(chǔ)在各邏輯單位的標(biāo)頭中。以這種方式,在電源中斷后,不必在初始化期間執(zhí)行掃描,即可確定最近寫入的邏輯單位的位置。在另一方面中,將區(qū)塊管理成部分循序和部分無(wú)序,指向一個(gè)以上邏輯子群組。
控制數(shù)據(jù)完整性與管理根據(jù)本發(fā)明的另一方面,如部分或全部控制數(shù)據(jù)的關(guān)鍵數(shù)據(jù)如果被維持在復(fù)制項(xiàng)中,則保證額外等級(jí)的可靠性。復(fù)制的執(zhí)行方式對(duì)于采用兩次編程(two-pass)編程技術(shù)以連續(xù)編程相同組存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,第二次編程中的任何編程錯(cuò)誤都無(wú)法毀損第一次編程建立的數(shù)據(jù)。復(fù)制還有助于檢測(cè)寫入中止、檢測(cè)誤測(cè)(即,兩個(gè)副本有良好的ECC但數(shù)據(jù)不同),且可增加額外等級(jí)的可靠性。若干數(shù)據(jù)復(fù)制的技術(shù)均已涵蓋。
在一實(shí)施例中,在早先編程過(guò)程中編程給定數(shù)據(jù)的兩個(gè)副本后,后續(xù)編程過(guò)程可避免編程用于存儲(chǔ)兩個(gè)副本中至少一個(gè)的存儲(chǔ)器單元。以這種方式,在后續(xù)編程過(guò)程在完成之前中止和毀損早先編程的數(shù)據(jù)時(shí),兩個(gè)副本中至少一個(gè)不會(huì)受到影響。
在另一實(shí)施例中,給定數(shù)據(jù)的兩個(gè)副本會(huì)被存儲(chǔ)在兩個(gè)不同的區(qū)塊中,其中兩個(gè)副本中至多一個(gè)的存儲(chǔ)器單元會(huì)在后續(xù)的編程過(guò)程中被編程。
在另一實(shí)施例中,在一編程過(guò)程中存儲(chǔ)某一給定數(shù)據(jù)的兩個(gè)副本之后,便不再對(duì)用于存儲(chǔ)兩個(gè)副本的存儲(chǔ)器單元組執(zhí)行任何進(jìn)一步的編程。在存儲(chǔ)器單元組的最終編程過(guò)程中來(lái)編程兩個(gè)副本便可達(dá)成這個(gè)目的。
在另一實(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)而言,會(huì)采用容錯(cuò)代碼來(lái)編碼多個(gè)存儲(chǔ)器狀態(tài),使得早先編程過(guò)程所建立的數(shù)據(jù)不會(huì)受到后續(xù)編程過(guò)程中錯(cuò)誤的影響。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,可實(shí)施存儲(chǔ)器區(qū)塊的「控制垃圾收集」或先占式重新定位,以避免發(fā)生大量的更新區(qū)塊均恰巧同時(shí)需要進(jìn)行重新定位的情形。例如,在更新用于控制區(qū)塊管理系統(tǒng)操作的控制數(shù)據(jù)時(shí)會(huì)發(fā)生這種情況??刂茢?shù)據(jù)類型的層級(jí)可和不同程度的更新頻率共存,導(dǎo)致其關(guān)聯(lián)的更新區(qū)塊需要不同速率的垃圾收集或重新定位。會(huì)有一個(gè)以上控制數(shù)據(jù)類型的垃圾收集操作同時(shí)發(fā)生的特定次數(shù)。在極端的情況中,所有控制數(shù)據(jù)類型的更新區(qū)塊的重新定位階段會(huì)進(jìn)行整頓,導(dǎo)致所有的更新區(qū)塊都需要同時(shí)重新定位。
參考本發(fā)明以下結(jié)合附圖的優(yōu)選實(shí)施例的描述,即可了解本發(fā)明的其它特點(diǎn)和優(yōu)點(diǎn)。
圖1示意性說(shuō)明適合實(shí)施本發(fā)明的存儲(chǔ)器系統(tǒng)的主要硬件組件。
圖2根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明經(jīng)組織成扇區(qū)(或元區(qū)塊)的物理群組并由控制器的存儲(chǔ)器管理器管理的存儲(chǔ)器。
圖3A(i)-3A(iii)根據(jù)本發(fā)明的優(yōu)選實(shí)施例,示意性說(shuō)明邏輯群組和元區(qū)塊間的映射。
圖3B示意性說(shuō)明邏輯群組和元區(qū)塊間的映射。
圖4說(shuō)明元區(qū)塊和物理存儲(chǔ)器中結(jié)構(gòu)的對(duì)準(zhǔn)。
圖5A說(shuō)明由連接不同平面的最小擦除單位構(gòu)成的元區(qū)塊。
圖5B說(shuō)明其中從各平面選擇一個(gè)最小擦除單位(MEU)以連接到元區(qū)塊的一實(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ō)明由于兩個(gè)在邏輯地址有中斷的分開的主機(jī)寫入操作而在邏輯群組中按循序次序?qū)懭胙蚋聟^(qū)塊的扇區(qū)的實(shí)例。
圖9是根據(jù)本發(fā)明的一般實(shí)施例,說(shuō)明更新區(qū)塊管理器更新一個(gè)邏輯群組的數(shù)據(jù)的過(guò)程的流程圖。
圖10根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明更新區(qū)塊管理器更新一個(gè)邏輯群組的數(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)是說(shuō)明邏輯群組狀態(tài)上和物理元區(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ìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。
圖16D是根據(jù)其中已將邏輯群組劃分成子群組的替代性實(shí)施例,說(shuō)明存取進(jìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。
圖16E說(shuō)明在其中將各邏輯群組劃分成多個(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ò)程中,在控制數(shù)據(jù)結(jié)構(gòu)上執(zhí)行的操作層級(jí)。
圖21說(shuō)明由多個(gè)存儲(chǔ)器平面構(gòu)成的存儲(chǔ)器陣列。
圖22A是根據(jù)本發(fā)明的一般實(shí)施例,說(shuō)明具有平面對(duì)準(zhǔn)的更新方法的流程圖。
圖22B說(shuō)明在圖22A所示的流程圖中存儲(chǔ)更新的步驟的優(yōu)選實(shí)施例。
圖23A說(shuō)明在不考慮平面對(duì)準(zhǔn)的情況下按循序次序?qū)懭胙蚋聟^(qū)塊的邏輯單位的實(shí)例。
圖23B說(shuō)明在不考慮平面對(duì)準(zhǔn)的情況下按無(wú)序次序?qū)懭牖靵y更新區(qū)塊的邏輯單位的實(shí)例。
圖24A根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23A的循序更新實(shí)例。
圖24B根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明具有平面對(duì)準(zhǔn)和不具有任何填補(bǔ)的圖23B的混亂更新實(shí)例。
圖24C根據(jù)本發(fā)明的另一優(yōu)選實(shí)施例,說(shuō)明具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23B的混亂更新實(shí)例。
圖25說(shuō)明其中各頁(yè)含有兩個(gè)用于存儲(chǔ)兩個(gè)邏輯單位(如兩個(gè)邏輯扇區(qū))的存儲(chǔ)器單位的實(shí)例存儲(chǔ)器組織。
圖26A和圖21的存儲(chǔ)器結(jié)構(gòu)類似,只是各頁(yè)含有兩個(gè)扇區(qū)而非一個(gè)。
圖26B說(shuō)明圖26A所示的具有以示意線性方式布局的存儲(chǔ)器單元的元區(qū)塊。
圖27說(shuō)明替代性方案不用填補(bǔ)要從一個(gè)位置復(fù)制到另一個(gè)的邏輯單位,即可在更新區(qū)塊中進(jìn)行平面對(duì)準(zhǔn)。
圖28說(shuō)明其中缺陷區(qū)塊在合并操作期間發(fā)生編程失敗時(shí)會(huì)在另一個(gè)區(qū)塊上重復(fù)合并操作的方案。
圖29示意性說(shuō)明具有允許足夠時(shí)間完成寫入(更新)操作和合并操作的時(shí)序或?qū)懭氲却龝r(shí)間的主機(jī)寫入操作。
圖30根據(jù)本發(fā)明的一般方案,說(shuō)明編程失敗處置的流程圖。
圖31A說(shuō)明編程失敗處置的一實(shí)施例,其中第三(最后的重新定位)區(qū)塊和第二(中斷)區(qū)塊不同。
圖31B說(shuō)明編程失敗處置的另一實(shí)施例,其中第三(最后的重新定位)區(qū)塊和第二(中斷)區(qū)塊相同。
圖32A說(shuō)明造成合并操作的初始更新操作的流程圖。
圖32B根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明多階段合并操作的流程圖。
圖33說(shuō)明多階段合并操作的第一和最后階段的實(shí)例時(shí)序。
圖34A說(shuō)明其中中斷合并區(qū)塊并非用作更新區(qū)塊而是用作其合并操作已經(jīng)中斷的合并區(qū)塊的例子。
圖34B說(shuō)明始于圖34A的多階段合并的第三和最后階段。
圖35A說(shuō)明其中維持中斷合并區(qū)塊是接收主機(jī)寫入的更新區(qū)塊而非合并區(qū)塊的情況。
圖35B說(shuō)明始于第二種情況中圖35A的多階段合并的第三和最后階段。
圖36A說(shuō)明應(yīng)用到主機(jī)寫入觸發(fā)關(guān)閉更新區(qū)塊且更新區(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í)間安排實(shí)例。
圖38A說(shuō)明直到在預(yù)定數(shù)量的寫入后在其中記錄CBI扇區(qū)時(shí)的更新區(qū)塊。
圖38B說(shuō)明圖38A的進(jìn)一步在索引扇區(qū)后在其中記錄數(shù)據(jù)頁(yè)1、2和4的更新區(qū)塊。
圖38C說(shuō)明具有另一寫入以觸發(fā)索引扇區(qū)下一個(gè)記錄的邏輯扇區(qū)的圖38B的更新區(qū)塊。
圖39A說(shuō)明存儲(chǔ)在混亂更新區(qū)塊中各數(shù)據(jù)扇區(qū)標(biāo)頭中的中間寫入的中間索引。
圖39B說(shuō)明在寫入的各扇區(qū)標(biāo)頭中存儲(chǔ)中間寫入的中間索引的實(shí)例。
圖40說(shuō)明混亂更新區(qū)塊中各數(shù)據(jù)扇區(qū)標(biāo)頭中存儲(chǔ)的混亂索引字段中的信息。
圖41A說(shuō)明當(dāng)各存儲(chǔ)器單元存儲(chǔ)兩個(gè)位的數(shù)據(jù)時(shí),4狀態(tài)存儲(chǔ)器陣列的臨界電壓分布。
圖41B說(shuō)明現(xiàn)有使用格雷代碼(Gray code)的2次過(guò)程編程方案。
圖42說(shuō)明通過(guò)保存復(fù)制的各扇區(qū)以防衛(wèi)關(guān)鍵數(shù)據(jù)的方式。例如,可將扇區(qū)A、B、C、和D保存在復(fù)制副本中。如果在一個(gè)扇區(qū)副本中有數(shù)據(jù)毀損,那么可以讀取另一個(gè)來(lái)取代。
圖43說(shuō)明其中通常將復(fù)制扇區(qū)保存在多狀態(tài)存儲(chǔ)器中的非穩(wěn)固性。
圖44A說(shuō)明將關(guān)鍵數(shù)據(jù)錯(cuò)開的復(fù)制副本保存到多狀態(tài)存儲(chǔ)器的一實(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和圖41A同在說(shuō)明4狀態(tài)存儲(chǔ)器陣列的臨界電壓分布并顯示為是圖46B的參考。
圖46B說(shuō)明使用容錯(cuò)代碼同時(shí)保存關(guān)鍵數(shù)據(jù)的復(fù)制副本的另一實(shí)施例。
圖47是說(shuō)明兩個(gè)數(shù)據(jù)副本的可能狀態(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一起操作。存儲(chǔ)器系統(tǒng)通常形式上為存儲(chǔ)器卡或內(nèi)嵌式存儲(chǔ)器系統(tǒng)。存儲(chǔ)器系統(tǒng)20包括由控制器100控制操作的存儲(chǔ)器200。存儲(chǔ)器200包含分布在一個(gè)或一個(gè)以上集成電路芯片上的一個(gè)或一個(gè)以上陣列的非易失性存儲(chǔ)器單元。控制器100包括接口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編程代碼來(lái)實(shí)施控制器100的功能。處理器120或任選的協(xié)處理器121可處理錯(cuò)誤校正碼。在一替代性實(shí)施例中,控制器100可通過(guò)狀態(tài)機(jī)(未顯示)來(lái)實(shí)施。在另一實(shí)施例中,控制器100可在主機(jī)內(nèi)實(shí)施。
邏輯與物理區(qū)塊結(jié)構(gòu)圖2說(shuō)明根據(jù)本發(fā)明一優(yōu)選實(shí)施例的存儲(chǔ)器,其被組織成物理扇區(qū)群組(或元區(qū)塊)并且由所述控制器的存儲(chǔ)器管理器來(lái)管理。所述存儲(chǔ)器200會(huì)被組織成數(shù)個(gè)元區(qū)塊,其中每一元區(qū)塊是一群組的可一起擦除的物理扇區(qū)S0、…SN-1。
主機(jī)10可在文件系統(tǒng)或操作系統(tǒng)下執(zhí)行應(yīng)用程序時(shí)存取存儲(chǔ)器200。一般來(lái)說(shuō),所述主機(jī)會(huì)以邏輯扇區(qū)為單位來(lái)尋址數(shù)據(jù),其中,例如,各扇區(qū)可含有512字節(jié)的數(shù)據(jù)。還有,主機(jī)通常還會(huì)以邏輯群集為單位來(lái)讀取或?qū)懭胨龃鎯?chǔ)器系統(tǒng),各邏輯群集由一個(gè)或一個(gè)以上邏輯扇區(qū)組成。在部分主機(jī)系統(tǒng)中,可存在任選的主機(jī)側(cè)存儲(chǔ)器管理器,以執(zhí)行主機(jī)的較低級(jí)存儲(chǔ)器管理。在大部分的例子中,在讀取或?qū)懭氩僮髌陂g,主機(jī)10實(shí)質(zhì)上會(huì)對(duì)存儲(chǔ)器系統(tǒng)20發(fā)出指令,以讀取或?qū)懭牒幸淮哌B續(xù)地址的數(shù)據(jù)邏輯扇區(qū)的程序段。
一存儲(chǔ)器側(cè)存儲(chǔ)器管理器被實(shí)施在所述存儲(chǔ)器系統(tǒng)20的控制器100之中,用以管理所述快閃存儲(chǔ)器200的復(fù)數(shù)個(gè)元區(qū)塊中存儲(chǔ)與擷取主機(jī)邏輯扇區(qū)的數(shù)據(jù)。在優(yōu)選的實(shí)施例中,所述存儲(chǔ)器管理器含有數(shù)個(gè)軟件模塊,用于管理元區(qū)塊的擦除操作、讀取操作和寫入操作。所述存儲(chǔ)器管理器還會(huì)在所述快閃存儲(chǔ)器200和所述控制器RAM 130中維護(hù)和其操作相關(guān)的系統(tǒng)控制與目錄數(shù)據(jù)。
圖3A(i)-3A(iii)根據(jù)本發(fā)明一優(yōu)選實(shí)施例,示意性說(shuō)明介于一邏輯群組與一元區(qū)塊間的映射。所述物理存儲(chǔ)器的所述元區(qū)塊具有N個(gè)物理扇區(qū),用于存儲(chǔ)一邏輯群組的N個(gè)邏輯扇區(qū)數(shù)據(jù)。圖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ū)塊可能會(huì)具有以不同次序存儲(chǔ)的數(shù)據(jù),在所述情況中,所述元區(qū)塊就是所謂的「無(wú)序式」或「混亂式」。
在邏輯群組的最低地址和其映射之元區(qū)塊的最低地址之間會(huì)有偏移。這時(shí),邏輯扇區(qū)地址會(huì)在所述元區(qū)塊內(nèi)以環(huán)狀的方式從所述邏輯群組的底部反繞回到頂端。例如,在圖3A(iii)中,所述元區(qū)塊會(huì)在其始于邏輯扇區(qū)k的數(shù)據(jù)的第一位置中進(jìn)行存儲(chǔ)。在到達(dá)最后邏輯扇區(qū)N-1時(shí),元區(qū)塊會(huì)繞回到扇區(qū)0,最后在其最后物理扇區(qū)中存儲(chǔ)和邏輯扇區(qū)k-1關(guān)聯(lián)的數(shù)據(jù)。在優(yōu)選實(shí)施例中,會(huì)使用頁(yè)標(biāo)記來(lái)識(shí)別任何偏移,例如,識(shí)別在元區(qū)塊的第一物理扇區(qū)中所存儲(chǔ)的數(shù)據(jù)的起始邏輯扇區(qū)地址。當(dāng)兩個(gè)區(qū)塊僅相差一個(gè)頁(yè)標(biāo)記時(shí),會(huì)認(rèn)為所述兩個(gè)區(qū)塊是以相同的次序來(lái)存儲(chǔ)其邏輯扇區(qū)。
圖3B示意性說(shuō)明介于邏輯群組與元區(qū)塊間的映射。每一邏輯群組均被映射到一唯一的元區(qū)塊,除了其中的數(shù)據(jù)正在被更新的少數(shù)邏輯群組以外。一邏輯群組被更新之后,其會(huì)被映射到一不同的元區(qū)塊。可將映射信息維持在一組邏輯到物理目錄中,稍后將會(huì)詳細(xì)說(shuō)明。
還考慮其它類型的邏輯群組到元區(qū)塊映射關(guān)系。舉例來(lái)說(shuō),由Alan Sinclair在和本發(fā)明同一天提出的共同待決和共同擁有的美國(guó)專利申請(qǐng)案,標(biāo)題為「Adaptive Metablocks」中便揭示具有可變大小的元區(qū)塊。本文以引用的方式并入所述共同待決申請(qǐng)案全部的揭示內(nèi)容。
本發(fā)明的一個(gè)特點(diǎn)在于系統(tǒng)以單一邏輯劃分進(jìn)行操作,和存儲(chǔ)器系統(tǒng)的整個(gè)邏輯地址范圍中的邏輯扇區(qū)群組均以相同的方式來(lái)處理。例如,可將含有系統(tǒng)數(shù)據(jù)的扇區(qū)和含有用戶數(shù)據(jù)的扇區(qū)分布在邏輯地址空間中的任何地方。
不像現(xiàn)有技術(shù)的系統(tǒng),并無(wú)系統(tǒng)扇區(qū)(即,有關(guān)文件配置表、目錄或子目錄的扇區(qū))的特別劃分或分區(qū),來(lái)局部化在可能含有高頻率和小尺寸的更新數(shù)據(jù)的邏輯地址空間扇區(qū)中。而是,更新扇區(qū)的邏輯群組的本方案會(huì)有效處理為系統(tǒng)扇區(qū)典型且為文件數(shù)據(jù)典型的存取模式。
圖4說(shuō)明元區(qū)塊和物理存儲(chǔ)器中結(jié)構(gòu)的對(duì)準(zhǔn)??扉W存儲(chǔ)器包含可當(dāng)作一個(gè)單位一起擦除的存儲(chǔ)器單元的區(qū)塊。這種擦除區(qū)塊是快閃存儲(chǔ)器的最小的擦除單位或存儲(chǔ)器的最小可擦除單位(MEU)。最小擦除單位是存儲(chǔ)器的硬件設(shè)計(jì)參數(shù),不過(guò),在一些支持多個(gè)MEU擦除的存儲(chǔ)器系統(tǒng)中,也可以設(shè)定包含一個(gè)以上MEU的「超級(jí)MEU」。對(duì)于快閃EEPROM,一個(gè)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ū)??扉W存儲(chǔ)器的物理地址空間會(huì)被處理成一組元區(qū)塊,其中元區(qū)塊是最小的擦除單位。在本說(shuō)明書內(nèi),「元區(qū)塊」與「區(qū)塊」等詞語(yǔ)是同義詞,用來(lái)定義媒體管理在系統(tǒng)級(jí)的最小擦除單位,而「最小擦除單位」或MEU一詞則用來(lái)表示快閃存儲(chǔ)器的最小擦除單位。
連接最小擦除單位(MEU)來(lái)形成元區(qū)塊為了最大化編程速度和擦除速度,會(huì)盡可能利用并行方式,這是通過(guò)配置多個(gè)要并行編程的頁(yè)信息(位在多個(gè)MEU中),和配置多個(gè)要并行擦除的MEU。
在快閃存儲(chǔ)器中,一個(gè)頁(yè)是可在單一操作中一起編程的存儲(chǔ)器單元的群組。一個(gè)頁(yè)可包含一個(gè)或一個(gè)以上扇區(qū)。還有,可將存儲(chǔ)器陣列劃分成一個(gè)以上平面,其中一次只能編程或擦除一個(gè)平面內(nèi)的一個(gè)MEU。最后,可在一個(gè)或一個(gè)以上存儲(chǔ)器芯片中分布各平面。
在快閃存儲(chǔ)器中,MEU可包含一個(gè)或一個(gè)以上頁(yè)??蓪⒖扉W存儲(chǔ)器芯片內(nèi)的數(shù)個(gè)MEU按平面來(lái)組織。由于可同時(shí)編程或擦除各平面的一個(gè)MEU,因此有利于從各平面選擇一個(gè)MEU來(lái)形成多個(gè)MEU元區(qū)塊(請(qǐng)見(jiàn)下文圖5B)。
圖5A說(shuō)明由連接不同平面的最小擦除單位構(gòu)成的元區(qū)塊。各元區(qū)塊(例如MB0、MB1、…)均是由存儲(chǔ)器系統(tǒng)的不同平面的數(shù)個(gè)MEU構(gòu)成,其中不同平面可分布在一個(gè)或一個(gè)以上芯片中。圖2所示的元區(qū)塊連接管理器170可管理各元區(qū)塊的MEU的連接。如果MEU之一沒(méi)有失敗,那么在初始格式化程序期間設(shè)定各元區(qū)塊,并在整個(gè)系統(tǒng)壽命中保留其組成的MEU。
圖5B說(shuō)明從各平面選擇一最小擦除單位(MEU)以連接成元區(qū)塊的一實(shí)施例。
圖5C說(shuō)明其中從各平面選擇一個(gè)以上MEU以連接成元區(qū)塊的另一實(shí)施例。在另一實(shí)施例中,可從各平面選擇一個(gè)以上MEU以形成一超級(jí)MEU。例如,舉例來(lái)說(shuō),一超級(jí)MEU可能是由兩個(gè)MEU構(gòu)成。這時(shí),會(huì)采取一次以上過(guò)程以進(jìn)行讀取或?qū)懭氩僮鳌?br>
由Carlos Gonzales等人在和本發(fā)明同一天遞交的共同待決和共同擁有的美國(guó)專利申請(qǐng)案,標(biāo)題為「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures」之中還揭示將復(fù)數(shù)個(gè)MEU連接和再連接成元區(qū)塊。本文以引用的方式并入所述共同待決申請(qǐng)案全部的揭示內(nèi)容。
元區(qū)塊管理圖6是如控制器和快閃存儲(chǔ)器中實(shí)施的元區(qū)塊管理系統(tǒng)的示意方框圖。元區(qū)塊管理系統(tǒng)包含實(shí)施在控制器100中的各種功能模塊,并在以階層形式分布在快閃存儲(chǔ)器200和控制器RAM 130的表格和列表中維持各種控制數(shù)據(jù)(包括目錄數(shù)據(jù))。實(shí)施在控制器100中的功能模塊包括接口模塊110、邏輯到物理地址轉(zhuǎn)換模塊140、更新區(qū)塊管理器模塊150、擦除區(qū)塊管理器模塊160和元區(qū)塊連接管理器170。
接口110允許元區(qū)塊管理系統(tǒng)接口連接主機(jī)系統(tǒng)。邏輯到物理地址轉(zhuǎn)換模塊140將主機(jī)的邏輯地址映射到物理存儲(chǔ)器位置。更新區(qū)塊管理器模塊150管理存儲(chǔ)器中給定的數(shù)據(jù)邏輯群組的數(shù)據(jù)更新操作。已擦除的區(qū)塊管理器160管理元區(qū)塊的擦除操作和其用于存儲(chǔ)新信息的配置。元區(qū)塊連接管理器170管理扇區(qū)的最小可擦除區(qū)塊的子群組的連接以構(gòu)成給定的元區(qū)塊。這些模塊將在其各自段落中詳細(xì)說(shuō)明。
在操作期間,元區(qū)塊管理系統(tǒng)會(huì)產(chǎn)生且配合控制數(shù)據(jù)(例如地址、控制與狀態(tài)信息)來(lái)運(yùn)作。由于許多控制數(shù)據(jù)傾向于是頻繁改變的小型數(shù)據(jù),因此無(wú)法在具有大型區(qū)塊結(jié)構(gòu)的快閃存儲(chǔ)器中予以有效存儲(chǔ)和維持。為了在非易失性快閃存儲(chǔ)器中存儲(chǔ)比較靜態(tài)的控制數(shù)據(jù),同時(shí)在控制器RAM中尋找數(shù)量較少的比較有變化的控制數(shù)據(jù),以進(jìn)行更有效的更新和存取,會(huì)采用階層式與分布式的方案。在發(fā)生電源關(guān)機(jī)或故障時(shí),這種方案允許掃描非易失性存儲(chǔ)器中一小組的控制數(shù)據(jù),以在易失性控制器RAM中快速重建控制數(shù)據(jù)。這之所以可行是因?yàn)楸景l(fā)明可限制與給定邏輯群組的數(shù)據(jù)的可能活動(dòng)相關(guān)聯(lián)的區(qū)塊數(shù)量。以這種方式,可限制掃描。此外,會(huì)將部分需要持久性的控制數(shù)據(jù)存儲(chǔ)在按扇區(qū)更新的非易失性元區(qū)塊中,其中各更新將會(huì)記錄取代先前扇區(qū)的新扇區(qū)。控制數(shù)據(jù)會(huì)采用扇區(qū)索引方案以在元區(qū)塊中跟蹤按扇區(qū)的更新。
非易失性快閃存儲(chǔ)器200存儲(chǔ)大量相對(duì)較靜態(tài)的控制數(shù)據(jù)。這包括群組地址表(GAT)210、混亂區(qū)塊索引(CBI)220、已擦除的區(qū)塊列表(EBL)230和MAP 240。GAT 210可跟蹤扇區(qū)的邏輯群組和其對(duì)應(yīng)元區(qū)塊之間的映射。除非更新,否則映射關(guān)系不會(huì)改變。CBI 220可跟蹤更新期間邏輯上無(wú)序扇區(qū)的映射。EBL 230可跟蹤已經(jīng)擦除的元區(qū)塊集區(qū)。MAP 240是顯示快閃存儲(chǔ)器中所有元區(qū)塊的擦除狀態(tài)的位圖。
易失性控制器RAM 130存儲(chǔ)一小部分頻繁改變和存取的控制數(shù)據(jù)。這包括配置區(qū)塊列表(ABL)134和清除區(qū)塊列表(CBL)136。ABL 134可跟蹤元區(qū)塊用于記錄更新數(shù)據(jù)的配置,而CBL 136可跟蹤已解除配置和已擦除的元區(qū)塊。在優(yōu)選實(shí)施例中,RAM 130可當(dāng)作存儲(chǔ)在快閃存儲(chǔ)器200中的控制數(shù)據(jù)的高速緩存。
更新區(qū)塊管理器更新區(qū)塊管理器150(如圖2所示)處理邏輯群組的更新。根據(jù)本發(fā)明的一方面,會(huì)配置進(jìn)行更新的扇區(qū)的各邏輯群組一用于記錄更新數(shù)據(jù)的專用更新元區(qū)塊。在優(yōu)選實(shí)施例中,會(huì)將邏輯群組的一個(gè)或一個(gè)以上扇區(qū)的任何程序段記錄在更新區(qū)塊中。可管理更新區(qū)塊以接收按循序次序或無(wú)序(又稱為「混亂」)次序的更新數(shù)據(jù)。混亂更新區(qū)塊允許邏輯群組內(nèi)按任何次序更新扇區(qū)數(shù)據(jù),并可任意重復(fù)個(gè)別扇區(qū)。尤其,不必重新定位任何數(shù)據(jù)扇區(qū),循序更新區(qū)塊可變成混亂更新區(qū)塊?;靵y數(shù)據(jù)更新不需要任何預(yù)定的區(qū)塊配置;以任何邏輯地址的無(wú)序?qū)懭肟杀蛔詣?dòng)納入。因此,不像現(xiàn)有技術(shù)的系統(tǒng),和現(xiàn)有技術(shù)系統(tǒng)不同的是,并不必特別處理所述邏輯群組的各個(gè)更新程序段是以邏輯循序或無(wú)序。一般更新區(qū)塊只用來(lái)按照主機(jī)請(qǐng)求的次序記錄各種程序段。例如,即使主機(jī)系統(tǒng)數(shù)據(jù)或系統(tǒng)控制數(shù)據(jù)傾向于以混亂方式加以更新,仍不必以和主機(jī)用戶數(shù)據(jù)的不同方式來(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í),其可以說(shuō)是「完整」。至于更新區(qū)塊,當(dāng)其最后按邏輯上循序次序填滿更新數(shù)據(jù)時(shí),則更新區(qū)塊將成為隨時(shí)可取代原始元區(qū)塊的已更新的完整元區(qū)塊。另一方面,如果更新區(qū)塊按邏輯上和完整區(qū)塊的不同次序填滿更新數(shù)據(jù),更新區(qū)塊為無(wú)序或混亂更新區(qū)塊,且必須進(jìn)一步處理無(wú)次序的程序段,以便最后能按和完整區(qū)塊相同的次序來(lái)存儲(chǔ)邏輯群組的更新數(shù)據(jù)。在優(yōu)選情況中,其在單一元區(qū)塊中是按照邏輯上循序的次序。進(jìn)一步的處理涉及將更新區(qū)塊中已更新的扇區(qū)和原始區(qū)塊中未改變的扇區(qū)合并到另一個(gè)更新元區(qū)塊。然后合并的更新區(qū)塊將按照邏輯上循序的次序并能夠用來(lái)取代原始區(qū)塊。在一些預(yù)定條件下,合并過(guò)程之前會(huì)有一個(gè)或一個(gè)以上壓縮過(guò)程。壓縮過(guò)程只是將混亂更新區(qū)塊的扇區(qū)重新記錄成取代混亂的更新區(qū)塊,同時(shí)除去任何已由相同邏輯扇區(qū)的后續(xù)更新廢棄的復(fù)制邏輯扇區(qū)。
更新方案允許同時(shí)運(yùn)行多個(gè)多達(dá)預(yù)定極大值的更新線程。各線程是使用其專用更新元區(qū)塊進(jìn)行更新的邏輯群組。
循序數(shù)據(jù)更新在首先更新屬于邏輯群組的數(shù)據(jù)時(shí),會(huì)配置元區(qū)塊并將其專用為邏輯群組的更新數(shù)據(jù)的更新區(qū)塊。當(dāng)從主機(jī)接收寫入邏輯群組的一個(gè)或一個(gè)以上扇區(qū)的程序段的命令時(shí)(現(xiàn)有的元區(qū)塊已經(jīng)存儲(chǔ)所有完整扇區(qū)),會(huì)配置更新區(qū)塊。對(duì)于第一主機(jī)寫入操作,會(huì)將第一程序段的數(shù)據(jù)記錄在更新區(qū)塊上。由于各主機(jī)寫入是具有連續(xù)邏輯地址的一個(gè)或一個(gè)以上扇區(qū)的一個(gè)程序段,因此會(huì)遵循第一更新在性質(zhì)上永遠(yuǎn)循序。在后續(xù)的主機(jī)寫入中,會(huì)按照從主機(jī)接收的次序?qū)⑾嗤壿嬋航M內(nèi)的更新程序段記錄在更新區(qū)塊中。一個(gè)區(qū)塊繼續(xù)經(jīng)管理為循序更新區(qū)塊,而關(guān)聯(lián)邏輯群組內(nèi)由主機(jī)更新的扇區(qū)維持邏輯上循序。在這個(gè)邏輯群組中更新的所有扇區(qū)會(huì)被寫入這個(gè)循序更新區(qū)塊,直到區(qū)塊關(guān)閉或轉(zhuǎn)換為混亂更新區(qū)塊。
圖7A說(shuō)明由于兩個(gè)獨(dú)立的主機(jī)寫入操作而按循序次序?qū)懭胙蚋聟^(qū)塊的邏輯群組中的扇區(qū)的實(shí)例,而邏輯群組的原始區(qū)塊中對(duì)應(yīng)的扇區(qū)被廢棄。在主機(jī)寫入操作#1中,會(huì)更新邏輯扇區(qū)LS5-LS8的數(shù)據(jù)。更新成為L(zhǎng)S5′-LS8′的數(shù)據(jù)會(huì)被記錄在新配置的專用更新區(qū)塊中。
為了方便,會(huì)將邏輯群組中要更新的第一扇區(qū)記錄在始于第一物理扇區(qū)位置的專用更新區(qū)塊中。一般而言,要更新的第一邏輯扇區(qū)不必是群組的邏輯第一扇區(qū),因此,在邏輯群組的起點(diǎn)和更新區(qū)塊的起點(diǎn)之間會(huì)有偏移。這個(gè)偏移稱為「頁(yè)標(biāo)記」,如先前結(jié)合圖3A所述。后續(xù)的扇區(qū)將按照邏輯上循序的次序加以更新。在寫入邏輯群組的最后扇區(qū)時(shí),群組地址會(huì)繞回,且寫入序列會(huì)從群組的第一扇區(qū)繼續(xù)。
在主機(jī)寫入操作#2中,會(huì)更新邏輯扇區(qū)LS9-LS12中數(shù)據(jù)的程序段。更新為L(zhǎng)S9′-LS12′的數(shù)據(jù)會(huì)被記錄在直接在最后寫入停止處之后的位置中的專用更新區(qū)塊。圖中顯示兩個(gè)主機(jī)寫入如下按邏輯上循序次序記錄在更新區(qū)塊中的更新數(shù)據(jù),即LS5′-LS12′。更新區(qū)塊可看作循序更新區(qū)塊,因其已按邏輯上循序的次序填入。記錄在更新區(qū)塊中的更新數(shù)據(jù)可廢棄原始區(qū)塊中對(duì)應(yīng)的數(shù)據(jù)。
混亂數(shù)據(jù)更新當(dāng)關(guān)聯(lián)的邏輯群組內(nèi)由主機(jī)更新的任何扇區(qū)為邏輯上無(wú)序時(shí),可為現(xiàn)有的循序更新區(qū)塊啟始混亂更新區(qū)塊管理?;靵y更新區(qū)塊是數(shù)據(jù)更新區(qū)塊的形式,其中關(guān)聯(lián)邏輯群組內(nèi)的邏輯扇區(qū)可按任何次序進(jìn)行更新并可重復(fù)任意次。其建立可通過(guò)以下方式在主機(jī)寫入的扇區(qū)是邏輯上無(wú)序時(shí),由循序更新區(qū)塊轉(zhuǎn)換成經(jīng)更新的邏輯群組內(nèi)先前寫入的扇區(qū)。所有隨后在這個(gè)邏輯群組中更新的扇區(qū)會(huì)被寫入混亂更新區(qū)塊中的下一個(gè)可用的扇區(qū)位置,無(wú)論其在群組內(nèi)的邏輯扇區(qū)地址是什么。
圖7B說(shuō)明由于五個(gè)獨(dú)立的主機(jī)寫入操作而按混亂次序?qū)懭牖靵y更新區(qū)塊的邏輯群組的扇區(qū)的實(shí)例,而邏輯群組的原始區(qū)塊中被取代的扇區(qū)和混亂更新區(qū)塊中被復(fù)制的扇區(qū)被廢棄。在主機(jī)寫入操作#1中,會(huì)更新存儲(chǔ)在原始元區(qū)塊中的給定邏輯群組的邏輯扇區(qū)LS10-LS11。已更新的邏輯扇區(qū)LS10′-LS11′會(huì)被存儲(chǔ)到新配置的更新區(qū)塊中。這時(shí),更新區(qū)塊為循序更新區(qū)塊。在主機(jī)寫入操作#2中,會(huì)將邏輯扇區(qū)LS5-LS6更新為L(zhǎng)S5′-LS6′并將其記錄在祭接上一個(gè)寫入之后的位置的更新區(qū)塊中。這可將循序更新區(qū)塊轉(zhuǎn)換為混亂的更新區(qū)塊。在主機(jī)寫入操作#3,再次更新邏輯扇區(qū)LS10并將其記錄在更新區(qū)塊的下一個(gè)位置成為L(zhǎng)S10″。這時(shí),更新區(qū)塊中的LS10″可取代先前記錄中的LS10′,而LS10′又可取代原始區(qū)塊中的LS10。在主機(jī)寫入操作#4中,再次更新邏輯扇區(qū)LS10的數(shù)據(jù)和將其記錄在更新區(qū)塊的下一個(gè)位置中成為L(zhǎng)S10。因此,LS10現(xiàn)在是邏輯扇區(qū)LS10的最后且唯一有效的數(shù)據(jù)。在主機(jī)寫入操作#5中,會(huì)更新邏輯扇區(qū)LS30的數(shù)據(jù)并將其記錄在更新區(qū)塊中成為L(zhǎng)S30′。因此,這個(gè)實(shí)例顯示可以按照任何次序且使用任意重復(fù),將一邏輯群組內(nèi)的復(fù)數(shù)個(gè)邏輯扇區(qū)寫入到一混亂更新區(qū)塊中。
強(qiáng)制循序更新圖8說(shuō)明由于兩個(gè)在邏輯地址有中斷的獨(dú)立的主機(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一般會(huì)使更新區(qū)塊成為無(wú)序。由于地址跳躍不是很多,一個(gè)選項(xiàng)是在執(zhí)行主機(jī)寫入#2之前將原始區(qū)塊的中間扇區(qū)的數(shù)據(jù)復(fù)制到更新區(qū)塊,以首先執(zhí)行填補(bǔ)操作(#2A)。以這種方式,即可保存更新區(qū)塊的循序性質(zhì)。
圖9說(shuō)明根據(jù)本發(fā)明的一般實(shí)施例,更新區(qū)塊管理器更新一個(gè)邏輯群組的數(shù)據(jù)的過(guò)程流程圖。更新過(guò)程包含以下步驟步驟260所述存儲(chǔ)器被組織成復(fù)數(shù)個(gè)區(qū)塊,每一區(qū)塊均被劃分成可一起擦除的復(fù)數(shù)個(gè)存儲(chǔ)器單位,每一存儲(chǔ)器單位是用于存儲(chǔ)一邏輯單位的數(shù)據(jù)。
步驟262所述數(shù)據(jù)被組織成復(fù)數(shù)個(gè)邏輯群組,每一邏輯群組均被劃分成復(fù)數(shù)個(gè)邏輯單位。
步驟264在標(biāo)準(zhǔn)的情況中,根據(jù)第一指定次序,優(yōu)選為邏輯上循序的次序,將邏輯群組的所有邏輯單位存儲(chǔ)在原始區(qū)塊的存儲(chǔ)器單位中。以這種方式,即可得知存取區(qū)塊中單個(gè)邏輯單位的索引。
步驟270對(duì)于給定邏輯群組(如,LGx)的數(shù)據(jù),請(qǐng)求更新LGx內(nèi)的邏輯單位。(邏輯單位更新為舉例說(shuō)明。一般而言,更新將是由LGx內(nèi)一個(gè)或一個(gè)以上連續(xù)邏輯單位所組成的程序段。)步驟272請(qǐng)求的更新邏輯單位將會(huì)存儲(chǔ)在專用于記錄LGx的更新的第二區(qū)塊中。記錄次序是根據(jù)第二次序,通常是更新請(qǐng)求的次序。本發(fā)明的一個(gè)特點(diǎn)允許設(shè)定初始對(duì)按照邏輯上循序或混亂次序記錄的數(shù)據(jù)為一般的更新區(qū)塊。因此根據(jù)第二次序,第二區(qū)塊可以是循序更新區(qū)塊或混亂更新區(qū)塊。
步驟274當(dāng)過(guò)程循環(huán)返回到步驟270時(shí),第二區(qū)塊繼續(xù)記錄所請(qǐng)求的邏輯單位。在關(guān)閉的預(yù)定條件成形時(shí)將會(huì)關(guān)閉第二區(qū)塊,以接收進(jìn)一步更新。這時(shí),程序繼續(xù)進(jìn)行到步驟276。
步驟276判斷所述已關(guān)閉的第二區(qū)塊是否以和原始區(qū)塊相同的次序來(lái)記錄其更新邏輯單位。當(dāng)所述兩個(gè)區(qū)塊記錄邏輯單位僅相差一頁(yè)標(biāo)記時(shí),所述兩個(gè)區(qū)塊便會(huì)被看作具有相同的次序,如結(jié)合圖3A所述。如果這兩個(gè)區(qū)塊具有相同的次序,過(guò)程繼續(xù)進(jìn)行到步驟280,否則,必須在步驟290執(zhí)行垃圾收集。
步驟280由于第二區(qū)塊具有和第一區(qū)塊相同的次序,因此其可用來(lái)取代原始的第一區(qū)塊。然后,更新過(guò)程停止于步驟299。
步驟290從第二區(qū)塊(更新區(qū)塊)和第一區(qū)塊(原始區(qū)塊)搜集給定邏輯群組的各邏輯單位的最新版本。然后以類似于第一區(qū)塊的次序?qū)⒔o定邏輯群組的已合并的邏輯單位寫入第三區(qū)塊。
步驟292由于第三區(qū)塊(合并的區(qū)塊)具有和第一區(qū)塊相同的次序,因此其可用來(lái)取代原始的第一區(qū)塊。然后,更新過(guò)程停止于步驟299。
步驟299當(dāng)停閉程序建立完整的更新區(qū)塊時(shí),所述區(qū)塊會(huì)變成給定邏輯群組的新標(biāo)準(zhǔn)區(qū)塊。將會(huì)結(jié)束這個(gè)邏輯群組的更新線程。
圖10根據(jù)本發(fā)明的優(yōu)選實(shí)施例,說(shuō)明更新區(qū)塊管理器來(lái)更新一個(gè)邏輯群組的數(shù)據(jù)的過(guò)程流程圖。更新過(guò)程包含以下步驟步驟310對(duì)于給定邏輯群組(如,LGx)的數(shù)據(jù),會(huì)請(qǐng)求更新LGx內(nèi)的邏輯扇區(qū)。(扇區(qū)更新為舉例說(shuō)明。一般而言,更新將是由LGx內(nèi)一個(gè)或一個(gè)以上連續(xù)邏輯扇區(qū)所組成的程序段。)步驟312如果LGx專用的更新區(qū)塊尚未存在,繼續(xù)進(jìn)行到步驟410以啟始邏輯群組的新的更新線程。這可通過(guò)配置記錄邏輯群組的更新數(shù)據(jù)專用的更新區(qū)塊來(lái)完成。如果已經(jīng)有打開的更新區(qū)塊,則繼續(xù)進(jìn)行到步驟314,開始將更新扇區(qū)記錄到更新區(qū)塊上。
步驟314如果當(dāng)前更新區(qū)塊已經(jīng)混亂(即,無(wú)序),則直接繼續(xù)進(jìn)行到步驟510,以將請(qǐng)求的更新扇區(qū)記錄到混亂更新區(qū)塊上。如果當(dāng)前更新區(qū)塊為循序,則繼續(xù)進(jìn)行到步驟316,以處理循序更新區(qū)塊。
步驟316本發(fā)明的一個(gè)特點(diǎn)是允許在初始時(shí)將一更新區(qū)塊設(shè)置成通用于以邏輯循序或混亂次序來(lái)記錄數(shù)據(jù)。不過(guò),因?yàn)樗鲞壿嬋航M最終會(huì)將其數(shù)據(jù)以邏輯循序的次序存儲(chǔ)在一元區(qū)塊之中,所以,因此希望盡可能保持所述更新區(qū)塊為循序。接著,當(dāng)關(guān)閉一更新區(qū)塊以進(jìn)行進(jìn)一步更新時(shí),將會(huì)需要較少的處理,因?yàn)椴⒉恍枰M(jìn)行垃圾收集。
因此,判斷所請(qǐng)求的更新是否遵循更新區(qū)塊的當(dāng)前循序次序。如果更新遵循循序,則繼續(xù)進(jìn)行到步驟510以執(zhí)行循序更新,且更新區(qū)塊將維持循序。另一方面,如果更新未遵循循序(混亂更新),則其會(huì)在未采取任何動(dòng)作時(shí)將循序更新區(qū)塊轉(zhuǎn)換成混亂更新區(qū)塊。
在一實(shí)施例中,不會(huì)進(jìn)行任何動(dòng)作來(lái)挽救這種情況,然后過(guò)程直接進(jìn)行到步驟370,其中允許更新將更新區(qū)塊變成混亂的更新區(qū)塊。
任選的強(qiáng)制循序過(guò)程在另一實(shí)施例中,會(huì)看情況執(zhí)行強(qiáng)制循序過(guò)程步驟320,以盡可能因顧及懸置的混亂更新而保存循序更新區(qū)塊。其中有兩個(gè)情況,這兩個(gè)情況都需要復(fù)制原始區(qū)塊的遺失扇區(qū),以維持更新區(qū)塊上記錄的邏輯扇區(qū)的循序次序。第一個(gè)情況是其中更新可建立較短的地址跳躍。第二個(gè)情況是提早停閉更新區(qū)塊以將其保持循序。強(qiáng)制循序過(guò)程步驟320包含以下子步驟步驟330如果更新建立的邏輯地址跳躍未大于預(yù)定的數(shù)量CB,那么過(guò)程繼續(xù)進(jìn)行到步驟350的強(qiáng)制循序更新過(guò)程,否則程序繼續(xù)進(jìn)行到步驟340,以考慮其是否適合進(jìn)行強(qiáng)制循序停閉。
步驟340如果未填充的物理扇區(qū)數(shù)量超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CC(其典型值是更新區(qū)塊尺寸的一半),那么更新區(qū)塊為相對(duì)未被使用,因此不會(huì)提早關(guān)閉。過(guò)程繼續(xù)進(jìn)行到步驟370,和更新區(qū)塊會(huì)成為混亂。另一方面,如果實(shí)質(zhì)上已填充更新區(qū)塊,那么將其看作已經(jīng)充分利用,因此進(jìn)入步驟360以進(jìn)行強(qiáng)制循序停閉。
步驟350只要地址跳躍未超過(guò)預(yù)定的數(shù)量CB,強(qiáng)制循序更新允許當(dāng)前的循序更新區(qū)塊維持循序。實(shí)質(zhì)上,會(huì)復(fù)制更新區(qū)塊的關(guān)聯(lián)原始區(qū)塊的扇區(qū),以填充地址跳躍越過(guò)的空隙。因此,在繼續(xù)進(jìn)行到步驟510之前,會(huì)以中間地址的數(shù)據(jù)填補(bǔ)循序更新區(qū)塊,以循序記錄當(dāng)前的更新。
步驟360如果當(dāng)前循序的更新區(qū)塊實(shí)質(zhì)上已經(jīng)被填充,而非由懸置的混亂更新轉(zhuǎn)換為混亂更新區(qū)塊,那么強(qiáng)制循序停閉允許當(dāng)前循序的更新區(qū)塊變?yōu)殛P(guān)閉狀態(tài)?;靵y或無(wú)序更新的定義是具有以下項(xiàng)目的更新不是上述地址跳躍例外所涵蓋的正向地址轉(zhuǎn)換、反向地址轉(zhuǎn)換、或地址重復(fù)。為了防止循序更新區(qū)塊被混亂更新轉(zhuǎn)換,會(huì)通過(guò)復(fù)制更新區(qū)塊的關(guān)聯(lián)的原始的部分廢棄的區(qū)塊的扇區(qū)來(lái)填充更新區(qū)塊的未寫入的扇區(qū)位置。然后完全廢棄和擦除原始區(qū)塊?,F(xiàn)在,當(dāng)前的更新區(qū)塊具有完整組的邏輯扇區(qū),然后停止成為取代原始元區(qū)塊的完整元區(qū)塊。然后,過(guò)程繼續(xù)進(jìn)行到步驟430以在其位置配置更新區(qū)塊,以接受在步驟310先請(qǐng)求的懸置扇區(qū)更新的記錄。
轉(zhuǎn)換成混亂的更新區(qū)塊步驟370當(dāng)懸置的更新未按循序次序且看情況,如果無(wú)法滿足強(qiáng)制循序條件,那么在過(guò)程繼續(xù)進(jìn)行到步驟510時(shí),通過(guò)允許在更新區(qū)塊上記錄具有無(wú)序地址的懸置更新扇區(qū),來(lái)允許將循序更新區(qū)塊轉(zhuǎn)換為混亂更新區(qū)塊。如果存在最大數(shù)量的混亂更新區(qū)塊,那么在允許轉(zhuǎn)換進(jìn)行之前,必須關(guān)閉最久未存取的混亂更新區(qū)塊;因而不會(huì)超過(guò)最大數(shù)量的混亂區(qū)塊。最久未存取的混亂更新區(qū)塊的識(shí)別和步驟420所述的一般情況相同,但僅限于混亂更新區(qū)塊。這時(shí)關(guān)閉混亂更新區(qū)塊可通過(guò)如步驟550所述的合并來(lái)達(dá)成。
服從于系統(tǒng)限制的新更新區(qū)塊配置步驟410將擦除元區(qū)塊配置為更新區(qū)塊的過(guò)程始于確定是否超過(guò)預(yù)定的系統(tǒng)限制。由于資源有限,存儲(chǔ)器管理系統(tǒng)通常允許更新區(qū)塊的預(yù)定最大數(shù)量CA同時(shí)存在。這個(gè)限制是循序更新區(qū)塊和混亂更新區(qū)塊的總數(shù),也是設(shè)計(jì)參數(shù)。在優(yōu)選實(shí)施例中,這個(gè)限制為例如最大8個(gè)更新區(qū)塊。還有,由于系統(tǒng)資源的較高需求,在可同時(shí)打開的混亂更新區(qū)塊的最大數(shù)量上還有對(duì)應(yīng)的預(yù)定限制(例如,4個(gè))。
因此,在已經(jīng)配置CA個(gè)更新區(qū)塊時(shí),只有在關(guān)閉現(xiàn)有已配置的更新區(qū)塊之一后,才能滿足下一個(gè)配置請(qǐng)求。過(guò)程繼續(xù)進(jìn)行到步驟420。當(dāng)打開的更新區(qū)塊數(shù)量小于CA時(shí),過(guò)程直接進(jìn)行到步驟430。
步驟420在超過(guò)更新區(qū)塊的最大數(shù)量CA時(shí),關(guān)閉最久未存取的更新區(qū)塊并執(zhí)行垃圾收集。最久未存取的更新區(qū)塊會(huì)被識(shí)別為與最久未存取的邏輯區(qū)塊關(guān)聯(lián)的更新區(qū)塊。為了確定最久未存取的區(qū)塊,存取包括邏輯扇區(qū)的寫入和選擇性讀取。會(huì)按照存取的次序維持打開更新區(qū)塊的列表;初始化時(shí),不會(huì)假設(shè)任何存取次序。更新區(qū)塊的關(guān)閉在更新區(qū)塊為循序時(shí),將按照結(jié)合步驟360和步驟530所述的相同過(guò)程,在更新區(qū)塊為混亂時(shí),將按照結(jié)合步驟540所述的相同過(guò)程。此關(guān)閉可挪出空間以在步驟430配置新的更新區(qū)塊。
步驟430配置新的元區(qū)塊作為所述給定邏輯群組LGX專用的更新區(qū)塊便可滿足所述配置要求。接著,過(guò)程繼續(xù)進(jìn)行到步驟510。
在更新區(qū)塊上記錄更新數(shù)據(jù)步驟510將請(qǐng)求的更新扇區(qū)記錄在更新區(qū)塊的下一個(gè)可用的物理位置上。然后,過(guò)程繼續(xù)進(jìn)行到步驟520,確定更新區(qū)塊是否可以停閉。
更新區(qū)塊停閉步驟520如果更新區(qū)塊還有接受附加更新的空間,則進(jìn)行到步驟570。否則進(jìn)行到步驟522以停閉更新區(qū)塊。在當(dāng)前請(qǐng)求的寫入嘗試寫入多于區(qū)塊所有空間的邏輯扇區(qū)時(shí),有兩個(gè)填滿更新區(qū)塊的可能實(shí)施方案。在第一實(shí)施方案中,會(huì)將寫入請(qǐng)求分成兩個(gè)部分,其中第一部分可一直寫入到區(qū)塊的最后物理扇區(qū)。然后關(guān)閉區(qū)塊和將寫入的第二部分處理為下一個(gè)請(qǐng)求的寫入。在另一個(gè)實(shí)施方案中,會(huì)在區(qū)塊的其余扇區(qū)被填補(bǔ)時(shí)保留請(qǐng)求的寫入,然后再將其關(guān)閉。請(qǐng)求的寫入會(huì)被處理為下一個(gè)請(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í),會(huì)完全廢棄原始區(qū)塊并將其擦除。然后過(guò)程繼續(xù)進(jìn)行到步驟570,其中給定邏輯群組的更新線程結(jié)束。
混亂更新區(qū)塊停閉步驟540由于更新區(qū)塊為無(wú)序填充,可能含有一些邏輯扇區(qū)的多個(gè)更新,因此會(huì)執(zhí)行垃圾收集以挽救其中的有效數(shù)據(jù)?;靵y更新區(qū)塊可為已經(jīng)壓縮或合并。在步驟542將會(huì)確定所執(zhí)行的過(guò)程。
步驟542要執(zhí)行壓縮或合并將根據(jù)更新區(qū)塊的退化而定。如果邏輯扇區(qū)已更新多次,那么其邏輯地址將高度退化。記錄在更新區(qū)塊上的將有相同邏輯扇區(qū)的多個(gè)版本,而只有最后記錄的版本為所述邏輯扇區(qū)的有效版本。在含有多個(gè)版本的邏輯扇區(qū)的更新區(qū)塊中,有所區(qū)分的邏輯扇區(qū)的數(shù)量會(huì)比邏輯群組的數(shù)量少很多。
在優(yōu)選實(shí)施例中,當(dāng)更新區(qū)塊中有所區(qū)分的邏輯扇區(qū)的數(shù)量超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CD(其典型值是邏輯群組尺寸的一半)時(shí),停閉過(guò)程會(huì)在步驟550執(zhí)行合并,否則過(guò)程會(huì)繼續(xù)進(jìn)行到步驟560的壓縮。
步驟550如果要合并混亂更新區(qū)塊,那么將以含有合并數(shù)據(jù)的新的標(biāo)準(zhǔn)元區(qū)塊取代原始區(qū)塊和更新區(qū)塊。合并后,更新線程將結(jié)束于步驟570。
步驟560如果要壓縮混亂更新區(qū)塊,那么將以載有壓縮數(shù)據(jù)的新的更新區(qū)塊進(jìn)行取代。壓縮后,已壓縮更新區(qū)塊的處理將結(jié)束于步驟570。或者,可將壓縮延遲直到再次寫入更新區(qū)塊,因此移除壓縮之后是沒(méi)有中間更新的合并的可能性。然后,當(dāng)步驟502中出現(xiàn)下一個(gè)要求在LGX中進(jìn)行更新時(shí),在給定邏輯區(qū)塊的進(jìn)一步更新中使用新的更新區(qū)塊。
步驟570當(dāng)停閉過(guò)程建立完整的更新區(qū)塊時(shí),所述區(qū)塊會(huì)變成給定邏輯群組的新標(biāo)準(zhǔn)區(qū)塊。這個(gè)邏輯群組的更新線程將會(huì)終止。在停閉過(guò)程建立取代現(xiàn)有更新區(qū)塊的新的更新區(qū)塊時(shí),會(huì)使用新的更新區(qū)塊記錄為給定邏輯群組請(qǐng)求的下一個(gè)更新。在更新區(qū)塊未停止時(shí),處理會(huì)在步驟310中出現(xiàn)在LGX中的下一個(gè)更新請(qǐng)求時(shí)繼續(xù)。
從上述過(guò)程可知,在關(guān)閉混亂更新區(qū)塊時(shí),會(huì)進(jìn)一步處理其上記錄的更新數(shù)據(jù)。尤其,其有效數(shù)據(jù)的垃圾收集是通過(guò)以下過(guò)程壓縮到另一個(gè)混亂區(qū)塊的過(guò)程,或和其關(guān)聯(lián)的原始區(qū)塊合并以形成新的標(biāo)準(zhǔn)循序區(qū)塊的過(guò)程。
圖11A是詳細(xì)說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的合并過(guò)程的流程圖。混亂更新區(qū)塊合并是在停止更新區(qū)塊時(shí)(如當(dāng)更新區(qū)塊已填滿其寫入的最后物理扇區(qū)位置時(shí))執(zhí)行的兩個(gè)可能過(guò)程之一。區(qū)塊中寫入的有所區(qū)分的邏輯扇區(qū)數(shù)量超過(guò)預(yù)定的設(shè)計(jì)參數(shù)CD時(shí),將選擇合并。圖10所示的合并過(guò)程步驟550包含以下子步驟步驟551在關(guān)閉混亂更新區(qū)塊時(shí),會(huì)配置可取而代之的新元區(qū)塊。
步驟552在混亂更新區(qū)塊和關(guān)聯(lián)的原始區(qū)塊中,搜集各邏輯扇區(qū)的最新版本并忽略所有的廢棄扇區(qū)。
步驟554將所搜集的有效扇區(qū)按邏輯上循序次序記錄在新的元區(qū)塊上,以形成完整區(qū)塊,即,按循序次序記錄的邏輯群組的所有邏輯扇區(qū)的區(qū)塊。
步驟556以新的完整區(qū)塊取代原始區(qū)塊。
步驟558擦除已停止的更新區(qū)塊和原始區(qū)塊。
圖11B是詳細(xì)說(shuō)明關(guān)閉圖10所示的混亂更新區(qū)塊的壓縮過(guò)程的流程圖。區(qū)塊中寫入的有所區(qū)分的邏輯扇區(qū)數(shù)量低于預(yù)定的設(shè)計(jì)參數(shù)CD時(shí),將選擇壓縮。圖10所示的壓縮過(guò)程步驟560包含以下子步驟步驟561在混亂更新區(qū)塊被壓縮時(shí),會(huì)配置取而代之的新元區(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.完整邏輯群組中的所有邏輯扇區(qū)已按邏輯上循序次序被寫入單一元區(qū)塊之中,其可能利用頁(yè)標(biāo)記卷繞方式。
2.未寫入邏輯群組中未曾寫入任何邏輯扇區(qū)。邏輯群組在群組地址表中會(huì)標(biāo)示為未寫入且沒(méi)有任何配置的元區(qū)塊。返回預(yù)定的數(shù)據(jù)模式,以響應(yīng)這個(gè)群組內(nèi)每一扇區(qū)的主機(jī)讀取。
3.循序更新邏輯群組內(nèi)的一些扇區(qū)已經(jīng)按邏輯上循序次序被寫入元區(qū)塊中,可能使用頁(yè)標(biāo)記,因此其可取代群組中任何先前完整狀態(tài)的對(duì)應(yīng)的邏輯扇區(qū)。
4.混亂更新邏輯群組內(nèi)的一些扇區(qū)已經(jīng)按邏輯上無(wú)序次序被寫入元區(qū)塊中,可能使用頁(yè)標(biāo)記,因此其可取代群組中任何先前完整狀態(tài)的對(duì)應(yīng)的邏輯扇區(qū)。群組內(nèi)的扇區(qū)可被寫入一次以上,其中最新版本將取代所有先前的版本。
圖13A說(shuō)明元區(qū)塊的所有可能狀態(tài),和其間在各種操作下的可能轉(zhuǎn)換。
圖13B說(shuō)明元區(qū)塊的所有可能狀態(tài),和其間在各種操作下的可能轉(zhuǎn)換1.已擦除元區(qū)塊中的所有扇區(qū)已被擦除。
2.循序更新元區(qū)塊已經(jīng)被部份寫入,且扇區(qū)呈現(xiàn)邏輯上循序次序,可能使用頁(yè)標(biāo)記。所有扇區(qū)均屬于相同的邏輯群組。
3.混亂更新所述元區(qū)塊已經(jīng)被部份或完全寫入,其扇區(qū)呈現(xiàn)邏輯上無(wú)序次序。任何扇區(qū)均可被寫入一次以上。所有扇區(qū)均屬于相同的邏輯群組。
4.完整元區(qū)塊已經(jīng)以邏輯循序的次序被完全寫入,可能使用頁(yè)標(biāo)記。
5.原始元區(qū)塊先前為完整但至少一扇區(qū)已因主機(jī)數(shù)據(jù)更新而廢棄。
圖14(A)-14(J)是說(shuō)明邏輯群組狀態(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īng)顟B(tài)。
圖14(B)顯示對(duì)應(yīng)于第一完整操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。先前未寫入的循序更新邏輯群組因主機(jī)循序?qū)懭胨猩葏^(qū)而變成完整。如果存儲(chǔ)器卡通過(guò)以預(yù)定的數(shù)據(jù)模式填充其余未寫入的扇區(qū)來(lái)填滿群組,那么也會(huì)發(fā)生轉(zhuǎn)換。元區(qū)塊變成完整。
圖14(C)說(shuō)明對(duì)應(yīng)于第一混亂操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。先前未寫入的循序更新邏輯群組在主機(jī)無(wú)序?qū)懭胫辽僖簧葏^(qū)時(shí)變成混亂。
圖14(D)顯示對(duì)應(yīng)于第一壓縮操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊區(qū)塊將先前未寫入的混亂更新邏輯群組內(nèi)的所有有效扇區(qū)復(fù)制到新的混亂元區(qū)塊,然后再將其擦除。
圖14(E)說(shuō)明對(duì)應(yīng)于第一合并操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊的混亂區(qū)塊移動(dòng)先前未寫入的混亂更新邏輯群組內(nèi)的所有有效扇區(qū),來(lái)按邏輯上循序次序填充新配置的已擦除區(qū)塊。主機(jī)未寫入的扇區(qū)會(huì)以預(yù)定的數(shù)據(jù)模式加以填充。然后擦除舊的混亂區(qū)塊。
圖14(F)顯示對(duì)應(yīng)于循序?qū)懭氩僮鞯倪壿嬋航M和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。主機(jī)按邏輯上循序次序?qū)⑼暾壿嬋航M的一個(gè)或一個(gè)以上扇區(qū)寫入新配置的已擦除元區(qū)塊。邏輯群組和元區(qū)塊成為循序更新?tīng)顟B(tài)。先前完整的元區(qū)塊變成原始元區(qū)塊。
圖14(G)顯示對(duì)應(yīng)于循序填充操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。循序更新邏輯群組在主機(jī)循序?qū)懭胨衅渖葏^(qū)時(shí)變成完整。這也可發(fā)生在以原始區(qū)塊的有效扇區(qū)填充循序更新邏輯群組以使其完整的垃圾收集期間,在此之后會(huì)擦除原始區(qū)塊。
圖14(H)說(shuō)明對(duì)應(yīng)于無(wú)序?qū)懭氩僮鞯倪壿嬋航M和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。循序更新邏輯群組在主機(jī)無(wú)序?qū)懭胫辽僖簧葏^(qū)時(shí)變成混亂。無(wú)序扇區(qū)寫入可導(dǎo)致更新區(qū)塊或相應(yīng)原始區(qū)塊中的有效扇區(qū)變成廢棄。
圖14(I)顯示對(duì)應(yīng)于壓縮操作的邏輯群組和元區(qū)塊轉(zhuǎn)換的狀態(tài)圖。從舊區(qū)塊將混亂更新邏輯群組內(nèi)的所有有效扇區(qū)復(fù)制到新的混亂元區(qū)塊,然后再將其擦除。原始區(qū)塊不會(huì)受到影響。
圖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會(huì)被保存在控制器RAM130之中,以允許管理已擦除區(qū)塊的配置、配置的更新區(qū)塊、關(guān)聯(lián)的區(qū)塊和控制結(jié)構(gòu),以啟用正確的邏輯到物理地址轉(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ū)塊列表具有一個(gè)已關(guān)閉的各數(shù)據(jù)更新區(qū)塊的條目,但其條目在邏輯到主物理目錄中并未更新。各條目保留有以下信息。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ǔ)一個(gè)邏輯扇區(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ū)。索引數(shù)據(jù)結(jié)構(gòu)實(shí)質(zhì)上允許在快閃存儲(chǔ)器中維持具有不常更新需求的索引信息,以免性能明顯受到影響。另一方面,會(huì)將混亂區(qū)塊中最近寫入扇區(qū)的列表保留在控制器RAM的混亂扇區(qū)列表中。還有,會(huì)將快閃存儲(chǔ)器的高速緩存的索引信息保留在控制器RAM中,以最小化地址轉(zhuǎn)換的快閃扇區(qū)存取的數(shù)量。各混亂區(qū)塊的索引被存儲(chǔ)在快閃存儲(chǔ)器中的混亂區(qū)塊索引(CBI)扇區(qū)中。
圖16A說(shuō)明混亂區(qū)塊索引(CBI)扇區(qū)的數(shù)據(jù)字段。混亂區(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í),會(huì)將其寫入CBI區(qū)塊620中下一個(gè)可用的物理扇區(qū)位置。因此,CBI扇區(qū)的多個(gè)副本可存在于CBI區(qū)塊中,其中只有最后寫入的副本為有效。例如,已經(jīng)利用有效版本的最新版本將邏輯群組LG1的CBI扇區(qū)更新三次。區(qū)塊中最后寫入的CBI扇區(qū)的一組索引可識(shí)別CBI區(qū)塊中各有效扇區(qū)的位置。在這個(gè)實(shí)例中,區(qū)塊中最后寫入的CBI扇區(qū)是LG136的CBI扇區(qū),且其索引組是取代所有先前索引組的有效索引組。當(dāng)CBI區(qū)塊最后變成由CBI扇區(qū)完全填充時(shí),會(huì)將所有有效扇區(qū)再寫入新的區(qū)塊位置,以在控制寫入操作期間壓縮區(qū)塊。然后擦除整個(gè)區(qū)塊。
CBI扇區(qū)內(nèi)的混亂區(qū)塊索引字段含有邏輯群組內(nèi)各邏輯扇區(qū)的索引條目或映射到混亂更新區(qū)塊的子群組。各索引條目指示對(duì)應(yīng)邏輯扇區(qū)的有效數(shù)據(jù)所在的混亂更新區(qū)塊內(nèi)的偏移。保留的索引值代表混亂更新區(qū)塊中沒(méi)有邏輯扇區(qū)的有效數(shù)據(jù),并指示關(guān)聯(lián)的原始區(qū)塊中的對(duì)應(yīng)扇區(qū)為有效。一些高速緩存的混亂區(qū)塊索引字段條目會(huì)被保留在控制器RAM中。
CBI扇區(qū)內(nèi)的混亂區(qū)塊信息字段含有針對(duì)存在于系統(tǒng)中的各混亂更新區(qū)塊的一個(gè)條目,以記錄區(qū)塊的地址參數(shù)信息。這個(gè)字段中的信息只在CBI區(qū)塊的最后寫入扇區(qū)中有效。此信息也會(huì)出現(xiàn)在RAM的數(shù)據(jù)結(jié)構(gòu)中。
各混亂更新區(qū)塊的條目包括三個(gè)地址參數(shù)。第一個(gè)參數(shù)是與混亂更新區(qū)塊關(guān)聯(lián)的邏輯群組(或邏輯群組號(hào))的邏輯地址。第二個(gè)參數(shù)是混亂更新區(qū)塊的元區(qū)塊地址。第三個(gè)參數(shù)是寫入混亂更新區(qū)塊中最后扇區(qū)的物理地址偏移。偏移信息設(shè)定初始化期間混亂更新區(qū)塊的掃描起點(diǎn),以在RAM中重建數(shù)據(jù)結(jié)構(gòu)。
扇區(qū)索引字段含有針對(duì)CBI區(qū)塊中各有效CBI扇區(qū)的條目。其可限定CBI區(qū)塊內(nèi)有關(guān)各許可的混亂更新區(qū)塊的最近寫入的CBI扇區(qū)處的偏移。索引中偏移的保留值指示許可的混亂更新區(qū)塊并不存在。
圖16C是說(shuō)明存取正在進(jìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。在更新過(guò)程期間,會(huì)將更新數(shù)據(jù)記錄在混亂更新區(qū)塊中,而未改變的數(shù)據(jù)則留在與邏輯群組關(guān)聯(lián)的原始元區(qū)塊中。在混亂更新下存取邏輯群組的邏輯扇區(qū)的過(guò)程如下步驟650開始定位給定邏輯群組的給定邏輯扇區(qū)。
步驟652在CBI區(qū)塊中定位最后寫入的CBI扇區(qū)。
步驟654通過(guò)查找最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段,定位與給定邏輯群組關(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ū)索引字段,定位給定邏輯群組的CBI扇區(qū)。
步驟662通過(guò)查找定位的CBI扇區(qū)的混亂區(qū)塊索引字段,定位混亂區(qū)塊或原始區(qū)塊中的給定邏輯扇區(qū)。
圖16D說(shuō)明根據(jù)其中已將邏輯群組劃分成子群組的替代性實(shí)施例,存取正在進(jìn)行混亂更新的給定邏輯群組的邏輯扇區(qū)的數(shù)據(jù)的流程圖。CBI扇區(qū)的有限容量只能跟蹤預(yù)定最大數(shù)量的邏輯扇區(qū)。當(dāng)邏輯群組具有多于單個(gè)CBI扇區(qū)所能處理的邏輯扇區(qū)時(shí),會(huì)將邏輯群組劃分成多個(gè)具有指派給各子群組的CBI扇區(qū)的子群組。在一個(gè)實(shí)例中,各CBI扇區(qū)具有足夠跟蹤由256扇區(qū)所組成和多達(dá)8個(gè)混亂更新區(qū)塊的邏輯群組的容量。如果邏輯群組具有超過(guò)256扇區(qū)的尺寸,那么存在用于邏輯群組內(nèi)各256扇區(qū)子群組的獨(dú)立的CBI扇區(qū)。CBI扇區(qū)可存在用于邏輯群組內(nèi)多達(dá)8個(gè)子群組,以支持尺寸多達(dá)2048個(gè)扇區(qū)的邏輯群組。
在優(yōu)選實(shí)施例中,會(huì)采用間接索引方案以有助于索引的管理。扇區(qū)索引的各條目具有直接和間接字段。
直接扇區(qū)索引可定義CBI區(qū)塊內(nèi)有關(guān)特定混亂更新區(qū)塊的所有可能CBI扇區(qū)處的偏移。此字段中的信息只在有關(guān)所述特定混亂更新區(qū)塊的最后寫入的CBI扇區(qū)中有效。索引中偏移的保留值指示CBI扇區(qū)并不存在,因?yàn)閷?duì)應(yīng)的有關(guān)混亂更新區(qū)塊的邏輯子群組或是不存在,或是由于已配置更新區(qū)塊而未經(jīng)更新。
間接扇區(qū)索引可限定有關(guān)各許可的混亂更新區(qū)塊的最近寫入的CBI扇區(qū)處的CBI區(qū)塊內(nèi)的偏移。索引中偏移的保留值指示許可的混亂更新區(qū)塊并不存在。
圖16D顯示在混亂更新下存取邏輯群組的邏輯扇區(qū)的過(guò)程,其步驟如下步驟670將各邏輯群組劃分成多個(gè)子群組并將CBI扇區(qū)指派給各子群組。
步驟680開始定位給定邏輯群組的給定子群組的給定邏輯扇區(qū)。
步驟682在CBI區(qū)塊中定位最后寫入的CBI扇區(qū)。
步驟684通過(guò)查找最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段,定位與給定子群組關(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ū)索引字段,定位給定邏輯群組的多個(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ū)索引字段,定位給定子群組的CBI扇區(qū)。
步驟696通過(guò)查找給定子群組的CBI扇區(qū)的混亂區(qū)塊索引字段,定位混亂區(qū)塊或原始區(qū)塊中的給定邏輯扇區(qū)。
圖16E說(shuō)明在其中將各邏輯群組劃分成多個(gè)子群組的實(shí)施例中,混亂區(qū)塊索引(CBI)扇區(qū)和其功能的實(shí)例。邏輯群組700原來(lái)將其完整的數(shù)據(jù)存儲(chǔ)在原始元區(qū)塊702中。接著,邏輯群組配合配置專用的混亂更新區(qū)塊704進(jìn)行更新。在本實(shí)例中,將邏輯群組700劃分成子群組,這些子群組A、B、C、D各具有256個(gè)扇區(qū)。
為了定位子群組B中的第i個(gè)扇區(qū),會(huì)先定位CBI區(qū)塊620中最后寫入的CBI扇區(qū)。最后寫入的CBI扇區(qū)的混亂區(qū)塊信息字段可提供定位給定邏輯群組的混亂更新區(qū)塊704的地址。同時(shí),其還可提供寫入混亂區(qū)塊中的最后扇區(qū)的位置。此信息在掃描和重建索引時(shí)有用。
如果最后寫入的CBI扇區(qū)證明是給定邏輯群組的四個(gè)CBI扇區(qū)之一,那么會(huì)進(jìn)一步確定其是否正是含有第i個(gè)邏輯扇區(qū)的給定子群組B的CBI扇區(qū)。如果是,那么CBI扇區(qū)的混亂區(qū)塊索引會(huì)指向存儲(chǔ)第i個(gè)邏輯扇區(qū)的數(shù)據(jù)的元區(qū)塊位置。扇區(qū)位置會(huì)在混亂更新區(qū)塊704中或在原始區(qū)塊702中。
如果最后寫入的CBI扇區(qū)證明是給定邏輯群組的四個(gè)CBI扇區(qū)之一但卻不屬于子群組B,那么會(huì)查找其直接扇區(qū)索引,以定位子群組B的CBI扇區(qū)。在定位此確切的CBI扇區(qū)后,會(huì)查找混亂區(qū)塊索引,以在混亂更新區(qū)塊704和原始區(qū)塊702中定位第i個(gè)邏輯扇區(qū)。
如果最后寫入的CBI扇區(qū)證明不是給定邏輯群組的四個(gè)CBI扇區(qū)中的任一個(gè),那么會(huì)查找間接扇區(qū)索引以定位四個(gè)扇區(qū)中的一個(gè)。在圖16E所示的實(shí)例中,會(huì)定位子群組C的CBI扇區(qū)。然后,子群組C的此CBI扇區(qū)查找其直接扇區(qū)索引,以定位子群組B的確切的CBI扇區(qū)。此實(shí)例顯示在查找混亂區(qū)塊索引時(shí),將發(fā)現(xiàn)第i個(gè)邏輯扇區(qū)并未改變且會(huì)在原始區(qū)塊中定位其有效數(shù)據(jù)。
在給定邏輯群組的子群組C中定位第j個(gè)邏輯扇區(qū)時(shí)也會(huì)做出同樣的考慮。此實(shí)例顯示最后寫入的CBI扇區(qū)證明不是給定邏輯群組的四個(gè)CBI扇區(qū)中的任一個(gè)。其間接扇區(qū)索引指向給定群組的四個(gè)CBI扇區(qū)之一。所指向的四個(gè)中的最后寫入結(jié)果也正是子群組C的CBI扇區(qū)。在查找其混亂區(qū)塊索引時(shí),將發(fā)現(xiàn)第j個(gè)邏輯扇區(qū)被定位在混亂更新區(qū)塊704中的指定位置。
控制器RAM中存在系統(tǒng)中的各混亂更新區(qū)塊的混亂扇區(qū)列表。每份列表均含有一份從快閃存儲(chǔ)器中最后被更新的相關(guān)CBI扇區(qū)開始到當(dāng)前扇區(qū)為止被寫入所述混亂更新區(qū)塊中的扇區(qū)的記錄。特定混亂更新區(qū)塊的邏輯扇區(qū)地址(可保留在混亂扇區(qū)列表中)的數(shù)量是8到16的典型值的設(shè)計(jì)參數(shù)。列表的最佳尺寸可確定為其對(duì)混亂數(shù)據(jù)寫入操作的過(guò)度額外開銷的影響和初始化期間的扇區(qū)掃描時(shí)間之間的權(quán)衡。
在系統(tǒng)初始化期間,為了識(shí)別從其關(guān)聯(lián)的CBI扇區(qū)之一的先前更新后所寫入的有效扇區(qū),必須掃描各混亂更新區(qū)塊。在控制器RAM中,會(huì)構(gòu)成各混亂更新區(qū)塊的混亂扇區(qū)列表。只需要在最后寫入的CBI扇區(qū)中,從各區(qū)塊的混亂區(qū)塊信息字段中定義的最后扇區(qū)地址開始掃描各區(qū)塊即可。
在配置混亂更新區(qū)塊時(shí),會(huì)寫入CBI扇區(qū)以對(duì)應(yīng)于所有的經(jīng)更新的邏輯子群組?;靵y更新區(qū)塊的邏輯和物理地址會(huì)被寫入扇區(qū)中可用的混亂區(qū)塊信息字段,其中空值條目在混亂區(qū)塊索引字段中。會(huì)在控制器RAM中打開混亂扇區(qū)列表。
在關(guān)閉混亂更新區(qū)塊時(shí),會(huì)將從扇區(qū)中混亂區(qū)塊信息字段移除的區(qū)塊邏輯和物理地址寫入CBI扇區(qū)。RAM中對(duì)應(yīng)的混亂扇區(qū)列表變成未使用。
可修改控制器RAM中對(duì)應(yīng)的混亂扇區(qū)列表,以包括寫入混亂更新區(qū)塊的扇區(qū)的記錄。當(dāng)控制器RAM中的混亂扇區(qū)列表沒(méi)有寫入混亂更新區(qū)塊的其它扇區(qū)記錄的任何可用空間時(shí),為有關(guān)列表中扇區(qū)的邏輯子群組寫入已更新的CBI扇區(qū),然后清除列表。
當(dāng)CBI區(qū)塊620變滿時(shí),會(huì)將有效的CBI扇區(qū)復(fù)制到已配置的已擦除區(qū)塊中,然后擦除先前的CBI區(qū)塊。
地址表圖2所示的邏輯到物理地址轉(zhuǎn)換模塊140負(fù)責(zé)關(guān)聯(lián)快閃存儲(chǔ)器中主機(jī)的邏輯地址和對(duì)應(yīng)的物理地址。邏輯群組和物理群組(元區(qū)塊)間的映射是存儲(chǔ)在非易失性快閃存儲(chǔ)器200和易失性卻較為快捷的RAM 130(見(jiàn)圖1)中分布的一組表格和列表中。地址表被維持在含有存儲(chǔ)器系統(tǒng)中每一邏輯群組的元區(qū)塊地址的快閃存儲(chǔ)器中。此外,最近寫入扇區(qū)的邏輯到物理地址記錄會(huì)臨時(shí)保存在RAM中。在系統(tǒng)啟動(dòng)后進(jìn)行初始化時(shí),可從快閃存儲(chǔ)器中的區(qū)塊列表和數(shù)據(jù)扇區(qū)標(biāo)頭中重構(gòu)這些易失性記錄。因此,快閃存儲(chǔ)器中的地址表只需要偶而更新,以降低控制數(shù)據(jù)的過(guò)度耗用寫入操作的百分比。
邏輯群組的地址記錄的階層包括在RAM中的打開的更新區(qū)塊列表、關(guān)閉的更新區(qū)塊列表和維持在快閃存儲(chǔ)器中的群組地址表(GAT)。
打開的更新區(qū)塊列表是控制器RAM中當(dāng)前打開用于寫入已更新的主機(jī)扇區(qū)數(shù)據(jù)的數(shù)據(jù)更新區(qū)塊的列表。區(qū)塊的條目在區(qū)塊關(guān)閉時(shí)會(huì)被移到關(guān)閉的更新區(qū)塊列表。關(guān)閉的更新區(qū)塊列表是控制器RAM中已經(jīng)關(guān)閉的數(shù)據(jù)更新區(qū)塊的列表。列表中條目的子集在控制寫入操作期間會(huì)被移到群組地址表中的扇區(qū)。
群組地址表(GAT)是存儲(chǔ)器系統(tǒng)中主機(jī)數(shù)據(jù)的所有邏輯群組的元區(qū)塊地址的列表。GAT含有根據(jù)邏輯地址循序排序的各邏輯群組的一個(gè)條目。GAT中的第n個(gè)條目含有具地址n的邏輯群組的元區(qū)塊地址。在優(yōu)選實(shí)施例中,GAT是快閃存儲(chǔ)器中的表格,其中包含一組具定義存儲(chǔ)器系統(tǒng)中每一邏輯群組的元區(qū)塊地址的條目的扇區(qū)(被稱作GAT扇區(qū))。在快閃存儲(chǔ)器中,會(huì)將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)所有有效nGAT扇區(qū)的信息。各GAT條目有三個(gè)字段,即元區(qū)塊號(hào)碼、如先前結(jié)合圖3A(iii)定義的頁(yè)標(biāo)記、和指示元區(qū)塊是否已經(jīng)重新鏈接的旗標(biāo)。GAT扇區(qū)索引列出GAT區(qū)塊中有效GAT扇區(qū)的位置。此索引會(huì)在每一GAT扇區(qū)中但會(huì)被GAT區(qū)塊中下一個(gè)寫入的GAT扇區(qū)的版本所取代。因此只有最后寫入的GAT扇區(qū)中的版本為有效。
圖17B說(shuō)明記錄在一個(gè)或一個(gè)以上GAT區(qū)塊中的群組地址表(GAT)扇區(qū)的實(shí)例。GAT區(qū)塊是記錄GAT扇區(qū)專用的元區(qū)塊。在更新GAT扇區(qū)時(shí),會(huì)將其寫入GAT區(qū)塊720中下一個(gè)可用的物理扇區(qū)位置。因此,GAT扇區(qū)的多個(gè)副本可存在GAT區(qū)塊中,其中只有最后寫入的副本為有效。例如,GAT扇區(qū)255(含有邏輯群組LG3968-LG4098的指標(biāo))至少已經(jīng)使用有效版本的最新版本更新兩次。區(qū)塊中最后寫入的GAT扇區(qū)的一組索引可識(shí)別GAT區(qū)塊中各有效扇區(qū)的位置。在此實(shí)例中,區(qū)塊中最后寫入的GAT扇區(qū)是GAT扇區(qū)236,和其索引組是取代所有先前索引組的有效索引組。當(dāng)GAT區(qū)塊最后變成以GAT扇區(qū)完全填充時(shí),會(huì)通過(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ù)僅占用區(qū)塊內(nèi)總扇區(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ū)。這時(shí),各GAT區(qū)塊是和固定范圍的邏輯群組相關(guān)聯(lián)。
可將GAT更新執(zhí)行為控制寫入操作的一部分,此操作會(huì)在ABL用盡配置的區(qū)塊時(shí)被觸發(fā)(見(jiàn)圖18)。其執(zhí)行和ABL填充和CBL清空操作同時(shí)進(jìn)行。在GAT更新操作期間,一個(gè)GAT扇區(qū)具有利用來(lái)自關(guān)閉的更新區(qū)塊列表中對(duì)應(yīng)條目的信息所更新的條目。GAT條目被更新時(shí),會(huì)從關(guān)閉的更新區(qū)塊列表(CUBL)中移除任何對(duì)應(yīng)的條目。例如,會(huì)根據(jù)關(guān)閉的更新區(qū)塊列表中的第一條目選擇要更新的GAT扇區(qū)??蓪⒏律葏^(qū)寫入GAT區(qū)塊中的下一個(gè)可用扇區(qū)位置。
當(dāng)沒(méi)有任何扇區(qū)位置可供已更新的GAT扇區(qū)使用時(shí),在控制寫入操作期間就會(huì)發(fā)生GAT再寫入操作。將會(huì)配置新的GAT區(qū)塊和從完整的GAT區(qū)塊按循序次序復(fù)制GAT索引所定義的有效GAT扇區(qū)。然后擦除整個(gè)GAT區(qū)塊。
GAT高速緩存是控制器RAM 130中,GAT扇區(qū)中的128個(gè)條目的子劃分的條目的副本。GAT高速緩存條目的數(shù)量是一系統(tǒng)設(shè)計(jì)參數(shù),典型值為32。每次從GAT扇區(qū)讀取一個(gè)條目時(shí),即可建立相關(guān)扇區(qū)子劃分的GAT高速緩存。將會(huì)維持多個(gè)GAT高速緩存。其數(shù)量是典型值為4的設(shè)計(jì)參數(shù)。GAT高速緩存會(huì)基于最久未使用利用不同扇區(qū)子劃分的條目來(lái)覆寫。
擦除的元區(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í),會(huì)選擇保存在控制器RAM中的配置區(qū)塊列表(ABL)(見(jiàn)圖15)中的下一個(gè)可用元區(qū)塊號(hào)碼。同樣,在棄置元區(qū)塊后而將其擦除時(shí),會(huì)將其號(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ū)中,且會(huì)記錄在稱為「MAP區(qū)塊」的專用元區(qū)塊中。這些分布在控制器RAM和快閃存儲(chǔ)器中的列表可提供已擦除區(qū)塊記錄的層級(jí)以有效管理已擦除元區(qū)塊的使用。
圖18是說(shuō)明使用和再循環(huán)已擦除區(qū)塊的控制和目錄信息的分布和流程的示意方框圖??刂坪湍夸洈?shù)據(jù)被維持在駐存在快閃存儲(chǔ)器200的控制器RAM 130或在MAP區(qū)塊750中所保存的列表中。
在優(yōu)選實(shí)施例中,控制器RAM 130會(huì)保存配置區(qū)塊列表(ABL)610和清除區(qū)塊列表(CBL)740。如先前結(jié)合圖15所述,配置區(qū)塊列表(ABL)可記錄最近已配置哪個(gè)元區(qū)塊以存儲(chǔ)用戶數(shù)據(jù)或存儲(chǔ)系統(tǒng)控制數(shù)據(jù)結(jié)構(gòu)。在必須配置新的已擦除元區(qū)塊時(shí),會(huì)在配置區(qū)塊列表(ABL)中選擇下一個(gè)可用的元區(qū)塊號(hào)碼。同樣,清除的區(qū)塊列表(CBL)記錄用于跟蹤已解除配置和擦除的更新元區(qū)塊。在控制器RAM 130(見(jiàn)圖1)中會(huì)保存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的子集,各列表中的條目分別具有對(duì)應(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。當(dāng)已擦除區(qū)塊在配置用盡且在棄置元區(qū)塊時(shí)再循環(huán)時(shí),關(guān)聯(lián)的控制和目錄數(shù)據(jù)優(yōu)選含在可在MAP區(qū)塊中更新的邏輯扇區(qū)中,其中會(huì)將更新數(shù)據(jù)的各實(shí)例記錄在新的區(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í),會(huì)在控制寫入操作期間將所有有效扇區(qū)再寫入新的區(qū)塊位置而將其壓縮。然后擦除整個(gè)區(qū)塊。
各EBM扇區(qū)760含有已擦除的區(qū)塊列表(EBL)770,此列表是已擦除區(qū)塊總體的子集地址的列表。已擦除的區(qū)塊列表(EBL)770可當(dāng)作含有已擦除的元區(qū)塊號(hào)碼的緩沖器,從此緩沖器中會(huì)定期取用元區(qū)塊號(hào)碼以再填充ABL,并定期將元區(qū)塊號(hào)碼新增到此緩沖器中以再清空CBL。EBL 770可當(dāng)作用于以下條目的緩沖器可用的區(qū)塊緩沖器(ABB)772、已擦除的區(qū)塊緩沖器(EBB)774和已清除的區(qū)塊緩沖器(CBB)776。
可用的區(qū)塊緩沖器(ABB)772含有緊接先前ABL填充操作之后的ABL 610的條目的副本。其實(shí)際上是恰好在ABL填充操作之后的ABL的備份副本。
已擦除的區(qū)塊緩沖器(EBB)774含有先前從MAP扇區(qū)780或CBB列表776傳送的已擦除的區(qū)塊地址(在下文描述),且所述地址可在ABL填充操作期間傳送到ABL 610。
已清除的區(qū)塊緩沖器(CBB)776含有在CBL清空操作期間已從CBL 740傳送和隨后會(huì)被傳送到MAP扇區(qū)780或到EBB列表774的已擦除區(qū)塊的地址。
各個(gè)MAP扇區(qū)780含有被稱作「MAP」的位圖結(jié)構(gòu)。MAP會(huì)使用快閃存儲(chǔ)器中各元區(qū)塊的一位,以用來(lái)指示各區(qū)塊的擦除狀態(tài)。對(duì)應(yīng)于EBM扇區(qū)中ABL、CBL或已擦除的區(qū)塊列表中所列舉的區(qū)塊地址的位在MAP中不會(huì)被設(shè)為擦除狀態(tài)。
區(qū)塊配置算法永遠(yuǎn)不會(huì)使用在MAP、已擦除的區(qū)塊列表、ABL或CBL內(nèi),任何未含有有效數(shù)據(jù)結(jié)構(gòu)和未被指定為已擦除區(qū)塊的區(qū)塊,因此無(wú)法存取這類區(qū)塊用于存儲(chǔ)主機(jī)或控制數(shù)據(jù)結(jié)構(gòu)。這可提供從可存取的快閃存儲(chǔ)器地址空間排除具有缺陷位置的區(qū)塊的簡(jiǎn)單機(jī)制。
圖18所示的階層允許有效地管理已擦除的區(qū)塊記錄,并且對(duì)被存儲(chǔ)在所述控制器的RAM中的所述區(qū)塊地址列表提供充分的安全性??梢圆活l繁的方式在所述區(qū)塊地址列表和一個(gè)以上的MAP扇區(qū)780之間交換已擦除的區(qū)塊條目??稍陔娫搓P(guān)閉后的系統(tǒng)初始化期間,經(jīng)由被存儲(chǔ)在快閃存儲(chǔ)器中的扇區(qū)中已擦除的區(qū)塊列表和地址轉(zhuǎn)換表中的信息,和有限地掃描快閃存儲(chǔ)器中少量被參考的數(shù)據(jù)區(qū)塊,來(lái)重構(gòu)所述列表。
用于更新已擦除元區(qū)塊記錄的階層所采用的所述算法可以下面的次序來(lái)配置使用已擦除區(qū)塊將來(lái)自所述MAP區(qū)塊750的區(qū)塊叢在地址次序上交錯(cuò)來(lái)自所述CBL 740的區(qū)塊地址叢,其反映的是區(qū)塊被所述主機(jī)更新的次序。對(duì)大部份的元區(qū)塊大小與系統(tǒng)存儲(chǔ)器容量而言,單一MAP扇區(qū)可針對(duì)所述系統(tǒng)中的所有元區(qū)塊提供一位圖。在此情況中,已擦除的區(qū)塊必定會(huì)以與被記錄在此MAP扇區(qū)中相同的地址次序來(lái)配置使用。
擦除區(qū)塊管理操作如上述,ABL 610是具有以下地址條目的列表可經(jīng)配置使用的已擦除元區(qū)塊,和最近已配置為數(shù)據(jù)更新區(qū)塊的元區(qū)塊。ABL中區(qū)塊地址的實(shí)際數(shù)量介于為系統(tǒng)設(shè)計(jì)變量的最大和最小限制之間。在制造期間,格式化的ABL條目的數(shù)量是存儲(chǔ)器卡類型和容量的函數(shù)。此外,由于可用的已擦除區(qū)塊的數(shù)量會(huì)因壽命期間的區(qū)塊故障而縮減,也會(huì)縮減ABL中條目的數(shù)量接近系統(tǒng)壽命終點(diǎn)。例如,在填充操作后,ABL中的條目可指定可用于以下用途的區(qū)塊。每一區(qū)塊具有一個(gè)條目的部分寫入數(shù)據(jù)更新區(qū)塊的條目不超過(guò)系統(tǒng)對(duì)同時(shí)打開的最大更新區(qū)塊的限制。用于配置為數(shù)據(jù)更新區(qū)塊的擦除區(qū)塊在一到二十個(gè)條目之間。配置為控制區(qū)塊的已擦除區(qū)塊是四個(gè)條目。
ABL填充操作由于ABL 610會(huì)因?yàn)榕渲枚兂珊谋M,因此需要進(jìn)行再填充。填充ABL的操作發(fā)生在控制寫入操作期間。這是在以下情況中觸發(fā)必須配置區(qū)塊,但ABL含有不足以用于配置為數(shù)據(jù)更新區(qū)塊或一些其它控制數(shù)據(jù)更新區(qū)塊的已擦除區(qū)塊條目。在控制寫入期間,ABL填充操作是和GAT更新操作同時(shí)進(jìn)行的。
在ABL填充操作期間會(huì)發(fā)生以下動(dòng)作。
1.保留具有當(dāng)前數(shù)據(jù)更新區(qū)塊的屬性的ABL條目。
2.保留已關(guān)閉數(shù)據(jù)更新區(qū)塊的屬性的ABL條目,除非所述區(qū)塊的某個(gè)條目正在同時(shí)進(jìn)行的GAT更新操作中被寫入,在此情況中則會(huì)從所述ABL中移除所述條目。
3.保留用于未配置的擦除區(qū)塊的ABL條目。
4.壓縮ABL以移除因移除條目所產(chǎn)生的空隙,以維持條目的次序。
5.通過(guò)附加來(lái)自所述EBB列表中下次可用的條目,以完全填充所述ABL。
6.利用所述ABL中當(dāng)前的條目來(lái)覆寫所述ABB列表。
CBL清空操作
CBL是控制器RAM中已擦除區(qū)塊地址的列表,對(duì)已擦除區(qū)塊條目數(shù)量的限制和ABL相同。清空CBL的操作發(fā)生在控制寫入操作期間。因此,其和ABL填充/GAT更新操作或CBI區(qū)塊寫入操作同時(shí)進(jìn)行。在CBL清空操作中,會(huì)從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中,那么將沒(méi)有任何MAP扇區(qū)780存在且不會(huì)執(zhí)行任何MAP交換。在MAP交換操作期間,用于將已擦除區(qū)塊饋送給EBB 774的MAP扇區(qū)被看作源MAP扇區(qū)782。相反地,用于從CBB 776接收已擦除區(qū)塊的MAP扇區(qū)被看作目的地MAP扇區(qū)784。如果只有一個(gè)MAP扇區(qū),那么可當(dāng)作源和目的地MAP扇區(qū),其定義如下。
在MAP交換期間會(huì)執(zhí)行以下動(dòng)作。
1.以遞增指標(biāo)的方式為基礎(chǔ),選擇一源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ū)塊中,除非沒(méi)有分離的源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說(shuō)明各種列表間控制和目錄信息的分布與流程。為了方便,在列表元件間移動(dòng)條目或改變條目屬性的操作,在圖18中識(shí)別為[A]到[O],說(shuō)明如下。
在將擦除區(qū)塊配置為主機(jī)數(shù)據(jù)的更新區(qū)塊時(shí),會(huì)將其在ABL中的條目屬性從已擦除的ABL區(qū)塊改變?yōu)榇蜷_的更新區(qū)塊。
在將已擦除的區(qū)塊配置為控制區(qū)塊時(shí),會(huì)移除其在ABL中的條目。
在建立一具有打開更新區(qū)塊屬性的ABL條目時(shí),會(huì)將關(guān)聯(lián)的原始區(qū)塊字段新增到條目,以記錄被更新的邏輯群組的原始元區(qū)塊地址。從GAT可獲得此信息。
關(guān)閉更新區(qū)塊時(shí),其在ABL中的條目屬性會(huì)從打開的更新區(qū)塊改變?yōu)殛P(guān)閉的更新區(qū)塊。
關(guān)閉更新區(qū)塊時(shí),會(huì)擦除其關(guān)聯(lián)的原始區(qū)塊,和會(huì)將其在ABL中條目的關(guān)聯(lián)原始區(qū)塊字段的屬性改變?yōu)橐巡脸脑紖^(qū)塊。
在ABL填充操作期間,任何其地址在相同控制寫入操作期間在GAT中更新的已關(guān)閉更新區(qū)塊會(huì)從ABL中移除其條目。
在ABL填充操作期間,在從ABL移除已關(guān)閉更新區(qū)塊的條目時(shí),會(huì)將其關(guān)聯(lián)的已擦除原始區(qū)塊的條目移到CBL。
在擦除控制區(qū)塊時(shí),會(huì)將其所用條目新增到CBL。
在ABL填充操作期間,會(huì)從EBB列表將已擦除區(qū)塊條目移到ABL,且被賦予已擦除的ABL區(qū)塊的屬性。
在ABL填充操作期間修改所有相關(guān)的ABL條目后,ABL中的區(qū)塊地址將取代ABB列表的區(qū)塊地址。
和控制寫入期間的ABL填充操作同時(shí)進(jìn)行,將CBL中已擦除區(qū)塊的條目移到CBB列表。
在MAP交換操作期間,從CBB列表將所有相關(guān)條目移到MAP目的地扇區(qū)。
在MAP交換操作期間,從CBB列表將所有相關(guān)條目移到MAP源扇區(qū)。
在MAP交換操作期間的[L]與[M]之后,從CBB列表將所有其余條目移到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高速緩存的群組地址表(GAT)執(zhí)行大多數(shù)的轉(zhuǎn)換。最近已更新的邏輯群組的地址轉(zhuǎn)換會(huì)需要查找主要駐存在控制器RAM 130中的更新區(qū)塊的地址列表。因此,邏輯扇區(qū)地址的邏輯到物理地址轉(zhuǎn)換的過(guò)程端根據(jù)與扇區(qū)所在的邏輯群組關(guān)聯(lián)的區(qū)塊的類型而定。區(qū)塊的類型如下完整區(qū)塊、循序數(shù)據(jù)更新區(qū)塊、混亂數(shù)據(jù)更新區(qū)塊、關(guān)閉的數(shù)據(jù)更新區(qū)塊。
圖19是說(shuō)明邏輯到物理地址轉(zhuǎn)換過(guò)程的流程圖。實(shí)質(zhì)上,先使用邏輯扇區(qū)地址查找各種更新目錄(例如,打開的更新區(qū)塊列表和關(guān)閉的更新區(qū)塊列表),即可定位對(duì)應(yīng)的元區(qū)塊和物理扇區(qū)。如果關(guān)聯(lián)的元區(qū)塊并不屬于更新過(guò)程的部分,則由GAT提供目錄信息。邏輯到物理地址轉(zhuǎn)換包括以下步驟步驟800給定一邏輯扇區(qū)地址。
步驟810查找控制器RAM中打開的更新區(qū)塊列表614的給定邏輯地址(見(jiàn)圖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)換方法根據(jù)元區(qū)塊是否已經(jīng)重新連接而定。
步驟890已取得物理扇區(qū)地址。
下文將更詳細(xì)地說(shuō)明各種地址轉(zhuǎn)換處理循序更新區(qū)塊地址轉(zhuǎn)換(步驟840)從打開的更新區(qū)塊列表614(圖15和18)的信息即可直接完成與循序更新區(qū)塊關(guān)聯(lián)的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換,說(shuō)明如下。
1.從列表的「頁(yè)標(biāo)記」和「寫入的扇區(qū)號(hào)碼」字段可確定目標(biāo)邏輯扇區(qū)是否已經(jīng)配置在更新區(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ū),則直接根據(jù)其在此列表中的位置即可完成地址轉(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)的偏移(見(jiàn)圖16A-16E)。
3.這些字段中的信息均被快取存儲(chǔ)于RAM中,而不需要在后續(xù)的地址轉(zhuǎn)換期間來(lái)讀取所述扇區(qū)。
4.讀取步驟3由間接扇區(qū)索引字段識(shí)別的CBI扇區(qū)。
5.將最近被存取的混亂更新子群的直接扇區(qū)索引字段快速存儲(chǔ)在RAM中,而不需要實(shí)施步驟4處的讀取以重復(fù)存取相同的混亂更新區(qū)塊。
6.在步驟4或步驟5讀取的直接扇區(qū)索引字段接著可識(shí)別有關(guān)含有目標(biāo)邏輯扇區(qū)地址的邏輯子群組的CBI扇區(qū)。
7.從步驟6中識(shí)別的CBI扇區(qū)讀取目標(biāo)邏輯扇區(qū)地址的混亂區(qū)塊索引條目。
8.所述最近被讀取的混亂區(qū)塊索引字段可被快取存儲(chǔ)于控制器RAM中,而不需要實(shí)施步驟4與步驟7處的讀取以重復(fù)存取相同的邏輯子群。
9.混亂區(qū)塊索引條目可定義目標(biāo)邏輯扇區(qū)在混亂更新區(qū)塊或關(guān)聯(lián)的原始區(qū)塊中的位置。如果目標(biāo)邏輯扇區(qū)的有效副本是在原始區(qū)塊中,則可使用原始元區(qū)塊和頁(yè)標(biāo)記信息將其定位。
關(guān)閉的更新區(qū)塊地址轉(zhuǎn)換(步驟860)根據(jù)關(guān)閉的更新區(qū)塊列表的信息即可直接完成和關(guān)閉的更新區(qū)塊關(guān)聯(lián)的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換(參見(jiàn)圖18),說(shuō)明如下。
1.從列表中可讀取指派給目標(biāo)邏輯群組的元區(qū)塊地址。
2.從列表中的「頁(yè)標(biāo)記」字段可確定元區(qū)塊內(nèi)的扇區(qū)地址。
GAT地址轉(zhuǎn)換(步驟870)如果邏輯群組不會(huì)受到打開或關(guān)閉的區(qū)塊更新列表的參考,則其在GAT中的條目為有效。由GAT所參考的邏輯群組中目標(biāo)邏輯扇區(qū)地址的地址轉(zhuǎn)換序列如下。
1.評(píng)估RAM中可用的GAT高速緩存的范圍,以確定目標(biāo)邏輯群組的條目是否包含在GAT高速緩存中。
2.如果在步驟1發(fā)現(xiàn)目標(biāo)邏輯群組,則GAT高速緩存含有完整的群組地址信息,包括元區(qū)塊地址和頁(yè)標(biāo)記,因此允許轉(zhuǎn)換目標(biāo)邏輯扇區(qū)地址。
3.如果目標(biāo)地址不在GAT高速緩存中,則必須讀取目標(biāo)GAT區(qū)塊的GAT索引,以識(shí)別有關(guān)目標(biāo)邏輯群組地址的GAT扇區(qū)的位置。
4.最后存取的GAT區(qū)塊的GAT索引會(huì)保留在控制器RAM中,且不用從快閃存儲(chǔ)器讀取扇區(qū)即可存取。
5.將一份由每一GAT區(qū)塊的元區(qū)塊地址和被寫入每一GAT區(qū)塊中的扇區(qū)數(shù)量所組成的列表保存在控制器RAM中。假使步驟4處無(wú)法取得必要的GAT索引,則可立刻從快閃存儲(chǔ)器中讀取。
6.從步驟4或步驟6處所獲得的GAT索引所定義的GAT區(qū)塊中的扇區(qū)位置中讀取有關(guān)目標(biāo)邏輯群組地址的GAT扇區(qū)。以含有目標(biāo)條目的扇區(qū)的子劃分來(lái)更新GAT高速緩存。
7.從目標(biāo)GAT條目?jī)?nèi)的元區(qū)塊地址和「頁(yè)標(biāo)記」字段取得目標(biāo)扇區(qū)地址。
元區(qū)塊對(duì)物理地址轉(zhuǎn)換(步驟880)如果和元區(qū)塊地址關(guān)聯(lián)的旗標(biāo)代表元區(qū)塊已經(jīng)被重新連接,則會(huì)從BLM區(qū)塊讀取相關(guān)的LT扇區(qū),以確定目標(biāo)扇區(qū)地址的擦除區(qū)塊地址。否則,會(huì)從元區(qū)塊地址決直接定擦除區(qū)塊地址。
控制數(shù)據(jù)管理圖20說(shuō)明在存儲(chǔ)器管理的操作過(guò)程中,在控制數(shù)據(jù)結(jié)構(gòu)上執(zhí)行的操作階層。數(shù)據(jù)更新管理操作可對(duì)駐存在RAM中的各種列表發(fā)生作用。控制寫入操作可對(duì)快閃存儲(chǔ)器中各種控制數(shù)據(jù)扇區(qū)和專用區(qū)塊發(fā)生作用,并還能和RAM中的列表交換數(shù)據(jù)。
數(shù)據(jù)更新管理操作會(huì)在RAM中針對(duì)ABL、CBL、和所述混亂扇區(qū)列表來(lái)實(shí)施。當(dāng)一已擦除區(qū)塊被配置為一更新區(qū)塊或控制區(qū)塊時(shí),或是關(guān)閉一更新區(qū)塊時(shí),便會(huì)更新所述ABL。當(dāng)擦除一控制區(qū)塊時(shí),或是將一已關(guān)閉的更新區(qū)塊的某個(gè)條目寫入所述GAT中時(shí),便會(huì)更新所述CBL。當(dāng)一扇區(qū)被寫入一混亂更新區(qū)塊中時(shí),便會(huì)更新所述更新混亂扇區(qū)列表。
控制寫入操作會(huì)使得來(lái)自RAM中的控制數(shù)據(jù)結(jié)構(gòu)的信息被寫入快閃存儲(chǔ)器中的控制數(shù)據(jù)結(jié)構(gòu)中,必要時(shí)會(huì)隨之更新快閃存儲(chǔ)器與RAM中其它支持的控制數(shù)據(jù)結(jié)構(gòu)。當(dāng)所述ABL不含欲被配置為更新區(qū)塊的已擦除區(qū)塊的任何其它條目時(shí),或是再寫入所述CBI區(qū)塊時(shí),便會(huì)觸發(fā)控制寫入操作。
在優(yōu)選實(shí)施例中,會(huì)在每一控制寫入操作期間執(zhí)行ABL填充操作、CBL清空操作、和EBM扇區(qū)更新操作。當(dāng)含有EBM扇區(qū)的MAP區(qū)塊已滿時(shí),會(huì)將有效的EBM和MAP扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,然后擦除先前的MAP區(qū)塊。
在每一控制寫入操作期間,寫入一個(gè)GAT扇區(qū),也會(huì)因此修改關(guān)閉的更新區(qū)塊列表。當(dāng)GAT區(qū)塊已滿時(shí),將執(zhí)行GAT再寫入操作。
如上述,經(jīng)過(guò)幾次的混亂扇區(qū)寫入操作之后,便會(huì)寫入一CBI扇區(qū)。當(dāng)CBI區(qū)塊變滿時(shí),會(huì)將有效的CBI扇區(qū)復(fù)制到已配置的擦除區(qū)塊中,然后擦除先前的CBI區(qū)塊。
如上述,MAP交換操作是在EBM扇區(qū)的EBB列表中沒(méi)有其它已擦除的區(qū)塊條目時(shí)執(zhí)行。
每次再寫入MAP區(qū)塊時(shí),會(huì)在專用的MAPA區(qū)塊中寫入用于記錄MAP區(qū)塊的當(dāng)前地址的MAP地址(MAPA)扇區(qū)。當(dāng)MAPA區(qū)塊已滿時(shí),會(huì)將有效的MAPA扇區(qū)復(fù)制到已配置的已擦除區(qū)塊,然后擦除先前的MAPA區(qū)塊。
每次再寫入MAPA區(qū)塊時(shí),會(huì)將啟動(dòng)扇區(qū)寫入當(dāng)前的啟動(dòng)區(qū)塊中。當(dāng)啟動(dòng)區(qū)塊已滿時(shí),會(huì)將當(dāng)前版本的啟動(dòng)區(qū)塊的有效啟動(dòng)扇區(qū)復(fù)制到備份版本,然后所述版本再變成當(dāng)前的版本。先前的當(dāng)前版本會(huì)被擦除并變成備份版本,并會(huì)將有效的啟動(dòng)扇區(qū)寫回其中。
分散在多個(gè)存儲(chǔ)器平面上的存儲(chǔ)器的對(duì)準(zhǔn)如先前結(jié)合圖4和圖5A-5C所述,為了增加性能,會(huì)并行操作多個(gè)存儲(chǔ)器平面。基本上,各平面有其自己的讀出放大器組作為讀取和程序電路的部分,以并行服務(wù)跨越平面的存儲(chǔ)器單元的對(duì)應(yīng)頁(yè)。在結(jié)合多個(gè)平面時(shí),可并行操作多個(gè)頁(yè),從而導(dǎo)致更好的性能。
根據(jù)本發(fā)明的另一方面,對(duì)于一被組織成復(fù)數(shù)個(gè)可擦除區(qū)塊且由多個(gè)存儲(chǔ)器平面構(gòu)成(因而可并行地讀取復(fù)數(shù)個(gè)邏輯單位或是將復(fù)數(shù)個(gè)邏輯單位并行地編程到所述多個(gè)平面中)的存儲(chǔ)器陣列,當(dāng)要更新存儲(chǔ)在特定存儲(chǔ)器平面中第一區(qū)塊的原始邏輯單位時(shí),會(huì)供應(yīng)所需以將已更新的邏輯單位保持在和原始相同的平面中。這可通過(guò)以下方式來(lái)完成將已更新的邏輯單位記錄到仍在相同平面中的第二區(qū)塊的下一個(gè)可用位置。優(yōu)選將邏輯單位存儲(chǔ)在和其它版本相同的平面中的偏移位置,使得給定邏輯單位的所有版本是由相同組的感測(cè)電路服務(wù)。
因此,在優(yōu)選實(shí)施例中,以邏輯單位的當(dāng)前版本來(lái)填補(bǔ)介于上一個(gè)編程存儲(chǔ)器單位與下一個(gè)可用平面對(duì)準(zhǔn)存儲(chǔ)器單位之間的任何中間空隙。將邏輯上位于最后被編程的邏輯單位后面的邏輯單位的當(dāng)前版本和邏輯上位于被存儲(chǔ)在下一可用的平面對(duì)準(zhǔn)的存儲(chǔ)器單位中的邏輯單位前面的邏輯單位的當(dāng)前版本填入空隙中,便可完成所述填補(bǔ)操作。
以這種方式,可將邏輯單位的所有版本維持在和原始平面相同的平面中且具有相同偏移,使得在垃圾收集操作中,不必從不同平面擷取邏輯單位的最新版本,以免降低性能。在優(yōu)選實(shí)施例中,可利用最新的版本來(lái)更新或填補(bǔ)平面上的每一存儲(chǔ)器單位。因此,可從每一平面中并行地讀出一邏輯單位,其將會(huì)具有邏輯次序而無(wú)需進(jìn)一步重新排列。
此方案通過(guò)允許平面上重新排列邏輯群組的邏輯單位的最新版本,且不必搜集不同存儲(chǔ)器平面的最新版本,而縮短合并混亂區(qū)塊的時(shí)間。這很有好處,其中主機(jī)接口的性能規(guī)格可限定由存儲(chǔ)器系統(tǒng)完成扇區(qū)寫入操作的最大等待時(shí)間。
324圖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)存取的最小單位。通常一個(gè)邏輯單位是尺寸512字節(jié)的扇區(qū)。頁(yè)是平面中并行讀取或編程的最大單位。通常一個(gè)邏輯頁(yè)含有一個(gè)或一個(gè)以上邏輯單位。因此,在結(jié)合多個(gè)平面時(shí),可將并行讀取或編程的最大總數(shù)單位看作存儲(chǔ)器單元的元頁(yè),其中元頁(yè)是由多個(gè)平面中的各平面的頁(yè)所構(gòu)成。例如,如MP0的元頁(yè)具有四個(gè)頁(yè),即來(lái)自各平面P0、P1、P2、和P3的頁(yè),其中并行存儲(chǔ)邏輯頁(yè)LP0、LP1、LP2、LP3。因此,和僅在一個(gè)平面中的操作相比,存儲(chǔ)器的讀取和寫入性能增加四倍。
存儲(chǔ)器陣列會(huì)進(jìn)一步組織成復(fù)數(shù)個(gè)元區(qū)塊,如MB0、…、MBj,其中各元區(qū)塊內(nèi)的所有存儲(chǔ)器單元可作為一個(gè)單位一起擦除。如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í),會(huì)以第一平面中第一頁(yè)、第二平面中第二頁(yè)等的循環(huán)次序訪問(wèn)平面。在到達(dá)最后的平面后,填充會(huì)以循環(huán)的方式返回,以從下一個(gè)元頁(yè)的第一平面重新開始。以這種方式,即可在所有平面均為并行操作時(shí)并行存取連續(xù)的邏輯頁(yè)。
一般而言,如果有W個(gè)平面以并行方式操作且元區(qū)塊是按邏輯上循序次序進(jìn)行填充,則元區(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ù)是通過(guò)在控制器920的控制下的數(shù)據(jù)總線930進(jìn)行傳送。控制器920中的緩沖器922可經(jīng)由數(shù)據(jù)總線930協(xié)助緩沖數(shù)據(jù)的傳送。尤其在第一平面的操作需要存取第二平面的數(shù)據(jù)時(shí),將需要兩個(gè)步驟的過(guò)程??刂破鲿?huì)先讀出第二平面的數(shù)據(jù),然后經(jīng)由數(shù)據(jù)總線和緩沖器傳送到第一平面。事實(shí)上,在大多數(shù)的存儲(chǔ)器架構(gòu)中,在兩個(gè)不同的位線之間傳送數(shù)據(jù)也需要通過(guò)數(shù)據(jù)總線920交換數(shù)據(jù)。
至少,這涉及在一平面中從一組讀取/寫入電路傳送出去,然后進(jìn)入另一平面中的另一組讀取/寫入電路。在其中平面是來(lái)自不同芯片的例子中,將需要在芯片之間傳送。本發(fā)明可提供存儲(chǔ)器區(qū)塊管理的結(jié)構(gòu)和方案,以避免一個(gè)平面從另一個(gè)平面存取數(shù)據(jù),以便將性能最大化。
如圖21所示,一元頁(yè)是由多個(gè)邏輯頁(yè)(各位于其中一個(gè)平面中)構(gòu)成。每一邏輯頁(yè)可能是由一個(gè)以上的邏輯單位組成。當(dāng)數(shù)據(jù)欲以逐邏輯單位的方式被記錄在一越過(guò)所述平面的區(qū)塊中時(shí),每一邏輯單位便將會(huì)落在所述四個(gè)存儲(chǔ)器平面之一中。
在更新邏輯單位時(shí)會(huì)發(fā)生平面對(duì)準(zhǔn)的問(wèn)題。在當(dāng)前的實(shí)例中,為了便于解說(shuō),將邏輯單位看作512字節(jié)的邏輯扇區(qū),一個(gè)邏輯頁(yè)也是一個(gè)邏輯單位寬。由于快閃存儲(chǔ)器不允許未先擦除整個(gè)區(qū)塊而再寫入?yún)^(qū)塊的一部分,因此不會(huì)將邏輯頁(yè)的更新寫入現(xiàn)有的位置上,而是將其記錄在區(qū)塊未使用的位置中。然后會(huì)將邏輯單位的先前版本看作廢棄。在一些更新后,區(qū)塊可含有一些由于已經(jīng)更新因此變成廢棄的邏輯單位。然后此區(qū)塊可以說(shuō)是「不干凈」,而垃圾收集操作會(huì)忽略不干凈的邏輯單位而收集各個(gè)邏輯單位的最新版本并按邏輯上循序次序?qū)⑵渲匦掠涗浽谝粋€(gè)或一個(gè)以上新的區(qū)塊中。然后擦除和再循環(huán)不干凈的區(qū)塊。
當(dāng)所述已更新邏輯單位被記錄在某一區(qū)塊中下個(gè)未被使用的位置中時(shí),其通常不會(huì)被記錄在和先前版本相同的存儲(chǔ)器平面中。當(dāng)要進(jìn)行垃圾收集操作時(shí),如合并或壓縮,一邏輯單位的最新版本便會(huì)被記錄在和原來(lái)相同的平面中,以維持原來(lái)的次序。然而,如果必須從另一個(gè)平面擷取最新版本,性能將會(huì)降低。
因此,根據(jù)本發(fā)明的另一方面,給定平面的第一區(qū)塊的原始邏輯單位。這可通過(guò)以下方式來(lái)完成將已更新的邏輯單位記錄到仍在相同平面中的第二區(qū)塊的下一個(gè)可用位置。在優(yōu)選實(shí)施例中,會(huì)以和原始區(qū)塊中原始邏輯單位的相同相對(duì)位置的邏輯單位的當(dāng)前版本,填補(bǔ)(即,通過(guò)復(fù)制來(lái)填充)任何在上一個(gè)編程存儲(chǔ)器單位和下一個(gè)可用平面對(duì)準(zhǔn)存儲(chǔ)器單元之間的中間空隙。
圖22A說(shuō)明根據(jù)本發(fā)明的一般實(shí)施例,具有平面對(duì)準(zhǔn)的更新的方法的流程圖。
步驟950在一被組織成復(fù)數(shù)個(gè)區(qū)塊的非易失性存儲(chǔ)器中,每一區(qū)塊均被劃分成可一起擦除的復(fù)數(shù)個(gè)存儲(chǔ)器單位,每一存儲(chǔ)器單位是用于存儲(chǔ)一邏輯單位的數(shù)據(jù)。
步驟952以多個(gè)存儲(chǔ)器平面構(gòu)成存儲(chǔ)器,各平面具有一組用于并行服務(wù)存儲(chǔ)器頁(yè)的感測(cè)電路,所述存儲(chǔ)器頁(yè)含有一個(gè)或一個(gè)以上存儲(chǔ)器單位。
步驟954依照第一次序?qū)⑦壿媶挝坏牡谝话姹敬鎯?chǔ)于一第一區(qū)塊的復(fù)數(shù)個(gè)存儲(chǔ)器單位中,每一第一版本邏輯單位均被存儲(chǔ)在所述存儲(chǔ)器平面之一中。
步驟956依照不同于第一次序的第二次序?qū)⑦壿媶挝坏暮罄m(xù)版本存儲(chǔ)在第二區(qū)塊中,每一后續(xù)版本均被存儲(chǔ)在和所述第一版本相同的存儲(chǔ)器平面中下一個(gè)可用的存儲(chǔ)器單位中,以便可利用所述組相同的感測(cè)電路從所述相同的平面中來(lái)存取邏輯單位的所有版本。
圖22B說(shuō)明在圖22A所示的流程圖中存儲(chǔ)更新的步驟的優(yōu)選實(shí)施例。
步驟956′包括步驟957、步驟958和步驟959。
步驟957將各區(qū)塊劃分成元頁(yè),各元頁(yè)是由各平面的頁(yè)所構(gòu)成。此步驟可在存儲(chǔ)步驟的任一項(xiàng)之前執(zhí)行。
步驟958根據(jù)不同于第一次序的第二次序?qū)⑦壿媶挝坏暮罄m(xù)版本存儲(chǔ)到第二區(qū)塊,各后續(xù)版本是存儲(chǔ)在具有元頁(yè)中和第一版本相同偏移的下一個(gè)可用存儲(chǔ)器單位中。
步驟959和存儲(chǔ)邏輯單位的后續(xù)版本同時(shí)進(jìn)行,根據(jù)第一次序復(fù)制邏輯單位的當(dāng)前版本,以逐元頁(yè)的方式來(lái)填補(bǔ)在所述下一個(gè)可用存儲(chǔ)器單位之前的任何未使用存儲(chǔ)器單位。
圖23A說(shuō)明不考慮平面對(duì)準(zhǔn)按循序次序?qū)懭氲窖蚋聟^(qū)塊的邏輯單位的實(shí)例。所述實(shí)例說(shuō)明每一邏輯頁(yè)的大小均是一個(gè)邏輯扇區(qū),例如LS0、LS1…。在所述四平面的實(shí)例中,每一區(qū)塊(例如MB0)均可看作被劃分成復(fù)數(shù)個(gè)元頁(yè)MP0、MP1、…,其中每一元頁(yè)(例如MP0)均含有四個(gè)扇區(qū)(例如LS0、LS1、LS2、和LS3),每一扇區(qū)分別來(lái)自平面P0、P1、P2、和P3。所以,所述區(qū)塊會(huì)以循環(huán)次序逐扇區(qū)地被填入平面P0、P1、P2、和P3中的邏輯單位中。
在主機(jī)寫入操作#1中,正在更新邏輯扇區(qū)LS5-LS8中的數(shù)據(jù)。會(huì)將更新成為L(zhǎng)S5′-LS8′的數(shù)據(jù)記錄在始于第一可用位置的新配置的更新區(qū)塊中。
在主機(jī)寫入操作#2中,正在更新邏輯扇區(qū)LS9-LS12中數(shù)據(jù)的程序段。會(huì)將更新成為L(zhǎng)S9′-LS12′的數(shù)據(jù)記錄在緊接在最后寫入停止處之后的位置中的更新區(qū)塊中。圖中顯示兩次主機(jī)寫入的方式是以邏輯循序方式將所述更新數(shù)據(jù)記錄在所述更新區(qū)塊中,即LS5′-LS12′。更新區(qū)塊可看作循序更新區(qū)塊,因其已按邏輯上循序的次序被填補(bǔ)。記錄在更新區(qū)塊中的更新數(shù)據(jù)可廢棄原始區(qū)塊中對(duì)應(yīng)的數(shù)據(jù)。
然而,更新邏輯扇區(qū)是根據(jù)下一個(gè)可用位置但卻不考慮平面對(duì)準(zhǔn)而記錄在更新區(qū)塊中。例如,扇區(qū)LS5原來(lái)是記錄在平面P1中,但已更新的LS5′現(xiàn)在則記錄在P0中。同樣地,其它更新扇區(qū)全部無(wú)法對(duì)準(zhǔn)。
圖23B說(shuō)明不考慮平面對(duì)準(zhǔn)按無(wú)序次序?qū)懭牖靵y更新區(qū)塊的邏輯單位的實(shí)例。
在主機(jī)寫入操作#1中,會(huì)更新存儲(chǔ)在原始元區(qū)塊的給定邏輯群組的邏輯扇區(qū)LS10-LS11。已更新的邏輯扇區(qū)LS10′-LS11′會(huì)被存儲(chǔ)在新配置的更新區(qū)塊中。這時(shí),更新區(qū)塊為循序的更新區(qū)塊。在主機(jī)寫入操作#2中,會(huì)將邏輯扇區(qū)LS5-LS6更新成為L(zhǎng)S5′-LS6′且將其記錄在緊接上一個(gè)寫入之后的位置的更新區(qū)塊中。這可將循序的更新區(qū)塊轉(zhuǎn)換為混亂的更新區(qū)塊。在主機(jī)寫入操作#3,再次更新邏輯扇區(qū)LS10′且將其記錄在更新區(qū)塊的下一個(gè)位置中成為L(zhǎng)S10″。這時(shí),更新區(qū)塊中的LS10″可取代先前記錄中的LS10′,而LS10′又可取代原始區(qū)塊中的LS10。在主機(jī)寫入操作#4中,再次更新邏輯扇區(qū)LS10的數(shù)據(jù)且將其記錄在更新區(qū)塊的下一個(gè)位置中成為L(zhǎng)S10。因此,LS10現(xiàn)在是邏輯扇區(qū)LS10的最后并唯一有效的版本。LS10的所有先前版本現(xiàn)在均已廢棄。在主機(jī)寫入操作#5中,會(huì)更新邏輯扇區(qū)LS30的數(shù)據(jù)且將其記錄在更新區(qū)塊中成為L(zhǎng)S30′。在此實(shí)例中,可按任何次序和以任何重復(fù)將邏輯群組內(nèi)的邏輯單位寫入到混亂更新區(qū)塊。
同樣,更新邏輯扇區(qū)是根據(jù)下一個(gè)可用位置但卻不考慮平面對(duì)準(zhǔn)而記錄在更新區(qū)塊中。例如,扇區(qū)LS10原來(lái)是記錄在平面P2(即,MP2、第三平面)中,但更新LS10′現(xiàn)在卻記錄在P0(即,MP0′,第一平面)中。同樣,在主機(jī)寫入#3中,會(huì)再次將邏輯扇區(qū)LS10′更新成為L(zhǎng)S10″并被放在結(jié)果也在平面P0(MP1′的第一平面)的下一個(gè)可用位置中。因此,一般而言,從圖中可見(jiàn),將更新扇區(qū)記錄到區(qū)塊的下一個(gè)可用位置會(huì)使更新扇區(qū)被存儲(chǔ)在和其先前版本不同的平面中。
具有以填補(bǔ)填充的中間空隙的平面對(duì)準(zhǔn)的循序更新區(qū)塊圖24A說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23A的循序更新實(shí)例。
在主機(jī)寫入操作#1中,會(huì)將更新成為L(zhǎng)S5′-LS8′的數(shù)據(jù)記錄在始于第一可用平面對(duì)準(zhǔn)位置的新配置的更新區(qū)塊。在此例中,LS5原來(lái)在P1中,P1是元頁(yè)的第二平面。因此,會(huì)在更新區(qū)塊的第一可用元頁(yè)MP0的對(duì)應(yīng)平面中編程LS5′-LS7′。同時(shí),會(huì)以原始區(qū)塊元頁(yè)中在LS5前的邏輯扇區(qū)LS4的當(dāng)前版本填補(bǔ)MP0′中未使用的第一平面的空隙。然后將原始LS4處理成廢棄的數(shù)據(jù)。然后將剩余的LS8′記錄在下一個(gè)元頁(yè)MP1′的第一個(gè)平面中并已平面對(duì)準(zhǔn)。
在主機(jī)寫入操作#2中,會(huì)將更新成為L(zhǎng)S9′-LS12′的數(shù)據(jù)記錄在下一個(gè)可用平面對(duì)準(zhǔn)位置的更新區(qū)塊中。因此,會(huì)將LS9′記錄在下一個(gè)可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位中,即MP1′的第二平面。這時(shí),不會(huì)造成任何空隙,也不需要任何填補(bǔ)。更新區(qū)塊可看作循序更新區(qū)塊,因其已按邏輯上循序的次序填入。此外,其將因各更新邏輯單位和其原始的一樣都在相同平面中而已平面對(duì)準(zhǔn)。
具有中間空隙的平面對(duì)準(zhǔn)的混亂更新區(qū)塊圖24B說(shuō)明根據(jù)本發(fā)明的優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和不具有任何填補(bǔ)的圖23B的混亂更新實(shí)例。
在主機(jī)寫入操作#1中,將已更新的邏輯扇區(qū)LS10′-LS11′存儲(chǔ)在新配置的更新區(qū)塊中。并不會(huì)將其存儲(chǔ)在下一個(gè)可用的存儲(chǔ)器單位中,而是將其存儲(chǔ)在下一個(gè)可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位中。由于LS10′和LS11′原來(lái)被分別存儲(chǔ)在平面P2和P3(原始區(qū)塊的MP2的第三和第四平面),下一個(gè)可用的平面對(duì)準(zhǔn)存儲(chǔ)器單位將在更新區(qū)塊的MP0′的第三和第四平面中。這時(shí),更新區(qū)塊為無(wú)序,其中將按「未填充」、「未填充」、LS10′和LS11′的次序填充元頁(yè)MP0的頁(yè)。
在主機(jī)寫入操作#2中,會(huì)將邏輯扇區(qū)LS5-LS6更新成為L(zhǎng)S5′-LS6′且將其記錄在下一個(gè)可用的平面對(duì)準(zhǔn)的更新區(qū)塊中。因此,會(huì)將原始區(qū)塊中在MP1的第二(P1)和第三(P2)平面或存儲(chǔ)器單位的LS5′和LS6′編程到更新區(qū)塊中下一個(gè)可用元頁(yè)MP1′的對(duì)應(yīng)的平面中。這會(huì)在MP1′中留下在前面的未使用的第一平面。
在主機(jī)寫入操作#3,再次更新邏輯扇區(qū)LS10′且將其記錄在更新區(qū)塊的下一個(gè)平面對(duì)準(zhǔn)位置中成為L(zhǎng)S10″。因此,會(huì)將其寫入下一個(gè)可用的第三平面,即在MP2′中。這會(huì)在MP1′的最后的平面和MP2′的前兩個(gè)平面中留下之前的空隙。這將會(huì)廢棄MP0′中的LS10′。
在主機(jī)寫入操作#4中,會(huì)再次更新邏輯扇區(qū)LS10″中的數(shù)據(jù)并將其記錄在更新區(qū)塊中元頁(yè)MP2′的下一個(gè)可用第三平面中成為L(zhǎng)S10。因此,LS10現(xiàn)在是邏輯扇區(qū)LS10的最后并唯一有效的版本。這會(huì)留下由MP2′的最后平面和MP3′的前兩個(gè)平面組成的空隙。
在主機(jī)寫入操作#5中,會(huì)更新邏輯扇區(qū)LS30的數(shù)據(jù)且將其記錄在更新區(qū)塊中成為L(zhǎng)S30′。由于原始的LS30駐存在元頁(yè)的P2或第三平面中,因此會(huì)將其寫入更新區(qū)塊中下一個(gè)可用的第三平面。這時(shí),其將是MP4′的第三平面。將因MP3′的最后平面與MP4′的前兩個(gè)平面而產(chǎn)生空隙。因此,此實(shí)例顯示可以平面對(duì)準(zhǔn)的方式,按照任何次序和任意重復(fù),將一邏輯群組內(nèi)的復(fù)數(shù)個(gè)邏輯扇區(qū)寫入到一混亂更新區(qū)塊中。在后續(xù)的垃圾收集操作中,將便利地由相同組的感測(cè)電路來(lái)服務(wù)給定邏輯扇區(qū)的所有版本,尤其是最新版本。
具有以填補(bǔ)填充的中間空隙的平面對(duì)準(zhǔn)的混亂更新區(qū)塊圖24C說(shuō)明根據(jù)本發(fā)明的另一優(yōu)選實(shí)施例,具有平面對(duì)準(zhǔn)和填補(bǔ)的圖23B的混亂更新實(shí)例。
此操作和圖24B所示的相同,但中間空隙會(huì)先以填補(bǔ)加以填充。在主機(jī)寫入操作#1中,會(huì)先以駐存在原始區(qū)塊的LS8和LS9的當(dāng)前版本,來(lái)填補(bǔ)由元頁(yè)MP0′的第一和第二未使用的平面產(chǎn)生的空隙。這會(huì)使原始區(qū)塊中的LS8和LS9廢棄。這時(shí),更新區(qū)塊是循序的更新區(qū)塊,其中元頁(yè)MP0′的填充次序?yàn)長(zhǎng)S8、LS9、LS10′和LS11′。
在主機(jī)寫入操作#2中,將因MP1′中在之前的未使用的第一平面而產(chǎn)生空隙,其將先用LS4進(jìn)行填補(bǔ)。這將使原始區(qū)塊中的LS4廢棄。和之前一樣,第二寫入可將循序更新區(qū)塊轉(zhuǎn)換為混亂更新區(qū)塊。
在主機(jī)寫入操作#3中,將因MP1′中未使用的最后平面和MP2′的前兩個(gè)平面而產(chǎn)生空隙。會(huì)先用上一個(gè)編程的LS6′之后的LS7來(lái)填補(bǔ)MP1′的最后平面,然后用LS10之前的邏輯單位(即LS8和LS9)來(lái)填補(bǔ)MP2′的前兩個(gè)平面。這會(huì)廢棄MP0′中的LS10′和原始區(qū)塊中的LS7-LS9。
在主機(jī)寫入操作#4中,將產(chǎn)生由MP2′的最后平面和MP3′的前兩個(gè)平面組成的空隙。MP2′的最后平面可由元頁(yè)MP2′中在最后寫入的LS10″之后的邏輯單位當(dāng)前版本的LS11′進(jìn)行填補(bǔ)。MP3′的前兩個(gè)平面分別可通過(guò)LS8和LS9進(jìn)行填補(bǔ),和元頁(yè)MP3′中在LS10之前的邏輯單位一樣。
在主機(jī)寫入操作#5中,也會(huì)因此分別用LS11′、LS28和LS29來(lái)填補(bǔ)從MP3′的最后平面到MP4′前兩個(gè)平面之間的空隙。因此,此實(shí)例顯示可以平面對(duì)準(zhǔn)的方式,按照任何次序和任意重復(fù),將一邏輯群組內(nèi)的復(fù)數(shù)個(gè)邏輯扇區(qū)寫入到一混亂更新區(qū)塊中。
在優(yōu)選實(shí)施例中,一個(gè)元頁(yè)含有來(lái)自個(gè)別平面的循環(huán)頁(yè)。由于元頁(yè)可以并行的方式進(jìn)行讀取或編程,因此以元頁(yè)的粒度實(shí)施主機(jī)更新會(huì)很方便。在有任何填補(bǔ)時(shí),其可和更新邏輯單位一起逐元頁(yè)地記錄。
在圖24A和圖24C的實(shí)例說(shuō)明的實(shí)施例中,在各主機(jī)寫入期間,會(huì)在要編程更新的平面對(duì)準(zhǔn)存儲(chǔ)器單位之前未使用的存儲(chǔ)器單位上執(zhí)行填補(bǔ)。在下一個(gè)主機(jī)寫入之前,會(huì)延后上一個(gè)編程的存儲(chǔ)器單位后的任何未使用存儲(chǔ)器單元的動(dòng)作。一般而言,會(huì)在各元頁(yè)的邊界內(nèi)填補(bǔ)任何在之前未使用的存儲(chǔ)器單位。換句話說(shuō),如果之前的空隙越過(guò)兩個(gè)元頁(yè)之上,則按各元頁(yè)合適的邏輯上循序次序在各元頁(yè)上執(zhí)行填補(bǔ),但不考慮橫跨邊界的連續(xù)性。在合并區(qū)塊時(shí),最后寫入的元頁(yè),如果是部分寫入,可通過(guò)填補(bǔ)完整填充。
在另一實(shí)施例中,任何部分填充的元頁(yè)可在移到下一個(gè)元頁(yè)之前被完全填補(bǔ)。
存儲(chǔ)器單位粒度根據(jù)單個(gè)存儲(chǔ)器架構(gòu)所支持的靈活性,讀取或編程的單位可以有各種變化。單個(gè)平面的獨(dú)立性質(zhì)允許獨(dú)立讀取和編程元頁(yè)中單個(gè)平面的各頁(yè)。上述實(shí)例具有成為各平面中頁(yè)的編程最大單位。在元頁(yè)內(nèi),可以有小于所有頁(yè)的局部元頁(yè)編程。例如,可以編程元頁(yè)的前三個(gè)頁(yè),然后再編程第四個(gè)頁(yè)。
還有,在平面層級(jí),一個(gè)物理頁(yè)可含有一個(gè)或一個(gè)以上存儲(chǔ)器單位。如果各存儲(chǔ)器單位可以存儲(chǔ)一個(gè)扇區(qū)的數(shù)據(jù),則一個(gè)物理頁(yè)可存儲(chǔ)一個(gè)或一個(gè)以上扇區(qū)。一些存儲(chǔ)器架構(gòu)可支持局部頁(yè)編程,其中通過(guò)抑制頁(yè)內(nèi)選定存儲(chǔ)器單位的編程,可在多個(gè)編程過(guò)程上,在不同的時(shí)間個(gè)別編程選定的邏輯單位。
在存儲(chǔ)器平面內(nèi)用于邏輯群組的混亂更新的邏輯單位對(duì)準(zhǔn)在區(qū)塊存儲(chǔ)器管理系統(tǒng)中,按邏輯上循序次序?qū)⑦壿媶挝坏倪壿嬋航M存儲(chǔ)在原始區(qū)塊中。在更新邏輯群組時(shí),會(huì)將邏輯單位的后續(xù)版本存儲(chǔ)在更新區(qū)塊中。如果將邏輯單位混亂地(即,無(wú)序地)存儲(chǔ)在更新區(qū)塊中,最后會(huì)執(zhí)行垃圾收集以收集原始區(qū)塊和更新區(qū)塊中邏輯單位的最新版本,以循序地將其整合為新的原始區(qū)塊。如果將給定邏輯單位的更新版本全部存儲(chǔ)在和其原始區(qū)塊中原始版本對(duì)準(zhǔn)的更新區(qū)塊中,使得相同組的感測(cè)電路可以存取所有版本,那么垃圾收集操作會(huì)更有效。
根據(jù)本發(fā)明的另一方面,在上述區(qū)塊存儲(chǔ)器管理系統(tǒng)中,在將存儲(chǔ)器組織成一系列的存儲(chǔ)器頁(yè)時(shí)(其中存儲(chǔ)器單位的各頁(yè)是由一組感測(cè)電路進(jìn)行并行服務(wù)),如果給定邏輯單位的所有版本在所存儲(chǔ)的頁(yè)中全部具有相同的偏移位置,那么所有版本均已對(duì)準(zhǔn)。
圖25說(shuō)明其中各頁(yè)含有兩個(gè)用于存儲(chǔ)兩個(gè)邏輯單位(如兩個(gè)邏輯扇區(qū))的存儲(chǔ)器單位的實(shí)例存儲(chǔ)器組織。在原始區(qū)塊中,由于邏輯扇區(qū)是按邏輯上循序次序加以存儲(chǔ),會(huì)將邏輯扇區(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è)中,左邊算起第一個(gè)扇區(qū)的頁(yè)偏移為「0」,而第二個(gè)扇區(qū)的頁(yè)偏移為「1」。
在更新循序存儲(chǔ)在原始區(qū)塊中的邏輯扇區(qū)的邏輯群組時(shí),會(huì)將已更新的邏輯扇區(qū)記錄在更新區(qū)塊中。例如,邏輯扇區(qū)LS2駐存在原始區(qū)塊中具有偏移「0」的頁(yè)P(yáng)0中。如果在第一寫入中,如果將LS2更新為L(zhǎng)S2′,那么會(huì)將其存儲(chǔ)在具有相同頁(yè)偏移「0」的更新區(qū)塊的第一可用位置。這會(huì)是在頁(yè)P(yáng)0′的第一存儲(chǔ)器單位中。如果在第二寫入中,將LS5更新為L(zhǎng)S5′,則會(huì)將其存儲(chǔ)在具有相同頁(yè)偏移「1」的更新區(qū)塊的第一可用位置。這會(huì)是在具有頁(yè)P(yáng)1′的偏移「1」的第二存儲(chǔ)器單位中。然而,在存儲(chǔ)LS5′之前,會(huì)在其中復(fù)制至少在各頁(yè)中將會(huì)維持邏輯循序次序的邏輯扇區(qū)的最新版本,以先填補(bǔ)P0′中具有偏移「1」的未使用存儲(chǔ)器單位和P1′中的偏移「0」。這時(shí),會(huì)將LS3復(fù)制到P0′中偏移「1」位置且將LS4復(fù)制到P1′中偏移「0」位置。如果在第三寫入中,再次將LS2′更新為L(zhǎng)S2″,則會(huì)將其存儲(chǔ)在P2′的偏移「0」中。如果在第四寫入中,分別將LS22和LS23更新為L(zhǎng)S22′和LS23′,則會(huì)分別將其存儲(chǔ)在P3′的偏移「0」和「1」中。然而,在那之前,會(huì)用LS3填補(bǔ)P2′中具有偏移「1」的未使用的存儲(chǔ)器單位。
上述更新序列假設(shè)可以在頁(yè)內(nèi)編程單個(gè)扇區(qū)。對(duì)于一些其中不支持局部頁(yè)編程的存儲(chǔ)器架構(gòu),必須一起編程頁(yè)內(nèi)的扇區(qū)。這時(shí),在第一寫入中,會(huì)將LS2′和LS3一起編程到P0′中。在第二寫入中,會(huì)將LS4和LS5′一起編程到P1′中。在第三寫入中,會(huì)將LS2″和LS3一起編程到P2′中等。
元頁(yè)內(nèi)的平面對(duì)準(zhǔn)或者,編程的單位可具有元頁(yè)的粒度。如果寫入混亂更新區(qū)塊的粒度變成元頁(yè),則結(jié)合圖16A和16B所述的CBI區(qū)塊中的條目將和元頁(yè)有關(guān),而不是和扇區(qū)有關(guān)。增加的粒度會(huì)減少必須為混亂更新區(qū)塊所記錄的條目的數(shù)量,并允許直接消除索引且每一元區(qū)塊使用單一CBI扇區(qū)。
圖26A和圖21的存儲(chǔ)器結(jié)構(gòu)相同,只是各頁(yè)含有兩個(gè)扇區(qū)而不是一個(gè)。因此,從圖中可見(jiàn)元頁(yè)MP0現(xiàn)在各有其能夠存儲(chǔ)兩個(gè)邏輯單位的數(shù)據(jù)的頁(yè)。如果各邏輯單位是一個(gè)扇區(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′MOD W,其中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í)例是用于多重平面架構(gòu)中平面和頁(yè)的對(duì)準(zhǔn)。在具有多個(gè)扇區(qū)的頁(yè)的例子中,同樣維持頁(yè)內(nèi)的扇區(qū)對(duì)準(zhǔn)會(huì)很有利。以這種方式,使用相同組的感測(cè)電路有利于相同邏輯扇區(qū)的不同版本。可有效執(zhí)行例如扇區(qū)的重新定位和「讀取-修改-寫入」的操作。在對(duì)準(zhǔn)頁(yè)內(nèi)的扇區(qū)次序時(shí),可以采用和對(duì)準(zhǔn)頁(yè)與平面的相同技術(shù)。同樣取決于根據(jù)實(shí)施例,可以填補(bǔ)也可以不填補(bǔ)任何中間空隙。
無(wú)需填補(bǔ)的邏輯單位平面對(duì)準(zhǔn)圖27說(shuō)明的替代性方案如下不用填補(bǔ)要從一個(gè)位置復(fù)制到另一個(gè)的邏輯單位,即可在更新區(qū)塊中進(jìn)行平面對(duì)準(zhǔn)??蓪⒑透聟^(qū)塊交叉的四個(gè)平面的部分看作收集從主機(jī)接收的平面對(duì)準(zhǔn)的已更新邏輯單位的四個(gè)緩沖器。不用在合適緩沖器的下一個(gè)可用存儲(chǔ)器單位中填補(bǔ),即可編程從主機(jī)接收的各邏輯單位。依照從所述主機(jī)接收的邏輯單位地址的序列,可能會(huì)有不同數(shù)量的邏輯單位被編程在各平面中。
混亂更新區(qū)塊MB′1可含有邏輯元頁(yè)的所有邏輯單位的已更新版本,例如用于MP′0。其還可含有小于元頁(yè)的所有邏輯單位,例如用于MP′1。在MP′1的情況中,可從對(duì)應(yīng)的原始區(qū)塊MB0獲得丟失的邏輯單位LS4。
此替代性方案在存儲(chǔ)器架構(gòu)可支持并行讀取各平面的任意邏輯頁(yè)時(shí)尤其有效。以這種方式,可在單一并行讀取操作中讀取一個(gè)元頁(yè)的所有邏輯頁(yè),即使個(gè)別邏輯頁(yè)并非來(lái)自相同列。
階段性程序錯(cuò)誤處置當(dāng)區(qū)塊中有編程失敗時(shí),則通常會(huì)將所有要存儲(chǔ)到區(qū)塊的數(shù)據(jù)移到另一個(gè)區(qū)塊并將失敗的區(qū)塊標(biāo)示為不良。根據(jù)其中遇到失敗的操作的時(shí)序規(guī)格,可能沒(méi)有足夠的時(shí)間可另外將存儲(chǔ)的數(shù)據(jù)移到另一個(gè)區(qū)塊。最壞的情況是在正常垃圾收集操作期間的編程失敗,其中需要另一個(gè)相同垃圾收集操作以將所有數(shù)據(jù)重新定位到另一個(gè)區(qū)塊。在此情況中,可能會(huì)違反給定主機(jī)/存儲(chǔ)器裝置所規(guī)定的寫入等待時(shí)間限制,因?yàn)槠渫ǔ1辉O(shè)計(jì)成容納一次(而非兩次)垃圾收集操作。
圖28說(shuō)明其中缺陷區(qū)塊在合并操作期間發(fā)生編程失敗時(shí)會(huì)在另一個(gè)區(qū)塊上重復(fù)合并操作的方案。在此實(shí)例中,區(qū)塊1是按邏輯上循序次序存儲(chǔ)邏輯群組的完整邏輯單位的原始區(qū)塊。為了便于說(shuō)明,原始區(qū)塊含有扇區(qū)A、B、C、和D,各存儲(chǔ)一個(gè)子群組的邏輯單位。當(dāng)主機(jī)更新群組的特定邏輯單位時(shí),會(huì)將邏輯單位的較新版本記錄在更新區(qū)塊中,即區(qū)塊2。如先前結(jié)合更新區(qū)塊所述,根據(jù)主機(jī)而定,此更新可按循序或無(wú)序(混亂)次序記錄邏輯單位。最后,會(huì)因更新區(qū)塊已滿或一些其它原因而關(guān)閉更新區(qū)塊以接收進(jìn)一步更新。當(dāng)更新區(qū)塊(區(qū)塊2)關(guān)閉時(shí),會(huì)將駐存在更新區(qū)塊或原始區(qū)塊(區(qū)塊1)上的邏輯單位的當(dāng)前版本合并在新的區(qū)塊(區(qū)塊3)上,以形成邏輯群組的新的原始區(qū)塊。此實(shí)例顯示更新區(qū)塊在扇區(qū)B和D中含有邏輯單位的較新版本。為了方便,圖中將扇區(qū)B和D顯示在區(qū)塊2中未必是其記錄的位置,而是對(duì)準(zhǔn)其在區(qū)塊1中的原始位置。
在合并操作中,會(huì)按循序次序?qū)⒃瓉?lái)駐存在區(qū)塊1的邏輯群組的所有邏輯單位的當(dāng)前版本記錄在合并區(qū)塊(區(qū)塊3)中。因此,會(huì)先從區(qū)塊1將扇區(qū)A的邏輯單位復(fù)制到區(qū)塊3,接著再?gòu)膮^(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)合并程序。因此,會(huì)將扇區(qū)A、B、C、D復(fù)制在區(qū)塊4上,然后丟棄缺陷區(qū)塊3。然而,這將表示執(zhí)行兩個(gè)串聯(lián)的合并操作,結(jié)果造成復(fù)制多達(dá)兩個(gè)充滿邏輯單位的區(qū)塊。
存儲(chǔ)器裝置具有完成特定操作的特定時(shí)間容限。例如,在主機(jī)寫入存儲(chǔ)器裝置時(shí),會(huì)預(yù)計(jì)寫入操作在指定的時(shí)間內(nèi)完成,已知為「寫入等待時(shí)間」。當(dāng)存儲(chǔ)器裝置,例如存儲(chǔ)器卡,正忙于寫入主機(jī)的數(shù)據(jù)時(shí),會(huì)發(fā)送信息「BUSY(忙碌)」?fàn)顟B(tài)給主機(jī)。如果「BUSY」?fàn)顟B(tài)持續(xù)超過(guò)寫入等待時(shí)間的長(zhǎng)度,主機(jī)會(huì)使寫入操作逾時(shí),然后對(duì)寫入操作登錄例外或錯(cuò)誤。
圖29示意性說(shuō)明具有允許足夠時(shí)間完成寫入(更新)操作和合并操作的時(shí)序或?qū)懭氲却龝r(shí)間的主機(jī)寫入操作。主機(jī)寫入操作具有寫入等待時(shí)間Tw,其可提供足夠完成寫入主機(jī)數(shù)據(jù)到更新區(qū)塊的更新操作972的時(shí)間(圖29(A))。如先前在區(qū)塊管理系統(tǒng)所述,對(duì)更新區(qū)塊的主機(jī)寫入可觸發(fā)合并操作。因此,時(shí)序還允許除更新操作972之外的合并操作974(圖29(B))。然而,必須重新啟動(dòng)合并操作以響應(yīng)失敗的合并操作將會(huì)花費(fèi)太多時(shí)間并超過(guò)指定的寫入等待時(shí)間。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的存儲(chǔ)器中,在時(shí)間緊要的存儲(chǔ)器操作期間,區(qū)塊中的編程失敗可通過(guò)繼續(xù)中斷區(qū)塊(breakout block)中的編程操作來(lái)處置。稍后,在較不緊要的時(shí)間,可將中斷前記錄在失敗區(qū)塊中的數(shù)據(jù)傳送到其它可能也是中斷區(qū)塊的區(qū)塊。接著即可丟棄失敗的區(qū)塊。以這種方式,在遇到缺陷區(qū)塊時(shí),不會(huì)因必須立刻傳送缺陷區(qū)塊中存儲(chǔ)的數(shù)據(jù)而損失數(shù)據(jù)且超過(guò)指定的時(shí)間限制,即可加以處理。此錯(cuò)誤處置對(duì)于垃圾收集操作尤其重要,因此在緊要時(shí)間期間不需要對(duì)一嶄新的區(qū)塊重復(fù)進(jìn)行整個(gè)操作。其后,在適當(dāng)時(shí)間,通過(guò)重新定位到其它區(qū)塊,即可挽救缺陷區(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ǔ)失敗,在作為第一區(qū)塊的中斷區(qū)塊的第二區(qū)塊中存儲(chǔ)后續(xù)的邏輯單位。
編程失敗處置(最后階段)步驟1020響應(yīng)于預(yù)定義的事件,將存儲(chǔ)在第一區(qū)塊的邏輯單位傳送到第三區(qū)塊,其中第三區(qū)塊和第二區(qū)塊可以相同或不同。
步驟1022丟棄第一區(qū)塊。
圖31A說(shuō)明編程失敗處置的一實(shí)施例,其中第三(最后的重新定位)區(qū)塊和第二(中斷)區(qū)塊不同。在階段I期間,會(huì)在第一區(qū)塊上記錄一連串的邏輯單位。如果邏輯單位是來(lái)自主機(jī)寫入,則可將第一區(qū)塊看作更新區(qū)塊。如果邏輯單位是來(lái)自壓縮操作的合并,則可將第一區(qū)塊看作重新定位區(qū)塊。如果在某個(gè)點(diǎn)在區(qū)塊1中遇到編程失敗,則可提供當(dāng)作中斷區(qū)塊的第二區(qū)塊。在區(qū)塊1和后續(xù)邏輯單位中記錄失敗的邏輯單位會(huì)被記錄在中斷區(qū)塊上。以這種方式,不需要額外的時(shí)間來(lái)取代失敗的區(qū)塊1和駐存其上的數(shù)據(jù)。
在中間階段II中,可在區(qū)塊1和區(qū)塊2之間取得序列中所有的已記錄邏輯單位。
在最后階段III中,會(huì)將邏輯單位重新定位到可當(dāng)作重新定位區(qū)塊的區(qū)塊3,以取代失敗的區(qū)塊1和駐存其上的數(shù)據(jù)。因此,可挽救已失敗區(qū)塊中的數(shù)據(jù),然后再丟棄失敗的區(qū)塊。會(huì)安排最后階段的時(shí)間,使其不會(huì)和任何同時(shí)的存儲(chǔ)器操作的時(shí)序沖突。
在此實(shí)施例中,重新定位區(qū)塊3和中斷區(qū)塊2有所區(qū)分。這在中間階段期間已經(jīng)以附加的邏輯單位記錄中斷區(qū)塊時(shí)會(huì)很方便。因此,中斷區(qū)塊已經(jīng)變成更新區(qū)塊,可能不適合將缺陷區(qū)塊1的邏輯單位重新定位到其中。
圖31B說(shuō)明編程失敗處置的另一實(shí)施例,其中第三(最后的重新定位)區(qū)塊和第二(中斷)區(qū)塊相同。階段I和II和圖31A所示的第一實(shí)施例相同。然而,在階段III中,會(huì)將缺陷區(qū)塊1的邏輯單位重新定位到中斷區(qū)塊2。這在未用先前寫入操作的原始序列以外的附加邏輯單位記錄中斷區(qū)塊2時(shí)會(huì)很方便。以這種方式,存儲(chǔ)討論中的邏輯單位所需的區(qū)塊最少。
合并期間的編程失敗處置的實(shí)施例編程失敗處置在合并操作期間尤其重要。正常的合并操作可將駐存在原始區(qū)塊和更新區(qū)塊中的邏輯群組的所有邏輯單位的當(dāng)前版本合并到合并區(qū)塊。在合并操作期間,如果在合并區(qū)塊中發(fā)生編程失敗,則會(huì)提供另一個(gè)當(dāng)作中斷合并區(qū)塊的區(qū)塊,以接收其余邏輯單位的合并。以這種方式,不必復(fù)制邏輯單位一次以上,而仍可在正常合并操作指定的期間內(nèi)完成例外處理的操作。在適當(dāng)時(shí)間,將群組所有未處理完成的邏輯單位合并到中斷區(qū)塊中,即可完成合并操作。適當(dāng)時(shí)間將是在當(dāng)前主機(jī)寫入操作以外的一些其它有時(shí)間執(zhí)行合并時(shí)期的期間。一個(gè)此種適當(dāng)時(shí)間是在另一個(gè)其中有更新但無(wú)關(guān)聯(lián)的合并操作的主機(jī)寫入期間。
實(shí)質(zhì)上,可將編程失敗處置的合并看作以多階段來(lái)實(shí)施。在第一階段中,在發(fā)生編程失敗后,會(huì)將邏輯單位合并到一個(gè)以上區(qū)塊中以避免合并各邏輯單位一次以上。在適當(dāng)時(shí)間會(huì)完成最后階段,其中會(huì)將邏輯群組合并到一個(gè)區(qū)塊中,優(yōu)選通過(guò)按循序次序?qū)⑺羞壿媶挝皇占街袛嗪喜^(qū)塊中。
圖32A說(shuō)明導(dǎo)致合并操作的初始更新操作的流程圖。
步驟1102將非易失性存儲(chǔ)器組織成區(qū)塊,將各區(qū)塊劃分成可一起擦除的存儲(chǔ)器單位,各存儲(chǔ)器單位可存儲(chǔ)一邏輯單位的數(shù)據(jù)。
步驟1104將數(shù)據(jù)組織成復(fù)數(shù)個(gè)邏輯群組,各邏輯群組為可存儲(chǔ)在區(qū)塊中的邏輯單位的群組。
步驟1112接收封裝在邏輯單位中的主機(jī)數(shù)據(jù)。
步驟1114根據(jù)第一次序在第一區(qū)塊中存儲(chǔ)邏輯群組的邏輯單位的第一版本,建立邏輯群組的原始區(qū)塊。
步驟1116根據(jù)第二次序在第二區(qū)塊中存儲(chǔ)包括邏輯群組的邏輯單位的后續(xù)版本,建立邏輯群組的更新區(qū)塊。
步驟1119在上述部分的預(yù)定事件,執(zhí)行垃圾收集以在各種區(qū)塊中收集邏輯單位的當(dāng)前版本,且將其重新記錄到新的區(qū)塊。
圖32B說(shuō)明根據(jù)本發(fā)明優(yōu)選實(shí)施例的多階段合并操作的流程圖。
合并失敗處置(階段I)錯(cuò)誤處置的合并,階段I操作1120包含步驟1122和步驟1124。
步驟1122以類似于第一次序的次序在第三區(qū)塊中存儲(chǔ)所述邏輯群組的邏輯單位的當(dāng)前版本,以建立邏輯群組的合并區(qū)塊。
步驟1124響應(yīng)于合并區(qū)塊的存儲(chǔ)失敗,以類似于第一次序的次序在第四區(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ū)塊列表,見(jiàn)圖18)再予以使用。區(qū)塊1只能在以下的條件下釋放如果其為關(guān)閉的更新區(qū)塊且其中有對(duì)應(yīng)的GAT條目指向的另一個(gè)區(qū)塊。
實(shí)質(zhì)上,區(qū)塊3會(huì)變成邏輯群組的原始區(qū)塊,而區(qū)塊4變成區(qū)塊3的取代循序更新區(qū)塊。
在完成階段I合并后,存儲(chǔ)器裝置通過(guò)釋放BUSY信號(hào)來(lái)發(fā)送信息給主機(jī)。
中間操作(階段II)階段II,即中間操作1130,可在階段III合并操作1140之前發(fā)生。如步驟1132、1134、1136中任一者所提出般,可能會(huì)有數(shù)種可能的情況。
步驟1132或是在邏輯群組的寫入操作中,寫入作為更新區(qū)塊的第四區(qū)塊(中斷合并區(qū)塊)。
如果主機(jī)寫入討論中的邏輯群組,則區(qū)塊4(其為中斷合并區(qū)塊且其此時(shí)已是取代循序更新區(qū)塊)將用作正常更新區(qū)塊。根據(jù)主機(jī)寫入而定,其可維持循序或變成混亂狀態(tài)。作為更新區(qū)塊,其將在某個(gè)點(diǎn)觸發(fā)關(guān)閉另一個(gè)混亂區(qū)塊,如先前的優(yōu)選實(shí)施例所述。
如果主機(jī)寫入另一個(gè)邏輯群組,則直接進(jìn)行到階段III操作。
步驟1134或是在讀取操作中,讀取其中第三區(qū)塊為邏輯群組原始區(qū)塊和第四區(qū)塊為更新區(qū)塊的存儲(chǔ)器。
這時(shí),會(huì)從作為邏輯群組的原始區(qū)塊的區(qū)塊3讀取扇區(qū)A和B的邏輯單位,且從作為群組的更新區(qū)塊的區(qū)塊4讀取扇區(qū)C和D的邏輯單位。由于從區(qū)塊3只能讀取扇區(qū)A和B,將無(wú)法存取其中編程失敗的頁(yè),且無(wú)法存取其后未寫入的部分。雖然尚未更新快閃存儲(chǔ)器中的GAT目錄和其仍指向作為原始區(qū)塊的區(qū)塊1,但不會(huì)從中讀取任何數(shù)據(jù),且此區(qū)塊本身已在早先擦除。
另一種可能性是主機(jī)讀取邏輯群組中的邏輯單位。這時(shí),會(huì)從作為邏輯群組的原始區(qū)塊的區(qū)塊3讀取扇區(qū)A和B的邏輯單位,且從作為群組的循序區(qū)塊的區(qū)塊4讀取扇區(qū)C和D的邏輯單位。
步驟1136或在上電初始化中,通過(guò)掃描其中內(nèi)容以重新識(shí)別第一到第四區(qū)塊中的任一項(xiàng)。
中間階段的另一個(gè)可能性是關(guān)閉存儲(chǔ)器裝置的電源,然后重新啟動(dòng)。如上述,在上電初始化期間,會(huì)掃描配置區(qū)塊列表中的區(qū)塊(要使用的擦除集區(qū)區(qū)塊,見(jiàn)圖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。
在一實(shí)施例中,會(huì)將旗標(biāo)編程到中斷合并區(qū)塊(區(qū)塊4)的第一邏輯單位。這可協(xié)助指示邏輯群組的特殊狀態(tài)即,其已經(jīng)合并成兩個(gè)區(qū)塊,即,區(qū)塊3和區(qū)塊4。
使用旗標(biāo)以識(shí)別具缺陷區(qū)塊的邏輯群組的一個(gè)替代方法是,利用不像原始區(qū)塊應(yīng)為已滿的特性(除非錯(cuò)誤發(fā)生在最后的頁(yè),且最后的頁(yè)沒(méi)有ECC錯(cuò)誤)檢測(cè)在掃描期間是缺陷的區(qū)塊。還有,根據(jù)實(shí)施例而定,其中會(huì)有有關(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ū)塊時(shí)的第一種情況,以類似于所述第一次序的次序在其中存儲(chǔ)所述邏輯群組的所有未處理完成的邏輯單位的當(dāng)前版本;對(duì)于在階段I后已進(jìn)一步記錄第四區(qū)塊時(shí)的第二種情況,將第三和第四區(qū)塊合并為第五區(qū)塊。
步驟1144之后,對(duì)于第一種情況,操作存儲(chǔ)器時(shí),以合并的第四區(qū)塊作為邏輯群組的原始區(qū)塊;對(duì)于第二種情況,操作存儲(chǔ)器時(shí),以第五區(qū)塊作為邏輯群組的原始區(qū)塊。
只要有任何不會(huì)違反任何指定時(shí)間限制的機(jī)會(huì),即可執(zhí)行階段III中的最后合并。一個(gè)優(yōu)選情況是,在其中有另一個(gè)未附帶合并操作的邏輯群組的更新操作時(shí),「掛附(piggy-back)」在下一個(gè)主機(jī)寫入時(shí)槽上。如果另一個(gè)邏輯群組的主機(jī)寫入觸發(fā)本身的垃圾收集,則將使階段III合并延后。
圖33說(shuō)明多階段合并操作的第一和最后階段的實(shí)例時(shí)序。主機(jī)寫入等待時(shí)間是具有持續(xù)期間Tw的各主機(jī)寫入時(shí)槽的寬度。主機(jī)寫入1是簡(jiǎn)單的更新,且邏輯群組LG1中第一組邏輯單位的當(dāng)前版本會(huì)被記錄在關(guān)聯(lián)的更新區(qū)塊上。
在主機(jī)寫入2,會(huì)在邏輯群組LG1上發(fā)生更新,導(dǎo)致更新區(qū)塊被關(guān)閉(如,已滿)。會(huì)提供新的更新區(qū)塊以記錄其余的更新。提供新的更新區(qū)塊會(huì)觸發(fā)垃圾收集,而導(dǎo)致關(guān)于LG4的合并操作,以便再循環(huán)要再使用的區(qū)塊。LG4群組的當(dāng)前邏輯單位會(huì)按循序次序記錄在合并區(qū)塊上。合并操作可繼續(xù)進(jìn)行直到在合并區(qū)塊中遭遇缺陷為止。然后調(diào)用階段I合并,其中合并操作在中斷合并區(qū)塊上繼續(xù)。同時(shí),LG4(階段III)的最后合并會(huì)等待下一個(gè)機(jī)會(huì)。
在主機(jī)寫入3,也會(huì)發(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ū)塊而是用作其合并操作已經(jīng)中斷的合并區(qū)塊的情況。尤其,圖34A是指圖33所示的主機(jī)寫入#2,其中主機(jī)寫入屬于邏輯群組LG1的邏輯單位的更新,且在此期間,此操作也會(huì)觸發(fā)和另一個(gè)邏輯群組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í),會(huì)循序地將扇區(qū)C和D中其余的邏輯單位復(fù)制到中斷合并區(qū)塊(區(qū)塊4)。
如果主機(jī)原來(lái)在第一邏輯群組中寫入更新會(huì)觸發(fā)和第二邏輯群組關(guān)聯(lián)的區(qū)塊的合并操作,則會(huì)將第一邏輯群組的更新記錄到第一邏輯群組的更新區(qū)塊(通常為新的更新區(qū)塊)。這時(shí),中斷合并區(qū)塊(區(qū)塊4)不會(huì)用來(lái)記錄合并操作之外的任何更新數(shù)據(jù)且會(huì)維持必須完成的中斷合并區(qū)塊。
由于區(qū)塊l和區(qū)塊2中的數(shù)據(jù)現(xiàn)在完全包含在另一個(gè)區(qū)塊(區(qū)塊3和區(qū)塊4)中,因此可將其擦除以便再循環(huán)。地址表(GAT)會(huì)被更新以指向區(qū)塊3,作為邏輯群組的原始區(qū)塊。更新區(qū)塊的目錄信息(在ACL中,見(jiàn)圖15和圖18)也會(huì)被更新,以指向已成為邏輯群組(如,LG4)的循序更新區(qū)塊的區(qū)塊4。
結(jié)果,合并的邏輯群組并未局限在一個(gè)區(qū)塊中,而是分布在缺陷合并區(qū)塊(區(qū)塊3)和中斷合并區(qū)塊(區(qū)塊4)上。此方案的重要特點(diǎn)是群組中的邏輯單位只會(huì)在此階段期間合并一次,但卻將合并散布在一個(gè)以上區(qū)塊的上。以這種方式,可在正常指定的時(shí)間內(nèi)完成合并操作。
圖34B說(shuō)明始于圖34A的多階段合并的第三和最后階段。如結(jié)合圖33所述,會(huì)在第一階段后的適宜時(shí)間(例如在隨后不會(huì)觸發(fā)伴隨的合并操作的主機(jī)寫入期間)執(zhí)行階段III合并。尤其,圖34B是指其中發(fā)生如圖33所示的主機(jī)寫入#4的時(shí)槽。在所述期間中,主機(jī)寫入可更新屬于邏輯群組LG2的邏輯單位而不會(huì)觸發(fā)另一個(gè)額外的合并操作。因此,有利于將時(shí)槽中剩余的時(shí)間用于階段III操作,以完成邏輯群組LG4的合并。
此操作可將還不在中斷區(qū)塊中的LG4的所有未處理完成的邏輯單位合并到中斷區(qū)塊。在此實(shí)例中,這表示會(huì)從區(qū)塊3按邏輯上循序次序?qū)⑸葏^(qū)A和B復(fù)制到中斷區(qū)塊(區(qū)塊4)。由于區(qū)塊中邏輯單位的繞回方案并使用頁(yè)標(biāo)記(見(jiàn)圖3A),即使實(shí)例說(shuō)明在區(qū)塊4中,扇區(qū)A和B會(huì)被記錄在扇區(qū)C和D之后,但仍會(huì)將已記錄的序列考慮為等同于A、B、C、D的循序次序。根據(jù)實(shí)施例而定,優(yōu)選從區(qū)塊3取得要復(fù)制的未處理完成的邏輯單位的當(dāng)前版本,因其已經(jīng)是合并的形式,不過(guò)也可從尚未被擦除的區(qū)塊1和區(qū)塊2中收集。
在中斷區(qū)塊(區(qū)塊4)上完成最后合并后,會(huì)將其指定為邏輯群組的原始區(qū)塊并跟著更新合適的目錄(如,GAT,見(jiàn)圖17A)。同樣地,會(huì)將失敗的物理區(qū)塊(區(qū)塊3)標(biāo)示為不良并將其排除。其它區(qū)塊,區(qū)塊1和區(qū)塊2,將被擦除和再循環(huán)。同時(shí),會(huì)將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ī)寫入,且在此程序中,也會(huì)觸發(fā)相同邏輯群組的合并。
和圖34A的案例一樣,將區(qū)塊1與區(qū)塊2合并于區(qū)塊3中會(huì)繼續(xù)進(jìn)行,直到在處理扇區(qū)C時(shí)遇到編程失敗。然后會(huì)在中斷合并區(qū)塊(區(qū)塊4)上繼續(xù)合并。在中斷區(qū)塊(區(qū)塊4)中合并未處理完成的邏輯單位(如,在扇區(qū)C和D中)后,并不在階段III中等待完成其中的邏輯群組合并,而是維持中斷區(qū)塊為更新區(qū)塊。此案例尤其適于其中主機(jī)寫入可更新邏輯群組和觸發(fā)相同邏輯群組的合并的情況。在此實(shí)例中,這可將邏輯群組LG4的主機(jī)更新的記錄記錄在中斷合并區(qū)塊(區(qū)塊4)中,而非記錄到新的更新區(qū)塊。此更新區(qū)塊(先前為中斷合并區(qū)塊(區(qū)塊4))可根據(jù)其中記錄的主機(jī)數(shù)據(jù)而為循序或變成混亂。在所示的實(shí)例中,區(qū)塊4已變成混亂,因扇區(qū)C中邏輯單位的后續(xù)較新版本使得區(qū)塊4中的先前版本被廢棄。
在中間階段期間,會(huì)將區(qū)塊3看作LG4的原始區(qū)塊,且區(qū)塊4會(huì)是關(guān)聯(lián)的更新區(qū)塊。
圖35B說(shuō)明始于第二例中圖35A的多階段合并的第三和最后階段。如結(jié)合圖33所述,會(huì)在第一階段后的適宜時(shí)間執(zhí)行階段III合并,如在隨后不會(huì)觸發(fā)伴隨的合并操作的主機(jī)寫入期間。在所述期間中,主機(jī)寫入可更新屬于邏輯群組的邏輯單位而不會(huì)觸發(fā)另一個(gè)額外的合并操作。因此,有利于將時(shí)槽中剩余的時(shí)間用于階段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ā)明同樣適用于其它其中并無(wú)邏輯群組到物理區(qū)塊對(duì)準(zhǔn)的區(qū)塊管理系統(tǒng),如WO 03/027828和WO 00/49488中所揭示的區(qū)塊管理系統(tǒng)。在這些其它系統(tǒng)中實(shí)施階段性編程失敗處置方法的一些實(shí)例如圖36A、36B和36C所示。
圖36A說(shuō)明套用于主機(jī)寫入觸發(fā)關(guān)閉更新區(qū)塊且更新區(qū)塊為循序時(shí)的情況的階段性程序錯(cuò)誤處置方法。此例中的關(guān)閉是通過(guò)以下方式來(lái)完成將原始區(qū)塊2的其余的有效數(shù)據(jù)(B和C)復(fù)制到循序更新區(qū)塊3。在數(shù)據(jù)部分C編程起點(diǎn)的編程失敗的例子中,會(huì)將部分C編程到保留的區(qū)塊4。然后可將新的主機(jī)數(shù)據(jù)寫入新的更新區(qū)塊5(未顯示)。此方法的階段II和III和混亂區(qū)塊關(guān)閉的情況相同。
圖36B說(shuō)明在更新區(qū)塊的更新的情況中可應(yīng)用(局部區(qū)塊系統(tǒng))的階段性程序錯(cuò)誤處置方法。在此情況中,會(huì)將邏輯群組存儲(chǔ)在原始區(qū)塊1和其它的更新區(qū)塊中。合并操作包括將原始區(qū)塊1和其它更新區(qū)塊2的數(shù)據(jù)復(fù)制到更新區(qū)塊(根據(jù)一些規(guī)則選定,圖中的區(qū)塊3)之一。和已經(jīng)說(shuō)明的主要情況不同之處在于區(qū)塊3已經(jīng)部分被寫入。
圖36C說(shuō)明處理垃圾收集操作的階段性程序錯(cuò)誤,或不支持映射到元區(qū)塊的邏輯群組的存儲(chǔ)器區(qū)塊管理系統(tǒng)中的清除。此種存儲(chǔ)器區(qū)塊管理(循環(huán)存儲(chǔ))系統(tǒng)是在WO03/027828A1中說(shuō)明。循環(huán)存儲(chǔ)系統(tǒng)明顯的特點(diǎn)是不對(duì)單一邏輯群組配置區(qū)塊。其中支持元區(qū)塊中控制數(shù)據(jù)的多個(gè)邏輯群組。垃圾收集涉及從部分廢棄的區(qū)塊,將可能沒(méi)有任何關(guān)系(隨機(jī)邏輯區(qū)塊地址)的有效數(shù)據(jù)扇區(qū)取到其中可能已經(jīng)有些數(shù)據(jù)的重新定位區(qū)塊。如果重新定位區(qū)塊在操作期間變滿,則將打開另一個(gè)區(qū)塊。
無(wú)序更新區(qū)塊索引在上文關(guān)于混亂區(qū)塊索引和結(jié)合圖16A-16E的段落中,CBI扇區(qū)可用來(lái)存儲(chǔ)可記錄隨機(jī)存儲(chǔ)在混亂或無(wú)序更新區(qū)塊中的邏輯扇區(qū)位置的索引。
根據(jù)本發(fā)明的另一方面,在具有支持具無(wú)序邏輯單位的更新區(qū)塊的區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,緩沖存儲(chǔ)在RAM中的無(wú)序更新區(qū)塊的邏輯單位的索引被定期存儲(chǔ)在非易失性存儲(chǔ)器中。在一實(shí)施例中,將索引存儲(chǔ)在專用于存儲(chǔ)索引的區(qū)塊中。在另一實(shí)施例中,會(huì)將索引存儲(chǔ)在更新區(qū)塊中。在另一實(shí)施例中,將索引存儲(chǔ)在各邏輯單位的標(biāo)頭中。在另一方面,在上一個(gè)索引更新之后但在下一個(gè)索引更新之前寫入的邏輯單位會(huì)將其索引信息存儲(chǔ)在各邏輯單位的標(biāo)頭中。以這種方式,在電源中斷后,不必在初始化期間執(zhí)行掃描,即可確定最近寫入的邏輯單位的位置。在另一方面中,將區(qū)塊管理成部分循序和部分無(wú)序指向一個(gè)以上邏輯子群組。
在預(yù)定觸發(fā)事件后存儲(chǔ)在CBI區(qū)塊中CBI扇區(qū)的索引指針根據(jù)結(jié)合圖16A-16E所述的方案,會(huì)將混亂區(qū)塊中最近寫入扇區(qū)的列表保留在控制器RAM中。只在與給定混亂區(qū)塊關(guān)聯(lián)的邏輯群組的預(yù)定數(shù)量的寫入后,含有最新索引信息的CBI扇區(qū)才被寫入快閃存儲(chǔ)器(CBI區(qū)塊620)。以這種方式,可減少CBI區(qū)塊更新的數(shù)量。
在邏輯群組中CBI扇區(qū)的下一個(gè)更新之前,會(huì)將邏輯群組中最近寫入扇區(qū)的列表保留在控制器RAM中。此列表在存儲(chǔ)器裝置遭遇電源關(guān)閉時(shí)將會(huì)遺失,但可在電源啟動(dòng)后的初始化中通過(guò)掃描更新區(qū)塊加以重建。
圖37說(shuō)明在每N個(gè)扇區(qū)寫入相同的邏輯群組后將CBI扇區(qū)寫入關(guān)聯(lián)的混亂索引扇區(qū)區(qū)塊的時(shí)間安排實(shí)例。此實(shí)例顯示兩個(gè)同時(shí)進(jìn)行更新的邏輯群組LG3和LG11。起初,會(huì)將LG3的邏輯扇區(qū)按循序次序存儲(chǔ)在原始區(qū)塊中。群組中邏輯扇區(qū)的更新會(huì)按照主機(jī)指定的次序被記錄在關(guān)聯(lián)的更新區(qū)塊上。此實(shí)例顯示混亂更新序列。同時(shí),也會(huì)以和其更新區(qū)塊相同的方式更新邏輯群組LG11。在每一邏輯扇區(qū)寫入后,會(huì)將其在更新區(qū)塊中的位置保留在控制器RAM中。在每一預(yù)定的觸發(fā)事件后,會(huì)以混亂索引扇區(qū)的形式將更新區(qū)塊中邏輯扇區(qū)的當(dāng)前索引寫入非易失性混亂索引扇區(qū)區(qū)塊。例如,預(yù)定的觸發(fā)事件可發(fā)生在每N個(gè)寫入之后,其中N為3。
雖然提供的實(shí)例有關(guān)作為扇區(qū)的數(shù)據(jù)邏輯單位,但熟習(xí)本技術(shù)者應(yīng)明白,邏輯單位也可以是一些其它集合體,如含有一個(gè)扇區(qū)或一組扇區(qū)的頁(yè)。還有,循序區(qū)塊中的第一頁(yè)不一定是邏輯頁(yè)0,因?yàn)槔@回的頁(yè)標(biāo)記可能是第一頁(yè)。
在預(yù)定觸發(fā)事件后存儲(chǔ)在混亂更新區(qū)塊中CBI扇區(qū)的索引指針在另一實(shí)施例中,會(huì)在其中每N個(gè)寫入后,將索引指針存儲(chǔ)在混亂更新區(qū)塊本身中的專用CBI扇區(qū)中。此方案和上述其中也將索引存儲(chǔ)在CBI扇區(qū)中的實(shí)施例相同。其中的差異在于上述實(shí)施例中,CBI扇區(qū)被記錄在CBI扇區(qū)區(qū)塊中,而不是更新區(qū)塊本身中。
此方法是基于將所有混亂區(qū)塊索引信息保持在混亂更新區(qū)塊本身中。圖38A、38B和38C分別說(shuō)明同樣按照三個(gè)不同階段存儲(chǔ)CBI扇區(qū)的更新區(qū)塊的狀態(tài)。
圖38A說(shuō)明直到在預(yù)定數(shù)量的寫入后在其中記錄CBI扇區(qū)時(shí)的更新區(qū)塊。在此實(shí)例中,在主機(jī)已經(jīng)循序?qū)懭脒壿嬌葏^(qū)0-3后,接著將會(huì)發(fā)出再次寫入邏輯扇區(qū)1的另一版本的指令,因而破壞數(shù)據(jù)寫入的循序序列。然后實(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ū)塊中的下一個(gè)可用位置。為了避免頻繁的快快閃存儲(chǔ)器取,會(huì)在每N個(gè)數(shù)據(jù)扇區(qū)寫入后寫入CBI扇區(qū)。在此實(shí)例中,N為4。如果這時(shí)損失電源,則最后寫入的扇區(qū)成為CBI扇區(qū),并將此區(qū)塊看作混亂更新區(qū)塊。
圖38B說(shuō)明圖38A的進(jìn)一步在索引扇區(qū)后在其中記錄邏輯扇區(qū)1、2和4的更新區(qū)塊。邏輯扇區(qū)1和2的較新版本可取代先前在更新區(qū)塊中記錄的舊版本。在這時(shí)的電源周期的情況中,必須先找到最后寫入的扇區(qū),然后必須掃描多達(dá)N個(gè)扇區(qū),以定位最后寫入的索引扇區(qū)和最近寫入的數(shù)據(jù)扇區(qū)。
圖38C說(shuō)明圖38B的具有另一寫入以觸發(fā)索引扇區(qū)下一個(gè)記錄的邏輯扇區(qū)的更新區(qū)塊。在另N個(gè)(N=4)扇區(qū)寫入后的相同更新區(qū)塊可記錄CBI扇區(qū)的另一個(gè)當(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ù);也可讓串接控制更新比較簡(jiǎn)短。(請(qǐng)見(jiàn)上文有關(guān)CBI區(qū)塊管理的部分)。
關(guān)于存儲(chǔ)在混亂更新區(qū)塊中數(shù)據(jù)扇區(qū)標(biāo)頭的最近寫入的扇區(qū)的信息根據(jù)本發(fā)明的另一方面,會(huì)在每N個(gè)寫入后,將記錄在區(qū)塊中的邏輯單位的索引存儲(chǔ)在非易失性存儲(chǔ)器中,且將有關(guān)中間寫入的邏輯單位的當(dāng)前信息存儲(chǔ)在各邏輯單位寫入的額外開銷部分。以這種方式,在電源重新啟動(dòng)后,不必掃描區(qū)塊,即可從區(qū)塊中最后寫入邏輯單位的額外開銷部分快速取得有關(guān)從上一個(gè)索引更新后寫入的邏輯單位的信息。
圖39A說(shuō)明存儲(chǔ)在混亂更新區(qū)塊中各數(shù)據(jù)扇區(qū)標(biāo)頭的中間寫入的中間索引。
圖39B說(shuō)明在寫入的各扇區(qū)標(biāo)頭中存儲(chǔ)中間寫入的中間索引的實(shí)例。在此實(shí)例中,在寫入四個(gè)扇區(qū)LS0-LS3后,會(huì)寫入CBI索引作為區(qū)塊中的下一個(gè)扇區(qū)。其后,會(huì)將邏輯扇區(qū)LS′1、LS′2和LS4寫入?yún)^(qū)塊。每次,標(biāo)頭都會(huì)存儲(chǔ)從上一個(gè)CBI索引后寫入的邏輯單位的中間索引。因此,LS′2中的標(biāo)頭將具有提供上一個(gè)CBI索引和LS′1的偏移(即,位置)的索引。類似地,LS4中的標(biāo)頭將具有提供上一個(gè)CBI索引和LS′1和LS′2的偏移(即,位置)的索引。
最后寫入的數(shù)據(jù)扇區(qū)永遠(yuǎn)含有與多達(dá)N個(gè)最后寫入的頁(yè)相關(guān)的信息(即,一直到最后寫入的CBI扇區(qū))。只要電源重新啟動(dòng)時(shí),上一個(gè)CBI索引可提供邏輯單位在CBI索引扇區(qū)之前寫入的索引信息,且隨后寫入的邏輯單位的索引信息可在最后寫入的數(shù)據(jù)扇區(qū)的標(biāo)頭中找到。這具有如下優(yōu)點(diǎn)在初始化時(shí)不必為其后寫入的扇區(qū)掃描區(qū)塊以確定其位置。
在數(shù)據(jù)扇區(qū)的標(biāo)頭中存儲(chǔ)中間索引信息的方案同樣適用于無(wú)論CBI索引扇區(qū)是存儲(chǔ)在更新區(qū)塊本身或在分離的CBI扇區(qū)區(qū)塊中,如前文所述。
存儲(chǔ)在混亂更新區(qū)塊中數(shù)據(jù)扇區(qū)標(biāo)頭的索引指針在另一實(shí)施例中,會(huì)將整個(gè)CBI索引存儲(chǔ)在混亂更新區(qū)塊中各數(shù)據(jù)扇區(qū)的額外開銷部分。
圖40說(shuō)明在混亂更新區(qū)塊的各數(shù)據(jù)扇區(qū)標(biāo)頭中存儲(chǔ)的混亂索引字段中的信息。
扇區(qū)標(biāo)頭的信息容量有限,因此可將由任何單一扇區(qū)所提供的索引范圍設(shè)計(jì)為層級(jí)索引方案的一部分。例如,存儲(chǔ)器特定平面內(nèi)的扇區(qū)可提供索引給僅在所述平面內(nèi)的扇區(qū)。還有,可將邏輯地址的范圍劃分成一些子范圍,以允許采用間接索引方案。例如,如果可將有64個(gè)邏輯地址的扇區(qū)存儲(chǔ)在一個(gè)平面中,則每一扇區(qū)可以有3個(gè)字段用于扇區(qū)偏移值,每一字段能夠存儲(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ū)。然而,這卻只適用于物理快閃扇區(qū)的額外開銷數(shù)據(jù)區(qū)大到足以容納混亂更新區(qū)塊中有效扇區(qū)索引所需的條目數(shù)量時(shí)。
混亂更新區(qū)塊的邏輯群組內(nèi)受限的邏輯范圍在邏輯群組內(nèi),可縮減可無(wú)序?qū)懭氲纳葏^(qū)的邏輯范圍。此技術(shù)的主要優(yōu)點(diǎn)如下由于只需要讀取一個(gè)多重扇區(qū)頁(yè)(在多個(gè)芯片的例子中,可以并行讀取頁(yè)),即可取得目的地頁(yè)的所有數(shù)據(jù)(假設(shè)來(lái)源和目的地已對(duì)準(zhǔn),若未對(duì)準(zhǔn),則需要另一個(gè)讀取),使得循序?qū)懭霐?shù)據(jù)的復(fù)制能夠更快速地完成,因此范圍外的扇區(qū)在原始區(qū)塊中保持循序?qū)懭?,且垃圾收集操作能在更短的時(shí)間內(nèi)完成。還有,使用芯片上的副本特點(diǎn),可將循序數(shù)據(jù)從來(lái)源復(fù)制到目的地,而不用在控制器之間來(lái)回傳送數(shù)據(jù)。如果源數(shù)據(jù)已經(jīng)分散,如混亂區(qū)塊中所發(fā)生的,則需要每一扇區(qū)讀取多達(dá)一個(gè)頁(yè),才能收集所有要寫入目的地的扇區(qū)。
在一實(shí)施例中,實(shí)際上并不將邏輯范圍限制在某個(gè)數(shù)量的扇區(qū),而是經(jīng)由限制CBI的數(shù)量來(lái)完成(只限制大群組/元區(qū)塊的混亂范圍很合理,因其需要多個(gè)混亂區(qū)塊索引才能涵蓋整個(gè)邏輯群組的范圍)。例如,如果元區(qū)塊/群組有2048個(gè)扇區(qū),則其將需要多達(dá)8個(gè)CBI扇區(qū),各涵蓋一個(gè)子群組256個(gè)扇區(qū)的連續(xù)邏輯范圍。如果將CBI的數(shù)量限制為4,則混亂區(qū)塊可用來(lái)寫入多達(dá)4個(gè)子群組的扇區(qū)(其中任何一個(gè))。因此,允許邏輯群組有多達(dá)4個(gè)部分或完全混亂子群組,且最少有4個(gè)子群組將維持完全循序。如果一個(gè)混亂區(qū)塊有4個(gè)和其關(guān)聯(lián)的有效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ū)的混亂范圍(子群組)。結(jié)果,在正常的情況中,垃圾收集也不會(huì)受到影響,但限制規(guī)則的防范卻形成垃圾收集太長(zhǎng)(會(huì)觸發(fā)主機(jī)的逾時(shí))的極端情況。
部分循序混亂更新區(qū)塊的索引當(dāng)循序更新區(qū)塊在將區(qū)塊轉(zhuǎn)換為混亂管理模式之前被部分寫入時(shí),邏輯群組的循序更新扇區(qū)的全部或部分可繼續(xù)被處理成已經(jīng)循序更新,且可將混亂更新管理僅應(yīng)用于邏輯群組的地址范圍的子集。
控制數(shù)據(jù)完整性與管理存儲(chǔ)在存儲(chǔ)器裝置中的數(shù)據(jù)可能會(huì)因?yàn)殡娫粗袛嗷蛱囟ù鎯?chǔ)器位置變成有缺陷而成為已毀損。如果碰到存儲(chǔ)器區(qū)塊缺陷,則將數(shù)據(jù)重新定位到不同的區(qū)塊且將缺陷區(qū)塊丟棄。如果錯(cuò)誤不會(huì)擴(kuò)大,則可通過(guò)和數(shù)據(jù)一起存儲(chǔ)的錯(cuò)誤校正碼(ECC)在執(zhí)行中進(jìn)行校正。然而,還是會(huì)有ECC無(wú)法校正已毀損數(shù)據(jù)的時(shí)候。例如,當(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ù)會(huì)被維持在具有定期控制寫入的RAM中,以更新存儲(chǔ)在非易失性元區(qū)塊中的同等信息。以這種方式,不必經(jīng)常存取,即可將控制數(shù)據(jù)存儲(chǔ)在非易失性但較慢的快閃存儲(chǔ)器中。如圖20所示GAT、CBI、MAP、和MAPA的控制數(shù)據(jù)結(jié)構(gòu)的層級(jí)會(huì)被維持在快閃存儲(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ù)如果被維持在復(fù)制項(xiàng)中,則保證額外等級(jí)的可靠性。復(fù)制的執(zhí)行方式對(duì)于采用兩次編程(two-pass)編程技術(shù)以連續(xù)編程相同組存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,第二次編程中的任何編程錯(cuò)誤都無(wú)法毀損第一次編程建立的數(shù)據(jù)。復(fù)制還有助于檢測(cè)寫入中止、檢測(cè)誤測(cè)(即,兩個(gè)副本有良好的ECC但數(shù)據(jù)不同),且可增加額外等級(jí)的可靠性。若干數(shù)據(jù)復(fù)制的技術(shù)均已考慮。
在一實(shí)施例中,在早先編程過(guò)程中編程給定數(shù)據(jù)的兩個(gè)副本后,后續(xù)的編程過(guò)程可避免編程用于存儲(chǔ)所述兩個(gè)副本中至少一個(gè)的存儲(chǔ)器單元。以這種方式,在后續(xù)編程過(guò)程在完成之前中止和毀損早先編程的數(shù)據(jù)時(shí),所述兩個(gè)副本中至少一個(gè)也不會(huì)受到影響。
在另一實(shí)施例中,某一給定數(shù)據(jù)的兩個(gè)副本會(huì)被存儲(chǔ)在兩個(gè)不同的區(qū)塊中,而且所述兩個(gè)副本中至多僅有其中一個(gè)的存儲(chǔ)器單元會(huì)在后面的編程過(guò)程中被編程。
在另一實(shí)施例中,在一編程過(guò)程中存儲(chǔ)某一給定數(shù)據(jù)的兩個(gè)副本之后,便不再對(duì)用于存儲(chǔ)所述兩個(gè)副本的存儲(chǔ)器單元組實(shí)施任何進(jìn)一步的編程。在所述存儲(chǔ)器單元組的最終編程過(guò)程中來(lái)編程所述兩個(gè)副本便可達(dá)成此目的。
在另一實(shí)施例中,可在二進(jìn)制編程模式中將某一給定數(shù)據(jù)的所述兩個(gè)副本編程到多狀態(tài)的存儲(chǔ)器中,使得不會(huì)對(duì)所述已編程的存儲(chǔ)器單元進(jìn)行任何進(jìn)一步的編程。
在另一實(shí)施例中,對(duì)于采用兩次編程技術(shù)以連續(xù)編程相同組存儲(chǔ)器單元的多位的多狀態(tài)存儲(chǔ)器系統(tǒng)而言,會(huì)采用容錯(cuò)碼以編碼多個(gè)存儲(chǔ)器狀態(tài),使早先編程過(guò)程所建立的數(shù)據(jù)不會(huì)受后續(xù)編程過(guò)程中錯(cuò)誤的影響。
在各存儲(chǔ)器單元可存儲(chǔ)一位以上數(shù)據(jù)的多狀態(tài)存儲(chǔ)器中會(huì)引發(fā)數(shù)據(jù)復(fù)制的復(fù)雜性。例如,一個(gè)4狀態(tài)存儲(chǔ)器可以兩個(gè)位來(lái)表示。一個(gè)現(xiàn)有技術(shù)是使用2次編程來(lái)編程此種存儲(chǔ)器。第一位(下頁(yè)位)可由第一次編程進(jìn)行編程。其后,可在第二次編程中編程相同單元以代表所要的第二位(上頁(yè)位)。為了不要改變第二次編程中第一位的值,會(huì)使第一位的存儲(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ǔ)器單元之前,會(huì)先將其擦除到其「U」或「未寫入」?fàn)顟B(tài)。在存儲(chǔ)器單元逐漸被編程時(shí),會(huì)累進(jìn)達(dá)到存儲(chǔ)器狀態(tài)「X」、「Y」和「Z」。
圖41B說(shuō)明現(xiàn)有使用格雷碼(Gray code)的2次編程方案。此四個(gè)狀態(tài)可以兩個(gè)位表示,即,下頁(yè)位和上頁(yè)位,如(上頁(yè)位,下頁(yè)位)。對(duì)于要并行編程的單元的頁(yè),實(shí)際上有兩個(gè)邏輯頁(yè)邏輯下頁(yè)和邏輯上頁(yè)。第一編程過(guò)程只會(huì)編程邏輯下頁(yè)。通過(guò)合適的編碼,不用重設(shè)邏輯下頁(yè),單元相同頁(yè)上的后續(xù)第二編程過(guò)程會(huì)編程邏輯上頁(yè)。一般使用的程序代碼是格雷碼,其中只有一個(gè)位會(huì)在轉(zhuǎn)換到相鄰的狀態(tài)時(shí)改變。因此,此程序代碼具有如下優(yōu)點(diǎn)對(duì)于錯(cuò)誤校正的要求較少,因只涉及一個(gè)位。
一般使用格雷碼的方案是假設(shè)「1」代表「未編程」條件。因此,已擦除的存儲(chǔ)器狀態(tài)「U」可表示為(上頁(yè)位,下頁(yè)位)=(1,1)。在編程邏輯下頁(yè)的第一次編程中,任何存儲(chǔ)數(shù)據(jù)「0」的單元將因此具有其從(x,1)到(x,0)的邏輯狀態(tài)轉(zhuǎn)換,其中「x」代表上位的「任意(don′t care)」值。然而,由于上位尚未被編程,因此為了一致,可將「x」標(biāo)示為「1」。(1,0)邏輯狀態(tài)可通過(guò)編程單元為存儲(chǔ)器狀態(tài)「X」來(lái)表示。也就是說(shuō),在第二次編程之前,下位值「0」可以表示為存儲(chǔ)器狀態(tài)「X」。
執(zhí)行第二次編程可存儲(chǔ)邏輯上頁(yè)的位。只有這些需要上頁(yè)位值「0」的單元才會(huì)被編程。在第一次編程后,頁(yè)中的單元在邏輯狀態(tài)(1,1)或(1,0)。為了保存第二次編程中下頁(yè)的值,必須區(qū)分下位值「0」或「1」。對(duì)于從(1,0)到(0,0)的轉(zhuǎn)換,會(huì)將討論中的存儲(chǔ)器單元編程為存儲(chǔ)器狀態(tài)「Y」。對(duì)于從(1,1)到(0,1)的轉(zhuǎn)換,會(huì)將討論中的存儲(chǔ)器單元編程為存儲(chǔ)器狀態(tài)「Z」。以這種方式,在讀取期間,通過(guò)確定在單元中編程的存儲(chǔ)器狀態(tài),即可解碼下頁(yè)位和上頁(yè)位。
然而,格雷碼的2次編程方案在第二次編程錯(cuò)誤時(shí)會(huì)成為問(wèn)題。例如,在下位為「1」時(shí)將上頁(yè)位編程為「0」,將造成(1,1)轉(zhuǎn)換成(0,1)。這需要將存儲(chǔ)器單元累進(jìn)從「U」編程通過(guò)「X」和「Y」而到「Z」。如果在完成編程前發(fā)生電源中斷,則存儲(chǔ)器單元將停止于轉(zhuǎn)換存儲(chǔ)器狀態(tài)之一,如「X」。在讀取存儲(chǔ)器單元時(shí),會(huì)將「X」解碼為邏輯狀態(tài)(1,0)。這對(duì)上位和下位造成不正確的結(jié)果,因其應(yīng)為(0,1)。類似地,如果編程在達(dá)到「Y」時(shí)受到中斷,其將對(duì)應(yīng)于(0,0)。雖然上位現(xiàn)在是正確的,但下位還是錯(cuò)的。
因此,可以看出上頁(yè)編程的問(wèn)題可毀損已經(jīng)在下頁(yè)的數(shù)據(jù)。尤其當(dāng)?shù)诙尉幊躺婕霸谥虚g存儲(chǔ)器狀態(tài)上通過(guò)時(shí),程序中止會(huì)使編程停止于所述存儲(chǔ)器狀態(tài),導(dǎo)致解碼不正確的下頁(yè)位。
圖42說(shuō)明通過(guò)存儲(chǔ)復(fù)制的各扇區(qū)以防衛(wèi)關(guān)鍵數(shù)據(jù)的方式。例如,可將扇區(qū)A、B、C、和D存儲(chǔ)在復(fù)制副本中。如在一個(gè)扇區(qū)副本中有數(shù)據(jù)毀損,則可以讀取另一個(gè)來(lái)取代。
圖43說(shuō)明其中通常將復(fù)制扇區(qū)存儲(chǔ)在多狀態(tài)存儲(chǔ)器的非穩(wěn)固性。如上述,在實(shí)例的4狀態(tài)存儲(chǔ)器中,多狀態(tài)頁(yè)實(shí)際上包括分別在兩次編程中進(jìn)行編程的邏輯下頁(yè)和邏輯上頁(yè)。在所示的實(shí)例中,頁(yè)為四個(gè)扇區(qū)寬。因此,扇區(qū)A和其復(fù)制會(huì)同時(shí)被編程在邏輯下頁(yè)中,類似地,對(duì)于扇區(qū)B和其復(fù)制也是如此。然后在邏輯上頁(yè)中后續(xù)的編程的第二次編程中,會(huì)同時(shí)編程扇區(qū)C,C,且對(duì)于扇區(qū)D,D也是如此。如果在編程扇區(qū)C、C的中間發(fā)生程序中止,則會(huì)毀損下頁(yè)中的扇區(qū)A,A。除非,在上頁(yè)編程之前先讀取并緩沖下頁(yè)扇區(qū),否則一旦毀損將無(wú)法復(fù)原。因此,同時(shí)存儲(chǔ)兩個(gè)關(guān)鍵數(shù)據(jù)的副本,如扇區(qū)A,A,無(wú)法防止其為其上頁(yè)中后續(xù)扇區(qū)C、C的有問(wèn)題的存儲(chǔ)所毀損。
圖44A說(shuō)明將關(guān)鍵數(shù)據(jù)錯(cuò)開的復(fù)制副本存儲(chǔ)到多狀態(tài)存儲(chǔ)器的一實(shí)施例?;旧希瑫?huì)以和圖43的相同方式存儲(chǔ)下頁(yè),即,扇區(qū)A,A和扇區(qū)B,B。然而,在上頁(yè)編程中,扇區(qū)C和D會(huì)和其復(fù)制交錯(cuò)成C、D、C、D。如果支持局部頁(yè)編程,則可同時(shí)編程兩個(gè)扇區(qū)C的副本,且對(duì)于兩個(gè)扇區(qū)D的副本也是如此。如果兩個(gè)扇區(qū)C的程序遭到中止,則只會(huì)在扇區(qū)A的一個(gè)副本和扇區(qū)B的一個(gè)副本上毀損下頁(yè)。另一個(gè)副本將維持不受影響。因此,如果存儲(chǔ)在第一次編程中的關(guān)鍵數(shù)據(jù)有兩個(gè)副本,則其將不會(huì)同時(shí)經(jīng)受后續(xù)的第二次編程。
圖44B說(shuō)明只將關(guān)鍵數(shù)據(jù)的復(fù)制副本存儲(chǔ)到多狀態(tài)存儲(chǔ)器的邏輯上頁(yè)的另一實(shí)施例。這時(shí),未使用下頁(yè)的數(shù)據(jù)。關(guān)鍵數(shù)據(jù)和其復(fù)制,如扇區(qū)A、A和扇區(qū)B、B只會(huì)被存儲(chǔ)到邏輯上頁(yè)。以這種方式,如果有程序中止,則可將關(guān)鍵數(shù)據(jù)再寫入另一個(gè)邏輯上頁(yè),而下頁(yè)數(shù)據(jù)的任何毀損將無(wú)關(guān)緊要。此辦法基本上使用各多狀態(tài)頁(yè)一半的存儲(chǔ)容量。
圖44C說(shuō)明以多狀態(tài)存儲(chǔ)器的二進(jìn)制模式存儲(chǔ)關(guān)鍵數(shù)據(jù)的復(fù)制副本的另一實(shí)施例。這時(shí),會(huì)依二進(jìn)制模式編程各存儲(chǔ)器單元,其中僅將其臨界范圍分成兩個(gè)區(qū)域。因此,其中只有一次編程,且在發(fā)生程序中止時(shí)可在不同位置中重新啟動(dòng)編程。此辦法也使用各多狀態(tài)頁(yè)一半的存儲(chǔ)容量。依二進(jìn)制模式操作多狀態(tài)存儲(chǔ)器是在美國(guó)專利第6,456,528B1號(hào)中說(shuō)明,其整個(gè)揭示內(nèi)容在此以參考的方式并入本文中。
圖45說(shuō)明同時(shí)將關(guān)鍵數(shù)據(jù)的復(fù)制副本存儲(chǔ)到兩個(gè)不同元區(qū)塊的另一實(shí)施例。如果區(qū)塊之一變成不可用,則可從另一個(gè)區(qū)塊讀取數(shù)據(jù)。例如,關(guān)鍵數(shù)據(jù)被包含在扇區(qū)A、B、C、D和E、F、G、H和I、J、K、L內(nèi)。各扇區(qū)會(huì)被存儲(chǔ)在復(fù)制中。這兩個(gè)副本將被同時(shí)寫入兩個(gè)不同的區(qū)塊,區(qū)塊0和區(qū)塊1。如果將一個(gè)副本寫入邏輯下頁(yè),則會(huì)將另一個(gè)副本寫入邏輯上頁(yè)。以這種方式,永遠(yuǎn)會(huì)有編程到邏輯上頁(yè)的副本。如果發(fā)生程序中止,則可將其重新編程到另一個(gè)邏輯上頁(yè)。同時(shí),如果下頁(yè)已經(jīng)毀損,則在其它區(qū)塊中永遠(yuǎn)會(huì)有另一個(gè)上頁(yè)副本。
圖46B說(shuō)明使用容錯(cuò)碼同時(shí)存儲(chǔ)關(guān)鍵數(shù)據(jù)的復(fù)制副本的另一實(shí)施例。圖46A和圖41A同在顯示4狀態(tài)存儲(chǔ)器陣列的臨界電壓分布并顯示為圖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è)編程僅涉及編程為下一個(gè)相鄰的存儲(chǔ)器狀態(tài),因此程序中止無(wú)法改變下頁(yè)位。
串行寫入關(guān)鍵數(shù)據(jù)的復(fù)制副本優(yōu)選如上述同時(shí)寫入。另一個(gè)避免同時(shí)毀損兩個(gè)副本的方式是循序?qū)懭敫北尽4朔椒ㄝ^慢,但副本本身代表其在控制器檢查兩個(gè)副本時(shí)編程是否成功。
圖47是說(shuō)明兩個(gè)數(shù)據(jù)副本的可能狀態(tài)和數(shù)據(jù)有效性的表格。
如果第一和第二副本沒(méi)有ECC錯(cuò)誤,則可將數(shù)據(jù)的編程看作完全成功。有效數(shù)據(jù)可從任一個(gè)副本取得。
如果第一副本沒(méi)有ECC錯(cuò)誤,但第二副本有ECC錯(cuò)誤,便表示編程在第二副本編程的中間受到中斷。第一副本含有有效數(shù)據(jù)。即使錯(cuò)誤為可校正,第二副本數(shù)據(jù)已不可靠。
如果第一副本沒(méi)有ECC錯(cuò)誤且第二副本已經(jīng)清空(擦除),便表示編程在第一副本編程停止后但在第二副本開始前受到中斷。第一副本含有有效數(shù)據(jù)。
如果第一副本有ECC錯(cuò)誤且第二副本已經(jīng)清空(擦除),便表示編程在第一副本編程的中間受到中斷。即使錯(cuò)誤為可校正,第一副本仍含有無(wú)效數(shù)據(jù)。
為了讀取維持在復(fù)制中的數(shù)據(jù),以下技術(shù)為優(yōu)選,因其利用復(fù)制副本的存在。讀取和比較兩個(gè)副本。此例中,圖47所示兩個(gè)副本的狀態(tài)可用來(lái)確保沒(méi)有任何錯(cuò)誤誤測(cè)。
在另一實(shí)施例中,控制器只讀取一個(gè)副本,為了顧及速度和簡(jiǎn)單性,副本讀取優(yōu)選在兩個(gè)副本之間輪替。例如,在控制器讀取控制數(shù)據(jù)時(shí),其可讀取如副本1,下一個(gè)控制讀取(任何控制讀取)則應(yīng)來(lái)自副本2,然后再是副本1等。以這種方式,即可讀取和定期檢查兩個(gè)副本的完整性(ECC檢查)。其可減少以下風(fēng)險(xiǎn)無(wú)法在因變質(zhì)的數(shù)據(jù)保留所導(dǎo)致的時(shí)間錯(cuò)誤中進(jìn)行檢測(cè)。例如,如果通常只讀取副本1,則副本2會(huì)逐漸變質(zhì)到其中錯(cuò)誤無(wú)法為ECC挽救的程度,因而無(wú)法再使用第二副本。
先占式數(shù)據(jù)重新定位如結(jié)合圖20所述,區(qū)塊管理系統(tǒng)在其操作期間可在快閃存儲(chǔ)器中維持一組控制數(shù)據(jù)。此組控制數(shù)據(jù)會(huì)被存儲(chǔ)在和主機(jī)數(shù)據(jù)相同的元區(qū)塊中。因此,控制數(shù)據(jù)本身會(huì)受到區(qū)塊管理,因而會(huì)受到更新的影響,且因此也受到垃圾收集操作的影響。
其中還說(shuō)明控制數(shù)據(jù)的階層,其中較低層級(jí)中的控制數(shù)據(jù)更新比較高層級(jí)中的頻繁。例如,假設(shè)每一控制區(qū)塊有N個(gè)要寫入的控制扇區(qū),則通常會(huì)發(fā)生以下控制更新和控制區(qū)塊重新定位的序列。再次參考圖20,每N個(gè)CBI更新可填滿CBI區(qū)塊并觸發(fā)CBI重新定位(再寫入)和MAP更新。如果混亂區(qū)塊遭受關(guān)閉,則其也會(huì)觸發(fā)GAT更新。每一GAT更新可觸發(fā)MAP更新。每N個(gè)GAT更新可填滿區(qū)塊和觸發(fā)GAT區(qū)塊重新定位。此外,當(dāng)MAP區(qū)塊變滿時(shí),也會(huì)觸發(fā)MAP區(qū)塊重新定位和MAPA區(qū)塊(如果存在的話,否則BOOT區(qū)塊會(huì)直接指向MAP)更新。此外,當(dāng)MAPA區(qū)塊變滿時(shí),也會(huì)觸發(fā)MAPA區(qū)塊重新定位、BOOT區(qū)塊更新和MAP更新。此外,在BOOT區(qū)塊變滿時(shí),將會(huì)觸發(fā)另一個(gè)BOOT區(qū)塊的作用中BOOT區(qū)塊重新定位。
由于階層的形成為頂部的BOOT控制數(shù)據(jù),接著是MAPA、MAP、然后GAT,因此,在每N3個(gè)GAT更新中,將有「串接控制更新」,其中所有的GAT、MAP、MAPA和BOOT區(qū)塊都會(huì)被重新定位。此例中,在因主機(jī)寫入導(dǎo)致的混亂或循序更新區(qū)塊關(guān)閉造成GAT更新時(shí),也會(huì)有垃圾收集操作(即,重新定位或再寫入)。在混亂更新區(qū)塊垃圾收集的情況中,會(huì)更新CBI,而這也會(huì)觸發(fā)CBI區(qū)塊重新定位。因此,在此極端的情況中,必須同時(shí)收集大量元區(qū)塊的垃圾。
從圖中可見(jiàn),階層的各控制數(shù)據(jù)區(qū)塊在取得填充和接受重新定位上有其自己的周期性。如果各控制數(shù)據(jù)區(qū)塊進(jìn)行正常,則將有發(fā)生以下情形的時(shí)候大量區(qū)塊的階段進(jìn)行整頓,因而觸發(fā)大量同時(shí)涉及所有這些區(qū)塊的重新定位垃圾收集。許多控制區(qū)塊的重新定位將會(huì)花費(fèi)很長(zhǎng)的時(shí)間,因此應(yīng)加以避免,因?yàn)椴糠种鳈C(jī)不容許因大量控制操作所導(dǎo)致的長(zhǎng)時(shí)間延遲。
根據(jù)本發(fā)明的另一方面,在具有區(qū)塊管理系統(tǒng)的非易失性存儲(chǔ)器中,可實(shí)施存儲(chǔ)器區(qū)塊的「控制垃圾收集」或先占式重新定位,以避免發(fā)生大量的更新區(qū)塊均恰巧同時(shí)需要進(jìn)行重新定位的情形。例如,在更新用于控制區(qū)塊管理系統(tǒng)操作的控制數(shù)據(jù)時(shí)會(huì)發(fā)生此情況??刂茢?shù)據(jù)類型的層級(jí)可和不同程度的更新次數(shù)共存,導(dǎo)致其關(guān)聯(lián)的更新區(qū)塊需要不同速率的垃圾收集或重新定位。會(huì)有一個(gè)以上控制數(shù)據(jù)類型的垃圾收集操作同時(shí)發(fā)生的特定次數(shù)。在極端的情況中,所有控制數(shù)據(jù)類型的更新區(qū)塊的重新定位階段會(huì)進(jìn)行整頓,導(dǎo)致所有的更新區(qū)塊都需要同時(shí)重新定位。
本發(fā)明可避免這種不想要的情況,其中當(dāng)前的存儲(chǔ)器操作無(wú)論何時(shí)均可容納自發(fā)性的垃圾收集操作,更新區(qū)塊的先占式重新定位可預(yù)先在完全填充區(qū)塊前發(fā)生。尤其,會(huì)將優(yōu)先權(quán)提供給具有最慢速率的最高階層數(shù)據(jù)類型的區(qū)塊。以這種方式,在重新定位最慢速率區(qū)塊后,將不再需要另一個(gè)相對(duì)較長(zhǎng)時(shí)間的垃圾收集。還有,階層中較高的較慢速率區(qū)塊沒(méi)有太多可觸發(fā)的重新定位的串接??蓪⒈景l(fā)明方法看作為了避免討論中的各種區(qū)塊的階段對(duì)準(zhǔn),而將某種抖動(dòng)引入事物的整體混合。因此,只要有機(jī)會(huì),即可以先占式的方式重新定位略微不被完全填充的邊限的緩慢填充區(qū)塊。
在具有階層中較低的控制數(shù)據(jù)因串接效應(yīng)而改變快于階層中較高的控制數(shù)據(jù)的控制數(shù)據(jù)層次的系統(tǒng)中,會(huì)將優(yōu)先權(quán)提供給階層中較高的控制數(shù)據(jù)的區(qū)塊。一個(gè)執(zhí)行自發(fā)性先占式重新定位的機(jī)會(huì)的實(shí)例發(fā)生在以下情況當(dāng)主機(jī)寫入本身無(wú)法觸發(fā)重新定位,因此可利用其等待時(shí)間中的任何剩余時(shí)間來(lái)進(jìn)行先占式重新定位操作。一般而言,務(wù)必重新定位的區(qū)塊前的邊限是在區(qū)塊全滿前的預(yù)定數(shù)量的未寫入存儲(chǔ)器單位。所考慮的是足以加速在完全填充的區(qū)塊前但又不會(huì)過(guò)早的重新定位的邊限,以免資源浪費(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í)。
步驟1208存儲(chǔ)復(fù)數(shù)個(gè)區(qū)塊中所述不同類型數(shù)據(jù)的更新,使得各區(qū)塊實(shí)質(zhì)上存儲(chǔ)相同類型的數(shù)據(jù)。
步驟1210響應(yīng)于具有少于預(yù)定數(shù)量的清空存儲(chǔ)器單位和具有所述復(fù)數(shù)個(gè)區(qū)塊中最高階層數(shù)據(jù)類型的區(qū)塊,將所述區(qū)塊的數(shù)據(jù)的當(dāng)前更新重新定位到另一個(gè)區(qū)塊。若未受到中斷,到步驟1208。
實(shí)施圖20所示控制數(shù)據(jù)的先占式重新定位的實(shí)例算法如下如果((沒(méi)有任何因用戶數(shù)據(jù)而導(dǎo)致的垃圾收集)或(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否則如果(上一個(gè)更新或最大的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)行先占式重新定位或控制的垃圾收集。
雖然已經(jīng)針對(duì)特定實(shí)施例說(shuō)明本發(fā)明的各種方面,但應(yīng)明白,本發(fā)明有權(quán)受到附加申請(qǐng)專利范圍的完整范疇的保護(hù)。
權(quán)利要求
1.一種在一組織成區(qū)塊的非易失性存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)的方法,其中每一區(qū)塊已劃分成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)一數(shù)據(jù)邏輯單位,所述方法包含在一第一區(qū)塊中存儲(chǔ)一連串?dāng)?shù)據(jù)邏輯單位;響應(yīng)于存儲(chǔ)一些所述邏輯單位后所述第一區(qū)塊處的存儲(chǔ)失敗,在用作所述第一區(qū)塊的一中斷區(qū)塊的一第二區(qū)塊中存儲(chǔ)后續(xù)的邏輯單位;響應(yīng)于一預(yù)定義事件,將存儲(chǔ)在所述第一區(qū)塊中的所述邏輯單位傳送到一第三區(qū)塊;和丟棄所述第一區(qū)塊。
2.根據(jù)權(quán)利要求1所述的方法,其中所述第三區(qū)塊和所述第二區(qū)塊相同。
3.根據(jù)權(quán)利要求1所述的方法,其中所述第三區(qū)塊和所述第二區(qū)塊不同。
4.根據(jù)權(quán)利要求1所述的方法,其中從所述第一區(qū)塊將所述一些邏輯單位傳送到所述第三區(qū)塊僅涉及其上的所述邏輯單位的當(dāng)前版本。
5.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
6.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器是快閃EEPROM。
7.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器是NROM。
8.根據(jù)權(quán)利要求1所述的方法,其中所述非易失性存儲(chǔ)器是在一存儲(chǔ)器卡中。
9.根據(jù)權(quán)利要求1到8中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位數(shù)據(jù)的存儲(chǔ)器單元。
10.根據(jù)權(quán)利要求1到8中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位以上數(shù)據(jù)的存儲(chǔ)器單元。
11.一種非易失性存儲(chǔ)器,其包含一組織成區(qū)塊的存儲(chǔ)器,每一區(qū)塊已劃分成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)一數(shù)據(jù)邏輯單位;一控制器,其用于控制所述區(qū)塊的操作;所述控制器用于在一第一區(qū)塊中存儲(chǔ)一連串的邏輯單位;響應(yīng)于在所述第一區(qū)塊中存儲(chǔ)一些邏輯單位后在所述第一區(qū)塊處的存儲(chǔ)失敗,所述控制器可在作為所述第一區(qū)塊的一中斷區(qū)塊的一第二區(qū)塊中存儲(chǔ)后續(xù)的邏輯單位;響應(yīng)于一預(yù)定義事件,所述控制器將存儲(chǔ)在所述第一區(qū)塊中的所述邏輯單位傳送到一第三區(qū)塊。
12.根據(jù)權(quán)利要求11的非易失性存儲(chǔ)器,其中所述第三區(qū)塊和所述第二區(qū)塊相同。
13.根據(jù)權(quán)利要求11的非易失性存儲(chǔ)器,其中所述第三區(qū)塊和所述第二區(qū)塊不同。
14.根據(jù)權(quán)利要求11的非易失性存儲(chǔ)器,其中僅邏輯單位的當(dāng)前版本由所述控制器從所述第一區(qū)塊傳送到所述第三區(qū)塊。
15.一種非易失性存儲(chǔ)器,其包含一組織成區(qū)塊的存儲(chǔ)器,每一區(qū)塊已劃分成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)一數(shù)據(jù)邏輯單位,一存儲(chǔ)數(shù)據(jù)的方法;用于在一第一區(qū)塊中存儲(chǔ)一連串邏輯單位的構(gòu)件;響應(yīng)于在所述第一區(qū)塊中存儲(chǔ)一些所述邏輯單位后在第一區(qū)塊處的存儲(chǔ)失敗,在用作所述第一區(qū)塊的一中斷區(qū)塊的一第二區(qū)塊中存儲(chǔ)后續(xù)邏輯單位的構(gòu)件;響應(yīng)于一預(yù)定義事件,將存儲(chǔ)在所述第一區(qū)塊中的所述邏輯單位傳送到一第三區(qū)塊的構(gòu)件;和用于棄置所述第一區(qū)塊的構(gòu)件。
16.根據(jù)權(quán)利要求15所述的非易失性存儲(chǔ)器,其中所述第三區(qū)塊和所述第二區(qū)塊相同。
17.根據(jù)權(quán)利要求15所述的非易失性存儲(chǔ)器,其中所述第三區(qū)塊和所述第二區(qū)塊不同。
18.根據(jù)權(quán)利要求15所述的非易失性存儲(chǔ)器,其中僅邏輯單位的當(dāng)前版本由所述控制器從所述第一區(qū)塊傳送到所述第三區(qū)塊。
19.根據(jù)權(quán)利要求11所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
20.根據(jù)權(quán)利要求11所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器是快閃EEPROM。
21.根據(jù)權(quán)利要求11所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器是NROM。
22.根據(jù)權(quán)利要求11所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器是在一存儲(chǔ)器卡中。
23.根據(jù)權(quán)利要求11到22中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位數(shù)據(jù)的存儲(chǔ)器單元。
24.根據(jù)權(quán)利要求11到22中任一權(quán)利要求所述的非易失性存儲(chǔ)器,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位以上數(shù)據(jù)的存儲(chǔ)器單元。
25.一種在一組織成區(qū)塊的非易失性存儲(chǔ)器中用于存儲(chǔ)和更新數(shù)據(jù)的方法,其中每一區(qū)塊已劃分成可一起擦除的存儲(chǔ)器單位,每一存儲(chǔ)器單位用于存儲(chǔ)一數(shù)據(jù)邏輯單位,所述方法包含將數(shù)據(jù)組織成復(fù)數(shù)個(gè)邏輯群組,每一邏輯群組是一邏輯單位群組;接收封裝在邏輯單位中的主機(jī)數(shù)據(jù);通過(guò)根據(jù)一第一次序在一第一區(qū)塊中存儲(chǔ)所述群組的邏輯單位的一第一版本,建立所述邏輯群組的一原始區(qū)塊;和通過(guò)根據(jù)一第二次序在一第二區(qū)塊中存儲(chǔ)包括所述群組的邏輯單位的后續(xù)版本,建立所述邏輯群組的一更新區(qū)塊;響應(yīng)于一用于合并的預(yù)定義事件,通過(guò)類似于所述第一次序在一第三區(qū)塊中存儲(chǔ)從所述原始和更新區(qū)塊搜集的所述群組的所述邏輯單位的當(dāng)前版本,建立所述邏輯群組的一合并區(qū)塊;響應(yīng)于所述合并區(qū)塊處的一存儲(chǔ)失敗,通過(guò)類似于所述第一次序在一第四區(qū)塊中存儲(chǔ)從所述合并區(qū)塊丟失的所述群組的那些邏輯單位,提供一中斷合并區(qū)塊;和用所述第二區(qū)塊取代所述第一區(qū)塊,并用所述第三區(qū)塊取代所述第二區(qū)塊。
26.根據(jù)權(quán)利要求25所述的方法,其進(jìn)一步包含響應(yīng)于所述中斷合并區(qū)塊的完全合并的一預(yù)定義事件,類似于所述第一次序在所述中斷合并區(qū)塊中存儲(chǔ)從中丟失的所述群組的那些邏輯單位;和用所述完全合并的中斷合并區(qū)塊取代所述群組的所述原始區(qū)塊。
27.根據(jù)權(quán)利要求25所述的方法,其中每一邏輯單位是一主機(jī)數(shù)據(jù)的扇區(qū)。
28.根據(jù)權(quán)利要求25所述的方法,其中每一邏輯單位是可存儲(chǔ)在所述存儲(chǔ)器的一存儲(chǔ)器頁(yè)中的數(shù)據(jù)的一邏輯頁(yè)。
29.根據(jù)權(quán)利要求28所述的方法,其中每一邏輯頁(yè)包含一個(gè)或一個(gè)以上數(shù)據(jù)扇區(qū)。
30.根據(jù)權(quán)利要求25所述的方法,其中所述非易失性存儲(chǔ)器具有浮柵存儲(chǔ)器單元。
31.根據(jù)權(quán)利要求25所述的方法,其中所述非易失性存儲(chǔ)器是快閃EEPROM。
32.根據(jù)權(quán)利要求25所述的方法,其中所述非易失性存儲(chǔ)器是NROM。
33.根據(jù)權(quán)利要求25所述的方法,其中所述非易失性存儲(chǔ)器是一存儲(chǔ)器卡。
34.根據(jù)權(quán)利要求25到33中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位數(shù)據(jù)的存儲(chǔ)器單元。
35.根據(jù)權(quán)利要求23到33中任一權(quán)利要求所述的方法,其中所述非易失性存儲(chǔ)器具有各自存儲(chǔ)一位以上數(shù)據(jù)的存儲(chǔ)器單元。
全文摘要
在具有區(qū)塊管理系統(tǒng)的存儲(chǔ)器中,可通過(guò)繼續(xù)進(jìn)行中斷區(qū)塊(breakout block)中的編程操作來(lái)處置一時(shí)間緊要的存儲(chǔ)器操作期間一區(qū)塊中的編程失敗。稍后,在較不緊要的時(shí)間,可將中斷前記錄在失敗區(qū)塊中的數(shù)據(jù)傳送到可能也是中斷區(qū)塊的其它區(qū)塊。接著就可丟棄失敗的區(qū)塊。以這種方式,在編程中遇到缺陷區(qū)塊時(shí),可在不損失數(shù)據(jù)且不因必須當(dāng)場(chǎng)傳送缺陷區(qū)塊中存儲(chǔ)的數(shù)據(jù)而超過(guò)指定的時(shí)間限制的情況下對(duì)缺陷區(qū)塊加以處置。這種錯(cuò)誤處置對(duì)于垃圾收集操作尤其重要,因此在緊要時(shí)間期間不必在全新區(qū)塊上重復(fù)整個(gè)操作。隨后,在適當(dāng)?shù)臅r(shí)間,可通過(guò)重新定位到其它區(qū)塊來(lái)挽救缺陷區(qū)塊的數(shù)據(jù)。
文檔編號(hào)G11C11/56GK1922580SQ200480042136
公開日2007年2月28日 申請(qǐng)日期2004年12月22日 優(yōu)先權(quán)日2003年12月30日
發(fā)明者瑟吉·阿納托利耶維奇·戈羅別茨 申請(qǐng)人:桑迪士克股份有限公司