專利名稱:閃速存儲器中的直接文件數(shù)據(jù)編程及刪除的制作方法
閃速存儲器中的直接文件數(shù)據(jù)編程及刪除技術(shù)領(lǐng)域本申請案涉及例如半導(dǎo)體閃速存儲器等可再編程非易失性存儲器系統(tǒng)的操作,且 更具體而言,涉及對主機(jī)裝置與存儲器的間接口的管理。本文所提及的所有專利、專 利申請案、論文及其它公開案的全部內(nèi)容均以引用方式并入本文中。
背景技術(shù):
在早期的一代商業(yè)閃速存儲器系統(tǒng)中,將一存儲單元矩形陣列劃分為大量單元群 組,其中每一單元群組均存儲一標(biāo)準(zhǔn)磁盤驅(qū)動器扇區(qū)的數(shù)據(jù)量,即512個字節(jié)。通常 在每一群組中還包含額外量的數(shù)據(jù)(例如16個字節(jié)),以存儲一錯誤修正碼(ECC)及 可能其他與用戶數(shù)據(jù)及與存儲該用戶數(shù)據(jù)的存儲單元群組有關(guān)的開銷數(shù)據(jù)。每一此類 群組中的存儲單元均為可一同擦除的最小數(shù)量的存儲單元。換句話說,擦除單位實(shí)際 上是存儲有一個數(shù)據(jù)扇區(qū)及所包含的任何開銷數(shù)據(jù)的存儲單元數(shù)量。此種類型存儲器 系統(tǒng)的實(shí)例闡述于美國專利第5,602,987號及第6,426,893號中。閃速存儲器的一特性 是在以數(shù)據(jù)對存儲單元再編程之前需要擦除存儲單元。閃速存儲器系統(tǒng)最常以存儲卡或閃速驅(qū)動器的形式來提供,其以可抽換方式連接 各種各樣的主機(jī)(例如個人計算機(jī)、照相機(jī)或類似裝置),但也可嵌于此類主機(jī)系統(tǒng)中。在傳統(tǒng)系統(tǒng)中,當(dāng)將數(shù)據(jù)寫入至存儲器時,主機(jī)通常在存儲器系統(tǒng)中一連續(xù)的虛擬地 址空間內(nèi)為扇區(qū)、群集或其他數(shù)據(jù)單位指配唯一的邏輯地址。如磁盤操作系統(tǒng)(DOS) 一樣,主機(jī)將數(shù)據(jù)寫入存儲器系統(tǒng)的邏輯地址空間內(nèi)的地址中并自所述地址中讀取數(shù) 據(jù)。該存儲器系統(tǒng)內(nèi)的控制器將自主機(jī)接收的邏輯地址轉(zhuǎn)換為存儲器陣列內(nèi)實(shí)際存儲 有數(shù)據(jù)的物理地址,并隨后記錄所述地址轉(zhuǎn)換。存儲器系統(tǒng)的數(shù)據(jù)存儲容量至少與在 為該存儲器系統(tǒng)界定的整個邏輯地址空間內(nèi)可尋址的數(shù)據(jù)量一樣大。在隨后的幾代閃速存儲器系統(tǒng)中,擦除單位的大小增大至由足以存儲多個數(shù)據(jù)扇 區(qū)的存儲單元形成的區(qū)塊。盡管存儲器系統(tǒng)所連接到的主機(jī)系統(tǒng)可按小的最小單位(例如扇區(qū))對數(shù)據(jù)進(jìn)行編程及讀取,然而在閃速存儲器的單個擦除單位中要存儲大量的 扇區(qū)。隨著主機(jī)對邏輯數(shù)據(jù)扇區(qū)的更新或替換,區(qū)塊內(nèi)的某些數(shù)據(jù)扇區(qū)常常會變得過 時。由于必須將整個區(qū)塊擦除才能覆寫存儲于所述區(qū)塊中的任何數(shù)據(jù),因而新的或更 新后的數(shù)據(jù)通常存儲于另一已得到擦除并具有用于所述數(shù)據(jù)的剩余容量的區(qū)塊中。該 過程使原始區(qū)塊帶有過時數(shù)據(jù),該等過時數(shù)據(jù)會占用存儲器內(nèi)的寶貴空間。但是,如 果其中剩余任何有效數(shù)據(jù),則該區(qū)塊便不能被擦除。 因此,為更好地利用存儲器的存儲容量,常常通過將有效的局部區(qū)塊數(shù)據(jù)量復(fù)制 至一被擦除區(qū)塊中來合并或收集所述有效的局部區(qū)塊數(shù)據(jù)量,以便可隨后擦除從其復(fù) 制這些數(shù)據(jù)的區(qū)塊并重新利用其整個存儲容量。為以數(shù)據(jù)扇區(qū)的邏輯地址的次序來劃 分區(qū)塊內(nèi)的數(shù)據(jù)扇區(qū),也需要復(fù)制數(shù)據(jù),因?yàn)檫@會提高讀取數(shù)據(jù)及將所讀取數(shù)據(jù)傳送 至主機(jī)的速度。如果此種數(shù)據(jù)復(fù)制進(jìn)行得過于頻繁,則存儲器系統(tǒng)的操作性能可能會 變差。當(dāng)存儲器的存儲容量幾乎不大于主機(jī)可通過所述系統(tǒng)的邏輯地址空間所定址的 數(shù)據(jù)量時(這是一種典型的情形),此尤其會影響存儲器系統(tǒng)的操作。在此種情形中, 可能需要進(jìn)行數(shù)據(jù)合并或收集才能執(zhí)行主機(jī)編程命令。此時,編程時間會變長。在連續(xù)的幾代存儲器系統(tǒng)中,為增大可在一既定半導(dǎo)體區(qū)域中存儲的數(shù)據(jù)位數(shù),區(qū)塊的大小一直在增大。存儲256個數(shù)據(jù)扇區(qū)或更多數(shù)據(jù)扇區(qū)的區(qū)塊正在變得日益常見。另外,常常將不同陣列或子陣列的兩個、四個或更多個區(qū)塊在邏輯上鏈接成元塊, 以增大數(shù)據(jù)編程及讀取的平行度。與這樣大容量的操作單元相伴而來的是在有效地對 其進(jìn)行操作方面所面臨的挑戰(zhàn)。發(fā)明內(nèi)容目前已開發(fā)出許多技術(shù)以在不同程度上克服在有效地操作這樣大的擦除區(qū)塊閃 速存儲器系統(tǒng)方面所遇到的某些問題。本發(fā)明另一方面通過改變存儲器與主機(jī)系統(tǒng)之間的數(shù)據(jù)傳送接口而采用一種更基本的方法。其并非如當(dāng)前所進(jìn)行的一樣使用虛擬地 址空間內(nèi)的邏輯地址在存儲器與主機(jī)系統(tǒng)之間傳送數(shù)據(jù),而是通過由主機(jī)所指配的文 件名以及文件內(nèi)的偏移地址來標(biāo)識數(shù)據(jù)文件。存儲器系統(tǒng)由此得知每一扇區(qū)或其他數(shù) 據(jù)單位所屬的主機(jī)文件。本文所論述的文件單位是一有序(例如通過具有順序性的偏 移地址)且由在主計算系統(tǒng)中運(yùn)行的應(yīng)用程序所創(chuàng)建并唯一標(biāo)識的數(shù)據(jù)集合。當(dāng)前的商業(yè)存儲器系統(tǒng)并不采用這種方法,因?yàn)橹鳈C(jī)現(xiàn)在通過共用的一組邏輯地 址集合向存儲器系統(tǒng)標(biāo)識所有文件內(nèi)的數(shù)據(jù),而不標(biāo)識文件。通過以文件對象識別主 機(jī)數(shù)據(jù)而非使用邏輯地址,存儲器系統(tǒng)控制器可以一種會降低如此頻繁地進(jìn)行數(shù)據(jù)合 并及收集的需要的方式來存儲數(shù)據(jù)。數(shù)據(jù)復(fù)制操作的頻率以及所復(fù)制的數(shù)據(jù)量由此會 顯著減小,從而增強(qiáng)存儲器系統(tǒng)的數(shù)據(jù)編程及讀取性能。進(jìn)一步,所述存儲器系統(tǒng)控 制器維護(hù)其中存儲主機(jī)文件的存儲區(qū)塊的目錄及索引表信息。因而無需使主機(jī)維護(hù)當(dāng)前為管理邏輯地址接口所需的文件分配表(FAT)。此一基于文件的接口的實(shí)施方案利用主機(jī)命令來刪除文件,所述主機(jī)命令由存儲 器系統(tǒng)通過使存儲文件數(shù)據(jù)的所有存儲單元區(qū)塊中的所存儲文件數(shù)據(jù)過時來執(zhí)行。隨 后因所述刪除命令而僅包含過時數(shù)據(jù)的存儲區(qū)塊可被立即擦除或被調(diào)度為提早擦除。 可作為存儲器系統(tǒng)正常操作的一部分而對既包含所刪除文件的過時數(shù)據(jù)也包含另一文 件的有效數(shù)據(jù)的任何存儲區(qū)塊進(jìn)行垃圾收集,以釋放未利用的存儲器空間供使用。刪除命令不屬于現(xiàn)有邏輯地址主機(jī)/存儲器接口的一部分,而是,在現(xiàn)有邏輯地址 200680008989.4說明書第3/46頁主機(jī)/存儲器接口中,存儲器系統(tǒng)通常在主機(jī)試圖將新數(shù)據(jù)寫入現(xiàn)有數(shù)據(jù)的邏輯地址時 得知數(shù)據(jù)被主機(jī)刪除。隨后得知存儲于所覆寫邏輯地址處的現(xiàn)有數(shù)據(jù)過時,但并不完 全知道主機(jī)所作的刪除。由于通過本文的技術(shù),存儲器系統(tǒng)對文件進(jìn)行跟蹤,因而當(dāng) 刪除文件時主機(jī)會直接通知存儲器系統(tǒng)。存儲器控制器隨后標(biāo)識因進(jìn)行文件刪除而變 無效的所有數(shù)據(jù)的位置,此使得能夠回收利用由過時數(shù)據(jù)所占用的空間并在需要接收 新數(shù)據(jù)之前準(zhǔn)備好接收新數(shù)據(jù)。然后可將新數(shù)據(jù)寫入至預(yù)先擦除的存儲區(qū)塊容量中。此會顯著增大可供用于編程的預(yù)擦除存儲區(qū)塊的數(shù)量并顯著減少為具有足以用 于存儲數(shù)據(jù)的被擦除區(qū)塊而響應(yīng)于數(shù)據(jù)寫入命令所需執(zhí)行的垃圾收集情形。由于可在 后臺進(jìn)行區(qū)塊擦除而不干擾編程及讀取操作,因而存儲器系統(tǒng)的性能由此得到顯著提 升。本發(fā)明的其他方面、優(yōu)點(diǎn)、特征及細(xì)節(jié)包含于下文對本發(fā)明實(shí)例性實(shí)例的說明中, 該說明應(yīng)結(jié)合附圖一起閱讀。
圖1示意性地圖解說明如當(dāng)前所實(shí)施的主機(jī)及所連接的非易失性存儲器系統(tǒng); 圖2是用作圖1所示非易失性存儲器的一實(shí)例性閃速存儲器系統(tǒng)的方塊圖; 圖3是可用于圖2所示系統(tǒng)中的存儲單元陣列的代表性電路圖; 圖4圖解說明圖2所示系統(tǒng)的一實(shí)例性實(shí)體存儲器組織形式; 圖5顯示圖4所示實(shí)體存儲器的一部分的展開圖; 圖6顯示圖4及5所示實(shí)體存儲器的一部分的又一展開圖; 圖7圖解說明主機(jī)與可再編程存儲器系統(tǒng)之間的常見現(xiàn)有技術(shù)邏輯地址接口; 圖8以不同于圖7的方式圖解說明主機(jī)與可再編程存儲器系統(tǒng)之間的常見現(xiàn)有技 術(shù)邏輯地址接口;圖9圖解說明根據(jù)本發(fā)明主機(jī)與可再編程存儲器系統(tǒng)之間的直接文件存儲接口; 圖10以不同于圖9的方式圖解說明根據(jù)本發(fā)明主機(jī)與可再編程存儲器系統(tǒng)之間 的直接文件存儲接口;圖11顯示一實(shí)例性存儲器系統(tǒng)的功能層次;圖12A-12E給出一組實(shí)例性的直接文件接口命令;圖13A-13D顯示將數(shù)據(jù)文件直接寫入存儲器內(nèi)的四個不同實(shí)例;圖14A-14E顯示一將單個數(shù)據(jù)文件直接寫入存儲器內(nèi)的序列;圖15顯示對圖14E中所示數(shù)據(jù)文件進(jìn)行垃圾收集的結(jié)果;圖16給出常見區(qū)塊的一實(shí)例;圖17圖解說明將一共用數(shù)據(jù)群組編程至數(shù)個開放共用區(qū)塊之一內(nèi);圖18顯示將數(shù)據(jù)元頁編程至非易失性存儲器內(nèi)不同文件中的數(shù)個實(shí)例;圖19圖解說明一文件索引表(FIT)的結(jié)構(gòu)以及來自圖14A、 14C、 14E及15所
示實(shí)例的表項(xiàng);圖20概念性地圖解說明一實(shí)例性文件檢索數(shù)據(jù)結(jié)構(gòu); 圖21顯示圖20所示文件目錄的頁的結(jié)構(gòu);圖22顯示圖20所示文件索引表的頁的結(jié)構(gòu);圖23顯示作為圖21所示結(jié)構(gòu)的替代,圖20所示文件目錄的頁的結(jié)構(gòu);圖24圖解說明圖21及23所示文件目錄的操作;圖25圖解說明圖22所示文件索引表的操作;圖26是一流程圖,其顯示本文所述存儲器系統(tǒng)的總體操作順序;圖27是圖26所示"讀取文件數(shù)據(jù)"區(qū)塊的流程圖;圖28是圖26所示"對文件數(shù)據(jù)編程"區(qū)塊的流程圖;圖29圖解說明包含于圖28所示流程圖中的兩個操作的相對定時;圖30是圖26所示"刪除文件"區(qū)塊的流程圖;圖31是圖26所示"垃圾收集"區(qū)塊的流程圖;圖32是圖31所示"共用區(qū)塊垃圾收集"區(qū)塊的流程圖;及圖33是在本文實(shí)例性存儲器系統(tǒng)的所述操作期間存儲單元區(qū)塊的狀態(tài)圖。
具體實(shí)施方式
閃速存儲器系統(tǒng)大體說明參照圖l-8來說明當(dāng)前的閃速存儲器系統(tǒng)及與主機(jī)裝置的典型操作。本發(fā)明的各 個方面即可構(gòu)建于此一系統(tǒng)中。圖1所示主機(jī)系統(tǒng)1將數(shù)據(jù)存儲于閃速存儲器2中并 從閃速存儲器2檢索數(shù)據(jù)。盡管閃速存儲器可嵌于主機(jī)內(nèi),然而圖中將存儲器2圖解 說明為更流行的卡形式,此種卡形式通過機(jī)械及電連接器的配合部件3及4可拆卸地 連接至主機(jī)。當(dāng)前存在諸多不同的市售閃速存儲卡,其實(shí)例為小型閃存卡(CF)、多媒 體卡(MMC)、安全數(shù)字(SD)卡、迷你SD卡、存儲棒、智能媒體卡及TransFlash卡。 盡管這些卡中的每一個均根據(jù)其標(biāo)準(zhǔn)化規(guī)范而具有唯一的機(jī)械及/或電接口,然而每一 卡中所包含的閃速存儲器均極為相似。這些卡均可自SanDisk公司(本申請案的受讓 人)購得。SanDisk還以其Cruzer商標(biāo)提供一組閃速驅(qū)動器,其為小封裝形式的手持 存儲器系統(tǒng),其具有一用于通過插入主機(jī)的USB插孔內(nèi)而與主機(jī)相連接的通用串行總 線(USB)。這些存儲卡及閃速驅(qū)動器中的每一個均包含與該主機(jī)介接并控制其中的閃 速存儲器作業(yè)的控制器。使用此類存儲卡及閃速驅(qū)動器的主機(jī)系統(tǒng)數(shù)量眾多且多種多樣。其包括個人計算 機(jī)(PC)、膝上型計算機(jī)及其他便攜式計算機(jī)、蜂巢式電話、個人數(shù)字助理(PDA)、數(shù)字 照相機(jī)、數(shù)字?jǐn)z像機(jī)及便攜式聲頻播放器。通常,主機(jī)包含一用于一個或多個類型的 存儲卡或閃速驅(qū)動器的內(nèi)建插孔,但有些需要使用適配器來承插存儲卡。就存儲器2而言,圖1所示主機(jī)系統(tǒng)1可視為具有兩個主要部件,該兩個主要部
件是由電路與軟件組合構(gòu)成。其為應(yīng)用程序部分5以及與存儲器2介接的驅(qū)動器部分6。例如,在個人計算機(jī)中,應(yīng)用程序部分5可包含一運(yùn)行字處理、圖形、控制或其他流行應(yīng)用程序軟件的處理器。在照相機(jī)、蜂窩式電話或者其他主要專用于執(zhí)行單組功能的主機(jī)系統(tǒng)中,應(yīng)用程序部分5包括用于操作照相機(jī)進(jìn)行拍照及存儲照片、操作蜂 窩式電話撥打及接收電話等等的軟件。圖1所示存儲器系統(tǒng)2包括閃速存儲器7及電路8, 二者均介接所述卡所連接到 的主機(jī),以來回傳遞數(shù)據(jù)并控制存儲器7。在數(shù)據(jù)編程及讀取期間,控制器8通常在 由主機(jī)1所用數(shù)據(jù)的邏輯地址與存儲器7的物理地址之間進(jìn)行轉(zhuǎn)換。參見圖2,對可用作圖1所示非易失性存儲器2的典型閃速存儲器系統(tǒng)的電路進(jìn) 行說明。所述系統(tǒng)控制器通常構(gòu)建于單個集成電路芯片11上,集成電路芯片ll通過 系統(tǒng)總線13與一個或多個集成電路存儲器芯片并聯(lián),在圖2中是顯示單個此種存儲器 芯片15。所示特定總線13包含單獨(dú)的一組用于載送數(shù)據(jù)的導(dǎo)體17、 一組用于存儲器 地址的導(dǎo)體19以及一組用于控制及狀態(tài)信號的導(dǎo)體21。另一選擇為,可使單組導(dǎo)體 在這三種功能之間分時共享。此外,可采用系統(tǒng)總線的其他配置,例如在2004年8 月9日提出申請且名稱為"環(huán)形總線結(jié)構(gòu)及其在閃速存儲器系統(tǒng)中的應(yīng)用(Ring Bus Structure and It's Use in Flash Memory Systems)"的第10/915,039號美國專利申請案中 所述。典型的控制器芯片11具有其自身的內(nèi)部總線23,內(nèi)部總線23通過接口電路25 介接系統(tǒng)總線13。通常連接至所述總線的主要功能是處理器27 (例如微處理器或微控 制器)、包含用于將系統(tǒng)初始化("引導(dǎo)")的只讀存儲器(ROM) 29、主要用于緩沖 在存儲器與主機(jī)直接傳送的數(shù)據(jù)的只讀存儲器(RAM) 31、以及電路33,電路33為 在存儲器與主機(jī)之間通過控制器的數(shù)據(jù)計算及檢查糾錯碼(ECC)??刂破骺偩€23通 過電路35介接一主機(jī)系統(tǒng),在包含于一存儲卡中的圖2所示系統(tǒng)情形中,這是通過所 述卡中作為連接器4 一部分的外部觸點(diǎn)37來實(shí)現(xiàn)。時鐘39與控制器11的每一其他組 件相連并供所述每一其他組件使用。存儲器芯片15以及與系統(tǒng)總線13相連的任何其他存儲器芯片通常包含一組織成 多個子陣列或平面形式的存儲單元陣列,為簡明起見,在圖中顯示兩個此種平面41及43,但也可改為使用更多個(例如四個或八個)此種平面。另一選擇為,芯片15 的存儲器單元陣列可不劃分成平面。然而,當(dāng)如此劃分時,每一平面均具有其自身的可相互獨(dú)立操作的列控制電路45及47。電路45及47從系統(tǒng)總線13的地址部分19 接收其各自存儲單元陣列的地址,并將其解碼,以對特定的一個或多個各自位線49 及51進(jìn)行尋址。響應(yīng)于在地址總線19上接收到的地址而通過行控制電路對字線53 進(jìn)行尋址。源極電壓控制電路57及59也與各自平面相連,p-阱電壓控制電路61及 63也是如此。如果存儲器芯片15具有單個存儲單元陣列,且如果在系統(tǒng)中存在兩個 或更多個此種芯片,則每一芯片的陣列均可類似于上述多平面芯片內(nèi)的平面或子陣列 進(jìn)行操作。 數(shù)據(jù)通過與系統(tǒng)總線13的數(shù)據(jù)部分17相連的各自數(shù)據(jù)輸入/輸出電路65及67 傳送入及傳送出平面41及43。電路65及67使得通過各自的列控制電路45及47既 能夠?qū)?shù)據(jù)編程入存儲單元內(nèi),又能夠從其各自平面的存儲單元中讀取數(shù)據(jù)。盡管控制器11控制存儲器芯片15的操作,以對數(shù)據(jù)編程、讀取數(shù)據(jù)、擦除及照 管各種內(nèi)務(wù),然而每一存儲器芯片還包含某些用于從控制器11執(zhí)行命令的控制電路來 執(zhí)行這些功能。接口電路73連接至系統(tǒng)總線13的控制及狀態(tài)部分21。來自控制器的 命令提供至狀態(tài)機(jī)75,狀態(tài)機(jī)75隨后提供對其他電路的特定控制,以便執(zhí)行這些命 令??刂凭€77-81將狀態(tài)機(jī)75與這些其他電路相連,如在圖2中所示。來自狀態(tài)機(jī) 75的狀態(tài)信息通過線83傳送至接口 73,以便通過總線部分21傳輸至控制器11。存儲單元陣列41-43的NAND架構(gòu)在當(dāng)前是較佳的,當(dāng)然還可改為使用例如NOR 等其他架構(gòu)。作為存儲器系統(tǒng)的一部分的NAND閃速存儲器及其操作的實(shí)例可通過參 考美國專利第5,570,315號、第5,774,397號、第6,046,935號、第6,373,746號、第 6,456,528號、第6,522,580號、第6,771,536號及第6,781,877號及美國專利申請公開 案第2003/0147278號而獲得。圖3的電路解說明一實(shí)例性NAND陣列,其是圖2所示存儲器系統(tǒng)的存儲 單元陣列41的一部分。提供大量的全局位線,然而為使解說簡明起見,在圖2中僅顯 示四個此種線91-94。若干個串聯(lián)連接的存儲單元串97-104連接于這些位線之一與一 參考電位之間。使用存儲單元串99作為代表性實(shí)例,多個電荷存儲存儲單元107-110 與所述串兩端處的選擇晶體管111及112串聯(lián)連接。當(dāng)使串的選擇晶體管導(dǎo)電時,所 述串便連接于其位線與參考電位之間。隨后每次對該串內(nèi)的一個存儲單元進(jìn)行編程或 讀取。圖3所示字線115-118分別貫穿若干存儲單元串中每一者內(nèi)一個存儲單元的電荷 存儲元件,且柵極119及120控制所述串每一端處的選擇晶體管的狀態(tài)。使共享共用 字線及控制柵極線115-120的存儲單元串形成一被一同擦除的存儲單元區(qū)塊123。該單 元區(qū)塊包含可同時被物理擦除的最小數(shù)量的單元。每次對沿其中一條字線115-118的 一行存儲單元進(jìn)行編程。通常,以一規(guī)定次序?qū)AND陣列中的各行進(jìn)行編程,在本 實(shí)例中是從最接近于連接至地或另一共用電位的串的端部的沿字線118的行開始。接 下來編程沿字線117的存儲單元行,依此類推而貫穿整個區(qū)塊123。最后,對沿字線 115的行進(jìn)行編程。第二個區(qū)塊125與此類似,其存儲單元串與第一個區(qū)塊123中的串連接至相同的 全局位線,但具有不同的一組字線及控制柵極線。字線及控制柵極線由行控制電路55 驅(qū)動至其恰當(dāng)?shù)牟僮麟妷骸H绻谙到y(tǒng)中存在不止一個平面或子陣列,例如圖2中的 平面1及2,則一個存儲器架構(gòu)使用在其間延伸的共用字線。另一選擇為,可存在不 止兩個共享共用字線的平面或子陣列。在其他存儲器架構(gòu)中,分別驅(qū)動各單獨(dú)平面或 子陣列的字線。如在上文所提及的幾個NAND專利及公開申請案中所述,可對存儲器系統(tǒng)進(jìn)行 操作,以在每一電荷存儲元件或區(qū)域中存儲不止兩個可檢測的電荷電平,從而在每一 者中存儲不止一個數(shù)據(jù)位。存儲單元的電荷存儲元件最常為導(dǎo)電性浮動?xùn)艠O,但也可 為非導(dǎo)電性介電電荷陷獲材料,如在第2003/0109093號美國專利申請公開案中所述。 圖4概念性地圖解說明在下文進(jìn)一步說明中用作一實(shí)例的閃速存儲單元陣列7(圖 l)的組織形式。四個存儲單元平面或子陣列131-134可位于單個集成存儲單元芯片上、 兩個芯片(每一芯片上兩個平面)上或四個單獨(dú)芯片上。該特定排列對下文說明而言 并不重要。當(dāng)然,在一系統(tǒng)中還可存在其他數(shù)量的平面,例如1個、2個、8個、16 個或更多個。所述平面分別劃分成在圖4中由矩形所顯示的存儲單元區(qū)塊,例如分別 位于平面131-134內(nèi)的區(qū)塊137、 138、 139及140。每一平面內(nèi)可存在數(shù)十個或數(shù)百 個區(qū)塊。如上文所述,存儲單元區(qū)塊是擦除單位,即可一同進(jìn)行物理擦除的最小數(shù)量 的存儲單元。然而,為增強(qiáng)平行性,各區(qū)塊是以更大的元塊單元形式操作。將來自每 一平面的一個區(qū)塊在邏輯上鏈接在一起而形成一元塊。圖中顯示四個區(qū)塊137-140形 成一個元塊141。 一元塊內(nèi)的所有單元通常被一同擦除。用于形成元塊的各區(qū)塊不必 限定于在其各自平面內(nèi)位于相同的相對位置上,如在由區(qū)塊145-148所構(gòu)成的第二元 塊143中所顯示。盡管通常較佳可使元塊遍布在所有平面上,然而為獲得高的系統(tǒng)性 能,可使存儲器系統(tǒng)在操作時能夠動態(tài)地形成由不同平面內(nèi)一個、兩個或三個區(qū)塊中 的任何或所有區(qū)塊組成的元塊。此使元塊的大小能夠更密切地匹配在一次編程作業(yè)內(nèi) 可供存儲的數(shù)據(jù)量。出于操作目的,如在圖5中所圖解說明,又將各個區(qū)塊劃分成存儲單元頁。例如, 區(qū)塊131-134中每一者的存儲單元均被劃分為八個頁P(yáng)0-P7?;蛘?,每一區(qū)塊內(nèi)可存 在16個、32個或更多個存儲單元頁。頁是區(qū)塊內(nèi)的數(shù)據(jù)編程及讀取單位,其含有可 同時編程的最小數(shù)據(jù)量。在圖3所示的NAND架構(gòu)中,頁是由區(qū)塊內(nèi)沿一字線的存儲 單元形成。然而,為增強(qiáng)存儲器系統(tǒng)操作的平行性,可將兩個或更多個區(qū)塊內(nèi)的此類 頁在邏輯上鏈接成元頁。圖1D中圖解說明一個元頁151,其是由四個區(qū)塊131-134 中每一個中的一個物理頁形成。元頁151 (例如)包含這四個區(qū)塊中每一個中的頁面 P2,但一個元頁中的各頁未必必須在每一區(qū)塊內(nèi)具有同一相對位置。盡管較佳在所有 四個平面中平行地對最大數(shù)據(jù)量實(shí)施編程及讀取,然而為獲得高的系統(tǒng)性能,還可操 作存儲器系統(tǒng)以由不同平面內(nèi)各單獨(dú)區(qū)塊中的一個、兩個或三個頁中的任何或所有頁 形成元頁。此使編程及讀取作業(yè)能夠自適應(yīng)性地與可便于平行處理的數(shù)據(jù)量相匹配, 并減少其中元頁的一部分仍保持未以數(shù)據(jù)編程的情形。如在圖5中所示, 一由多個平面的物理頁形成的元頁包含沿那些多個平面的字線 行的存儲單元。并非同時將一個字線行中的所有單元編程,其更通常是以兩個或更多 個交錯的群組實(shí)施交替編程,其中每一群組均存儲一數(shù)據(jù)頁(位于單個區(qū)塊中)或一 數(shù)據(jù)元頁(跨越多個區(qū)塊)。通過每次對交替的存儲單元實(shí)施編程,將不需要為每一條 位線提供一由包含數(shù)據(jù)寄存器及感測放大器的周邊電路形成的單元,而是在相鄰位線 之間分時共享該單元。此會節(jié)約周邊電路所需的襯底空間大小并能夠沿各個行以增大
的密度包裝存儲單元。相反,為使一既定存儲器系統(tǒng)可提供的平行性最大化,較佳同 時編程沿一行的每一單元。參照圖3,通過沿NAND串的至少一端提供兩行選擇晶體管(未顯示)而非圖中 所示的單個行,會最方便地實(shí)現(xiàn)對沿一行的每隔一個存儲單元的同時數(shù)據(jù)編程。隨后, 響應(yīng)于一個控制信號, 一行中的各選擇晶體管在區(qū)塊中每隔一個串地連接至其各自的 位線,且響應(yīng)于另一控制信號,另一行的各選擇晶體管在每隔一個串中間連接至其各 自的位線。因此,在每一行存儲單元中寫入兩個數(shù)據(jù)頁。每一邏輯頁中的數(shù)據(jù)量通常是一個或多個數(shù)據(jù)扇區(qū)的整數(shù)倍,按照慣例,每一扇 區(qū)包含512個字節(jié)的數(shù)據(jù)。圖6顯示一頁或元頁的數(shù)據(jù)中兩個扇區(qū)153及155的邏輯 數(shù)據(jù)頁。每一扇區(qū)通常包含一由512個字節(jié)的所存儲用戶或系統(tǒng)數(shù)據(jù)形成的部分157 及另一數(shù)量的開銷數(shù)據(jù)字節(jié)159,該另一數(shù)量的開銷數(shù)據(jù)字節(jié)159與所述部分157中 的數(shù)據(jù)相關(guān)或者與存儲所述數(shù)據(jù)的物理頁或區(qū)塊相關(guān)。開銷數(shù)據(jù)的字節(jié)數(shù)量通常是16 個字節(jié),從而使每一扇區(qū)153及155總共為528個字節(jié)。開銷部分159可包含一在編 程期間根據(jù)數(shù)據(jù)部分157計算出的ECC、其邏輯地址、所述區(qū)塊已被擦除及再編程的 次數(shù)的經(jīng)驗(yàn)計數(shù)值、 一個或多個控制旗標(biāo)、工作電壓電平、及/或類似內(nèi)容、加上一根 據(jù)此開銷數(shù)據(jù)159計算出的ECC。另一選擇為,可將開銷數(shù)據(jù)159或其一部分存儲于 其他區(qū)塊的不同頁中。隨著存儲器平行性的增大,元塊的數(shù)據(jù)存儲容量會增大且因此數(shù)據(jù)頁及元頁的大 小也會增大。數(shù)據(jù)頁可因而包含多于兩個數(shù)據(jù)扇區(qū)。由于一數(shù)據(jù)頁中具有兩個扇區(qū), 且每一元頁具有兩個數(shù)據(jù)頁,因而在一元頁中存在四個扇區(qū)。每一元頁因此存儲2048 個字節(jié)的數(shù)據(jù)。這是一較高的平行度,且可能會隨著各行中存儲單元數(shù)量的增大而更 進(jìn)一步增大。出于此種原因,為增大頁及元頁中的數(shù)據(jù)量,閃速存儲器的寬度正在擴(kuò) 大。可購得的上文所識別的小型可再編程非易失性存儲卡及閃速驅(qū)動器的數(shù)據(jù)存儲 容量為512兆字節(jié)(MB)、 1吉字節(jié)(GB)、 2GB及4GB,且可變得更高。圖7圖解說 明主機(jī)與此一大容量存儲器系統(tǒng)之間最常見的接口。該主機(jī)處理由該主機(jī)所執(zhí)行的應(yīng) 用軟件或固件程序所產(chǎn)生或使用的數(shù)據(jù)文件。字處理數(shù)據(jù)文件即為一實(shí)例,且計算機(jī) 輔助設(shè)計(CAD)軟件的制圖文件為另一實(shí)例,其主要見于一般計算機(jī)主機(jī)(例如PC、 膝上型計算機(jī)及類似裝置)內(nèi)。pdf格式的文檔也是此類文件。靜態(tài)數(shù)字?jǐn)z像機(jī)為存 儲于存儲卡上的每一照片產(chǎn)生一數(shù)據(jù)文件。蜂窩式電話利用來自一內(nèi)部存儲卡上的文 件(例如電話目錄)的數(shù)據(jù)。PDA存儲并使用幾個不同文件,例如地址文件、日歷文 件及類似文件。在任一此類應(yīng)用中,存儲卡還可含有用于操作主機(jī)的軟件。在圖7中圖解說明主機(jī)與存儲器系統(tǒng)之間的常用邏輯接口。 一連續(xù)邏輯地址空間 161大到足以為所有可存儲于存儲器系統(tǒng)內(nèi)的數(shù)據(jù)提供地址。主機(jī)地址空間通常被劃 分為數(shù)據(jù)群集的遞增量。每一群集均可在一既定主機(jī)系統(tǒng)內(nèi)設(shè)計成含有一定數(shù)量的數(shù) 據(jù)扇區(qū),通常為4至64個扇區(qū)不等。 一標(biāo)準(zhǔn)扇區(qū)含有512個字節(jié)的數(shù)據(jù)。 圖7的實(shí)例中顯示已創(chuàng)建了三個文件1、 2及3。 一在主機(jī)系統(tǒng)上運(yùn)行的應(yīng)用程序以一有序數(shù)據(jù)集形式來創(chuàng)建每一文件,并通過唯一名稱或其他參引方式來識別該文件。 由主機(jī)為文件1指配尚未分配給其他文件的足夠大的可用邏輯地址空間。圖中顯示已 為文件1指配一連續(xù)的可用邏輯地址范圍。通常還將某些地址范圍分配給特定用途, 例如為主機(jī)操作軟件分配一特定范圍,從而即使在主機(jī)正為數(shù)據(jù)指配邏輯地址時所述 地址尚未得到利用,也不會使用所述地址來存儲所述數(shù)據(jù)。當(dāng)此后主機(jī)創(chuàng)建一文件2時,主機(jī)同樣地指配邏輯地址空間161內(nèi)兩個不同的連 續(xù)地址范圍,如圖7中所示。無需為一文件指配連續(xù)邏輯地址,而是還可分配位于己 分配給其他文件的地址范圍中間的地址片斷。此實(shí)例隨后顯示,將主機(jī)地址空間中先 前未分配給文件1及2及其他數(shù)據(jù)的其他部分分配給由主機(jī)創(chuàng)建的再一文件3。該主機(jī)通過保持一文件分配表(FAT)來記錄存儲器邏輯地址空間,其中該主機(jī) 指配給各種主機(jī)文件的邏輯地址均保持于該文件分配表中。FAT表通常存儲于非易失 性存儲器中及一主機(jī)存儲器中,并當(dāng)存儲新文件、刪除其他文件、修改文件及進(jìn)行此 類作業(yè)時由主機(jī)頻繁地加以更新。例如,當(dāng)刪除一主機(jī)文件時,該主機(jī)隨后通過更新 FAT表而將先前分配給所刪除文件的邏輯地址解除分配,以顯示其現(xiàn)在可供用于其他 數(shù)據(jù)文件。.主機(jī)并不關(guān)心存儲器系統(tǒng)控制器選擇用于存儲所述文件的物理位置。典型的主機(jī) 僅知曉其邏輯地址空間及其已分配給其各文件的邏輯地址。另一方面,通過一典型主 機(jī)/卡接口,存儲器系統(tǒng)僅知曉邏輯地址空間中巳被寫入數(shù)據(jù)的部分,但不知曉分配給 特定主機(jī)文件的邏輯地址,或甚至主機(jī)文件數(shù)量。存儲器系統(tǒng)控制器106將主機(jī)所提 供的用于存儲或檢索數(shù)據(jù)的邏輯地址轉(zhuǎn)換成存儲有主機(jī)數(shù)據(jù)的閃速存儲單元陣列內(nèi)的 唯一物理地址。 一區(qū)塊163表示一由存儲器系統(tǒng)控制器保持的關(guān)于這些邏輯-物理地址 轉(zhuǎn)換的工作表。存儲器系統(tǒng)控制器編程成以一種使系統(tǒng)性能保持處于高水平的方式將數(shù)據(jù)文件 存儲于一存儲器陣列165的區(qū)塊及元塊內(nèi)。在此圖解說明中使用四個平面或子陣列。 較佳在由每一平面中的一區(qū)塊所形成的整個元塊中以系統(tǒng)所允許的最大平行度來編程 及讀取數(shù)據(jù)。通常分配至少一個元塊167作為一預(yù)留區(qū)塊來存儲存儲器控制器所使用 的操作固件及數(shù)據(jù)??煞峙淞硪辉獕K169或多個元塊來存儲主機(jī)操作軟件、主機(jī)FAT 表及此類數(shù)據(jù)。大多數(shù)物理存儲空間仍用于存儲數(shù)據(jù)文件。然而,存儲器系統(tǒng)控制器 并不知曉主機(jī)是如何在其各個文件對象之間分配所接收的數(shù)據(jù)。通常,存儲器控制器 從與主機(jī)的交互作用中僅獲知主機(jī)寫入至特定邏輯地址的數(shù)據(jù)是存儲于由控制器的 邏輯-物理地址表163所保持的對應(yīng)物理地址中。在一典型存儲器系統(tǒng)中,除所需區(qū)塊以外還提供幾個額外區(qū)塊的存儲容量以存儲 地址空間161內(nèi)的數(shù)據(jù)量??商峁┻@些額外區(qū)塊中的一個或多個作為冗余區(qū)塊來取代 可能在存儲器使用壽命期間變得有缺陷的其他區(qū)塊。包含于各個元塊內(nèi)的區(qū)塊的邏輯 群組通??沙鲇诙喾N原因而改變,包括用一冗余區(qū)塊替代一最初指配給該元塊的缺陷
區(qū)塊。通常在一已擦除區(qū)塊池內(nèi)保持有一個或多個額外區(qū)塊,例如元塊171。當(dāng)主機(jī) 將數(shù)據(jù)寫入存儲器系統(tǒng)時,控制器將主機(jī)所指配的邏輯地址轉(zhuǎn)換為已擦除區(qū)塊池內(nèi)一 元塊中的物理地址。隨后將未用于存儲邏輯地址空間161內(nèi)的數(shù)據(jù)的其他元塊擦除并 指定為已擦除池區(qū)塊,以供在下一數(shù)據(jù)寫入操作期間使用。在原始所存儲數(shù)據(jù)變得過時時,存儲于特定主機(jī)邏輯地址處的數(shù)據(jù)會頻繁地受到 新數(shù)據(jù)的覆寫。存儲器系統(tǒng)控制器響應(yīng)于此而將新數(shù)據(jù)寫入已擦除區(qū)塊中并隨后針對 那些邏輯地址來改動邏輯-物理地址表,以識別那些邏輯地址處的數(shù)據(jù)所存儲至的新物 理區(qū)塊。包含位于那些邏輯地址處的原始數(shù)據(jù)的區(qū)塊然后被擦除并可供用于存儲新數(shù) 據(jù)。若在寫入開始之前在來自己擦除區(qū)塊池的預(yù)先擦除區(qū)塊中不存在足夠的存儲容量, 則常常必須在可完成一當(dāng)前數(shù)據(jù)寫入操作之前進(jìn)行此種擦除。此可不利地影響系統(tǒng)的 數(shù)據(jù)編程速度。存儲器控制器通常僅當(dāng)主機(jī)將新數(shù)據(jù)寫入至其相同邏輯地址時才知曉 主機(jī)已使一既定邏輯地址處的數(shù)據(jù)過時。因此,存儲器的許多區(qū)塊可能正在存儲此種 無效數(shù)據(jù)達(dá)一定時間。為有效地利用集成電路存儲器芯片的面積,區(qū)塊及元塊的尺寸正在增大。此使大 部分單獨(dú)數(shù)據(jù)寫入所存儲的數(shù)據(jù)量小于一元塊的存儲容量,且在許多情形中甚至小于 一區(qū)塊的存儲容量。由于存儲器系統(tǒng)控制器通常將新數(shù)據(jù)指引至已擦除池元塊,因此 此可導(dǎo)致元塊的某些部分未得到填充。若新數(shù)據(jù)是存儲于另一元塊中的某些數(shù)據(jù)的更 新值,則來自該另一元塊中具有與新數(shù)據(jù)元頁鄰接的邏輯地址的其余有效數(shù)據(jù)元頁頁 也較佳地以邏輯地址次序復(fù)制至新元塊內(nèi)。舊元塊可保持其他有效數(shù)據(jù)元頁。此會隨 著時間而使一單獨(dú)元塊的某些元頁的數(shù)據(jù)變得過時且無效,并被寫入至一不同元塊的 具有相同邏輯地址的新數(shù)據(jù)所取代。為保持足以在整個邏輯地址空間161內(nèi)存儲數(shù)據(jù)的物理存儲器空間,周期性地壓 縮或合并(垃圾收集)此種數(shù)據(jù)。還希望盡可能地以與數(shù)據(jù)扇區(qū)的邏輯地址相同的次 序?qū)?shù)據(jù)扇區(qū)保持于元塊內(nèi),因?yàn)榇藭棺x取鄰接邏輯地址中的數(shù)據(jù)更為有效。因此, 通常以該額外目標(biāo)來實(shí)施數(shù)據(jù)壓縮及垃圾收集。當(dāng)接收到局部區(qū)塊數(shù)據(jù)更新值時對存 儲器實(shí)施管理的某些方面以及元塊的使用闡述于第6,763,424號美國專利中。數(shù)據(jù)壓縮通常涉及到從元塊中讀取所有有效數(shù)據(jù)元頁并將其寫入至新區(qū)塊中,在 該過程中忽略具有無效數(shù)據(jù)的元頁。具有有效數(shù)據(jù)的元頁也較佳以與其中所存儲數(shù)據(jù) 的邏輯地址次序相一致的物理地址次序進(jìn)行排列。占據(jù)新元塊的元頁數(shù)量將小于占據(jù) 舊元塊的元頁數(shù)量,這是因?yàn)榘瑹o效數(shù)據(jù)的元頁不被復(fù)制至新元塊中。舊區(qū)塊隨后 被擦除并可供用于存儲新數(shù)據(jù)。通過合并所獲得的額外元頁的容量隨后可用于存儲其 他數(shù)據(jù)。在垃圾收集期間,從兩個或更多個元塊收集具有鄰接或接近鄰接的邏輯地址的有 效數(shù)據(jù)元頁,并將其重寫至另一元塊內(nèi),通常是被擦除區(qū)塊池中的一個元塊內(nèi)。當(dāng)從 所述原始的兩個或更多個元塊復(fù)制出所有有效數(shù)據(jù)元頁時,其便可被擦除以供將來使 用。
數(shù)據(jù)合并及垃圾收集會耗用時間并可影響存儲器系統(tǒng)的性能,特別是當(dāng)需要進(jìn)行 數(shù)據(jù)合并或垃圾收集才能執(zhí)行來自主機(jī)的命令時。這些操作通常由存儲器系統(tǒng)控制器 進(jìn)行調(diào)度,以盡可能地在后臺進(jìn)行,但執(zhí)行這些操作的需要可能導(dǎo)致控制器須向主機(jī) 發(fā)出忙狀態(tài)信號,直到此種操作完成為止。可將主機(jī)命令的執(zhí)行延遲的一實(shí)例是在 被擦除區(qū)塊池中沒有足夠的預(yù)先被擦除元塊來存儲主機(jī)想要寫入至存儲器中的所有數(shù) 據(jù),且需要進(jìn)行垃圾收集來清空一個或多個隨后可被擦除的有效數(shù)據(jù)元塊。因此,為 使此種破壞最小化, 一直在關(guān)注對存儲器控制的管理。在如下各美國專利申請案中闡 述了許多這種技術(shù)2003年12月30日提出申請且名稱為"對具有大擦除區(qū)塊的非易失性存儲器系統(tǒng)的管理(Management of Non隱Volatile Memory Systems Having Large Erase Blocks)"的第10/749,831號申請案;2003年12月30日提出申請且名稱為"具 有區(qū)塊管理系統(tǒng)的非易失性存儲器及方法(Non-Volatile Memory and Method w池Block Management System)"的第10/750,155號申請案;2004年8月13日提出申請且名稱 為"存儲器平面對齊的非易失性存儲器(Non-Volatile Memory and Method w池Memory Planes Alignment)"的第10/917,888號申請案;2004年8月13日提出申請的第 10/917,867號申請案;2004年8月13日提出申請且名稱為"進(jìn)行分階段編程故障處理 的非易失性存儲器及方法(Non-Volatile Memory and Method with Phased Program Failure Handling)"的第10/917,889號申請案;以及2004年8月13日提出申請且名稱 為"帶控制數(shù)據(jù)管理的非易失性存儲器(Non-Volatile Memory and Method w他Control Data Management)"的第10/917,725號申請案。在有效控制具有極大擦除區(qū)塊的存儲器陣列的操作方面所面臨的一個挑戰(zhàn)是使 在一既定寫入操作期間所存儲的數(shù)據(jù)扇區(qū)數(shù)量與存儲器區(qū)塊的容量及邊界一致并對 齊。 一種方法是以不到最大數(shù)量的區(qū)塊來配置一用于存儲來自主機(jī)的新數(shù)據(jù)的元塊, 所述不到最大數(shù)量的區(qū)塊是為存儲不到能填充一完整元塊的量的數(shù)據(jù)量所需的。自適 應(yīng)性元塊的使用闡述于2003年12月30日提出申請且名稱為"自適應(yīng)性元塊(Ad叩tive Metablocks)"的第10/749,189號美國專利申請案中。數(shù)據(jù)區(qū)塊之間邊界與元塊之間物 理邊界的配合闡述于2004年5月7日提出申請的第10/841,118號專利申請案以及2004 年12月16日提出申請且名稱為"數(shù)據(jù)運(yùn)行編程(Data Run Programming)"的第 11/016,271號專利申請案中。為更有效地操作存儲器系統(tǒng),存儲器控制器也可使用來自FAT表的數(shù)據(jù),所述 FAT表由主機(jī)存儲于非易失性存儲器中。 一個此種用途是獲知主機(jī)何時通過解除數(shù)據(jù) 的邏輯地址而將數(shù)據(jù)標(biāo)識為過時。得知此時刻便使存儲器控制器能夠在其通常通過主 機(jī)向那些邏輯地址寫入新數(shù)據(jù)而獲知此時刻之前對擦除包含此種無效數(shù)據(jù)的區(qū)塊進(jìn)行 調(diào)度。此闡述于2004年7月21日提出申請且名稱為"用于在非易失性存儲器系統(tǒng)上 保持?jǐn)?shù)據(jù)的方法及裝置(Method and Apparatus for Maintaining Data on Non-Volatile Memory Systems)"的第10/897,049號美國專利申請案中。其他技術(shù)包括監(jiān)測主機(jī)向存 儲器寫入新數(shù)據(jù)的圖案,以推斷一既定寫入操作是否為單個文件,或者如果是多個文
件,那么這些文件之間的邊界位于何處。2004年12月23日提出申請且名稱為"進(jìn)行 FAT分析來實(shí)現(xiàn)最佳化依序群集管理(FAT Analysis for Optimized Sequential Cluster Management)"的第11/022,369號美國專利申請案即闡述了此種類型技術(shù)的應(yīng)用。為有效地操作存儲器系統(tǒng),希望使控制器盡可能多地得知由主機(jī)指配給其各個文 件的數(shù)據(jù)的邏輯地址。然后,由控制器將數(shù)據(jù)文件存儲于單個元塊或元塊群組內(nèi),而 非在不知道文件邊界時分散于較大數(shù)量的元塊中。結(jié)果使數(shù)據(jù)合并及垃圾收集操作的 數(shù)量減少。如此一來,存儲器系統(tǒng)的性能便得到提高。但如上文所述,當(dāng)主機(jī)/存儲器 接口包含邏輯地址空間161 (圖7)時,存儲器控制器很難得知關(guān)于主機(jī)數(shù)據(jù)文件結(jié)構(gòu) 的很多知識。參見圖8,其以不同方式圖解說明在圖7中所已顯示的典型邏輯地址主機(jī)/存儲器 接口。由主機(jī)為主機(jī)所產(chǎn)生的數(shù)據(jù)文件分配邏輯地址。存儲器系統(tǒng)隨后查看這些邏輯 地址并將其映射入實(shí)際存儲有數(shù)據(jù)的存儲單元塊的物理地址。對實(shí)例性基于文件的接口實(shí)施例的說明主機(jī)與用于存儲大量數(shù)據(jù)的存儲器系統(tǒng)之間的改良接口使得無需使用邏輯地址 空間。主機(jī)通過唯一的文件ID (或另一唯一的參考量)及數(shù)據(jù)單元(例如字節(jié))在文 件內(nèi)的偏移地址對每一文件進(jìn)行尋址。該文件地址是直接提供給存儲器系統(tǒng)控制器, 存儲器系統(tǒng)控制器然后保持其自己的關(guān)于實(shí)際上在何處存儲每一主機(jī)文件的數(shù)據(jù)的 表。該新的接口可使用與上文參照圖2-6所述的相同的存儲器系統(tǒng)來構(gòu)建。與上文所 述的主要區(qū)別是存儲器系統(tǒng)與主機(jī)系統(tǒng)進(jìn)行通信的方式。該基于文件的接口圖解說明于圖9中,應(yīng)將其與圖7所示邏輯地址接口相比較。 文件1、2及3中每一者的標(biāo)識及數(shù)據(jù)在圖9所示文件內(nèi)的偏移量直接傳遞至存儲器控 制器。然后,由一存儲器控制器功能173將該邏輯地址信息轉(zhuǎn)換成存儲器165的元塊 及元頁的物理地址。在圖10中還圖解說明基于文件的接口,應(yīng)將其與圖8所示邏輯地址接口相比較。 在圖10中不存在圖8所示邏輯地址空間及主機(jī)所保持的FAT表。而是,通過文件號 及數(shù)據(jù)在文件內(nèi)的偏移量來向存儲器系統(tǒng)識別主機(jī)所產(chǎn)生的數(shù)據(jù)文件。然后,存儲器 系統(tǒng)將文件直接映射至存儲單元陣列的物理區(qū)塊。參見圖11,其圖解說明本文所述的一實(shí)例性大容量存儲系統(tǒng)的各功能層。其為"直 接文件存儲后端系統(tǒng)",是本說明的主要說明對象。此處于存儲器系統(tǒng)的操作內(nèi),且通 過"直接文件接口"以及"基于文件的前端系統(tǒng)"、經(jīng)由基于文件的接口信道與主機(jī)系 統(tǒng)進(jìn)行通信。每一主機(jī)文件均例如通過文件名來唯一地識別。文件內(nèi)的數(shù)據(jù)是通過在 該文件所獨(dú)有的線性地址空間內(nèi)的偏移地址來識別。無需為存儲器系統(tǒng)界定邏輯地址 空間。命令來自主機(jī)系統(tǒng)的一組直接文件接口命令支持存儲器系統(tǒng)的操作。實(shí)例性的一組此 種命令在圖12A-12E中給出。這些只是簡要概述,以供在本說明其余部分中作參考。圖12A列示用于根據(jù)所界定的協(xié)議使數(shù)據(jù)在主機(jī)與存儲器系統(tǒng)之間傳送的主機(jī)命令。 指定文件"filelD》中在該文件內(nèi)處于特定偏移量(<0ffSet>)處的數(shù)據(jù)或者被寫入至 存儲器系統(tǒng),或者從存儲器系統(tǒng)讀出。在傳輸寫入(Write)、插入(Insert)或更新(Update) 命令之后,從主機(jī)向存儲器系統(tǒng)傳輸數(shù)據(jù),且存儲器系統(tǒng)通過將所述數(shù)據(jù)寫入其自己 的存儲器陣列中而作出響應(yīng)。主機(jī)傳輸讀取(Read)命令會使存儲器系統(tǒng)通過將指定 文件的數(shù)據(jù)發(fā)送至主機(jī)而作出響應(yīng)。如果存儲器系統(tǒng)保持一指針來標(biāo)識可存儲所述文 件的額外數(shù)據(jù)的下一存儲位置,則無需隨寫入命令發(fā)送數(shù)據(jù)偏移量。然而,如果寫入 命令包含在早己寫入的文件內(nèi)的偏移位置,則存儲裝置可將其解譯為一用于更新在該 偏移位置處開始的文件數(shù)據(jù)的命令,從而無需一單獨(dú)的更新命令。對于讀取命令,如 果要讀取整個文件,則主機(jī)無需規(guī)定時間偏移量。這些圖12A所示數(shù)據(jù)命令之一的執(zhí) 行是響應(yīng)于主機(jī)系統(tǒng)傳輸任何其他命令而結(jié)束。另一數(shù)據(jù)命令是移除(Remove)命令。不同于圖12A中的其他數(shù)據(jù)命令,在移 除命令后不進(jìn)行數(shù)據(jù)傳輸。其作用是使存儲器系統(tǒng)將所規(guī)定偏移量1與偏移量2之間 的數(shù)據(jù)標(biāo)記為過時。然后,在對存在過時數(shù)據(jù)的文件或區(qū)塊的下一次數(shù)據(jù)壓縮或垃圾 收集期間,移除這些數(shù)據(jù)。圖12B列示用于管理存儲器系統(tǒng)內(nèi)的文件的主機(jī)命令。當(dāng)主機(jī)要將新文件的數(shù)據(jù) 寫入于存儲器系統(tǒng)中時,其首先發(fā)出打開(Open)命令,且存儲器系統(tǒng)通過打開新文 件來作出響應(yīng)。通常將規(guī)定可同時保持打開的文件的數(shù)量。當(dāng)主機(jī)關(guān)閉文件時,關(guān)閉 (Close)命令將告知存儲器系統(tǒng)其用于保持所打開文件的資源可改向。存儲器系統(tǒng)通 常將立即對此一文件進(jìn)行調(diào)度來進(jìn)行垃圾收集。對于所說明的直接文件接口,垃圾收 集是以邏輯方式得到管理并主要對文件執(zhí)行,而非以物理方式對各單獨(dú)存儲單元區(qū)塊 執(zhí)行。關(guān)閉_之后(Close—after)命令向存儲器系統(tǒng)發(fā)出文件即將被關(guān)閉的通知。文件 刪除(file Delete)命令使存儲器系統(tǒng)根據(jù)所規(guī)定優(yōu)先權(quán)規(guī)則立即對包含所要擦除文件 中的數(shù)據(jù)的存儲單元區(qū)塊進(jìn)行調(diào)度。擦除(Erase)命令規(guī)定將所規(guī)定文件的數(shù)據(jù)從存 儲器中立即擦除。刪除命令與擦除命令之間的主要區(qū)別是將優(yōu)先權(quán)賦予擦除指定文件的數(shù)據(jù)。主機(jī)可使用擦除命令在最早可行的時刻移除存儲器中的安全數(shù)據(jù)或敏感數(shù)據(jù),而刪除命令 則使該數(shù)據(jù)以較低的優(yōu)先權(quán)被擦除。在將存儲器系統(tǒng)斷電時使用擦除命令會在從主機(jī) 取出存儲裝置之前移除敏感數(shù)據(jù),且由此防止在下一次使用所述存儲裝置期間將該數(shù) 據(jù)散布給其他用戶或者主機(jī)系統(tǒng)。這兩個命令均較佳在后臺執(zhí)行,即不會放慢主數(shù)據(jù) 命令的執(zhí)行(圖12A)??傊?,自主機(jī)接收到另一命令將通常使存儲器控制器結(jié)束任何 后臺操作。涉及到存儲器系統(tǒng)內(nèi)的目錄的主機(jī)命令列示于圖12C中。每一目錄命令均包括對 該命令所屬的目錄的標(biāo)識"directorylD〉)。盡管存儲器系統(tǒng)控制器保持所述目錄,然 而關(guān)于所述目錄以及所述目錄的名稱的命令是由主機(jī)系統(tǒng)提供。存儲器控制器依照存 儲于存儲器系統(tǒng)中的固件、使用主機(jī)所提供的目錄名稱來執(zhí)行這些命令。
〈filelD〉參數(shù)可以是文件的完整路徑名、或者文件的某個簡短標(biāo)識符一在本文中 稱作文件句柄(file—handle)。文件路徑名與某些命令相結(jié)合地提供至圖11所示的直接 文件接口。這使得當(dāng)文件首次打開時能夠在文件目錄中創(chuàng)建完全顯式的條目,并使得 當(dāng)打開現(xiàn)有文件時能夠存取文件目錄中的正確現(xiàn)有條目。文件路徑名語法可符合DOS 文件系統(tǒng)所使用的標(biāo)準(zhǔn)。路徑名描述目錄的層次及位于目錄最低層內(nèi)的文件。路徑段 可由"\"來劃界。帶有前綴"\"的路徑是以根目錄為基準(zhǔn)。而不帶有前綴"\"的路 徑則以當(dāng)前目錄為基準(zhǔn)。 一 段則表示當(dāng)前目錄的母目錄。
另一選擇為,打開的文件可由一文件一句柄參數(shù)來標(biāo)識,該文件—句柄參數(shù)是在首 次創(chuàng)建所述文件時由存儲裝置指配。所述存儲裝置可此后每當(dāng)主機(jī)打開所述文件時將 簡短的文件名稱傳送至主機(jī)。主機(jī)可此后將所述文件_句柄與打開的文件的寫入、插入、 更新、讀取、關(guān)閉及關(guān)閉_之后命令一起使用。主機(jī)對文件的存取通常將比使用完整路 徑名時快,因?yàn)椴恍枰谖募夸浀膶哟沃羞M(jìn)行導(dǎo)航。當(dāng)使用打開命令首次打開文件 時,通常使用完整路徑名,因?yàn)榇鎯ζ飨到y(tǒng)可能尚未為該文件指配文件_句柄。但是如 果已經(jīng)具有,則可使用文件—句柄。對于圖12A及12B中利用文件ID的其余刪除及擦 除命令,則較佳使用完整的文件路徑名作為一種安全措施來防止主機(jī)提供不正確的文 件一句柄。主機(jī)會更難無意間產(chǎn)生一與現(xiàn)有的但非指定的文件相匹配的不正確路徑名。
通過其所屬目錄的〈directorylD〉標(biāo)識,圖12C中的各目錄命令類似地由圖11中 的直接文件接口接收到。完整路徑名是使用目錄命令接收到的優(yōu)選目錄ID。文件—句柄是一簡短標(biāo)識符,其是由大容量存儲裝置響應(yīng)于打開命令而在直接文 件接口處返送回主機(jī)。將所述文件一句柄定義為指向所述文件目錄條目中所存在FIT 的指針會較為方便。該指針界定該文件在區(qū)塊內(nèi)的邏輯FIT區(qū)塊編號以及邏輯文件編 號。使用此作為文件—句柄便能夠在無需首先搜索文件目錄中的文件的情況下存取文件 FIT條目。例如,如果存儲裝置可具有多達(dá)64個FIT區(qū)塊,且每一FIT區(qū)塊可對多達(dá) 64個文件加索引,則一帶文件一句柄1107的文件將指向其在FIT中的數(shù)據(jù)群組條目的 指針設(shè)定為FIT區(qū)塊11中的邏輯文件7。該文件—句柄是在響應(yīng)于打開命令而創(chuàng)建文 件的目錄及FIT條目時由存儲器系統(tǒng)控制器產(chǎn)生,并響應(yīng)于關(guān)閉命令而變無效。圖12D給出用于管理主機(jī)與存儲器系統(tǒng)之間接口狀態(tài)的主機(jī)命令??臻e(Idle) 命令告知存儲器系統(tǒng)其可執(zhí)行先前己得到調(diào)度的內(nèi)部操作,例如數(shù)據(jù)擦除及垃圾收集。 響應(yīng)于接收到待機(jī)(Standby)命令,存儲器系統(tǒng)將停止執(zhí)行后臺操作,例如垃圾收集 及數(shù)據(jù)擦除。關(guān)機(jī)(Shut-down)命令則向存儲器控制器預(yù)先發(fā)出即將掉電的告警,此 允許完成未決的存儲器操作,包括將數(shù)據(jù)從易失性控制器緩沖器寫入至非易失性閃速 存儲器。圖12E中所示的大小(Size)命令將通常在一寫入命令之前由主機(jī)發(fā)出。存儲器 系統(tǒng)響應(yīng)于此而向主機(jī)報告可供進(jìn)一步寫入文件數(shù)據(jù)的可用容量。此可根據(jù)可用的未 編程物理容量減去為管理對所規(guī)定文件數(shù)據(jù)容量的存儲所需的物理容量來計算。當(dāng)主機(jī)發(fā)出一狀態(tài)(Status)命令(圖12E)時,存儲裝置將以其當(dāng)前狀態(tài)作出響應(yīng)。該響應(yīng)可呈一個或多個具有不同的位字段的二進(jìn)制字形式,從而向主機(jī)提供關(guān)于 存儲裝置的不同的具體信息項(xiàng)。例如, 一個兩位的字段可報告所述裝置是否正忙,且 如果是,則根據(jù)存儲裝置所正忙于進(jìn)行的事項(xiàng)來提供不止一個忙狀態(tài)。 一個忙狀態(tài)可 指示存儲裝置正在忙于執(zhí)行一用于傳送數(shù)據(jù)的主機(jī)寫入或讀取命令一此為后臺操作。 第二忙狀態(tài)指示可用于在存儲器系統(tǒng)正在執(zhí)行后臺內(nèi)務(wù)操作(例如數(shù)據(jù)壓縮或垃圾收 集)時告知主機(jī)。主機(jī)可決定是否等待至該第二忙狀態(tài)結(jié)束之后再向存儲裝置發(fā)送另 一命令。如果在內(nèi)務(wù)操作完成之前發(fā)送另一命令,則存儲裝置將結(jié)束內(nèi)務(wù)操作并執(zhí)行 所述命令。主機(jī)可將第二裝置忙狀態(tài)與空閑命令相結(jié)合來允許在存儲裝置內(nèi)進(jìn)行內(nèi)務(wù)操作。 在主機(jī)發(fā)送可能使得需要使裝置進(jìn)行內(nèi)務(wù)操作的命令、或一系列命令之后,主機(jī)可發(fā) 送空閑命令。如下文所述,可對存儲裝置進(jìn)行編程,使其通過啟動內(nèi)務(wù)操作來響應(yīng)于 空閑命令并同時如上文所述起動第二忙狀態(tài)。例如,根據(jù)下文所述的演算法,刪除命 令會使得需要執(zhí)行垃圾收集。在已發(fā)出一系列刪除命令之后來自主機(jī)的空閑命令會隨 后使裝置能夠有時間來執(zhí)行垃圾收集,而垃圾收集可能是為使存儲裝置能夠響應(yīng)于下 一主機(jī)寫入命令所必需的。否則,可能需要在接收到下一寫入命令之后、但在可執(zhí)行 下一命令之前執(zhí)行垃圾收集,從而使該指令的執(zhí)行明顯放慢。寫入數(shù)據(jù)當(dāng)將新的數(shù)據(jù)文件編程入存儲器中時,從被擦除區(qū)塊中第一物理位置開始并按次 序循序經(jīng)過區(qū)塊中的各位置來將數(shù)據(jù)寫入被擦除存儲單元區(qū)塊中。數(shù)據(jù)是按從主機(jī)接 收的次序進(jìn)行編程,而無論所述數(shù)據(jù)在文件內(nèi)的偏移量次序如何。編程繼續(xù)進(jìn)行,直 到文件中的所有數(shù)據(jù)均己寫入存儲器內(nèi)為止。如果文件中的數(shù)據(jù)量超過單個擦除區(qū)塊 的容量,則當(dāng)?shù)谝粎^(qū)塊變滿時,編程會在第二被擦除區(qū)塊中繼續(xù)進(jìn)行。第二存儲器區(qū) 塊是以與第一存儲器區(qū)塊相同的方式,從第一位置起按順序進(jìn)行編程,直到文件中的 所有數(shù)據(jù)均得到存儲或者第二區(qū)塊變滿為止??墒褂梦募械氖S鄶?shù)據(jù)對第三或其他 區(qū)塊進(jìn)行編程。用于存儲單個文件的數(shù)據(jù)的多個區(qū)塊或元塊不需要在物理上或在邏輯 上鄰接。為便于解釋,除非另外指明外,否則本文中所使用的術(shù)語"區(qū)塊"打算指代 擦除區(qū)塊單位或者多個區(qū)塊"元塊",此視在具體系統(tǒng)中是否使用元塊而定。參見圖13A,圖解說明將數(shù)據(jù)文件寫入至存儲器系統(tǒng)。在本實(shí)例中,數(shù)據(jù)文件181 大于存儲器系統(tǒng)中一個區(qū)塊或元塊183的存儲容量(在圖中顯示為在兩條垂直實(shí)線之 間延伸)。因此,數(shù)據(jù)文件181的一部分184也寫入至第二區(qū)塊185中。圖中顯示這些 存儲單元區(qū)塊在物理上鄰接,但其并非必需如此。在自主機(jī)串流接收到文件181的數(shù) 據(jù)時,寫入所述數(shù)據(jù),直到所述文件的所有數(shù)據(jù)均已寫入至存儲器中為止。在圖13A 的實(shí)例中,數(shù)據(jù)181是在圖12A的寫入命令之后從主機(jī)接收到的初始文件數(shù)據(jù)。一種使存儲器系統(tǒng)管理及記錄所存儲數(shù)據(jù)的較佳方式是使用可變大小數(shù)據(jù)群組。 也就是說,將文件數(shù)據(jù)存儲為多個數(shù)據(jù)群組,這多個數(shù)據(jù)群組可按規(guī)定次序鏈接在一 起而形成完整的文件。然而,較佳地,數(shù)據(jù)群組在文件內(nèi)的次序是由存儲器系統(tǒng)控制
器使用文件索引表(FIT)來保持。當(dāng)正在寫入來自主機(jī)的數(shù)據(jù)流時,每當(dāng)在文件數(shù)據(jù) 的邏輯偏移量位置中或在存儲數(shù)據(jù)的物理空間中存在間斷點(diǎn)時,均開始一新的數(shù)據(jù)群 組。此種物理間斷點(diǎn)的一實(shí)例是當(dāng)文件數(shù)據(jù)填滿一個區(qū)塊并開始寫入至另一個區(qū)塊時。此圖解說明于圖13A中,其中第一數(shù)據(jù)群組填充第一區(qū)塊183,所述文件的其余部分 184則作為第二數(shù)據(jù)群組存儲于第二區(qū)塊185中。第二數(shù)據(jù)群組可由(F0, D0)表示, 其中F0是數(shù)據(jù)文件的開頭的邏輯偏移量,而D0是存儲器內(nèi)所述文件開頭處的物理位 置。第二數(shù)據(jù)群組可由(Fl, Dl)表示,其中F1是存儲于第二區(qū)塊185開頭處的數(shù) 據(jù)的邏輯文件偏移量,而D1是其中存儲有該數(shù)據(jù)的物理位置。通過主機(jī)-存儲器接口傳送的數(shù)據(jù)量可用數(shù)據(jù)字節(jié)數(shù)、數(shù)據(jù)扇區(qū)數(shù)或用某種其他粒 度來表達(dá)。主機(jī)最常是以字節(jié)粒度來界定其文件的數(shù)據(jù),但隨后當(dāng)通過當(dāng)前邏輯地址 接口與大容量存儲器系統(tǒng)進(jìn)行通信時,將字節(jié)分成分別有512個字節(jié)的扇區(qū)、或者分 成分別有多個扇區(qū)的群集。為簡化存儲器系統(tǒng)的操作,通常如此進(jìn)行。盡管本文所述 的基于文件的主機(jī)-存儲器接口可使用某種其他數(shù)據(jù)單位,然而一般較佳使用原始的主 機(jī)文件字節(jié)粒度。也就是說,較佳以最小的合理數(shù)據(jù)單位字節(jié)而非以扇區(qū)、群集或類 似單位來表達(dá)時間偏移量、長度及類似量。此能夠更有效地使用本文所述技術(shù)來利用 閃速存儲器存儲容量。在常用的現(xiàn)有邏輯地址接口中,主機(jī)還規(guī)定所寫入數(shù)據(jù)的長度。此也可使用本文 所述的基于文件的接口來進(jìn)行,但由于其并非是為執(zhí)行寫入命令(圖12A)所必需的, 因而較佳使主機(jī)不提供所寫入數(shù)據(jù)的長度。由此,以圖13A所示方式寫入存儲器中的新文件在FIT中表示為所述數(shù)據(jù)群組的 索引條目序列(F0, D0), (Fl, Dl)(按該次序)。也就是說,每當(dāng)主機(jī)系統(tǒng)想要存取 一特定文件時,主機(jī)便將其文件ID或其他標(biāo)識發(fā)送至存儲器系統(tǒng),存儲器系統(tǒng)隨后存 取其FIT來識別構(gòu)成該文件的數(shù)據(jù)群組。各單獨(dú)數(shù)據(jù)群組的長度dength〉也可包含于 其各自的條目中,以便于存儲器系統(tǒng)的操作。當(dāng)使用時,存儲器控制器計算并存儲數(shù) 據(jù)群組的長度。只要主機(jī)使圖13A中的文件保持打開狀態(tài),便較佳還保持一物理寫入指針P,以 界定用于寫入從主機(jī)接收到的該文件任何其他數(shù)據(jù)的位置。文件的任何新數(shù)據(jù)均寫入 文件在物理存儲器中的末尾處,而無論新數(shù)據(jù)在文件內(nèi)的邏輯位置如何。所述存儲器 系統(tǒng)允許多個文件同時保持打開,例如4個或5個此種文件,并為其中每一文件保持 一寫入指針p。不同文件的寫入指針指向不同存儲器區(qū)塊中的位置。如果在己達(dá)到存 儲器系統(tǒng)的打開文件數(shù)量的限值時,主機(jī)系統(tǒng)想要打開新文件,則首先關(guān)閉其中一個 已打開的文^^并隨后打開新文件。在文件已關(guān)閉之后,便不再需要保持該文件的寫入 指針P。圖13B圖解說明主機(jī)也是使用寫入命令(圖12A)將數(shù)據(jù)附加至先前所寫入但仍 打開的圖13A所示文件的末尾。圖中顯示數(shù)據(jù)187由主機(jī)系統(tǒng)附加至文件的末尾,數(shù) 據(jù)187還寫入第二區(qū)塊185中該文件的數(shù)據(jù)末尾處。所附加的數(shù)據(jù)變成數(shù)據(jù)群組(Fl,Dl)的一部分,因此,數(shù)據(jù)群組(Fl, Dl)現(xiàn)在包含更多數(shù)據(jù),因?yàn)樵诂F(xiàn)有數(shù)據(jù)群組 184與所附加數(shù)據(jù)189之間既不存在邏輯地址間斷也不存在物理地址間斷。因而,整 個文件仍在FIT中表示為一索引條目序列(F0, D0)、 (Fl, Dl)。指針P的地址也改 變至所存儲的附加數(shù)據(jù)的末尾。在圖13C中顯示將數(shù)據(jù)區(qū)塊191插入先前所寫入的圖13A所示文件中的一實(shí)例。 盡管主機(jī)正在將數(shù)據(jù)191插入文件中,然而存儲器系統(tǒng)將所插入數(shù)據(jù)附加在先前所寫 入文件數(shù)據(jù)末尾處的一位置193上。當(dāng)將數(shù)據(jù)插入打開的文件中時,不必將文件的數(shù) 據(jù)以其邏輯次序進(jìn)行重寫,盡管在主機(jī)關(guān)閉文件后可稍后在后臺進(jìn)行此種操作。由于 所插入數(shù)據(jù)完全存儲于第二存儲器區(qū)塊185內(nèi),因而其形成單個新的群組(Fl, D3)。 但進(jìn)行此種插入會導(dǎo)致圖13A所示的先前數(shù)據(jù)群組(F0, D0)被劃分成兩個群組,一 個群組(F0, DO)在所插入項(xiàng)之前, 一個群組(F2, Dl)在所插入項(xiàng)之后。這是因?yàn)?每當(dāng)所述數(shù)據(jù)存在邏輯間斷(例如在插入項(xiàng)的開頭Fl及插入項(xiàng)的末尾F2處出現(xiàn))時, 均需要形成新的數(shù)據(jù)群組。群組(F3, D2)是物理位置D2作為第二區(qū)塊85的開頭 的結(jié)果。群組(Fl, D3)與(F3, D2)保持分開,盡管其存儲于同一存儲器區(qū)塊中, 這是因?yàn)槠渌鎯Φ臄?shù)據(jù)的偏移量存在間斷。因而,帶有所述插入項(xiàng)的原始文件在存 儲器系統(tǒng)FIT中由數(shù)據(jù)群組索引條目(F0, D0)、 (Fl, D3)、 (F2, Dl)、 (F3, D2)(按該次序)表示。在圖13A、 13B及13C的實(shí)例中應(yīng)注意,可在無需使存儲器中的 任何數(shù)據(jù)過時的情況下寫入新的或現(xiàn)有的文件的新數(shù)據(jù)。也就是說,執(zhí)行寫入及插入 命令(圖12A)并不會使任何其他數(shù)據(jù)變得無效或過時。圖13D圖解說明另一實(shí)例,其中使用更新命令(圖12A)對原先以圖13A所示 方式寫入的數(shù)據(jù)的某一部分進(jìn)行更新。圖中顯示更新數(shù)據(jù)文件的一部分195。并非通 過更新而在存儲器系統(tǒng)中重寫整個文件,而是將所述文件的一更新部分197附加至先 前所寫入的數(shù)據(jù)。先前所寫入的數(shù)據(jù)的一部分199現(xiàn)在過時。盡管通常希望合并所更 新文件,以便騰出由過時數(shù)據(jù)所占據(jù)的空間,然而在主機(jī)使所述文件保持打開時通常 不這樣進(jìn)行,而是可在將文件關(guān)閉之后在后臺進(jìn)行。在更新之后,所述文件在存儲器 系統(tǒng)FIT中由數(shù)據(jù)群組索引條目(F0, D0)、 (Fl, D3)、 (F2, Dl)、 (F3, D2)以該 次序表示。圖13A中的單個數(shù)據(jù)群組(F0, D0)又劃分成圖13D中的多個片斷,一 個位于更新部分之前、更新部分、且一個位于更新部分之后。為進(jìn)一步例示可變長度數(shù)據(jù)群組的使用,在圖14A-14E中按次序顯示涉及到同一 文件的一系列數(shù)個寫入操作。如在圖14A中所示,首先使用寫入命令(圖12A)將原 始文件數(shù)據(jù)Wl寫入至存儲器系統(tǒng)的兩個區(qū)塊中。此時,所述文件由兩個數(shù)據(jù)群組界 定第一群組在一物理存儲器區(qū)塊的起始處開始,且第二群組是在一物理存儲器區(qū)塊 邊界之后需要。圖14A所示文件因而由數(shù)據(jù)群組的如下索引條目序列描述(F0, D0),(Fl, Dl)。在圖14B中 本變得過時。圖14A中的先前群組(F0, D0)縮短至圖14B所示的修改后群組(F0, D0),且先前群組(Fl, Dl)縮短至群組(F4, D2)。更新后的數(shù)據(jù)寫入于兩個群組(F2, D3)及(F3, D4)中,因?yàn)槠浣化B一存儲器區(qū)塊邊界。某些數(shù)據(jù)存儲于一第三 存儲器區(qū)塊中。所述文件現(xiàn)在由數(shù)據(jù)群組的如下索引條目序列描述(F0, D0), (F2, D3), (F3, D4), (F4, D2)。在圖14C中通過使用插入命令(圖12A)插入新的文件數(shù)據(jù)II來進(jìn)一步修改圖 14B所示文件。新數(shù)據(jù)II緊接在圖14B的先前群組(F4, D2)之后寫入存儲器作為圖 14C中的新群組(F5, D6)及(F6, D7),因?yàn)樗迦氲臄?shù)據(jù)交疊一存儲器區(qū)塊邊界。 使用一第四存儲器區(qū)塊。由于插入新數(shù)據(jù)II,圖14B的先前群組(F0, DO)分裂成圖 14C中的縮短的群組(F0, DO)及(F7, D5)。所述文件現(xiàn)在由數(shù)據(jù)群組的如下索引 條目序列描述:(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4),(FIO, D2)。圖14D顯示對圖14C所示數(shù)據(jù)文件的進(jìn)一步修改,其使用寫入命令(圖12A)將 新數(shù)據(jù)W2附加至文件末尾處。新數(shù)據(jù)緊接在圖14C中的先前群組(FIO, D2)之后 寫入作為圖14D中的新群組(Fll, D8)。所述文件現(xiàn)在由數(shù)據(jù)群組的如下索引條目序 列描述(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4), (FIO, D2), (F11, D8)。在圖14E中顯示對所打開文件的第二次更新,其中通過由主機(jī)發(fā)出一更新命令而 將所更新文件數(shù)據(jù)U2寫入至圖14D中的文件。所更新文件數(shù)據(jù)U2緊接在圖14D中 的先前群組(Fll, D8)之后寫入,其中該數(shù)據(jù)的先前版本變得過時。圖14D中的先 前群組(F9, D4)縮短至圖14E所示的修改后群組(F9, D4),先前群組(FIO, D2) 變得完全過時,且先前群組(Fll, D8)縮短至形成一新的群組(F14, D9)。更新后 的數(shù)據(jù)寫入于圖14E中的新群組(F12, D10)及(F13, Dll)中,交疊區(qū)塊邊界。 現(xiàn)在需要使用一第五區(qū)塊來存儲所述文件。所述文件現(xiàn)在由數(shù)據(jù)群組的如下索引條目 序歹鵬述(F0, D0), (F5, D6), (F6, D7), (F7, D5), (F8, D3), (F9, D4), (F12, DIO), (F13, Dll), (F14, D9)。在文件創(chuàng)建或根據(jù)前面的說明加以修改之后,每一文件的數(shù)據(jù)的偏移量較佳以正 確的邏輯次序保持連續(xù)。因此,例如,作為執(zhí)行插入命令的一部分,由主機(jī)提供的所 插入數(shù)據(jù)的偏移量是從緊接所述插入部分之前的偏移量連續(xù),且已處于所述文件中插 入部分之后的數(shù)據(jù)遞增所插入數(shù)據(jù)的量。更新命令最常使一現(xiàn)有文件的給定地址范圍 內(nèi)的數(shù)據(jù)被類似量的更新數(shù)據(jù)替換,因而通常不需要替換所述文件中其他數(shù)據(jù)的偏移 量。另一選擇為,可使用寫入命令取代單獨(dú)的更新命令來更新文件的數(shù)據(jù),因?yàn)榇鎯?器系統(tǒng)可將從主機(jī)接收到具有早已存在于所存儲文件數(shù)據(jù)中的偏移量范圍的數(shù)據(jù)解譯 為一要更新該偏移量范圍中的數(shù)據(jù)的指令。應(yīng)注意,上文所述以及圖13和14所示的所有數(shù)據(jù)分配及加索引功能均由存儲器 系統(tǒng)的控制器執(zhí)行。與圖12A所示寫入命令、插入命令、或更新命令中的一者一起,
主機(jī)僅傳送所述文件內(nèi)正發(fā)送至存儲器系統(tǒng)的文件ID及數(shù)據(jù)偏移量。存儲器系統(tǒng)進(jìn)行 其余操作。以剛剛所述的方式將數(shù)據(jù)文件從主機(jī)直接寫入至閃速存儲器的一個優(yōu)點(diǎn)在于,可 使如此存儲的數(shù)據(jù)的粒度或分辨率保持與主機(jī)的相同。如果主機(jī)應(yīng)用程序以例如1字 節(jié)的粒度寫入文件數(shù)據(jù),則該數(shù)據(jù)也可以1字節(jié)的粒度寫入至閃速存儲器內(nèi)。然后, 以字節(jié)數(shù)量來度量數(shù)據(jù)在單個數(shù)據(jù)群組內(nèi)的量及位置。也就是說,可在主機(jī)應(yīng)用程序 文件內(nèi)單獨(dú)尋址的數(shù)據(jù)的相同偏移量單位在該文件存儲于閃速存儲器中時也該文件內(nèi)單獨(dú)尋址。隨后,可在索引表中將區(qū)塊內(nèi)同一文件的數(shù)據(jù)群組之間的任何邊界規(guī) 定至最接近的字節(jié)或其他主機(jī)偏移量單位。類似地,區(qū)塊內(nèi)不同文件的各數(shù)據(jù)群組之 間的邊界以主機(jī)偏移量單位加以界定。盡管不用于寫入數(shù)據(jù),然而也相關(guān)地考慮使用刪除命令來刪除文件的一部分,因 為此種操作是插入命令的反向操作。刪除命令可以如下格式應(yīng)用于一文件偏移地址范 圍刪除<文件10><偏移量><長度>。所述文件中從<偏移量>開始且從該地址開始繼 續(xù)至刪除<長度>的部分內(nèi)的數(shù)據(jù)被刪除。然后,在刪除之后,主機(jī)使所述文件的其余 數(shù)據(jù)的偏移地址遞增,以在整個文件中保持鄰接的偏移地址。這是插入命令的相反操 作一在插入命令中,主機(jī)將數(shù)據(jù)加至文件的中間并然后使插入部分之后的其余文件數(shù) 據(jù)的偏移量遞增,以使修改后的文件的偏移量連續(xù)。垃圾收集從圖14B及14E中應(yīng)注意到,更新命令使為存儲文件所需的物理空間大于文件中的數(shù)據(jù)量。這是因?yàn)橐驯桓虏糠炙〈臄?shù)據(jù)仍保持存儲于存儲器中。因此,非常 希望通過去除過時的、無效的數(shù)據(jù)而將文件數(shù)據(jù)合并(垃圾收集)至變小的物理存儲 空間內(nèi)。因此,會由更大的存儲空間可供用于其他數(shù)據(jù)。亦可注意到,除圖14B及14E所示的文件數(shù)據(jù)更新之外,圖14C所示的數(shù)據(jù)插 入也會使文件數(shù)據(jù)不按次序存儲。也就是說,更新及插入部分是在進(jìn)行更新及插入時 附加至存儲于存儲器中的文件的末尾處,同時其差不多始終在邏輯上位于所述文件內(nèi) 的某處。圖14B、 14C及14E中的實(shí)例即為此種情形。因此,可能希望對存儲于存儲 器中的文件的數(shù)據(jù)進(jìn)行重新排序,以與在文件內(nèi)的偏移量次序相一致。此隨之會提高 讀取所存儲數(shù)據(jù)的速度,因?yàn)榘错樞蜃x取各個頁及區(qū)塊將使所述文件的數(shù)據(jù)以其偏移 量次序給出。此還會提供所述文件的最大可能的碎片消除。但對文件數(shù)據(jù)進(jìn)行重新排 序以使讀取效率更高對于存儲器系統(tǒng)的性能而言并不如文件數(shù)據(jù)合并重要,因?yàn)槲募?數(shù)據(jù)合并會潛在地釋放一個或多個存儲器區(qū)塊來用于存儲其他數(shù)據(jù)。因此,對文件中 數(shù)據(jù)的重新排序在所增加的操作開銷使其益處不值得時,將通常不會自己進(jìn)行,但可 作為許多垃圾收集操作的一部分來進(jìn)行而幾乎不會或根本不會增加操作開銷。圖14E中的文件包含存儲于存儲器中的過時數(shù)據(jù)群組(灰色部分),因?yàn)橐堰M(jìn)行 了這兩處數(shù)據(jù)更新U1及U2。因此,用于存儲所述文件的存儲容量的大小明顯大于文 件的大小,此在圖14E中一目了然。因此,垃圾收集是恰當(dāng)?shù)?。圖15提供對圖14E
所示數(shù)據(jù)文件進(jìn)行垃圾收集的結(jié)果的圖解說明。該文件在垃圾收集之前占據(jù)接近五個 區(qū)塊的存儲容量(圖14E),而同一文件在垃圾收集之后裝在略大于三個存儲單元區(qū)塊 內(nèi)(圖15)。作為垃圾收集操作的一部分,從最初將數(shù)據(jù)寫入至其他被擦除區(qū)塊的區(qū) 塊中復(fù)制數(shù)據(jù),并然后將所述原始區(qū)塊擦除。若對整個文件進(jìn)行數(shù)據(jù)收集,則可將其 數(shù)據(jù)以與在文件內(nèi)的數(shù)據(jù)邏輯偏移量次序相同的物理次序復(fù)制至新區(qū)塊中。例如,更新部分U1及U2以及插入部分II在垃圾收集(圖15)之后以與其在主機(jī)文件中所出現(xiàn)的相同次序進(jìn)行存儲。垃圾收集也通常會使得在所合并的文件內(nèi)形成新的且不同的數(shù)據(jù)群組。在圖15 所示情形中,由新數(shù)據(jù)群組的如下新的索引條目序列來描述所述文件(FO, DO), (Fl, Dl), (F2, D2), (F3, D3)。此數(shù)據(jù)群組數(shù)量比在圖14E所示文件的狀態(tài)中所存在的 數(shù)據(jù)群組數(shù)量少得多。此時,其中己復(fù)制有所述文件的數(shù)據(jù)的每一存儲單元區(qū)塊存在 一個數(shù)據(jù)群組。作為垃圾收集操作的一部分,更新文件索引表(FIT)來反映形成所述 文件的新數(shù)據(jù)群組。當(dāng)一文件是垃圾收集的備選項(xiàng)時,對該文件的FIT數(shù)據(jù)群組條目進(jìn)行檢查,以判 定所述文件是否滿足垃圾收集的設(shè)定標(biāo)準(zhǔn)。當(dāng)包含所述文件的數(shù)據(jù)的任何存儲單元區(qū) 塊還包含過時數(shù)據(jù)時,將進(jìn)行垃圾收集。否則,不需要進(jìn)行垃圾收集。圖14E中的文 件包含過時數(shù)據(jù)從上面所給出的數(shù)據(jù)群組索引條目序列中一目了然。例如,從這兩個 連續(xù)數(shù)據(jù)群組(F7, D5)及(F8, D3)可以看出,在存儲文件數(shù)據(jù)的前兩個區(qū)塊中存 在過時數(shù)據(jù)。物理地址位置D5與D3的差遠(yuǎn)大于邏輯偏移量F7與F8的差。根據(jù)文件 索引數(shù)據(jù)群組條目還顯而易見,所述數(shù)據(jù)未按邏輯偏移量次序存儲。另一選擇為,文 件的各個FIT條目可保持該文件的被指過時的過時數(shù)據(jù)群組的記錄。然后,控制器僅 掃描每一文件的FIT條目,以識別任何過時的數(shù)據(jù)群組以及存儲過時數(shù)據(jù)群組的物理 區(qū)塊。通常不應(yīng)對打開的文件執(zhí)行垃圾收集,因?yàn)橹鳈C(jī)可能對所述文件繼續(xù)進(jìn)行更新或 插入,從而進(jìn)一步產(chǎn)生過時數(shù)據(jù)及/或不以邏輯偏移量次序存儲數(shù)據(jù)。由此可造成許多 此種垃圾收集操作。但在其中被擦除池區(qū)塊的數(shù)量降至一設(shè)定水平以下時,可能需要 對打開文件進(jìn)行垃圾收集,以提供足夠的被擦除區(qū)塊來用于存儲新數(shù)據(jù)或其他操作。主機(jī)關(guān)閉文件通常會使得考慮對該文件進(jìn)行垃圾收集。較佳不在文件關(guān)閉之后立 即實(shí)施垃圾收集,而是在垃圾收集將不會干擾當(dāng)前的存儲器操作時由存儲器控制器對 一關(guān)閉的文件進(jìn)行調(diào)度,以在后臺進(jìn)行垃圾收集??杀3忠焕占?duì)列,其中在一 文件關(guān)閉之后將所述文件加至所述隊(duì)列中,且隨后當(dāng)不再存在任何其他所要實(shí)施的更 高優(yōu)先權(quán)存儲器系統(tǒng)操作時,由存儲器控制器選擇已在所述隊(duì)列中所處時間最長的文 件,且進(jìn)行垃圾收集(如果需要)。此種選擇及垃圾收集操作可例如響應(yīng)于從主機(jī)接收 到一空閑命令(圖12D)而進(jìn)行。由于復(fù)制數(shù)據(jù)是垃圾收集中最耗時的部分,尤其是對于大的文件,因而可通過在 短的猝發(fā)中在任一次僅復(fù)制文件數(shù)據(jù)的一部分來將該任務(wù)劃分成多個組成部分。隨后,
可將此種局部文件復(fù)制與其他存儲器操作進(jìn)行交錯,并甚至在主機(jī)正將數(shù)據(jù)傳送至存 儲器系統(tǒng)或自存儲器系統(tǒng)傳送數(shù)據(jù)的同時進(jìn)行。也可響應(yīng)于被擦除區(qū)塊的數(shù)量降至低 于某個指定數(shù)量而增大各單獨(dú)復(fù)制數(shù)據(jù)猝發(fā)的長度。目標(biāo)是完全在后臺執(zhí)行垃圾收集,而不干擾或減慢與主機(jī)系統(tǒng)傳送數(shù)據(jù)的主操 作。但并非總可以如此,尤其是如果被擦除區(qū)塊池中可供用于編程新數(shù)據(jù)的被擦除區(qū) 塊的數(shù)量變得少于某個預(yù)設(shè)最小值時。此時,使垃圾收集優(yōu)先,并可優(yōu)先在后臺對所 述隊(duì)列中的任何文件進(jìn)行垃圾收集,以便合并數(shù)據(jù),從而提供可供用于從主機(jī)系統(tǒng)接 收新數(shù)據(jù)的額外被擦除區(qū)塊。如果在所述隊(duì)列中沒有文件,則可能需要對打開的文件 進(jìn)行垃圾收集。當(dāng)垃圾收集變?yōu)閮?yōu)先項(xiàng)時,主機(jī)將通常從存儲器系統(tǒng)接收到忙狀態(tài)信 號,并將因此延緩對新數(shù)據(jù)的任何編程,直到再次存在足夠數(shù)量的被擦除區(qū)塊為止。 相反,如果存在足夠數(shù)量或更多的被擦除池區(qū)塊,則可降低進(jìn)行垃圾收集操作的頻率, 并推遲可能會影響存儲器系統(tǒng)的性能的垃圾收集。應(yīng)注意,垃圾收集是對主機(jī)數(shù)據(jù)文件實(shí)施。響應(yīng)于文件狀態(tài)而對所述文件啟動垃 圾收集。當(dāng)啟動時,作為該過程的一部分,檢査所述文件的所有數(shù)據(jù)群組在FIT中的 索引條目。當(dāng)對文件進(jìn)行垃圾收集時,以在所述文件的數(shù)據(jù)群組索引條目中所規(guī)定的 次序,將其數(shù)據(jù)每次一個數(shù)據(jù)群組地從其現(xiàn)有區(qū)塊復(fù)制至一新打開的復(fù)制區(qū)塊。此不 同于現(xiàn)有閃速存儲器垃圾收集一其是完全基于各單獨(dú)存儲單元區(qū)塊的狀態(tài)。然而, 一般規(guī)則是,將僅對存儲所述文件的數(shù)據(jù)且也包含過時數(shù)據(jù)的各單獨(dú)區(qū)塊 進(jìn)行垃圾收集。因此,并非對存儲一文件的數(shù)據(jù)的所有區(qū)塊均進(jìn)行垃圾收集。如果一 文件僅存儲于例如兩個區(qū)塊中,且第一區(qū)塊包含過時數(shù)據(jù),而第二區(qū)塊不包含過時數(shù) 據(jù),則將對第一區(qū)塊進(jìn)行垃圾收集,而不管第二區(qū)塊的數(shù)據(jù)。將有效數(shù)據(jù)從第一區(qū)塊 復(fù)制至一被擦除復(fù)制區(qū)塊中,且所述復(fù)制區(qū)塊將隨后具有某些被擦除的頁或者其他容 量剩下,所述某些被擦除的頁或其他容量大約為過時數(shù)據(jù)的量。下文將說明使用不到 一個區(qū)塊的被擦除存儲容量。在圖14E的實(shí)例中,在進(jìn)行垃圾收集之前,存儲空間在 包含所述文件數(shù)據(jù)的五個區(qū)塊中的四個區(qū)塊中均具有過時數(shù)據(jù)(灰色區(qū)域)。作為對僅對包含過時數(shù)據(jù)的那些區(qū)塊進(jìn)行垃圾收集的一般規(guī)則的修改, 一旦判定 出將對一給定文件進(jìn)行垃圾收集,便在垃圾收集操作中包含處于一局部填充區(qū)塊中的 所述文件的任何數(shù)據(jù)。因此,將圖14E的第五區(qū)塊中的U2數(shù)據(jù)包含于垃圾收集操作 中,盡管在該區(qū)塊中并不存在過時數(shù)據(jù)。通過將所有五個區(qū)塊中的數(shù)據(jù)復(fù)制至四個被 擦除區(qū)塊中而合并所述數(shù)據(jù),因?yàn)樵诓话谖鍏^(qū)塊的數(shù)據(jù)時,所得到的四個復(fù)制區(qū) 塊中的兩個將僅被局部地填充數(shù)據(jù)。在圖15的情形中,僅一個復(fù)制區(qū)塊保持被局部填 充。通過具有更少的局部利用的區(qū)塊來改善存儲器性能。由主機(jī)系統(tǒng)發(fā)出的圖12B所示的某些文件命令可啟動垃圾收集。上文已對接收到 文件關(guān)閉命令進(jìn)行了說明。所關(guān)閉的文件被置于所述隊(duì)列中以進(jìn)行垃圾收集。刪除及 擦除命令也可促成垃圾收集。刪除文件可使包含過時文件數(shù)據(jù)的區(qū)塊被置于垃圾收集 隊(duì)列中。對被刪除文件進(jìn)行垃圾收集的效果是不存在被刪除文件的無效數(shù)據(jù),因而不
會進(jìn)行向其他區(qū)塊的數(shù)據(jù)復(fù)制。所有僅包含被刪除文件的數(shù)據(jù)的區(qū)塊僅作為垃圾收集 過程的一部分被擦除。擦除命令具有類似的效果,只是對僅包含被擦除文件的過時數(shù) 據(jù)的區(qū)塊的垃圾收集可立即進(jìn)行,或者根據(jù)優(yōu)先權(quán)進(jìn)行一例如通過將所述區(qū)塊置于垃 圾收集隊(duì)列的頂部。
所述直接文件存儲系統(tǒng)的一重要優(yōu)點(diǎn)在于,當(dāng)主機(jī)刪除文件時,存儲器會立即得 知,因?yàn)橛糜谶M(jìn)行此種操作的命令是直接發(fā)至存儲器系統(tǒng)。隨后, 一旦可以進(jìn)行擦除, 存儲器控制器便可立即擦除用于存儲被刪除文件的數(shù)據(jù)的區(qū)塊,而不會不利地影響存 儲器的其他操作。被擦除區(qū)塊隨后便可供用于存儲新數(shù)據(jù)。
在所述實(shí)施方案中,刪除或擦除文件的命令均使該文件的數(shù)據(jù)直接響應(yīng)于此而被 擦除。相反,在典型的基于邏輯的接口中,此種命令則并不直接到達(dá)存儲器控制器。 而是,主機(jī)僅釋放存儲器邏輯地址空間中曾被所刪除或被擦除文件占據(jù)的某些段。僅 當(dāng)主機(jī)此后向那些相同邏輯地址中的一個或多個寫入數(shù)據(jù)時,存儲器系統(tǒng)才得知所重 新利用的邏輯地址段中的數(shù)據(jù)已經(jīng)過時。存儲器仍不知道所述文件所占據(jù)的其他邏輯 地址段的數(shù)據(jù)已被刪除或擦除。存儲器僅在主機(jī)向那些其他邏輯地址寫入數(shù)據(jù)時才知 道先前寫入至那些邏輯段的數(shù)據(jù)已經(jīng)過時。
常用區(qū)塊
使用單個文件的數(shù)據(jù)來填充連續(xù)的區(qū)塊的結(jié)果是,當(dāng)所述文件關(guān)閉并進(jìn)行垃圾收 集時,所述文件數(shù)據(jù)中的某些可能僅占據(jù)一存儲單元區(qū)塊的一部分。進(jìn)一步,小文件 的數(shù)據(jù)可能甚至填充不到一整個區(qū)塊。如果在一區(qū)塊中僅可存儲一個文件的數(shù)據(jù),則 此將導(dǎo)致各單獨(dú)區(qū)塊的大量空間得不到利用。各單獨(dú)區(qū)塊內(nèi)的各頁存儲容量將保持被 擦除并可供用于存儲數(shù)據(jù),但將得不到利用。
因此,某些存儲單元區(qū)塊較佳存儲來自兩個或更多個文件中每一文件的較少數(shù)據(jù) 量(整個的小文件及/或在已填充其他區(qū)塊之后剩下的殘留文件數(shù)據(jù))。殘留文件數(shù)據(jù) 是關(guān)閉的文件中未占據(jù)完整區(qū)塊的數(shù)據(jù),并可包含一個或多個數(shù)據(jù)群組。 一文件映射 表可記錄單個存儲單元區(qū)塊中多于一個文件的數(shù)據(jù)群組,其記錄方式仿佛所述區(qū)塊中
的所有數(shù)據(jù)群組均是一個文件的數(shù)據(jù)群組一樣。各單獨(dú)數(shù)據(jù)群組的映射表包含該數(shù)據(jù) 群組作為一部分的文件的文件ID。使用共用區(qū)塊的主要目的是使可能因如上文所述將 文件數(shù)據(jù)寫入至存儲器中而造成的未得到利用的物理存儲器存儲容量最小化。最常見 地,因?qū)ξ募M(jìn)行垃圾收集而產(chǎn)生的一個或多個數(shù)據(jù)群組的殘留數(shù)據(jù)將作為垃圾收集 的一部分而被寫入至一共用區(qū)塊中。 一實(shí)例是圖15中進(jìn)行垃圾收集的文件,其中最末 數(shù)據(jù)群組(F3, D3)僅占據(jù)最末區(qū)塊中的一小部分。如果其保持此種方式,則最末區(qū) 塊中的大部分將得不到利用。圖15的數(shù)據(jù)群組(F3, D3)可寫入至包含來自另外一 個或多個文件的一個或多個數(shù)據(jù)群組的共用區(qū)塊中,或者可將該最末存儲器區(qū)塊指定 為共用區(qū)塊。在后一情形中,來自一個或多個其他文件的數(shù)據(jù)群組將隨后被寫入至該 同一區(qū)塊中。
另一選擇為,當(dāng)已知?dú)埩魯?shù)據(jù)量是一將適合裝于其中一個指定共用區(qū)塊內(nèi)被擦除
空間的量時,可在垃圾收集期間將殘留文件數(shù)據(jù)直接從主機(jī)寫入至共用區(qū)塊中。關(guān)閉一 之后命令(圖12B)可用于識別殘留文件數(shù)據(jù),并允許其寫入一具有足以存儲作為所 述命令的一部分而規(guī)定的數(shù)據(jù)量的開放共用區(qū)塊,而非將殘留文件數(shù)據(jù)寫入至將得不 到完全填充的擦除池區(qū)塊。此可消除在下一垃圾收集操作期間復(fù)制殘留數(shù)據(jù)的需要。 當(dāng)將新數(shù)據(jù)文件編程至存儲器內(nèi)時,作為對前面所述且在圖13A中所示的數(shù)據(jù)寫
入方法的替代,可將數(shù)據(jù)寫入至包含一個或多個其他文件的殘留數(shù)據(jù)的開放共用區(qū)塊 中,從所述區(qū)塊中第一可用物理位置開始并按次序依序經(jīng)過所述區(qū)塊的各位置。如果 主機(jī)對一文件發(fā)送打開命令,隨后立即在發(fā)送所述文件的數(shù)據(jù)之前發(fā)送關(guān)閉_之后命 令,則可判定所述文件的全部數(shù)據(jù)可適合裝于一開放共用區(qū)塊內(nèi)且所述文件將在到達(dá) 所述開放共用區(qū)塊的末尾之前被關(guān)閉。即使不知道新文件的數(shù)據(jù)的長度,也可將新文 件的數(shù)據(jù)寫入至開放共用區(qū)塊中。
因此,較佳在存儲器系統(tǒng)中保持若干個共用區(qū)塊,以用于存儲兩個或更多個不同 文件的共用數(shù)據(jù)群組。共用數(shù)據(jù)群組的大小可高達(dá)一區(qū)塊的存儲容量,粒度為一個字 節(jié)。僅其中一個共用區(qū)塊較佳包含一給定文件的數(shù)據(jù),但可包含所述文件的多于一個 數(shù)據(jù)群組。此外, 一共用數(shù)據(jù)群組較佳存儲于僅一個共用區(qū)塊中,且不劃分成存儲于 多個共用區(qū)塊中。此會避免在所述數(shù)據(jù)群組變得過時時在多個共用區(qū)塊中進(jìn)行垃圾收 集。當(dāng)一共用區(qū)塊中的數(shù)據(jù)群組變得過時時,對該共用區(qū)塊進(jìn)行垃圾收集。將此一共 用區(qū)塊中任何剩余的無效數(shù)據(jù)群組寫入至另一共用區(qū)塊中的可用被擦除空間中、或者 寫入至一被擦除池區(qū)塊中,并隨后擦除所述共用區(qū)塊。如果進(jìn)行垃圾收集的共用區(qū)塊 包含來自不同文件的兩個或更多個有效數(shù)據(jù)群組,則所述兩個或更多個有效數(shù)據(jù)群組 不需要保持在一起,而是可復(fù)制至不同的區(qū)塊。
圖16中顯示一共用區(qū)塊的實(shí)例,其已使用來自三個不同數(shù)據(jù)文件中每一數(shù)據(jù)文
件的一共用數(shù)據(jù)群組進(jìn)行編程。由于在一般的NAND陣列中限制寫入數(shù)據(jù)從位于區(qū)塊
一端的頁前進(jìn)至位于另一端的頁,因而使各數(shù)據(jù)群組相互鄰接地進(jìn)行存儲。所述區(qū)塊
一端處的白色空間指示所述區(qū)塊中尚未寫入有數(shù)據(jù)的頁。難以將可用數(shù)據(jù)群組理想地 裝入整個共用區(qū)塊中。
被存儲器系統(tǒng)指定為可在其中寫入多于一個文件的殘留數(shù)據(jù)的開放共用區(qū)塊的 區(qū)塊數(shù)量將通常僅為幾個,但如果被進(jìn)行垃圾收集的大量文件具有不適合裝入任一現(xiàn) 有開放共用區(qū)塊中可用空間的殘留文件數(shù)據(jù),則可變?yōu)樵S多個。將殘留文件數(shù)據(jù)寫入 至其中一個能最佳地利用總存儲容量的開放共用區(qū)塊中。當(dāng)在任一開放共用區(qū)塊中不 存在足夠的被擦除空間時,關(guān)閉其中一個現(xiàn)有共用區(qū)塊,并代之以打開另一共用區(qū)塊。 另一選擇為,不需要關(guān)閉現(xiàn)有的開放共用區(qū)塊,并可允許增加開放共用區(qū)塊的數(shù)量。 可將新的共用區(qū)塊指定為其中一個被擦除池區(qū)塊,但較佳是一已包含某些殘留文件數(shù) 據(jù)的未得到完全寫入的區(qū)塊,例如圖15中僅包含殘留文件數(shù)據(jù)群組(F3, D3)的最 末區(qū)塊。然而,為對共用區(qū)塊進(jìn)行垃圾收集,在必要時,較佳將一被擦除池區(qū)塊指定 為新的共用區(qū)塊。
圖17圖解說明在如下情形中寫入殘留文件數(shù)據(jù)的實(shí)例性過程其中存在五個已 包含來自另一文件的殘留數(shù)據(jù)的一個或多個數(shù)據(jù)群組的殘留或共用單元(每一者具有 一不同的區(qū)塊或元塊)。從圖15所示進(jìn)行垃圾收集的文件產(chǎn)生的最末數(shù)據(jù)群組(F3, D3)即為此種殘留文件數(shù)據(jù)的實(shí)例,盡管其可包含來自單個文件的多于一個數(shù)據(jù)群組。 存在所示的三種可能性。第一種可能性(A)將殘留數(shù)據(jù)寫入至殘留單元2,因?yàn)槠渚?有最多可用的被擦除空間。第二種可能性(B)為殘留文件數(shù)據(jù)選擇殘留單元5,因?yàn)?該殘留單元5是這五個殘留單元中最適合的。殘留文件數(shù)據(jù)接近填滿單元5,且由此 在單元2中留下更大的可供用于在將來接收更大量數(shù)據(jù)的空間。在單元1、 3或4的任 一者中不存在足以接納所述殘留數(shù)據(jù)的空間,因此這些單元被立即排除。
第三種可能性(C)將殘留文件數(shù)據(jù)寫入至擦除池中的區(qū)塊或元塊單元中。 一旦 所述殘留文件數(shù)據(jù)已寫入至被完全擦除的單元中,則其變?yōu)橐粴埩魡卧?,并可隨后由 存儲器系統(tǒng)控制器作為一共用區(qū)塊打開。在所示實(shí)例中,通常將不使用可能性(C), 因?yàn)樵跉埩魡卧?或5中的一者中存在用于殘留文件數(shù)據(jù)的空間。
另一選擇為,可允許一文件的殘留數(shù)據(jù)分裂成兩個或更多個部分,以存儲于不同 的共用區(qū)塊中。例如,現(xiàn)有的開放共用區(qū)塊可能均不具有足以存儲一特定文件的殘留 數(shù)據(jù)的可用空間,且沒有被擦除區(qū)塊可供打開作為新的共用區(qū)塊來用于所述殘留文件 數(shù)據(jù)。在此種情形中,可在兩個或更多個開放共用區(qū)塊之間劃分所述殘留文件數(shù)據(jù)。
可在一共用區(qū)塊填滿數(shù)據(jù)之前將其關(guān)閉。如上文所述,當(dāng)需要打開另一共用區(qū)塊
以存儲一文件的給定量的殘留數(shù)據(jù)時, 一具有最少可用被擦除空間量的開放共用區(qū)塊
一般將關(guān)閉。這部分地是因不將文件的殘留數(shù)據(jù)分開存儲在不同共用區(qū)塊中的優(yōu)選操
作所造成。當(dāng)存儲器系統(tǒng)通過響應(yīng)于主機(jī)的大小(Size)命令(圖12E)而報告可供
用于新數(shù)據(jù)的存儲器存儲空間時,不包含所關(guān)閉共用區(qū)塊中這些較小量的未利用容量, 因?yàn)槠洳荒芰⒓纯捎谩?br>
由于殘留文件數(shù)據(jù)因其所屬的文件被刪除或擦除而變得過時,因而還合并共用區(qū) 塊內(nèi)的數(shù)據(jù)。例如,每當(dāng)無論出于何種原因而指定共用區(qū)塊內(nèi)的殘留文件數(shù)據(jù)過時時, 均將該區(qū)塊加至上述過時文件數(shù)據(jù)區(qū)塊隊(duì)列或者另一隊(duì)列中。如果數(shù)據(jù)因存在要刪除 其文件的主機(jī)刪除命令而變得過時,則將所述共用區(qū)塊置于隊(duì)列末尾處。但是,如果 其是因擦除命令而變得過時,則所述共用區(qū)塊放到所述隊(duì)列的頂部,或者以其他方式 被賦予垃圾收集優(yōu)先權(quán)。
可并非存在單個隊(duì)列,而是在存儲器系統(tǒng)的操作期間由控制器維持五個不同的垃 圾收集隊(duì)列,其中前兩個隊(duì)列中的項(xiàng)被賦予優(yōu)先權(quán)
(1) 過時區(qū)塊優(yōu)先權(quán)隊(duì)列,過時區(qū)塊即那些作為對文件的擦除命令(圖12B) 的結(jié)果而僅包含過時數(shù)據(jù)的區(qū)塊;
(2) 共用區(qū)塊優(yōu)先權(quán)隊(duì)列,其包含因?qū)ξ募牟脸疃冞^時的數(shù)據(jù)但還包 含某些有效數(shù)據(jù);
(3) 過時區(qū)塊(僅包含過時數(shù)據(jù)的區(qū)塊)隊(duì)列,所述過時區(qū)塊是因執(zhí)行更新或
刪除命令(圖12A及12B)而形成或者因在垃圾收集期間其所有有效數(shù)據(jù)均復(fù)制至另 一區(qū)塊而形成;(4) 共用區(qū)塊隊(duì)列,所述共用區(qū)塊包含某些過時數(shù)據(jù),但其還包含有效數(shù)據(jù), 響應(yīng)于刪除命令或者在垃圾收集期間發(fā)現(xiàn)在共用區(qū)塊中存在過時數(shù)據(jù);及(5) 已接收到對其發(fā)出的關(guān)閉命令或關(guān)閉—之后命令的文件隊(duì)列。 可按上面所列次序賦予這五個隊(duì)列優(yōu)先權(quán),隊(duì)列(1)中的所有項(xiàng)均在隊(duì)列(2)中的項(xiàng)之前進(jìn)行垃圾收集,依此類推。之所以將所述區(qū)塊列于優(yōu)先權(quán)隊(duì)列(1)及(2)中,是因?yàn)槠涓髯缘乃谢蚰承?shù)據(jù)均是通過擦除命令而非通過刪除命令而變過時。 各個區(qū)塊及文件係以在存儲器系統(tǒng)的操作期間所標(biāo)識的次序添加至每一隊(duì)列中,每一隊(duì)列中最早的區(qū)塊及文件均首先得到垃圾收集(先進(jìn)先出,或FIFO)。隊(duì)列(4)與(5)中所列項(xiàng)的優(yōu)先權(quán)大致相同,因此可顛倒。另一選擇為,可存 在一更復(fù)雜的優(yōu)先權(quán)系統(tǒng),其中可能甚至在更高優(yōu)先權(quán)隊(duì)列中的一者或多者變空之前, 根據(jù)設(shè)定標(biāo)準(zhǔn)從隊(duì)列(4)及(5)中選擇文件及共用區(qū)塊。存在兩個共用區(qū)塊垃圾收 集管理目標(biāo)。 一個是在共用區(qū)塊內(nèi)的數(shù)據(jù)群組變得過時時,使可能因?qū)灿脜^(qū)塊的垃 圾收集而引起的對存儲器系統(tǒng)正常操作的破壞最小化。另一目的是當(dāng)在對共用區(qū)塊進(jìn) 行垃圾收集期間對所述區(qū)塊的數(shù)據(jù)群組進(jìn)行重新定位時使索引更新最小化。在對共用區(qū)塊進(jìn)行垃圾收集期間,所述區(qū)塊中剩余有效數(shù)據(jù)的所有共用群組每次 一個地復(fù)制至具有空間的共用區(qū)塊中的一者。若在打開的共用區(qū)塊中不存在用于一所 復(fù)制共用群組的空間,則將所述共用群組從擦除池寫入至一區(qū)塊中,并可隨后指定該 區(qū)塊作為一共用區(qū)塊。然后,作為該過程的一部分,通常關(guān)閉其中一個打開的共用區(qū) 塊。如同所有垃圾收集操作一樣,更新文件索引表(FIT),以反映所復(fù)制數(shù)據(jù)群組的 新存儲位置。垃圾收集隊(duì)列應(yīng)記錄于非易失性存儲器中。應(yīng)對包含隊(duì)列信息的頁或元頁執(zhí)行讀 取-修改-寫入操作,以添加或移除一條目。包含垃圾收集隊(duì)列信息的頁可處于一專用 區(qū)塊或元塊中,或者可與其他類型的頁共享一區(qū)塊或元塊(例如一交換區(qū)塊)。在編程期間對元頁的緩沖及使用上文說明了存儲器系統(tǒng)的操作,而未具體考慮存儲單元區(qū)塊是否作為元塊鏈接于 一起。主機(jī)與存儲器系統(tǒng)之間基于文件的接口、及上述相關(guān)存儲器系統(tǒng)操作是在使用 元塊的存儲器系統(tǒng)中以及在不使用元塊的存儲器系統(tǒng)中工作。趨勢必定是增大每次所 寫入及讀取的數(shù)據(jù)量(平行度),因?yàn)檫@會直接改善存儲器性能。各單獨(dú)存儲單元區(qū)塊 以數(shù)據(jù)位數(shù)量表示的有效寬度能通過使用由兩個或更多個此種區(qū)塊所形成的元塊而得 到增大。參見圖3,例如,沿單個區(qū)塊內(nèi)每一字線的所有存儲單元均可作為一頁一同編程 及讀取,所述頁在每一行中潛在地存儲數(shù)個一一個、兩個、四個或更多個由512個用 戶數(shù)據(jù)字節(jié)形成的扇區(qū)。且當(dāng)將兩個或更多個區(qū)塊在邏輯上鏈接成一元塊時,這兩個 或更多個區(qū)塊中每一者的一行中的所有存儲單元均可一同編程及讀取。來自兩個或更多個一同編程及讀取的區(qū)塊的這兩個或更多個頁形成一元頁。由于具有每次編程許多 數(shù)據(jù)的能力,對元頁內(nèi)的數(shù)據(jù)進(jìn)行某種分級可有助于完全利用此種可用的平行性。在圖18中圖解說明三個主機(jī)文件中每一者的一個數(shù)據(jù)元頁,為簡明起見,圖中 顯示每一元頁僅包含兩個頁。元頁中每一頁的數(shù)據(jù)均編程至元塊中的一不同區(qū)塊中。對于主機(jī)文件l,在圖18A中顯示所述元頁填充有具有鄰接偏移量(邏輯地址) 的數(shù)據(jù)作為單個數(shù)據(jù)群組O的一部分。這些數(shù)據(jù)平行地編程至接收文件1的數(shù)據(jù)的元 塊內(nèi)按次序的下一元頁中。在圖18B中,顯示該實(shí)例的主機(jī)文件2在如下方面不同其第一頁的一部分包含具有連續(xù)偏移量的數(shù)據(jù)群組l的一部分,且所述元頁的其余部分包含具有連續(xù)偏移量的另一數(shù)據(jù)群組2的一部分。盡管在文件2內(nèi)這兩個數(shù)據(jù)群組 交匯之處,數(shù)據(jù)偏移量可能存在間斷,然而這些數(shù)據(jù)一同編程至單個元頁中。如前面 所述,直接文件存儲接口是在從主機(jī)接收到主機(jī)文件的數(shù)據(jù)時寫入主機(jī)文件的數(shù)據(jù), 而無論所述數(shù)據(jù)在文件內(nèi)的偏移量次序如何。某些閃速存儲器并不允許不止一次地將數(shù)據(jù)編程至被擦除頁中。在此種情形中, 同時編程圖18B中的數(shù)據(jù)群組1及2二者。但是如果存儲器允許進(jìn)行局部頁編程,則 可將文件2的這兩個數(shù)據(jù)群組在不同時刻編程至非易失性存儲器的單個元頁中。在此 種情形中,頁0將在不同時刻得到編程,首先以數(shù)據(jù)群組l進(jìn)行編程,且然后將數(shù)據(jù) 群組2編程入頁0的其余部分以及整個頁1中。然而,通常偏好對這兩個數(shù)據(jù)群組平 行編程,以便提供系統(tǒng)性能。在圖18C中,顯示已將單個數(shù)據(jù)群組3的末尾寫入文件3的元頁中。存在某些如 下情況將如此少量的數(shù)據(jù)編程入非易失性存儲器的元頁內(nèi),而該元頁的其余部分仍 保持被擦除。一種情況是當(dāng)主機(jī)對其中數(shù)據(jù)群組3是殘留文件的文件發(fā)出關(guān)閉命令(圖 12B)時。如果主機(jī)試圖打開超過所允許數(shù)量的文件數(shù)量且選擇關(guān)閉文件3,則存儲器 控制器也可關(guān)閉數(shù)據(jù)文件3,以便允許改為打開另一更有效的文件。如果在緩沖存儲 器中沒有足以用于己打開的所有文件元頁緩沖器的容量,則存儲器控制器也可關(guān)閉文 件3。在這些情況中的任一種中,均希望將文f^緩沖器的局部數(shù)據(jù)內(nèi)容立即寫入至非 易失性存儲器中("沖洗"文件緩沖器)。主機(jī)也可發(fā)送一關(guān)機(jī)命令(圖12D),此意味 著存儲器可能要斷電且其易失性緩沖存儲器內(nèi)的所有數(shù)據(jù)如果未立即編程至非易失性 存儲器中則將丟失。如果此后想要將文件3的另一數(shù)據(jù)群組4的開頭寫入至圖18C的存儲器元頁,且 存儲器不允許進(jìn)行局部頁編程,則將數(shù)據(jù)群組4的第一頁寫入至文件3元頁的第二頁 中,如在圖18D中所示。此可導(dǎo)致非易失性存儲器元頁內(nèi)的某些存儲容量得不到使用, 如圖18D中數(shù)據(jù)群組3與4之間的空白部分所示??赏ㄟ^在文件3關(guān)閉之后執(zhí)行垃圾 收集操作來恢復(fù)該未利用的容量,或者可允許其一直存在,因?yàn)榇朔N情形可能不會頻 繁出現(xiàn)。重要的是,應(yīng)注意,本發(fā)明的直接文件存儲技術(shù)可容忍非易失性存儲器的區(qū)塊內(nèi) 具有此種未填充的間隙。而如圖7及8所示的其中存儲器系統(tǒng)通過邏輯地址空間與主
機(jī)進(jìn)行接口的當(dāng)前系統(tǒng)可能無法輕易地容忍這種間隙。與存儲器區(qū)塊或元塊具有相同 大小的邏輯數(shù)據(jù)群組映射至這些區(qū)塊或元塊內(nèi)。假如在現(xiàn)有存儲器系統(tǒng)的區(qū)塊或元塊 內(nèi)所存儲的數(shù)據(jù)中存在一間隙,則映射至所述間隙內(nèi)的邏輯數(shù)據(jù)地址將實(shí)際上不可供 主機(jī)使用。在此種現(xiàn)有接口中,主機(jī)假定其具有整個邏輯地址空間可供其利用,但很 難(即使有可能)將新數(shù)據(jù)寫入標(biāo)定該間隙的邏輯地址處。系統(tǒng)控制器中緩沖存儲器的一部分(例如圖2中的存儲器31通常用作編程數(shù)據(jù) 緩沖器。對于主機(jī)所寫入的每一現(xiàn)用文件,在該存儲器中均應(yīng)存在緩沖容量。每一此 種"文件緩沖器"均應(yīng)具有等于閃速存儲器中至少一個元頁的容量?,F(xiàn)用文件是主機(jī) 最近已向其寫入數(shù)據(jù)的打開的文件。存儲器系統(tǒng)在任一時刻所處理的現(xiàn)用主機(jī)文件的數(shù)量可等于當(dāng)前打開的存儲器 系統(tǒng)文件的數(shù)量,或者可為更少的數(shù)量。如果所允許的現(xiàn)用文件的最大數(shù)量小于所允 許的打開文件的最大數(shù)量,則必須采取措施使文件狀態(tài)在現(xiàn)用與打開之間改變,反之 亦然。為能夠這樣,將閃速存儲器中的一臨時存儲區(qū)塊指定為一交換區(qū)塊,并將長度 不到一個元頁的數(shù)據(jù)從文件緩沖器寫入至交換緩沖器,反之亦然。有效交換文件緩沖 器的索引保持在交換區(qū)塊中。文件緩沖數(shù)據(jù)作為整數(shù)個頁復(fù)制至交換區(qū)塊,隨后是提 供每一所復(fù)制文件緩沖器的長度及位置的索引的單個頁、以及與其相關(guān)的文件。周期性地壓縮所述交換區(qū)塊,并在其便滿時將其寫入至被擦除區(qū)塊。當(dāng)例如因?qū)Υ蜷_的文件A進(jìn)行主機(jī)寫入操作而必須使打開的文件A現(xiàn)用時,識 別最早寫入的現(xiàn)用文件B,并將其文件緩沖數(shù)據(jù)從控制器緩沖存儲器復(fù)制至交換區(qū)塊 中接下來的可用頁中。然后,在交換區(qū)塊中識別文件A的文件緩沖數(shù)據(jù),并將其復(fù)制 至控制器緩沖存儲器中先前分配給文件B的可用空間。較佳根據(jù)圖18所示情形中的一種,將一文件緩沖器中的數(shù)據(jù)寫入至閃速存儲器 中該文件的打開的寫入?yún)^(qū)塊中的下一可用元頁。在圖18A中,當(dāng)在文件l緩沖器中存 在形成文件1內(nèi)單個數(shù)據(jù)群組0的一部分的足夠數(shù)據(jù)時,將其在單次操作中編程至一 完整元頁。在圖18B中,當(dāng)在文件2緩沖器中存在形成文件2內(nèi)數(shù)據(jù)群組l的末尾及 數(shù)據(jù)群組2的開頭的足夠數(shù)據(jù)時,將其在單次操作中編程至一完整元頁。如果閃速存 儲裝置支持對單個頁進(jìn)行多次編程操作(局部頁編程),則當(dāng)在文件2緩沖器中存在形 成文件2內(nèi)數(shù)據(jù)群組1的末尾的足夠數(shù)據(jù)時,可將其編程至頁0的一部分。當(dāng)在文件 2緩沖器中具有形成文件2內(nèi)數(shù)據(jù)群組2的開頭的足夠數(shù)據(jù)時,可在單獨(dú)的編程操作 中將其隨后編程至同一元頁的其余部分。如在圖18C中所示,當(dāng)在文件3緩沖器中存在形成文件3內(nèi)數(shù)據(jù)群組3的末尾的 數(shù)據(jù)且必須執(zhí)行緩沖器沖洗操作時,將其編程至頁0的一部分。如果閃速存儲裝置不 支持對單個頁進(jìn)行多次編程操作(局部頁編程),則當(dāng)在文件3緩沖器中存在形成文件 3內(nèi)數(shù)據(jù)群組4的開頭的足夠數(shù)據(jù)時,隨后在單獨(dú)的編程操作中將其編程至同一元頁 中的頁1。在垃圾收集期間也使用元頁文件緩沖器??蓪⑽募挠行?shù)據(jù)群組從非易失性存 儲器中讀出并寫入至該文件的控制器緩沖器元頁中。如果同時正對所述文件進(jìn)行重新 排序,則將數(shù)據(jù)群組以其主機(jī)數(shù)據(jù)偏移量次序?qū)懭胫辆彌_器中。當(dāng)然,每一數(shù)據(jù)群組 中的數(shù)據(jù)均具有鄰接的邏輯偏移量。 一旦元頁緩沖器變滿,其數(shù)據(jù)便被平行地編程至 非易失性存儲器的新區(qū)塊中。 文件加索引存儲于存儲器系統(tǒng)中的每一文件均如上文參照圖13-16所具體說明由其自身的索 引條目序列來界定。當(dāng)在其中附加、插入或更新文件數(shù)據(jù)時,以及當(dāng)對文件進(jìn)行垃圾收集時,這些條目會隨時間發(fā)生變化。圖19圖解說明在幾個不同時刻0、 2、 4、及5 中的每一者處, 一個文件的文件索引表(FIT)中的索引條目序列。這些是在上文中分 別參照圖14A、 14C、 14E及15所述的序列。FIT中的數(shù)據(jù)較佳由存儲器控制器在不 存在來自主機(jī)系統(tǒng)的協(xié)助的情況下寫入并保持為當(dāng)前數(shù)據(jù)。主機(jī)系統(tǒng)在將數(shù)據(jù)寫入至 存儲器系統(tǒng)時提供路徑名、文件名及數(shù)據(jù)在文件內(nèi)的偏移量,但主機(jī)不參與界定數(shù)據(jù) 群組或者將數(shù)據(jù)群組存儲于存儲單元陣列中的何處。在圖19的條目中,圖14及15 的存儲單元區(qū)塊以1開始從左側(cè)開始編號。因此,對于圖14C中所示狀態(tài)的文件,在 圖19中標(biāo)注其第三數(shù)據(jù)群組(F6, D7)存儲于區(qū)塊004 (從左側(cè)起第四個區(qū)塊)中從 該區(qū)塊起始地址開始的D7個字節(jié)中。較佳還隨所述表的每一條目一起包含每一數(shù)據(jù) 群組的長度。圖19中針對一個文件所示的序列索引條目由存儲器控制器在對文件的改動使文 件的數(shù)據(jù)群組得到修改時,或者以其他不太頻繁的間隔進(jìn)行重寫??刂破骺蓪⑦@些改 動存儲于其存儲器中,并隨后將其中的許多同時寫入至閃速存儲器。在任一時刻一文件僅存在一組有效的索引;在圖19中顯示用于在不同時刻界定所述文件的四組此種索 引。存儲器系統(tǒng)控制器隨后根據(jù)需要使用所述文件的當(dāng)前一組索引將額外數(shù)據(jù)編程至 所述文件,從所述文件讀取數(shù)據(jù),對所述文件的數(shù)據(jù)進(jìn)行垃圾收集,及可能進(jìn)行其他 操作。因此,如果各單獨(dú)文件索引條目以其文件偏移量(Fx)次序進(jìn)行存儲,則FIT 會更易于使用,但是如果不是,則控制器可當(dāng)然地以該邏輯次序讀取所述^:目。存儲 器控制器讀取特定文件的索引條目的最常見原因是在執(zhí)行主機(jī)命令的過程中。圖20顯示一種維持及使用文件索引表(FIT)作為一文件映射表一部分的較佳技 術(shù)。 一文件加索引結(jié)構(gòu)鏈用于使用一規(guī)定路徑名識別具有規(guī)定偏移地址的數(shù)據(jù)在文件 內(nèi)的物理位置。文件映射表包含一目錄201,目錄201具有實(shí)質(zhì)與在傳統(tǒng)邏輯地址接 口中所用的標(biāo)準(zhǔn)磁盤操作系統(tǒng)(DOS)根目錄及子目錄結(jié)構(gòu)相同的邏輯結(jié)構(gòu)。文件目 錄201可存儲于存儲器系統(tǒng)內(nèi)的一個或多個專用閃速區(qū)塊中。但文件目錄201較佳由 存儲系統(tǒng)而非由主機(jī)來管理。本文中圖12C所示的各主機(jī)目錄命令是由存儲器系統(tǒng)控 制器執(zhí)行,但以控制器所決定的時刻及方式執(zhí)行。較佳不允許主機(jī)直接寫入至文件目 錄。在文件目錄201中保持若干大小均勻的條目,每一條目均標(biāo)識一目錄或文件。使 用一組鄰接的條目來規(guī)定一特定命令內(nèi)的各要素。 一規(guī)定一 目錄的條目中的指針字段
標(biāo)識用于規(guī)定該目錄內(nèi)各要素的其他鄰接條目的開頭。 一規(guī)定一文件的條目中的指針 字段界定一相關(guān)聯(lián)文件索引表(FIT) 203內(nèi)的區(qū)塊數(shù)量及文件數(shù)量。FIT 203包含數(shù)據(jù)群組的大小均勻的條目,每一條目均標(biāo)識在數(shù)據(jù)群組的存儲器 系統(tǒng)內(nèi)所述數(shù)據(jù)群組的開頭的偏移量及物理位置。如果以字節(jié)粒度保持邏輯地址,則 每一 FIT條目的偏移量均包含從指定數(shù)據(jù)群組開頭的文件起始處算起的規(guī)定數(shù)量的字 節(jié)。類似地,可使用字節(jié)粒度來規(guī)定數(shù)據(jù)群組起始處的物理位置。上文參照圖19說明 了一實(shí)例性文件在不同時刻的FIT條目的內(nèi)容。為每一數(shù)據(jù)群組維持一單獨(dú)的條目。 每一文件皆由文件內(nèi)各數(shù)據(jù)群組的一組鄰接的索引條目來界定。每一文件的這些條目 的數(shù)量將通常各異。主機(jī)為文件提供的路徑名用于穿過文件目錄的層次結(jié)構(gòu),以獲得在FIT內(nèi)的區(qū)塊 數(shù)量及文件數(shù)量。路徑名通常包括一個、兩個或更多個目錄及子目錄。這些目錄及子 目錄用于存取文件目錄201內(nèi)包含一試圖要存取的文件的目錄。然后,搜索該目錄內(nèi) 的文件名,以找到由主機(jī)所提供的文件名的一條目205。當(dāng)找到時,條目205提供一 指向該文件在FIT203中的一鄰接條目群組的指針。這些條目是參照圖19所述的條目 性質(zhì)。然后,將這些條目的偏移量與主機(jī)所提供的偏移地址相比較,以識別正確的條 目207,并由此識別正確的數(shù)據(jù)群組。如果不存在相同的偏移量匹配項(xiàng)(由于包含于 條目中的偏移量僅僅是數(shù)據(jù)群組的起始地址,因而可能常常如此),則選擇用于標(biāo)識一 在其中包含該偏移量的數(shù)據(jù)群組的條目。在該實(shí)例中,F(xiàn)IT203的所選條目207包含含 有主機(jī)試圖存取的數(shù)據(jù)的存儲位置的物理區(qū)塊及字節(jié)。圖20中文件的目錄條目205的指針是在所述文件首次創(chuàng)建時或者在所述文件的 數(shù)據(jù)群組條目在FIT 203中的位置發(fā)生變化時由存儲器系統(tǒng)控制器指配。該指針是前 面所述文件一句柄的一實(shí)例。為避免每次存取文件時主機(jī)必須遍歷文件目錄201的層次 結(jié)構(gòu)才能找到文件的FIT目錄,存儲器系統(tǒng)可將文件—句柄發(fā)送至主機(jī),以使其可此后 直接存取打開的文件的FIT條目。圖21圖解說明將各單獨(dú)條目存儲于文件目錄201中的存儲器系統(tǒng)內(nèi)的各頁。某 些條目提供指向文件目錄201內(nèi)的目錄的指針,而其他條目提供指向FIT 203內(nèi)的數(shù) 據(jù)的指針。 一實(shí)例性條目209 —其為存儲于單個存儲器頁中的諸多條目中的一個一圖 解說明每一條目均具有四個字段。第一字段包含由主機(jī)指配的目錄或文件的名稱。第 二字段包含主機(jī)所定義的目錄或文件的屬性。在為一目錄的條目的情形中,第三字段 中的指針指向文件目錄中的另一條目。在為文件的條目的情形中,第三字段包含指向 FIT203的文件條目(例如條目207)的指針。在目錄的條目中,第四字段(標(biāo)識為"數(shù) 據(jù)群組")是空的,但在為文件的條目時,該字段規(guī)定包含文件數(shù)據(jù)的數(shù)據(jù)群組的數(shù)量 且因而規(guī)定所述文件在FIT 203中的條目數(shù)量。應(yīng)注意,圖21中所示的文件目錄頁包含兩個區(qū)段。在最近寫入的頁211中,同 時存在目錄條目(一個示于頁213中的209處)及頁指針。在其他目錄頁(例如頁213) 中,存在目錄條目,但頁的一區(qū)域包含過時頁指針。當(dāng)前頁指針維持于最近寫入的頁(在本實(shí)例中為頁211)的同一部分中。目錄區(qū)塊中的每一邏輯頁存在一個頁指針, 其將存儲器控制器指引至對應(yīng)于其正存取的邏輯頁的物理頁。通過將頁指針維持于最 近寫入的目錄頁中,頁指針便與目錄條目同時得到更新,而無需隨后更新另一頁。在 Gorobets等人于2004年8月13日提出申請的第10/917,725號美國專利申請案中針對 邏輯地址類型的文件系統(tǒng)對此種技術(shù)進(jìn)行了更詳細(xì)說明。在特定實(shí)施方案中,目錄區(qū)塊包含固定數(shù)量的邏輯頁,該數(shù)量是存儲單元區(qū)塊中 總頁數(shù)的一指定比例(例如50%)。目錄區(qū)塊較佳是專用于存儲目錄頁的元塊,但也 可為單個擦除區(qū)塊。其可與用于存儲數(shù)據(jù)群組的元塊具有相同的平行性,或者其可具 有降低的平行性。當(dāng)文件目錄區(qū)塊變滿時,在擦除原始區(qū)塊之前,通過將每一邏輯頁 的有效版本復(fù)制至新的區(qū)塊來壓縮所述文件目錄區(qū)塊。在已壓縮一目錄區(qū)塊之后,立 即以目錄條目寫入新復(fù)制區(qū)塊中一規(guī)定比例(例如50%)的頁。其余頁則處于被擦除 狀態(tài),以允許寫入經(jīng)過更新的或新的條目。當(dāng)創(chuàng)建、修改或刪除目錄或文件的條目時,將所述目錄的包含該目錄或文件的該 組條目重寫于目錄區(qū)塊的下一可用被擦除頁中,從而使目錄的條目保持鄰接。這是通 過對先前包含該目錄的條目的頁進(jìn)行讀取/修改/寫入操作來完成的。所述先前的頁隨后 變得過時。還對該邏輯頁的頁指針條目進(jìn)行更新,以標(biāo)識其新物理頁。此可在與在寫 入目錄條目時所用的相同頁編程操作中完成。如果創(chuàng)建一條目將使目錄的該組條目溢出一頁,則可轉(zhuǎn)而將其作為另一頁的第一 條目來寫入。如果需要,也可重寫現(xiàn)有的頁,以將目錄的該組條目移動至所述頁的末 尾。可在頁指針中重新指配目錄區(qū)塊內(nèi)的邏輯頁編號,以使目錄的條目保持鄰接。圖20的文件索引表(FIT) 203存儲構(gòu)成所述裝置中所有文件的數(shù)據(jù)群組的索引。 所述FIT存儲于存儲器系統(tǒng)的一個或多個專用FIT區(qū)塊中。每一 FIT區(qū)塊可存儲多達(dá) 一最大數(shù)量的文件的索引。FIT是通過來自文件目錄的邏輯指針進(jìn)行存取,所述邏輯 指針規(guī)定由該表加索引的其中一個文件。所述指針使用間接尋址(通過存取作為最近 寫入的FIT頁217的一部分而提供的文件指針),以使其不會在更新索引并將索引重寫 入FIT區(qū)塊內(nèi)時發(fā)生改變。文件目錄201中的文件條目(例如條目205)的FIT指針具有兩個主要字段。第 一字段是FIT區(qū)塊編號,其標(biāo)識構(gòu)成FIT的其中一個邏輯FIT區(qū)塊。對分配給FIT區(qū) 塊編號的實(shí)際物理區(qū)塊地址進(jìn)行單獨(dú)管理。FIT指針的第二字段是FIT文件編號,其 標(biāo)識所標(biāo)識FIT區(qū)塊內(nèi)的邏輯文件編號。所述邏輯文件編號由存儲于FIT區(qū)塊的最近 寫入的頁內(nèi)的特定文件指針轉(zhuǎn)換成物理文件條目位置。FIT不具有預(yù)定大小,且FIT區(qū)塊的數(shù)量是文件數(shù)量以及數(shù)據(jù)所組織成的數(shù)據(jù)群 組的數(shù)量的函數(shù)。在裝置運(yùn)行期間,將創(chuàng)建新的FIT區(qū)塊并消除某些FIT區(qū)塊。參見圖22,各單獨(dú)FIT頁具有若干個數(shù)據(jù)群組條目,每一數(shù)據(jù)群組一個條目219, 如前面參照圖19所述。在該具體實(shí)例中,每一條目219包含四個字段。文件偏移量字 段規(guī)定由所述條目所標(biāo)識的數(shù)據(jù)群組的開頭在所述文件內(nèi)的偏移地址。區(qū)塊地址字段
規(guī)定區(qū)塊或元塊在包含所述數(shù)據(jù)群組的存儲器系統(tǒng)內(nèi)的物理地址。字節(jié)地址字段規(guī)定 所述頁在區(qū)塊或元塊內(nèi)的地址、及所述頁內(nèi)所述數(shù)據(jù)群組開始處的字節(jié)。第四字段是 數(shù)據(jù)群組的長度。數(shù)據(jù)群組長度可能并非在所有情形中均需要,因?yàn)榭筛鶕?jù)相鄰條目 的數(shù)據(jù)來計算數(shù)據(jù)群組的長度。然而,通過保持有所述長度,不必每當(dāng)需要數(shù)據(jù)群組 的長度時均進(jìn)行此種計算。如果各數(shù)據(jù)群組條目未以其邏輯地址次序?qū)懭胗贔IT中, 則此會成為特別有價值的信息一此時所述計算變得更加困難。主機(jī)文件較佳由一組鄰接的數(shù)據(jù)群組條目界定,所述一組鄰接的數(shù)據(jù)群組條目一 同界定用于形成所述文件的有序數(shù)據(jù)群組。圖22的頁215中所示的陰影鄰接群組條目 界定一個文件,且頁217中的那些群組條目界定另一文件。對于FIT中的每一單獨(dú)文 件,在最后所寫入的FIT頁217中均存在一個文件指針221,以用于保持于該區(qū)塊中 的各單獨(dú)文件。文件指針221界定一具有特定FIT文件編號的文件的文件條目在FIT 區(qū)塊內(nèi)的開頭。其包含兩個字段。 一個字段是其中常駐有數(shù)據(jù)群組索引條目的頁的物 理編號,而另一字段是第一群組條目在該頁內(nèi)的編號。對于FIT區(qū)塊中的每一可能的 文件編號,均存在一文件指針,即文件指針的數(shù)量等于FIT區(qū)塊中的最大文件數(shù)量。 文件指針條目中的一預(yù)留代碼(未顯示)指示未在FIT區(qū)塊中得到使用的特定文件編 號。盡管文件指針可存在于其他FIT頁中,然而其僅在FIT區(qū)塊中最近寫入的頁中有 效。FIT區(qū)塊較佳是一專用于存儲FIT頁的元塊。其可具有與用于存儲數(shù)據(jù)群組的元 塊相同的平行性,或者其可具有降低的平行性。也可改為使用單個擦除區(qū)塊。 一旦FIT 區(qū)塊已得到壓縮,所述區(qū)塊中便應(yīng)僅有一規(guī)定比例(例如50%)的頁包含條目。其余 頁應(yīng)處于被擦除狀態(tài),以允許寫入經(jīng)過更新的或新的條目。當(dāng)維持有大量的文件時, 可能需要不止一個FIT區(qū)塊。通過將一個或多個完整文件的數(shù)據(jù)群組條目寫入于FIT區(qū)塊的下一可用未編程頁 來更新FIT。文件的文件指針條目也得到更新,以標(biāo)識文件條目的新位置。文件數(shù)據(jù) 群組條目與文件指針二者是在同一頁編程操作中寫入。文件條目的先前位置隨后在 FIT區(qū)塊中變得過時。另一選擇為,可通過將文件條目寫入于一不同的FIT區(qū)塊或新 的FIT區(qū)塊中來更新文件條目。在此種情形中,這兩個區(qū)塊中的文件指針均應(yīng)更新, 且應(yīng)修改文件目錄中的文件邏輯指針。當(dāng)一FIT區(qū)塊變滿時,將有效群組條目以壓縮形式復(fù)制至新的被擦除區(qū)塊,并擦 除先前的FIT區(qū)塊。該操作不改變邏輯FIT區(qū)塊編號及邏輯文件編號。應(yīng)對數(shù)據(jù)群組 條目的數(shù)量加以限制,以便在壓縮后的FIT區(qū)塊中僅有一規(guī)定比例(例如百分之五十) 的頁得到編程。如果需要,應(yīng)將文件條目移至其他FIT區(qū)塊,且應(yīng)對其在文件目錄中 的邏輯指針進(jìn)行修改。希望將一單獨(dú)文件的所有FIT條目保存于一個頁或元頁中。此使得相對易于讀取 文件的所有條目。盡管可通過在文件的每一 FIT條目中包含下一 FIT條目的物理地址 來將各FIT條目鏈接于一起,然而此將有可能需要讀取不止一個FIT頁或元頁。還希
望使各FIT條目在所述頁內(nèi)保持鄰接。此可導(dǎo)致當(dāng)FIT條目數(shù)量增多時頻繁地寫入新 的頁,當(dāng)打開一關(guān)閉的文件并對其添加數(shù)據(jù)群組時尤其如此。當(dāng)將新的FIT條目寫入 新的頁中時,現(xiàn)有的條目是從另一頁進(jìn)行復(fù)制并隨同新條目一起寫入新的頁中?;謴?fù) 現(xiàn)有條目的先前頁中過時數(shù)據(jù)所占據(jù)的空間以在壓縮FIT區(qū)塊時使用。如上文所述,各單獨(dú)數(shù)據(jù)群組包含于單個區(qū)塊或元塊內(nèi),可在所述區(qū)塊內(nèi)的任一 字節(jié)邊界上開始,并可具有等于任意整數(shù)個字節(jié)的長度??稍趯⒚恳粩?shù)據(jù)群組寫入存 儲器中時由控制器對其附加一報頭。此一報頭可包含兩個字段。第一字段包含用于標(biāo) 識數(shù)據(jù)群組開頭的代碼。該代碼對于所有數(shù)據(jù)群組可均相同,且被選取為位圖案,所 述位圖案不常存在于作為所述群組一部分加以存儲的數(shù)據(jù)中,但并非所述代碼必定永遠(yuǎn)不出現(xiàn)于此種數(shù)據(jù)中??赏ㄟ^如下方式找到數(shù)據(jù)群組的開頭由存儲器控制器掃描為該代碼所存儲的數(shù)據(jù),然后當(dāng)其找到所述代碼的位圖案時,確認(rèn)其確實(shí)是數(shù)據(jù)群組 的開頭而非群組內(nèi)的數(shù)據(jù)。報頭的第二字段使得能夠進(jìn)行該確認(rèn)。該第二字段是一指針,其指向包含所述數(shù)據(jù)群組的文件在FIT203 (圖20及22)中的文件條目。第二字 段界定FIT區(qū)塊編號及FIT文件條目??刂破麟S后讀取FIT文件條目,以查看其是否 指回至從中讀出所述代碼的數(shù)據(jù)群組。如果是,則確認(rèn)所述代碼是對其處于數(shù)據(jù)群組 報頭內(nèi)的指示。如果不是,則得知所述代碼的位圖案已從其他數(shù)據(jù)讀出,因而被作為 數(shù)據(jù)群組報頭忽略。通過包含此一報頭作為存儲于各單獨(dú)數(shù)據(jù)群組中的數(shù)據(jù)的一部分,存儲器中任一 數(shù)據(jù)群組所屬的文件均可通過如下方式加以確定讀取其報頭并存取所述報頭所指向 的FIT條目。FIT條目219 (圖22)可包含文件ID。此種能力在本文中例如用于在對 共用區(qū)塊進(jìn)行垃圾收集期間標(biāo)識共用區(qū)塊中的數(shù)據(jù)群組。如果因?yàn)楣灿脜^(qū)塊內(nèi)的一個 或多個其他數(shù)據(jù)群組過時而開始垃圾收集,則希望能夠標(biāo)識每一其余有效數(shù)據(jù)群組所 屬的文件??刹⒎鞘箞箢^作為每一數(shù)據(jù)群組的一部分,而是可每一文件提供一個報頭。當(dāng)己 知文件中數(shù)據(jù)群組的FIT條目的位置時,較佳能夠標(biāo)識文件的完整路徑名,且文件報 頭使此成為可能??商峁┐艘粓箢^作為FIT中文件的該組條目中的第一個,或者文件 目錄中目錄的一組條目中的第一個。該文件報頭包含一用于將其標(biāo)識為FIT文件報頭的代碼、及一反向指針,所述反 向指針指向指向它的目錄條目。FIT文件報頭也可包含其他信息,例如文件長度及數(shù) 據(jù)群組的數(shù)量。另一選擇為,報頭條目可占據(jù)一個或多個正常條目的空間。類似地,目錄報頭條目包含一用于將其標(biāo)識為目錄報頭的代碼、以及一反向指針, 所述反向指針指向指向它的目錄條目。根目錄是在其報頭中以顯式方式標(biāo)識。目錄報 頭也可包含其他信息,例如目錄中的條目數(shù)量。作為對使用此種數(shù)據(jù)群組或文件報頭的替代,可在每一共用區(qū)塊的末尾寫入一索 引,以標(biāo)識共用區(qū)塊中每一數(shù)據(jù)群組的相關(guān)文件。當(dāng)關(guān)閉共用區(qū)塊時,可寫入此一索 引。所述索引較佳包含所述共用區(qū)塊內(nèi)每一數(shù)據(jù)群組在該區(qū)塊中開始的物理字節(jié)地址、
及一指向該數(shù)據(jù)群組的FIT條目的指針。然后,可參照在每一數(shù)據(jù)群組的索引條目中 所提供的FIT條目來確定每一共用區(qū)塊數(shù)據(jù)群組作為其一部分的文件。如果希望使存儲于存儲器中的數(shù)據(jù)群組具有某種文件標(biāo)識冗余度,則即使采用這 些共用區(qū)塊索引,仍可保留上述數(shù)據(jù)群組報頭。由于存儲裝置管理文件目錄及文件索引,因此其可控制報告給主機(jī)的裝置配置參 數(shù)。而當(dāng)如在現(xiàn)有商業(yè)系統(tǒng)中一樣由主機(jī)管理裝置的文件系統(tǒng)時,這通常是不可能的。 存儲裝置可改變所報告的存儲容量,例如總裝置的容量以及可用的未寫入容量二者。在直接文件接口處對文件所使用的路徑名可標(biāo)識存儲裝置自身的ID以及存儲裝 置內(nèi)的分區(qū)。允許存儲裝置修改分區(qū)的大小及數(shù)量可以是一優(yōu)點(diǎn)所在。如果一分區(qū)變 滿,則可將來自一個或多個其他分區(qū)的未使用容量重新指配給滿的分區(qū)。類似地,如 果創(chuàng)建新的分區(qū),則可指配來自其他分區(qū)的未使用容量。該裝置可如上文所述修改各 分區(qū)的所報告容量。圖20及21中所示的目錄結(jié)構(gòu)使用目錄條目中的指針來識別該目錄內(nèi)各要素的一 組其他鄰接目錄的開頭。該指針指向目錄區(qū)塊內(nèi)的邏輯頁,且當(dāng)對應(yīng)于該邏輯頁的物 理頁改變時仍保持不變。然而,目錄內(nèi)的要素數(shù)量會頻繁地改變,且具體目錄的該組 條目將頻繁地需要從一個邏輯頁移動至另一個邏輯頁,或者需要在其當(dāng)前邏輯頁內(nèi)移 動。此可導(dǎo)致頻繁地需要更新目錄區(qū)塊內(nèi)的指針參考項(xiàng)。在圖23中顯示一種用于替代 圖21所示技術(shù)的目錄結(jié)構(gòu)條目加索引技術(shù),其中其對應(yīng)要素是以相同的參考編號加以 標(biāo)識但增加一撇號(')。圖23所示結(jié)構(gòu)與圖22所示FIT的結(jié)構(gòu)相同,但具有與目錄相關(guān)的不同術(shù)語。具 體條目并非如在圖21中一樣僅指向一頁。此提供一種比上文參照圖21所述方法更有 效地在目錄區(qū)塊內(nèi)對規(guī)定目錄的一組條目進(jìn)行間接尋址的方法。對目錄(圖23)及FIT (圖22)區(qū)塊使用同一加索引方案將較為恰當(dāng),因?yàn)槎呔哂蟹浅O嗨频奶匦约耙蟆?其均存儲與目錄或文件相關(guān)的成組的連續(xù)條目。對一組條目的更新可由改變現(xiàn)有條目 的內(nèi)容、或者改變條目數(shù)量組成。參照圖22所述的用于更新FIT條目的方法會在對物理區(qū)塊進(jìn)行壓縮之后使所述 區(qū)塊中包含所述FIT條目的一定比例(例如50%)的頁處于被擦除狀態(tài)。此然后便允 許將更新后的FIT條目寫入至被壓縮區(qū)塊的其余部分內(nèi)。所有FIT區(qū)塊均包含此種容 量開銷,甚至當(dāng)沒有由區(qū)塊加索引的文件實(shí)際打開時也如此。因此,F(xiàn)IT占用比所需 存儲容量更大的存儲容量。一種替代的FIT更新方法是使更新后的各組FIT條目寫入于單獨(dú)的FIT更新區(qū)塊 中,而非寫入于其原先所處的區(qū)塊中的可用被擦除容量中。圖24及25分別概述利用 更新區(qū)塊的文件目錄與FIT加索引技術(shù)。這些技術(shù)是相同的,只是目錄與FIT的術(shù)語 存在差別。下文說明涉及到更新如圖25中所示FIT區(qū)塊中的群組條目,但同等地適用于更 新文件目錄中的群組條目(圖24)。
從FIT區(qū)塊中讀取群組條目如上文所述。FIT指針(FIT Pointer)的FIT區(qū)塊編號 (FIT Block No)字段界定邏輯FIT區(qū)塊。FIT區(qū)塊列表(FIT Block List)包含于閃速 存儲器中的數(shù)據(jù)結(jié)構(gòu)中,并提供用于將FIT區(qū)塊編號轉(zhuǎn)換成其所處于的區(qū)塊的物理地 址。每當(dāng)在壓縮或合并操作中移動FIT區(qū)塊時,均更新FIT區(qū)塊列表中的區(qū)塊地址。該區(qū)塊中最近寫入的頁的文件指針(File Pointers)區(qū)域允許將FIT指針中的FIT 文件編號(FIT File No)值轉(zhuǎn)換成文件指針,所述文件指針指明所規(guī)定文^^的該組文 件群組條目(File Group Entries)的起點(diǎn)。隨后可從FIT區(qū)塊讀取所述文件群組條目。當(dāng)更新群組條目的內(nèi)容、或者文件的該組群組條目中的群組條目數(shù)量時,會將完 整的該組條目重寫于一被擦除頁中。(這是基于如下假定頁是閃速存儲器中的最小編 程單位,在各次擦除操作之間禁止對同一頁進(jìn)行多次寫入操作。)該組可占據(jù)多個頁 (如果需要)。在當(dāng)前所述的技術(shù)中,該頁是FIT區(qū)塊中下一可用的頁。在經(jīng)過修訂的方案中, 該頁是單獨(dú)FIT更新區(qū)塊中下一可用的頁。FIT更新區(qū)塊具有與FIT區(qū)塊相同的頁結(jié) 構(gòu),如在圖23中所示。其存在是由在FTT更新區(qū)塊列表(FIT Update Block List)中存 在目標(biāo)FIT區(qū)塊編號來標(biāo)識,所述FIT更新區(qū)塊列表還編號更新區(qū)塊的物理區(qū)塊地址 及對應(yīng)于原始FIT文件編號(FIT File No)的更新文件編號(Update File No)。每一所 更新的FIT區(qū)塊均可存在單獨(dú)的FIT更新區(qū)塊,或者較佳地,一FIT更新區(qū)塊可與多 個FIT區(qū)塊相關(guān)。單個FIT區(qū)塊也可與多個FIT更新區(qū)塊相關(guān)。當(dāng)FIT更新區(qū)塊變滿時,其有效數(shù)據(jù)可以壓縮形式寫入至被擦除區(qū)塊,所述被擦 除區(qū)塊變?yōu)樾碌腇IT更新區(qū)塊。如果更新僅與幾個文件相關(guān),則可存在少至單頁的有 效數(shù)據(jù)??蓪⒍鄠€FIT更新區(qū)塊一同壓縮至單個區(qū)塊。如果所述更新區(qū)塊與仍打開的 可能繼續(xù)進(jìn)行更新的一個或多個文件相關(guān),則區(qū)塊壓縮優(yōu)于區(qū)塊合并。當(dāng)在FIT更新區(qū)塊中更新文件的群組條目時,原始FIT區(qū)塊中該文件的條目變得 過時。在某一階段中,原始FIT區(qū)塊必須經(jīng)歷垃圾收集操作,以對其進(jìn)行整理。此可 通過將FIT區(qū)塊與FIT更新區(qū)塊中的有效數(shù)據(jù)合并至被擦除區(qū)塊中來完成。如果條目數(shù)量在更新過程中已增加,且有效數(shù)據(jù)無法合并至單個被擦除區(qū)塊中, 則原先指配給該FIT區(qū)塊的文件可重新指配給兩個或更多個FIT區(qū)塊,且可對兩個或 更多個區(qū)塊執(zhí)行合并。來自FIT更新區(qū)塊的條目可與來自FIT區(qū)塊的條目合并,且因此從FIT更新區(qū)塊 中消除,而其他文件的條目則可保留在FIT更新區(qū)塊中。作為另一選擇,可將目錄區(qū)塊與FIT區(qū)塊結(jié)構(gòu)并入單個索引區(qū)塊(IndexBlock) 結(jié)構(gòu)中,所述單個索引區(qū)塊結(jié)構(gòu)可包含目錄條目與文件群組條目二者。當(dāng)存在單獨(dú)的 目錄區(qū)塊與FIT區(qū)塊結(jié)構(gòu)時,或者當(dāng)存在一組合式索引區(qū)塊結(jié)構(gòu)時, 一索引更新區(qū)塊 (Index Update Block)可為目錄條目及文件群組條目充當(dāng)更新區(qū)塊。應(yīng)認(rèn)識到,上文參照圖20-25所述的文件目錄及FIT是在DOS系統(tǒng)上進(jìn)行建模。 另一選擇為,其可在Linux、 Unix、 NT文件系統(tǒng)(NTFS)或某種其他已知的操作系
統(tǒng)上進(jìn)行建模。具體存儲器系統(tǒng)操作實(shí)例圖26-32所示的操作流程圖提供如上文參照圖2-6所述、但使用參照圖9及圖10-22 所述的直接文件接口技術(shù)的具體組合加以構(gòu)造的存儲器系統(tǒng)的操作的實(shí)例。包含于圖 26-32的流程圖中的功能主要由執(zhí)行其所存儲固件的控制器11 (圖2)來實(shí)施。首先參見圖26,其顯示一總體系統(tǒng)操作。在第一步驟251中,將存儲器系統(tǒng)初始 化,此包括處理器27 (圖2)執(zhí)行ROM29中的引導(dǎo)代碼來將非易失性存儲器中的固 件裝入RAM31中。在初始化之后,在該固件的控制下,存儲器系統(tǒng)隨后查找來自主 機(jī)系統(tǒng)的命令,如步驟253所示。如果主機(jī)命令待決,則從在圖12中所列出的那些命 令中識別所述命令。如果為讀取命令(圖12A),則在步驟255中識別出該命令并由一 在257處所指示的過程來執(zhí)行,所述過程將在下文中參照圖27進(jìn)行更全面說明。如果 不是讀取命令,則在圖26的步驟259中識別出圖12A所示寫入、插入或更新編程命 令中的任一者,并由一作為圖28的顯示主題的過程261來執(zhí)行。如果是刪除或擦除命 令(圖12B),則在步驟262中識別出該命令并在步驟263中執(zhí)行,如在圖30中所更 詳細(xì)說明。在圖26的264處識別出來自主機(jī)的空閑命令(圖12D),且該命令引起在 圖31的流程圖中所示的垃圾收集操作265。圖26-32所示的該實(shí)例是針對如前面所述 以元頁及元塊進(jìn)行操作的存儲器系統(tǒng)所述,但也可由組織成頁及/或區(qū)塊形式的存儲器 系統(tǒng)執(zhí)行。如果主機(jī)命令并非讀取、寫入、插入、更新、刪除、擦除或空閑命令,則在該具 體實(shí)例中,由圖26的步驟267來執(zhí)行此種另一命令。在這些其他命令中,有那些使得 將垃圾收集操作添加至一隊(duì)列的命令,例如在圖12B中所列且在上文所述的關(guān)閉命令 及關(guān)閉—后命令。在由步驟257、 261、 263、 265或267中的任一步驟執(zhí)行所接收命令 之后,下一步驟268詢問優(yōu)先權(quán)垃圾收集隊(duì)列是否是空的。如果是,則所述處理返回 至步驟253來執(zhí)行待決的主機(jī)命令(如果存在)。如果不是,則所述處理返回至步驟 265,以繼續(xù)進(jìn)行垃圾收集,而非允許可執(zhí)行另一主機(jī)命令。對于參照圖26-32的流程 圖所述的具體實(shí)例,存在上文所述的五個不同的垃圾收集隊(duì)列兩個優(yōu)先權(quán)隊(duì)列,其 用于過時元塊(僅具有過時數(shù)據(jù)的元塊)及具有過時數(shù)據(jù)的共用元塊,其中所述過時 數(shù)據(jù)是因擦除命令而產(chǎn)生;兩個其他隊(duì)列,其用于過時元塊及具有過時數(shù)據(jù)的共用元 塊,其中所述過時數(shù)據(jù)是因執(zhí)行除擦除命令之外的命令而產(chǎn)生;以及一個使得對文件進(jìn)行垃圾收集的隊(duì)列。對于在這三個非優(yōu)先權(quán)隊(duì)列中所列的垃圾收集,賦予另一待決 的主機(jī)命令優(yōu)先權(quán)來執(zhí)行所列的垃圾收集操作。然而,對于優(yōu)先權(quán)隊(duì)列中的垃圾收集, 則賦予垃圾收集比執(zhí)行新主機(jī)命令高的優(yōu)先權(quán)。也就是說,可使主機(jī)等待至完成任何 垃圾收集操作后才可執(zhí)行新的主機(jī)命令。這是因?yàn)橹鳈C(jī)此前已將優(yōu)先權(quán)賦予使用擦除 命令來擦除優(yōu)先權(quán)隊(duì)列中的元塊中的數(shù)據(jù)。優(yōu)先權(quán)垃圾收集還使得以相對很短的處理 時間來產(chǎn)生額外的被擦除元塊。但是如果無優(yōu)先權(quán),則當(dāng)主機(jī)空閑時在后臺執(zhí)行垃圾收集,或者當(dāng)需要維持被擦除區(qū)塊池時與其他操作相交織。如果步驟268確定出不存
在待決的優(yōu)先權(quán)垃圾收集操作,則下一步驟隨后是步驟253,在該步驟中執(zhí)行新的主 機(jī)命令(如果有)。返回圖26中的步驟253,如果沒有待決的主機(jī)命令,則執(zhí)行垃圾收集265,包括 非優(yōu)先權(quán)垃圾收集一如果步驟269確定出主機(jī)不活動或空閑己達(dá)一預(yù)定時間長度、或 者最近接收到的主機(jī)命令是空閑命令,或者步驟264確定出待決的主機(jī)命令是空閑命 令。在這些情況下,隨后最可能完全在后臺執(zhí)行垃圾收集。圖27所示流程圖的主題是在圖26的步驟257中執(zhí)行讀取命令。第一步驟271是 讀取文件索引表(FIT),如上文參照圖19及22所述。主機(jī)讀取命令包括文件ID及文 件內(nèi)要開始讀取處的偏移量(參見圖12A)。要讀取的文件的所有FIT條目或者其某些 部分較佳從非易失性存儲器讀入控制器存儲器31 (圖2)中,以避免每次需要非易失 性存儲器中的某些數(shù)據(jù)時均需要從非易失性存儲器中讀取FIT。在步驟273中,將數(shù) 據(jù)群組編號計數(shù)器初始化為構(gòu)成起始偏移量所在的所請求文件的數(shù)據(jù)群組的編號。這 是通過將主機(jī)所規(guī)定的起始偏移量與主機(jī)所指定文件的FIT條目中各數(shù)據(jù)群組的偏移 量進(jìn)行比較來完成。接下來在步驟275中,將數(shù)據(jù)群組長度計數(shù)器初始化成從主機(jī)所 提供偏移量至數(shù)據(jù)群組末尾的初始數(shù)據(jù)群組內(nèi)的數(shù)據(jù)量。每次讀取一個數(shù)據(jù)群組,且 步驟273及275設(shè)置兩個用于管理對第一數(shù)據(jù)群組的讀取的計數(shù)器。所要讀取的數(shù)據(jù) 在非易失性存儲器內(nèi)的起始物理字節(jié)位置是根據(jù)初始數(shù)據(jù)群組的FIT條目加以確定。 數(shù)據(jù)在群組內(nèi)的邏輯偏移量與物理字節(jié)地址是線性相關(guān)的,因此如果讀取不是在數(shù)據(jù) 群組的起始處開始,則根據(jù)主機(jī)所提供的在文件內(nèi)的起始偏移量來計算開頭字節(jié)地址。 另一選擇為,為簡化數(shù)據(jù)群組長度計數(shù)器的初始化,可將每一數(shù)據(jù)群組的長度添加至 FIT中的其記錄219中(圖22)。在對各流程圖的本說明的其余部分中,假定存儲器系統(tǒng)是以元塊進(jìn)行操作,且數(shù) 據(jù)是以元頁為單位進(jìn)行讀取及編程,如前面所述。在步驟277中從存儲于非易失性存 儲器中的包含起始字節(jié)地址的初始數(shù)據(jù)群組中讀取數(shù)據(jù)元頁。所讀取數(shù)據(jù)通常隨后寫 入至控制器緩沖存儲器(例如圖2中的RAM 31)中,以便傳送至主機(jī)。然后,在步 驟279中將數(shù)據(jù)群組長度計數(shù)器遞減所述一個元頁。然后在步驟281中讀取該計數(shù)器, 以判定其是否已達(dá)到0。如果沒有,則還有要讀取的所述初始數(shù)據(jù)群組的數(shù)據(jù)。但是 在返回至步驟277以按次序讀取下一數(shù)據(jù)元頁之前,步驟283檢查主機(jī)是否已發(fā)出另 一命令。如果是,則終止讀取操作且該過程返回至圖26的步驟253,以識別所接收的 命令并隨后執(zhí)行所述命令。如果不是,則通過在圖27的步驟277及279中讀取其下一 元頁來繼續(xù)讀取所述初始數(shù)據(jù)群組。此會繼續(xù)進(jìn)行到通過步驟281確定出數(shù)據(jù)群組長 度計數(shù)器已到達(dá)0為止。在發(fā)生此種情況時,在步驟285中再次讀取文件的FIT條目,以在步驟287中確 定當(dāng)前文件中是否存在要讀取的其他數(shù)據(jù)群組。如果是,則在步驟289中更新數(shù)據(jù)群 組編號計數(shù)器,以標(biāo)識下一數(shù)據(jù)群組,且在步驟291中將數(shù)據(jù)群組長度計數(shù)器初始化 成新群組中的數(shù)據(jù)長度。然后,如果通過步驟283確定出不存在待決的其他主機(jī)命令,
則在步驟277中讀取新數(shù)據(jù)群組的第一元頁。然后,對新數(shù)據(jù)群組的每一元頁重復(fù)步驟277及279,直到其所有數(shù)據(jù)均被讀取為止,此時,步驟285及287判定是否仍存 在另一數(shù)據(jù)群組,依此類推。當(dāng)通過步驟287判斷出所述文件中處于主機(jī)所提供偏移 量之后的所有數(shù)據(jù)群組均已得到讀取時,所述處理返回至圖26的步驟253來執(zhí)行另一 主機(jī)命令。在其中使用一文件作為循環(huán)緩沖器的特殊情形中,可在圖27的步驟287之后重 復(fù)對文件的讀取,而非返回至圖26的步驟253。在讀取期間在步驟283中主機(jī)響應(yīng)于 將數(shù)據(jù)寫入至當(dāng)前文件的主機(jī)命令而正對同一文件的數(shù)據(jù)進(jìn)行編程的情況下,即能出 現(xiàn)此種情形。在圖28的流程圖中給出圖26的數(shù)據(jù)編程操作261的一實(shí)例。當(dāng)從主機(jī)接收到圖 12A所示的其中一個數(shù)據(jù)編程命令時,該命令包含數(shù)據(jù)所要寫入的文件的文件ID。第 一步驟295判定該指定文件是否當(dāng)前正打開以進(jìn)行編程。如果是,則下一步驟297判 定在控制器緩沖器(例如圖2中的RAM 31)中是否存在該文件的數(shù)據(jù)。數(shù)據(jù)是由主 機(jī)系統(tǒng)傳送至控制器緩沖存儲器中,并然后由存儲器系統(tǒng)控制器傳送至閃速存儲器中。但是,如果通過步驟295確定出主機(jī)所指定的文件未打開,則下一步驟299詢問 存儲器系統(tǒng)當(dāng)前所打開的進(jìn)行編程的文件數(shù)量是否等于或大于存儲器系統(tǒng)允許同時打 開的最大數(shù)量N1。數(shù)量N1預(yù)設(shè)于存儲器系統(tǒng)中,并可為5個、8個或某一其他數(shù)量 的文件。如果所打開文件的數(shù)量小于N1,則下一步驟301通過提供為將數(shù)據(jù)編程至新 文件所需的系統(tǒng)資源而打開新文件,且所述處理進(jìn)行至步驟297。然而,如果在步驟 299中確定出打開的文件數(shù)量等于或大于N1,則需要首先關(guān)閉一當(dāng)前打開的文件,如 步驟303所指示,才能在步驟301中打開新文件。在步驟303中選擇關(guān)閉一打開的文 件的依據(jù)可各不相同,但最常見的將是主機(jī)最近寫入數(shù)據(jù)最少的所打開的文件。據(jù)此 假定主機(jī)在近期不可能向該文件寫入數(shù)據(jù)。但是如果在近期要向該文件寫入數(shù)據(jù),則 在另一打開的文件關(guān)閉之后重新打開該文件(如果此時需要如此)。當(dāng)在步驟297中確定出當(dāng)前文件的至少一數(shù)據(jù)元頁處于控制器緩沖器中時,則下 一步驟305判定存儲器陣列內(nèi)的元塊是否已打開以進(jìn)行編程。如果是,則隨后在步驟 307中將數(shù)據(jù)從控制器緩沖存儲器編程至打開的元塊中。如果不是,則在步驟308中 通過提供為將數(shù)據(jù)編程至該元塊中所需的系統(tǒng)資源而首先打開該元塊。在該實(shí)例中, 每次以一個元頁為單位將數(shù)據(jù)寫入至打開的存儲器元塊中。 一旦寫入該數(shù)據(jù)單位,便 在下一步驟309中判定所打開的寫入元塊是否裝滿數(shù)據(jù)。如果沒有,則所述過程通常 經(jīng)過步驟311及313而回到步驟297,以重復(fù)所述過程以將下一數(shù)據(jù)元頁編程于當(dāng)前 打開的文件中。然而,如果通過步驟309確定出所述寫入元塊已裝滿,則在步驟315中關(guān)閉該元 塊,且在步驟317中更新FIT,包括關(guān)閉當(dāng)前的數(shù)據(jù)群組,因?yàn)橐训竭_(dá)存儲器元塊邊 界。然后,在步驟318中更新較低優(yōu)先權(quán)過時元塊垃圾收集隊(duì)列的元塊條目。在步驟 317中進(jìn)行FIT更新期間,判定對所述寫入元塊的填充是否已創(chuàng)建了另一包含當(dāng)前文
件的所有過時數(shù)據(jù)的元塊或者是一包含當(dāng)前文件的過時數(shù)據(jù)的共用元塊。如果是,則 在步驟318中將該元塊加至一適當(dāng)?shù)妮^低優(yōu)先權(quán)元塊隊(duì)列,以進(jìn)行垃圾收集。然后, 所述處理返回至步驟311并經(jīng)過步驟313回到步驟297。此次經(jīng)過步驟305及307,步 驟308將打開新的寫入元塊,因?yàn)榍耙辉獕K剛剛通過步驟315關(guān)閉。在已通過一包含步驟307的路徑寫入每一數(shù)據(jù)元頁之后,步驟311均詢問當(dāng)前存 在于被擦除元塊池中的元塊數(shù)量是否超過所己確定出的為有效操作存儲器系統(tǒng)所需要 的最小數(shù)量N2。如果是,則步驟313詢問是否己接收到另一主機(jī)命令。如果沒有其他 待決的主機(jī)命令,則重復(fù)步驟297,以將下一數(shù)據(jù)元頁編程至存儲器內(nèi)。但是,如果 已接收到主機(jī)命令,則在步驟319中更新FIT,以關(guān)閉已寫入的數(shù)據(jù)群組。當(dāng)在步驟 320 (類似于上文所述的步驟318)中更新處于較低優(yōu)先權(quán)過時元塊垃圾收集隊(duì)列中的 元塊條目之后,所述過程返回至圖26的步驟253。但是,如果在圖28的步驟311中確定出被擦除元塊不足以存儲數(shù)據(jù)(等于或少 于預(yù)設(shè)數(shù)量N2),則執(zhí)行一子例程以在后臺中對文件或共用元塊進(jìn)行垃圾收集,以便 增大被擦除元塊的數(shù)量。此種垃圾收集較佳并非在將每一數(shù)據(jù)元頁寫入存儲器中之后 均執(zhí)行,而是僅在每當(dāng)已寫入N3個元頁之后執(zhí)行。 一寫入元塊元頁編程計數(shù)器保持 對已接連編程而在其間未進(jìn)行任何垃圾收集的主機(jī)數(shù)據(jù)元頁的數(shù)量的計數(shù)值。每當(dāng)執(zhí) 行垃圾收集時,該計數(shù)器均復(fù)位至0,并此后每當(dāng)對一數(shù)據(jù)元頁進(jìn)行編程時進(jìn)行遞增。 在步驟321中,判定該計數(shù)值是否超過預(yù)定數(shù)量N3。如果未超過,則在步驟323中將 計數(shù)器遞增l,以記錄一元頁在步驟307中寫入至存儲器中。但是如果編程計數(shù)器的 計數(shù)值超過數(shù)量N3,則通過步驟325、 327及329進(jìn)行垃圾收集,隨后在步驟331中 將編程計數(shù)器復(fù)位至0。在該過程中的此時進(jìn)行垃圾收集的目的是為被擦除元塊持形成額外的被擦除元 塊。但較佳每次通過執(zhí)行步驟325、 327及329僅執(zhí)行垃圾收集操作的一部分。所述復(fù) 制操作劃分成若干在時間上散布的較小操作,以使存儲器不能供主機(jī)使用的間隔的持 續(xù)時間最小化,從而使對數(shù)據(jù)編程性能的影響最小化。且出于同一原因,僅每N3個 編程循環(huán)執(zhí)行一次局部垃圾收集操作。盡管數(shù)量N2及N3可預(yù)設(shè)于系統(tǒng)中,然而另一 選擇為,其也可在存儲器系統(tǒng)的運(yùn)行期間加以確定,以適應(yīng)于可能遇到的特定情況。由于對文件或共用元塊進(jìn)行完整垃圾收集操作以提供一個或多個額外被擦除元 塊所需的大部分時間是由將有效數(shù)據(jù)復(fù)制至一個或多個復(fù)制元塊中所耗用,因而在圖 28中與數(shù)據(jù)編程相交織的主要是此種復(fù)制操作。步驟325選擇前臺模式進(jìn)行垃圾收集 329,這參照圖31的流程圖進(jìn)行說明。然后,將數(shù)據(jù)群組中某一預(yù)設(shè)數(shù)量的元頁從進(jìn) 行垃圾收集的元塊中接連復(fù)制至先前被擦除的復(fù)制元塊中。步驟327將以此種交織方 式復(fù)制的元頁的計數(shù)器復(fù)位,以便在步驟329中,在所述操作從垃圾收集步驟返回至 數(shù)據(jù)編程循環(huán)之前復(fù)制預(yù)設(shè)數(shù)量的元頁。然后,在每一垃圾收集操作329之后,通過 步驟331將步驟321所引用的寫入元塊元頁編程計數(shù)器復(fù)位。此使得在前臺中進(jìn)行另 一垃圾收集操作之前,將N3個數(shù)據(jù)元頁寫入至存儲器中,且從而使因垃圾收集所引
起的任何數(shù)據(jù)編程延遲分散。該垃圾收集-編程算法的交織性質(zhì)由圖29中的時間線顯示。在各次垃圾收集操作 之間,來自主機(jī)的N3個數(shù)據(jù)元頁連續(xù)寫入至存儲器中。每一垃圾收集操作被限定為 復(fù)制N4個數(shù)據(jù)元頁,此后進(jìn)行另外N3個數(shù)據(jù)元頁的編程。在處于垃圾收集階段中的同時,可使主機(jī)等待存儲器系統(tǒng)完成垃圾收集后再將額外的數(shù)據(jù)元頁傳送至存儲器系 統(tǒng)控制器緩沖器。圖26中刪除文件例程263的執(zhí)行是由圖30的流程圖進(jìn)行顯示。其主要目的是識 別具有所刪除文件的過時數(shù)據(jù)的過時區(qū)塊及共用區(qū)塊,并隨后將這些區(qū)塊放置于適當(dāng) 的垃圾收集隊(duì)列中。當(dāng)刪除或擦除命令與所要刪除的文件的名稱或其他標(biāo)識一同由存 儲器系統(tǒng)接收到時,步驟335將數(shù)據(jù)群組編號計數(shù)器初始化至0。在步驟337中,讀 取文件目錄及文件索引表(FIT),以獲得存儲于存儲器中的構(gòu)成所指定文件的數(shù)據(jù)群 組的身份。然后,通過遞增指向邏輯序列中每一數(shù)據(jù)群組的數(shù)據(jù)群組編號計數(shù)器而每 次檢查所述文件的每一數(shù)據(jù)群組。對數(shù)據(jù)群組的第一詢問339是其是否位于共用元塊中。如果是,則步驟341將該 元塊添加至共用元塊垃圾收集隊(duì)列中。如果所述文件是通過擦除命令刪除,則將所述 元塊置于優(yōu)先權(quán)共用元塊隊(duì)列中,而如果是通過刪除命令刪除,則將所述元塊置于另 一共用元塊隊(duì)列中。對具有所要刪除的文件的數(shù)據(jù)群組的任何共用元塊進(jìn)行調(diào)度以進(jìn) 行垃圾收集。如果通過步驟339確定出數(shù)據(jù)群組不處于共用元塊中,則下一詢問343 判定所述數(shù)據(jù)群組是否因處于過時元塊垃圾收集隊(duì)列中而處于一早已被調(diào)度進(jìn)行垃圾 收集的元塊中。如果所述元塊早已被調(diào)度進(jìn)行垃圾收集,則不應(yīng)再將其添加至同一隊(duì) 列中。但是,如果尚未得到調(diào)度,則通過步驟345將其添加至其中一個過時元塊垃圾 收集隊(duì)列中。如果文件是通過擦除命令被刪除,則將元塊置于優(yōu)先權(quán)過時元塊隊(duì)列中, 而如果是通過刪除命令被刪除,則將其置于另一過時元塊隊(duì)列中。在已執(zhí)行步驟341或345之后,或者在步驟343中的詢問得到肯定結(jié)果時,對于 一個數(shù)據(jù)群組的過程即告結(jié)束。在下一步驟347中遞增數(shù)據(jù)群組編號計數(shù)器。然后, 進(jìn)行關(guān)于在文件中是否存在另一數(shù)據(jù)群組的詢問349。如果有,則所述處理返回至步 驟339,并對下一數(shù)據(jù)群組進(jìn)行重復(fù)。如果沒有,則得知所有包含所要刪除文件的數(shù) 據(jù)的元塊均己輸入過時及共用元塊垃圾收集隊(duì)列中。然后,在步驟351中更新FIT, 以使所要刪除的文件的數(shù)據(jù)群組記錄變得過時。然后,當(dāng)壓縮FIT時,通常消除對過 時數(shù)據(jù)群組的FIT的記錄。在最終步驟353中,更新文件目錄201 (圖20),以從中移 除所刪除的文件。圖31的流程解說明圖26所示垃圾收集操作265及圖28所示垃圾收集操作 329的具體實(shí)例。當(dāng)主機(jī)發(fā)送空閑命令(圖26的步驟264)或者當(dāng)主機(jī)已空閑一定時 間(圖26的步驟265)時,該算法被輸入后臺,或者在編程操作(圖28的步驟329) 過程中當(dāng)在被擦除元塊池中保留有不到N2個被擦除元塊時,被輸入前臺。第一詢問 355是是否存在尚未完成的仍在進(jìn)行中的垃圾收集操作。從圖31的該說明中將會看出,所述處理在某些情況下退出垃圾收集,例如當(dāng)主機(jī)發(fā)出另一命令或者當(dāng)數(shù)據(jù)復(fù)制與其 他操作相交織時。因此,如果存在未完成的待決垃圾收集操作,則接著進(jìn)行步驟357, 因?yàn)榇龥Q的垃圾收集被賦予優(yōu)先權(quán)。但是如果通過步驟355確定出不存在待決的垃圾 收集操作,則隨后在下一步驟356中查看各垃圾收集隊(duì)列,以看其中是否存在至少一 個條目。如果存在,則在下一步驟358中根據(jù)上文所述的優(yōu)先權(quán)來選擇其中一個條目 (如果存在不止一個)。過時元塊塊隊(duì)列中按次序的下一元塊的垃圾收集通常將被賦予 高于共用元塊隊(duì)列中的元塊或高于要進(jìn)行垃圾收集的文件隊(duì)列中的文件的優(yōu)先權(quán)。這 是因?yàn)橛捎诓恍枰獜?fù)制任何數(shù)據(jù),因而可通過對過時的元塊進(jìn)行垃圾收集來更快地增 大被擦除元塊池的大小。下一組步驟360、 362及366針對所選的隊(duì)列條目確定垃圾收集目標(biāo),因?yàn)樗?過程對文件、共用元塊及過時元塊而言是不同的。詢問360詢問其是否是正對文件進(jìn) 行垃圾收集。如果是,則在步驟370及372中按次序讀取所述文件的FIT條目,以設(shè) 定某些計數(shù)器及一計數(shù)值。在步驟370中,將第一計數(shù)器設(shè)定為文件中的數(shù)據(jù)群組數(shù) 量,并將第二計數(shù)器設(shè)定為文件的第一數(shù)據(jù)群組中數(shù)據(jù)元頁的數(shù)量(長度)。如果FIT 數(shù)據(jù)群組條目的長度不屬于其條目的一部分,則可根據(jù)FIT數(shù)據(jù)群組條目來計算該長 度。另一選擇為,可包含每一數(shù)據(jù)群組的長度作為其在FIT中的條目的一部分,如在 圖20及22中所示,以便無需每次需要數(shù)據(jù)群組長度時均對其進(jìn)行計算。在步驟732 中,將第三計數(shù)器設(shè)定為存儲于包含過時數(shù)據(jù)或其他文件的數(shù)據(jù)的存儲區(qū)塊中的當(dāng)前 文件數(shù)據(jù)的元頁數(shù)量。這是當(dāng)前文件中需要移動的數(shù)據(jù)。該第三計數(shù)值較佳忽略所述 文件內(nèi)的所有過時的及無效的數(shù)據(jù)群組。最后,對假如將文件的有效數(shù)據(jù)壓縮至并填 充整數(shù)個元塊時所將得到殘留數(shù)據(jù)元頁數(shù)量進(jìn)行計數(shù)。換句話說,殘留元頁計數(shù)值是 文件中不到一元塊的數(shù)據(jù)的量,假如在垃圾收集中包括所有含所述文件的數(shù)據(jù)的元塊, 則所述數(shù)據(jù)將須占據(jù)一共用的或局部得到填充的元塊。在設(shè)定這三個計數(shù)器并進(jìn)行殘 留元頁計數(shù)及存儲所述計數(shù)之后,在下一步驟359中對所述文件的數(shù)據(jù)進(jìn)行垃圾收集。返回至步驟360,如果步驟358所選的條目不是一文件,則下一詢問362判定其 是否是將被進(jìn)行垃圾收集的共用元塊。如果是,則執(zhí)行圖32所示的共用元塊垃圾收集 364。如果不是,則詢問366判定所選條目是否對應(yīng)于一過時元塊,例如通過圖30所 示步驟345添加至過時元塊隊(duì)列中的過時元塊。如果是,則在步驟368中擦除所選元 塊。在共用元塊垃圾收集364、元塊擦除368之后,或者如果詢問366的結(jié)果是否定 的響應(yīng),則所述處理返回至圖26所示步驟253。如果垃圾收集操作仍不完整,則其將 在下次進(jìn)入垃圾收集算法時繼續(xù)進(jìn)行。返回至步驟355,如果存在待決的垃圾收集,則將對其進(jìn)行進(jìn)一步處理。對于從 垃圾收集隊(duì)列中所選的新的項(xiàng),圖31所示步驟357判定所述待決的操作是否對應(yīng)于一 文件,如步驟360 —樣。如果不對應(yīng)于一文件,則執(zhí)行上文針對新的項(xiàng)所述的步驟362、 364、 366及368的處理,并隨后通過返回至圖26所示步驟253來結(jié)束垃圾收集。如果圖31所示步驟357確定出繼續(xù)進(jìn)行的垃圾收集是對文件進(jìn)行,則接下來進(jìn)
行詢問359。接下來的處理對于繼續(xù)進(jìn)行進(jìn)行垃圾收集的文件(通過步驟357)或?qū)τ?選自隊(duì)列中的其計數(shù)器及殘留元頁計數(shù)值通過步驟370及372加以設(shè)定的新文件(通 過步驟360)而言實(shí)質(zhì)上相同。當(dāng)對文件的垃圾收集正在進(jìn)行并通過步驟357繼續(xù)進(jìn) 行時,當(dāng)首先開始對文件進(jìn)行垃圾收集時,對數(shù)據(jù)群組數(shù)量及文件元頁數(shù)量計數(shù)器以 及殘留元頁計數(shù)值進(jìn)行設(shè)定。數(shù)據(jù)群組數(shù)量及元頁計數(shù)器可能已遞減至不同于通過對 當(dāng)前文件進(jìn)行早先垃圾收集所最初計算出的值。當(dāng)中止對文件的垃圾收集時,存儲所 有四個值,并在對同一文件進(jìn)行繼續(xù)處理期間存取這四個值。
共用步驟359詢問在當(dāng)前數(shù)據(jù)群組內(nèi)是否存在一個或多個尚待復(fù)制的元頁。這是 參照數(shù)據(jù)群組長度計數(shù)器加以確定。通過各后續(xù)步驟每次檢查及復(fù)制有效數(shù)據(jù)群組的 一個元頁。如果通過步驟359確定出數(shù)據(jù)仍保留于待決數(shù)據(jù)群組中,則下一詢問361 是判定一復(fù)制元塊是否打開。如果是,則通過步驟363將所正進(jìn)行垃圾收集的文件的 當(dāng)前數(shù)據(jù)群組的一數(shù)據(jù)元頁從存儲其的元塊中讀出,并在步驟365中寫入至復(fù)制元塊。 然后在步驟367中將數(shù)據(jù)群組長度計數(shù)器遞減一個元頁,并在步驟369中將文件元頁 計數(shù)器遞減l。
如果通過步驟361確定出一復(fù)制元塊未打開,則在下一步驟371中判定正進(jìn)行垃 圾收集的文件是否是打開的文件。如果是,則在下一步驟373中打開一復(fù)制元塊,且 所述過程隨后進(jìn)行至前面所述的步驟363。但是如果不是一打開的文件,則在下一步 驟375中詢問文件元頁計數(shù)器的遞減后的計數(shù)值是否等于殘留元頁計數(shù)值。如果不等 于,則在步驟373中打開一復(fù)制元塊。但是如果其相等,則此意味著在當(dāng)前文件中不 再剩下要復(fù)制的數(shù)據(jù)元塊。因此,在步驟377中,識別一打開的共用元塊以將殘留數(shù) 據(jù)寫入其中。步驟363及之后的處理是將當(dāng)前文件的當(dāng)前數(shù)據(jù)群組的剩余元頁復(fù)制至 一共用元塊中。當(dāng)通過步驟371確定出正被進(jìn)行垃圾收集的是一打開的文件時,不采 用該路徑,因?yàn)榭蓪⑵渌緦⑻畛淞硪辉獕K的數(shù)據(jù)群組寫入至當(dāng)前文件中。在打開 的文件關(guān)閉之后,將其置于垃圾收集隊(duì)列中,此時,通過步驟377將任何殘留數(shù)據(jù)復(fù) 制至一共用元塊。
圖31所示詢問379判定在寫入該額外數(shù)據(jù)元頁之后所述復(fù)制元塊現(xiàn)在是否已滿。 如果是,則在步驟381中關(guān)閉復(fù)制元塊,并在步驟383中更新FIT,以反映該事實(shí)。 如果復(fù)制元塊未滿或者在步驟383之后,詢問385判定被進(jìn)行垃圾收集的元塊中的所 有數(shù)據(jù)是否現(xiàn)在均已變無效。如果是,則在步驟387中擦除元塊。如果不是,或者在 元塊擦除之后,詢問389詢問在編程操作期間是否通過圖28所示的步驟325設(shè)定前臺 模式。如果不是,則圖31所示步驟391判定一主機(jī)命令是否待決。如果是,且如果在 步驟392中確定正在進(jìn)行的垃圾收集不具有優(yōu)先權(quán),則通過在步驟393中更新FIT并 隨后返回至圖26所示步驟253來中止垃圾收集。然而,如果在步驟391中確定一主機(jī) 命令不在待決,或者如果存在待決的主機(jī)命令且在步驟392中確定正在進(jìn)行的垃圾收 集不具有優(yōu)先權(quán),則所述處理返回至詢問359,以將下一數(shù)據(jù)元頁從當(dāng)前文件元塊復(fù) 制至所示復(fù)制元塊中。如果圖31所示詢問389確定出已設(shè)定前臺模式,則在下一步驟395中遞增通過 圖28所示步驟327復(fù)位的復(fù)制元塊元頁計數(shù)器。如果一步驟397確定已接連復(fù)制了預(yù) 設(shè)數(shù)量N4個元頁,則在下一步驟399中將前臺模式復(fù)位并通過步驟393更新FIT。但 是如果在達(dá)到數(shù)量N4之前還有元頁要復(fù)制,則所述過程繼續(xù)進(jìn)行步驟359,除非詢問 391確定存在待決的主機(jī)命令。如果存在待決的主機(jī)命令,則中斷復(fù)制操作,且所述 過程返回至圖26所示的步驟253。返回至詢問359,如果數(shù)據(jù)群組長度計數(shù)值為0,則此意味著已完成一個數(shù)據(jù)群 組從文件元塊向復(fù)制元塊的復(fù)制。在此種情形中,在步驟401中更新FIT以反映該狀 態(tài)。接下來,在步驟403中參照數(shù)據(jù)群組編號計數(shù)器來判定正被進(jìn)行垃圾收集的當(dāng)前 文件是否包含另一數(shù)據(jù)群組。如果不包含,則對文件的垃圾收集已完成。然后,所述 過程返回至步驟356,以按次序?qū)﹃?duì)列中的下一文件或元塊進(jìn)行垃圾收集。其將不返 回至步驟355,因?yàn)閷Ξ?dāng)前文件的垃圾收集的完成意味著可不再存在正在進(jìn)行且可重 新開始的文件垃圾收集。如果從步驟403得知當(dāng)前文件還存在至少一個要復(fù)制的數(shù)據(jù)群組,則在步驟405 中判定包含該下一數(shù)據(jù)群組的元塊是否也包含其他過時的數(shù)據(jù)。如前面所述,對文件 的包含過時數(shù)據(jù)的元塊進(jìn)行垃圾收集,但較佳不對文件的不包含過時數(shù)據(jù)的元塊進(jìn)行 垃圾收集,除非所述元塊是共用元塊或包含文件的殘留數(shù)據(jù)的不完整元塊。因此,如 果在步驟405中判斷出在下一數(shù)據(jù)群組的元塊中存在過時數(shù)據(jù),則在步驟407中將數(shù) 據(jù)群組編號計數(shù)器更新成按次序的下一數(shù)據(jù)群組的編號,且在步驟409中以新數(shù)據(jù)群 組中的數(shù)據(jù)量將數(shù)據(jù)群組長度計數(shù)器初始化。所述處理然后進(jìn)行至步驟361,以按前 面所述的方式將第一元頁的數(shù)據(jù)從文件的新數(shù)據(jù)群組復(fù)制至一復(fù)制元塊中的下一被擦 除元頁。但是即使在步驟405中確定出在其中存在下一數(shù)據(jù)群組的元塊中沒有過時數(shù)據(jù), 如果(1)下一數(shù)據(jù)群組是共用元塊或者(2)處于不完整元塊中且所述文件是關(guān)閉的 文件,則仍可進(jìn)行對該元塊中數(shù)據(jù)的垃圾收集。首先作出關(guān)于當(dāng)前數(shù)據(jù)群組是否處于 共用元塊中的詢問411。如果是,則在下一步驟413中將共用元塊添加至共用元塊垃 圾收集隊(duì)列中以便此后進(jìn)行垃圾收集,但所述過程繼續(xù)進(jìn)行步驟407及409,以將數(shù) 據(jù)群組編號計數(shù)器及數(shù)據(jù)群組長度計數(shù)器更新成要由步驟361等等進(jìn)行復(fù)制的下一元 塊的值。然而,如果當(dāng)前數(shù)據(jù)群組不處于共用元塊中,則在步驟415中詢問當(dāng)前數(shù)據(jù) 群組是否處于不完整的元塊中。換句話說,步驟415判定當(dāng)前數(shù)據(jù)群組是否存在于仍 具有至少最小量的被擦除容量的元塊中(例如圖15所示的數(shù)據(jù)群組F3, D3)。如果不 是,則不復(fù)制當(dāng)前數(shù)據(jù)群組,而是所述處理返回至步驟403以處理所述文件的下一數(shù) 據(jù)群組(如果存在一個下一數(shù)據(jù)群組)。但是,如果當(dāng)前數(shù)據(jù)群組處于不完整的元塊中, 則下一詢問417詢問所述不完整元塊是否包含打開的文件的數(shù)據(jù)。如果是,則通過返 回至詢問403來跳過對當(dāng)前數(shù)據(jù)群組的復(fù)制,以繼續(xù)所述文件的任何其他數(shù)據(jù)群組。 但是如果其中存在下一數(shù)據(jù)群組的元塊并不包含打開的文件的數(shù)據(jù),則對該下一數(shù)據(jù)
群組執(zhí)行步驟407、 409、 361等等。返回至圖31的步驟356,甚至在判斷出在垃圾收集隊(duì)列中不存在文件或元塊時, 也可進(jìn)行垃圾收集。如果不存在,而是結(jié)束所述過程,則在步驟421中檢查在被擦除 元塊池中是否存在多于N2個被擦除元塊。如果是,則垃圾收集過程結(jié)束并返回至圖 26所示的步驟253。但是如果在系統(tǒng)中不存在多于N2個被擦除元塊,則獲取機(jī)會從 步驟421開始執(zhí)行垃圾收集。如步驟423所示,此種垃圾收集可對打開的文件(如果 存在一個打開的文件)進(jìn)行。由于隊(duì)列中無任何項(xiàng),因而當(dāng)所述池中被擦除元塊的數(shù) 量為N2或以下時,有可能不存在任何其他更多被擦除元塊來源。如果存在多于一個 打開的文件,則在步驟425中選擇其中一個。然后如前面所述通過步驟370、 372及 359對打開的文件進(jìn)行所述處理。當(dāng)圖31中的詢問362確定出正對共用元塊中的數(shù)據(jù)群組執(zhí)行當(dāng)前的垃圾收集操 作時,垃圾收集364略微不同于上文針對其他元塊所述。圖32所示流程圖概述對共用 元塊的垃圾收集。在步驟431中詢問垃圾收集是否正在進(jìn)行中且因此重新開始。如果 是,則數(shù)據(jù)群組長度計數(shù)器保留有所述垃圾收集中止時的最后值。如果不是,則首先 在步驟435中參照作為處理對象的第一數(shù)據(jù)群組的FIT來將數(shù)據(jù)群組編號計數(shù)器初始 化,并隨后通過步驟433確定該數(shù)據(jù)群組的長度。當(dāng)通過步驟433確定出數(shù)據(jù)群組長度計數(shù)器大于0時,則對當(dāng)前數(shù)據(jù)群組的復(fù)制 開始。在步驟437中,從共用元塊中讀取當(dāng)前數(shù)據(jù)群組的元頁,并在步驟439中將所 述元頁編程至打開的共用元塊中。在步驟441中,然后將數(shù)據(jù)群組長度計數(shù)器遞減一 個元頁。如果如步驟443所示在前臺進(jìn)行垃圾收集,則在步驟445中使所述復(fù)制元塊 元頁計數(shù)器遞增1。該計數(shù)器記錄在當(dāng)前序列中所已復(fù)制的數(shù)據(jù)元頁的數(shù)量。如果在 步驟447中確定出該計數(shù)值超過預(yù)定數(shù)量N4,則所述過程隨后在步驟449中退出前臺 模式。隨后在步驟451中更新FIT,且所述處理返回至圖26所示的步驟253。如果通過圖32中的步驟447確定出所述復(fù)制元塊元頁計數(shù)器的值為N4或以下, 則在下一步驟中詢問是否有一主機(jī)命令待決。如果是,則在步驟451中更新FIT,且 所述處理返回至圖26的步驟253,以便可執(zhí)行待決的主機(jī)命令。如果不是,則所述處 理返回至圖32的步驟433,以詢問在當(dāng)前數(shù)據(jù)群組中是否存在另一數(shù)據(jù)元頁,且如果 存在,則將其從過時共用元塊復(fù)制至打開的共用元塊,等等。類似地,如果在步驟443 中確定出未在前臺執(zhí)行垃圾收集,則接下來執(zhí)行步驟453。除非在步驟453中確定出 有一主機(jī)命令待決,否則所述處理隨后返回至步驟433,以潛在地復(fù)制當(dāng)前數(shù)據(jù)群組 中的下一數(shù)據(jù)元頁,而無論所述復(fù)制元塊元頁計數(shù)器是否超過N4,因?yàn)橐牙@過了步驟 447。在此種情形中,垃圾收集是在后臺執(zhí)行。返回至圖32中的步驟433,如果數(shù)據(jù)群組長度計數(shù)值不大于O,則得知當(dāng)前數(shù)據(jù) 群組的所有元頁均已得到復(fù)制。然后在步驟455中更新FIT,且在步驟457中判定在 被進(jìn)行垃圾收集的共用元塊中是否存在另一數(shù)據(jù)群組。如果不存在,則在步驟459中 擦除過時的共用元塊,且所述處理返回至圖26所示的步驟253。但是,如果在共用元 塊中存在另一數(shù)據(jù)群組,則在步驟461中更新數(shù)據(jù)群組編號計數(shù)器。然后在步驟463 中從共用元塊索引讀取FIT指針,且在步驟465中讀取由該指針?biāo)缍ǖ腇IT條目。 如果在步驟467中確定出FIT條目與當(dāng)前數(shù)據(jù)群組相一致,則一詢問468判定當(dāng)前數(shù) 據(jù)群組是否是己識別出的殘留數(shù)據(jù)的一部分。如果是,則在步驟469中使數(shù)據(jù)群組長 度計數(shù)器初始化至從FIT讀取的數(shù)據(jù)群組的長度。但是如果在步驟468中確定出當(dāng)前數(shù)據(jù)群組不處于現(xiàn)有殘留數(shù)據(jù)中,則然后在步 驟470中識別由其作為一部分的新殘留數(shù)據(jù)。在步驟471中,然后識別具有足以存儲 新殘留數(shù)據(jù)的所有數(shù)據(jù)的空間的打開的共用區(qū)塊。此會防止當(dāng)殘留數(shù)據(jù)包含兩個或更 多個數(shù)據(jù)群組時在兩個或更多個不同元塊之間劃分文件的殘留數(shù)據(jù)。否則,假如獨(dú)立 地復(fù)制這兩個或更多個數(shù)據(jù)群組,則可能會發(fā)生此種情況。在此種情形中,可能將第 一數(shù)據(jù)群組復(fù)制至具有足以存儲該數(shù)據(jù)群組的被擦除空間但不具有也足以存儲第二數(shù) 據(jù)群組的空間的共用區(qū)塊中。然后,第二數(shù)據(jù)群組會復(fù)制至一不同的共用區(qū)塊。這將 是人們所不期望的,因?yàn)椴粦?yīng)將文件的殘留數(shù)據(jù)在兩個不同元塊之間進(jìn)行劃分。假如 這樣對其進(jìn)行劃分,則對文件或?qū)灿脜^(qū)塊的垃圾收集將耗用更多的時間。然后,在步驟469中將當(dāng)前數(shù)據(jù)群組的數(shù)據(jù)群組長度計數(shù)器初始化。在步驟437 及439中將當(dāng)前數(shù)據(jù)群組的第一數(shù)據(jù)元頁從共用元塊復(fù)制至所識別的打開的共用元塊 中。然而,如果在步驟467中確定出FIT條目不與當(dāng)前數(shù)據(jù)群組相一致,則所述處理 返回至步驟457,以判定在共用元塊中是否存在另一數(shù)據(jù)群組。圖32中流程圖所示的垃圾收集繼續(xù)進(jìn)行,直至當(dāng)前共用區(qū)塊的所有有效數(shù)據(jù)群 組均己復(fù)制至一先前被擦除的元塊(其隨后變?yōu)樾碌墓灿迷獕K)或者復(fù)制至一個或多 個打開的共用元塊為止。可將不同文件的數(shù)據(jù)群組復(fù)制至不同的打開的共用元塊。所 述共用元塊先前置于垃圾收集隊(duì)列中,因?yàn)槠浒^時的數(shù)據(jù)群組。對共用元塊中每 一有效數(shù)據(jù)群組的所有數(shù)據(jù)元頁進(jìn)行完整傳送會使得對于每一此種元頁均經(jīng)過圖32 所示各步驟一遍。如果垃圾收集是在前臺進(jìn)行,則此種復(fù)制可每N4個元頁中斷一次, 或者當(dāng)在前臺或后臺運(yùn)行時接收到新主機(jī)命令時中斷。作為永久性預(yù)設(shè)N3及N4數(shù)值的替代方式,可由存儲器系統(tǒng)控制器響應(yīng)于主機(jī) 的數(shù)據(jù)編程圖案來更改這些數(shù)值,以保持均勻的數(shù)據(jù)編程速度。存儲區(qū)塊在操作期間的各種狀態(tài)圖33的圖式顯示在上述類型直接文件存儲存儲器系統(tǒng)內(nèi),系統(tǒng)中存儲區(qū)塊或元 塊的各種單獨(dú)狀態(tài)、這些狀態(tài)之間的變遷。在左邊的欄中,顯示區(qū)塊501處于被擦除狀態(tài),處于被擦除區(qū)塊池中。 在下一欄中,區(qū)塊503、 505及507分別包含某些有效數(shù)據(jù),但還具有可在其中 寫入主機(jī)數(shù)據(jù)的被擦除容量。寫入?yún)^(qū)塊503被局部寫入有單個文件的有效數(shù)據(jù),且所 述文件的其他數(shù)據(jù)在由主機(jī)提供時應(yīng)寫入至該區(qū)塊。復(fù)制區(qū)塊505被局部寫入有單個 文件的有效數(shù)據(jù),且所述文件的其他數(shù)據(jù)當(dāng)在對所述文件進(jìn)行垃圾收集期間得到復(fù)制 時應(yīng)寫入至該區(qū)塊。打開的共用區(qū)塊507被局部寫入有兩個或更多個文件的有效數(shù)據(jù), 且在垃圾收集期間可將任何文件的殘留數(shù)據(jù)群組寫入至該區(qū)塊。下一欄的區(qū)塊509及511則充滿文件數(shù)據(jù)。文件區(qū)塊509充滿單個文件的有效數(shù) 據(jù)。共用區(qū)塊511充滿兩個或更多個文件的有效數(shù)據(jù)。靠近圖33的右手欄包括區(qū)塊513、 515、 517、 519及521,其分別包含某些過時 數(shù)據(jù)。過時文件區(qū)塊513充滿單個文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任意組合。過時寫入 區(qū)塊515被局部寫入有單個文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任意組合,且所述文件的其 他數(shù)據(jù)在由主機(jī)提供時應(yīng)寫入至該區(qū)塊。過時復(fù)制區(qū)塊517被局部寫入有單個文件的 有效數(shù)據(jù)與過時數(shù)據(jù)的任意組合。過時打開共用區(qū)塊519被局部寫入有兩個或更多個 文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任意組合。過時共用區(qū)塊521充滿兩個或更多個文件的 有效數(shù)據(jù)與過時數(shù)據(jù)的任意組合。圖33右手欄中的過時區(qū)塊523僅包含過時數(shù)據(jù)。各個區(qū)塊在圖33所示各區(qū)塊狀態(tài)之間的變遷也由以小寫字母進(jìn)行標(biāo)記的線加以顯示。這些變遷如下a-被擦除區(qū)塊501至寫入?yún)^(qū)塊503:將單個主機(jī)文件的數(shù)據(jù)寫入至被擦除區(qū)塊。 b -寫入?yún)^(qū)塊503至寫入?yún)^(qū)塊503:將來自主機(jī)的單個文件的數(shù)據(jù)寫入至該文件的寫入?yún)^(qū)塊中。c-寫入?yún)^(qū)塊503至文件區(qū)塊509:寫入來自主機(jī)的單個文件的數(shù)據(jù)以填充該文件 的一寫入?yún)^(qū)塊。d -文件區(qū)塊509至過時文件區(qū)塊513:文件區(qū)塊中數(shù)據(jù)的一部分因主機(jī)在該文件 的寫入?yún)^(qū)塊中寫入所述數(shù)據(jù)的更新版本而變得過時。e -過時文件區(qū)塊513至過時區(qū)塊523:過時文件區(qū)塊中的所有有效數(shù)據(jù)因在垃圾 收集期間所述數(shù)據(jù)被復(fù)制至另一區(qū)塊或因主機(jī)刪除所述文件而變得過時。f-寫入?yún)^(qū)塊503至過時寫入?yún)^(qū)塊515:寫入?yún)^(qū)塊中數(shù)據(jù)的一部分因主機(jī)將所述數(shù) 據(jù)的更新版本寫入于同一寫入?yún)^(qū)塊中、或者因在垃圾收集期間將所述數(shù)據(jù)復(fù)制至另一 區(qū)塊中而變得過時。g -過時寫入?yún)^(qū)塊515至過時寫入?yún)^(qū)塊513:將來自主機(jī)的單個文件的數(shù)據(jù)寫入至 該文件的過時寫入?yún)^(qū)塊。h-過時寫入?yún)^(qū)塊515至過時文件區(qū)塊513:寫入來自主機(jī)的單個文件的數(shù)據(jù),以填充該文件的過時寫入?yún)^(qū)塊。i-過時寫入?yún)^(qū)塊515至過時區(qū)塊523:過時寫入?yún)^(qū)塊中的所有有效數(shù)據(jù)因在垃圾收集期間將所述數(shù)據(jù)復(fù)制至另一區(qū)塊或因主機(jī)刪除所述文件而變得過時。j-被擦除區(qū)塊501至復(fù)制區(qū)塊505:在垃圾收集期間將單個文件的數(shù)據(jù)從另一區(qū)塊復(fù)制至被擦除區(qū)塊。k-寫入?yún)^(qū)塊至復(fù)制區(qū)塊505:在垃圾收集期間將單個文件的數(shù)據(jù)從另一區(qū)塊復(fù)制至該文件的一寫入?yún)^(qū)塊。1 -復(fù)制區(qū)塊505至復(fù)制區(qū)塊505:在垃圾收集期間將單個文件的數(shù)據(jù)從另一區(qū)塊
復(fù)制至該文件的一復(fù)制區(qū)塊。m -復(fù)制區(qū)塊505至文件區(qū)塊509:在垃圾收集期間從另一區(qū)塊復(fù)制單個文件的 數(shù)據(jù),以填充該文件的一復(fù)制區(qū)塊。n -復(fù)制區(qū)塊505至寫入?yún)^(qū)塊503:當(dāng)在垃圾收集期間重新打開來自主機(jī)的單個文 件時,將所述單個文件的數(shù)據(jù)寫入該文件的復(fù)制區(qū)塊中。o -復(fù)制區(qū)塊505至過時復(fù)制區(qū)塊517:復(fù)制區(qū)塊中的一部分或所有數(shù)據(jù)因主機(jī)在 所述文件的寫入?yún)^(qū)塊中寫入所述數(shù)據(jù)的更新版本或者因主機(jī)刪除所述文件而變得過 時。p -過時復(fù)制區(qū)塊517至過時區(qū)塊523:過時復(fù)制區(qū)塊中的所有有效數(shù)據(jù)因在垃圾 收集期間將所述數(shù)據(jù)復(fù)制至另一區(qū)塊或者因主機(jī)刪除所述文件而變得過時。q -寫入?yún)^(qū)塊503至打開的共用區(qū)塊507:在垃圾收集期間將文件的殘留數(shù)據(jù)寫入 至一不同的關(guān)閉的文件的寫入?yún)^(qū)塊中。r -在垃圾收集期間將文件的殘留數(shù)據(jù)寫入至一包含不同文件的殘留數(shù)據(jù)的復(fù)制 區(qū)塊中。s-在垃圾收集期間將文件的殘留數(shù)據(jù)從一不同的區(qū)塊復(fù)制至一打開的共用區(qū)塊。t-打開的共用區(qū)塊507至過時的打開的共用區(qū)塊519:打開的共用區(qū)塊中一個文 件的一部分或所有數(shù)據(jù)因主機(jī)將所述數(shù)據(jù)的更新版本寫入所述文件的寫入?yún)^(qū)塊中、因 在垃圾收集期間將所述數(shù)據(jù)復(fù)制至另一區(qū)塊、或者因主機(jī)刪除所述文件而變得過時。u -過時的打開的共用區(qū)塊519至過時區(qū)塊523:過時的打開的共用區(qū)塊中的所有 有效數(shù)據(jù)因在垃圾收集期間將所述數(shù)據(jù)復(fù)制至另一區(qū)塊或者因主機(jī)刪除所述文件而變 得過時。v-打開的共用區(qū)塊507至共用區(qū)塊511:在垃圾收集期間從另一區(qū)塊復(fù)制文件的 殘留數(shù)據(jù)群組,以填充該文件的打開的共用區(qū)塊。w -共用區(qū)塊511至過時共用區(qū)塊521:共用區(qū)塊中一個文件的一部分或所有數(shù) 據(jù)因主機(jī)將所述數(shù)據(jù)的更新版本寫入至所述文件的寫入?yún)^(qū)塊中、因在垃圾收集期間將 所述數(shù)據(jù)寫入至另一區(qū)塊中、或者因主機(jī)刪除所述文件而變得過時。x -過時共用區(qū)塊521至過時區(qū)塊523:過時共用區(qū)塊中的所有有效數(shù)據(jù)因在垃圾 收集期間將數(shù)據(jù)復(fù)制至另一區(qū)塊中或者因主機(jī)刪除所述文件而變得過時。y -寫入?yún)^(qū)塊503至過時區(qū)塊523:寫入?yún)^(qū)塊中單個文件的所有有效數(shù)據(jù)因主機(jī)刪 除所述文件而變得過時。z -復(fù)制區(qū)塊505至過時區(qū)塊523:復(fù)制區(qū)塊中的所有有效數(shù)據(jù)因在垃圾收集期間 將數(shù)據(jù)復(fù)制至另一區(qū)塊或者因主機(jī)刪除所述文件而變得過時。aa-文件區(qū)塊509至過時區(qū)塊523:文件區(qū)塊中的所有數(shù)據(jù)因主機(jī)刪除所述文件 而變得過時。ab-過時區(qū)塊523至被擦除區(qū)塊501:在垃圾收集期間存儲過時區(qū)塊。 D.結(jié)論雖然已根據(jù)本發(fā)明的各實(shí)例性實(shí)施例對本發(fā)明的各個方面進(jìn)行了闡述,但應(yīng)了 解,本發(fā)明有權(quán)在隨附權(quán)利要求書的整個范圍內(nèi)受到保護(hù)。
權(quán)利要求
1、 一種使用主機(jī)系統(tǒng)來操作可再編程非易失性存儲器系統(tǒng)的方法,所述存儲器 系統(tǒng)具有存儲單元區(qū)塊,在將新數(shù)據(jù)寫入所述存儲單元區(qū)塊之前擦除所述存儲單元區(qū) 塊,所述方法包括接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù), 接收從所述存儲器系統(tǒng)刪除指定數(shù)據(jù)文件的命令, 標(biāo)識包含因所述刪除命令而變得過時的數(shù)據(jù)的存儲單元區(qū)塊,及 隨后從所述經(jīng)標(biāo)識的區(qū)塊中擦除數(shù)據(jù)。
2、 如權(quán)利要求1所述的方法,其中被標(biāo)識為包含過時數(shù)據(jù)的至少一個存儲單元 區(qū)塊充滿過時數(shù)據(jù)。
3、 如權(quán)利要求1所述的方法,其中被標(biāo)識為包含過時數(shù)據(jù)的至少一個存儲單元 區(qū)塊還包含來自至少一個其他文件的數(shù)據(jù)。
4、 如權(quán)利要求3所述的方法,其中在擦除被標(biāo)識為還包含來自至少一個其他文 件的數(shù)據(jù)的所述至少一個存儲單元區(qū)塊之前,將來自所述至少一個其他文件的所述數(shù) 據(jù)復(fù)制至另一區(qū)塊中。
5、 如權(quán)利要求1所述的方法,其中接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù)包括接收以所述被標(biāo)識文件內(nèi)的偏移量進(jìn)行尋址的數(shù)據(jù)。
6、 一種使用主機(jī)系統(tǒng)來操作可再編程非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有存儲單元區(qū)塊,在將新數(shù)據(jù)寫入所述存儲單元區(qū)塊之前擦除所述存儲單元區(qū)塊,所述方法包括接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù),將文件的所述所接收數(shù)據(jù)存儲于一個或多個不包含任一其他文件的數(shù)據(jù)的區(qū)塊 中,且如果需要,存儲于另一區(qū)塊的一部分中,響應(yīng)于來自所述主機(jī)的刪除其數(shù)據(jù)存儲于所述數(shù)據(jù)區(qū)塊的文件的命令,使包含所 述文件的數(shù)據(jù)但不包含任一其他文件的數(shù)據(jù)的所述數(shù)據(jù)區(qū)塊變得過時,及隨后在所述主機(jī)發(fā)送命令對需要使用所述過時數(shù)據(jù)區(qū)塊中的任一者的數(shù)據(jù)進(jìn)行 編程之前,擦除所述過時數(shù)據(jù)區(qū)塊,以存儲新數(shù)據(jù)。
7、 如權(quán)利要求6所述的方法,其中擦除所述過時數(shù)據(jù)區(qū)塊是在所述主機(jī)空閑的周期期間進(jìn)行。
8、 如權(quán)利要求6所述的方法,其中使主機(jī)文件過時的命令包括從所述存儲器系 統(tǒng)中刪除或擦除所述文件的命令。
9、 如權(quán)利要求6所述的方法,其中接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù)包括 接收以所述被標(biāo)識文件內(nèi)的偏移量進(jìn)行尋址的數(shù)據(jù)。
10、 一種操作具有存儲單元的可再編程非易失性大容量存儲系統(tǒng)的方法,所述存 儲單元被組織成區(qū)塊,在將任何新數(shù)據(jù)寫入所述區(qū)塊中之前擦除所述區(qū)塊,所述方法 包括接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù),將所述所接收數(shù)據(jù)編程在所述存儲單元區(qū)塊內(nèi)的物理地址處,及 響應(yīng)于接收到刪除先前編程在存儲單元區(qū)塊內(nèi)的給定文件的命令,對僅包含所述 擬擦除的給定文件的數(shù)據(jù)的所述區(qū)塊進(jìn)行調(diào)度,并對包含所述給定文件的數(shù)據(jù)及某一 其他文件的有效數(shù)據(jù)的至少一個區(qū)塊進(jìn)行調(diào)度以將所述另一文件的所述有效數(shù)據(jù)合并 至另一區(qū)塊中。
11、 如權(quán)利要求10所述的方法,其中對數(shù)據(jù)進(jìn)行編程包括對所述所接收數(shù)據(jù)進(jìn) 行編程,以使用所述給定文件的數(shù)據(jù)填充整數(shù)個的一個或多個區(qū)塊并使用所述給定文 件的剩余數(shù)據(jù)部分地填充所述至少一個區(qū)塊。
12、 如權(quán)利要求1所述的方法,其中接收通過唯一文件標(biāo)識進(jìn)行尋址的數(shù)據(jù)包括 接收以所述被標(biāo)識文件內(nèi)的偏移量進(jìn)行尋址的數(shù)據(jù)。
13、 一種存儲器系統(tǒng),其包括非易失性電荷存儲半導(dǎo)體存儲單元陣列,其被組織成多個單獨(dú)的存儲單元區(qū)塊, 在將新數(shù)據(jù)寫入所述多個單獨(dú)的存儲單元區(qū)塊中之前,同時擦除所述多個單獨(dú)的存儲 單元區(qū)塊,及控制器,其與所述存儲單元陣列相連接,其運(yùn)行以(a)使所述存儲器系統(tǒng)所接 收的具有唯一標(biāo)識的文件內(nèi)的偏移地址的數(shù)據(jù)被存儲于所述存儲器陣列的所選定的一 個或多個區(qū)塊中,(b)跟蹤所述區(qū)塊,且所述唯一標(biāo)識的文件的數(shù)據(jù)通過所述唯一標(biāo) 識的文件的偏移地址被存儲于所述區(qū)塊中,及(c)響應(yīng)于接收到刪除特定文件的命令,使存儲于所述選定的一個或多個區(qū)塊中的所述特定文件的數(shù)據(jù)被刪除。
14、 如權(quán)利要求13所述的存儲器系統(tǒng),其中所述控制器進(jìn)一步運(yùn)行(c)以響應(yīng) 于所述接收的刪除命令,以首先使存儲在僅包含所述特定文件的所接收數(shù)據(jù)的所述一 個或多個區(qū)塊中任一者中的數(shù)據(jù)被標(biāo)記為過時,并隨后使其所有所接收數(shù)據(jù)均被標(biāo)記 為過時的所述一個或多個區(qū)塊被擦除。
15、 如權(quán)利要求14所述的存儲器系統(tǒng),其中所述控制器進(jìn)一步操作以響應(yīng)于所 述接收的刪除命令而(c)使還包含另一文件的有效數(shù)據(jù)的所述選定的一個或多個區(qū)塊 的任一共用區(qū)塊中的所述特定文件的所接收數(shù)據(jù)被標(biāo)記為過時,隨后使所述共用區(qū)塊 的有效數(shù)據(jù)與另一區(qū)塊中的其他有效數(shù)據(jù)合并,并然后使所述共用區(qū)塊被擦除。
16、 如權(quán)利要求13所述的存儲器系統(tǒng),其中所述控制器進(jìn)一步運(yùn)行以通過如下 方式使存儲于所述選定的一個或多個區(qū)塊中的所述特定文件的數(shù)據(jù)被刪除首先在合并隊(duì)列中列出所述選定的一個或多個區(qū)塊,且作為不涉及到接收刪除文件的命令的操 作的結(jié)果,所述隊(duì)列還列出其他區(qū)塊,并然后稍后將所述選定的一個或多個區(qū)塊的數(shù) 據(jù)以其在所述隊(duì)列內(nèi)的位置次序加以刪除。
全文摘要
使用每一文件的唯一標(biāo)識以及數(shù)據(jù)在文件內(nèi)的偏移量、但不使用任何中間邏輯地址或存儲器的虛擬地址空間,將主機(jī)系統(tǒng)數(shù)據(jù)文件直接寫入至大的擦除區(qū)塊閃速存儲器系統(tǒng)中。由存儲器系統(tǒng)的控制器而非由主機(jī)在存儲器系統(tǒng)內(nèi)保持所述文件存儲于存儲器中的位置的目錄信息。主機(jī)與存儲器系統(tǒng)之間基于文件的接口使存儲器系統(tǒng)控制器能夠以增高的效率利用存儲器內(nèi)的數(shù)據(jù)存儲區(qū)塊。
文檔編號G06F12/02GK101147133SQ200680008989
公開日2008年3月19日 申請日期2006年2月8日 優(yōu)先權(quán)日2005年2月16日
發(fā)明者彼得·約翰·史密斯, 艾倫·韋爾什·辛克萊 申請人:桑迪士克股份有限公司