專利名稱:閃存管理的制作方法
技術(shù)領(lǐng)域:
該技術(shù)領(lǐng)域一般涉及電子領(lǐng)域,并且更具體地涉及閃存設(shè)備的存儲(chǔ)器管理。
背景 閃存是一種形式的電可擦除可編程只讀存儲(chǔ)器(EEPROM)。不像一次可以擦除一個(gè)字節(jié)的典型EEPROM,閃存通常一次被擦除一個(gè)塊。塊的大小隨各種閃存設(shè)備而變化。閃存管理對(duì)于存儲(chǔ)器設(shè)備常常是特定的。閃存設(shè)備通常小、重量輕、在沒(méi)有電源情況下維持狀態(tài)、并且消耗功率低。因此,閃存對(duì)于諸如移動(dòng)設(shè)備、電池供電的設(shè)備、希望低功耗的設(shè)備、數(shù)碼照相機(jī)、MP3播放器、和/或小設(shè)備等設(shè)備是適合的。
在這樣的設(shè)備中使用USB閃存通常涉及對(duì)相對(duì)大量的數(shù)據(jù)的順序?qū)懭?,并且不益于?duì)相對(duì)少量的數(shù)據(jù)的隨機(jī)寫入操作。此外,許多閃存設(shè)備在應(yīng)用程序正運(yùn)行時(shí)可以通過(guò)USB接口插入到其它設(shè)備和從其它設(shè)備中拔出。因此,USB閃存設(shè)備在讀或?qū)懖僮鬟^(guò)程中掉電(通過(guò)被拔出)是可能的。這會(huì)導(dǎo)致無(wú)法恢復(fù)的錯(cuò)誤。
概述 管理存儲(chǔ)器以便恰當(dāng)?shù)剡m應(yīng)電源中斷并且提供相對(duì)好的隨機(jī)寫入性能。每次電源被提供給諸如閃存設(shè)備等存儲(chǔ)器設(shè)備時(shí),創(chuàng)建和更新存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。在一個(gè)示例性實(shí)施例中,存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)在易失性存儲(chǔ)器中形成。因此,存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)在掉電時(shí)丟失,并且在每次隨后提供電源時(shí)被重新創(chuàng)建。在對(duì)閃存進(jìn)行寫操作期間,閃存中的特定位置被更新來(lái)反映閃存的當(dāng)前狀態(tài)。當(dāng)電源被中斷時(shí),在再施加電源后重新創(chuàng)建存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。掃描閃存并且使用從閃存中的特定位置中獲得的信息來(lái)構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
附圖簡(jiǎn)述 參考附圖,從下面的詳細(xì)描述中將更好地理解上述和其它目的、方面以及優(yōu)點(diǎn),在附圖中
圖1是示例性閃存設(shè)備的框圖; 圖2是閃存設(shè)備的另一個(gè)示例性實(shí)施例的框圖; 圖3是包括塊和頁(yè)的示例性閃存數(shù)據(jù)結(jié)構(gòu)的圖示; 圖4是對(duì)一個(gè)塊中的頁(yè)的示例性指定的圖示; 圖5是一個(gè)頁(yè)的示例性數(shù)據(jù)和元數(shù)據(jù)結(jié)構(gòu)的圖示; 圖6是用于概述頁(yè)的示例性數(shù)據(jù)結(jié)構(gòu)的圖示; 圖7是將邏輯塊地址(LBA)與閃存頁(yè)地址相關(guān)的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示; 圖8是描繪空閑塊的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示; 圖9是描繪一個(gè)塊中的有效頁(yè)的個(gè)數(shù)的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示; 圖10是描繪與塊中各頁(yè)相關(guān)聯(lián)的頁(yè)序列號(hào)的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu); 圖11是描繪活動(dòng)塊和活動(dòng)頁(yè)的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示; 圖12是用于掃描塊的示例性過(guò)程的流程圖; 圖13是用于掃描概述頁(yè)的示例性過(guò)程的流程圖; 圖14是用于執(zhí)行一完整塊掃描的示例性過(guò)程的流程圖; 圖15是用于執(zhí)行LBA映射的示例性過(guò)程的流程圖; 圖16是用于分配活動(dòng)塊和活動(dòng)頁(yè)的示例性過(guò)程的流程圖。
說(shuō)明性實(shí)施例的詳細(xì)描述 存儲(chǔ)器管理在此被描述為應(yīng)用于閃存。然而,應(yīng)該理解,對(duì)此處描述的存儲(chǔ)器管理的應(yīng)用不應(yīng)該限于此。此處描述的對(duì)存儲(chǔ)器的管理應(yīng)用于諸如NAND閃存、NOR閃存、非閃存、動(dòng)態(tài)存儲(chǔ)器、易失性存儲(chǔ)器、非易失性存儲(chǔ)器、半導(dǎo)體存儲(chǔ)器、磁存儲(chǔ)器、硬盤存儲(chǔ)器、軟盤存儲(chǔ)器、光學(xué)存儲(chǔ)器等等任何適當(dāng)類型的存儲(chǔ)裝置。
圖1是包括易失性存儲(chǔ)器部分14、控制器部分16、和非易失性存儲(chǔ)器部分18的示例性閃存設(shè)備12的框圖。在一示例性實(shí)施例中,非易失性存儲(chǔ)器部分18包括閃存。然而,可以使用任何適當(dāng)?shù)拇鎯?chǔ)器。易失性存儲(chǔ)器部分14不一定要包括易失性存儲(chǔ)器,并且因此在替換實(shí)施例中,易失性存儲(chǔ)器部分14包括非易失性存儲(chǔ)器。此外,在示例性實(shí)施例中,易失性存儲(chǔ)器部分14和/或非易失性存儲(chǔ)器部分18可以包括數(shù)據(jù)庫(kù)。閃存設(shè)備12可以在單個(gè)處理器或多處理器中實(shí)現(xiàn)。多個(gè)處理器可以是分布式或集中式定位的。多個(gè)處理器可以無(wú)線地、通過(guò)硬線、或通過(guò)它們的組合來(lái)通信。例如,閃存設(shè)備12的控制器部分16可以通過(guò)多個(gè)分布式處理器來(lái)實(shí)現(xiàn)。
如下面更具體地描述的,控制器部分16管理對(duì)閃存部分18的訪問(wèn)。此處使用的術(shù)語(yǔ)“訪問(wèn)”包括讀、寫、擦除、或它們的組合??刂破鞑糠?6還在易失性存儲(chǔ)器部分14內(nèi)構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
閃存設(shè)備12可通過(guò)接口20與希望訪問(wèn)閃存12的任何適當(dāng)?shù)脑O(shè)備(圖1未示出訪問(wèn)設(shè)備)相耦合。訪問(wèn)設(shè)備(例如數(shù)碼照相機(jī)或MP3播放器)通過(guò)接口20耦合至存儲(chǔ)器控制器部分16。接口20可以包括諸如通用串行總線(USB)等任何適當(dāng)?shù)慕涌凇T谝粋€(gè)示例性實(shí)施例中,控制器部分16對(duì)于訪問(wèn)設(shè)備是透明的,并且訪問(wèn)設(shè)備“認(rèn)為”它與閃存18直接接口。在另一個(gè)示例性實(shí)施例中,控制器16仿真盤存儲(chǔ)器,并且訪問(wèn)設(shè)備“認(rèn)為”它與盤直接接口。接口20可以是無(wú)線鏈路、硬連線接口或它們的組合。
圖2是示出閃存設(shè)備的另一個(gè)示例性實(shí)施例的框圖。在圖2描繪的配置中,閃存設(shè)備包括多個(gè)非易失性存儲(chǔ)器部分22。在一個(gè)示例性實(shí)施例中,閃存設(shè)備包括獨(dú)立訪問(wèn)非易失性存儲(chǔ)器部分22中的每個(gè)部分(22a-22k)的裝置。獨(dú)立部分22a-22k可以表示在單個(gè)芯片、各獨(dú)立芯片、或它們的組合上的各獨(dú)立閃存部分。在一個(gè)示例性實(shí)施例中,可以通過(guò)任何適當(dāng)?shù)难b置(例如通過(guò)獨(dú)立的啟用/禁用開(kāi)關(guān))來(lái)實(shí)現(xiàn)對(duì)非易失性存儲(chǔ)器部分22的每個(gè)部分的獨(dú)立訪問(wèn)。對(duì)非易失性存儲(chǔ)器部分22的所選擇部分的獨(dú)立訪問(wèn)允許同時(shí)執(zhí)行多個(gè)功能。例如,非易失性存儲(chǔ)器部分22的所選擇部分可以接受命令,而其它部分可以正執(zhí)行需要更長(zhǎng)時(shí)間的操作。
再次參考圖1,出于簡(jiǎn)潔的目的,非易失性存儲(chǔ)器部分18此處也被稱作為閃存。在一個(gè)示例性實(shí)施例中,當(dāng)電源被施加到閃存設(shè)備12時(shí),控制器16掃描閃存18??刂破?6采用從掃描閃存18獲得的信息在易失性存儲(chǔ)器部分14中構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)??刂破鞑糠?6從閃存18的所選塊的所選頁(yè)中獲得關(guān)于閃存18的塊和頁(yè)的狀態(tài)的信息。
圖3是示出用于塊和頁(yè)的示例性數(shù)據(jù)結(jié)構(gòu)的閃存18的框圖。閃存18包括固定數(shù)目的塊。每個(gè)塊包括固定個(gè)數(shù)的頁(yè)。在一個(gè)示例性實(shí)施例中,如圖3所示,閃存18包括“N”加1個(gè)塊并且每個(gè)塊包括“L”加1個(gè)頁(yè)。每個(gè)頁(yè)包括固定個(gè)數(shù)的字節(jié)。在一個(gè)示例性實(shí)施例中,閃存設(shè)備在每一閃存部分18中包括4096個(gè)塊(4k個(gè)塊)(即N=4095),并且每個(gè)塊包括64個(gè)頁(yè)(即L=63)。因此,每個(gè)閃存部分18包括256K個(gè)頁(yè)(4K×64)。此外,每個(gè)頁(yè)包括2112個(gè)字節(jié)(2KB被指定用于數(shù)據(jù),而64B被指定用于元數(shù)據(jù))。然而,可以構(gòu)想各種其它配置。
在可將數(shù)據(jù)寫入到閃存中之前,存儲(chǔ)器必須被擦除。更具體地,在塊能被用來(lái)寫之前,必須擦除塊。閃存一次可被寫一個(gè)頁(yè)。閃存一次被擦除一個(gè)塊。因此,擦除操作是在塊的基礎(chǔ)上執(zhí)行的,并且編程(寫)操作是在頁(yè)的基礎(chǔ)上執(zhí)行的。讀操作也在頁(yè)的基礎(chǔ)上執(zhí)行。塊中的各頁(yè)從低地址到高地址被順序?qū)懭?。因此,參考圖3,頁(yè)1在頁(yè)2可被寫之前被寫。一旦一個(gè)頁(yè)被寫,在塊中的先前的頁(yè)不再被寫,直至下一次(對(duì)該塊的)擦除之后。如下面更詳細(xì)地描述的,采用順序?qū)憲l件來(lái)確定擦除失敗。當(dāng)閃存單元被擦除時(shí),閃存單元被賦予二進(jìn)制值1。當(dāng)被編程(被寫)時(shí),單元被賦予二進(jìn)制值0. 現(xiàn)在參考圖1和圖3,在一個(gè)示例性實(shí)施例中,一個(gè)讀操作涉及從閃存18中讀取整個(gè)頁(yè)。該頁(yè)的內(nèi)容被復(fù)制到控制器部分16的寄存器。在這個(gè)示例性實(shí)施例中,寄存器大小為2112字節(jié)(2KB+64字節(jié))。寄存器的內(nèi)容通過(guò)接口20(例如USB)可用來(lái)傳輸給訪問(wèn)設(shè)備。寄存器的內(nèi)容被整體傳輸或可傳輸其任何一部分。如上所述,寫操作按順序頁(yè)次序執(zhí)行。一個(gè)頁(yè)在各擦除之間可以被寫最多四次。然而,頁(yè)的同一部分在擦除發(fā)生之前不能被寫。即,一個(gè)單元不能被寫兩次,例如,零不能轉(zhuǎn)變成一(在沒(méi)有擦除的情況下)。因此,一旦存儲(chǔ)單元被寫為0,該單元在擦除發(fā)生之前不能寫為1。寫操作由控制器部分16執(zhí)行。要被寫入到閃存18中的數(shù)據(jù)被放置在控制器16的寄存器中,并且寄存器的內(nèi)容被傳輸?shù)介W存18中。寄存器的內(nèi)容可以用最多四次傳輸被傳輸?shù)介W存。因此,一個(gè)頁(yè)在擦除之前可以被寫最多四次,其中在各擦除之間,頁(yè)的任何部分沒(méi)有被重寫。
可以使用各種手段來(lái)確保正從閃存18中讀取的數(shù)據(jù)是正確的(例如,沒(méi)有被損壞)。在一個(gè)示例性實(shí)施例中,在讀操作期間采用糾錯(cuò)和檢錯(cuò)(稱為ECC)??梢允褂萌魏芜m當(dāng)?shù)腅CC方案。在一個(gè)示例性實(shí)施例中,使用雙比特檢錯(cuò)以及單比特糾錯(cuò)漢明(Hamming)碼。當(dāng)從閃存18中讀取一頁(yè)數(shù)據(jù)時(shí),控制器部分16對(duì)整個(gè)頁(yè)執(zhí)行ECC。如果沒(méi)有檢測(cè)出差錯(cuò),或者如果檢測(cè)到的差錯(cuò)被糾正,則該頁(yè)被確定為好的。如果檢測(cè)到差錯(cuò)并且該差錯(cuò)不能被糾正,則該頁(yè)被確定為壞的。
用于保證從閃存18讀出的數(shù)據(jù)是正確的另一種手段是使用散列函數(shù)的方案(稱為強(qiáng)檢錯(cuò)(strong error detection))。散列函數(shù)是一種將可變長(zhǎng)度的輸入轉(zhuǎn)換成固定長(zhǎng)度的輸出(稱為散列值)的函數(shù)。在數(shù)學(xué)的限制中,輸入到散列函數(shù)的兩個(gè)不同輸入不會(huì)產(chǎn)生相同的散列值。在一個(gè)示例性實(shí)施例中,使用例如公知的MD5或SHA-1等密碼散列函數(shù)。當(dāng)數(shù)據(jù)被寫入頁(yè)時(shí),該數(shù)據(jù)的至少一部分被散列函數(shù)操作。該操作被稱為散列數(shù)據(jù)。所得的散列值連同該數(shù)據(jù)一起被存儲(chǔ)在該頁(yè)中。散列值被存儲(chǔ)在該頁(yè)的元數(shù)據(jù)部分。散列由控制器部分16執(zhí)行。當(dāng)數(shù)據(jù)從頁(yè)中讀出時(shí),控制器16使用寫數(shù)據(jù)使用的同一散列函數(shù)來(lái)散列數(shù)據(jù)。將所得的散列值與存儲(chǔ)于該頁(yè)的元數(shù)據(jù)部分的散列值作比較。如果兩個(gè)散列值匹配,則數(shù)據(jù)被確定為好的。如果兩個(gè)散列值不同,則數(shù)據(jù)被確定為壞的。
圖4是對(duì)一個(gè)塊中的頁(yè)的示例性指定的框圖。每個(gè)塊中的頁(yè)被指定為或者是數(shù)據(jù)或者是概述頁(yè)(summary page)。如圖4所示,在此處描述的示例性實(shí)施例中,每個(gè)塊的最后一頁(yè)(頁(yè)L)被指定為概述頁(yè)。所有其它頁(yè)(頁(yè)0到L-1)被指定為數(shù)據(jù)頁(yè)。如下所述,在每個(gè)塊中的數(shù)據(jù)頁(yè)中,頁(yè)0被特別對(duì)待。所有數(shù)據(jù)頁(yè)可用于一般的使用,例如讀、寫和擦除。每個(gè)頁(yè)的頁(yè)0包含塊專用信息,并且每個(gè)塊的頁(yè)L包含關(guān)于該塊和該塊中各頁(yè)的概述信息。
圖5是包括凈荷部分24和元數(shù)據(jù)部分26的頁(yè)的示例性數(shù)據(jù)結(jié)構(gòu)的框圖。圖5描繪了用于閃存中除了頁(yè)L之外的所有頁(yè)的示例性數(shù)據(jù)結(jié)構(gòu)。凈荷部分24包括四個(gè)子頁(yè)。每個(gè)子頁(yè)大小為512個(gè)字節(jié)。即,每個(gè)子頁(yè)可以容納512字節(jié)的數(shù)據(jù)。因此,凈荷部分24大小為2048個(gè)字節(jié)(2KB)。元數(shù)據(jù)部分26的大小是64字節(jié)。元數(shù)據(jù)部分26包括壞塊指示符(BBI)部分32、塊序列號(hào)部分36、封印(seal)部分34、糾錯(cuò)與檢錯(cuò)部分38、和大小為18比特的并能夠容納該頁(yè)的LBA的邏輯塊地址(LBA)部分28。元數(shù)據(jù)部分26還包含大小為4比特的有效子頁(yè)部分30。有效子頁(yè)部分30能夠容納4個(gè)比特有效性比特1(VB1)、有效性比特2(VB2)、有效性比特3(VB3)、有效性比特4(VB4),每個(gè)比特指示相應(yīng)的子頁(yè)是有效還是無(wú)效。檢錯(cuò)與糾錯(cuò)部分被分成4段每一段對(duì)應(yīng)于對(duì)頁(yè)的每次可能寫入(實(shí)際上,大多數(shù)頁(yè)僅被寫一次)。當(dāng)讀取的時(shí)候,只有最新近寫入的(例如,最后的)段被應(yīng)用。檢錯(cuò)碼覆蓋頁(yè)數(shù)據(jù)和元數(shù)據(jù)。ECC覆蓋數(shù)據(jù)、元數(shù)據(jù)、和檢錯(cuò)碼。注意,不是從塊中的所有頁(yè)中都能找到圖5描繪的內(nèi)容。例如,如下文描述的,某些內(nèi)容僅在塊的頁(yè)0中找到。
如果一個(gè)塊在制造之后被測(cè)試時(shí)是壞的,則標(biāo)記那個(gè)塊的頁(yè)0或頁(yè)1以便指示該塊是壞的。BBI部分32包括將該塊的狀態(tài)為壞或好的指示。頁(yè)的BBI部分僅與塊的前兩個(gè)頁(yè)相關(guān)。在一個(gè)示例性實(shí)施例中,如果對(duì)這些頁(yè)BBI部分32是全二進(jìn)制1,則該塊是好的。如果該塊是壞的,則BBI部分32的頁(yè)0或頁(yè)1將包含除全二進(jìn)制1之外的數(shù)。該塊序列號(hào)部分36的大小為32比特。每次擦除后第一次寫入一個(gè)塊時(shí),遞增全局序列號(hào)(例如,針對(duì)所有塊),并且該值被放置在此。當(dāng)以及如果寫塊時(shí),相同的塊序列號(hào)將寫入該塊概述頁(yè)的元數(shù)據(jù)中。除了第一個(gè)和最后一個(gè)塊之外,對(duì)其它塊忽略塊序列號(hào)36。
封印部分34容納對(duì)塊的擦除狀態(tài)的指示。該指示符被稱為封印。它僅與塊的頁(yè)0相關(guān)。封印是一種用來(lái)指示一個(gè)塊或是被全部擦除或是沒(méi)有被全部擦除的獨(dú)特的比特模式。當(dāng)一個(gè)被擦除的塊被“封印”時(shí),該獨(dú)特的模式在沒(méi)有ECC或檢錯(cuò)碼38的情況下被寫入該塊的頁(yè)0的元數(shù)據(jù)部分26的封印部分34??梢允褂萌魏芜m當(dāng)?shù)莫?dú)特模式。當(dāng)該塊在被加封印之后被首次寫時(shí),該封印設(shè)置為全二進(jìn)制0。
圖6是概述頁(yè)的示例性數(shù)據(jù)結(jié)構(gòu)的框圖,該概述頁(yè)包括所有邏輯塊地址(LBA)部分與有效性比特部分40以及等同于對(duì)數(shù)據(jù)頁(yè)所描述的(例如,圖5)元數(shù)據(jù)部分26。當(dāng)一個(gè)塊的倒數(shù)第二頁(yè)(頁(yè)L-1)被寫時(shí),最后一頁(yè)(頁(yè)L)也被寫有與該塊相關(guān)的概述信息。用于塊中每個(gè)頁(yè)的LBA以及用于塊中每個(gè)頁(yè)的有效性比特被寫入所有LBA以及有效性比特部分40。所有LBA以及有效性比特部分40的大小為189比特,因此對(duì)于一個(gè)塊中的63個(gè)數(shù)據(jù)頁(yè)中的每一頁(yè)容納最多每頁(yè)3字節(jié)。塊序列號(hào)被寫入元數(shù)據(jù)26的塊序列號(hào)部分36。塊序列號(hào)被用來(lái)在上電期間構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
閃存根據(jù)在易失性存儲(chǔ)器中構(gòu)造的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)來(lái)管理。存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)在每次施加電源時(shí)被重新生成。在電源故障期間,可以預(yù)見(jiàn),在閃存設(shè)備中存在足夠的能量保存(例如,通過(guò)電容)以便完成電源故障時(shí)可能在進(jìn)行中的任何寫操作。不期望的是,在電源故障之后開(kāi)始任何新的操作直至重新施加電源。該存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)在此處被示為表。然而,要強(qiáng)調(diào)的是,此處所示出的圖和圖示是示例性的,并且不意在暗示特定配置和/或?qū)崿F(xiàn)。
圖7是被描述為將邏輯塊地址(LBA)與閃存頁(yè)地址相關(guān)的表,即表I的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示??梢灶A(yù)見(jiàn),LBA是用來(lái)對(duì)表I進(jìn)行尋址的索引,但是為清楚起見(jiàn),被描述為表I的部分。LBA是訪問(wèn)設(shè)備(例如,通過(guò)USB連接的計(jì)算機(jī)、數(shù)碼照相機(jī)或MP3播放器)用來(lái)訪問(wèn)存儲(chǔ)器而使用的地址。訪問(wèn)設(shè)備用4KB段經(jīng)由USB對(duì)存儲(chǔ)器進(jìn)行尋址是不常見(jiàn)的。然而,閃存可用2KB段來(lái)尋址。由表I表示的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)將4k可尋址LBA映射到2K可尋址閃存頁(yè)地址。在一個(gè)示例性實(shí)施例中,表I包括256K(256×1024)行。表I按照LBA來(lái)索引。每行包括一個(gè)LBA和一個(gè)對(duì)應(yīng)的閃存頁(yè)地址。每行還包含用于每個(gè)閃存頁(yè)的相應(yīng)的512KB子頁(yè)的有效性比特VB1、VB2、VB3和VB4。
另一個(gè)示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)作為表II在圖8中示出。表II指示哪個(gè)塊是空閑的??臻e塊是已經(jīng)被擦除并且可用來(lái)寫入的塊。在一個(gè)示例性實(shí)施例中,表II不包括塊0。閃存設(shè)備的制造商通常保證塊0整個(gè)都是好的。通常還保證塊0可以正確地被寫和擦除最多1000次。在一個(gè)示例性實(shí)施例中,塊0不被用來(lái)對(duì)數(shù)據(jù)的一般的讀和寫操作。在一個(gè)示例性實(shí)施例中,空閑塊由空閑塊列中針對(duì)每個(gè)相應(yīng)塊的單個(gè)比特指示。
圖10是作為表III示出的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示。表III指示每個(gè)塊中的有效頁(yè)個(gè)數(shù)并指示塊是否被丟棄。如果塊被丟棄,則在表III的空閑指示符列中存儲(chǔ)預(yù)定的比特模式??梢允褂萌魏芜m當(dāng)?shù)谋忍啬J絹?lái)指示塊被丟棄。如果一個(gè)頁(yè)包含可使用的內(nèi)容(數(shù)據(jù)),則該頁(yè)被確定為有效。例如,如果一個(gè)頁(yè)(舊頁(yè))的內(nèi)容被寫入到另一個(gè)頁(yè)(新頁(yè))中,則該舊頁(yè)被確定為無(wú)效。該新頁(yè)被確定為有效。由于每個(gè)塊包含63個(gè)數(shù)據(jù)頁(yè),所以指示一個(gè)塊中的有效頁(yè)個(gè)數(shù)的值在0到63之間。在一個(gè)示例性實(shí)施例中,當(dāng)需要一個(gè)新塊時(shí),具有最少個(gè)數(shù)的有效頁(yè)的塊被確定為用于擦除的候選對(duì)象。擦除具有最少個(gè)數(shù)的有效頁(yè)的塊在被擦除后將恢復(fù)最多的頁(yè)。表III還可以被用來(lái)確定一個(gè)塊是否是用于擦除的候選對(duì)象。在一個(gè)示例性實(shí)施例中,如果一個(gè)塊包含任何有效頁(yè),則它不是用于擦除的候選對(duì)象。可以預(yù)見(jiàn),將保留某些已擦除的塊。被保留的已擦除塊可以用來(lái)處理長(zhǎng)寫入,而不需要在一次傳輸期間壓縮和擦除塊。另外,被保留的已擦除塊可以用來(lái)避免當(dāng)閃存設(shè)備接近滿的時(shí)候快速進(jìn)行塊重復(fù)使用。被保留的已擦除塊還可以被用來(lái)處理在閃存設(shè)備的生命周期內(nèi)變壞的塊。
圖10是作為表IV示出的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示。表IV指示活動(dòng)塊和活動(dòng)頁(yè)。在任何時(shí)候,存在最多一個(gè)活動(dòng)塊和在該活動(dòng)塊中的一個(gè)活動(dòng)頁(yè)。活動(dòng)塊是當(dāng)前正被訪問(wèn)的塊。活動(dòng)頁(yè)是在該活動(dòng)塊中第一個(gè)被擦除的頁(yè)?;顒?dòng)頁(yè)是響應(yīng)于寫命令接下來(lái)將要被寫的頁(yè)。盡管作為表IV被示出,但是可以預(yù)見(jiàn),在一個(gè)示例性實(shí)施例中,活動(dòng)塊和活動(dòng)頁(yè)可以被實(shí)現(xiàn)為在上電掃描期間被初始化的動(dòng)態(tài)運(yùn)行時(shí)變量。
圖11是作為表V示出的示例性存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的圖示。表V指示用于每個(gè)塊的塊序列號(hào)。當(dāng)構(gòu)造其它存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)(例如表I-IV)時(shí),使用表V。當(dāng)制造出閃存設(shè)備后,它沒(méi)有被寫過(guò)的塊。對(duì)于每個(gè)隨后的塊擦除,邏輯序列號(hào)遞增并被寫入到新寫的塊的頁(yè)0的元數(shù)據(jù)中。如果或者當(dāng)該頁(yè)被寫時(shí),序列號(hào)也被相同地寫入到塊的概述頁(yè)中。當(dāng)上電掃描檢測(cè)出兩個(gè)頁(yè)聲稱映射到相同的LBA時(shí),使用序列號(hào)。該沖突主要通過(guò)選擇該塊中具有最大序列號(hào)的頁(yè)來(lái)解決。如果存在多個(gè)這樣的頁(yè)(在相同的塊中是必然的),則選擇具有最大頁(yè)號(hào)的那個(gè)頁(yè)。表V包括在掃描中遇到的所有塊的塊序列號(hào)。這允許對(duì)給定LBA的任何先前發(fā)現(xiàn)的候選對(duì)象的塊的個(gè)數(shù)的確定,以便作上述比較。在一個(gè)示例性實(shí)施例中,在初始化后,丟棄表V。
圖12是用于上電時(shí)掃描塊的示例性過(guò)程的流程圖。對(duì)每個(gè)塊進(jìn)行掃描作為構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的過(guò)程的一部分。當(dāng)施加電源時(shí),(例如,由控制器部分16)掃描閃存設(shè)備(例如,閃存設(shè)備12)的閃存(例如,閃存18)來(lái)獲得構(gòu)造存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)(例如,在易失性存儲(chǔ)部分14中)所需要的信息。在一個(gè)示例性實(shí)施例中,獲得關(guān)于閃存的塊的信息,并獲得關(guān)于沒(méi)有被丟棄的那些塊的頁(yè)的信息。當(dāng)施加電源時(shí),或適當(dāng)?shù)卦诖酥螅谝粋€(gè)實(shí)施例中,存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)構(gòu)造過(guò)程始于掃描塊的概述頁(yè),并然后,適當(dāng)?shù)兀瑨呙鑹K中其它頁(yè)。要強(qiáng)調(diào)的是,這個(gè)順序是示例性的,并且可以使用掃描塊和頁(yè)的任何適當(dāng)?shù)捻樞颉?br>
當(dāng)施加電源時(shí),或適當(dāng)?shù)卦诖酥螅瑨呙栝W存的塊并且創(chuàng)建/填充存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。掃描每個(gè)塊來(lái)確定該塊的概述頁(yè)是否是好的(步驟46)、該塊是否被加封印(步驟48)、該塊是否有缺陷(步驟50)以及該塊是否被擦除(步驟52)。根據(jù)這些確定的每一個(gè)的結(jié)果來(lái)創(chuàng)建/更新適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。
在步驟44中,該過(guò)程前進(jìn)到塊1。塊0被跳過(guò)。在步驟46處,確定該塊的概述頁(yè)是否是好的。如果確定該概述頁(yè)是好的(步驟46),則在步驟54處掃描該概述頁(yè)。在一個(gè)示例性實(shí)施例中,根據(jù)圖13所示的示例性流程圖掃描該概述頁(yè)。如圖13的步驟78處所示,對(duì)概述頁(yè)的掃描在頁(yè)0的入口開(kāi)始。在步驟80處,使用概述頁(yè)的入口來(lái)填充表I。在一個(gè)示例性實(shí)施例中,根據(jù)圖15所示的示例性過(guò)程來(lái)填充表I。在步驟114處,確定表I中是否存在用于概述頁(yè)中的LBA入口的入口。如果確定LBA入口不存在(步驟114),則在步驟120處用概述頁(yè)中的LBA入口來(lái)更新表I。這包括映射諸如塊號(hào)、頁(yè)索引以及有效性比特信息等所有關(guān)于LBA的信息。如果確定表I中存在用于概述頁(yè)中的LBA入口的LBA入口(步驟114),則在步驟116處確定相關(guān)聯(lián)的閃存塊的塊序列號(hào)是否小于或等于表V所指示的塊序列號(hào)。如果是,則在步驟120處填充表I。如果否,則如步驟118處所示的,該過(guò)程前進(jìn)至圖13的步驟80。
在步驟84處,確定在該塊中是否存在更多的頁(yè)。如果存在更多的頁(yè),則在步驟82處,該過(guò)程前進(jìn)至下一頁(yè)。該過(guò)程前進(jìn)至步驟80并且根據(jù)上述圖15所示的示例性流程圖來(lái)填充表I。如果確定沒(méi)有更多頁(yè)(步驟84),則如步驟86處所示,該過(guò)程前進(jìn)至圖12的步驟54。在步驟68處,確定是否存在更多要掃描的塊。如果確定存在更多要掃描的塊(步驟68),則在步驟66處該過(guò)程前進(jìn)至下一個(gè)塊。在步驟46處,確定該塊的概述頁(yè)是否是好的。如果概述頁(yè)是好的,則如上所述的,該過(guò)程經(jīng)過(guò)步驟54、步驟68和66,直至沒(méi)有更多的塊剩下。
如果確定該塊的概述頁(yè)不是好的(步驟46),則在步驟48處確定該塊是否被加封印。檢查頁(yè)0的元數(shù)據(jù)部分的封印部分來(lái)確定該塊是否被加封印(見(jiàn)圖5)。如果檢測(cè)到封印的獨(dú)特模式,則該塊被加封印。如果該塊被加封印,則在步驟56處,將該塊放置到空閑列表上。通過(guò)更新例如表II和表III(見(jiàn)圖8和圖9)等指示每個(gè)塊的空閑狀態(tài)的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)來(lái)將該塊放置到空閑列表上。如果該塊沒(méi)有被加封印(步驟48),則在步驟50處確定該塊是否是有缺陷的。檢查頁(yè)0和1的壞塊指示符(BBI)部分(見(jiàn)圖5)來(lái)確定該塊是否有缺陷。在一個(gè)示例性實(shí)施例中,如果頁(yè)0和1的BBI部分包含全二進(jìn)制1并且該塊在所有其它情況下都是有缺陷的,則該塊沒(méi)有缺陷。如果該塊是有缺陷的(步驟50),則放棄該塊并相應(yīng)地更新例如表I(見(jiàn)圖8)等指示可用塊的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
如果確定該塊沒(méi)有缺陷(步驟50),則在步驟52處確定該塊是否被擦除。如果一個(gè)塊中的每個(gè)比特為1,則認(rèn)為該塊被擦除過(guò)。如果確定該塊被擦除(步驟52),則在步驟60處,對(duì)該塊加封印,并且在步驟64處,將該塊放置到空閑列表上。通過(guò)更新諸如表II和表III(見(jiàn)圖8和圖9)等指示每個(gè)塊的空閑狀態(tài)的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)來(lái)將該塊放置到空閑列表上(步驟64)。如果確定該塊沒(méi)有被擦除(步驟52),則在步驟62處掃描該塊的頁(yè)。在一個(gè)示例性實(shí)施例中,根據(jù)圖14中所示的示例性流程圖掃描該塊。
在步驟88處,塊掃描始于頁(yè)0。在步驟90處,確定該頁(yè)是否是好的。如果ECC和強(qiáng)檢錯(cuò)算法沒(méi)有發(fā)現(xiàn)錯(cuò)誤,則該頁(yè)被確定為好的。如果確定該頁(yè)不是好的(步驟90),則在步驟96處確定該頁(yè)是否被擦除(即包含全1)。如果該頁(yè)沒(méi)有被擦除(步驟96),則在步驟110處丟棄該塊,并且,如步驟112處所示,該過(guò)程前進(jìn)至圖12的步驟62。如果該頁(yè)被擦除(步驟96),則在步驟102處更新活動(dòng)塊和活動(dòng)頁(yè)指示符。在一個(gè)示例性實(shí)施例中,根據(jù)圖16所示的示例性過(guò)程更新活動(dòng)塊和活動(dòng)頁(yè)指示符。如果一個(gè)頁(yè)在具有最大塊序列號(hào)的并且還沒(méi)有被丟棄的塊中是第一個(gè)被擦除的頁(yè),則該頁(yè)被指定為活動(dòng)頁(yè)。如果活動(dòng)塊已經(jīng)被指定,則如下所述,從活動(dòng)塊中選擇一個(gè)活動(dòng)頁(yè)。然而,活動(dòng)塊不存在是可能的。例如,這可以是塊被填滿之后但在下一個(gè)寫請(qǐng)求到達(dá)之前或在概述頁(yè)被寫之前的電源故障的結(jié)果。在任何一種情況下,最后被分配的塊是完全滿的,并且不存在活動(dòng)頁(yè)。
在步驟120中,確定是否存在活動(dòng)頁(yè)。如果不存在活動(dòng)頁(yè)(步驟120),則在步驟126處,將當(dāng)前塊和頁(yè)作為預(yù)期的活動(dòng)塊和活動(dòng)頁(yè)來(lái)存儲(chǔ)。如果存在活動(dòng)頁(yè)(步驟120),則在步驟122處確定該活動(dòng)頁(yè)的塊序列號(hào)是否小于當(dāng)前塊的序列號(hào)(例如由表V確定)。如果是,則在步驟126處,將當(dāng)前塊和頁(yè)作為預(yù)期的活動(dòng)塊和活動(dòng)頁(yè)來(lái)存儲(chǔ)。如果否,則如步驟124處所示,該過(guò)程前進(jìn)至圖14的步驟102。在步驟106處確定該塊的最后一頁(yè)是否已被掃描。如果存在更多要掃描的頁(yè),則在步驟104處訪問(wèn)下一頁(yè)。該過(guò)程前進(jìn)至步驟90,并且,如果該頁(yè)是好的,則如上所述,該過(guò)程經(jīng)過(guò)步驟96和步驟102。
如果在步驟90處確定該頁(yè)不是好的,則在步驟92處確定當(dāng)前頁(yè)是否是頁(yè)0。如果當(dāng)前頁(yè)是頁(yè)0,則在步驟98處,將塊序列號(hào)記錄在適當(dāng)?shù)拇鎯?chǔ)器管理數(shù)據(jù)結(jié)構(gòu)中。在一個(gè)示例性實(shí)施例中,將塊序列號(hào)記錄在表V中。在步驟100處用好的LBA來(lái)更新適當(dāng)?shù)拇鎯?chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。在一個(gè)示例性實(shí)施例中,如上所述,根據(jù)圖16所示的示例性過(guò)程來(lái)更新表I。在步驟106處確定該塊的最后一頁(yè)是否已被掃描。如果存在更多要掃描的頁(yè),則在步驟104處,檢索下一頁(yè),并且如上所述,該過(guò)程前進(jìn)至步驟90。
如果確定當(dāng)前頁(yè)不是頁(yè)0(步驟92),則在步驟94處確定前一頁(yè)是否被擦除。如果確定前一頁(yè)被擦除(步驟94),則在步驟110處丟棄該塊,并且如步驟112處所示,該過(guò)程前進(jìn)至圖12的步驟62。如果確定前一頁(yè)沒(méi)有被擦除(步驟94),則在步驟100處以好的LBA來(lái)更新適當(dāng)?shù)拇鎯?chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。在一個(gè)示例性實(shí)施例中,如上所述,根據(jù)如圖15所示的示例性過(guò)程來(lái)更新表I。在步驟106處確定該塊的最后一頁(yè)是否已被掃描。如果存在更多要掃描的頁(yè),則在步驟104處訪問(wèn)下一個(gè)頁(yè),并且如上所述,該過(guò)程前進(jìn)至步驟90。
再次參考圖12,當(dāng)步驟54、步驟58、步驟64或步驟62完成時(shí),在步驟68處確定是否存在更多要被掃描的塊。如果存在更多要被掃描的塊,則如上所述,該過(guò)程前進(jìn)至步驟66并繼續(xù)。如果確定不存在更多要掃描的塊(步驟68),則當(dāng)前塊序列號(hào)被設(shè)置成最大塊序列號(hào),排除了被丟棄的塊。更新適當(dāng)?shù)拇鎯?chǔ)器管理數(shù)據(jù)結(jié)構(gòu)(例如,表III以及表V)來(lái)反映當(dāng)前塊的序列號(hào)的設(shè)置。在步驟72處,確定當(dāng)前活動(dòng)塊的序列號(hào)是否小于最大塊序列號(hào)。如果否,則在步驟76處完成上電過(guò)程。如果是,則在步驟74處,將活動(dòng)塊設(shè)置為零。即,設(shè)置活動(dòng)塊指示符以指示活動(dòng)塊不存在。
在一個(gè)示例性實(shí)施例中,試圖在閃存的所有塊中均勻分布擦除。該過(guò)程被稱為損耗均衡(wear leveling)。根據(jù)一個(gè)示例性損耗均衡過(guò)程,表示一個(gè)塊被擦除的次數(shù)的數(shù)(擦除計(jì)數(shù))被寫入到每個(gè)塊的概述頁(yè)的元數(shù)據(jù)部分。在一個(gè)示例性實(shí)施例中,當(dāng)塊被加封印時(shí),將擦除計(jì)數(shù)寫入到概述頁(yè)。每個(gè)塊的擦除計(jì)數(shù)被維持在存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)中并且在上電期間的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)構(gòu)造期間從每個(gè)塊的概述頁(yè)中恢復(fù)。
如上所述,盡管結(jié)合各種計(jì)算設(shè)備描述了存儲(chǔ)器管理的各示例性實(shí)施例,但基本的概念可以應(yīng)用于能夠管理存儲(chǔ)器的任何計(jì)算設(shè)備或系統(tǒng)。
可以結(jié)合硬件或軟件,或者在適當(dāng)時(shí)使用兩者的組合來(lái)實(shí)現(xiàn)此處所描述的各種技術(shù)。因此,用于管理存儲(chǔ)器或其某些方面或其部分的方法和裝置可以采用包含在諸如軟盤、CD-ROM、硬盤驅(qū)動(dòng)器、或任何其它機(jī)器可讀存儲(chǔ)介質(zhì)等有形介質(zhì)中的程序代碼的形式,其中,當(dāng)程序代碼被加載到諸如計(jì)算機(jī)等機(jī)器中并且由其執(zhí)行時(shí),該機(jī)器成為用于執(zhí)行存儲(chǔ)器管理的裝置。在可編程計(jì)算機(jī)上執(zhí)行程序代碼的情況下,計(jì)算設(shè)備一般將包括處理器、處理器可讀的存儲(chǔ)介質(zhì)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備、和至少一個(gè)輸出設(shè)備。如果需要,程序可以用匯編語(yǔ)言或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)。在任何情況下,語(yǔ)言可以是已編譯的或已解釋的語(yǔ)言,并且與硬件實(shí)現(xiàn)結(jié)合。
用于存儲(chǔ)器管理的方法和裝置還可以通過(guò)以程序代碼形式體現(xiàn)的通信來(lái)執(zhí)行,該程序代碼通過(guò)諸如電配線或電纜、通過(guò)光纖、或通過(guò)任何其它形式的傳輸?shù)葌鬏斀橘|(zhì)來(lái)傳輸,其中,當(dāng)諸如EPROM、門陣列、可編程邏輯器件(PLD)、客戶機(jī)計(jì)算機(jī)等機(jī)器接收、加載、執(zhí)行該程序代碼時(shí),該機(jī)器成為用于執(zhí)行本發(fā)明的裝置。當(dāng)在通用處理器上實(shí)現(xiàn)時(shí),該程序代碼結(jié)合該處理器來(lái)提供用于行使本發(fā)明功能的獨(dú)特裝置。此外,結(jié)合本發(fā)明使用的任何存儲(chǔ)技術(shù)可以總是硬件與軟件的組合。
盡管結(jié)合各圖的示例性實(shí)施例描述了存儲(chǔ)器管理,但是將理解,可以使用其它類似的實(shí)施例或者對(duì)所描述的實(shí)施例作修改或增加來(lái)執(zhí)行存儲(chǔ)器管理的相同功能,而不背離存儲(chǔ)器管理的功能。因此,此處所描述的存儲(chǔ)器管理不限于任何單個(gè)實(shí)施例,相反,在寬度和范圍上應(yīng)該根據(jù)所附的權(quán)利要求進(jìn)行解釋。
權(quán)利要求
1.一種用于管理存儲(chǔ)器的方法,所述方法包括
根據(jù)一存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)來(lái)訪問(wèn)存儲(chǔ)器,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)包括與所述存儲(chǔ)器相關(guān)的信息;
用與存儲(chǔ)器狀態(tài)相關(guān)的信息動(dòng)態(tài)地更新所述存儲(chǔ)器的指定位置;以及
用與存儲(chǔ)器狀態(tài)相關(guān)的信息動(dòng)態(tài)地更新所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
2.如權(quán)利要求1所述的方法,其特征在于,所述方法還包括
根據(jù)存儲(chǔ)在所述存儲(chǔ)器的所述指定位置中的所述信息來(lái)創(chuàng)建所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
3.如權(quán)利要求2所述的方法,其特征在于
所述存儲(chǔ)器包括閃存;
所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)被存儲(chǔ)在易失性存儲(chǔ)器中;以及
所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)是在每次所述所述易失性存儲(chǔ)器掉電后電源被施加于所述易失性存儲(chǔ)器時(shí)構(gòu)造的。
4.如權(quán)利要求1所述的方法,其特征在于,所述存儲(chǔ)器包括多個(gè)塊,每個(gè)塊包括多個(gè)頁(yè),其中,所述存儲(chǔ)器中的所述指定位置包括
每個(gè)塊中的第一指定頁(yè),每個(gè)相應(yīng)塊的每個(gè)第一指定頁(yè)指示
一相應(yīng)塊的狀態(tài)是好的或壞的中的一個(gè);以及
一相應(yīng)塊是被擦除和沒(méi)有被擦除中的一個(gè);以及
每個(gè)塊中的第二指定頁(yè),每個(gè)相應(yīng)塊的每個(gè)第二指定頁(yè)指示
一邏輯塊地址與一相應(yīng)塊的每個(gè)頁(yè)之間的關(guān)系;
一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài);以及
指示所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào)。
5.如權(quán)利要求4所述的方法,其特征在于,所述方法還包括構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu),所述構(gòu)造動(dòng)作包括
讀取每個(gè)塊中的每個(gè)第一指定頁(yè);
根據(jù)包含在每個(gè)被讀取的第一指定頁(yè)中的信息構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu);
讀取每個(gè)塊中的每個(gè)第二指定頁(yè);以及
根據(jù)包含在每個(gè)被讀取的第二指定頁(yè)中的信息構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
6.如權(quán)利要求5所述的方法,其特征在于
所述第二指定頁(yè)是在試圖讀取所述第二指定頁(yè)之前被讀取的;以及
所述第一指定頁(yè)僅在讀取所述第二指定頁(yè)時(shí)發(fā)生錯(cuò)誤時(shí)被讀取。
7.如權(quán)利要求5所述的方法,其特征在于,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)是在每次所述存儲(chǔ)器掉電后電源被施加于所述存儲(chǔ)器時(shí)被重新構(gòu)造的。
8.如權(quán)利要求5所述的方法,其特征在于,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)指示所述存儲(chǔ)器的一活動(dòng)頁(yè),其中,活動(dòng)頁(yè)指示響應(yīng)于寫命令下一個(gè)要被寫的頁(yè)。
9.如權(quán)利要求8所述的方法,其特征在于,所述方法還包括
當(dāng)對(duì)所述活動(dòng)頁(yè)寫入時(shí),更新所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)以便指示下一個(gè)活動(dòng)頁(yè)的位置,其中所述下一個(gè)活動(dòng)頁(yè)包括在以下塊之一中的具有最低頁(yè)地址的已擦除頁(yè),所述塊包括
當(dāng)前正被訪問(wèn)的塊;以及
如果當(dāng)前被訪問(wèn)的所述塊是滿的,則是下一個(gè)可用塊。
10.如權(quán)利要求1所述的方法,其特征在于,所述存儲(chǔ)器包括多個(gè)塊,并且每個(gè)塊包括多個(gè)頁(yè),其中所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)包括下列中的至少一個(gè)
指示邏輯塊地址與所述存儲(chǔ)器的頁(yè)地址之間的關(guān)系以及一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài)的數(shù)據(jù)結(jié)構(gòu);
指示可用于寫入的已擦除塊的數(shù)據(jù)結(jié)構(gòu);
指示每個(gè)塊中的有效頁(yè)的個(gè)數(shù)的數(shù)據(jù)結(jié)構(gòu);
指示響應(yīng)于寫命令下一個(gè)要被寫的頁(yè)的數(shù)據(jù)結(jié)構(gòu);以及
指示指示了所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào)的數(shù)據(jù)結(jié)構(gòu)。
11.一種用于管理存儲(chǔ)器的裝置,所述裝置包括
用于包括用于管理第二存儲(chǔ)器部分的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的第一存儲(chǔ)器部分;
包括多個(gè)塊的所述第二存儲(chǔ)器部分,每個(gè)塊包括多個(gè)頁(yè);以及
用于控制對(duì)所述第二存儲(chǔ)器部分的訪問(wèn)以及構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)的控制器部分。
12.如權(quán)利要求11所述的裝置,其特征在于
所述第一存儲(chǔ)器部分包括易失性存儲(chǔ)器;以及
所述第二存儲(chǔ)器部分包括非易失性存儲(chǔ)器。
13.如權(quán)利要求11所述的裝置,其特征在于,所述第二存儲(chǔ)器部分包括閃存。
14.如權(quán)利要求11所述的裝置,其特征在于,所述第二存儲(chǔ)器部分包括
每個(gè)塊中的第一指定頁(yè),每個(gè)相應(yīng)塊的每個(gè)第一指定頁(yè)指示
一相應(yīng)塊的狀態(tài)是好的或壞的中的一個(gè);以及
一相應(yīng)塊是被擦除和沒(méi)有被擦除中的一個(gè);以及
每個(gè)塊中的第二指定頁(yè),每個(gè)相應(yīng)塊的每個(gè)第二指定頁(yè)指示
一邏輯塊地址與一相應(yīng)塊的每個(gè)頁(yè)之間的關(guān)聯(lián);
一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài);以及
指示所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào)。
15.如權(quán)利要求14所述的裝置,其特征在于,所述控制器部分在每次所述第一存儲(chǔ)器部分掉電后電源被施加于所述第一存儲(chǔ)器部分時(shí),根據(jù)包含在所述第一和第二指定頁(yè)中的信息,在所述第一存儲(chǔ)器部分中構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
16.如權(quán)利要求11所述的裝置,其特征在于,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)包括以下的至少一個(gè)
指示邏輯塊地址與所述第二存儲(chǔ)器部分的頁(yè)地址之間的關(guān)系以及一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài)的數(shù)據(jù)結(jié)構(gòu);
指示可用于寫入的已擦除塊的數(shù)據(jù)結(jié)構(gòu);
指示每個(gè)塊中的有效頁(yè)的個(gè)數(shù)的數(shù)據(jù)結(jié)構(gòu);
指示響應(yīng)于寫命令下一個(gè)要被寫的頁(yè)的數(shù)據(jù)結(jié)構(gòu);以及
指示指示了所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào)的數(shù)據(jù)結(jié)構(gòu)。
17.一種具有用于執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述動(dòng)作包括
根據(jù)第二存儲(chǔ)器中的指定位置中存儲(chǔ)的信息在第一存儲(chǔ)器中創(chuàng)建一存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu),其中所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)是在每次所述所述第一存儲(chǔ)器掉電后電源被施加于所述第一存儲(chǔ)器時(shí)創(chuàng)建的;
根據(jù)所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)訪問(wèn)所述第二存儲(chǔ)器,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)包括與所述第二存儲(chǔ)器相關(guān)的信息;
用與第二存儲(chǔ)器狀態(tài)相關(guān)的信息動(dòng)態(tài)地更新所述第二存儲(chǔ)器的指定位置;以及
用與第二存儲(chǔ)器狀態(tài)相關(guān)的信息動(dòng)態(tài)地更新所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
18.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第二存儲(chǔ)器包括多個(gè)塊,并且每個(gè)塊包括多個(gè)頁(yè),所述計(jì)算機(jī)可讀介質(zhì)還具有用于執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令
讀取每個(gè)相應(yīng)塊中的第一指定頁(yè),其中每個(gè)相應(yīng)塊的第一指定頁(yè)指示
一相應(yīng)塊的狀態(tài)是好的或壞的中的一個(gè);以及
一相應(yīng)塊是被擦除和沒(méi)有被擦除中的一個(gè);
根據(jù)包含在每個(gè)被讀取的第一指定頁(yè)中的信息構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu);
讀取每個(gè)相應(yīng)塊中的第二指定頁(yè),其中每個(gè)相應(yīng)塊的第二指定頁(yè)指示
一邏輯塊地址與一相應(yīng)塊的每個(gè)頁(yè)之間的關(guān)系;
一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài);以及
指示所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào),以及
根據(jù)包含在每個(gè)被讀取的第二指定頁(yè)中的信息來(lái)構(gòu)造所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。
19.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)指示所述第二存儲(chǔ)器的活動(dòng)頁(yè),所述活動(dòng)頁(yè)指示響應(yīng)于寫命令下一個(gè)要被寫的頁(yè),所述計(jì)算機(jī)可讀介質(zhì)還具有用于執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令
當(dāng)向所述活動(dòng)頁(yè)寫入的時(shí)候,更新所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)以便指示下一個(gè)活動(dòng)頁(yè)的位置,其中所述下一個(gè)活動(dòng)頁(yè)包括在以下塊之一中的具有最低頁(yè)地址的已擦除頁(yè),所述塊包括
當(dāng)前正被訪問(wèn)的塊;以及
如果所述當(dāng)前正被訪問(wèn)的塊是滿的,則是下一個(gè)可用塊。
20.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第二存儲(chǔ)器包括多個(gè)塊,并且每個(gè)塊包括多個(gè)頁(yè),其中,所述存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)包括以下中的至少一個(gè)
指示邏輯塊地址與所述第二存儲(chǔ)器的頁(yè)地址之間的關(guān)系以及一相應(yīng)塊的每個(gè)頁(yè)的各部分的有效性狀態(tài)的數(shù)據(jù)結(jié)構(gòu);
指示可用于寫入的已擦除塊的數(shù)據(jù)結(jié)構(gòu);
指示每個(gè)塊中的有效頁(yè)的個(gè)數(shù)的數(shù)據(jù)結(jié)構(gòu);
指示響應(yīng)于寫命令下一個(gè)要被寫的頁(yè)的數(shù)據(jù)結(jié)構(gòu);以及
指示指示了所述存儲(chǔ)器中的塊被擦除的次數(shù)的塊序列號(hào)的數(shù)據(jù)結(jié)構(gòu)。
全文摘要
采用駐留在閃存設(shè)備的易失性存儲(chǔ)器中的存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)來(lái)管理閃存。每次電源被施加到存儲(chǔ)器設(shè)備時(shí),創(chuàng)建并更新該存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。在對(duì)閃存的寫操作期間,更新閃存中的特定位置來(lái)反映閃存的當(dāng)前狀態(tài)。當(dāng)電源被中斷時(shí),在再次施加電源之后重新創(chuàng)建該存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。掃描該閃存,并采用從閃存中的特定位置獲得的信息來(lái)構(gòu)造該存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)。不需要壞塊表。管理閃存以便提供相對(duì)好的隨機(jī)寫性能并適應(yīng)電源中斷。應(yīng)用包括對(duì)用于通用計(jì)算設(shè)備的電源可能隨時(shí)出故障(例如由于被拔出)的閃存的使用。
文檔編號(hào)G06F12/00GK101283335SQ200680037331
公開(kāi)日2008年10月8日 申請(qǐng)日期2006年10月6日 優(yōu)先權(quán)日2005年10月7日
發(fā)明者A·比瑞爾, C·塔科, E·P·沃伯, M·A·伊薩德 申請(qǐng)人:微軟公司