專利名稱:回收快閃存儲器系統(tǒng)中的數(shù)據(jù)存儲容量的制作方法
回收快閃存儲器系統(tǒng)中的數(shù)據(jù)存儲容量技術領域本申請案涉及例如半導體快閃存儲器的可重新編程的非易失性存儲器系統(tǒng)的操作, 且更具體地說,涉及主機裝置與存儲器之間的接口的管理。
背景技術:
對通過主機系統(tǒng)、存儲器系統(tǒng)和其它電子系統(tǒng)的外部接口通信的數(shù)據(jù)進行尋址主要 有兩種技術。在其中的一種技術中,將系統(tǒng)產(chǎn)生或接收到的數(shù)據(jù)文件的地址映射到針對 所述系統(tǒng)建立的連續(xù)邏輯地址空間的不同范圍中。地址空間的廣度通常足以覆蓋系統(tǒng)能 夠處置的整個地址范圍。在一個實例中,磁盤存儲驅(qū)動器通過此邏輯地址空間與計算機 或其它主機系統(tǒng)通信。此地址空間具有足以尋址磁盤驅(qū)動器的整個數(shù)據(jù)存儲容量的廣度。 在所述兩種技術中的第二種技術中,唯一地識別電子系統(tǒng)產(chǎn)生或接收到的數(shù)據(jù)文件,且 通過所述文件內(nèi)的偏移量來邏輯地尋址其數(shù)據(jù)。 一種形式的這種尋址方法在計算機或其 它主機系統(tǒng)與被稱為"智能卡"的可移除存儲卡之間使用。智能卡通常由消費者用來進 行識別、銀行業(yè)務、銷售點購買、ATM接入和類似活動。在早一代的商用快閃存儲器系統(tǒng)中,將矩形存儲器單元陣列分成大量單元群組,每 個單元群組存儲標準磁盤驅(qū)動器扇區(qū)的數(shù)據(jù)量,即512字節(jié)。額外量的數(shù)據(jù)(例如16個 字節(jié))通常也包含在每個群組中,以存儲誤差校正碼(ECC)以及可能其它與用戶數(shù)據(jù) 且/或與里面存儲有相關聯(lián)的用戶數(shù)據(jù)的存儲器單元群組有關的額外開銷數(shù)據(jù)。每個此群 組中的存儲器單元是可一起擦除的最小數(shù)目的存儲器單元。即,擦除單位實際上是存儲 一個數(shù)據(jù)扇區(qū)和所包含的任何額外開銷數(shù)據(jù)的若干存儲器單元。這種類型的存儲器系統(tǒng) 的實例在第5,602,987號和第6,426,893號美國專利中描述。在使存儲器單元重新編程有 數(shù)據(jù)之前對其進行擦除是快閃存儲器的特征??扉W存儲器系統(tǒng)最常見的是以可移除地與多種主機(例如個人計算機、相機或類似 物)連接的存儲卡或快閃驅(qū)動器的形式提供,但也可嵌入在此類主機系統(tǒng)內(nèi)。當將數(shù)據(jù) 寫入到存儲器時,主機通常將唯一邏輯地址指派給扇區(qū)、群集或存儲器系統(tǒng)的連續(xù)虛擬 地址空間內(nèi)的其它數(shù)據(jù)單位。與磁盤操作系統(tǒng)(DOS)類似,主機將數(shù)據(jù)寫入到存儲器 系統(tǒng)的邏輯地址空間內(nèi)的地址并從所述地址讀取數(shù)據(jù)。存儲器系統(tǒng)內(nèi)的控制器將從主機 接收到的邏輯地址轉(zhuǎn)換成實際存儲數(shù)據(jù)的存儲器陣列內(nèi)的物理地址,且所述控制器接著記住這些地址轉(zhuǎn)換。存儲器系統(tǒng)的數(shù)據(jù)存儲容量至少與可在針對存儲器系統(tǒng)界定的整個 邏輯地址空間上尋址的數(shù)據(jù)的量一樣大。在后面幾代快閃存儲器系統(tǒng)中,擦除單位的大小增加到足以存儲多個數(shù)據(jù)扇區(qū)的存 儲器單元的區(qū)塊。即使與存儲器系統(tǒng)連接的主機系統(tǒng)可以最小單位(例如扇區(qū))編程和 讀取數(shù)據(jù),但大量扇區(qū)存儲在快閃存儲器的單個擦除單位內(nèi)。以下情況是常見的當主 機更新或替換邏輯數(shù)據(jù)扇區(qū)時,區(qū)塊內(nèi)的一些數(shù)據(jù)扇區(qū)變成廢棄的。由于在區(qū)塊中所存 儲的任何數(shù)據(jù)可被重寫之前,必須擦除整個區(qū)塊,所以新的或經(jīng)更新的數(shù)據(jù)通常存儲在 己經(jīng)被擦除且具有用于所述數(shù)據(jù)的剩余容量的另一區(qū)塊中。這個過程留下具有廢棄數(shù)據(jù) 的原先區(qū)塊,所述廢棄數(shù)據(jù)占用存儲器內(nèi)的寶貴空間。但如果所述區(qū)塊中還有任何有效 數(shù)據(jù)留在里面,那么就不能擦除所述區(qū)塊。因此,為了更好地利用存儲器的存儲容量,常見的是通過將有效部分區(qū)塊量的數(shù)據(jù) 復制到經(jīng)擦除的區(qū)塊中來對其進行合并或收集,使得從中復制這些數(shù)據(jù)的區(qū)塊接著可被 擦除,且其整個存儲容量可再用。還希望復制所述數(shù)據(jù),以便以其邏輯地址的次序?qū)^(qū) 塊內(nèi)的數(shù)據(jù)扇區(qū)進行分組,因為這會提高讀取所述數(shù)據(jù)和將所讀取的數(shù)據(jù)傳遞到主機的 速度。如果此數(shù)據(jù)復制發(fā)生得太頻繁,那么存儲器系統(tǒng)的操作性能可能降級。這尤其會影 響存儲器系統(tǒng)的操作,其中存儲器的存儲容量幾乎與可由主機通過系統(tǒng)的邏輯地址空間 尋址的數(shù)據(jù)的量沒有差別(典型情況)。在這種情況下,在可執(zhí)行主機編程命令之前,可 能需要數(shù)據(jù)合并或收集。于是編程時間因而增加。在相繼幾代存儲器系統(tǒng)中,區(qū)塊的大小已經(jīng)逐漸增加,以便增加可以存儲在給定半 導體區(qū)域中的數(shù)據(jù)位的數(shù)目。存儲256個數(shù)據(jù)扇區(qū)和更多扇區(qū)的區(qū)塊正變得越來越常見。 另外,不同陣列或子陣列的兩個、四個或更多區(qū)塊通常邏輯上一起連接成元區(qū)塊,以便 提高數(shù)據(jù)編程和讀取中的并行度。伴隨此類大容量操作單位而來的是對其進行高效操作 的難題。用于此類存儲器系統(tǒng)的常見主機接口是與通常與磁盤驅(qū)動器一起使用的接口類似的 邏輯地址接口。存儲器連接到的主機所產(chǎn)生的文件被指派有所述接口的邏輯地址空間內(nèi) 的唯一地址。存儲器系統(tǒng)接著通常在邏輯地址空間與存儲器的物理區(qū)塊或元區(qū)塊之間映 射數(shù)據(jù)。存儲器系統(tǒng)記住邏輯地址空間如何映射到物理存儲器中,但主機不知道這個。 主機記住其數(shù)據(jù)文件在邏輯地址空間內(nèi)的地址,但存儲器系統(tǒng)在不知道此映射的情況下 操作。發(fā)明內(nèi)容已經(jīng)開發(fā)了很多技術,其在各種程度上克服了高效地操作此類大型擦除區(qū)塊快閃存 儲器系統(tǒng)中所遇到的問題。另一方面,本發(fā)明是基于基本變化的,即通過改變存儲器與 主機系統(tǒng)之間的數(shù)據(jù)傳遞接口。不是通過使用虛擬地址空間內(nèi)的邏輯地址來在它們之間 傳送數(shù)據(jù),而是數(shù)據(jù)文件通過主機所指派的文件名來識別,且其由所述文件內(nèi)的偏移地 址存取。接著,存儲器系統(tǒng)知道每個扇區(qū)或其它數(shù)據(jù)單位所屬的主機文件。本文論述的 文件單位是(例如)通過具有循序偏移地址而排序的一組數(shù)據(jù),且所述組數(shù)據(jù)由在主機 計算系統(tǒng)中操作的應用程序創(chuàng)建并唯一地識別。這并不被大多數(shù)當前商用存儲器系統(tǒng)所使用,因為主機現(xiàn)在在不識別文件的情況下, 通過一組共用邏輯地址來在所有文件內(nèi)向存儲器系統(tǒng)識別數(shù)據(jù)。通過由文件對象而不是 使用邏輯地址來識別主機數(shù)據(jù),存儲器系統(tǒng)控制器可以用減少對此頻繁數(shù)據(jù)合并和垃圾 收集的需要的方式存儲數(shù)據(jù)。數(shù)據(jù)復制操作的頻率和所復制數(shù)據(jù)的量因此顯著減少,從 而提高了存儲器系統(tǒng)的數(shù)據(jù)編程和讀取性能。另外,存儲器系統(tǒng)控制器保存主機文件存 儲在其中的存儲器區(qū)塊的目錄和索引表信息。于是,主機沒有必要保存當前對管理邏輯 地址接口來說必要的文件分配表(FAT)。區(qū)塊回收操作包含垃圾收集和數(shù)據(jù)合并,其中, 一般來說,將未充分利用的區(qū)塊的 有效數(shù)據(jù)一起聚集在其它區(qū)塊中,且接著擦除未充分利用的區(qū)塊,并使其可用于接受新 的數(shù)據(jù)。根據(jù)本發(fā)明的一方面,基于區(qū)塊的內(nèi)容來選擇待回收的存儲器單元的區(qū)塊。在 利用邏輯地址接口的存儲器系統(tǒng)中,通常不基于物理區(qū)塊的內(nèi)容,而是響應于主機關閉 映射到物理區(qū)塊中的邏輯數(shù)據(jù)區(qū)塊,來回收存儲器單元的區(qū)塊。通過在所述選擇標準中 包含區(qū)塊內(nèi)容,使得存儲器系統(tǒng)的更高效的操作成為可能。在特定實施例中,基于包含在里面的有效數(shù)據(jù)的量來選擇部分填充有有效數(shù)據(jù)的區(qū) 塊以用于回收操作。具有最少量的有效數(shù)據(jù)的區(qū)塊可被最高效地回收,因為要復制到另 一區(qū)塊的數(shù)據(jù)較少。由于復制數(shù)據(jù)會從其它存儲器操作(例如數(shù)據(jù)編程或讀取)中奪取 相當大量的時間,所以(例如)選擇具有最少量的有效數(shù)據(jù)的區(qū)塊以用于回收意味著可 在對系統(tǒng)性能產(chǎn)生最少負面影響的情況下,使此區(qū)塊可用于新數(shù)據(jù)的存儲。由于含有少 量有效數(shù)據(jù)的一些區(qū)塊還含有在不必回收所述區(qū)塊的情況下即可將數(shù)據(jù)寫入其中的一些 經(jīng)擦除容量,所以一些實施例包含當選擇待回收的區(qū)塊時,考慮區(qū)塊中的經(jīng)擦除容量的 量。如果兩個區(qū)塊中存儲的有效數(shù)據(jù)的量相同,但(例如) 一個區(qū)塊具有一些經(jīng)擦除容 量而另一區(qū)塊不具有,那么首先回收不具有經(jīng)擦除容量的區(qū)塊,因為得到的會更多。具有經(jīng)擦除容量的區(qū)塊具有新數(shù)據(jù)的存儲的當前值,所述值視可寫入其中的數(shù)據(jù)的量而定, 而不具有經(jīng)擦除容量的區(qū)塊并非如此。本發(fā)明的其它方面、優(yōu)勢、特征和細節(jié)包含在以下對本發(fā)明的示范性實例的描述內(nèi) 容中,所述描述內(nèi)容應結合附圖來理解。本文所參考的所有專利、專利申請案、文章、其它出版物、文獻等等之類出于所有 目的全文以引用的方式并入本文中。如果所并入的任何出版物、文獻等等之類與本申請 案之間在術語的定義或用法方面存在任何不一致性或沖突,則應以本申請案的定義或用 法為準。
圖1示意性地說明如當前所實施的主機和所連接的非易失性存儲器系統(tǒng); 圖2是用作圖1的非易失性存儲器的示范性快閃存儲器系統(tǒng)的方框圖; 圖3是可在圖2的系統(tǒng)中使用的存儲器單元陣列的代表性電路圖; 圖4說明圖2的系統(tǒng)的示范性物理存儲器組織; 圖5展示圖4的物理存儲器的一部分的展開圖; 圖6展示圖4和圖5的物理存儲器的一部分的進一步展開圖; 圖7說明主機與可重新編程的存儲器系統(tǒng)之間的常見現(xiàn)有技術邏輯地址接口; 圖8以與圖7不同的方式說明主機與可重新編程的存儲器系統(tǒng)之間的常見現(xiàn)有技術 邏輯地址接口;圖9說明根據(jù)本發(fā)明的主機與可重新編程的存儲器系統(tǒng)之間的直接文件存儲接口; 圖10以與圖9不同的方式說明根據(jù)本發(fā)明的主機與可重新編程的存儲器系統(tǒng)之間的 直接文件存儲接口;圖11是與直接數(shù)據(jù)文件存儲接口一起操作的存儲器系統(tǒng)的功能方框圖; 圖12說明直接數(shù)據(jù)文件存儲器的操作循環(huán);圖13A到圖13D展示將文件的數(shù)據(jù)直接寫入到存儲器中的四個不同實例;圖14A到圖14E展示在各種允許的區(qū)塊類型的組合中存儲的數(shù)據(jù)文件的實例;圖15是存儲著個別文件的數(shù)據(jù)的區(qū)塊類型所允許的文件狀態(tài)的列表;圖16是展示圖15中所列出的文件狀態(tài)之間所允許的初級轉(zhuǎn)變的狀態(tài)圖;圖17是描述圖16的狀態(tài)圖中所說明的初級文件狀態(tài)轉(zhuǎn)變的表;圖18是展示圖15中所列出的文件狀態(tài)之間的結果次級轉(zhuǎn)變的狀態(tài)圖;圖19是描述圖18的狀態(tài)圖中所說明的次級文件狀態(tài)轉(zhuǎn)變的表;圖20是列出在圖15到圖20的條件下被分配為活動區(qū)塊的區(qū)塊類型的一覽表; 圖21A到圖21D展示區(qū)塊回收操作的實例;圖22是概括地說明回收操作的流程圖;圖23說明典型部分存儲器單元區(qū)塊中所存儲的數(shù)據(jù)的類型; 圖24提供實行圖22的流程圖的步驟中的一者的特定實施例的細節(jié); 圖25提供執(zhí)行圖22的流程圖的同一步驟的替代實施例的細節(jié);以及 圖26是界定放置在又一實施例的兩個區(qū)塊列表上的區(qū)塊類型的表。
具體實施方式
快閃存儲器系統(tǒng)一般說明相對于圖1到圖8描述常見快閃存儲器系統(tǒng)和與主機裝置的典型操作。在此類系統(tǒng) 中,可實施本發(fā)明的各個方面。圖1的主機系統(tǒng)1將數(shù)據(jù)存儲在快閃存儲器2中,并從 快閃存儲器2檢索數(shù)據(jù)。盡管快閃存儲器可嵌入在主機內(nèi),但將存儲器2說明為呈現(xiàn)更 為普遍的通過機械和電連接器的配合部分3和4可移除地連接到主機的卡的形式。目前 有許多不同的商業(yè)上可購得的快閃存儲卡,實例是那些以CompactFlash (CF)、 MultiMediaCard(MMC)、 Secure Digital( SD)、 miniSD、microSD、Memory Stick、 SmartMedia 和TransFlash的商標出售的存儲卡。盡管這些卡具有根據(jù)其標準化規(guī)格的唯一機械和/或 電接口,但每個卡中所包含的快閃存儲器是非常相似的。這些卡都可從本申請案的受讓 人SanDisk公司購得。SanDisk還在其Cruzer商標下提供一系列快閃驅(qū)動器,其為呈小 型封裝形式的手持式存儲器系統(tǒng),所述系統(tǒng)具有用于通過插入到主機的USB插口中而與 主機連接的通用串行總線(USB)插頭。這些存儲卡和快閃驅(qū)動器中的每一者均包含控 制器,所述控制器與主機介接,并控制它們內(nèi)的快閃存儲器的操作。使用此類存儲卡和快閃驅(qū)動器的主機系統(tǒng)有許多且是各式各樣的。它們包含個人計 算機(PC)、膝上型和其它便攜式計算機、蜂窩式電話、個人數(shù)字助理(PDA)、數(shù)字照 相機、數(shù)字攝影機和便攜式音頻播放器。主機通常包含內(nèi)建式插口以供一種或一種以上 類型的存儲卡或快閃驅(qū)動器使用,但有些需要存儲卡插入到其中的適配器。存儲器系統(tǒng) 通常含有其自己的存儲器控制器和驅(qū)動器,但也存在一些只有存儲器的系統(tǒng),其改為由所述存儲器連接到的主機所執(zhí)行的軟件來控制。在含有控制器的一些存儲器系統(tǒng)(尤其 是那些嵌入在主機內(nèi)的存儲器系統(tǒng))中,存儲器、控制器和驅(qū)動器通常形成于單個集成 電路芯片上。就存儲器2涉及到的范圍而言,圖1的主機系統(tǒng)1可被視為具有兩個主要部分,由 電路和軟件的組合構成。所述兩個主要部分是應用程序部分5和與存儲器2介接的驅(qū)動 器部分6。舉例來說,在個人計算機中,應用程序部分5可包含運行文字處理、圖形、控制或其它普及應用軟件的處理器。在攝像機、蜂窩式電話或其它主要專用于執(zhí)行單組 功能的主機系統(tǒng)中,應用程序部分5包含操作攝像機以拍攝并存儲圖片、操作蜂窩式電 話以發(fā)出和接收呼叫等等的軟件。圖1的存儲器系統(tǒng)2包含快閃存儲器7和電路8,所述兩者都與卡所連接到的主機 介接,以用于來回傳遞數(shù)據(jù)并控制存儲器7??刂破?通常在數(shù)據(jù)編程和讀取期間在主 機1所使用的數(shù)據(jù)的邏輯地址與存儲器7的物理地址之間轉(zhuǎn)換。參看圖2,描述可用作圖1的非易失性存儲器2的典型快閃存儲器系統(tǒng)的電路。通 常在通過系統(tǒng)總線13與一個或一個以上集成電路存儲器芯片并聯(lián)連接的單個集成電路 芯片11上實施系統(tǒng)控制器,圖2中展示單個此類存儲器芯片15。所說明的特定總線13 包含單獨一組導線17用來運載數(shù)據(jù)、 一組導線19用于存儲器地址以及一組導線21用于 控制與狀態(tài)信號?;蛘?,單組導線可在這三個功能之間時間共享。另外,可使用系統(tǒng)總 線的其它配置,例如2004年8月9日申請的第10/915,039號美國專利申請案(現(xiàn)第 2006/0031593 Al號公開案)中所描述的環(huán)形總線。典型的控制器芯片11具有其自己的內(nèi)部總線23,所述內(nèi)部總線23通過接口電路25 與系統(tǒng)總線13介接。通常連接到總線的主要功能是處理器27 (例如微處理器或微控制 器);只讀存儲器(ROM)29,其含有用以初始化("引導")系統(tǒng)的代碼;只讀存儲器(RAM) 31,其主要用于緩沖正在存儲器與主機之間傳遞的數(shù)據(jù);以及電路33,其計算并檢査經(jīng) 過存儲器與主機之間的控制器的數(shù)據(jù)的誤差校正碼(ECC)??刂破骺偩€23通過電路35 與主機系統(tǒng)介接,在圖2的系統(tǒng)包含在存儲卡內(nèi)的情況下,這是通過卡的作為連接器4 的一部分的外部觸點37來完成的。時鐘39與控制器11的其它組件中的每一者連接并由 其利用。存儲器芯片15以及與系統(tǒng)總線13連接的任何其它芯片通常含有組織成多個子陣列 或平面的存儲器單元陣列,為了簡單起見,說明兩個此類平面41和43,但可改為使用 更多(例如四個或八個)此類平面?;蛘撸酒?5的存儲器單元陣列可不分成平面。然 而,當這樣分時,每個平面具有其自己的列控制電路45和47,其可很大程度上獨立于 彼此而操作。電路45和47從系統(tǒng)總線13的地址部分19接收其相應存儲器單元陣列的 地址,并對所述地址進行解碼以尋址相應位線49和51中的特定一者或一者以上。通過 行控制電路55響應于在地址總線19上接收到的地址而尋址字線53。源極電壓控制電路 57和59也與相應的平面連接,p阱電壓控制電路61和63也是如此。如果存儲器芯片 15具有單個存儲器單元陣列,且如果系統(tǒng)中存在兩個或兩個以上此類芯片,那么每個芯片的陣列可以與上文所述的多平面芯片內(nèi)的一個平面或子陣列類似的方式操作。數(shù)據(jù)通過與系統(tǒng)總線13的數(shù)據(jù)部分17連接的相應數(shù)據(jù)輸入/輸出電路65和67轉(zhuǎn)移 到平面41和43中且從平面41和43中轉(zhuǎn)移出來。電路65和67用于通過線69和71將 數(shù)據(jù)編程到存儲器單元中和從其相應平面的存儲器單元中讀取數(shù)據(jù)兩者,所述線69和 71通過相應的列控制電路45和47連接到平面。盡管控制器11控制存儲器芯片15的操作以編程數(shù)據(jù)、讀取數(shù)據(jù)、擦除和辦理各種 內(nèi)務處理事項,但每個存儲器芯片還含有一些控制電路,所述控制電路執(zhí)行來自控制器 11的命令以執(zhí)行此類功能。接口電路73連接到系統(tǒng)總線13的控制與狀態(tài)部分21。將來 自控制器的命令提供到狀態(tài)機75,狀態(tài)機75接著提供其它電路的特定控制,以便執(zhí)行 這些命令??刂凭€77到81使狀態(tài)機75與這些其它電路連接,如圖2中所示。來自狀態(tài) 機75的狀態(tài)信息通過線83傳送到接口 73,以便通過總線部分21傳輸?shù)娇刂破?1。存儲器單元陣列41和43的NAND結構當前是優(yōu)選的,但是也可改為使用其它結構 (例如NOR)。 NAND快閃存儲器及其作為存儲器系統(tǒng)的一部分的操作的實例可通過參 考第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的電路圖說明示范性NAND陣列,其為圖2的存儲器系統(tǒng)的存儲器單元陣列41 的一部分。提供大量全局位線,為了闡釋的簡單性,圖2中僅展示四個此類線91到94。 許多串聯(lián)連接的存儲器單元串97到104連接在這些位線中的一者與參考電位之間。使用 存儲器單元串99作為代表,多個電荷存儲存儲器單元107到110在所述串的任一端處與 選擇晶體管lll和112串聯(lián)連接。當串的選擇晶體管變得具有傳導性時,所述串連接在 其位線與參考電位之間。接著, 一次對所述串內(nèi)的一個存儲器單元進行編程或讀取。圖3的字線115到118個別地延伸越過許多存儲器單元串中的每一者中的一個存儲 器單元的電荷存儲元件,且柵極119和120控制所述串的每個端處的選擇晶體管的態(tài)。 使共享共用字線和控制柵極線115到120的存儲器單元串形成一起擦除的存儲器單元區(qū) 塊123。此單元塊含有一次可物理擦除的最小數(shù)目的單元。 一次對沿字線115到118中的 一者的一行存儲器單元進行編程。通常,以指定次序?qū)AND陣列的行進行編程,在此 情況下,開始于沿最接近于連接到接地或另一共用電位的串的端部的字線118的行。接 下來對沿字線117向那行存儲器單元進行編程,以此類推,貫穿區(qū)塊123。最后對沿字線 115的行進行編程。第二區(qū)塊125是類似的,其存儲器單元串連接到與第一區(qū)塊123中的串相同的全局 位線,但具有不同組的字線和控制柵極線。通過行控制電路55將字線和控制柵極線驅(qū)動 到其合適的操作電壓。如果系統(tǒng)中存在一個以上平面或子陣列,例如圖2的平面1和2, 那么一個存儲器結構使用在它們之間延伸的共用字線?;蛘?,可能存在兩個以上共享共 用字線的平面或子陣列。在其它存儲器結構中,分別驅(qū)動個別平面或子陣列的字線。如上文參考的NAND專利和公開申請案中的幾者中所述,存儲器系統(tǒng)可經(jīng)操作以在 每個電荷存儲元件或區(qū)域中存儲兩個以上可檢測電荷電平,從而在每一者中存儲一個以 上數(shù)據(jù)位。存儲器單元的電荷存儲元件最通常是導電性浮動柵極,但可替代地是非導電 性介電電荷俘獲材料,如第2003/0109093號美國專利申請公開案中所述。圖4在概念上說明用作下文進一步描述內(nèi)容中的實例的快閃存儲器單元陣列7(圖1) 的組織。存儲器單元的四個平面或子陣列131到134可位于單個集成存儲器單元芯片上、 位于兩個芯片(每個芯片上有所述平面中的兩者)或位于四個單獨芯片上。特定布置對 下文的論述內(nèi)容并不重要。當然,系統(tǒng)中可能存在其它數(shù)目的平面,例如1個、2個、8 個、16個或更多。通過矩形將所述平面?zhèn)€別地分成圖4中所示的存儲器單元區(qū)塊,例如 位于相應平面131到134內(nèi)的區(qū)塊137、 138、 139和140。每個平面內(nèi)可能存在數(shù)十個 或數(shù)百個區(qū)塊。如上文所提及,存儲器單元區(qū)塊是擦除單位,即可一起物理擦除的最小 數(shù)目的存儲器單元。然而,為了獲得增加的并行性,以較大的元區(qū)塊單位來操作所述區(qū) 塊。來自每個平面的一個區(qū)塊邏輯上連接在一起以形成元區(qū)塊。展示四個區(qū)塊137到140 形成一個元區(qū)塊141。元區(qū)塊內(nèi)的所有單元通常一起擦除。用于形成元區(qū)塊的區(qū)塊無需 限于其相應平面內(nèi)的相同相對位置,如由區(qū)塊145到148組成的第二元區(qū)塊143中所示。 盡管通常優(yōu)選使元區(qū)塊延伸越過所有平面,但為了獲得較高系統(tǒng)性能,可用動態(tài)地形成 位于不同平面內(nèi)的一個、兩個或三個區(qū)塊中的任何一者或所有的元區(qū)塊的能力來操作存 儲器系統(tǒng)。這允許元區(qū)塊的大小與一個編程操作中可用于存儲的數(shù)據(jù)的量更緊密地匹配。出于操作目的,個別區(qū)塊又分成存儲器單元頁,如圖5中所說明。舉例來說,區(qū)塊 131到134中的每一者的存儲器單元每一者被分成八個頁P0到P7?;蛘?,每個區(qū)塊內(nèi)可 存在16個、32個或更多個存儲器單元頁。頁是區(qū)塊內(nèi)的含有一次所編程的最小量的數(shù) 據(jù)的數(shù)據(jù)編程和讀取單位。在圖3的NAND結構中,頁由區(qū)塊內(nèi)的沿字線的存儲器單元 形成。然而,為了增加存儲器系統(tǒng)操作并行性,兩個或兩個以上區(qū)塊內(nèi)的此類頁可邏輯 上連接成元頁。圖5中說明元頁151,其由來自四個區(qū)塊131到134中的每一者的一個 物理頁形成。舉例來說,元頁151包含四個區(qū)塊中的每一者中的頁P2,但元頁的頁不一定需要在區(qū)塊的每一者內(nèi)具有同一相對位置。盡管優(yōu)選越過所有四個平面并行編程和讀取最大量的數(shù)據(jù),但為了獲得較高系統(tǒng)性 能,存儲器系統(tǒng)也可經(jīng)操作以形成不同平面內(nèi)的單獨區(qū)塊中的一個、兩個或三個頁中的 任何一者或所有的元頁。這允許編程和讀取操作適應性地與可方便地并行處置的數(shù)據(jù)的 量匹配,且減少元頁的一部分保持未編程有數(shù)據(jù)的機會。如圖5中所說明,由多個平面的物理頁形成的元頁沿那多個平面的字線行含有存儲 器單元。不是同時編程一個字線行中的所有單元,而是更通常在兩個或兩個以上交錯的 群組中交替地對它們進行編程,每個群組存儲一個數(shù)據(jù)頁(在單個區(qū)塊中)或一個數(shù)據(jù) 元頁(越過多個區(qū)塊)。通過一次對交替的存儲器單元進行編程,無需為每個位線提供包 括數(shù)據(jù)寄存器和讀出放大器的外圍電路單元,而是在鄰近位線之間對其進行時間共享。 這節(jié)約了外圍電路所需的襯底空間的量,且允許存儲器單元沿行以增加的密度堆積。否 則,優(yōu)選沿行同時編程每一單元,以便使可從給定存儲器系統(tǒng)得到的并行性最大。參看圖3,通過沿NAND串的至少一個端提供兩行選擇晶體管(未圖示)而不是所 示的單個行,來最方便地實現(xiàn)沿行同時將數(shù)據(jù)編程到每隔一個存儲器單元中。 一個行的 選擇晶體管接著響應于一個控制信號將區(qū)塊內(nèi)的每隔一個串連接到其相應的位線,且另 一行的選擇晶體管響應于另一控制信號將介入的每隔一個串連接到其相應的位線。因此, 將兩個數(shù)據(jù)頁寫入到每個存儲器單元行中。按照慣例,每個邏輯頁中的數(shù)據(jù)的量通常是一個或一個以上數(shù)據(jù)扇區(qū)的整數(shù)數(shù)目, 每個扇區(qū)含有512個字節(jié)的數(shù)據(jù)。圖6展示頁或元頁的兩個數(shù)據(jù)扇區(qū)153和155的邏輯 數(shù)據(jù)頁。每個扇區(qū)通常含有部分157,其具有正被存儲的512個字節(jié)的用戶或系統(tǒng)數(shù) 據(jù);和另一數(shù)目的字節(jié)159,其用于與部分157中的數(shù)據(jù)有關或與其存儲在里面的物理 頁或區(qū)塊有關的額外開銷數(shù)據(jù)。額外開銷數(shù)據(jù)的字節(jié)數(shù)目通常是16個字節(jié),使得扇區(qū) 153和155中的每一者總共具有528個字節(jié)。額外開銷部分159可含有在編程期間從數(shù) 據(jù)部分157計算出的ECC、其邏輯地址、區(qū)塊已經(jīng)被擦除和重新編程的次數(shù)的經(jīng)歷計數(shù)、 一個或一個以上控制旗標、操作電壓電平和/或類似物,加上從此類額外開銷數(shù)據(jù)159計 算出的ECC?;蛘?,額外開銷數(shù)據(jù)159或其一部分可存儲在其它區(qū)塊中的不同頁中。隨著存儲器的并行性增加,元區(qū)塊的數(shù)據(jù)存儲容量增加,且因此數(shù)據(jù)頁和元頁的大小也增加。數(shù)據(jù)頁于是可含有兩個以上數(shù)據(jù)扇區(qū)。在一個數(shù)據(jù)頁中具有兩個扇區(qū)且每個 元頁具有兩個數(shù)據(jù)頁的情況下, 一個元頁中存在四個扇區(qū)。因此,每個元頁存儲2048個字節(jié)的數(shù)據(jù)。這是高度的并行性,且可能隨著行中的存儲器單元的數(shù)目增加而更進一步增加。為此,快閃存儲器的寬度延伸,以便增加頁和元頁中的數(shù)據(jù)的量。上文指出的物理上較小的可重新編程的非易失性存儲卡和快閃驅(qū)動器商業(yè)上可以 512兆字節(jié)(MB)、 1千兆字節(jié)(GB)、 2GB和4GB的數(shù)據(jù)存儲容量購得,且可變得更 高。圖7說明主機與此大容量存儲器系統(tǒng)之間的最常見的接口。主機處理由主機執(zhí)行的 應用軟件或固件程序所產(chǎn)生或使用的數(shù)據(jù)文件。文字處理數(shù)據(jù)文件是一個實例,且計算 機輔助設計(CAD)軟件的繪圖文件是另一個實例,主要用于例如PC、膝上型計算機和 類似物的通用計算機主機中。pdf格式的文檔也是這樣的文件。靜止數(shù)字視頻攝像機針對 每個圖片產(chǎn)生一個存儲在存儲卡上的數(shù)據(jù)文件。蜂窩式電話利用來自內(nèi)部存儲卡上的文 件(例如電話號碼簿)的數(shù)據(jù)。PDA存儲并使用若干不同文件,例如地址文件、日歷文 件和類似文件。在任一此類應用中,存儲卡還可含有操作主機的軟件。圖7中說明主機與存儲器系統(tǒng)之間的常見邏輯接口。連續(xù)的邏輯地址空間161足夠 大以便為可存儲在存儲器系統(tǒng)中的所有數(shù)據(jù)提供地址。通常將主機地址空間分成數(shù)據(jù)群 集的增量。每個群集可在給定主機系統(tǒng)中設計成含有若干數(shù)據(jù)扇區(qū),大約在4到64個扇 區(qū)是典型的。標準扇區(qū)含有512個字節(jié)的數(shù)據(jù)。圖7的實例中展示已經(jīng)創(chuàng)建了三個文件1、 2和3。在主機系統(tǒng)上運行的應用程序創(chuàng) 建每個文件作為一組有序數(shù)據(jù),并通過唯一名稱或其它參考對其進行識別。尚未分配給 其它文件的足夠可用的邏輯地址空間由主機指派給文件1。文件1被展示為已經(jīng)被分配 有連續(xù)范圍的可用邏輯地址。地址的范圍通常還出于特定目的而分配,例如特定范圍用 于主機操作軟件,所述地址接著避免用于存儲數(shù)據(jù),即使在主機將邏輯地址指派給數(shù)據(jù) 時這些地址尚未被利用也是如此。當主機稍后創(chuàng)建文件2時,主機類似地在邏輯地址空間161內(nèi)指派兩個不同范圍的 連續(xù)地址,如圖7中所示。文件無需被指派有連續(xù)的邏輯地址,而是可為已經(jīng)分配給其 它文件的地址范圍之間的地址片段。此實例接著展示主機所創(chuàng)建的又一文件3被分配有 主機地址空間的先前未分配給文件1和2和其它數(shù)據(jù)的其它部分。主機通過保存文件分配表(FAT)來記住存儲器邏輯地址空間,其中由主機通過轉(zhuǎn)換 160指派給各個主機文件的邏輯地址被保存。隨著新文件被存儲、其它文件被刪除、文 件被修改等等,F(xiàn)AT表由主機頻繁地更新。FAT表通常存儲在主機存儲器中,F(xiàn)AT表的 備份也存儲在非易失性存儲器中并被不時地更新。正如任何其它數(shù)據(jù)文件一樣,通常通 過邏輯地址空間在非易失性存儲器中存取所述備份。當主機文件被刪除時,主機接著通 過更新FAT表來解除分配先前分配給被刪除文件的邏輯地址,以展示它們現(xiàn)在可用于與其它數(shù)據(jù)文件一起使用。主機不關心存儲器系統(tǒng)控制器選擇用來存儲文件的物理位置。典型的主機僅知道其 邏輯地址空間和其已經(jīng)分配給其各個文件的邏輯地址。另一方面,存儲器系統(tǒng)通過典型 的主機/卡接口,僅知道邏輯地址空間的數(shù)據(jù)已經(jīng)被寫入到的部分,但不知道分配給特定 主機文件的邏輯地址,乃至不知道主機文件的數(shù)目。存儲器系統(tǒng)控制器將主機所提供的 用于存儲或檢索數(shù)據(jù)的邏輯地址轉(zhuǎn)換成存儲有主機數(shù)據(jù)的快閃存儲器單元陣列內(nèi)的唯一 物理地址。區(qū)塊163表示這些邏輯到物理地址轉(zhuǎn)換的工作表,其由存儲器系統(tǒng)控制器保 存。存儲器系統(tǒng)控制器經(jīng)編程以便以使系統(tǒng)的性能維持在高等級的方式將數(shù)據(jù)文件存儲 在存儲器陣列165的區(qū)塊和元區(qū)塊內(nèi)。在此說明中使用四個平面或子陣列。優(yōu)選越過由 來自所述平面中的每一者的區(qū)塊形成的整個元區(qū)塊,以系統(tǒng)允許的最大并行度對數(shù)據(jù)進 行編程和讀取。通常將至少一個元區(qū)塊167分配為用于存儲操作固件和存儲器控制器所 使用的數(shù)據(jù)的保留區(qū)塊。可分配另一元區(qū)塊169或多個元區(qū)塊用于存儲主機操作軟件、 主機FAT表等等。物理存儲空間的大部分留下用于存儲數(shù)據(jù)文件。然而,存儲器控制器 不知道接收到的數(shù)據(jù)如何己經(jīng)由主機在其各個文件對象之間分配。存儲器控制器通常從 與主機的交互中知道的只是由主機寫入到特定邏輯地址的數(shù)據(jù)存儲在如由控制器的邏輯 到物理地址表163保存的對應物理地址中。在典型的存儲器系統(tǒng)中,提供比必需的多幾個的額外區(qū)塊的存儲容量,以存儲地址 空間161內(nèi)的數(shù)據(jù)的量??商峁┻@些額外區(qū)塊中的一者或一者以上作為冗余區(qū)塊,用于 代替在存儲器的使用壽命期間可能變得有缺陷的其它區(qū)塊。包含在個別元區(qū)塊內(nèi)的區(qū)塊 的邏輯分組通??沙鲇诟鞣N原因而改變,所述原因包含冗余區(qū)塊替代原本指定給元區(qū)塊 的有缺陷區(qū)塊。 一個或一個以上額外區(qū)塊(例如元區(qū)塊171)通常保存在擦除區(qū)塊集區(qū) 中。當主機將數(shù)據(jù)寫入到存儲器系統(tǒng)時,控制器將由主機指派的邏輯地址轉(zhuǎn)換成擦除區(qū) 塊集區(qū)中的元區(qū)塊內(nèi)的物理地址。其它沒有被用于將數(shù)據(jù)存儲在邏輯地址空間161內(nèi)的 元區(qū)塊接著被擦除,且被規(guī)定為擦除集區(qū)區(qū)塊,以供在隨后的數(shù)據(jù)寫入操作期間使用。 在優(yōu)選形式中,將邏輯地址空間分成多個邏輯群組,每個邏輯群組含有等于物理存儲器 元區(qū)塊的存儲容量的數(shù)據(jù)量,因此允許所述邏輯群組一對一地映射到所述元區(qū)塊中。當原先存儲的數(shù)據(jù)變得廢棄時,存儲在特定主機邏輯地址處的數(shù)據(jù)由新數(shù)據(jù)頻繁地 重寫。作為響應,存儲器系統(tǒng)控制器將新數(shù)據(jù)寫入擦除的區(qū)塊中,且接著針對那些邏輯 地址改變邏輯到物理地址表,以識別那些邏輯地址處的數(shù)據(jù)所存儲到的新的物理區(qū)塊。接著擦除含有那些邏輯地址處的原先數(shù)據(jù)的區(qū)塊,并使其可用于存儲新的數(shù)據(jù)。如果在 寫入開始時,來自擦除區(qū)塊集區(qū)的經(jīng)預擦除的區(qū)塊中沒有足夠的存儲容量,那么此類擦 除通常必須在當前數(shù)據(jù)寫入操作可完成之前發(fā)生。這可能不利地影響系統(tǒng)數(shù)據(jù)編程速度。 存儲器控制器通常僅在主機將新數(shù)據(jù)寫入到其給定邏輯地址時才了解到主機已經(jīng)使同一 邏輯地址處的數(shù)據(jù)變得廢棄。因此,存儲器的許多區(qū)塊可能暫時存儲此類無效數(shù)據(jù)。區(qū)塊和元區(qū)塊的大小逐漸增加,以便高效地使用集成電路存儲器芯片的面積。這導 致較大比例的個別數(shù)據(jù)寫入存儲小于元區(qū)塊的存儲容量(且在許多情況下,甚至小于區(qū) 塊的存儲容量)的數(shù)據(jù)量。由于存儲器系統(tǒng)控制器通常將新數(shù)據(jù)引導到擦除集區(qū)元區(qū)塊, 所以這可能導致元區(qū)塊的多個部分變得未填滿。如果新數(shù)據(jù)是存儲在另一元區(qū)塊中的某 數(shù)據(jù)的更新,那么來自所述另一元區(qū)塊的具有與新數(shù)據(jù)元頁的那些邏輯地址鄰接的邏輯 地址的剩余有效數(shù)據(jù)元頁也合意地以邏輯地址次序復制到新的元區(qū)塊中。舊的元區(qū)塊可 保留其它有效數(shù)據(jù)元頁。隨著時間的過去,這導致個別元區(qū)塊的某些元頁的數(shù)據(jù)變得廢 棄和無效,且由被寫入到不同元區(qū)塊的具有同一邏輯地址的新數(shù)據(jù)代替。為了保存足夠的物理存儲器空間以在整個邏輯地址空間161上存儲數(shù)據(jù),周期性地 對此類數(shù)據(jù)進行壓縮或合并(垃圾收集)。盡可能地將數(shù)據(jù)扇區(qū)以與其邏輯地址相同的次 序保存在元區(qū)塊內(nèi)也是合乎要求的,因為這使得以連續(xù)邏輯地址讀取數(shù)據(jù)更高效。因此, 通常為了此額外目標而執(zhí)行數(shù)據(jù)壓縮和垃圾收集。第6,763,424號美國專利中描述當接收 部分區(qū)塊數(shù)據(jù)更新時管理存儲器的一些方面以及元區(qū)塊的使用。數(shù)據(jù)壓縮通常涉及從元區(qū)塊讀取所有有效數(shù)據(jù)元頁,和將所述元頁寫入到新的元區(qū) 塊,在所述過程中忽略具有無效數(shù)據(jù)的元頁。具有有效數(shù)據(jù)的元頁還優(yōu)選以與存儲在其 中的數(shù)據(jù)的邏輯地址次序匹配的物理地址次序布置。新的元區(qū)塊中被占據(jù)的元頁的數(shù)目 將小于舊的元區(qū)塊中被占據(jù)的元頁的數(shù)目,因為含有無效數(shù)據(jù)的元頁沒有被復制到新的 元區(qū)塊。接著擦除舊的區(qū)塊,并使其可用于存儲新的數(shù)據(jù)。通過合并獲得的額外元頁容 量可接著用于存儲其它數(shù)據(jù)。在垃圾收集期間,從兩個或兩個以上元區(qū)塊收集具有鄰接或幾乎鄰接的邏輯地址的 有效數(shù)據(jù)的元頁,并將其重寫到另一元區(qū)塊中,通常是擦除區(qū)塊集區(qū)中的一個元區(qū)塊。 當所有的有效數(shù)據(jù)元頁都從原先的兩個或兩個以上元區(qū)塊復制出來時,可擦除所述元區(qū) 塊以供將來使用。數(shù)據(jù)合并和垃圾收集會花費時間,且可能影響存儲器系統(tǒng)的性能,尤其是在數(shù)據(jù)合 并或垃圾收集需要在可執(zhí)行來自主機的命令之前發(fā)生時。此類操作通常由存儲器系統(tǒng)控制器調(diào)度以盡可能在后臺發(fā)生,但執(zhí)行這些操作的需要可能導致控制器不得不給主機忙 碌狀態(tài)信號,直到這個操作完成為止。主機命令的執(zhí)行可延遲的實例是擦除區(qū)塊集區(qū)中 沒有足夠的預擦除元區(qū)塊用來存儲主機想要寫入到存儲器中的所有數(shù)據(jù),且首先需要數(shù) 據(jù)合并或垃圾收集來清除一個或一個以上有效數(shù)據(jù)的元區(qū)塊,所述元區(qū)塊接著可被擦除。 因此,注意力已經(jīng)被引導到管理對存儲器的控制,以便使此類中斷減到最小。在以下美 國專利申請案中描述許多此類技術2003年12月30日申請的題為"Management of Non-Volatile Memory Systems Having Large Erase Blocks"的第10/749,831號美國專利申 請案,現(xiàn)在的第2005/0144358 Al號公開案;2003年12月30日申請的題為"Non-Volatile Memory and Method with Block Management System"的第10/750,155號美國專利申i青案; 2004年8月13日申請的題為"Non-Volatile Memory and Method with Memory Planes Alignment"的第10/917,888號美國專利申請案,現(xiàn)在是第2005/0141313 Al號公開案; 2004年8月13日申請的第10/917,867號美國專利申請案,現(xiàn)在是第2005/0141312Al號 公開案;2004年8月13日申請的題為"Non-Volatile Memory and Method with Phased Program Failure Handling"的第10/917,889號美國專利申請案,現(xiàn)在是第2005/0166087 Al 號公開案;2004年8月13日申請的題為"Non-Volatile Memory and Method with Control Data Management"的第10/917,725號美國專利申請案,現(xiàn)在是第2005/0144365 Al號公 開案;2005年7月27日申請的題為"Non-Volatile Memory and Method with Multi-Stream Update Tracking"的第11/192,220號美國專利申請案;2005年7月27日申請的題為"Non-Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks"的第11/192,386號美國專利申請案;以及2005年7月27日申請的題為"Non-Volatile Memory and Method with Multi-Stream Updating"的第11/191,686號美國專 利申請案。高效地控制具有非常大的擦除區(qū)塊的存儲器陣列的操作的一個難題是使給定寫入操 作期間存儲的數(shù)據(jù)扇區(qū)的數(shù)目與存儲器的區(qū)塊的容量和邊界匹配并對準。 一種手段是配 置元區(qū)塊,所述元區(qū)塊用于以少于最大數(shù)目的區(qū)塊存儲來自主機的新數(shù)據(jù),所述數(shù)目的 區(qū)塊是存儲少于填充整個元區(qū)塊的量的數(shù)量的數(shù)據(jù)所必需的。2003年12月30申請的題 為"Adaptive Metablocks"的第10〃49,189號美國專利申請案(現(xiàn)在是第2005/0144357 Al 號公開案)中描述適應性元區(qū)塊的使用。2004年5月7日申請的第10/841,118號專利申 請案(現(xiàn)在是第2005/0144363Al號公開案)以及2004年12月16日申請的題為"Data Run Programming"的第11/016,271號專利申請案(現(xiàn)在是第2005/0144367 Al號公開案)中描述數(shù)據(jù)區(qū)塊之間的邊界與元區(qū)塊之間的物理邊界的配合。存儲器控制器還可使用來自FAT表(其由主機存儲在非易失性存儲器中)的數(shù)據(jù), 以更高效地操作存儲器系統(tǒng)。 一種此類使用是通過解除分配其邏輯地址來了解數(shù)據(jù)何時 己經(jīng)由主機識別為廢棄的。知道這一點將允許存儲器控制器在其會正常地通過主機將新 數(shù)據(jù)寫入到那些邏輯地址而了解它之前調(diào)度含有此類無效數(shù)據(jù)的區(qū)塊的擦除。2004年7 月21曰申請的題為"Method and Apparatus for Maintaining Data on Non-Volatile Memory Systems"的第10/897,049號美國專利申請案(現(xiàn)在是第2006/0020744 Al號公開案)中 描述這種情況。其它技術包含監(jiān)視將新數(shù)據(jù)寫入到存儲器的主機模式,以便推導出給定 寫入操作是單個文件還是(如果有多個文件)文件之間的邊界所在之處。2004年12月 23日申請的題為"FAT Analysis for Optimized Sequential Cluster Management"的第 11/022,369號美國專利申請案(現(xiàn)在是第2006/0020745 Al號公開案)描述這種類型的技 術的使用。為了高效地操作存儲器系統(tǒng),對控制器來說合乎需要的是盡可能多地知道由主機指 派給其個別文件的數(shù)據(jù)的邏輯地址。數(shù)據(jù)文件接著可由控制器存儲在單個元區(qū)塊或元區(qū) 塊群組內(nèi),而不是當不知道文件邊界時分散在更大數(shù)目的元區(qū)塊之間。結果是數(shù)據(jù)合并 和垃圾收集操作的數(shù)目和復雜性減小。因此,存儲器系統(tǒng)的性能改進。但如上文所述, 當主機/存儲器接口包含邏輯地址空間161 (圖7)時,存儲器控制器難以知道關于主機 數(shù)據(jù)文件結構的較多信息。參看圖8,以不同的方式來說明圖7中已經(jīng)展示的典型邏輯地址主機/存儲器接口。 主機向主機產(chǎn)生的數(shù)據(jù)文件分配邏輯地址。存儲器系統(tǒng)于是看到這些邏輯地址,并將其 映射到實際存儲數(shù)據(jù)的存儲器單元的區(qū)塊的物理地址中?;谖募拇鎯ζ鹘涌谂c操作主機與用于存儲大量數(shù)據(jù)的存儲器系統(tǒng)之間的一種不同類型的接口不使用邏輯地址 空間。主機改為通過唯一文件ID (或其它唯一參考)和所述文件內(nèi)的數(shù)據(jù)單位(例如字 節(jié))的偏移地址在邏輯上尋址每個文件。此文件地址是直接給存儲器系統(tǒng)控制器的,存 儲器系統(tǒng)控制器接著保存其自己的關于每個主機文件的數(shù)據(jù)物理上存儲在何處的表???用如上文相對于圖2到圖6所述的同一存儲器系統(tǒng)來實施這種新的接口。與上文所述內(nèi) 容的主要不同之處是存儲器系統(tǒng)與主機系統(tǒng)通信的方式。圖9中說明這種基于文件的接口,其應與圖7的邏輯地址接口相比較。文件l、 2和 3中的每一者的識別以及圖9的文件內(nèi)的數(shù)據(jù)的偏移量被直接傳遞到存儲器控制器。此邏輯地址信息接著由存儲器控制器功能173轉(zhuǎn)換成存儲器165的元區(qū)塊和元頁的物理地 址。文件目錄記住每個所存儲的扇區(qū)、頁或其它文件數(shù)據(jù)單位所屬的主機文件。圖IO還說明基于文件的接口,其應與圖8的邏輯地址接口相比較。圖8的邏輯地址 空間和主機保存的FAT表在圖10中不存在。而是通過文件編號和所述文件內(nèi)的數(shù)據(jù)的偏 移量向存儲器系統(tǒng)識別由主機產(chǎn)生的數(shù)據(jù)文件。存儲器系統(tǒng)控制器接著直接將所述文件 映射到存儲器單元陣列的物理區(qū)塊,并保存里面存儲有主機文件的存儲器區(qū)塊的文件目 錄和索引表信息。于是,主機沒有必要保存當前對管理邏輯地址接口來說是必需的文件 分配表(FAT)。圖11是直接數(shù)據(jù)文件系統(tǒng)的主要功能的概括方框圖,所述功能由其處理器且由控制 器的其它電路執(zhí)行的存儲器系統(tǒng)固件實行。圖11提供了可在其中考慮下文描述的特定存 儲器操作的總體框架?;谖募慕涌?601層在存儲器系統(tǒng)與外部主機系統(tǒng)或正在同一 存儲卡或快閃驅(qū)動器上執(zhí)行的主機應用程序之間傳遞命令和數(shù)據(jù),以實現(xiàn)存儲器系統(tǒng)的 三個主要功能,即寫入文件、刪除文件和讀取文件。數(shù)據(jù)存儲在快閃存儲器陣列603中。文件區(qū)塊管理功能605根據(jù)借以識別數(shù)據(jù)的文件來組織數(shù)據(jù)在快閃存儲器中的存 儲,并使存儲用于一個以上文件的數(shù)據(jù)的區(qū)塊的出現(xiàn)減到最少。存儲器603的存儲器單 元的物理區(qū)塊是數(shù)據(jù)管理的基本單位。通過功能607將數(shù)據(jù)組織成元頁,以寫入到存儲器603中,使得個別元頁含有特定 文件內(nèi)的鄰接邏輯偏移地址范圍的數(shù)據(jù)。功能609控制對存儲器603的存取以讀取存儲 在其中的數(shù)據(jù)。當由主機命令時,刪除文件的數(shù)據(jù)致使功能611更新功能613所保存的 文件索引信息和功能615中的區(qū)塊列表。文件數(shù)據(jù)索引613通過唯一文件識別符和所述文件內(nèi)的數(shù)據(jù)的偏移地址將存儲在存 儲器603中的個別文件編入索引。每個文件的數(shù)據(jù)被存儲為一組具有鄰接邏輯偏移地址 的數(shù)據(jù)群組。文件目錄識別個別文件在多組數(shù)據(jù)群組條目的文件索引表(FIT)中的位置。 被擦除的(部分地編程有文件數(shù)據(jù)或含有文件數(shù)據(jù)以及廢棄數(shù)據(jù))的區(qū)塊的身份由區(qū)塊 列表功能615保存。上文所述的垃圾收集和數(shù)據(jù)合并功能的主要目的是回收未經(jīng)使用的存儲器空間,以 用于存儲額外數(shù)據(jù)。在垃圾收集中,將源區(qū)塊的有效數(shù)據(jù)從也含有廢棄數(shù)據(jù)的區(qū)塊復制 到具有至少一些經(jīng)擦除空間的一個或一個以上目的地區(qū)塊中。這將有效數(shù)據(jù)收集到數(shù)目較少的區(qū)塊中,從而一旦原先源區(qū)塊被擦除,便釋放由廢棄數(shù)據(jù)占用的容量。在數(shù)據(jù)合 并中, 一個部分填充的區(qū)塊(其因此也含有經(jīng)擦除但未經(jīng)使用的空間)的有效數(shù)據(jù)與另一部分填充的區(qū)塊的有效數(shù)據(jù)進行組合。部分填充的區(qū)塊最常見是由寫入已關閉但其最 后一個擦除區(qū)塊僅部分地填充的新文件引起的。 一旦數(shù)據(jù)被合并,接著擦除含有剛被復 制的數(shù)據(jù)(其于是是復制數(shù)據(jù))的源區(qū)塊,并使其可用于存儲新數(shù)據(jù)。垃圾收集和數(shù)據(jù)合并兩者在本文可一起作為區(qū)塊回收來處置。功能617通過控制有 效文件數(shù)據(jù)從具有未經(jīng)編程的元頁或含有廢棄數(shù)據(jù)的物理區(qū)塊復制到其它區(qū)塊來回收區(qū) 塊。這允許原先區(qū)塊被擦除,以回收其所含有的未經(jīng)使用的空間,并使此空伺可用于存 儲新的文件數(shù)據(jù)。功能619根據(jù)可回收容量的量和經(jīng)擦除區(qū)塊的數(shù)目,適應性地控制區(qū) 塊回收操作的發(fā)生和持續(xù)時間。以維持存儲器系統(tǒng)的良好的總體性能的方式,以相對于 新文件數(shù)據(jù)的寫入速率的最佳速率執(zhí)行區(qū)塊回收。在圖ll的功能圖中,轉(zhuǎn)換層621和接口層623在文件接口 601之上,文件接口601 與快閃存儲器的后端系統(tǒng)介接,并控制其操作。在此實例中,接口層623具有根據(jù)三個 不同協(xié)議中的一者,用主機或以其它方式將數(shù)據(jù)傳送到存儲器系統(tǒng)外部的能力。文件接 口 625是本文主要描述的文件接口,其中個別文件的數(shù)據(jù)由唯一文件識別符和所述文件 內(nèi)的邏輯偏移地址識別。對象接口 627的主要用途是在電子裝置之間傳遞數(shù)據(jù)文件,其 中文件的大小通常是已知的?,F(xiàn)存的用于接口 627的協(xié)議包含來自微軟公司的媒體傳送 協(xié)議(MTP)和圖片傳遞協(xié)議(PTP)。此實例中還包含向后兼容邏輯(LBA)接口 629。 以快閃存儲卡當前所使用的協(xié)議,通過接口 629傳遞數(shù)據(jù),這與磁盤驅(qū)動器系統(tǒng)的情況 類似,其中主機將數(shù)據(jù)尋址到存儲器系統(tǒng)的已界定的邏輯地址空間。轉(zhuǎn)換層621包含協(xié)議適配器631、 633和635,其用于將相應接口協(xié)議625、 627和 629的協(xié)議轉(zhuǎn)換成文件接口 601的共用協(xié)議。命令、數(shù)據(jù)格式等等通過轉(zhuǎn)換層在不同協(xié) 議之間轉(zhuǎn)換。LBA協(xié)議適配器635另外將存儲器系統(tǒng)的邏輯地址空間分成靜態(tài)文件。這 些文件接著由文件接口 601以與通過接口 625和627傳送的不同文件相同的方式進行處 置??蓞⒖?005年8月3日申請的發(fā)明人為S. A. Gorobets的第11/196,869號美國專利 申請案獲得LBA協(xié)議適配器635的功能的細節(jié)。在2005年12月21日申請的發(fā)明人為 Alan Sinclair的第11/316,577號美國專利申請案中給出轉(zhuǎn)換和接口層621和623的更多信 息。當新的數(shù)據(jù)文件被編程到存儲器中時,數(shù)據(jù)被寫入到存儲器單元的經(jīng)擦除區(qū)塊中, 從所述區(qū)塊中的第一物理位置開始,并依次循序地進行完所述區(qū)塊的位置。數(shù)據(jù)以從主 機接收到的次序被編程,不管所述數(shù)據(jù)在文件內(nèi)的偏移量的次序如何。編程繼續(xù)進行, 直到所述文件的所有數(shù)據(jù)都已經(jīng)寫入到存儲器中為止。如果文件中的數(shù)據(jù)的量超過單個存儲器區(qū)塊的容量,那么當?shù)谝粎^(qū)塊滿時,編程在第二經(jīng)擦除區(qū)塊中繼續(xù)進行。以從第 一位置開始的次序,以與第一存儲器區(qū)塊相同的方式對第二存儲器區(qū)塊進行編程,直到 文件的所有數(shù)據(jù)都被存儲或第二區(qū)塊滿為止。可以文件的任何剩余數(shù)據(jù)對第三或額外區(qū) 塊進行編程。存儲單個文件的數(shù)據(jù)的多個區(qū)塊或元區(qū)塊無需是物理上或邏輯上鄰接的。 為了便于闡釋,除非另外規(guī)定,否則希望本文所使用的術語"區(qū)塊"指代擦除區(qū)塊單位 或多區(qū)塊"元區(qū)塊",視特定系統(tǒng)中是否使用元區(qū)塊而定。圖12的狀態(tài)圖說明圖11中所示的存儲器操作的總體運行。個別存儲器區(qū)塊可被視 為處于三個狀態(tài)中的一者。這些是經(jīng)擦除區(qū)塊641、區(qū)塊643,其存儲有效文件數(shù)據(jù)而 不具有可回收容量;區(qū)塊645,其可含有一些有效文件數(shù)據(jù),但還具有來自未經(jīng)編程的 經(jīng)擦除頁和/或存儲在其中的廢棄(無效)數(shù)據(jù)的可回收容量。數(shù)據(jù)通過功能647寫入到 經(jīng)擦除存儲器區(qū)塊,從而形成類別643或645中的區(qū)塊,視所得的經(jīng)編程區(qū)塊是否保留 任何可回收容量而定。當文件被刪除(如由功能649所指示)時,含有文件的數(shù)據(jù)的區(qū) 塊643轉(zhuǎn)換成具有可回收容量的區(qū)塊645。區(qū)塊645的未經(jīng)使用的存儲容量由功能651 回收,這導致將這些區(qū)塊返回到新的數(shù)據(jù)可寫入到的經(jīng)擦除區(qū)塊641的狀態(tài)。參看圖13A,說明將數(shù)據(jù)文件寫入到存儲器系統(tǒng)。在此實例中,數(shù)據(jù)文件181大于 存儲器系統(tǒng)的一個區(qū)塊或元區(qū)塊183的存儲容量,其被展示為在垂直實線之間延伸。數(shù) 據(jù)文件181的一部分184因此也被寫入到第二區(qū)塊185中。將這些存儲器單元區(qū)塊展示 為物理上鄰接,但它們無需如此。來自文件181的數(shù)據(jù)以與其從主機被串流的方式相同 的方式被寫入,直到文件的所有數(shù)據(jù)都已經(jīng)寫入到存儲器中為止。在圖13A的實例中, 數(shù)據(jù)181是文件的初始數(shù)據(jù)。存儲器系統(tǒng)管理和記住所存儲數(shù)據(jù)的優(yōu)選方式是使用可變大小的數(shù)據(jù)群組。即,將 文件的數(shù)據(jù)存儲為多個數(shù)據(jù)群組,所述數(shù)據(jù)群組可以界定的次序鏈接在一起以形成完整 的文件。然而,優(yōu)選的是,存儲器系統(tǒng)控制器通過使用文件索引表(FIT)來保存數(shù)據(jù)群 組在文件內(nèi)的次序。當來自主機的數(shù)據(jù)流被寫入時,只要文件數(shù)據(jù)的邏輯偏移地址中或 數(shù)據(jù)將存儲在其中的物理空間中存在不連續(xù)性,就開始新的數(shù)據(jù)群組。此物理不連續(xù)性 的實例是當文件的數(shù)據(jù)填充一個區(qū)塊并開始被寫入到另一區(qū)塊中的時候。這在圖13A中 說明,其中第一數(shù)據(jù)群組填充第一區(qū)塊183,文件的剩余部分184存儲在第二區(qū)塊185 中,作為第二數(shù)據(jù)群組。第一數(shù)據(jù)群組可由(F0,D0)表示,其中F0是數(shù)據(jù)文件的開頭的 邏輯偏移量,且D0是存儲器內(nèi)文件開始的物理位置。第二數(shù)據(jù)群組表示為(F1,D1),其 中Fl是存儲在第二區(qū)塊185的開頭處的數(shù)據(jù)的邏輯文件偏移,且Dl是所述數(shù)據(jù)所存儲的物理位置。通過主機-存儲器接口傳遞的數(shù)據(jù)的量可用若干數(shù)據(jù)字節(jié)、若干數(shù)據(jù)扇區(qū)或以某一其 它顆粒度來表達。在通過當前邏輯地址接口與大容量存儲器系統(tǒng)通信時,主機最常用字 節(jié)顆粒度來界定其文件的數(shù)據(jù),但接著將字節(jié)分組成每者具有512個字節(jié)的扇區(qū),或分 組成每者具有多個扇區(qū)的群集。這樣做通常是為了簡化存儲器系統(tǒng)的操作。盡管本文所 述的基于文件的主機-存儲器接口可使用某一其它數(shù)據(jù)單位,但原先主機文件字節(jié)顆粒度 通常是優(yōu)選的。即,數(shù)據(jù)偏移量、長度及類似物優(yōu)選用字節(jié)(數(shù)據(jù)的最小合理單位)而 不是用扇區(qū)、群集或類似物來表達。這允許用本文所述的技術更高效地使用快閃存儲器 存儲設備的容量。以圖13A中所說明的方式寫入到存儲器中的新文件接著在FIT中以所述次序表示為 數(shù)據(jù)群組的索引條目(F0,D0)、 (F1,D1)的序列。艮P,只要主機系統(tǒng)想要存取特定文件,主 機就將其文件ID或其它標識發(fā)送到存儲器系統(tǒng),存儲器系統(tǒng)接著存取其FIT以識別組成 所述文件的數(shù)據(jù)群組。為了方便存儲器系統(tǒng)的操作,個別數(shù)據(jù)群組的長度<長度>也可包 含在其個別條目中。在使用時,存儲器控制器計算并存儲數(shù)據(jù)群組的長度。只要主機以打開狀態(tài)保存圖13A的文件,物理寫入指針P就也優(yōu)選被保存,以界定 用于針對所述文件寫入從主機接收到的任何進一步數(shù)據(jù)的位置。在物理存儲器中的文件 的結尾處寫入用于所述文件的任何新的數(shù)據(jù),而不管所述新數(shù)據(jù)在文件內(nèi)的邏輯位置如 何。存儲器系統(tǒng)允許多個文件同時保持打開,例如4個或5個此類文件,并保存所述文 件中的每一者的寫入指針P。不同文件的寫入指針指向不同存儲器區(qū)塊中的位置。如果 當存儲器系統(tǒng)對打開文件的數(shù)目的限制已經(jīng)存在時主機系統(tǒng)想要打開新的文件,那么首 先關閉打開的文件中的一者,且接著打開新的文件。圖13B說明通過主機將數(shù)據(jù)附加到圖13A的先前寫入但仍打開的文件的結尾。展示 數(shù)據(jù)187由主機系統(tǒng)添加到文件的結尾,其還在所述文件的數(shù)據(jù)的結尾處寫入第二區(qū)塊 185中。所附加的數(shù)據(jù)變成數(shù)據(jù)群組(F1,D1)的一部分,所述數(shù)據(jù)群組因此現(xiàn)在含有更多 數(shù)據(jù),因為現(xiàn)存數(shù)據(jù)群組184與所附加數(shù)據(jù)189之間不存在邏輯或物理地址不連續(xù)性。 因此,完整的文件在FIT中仍表示為索引條目(F0,D0)、 (F1,D1)的序列。指針P的地址也 改變成所存儲的附加數(shù)據(jù)的結尾的地址。圖13C中展示將數(shù)據(jù)區(qū)塊191插入到圖13A的先前寫入的文件中的實例。盡管主機 正將數(shù)據(jù)191插入到文件中,但存儲器系統(tǒng)將所插入的數(shù)據(jù)附加在先前寫入的文件數(shù)據(jù) 的結尾處的位置193處。當數(shù)據(jù)被插入到打開文件中時,沒有必要以其邏輯次序來重寫文件的數(shù)據(jù),盡管這可以稍后在主機關閉所述文件之后在后臺進行。由于插入的數(shù)據(jù)完 全存儲在第二存儲器區(qū)塊185內(nèi),所以如果形成單個新群組(F1,D3)。但進行此插入導致 圖13A的先前數(shù)據(jù)群組(FO,DO)被分成兩個群組, 一個(F0,D0)在插入之前,且一個(F2,D1) 在插入之后。這是因為每當存在數(shù)據(jù)的邏輯不連續(xù)性時就需要形成新的數(shù)據(jù)群組,所述 不連續(xù)性例如在插入的開頭Fl處且在插入的結尾F2處發(fā)生。群組(F3,D2)是物理地址 D2為第二區(qū)塊185的開頭的結果。群組(F1,D3)和(F3,D2)即使存儲在同一存儲器區(qū)塊中 也是分別保存,因為存儲在所述群組中的數(shù)據(jù)的偏移量中存在不連續(xù)性。具有插入的原 先文件于是在存儲器系統(tǒng)FIT中由數(shù)據(jù)群組索引條目(FO,DO)、 (F1,D3)、 (F2,D1)、 (F3,D2) 以所述次序表示。從圖13A、圖13B和圖13C的實例應注意,可在不使存儲器中的任何 數(shù)據(jù)廢棄的情況下,寫入新的或現(xiàn)存文件的新數(shù)據(jù)。作為圖13C中所說明的將數(shù)據(jù)插入到現(xiàn)存文件中的替代方案,只要數(shù)據(jù)已經(jīng)插入, 主機就可將文件作為單獨文件重寫到存儲器中。接著,存儲器系統(tǒng)可將此單獨文件視為 新的文件。舊的文件接著被主機刪除,且存儲器系統(tǒng)可通過回收舊文件存儲在其中的空 間來作出響應,所述舊文件的數(shù)據(jù)現(xiàn)在是廢棄的。圖13D說明另一實例,其中原先以圖13A中所示方式寫入的數(shù)據(jù)的某一部分被更新。 展示數(shù)據(jù)文件的一部分195被更新。不是用所述更新重寫存儲器系統(tǒng)中的整個文件,而 是將文件的經(jīng)更新部分197附加到先前寫入的數(shù)據(jù)。先前寫入的數(shù)據(jù)的部分199現(xiàn)在是 廢棄的。在更新之后,文件在存儲器系統(tǒng)FIT中由數(shù)據(jù)群組索引條目(FO,DO)、 (F1,D3)、 (F2,D1)、 (F3,D2)以所述次序表示。圖13A的所述單個數(shù)據(jù)群組(FO,DO)再次被分成圖13D 中的片段,在經(jīng)更新部分之前的一個片段、經(jīng)更新部分以及在經(jīng)更新部分之后的一個片 段?;厥沼蓮U棄數(shù)據(jù)占用的空間199是合乎需要的,但優(yōu)選稍后完成此步驟,而不是作 為將文件數(shù)據(jù)寫入到存儲器中的過程的一部分。此回收通常將導致被存儲的特定文件的 數(shù)據(jù)的更少數(shù)目的數(shù)據(jù)群組。在根據(jù)前面的描述內(nèi)容的文件創(chuàng)建或修改之后,優(yōu)選將每個文件的數(shù)據(jù)的偏移量維 持為以正確的邏輯次序連續(xù)。因此,舉例來說,作為將數(shù)據(jù)插入到文件中的操作的一部 分,由主機提供的插入的數(shù)據(jù)的偏移量從緊接在所述插入物之前的偏移量開始是連續(xù)的, 且在所述插入物之后的已經(jīng)在文件中的數(shù)據(jù)遞增所插入數(shù)據(jù)的量。更新現(xiàn)存文件最常見 的是導致現(xiàn)存文件的給定地址范圍內(nèi)的數(shù)據(jù)由類似量的經(jīng)更新數(shù)據(jù)代替,因此文件的其 它數(shù)據(jù)的偏移量通常不需要被代替。將注意,上文相對于圖13所描述的所有數(shù)據(jù)分配和索引功能都由存儲器系統(tǒng)的控制器執(zhí)行。連同適當?shù)拿钜黄?,主機僅傳送正被發(fā)送到存儲器系統(tǒng)的文件ID和文件內(nèi)的 數(shù)據(jù)的偏移量。存儲器系統(tǒng)完成剩余的工作。以剛才描述的方式直接將文件數(shù)據(jù)從主機寫入到快閃存儲器的優(yōu)勢在于這樣存儲的 數(shù)據(jù)的顆粒度或分辨率可維持成與主機的相同。舉例來說,如果主機應用程序?qū)懭刖哂?1字節(jié)顆粒度的文件數(shù)據(jù),那么所述數(shù)據(jù)可也以1字節(jié)顆粒度寫入到快閃存儲器中。接 著以字節(jié)數(shù)目來測量數(shù)據(jù)在個別數(shù)據(jù)群組內(nèi)的量和位置。gP,可在主機應用程序文件內(nèi) 分別尋址的同一數(shù)據(jù)偏移單位在存儲在快閃存儲器中時也可在所述文件內(nèi)分別尋址。接 著,區(qū)塊內(nèi)的同一文件的數(shù)據(jù)群組之間的任何邊界在索引表中被指定為最近字節(jié)或其它 主機偏移量單位。類似地,區(qū)塊內(nèi)的不同文件的數(shù)據(jù)群組之間的邊界以主機偏移量的單 位界定。對于較大區(qū)塊存儲器,本文使用術語"扇區(qū)"以表示ECC與之相關聯(lián)的存儲數(shù)據(jù)的 單位。扇區(qū)也是轉(zhuǎn)移到快閃存儲器和從快閃存儲器轉(zhuǎn)移的數(shù)據(jù)的最小單位。使用"頁" 來表示區(qū)塊內(nèi)的存儲器單元的單位,且"頁"是最小編程單位。使用術語"元頁"來表 示具有元區(qū)塊的完整并行性的頁。元頁是最大編程單位。文件區(qū)塊管理現(xiàn)將描述圖11的文件到區(qū)塊映射功能605的實例。當將來自外部主機或來自內(nèi)部主 機處理,或從存儲器中的某一其它位置復制(作為數(shù)據(jù)回收操作的一部分)的數(shù)據(jù)寫入 存儲器系統(tǒng)時,根據(jù)特定過程選擇用于存儲所述數(shù)據(jù)的目的地區(qū)塊。在此過程中,基于 存儲在區(qū)塊中的文件數(shù)據(jù)的結構,來辨別某些類型的區(qū)塊。接著,存儲在存儲器系統(tǒng)中 的每個文件被注釋為處于若干狀態(tài)中的一者,每個文件狀態(tài)由里面存儲有所述文件的數(shù) 據(jù)的區(qū)塊的數(shù)目和類型來界定。當要為文件寫入數(shù)據(jù)時,其當前狀態(tài)和所允許的從一個 狀態(tài)到另一狀態(tài)的轉(zhuǎn)變被控制以限制含有特定文件的數(shù)據(jù)(且還含有一個或一個以上其 它文件的數(shù)據(jù))的區(qū)塊的數(shù)目。這促進存儲器區(qū)塊的高效利用,并減少了稍后的對在整 個存儲器中維持足夠的經(jīng)擦除區(qū)塊以用于接受新的或經(jīng)復制的數(shù)據(jù)來說必要的回收操作 的頻率。在此實例中辨別的含有文件數(shù)據(jù)的區(qū)塊的類型如下"文件區(qū)塊",其已經(jīng)完全編程,且含有單個文件的有效數(shù)據(jù)。所述區(qū)塊還可含有一 些廢棄數(shù)據(jù)。"編程區(qū)塊",其已經(jīng)部分編程,且含有僅單個文件的有效數(shù)據(jù)。 一些經(jīng)擦除容量保 留在所述區(qū)塊中。所述區(qū)塊還可含有一些廢棄數(shù)據(jù)。"共用區(qū)塊",其已經(jīng)部分編程,且含有兩個或兩個以上文件的有效數(shù)據(jù)。 一些經(jīng)擦 除容量保留。所述區(qū)塊還可含有一些廢棄數(shù)據(jù)。"滿共用區(qū)塊",其已經(jīng)完全編程,且含有兩個或兩個以上文件的有效數(shù)據(jù)。所述區(qū) 塊還可含有一些廢棄數(shù)據(jù)。"滿編程區(qū)塊",其為已經(jīng)變滿的編程區(qū)塊在其含有文件的最新近寫入的數(shù)據(jù)且還具 有一些廢棄數(shù)據(jù),且針對所述文件而存在的偏移地址的范圍可由單個區(qū)塊容納時的轉(zhuǎn)變 表示。如果待針對所述文件寫入的下一數(shù)據(jù)超出單個區(qū)塊可容納的偏移地址范圍,那么 滿編程區(qū)塊接著變成被指定為文件區(qū)塊。滿編程區(qū)塊等效于現(xiàn)存邏輯區(qū)塊地址(LBA) 系統(tǒng)的滿混亂區(qū)塊,因為文件的某些邏輯偏移量多次寫入?yún)^(qū)塊中, 一次是指定有效數(shù)據(jù), 且至少另一次是為了指定廢棄數(shù)據(jù)。另一種類型的區(qū)塊是"經(jīng)擦除區(qū)塊",其中區(qū)塊的總?cè)萘课唇?jīng)編程,且可用于接受數(shù) 據(jù)。當存儲器充滿或幾乎充滿數(shù)據(jù)時,通常通過連續(xù)回收正被使用的區(qū)塊內(nèi)存在的未經(jīng) 使用的容量來維持指定最小數(shù)目的經(jīng)擦除區(qū)塊的集區(qū)。"分形區(qū)塊"是涉及編程區(qū)塊、共用區(qū)塊或滿共用區(qū)塊的統(tǒng)稱術語。文件的分形區(qū) 塊含有所述文件的有效數(shù)據(jù),以及未經(jīng)編程的存儲器容量、其它文件的有效數(shù)據(jù)或兩者。 本文所述的技術的主要目的是通過管理被指定為接收文件的數(shù)據(jù)的活動區(qū)塊的類型來使 存儲器系統(tǒng)中的分形區(qū)塊的數(shù)目減到最小。這減少了保存指定最小數(shù)目的經(jīng)擦除區(qū)塊所 必需的垃圾收集和數(shù)據(jù)合并(區(qū)塊回收操作)的情況。因為內(nèi)部復制數(shù)據(jù)以回收先前編 程的區(qū)塊中的未經(jīng)使用的容量的片段所花費的時間較少,所以數(shù)據(jù)可寫入到存儲器的速 率于是就增加。本文還使用額外術語來共同描述其它類型的區(qū)塊"部分區(qū)塊",其含有一些未經(jīng)編程的容量, 一個或一個以上文件的有效數(shù)據(jù),且可 含有一些廢棄數(shù)據(jù)。編程區(qū)塊和共用區(qū)塊是部分區(qū)塊的實例。"廢棄區(qū)塊"是含有一些廢棄數(shù)據(jù)的文件區(qū)塊或滿共用區(qū)塊。廢棄區(qū)塊不含有任何 經(jīng)擦除容量,且含有有效數(shù)據(jù)和廢棄數(shù)據(jù)兩者。"無效區(qū)塊"不含有有效數(shù)據(jù)。無效區(qū)塊含有至少一些廢棄數(shù)據(jù),且可含有經(jīng)擦除 容量,但不含有任何有效數(shù)據(jù)。圖14A到圖14E說明使用上文所列出的類型的區(qū)塊的一些實例。在圖14A中,文件 A的數(shù)據(jù)具有填滿的區(qū)塊661和663,以及部分填充的第三區(qū)塊665。在此實例的每個區(qū) 塊中,從左向右寫入數(shù)據(jù),首先填充區(qū)塊661,接著填充區(qū)塊663且其后寫入到區(qū)塊665的一部分中。區(qū)塊665的剩余部分是可存儲額外數(shù)據(jù)的未經(jīng)編程的經(jīng)擦除容量。區(qū)塊661 和663是文件區(qū)塊(根據(jù)上文所列出的定義),且區(qū)塊665是編程區(qū)塊。任何新的數(shù)據(jù)將 寫入到區(qū)塊665中,在編程指針P處開始。指針P隨著數(shù)據(jù)被寫入到區(qū)塊而從左向右移 動,以總是指向區(qū)塊中的下一可用存儲位置。此指針為保留未經(jīng)編程的經(jīng)擦除容量的個 別區(qū)塊(不管是當前活動的與否)而保存,使得待寫入到區(qū)塊的任何其它數(shù)據(jù)的物理地 址總是已知的。圖14B的實例展示文件A被存儲在文件區(qū)塊662和滿編程區(qū)塊667中。根據(jù)上文針 對滿編程區(qū)塊給出的定義,區(qū)塊667含有文件A的最新近寫入的數(shù)據(jù)、 一些廢棄數(shù)據(jù)且 沒有未經(jīng)使用的容量。還是根據(jù)所述定義,存儲在兩個區(qū)塊662和667中的文件A的數(shù) 據(jù)的總量等于一個區(qū)塊的存儲容量。在編程指針P所示的區(qū)塊667的結尾處寫入文件A 的最后的數(shù)據(jù)。接收到的文件A的任何進一步數(shù)據(jù)將被編程到另一區(qū)塊中。所述區(qū)塊可 以是區(qū)塊667中的文件A的數(shù)據(jù)被收集到其中的另一區(qū)塊,因為由廢棄數(shù)據(jù)占用的空間 將被回收?;蛘?,可將額外數(shù)據(jù)寫入到完全擦除的區(qū)塊中。在任一種情況下,指針P移 動到新區(qū)塊且位于文件A的額外數(shù)據(jù)的開始位置處。區(qū)塊667于是變成文件區(qū)塊。區(qū)塊 667因此是暫時的,因為其僅在正如圖14B中所示的狀態(tài)的時間內(nèi)存在。就在所述區(qū)塊 完全充滿文件A的數(shù)據(jù)前,所述區(qū)塊是編程區(qū)塊,且文件A的任何新數(shù)據(jù)被寫入之后, 所述區(qū)塊立即變成文件區(qū)塊。圖14C的實例包含區(qū)塊669,其為共用區(qū)塊,因為其含有另一文件B的數(shù)據(jù)以及當 前文件A的數(shù)據(jù),加上一些未經(jīng)編程的容量。在展示有編程指針P的位置開始,在文件 A的結尾處將新數(shù)據(jù)寫入到區(qū)塊669中。區(qū)塊669是文件A的活動區(qū)塊。其還可以是文 件B的活動區(qū)塊,在這種情況下,可在編程指針P處寫入文件A或B中的任一者的額外 數(shù)據(jù)。或者,單獨區(qū)塊(未圖示)可以是文件B的活動區(qū)塊。文件的數(shù)據(jù)可直接寫入到已經(jīng)含有另一文件的數(shù)據(jù)的部分區(qū)塊的經(jīng)擦除容量中,而 不是寫入到經(jīng)擦除區(qū)塊中,以便以此形式較好地利用未經(jīng)編程的容量。這在文件數(shù)據(jù)的 已知數(shù)量小于待寫入的滿區(qū)塊的容量時尤其有用。搜索現(xiàn)存的部分區(qū)塊以找到適合待寫 入的數(shù)據(jù)的已知量的經(jīng)擦除容量的量。將數(shù)據(jù)的頁(或元頁,如果使用元區(qū)塊的話)的 數(shù)目與部分區(qū)塊中未經(jīng)編程的經(jīng)擦除容量的頁的數(shù)目進行比較。當以此方式對編程區(qū)塊 的未經(jīng)使用的經(jīng)擦除空間進行編程時,所述區(qū)塊被轉(zhuǎn)換成共用區(qū)塊。在圖14D中,文件A存儲在文件區(qū)塊661、區(qū)塊671的一部分和區(qū)塊673的一部分 中。區(qū)塊671是滿共用區(qū)塊,因為其充滿兩個文件A和B的數(shù)據(jù)。區(qū)塊673是編程區(qū)塊,與圖14A的區(qū)塊665類似。區(qū)塊673是文件的活動區(qū)塊,且指針P指向額外數(shù)據(jù)將首先 寫入到的區(qū)塊673內(nèi)的未經(jīng)使用的容量的位置。在圖14E的實例中,文件A寫入到滿共用區(qū)塊671和共用區(qū)塊675的一部分中。區(qū) 塊675含有第三文件C的數(shù)據(jù)。指針P指向額外數(shù)據(jù)將寫入到的活動區(qū)塊675的未經(jīng)使 用的部分中的第一位置。盡管圖14A到圖14E的實例展示存儲在多個區(qū)塊中的文件A的數(shù)據(jù),以便說明幾個 不同類型的區(qū)塊,但在許多情況下,文件可足夠小以存儲在更少數(shù)目的區(qū)塊中,甚至單 個區(qū)塊中。本文所述的技術也可應用于此類小文件。而且,較大的文件可占用三個以上 區(qū)塊中的頁。將注意,區(qū)塊665、 667、 669、 671、 673和675是分形區(qū)塊。希望使任何一個文件 的數(shù)據(jù)所占用的分形區(qū)塊的數(shù)目減到最小,因為它們的存在增加了需要回收它們中的未 經(jīng)使用的容量的可能性,且因此不利地影響了系統(tǒng)性能。未經(jīng)使用的經(jīng)擦除容量存在于 部分區(qū)塊665、 669、 673和675中,但將新數(shù)據(jù)從主機直接寫入到此空間可能不是高效 的,除非文件的未寫入數(shù)據(jù)的數(shù)量已知且所述已知量與這些區(qū)塊中的一者的未經(jīng)使用的 容量匹配。最常見的情況是,用于特定文件的來自主機的數(shù)據(jù)的量不是己知的,所以這 些位的容量不容易被填滿。因此,在回收操作期間,數(shù)據(jù)可能需要從另一區(qū)塊移動到未 經(jīng)使用的空間中,以便高效地利用存儲器容量。區(qū)塊669、 671和675含有一個以上文件 的數(shù)據(jù),這意味著當所述文件中的一者被刪除或其存儲在共用區(qū)塊中的數(shù)據(jù)變成廢棄時, 將可能進行數(shù)據(jù)回收以回收由廢棄數(shù)據(jù)占用的區(qū)塊的容量。因此,為了減少耗費時間的數(shù)據(jù)回收操作的數(shù)目,允許特定文件的數(shù)據(jù)在任一時刻 僅存儲在一個、兩個或某一其它數(shù)目的分形區(qū)塊中。在本文所描述的特定實例中,任何 一個文件的數(shù)據(jù)可存儲在兩個或更少(但不會更多)分形區(qū)塊中。這樣限定指定新的活 動區(qū)塊來存儲文件的數(shù)據(jù)的過程。將一組允許的文件狀態(tài)中的一者指派給通過里面存儲 有每個文件的數(shù)據(jù)的區(qū)塊的類型界定的所述文件。當新的活動區(qū)塊需要被指派以用于接收特定文件的數(shù)據(jù)時,例如當現(xiàn)存區(qū)塊變滿時,這樣指定的區(qū)塊的類型取決于文件的狀 態(tài)且(在許多情況下)還取決于其它因素。圖15的表中在本文所述的存儲器操作概念的特定實施方案中,用分形區(qū)塊和里面存 儲有文件的數(shù)據(jù)的滿編程區(qū)塊的類型和組合,來給出十個允許的文件狀態(tài)0到9的定義。 允許的文件狀態(tài)中的每一者允許數(shù)據(jù)存儲在不多于兩個的分形區(qū)塊或僅一個滿編程區(qū)塊 中。可與文件相關聯(lián)的文件區(qū)塊的數(shù)目沒有限制。這些文件狀態(tài)用于在文件數(shù)據(jù)由存儲器從主機接收時且在數(shù)據(jù)在回收操作期間重新定位在存儲器內(nèi)時,為所述文件數(shù)據(jù)的存 儲選擇活動區(qū)塊。在文件索引表(FIT) 613 (圖ll)中(例如在所述文件的FIT記錄的 標頭中)監(jiān)視并記錄存儲在存儲器系統(tǒng)中的每個文件的狀態(tài),以及其它信息。只要狀態(tài) 轉(zhuǎn)變發(fā)生,F(xiàn)IT條目就更新以記錄新的文件狀態(tài)。圖15中所界定的文件狀態(tài)0到9之間的所引起的主要轉(zhuǎn)變由圖16的狀態(tài)圖說明, 且在圖17的表中描述。這三個圖提供存儲器系統(tǒng)的優(yōu)選操作的細節(jié),且被相信足以獨立 地完成這項工作。然而,現(xiàn)在將另外描述此操作的某些方面。如圖15的表中所示,指定文件處于狀態(tài)0,因為沒有數(shù)據(jù)存儲在分形區(qū)塊中。僅另 一類型的區(qū)塊是文件區(qū)塊,所以所述文件具有僅寫入到一個或一個以上文件區(qū)塊的數(shù)據(jù), 這最可能是臨時情況,因為數(shù)據(jù)的量與區(qū)塊容量之間需要精確性,或者所述文件不具有 存儲在任何區(qū)塊中的數(shù)據(jù)。后一種情況在存儲器系統(tǒng)第一次接收到新文件的信息但尚未 寫入所述文件的任何數(shù)據(jù)時發(fā)生。在任一種情況下,活動區(qū)塊需要被指定以接收數(shù)據(jù)。 當具有未知長度的數(shù)據(jù)從主機被提供時,經(jīng)擦除區(qū)塊被指定為活動區(qū)塊。 一旦數(shù)據(jù)寫入 到所述經(jīng)擦除區(qū)塊中,文件就從狀態(tài)0轉(zhuǎn)變到狀態(tài)2 (見圖16),因為此區(qū)塊已經(jīng)變成活 動編程區(qū)塊。但當在文件狀態(tài)0下,且從主機接收到的新文件的數(shù)據(jù)具有小于區(qū)塊的存儲容量的 已知長度時,如果一個部分區(qū)塊可用且具有足夠的經(jīng)擦除容量以用于存儲已知量的數(shù)據(jù), 那么將所述部分區(qū)塊指定為活動區(qū)塊。文件那時已經(jīng)從狀態(tài)0轉(zhuǎn)變到狀態(tài)3 (見圖16)。 此部分區(qū)塊可能是編程區(qū)塊或共用區(qū)塊。在已知數(shù)據(jù)長度與可用部分區(qū)塊的剩余存儲容 量之間實現(xiàn)可能的最好配合。如果沒有具有用于已知量的數(shù)據(jù)的足夠容量的部分區(qū)塊, 那么將數(shù)據(jù)寫入到經(jīng)擦除區(qū)塊,從而導致文件改為從狀態(tài)0轉(zhuǎn)變到狀態(tài)2。狀態(tài)2下的文件的特征在于分配編程區(qū)塊來接收所述文件的額外數(shù)據(jù)。但如果所 述文件足夠大,那么所述區(qū)塊最終將變滿,且那么需要指定另一活動區(qū)塊。如果滿區(qū)塊 (現(xiàn)為文件區(qū)塊)不含有廢棄數(shù)據(jù),那么文件返回到狀態(tài)0,其中不指定活動區(qū)塊。接 著將經(jīng)擦除區(qū)塊或部分區(qū)塊指定為新的活動區(qū)塊,視待存儲的額外數(shù)據(jù)的量而定,如上 文所論述。但如果滿區(qū)塊含有廢棄數(shù)據(jù),且文件的最大偏移量小于可由單個區(qū)塊容納的 偏移地址的范圍,那么根據(jù)上文給出的定義,所述區(qū)塊是滿編程區(qū)塊。于是,優(yōu)選的情 況是,通過將區(qū)塊的有效數(shù)據(jù)復制到經(jīng)擦除區(qū)塊來壓縮所述區(qū)塊,且原先區(qū)塊被擦除。 于是所得區(qū)塊含有此有效數(shù)據(jù)和經(jīng)擦除容量,其為部分區(qū)塊。此新的部分區(qū)塊接著成為 活動編程區(qū)塊。文件的狀態(tài)那時已經(jīng)從狀態(tài)2轉(zhuǎn)變到狀態(tài)1,且接著回到狀態(tài)2 (見圖16)。但如果在狀態(tài)1時,接收到偏移地址超過單個區(qū)塊可容納的地址范圍的文件的數(shù)據(jù), 那么滿編程區(qū)塊變成文件區(qū)塊。所述文件那時已經(jīng)轉(zhuǎn)變到狀態(tài)O。作為部分區(qū)塊,當文件處于狀態(tài)2時存在的活動編程區(qū)塊在回收操作期間可被選擇 為來自源區(qū)塊的另一文件的己知量的數(shù)據(jù)的目的地區(qū)塊。編程區(qū)塊的身份保存在部分區(qū) 塊的列表上,其包含所述列表上的區(qū)塊中的每一者中的可用經(jīng)擦除容量。待從源區(qū)塊復 制的數(shù)據(jù)的量配合于列表上的部分區(qū)塊的經(jīng)擦除容量。如果在回收操作期間,將當前文 件的編程區(qū)塊選擇為另一文件的數(shù)據(jù)的目的地區(qū)塊,那么在所述另一文件的數(shù)據(jù)被復制 到其經(jīng)擦除容量中之后,編程區(qū)塊變成當前文件的活動共用區(qū)塊。所述文件那時已經(jīng)從 狀態(tài)2轉(zhuǎn)變到狀態(tài)3 (見圖15和圖16)。另外,當文件處于狀態(tài)2時,存在一種可能性寫入到文件的編程區(qū)塊中的數(shù)據(jù)可 能被復制到作為存儲另一文件的數(shù)據(jù)的部分區(qū)塊的另一區(qū)塊中(作為回收編程區(qū)塊的操 作的一部分)。在這種情形下,回收操作的目的地區(qū)塊變成活動共用區(qū)塊。文件已經(jīng)從狀 態(tài)2轉(zhuǎn)變到狀態(tài)4。文件的進一步數(shù)據(jù)現(xiàn)寫入到所述共用區(qū)塊中,所述共用區(qū)塊為文件 的活動區(qū)塊。當狀態(tài)2下的文件的活動共用區(qū)塊變滿時,其被指定為滿共用區(qū)塊。接著,所述區(qū) 塊包含在最多兩個分形區(qū)塊中,即滿共用區(qū)塊和編程區(qū)塊。由于可能不分配另一個分形 區(qū)塊以接收所述文件的數(shù)據(jù),所以可將所述文件的數(shù)據(jù)從編程區(qū)塊復制到經(jīng)擦除區(qū)塊中, 且此新的區(qū)塊接著被指定為所述文件的活動編程區(qū)塊。此類文件數(shù)據(jù)復制作為文件狀態(tài) 轉(zhuǎn)變的一部分在本文稱為"數(shù)據(jù)轉(zhuǎn)變",且在圖16和圖17中這樣注釋。文件那時已經(jīng)從 狀態(tài)4轉(zhuǎn)變到狀態(tài)8。在狀態(tài)轉(zhuǎn)變可被視為完成之前,任一數(shù)據(jù)轉(zhuǎn)變均作為單個操作完成。這意味著如果 文件需要可將數(shù)據(jù)寫入其中的活動區(qū)塊,那么存儲器不能執(zhí)行其它操作,直到數(shù)據(jù)轉(zhuǎn)變 的數(shù)據(jù)復制部分完成為止。此數(shù)據(jù)復制因此通常不隨時間而與其它存儲器操作交錯。從文件狀態(tài)4轉(zhuǎn)變到狀態(tài)3發(fā)生在其編程區(qū)塊被指定為回收區(qū)塊時。作為回收操作 的一部分,編程區(qū)塊中的文件的數(shù)據(jù)移動到共用區(qū)塊,其后共用區(qū)塊變成所述文件的活 動區(qū)塊。另外, 一旦狀態(tài)4下的文件的活動共用區(qū)塊變滿,那么文件存儲在兩個分形區(qū) 塊中。不能將另一區(qū)塊分配為活動區(qū)塊,直到所述分形區(qū)塊中的一者被去除為止。因此 作為從狀態(tài)4轉(zhuǎn)變到狀態(tài)7的一部分,編程區(qū)塊中的數(shù)據(jù)移動(數(shù)據(jù)轉(zhuǎn)變)到部分區(qū)塊 的經(jīng)擦除容量,從而去除分形編程區(qū)塊。接著,所得共用區(qū)塊變成文件的活動區(qū)塊。當在狀態(tài)3下時,文件的數(shù)據(jù)寫入到活動共用區(qū)塊中。如果文件的數(shù)據(jù)在回收操作期間從活動共用區(qū)塊移動到部分區(qū)塊的經(jīng)擦除容量,那么目的地部分區(qū)塊變成文件的進 一步數(shù)據(jù)寫入到其的活動共用區(qū)塊。文件那時已經(jīng)從狀態(tài)3轉(zhuǎn)變到狀態(tài)6。但如果待從 源編程區(qū)塊移動的數(shù)據(jù)的量不能很好地配合部分區(qū)塊列表上的部分區(qū)塊的容量,那么共 用區(qū)塊中的文件數(shù)據(jù)從所述區(qū)塊移動到經(jīng)擦除區(qū)塊,且所述經(jīng)擦除區(qū)塊變成文件的活動 編程區(qū)塊。文件那時己經(jīng)從狀態(tài)3轉(zhuǎn)變到狀態(tài)2。在此狀態(tài)轉(zhuǎn)變的過程中,活動區(qū)塊的 分配包含進行從原先共用區(qū)塊到新的經(jīng)擦除區(qū)塊的數(shù)據(jù)轉(zhuǎn)變,所述新的經(jīng)擦除區(qū)塊接著 變成文件的活動編程區(qū)塊。文件處于狀態(tài)3下時的另一可能性是文件的數(shù)據(jù)寫入到的活動共用區(qū)塊變滿。文 件那時不具有可寫入進一步數(shù)據(jù)的活動區(qū)塊,且已經(jīng)轉(zhuǎn)變到狀態(tài)5。此狀態(tài)在操作方面 與文件狀態(tài)0的類似之處在于不存在文件的活動區(qū)塊,但不同之處在于當文件處于狀態(tài) 5時,文件的數(shù)據(jù)包含在滿共用區(qū)塊中。當處于狀態(tài)0時,不存在含有文件的數(shù)據(jù)的分 形區(qū)塊。狀態(tài)0和狀態(tài)5兩者通常是臨時狀態(tài), 一寫入文件的額外數(shù)據(jù),就從所述狀態(tài) 發(fā)生轉(zhuǎn)變。當處于狀態(tài)5時,到達其它文件狀態(tài)的可能轉(zhuǎn)變與文件處于狀態(tài)0時的轉(zhuǎn)變類似, 只是當處于狀態(tài)5時,文件的一些數(shù)據(jù)存儲在共用區(qū)塊中,且當處于狀態(tài)O時,情況并 非如此。如果文件的額外數(shù)據(jù)的量是未知的,那么為所述數(shù)據(jù)分配經(jīng)擦除區(qū)塊,從而創(chuàng) 建活動編程區(qū)塊并使文件轉(zhuǎn)變到狀態(tài)8。如果數(shù)據(jù)的量是已知的,那么在可進行良好的 大小配合時,將所述數(shù)據(jù)寫入到部分區(qū)塊的剩余容量中,從而導致部分區(qū)塊變成活動共 用區(qū)塊,且文件從狀態(tài)5轉(zhuǎn)變到狀態(tài)7。文件狀態(tài)8類似于狀態(tài)2,區(qū)別只是當處于狀態(tài) 8時,文件的數(shù)據(jù)存儲在滿共用區(qū)塊中,且當處于文件狀態(tài)2時,不存在此區(qū)塊。文件 狀態(tài)7類似地與文件狀態(tài)3有關。當處于文件狀態(tài)6且活動共用區(qū)塊充滿數(shù)據(jù)時,那么將文件存儲在滿共用區(qū)塊和共 用區(qū)塊中。由于此實施例中兩個分形區(qū)塊的限制已經(jīng)達到,所以不能將另一區(qū)塊分配為 編程區(qū)塊或某一其它分形區(qū)塊。因此,需要發(fā)生數(shù)據(jù)轉(zhuǎn)變。來自共用區(qū)塊中的一者的文 件的數(shù)據(jù)移動到部分區(qū)塊中(文件轉(zhuǎn)變到狀態(tài)7),所述區(qū)塊接著變成文件的活動共用區(qū) 塊,或者如果所述數(shù)據(jù)不能與部分區(qū)塊的經(jīng)擦除容量合適地配合,那么數(shù)據(jù)移動到經(jīng)擦 除區(qū)塊中(文件轉(zhuǎn)變到狀態(tài)8)。當處于文件狀態(tài)7時,活動共用區(qū)塊可能變滿。接著文件存儲在兩個滿共用區(qū)塊中, 轉(zhuǎn)變到狀態(tài)9。同樣當文件處于狀態(tài)7時,可將共用區(qū)塊指定為回收區(qū)塊,所以文件的數(shù)據(jù)接著需要重新定位。接著發(fā)生數(shù)據(jù)轉(zhuǎn)變。如果文件的數(shù)據(jù)從共用區(qū)塊移動到經(jīng)擦除區(qū)塊,所述 經(jīng)擦除區(qū)塊其后變成活動編程區(qū)塊,那么到達文件狀態(tài)8的轉(zhuǎn)變已經(jīng)發(fā)生。如果文件的 數(shù)據(jù)改為移動到部分區(qū)塊中,那么部分區(qū)塊接著變成共用區(qū)塊,且文件狀態(tài)保持7。文件狀態(tài)9是穩(wěn)定狀態(tài),因為文件可保持具有兩個滿共用區(qū)塊持續(xù)一段時間,在這 段時間期間,沒有額外數(shù)據(jù)寫入到文件。但當文件處于所述狀態(tài)時,不指定任何活動區(qū) 塊。由于存在兩個分形區(qū)塊的限制,因此必需在額外數(shù)據(jù)可寫入到文件之前作出數(shù)據(jù)轉(zhuǎn) 變。在一種情況下,兩個滿共用區(qū)塊中的一者中的文件的所有數(shù)據(jù)可移動到經(jīng)擦除區(qū)塊, 且此區(qū)塊接著變成用于寫入文件的新數(shù)據(jù)的活動編程區(qū)塊。文件那時已經(jīng)從狀態(tài)9轉(zhuǎn)變 到狀態(tài)8。但如果所述兩個滿共用區(qū)塊中的一者中的文件的數(shù)據(jù)的量加上文件的額外數(shù) 據(jù)的總和小于區(qū)塊的容量,那么在部分區(qū)塊中尋找足夠的經(jīng)擦除空間。如果找到,那么 來自所述滿共用區(qū)塊中的一者的文件的數(shù)據(jù)移動到所述部分區(qū)塊中,且所述部分區(qū)塊接 著變成用于寫入文件的額外數(shù)據(jù)的活動共用區(qū)塊。這導致從狀態(tài)9到狀態(tài)7的轉(zhuǎn)變。當處于文件狀態(tài)8時,文件的數(shù)據(jù)寫入到活動編程區(qū)塊,而文件的其它數(shù)據(jù)保持存 儲在滿共用區(qū)塊中。當編程區(qū)塊變滿時,其變成文件區(qū)塊,且不再有文件的活動區(qū)塊。 狀態(tài)8接著轉(zhuǎn)變到狀態(tài)5,其中進一步文件轉(zhuǎn)變將經(jīng)擦除區(qū)塊或部分區(qū)塊分配為新的活 動區(qū)塊,如上文所述。但當處于狀態(tài)8且文件的活動編程區(qū)塊被選為回收操作的目的地區(qū)塊時,文件狀態(tài) 直接轉(zhuǎn)變到狀態(tài)7(在第一種情況下)。這創(chuàng)建正在活動以接收文件的新數(shù)據(jù)的共用區(qū)塊。 或者,如果當處于狀態(tài)8時,文件的活動編程區(qū)塊被指定為回收操作的源區(qū)塊,那么文 件的數(shù)據(jù)移動到部分區(qū)塊中,所述部分區(qū)塊接著變成用于寫入文件的額外數(shù)據(jù)的活動共 用區(qū)塊。文件狀態(tài)也已經(jīng)從狀態(tài)8轉(zhuǎn)變到狀態(tài)7 (在第二種情況下)。除了圖16和圖17中所說明的初級文件狀態(tài)轉(zhuǎn)變之外,還發(fā)生一組次級文件轉(zhuǎn)變。 圖18和圖19中展示這些轉(zhuǎn)變。當存儲在含有所關心的當前文件的數(shù)據(jù)的分形區(qū)塊中的 一個文件的所有數(shù)據(jù)都變成廢棄時,所述當前文件的這些次級轉(zhuǎn)變發(fā)生。所述廢棄數(shù)據(jù) 可以是當前文件的或某一其它文件的。由于文件由主機刪除、先前針對文件寫入的數(shù)據(jù) 由主機更新或文件的數(shù)據(jù)在回收操作期間被重新定位的緣故,數(shù)據(jù)可能變成廢棄。舉例 來說,在文件被更新的過程中,存儲在共用區(qū)塊中的文件的所有數(shù)據(jù)在都由寫入到另一 區(qū)塊中的新數(shù)據(jù)更新時變得廢棄。在回收操作的實例中,如果共用區(qū)塊中的文件的數(shù)據(jù) (其不屬于所關心的當前文件)被復制到另一區(qū)塊中,那么其使共用區(qū)塊中的另一文件的數(shù)據(jù)廢棄。在這些情況下,使數(shù)據(jù)變得廢棄導致里面存儲有廢棄數(shù)據(jù)的區(qū)塊的類型改變,從而 導致文件的狀態(tài)改變。當文件的數(shù)據(jù)需要新的活動區(qū)塊時,用相對于圖16和圖17所述 的方式但基于新的文件狀態(tài)來對其進行選擇。圖18的轉(zhuǎn)變和圖19中對發(fā)生的特定轉(zhuǎn)變的識別提供對所述轉(zhuǎn)變的全面描述。將注 意,這些轉(zhuǎn)變趨向于減少含有文件的數(shù)據(jù)的分形區(qū)塊的數(shù)目,因此簡化文件狀態(tài)。這些 轉(zhuǎn)變趨向于致使文件的狀態(tài)向不具有分形區(qū)塊的狀態(tài)O移動。文件狀態(tài)的信息用于確定在待針對文件而編程數(shù)據(jù)且當前針對所述文件不存在活動 區(qū)塊時被分配為所述文件的活動區(qū)塊的區(qū)塊的類型。圖20的表在右邊的列中總結了在中 間列中所陳述的條件下,處于狀態(tài)0到9中的任何一者的文件的活動區(qū)塊的分配。以所 示次序選擇區(qū)塊的類型。通過"最配合部分區(qū)塊"表示具有已知量的數(shù)據(jù)可高效地利用 的經(jīng)擦除容量的量的部分區(qū)塊。如果不存在合適的部分區(qū)塊,那么最常見的是選擇經(jīng)擦 除區(qū)塊。但如果不能針對處于狀態(tài)2或狀態(tài)3中的任一者的文件識別最配合部分區(qū)塊, 那么分配"最大部分區(qū)塊",其為不具有足夠的經(jīng)擦除容量來保存待寫入的整個量的數(shù)據(jù) 的區(qū)塊,但其是可保存最大量的所述數(shù)據(jù)的區(qū)塊。所述文件接著改變其狀態(tài),且新的狀 態(tài)控制區(qū)塊的選擇以接收不配合到最大部分區(qū)塊中的剩余量的數(shù)據(jù)。但如果由于數(shù)據(jù)的 量和部分區(qū)塊中的可用容量的緣故,使用最大部分區(qū)塊使數(shù)據(jù)可能將在兩個以上區(qū)塊上 展開,那么將經(jīng)擦除區(qū)塊分配為活動區(qū)塊。在圖2中所示的示范性存儲器系統(tǒng)中,上文所述的操作可由控制器11的處理器27 通過執(zhí)行存儲的固件來實行。回收區(qū)塊容量如上文所述,區(qū)塊管理的一部分包含回收區(qū)塊中的未經(jīng)使用的容量以用于存儲新的 數(shù)據(jù)。當存儲在存儲器系統(tǒng)中的數(shù)據(jù)的量遠小于其容量時,這沒有特別的關系,但存儲 器系統(tǒng)優(yōu)選被設計成如同其充滿數(shù)據(jù)那樣操作。這意味著,對于僅含有廢棄數(shù)據(jù)的區(qū)塊 以及含有有效數(shù)據(jù)但也具有一些廢棄數(shù)據(jù)和/或未經(jīng)寫入的經(jīng)擦除頁的其它區(qū)塊,可用回收此未經(jīng)使用的容量的方式對其進行處理。目的是為了盡可能完全地利用存儲器系統(tǒng)的 存儲容量,而同時使對系統(tǒng)的性能的不利影響減到最小。在圖11的總體系統(tǒng)操作圖中, 區(qū)塊的回收被注釋為617。將指定用于回收操作的區(qū)塊(源區(qū)塊)中的任何有效數(shù)據(jù)復制到具有足夠經(jīng)擦除容 量以存儲所述有效數(shù)據(jù)的一個或一個以上區(qū)塊(目的地區(qū)塊)中。根據(jù)上文所述的區(qū)塊 管理技術來選擇目的地區(qū)塊。將存儲在源區(qū)塊中的每個文件的數(shù)據(jù)復制到基于文件的狀態(tài)和其它因素而選擇的一種類型的區(qū)塊,如上文所述。圖21A到圖21D中給出作為回收 操作的一部分的不同類型的文件之間的數(shù)據(jù)復制的實例。在圖21A中,作為實例,說明對兩個部分區(qū)塊681和683的回收操作。區(qū)塊681是 里面存儲有文件A的有效數(shù)據(jù)同時還含有未存儲有數(shù)據(jù)的經(jīng)擦除容量的編程區(qū)塊。視文 件A的狀態(tài)而定, 一個可能的回收操作是將區(qū)塊681的文件A的數(shù)據(jù)復制到已經(jīng)包含不 同文件B的數(shù)據(jù)的另一部分區(qū)塊685的可用經(jīng)擦除容量中,因此使其成為共用區(qū)塊。接 著,區(qū)塊681中的數(shù)據(jù)群組不再在FIT中參考到,且將所述區(qū)塊注釋為廢棄。當存儲在 區(qū)塊681中時,文件A具有狀態(tài)2、 4或8 (見圖15)中的包含編程區(qū)塊的一者。數(shù)據(jù)接 著可移動到另一分形區(qū)塊,而所述文件保持寫入到最多兩個分形區(qū)塊。在復制到區(qū)塊685 之后,文件A已經(jīng)轉(zhuǎn)變到狀態(tài)3、 4、 6或7中的包含存儲在共用區(qū)塊中的文件的數(shù)據(jù)的 一者,這視里面存儲有文件的其他數(shù)據(jù)的區(qū)塊的類型而定。圖21A的區(qū)塊683是通過將其存儲的文件C和D的數(shù)據(jù)復制到含有文件E的數(shù)據(jù)的 編程區(qū)塊687 (其于是變成共用區(qū)塊)的經(jīng)擦除容量中而回收的共用區(qū)塊。區(qū)塊683中 的文件C和D的數(shù)據(jù)接著廢棄,所述區(qū)塊本身也廢棄。文件C和D中的每一者的狀態(tài)未 改變,因為數(shù)據(jù)已經(jīng)從一個共用區(qū)塊移動到另一個共用區(qū)塊。然而,文件E的狀態(tài)已經(jīng) 從2改變到3,或從8改變到7?;蛘?,文件C和D中的每一者的數(shù)據(jù)可從不同區(qū)塊向 彼此移動,且無需必然被復制到共用區(qū)塊的可用空間。所述文件的狀態(tài)接著可能轉(zhuǎn)變到 其它狀態(tài)。圖21B中說明對示范性區(qū)塊689和691的回收操作。這些區(qū)塊中的每一者是廢棄區(qū) 塊,因為其充滿數(shù)據(jù)(有效的和廢棄的)。區(qū)塊689是含有文件F的數(shù)據(jù)的文件區(qū)塊,其 一部分是廢棄的,且其余部分是有效的。這可能(例如)在文件F的更新期間發(fā)生,其 中在具有與文件的現(xiàn)存數(shù)據(jù)相同的邏輯偏移量的文件結尾處物理地寫入新數(shù)據(jù),且所述現(xiàn)存數(shù)據(jù)接著變成廢棄。在此實例中,將文件F的數(shù)據(jù)復制到含有文件G的數(shù)據(jù)的編程 區(qū)塊693的經(jīng)擦除容量中,導致區(qū)塊693的類型改變成共用區(qū)塊?;蛘?,文件F的有效 數(shù)據(jù)可寫入到經(jīng)擦除區(qū)塊,這接著將導致所述區(qū)塊成為編程區(qū)塊。圖21B的區(qū)塊691是含有文件H的無效數(shù)據(jù)和文件I的有效數(shù)據(jù)的滿共用區(qū)塊。在 此實例中,文件I的有效數(shù)據(jù)從區(qū)塊691復制到經(jīng)擦除區(qū)塊695。區(qū)塊695接著變成編程 區(qū)塊?;蛘撸绻烧业搅己门浜希敲次募蘒的數(shù)據(jù)可寫入到含有另一文件的數(shù)據(jù)的 部分區(qū)塊。目的地區(qū)塊將視回收操作時文件I的狀態(tài)而定。由于圖21A和圖21B中所示的回收操作的四個特定實例中的每一者,存儲在兩個部分區(qū)塊中的數(shù)據(jù)組合到一個區(qū)塊中,從而使所述兩個區(qū)塊中的另一個區(qū)塊僅具有廢棄數(shù) 據(jù)。它們于是為無效區(qū)塊。如圖21C中所說明,接著通過擦除所述區(qū)塊來回收原先區(qū)塊 681、 683、 689和691中的每一者的整個空間。經(jīng)擦除區(qū)塊是回收無效區(qū)塊的結果。圖21D展示里面存儲有文件J的數(shù)據(jù)的文件區(qū)塊697的實例。當文件J被主機刪除 時,區(qū)塊697中且可能還在其它區(qū)塊中的文件J的數(shù)據(jù)變得廢棄。區(qū)塊697接著變成無 效?;厥諢o效區(qū)塊為系統(tǒng)經(jīng)擦除區(qū)塊集區(qū)提供經(jīng)擦除區(qū)塊。從存儲器中刪除文件通常還導致一個或一個以上分形區(qū)塊(例如共用區(qū)塊或滿共用 區(qū)塊)中的文件的數(shù)據(jù)變成廢棄。接著,所述區(qū)塊經(jīng)受回收操作,因為另一文件的剩余 有效數(shù)據(jù)將小于區(qū)塊的存儲容量,且可能是較小的量。圖22的流程圖概括地展示回收操作。如步驟701所指示,視特定實施例而定,針對 部分、廢棄和無效區(qū)塊保存一個或一個以上列表??蓪⑺隽斜肀3譃閰^(qū)塊列表615 (圖 11)的一部分。根據(jù)一種存儲器操作技術,在啟動存儲器系統(tǒng)時(例如當?shù)谝淮问┘庸?率時)建立此區(qū)塊列表。此列表可包含一次啟用一個回收區(qū)塊的選擇的區(qū)塊的其它信息, 例如每個區(qū)塊中的有效數(shù)據(jù)的量和每個區(qū)塊中的經(jīng)擦除存儲器的量。通常用所述區(qū)塊的 頁或元頁(如果使用元區(qū)塊的話)的數(shù)目來測量這些數(shù)量。優(yōu)選的替代技術是將這些列 表保存在非易失性存儲器中,并且只要其狀態(tài)改變就添加或更新所述列表中的區(qū)塊的條 目。通過此技術,就沒有必要在初始化存儲器系統(tǒng)時掃描區(qū)塊并建立列表。作為在列表 上保存所有部分、廢棄和無效區(qū)塊的替代方案,僅包含具有在某個設置的閾值量之下的 較小量的有效數(shù)據(jù)的那些區(qū)塊,因為選定回收區(qū)塊的一個特征在于其具有較少或不具 有需要被復制的有效數(shù)據(jù)。許多回收操作中必需的將數(shù)據(jù)從一個區(qū)塊復制到另一區(qū)塊要 花費相當量的時間,所以通常首先對具有較少量的待復制數(shù)據(jù)的那些區(qū)塊執(zhí)行這個復制 操作。此類區(qū)塊的列表隨著數(shù)據(jù)被寫入、更新、移動、刪除等等而不斷地改變。導致區(qū)塊 將其類型改變成部分、廢棄和無效且從部分、廢棄和無效改變的變化導致圖22的步驟 701所保存的列表改變。個別地存儲在此類區(qū)塊中的有效數(shù)據(jù)的量的變化和經(jīng)擦除容量 的量的變化也在區(qū)塊列表615 (圖ll)中注釋。在步驟703中,優(yōu)選從經(jīng)更新列表上的區(qū)塊中識別出單個回收區(qū)塊以作為按順序下 一個要回收的區(qū)塊。如果是部分或廢棄區(qū)塊,那么其為待復制到被稱為目的地區(qū)塊的另 一區(qū)塊中的有效數(shù)據(jù)的來源。下文描述幾種可用于選擇源區(qū)塊的特定技術。下一步驟705接著考慮到需要響應于主機的命令而執(zhí)行的存儲器操作,而確定當前執(zhí)行回收操作是否合適。如果主機已經(jīng)向存儲器系統(tǒng)發(fā)送了閑置命令,或指示將存在主 機不會期望存儲器系統(tǒng)執(zhí)行特定操作的某一時間段的某類似物,那么存儲器系統(tǒng)在前臺 隨意實行額外開銷操作,包含回收操作。即使存儲器系統(tǒng)忙于響應于主機命令而將數(shù)據(jù) 寫入到存儲器或從存儲器讀取數(shù)據(jù),回收操作(尤其是其數(shù)據(jù)復制)也可與數(shù)據(jù)寫入和 讀取操作交錯進行。2005年10月25日申請的Alan Sinclair的第11/259,423號和2005 年12月19日申請的Alan Bennett等人的第11/312,985號美國專利申請案中描述此類交 錯。如果步驟705確定可實行回收操作,那么過程視所識別的回收區(qū)塊是否含有有效數(shù) 據(jù)而不同,且如果含有,那么視其是否含有一個以上文件的有效數(shù)據(jù)而不同。如果是部 分區(qū)塊或廢棄區(qū)塊,那么根據(jù)定義其將含有有效數(shù)據(jù),且如果是共用區(qū)塊或滿共用區(qū)塊, 那么其將含有兩個或兩個以上文件的有效數(shù)據(jù)。步驟707確定回收區(qū)塊中是否存在有效 數(shù)據(jù)。如果存在必須移動的有效數(shù)據(jù),那么在下一步驟709中,識別單個文件的數(shù)據(jù), 且識別目的地區(qū)塊以接收所述數(shù)據(jù)。通過上文相對于圖15到圖17所述的過程來識別目 的地區(qū)塊,以便保存存儲在兩個或更少分形區(qū)塊(在此實例中)中的有效數(shù)據(jù)所屬的文 件的所有數(shù)據(jù)。接著開始將一個文件的有效數(shù)據(jù)從源回收區(qū)塊復制到目的地區(qū)塊,如步 驟711所指示。在復制這些數(shù)據(jù)之后,過程返回到步驟707以確定另一文件的數(shù)據(jù)是否 保留。如果是,那么針對額外數(shù)據(jù)重復步驟709和711的過程。獨立于對不同文件的數(shù) 據(jù)的早先選擇而選擇目的地區(qū)塊。這繼續(xù)進行,直到在步驟707中確定源區(qū)塊中不再有 待移動的數(shù)據(jù)為止,在所述情況下,源區(qū)塊可通過步驟713擦除。接著,可將此區(qū)塊放 置到經(jīng)擦除區(qū)塊集區(qū)中,以用于存儲新的數(shù)據(jù)。返回到步驟707,如果源區(qū)塊不含有有效數(shù)據(jù)(這是針對無效區(qū)塊的情況),那么沒 有待移動的有效數(shù)據(jù)。源區(qū)塊僅需要被擦除。因此,在這種情況下,過程繞過步驟709 和711,如圖22中所示。在圖22的過程的第一實施例中,步驟701保存部分、廢棄和無效區(qū)塊的單個列表。 在列表上的各個條目中包含區(qū)塊中的有效數(shù)據(jù)的量。在步驟703中,從所述列表選擇的 作為回收區(qū)塊的區(qū)塊是具有最少有效數(shù)據(jù)的區(qū)塊。如果列表上存在一個無效區(qū)塊,那么 將首先選擇所述區(qū)塊,因為其不具有有效數(shù)據(jù)。如果列表上存在許多無效區(qū)塊,那么選 擇已經(jīng)在那里最長時間的一個區(qū)塊。如果列表上沒有無效區(qū)塊,那么將具有最少量的有 效數(shù)據(jù)的區(qū)塊選擇為回收區(qū)塊。通過選擇列表上的所有區(qū)塊中的具有最少量的有效數(shù)據(jù) 的區(qū)塊,回收操作于是與要將更多有效數(shù)據(jù)從一個區(qū)塊復制到另一個區(qū)塊時相比花費更少的時間。因此,存儲器系統(tǒng)的其它操作(例如將數(shù)據(jù)寫入到存儲器和從存儲器讀取數(shù) 據(jù)的速度)保持在高速率。在較少以存儲器性能為代價的情況下獲得新擦除的區(qū)塊。圖22的用于基于單個列表上的分形區(qū)塊中的有效數(shù)據(jù)的量而選擇源區(qū)塊的過程的 此第一實施例具有實施起來相對較簡單的優(yōu)勢。然而,可通過還考慮部分區(qū)塊的值來改 進此過程。部分區(qū)塊具有可將數(shù)據(jù)寫入其中的經(jīng)擦除容量,而廢棄區(qū)塊和無效區(qū)塊都不 含有任何經(jīng)擦除容量。在廢棄區(qū)塊可用于存儲新數(shù)據(jù)之前,任何有效數(shù)據(jù)必須從它們中 移出并移動到另一區(qū)塊中,使得它們可接著被擦除,且可用于存儲新的數(shù)據(jù)。但部分區(qū) 塊在不必忍受回收操作的額外開銷的情況下具有可將數(shù)據(jù)寫入其中的經(jīng)擦除容量。舉例 來說,當部分區(qū)塊還含有大量可將數(shù)據(jù)寫入到其中的經(jīng)擦除容量時,只因為所述部分區(qū) 塊含有最少量的有效數(shù)據(jù)就將其回收可能不是有益的。因此,在圖22的過程的其它實施例中,基于存在于部分區(qū)塊中的有效數(shù)據(jù)的量和經(jīng) 擦除容量的量兩者,將部分區(qū)塊選擇為回收源區(qū)塊的候選區(qū)塊。圖23中展示部分區(qū)塊中 的數(shù)據(jù)的成分。區(qū)塊(可能是元區(qū)塊)具有某一數(shù)目的一個或一個以上含有有效數(shù)據(jù)的 頁(可能是元頁)和一個或一個以上被擦除且可將數(shù)據(jù)寫入到其中的其它頁。部分區(qū)塊 還可含有一個或一個以上含有廢棄數(shù)據(jù)的其它頁,如圖23的實例中所示。在圖22的過程的這些其它實施例中,部分區(qū)塊優(yōu)選由步驟701保存在與廢棄和無效 區(qū)塊的列表獨立的列表中。當部分區(qū)塊具有較少經(jīng)擦除容量(這意味著它們在其目前狀 態(tài)下不是非常有用)和較少量的需要移動的有效數(shù)據(jù)時,所述部分區(qū)塊朝其列表的頂部移動,以用于回收操作。此類區(qū)塊將主要含有廢棄數(shù)據(jù)。相反地,具有大量經(jīng)擦除容量 (意味著它們潛在地可用于存儲數(shù)據(jù))和大量待移動有效數(shù)據(jù)的部分區(qū)塊將最不可能被 識別為回收區(qū)塊的候選區(qū)塊?;厥站哂薪?jīng)擦除容量的部分區(qū)塊不會向存儲器系統(tǒng)添加與 回收廢棄區(qū)塊相同量的存儲容量。無效區(qū)塊對回收來說顯然是最有吸引力的區(qū)塊,因為 它們不具有有益的經(jīng)擦除容量,且不具有需要被復制的有效數(shù)據(jù)。在圖22的回收區(qū)塊識別步驟703的第二實施例中,步驟701保存三個單獨列表,一 個列表用于部分、廢棄和無效區(qū)塊中的一者。如果存在無效區(qū)塊,那么從無效區(qū)塊列表 中選擇回收區(qū)塊,直到所述列表上不再有區(qū)塊為止。列出無效區(qū)塊沒有特定的次序,只 是可能是以先入先出(FIFO)的次序,使得已經(jīng)在列表上最長時間的無效區(qū)塊最先被選 擇。接下來,如果不存在無效區(qū)塊,那么從廢棄區(qū)塊列表中選擇所述列表上的所有區(qū)塊 中具有最少量的有效數(shù)據(jù)的區(qū)塊。如果無效或廢棄列表上都沒有區(qū)塊,那么在步驟703中,將部分區(qū)塊列表上的區(qū)塊選為回收區(qū)塊。盡管可將部分區(qū)塊選為具有最少量有效數(shù)據(jù)的區(qū)塊,但優(yōu)選以認識到其 經(jīng)擦除容量的益處的方式對部分區(qū)塊進行分級。為此目的,可針對每個部分區(qū)塊計算"回 收增益",如下回收增益=(S-kE)/V(1)其中S是用區(qū)塊的存儲頁的數(shù)據(jù)的總數(shù)表示的區(qū)塊大小,E是可將數(shù)據(jù)寫入到其中 的經(jīng)擦除容量的頁的數(shù)目,且V是含有需要移動到另一區(qū)塊的有效數(shù)據(jù)的頁的數(shù)目。包 含常數(shù)k以對區(qū)塊的經(jīng)擦除容量的正效應進行加權,但可設置為l。隨著kE的值增加, 所得回收增益降低。隨著V的值上升,回收增益也下降。在步驟703中選擇具有最高回 收增益值的部分區(qū)塊作為回收區(qū)塊。可替代地使用其它數(shù)學表達式來用E和V界定回收 增益,其平衡了含有有效數(shù)據(jù)對系統(tǒng)操作的不利與具有經(jīng)擦除容量的益處。每當區(qū)塊有 變化時,例如每當將數(shù)據(jù)寫入到其經(jīng)擦除容量中時,可計算回收增益,并將其存儲為由 文件目錄或FIT保存的信息的一部分。圖25中說明此第二實施例,其展示從單獨的部分、廢棄和無效區(qū)塊列表(如通過圖 22的步驟701保存)選擇回收區(qū)塊(圖22的步驟703)的方法。步驟721首先確定無效 區(qū)塊列表上是否列出了區(qū)塊。如果存在多個此類區(qū)塊,那么通過步驟723將已經(jīng)在所述 列表上最長時間的區(qū)塊選擇為回收區(qū)塊。如果無效區(qū)塊列表上不存在區(qū)塊,那么通過步 驟725確定廢棄區(qū)塊列表上是否存在條目。如果是,那么在廢棄區(qū)塊列表上有一個以上 區(qū)塊的情況下,通過步驟727選擇具有最少量的有效數(shù)據(jù)的區(qū)塊作為回收區(qū)塊。如果步 驟725確定廢棄區(qū)塊列表上沒有條目,那么在步驟729中查閱部分區(qū)塊列表。當部分區(qū) 塊列表上存在一個以上區(qū)塊時,選擇具有最高回收增益的一個區(qū)塊作為回收區(qū)塊?;厥?增益(例如)通過使用上文的等式(1)來考慮區(qū)塊中的有效數(shù)據(jù)的量和經(jīng)擦除容量。如 果部分區(qū)塊列表上無任何內(nèi)容,那么通過返回到步驟721使過程重復,直到所述列表中 的一者上出現(xiàn)區(qū)塊為止。在選擇回收區(qū)塊之后,處理進行到圖22的步驟705。圖24的流程圖展示第三實施例。圖22的步驟703的執(zhí)行也由步驟741開始,所述 步驟741在通過圖22的步驟701保存的無效區(qū)塊列表上尋找條目。如果無效區(qū)塊列表上 存在一個以上條目,那么通過圖25的步驟743將時間最長的區(qū)塊選為回收區(qū)塊。如果無 效區(qū)塊列表上沒有條目,那么下一步驟745確定廢棄區(qū)塊列表上是否存在條目。如果是, 那么隨后的步驟與圖24的實施例的不同之處在于如果部分區(qū)塊列表上也存在至少一個條目,那么確定最好是從廢棄區(qū)塊列表還是從部分區(qū)塊列表選擇回收區(qū)塊。步驟747識別廢棄區(qū)塊列表上含有最少量的有效數(shù)據(jù)的區(qū)塊。接著通過步驟749確 定部分區(qū)塊列表上是否存在至少一個區(qū)塊,且如果是,那么在步驟751中識別具有最少 量的有效數(shù)據(jù)的區(qū)塊。接著,下一步驟753在從廢棄區(qū)塊列表識別的一個區(qū)塊與在部分 區(qū)塊列表上識別的一個區(qū)塊之間作出選擇。為此目的,針對在步驟751中從部分區(qū)塊列 表中識別的區(qū)塊,計算數(shù)量(V + kE), V、 E和k項與上文所使用的相同。將此數(shù)量與步 驟747中從廢棄區(qū)塊列表中識別的區(qū)塊中的有效數(shù)據(jù)的量V進行比較。如果部分區(qū)塊的 (V+kE)數(shù)量大于廢棄區(qū)塊的V,那么在步驟755中,將所述廢棄區(qū)塊選為回收區(qū)塊。但 如果廢棄區(qū)塊的V大于所識別的部分區(qū)塊的(V + kE)數(shù)量,那么在步驟757中將所述部 分區(qū)塊選為回收區(qū)塊。通過在將所識別的部分區(qū)塊的經(jīng)擦除容量數(shù)量kE與僅所識別的廢棄區(qū)塊的有效數(shù) 據(jù)V進行比較之前,將所述kE添加到其有效數(shù)據(jù)V,所述過程偏向于選擇廢棄區(qū)塊。 與所識別的廢棄區(qū)塊具有相同量的有效數(shù)據(jù)的所識別的部分區(qū)塊將保留,因為其仍具有 將數(shù)據(jù)存儲在其經(jīng)擦除容量中的潛在用途。事實上,有效數(shù)據(jù)的量比廢棄區(qū)塊的有效數(shù) 據(jù)的量小kE量的部分區(qū)塊將保留。返回到圖25的步驟745,如果廢棄區(qū)塊列表上沒有條目,那么在步驟759中確定部 分區(qū)塊列表上是否列出了區(qū)塊。如果沒有,那么過程返回到步驟741,以重復直到所述 三個列表中的一者上放置有區(qū)塊為止。如果列出了多個部分區(qū)塊,那么在步驟761中, 選擇具有最少量有效數(shù)據(jù)的區(qū)塊作為回收區(qū)塊。或者,通過使用如第二實施例(圖24)的相對于步驟731描述的回收增益來選擇部分區(qū)塊。第三實施例可替代地僅利用兩個列表。第一列表是含有具有廢棄數(shù)據(jù)且不具有經(jīng)擦 除存儲器容量的區(qū)塊的條目的廢棄區(qū)塊列表。不是使用如圖25中所示的單獨的無效區(qū)塊 列表,而是將無效和廢棄區(qū)塊兩者放置在單個"廢棄"區(qū)塊列表上。所述區(qū)塊可視情況 含有有效數(shù)據(jù)。所述列表中的每個條目具有含有界定與其有關的區(qū)塊中的有效數(shù)據(jù)的量 的值的字段。根據(jù)這些字段中的值來對列表中的條目進行排序。因此,將含有廢棄數(shù)據(jù) 且不含有有效數(shù)據(jù)的區(qū)塊(無效區(qū)塊)在此第一列表的頂部處分組在一起。第三實施例的此替代方案中的第二列表是部分區(qū)塊列表,其含有具有一些經(jīng)擦除存 儲器容量的區(qū)塊的條目。所述區(qū)塊可視情況含有有效數(shù)據(jù)。所述列表中的每個條目具有 含有界定與其有關的區(qū)塊中的有效數(shù)據(jù)的量的值的字段。根據(jù)這些字段中的值對列表中 的條目進行排序??赏ㄟ^圖25的步驟753的技術,從第一或第二列表的頂部(具有最少量的無效數(shù)據(jù)的區(qū)塊)選擇區(qū)塊。圖26的表陳述放置在部分和廢棄區(qū)塊列表上以用于根據(jù)第三實施例的此修改而進 行回收操作的區(qū)塊的類型的細節(jié)。為了放置在部分區(qū)塊列表上,區(qū)塊含有有效數(shù)據(jù)和經(jīng) 擦除容量兩者。區(qū)塊中是否存在任何廢棄數(shù)據(jù)是無關緊要的。為了放置在廢棄區(qū)塊列表 上,區(qū)塊含有廢棄數(shù)據(jù)以及有效數(shù)據(jù)或經(jīng)擦除容量但不是兩者。在圖2中所示的示范性存儲器系統(tǒng)中,可由控制器11的處理器27通過執(zhí)行存儲的 固件來實行上文相對于圖22、圖24和圖25所述的過程??偨Y盡管已經(jīng)相對于本發(fā)明的示范性實施例描述了本發(fā)明的各個方面,但將了解,本發(fā) 明有權在所附權利要求書的整個范圍內(nèi)受到保護。
權利要求
1.一種操作非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有分組成存儲器單元區(qū)塊的數(shù)據(jù)存儲單元,所述區(qū)塊在重新編程之前被擦除,所述方法包括保存包含區(qū)塊的至少一個列表,所述區(qū)塊個別地含有小于所述區(qū)塊的數(shù)據(jù)存儲容量的某一量的有效數(shù)據(jù),基于以下標準從所述至少一個列表中選擇區(qū)塊所述區(qū)塊中的有效數(shù)據(jù)相對于所述至少一個列表上的其它區(qū)塊中的有效數(shù)據(jù)的量的量,將所述有效數(shù)據(jù)從所述選定區(qū)塊復制到另一區(qū)塊中,以及其后擦除所述選定區(qū)塊,借此所述經(jīng)擦除的選定區(qū)塊變成可用于存儲其它數(shù)據(jù)。
2. 根據(jù)權利要求l所述的方法,其中選擇區(qū)塊包含僅基于所述區(qū)塊中的有效數(shù)據(jù)相 對于所述至少一個列表上的其它區(qū)塊中的有效數(shù)據(jù)的量的量,來從所述列表中選擇 所述區(qū)塊。
3. 根據(jù)權利要求l所述的方法,其中選擇區(qū)塊包含從所述至少一個列表中選擇其中 相對于所述列表上的其它區(qū)塊中的有效數(shù)據(jù)的量具有最少量的有效數(shù)據(jù)的區(qū)塊。
4. 根據(jù)權利要求l所述的方法,其中從所述至少一個列表中選擇區(qū)塊另外包含基于 所述區(qū)塊中的經(jīng)擦除存儲容量相對于所述至少一個列表上的其它區(qū)塊中的經(jīng)擦除 存儲容量的量的量,來從所述至少一個列表中選擇所述區(qū)塊。
5. —種操作非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有分組成存儲器單元區(qū)塊 的存儲單元,所述區(qū)塊在重新編程之前被擦除,所述方法包括保存包含區(qū)塊的至少一個列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上廢棄 數(shù)據(jù)或一些經(jīng)擦除的數(shù)據(jù)存儲容量或兩者,通過考慮所述至少一個列表上的所述區(qū)塊的有效數(shù)據(jù)和所述經(jīng)擦除存儲容量的 相對量,來從所述至少一個列表中選擇區(qū)塊,以及將所述有效數(shù)據(jù)從所述選定區(qū)塊復制到另一區(qū)塊中,且其后擦除所述選定區(qū)塊,借此所述經(jīng)擦除區(qū)塊變成可用于存儲其它數(shù)據(jù)。
6. 根據(jù)權利要求5所述的方法,其中從所述至少一個列表中選擇所述區(qū)塊包含權衡 相對于所述至少一個列表上的其它區(qū)塊具有較低量的有效數(shù)據(jù)的選定區(qū)塊的益處 與相對于所述至少一個列表上的其它區(qū)塊具有較高量的經(jīng)擦除存儲容量的選定區(qū) 塊的益處。
7. —種操作非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有分組成存儲器單元區(qū)塊的存儲單元,所述區(qū)塊在重新編程之前被擦除,所述方法包括-保存任何區(qū)塊的第一列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上廢棄數(shù)據(jù),但不具有經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第一列表上是否存在一個或一個以上區(qū)塊,如果是,那么基于所述第一列表上的所述區(qū)塊中的有效數(shù)據(jù)的量,從所述列表中識別第一區(qū)塊,保存任何區(qū)塊的第二列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上一些經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第二列表上是否存在一個或一個以上區(qū)塊,且如果是,那么基于所述列 表上的所述區(qū)塊中的有效數(shù)據(jù)的量和經(jīng)擦除的存儲容量的量兩者,來從所述第二列 表中識別第二區(qū)塊,基于從回收所述區(qū)塊到操作所述存儲器系統(tǒng)的值,選擇所述第一區(qū)塊或第二區(qū) 塊,以及將所述有效數(shù)據(jù)從所述選定區(qū)塊復制到另一區(qū)塊中,以及其后擦除所述選定區(qū)塊,借此所述選定的第一或第二區(qū)塊已經(jīng)被回收作為可用于 存儲其它數(shù)據(jù)的經(jīng)擦除區(qū)塊。
8. —種操作非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有分組成存儲器單元區(qū)塊 的存儲單元,所述區(qū)塊在重新編程之前被擦除,所述方法包括保存包含任何區(qū)塊的第一列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上廢棄 數(shù)據(jù),但不具有經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第一列表上是否存在一個或一個以上區(qū)塊,如果是,那么從所述第一列 表中識別所述列表上的所述區(qū)塊中具有最少量的有效數(shù)據(jù)的第一區(qū)塊,保存包含任何區(qū)塊的第二列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上一些 經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第二列表上是否存在一個或一個以上區(qū)塊,且如果是,那么從所述第二 列表中識別所述列表上的所述區(qū)塊中具有最少量的有效數(shù)據(jù)的第二區(qū)塊,在針對所述第二區(qū)塊中的經(jīng)擦除的數(shù)據(jù)存儲容量的量調(diào)整所述第二區(qū)塊中的有 效數(shù)據(jù)的量之后,基于所述第一或第二區(qū)塊中包含的有效數(shù)據(jù)的量,來選擇所述第 一或第二區(qū)塊,以及將所述有效數(shù)據(jù)從所述選定區(qū)塊復制到另一區(qū)塊中,以及其后擦除所述選定區(qū)塊,借此所述選定的第一或第二區(qū)塊已經(jīng)變成可用于存儲其它數(shù)據(jù)的經(jīng)擦除區(qū)塊。
9. 一種操作非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有分組成存儲器單元區(qū)塊 的存儲單元,所述區(qū)塊在重新編程之前被擦除,所述方法包括基于所述區(qū)塊中的至少一些區(qū)塊的內(nèi)容,選擇用于回收操作的區(qū)塊,以及 其后通過將所述選定區(qū)塊的有效數(shù)據(jù)復制到另一區(qū)塊中且接著擦除所述選定區(qū) 塊,來回收所述選定區(qū)塊。
10. 根據(jù)權利要求9所述的方法,其中選擇用于回收操作的區(qū)塊包含基于所述區(qū)塊中至 少一些個別地包含某一數(shù)量的有效數(shù)據(jù)的區(qū)塊的內(nèi)容來進行所述選擇。
11. 根據(jù)權利要求10所述的方法,其中選擇用于回收操作的區(qū)塊另外包含基于所述 區(qū)塊中至少一些個別地包含所述個別區(qū)塊中剩余的用于存儲數(shù)據(jù)的某一量的經(jīng)擦 除容量的區(qū)塊的內(nèi)容來進行所述選擇。
12. 根據(jù)權利要求11所述的方法,其中選擇用于回收操作的區(qū)塊另外包含基于所述區(qū) 塊中至少一些個別地不包含廢棄數(shù)據(jù)的區(qū)塊的內(nèi)容來進行所述選擇。
13. 根據(jù)權利要求9所述的方法,其中選擇用于回收操作的區(qū)塊包含基于所述區(qū)塊中 至少一些個別地包含所述個別區(qū)塊中剩余的用于存儲數(shù)據(jù)的某一量的經(jīng)擦除容量的區(qū)塊的內(nèi)容來進行所述選擇。
14. 根據(jù)權利要求9所述的方法,其中選擇用于回收操作的區(qū)塊包含基于所述區(qū)塊中 至少一些個別地不包含廢棄數(shù)據(jù)的區(qū)塊的內(nèi)容來進行所述選擇。
15. —種可重新編程的非易失性存儲器系統(tǒng),其包括非易失性存儲器單元區(qū)塊,其特征是在將數(shù)據(jù)重寫到其中之前被擦除,以及 控制器,其在功能上與所述存儲器單元區(qū)塊連接,且所述控制器操作以基于存儲 在所述區(qū)塊中的至少多個區(qū)塊中的有效數(shù)據(jù)的相對量,來選擇存儲容量的一部分未 由有效數(shù)據(jù)占用的區(qū)塊進行回收以用于存儲有效數(shù)據(jù),且接著致使所述選定區(qū)塊的 所述有效數(shù)據(jù)復制到另一區(qū)塊。
16. 根據(jù)權利要求15所述的存儲器系統(tǒng),其中所述控制器進一步操作以從所述存儲器系統(tǒng)區(qū)塊中的至少多個區(qū)塊中選擇含有最少量的有效數(shù)據(jù)的區(qū)塊進行回收。
17. 根據(jù)權利要求15所述的存儲器系統(tǒng),其中所述控制器進一步操作以基于所述區(qū)塊中的至少多個區(qū)塊中個別地剩余的供數(shù)據(jù)存儲在其中的經(jīng)擦除容量的量,來選擇區(qū) 塊進行回收。
18. 根據(jù)權利要求17所述的存儲器系統(tǒng),其中所述控制器進一步操作以從所述區(qū)塊中的至少多個不含有廢棄數(shù)據(jù)的區(qū)塊中選擇區(qū)塊進行回收。
19.一種可編程的非易失性存儲器系統(tǒng),其包括-非易失性存儲器單元陣列,其組織成可同時擦除的存儲器單元區(qū)塊,以及 控制器,其可操作地與所述存儲器陣列連接,所述控制器操作以保存包含任何區(qū)塊的第一列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上廢 棄數(shù)據(jù)但不具有經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第一列表上是否存在一個或一個以上區(qū)塊,如果是,那么從所述第一 列表中識別所述列表上的所述區(qū)塊中具有最少量的有效數(shù)據(jù)的第一區(qū)塊,保存包含任何區(qū)塊的第二列表,所述區(qū)塊個別地含有某一量的有效數(shù)據(jù)加上一 些經(jīng)擦除的數(shù)據(jù)存儲容量,確定所述第二列表上是否存在一個或一個以上區(qū)塊,如果是,那么從所述第二 列表中識別所述列表上的所述區(qū)塊中具有最少量的有效數(shù)據(jù)的第二區(qū)塊,在針對所述第二區(qū)塊中的經(jīng)擦除的數(shù)據(jù)存儲容量的量調(diào)整所述第二區(qū)塊中的 有效數(shù)據(jù)的量之后,基于所述第一或第二區(qū)塊中包含的有效數(shù)據(jù)的量,來選擇所 述第一或第二區(qū)塊,以及將所述有效數(shù)據(jù)從所述選定區(qū)塊復制到另一區(qū)塊中,以及其后擦除所述選定區(qū)塊。
全文摘要
用每個文件的唯一標識和所述文件內(nèi)的數(shù)據(jù)偏移量將主機系統(tǒng)數(shù)據(jù)文件直接寫入到大型擦除區(qū)塊快閃存儲器系統(tǒng),而無需使用所述存儲器的任何中間邏輯地址或虛擬地址空間。通過所述存儲器系統(tǒng)的控制器而不是通過主機將關于所述文件存儲在所述存儲器中的哪個位置的目錄信息保存在所述存儲器系統(tǒng)內(nèi)。選擇一種類型的存儲器區(qū)塊以接收文件的額外數(shù)據(jù),所述類型取決于所述文件的數(shù)據(jù)已經(jīng)被寫入其中的區(qū)塊的類型。通過以含有最少量的有效數(shù)據(jù)的區(qū)塊開始依次選擇區(qū)塊的過程,來選擇含有數(shù)據(jù)的區(qū)塊以用于從其中回收任何未經(jīng)使用的容量。
文檔編號G06F12/02GK101233499SQ200680028318
公開日2008年7月30日 申請日期2006年8月1日 優(yōu)先權日2005年8月3日
發(fā)明者巴里·賴特, 艾倫·韋爾什·辛克萊 申請人:桑迪士克股份有限公司