專利名稱:在非易失性存儲(chǔ)器中為從電源故障恢復(fù)而繞回序列號(hào)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在非易失性存儲(chǔ)器中為從電源故障恢復(fù)而繞回序列號(hào)。
背景技術(shù):
一些類型的非易失性存儲(chǔ)器(如閃存)不易修改各個(gè)存儲(chǔ)單元中的 已有數(shù)據(jù),因?yàn)樗鼈冎荒苷麎K地擦除存儲(chǔ)器。當(dāng)數(shù)據(jù)改變不頻繁時(shí), 通過將新的數(shù)據(jù)值并入到之前擦除的新塊而將整個(gè)塊復(fù)制到該新塊, 然后擦除舊塊,使得舊塊隨后可用于用作新塊,便可以充分地處理已 有數(shù)據(jù)的內(nèi)容改變。當(dāng)數(shù)據(jù)改變較頻繁時(shí), 一種較佳的技術(shù)是將新的 數(shù)據(jù)值并入到相同塊中之前為空的新頁(yè)而將發(fā)生改變的頁(yè)復(fù)制到該 新頁(yè)。這減少了在時(shí)間和存儲(chǔ)器的有效壽命方面成本高的擦除操作的 次數(shù),但是這更加復(fù)雜,因?yàn)楸仨殔^(qū)分新的當(dāng)前頁(yè)和仍然駐留在存儲(chǔ) 器中的舊的過期頁(yè)。對(duì)相同數(shù)據(jù)所做的多種改變可產(chǎn)生包含該數(shù)據(jù)的 不同版本的幾個(gè)頁(yè),其中只有一個(gè)頁(yè)是當(dāng)前的正確頁(yè)??梢允褂酶鞣N 技術(shù)來(lái)跟蹤哪些頁(yè)是當(dāng)前頁(yè)、哪些頁(yè)不是,但此信息一般保存在易失 性存儲(chǔ)設(shè)備中。電源故障事件會(huì)擦去此易失性信息,從而在從電源故 障恢復(fù)時(shí)需要其它技術(shù)來(lái)重建哪些頁(yè)是當(dāng)前的正確頁(yè)。 一種方法是將 遞增的唯一序列號(hào)分配^爭(zhēng)個(gè)新寫入的頁(yè),并將該序列號(hào)置于該頁(yè)的
元數(shù)據(jù)中,這種方法允許在電源故障恢復(fù)時(shí)識(shí)別該頁(yè)的最近版本。例 如,在與相同邏輯地址相關(guān)聯(lián)的所有頁(yè)中(根據(jù)每個(gè)頁(yè)的元數(shù)據(jù)),具 有最高序列號(hào)的頁(yè)就是該頁(yè)的最近版本,并且因而就是正確版本。但 是,利用大至足以在存儲(chǔ)器的整個(gè)壽命中都是唯一的序列號(hào)需要為序 列號(hào)預(yù)留多個(gè)位。頁(yè)元數(shù)據(jù)空間是很寶貴的,這種方法成本很高,因?yàn)樗么罅康脑獢?shù)據(jù)空間。
發(fā)明內(nèi)容
本發(fā)明涉及一種用于控制計(jì)算機(jī)存儲(chǔ)器的裝置,包括 非易失性存儲(chǔ)器;以及
存儲(chǔ)器控制器,用于控制所述存儲(chǔ)器的內(nèi)容的讀、寫和擦除,并 且如果將數(shù)據(jù)寫入到塊的每個(gè)子單元中,則將序列號(hào)值寫入到所述子 單元的元數(shù)據(jù)中;
其中所述存儲(chǔ)器控制器用于在每次寫入新的子單元時(shí)將所述序列號(hào) 值遞增,并且在所述序列號(hào)達(dá)到最大值之后,將所述序列號(hào)繞回到最 小值。
本發(fā)明涉及一種用于控制計(jì)算機(jī)存儲(chǔ)器的方法,包括 每次要將數(shù)據(jù)寫入到非易失性存儲(chǔ)器的新頁(yè)中時(shí),將計(jì)數(shù)器遞增
以生成序列號(hào)用于寫入到所述非易失性存儲(chǔ)器的元數(shù)據(jù)中;
當(dāng)所述計(jì)數(shù)器達(dá)到它的最大值時(shí),將所述計(jì)數(shù)器繞回到所述計(jì)數(shù)
器的最小值;以及
當(dāng)從電源故障恢復(fù)時(shí),利用寫入到所述頁(yè)的多個(gè)頁(yè)的元數(shù)據(jù)中的序列 號(hào)來(lái)確定哪些頁(yè)是當(dāng)前頁(yè),哪些頁(yè)是過期頁(yè)。
本發(fā)明涉及一種用于控制計(jì)算機(jī)存儲(chǔ)器的設(shè)備,包括用于執(zhí)行以 下步驟的部件
每次要將數(shù)據(jù)寫入到非易失性存儲(chǔ)器的新頁(yè)中時(shí),將計(jì)數(shù)器遞增 以生成序列號(hào)用于寫入到所述非易失性存儲(chǔ)器的元數(shù)據(jù)中;
當(dāng)所述計(jì)數(shù)器達(dá)到它的最大值時(shí),將所述計(jì)數(shù)器繞回到所述計(jì)數(shù) 器的最小值;以及
當(dāng)從電源故障恢復(fù)時(shí),利用寫入到所述頁(yè)的多個(gè)頁(yè)的元數(shù)據(jù)中的 序列號(hào)來(lái)確定哪些頁(yè)是當(dāng)前頁(yè),哪些頁(yè)是過期頁(yè)。
通過參照以下描述和用于說(shuō)明本發(fā)明實(shí)施例的附圖,可以理解本
發(fā)明的一些實(shí)施例。在附圖中
圖1示出根據(jù)本發(fā)明一個(gè)實(shí)施例、具有非易失性存儲(chǔ)器的計(jì)算機(jī) 系統(tǒng)。
圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例、包含序列號(hào)的存儲(chǔ)器的一個(gè)頁(yè)。 圖3示出根據(jù)本發(fā)明一個(gè)實(shí)施例、存儲(chǔ)器子系統(tǒng)在操作過程中的 特定狀態(tài)。
圖4A、 4B示出根據(jù)本發(fā)明一個(gè)實(shí)施例、利用非易失性存儲(chǔ)器中 的序列號(hào)使用雙范圍技術(shù)的方法的流程圖。
圖5A、 5B示出根據(jù)本發(fā)明一個(gè)實(shí)施例、利用非易失性存儲(chǔ)器中 的序列號(hào)使用移動(dòng)范圍技術(shù)的方法的流程圖。
具體實(shí)施例方式
在以下描述中,闡述了眾多具體細(xì)節(jié)。但是,應(yīng)了解,沒有這些 具體細(xì)節(jié)也可實(shí)現(xiàn)本發(fā)明的實(shí)施例。在其它情況下,沒有詳細(xì)示出公 知的電路、結(jié)構(gòu)和技術(shù),以免使本描述難以理解。
提到"一個(gè)實(shí)施例"、"實(shí)施例"、"示范實(shí)施例"、"各種實(shí) 施例"等時(shí)表示,如此描述的本發(fā)明的這個(gè)(這些)實(shí)施例可以包括特 定特征、結(jié)構(gòu)或特性,但不是每個(gè)實(shí)施例都一定包括這些特定特征、 結(jié)構(gòu)或特性。此外, 一些實(shí)施例可以具有針對(duì)其它實(shí)施例描述的特征 中的一些、所有特征,或者可以不具有針對(duì)其它實(shí)施例描述的任何特 征。
在以下描述和權(quán)利要求中,可以使用術(shù)語(yǔ)"耦合"和"連接"及 其派生詞。應(yīng)了解,這些術(shù)語(yǔ)不是相互同義的。而是,在特定實(shí)施例 中,"連接"用于表示兩個(gè)或兩個(gè)以上元件彼此直接物理或電接觸。 "耦合"用于表示兩個(gè)或兩個(gè)以上元件共同協(xié)作或相互交互,但是它 們可以或者可以不直接物理或電接觸。如權(quán)利要求中所用,除非另外指出,否則使用序數(shù)形容詞"第一"、 "第二"、"第三"等來(lái)描述共同的元件只是表示,指的是類似元件 的不同實(shí)例,它們不是用于暗示如此描述的元件必須處于按時(shí)間、空 間、排序或任何其它方式處于給定序列中。
本發(fā)明的各種實(shí)施例可以在硬件、固件、軟件或其任意組合中實(shí) 施。本發(fā)明也可作為包含在機(jī)器可讀介質(zhì)之中或之上的指令來(lái)實(shí)施, 一個(gè)或多個(gè)處理器可以讀取并執(zhí)行這些指令以使得能夠執(zhí)行本文描 述的操作。機(jī)器可讀介質(zhì)可包括用于存儲(chǔ)、傳送和/或接收以機(jī)器(如 計(jì)算機(jī))可讀形式的信息的任何機(jī)構(gòu)。例如,機(jī)器可讀介質(zhì)可包括有形
存儲(chǔ)介質(zhì),例如但不限于只讀存儲(chǔ)器(ROM);隨機(jī)存取存儲(chǔ)器(RAM); 磁盤存儲(chǔ)介質(zhì);光存儲(chǔ)介質(zhì);閃存設(shè)備等。機(jī)器可讀介質(zhì)也可包括經(jīng) 過調(diào)制以編碼這些指令的傳播信號(hào),例如但不限于電磁、光或聲載波 信號(hào)。
在本文件的描述中可以頻繁使用術(shù)語(yǔ)"閃,,存。但是,該術(shù)語(yǔ)只 是用作一個(gè)實(shí)例,而不應(yīng)用于將本發(fā)明的各種實(shí)施例限于用此術(shù)語(yǔ)標(biāo) 明的存儲(chǔ)器類型。 一般來(lái)說(shuō),本文件中描述的本發(fā)明的實(shí)施例可以用 于利用復(fù)制和塊擦除操作作為改變所存儲(chǔ)的數(shù)據(jù)的技術(shù)的任何類型 的非易失性存儲(chǔ)器中。 一些其它的非限制性實(shí)例可以是相變存儲(chǔ)器、 鐵電聚合物存儲(chǔ)器等。本文件中所用的術(shù)語(yǔ)"塊"是指非易失性存儲(chǔ) 器的擦除塊中的存儲(chǔ)空間。
本發(fā)明的各種實(shí)施例可以使用小于常規(guī)實(shí)施的序列號(hào)范圍,并在 序列號(hào)達(dá)到其最大值之后將其繞回到其最小值。因?yàn)樵诖鎯?chǔ)器的操作 壽命期間,可以多次使用相同的序列號(hào)值,所以這允許使用小得多的 序列號(hào)范圍,從而需要更少的位。因?yàn)橐源朔绞竭M(jìn)行的繞回(wrap aro皿d)可以使新近的序列號(hào)具有小于仍然駐留在存儲(chǔ)器中的4交舊序 列號(hào)的值,所以描述不同的技術(shù)來(lái)在從電源故障事件恢復(fù)期間重建存 儲(chǔ)器結(jié)構(gòu)時(shí)防止這種情況造成混淆。 一些實(shí)施例可使用全局序列號(hào) (即,在整個(gè)非易失性存儲(chǔ)器中使用單個(gè)值范圍),而其它實(shí)施例可使用局部序列號(hào)(將存儲(chǔ)器分成多個(gè)部分,每個(gè)部分具有它自己的序列號(hào)
范圍,這些序列號(hào)范圍可重復(fù)其它塊的序列號(hào)范圍)。注意盡管本公 開描述將序列號(hào)分配給每個(gè)"頁(yè)",但除非明確要求,否則在提到頁(yè) 時(shí)不應(yīng)視為是隱含的限制??梢詫⑿蛄刑?hào)分配給存儲(chǔ)器擦除塊的任何 其它子單元。
圖1示出根據(jù)本發(fā)明一個(gè)實(shí)施例、具有非易失性存儲(chǔ)器的計(jì)算機(jī) 系統(tǒng)。系統(tǒng)100包括非易失性存儲(chǔ)器子系統(tǒng)110、處理器120、電源 130、通信控制器140以及其它未示出的組件。處理器120可用于控 制系統(tǒng)的全部操作,而電源130可用于提供電力以操作系統(tǒng)的各個(gè)部 分。在一些實(shí)施例中,電源130可包括電池,而在其它實(shí)施例中,它 可包括設(shè)計(jì)成連接到本地電插座的電源。通信控制器140可用于與位 于計(jì)算機(jī)系統(tǒng)IOO外部的其它設(shè)備通信。該實(shí)例示出用于進(jìn)行無(wú)線通 信的天線150,但也可以使用其它形式的通信。系統(tǒng)還可包括其它未 示出的組件。
存儲(chǔ)器子系統(tǒng)110包括用于管理存儲(chǔ)器子系統(tǒng)110的內(nèi)部操作的 存儲(chǔ)器控制器112以及非易失性(NV)存儲(chǔ)器陣列114。 NV存儲(chǔ)器陣 列114可以使用任何可行的技術(shù),例如但不限于1) NOR閃存,2) NAND閃存,3)相變存儲(chǔ)器,4)鐵電聚合物存儲(chǔ)器,5)及其它。圖中 將存儲(chǔ)器陣列114的可尋址存儲(chǔ)設(shè)備示為分成數(shù)量為B的擦除塊,每 個(gè)塊包含數(shù)量為P的頁(yè)。B和P可以是任何適宜的數(shù)量,并且每個(gè)頁(yè) 可包含任何適宜數(shù)量的字節(jié)。盡管圖中將頁(yè)碼示為是對(duì)于每個(gè)塊重 復(fù),但其它實(shí)施例可使用其它技術(shù)(例如,分配總數(shù)為Bxp的全局唯 一的頁(yè)碼)。在操作中,包含數(shù)據(jù)的每個(gè)頁(yè)可具有寫入到其元數(shù)據(jù)的序 列號(hào),以便幫助跟蹤哪些頁(yè)是當(dāng)前頁(yè)。
圖2示出根據(jù)本發(fā)明一個(gè)實(shí)施例、包含序列號(hào)的存儲(chǔ)器的頁(yè)。頁(yè) 220可以是如圖l所示的任何頁(yè)。元數(shù)據(jù)221可用于存儲(chǔ)關(guān)于該頁(yè)的 信息,包括序列號(hào)以及在將序列號(hào)寫入到該物理頁(yè)時(shí)與該物理頁(yè)相關(guān) 聯(lián)的邏輯頁(yè)地址。在一些實(shí)施例中,元數(shù)據(jù)可以位于在存儲(chǔ)器系統(tǒng)外部、不可見和/或不可尋址(因而使得該頁(yè)的整個(gè)可尋址范圍可用于存
儲(chǔ)用戶或系統(tǒng)數(shù)據(jù))的存儲(chǔ)元件中,并且圖1中的存儲(chǔ)器控制器112可 用于將元數(shù)據(jù)寫入到那些存儲(chǔ)元件或從那些存儲(chǔ)元件讀取元數(shù)據(jù)。在 其它實(shí)施例中,可以為元數(shù)據(jù)預(yù)留一部分可尋址存儲(chǔ)空間,從而減少 了可用于存儲(chǔ)用戶/系統(tǒng)數(shù)椐的存儲(chǔ)量。在后一種情形中,可以將元數(shù) 據(jù)存儲(chǔ)在該頁(yè)的任何適宜的部分中,例如但不限于頁(yè)的開始或結(jié)束。 元數(shù)據(jù)可占用任何適宜數(shù)量的位。在一個(gè)實(shí)施例中,元數(shù)據(jù)可占用48 個(gè)位,其中序列號(hào)占用那些位中的32個(gè)位再加一個(gè)標(biāo)志位,但其它 實(shí)施例可對(duì)那些參數(shù)中的任意一個(gè)或兩個(gè)使用其它大小。
序列號(hào)生成器210可用于生成序列號(hào),序列號(hào)將坤皮分配給頁(yè)并與 頁(yè)一起存儲(chǔ)。在一些實(shí)施例中,可以使用計(jì)數(shù)器來(lái)生成序列號(hào),每次 要將新的序列號(hào)分配給頁(yè)時(shí),便將計(jì)數(shù)器遞增。當(dāng)使用全局序列號(hào)時(shí), 在整個(gè)存儲(chǔ)器系統(tǒng)中,每個(gè)序列號(hào)都將是唯一的,并且單個(gè)計(jì)數(shù)器可 為所有非易失性存儲(chǔ)器產(chǎn)生序列號(hào)。當(dāng)使用局部序列號(hào)時(shí),存儲(chǔ)器的 每個(gè)部分可以使用它自己的序列號(hào)生成器來(lái)生成序列號(hào),這些序列號(hào) 只在該部分中是唯一的,并且不同的存儲(chǔ)器部分可以同時(shí)利用相同的 序列號(hào)。以下描述假設(shè)釆用全局序列號(hào),但這不應(yīng)視為是對(duì)本發(fā)明實(shí) 施例的限制。
圖3示出根據(jù)本發(fā)明一個(gè)實(shí)施例、存儲(chǔ)器子系統(tǒng)在操作過程中的 特定狀態(tài)??梢灾付ù鎯?chǔ)器的每個(gè)物理塊是有效的、無(wú)效的、或是已 擦除的,這取決于其當(dāng)前的操作狀態(tài)。"有效"表示該特定塊中存儲(chǔ) 有當(dāng)前數(shù)據(jù),并且對(duì)該數(shù)據(jù)的訪問請(qǐng)求將指向該塊。"無(wú)效"表示, 出于某種原因,該塊中的所有數(shù)據(jù)不再^皮認(rèn)為是當(dāng)前的,并且對(duì)數(shù)據(jù) 的請(qǐng)求不會(huì)指向該塊。最常見的是,這種狀態(tài)表示該塊中之前存儲(chǔ)有 有效數(shù)據(jù),但該數(shù)據(jù)被復(fù)制到現(xiàn)在被認(rèn)為是有效塊的另 一個(gè)塊中。 "已擦除,,表示該塊經(jīng)歷過擦除操作,不包含任何有效或無(wú)效的數(shù)據(jù), 并且準(zhǔn)備好用作新塊而用于復(fù)制操作。當(dāng)使用存儲(chǔ)器系統(tǒng)時(shí),出于各 種原因,每個(gè)塊的狀態(tài)可動(dòng)態(tài)地改變。為了簡(jiǎn)單地說(shuō)明,只示出八個(gè)存儲(chǔ)器塊,但是典型的存儲(chǔ)器系統(tǒng)可具有比這多得多的塊。
如針對(duì)塊6所示,有效或無(wú)效塊中可具有多個(gè)頁(yè),這些頁(yè)各自被 指定為是過期頁(yè)、當(dāng)前頁(yè)或空頁(yè)??枕?yè)仍處于已擦除狀態(tài),其中不具 有系統(tǒng)/用戶數(shù)據(jù),并且可供隨后用于存儲(chǔ)這些數(shù)據(jù)。當(dāng)前頁(yè)中具有可 供使用的數(shù)據(jù),并且對(duì)該數(shù)據(jù)的訪問請(qǐng)求將指向該頁(yè)。過期頁(yè)中仍具 有舊數(shù)據(jù),但是該數(shù)據(jù)不再被認(rèn)為是當(dāng)前的,并且不能再用。在典型 的操作中,已擦除塊的所有頁(yè)都是空的,并且有效塊具有至少一個(gè)當(dāng) 前頁(yè),而無(wú)效塊不具有當(dāng)前頁(yè)并且具有至少一個(gè)過期頁(yè)。有效塊和無(wú) 效塊也可具有空頁(yè)。
一旦指定已擦除塊用于寫操作,便可將數(shù)據(jù)寫入到(通常)第一頁(yè)。 然后,該塊的狀態(tài)變?yōu)橛行顟B(tài),而第一頁(yè)的狀態(tài)變?yōu)楫?dāng)前狀態(tài)。當(dāng) 稍后要修改該頁(yè)中的數(shù)據(jù)時(shí),可從第一頁(yè)讀取數(shù)據(jù),修改該數(shù)據(jù),并 將修改后的數(shù)據(jù)寫入到第二頁(yè)。然后,指定第二頁(yè)為當(dāng)前頁(yè),而指定 第一頁(yè)為過期頁(yè)。該數(shù)據(jù)的其它變化可導(dǎo)致第三頁(yè)變成當(dāng)前頁(yè),而第 二頁(yè)變成過期頁(yè)。這可繼續(xù)進(jìn)行,直到該塊中沒有留下足夠的空頁(yè)用 于下一個(gè)操作。此時(shí),或者出于某個(gè)其它原因,可能期望的是將當(dāng)前 頁(yè)中的數(shù)據(jù)置于具有很多空頁(yè)的之前擦除的新塊中,此時(shí),可以將當(dāng) 前頁(yè)復(fù)制(取決于操作,可以具有或不具有修改)到新塊的具有新序列 號(hào)的頁(yè)中。不需要復(fù)制過期頁(yè),因?yàn)槠渲邪臄?shù)據(jù)將不再使用。現(xiàn) 在可以指定復(fù)制完的舊頁(yè)為過期頁(yè),而舊塊現(xiàn)在祐L認(rèn)為是無(wú)效的。隨 后,可以擦除這個(gè)舊的無(wú)效塊,并使其可用于將來(lái)的存儲(chǔ)器操作。擦 除舊塊的動(dòng)作還可擦除該塊的頁(yè)的元數(shù)據(jù)中包含的所有舊序列號(hào)。因 此,每個(gè)有效和無(wú)效頁(yè)可以在其元數(shù)據(jù)中具有序列號(hào),而每個(gè)空頁(yè)不 應(yīng)在其元數(shù)據(jù)中具有任何序列號(hào)。在一些實(shí)施例中,空頁(yè)將包舍已初 始化為默認(rèn)值(例如但不限于都為0或都為l)的序列號(hào)。當(dāng)在電源故障 之后重建存儲(chǔ)器時(shí),應(yīng)將此默認(rèn)值理解為不具有任何序列號(hào)。
盡管之前的描述提到在每個(gè)塊中只具有單個(gè)當(dāng)前頁(yè),但這對(duì)于一 些操作可能過于限制,并且在相同塊中可以同時(shí)存在多個(gè)當(dāng)前頁(yè)。但是,這些當(dāng)前頁(yè)應(yīng)當(dāng)與不同的邏輯地址相關(guān)聯(lián),并且因此將^皮認(rèn)為是 具有不同的數(shù)據(jù)集合,而不是具有相同數(shù)據(jù)的新、舊版本。為了簡(jiǎn)單 說(shuō)明,每個(gè)塊只示出四個(gè)頁(yè),但是典型的存儲(chǔ)器系統(tǒng)的每個(gè)塊可以具
有更多個(gè)頁(yè)(例如每個(gè)塊64頁(yè),但不應(yīng)將此數(shù)量視為是對(duì)本發(fā)明實(shí)施 例的推斷性限制)。
當(dāng)要將數(shù)據(jù)寫入到新頁(yè)時(shí),將來(lái)自序列號(hào)生成器的最近序列號(hào)寫 入到該頁(yè)的元數(shù)據(jù)中,也將與該數(shù)據(jù)相關(guān)聯(lián)的邏輯地址寫入到元數(shù)據(jù) 中。隨后,將來(lái)自序列號(hào)生成器的下一個(gè)序列號(hào)寫入到新寫入的下一 頁(yè)的元數(shù)據(jù)中。如果使用的是全局序列號(hào),則可將這下一個(gè)序列號(hào)寫 入到不同的塊或相同的塊中。但不管怎樣,特定塊中的當(dāng)前頁(yè)將具有 比該塊中的任何相關(guān)聯(lián)的過期頁(yè)的序列號(hào)新的序列號(hào),而空頁(yè)實(shí)際上 不具有序列號(hào)。在利用序列號(hào)的常規(guī)系統(tǒng)中,這意^^木著與特定邏輯地 址相關(guān)聯(lián)的當(dāng)前頁(yè)將具有比與該邏輯地址相關(guān)聯(lián)的任何過期頁(yè)的序 列號(hào)高的序列號(hào),從而使得只通過檢查序列號(hào)便可容易地識(shí)別哪個(gè)頁(yè) 是當(dāng)前頁(yè)。但是,因?yàn)楸景l(fā)明的實(shí)施例可利用從其最大值繞回到其最 小值的小序列號(hào),所以可能的情況是,較新的序列號(hào)可能具有小于較 舊序列值的絕對(duì)值。稍后將描述解決這種情形的技術(shù)。
因?yàn)楫?dāng)將數(shù)據(jù)復(fù)制到新塊和/或新頁(yè)時(shí),與特定邏輯地址相關(guān)聯(lián)的 塊和頁(yè)的物理地址會(huì)改變,所以邏輯-物理(L2P)表312可動(dòng)態(tài)地跟蹤 每個(gè)當(dāng)前頁(yè)從邏輯頁(yè)地址到物理塊/頁(yè)地址的轉(zhuǎn)換。但是,L2P表保存 在易失性存儲(chǔ)設(shè)備中,如果發(fā)生電源故障事件,L2P表會(huì)丟失。在此 情況下,在從電源故障恢復(fù)時(shí),可以利用存儲(chǔ)在存儲(chǔ)器的每個(gè)頁(yè)的元 數(shù)據(jù)中的序列號(hào)和邏輯地址來(lái)重建L2P表。在2005年6月30日提交 的題為"非易失性存儲(chǔ)器的寫入技術(shù)(Technique to Write to a Non-Volatile Memory)"的美國(guó)專利申請(qǐng)?zhí)?1/172608中介紹了用于此 重建的一些技術(shù)。但是,盡管在從電源故障恢復(fù)的過程中進(jìn)行的重建 過程可以得益于本文描述的本發(fā)明的實(shí)施例,但此重建不被認(rèn)為是這 些實(shí)施例的一部分,并且此應(yīng)用并未通過引用結(jié)合于此。在這里描述的實(shí)施例中,可以為可尋址存儲(chǔ)器的頁(yè)和塊保持轉(zhuǎn) 換,但是對(duì)于邏輯和物理地址,低階地址位(即,頁(yè)邊界內(nèi)包含的那些 地址位)將是相同的,并且在電源故障恢復(fù)過程中不需要轉(zhuǎn)換或重建。 但是,其它實(shí)施例可以在不同于頁(yè)邊界的存儲(chǔ)器子單元的層面跟蹤轉(zhuǎn) 換,并且相同的原理適用于那些子單元邊界。
一旦將序列號(hào)寫入到頁(yè)的元數(shù)據(jù)中,序列號(hào)便可一直保留在那 里,直到擦除包含該頁(yè)的塊為止。因此,序列號(hào)將存在于有效和無(wú)效 塊的當(dāng)前頁(yè)和過期頁(yè)的元數(shù)據(jù)中。包含在存儲(chǔ)器的頁(yè)的元數(shù)據(jù)中的序
列號(hào)祐匸認(rèn)為是"活動(dòng)(active)"序列號(hào)。(注意在一些實(shí)施例中,空頁(yè) 可以具有初始化為默認(rèn)狀態(tài)的序列號(hào),例如但不限于所有都為0或都 為1。應(yīng)將初始化后的序列號(hào)認(rèn)為不與任何序列號(hào)相同,并且不將該 頁(yè)認(rèn)為是活動(dòng)的。)在將數(shù)據(jù)寫入到該頁(yè)時(shí),元數(shù)據(jù)還可包含與該頁(yè)相 關(guān)聯(lián)的邏輯地址。在從電源故障恢復(fù)的過程中,通過在恢復(fù)過程中讀 取每個(gè)頁(yè)的元數(shù)據(jù),可以假定,在其元數(shù)據(jù)中具有相同邏輯地址的所 有頁(yè)表示相同數(shù)據(jù)的不同版本,并且該組中具有最高序列號(hào)的頁(yè)將被 認(rèn)為是當(dāng)前頁(yè),而該組中的其它頁(yè)將被認(rèn)為是過期頁(yè)。以此方式,即 使在電源故障過程中沒有保存每個(gè)頁(yè)的當(dāng)前/過期狀態(tài),仍可重建L2P 表。
因?yàn)?一旦達(dá)到最大值便允許遞增序列號(hào)繞回,所以可能的情況 是,較近的序列號(hào)將具有小于較舊序列號(hào)的絕對(duì)值。這會(huì)造成混淆, 因?yàn)榉駝t會(huì)將較小的序列號(hào)認(rèn)為是較舊的序列號(hào)。這里描述兩種通用 方法來(lái)解決這種混淆,這兩種方法分別稱為"雙范圍"法和"移動(dòng)范 圍"法。下文將單獨(dú)描述每種方法。圖4A、 4B示出雙范圍法,而圖 5A、 5B示出移動(dòng)范圍法。 雙范圍法
在雙范圍法中,將序列號(hào)范圍分成兩個(gè)子范圍。 一個(gè)實(shí)施例將范 圍分成兩個(gè)大小相同的子范圍,例如0...X的較低編號(hào)序列范圍和 (X+1).,.(2W-1)的較高編號(hào)序列范圍,其中N是序列號(hào)中的位數(shù),并且X-2(N力。這有助于簡(jiǎn)單的區(qū)分,因?yàn)樽罡哂行豢捎糜谧R(shí)別給定序列 號(hào)處于哪個(gè)子范圍。另外,可使用非易失性存儲(chǔ)器中的標(biāo)志來(lái)將包含 最近序列號(hào)的子范圍標(biāo)為"頂部(top)"子范圍,而另一個(gè)子范圍被認(rèn) 為是"底部(bottom)"子范圍。(請(qǐng)注意較高編號(hào)/較低編號(hào)子范圍和頂 部/底部子范圍之間的區(qū)別。在任何給定的時(shí)間,可以指定較高編號(hào)或 較低編號(hào)子范圍為頂部子范圍,而指定另一個(gè)子范圍為底部子范圍。) 如果發(fā)生在恢復(fù)時(shí)需要再建存儲(chǔ)器結(jié)構(gòu)的電源故障,則頂部子范 圍中的所有序列號(hào)^皮認(rèn)為高于底部子范圍中的所有序列號(hào),而不管那 些數(shù)的實(shí)際數(shù)值。但是,在每個(gè)子范圍內(nèi),這些數(shù)的絕對(duì)值確定哪個(gè) 序列號(hào)較高?;旧?,標(biāo)志被認(rèn)為是可在這兩個(gè)子范圍之間動(dòng)態(tài)切換 的額外的最高有效位。通過賦予最近的序列號(hào)高于較舊序列號(hào)的有效 值,這種技術(shù)將有效地解決當(dāng)新序列號(hào)繞回到"0"時(shí)通常發(fā)生的混 淆。
但是,如果仍然存在于存儲(chǔ)器中的序列號(hào)范圍的跨度大于總序列 號(hào)范圍的一半,則即使這種技術(shù)也會(huì)造成混淆。例如,如果序列號(hào)生 成器繞回到0,使得最近的序列號(hào)="0",則會(huì)斷言數(shù)值較低的子范 圍(O...X)為"頂部"子范圍,使得這個(gè)新序列號(hào)將具有高于存儲(chǔ)器中 的較舊序列號(hào)的有效值,這些較舊的序列號(hào)雖然具有2氣1、 2氣2等絕 對(duì)值,但現(xiàn)在被認(rèn)為位于底部范圍中。但是,來(lái)自新的頂部子范圍的 上部的很舊的序列號(hào)(例如,絕對(duì)值為X-4)位于新的頂部子范圍中, 其絕對(duì)值高于絕對(duì)值為0的最近的序列號(hào)。
為了防止發(fā)生這種混淆情況,無(wú)論序列號(hào)生成器何時(shí)從一個(gè)子范 圍越到另一個(gè)子范圍,都可啟動(dòng)"系列轉(zhuǎn)換(series-conversion)"過程。 這種過程可以根據(jù)需要將新的序列號(hào)重新分配給各頁(yè),使得所有剩余 的頁(yè)都具有位于相同子范圍中的序列號(hào),將指定該相同子范圍為頂部 子范圍。 一種實(shí)現(xiàn)此重新分配的方法是復(fù)制具有不在與最近序列號(hào)相 同的子范圍中的序列號(hào)的所有當(dāng)前頁(yè),并將新的序列號(hào)分配*個(gè)副 本(副本于是變成該頁(yè)的"當(dāng)前"版本),使得所有當(dāng)前頁(yè)都將具有位于相同子范圍中的序列號(hào)。然后,可斷言這個(gè)子范圍為頂部子范圍。 可以指定作為副本源的舊頁(yè)為過期頁(yè),當(dāng)這些頁(yè)所在的塊中不再存在 任何當(dāng)前頁(yè)時(shí),將此塊指定為是無(wú)效的,隨后擦除此無(wú)效塊。這種技 術(shù)還具有最終從存儲(chǔ)器中除去所有相關(guān)聯(lián)的過期頁(yè)的優(yōu)點(diǎn),因?yàn)槟切?過期頁(yè)僅僅遺留在將要擦除的舊塊中。盡管不能立即擦除舊塊,但是 在進(jìn)行此擦除之前,序列號(hào)不太可能再次移動(dòng)到不同的子范圍中,因 此仍然可以避免前述混淆。
圖4A、 4B示出根據(jù)本發(fā)明一個(gè)實(shí)施例、利用非易失性存儲(chǔ)器中 的序列號(hào)使用雙范圍技術(shù)的方法的流程圖。在一些實(shí)施例中,該方法 可以在非易失性存儲(chǔ)器的存儲(chǔ)器控制器中執(zhí)行,但其它實(shí)施例可以在 其它區(qū)域中執(zhí)行該方法,或者可以在存儲(chǔ)器控制器中執(zhí)行該方法的部 分,而在其它區(qū)域中"J丸行其它部分。在從圖4A開始的所示流程圖400 中,在410,可以接收將數(shù)據(jù)寫入到NV存儲(chǔ)器的請(qǐng)求,并定位至少 一個(gè)空頁(yè)用于寫入數(shù)據(jù)。在420,通過將之前的序列號(hào)遞增,可以創(chuàng) 建新的序列號(hào)。盡管在流程的特定位置示出此遞增,但其它實(shí)施例可 更早地遞增序列號(hào),并且當(dāng)需要時(shí),可僅僅使這個(gè)新遞增的序列號(hào)變 成可用。
如果要寫入到頁(yè)中的數(shù)據(jù)是已有數(shù)據(jù)的修改版本,則在435,可 以從上一個(gè)當(dāng)前頁(yè)讀取舊數(shù)據(jù)并對(duì)舊數(shù)據(jù)進(jìn)行修改,并且在440,將 修改后的數(shù)據(jù)以及新序列號(hào)寫入到新的當(dāng)前頁(yè)中。然后,在445,可 以指定上一個(gè)當(dāng)前頁(yè)是過期頁(yè),同時(shí)指定下一個(gè)頁(yè)為當(dāng)前頁(yè)。注意, 如果數(shù)據(jù)是新的,因此不存在其已有版本要修改,則操作435可省略, 并且445處的指定舊頁(yè)為過期頁(yè)的操作也可省略。
既然已經(jīng)將新的或者經(jīng)過修改的數(shù)據(jù)寫入到頁(yè)中并且已經(jīng)將序 列號(hào)寫入到該頁(yè)的元數(shù)據(jù)中,便可檢查存儲(chǔ)器中的活動(dòng)序列號(hào)以確定 是否需要以某種方式對(duì)它們進(jìn)行調(diào)整。在450,可以確定序列號(hào)是否 跨到不同的子范圍中。如果在440處寫入的新序列號(hào)位于不同于就在 之前的序列號(hào)的子范圍中,則發(fā)生了這種跨越。之所以會(huì)發(fā)生這種情況是因?yàn)?,序列?hào)從較低編號(hào)子范圍跨到較高編號(hào)子范圍,或者是因 為序列號(hào)通過從較高編號(hào)子范圍跨到較低編號(hào)子范圍而繞回。在任一
情況下,如450處所確定,包含新序列號(hào)的子范圍位于當(dāng)前指定為底 部子范圍的子范圍中,然后在460,可以觸發(fā)前述系列轉(zhuǎn)換過程。因 為這種過程可能涉及相當(dāng)大量的復(fù)制和擦除,所以在一些實(shí)施例中, 這種過程將是后臺(tái)任務(wù),或者是其它形式的延遲任務(wù),并且實(shí)際上要 在稍后時(shí)間、例如在存儲(chǔ)器控制器相對(duì)不忙時(shí)才執(zhí)行。
圖4B示出在圖4A中觸發(fā)的系列轉(zhuǎn)換過程。在465,識(shí)別最舊 (oldest)和最新的活動(dòng)序列號(hào)(即,分別具有最低有效值和最高有效值的 活動(dòng)序列號(hào))。此識(shí)別可以采用任何可行的方式來(lái)完成。因?yàn)榇藭r(shí)尚未 進(jìn)行頂部/底部子范圍指定的交換,所以最新序列號(hào)仍位于底部子范圍 中。在470,可以檢查最舊序列號(hào)以確定它是否也位于底部子范圍中。 如果是的話,則在473,交換頂部/底部范圍指定,使得序列號(hào)都在頂 部范圍中,并且過程可以在475退出。^f旦是,如果如470處所確定, 最舊序列號(hào)不在底部子范圍中,則在480,可通過以下方法將具有最 舊序列號(hào)的當(dāng)前頁(yè)(或者與具有最舊序列號(hào)的過期頁(yè)相關(guān)聯(lián)的當(dāng)前頁(yè)) 重新定位到新塊將其復(fù)制到新塊中的新頁(yè),并賦予副本一個(gè)新的序 列號(hào),這個(gè)新的序列號(hào)將位于底部子范圍中。在485,可以識(shí)別下一 個(gè)最舊的序列號(hào),并對(duì)與其相關(guān)聯(lián)的頁(yè)進(jìn)行470-480-485處的相同過 程。這可繼續(xù)進(jìn)行,直到所有當(dāng)前頁(yè)都具有位于底部范圍中的序列號(hào) 為止,此時(shí),可以在473交換頂部和底部子范圍,使得所有當(dāng)前頁(yè)都 具有位于頂部范圍中的序列號(hào)。然后,過程可以在475退出。
重新定位過程包括 一旦將舊的當(dāng)前頁(yè)復(fù)制到具有新序列號(hào)的新 塊,并且指定該副本是當(dāng)前的,便指定舊的當(dāng)前頁(yè)是過期頁(yè)。無(wú)需重 新定位已經(jīng)被指定為是過期的頁(yè)。 一旦舊塊中不再具有任何當(dāng)前頁(yè), 便可將舊塊指定為是無(wú)效的。然后,可擦除包括舊頁(yè)以及仍存儲(chǔ)在其 中的舊序列號(hào)的舊塊,并使其可供將來(lái)使用。以此方式進(jìn)行重新定位 不僅可以使所有當(dāng)前頁(yè)具有位于相同(頂部)子范圍中的序列號(hào)(這是目的所在),而且還可從存儲(chǔ)器中除去舊塊中的所有過期頁(yè)及其相關(guān)聯(lián)
的序列號(hào)。
移動(dòng)范圍法
在移動(dòng)范圍法中,保留識(shí)別存儲(chǔ)器中的最新和最舊活動(dòng)序列號(hào)的 指示符。例如,稱為HI的參數(shù)可指示最新活動(dòng)序列號(hào)的值,而稱為
LOW的參數(shù)可指示最舊活動(dòng)序列號(hào)的值。如果HI的值大于LOW, 則活動(dòng)序列號(hào)的絕對(duì)值表示其真實(shí)的相對(duì)年齡,并且不需要做任何調(diào) 整。在此狀態(tài),不存在絕對(duì)值小于LOW或大于HI的任何活動(dòng)序列號(hào)。 但是,如果LOW的絕對(duì)值大于HI,則ffl值發(fā)生了繞回。在此 情況下,不應(yīng)存在絕對(duì)值小于LOW并且還大于ffl的任何序列號(hào)。使 用中的具有小于LOW的值的任何序列號(hào)將被認(rèn)為比LOW新。為了 使這兩個(gè)組相對(duì)于彼此保持正確,對(duì)于絕對(duì)值小于LOW的每個(gè)序列 號(hào),可以將標(biāo)志設(shè)為"1",而對(duì)于絕對(duì)值大于ffl的每個(gè)序列號(hào),可 將標(biāo)志設(shè)為"0"。如果將此標(biāo)志認(rèn)為是每個(gè)序列號(hào)的額外的最高有 效位,則使用中的所有序列號(hào)的包含標(biāo)志位在內(nèi)的有效值都將是正確 的。
在移動(dòng)范圍法中,在使用新序列號(hào)的任何時(shí)間,都可將HI設(shè)置 成那個(gè)新序列號(hào)的值。在擦除最舊序列號(hào)的任何時(shí)間,修改LOW的 值以指示仍存在于存儲(chǔ)器中的現(xiàn)在為最舊的序列號(hào)。在擦除包含具有 最新序列號(hào)的頁(yè)的塊的少見情況下,可以修改HI的值以指示現(xiàn)在為 最新的仍在使用的序列號(hào)。如果因?yàn)樽罱鼘懭氲臄?shù)據(jù)不能再用于任何 程序而從存儲(chǔ)器中除去該數(shù)據(jù),則會(huì)發(fā)生這種情況。
可能的情況是,最舊活動(dòng)序列號(hào)可保留在存儲(chǔ)器中長(zhǎng)至足以使最 新序列號(hào)最終趕上它的時(shí)間,從而使得HI=LOW。這會(huì)不正確地暗示, 存儲(chǔ)器(以及存儲(chǔ)器中的有效或無(wú)效塊)中不存在任何序列號(hào)。為了避 免這種不明確的狀態(tài),當(dāng)HI的值從下面逼近LOW的值時(shí),可以在 ffl和LOW之間保持最小間隔。例如,可以設(shè)置閣值間隔值T,使得 當(dāng)最新序列號(hào)的值-LOW-T時(shí),可以將包含最舊序列號(hào)的塊中的當(dāng)前頁(yè)重新定位到新塊,并賦予重新定位的當(dāng)前頁(yè)一個(gè)新的序列號(hào)。這 允許擦除舊塊,這還將擦除該塊中的舊頁(yè)及其序列號(hào)。而這又會(huì)增加
LOW的值,從而賦予隨后的新序列號(hào)更多的增長(zhǎng)空間。當(dāng)重新定位 當(dāng)前頁(yè)時(shí),無(wú)需重新定位相關(guān)聯(lián)的過期頁(yè),并且當(dāng)擦除舊塊時(shí),還將 擦除它們的序列號(hào)。
圖5A、 5B示出根據(jù)本發(fā)明一個(gè)實(shí)施例、利用非易失性存儲(chǔ)器中 的序列號(hào)使用移動(dòng)范圍技術(shù)的方法的流程圖。在流程圖500中,操作 510-545與圖4A中的對(duì)應(yīng)操作410-445相同,這里不再單獨(dú)描述。在 550,在將新的或經(jīng)過修改的數(shù)據(jù)寫入到具有新序列號(hào)的新頁(yè)之后, 將參數(shù)HI設(shè)置成新序列號(hào)的值。在555,確定操作530-545是否產(chǎn)生 擦除塊的結(jié)果。如果不擦除塊,則處理可移動(dòng)到圖5B的頂部。如果 操作530-545產(chǎn)生擦除塊的結(jié)果(或出于其它原因),則在進(jìn)行該擦除 之后,處理可移動(dòng)到560,在560,確定存儲(chǔ)器中(在擦除之后)現(xiàn)在最 舊的序列號(hào)是否具有大于LOW的值。如果不是,則處理可移動(dòng)到圖 5B的頂部。但是,如果最舊序列號(hào)具有大于LOW的值(這意味著擦 除除去了之前最舊的序列號(hào)),則在565,通過找到存儲(chǔ)器中現(xiàn)在最舊 (now oldest)的序列號(hào)并將LOW設(shè)置成等于該值,可以設(shè)置LOW的 新值。即使在擦除操作從存儲(chǔ)器中除去之前最舊的序列號(hào)之后,此過 程仍使LOW的值保持等于存儲(chǔ)器中的最舊序列號(hào)。
如之前所述,重要的是不要讓ffl的值繞回并趕上LOW的值,因 此圖5B示出可如何避免這種情況。在570,可以確定ffl的值是否小 于LOW-T的值。換句話說(shuō),當(dāng)ffl繞回并且從下面逼近LOW的值 時(shí),認(rèn)為T就是在ffl和LOW之間的期望的最小間隔。如果ffl小于 LOW-T,則保持此間隔,并且過程可在580退出。但是,當(dāng)如570 處所確定,達(dá)到此最小間隔時(shí),在575,可將包含最舊序列號(hào)的塊中 的當(dāng)前頁(yè)復(fù)制到新塊,并賦予其一個(gè)新的(最高)序列號(hào)。這允許擦除 舊塊。如果包含最舊序列號(hào)的塊中具有多于一個(gè)當(dāng)前頁(yè),則可將那些 當(dāng)前頁(yè)中的每個(gè)當(dāng)前頁(yè)復(fù)制到新塊,并賦予其新的序列號(hào),然后再允許擦除舊塊。
設(shè)置ffl和LOW的值以反應(yīng)這些變化可以通過重復(fù)圖5A中的操 作550-555-560-565來(lái)實(shí)現(xiàn)。由于執(zhí)行這些操作需要時(shí)間,所以只擦 除單個(gè)塊不足以保持ffl和LOW之間的最小間隔(如570處所確定)。 額外的重新定位和擦除可通過循環(huán)回路570-575-550-555-560-565多次 直到達(dá)到間隔來(lái)實(shí)現(xiàn),并且過程在580退出??梢赃x擇T的值以適應(yīng) 此過程將花費(fèi)多長(zhǎng)時(shí)間的最壞情況估計(jì)。
以上描述用于說(shuō)明而不是限制。本領(lǐng)域的技術(shù)人員將聯(lián)想到變 化。那些變化用于包含在本發(fā)明的各種實(shí)施例中,本發(fā)明的各種實(shí)施 例只由隨附權(quán)利要求的精神和范圍限制。
權(quán)利要求
1、一種用于控制計(jì)算機(jī)存儲(chǔ)器的裝置,包括非易失性存儲(chǔ)器;以及存儲(chǔ)器控制器,用于控制所述存儲(chǔ)器的內(nèi)容的讀、寫和擦除,并且如果將數(shù)據(jù)寫入到塊的每個(gè)子單元中,則將序列號(hào)值寫入到所述子單元的元數(shù)據(jù)中;其中所述存儲(chǔ)器控制器用于在每次寫入新的子單元時(shí)將所述序列號(hào)值遞增,并且在所述序列號(hào)達(dá)到最大值之后,將所述序列號(hào)繞回到最小值。
2、 如權(quán)利要求l所述的裝置,其中所述序列號(hào)是全局序列號(hào)。
3、 如權(quán)利要求1所述的裝置,其中所述最大值是2氣1,其中N 是用于表示所述序列號(hào)值的位數(shù)。
4、 如權(quán)利要求1所述的裝置,其中從所述最小值到所述最大值 的值范圍由第一范圍和第二范圍組成,所述第二范圍與所述第一范圍 不重疊。
5、 如權(quán)利要求4所述的裝置,其中所述存儲(chǔ)器控制器用于選擇所述第 一范圍和所述第二范圍中包 含最新活動(dòng)序列號(hào)的一個(gè)范圍作為頂部范圍,并用于選擇所述第一范 圍和所述第二范圍中的另一個(gè)范圍作為底部范圍;并且指定所述頂部范圍中的所有活動(dòng)序列號(hào)具有大于所述底部范圍 中的所有活動(dòng)序列號(hào)的有效值。
6、 如權(quán)利要求5所述的裝置,其中所迷存儲(chǔ)器控制器用于 重新定位包含位于所述底部范圍中的序列號(hào)的每個(gè)子單元,使得重新定位后的子單元包含位于所述頂部范圍中的序列號(hào);以及擦除包含具有位于所述底部范圍中的序列號(hào)的所述子單元的塊。
7、 如權(quán)利要求l所述的裝置,其中所述存儲(chǔ)器控制器用于 將最新的活動(dòng)序列號(hào)的值分配給第一參數(shù);以及將最舊的活動(dòng)序列號(hào)的值分配給第二參數(shù)。
8、 如權(quán)利要求7所述的裝置,其中所述存儲(chǔ)器控制器用于 從特定子單元讀取數(shù)據(jù);修改所述數(shù)據(jù)并將修改后的數(shù)據(jù)寫入到新的子單元; 將新的序列號(hào)寫入到所述新的子單元的元數(shù)據(jù)中;以及 將所述新的子單元中的所述新序列號(hào)的值重新分配給所述第一 參數(shù)。
9、 如權(quán)利要求8所述的裝置,其中所述存儲(chǔ)器控制器用于 擦除包含所述特定子單元的特定塊,所述擦除包括擦除相關(guān)聯(lián)的元數(shù)據(jù);以及將現(xiàn)在最舊的活動(dòng)序列號(hào)的值分配給所述第二參數(shù)。
10、 如權(quán)利要求8所述的裝置,其中當(dāng)確定所述第一參數(shù)在所述 第二參數(shù)的某個(gè)范圍內(nèi)時(shí),所述存儲(chǔ)器控制器用于執(zhí)行包括以下步驟的操作將包含最舊序列號(hào)的子單元重新定位到新塊,并將新序列號(hào)分配 給重新定位的子單元;擦除包含具有所述最舊序列號(hào)的所述子單元的塊,所述擦除包括 擦除相關(guān)聯(lián)的元數(shù)據(jù);以及將現(xiàn)在最舊的活動(dòng)序列號(hào)的值重新分配給所述第二參數(shù)。
11、 如權(quán)利要求l所述的裝置,還包括耦合到所述非易失性存儲(chǔ) 器的電池。
12、 一種用于控制計(jì)算機(jī)存儲(chǔ)器的方法,包括 每次要將數(shù)據(jù)寫入到非易失性存儲(chǔ)器的新頁(yè)中時(shí),將計(jì)數(shù)器遞增以生成序列號(hào)用于寫入到所述非易失性存儲(chǔ)器的元數(shù)據(jù)中;當(dāng)所述計(jì)數(shù)器達(dá)到它的最大值時(shí),將所述計(jì)數(shù)器繞回到所述計(jì)數(shù)器的最小值;以及當(dāng)從電源故障恢復(fù)時(shí),利用寫入到所述頁(yè)的多個(gè)頁(yè)的元數(shù)據(jù)中的序列號(hào)來(lái)確定哪些頁(yè)是當(dāng)前頁(yè),哪些頁(yè)是過期頁(yè)。
13、 如權(quán)利要求12所述的方法,其中從所述最小值到所述最大 值的值范圍由第一范圍和不與所述第一范圍重疊的第二范圍組成,并 且所述方法還包括指定所述第一范圍和所述第二范圍中包含最新的活動(dòng)序列號(hào)的 一個(gè)范圍作為頂部范圍,并選擇所述第一范圍和所述第二范圍中的另 一個(gè)范圍作為底部范圍;以及指定所述頂部范圍中的所有活動(dòng)序列號(hào)具有大于所述底部范圍 中的所有活動(dòng)序列號(hào)的值。
14、 如權(quán)利要求13所述的方法,還包括 重新定位具有位于所述底部范圍中的序列號(hào)的頁(yè),使得重新定位的頁(yè)包含位于所述頂部范圍中的序列號(hào);以及擦除包含具有位于所述底部范圍中的序列號(hào)的所述頁(yè)的塊。
15、 如權(quán)利要求12所述的方法,還包括 將最新的活動(dòng)序列號(hào)的值分配給第一參數(shù);以及 將最舊的活動(dòng)序列號(hào)的值分配給第二參數(shù)。
16、 如權(quán)利要求15所述的方法,還包括 從特定頁(yè)讀取數(shù)據(jù);修改所述數(shù)據(jù)并將修改后的數(shù)據(jù)寫入到新頁(yè); 將新序列號(hào)寫入到所述新頁(yè)的元數(shù)據(jù)中;以及 將所述新頁(yè)中的所述新序列號(hào)的值分配給所述第 一參數(shù)。
17、 如權(quán)利要求16所述的方法,包括擦除包含所述特定頁(yè)的特定塊,所述擦除包括擦除相關(guān)聯(lián)的元數(shù) 據(jù);以及 ,將現(xiàn)在最舊的活動(dòng)序列號(hào)的值重新分配給所述第二參數(shù)。
18、 如權(quán)利要求16所述的方法,還包括當(dāng)確定所述第一參數(shù)在 所述第二參數(shù)的某個(gè)范圍內(nèi)時(shí)執(zhí)行包括以下步驟的操作將包含最舊序列號(hào)的頁(yè)重新定位到新塊,并將新序列號(hào)分配給重 新定位的頁(yè);擦除包含具有最舊序列號(hào)的頁(yè)的塊,所述擦除包括擦除相關(guān)聯(lián)的元數(shù)據(jù);以及將現(xiàn)在最舊的活動(dòng)序列號(hào)的值分配給所述第二參數(shù)。
19、 一種用于控制計(jì)算機(jī)存儲(chǔ)器的設(shè)備,包括用于執(zhí)行以下步驟 的部件每次要將數(shù)據(jù)寫入到非易失性存儲(chǔ)器的新頁(yè)中時(shí),將計(jì)數(shù)器遞增 以生成序列號(hào)用于寫入到所述非易失性存儲(chǔ)器的元數(shù)據(jù)中;當(dāng)所述計(jì)數(shù)器達(dá)到它的最大值時(shí),將所述計(jì)數(shù)器繞回到所述計(jì)數(shù) 器的最小值;以及當(dāng)從電源故障恢復(fù)時(shí),利用寫入到所述頁(yè)的多個(gè)頁(yè)的元數(shù)據(jù)中的 序列號(hào)來(lái)確定哪些頁(yè)是當(dāng)前頁(yè),哪些頁(yè)是過期頁(yè)。
20、 如權(quán)利要求19所述的設(shè)備,其中從所述最小值到所述最大 值的值范圍由第一范圍和不與所述第一范圍重疊的第二范圍組成,并 且所述設(shè)備還包括用于執(zhí)行以下步驟的部件選擇所述第 一范圍和所述第二范圍中包含最新的活動(dòng)序列號(hào)的 一個(gè)范圍作為頂部范圍,并選擇所述第一范圍和所述第二范圍中的另 一個(gè)范圍作為底部范圍;以及指定所述頂部范圍中的所有活動(dòng)序列號(hào)具有大于所述底部范圍 中的所有活動(dòng)序列號(hào)的值。
21、 如權(quán)利要求20所述的設(shè)備,還包括用于執(zhí)行以下步驟的部件重新定位具有位于所述底部范圍中的序列號(hào)的頁(yè),使得重新定位 的頁(yè)包含位于所述頂部范圍中的序列號(hào);以及擦除包含具有位于所述底部范圍中的序列號(hào)的頁(yè)的塊,其中所述 擦除包括擦除相關(guān)聯(lián)的元數(shù)據(jù)。
22、 如權(quán)利要求19所述的裝置,還包括用于執(zhí)行以下步驟的部件將最新的活動(dòng)序列號(hào)的值分配給第一參數(shù);以及將最舊的活動(dòng)序列號(hào)的值分配給第二參數(shù)。
23、 如權(quán)利要求22所述的設(shè)備,還包括用于執(zhí)行以下步驟的部件從特定頁(yè)讀取數(shù)據(jù);修改所述數(shù)據(jù)并將修改后的數(shù)據(jù)寫入到新頁(yè); 將新序列號(hào)寫入到所述新頁(yè)的元數(shù)據(jù)中;以及 將所述新頁(yè)中的所述新序列號(hào)的值分配給所述第 一參數(shù)。
24、 如權(quán)利要求23所述的設(shè)備,還包括用于執(zhí)行以下步驟的部件擦除包含所述特定頁(yè)的特定塊并且擦除相關(guān)聯(lián)的元數(shù)據(jù);以及 將現(xiàn)在最舊的活動(dòng)序列號(hào)的值分配給所述第二參數(shù)。
25、 如權(quán)利要求23所述的設(shè)備,還包括用于在確定所述第一參 數(shù)在所述第二參數(shù)的某個(gè)范圍內(nèi)時(shí)執(zhí)行以下步驟的部件將包含最舊序列號(hào)的頁(yè)重新定位到新塊,并將新序列號(hào)分配給重 新定位的頁(yè);擦除包含所述最舊序列號(hào)的塊,所述擦除包括擦除相關(guān)聯(lián)的元數(shù) 據(jù);以及將現(xiàn)在最舊的活動(dòng)序列號(hào)的值分配給所述第二參數(shù)。
全文摘要
如果發(fā)生從電源故障恢復(fù)的情況,則利用非易失性存儲(chǔ)器的元數(shù)據(jù)中的遞增序列號(hào)來(lái)確定存儲(chǔ)器中哪些數(shù)據(jù)是當(dāng)前的有效數(shù)據(jù),哪些數(shù)據(jù)不是。為了減少這些序列號(hào)所消耗的元數(shù)據(jù)空間量,允許這些序列號(hào)小至足以在達(dá)到最大值時(shí)繞回。公開兩種不同的技術(shù)來(lái)阻止這種繞回情形造成序列號(hào)的相對(duì)值的不明確。
文檔編號(hào)G06F12/02GK101576852SQ20091014122
公開日2009年11月11日 申請(qǐng)日期2009年5月5日 優(yōu)先權(quán)日2008年5月5日
發(fā)明者H·H·曹, R·羅耶, S·N·崔卡 申請(qǐng)人:英特爾公司