專利名稱:快閃存儲器中的直接數(shù)據(jù)文件存儲實施技術的制作方法
快閃存儲器中的直接數(shù)據(jù)文件存儲實施技術技術領域本申請案涉及例如半導體快閃存儲器的可重新編程的非易失性存儲器系統(tǒng)的操作, 且更明確地說涉及主機裝置與存儲器之間的接口的管理。本文參考的所有專利、專利申 請案、論文和其它出版物、文獻及內容的全文出于所有目的以引用的方式并入本文中。
技術背景在早代市售快閃存儲器系統(tǒng)中,將存儲器單元的矩形陣列劃分為大量單元群組,每 一單元群組存儲標準磁盤驅動器扇區(qū)的數(shù)據(jù)量,即512字節(jié)。每一群組中通常也包含額 外的數(shù)據(jù)量(例如,16字節(jié))以存儲誤差校正碼(ECC),且可能存儲與用戶數(shù)據(jù)和/或 與其被存儲的存儲器單元群組有關的其它開銷數(shù)據(jù)。每一此類群組中的存儲器單元是可 共用擦除的最小數(shù)目的存儲器單元。也就是說,擦除單位實際上是存儲一個數(shù)據(jù)扇區(qū)和 所包含的任何開銷數(shù)據(jù)的存儲器單元的數(shù)目。第5,602,987和6,426,893號美國專利中描 述了這種類型的存儲器系統(tǒng)的實例??扉W存儲器的一個特性是,需要在用數(shù)據(jù)對存儲器 單元進行重新編程之前擦除所述存儲器單元??扉W存儲器系統(tǒng)最普遍地以可移除地與例如個人計算機、相機等多種主機連接的存 儲卡或快閃驅動器的形式提供,但也可嵌入在此類主機系統(tǒng)中。當向存儲器寫入數(shù)據(jù)時, 主機通常在存儲器系統(tǒng)的連續(xù)虛擬地址空間內向扇區(qū)、簇或其它數(shù)據(jù)單位分配唯一邏輯 地址。與磁盤操作系統(tǒng)(DOS) —樣,主機將數(shù)據(jù)寫入到存儲器系統(tǒng)的邏輯地址空間內 的地址,和從所述地址讀取數(shù)據(jù)。存儲器系統(tǒng)內的控制器將從主機接收的邏輯地址轉換 成實際上存儲數(shù)據(jù)的存儲器陣列內的物理地址,并接著跟蹤這些地址轉換。存儲器系統(tǒng) 的數(shù)據(jù)存儲容量至少與在為存儲器系統(tǒng)界定的整個邏輯地址空間上可尋址的數(shù)據(jù)的量一 樣大。在稍后代的快閃存儲器系統(tǒng)中,擦除單位的大小增加到足夠多的存儲器單元的區(qū)塊 以存儲多個數(shù)據(jù)扇區(qū)。盡管與存儲器系統(tǒng)連接的主機系統(tǒng)可能以較小的最小單位(例如, 扇區(qū))編程和讀取數(shù)據(jù),但大量扇區(qū)存儲在快閃存儲器的單個擦除單位中。區(qū)塊內的一 些數(shù)據(jù)扇區(qū)通常在主機更新或替換數(shù)據(jù)的邏輯扇區(qū)時變得過時。由于必須在可重寫存儲 在區(qū)塊中的任何數(shù)據(jù)之前擦除整個區(qū)塊,所以通常將新的或經(jīng)更新的數(shù)據(jù)存儲在已被擦 除且具有用于所述數(shù)據(jù)的剩余容量的另一區(qū)塊中。這一過程使原始區(qū)塊具有過時數(shù)據(jù),
所述過時數(shù)據(jù)在存儲器內占據(jù)著寶貴的空間。但是,如果所述區(qū)塊中剩余任何有效數(shù)據(jù), 則無法擦除所述區(qū)塊。因此,為了更好地利用存儲器的存儲容量,通常通過將有效的部分區(qū)塊的數(shù)據(jù)量復 制到已擦除區(qū)塊中來合并或收集所述數(shù)據(jù)量,使得接著可擦除從中復制了這些數(shù)據(jù)的區(qū) 塊且再使用其整個存儲容量。還需要復制數(shù)據(jù)以便以數(shù)據(jù)扇區(qū)的邏輯地址的次序在區(qū)塊 內對數(shù)據(jù)扇區(qū)進行分組,因為這會提高讀取數(shù)據(jù)和將所讀取的數(shù)據(jù)傳遞到主機的速度。 如果這種數(shù)據(jù)復制發(fā)生得過于頻繁,那么存儲器系統(tǒng)的操作性能可能降級。這尤其會影 響其中存儲器的存儲容量僅僅等于主機通過系統(tǒng)的邏輯地址空間可尋址的數(shù)據(jù)的量(典型的情況)的存儲器系統(tǒng)的操作。在此情況下,可能在可執(zhí)行主機編程命令之前需要進 行數(shù)據(jù)合并或收集。因而增加了編程時間。在相繼代的存儲器系統(tǒng)中,區(qū)塊的大小增加以便增加給定半導體面積中可存儲的數(shù) 據(jù)位的數(shù)目。存儲256和更多個數(shù)據(jù)扇區(qū)的區(qū)塊正變得普遍。另外,不同陣列或子陣列 的兩個、四個或更多個區(qū)塊通常邏輯上鏈接在一起成為元區(qū)塊,以便增加數(shù)據(jù)編程和讀 取的并行程度。伴隨此類大容量操作單位而來的是對其進行有效操作的挑戰(zhàn)。 發(fā)明內容已開發(fā)出許多技術,其在各種程度上克服了在有效地操作此類大擦除區(qū)塊快閃存儲 器系統(tǒng)時遭遇的某些問題。另一方面,本發(fā)明通過改變存儲器與主機系統(tǒng)之間的數(shù)據(jù)傳 遞接口而采用了更基本的方法。不是與當前的做法一樣通過使用虛擬地址空間內的邏輯 地址在存儲器與主機系統(tǒng)之間傳送數(shù)據(jù),而是通過由主機分配的文件名和文件內的偏移 地址來識別數(shù)據(jù)文件。因而,存儲器系統(tǒng)知曉每一扇區(qū)或其它數(shù)據(jù)單位所屬的主機文件。 這里論述的文件單位是(例如)通過具有連續(xù)偏移地址而排序的以及通過在主機計算系 統(tǒng)中操作的應用程序創(chuàng)建并唯一識別的數(shù)據(jù)的集合。這并未由當前市售存儲器系統(tǒng)采用,因為主機現(xiàn)在通過一組共用的邏輯地址來識別 所有文件內到達存儲器系統(tǒng)的數(shù)據(jù)而不識別所述文件。通過借助文件對象而不使用邏輯 地址來識別主機數(shù)據(jù),存儲器系統(tǒng)控制器可以減小對這種頻繁的數(shù)據(jù)合并和收集的需要 的方式存儲數(shù)據(jù)。數(shù)據(jù)復制操作的頻率和被復制的數(shù)據(jù)的量因此顯著減小,借此提高存 儲器系統(tǒng)的數(shù)據(jù)編程和讀取性能。此外,存儲器系統(tǒng)控制器維持主機文件被存儲到的存 儲器區(qū)塊的目錄和索引表信息。因而,主機不必維持當前管理邏輯地址接口所必需的文 件分配表(FAT)??墒褂萌羟ХN其它技術來實施本發(fā)明的基于文件的系統(tǒng),所述技術當單獨或一起使 用時有助于改進操作。來自主機的數(shù)據(jù)以可變長度的數(shù)據(jù)群組按照主機提供所述數(shù)據(jù)的 次序寫入到存儲器區(qū)塊中。每一數(shù)據(jù)群組內的數(shù)據(jù)在區(qū)塊內具有連續(xù)邏輯偏移和物理存 儲器地址。也就是說,只要遇到邏輯文件偏移地址的不連續(xù)性,就開始新的數(shù)據(jù)群組。 類似地,當數(shù)據(jù)填滿一個存儲器區(qū)塊并開始被寫入到另一存儲器區(qū)塊時,也開始新的數(shù) 據(jù)群組。存儲器系統(tǒng)控制器維持主機文件被存儲到的存儲器區(qū)塊(而不是如當前系統(tǒng)中 為主機)的目錄和索引表信息。索引表中的一組條目列舉形成完整文件的數(shù)據(jù)群組。以文件為基礎而不是如現(xiàn)在的做法以存儲器區(qū)塊為基礎啟始垃圾收集,且接著對存 儲給定文件的數(shù)據(jù)的需要這種操作的所有存儲器區(qū)塊執(zhí)行垃圾收集。大多數(shù)垃圾收集可 在后臺執(zhí)行,從而顯著減少必須在可執(zhí)行主機寫入命令之前執(zhí)行垃圾收集的情況。將來自單個文件的數(shù)據(jù)寫入到專用于所述文件的一個或一個以上存儲器區(qū)塊??梢詮闹鳈C接收的次序寫入數(shù)據(jù),而不管其偏移地址的次序如何。也可以與由主機產(chǎn)生的文 件數(shù)據(jù)的邏輯偏移分辨率相同的物理存儲器分辨率寫入數(shù)據(jù)??删S持一個或一個以上共 用存儲器區(qū)塊以存儲來自兩個或兩個以上文件的在已用來自每一文件的數(shù)據(jù)填滿整數(shù)個 區(qū)塊之后剩余的殘余數(shù)據(jù)。以下對本發(fā)明示范性實例的描述中包含本發(fā)明的其它方面、優(yōu)點、特征和細節(jié),將 結合附圖來進行所述描述。
圖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)之間的直 接文件存儲接口;圖ll展示示范性存儲器系統(tǒng)的功能層級;
圖12A- 12E給出一組示范性直接文件接口命令;圖13A- 13D展示將數(shù)據(jù)文件直接寫入到存儲器中的四個不同實例;圖14A- 14E說明將單個數(shù)據(jù)文件直接寫入到存儲器中的序列;圖15展示對圖14E中說明的數(shù)據(jù)文件進行垃圾收集的結果;圖16給出共用區(qū)塊的實例;圖n說明將共用數(shù)據(jù)群組編程到若干打開的共用區(qū)塊中的一者中;圖18展示在不同文件中編程到非易失性存儲器中的數(shù)據(jù)的元頁的若干實例;圖19說明來自圖14A、 14C、 14E和15的實例的文件索引表(FIT)的結構和條目; 圖20概念上說明示范性文件索引數(shù)據(jù)結構; 圖21展示圖20的文件目錄的頁的結構; 圖22展示圖20的文件索引表的頁的結構;圖23展示圖20的文件目錄的頁的結構,作為圖21的結構的替代形式; 圖24說明圖21和23的文件目錄的操作; 圖25說明圖22的文件索引表的操作;圖26是展示本文描述的存儲器系統(tǒng)的操作的總體序列的流程圖; 圖27是圖26的"讀取文件數(shù)據(jù)"方框的流程圖; 圖28是圖26的"編程文件數(shù)據(jù)"方框的流程圖; 圖29說明圖28的流程圖中包含的兩個操作的相對時序; 圖30是圖26的"刪除文件"方框的流程圖; 圖31是圖26的"垃圾收集"方框的流程圖; 圖32是圖31的"共用區(qū)塊垃圾收集"方框的流程圖;以及 圖33是本文的示范性存儲器系統(tǒng)的所述操作期間存儲器單元區(qū)塊的狀態(tài)圖。
具體實施方式
快閃存儲器系統(tǒng)概述參看圖1-8描述當前快閃存儲器系統(tǒng)及其與主機裝置的典型操作。在這種系統(tǒng)中可 實施本發(fā)明的各方面。圖1的主機系統(tǒng)1將數(shù)據(jù)存儲到快閃存儲器2中并從快閃存儲器 2中檢索數(shù)據(jù)。盡管快閃存儲器可內嵌在主機內,但存儲器2圖示為采用較普遍的卡的 形式,其通過機械和電連接器的匹配部分3和4而可移除地連接到主機。當前存在市售 的許多不同的快閃存儲卡,實例為CompactFlash(CF)、多媒體卡(MMC)、安全數(shù)字(SD)、 miniSD、存儲棒、智能媒體和TransFlash卡。盡管這些卡的每一者具有根據(jù)其標準化規(guī)
格的獨特的機械和/或電接口,但每一者中包含的快閃存儲器非常類似。這些卡全部可從 作為本申請案的受讓人的SanDisk公司購得。SanDisk還在其Cruzer商標下提供一系列 快閃驅動器,其是小封裝中的手持式存儲器系統(tǒng),且具有用于通過插入主機的USB插口 中而與主機連接的通用串行總線(USB)插頭。這些存儲卡和快閃驅動器的每一者包含 控制器,所述控制器與主機介接并控制其內部的快閃存儲器的操作。使用此類存儲卡和快閃驅動器的主機系統(tǒng)多種多樣。其包含個人計算機(PC)、膝上 型和其它便攜式計算機、蜂窩式電話、個人數(shù)字助理(PDA)、數(shù)字靜態(tài)相機、數(shù)字電影 攝影機和便攜式音頻播放器。主機通常包含用于一種或一種以上類型的存儲卡或快閃驅 動器的內置插口,但一些主機需要可在其中插入存儲卡的適配器。圖1的主機系統(tǒng)1可視為具有兩個主要部分,就存儲器2來說,由電路與軟件的組 合構成。它們是應用程序部分5和與存儲器2介接的驅動器部分6。舉例來說,在個人 計算機中,應用程序部分5可包含運行文字處理、圖形、控制或其它通用的應用程序軟 件的處理器。在相機、蜂窩式電話或主要專用于執(zhí)行單個組的功能的其它主機系統(tǒng)中, 應用程序部分5包含操作相機以拍攝和存儲圖片、操作蜂窩式電話以撥打和接聽電話等 的軟件。圖1的存儲器系統(tǒng)2包含快閃驅動器7和電路8,其均與和卡連接的主機介接以便 來回傳遞數(shù)據(jù)并控制存儲器7。控制器8通常在數(shù)據(jù)編程和讀取期間在主機1所使用的 數(shù)據(jù)的邏輯地址與存儲器7的物理地址之間進行轉換。參看圖2,描述可用作圖1的非易失性存儲器2的典型快閃存儲器系統(tǒng)的電路。系 統(tǒng)控制器通常實施在單個集成電路芯片11上,所述芯片11通過系統(tǒng)總線13與一個或一 個以上集成電路存儲器芯片并聯(lián)連接,圖2中展示了單個此類存儲器芯片15。所說明的 特定總線13包含用于攜帶數(shù)據(jù)的單獨組導體17、用于存儲器地址的組19,和用于控制 及狀態(tài)信號的組21?;蛘?,可在這三個功能之間分時共享單組導體。此外,可使用系統(tǒng) 總線的其它配置,例如2004年8月9日申請的題為"Ring Bus Structure and It's Use in Flash Memory Systems"的第10/915,039號美國專利申請案中所描述的環(huán)形總線。典型控制器芯片11具有其自身的內部總線23,所述內部總線23通過接口電路25 與系統(tǒng)總線13介接。通常連接到總線的主要功能件是處理器27 (例如,微處理器或微 控制器)、含有代碼以初始化("啟動")系統(tǒng)的只讀存儲器(ROM) 29、主要用于緩沖存 儲器與主機之間傳遞的數(shù)據(jù)的只讀存儲器(RAM) 31,和為通過存儲器與主機之間的控 制器的數(shù)據(jù)計算并檢驗誤差校正碼(ECC)的電路'33。控制器總線23通過電路35與主
機系統(tǒng)介接,在圖2的系統(tǒng)包含在存儲卡內的情況下,所述介接通過作為連接器4的一 部分的卡的外部接觸件37來完成。時鐘39與控制器11的其它組件的每一者連接并由 所述組件的每一者利用。存儲器芯片15以及與系統(tǒng)總線13連接的任何其它存儲器芯片通常含有組織成多個 子陣列或平面的存儲器單元的陣列,為了簡單起見說明了兩個此類平面41和43,但可 改為使用例如四個或八個此類平面的更多平面?;蛘?,芯片15的存儲器單元陣列可不劃 分為平面。然而,當如此劃分時,每一平面具有其自身的可彼此獨立操作的列控制電路 45和47。電路45和47從系統(tǒng)總線13的地址部分19接收其各自的存儲器單元陣列的地 址,并對所述地址進行解碼以尋址各自位線49和51中的特定一者或一者以上。響應于 地址總線19上接收的地址而通過行控制電路55對字線53進行尋址。源電壓控制電路 57和59也與各個平面連接,p阱電壓控制電路61和63也是如此。如果存儲器芯片15 具有單個陣列的存儲器單元,且如果系統(tǒng)中存在兩個或兩個以上此類芯片,那么每一芯 片的陣列可與上述多平面芯片內的平面或子陣列類似地操作。數(shù)據(jù)通過與系統(tǒng)總線13的數(shù)據(jù)部分17連接的各個數(shù)據(jù)輸入/輸出電路65和67而傳 遞到平面41和43中以及從平面41和43傳出。電路65和67用于通過經(jīng)由各自的列控 制電路45和47連接到平面的線69和71,將數(shù)據(jù)編程到其各自平面的存儲器單元中以 及從存儲器單元讀取數(shù)據(jù)。盡管控制器11控制存儲器芯片15的操作以對數(shù)據(jù)進行編程、讀取數(shù)據(jù)、擦除并處 理各種內務處理問題,但每一存儲器芯片還含有某一控制電路,其執(zhí)行來自控制器ll的 命令以執(zhí)行此類功能。接口電路73連接到系統(tǒng)總線13的控制和狀態(tài)部分21。來自控制 器的命令提供到狀態(tài)機75,狀態(tài)機75接著提供對其它電路的特定控制以便執(zhí)行這些命 令。如圖2所示,控制線77-81將狀態(tài)機75與這些其它電路連接。來自狀態(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號美國專利申請公開案。示范性NAND陣列由圖3的電路圖說明,其是圖2的存儲器系統(tǒng)的存儲器單元陣列 41的一部分。提供大量全局位線,為了闡釋的簡單起見,圖2僅展示四個此類線91-94。 許多串聯(lián)連接的存儲器單元串97-104連接在這些位線中的一者與參考電位之間。使用存儲器單元串99作為代表,多個電荷存儲存儲器單元107 - 110與串的任一端處的選擇晶 體管111和112串聯(lián)連接。當致使串的選擇晶體管傳導時,串連接在其位線與參考電位 之間。接著一次編程或讀取所述串內的一個存儲器單元。圖3的字線115 - 118分別延伸越國存儲器單元的許多串的每一者中的一個存儲器單 元的電荷存儲元件,且柵極119和120控制串的每一端處的選擇晶體管的狀態(tài)。使共享 共用字線和控制柵極線115- 120的存儲器單元串形成一起擦除的存儲器單元的區(qū)塊123。 此單元區(qū)塊含有物理上可一次擦除的最小數(shù)目的單元。 一次對沿著字線115-118的一者 的一行存儲器單元進行編程。通常,以規(guī)定的次序對NAND陣列的行進行編程,在此情 況下以沿著字線118的最接近串的連接到接地或另一共用電位的末端的行開始。接著對 沿著字線117的所述行存儲器單元進行編程,依此類推,貫穿區(qū)塊123。最后對沿著字線 115的行進行編程。第二區(qū)塊125是類似的,其存儲器單元串連接到與第一區(qū)塊123中的串相同的全局 位線,但具有不同的一組字線和控制柵極線。字線和控制柵極線通過行控制電路55而驅 動到其適當操作電壓。如果系統(tǒng)中存在一個以上平面或子陣列,例如圖2的平面1和2, 那么一個存儲器結構使用在其間延伸的共用字線?;蛘撸纱嬖诠蚕砉灿米志€的兩個以 上平面或子陣列。在其它存儲器結構中,單獨驅動各個平面或子陣列的字線。如上文引用的NAND專利和公開申請案的若干者中所述,可操作存儲器系統(tǒng)以在每 一電荷存儲元件或區(qū)域中存儲兩個以上可檢測的電荷電平,借此在每一者中存儲一個以 上數(shù)據(jù)位。存儲器單元的電荷存儲元件最通常地是傳導浮動柵極,但或者可以是非傳導 介電電荷俘獲材料,如第2003/010卯93號美國專利申請公開案中所述。圖4概念上說明在以下進一步描述中用作實例的快閃存儲器單元陣列7 (圖1)的組 織。存儲器單元的四個平面或子陣列131-134可在單個集成存儲器單元芯片上,在兩個 芯片上(每個芯片上兩個平面)或在四個單獨芯片上。特定布置對于下文的論述并不重 要。當然,系統(tǒng)中可存在其它數(shù)目的平面(例如,1、 2、 8、 16或更多)。平面分別劃分 為圖4中由矩形展示的存儲器單元的區(qū)塊,例如位于各個平面131 - 134中的區(qū)塊137、 138、 139和140。每一平面中可存在數(shù)十或數(shù)百個區(qū)塊。如上文所提及,存儲器單元的 區(qū)塊是擦除單位,即物理上可一起擦除的最小數(shù)目的存儲器單元。然而,為了獲得提高 的并行性,區(qū)塊以較大元區(qū)塊單位操作。來自每一平面的一個區(qū)塊邏輯上鏈接在一起以 形成元區(qū)塊。圖示四個區(qū)塊137 - 140形成一個元區(qū)塊M1。元區(qū)塊內的所有單元通常一 起擦除。用于形成元區(qū)塊的區(qū)塊無需限于其各自平面內的相同相對位置,如由區(qū)塊145- 148組成的第二元區(qū)塊143中所示。盡管通常優(yōu)選的情況是使元區(qū)塊延伸越過所有平面, 但為了獲得較高系統(tǒng)性能,存儲器系統(tǒng)可以動態(tài)地形成不同平面中的一個、兩個或三個 區(qū)塊中的任一者或全部的元區(qū)塊的能力操作。這允許元區(qū)塊的大小與在一個編程操作中 可用于存儲的數(shù)據(jù)的量更緊密地匹配。各個區(qū)塊為了操作目的又劃分為存儲器單元頁,如圖5所說明。舉例來說,區(qū)塊131 -134的每一者的存儲器單元各劃分為八頁P0-P7。或者,每一區(qū)塊內可存在16、 32或 更多的存儲器單元頁。頁是區(qū)塊內的數(shù)據(jù)編程和讀取的單位,其含有一次編程的最少量 的數(shù)據(jù)。在圖3的NAND結構中,頁由區(qū)塊內沿著字線的存儲器單元形成。然而,為了 提高存儲器系統(tǒng)操作并行性,兩個或兩個以上區(qū)塊內的這些頁可邏輯上鏈接為元頁。圖 5中說明元頁151,其由來自四個區(qū)塊131-134的每一者的一個物理頁形成。舉例來說, 元頁151包含四個區(qū)塊的每一者中的頁P2,但元頁的頁無需在區(qū)塊的每一者內必定具有 同一相對位置。盡管優(yōu)選的情況是在所有四個平面上并行編程和讀取最大量的數(shù)據(jù),但 為了獲得較高系統(tǒng)性能,也可操作存儲器系統(tǒng)以形成不同平面中的單獨區(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ū)塊內的每隔一個串連接到其各自的位線,且 另一行的選擇晶體管響應于另一控制信號將居間的每隔一個串連接到其各自的位線。因 此,將兩頁數(shù)據(jù)寫入到存儲器單元的每一行中。每一邏輯頁中的數(shù)據(jù)的量通常是整數(shù)個的一個或一個以上數(shù)據(jù)扇區(qū),按照慣例,每 一扇區(qū)含有512字節(jié)的數(shù)據(jù)。圖6展示頁或元頁的數(shù)據(jù)的兩個扇區(qū)153和155的邏輯數(shù) 據(jù)頁。每一扇區(qū)通常含有所存儲的用戶或系統(tǒng)數(shù)據(jù)的512字節(jié)的部分157,和用于與部
分157中的數(shù)據(jù)有關或者與其所存儲在的物理頁或區(qū)塊有關的開銷數(shù)據(jù)的另一數(shù)目的字 節(jié)159。開銷數(shù)據(jù)的字節(jié)數(shù)目通常為16字節(jié),從而使扇區(qū)153和155的每一者總共528 字節(jié)。開銷部分159可含有編程期間從數(shù)據(jù)部分157計算出的ECC、其邏輯地址、區(qū)塊 已被擦除和重新編程的次數(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ù)的量。商業(yè)上可利用的上文指出的物理上較小的可重新編程非易失性存儲卡和快閃驅動器 的數(shù)據(jù)存儲容量為512兆字節(jié)(MB)、 l千兆字節(jié)(GB)、 2GB禾卩4GB,且可能更高。 圖7說明主機與這種大容量存儲器系統(tǒng)之間的最普通的接口。主機處理由主機所執(zhí)行的 應用程序軟件或固件程序產(chǎn)生或使用的數(shù)據(jù)文件。文字處理數(shù)據(jù)文件是一實例,且計算 機輔助設計(CAD)軟件的繪圖文件是另一實例,其主要出現(xiàn)于例如PC、膝上型計算機 等一般計算機主機中。pdf格式的文檔也是此類文件。靜態(tài)數(shù)字視頻相機為存儲在存儲卡 上的每一圖片產(chǎn)生數(shù)據(jù)文件。蜂窩式電話利用來自內部存儲卡上的文件(例如電話目錄) 的數(shù)據(jù)。PDA存儲并使用若干不同的文件,例如地址文件、日歷文件等。在任何此類應 用程序中,存儲卡也可含有操作主機的軟件。圖7中說明主機與存儲器系統(tǒng)之間的共用邏輯接口。連續(xù)的邏輯地址空間161足夠 大以便為可能存儲在存儲器系統(tǒng)中的所有數(shù)據(jù)提供地址。主機地址空間通常劃分為增量 的數(shù)據(jù)簇。每一簇可在給定主機系統(tǒng)中經(jīng)設計以含有若干數(shù)據(jù)扇區(qū),典型的是大約4與 64個之間的扇區(qū)。標準扇區(qū)含有512字節(jié)的數(shù)據(jù)。圖7的實例中展示己創(chuàng)建三個文件1、 2和3。在主機系統(tǒng)上運行的應用程序將每一 文件創(chuàng)建為一組有序的數(shù)據(jù)并通過唯一名稱或其它參考對其進行識別。主機將尚未分配 給其它文件的足夠的可用邏輯地址空間分派給文件1。圖示文件1已被分派有連續(xù)范圍 的可用邏輯地址。通常還出于特定目的而分配地址范圍(例如,用于主機操作軟件的特 定范圍),接著,即使當主機將邏輯地址分派給數(shù)據(jù)時未利用這些地址,也避免用所述地 址范圍存儲數(shù)據(jù)。
當主機隨后創(chuàng)建文件2時,主機類似地分派邏輯地址空間161內的兩個不同的連續(xù) 地址范圍,如圖7所示。無需向文件分派連續(xù)邏輯地址,而是所述文件可以是已分配給 其它文件的地址范圍之間的地址的片段。接著,這一實例展示,向主機創(chuàng)建的又一文件 3分配主機地址空間的先前未分配給文件1和2及其它數(shù)據(jù)的其它部分。主機通過維持文件分配表(FAT)來跟蹤存儲器邏輯地址空間,F(xiàn)AT中維持著主機分 派給各個主機文件的邏輯地址。FAT表通常存儲在非易失性存儲器中以及主機存儲器中, 且當存儲新的文件、刪除其它文件、修改文件等時由主機頻繁更新。舉例來說,當刪除 主機文件時,主機接著通過更新FAT表以顯示先前分配給被刪除文件的邏輯地址現(xiàn)可用 于其它數(shù)據(jù)文件而將所述邏輯地址解除分配。主機不關注存儲器系統(tǒng)控制器選擇用來存儲文件的物理位置。典型的主機僅了解其 邏輯地址空間和其已分配給其各個文件的邏輯地址。另一方面,存儲器系統(tǒng)通過典型的 主機/卡接口僅了解數(shù)據(jù)已被寫入到的邏輯地址空間部分,但不了解分配給特定主機文件的邏輯地址乃至主機文件的數(shù)目。存儲器系統(tǒng)控制器將主機為存儲或檢索數(shù)據(jù)而提供的 邏輯地址轉換成存儲主機數(shù)據(jù)的快閃存儲器單元陣列內的唯一物理地址。方框163表示 這些邏輯-物理地址轉換的工作表,其由存儲器系統(tǒng)控制器維持。存儲器系統(tǒng)控制器經(jīng)編程而以使系統(tǒng)的性能維持在高水平的方式將數(shù)據(jù)文件存儲在 存儲器陣列165的區(qū)塊和元區(qū)塊內。此說明中使用四個平面或子陣列。優(yōu)選地以系統(tǒng)所 允許的最大程度的并行性跨越由來自平面的每一者的區(qū)塊形成的整個元區(qū)塊編程和讀取 數(shù)據(jù)。通常分配至少一個元區(qū)塊167作為用于存儲由存儲器控制器使用的操作固件和數(shù) 據(jù)的保留區(qū)塊。可分配另一元區(qū)塊169或多個元區(qū)塊以用于存儲主機操作軟件、主機FAT 表等。大多數(shù)物理存儲空間保持用于存儲數(shù)據(jù)文件。然而,存儲器控制器不了解主機在 其各個文件對象之間如何分配了所接收的數(shù)據(jù)。存儲器控制器通常通過與主機交互而了解的只是主機寫入到特定邏輯地址的數(shù)據(jù)存儲在由控制器的邏輯-物理地址表163維持的 相應的物理地址中。在典型的存儲器系統(tǒng)中,提供在存儲地址空間161內存儲所述量的數(shù)據(jù)所必需的幾 個額外區(qū)塊的存儲容量。可提供這些額外區(qū)塊中的一者或一者以上作為冗余區(qū)塊以替代 在存儲器的壽命期間可能變得有缺陷的其它區(qū)塊。通??沙鲇诟鞣N原因而改變包含在各 個元區(qū)塊內的區(qū)塊的邏輯分組,所述原因包含用冗余區(qū)塊替代最初分派給元區(qū)塊的有缺 陷的區(qū)塊。通常在已擦除區(qū)塊集區(qū)中維持一個或一個以上額外區(qū)塊(例如,元區(qū)塊171)。 當主機將數(shù)據(jù)寫入到存儲器系統(tǒng)時,控制器將由主機分配的邏輯地址轉換為已擦除區(qū)塊
集區(qū)中的元區(qū)塊內的物理地址。接著擦除未用于將數(shù)據(jù)存儲在邏輯地址空間161內的其 它元區(qū)塊,并將其指定為在后續(xù)數(shù)據(jù)寫入操作期間使用的已擦除區(qū)塊集區(qū)。隨著原始存儲的數(shù)據(jù)變得過時,存儲在特定主機邏輯地址處的數(shù)據(jù)被新數(shù)據(jù)頻繁地 重寫。存儲器系統(tǒng)控制器作為響應將新數(shù)據(jù)寫入在已擦除區(qū)塊中,并接著針對那些邏輯 地址改變邏輯-物理地址表以識別那些邏輯地址處的數(shù)據(jù)被存儲到的新的物理區(qū)塊。接著 擦除含有那些邏輯地址處的原始數(shù)據(jù)的區(qū)塊,并使其可用于存儲新數(shù)據(jù)。如果在寫入開 始時來自擦除區(qū)塊集區(qū)的預擦除區(qū)塊中不存在足夠的存儲容量,那么此種擦除通常必須 在可完成當前數(shù)據(jù)寫入操作之前發(fā)生。這可能不利地影響系統(tǒng)數(shù)據(jù)編程速度。存儲器控 制器通常只有在主機將新數(shù)據(jù)寫入到給定邏輯地址時才知道主機已致使其同一邏輯地址 處的數(shù)據(jù)過時。因此,存儲器的許多區(qū)塊可暫時存儲這種無效數(shù)據(jù)。區(qū)塊和元區(qū)塊的大小增加以便有效地使用集成電路存儲器芯片的面積。這導致較大 比例的單個數(shù)據(jù)寫入存儲的數(shù)據(jù)的量小于元區(qū)塊的存儲容量,且在許多情況下甚至小于區(qū)塊的存儲容量。由于存儲器系統(tǒng)控制器通常將新數(shù)據(jù)引導到已擦除集區(qū)元區(qū)塊中,所 以這可能導致元區(qū)塊的若干部分變得未填充。如果新數(shù)據(jù)是存儲在另一元區(qū)塊中的一些 數(shù)據(jù)的更新,那么來自所述另一元區(qū)塊的具有與新數(shù)據(jù)元頁的邏輯地址連續(xù)的邏輯地址 的剩余有效元頁也理想地以邏輯地址次序被復制到新的元區(qū)塊中。舊的元區(qū)塊可保持其 它有效數(shù)據(jù)元頁。這隨著時間而導致致使單個元區(qū)塊的某些元頁的數(shù)據(jù)過時且無效,并 由寫入到不同元區(qū)塊的具有相同邏輯地址的新數(shù)據(jù)代替。
為了維持足夠的物理存儲器空間來存儲整個邏輯地址空間161上的數(shù)據(jù),周期性地 壓縮或合并(垃圾收集)此類數(shù)據(jù)。還需要將數(shù)據(jù)扇區(qū)盡可能地以與其邏輯地址相同的 次序維持在元區(qū)塊內,因為這使得對連續(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ū)塊收集具有連續(xù)或接近連續(xù)的邏輯地址的有
效數(shù)據(jù)的元頁,并將其重寫到另一元區(qū)塊中,所述另一元區(qū)塊通常是已擦除區(qū)塊集區(qū)中 的一個元區(qū)塊。當從原始的兩個或兩個以上元區(qū)塊復制了所有有效的數(shù)據(jù)元頁時,可將 其擦除以供將來使用。數(shù)據(jù)合并和垃圾收集花費時間并可能影響存儲器系統(tǒng)的性能,尤其當數(shù)據(jù)合并或垃 圾收集需要在可執(zhí)行來自主機的命令之前發(fā)生時。此種操作通常由存儲器系統(tǒng)控制器調 度以盡可能在后臺發(fā)生,但執(zhí)行這些操作的需要可能促使控制器必須給予主機占用狀態(tài) 信號直到完成這一操作為止??裳舆t主機命令的執(zhí)行的實例是,已擦除區(qū)塊集區(qū)中沒有 足夠的預擦除元區(qū)塊來存儲主機希望寫入到存儲器中的所有數(shù)據(jù),且需要首先進行數(shù)據(jù) 合并或垃圾收集來清除有效數(shù)據(jù)的一個或一個以上元區(qū)塊,接著可擦除所述元區(qū)塊。因 此,已將注意力導向管理對存儲器的控制以便使此類中斷最小化。以下美國專利申請案 中描述了許多此類技術2003年12月30日申請的第10〃49,831號,題為"Management of Non-Volatile Memory Systems Having Large Erase Blocks"; 2003年12月30日申請的第 1(V750,155號,題為"Non-Volatile Memory and Method with Block Management System"; 2004年8月13日申請的第10/917,888號,題為"Non-Volatile Memory and Method with Memory Planes Alignment"; 2004年8月13日申請的第10/917,867號;2004年8月13 日申請的10/917,889號,題為"Non-Volatile Memory and Method with Phased Program Failure Handling";和2004年8月13日申請的第10/917,725號,題為"Non-Volatile Memory and Method with Control Data Management"。有效地控制具有非常大的擦除區(qū)塊的存儲器陣列的操作的一個挑戰(zhàn)是,使給定寫入 操作期間存儲的數(shù)據(jù)扇區(qū)的數(shù)目與存儲器區(qū)塊的容量和邊界匹配且對準。 一種方法是, 以少于最大數(shù)目的區(qū)塊來配置用于存儲來自主機的新數(shù)據(jù)的元區(qū)塊,所使用的區(qū)塊的數(shù) 目是存儲少于填滿整個元區(qū)塊的量的數(shù)據(jù)量所必需的。2003年12月30日申請的題為 "Adaptive Metablocks"的第10/749,189號美國專利申請案中描述了適應性元區(qū)塊的用 途。2004年5月7日申請的第10/841,118號和2004年12月16日申請的題為"Data Run Programming"的第11/016,271號專利申請案中描述了數(shù)據(jù)區(qū)塊之間的邊界與元區(qū)塊之間 的物理邊界的配合。存儲器控制器也可使用來自FAT表的數(shù)據(jù)(其由主機存儲在非易失性存儲器中)來 更有效地操作存儲器系統(tǒng)。 一個此類用途是,了解何時主機已通過將數(shù)據(jù)的邏輯地址解 除分配而將所述數(shù)據(jù)識別為過時的。了解此情況允許存儲器控制器在其通常將由于主機 將新數(shù)據(jù)寫入到那些邏輯地址而了解此類無效數(shù)據(jù)之前調度對含有此類無效數(shù)據(jù)的區(qū)塊
的擦除。2004年7月21日申請的題為"Method and Apparatus for Maintaining Data on Non-Volatile Memory Systems"的第10/897,049號美國專利申請案中描述了這一情況。其 它技術包含監(jiān)控主機將新數(shù)據(jù)寫入到存儲器的模式以便推斷出給定的寫入操作是否為單 個文件,或者如果是多個文件,則推斷出文件之間的邊界位于何處。2004年12月23日 申請的題為"FAT Analysis for Optimized Sequential Cluster Management"的第11/022,369 號美國專利申請案描述了這種類型的技術的用途。為了有效地操作存儲器系統(tǒng),控制器需要盡可能多地了解關于主機分派給其各個文 件的數(shù)據(jù)的邏輯地址的信息。因而,控制器可將數(shù)據(jù)文件存儲在單個元區(qū)塊或一群組的 元區(qū)塊內,而不是在文件邊界未知時將數(shù)據(jù)文件散布在較大數(shù)目的元區(qū)塊之間。結果是, 數(shù)據(jù)合并和垃圾收集操作的次數(shù)和復雜性減小。因此存儲器系統(tǒng)的性能改進。但是,如 上所述,當主機/存儲器接口包含邏輯地址空間161 (圖7)時,存儲器控制器難以了解 關于主機數(shù)據(jù)文件結構的較多信息。參看圖8,以不同方式說明圖7已展示的典型邏輯地址主機/存儲器接口。主機向主 機所產(chǎn)生的數(shù)據(jù)文件分配邏輯地址。存儲器系統(tǒng)接著查看這些邏輯地址,并將其映射成 實際存儲數(shù)據(jù)的存儲器單元的區(qū)塊的物理地址。示范性的基于文件的接口實施例的描述主機與用于存儲大量數(shù)據(jù)的存儲器系統(tǒng)之間的改進的接口消除了對邏輯地址空間的 使用。主機改為通過唯一文件ID (或其它唯一參考)和文件內的數(shù)據(jù)單位(例如,字節(jié)) 的偏移地址而邏輯上尋址每一文件。將此文件地址直接給予存儲器系統(tǒng)控制器,所述存 儲器系統(tǒng)控制器接著保存其自身的關于每一主機文件的數(shù)據(jù)物理上存儲在何處的表。這 種新的接口可與和上文參看圖2-6描述的相同的存儲器系統(tǒng)一起實施。與上文描述的內 容的主要差異是所述存儲器系統(tǒng)與主機系統(tǒng)通信的方式。圖9中說明這種基于文件的接口,其將與圖7的邏輯地址接口進行比較。將圖9的 文件1、 2和3的每一者的標識以及文件內數(shù)據(jù)的偏移量直接傳遞到存儲器控制器。此邏 輯地址信息接著由存儲器控制器函數(shù)173轉換成存儲器165的元區(qū)塊和元頁的物理地址。圖10也說明基于文件的接口,其將與圖8的邏輯地址接口進行比較。圖10中不存 在圖8的邏輯地址空間和主機維持的FAT表。事實上,通過文件編號和文件內數(shù)據(jù)的偏移量向存儲器系統(tǒng)識別主機所產(chǎn)生的數(shù)據(jù)文件。存儲器系統(tǒng)接著將文件直接映射到存儲 器單元陣列的物理區(qū)塊。參看圖ll,說明本文描述的示范性大容量存儲系統(tǒng)的功能層。"直接文件存儲后端系 統(tǒng)"主要是本描述內容的主題。其在存儲器系統(tǒng)的操作內,且通過"直接文件接口"和 "基于文件的前端系統(tǒng)"在基于文件的接口信道上與主機系統(tǒng)通信。例如通過文件名來 唯一地識別每一主機文件。通過文件所特有的線性地址空間內的偏移地址來識別文件內 的數(shù)據(jù)。不需要為存儲器系統(tǒng)界定邏輯地址空間。 命令來自主機系統(tǒng)的一組直接文件接口命令支持存儲器系統(tǒng)的操作。圖12A- 12E中給出 一組示范性的此類命令。這里僅簡要概述這些命令,用于本描述內容的其余部分中的參 考。圖12A列舉用于促使根據(jù)所界定的協(xié)議在主機與存儲器系統(tǒng)之間傳遞數(shù)據(jù)的主機命 令。將在文件內處于特定偏移量(<偏移量〉)的指定文件(<文件10>)內的數(shù)據(jù)寫入到 存儲器系統(tǒng),或從存儲器系統(tǒng)讀取所述數(shù)據(jù)。在傳輸"寫入"、"插入"或"更新"命令 之后將數(shù)據(jù)從主機傳輸?shù)酱鎯ζ飨到y(tǒng),且存儲器系統(tǒng)通過將數(shù)據(jù)寫入在其存儲器陣列中 而作出響應。主機傳輸"讀取"命令會促使存儲器系統(tǒng)通過將指定文件的數(shù)據(jù)發(fā)送到主 機而作出響應。如果存儲器系統(tǒng)維持識別文件的額外數(shù)據(jù)可存儲的下一存儲位置的指針, 那么數(shù)據(jù)偏移量無需與寫入命令一起被發(fā)送。然而,如果"寫入"命令包含已寫入的文 件內的偏移地址,那么存儲器裝置可將所述偏移地址解譯為更新在所述偏移地址處開始 的文件數(shù)據(jù)的命令,借此不需要單獨的"更新"命令。對于"讀取"命令,如果將讀取 整個文件,那么主機不需要指定數(shù)據(jù)偏移量。響應于主機系統(tǒng)傳輸任何其它命令而終止 對這些圖12A數(shù)據(jù)命令中的一者的執(zhí)行。另一數(shù)據(jù)命令是"移除"命令。不同于圖12A的其它數(shù)據(jù)命令,"移除"命令之后并 不傳輸數(shù)據(jù)。其作用是促使存儲器系統(tǒng)將指定的偏移量1與偏移量2之間的數(shù)據(jù)標記為 過時的。接著在其中存在過時數(shù)據(jù)的文件或區(qū)塊的下一數(shù)據(jù)壓縮或垃圾收集期間移除這 些數(shù)據(jù)。圖12B列舉管理存儲器系統(tǒng)內的文件的主機命令。當主機即將在存儲器系統(tǒng)中寫入 新的文件的數(shù)據(jù)時,其首先發(fā)布"打開"命令,且存儲器系統(tǒng)通過打開新的文件而作出 響應。通常將指定可同時保持打開的文件的數(shù)目。當主機關閉文件時,"關閉"命令告知 存儲器系統(tǒng)可重新引導其用于維持打開文件的資源。存儲器系統(tǒng)通常將立即調度此文件 進行垃圾收集。利用所描述的直接文件接口,主要基于文件而在邏輯上管理和執(zhí)行垃圾 收集,而不是對于各個存儲器單元區(qū)塊在物理上管理和執(zhí)行。"之后關閉"(Close—after) 命令給予存儲器系統(tǒng)提前通知文件即將關閉。文件"刪除"命令促使存儲器系統(tǒng)立即 根據(jù)指定的優(yōu)先權規(guī)則調度擦除含有來自被刪除文件的數(shù)據(jù)的存儲器單元區(qū)塊。"擦除"
命令指定立即從存儲器中擦除所指定文件的數(shù)據(jù)。"刪除"與"擦除"命令之間的主要差異是給予擦除所指定的文件數(shù)據(jù)的優(yōu)先權。 主機可使用"擦除"命令在盡可能早的時間從存儲器中移除安全或敏感的數(shù)據(jù),而"刪 除"命令促使以較低優(yōu)先權擦除此類數(shù)據(jù)。在將存儲器系統(tǒng)斷電時使用"擦除"命令會 在從主機上移除存儲器裝置之前移除敏感數(shù)據(jù),且因此防止在存儲器裝置的后續(xù)使用期 間將所述數(shù)據(jù)散布到其它用戶或主機系統(tǒng)。這兩個命令均優(yōu)選在后臺執(zhí)行,即不會減慢 主要數(shù)據(jù)命令的執(zhí)行(圖12A)。在任何情況下,從主機接收到另一命令通常將促使存儲 器控制器終止任何后臺操作。圖12C中列舉與存儲器系統(tǒng)內的目錄有關的主機命令。每一目錄命令包含命令所涉 及的目錄的標識(<目錄ID>)。盡管存儲器系統(tǒng)控制器維持目錄,但關于目錄的命令和 目錄的命名由主機系統(tǒng)提供。存儲器控制器以主機供應的目錄命名依照存儲在存儲器系 統(tǒng)中的固件來執(zhí)行這些命令。<文件ID〉參數(shù)可以是文件的路徑全名或文件的某一簡寫識別符,本文引用為文件— 句柄(file—handle)。聯(lián)合某些命令將文件路徑名提供到圖11的直接文件接口。這允許當 文件首次打開時在文件目錄中創(chuàng)建完全明確的條目,并允許當打開現(xiàn)有文件時訪問文件 目錄中正確的現(xiàn)有條目。文件路徑名語法可遵照DOS文件系統(tǒng)所使用的標準。路徑名描 述目錄的層級和目錄的最低級內的文件。路徑片段可由"\"定界。加上前綴"\"的路徑 與根目錄有關。未加上前綴"\"的路徑與當前目錄有關。的片段路徑指示當前目錄 的父目錄?;蛘?,可通過文件—句柄參數(shù)來識別打開的文件,所述文件—句柄參數(shù)由存儲裝置在 首次創(chuàng)建文件時分派。存儲裝置接著可在每當主機打開文件時將簡寫文件命名傳送到主 機。主機接著可將文件一句柄與打開的文件的"寫入"、"插入"、"更新"、"讀取"、"關閉" 和"之后關閉"命令一起使用。如果使用路徑全名,那么主機對文件的訪問通常將較快, 因為無需導航通過文件目錄的層級。當通過使用"打開"命令而首次打開文件時,通常 使用路徑全名,因為存儲器系統(tǒng)很可能尚未向所述文件分派文件_句柄。但如果文件_句 柄已經(jīng)可用的話,那么可使用文件一句柄。對于圖12A和12B的利用文件ID的剩余的"刪 除"和"擦除"命令,優(yōu)選地使用完整的文件路徑名,以防主機供應不正確的文件一句柄。 主機較難因疏忽而產(chǎn)生與現(xiàn)有的但非既定的文件之一匹配的不正確的路徑名。圖12C的目錄命令類似地與其所涉及的目錄的〈目錄ID;4示識一起由圖11的直接文 件接口接收。路徑全名是與目錄命令一起接收的優(yōu)選的目錄ID。文件_句柄是由大容量存儲裝置響應于"打開"命令而在到達主機的直接文件接口處 返回的簡寫形式的識別符。便利的是將文件—句柄界定為存在于文件的目錄條目中的FIT 的指針。此指針界定文件的邏輯FIT區(qū)塊編號和所述區(qū)塊內的邏輯文件編號。將此用作 文件—句柄允許不必首先在文件目錄中搜索文件即可訪問文件FIT條目。舉例來說,如果 存儲器裝置可具有多達64個FIT區(qū)塊,且每一FIT區(qū)塊可索引多達64個文件,那么具 有文件—句柄1107的文件使其在FIT中的數(shù)據(jù)群組條目的指針設置成FIT區(qū)塊11中的邏 輯文件7。文件—句柄由存儲器系統(tǒng)控制器在響應于"打開"命令創(chuàng)建文件的目錄和FIT 條目時產(chǎn)生,且響應于"關閉"命令而變得無效。圖12D給出管理主機與存儲器系統(tǒng)之間的接口的狀態(tài)的主機命令。"閑置"命令告知 存儲器系統(tǒng)其可執(zhí)行先前已調度的例如數(shù)據(jù)擦除和垃圾收集的內部操作。響應于接收到 "待用"命令,存儲器系統(tǒng)將停止執(zhí)行例如垃圾收集和數(shù)據(jù)擦除的后臺操作。"停機"命 令給予存儲器控制器關于即將發(fā)生的電力丟失的提前警告,這允許完成待決的存儲器操 作,包含將數(shù)據(jù)從易失性控制器緩沖器寫入到非易失性快閃存儲器中。圖12E所示的"大小"命令通常將由主機在"寫入"命令之前發(fā)布。作為響應,存 儲器系統(tǒng)向主機報告可用于待寫入的另外的文件數(shù)據(jù)的容量。這可基于可用的未編程物 理容量減去管理所界定的文件數(shù)據(jù)容量的存儲所需的物理容量來計算。當主機發(fā)布"狀態(tài)"命令時(圖12E),存儲器裝置將以其當前狀態(tài)作出響應。此響 應可采用向主機提供關于存儲器裝置的信息的各個特定項目的具有不同的位的字段的二 進制字的形式。舉例來說, 一個二位字段可報告裝置是否被占用,且如果是,那么依據(jù) 存儲器裝置正忙于進行的操作而提供一個以上占用狀態(tài)。 一個占用狀態(tài)可指示存儲器裝 置正執(zhí)行用于傳遞數(shù)據(jù)的主機寫入或讀取命令,即前臺操作。第二占用狀態(tài)指示可用于 告知主機存儲器系統(tǒng)正執(zhí)行后臺內務處理操作,例如數(shù)據(jù)壓縮或垃圾收集。主機可決定 是否一直等到此第二占用結束為止然后將另一命令發(fā)送到存儲器裝置。如果在完成內務 處理操作之前發(fā)送了另一命令,那么存儲器裝置將結束內務處理操作并執(zhí)行所述命令。主機可將第二裝置占用與"閑置"命令結合使用以允許在存儲器裝置內發(fā)生內務處 理操作。在主機發(fā)送很可能形成裝置進行內務處理操作的需要的一命令或一系列命令之 后,主機可發(fā)送"閑置"命令。如隨后所描述,存儲器裝置可經(jīng)編程以通過起始內務處 理操作來響應"閑置"命令,并同時開始上述第二占用。舉例來說,"刪除"命令形成根 據(jù)下文論述的算法執(zhí)行垃圾收集的需要。在已發(fā)布一系列"刪除"命令之后來自主機的 "閑置"命令接著使裝置有時間執(zhí)行垃圾收集,所述垃圾收集對于存儲器裝置能夠響應 后續(xù)的主機"寫入"命令可能是必要的。另外,可能需要在接收下一 "寫入"命令之后 但在可執(zhí)行所述"寫入"命令之前執(zhí)行垃圾收集,借此顯著減慢所述命令的執(zhí)行。 寫入數(shù)據(jù)當將新的數(shù)據(jù)文件編程到存儲器中時,以區(qū)塊中的第一物理位置開始并按照順序依 次繼續(xù)通過區(qū)塊的位置而將數(shù)據(jù)寫入到存儲器單元的已擦除區(qū)塊中。數(shù)據(jù)以從主機接收 的次序被編程,而不管所述數(shù)據(jù)在文件內的偏移量的次序如何。編程繼續(xù)進行直到己將 文件的所有數(shù)據(jù)寫入到存儲器中為止。如果文件中數(shù)據(jù)的量超過單個存儲器區(qū)塊的容量, 那么當?shù)谝粎^(qū)塊已滿時,編程在第二已擦除區(qū)塊中繼續(xù)進行。以與第一存儲器區(qū)塊相同 的方式從第一位置依次對第二存儲器區(qū)塊進行編程,直到存儲了文件的所有數(shù)據(jù)或第二 區(qū)塊已滿為止。可用文件的任何剩余數(shù)據(jù)對第三或額外區(qū)塊進行編程。存儲單個文件的 數(shù)據(jù)的多個區(qū)塊或元區(qū)塊無需在物理上或邏輯上是連續(xù)的。為了便于解釋,除非另有規(guī) 定,否則希望本文使用的術語"區(qū)塊"表示擦除的區(qū)塊單位或多個區(qū)塊"元區(qū)塊",這取 決于特定系統(tǒng)中是否正使用元區(qū)塊。參看圖13A,說明將數(shù)據(jù)文件寫入到存儲器系統(tǒng)。在此實例中,數(shù)據(jù)文件181大于 存儲器系統(tǒng)的一個區(qū)塊或元區(qū)塊183的存儲容量,183的存儲容量展示為在實線垂直線 之間延伸。因此,還將數(shù)據(jù)文件181的部分184寫入到第二區(qū)塊185中。這些存儲器單 元區(qū)塊展示為物理上連續(xù)的,但其無需如此。來自文件181的數(shù)據(jù)在其以流的形式從主 機被接收時被寫入,直到文件的所有數(shù)據(jù)已寫入到存儲器中為止。在圖13A的實例中, 數(shù)據(jù)181是在圖12A的"寫入"命令之后從主機接收的文件的初始數(shù)據(jù)。存儲器系統(tǒng)管理和跟蹤所存儲的數(shù)據(jù)的優(yōu)選方式是使用可變大小的數(shù)據(jù)群組。也就 是說,將文件的數(shù)據(jù)存儲為可以所界定的次序鏈接在一起以形成完整的文件的多個數(shù)據(jù) 群組。然而,優(yōu)選地,文件內的數(shù)據(jù)群組的次序由存儲器系統(tǒng)控制器通過使用文件索引 表(FIT)來維持。當寫入來自主機的數(shù)據(jù)流時,只要文件數(shù)據(jù)的邏輯偏移地址中或存儲 有所述數(shù)據(jù)的物理空間中存在不連續(xù)性,就開始新的數(shù)據(jù)群組。這種物理不連續(xù)性的實 例是當文件的數(shù)據(jù)填滿一個區(qū)塊并開始寫入到另一區(qū)塊中時的情況。圖13A中說明這一 情況,其中第一數(shù)據(jù)群組填滿第一區(qū)塊183,將文件的剩余部分184作為第二數(shù)據(jù)群組 存儲在第二區(qū)塊185中。第一數(shù)據(jù)群組可由(F0,D0)表示,其中F0是數(shù)據(jù)文件的開始的 邏輯偏移量,且D0是存儲器內文件開始的物理位置。第二數(shù)據(jù)群組表示為(F1,D1),其 中Fl是存儲在第二區(qū)塊185的開始處的數(shù)據(jù)的邏輯文件偏移量,且Dl是存儲有所述數(shù) 據(jù)的物理位置。 通過主機-存儲器接口傳遞的數(shù)據(jù)的量可依據(jù)數(shù)據(jù)的字節(jié)數(shù)目、數(shù)據(jù)的扇區(qū)數(shù)目或以 某一其它粒度來表達。當通過當前邏輯地址接口與大容量存儲器系統(tǒng)通信時,主機最經(jīng) 常以字節(jié)粒度界定其文件的數(shù)據(jù),但接著將字節(jié)分組為各有512字節(jié)的扇區(qū)或分組為各 有多個扇區(qū)的簇。通常這樣做以便簡化存儲器系統(tǒng)的操作。盡管本文描述的基于文件的 主機-存儲器接口可使用某一其它數(shù)據(jù)單位,但原始主機文件字節(jié)粒度通常是優(yōu)選的。也 就是說,優(yōu)選地依據(jù)字節(jié)(最小的適當?shù)臄?shù)據(jù)單位)而不是通過扇區(qū)、簇等來表達數(shù)據(jù) 偏移量、長度等。這允許以本文描述的技術更有效地使用快閃存儲器存儲裝置的容量。在一般的現(xiàn)有邏輯地址接口中,主機還指定正寫入的數(shù)據(jù)的長度。這也可利用本文 描述的基于文件的接口來進行,但由于這對于"寫入"命令(圖12A)的執(zhí)行來說不是 必要的,所以優(yōu)選的是主機不提供正寫入的數(shù)據(jù)的長度。以圖13A所說明的方式寫入到存儲器中的新的文件接著在FIT中以所述次序表示為 數(shù)據(jù)群組的索引條目(F0,D0)、 (F1,D1)的序列。也就是說,每當主機系統(tǒng)希望訪問特定文 件時,主機將其文件ID或其它標識發(fā)送到存儲器系統(tǒng),存儲器系統(tǒng)接著訪問其FIT以識 別組成所述文件的數(shù)據(jù)群組。各個數(shù)據(jù)群組的長度<長度>也可包含在其各自的條目中, 以便于存儲器系統(tǒng)的操作。當使用時,存儲器控制器計算并存儲數(shù)據(jù)群組的長度。只要主機使圖13A的文件維持打開狀態(tài),優(yōu)選地還維持物理寫入指針P以界定用于 寫入從主機接收的所述文件的任何另外的數(shù)據(jù)的位置。在物理存儲器中文件末端處寫入 所述文件的任何新的數(shù)據(jù),而不管新數(shù)據(jù)在文件內的邏輯位置如何。存儲器系統(tǒng)允許多 個文件同時保持打開,例如4或5個此類文件,并為其每一者維持寫入指針P。不同文 件的寫入指針指向不同存儲器區(qū)塊中的位置。如果當已存在關于打開文件的數(shù)目的存儲 器系統(tǒng)限制時主機系統(tǒng)希望打開新的文件,那么首先關閉已打開文件中的一者并接著打 開新的文件。已關閉文件之后,不再需要為所述文件維持寫入指針P。圖13B說明主機(也通過使用"寫入"命令(圖12A))將數(shù)據(jù)附加到圖13A的先 前寫入但仍打開的文件的末端。展示主機系統(tǒng)將數(shù)據(jù)187添加到文件的末端,也將其在 所述文件的數(shù)據(jù)的末端處寫入在第二區(qū)塊185中。所附加數(shù)據(jù)變成數(shù)據(jù)群組(F1,D1)的一 部分,所述數(shù)據(jù)群組(F1,D1)因此現(xiàn)含有更多數(shù)據(jù),因為現(xiàn)有數(shù)據(jù)群組184與所附加數(shù)據(jù) 189之間既不存在邏輯地址不連續(xù)性也不存在物理地址不連續(xù)性。因此,整個文件在FIT 中仍然表示為索引條目(FO,DO)、 (F1,D1)的序列。指針P的地址也變化為所存儲的附加數(shù) 據(jù)的末端的地址。圖13C中展示將數(shù)據(jù)191的區(qū)塊插入到圖13A的先前寫入的文件中的實例。盡管主
機將數(shù)據(jù)191插入文件中,但存儲器系統(tǒng)將所插入的數(shù)據(jù)附加在先前寫入的文件數(shù)據(jù)的 末端處的位置193處。當正將數(shù)據(jù)插入打開的文件中時不必以文件的數(shù)據(jù)的邏輯次序重 寫所述文件的數(shù)據(jù),但這可能稍后在主機關閉文件之后在后臺進行。由于所插入的數(shù)據(jù) 完全存儲在第二存儲器區(qū)塊185中,所以其形成單個新群組(F1,D3)。但進行此插入導致 圖13A的先前數(shù)據(jù)群組(FO,DO)被劃分為兩個群組, 一個是插入之前的(F0,D0)且一個是插 入之后的(F2,D1)。這是因為,每當存在數(shù)據(jù)的邏輯不連續(xù)性時(例如發(fā)生在插入的開始 Fl時和插入的結束F2時),均需要形成新的數(shù)據(jù)群組。群組(F3,D2)是物理地址D2作為 第二區(qū)塊185的開始的結果。盡管群組(F1,D3)與(F3,D2)存儲在同一存儲器區(qū)塊中但其維 持分離,因為存儲在其中的數(shù)據(jù)的偏移量存在不連續(xù)性。接著在存儲器系統(tǒng)FIT中以所 述次序通過數(shù)據(jù)群組索引條目(F0,D0)、 (F1,D3)、 (F2,D1)、 (F3,D2)來表示具有插入的原 始文件。從圖13A、 13B和13C的實例中應注意,可寫入新的或現(xiàn)有文件的新數(shù)據(jù),而 不使存儲器中的任何數(shù)據(jù)過時。也就是說,執(zhí)行"寫入"和"插入"命令(圖12A)不 會導致致使任何其它數(shù)據(jù)無效或過時。圖13D說明另一實例,其中使用"更新"命令(圖12A)以圖13A所示的方式更新 最初寫入的數(shù)據(jù)的某一部分。展示更新數(shù)據(jù)文件的部分195。不是通過更新而重寫存儲 器系統(tǒng)中的整個文件,而是將文件的已更新部分197附加到先前寫入的數(shù)據(jù)。先前寫入 的數(shù)據(jù)的部分199現(xiàn)為過時的。盡管通常需要合并已更新的文件以便釋放由過時數(shù)據(jù)占 據(jù)的空間,但這通常不在主機使文件維持打開時進行,而是可在關閉文件之后在后臺進 行。更新之后,在存儲器系統(tǒng)FIT中以所述次序通過數(shù)據(jù)群組索引條目(FO,DO)、 (F1,D3)、 (F2,D1)、 (F3,D2)來表示文件。圖13A的單個數(shù)據(jù)群組(F0,D0)再次劃分為圖13D中的片 段, 一個在已更新部分之前且一個在已更新部分之后。為了進一步說明可變長度數(shù)據(jù)群組的使用,圖14A-14E依次展示涉及同一文件的若 千寫入操作的序列。首先使用"寫入"命令(圖12A)將原始文件數(shù)據(jù)Wl寫入到存儲 器系統(tǒng)的兩個區(qū)塊中,如圖14A所示。接著通過兩個數(shù)據(jù)群組來界定所述文件,第一群 組開始于物理存儲器區(qū)塊的開始處,且第二群組在物理存儲器區(qū)塊邊界之后需要。接著, 通過以下數(shù)據(jù)群組的索引條目的序列來描述圖14A的文件(F0,D0)、 (F1,D1)。圖14B中,通過使用"更新"命令(圖12A)更新圖14A中寫入的文件數(shù)據(jù)。將已 更新的文件數(shù)據(jù)Ul緊跟著先前群組(F1,D1)之后寫入,使已更新數(shù)據(jù)的先前版本變得過 時。圖14A的先前群組(F0,D0)縮短為圖14B的經(jīng)修正群組(F0,D0),且先前群組(F1,D1) 縮短為群組(F4,D2)。將已更新數(shù)據(jù)寫入在兩個群組(F2,D3)和(F3,D4)中,因為其與存儲器 區(qū)塊的邊界重疊。將一些數(shù)據(jù)存儲在第三存儲器區(qū)塊中?,F(xiàn)通過以下數(shù)據(jù)群組的索引條 目的序列來描述所述文件(FO,DO)、 (F2,D3)、 (F3,D4)、 (F4,D2)。在圖14C中通過使用"插入"命令(圖12A)插入新的文件數(shù)據(jù)II來進一步修改圖 14B的文件。將新數(shù)據(jù)II緊跟著圖14B的先前群組(F4,D2)之后寫入到存儲器中,作為圖 14C的新群組(F5,D6)和(F6,D7),因為所插入的數(shù)據(jù)與存儲器區(qū)塊的邊界重疊。使用第四 存儲器區(qū)塊。圖14B的先前群組(FO,DO)由于新數(shù)據(jù)II的插入而分裂為圖14C中的縮短 的群組(F0,D0)和(F7,D5)。現(xiàn)通過以下數(shù)據(jù)群組的索引條目的序列來描述所述文件 (FO,DO)、 (F5,D6)、 (F6,D7)、 (F7,D5)、 (F8,D3)、 (F9,D4)、 (F10,D2)。圖14D展示使用"寫入"命令(圖12A)將新數(shù)據(jù)W2附加到文件的末端而進一步 修改圖14C的數(shù)據(jù)文件。將新數(shù)據(jù)W2緊跟著圖14C的先前群組(F10,D2)之后寫入,作 為圖14D的新群組(F11,D8)?,F(xiàn)通過以下數(shù)據(jù)群組的索引條目的序列來描述所述文件 (F0,D0)、 (F5,D6)、 (F6,D7)、 (F7,D5)、 (F8,D3)、 (F9,D4)、 (F10,D2)、 (F11,D8)。圖14E中展示對打開的文件的第二更新,其中通過主機發(fā)布"更新"命令(圖12A) 將己更新文件數(shù)據(jù)U2寫入到圖14D的文件。圖14E中將已更新數(shù)據(jù)U2緊跟著圖14D 的先前群組(F11,D8)之后寫入,使所述數(shù)據(jù)的先前版本變得過時。圖14D的先前群組 (F9,D4)縮短為圖14E中的經(jīng)修正群組(F9,D4),先前群組(F10,D2)變得完全過時,且先前 群組(F11,D8)縮短而形成新群組(F14,D9)。將已更新數(shù)據(jù)寫入在圖14E的新群組(F12,D10) 和(F13,D11)中,并與區(qū)塊邊界重疊?,F(xiàn)需要第五區(qū)塊來存儲文件。現(xiàn)通過以下數(shù)據(jù)群組 的索引條目的序列來描述所述文件(FO,DO)、 (F5,D6)、 (F6,D7)、 (F7,D5)、 (F8,D3)、 (F9,D4)、 (F12,D10)、 (F13,D11)、 (F14,D9)。在根據(jù)以上描述的文件的創(chuàng)建或修改之后,優(yōu)選以正確的邏輯次序使每一文件的數(shù) 據(jù)的偏移量維持連續(xù)。因此,例如,作為執(zhí)行"插入"命令的一部分,主機所提供的所 插入數(shù)據(jù)的偏移量從緊接著在插入之前的偏移量連續(xù),且插入之后已在文件中的數(shù)據(jù)遞 增所插入數(shù)據(jù)的量。更新命令最通常會導致現(xiàn)有文件的給定地址范圍內的數(shù)據(jù)被相同量 的已更新數(shù)據(jù)代替,因此文件的其它數(shù)據(jù)的偏移量通常無需被代替。代替單獨的"更新" 命令,可替代地通過使用"寫入"命令來更新文件的數(shù)據(jù),因為存儲器系統(tǒng)可將從主機 接收到具有已存在于所存儲的文件數(shù)據(jù)中的偏移量的范圍的數(shù)據(jù)解譯為更新所述偏移量范圍內的數(shù)據(jù)的指令。將注意到,上文描述且通過圖13和14說明的所有的數(shù)據(jù)分配和索引功能均由存儲 器系統(tǒng)的控制器執(zhí)行。連同圖12A的命令"寫入"、"插入"或"更新"中的一者,主機 僅傳送正發(fā)送到存儲器系統(tǒng)的文件ID和文件內數(shù)據(jù)的偏移量。存儲器系統(tǒng)執(zhí)行其余操 作。以剛才描述的方式將文件數(shù)據(jù)從主機直接寫入到快閃存儲器中的優(yōu)點是,如此存儲 的數(shù)據(jù)的粒度或分辨率可維持成與主機的粒度或分辨率相同。如果主機應用程序以例如 一個字節(jié)的粒度寫入文件數(shù)據(jù),那么也可以一個字節(jié)的粒度將所述數(shù)據(jù)寫入到快閃存儲 器中。接著以字節(jié)數(shù)目來測量各個數(shù)據(jù)群組內數(shù)據(jù)的量和位置。也就是說,在主機應用 程序文件內可單獨尋址的數(shù)據(jù)的相同偏移量單位當存儲在快閃存儲器中時在所述文件內 也是可單獨尋址的。接著,在索引表中將區(qū)塊內同一文件的數(shù)據(jù)群組之間的任何邊界指 定為最接近的字節(jié)或其它主機偏移量單位。類似地,以主機偏移量的單位來界定區(qū)塊內 不同文件的數(shù)據(jù)群組之間的邊界。盡管并不使用"刪除"命令來寫入數(shù)據(jù),但考慮使用"刪除"命令來刪除文件的一 部分具有實質意義,因為此操作是"插入"命令的相反命令。"刪除"命令可以以下格式 應用于一系列文件偏移量地址刪除<文件10><偏移量><長度>。以<偏移量>開始且從 所述地址繼續(xù)經(jīng)過刪除的<長度>的文件部分內的數(shù)據(jù)被刪除。主機接著遞減刪除之后文 件的剩余數(shù)據(jù)的偏移量地址,以便在整個文件中維持連續(xù)的偏移量地址。這是"插入" 命令的相反命令,其中主機將數(shù)據(jù)添加到文件的中部,并接著遞增插入之后剩余的文件 數(shù)據(jù)的偏移量,使得經(jīng)修改的文件的偏移量是連續(xù)的。垃圾收集從圖14B和14E中將注意到,"更新"命令導致存儲文件所必需的物理空間大于文 件中數(shù)據(jù)的量,這是因為己由更新代替的數(shù)據(jù)仍然存儲在存儲器中。因此,非常需要通 過消除過時、無效的數(shù)據(jù)而將文件的數(shù)據(jù)合并(垃圾收集)到較小的物理存儲空間中。 因此,更多的存儲空間變得可用于其它數(shù)據(jù)。還可注意到,除了圖14B和14E的文件數(shù)據(jù)更新外,圖14C的數(shù)據(jù)插入還導致文件 數(shù)據(jù)被無序存儲。也就是說,更新和插入在其進行時被添加到存儲在存儲器中的文件的 末端,而其幾乎總是邏輯上定位在文件內的其它地方。這是圖14B、 14C和14E的實例 的情況。因此,可能需要將存儲在存儲器中的文件的數(shù)據(jù)重新排序以與文件內的偏移量 的次序匹配。這因而改進了所存儲數(shù)據(jù)的讀取速度,因為按順序讀取頁和區(qū)塊將以文件 的數(shù)據(jù)的偏移量次序提供所述文件的數(shù)據(jù)。這還提供了對文件的最大可能的碎片整理。 但對文件數(shù)據(jù)重新排序以使讀取更加有效對存儲器系統(tǒng)的性能的重要性并不如文件數(shù)據(jù) 合并,文件數(shù)據(jù)合并潛在地釋放一個或一個以上存儲器區(qū)塊以用于存儲其它數(shù)據(jù)。因此,
對文件中的數(shù)據(jù)重新排序通常不會是獨立地進行的(因為益處抵不上所增加的操作開 銷),而是可作為許多垃圾收集操作的一部分進行而具有極少或不增加操作開銷。圖14E的文件包含由于已進行兩次數(shù)據(jù)更新U1和U2而存儲在存儲器中的過時數(shù)據(jù) 群組(灰色部分)。因此,正用于存儲文件的存儲器容量的量實質上大于文件的大小,如 從圖14E所了解。因此,垃圾收集是適當?shù)摹D15提供對圖14E的數(shù)據(jù)文件進行垃圾收 集的結果的說明。在垃圾收集之前,所述文件幾乎占據(jù)五個區(qū)塊的存儲容量(圖14E), 而垃圾收集之后,所述同一文件配合在略多于三個存儲器單元區(qū)塊內(圖15)。作為垃 圾收集操作的一部分,將數(shù)據(jù)從其初始被寫入到的區(qū)塊復制到其它已擦除區(qū)塊中,且接 著擦除原始區(qū)塊。如果對整個文件進行數(shù)據(jù)收集,那么其數(shù)據(jù)可能以與文件內的數(shù)據(jù)邏 輯偏移量次序相同的物理次序被復制到新的區(qū)塊中。更新U1和U2以及插入Il (例如) 在垃圾收集(圖15)之后以與其在主機文件中出現(xiàn)的次序相同的次序存儲。垃圾收集通常還導致在正合并的文件內形成新的且不同的數(shù)據(jù)群組。在圖15的情況 下,通過以下新的數(shù)據(jù)群組的索引條目的新的序列來描述所述文件(F0,D0)、 (F1,D1)、 (F2,D2)、 (F3,D3)。這比圖14E所示的文件的狀態(tài)下存在的數(shù)據(jù)群組的數(shù)目少得多?,F(xiàn)在, 對于文件的數(shù)據(jù)已被復制到的存儲器單元區(qū)塊的每一者有一個數(shù)據(jù)群組。作為垃圾收集 操作的一部分,更新文件索引表(FIT)以反映形成文件的新的數(shù)據(jù)群組。當一個文件是進行垃圾收集的候選者時,檢查所述文件的FIT數(shù)據(jù)群組條目以確定 文件是否滿足為垃圾收集設定的標準。當含有文件的數(shù)據(jù)的存儲器單元區(qū)塊的任一者還 含有過時數(shù)據(jù)時,將繼續(xù)進行垃圾收集。如果不,那么不必要進行垃圾收集。從上文給 出的數(shù)據(jù)群組索引條目的序列中容易發(fā)現(xiàn)圖14E的文件含有過時數(shù)據(jù)。舉例來說,從兩 個連續(xù)的數(shù)據(jù)群組(F7,D5)和(F8,D3)可知,存儲有文件數(shù)據(jù)的最初兩個區(qū)塊中存在過時數(shù) 據(jù)。物理地址位置D5與D3的差異遠遠大于邏輯偏移量F7與F8的差異。從文件索引數(shù) 據(jù)群組條目中還容易發(fā)現(xiàn),數(shù)據(jù)未以邏輯偏移量次序存儲?;蛘?,文件的各個FIT條目 可保留所述文件的參考為過時的過時數(shù)據(jù)群組的記錄??刂破鹘又唵蔚貟呙杳恳晃募?的FIT條目以識別任何過時數(shù)據(jù)群組和存儲有所述過時數(shù)據(jù)群組的物理區(qū)塊。通常不應對打開的文件執(zhí)行垃圾收集,因為主機可能繼續(xù)對文件進行更新或插入, 所述更新或插入會產(chǎn)生另外的過時數(shù)據(jù)和/或不以邏輯偏移量次序存儲數(shù)據(jù)。因而,可能 導致許多此類垃圾收集操作。但在已擦除集區(qū)區(qū)塊的數(shù)目下降到設定水平以下的情況下, 可能有必要對打開的文件進行垃圾收集以提供足夠多的已擦除區(qū)塊用于存儲新數(shù)據(jù)或其 它操作。
主機關閉文件通常促使考慮對所述文件進行垃圾收集。優(yōu)選地,并不緊接著在關閉 文件之后就執(zhí)行垃圾收集,而是由存儲器控制器調度關閉的文件在后臺進行垃圾收集, 此時其將不會干擾當前的存儲器操作??杀3掷占犃校渲嘘P閉之后將文件添加 到隊列,且接著,當沒有具有較高優(yōu)先權的其它存儲器系統(tǒng)操作要執(zhí)行時,已處于隊列 中最長時間的文件由存儲器控制器選擇并在需要時進行垃圾收集???例如)響應于從 主機接收到"閑置"命令(圖12D)而進行這種選擇和垃圾收集操作。由于尤其對于大文件來說復制數(shù)據(jù)是垃圾收集的最耗時的部分,所以可通過任何一次僅以短突發(fā)形式復制文件的數(shù)據(jù)的一部分而將任務劃分為若干組成部分。接著,這種 部分文件復制可與其它存儲器操作交錯,且甚至在主機將數(shù)據(jù)傳遞到存儲器系統(tǒng)或從存 儲器系統(tǒng)傳遞數(shù)據(jù)時發(fā)生。也可響應于已擦除區(qū)塊的數(shù)目下降到某一指定數(shù)目以下而增 加各個復制數(shù)據(jù)突發(fā)的長度。目標是完全在后臺執(zhí)行垃圾收集而不干擾或減慢與主機系統(tǒng)傳遞數(shù)據(jù)的主要操作。 但這并不總是可能的,尤其是在已擦除區(qū)塊集區(qū)中可用于編程新數(shù)據(jù)的己擦除區(qū)塊的數(shù) 目變得小于某一預設的最小值的情況下。接著使垃圾收集成為優(yōu)先,且可作為優(yōu)先而在 前臺對隊列中的任何文件進行垃圾收集以便合并數(shù)據(jù),使得額外的已擦除區(qū)塊可用于從 主機系統(tǒng)接收新數(shù)據(jù)。如果隊列中沒有文件,那么可能必須對打開的文件進行垃圾收集。 當垃圾收集變?yōu)閮?yōu)先時,主機通常將從存儲器系統(tǒng)接收占用狀態(tài)信號,且因此將暫停新 數(shù)據(jù)的任何編程直到再次存在適當數(shù)目的已擦除區(qū)塊為止。另一方面,如果存在足夠數(shù) 目或更多的己擦除集區(qū)區(qū)塊,那么可減小垃圾收集操作的頻率,且可延遲可能影響存儲 器系統(tǒng)的性能的垃圾收集。將注意到,對主機數(shù)據(jù)文件執(zhí)行垃圾收集。響應于文件的狀態(tài)而對文件啟始垃圾收 集。當啟始時,作為所述過程的一部分檢查FIT中文件的所有數(shù)據(jù)群組的索引條目。當 對文件進行垃圾收集時,以文件的數(shù)據(jù)群組索引條目中指定的次序將文件的數(shù)據(jù)一次一 個數(shù)據(jù)群組地從其現(xiàn)有區(qū)塊復制到新打開的復制區(qū)塊。這與現(xiàn)有快閃存儲器垃圾收集形 成對比,現(xiàn)有快閃存儲器垃圾收集完全基于各個存儲器單元區(qū)塊的狀態(tài)。然而, 一般的規(guī)則是,將僅對存儲文件的數(shù)據(jù)的還含有過時數(shù)據(jù)的各個區(qū)塊進行垃 圾收集。因此,將不會對存儲文件的數(shù)據(jù)的所有區(qū)塊進行垃圾收集。如果舉例來說,文 件僅存儲在兩個區(qū)塊中,且第一區(qū)塊含有過時數(shù)據(jù)而第二區(qū)塊不含有過時數(shù)據(jù),那么將 對第一區(qū)塊進行垃圾收集而不管第二區(qū)塊的數(shù)據(jù)。將有效數(shù)據(jù)從第一區(qū)塊復制到已擦除 復制區(qū)塊中,且復制區(qū)塊于是將留下大約是過時數(shù)據(jù)的量的一些已擦除頁或其它容量。
下文描述使用小于一個區(qū)塊的已擦除存儲容量。在圖14E的實例中,垃圾收集之前的存 儲器空間在五個含有文件的數(shù)據(jù)的區(qū)塊中的四個中的每一者中具有過時數(shù)據(jù)(灰色區(qū) 域)。作為對僅對含有過時數(shù)據(jù)的那些區(qū)塊進行垃圾收集的一般規(guī)則的修改, 一旦確定將 對給定文件進行垃圾收集,就將處于部分歸檔區(qū)塊中的文件的任何數(shù)據(jù)包含在垃圾收集 操作中。因此,盡管圖14E的第五區(qū)塊中沒有過時數(shù)據(jù),但仍將所述區(qū)塊中的U2數(shù)據(jù) 包含在垃圾收集操作中。所有五個區(qū)塊中的數(shù)據(jù)通過被復制到四個己擦除區(qū)塊中而合并 在一起,因為通過不包含第五區(qū)塊的數(shù)據(jù),所產(chǎn)生的四個復制區(qū)塊中的兩者將僅被部分 地填滿數(shù)據(jù)。在圖15的情況下,僅一個復制區(qū)塊保持部分地填滿。通過具有較少的部分 使用的區(qū)塊來改進存儲器性能。圖12B的由主機系統(tǒng)發(fā)布的某些文件命令可啟始垃圾收集。已描述接收對文件的"關 閉"命令。將關閉的文件置于待進行垃圾收集的隊列中。"刪除"和"擦除"命令也可導 致垃圾收集。刪除文件可促使將含有過時文件數(shù)據(jù)的區(qū)塊置于進行垃圾收集的隊列中。 對已刪除文件進行垃圾收集的作用在于,不存在已刪除文件的有效數(shù)據(jù),因此不會發(fā)生 向其它區(qū)塊的數(shù)據(jù)復制。作為垃圾收集過程的一部分簡單地擦除僅含有已刪除文件的數(shù) 據(jù)的所有區(qū)塊。"擦除"命令具有類似的作用,只是僅含有己擦除文件的過時數(shù)據(jù)的區(qū)塊 的垃圾收集可立即或基于優(yōu)先權(例如,通過將區(qū)塊置于垃圾收集隊列的最前部分)而 發(fā)生。所論述的直接文件存儲系統(tǒng)的顯著優(yōu)點是,當主機刪除文件時存儲器立即獲悉這一 情況,因為刪除文件的命令直接傳達到存儲器系統(tǒng)。存儲器控制器接著可在可擦除存儲 已刪除文件的數(shù)據(jù)的區(qū)塊時就擦除所述區(qū)塊,而不會不利地影響存儲器的其它操作。因 而,使已擦除區(qū)塊可用于存儲新的數(shù)據(jù)。在所描述的實施方案中,"刪除"或"擦除"文件的命令中的任一者均會導致作為直 接響應而擦除所述文件的數(shù)據(jù)。另一方面,在典型的基于邏輯的接口中,此命令不直接 到達存儲器控制器。事實上,主機僅釋放存儲器邏輯地址空間的由已刪除或擦除文件占 據(jù)的某些片段。只有當主機隨后將數(shù)據(jù)寫入到那些相同邏輯地址中的一者或一者以上時, 存儲器系統(tǒng)才知道重新使用的邏輯地址片段處的數(shù)據(jù)已過時。存儲器仍不知遣由文件占 據(jù)的其它邏輯地址片段的數(shù)據(jù)已被刪除或擦除。存儲器只有在主機將數(shù)據(jù)寫入到那些其 它邏輯地址時才了解之前寫入到那些其它邏輯片段的數(shù)據(jù)已過時。共用區(qū)塊
用單個文件的數(shù)據(jù)填充連續(xù)區(qū)塊的結果是,當文件被關閉并進行垃圾收集時,文件 數(shù)據(jù)中的一些可能僅占據(jù)存儲器單元區(qū)塊的一部分。此外,小文件的數(shù)據(jù)甚至可能不會 填滿整個區(qū)塊。如果僅一個文件的數(shù)據(jù)可存儲在區(qū)塊中,那么這將導致各個區(qū)塊的大量 空間未被使用。各個區(qū)塊內若干頁的存儲容量將維持已擦除且可用于存儲數(shù)據(jù)但將不會 被利用。因此, 一些存儲器單元區(qū)塊希望存儲來自兩個或兩個以上文件的每一者的較少量的 數(shù)據(jù),其它區(qū)塊已填滿之后留下整個小文件和/或殘余文件數(shù)據(jù)。殘余文件數(shù)據(jù)是關閉的 文件的不占據(jù)完整區(qū)塊的數(shù)據(jù),且可包含一個或一個以上數(shù)據(jù)群組。文件映射可以與仿 佛區(qū)塊中所有數(shù)據(jù)群組全部來自一個文件相同的方式跟蹤單個存儲器單元區(qū)塊中一個以 上文件的數(shù)據(jù)群組。各個數(shù)據(jù)群組的映射包含數(shù)據(jù)群組所屬的文件ID。使用共用區(qū)塊的 主要目的是使可能由于如上所述將文件的數(shù)據(jù)寫入到存儲器中而產(chǎn)生的未使用的物理存 儲器存儲容量最小化。最一般地,由于對文件的垃圾收集而產(chǎn)生的一個或一個以上數(shù)據(jù) 群組的殘余數(shù)據(jù)將寫入到共用區(qū)塊中,作為垃圾收集的一部分。 一實例是圖15的經(jīng)垃圾 收集的文件,其中最后的數(shù)據(jù)群組(F3,D3)僅占據(jù)最后區(qū)塊的一小部分。如果其保持這樣, 那么所述最后區(qū)塊的大部分將不被使用??蓪D15的數(shù)據(jù)群組(F3,D3)寫入到含有來自另 一個或一個以上文件的一個或一個以上數(shù)據(jù)群組的共用區(qū)塊中,或者可將所述最后存儲 器區(qū)塊指定為共用區(qū)塊。在后者情況下,來自一個或一個以上其它文件的數(shù)據(jù)群組因而 將隨后被寫入到所述相同區(qū)塊中?;蛘?,當已知殘余數(shù)據(jù)的量是將配合到所指定的共用區(qū)塊的一者內的已擦除空間中 的量時,可在垃圾收集期間將殘余文件數(shù)據(jù)從主機直接寫入到共用區(qū)塊??墒褂?之后 關閉"命令(圖12B)來識別殘余文件數(shù)據(jù),并允許將其寫入到具有足夠的空間來存儲 作為命令的一部分而指定的數(shù)據(jù)量的打開的共用區(qū)塊,而不是將殘余文件數(shù)據(jù)寫入到將 不會被完全填滿的擦除集區(qū)區(qū)塊中。這可排除在后續(xù)垃圾收集操作期間復制殘余數(shù)據(jù)的 需要。當將新的數(shù)據(jù)文件編程到存儲器中時,可將數(shù)據(jù)寫入到含有一個或一個以上其它文 件的殘余數(shù)據(jù)的打開的共用區(qū)塊中(在區(qū)塊中第一可用的物理位置開始并按順序依次繼 續(xù)經(jīng)過區(qū)塊的位置),作為先前描述且圖13A中說明的用于寫入數(shù)據(jù)的方法的替代方法。 如果發(fā)送文件的"打開"命令,之后在發(fā)送文件的數(shù)據(jù)之前緊接著是"之后關閉"命令, 那么可確定所述文件的全部數(shù)據(jù)可配合在打開的共用區(qū)塊中,且所述文件將在到達打開 的共用區(qū)塊的末端之前被關閉。即使文件數(shù)據(jù)的長度是未知的,也可將新文件的數(shù)據(jù)寫
入到打開的共用區(qū)塊中。因此,理想地在存儲器系統(tǒng)中維持許多共用區(qū)塊用于存儲兩個或兩個以上不同文件 的共用數(shù)據(jù)群組。共用數(shù)據(jù)群組的大小可高達區(qū)塊的存儲容量的大小,粒度為一個字節(jié)。 所述共用區(qū)塊中僅一者優(yōu)選地含有給定文件的數(shù)據(jù),但可含有文件的一個以上數(shù)據(jù)群組。 并且,共用數(shù)據(jù)群組優(yōu)選地僅存儲在一個共用區(qū)塊中,且不被劃分而用于存儲在多個共 用區(qū)塊中。這避免了當數(shù)據(jù)群組變得過時時在多個共用區(qū)塊中進行垃圾收集。當共用區(qū) 塊中的數(shù)據(jù)群組變得過時時所述共用區(qū)塊經(jīng)受垃圾收集。此共用區(qū)塊中的任何剩余有效 數(shù)據(jù)群組寫入到另一共用區(qū)塊中的可用的已擦除空間中,或寫入到已擦除集區(qū)區(qū)塊,且 接著擦除共用區(qū)塊。如果正進行垃圾收集的共用區(qū)塊含有來自不同文件的兩個或兩個以 上有效數(shù)據(jù)群組,那么無需將其保持在一起而是可將其復制到不同的區(qū)塊。圖16中展示共用區(qū)塊的實例,所述共用區(qū)塊已用來自三個不同數(shù)據(jù)文件的每一者的 共用數(shù)據(jù)群組進行了編程。因為在一般的NAND陣列中寫入數(shù)據(jù)被限制為從區(qū)塊的一端 處的頁進行到另一端處的頁,所以數(shù)據(jù)群組被彼此連續(xù)地存儲。區(qū)塊末端處的空白指示 區(qū)塊的其中未寫入有數(shù)據(jù)的頁。難以使可用的數(shù)據(jù)群組完美地配合到整個共用區(qū)塊中。由存儲器系統(tǒng)指定為可向其中寫入一個以上文件的殘余數(shù)據(jù)的打開的共用區(qū)塊的區(qū) 塊的數(shù)目通常將只有幾個,但在被進行垃圾收集的大量文件具有不適合任何現(xiàn)有的打開 的共用區(qū)塊中的可用空間的殘余文件數(shù)據(jù)的情況下,所述數(shù)目可能變成許多個。將殘余 文件數(shù)據(jù)寫入到打開的共用區(qū)塊中最佳地利用整體存儲器容量的一個打開的共用區(qū)塊 中。當打開的共用區(qū)塊的任一者中沒有足夠的已擦除空間時,關閉現(xiàn)有的共用區(qū)塊中的 一者,且打開另一共用區(qū)塊作為其替代?;蛘?,無需關閉現(xiàn)有的打開的共用區(qū)塊,且可 允許打開的共用區(qū)塊的數(shù)目增加。新的共用區(qū)塊可被指定為已擦除集區(qū)區(qū)塊中的一者, 伹優(yōu)選地是已含有一些殘余文件數(shù)據(jù)(當可用時)的不完全寫入?yún)^(qū)塊,例如圖15中的僅 含有殘余文件數(shù)據(jù)群組(F3,D3)的最后的區(qū)塊。然而,對于共用區(qū)塊的垃圾收集,優(yōu)選在 必要時將已擦除集區(qū)區(qū)塊指定為新的共用區(qū)塊。圖17說明在存在已含有來自另一文件的殘余數(shù)據(jù)的一個或一個以上數(shù)據(jù)群組的五 個殘余或共用單位(每一者是不同的區(qū)塊或元區(qū)塊)的情況下寫入殘余文件數(shù)據(jù)的示范 性過程。從圖15的經(jīng)垃圾收集的文件中產(chǎn)生的最后數(shù)據(jù)群組(F3,D3)是此殘余文件數(shù)據(jù)的 實例,但其可包含來自單個文件的一個以上數(shù)據(jù)群組。展示有三種可能性。第一種可能 性(A)將殘余數(shù)據(jù)寫入到殘余單位2,因為其具有最多的可用的已擦除空間。第二種可 能性(B)選擇殘余單位5用于殘余文件數(shù)據(jù),因為其是五個殘余單位中最佳匹配者。殘
余文件數(shù)據(jù)幾乎填滿單位5,且借此在單位2中留下較大的可用空間以用于將來接收更 大量的數(shù)據(jù)。單位l、 3或4的任一者中均沒有足夠的空間來接受殘余數(shù)據(jù),因此立即排 除這些單位。
第三種可能性(C)將殘余文件數(shù)據(jù)寫入到來自擦除集區(qū)的區(qū)塊或元區(qū)塊單位中。一 旦已將殘余文件數(shù)據(jù)寫入到完全擦除的單位中,其就變?yōu)闅堄鄦挝?,且隨后可由存儲器 系統(tǒng)控制器作為共用區(qū)塊打開。在所示的實例中,通常將不使用可能性(C),因為殘余 單位2或5的任一者中均存在用于殘余文件數(shù)據(jù)的空間?;蛘?,可允許文件的殘余數(shù)據(jù)分裂為兩個或兩個以上部分以便存儲在不同的共用區(qū) 塊中。舉例來說,沒有現(xiàn)有的打開的共用區(qū)塊可具有足夠的可用空間用于存儲特定文件 的殘余數(shù)據(jù),且沒有己擦除區(qū)塊可用于作為用于殘余文件數(shù)據(jù)的新的共用區(qū)塊而被打開。 在此情況下,殘余文件數(shù)據(jù)可在兩個或兩個以上打開的共用區(qū)塊之間分裂。
可在共用區(qū)塊充滿數(shù)據(jù)之前將其關閉。如上文所提及,在有必要打開另一共用區(qū)塊 以便存儲文件的給定量的殘余數(shù)據(jù)時,通常將關閉具有最少量的可用的已擦除空間的打 開的共用區(qū)塊。這部分地是文件的殘余數(shù)據(jù)未被分裂以存儲在不同的共用區(qū)塊中的優(yōu)選 操作的結果。當存儲器系統(tǒng)通過響應主機的"大小"命令(圖12E)而向主機報告可用 于新數(shù)據(jù)的存儲器存儲空間的量時,不包含關閉的共用區(qū)塊中的這些少量的未使用的容 量,因為其不可立即使用。
因為殘余文件數(shù)據(jù)由于其所屬的文件被刪除或擦除的緣故而變得過時,所以也將共 用區(qū)塊內的數(shù)據(jù)合并。舉例來說,每當共用區(qū)塊內的殘余文件數(shù)據(jù)不論由于什么原因而 被指定為過時時,將所述區(qū)塊添加到上述過時文件數(shù)據(jù)區(qū)塊隊列或另一隊列。如果數(shù)據(jù) 由于主機對其文件的"刪除"命令而變得過時,那么將共用區(qū)塊置于隊列末端。但如果 其是由于"擦除"命令而引起,那么共用區(qū)塊前往隊列的最前部分或以其它方式被給予 優(yōu)先權以進行垃圾收集。替代于單個隊列,在存儲器系統(tǒng)操作期間控制器可維持五個不同的垃圾收集隊列,最初兩個隊列中的條目被給予優(yōu)先權(1) 過時區(qū)塊的優(yōu)先隊列,所述過時區(qū)塊即那些由于對文件的"擦除"命令(圖 12B)而僅含有過時數(shù)據(jù)的區(qū)塊;(2) 共用區(qū)塊的優(yōu)先隊列,所述共用區(qū)塊含有由于對文件的"擦除"命令而被致使 過時的數(shù)據(jù)但也含有一些有效數(shù)據(jù);(3) 過時區(qū)塊(僅含有過時數(shù)據(jù)的區(qū)塊)的隊列,所述過時區(qū)塊由于執(zhí)行"更新"
或"刪除"命令(圖12A和12B)或因為其所有有效數(shù)據(jù)均已在垃圾收集期間被復制到 另一區(qū)塊而產(chǎn)生;
(4) 共用區(qū)塊的隊列,所述共用區(qū)塊響應于"刪除"命令或垃圾收集期間發(fā)現(xiàn)共用 區(qū)塊中存在過時數(shù)據(jù)而含有一些過時數(shù)據(jù)但其也含有有效數(shù)據(jù);以及
(5) 已接收到"關閉"或"之后關閉"命令的文件的隊列。 可以上文列舉的次序給予這五個隊列優(yōu)先權,隊列(1)中所有項目在隊列(2)中
的項目之前進行垃圾收集,依此類推。將區(qū)塊列舉在優(yōu)先隊列(1)和(2)中,因為(分 別)其數(shù)據(jù)的全部或一些已由于"擦除"命令而不是由于"刪除"命令而被致使過時。 以存儲器系統(tǒng)操作期間識別的次序將區(qū)塊和文件添加到隊列的每一者,首先對每一隊列 中最陳舊的區(qū)塊和文件進行垃圾收集(先入先出,或FIFO)。
隊列(4)和(5)中列舉的項目的優(yōu)先權大致相同,因此可顛倒?;蛘?,可存在較 復雜的優(yōu)先權系統(tǒng),其中也許甚至在較高優(yōu)先權隊列的一者或一者以上為空之前,根據(jù) 設定的標準從隊列(4)和(5)中選擇文件和共用區(qū)塊。管理共用區(qū)塊的垃圾收集有兩 個目標。 一個目標是使可能由于當共用區(qū)塊內的數(shù)據(jù)群組變得過時時對共用區(qū)塊的垃圾 收集而引起的對存儲器系統(tǒng)的正常操作的中斷最小化。另一目標是使當來自共用區(qū)塊的 數(shù)據(jù)群組在對所述區(qū)塊的垃圾收集期間被重新定位時的索引更新最小化。
共用區(qū)塊的垃圾收集期間,將區(qū)塊中剩余的有效數(shù)據(jù)的所有共用群組一次一個地復 制到具有所述空間的共用區(qū)塊的一者。如果打開的共用區(qū)塊中沒有用于正被復制的共用 群組的空間,那么將共用群組寫入到來自擦除集區(qū)的一區(qū)塊中,且接著可將此區(qū)塊指定 為共用區(qū)塊。接著,通常作為所述過程的一部分,關閉打開的共用區(qū)塊的一者。與所有 垃圾收集操作中一樣,更新文件索引表(FIT)以反映所復制的數(shù)據(jù)群組的新的存儲位置。
應在非易失性存儲器中記錄垃圾收集隊列。應對含有隊列信息的頁或元頁執(zhí)行讀取-修改-寫入操作,以添加或移除條目。含有垃圾收集隊列信息的頁可處于專門的區(qū)塊或元 區(qū)塊中,或者可與其它類型的頁共享區(qū)塊或元區(qū)塊(例如,交換區(qū)塊)。
編程期間對元頁的緩沖和使用
上文描述了存儲器系統(tǒng)的操作,而未特別關注存儲器單元區(qū)塊是否鏈接在一起作為 元區(qū)塊。上文描述的主機與存儲器系統(tǒng)之間的基于文件的接口和相關的存儲器系統(tǒng)操作 在使用元區(qū)塊的存儲器系統(tǒng)中以及在不使用元區(qū)塊的存儲器系統(tǒng)中工作。趨勢無疑是增 加一次寫入和讀取的數(shù)據(jù)的量(并行程度),因為這直接改進存儲器性能。通過使用由兩
個或兩個以上此類區(qū)塊形成的元區(qū)塊來增加各個存儲器單元區(qū)塊的以數(shù)據(jù)位的數(shù)目表示
的有效寬度。
舉例來說,參看圖3,單個區(qū)塊內沿著字線的每一者的所有存儲器單元可作為一頁 而一起編程和讀取,從而可能在每一行中存儲用戶數(shù)據(jù)的若干份一個、兩個、四個或四 個以上512字節(jié)的扇區(qū)。且當兩個或兩個以上區(qū)塊邏輯上鏈接成元區(qū)塊時,所述兩個或 兩個以上區(qū)塊的每一者的一行中的所有存儲器單元可一起編程和讀取。來自兩個或兩個 以上區(qū)塊的一起編程和讀取的兩個或兩個以上頁形成一元頁。利用一次編程如此多的數(shù) 據(jù)的能力,元頁內數(shù)據(jù)的某一程度的分級可幫助充分利用此可用的并行性。
圖18中說明三個主機文件的每一者的數(shù)據(jù)的一個元頁,為了簡單起見,每一元頁展 示為僅包含兩頁。元頁的每一頁的數(shù)據(jù)編程到元區(qū)塊的不同區(qū)塊中。
對于主機文件1,圖18A中展示元頁用作為單個數(shù)據(jù)群組0的一部分的具有連續(xù)偏 移量(邏輯地址)的數(shù)據(jù)填充。將這些數(shù)據(jù)并行編程到元區(qū)塊內接收文件1的數(shù)據(jù)的按 次序的下一元頁中。圖18B中,展示此實例的主機文件2的不同之處在于,其第一頁的 一部分包含數(shù)據(jù)群組1的具有連續(xù)偏移量的部分,且元頁的其余部分含有另一數(shù)據(jù)群組 2的具有連續(xù)偏移量的部分。盡管在兩個數(shù)據(jù)群組在文件2元頁內接合的地方數(shù)據(jù)的偏 移量可能存在不連續(xù)性,但這些數(shù)據(jù)共用編程在單個元頁中。如先前所述,直接文件存 儲接口以主機文件的數(shù)據(jù)被從主機接收時的狀態(tài)寫入所述數(shù)據(jù),而不管所述數(shù)據(jù)在文件 內的偏移量的次序如何。
一些快閃存儲器不允許將數(shù)據(jù)編程到已擦除頁中一次以上。在此情況下,圖18B的 數(shù)據(jù)群組1和2兩者同時被編程。但如果存儲器允許部分頁編程,那么可將文件2的兩 個數(shù)據(jù)群組在不同時間編程到非易失性存儲器的單個元頁中。在此情況下,將在不同時 間對頁O進行編程,首先用數(shù)據(jù)群組l編程,接著將數(shù)據(jù)群組2編程到頁0的剩余部分 中并編程到頁1的全部中。然而,通常優(yōu)選地并行編程兩個數(shù)據(jù)群組,以便提高系統(tǒng)性 能。
圖18C中,展示單個數(shù)據(jù)群組3的末端已被寫入到文件3的元頁中。存在此少量數(shù) 據(jù)編程到非易失性存儲器的元頁中而所述元頁的剩余部分維持被擦除的某些情況。 一種 情況是,當主機發(fā)布對文件(其數(shù)據(jù)群組3是殘余文件數(shù)據(jù))的"關閉"命令(圖12B) 時,如果主機試圖打開的文件數(shù)目超過所允許的數(shù)目且選擇將文件3關閉以便允許改為 打開另一較活動的文件,那么也可通過存儲器控制器來關閉文件3。存儲器控制器也可 在緩沖存儲器中沒有足夠的容量用于已打開的所有文件元頁緩沖器的情況下關閉文件3。 在這些情況中的任一者中,需要將文件緩沖器的部分數(shù)據(jù)內容立即寫入到非易失性存儲
器("清洗"所述文件緩沖器)。主機還可發(fā)送"停機"命令(圖12D),這意味著存儲器 可能丟失電力,且其易失性緩沖存儲器內的所有數(shù)據(jù)如果未立即編程到非易失性存儲器 中則會丟失。
如果隨后需要將文件3的另一數(shù)據(jù)群組4的開始寫入到圖18C的存儲器元頁且所述 存儲器不允許部分頁編程,那么數(shù)據(jù)群組4的第一頁寫入到文件3元頁的第二頁中,如 圖18D所示。這可能在非易失性存儲器元頁內產(chǎn)生一些未使用的存儲器容量,如圖18D 的數(shù)據(jù)群組3與4之間的空白部分所指示。此未使用的容量可通過在關閉文件3之后執(zhí) 行的垃圾收集操作而恢復,或可允許此未使用的容量持續(xù),因為此情形可能很少發(fā)生。
重要的是應注意,本發(fā)明的直接文件存儲技術可容許非易失性存儲器的區(qū)塊內的這 些未填充的空隙。當前系統(tǒng)無法容易地容許這些空隙,在當前系統(tǒng)中,存儲器系統(tǒng)通過 邏輯地址空間與主機介接,如圖7和8所說明。與存儲器區(qū)塊或元區(qū)塊大小相同的邏輯 數(shù)據(jù)群組映射到這些區(qū)塊或元區(qū)塊中。如果存儲在現(xiàn)有存儲器系統(tǒng)的區(qū)塊或元區(qū)塊內的 數(shù)據(jù)中將存在空隙,那么映射到空隙中的邏輯數(shù)據(jù)地址將實際上不可由主機使用。主機 假定在這種現(xiàn)有接口中,其具有其可用的整個邏輯地址空間,但新數(shù)據(jù)很難(如果甚至 可能的話)寫入在指定空隙的邏輯地址處。
通常利用系統(tǒng)控制器中的緩沖存儲器的一部分(例如,圖2的存儲器31)作為編程 數(shù)據(jù)緩沖器。此存儲器中應存在用于主機正寫入的每一活動文件的緩沖器容量。每一此 類"文件緩沖器"應具有與快閃存儲器中的至少一個元頁相等的容量?;顒游募侵鳈C 最近已將數(shù)據(jù)寫入到的打開的文件。
存儲器系統(tǒng)任何一次處理的活動主機文件的數(shù)目可等于當前打開的存儲器系統(tǒng)文件 的數(shù)目,或可為較小的數(shù)目。如果所允許的活動文件的最大數(shù)目小于所允許的打開的文 件的最大數(shù)目,那么必須準備在活動與打開(且反之亦然)之間改變文件的狀態(tài)。為了 允許這樣做,將快閃存儲器中的臨時存儲區(qū)塊指定為交換區(qū)塊,且可將長度小于一個元 頁的數(shù)據(jù)從文件緩沖器寫入到交換緩沖器中的元頁,且反之亦然。在交換區(qū)塊中維持有 效的交換的文件緩沖器的索引。文件緩沖器數(shù)據(jù)作為整數(shù)個頁而復制到交換區(qū)塊,之后 是提供每一復制的文件緩沖器的長度和位置以及與其有關的文件的索引的單個頁。周期
性地壓縮交換區(qū)塊并當其變滿時將其寫入到已擦除區(qū)塊。
當打開的文件A (例如)由于主機對其進行的寫入操作而必須使其活動時,識別寫 入最久的活動文件B,且將其文件緩沖器數(shù)據(jù)從控制器緩沖存儲器復制到交換區(qū)塊中接 下來可用的頁。接著在交換區(qū)塊中識別文件A的文件緩沖器數(shù)據(jù),并將其復制到控制器 緩沖存儲器中先前分配給文件B的可用空間。來自文件緩沖器的數(shù)據(jù)優(yōu)選地根據(jù)圖18所示的情況中的一者寫入到快閃存儲器中 用于所述文件的打開的寫入?yún)^(qū)塊中的下一可用的元頁。圖18A中,當文件l緩沖器中存 在形成文件1內單個數(shù)據(jù)群組0的一部分的足夠的數(shù)據(jù)時,在單個操作中將其編程到完 整元頁。圖18B中,當文件2緩沖器中存在形成文件2內數(shù)據(jù)群組1的末端和數(shù)據(jù)群組 2的開始的足夠的數(shù)據(jù)時,在單個操作中將其編程到完整元頁。如果快閃存儲器裝置支 持對單個頁的多個編程操作(部分頁編程),那么當文件2緩沖器中存在形成文件2內數(shù) 據(jù)群組1的末端的足夠的數(shù)據(jù)時,可將其編程到頁0的一部分。當形成文件2內數(shù)據(jù)群 組2的開始的足夠的數(shù)據(jù)在文件2緩沖器中變得可用時,可隨后在單獨編程操作中將其 編程到相同元頁的剩余部分。如圖18C所示,當文件3緩沖器中存在形成文件3內數(shù)據(jù)群組3的末端的數(shù)據(jù),且 必須執(zhí)行緩沖器清洗操作時,將其編程到頁0的一部分。如果快閃存儲器裝置不支持對 單個頁的多個編程操作(部分頁編程),那么當形成文件3內數(shù)據(jù)群組4的開始的足夠的 數(shù)據(jù)在文件3緩沖器中變得可用時,隨后在單獨編程操作中將其編程到相同元頁中的頁 1。還在垃圾收集期間使用元頁文件緩沖器??蓮姆且资源鎯ζ髦凶x取文件的有效數(shù) 據(jù)群組并將其寫入到所述文件的控制器緩沖器元頁中。如果同時重新排序文件,那么將 數(shù)據(jù)群組以其主機數(shù)據(jù)偏移量的次序寫入到緩沖器中。當然,每一數(shù)據(jù)群組中的數(shù)據(jù)具 有連續(xù)的邏輯偏移量。 一旦元頁緩沖器已滿,就將其數(shù)據(jù)并行編程到非易失性存儲器的 新的區(qū)塊中。文件索引存儲在存儲器系統(tǒng)中的每一文件通過其自身的索引條目序列界定,如上文尤其是參 看圖13-16所述。這些條目隨著時間由于在其中附加、插入或更新文件的數(shù)據(jù)且當文件 經(jīng)受垃圾收集時變化。圖19說明在若干不同時間0、 2、 4和5—個文件的文件索引表 (FIT)中索引條目的序列。這些分別是上文參看圖14A、 14C、 14E和15描述的序列。 FIT中的數(shù)據(jù)優(yōu)選地由存儲器控制器寫入并保持當前狀態(tài),而不用來自主機系統(tǒng)的幫助。 主機系統(tǒng)在將數(shù)據(jù)寫入到存儲器系統(tǒng)時供應路徑名、文件名和文件內數(shù)據(jù)的偏移量,但 主機不參與界定數(shù)據(jù)群組或數(shù)據(jù)群組存儲在存儲器單元陣列中的何處。在圖19的條目 中,圖14和15的存儲器單元區(qū)塊從左側以1開始編號。因此(例如)對于處于圖14C 中說明的狀態(tài)的文件,其第三數(shù)據(jù)群組(F6,D7)在圖19中記錄為存儲在區(qū)塊004 (從左側 開始第四區(qū)塊)中,從所述區(qū)塊的初始地址開始的D7字節(jié)。每一數(shù)據(jù)群組的長度優(yōu)選地 也包含在表的每一條目中。存儲器控制器在對文件的改變導致對文件的數(shù)據(jù)群組的修改時或以其它較不頻繁的 時間間隔重寫圖19所示的一個文件的序列索引條目??刂破骺蓪⑦@類變化存儲在其存儲 器中,且接著將其中許多變化一次寫入到快閃存儲器。任何一個時間一個文件僅存在一 組有效的索引;圖19中展示在不同時間界定文件的四組此類索引。存儲器系統(tǒng)控制器接 著視需要使用文件的當前組索引將額外數(shù)據(jù)編程到文件、從文件讀取數(shù)據(jù)、對文件的數(shù) 據(jù)進行垃圾收集,且可能用于其它操作。因此,如果各個文件索引條目以其文件偏移量 (Fx)的次序存儲則FIT較易于使用,但如果不,那么控制器當可以所述邏輯次序讀取 條目。存儲器控制器讀取特定文件的索引條目的最一般原因是在執(zhí)行主機命令的過程中。圖20展示維持并使用文件索引表(FIT)作為文件映射的一部分的優(yōu)選技術。使用 文件索引結構鏈來識別具有指定路徑名的文件內具有指定偏移地址的數(shù)據(jù)的物理位置。 文件映射包含目錄201,其具有與用于常規(guī)邏輯地址接口的標準磁盤操作系統(tǒng)(DOS)根 目錄和子目錄結構大體相同的邏輯結構。文件目錄201可存儲在存儲器系統(tǒng)內一個或一 個以上專用快閃區(qū)塊中。但文件目錄201優(yōu)選地由存儲系統(tǒng)而不是主機管理。本文圖12C 的主機目錄命令由存儲器系統(tǒng)控制器執(zhí)行,但在由控制器決定的時間且以由控制器決定 的方式執(zhí)行。優(yōu)選地不允許主機直接向文件目錄寫入。在文件目錄201中保持各識別目錄或文件的均勻大小的條目。使用一組連續(xù)的條目 來指定特定目錄內的元素。指定目錄的條目中的指針字段識別指定所述文件內的元素的 其它連續(xù)條目的開始。指定文件的條目中的指針字段界定相關聯(lián)的文件索引表(FIT) 203 內的區(qū)塊編號和文件編號。FIT203含有數(shù)據(jù)群組的均勻大小的條目,每一條目識別數(shù)據(jù)群組的開始的偏移量和 數(shù)據(jù)群組的存儲器系統(tǒng)內的物理位置。如果邏輯地址以字節(jié)粒度維持,那么每一FIT條 目的偏移量含有從指定數(shù)據(jù)群組的開始的文件的開始處起的指定數(shù)目的字節(jié)。類似地, 可以字節(jié)粒度指定數(shù)據(jù)群組的開始處的物理位置。上文參看圖19描述了不同時間示范性 文件的FIT條目的內容。為每一數(shù)據(jù)群組維持單獨條目。每一文件由文件內數(shù)據(jù)群組的 一組連續(xù)的索引條目界定。每文件的此類條目的數(shù)目通常將變化。主機供應的文件的路徑名用于遍歷文件目錄的層級以獲得FIT內的區(qū)塊編號和文件 編號。路徑名通常包含一個、兩個或兩個以上目錄和子目錄。這些用于訪問文件目錄201 內的含有試圖訪問的文件的目錄。接著搜索所述目錄內的文件名以查找主機供應的文件
名的條目205。當找到時,條目205為所述文件的FIT203中的一組連續(xù)的條目提供指針。 這些條目的性質與參看圖19描述的條目相同。接著將這些條目的偏移量與由主機供應的 偏移地址進行比較以便識別正確的條目207,且因此識別正確的數(shù)據(jù)群組。如果偏移量 不存在恒等匹配(可能經(jīng)常如此,因為包含在條目中的偏移量僅是數(shù)據(jù)群組的開始地址), 那么選擇識別內部含有所述偏移量的數(shù)據(jù)群組的條目。在此實例中,F(xiàn)IT203的選定條目 207含有包含主機正試圖訪問的數(shù)據(jù)的存儲器位置的物理區(qū)塊和字節(jié)。當首次創(chuàng)建文件或當FIT 203中文件的數(shù)據(jù)群組條目的位置改變時,存儲器系統(tǒng)控制 器分派圖20的所述文件的目錄條目205的指針。此指針是之前論述的文件—句柄的實例。 為了避免主機每當訪問文件時必須搜查文件目錄201的層級以便査找文件的FIT條目, 存儲器系統(tǒng)可將文件—句柄發(fā)送到主機使得其隨后可直接訪問打開的文件的FIT條目。圖21說明存儲器系統(tǒng)內的存儲文件目錄201中的各個條目的頁。 一些條目為文件目 錄201內的.目錄提供指針且其它條目為FIT 203內的數(shù)據(jù)提供指針。作為存儲在單個存儲 器頁中的許多條目之一的示范性條目209說明每一條目具有四個字段。第一字段含有主 機所分派的目錄或文件的名稱。第二字段含有主機所界定的目錄或文件的屬性。在目錄 的條目的情況下,第三字段中的指針指向文件目錄中的另一條目。在文件的條目的情況 下,第三字段含有針對FIT 203中的文件條目(例如,條目207)的指針。識別為"數(shù)據(jù) 群組"的第四字段在目錄的條目中為空,但在文件的條目的情況下,此字段指定含有文 件的數(shù)據(jù)的數(shù)據(jù)群組的數(shù)目,且因此指定文件的FIT 203中的條目的數(shù)目。將注意到,圖21中說明的文件目錄頁含有兩個部分。在最新近寫入的頁211中,目 錄條目(頁213中的在209處指示的一個目錄條目)和頁指針均存在。在其它目錄頁(例 如,頁213)中,存在目錄條目但頁的一區(qū)域含有過時頁指針。當前頁指針維持在最新 近寫入的頁(在此情況下為頁211)的相同部分中。目錄區(qū)塊中每一邏輯頁存在一個頁指 針,且頁指針將存儲器控制器導向對應于其正訪問的邏輯頁的物理頁。通過在最新近寫 入的目錄頁中維持頁指針,頁指針與目錄條目同時更新且無需接著更新另一頁。2004年 8月13日由Gorobets等人申請的第10/917,725號美國專利申請案中針對邏輯地址類型的 文件系統(tǒng)更詳細描述了此技術。在特定實施方案中,目錄區(qū)塊含有固定數(shù)目的邏輯頁,所述數(shù)目是存儲器單元區(qū)塊 中總共頁的指定分數(shù)(例如,50%)。目錄區(qū)塊優(yōu)選地是專用于存儲目錄頁的元區(qū)塊,但 可以是單個擦除區(qū)塊。其可具有與用于存儲數(shù)據(jù)群組的元區(qū)塊相同的并行性,或者其可 具有減小的并行性。當文件目錄區(qū)塊變滿時,通過在擦除原始區(qū)塊之前將每一邏輯頁的
有效版本復制到新的區(qū)塊而對文件目錄區(qū)塊進行壓縮。緊接著在已壓縮目錄區(qū)塊之后, 僅用目錄條目寫入新的復制區(qū)塊中的界定分數(shù)(例如,50%)的頁。剩余頁處于已擦除 狀態(tài)以允許寫入經(jīng)更新的或新的條目。當創(chuàng)建、修改或刪除目錄或文件的條目時,在目錄區(qū)塊的下一可用己擦除頁中重寫 含有所述目錄或文件的目錄的一組條目,因此使目錄的條目保持連續(xù)。這通過對先前含 有所述目錄的條目的頁執(zhí)行讀取/修改/寫入操作來進行。先前頁于是變得過時。所述邏輯 頁的頁指針條目也被更新以識別其新的物理頁。這可在與用于寫入所述目錄的條目相同 的頁編程操作中進行。如果創(chuàng)建條目將導致目錄的一組條目從頁中溢出,那么可改為將所述條目寫入另一 頁中作為第一條目。也可重寫現(xiàn)有頁以視需要將目錄的該組條目移動到頁的末端??稍?頁指針中重新分配目錄區(qū)塊內的邏輯頁編號以使目錄的條目保持連續(xù)。圖20的文件索引表(FIT) 203存儲組成裝置中所有文件的數(shù)據(jù)群組的索引。FIT存 儲在存儲器系統(tǒng)的一個或一個以上專用FIT區(qū)塊中。每一 FIT區(qū)塊可為多達最大數(shù)目的 文件存儲索引。借助來自文件目錄的邏輯指針來訪問FIT,所述邏輯指針指定由表索引 的文件中的一者。指針通過訪問作為最新近寫入的FIT頁217的一部分而提供的文件指 針來使用間接尋址,使得其不隨著在FIT區(qū)塊內更新和重寫索引而變化。文件目錄201中的文件條目(例如,條目205)的FIT指針具有兩個主要字段。第 一字段是FIT區(qū)塊編號,其識別組成FIT的邏輯FIT區(qū)塊中的一者。單獨管理分配給FIT 區(qū)塊編號的實際物理區(qū)塊地址。FIT指針的第二字段是FIT文件編號,其識別經(jīng)識別的 FIT區(qū)塊內的邏輯文件編號。通過存儲在FIT區(qū)塊的最新近寫入的頁內的特定文件指針 將邏輯文件編號轉換成物理文件條目位置。FIT不具有預先界定的大小,且FIT區(qū)塊的數(shù)目是數(shù)據(jù)被組織成的文件的數(shù)目和數(shù) 據(jù)群組的數(shù)目的函數(shù)。在裝置的操作期間將創(chuàng)建新的FIT區(qū)塊以及消除FIT區(qū)塊。參看圖22,各個FIT頁具有許多數(shù)據(jù)群組條目,每一數(shù)據(jù)群組一個條目219,如先 前參看圖19所描述。在此特定實例中,每一條目219含有四個字段。文件偏移量字段指 定文件內由所述條目識別的數(shù)據(jù)群組的開始的偏移地址。區(qū)塊地址字段指定存儲器系統(tǒng) 內含有數(shù)據(jù)群組的區(qū)塊或元區(qū)塊的物理地址。字節(jié)地址字段指定區(qū)塊或元區(qū)塊內頁的地 址,以及數(shù)據(jù)群組開始的頁內的字節(jié)。第四字段是數(shù)據(jù)群組的長度。數(shù)據(jù)群組長度可能 不是在所有情況下都是必需的,因為可根據(jù)鄰近條目的數(shù)據(jù)計算數(shù)據(jù)群組的長度。然而, 通過維持長度,不必每當需要數(shù)據(jù)群組的長度時均進行此計算。如果數(shù)據(jù)群組條目未以
其邏輯地址的次序寫入在FIT中(此時因而計算變得較困難),這是尤其有價值的信息。 優(yōu)選地通過一組連續(xù)的數(shù)據(jù)群組條目來界定主機文件,所述連續(xù)的數(shù)據(jù)群組條目一 起界定形成文件的有序數(shù)據(jù)群組。圖22的頁215中所示的陰影連續(xù)群組條目界定一個文 件,且頁217中的那些條目界定另一文件。對于FIT中的各個文件的每一者,在最后寫 入的FIT頁217中存在針對維持在所述區(qū)塊中的各個文件的一個文件指針221。文件指 針221利用FIT區(qū)塊內的特定FIT文件編號來界定文件的文件條目的開始。其含有兩個 字段。 一個字段是數(shù)據(jù)群組索引條目所駐存的頁的物理編號,且另一字段是所述頁內的 第一群組條目的編號。FIT區(qū)塊中每一可能的文件編號均存在文件指針,即文件指針的 數(shù)目等于FIT區(qū)塊中文件的最大數(shù)目。文件指針條目中的保留代碼(未圖示)指示,F(xiàn)IT 區(qū)塊中特定文件編號未被使用。盡管文件指針可存在于其它FIT頁中,但其僅在FIT區(qū) 塊的最新近寫入的頁中有效。FIT區(qū)塊優(yōu)選地是專用于存儲FIT頁的元區(qū)塊。其可具有與用于存儲數(shù)據(jù)群組的元 區(qū)塊相同的并行性,或者其可具有減小的并行性。可改為使用單個擦除區(qū)塊。緊接著在 已壓縮FIT區(qū)塊之后,區(qū)塊中僅界定的分數(shù)(例如,50%)的頁將含有條目。剩余頁將 處于己擦除狀態(tài)以允許寫入經(jīng)更新的或新的條目。當維持較大數(shù)目的文件時,可能必需 一個以上FIT區(qū)塊。通過將一個或一個以上完整文件的數(shù)據(jù)群組條目寫入在FIT區(qū)塊的下一可用的未編 程的頁中來更新FIT。還更新文件的文件指針條目以識別文件條目的新的位置。在同一 頁編程操作中寫入文件數(shù)據(jù)群組條目和文件指針兩者。接著,文件條目的先前位置在FIT 區(qū)塊中變得過時?;蛘撸赏ㄟ^將文件條目寫入在不同的FIT區(qū)塊中或新的FIT區(qū)塊中 來更新文件條目。在此情況下,應更新兩個區(qū)塊中的文件指針,且應修改文件目錄中文 件的邏輯指針。當FIT區(qū)塊已滿時,以壓縮形式將有效群組條目復制到新的已擦除區(qū)塊,并擦除先 前FIT區(qū)塊。邏輯FIT區(qū)塊編號和邏輯文件編號并不因此操作而改變。應限制數(shù)據(jù)群組 條目的數(shù)目,使得在壓縮的FIT區(qū)塊中僅編程界定的分數(shù)(例如,50%)的頁。如果必 要,應將文件條目移動到其它FIT區(qū)塊,且修改其在文件目錄中的邏輯指針。需要將單個文件的所有FIT條目保持在一個頁或元頁中。這使得讀取文件的所有條 目相對容易。盡管文件的FIT條目可通過在每一者中包含下一者的物理地址而鏈接在一 起,但將可能需要讀取一個以上FIT頁或元頁。還需要使FIT條目在頁內保持連續(xù)。這 可能導致隨著FIT條目的數(shù)目增加而頻繁地寫入新的頁,尤其當打開關閉的文件并向其添加數(shù)據(jù)群組時。當將新的FIT條目寫入到新的頁中時,從另一頁復制現(xiàn)有條目并將其 連同新條目一起寫入在新的頁中。檢索現(xiàn)有條目的先前頁中由過時數(shù)據(jù)占據(jù)的空間以在 壓縮FIT區(qū)塊時使用。如上所述,各個數(shù)據(jù)群組包含在單個區(qū)塊或元區(qū)塊內,可在區(qū)塊內的任何字節(jié)邊界 開始,且可具有任何整數(shù)個字節(jié)的長度。可在將每一數(shù)據(jù)群組寫入到存儲器中時由控制 器向其添加標頭。此標頭可包含兩個字段。第一字段含有識別數(shù)據(jù)群組的開始的代碼。 此代碼對于所有數(shù)據(jù)群組可能是相同的,且被選擇作為位圖案,所述位圖案很少存在于 存儲為群組的一部分的數(shù)據(jù)中,但所述代碼不一定從不出現(xiàn)在此類數(shù)據(jù)中。存儲器控制 器可通過以下方式來找到數(shù)據(jù)群組的開始掃描所存儲的數(shù)據(jù)以獲得此代碼并接著在其 找到代碼的位圖案時確認其確實是數(shù)據(jù)群組的開始而不是群組內的數(shù)據(jù)。標頭的第二字 段允許進行此確認。此第二字段是FIT203 (圖20和22)中針對含有數(shù)據(jù)群組的文件的 文件條目的指針。第二字段界定FIT區(qū)塊編號和FIT文件條目。控制器接著讀取FIT文 件條目以了解其是否指回到從中讀取代碼的數(shù)據(jù)群組。如果是,那么確認所述代碼是其 處于數(shù)據(jù)群組的標頭內的指示。如果不是,那么知道代碼的位圖案是從其它數(shù)據(jù)中讀取 的,因此所述位圖案被作為數(shù)據(jù)群組標頭而忽略。通過包含此標頭作為存儲在各個數(shù)據(jù)群組中的數(shù)據(jù)的一部分,存儲器中的任何數(shù)據(jù) 群組所屬的文件可通過讀取其標頭并訪問標頭所指向的FIT條目來確定。FIT條目219 (圖22)可包含文件ID。這里使用此能力(例如)在共用區(qū)塊的垃圾收集期間識別共用 區(qū)塊中的數(shù)據(jù)群組。如果因為共用區(qū)塊內的一個或一個以上其它數(shù)據(jù)群組過時而開始垃 圾收集,那么需要能夠識別每一剩余有效數(shù)據(jù)群組所屬的文件。代替于使標頭成為每一數(shù)據(jù)群組的一部分,可每文件提供一個標頭。有利的是當文 件中的數(shù)據(jù)群組的FIT條目的位置已知時能夠識別文件的路徑全名,且文件標頭使這一 目標成為可能??商峁┐藰祟^作為文件的FIT中的條目組中的第一條目,或作為文件目 錄中的目錄的一組條目中的第一條目。此文件標頭含有將其識別為FIT文件標頭的代碼,和指向其的目錄條目的反向指針。 FIT文件標頭還可含有額外信息,例如文件的長度和數(shù)據(jù)群組的數(shù)目。或者,標頭條目 可占據(jù)一個或一個以上正常條目的空間。類似地,目錄標頭條目含有將其識別為目錄標頭的代碼,和指向其的目錄條目的反 向指針。在根目錄的標頭中明確地識別所述根目錄。目錄標頭還可含有額外信息,例如 目錄中條目的數(shù)目。 作為使用此類數(shù)據(jù)群組或文件標頭的替代,可將索引寫入在每一共用區(qū)塊的末端以 識別共用區(qū)塊中每一數(shù)據(jù)群組所涉及的文件。當關閉共用區(qū)塊時,可寫入此索引。所述 索引優(yōu)選地包含共用區(qū)塊內的所述區(qū)塊中的每一數(shù)據(jù)群組開始處的物理字節(jié)地址,和所 述數(shù)據(jù)群組的FIT條目的指針。接著可參考數(shù)據(jù)群組的索引條目中提供的FIT條目來確 定每一共用區(qū)塊數(shù)據(jù)群組所屬的文件。如果需要具有針對存儲在存儲器中的數(shù)據(jù)群組的文件標識的某一冗余度,那么即使 使用這些共用區(qū)塊索引,也可仍然保留上述數(shù)據(jù)群組標頭。由于存儲器裝置管理文件目錄和文件索引,所以其可控制向主機報告的裝置配置參 數(shù)。當如當前商業(yè)系統(tǒng)中由主機管理裝置的文件系統(tǒng)時,這通常是不可能的。存儲器裝 置可改變所報告的存儲容量,例如整個裝置的容量和可用的未寫入容量兩者。用于直接文件接口處的文件的路徑名可識別存儲裝置本身的ID和存儲裝置內的隔 區(qū)。可能有利的是,允許存儲器裝置修改隔區(qū)的大小和數(shù)目。如果隔區(qū)變滿,那么可將 來自一個或一個以上其它隔區(qū)的未使用的容量重新分派給已滿的隔區(qū)。類似地,如果創(chuàng) 建了新的隔區(qū),那么可分派來自其它隔區(qū)的未使用的容量。如上所述,裝置可修改各個 隔區(qū)的所報告的容量。圖20和21所示的目錄結構在目錄條目中使用指針來識別所述目錄內的元素的一組 其它連續(xù)條目的開始。此指針指向目錄區(qū)塊內的邏輯頁,并在對應于所述邏輯頁的物理 頁改變時保持不變。然而,目錄內元素的數(shù)目頻繁地變化,且特定目錄的一組條目將頻 繁地需要從一個邏輯頁移動到另一邏輯頁,或在其當前邏輯頁內移動。這可導致頻繁地 需要更新目錄區(qū)塊內的指針參考。圖23中展示圖21的目錄結構的條目索引技術的替代 技術,其中用相同參考標號但添加撇號(')來識別其相應的元素。圖23的結構與圖22的FIT的結構相同,但具有涉及目錄的不同的術語。指向特定 條目,而不是如圖21中僅指向頁。這提供了一種比上文參看圖21描述的方法有效的針 對指定目錄的一組條目的目錄區(qū)塊內間接尋址的方法。適當?shù)氖轻槍δ夸?圖23)和FIT (圖22)區(qū)塊使用相同索引方案,因為兩者具有非常類似的特性和要求。其各存儲與目 錄或文件有關的若干組連續(xù)條目。 一組條目的更新可包含改變現(xiàn)有條目的內容或改變條 目的數(shù)目。參看圖22描述的更新FIT條目的方法使得含有FIT條目的物理區(qū)塊中一定分數(shù)(例 如,50%)的頁在壓縮區(qū)塊之后處于已擦除狀態(tài)。這因而允許將經(jīng)更新的FIT條目寫入 到經(jīng)壓縮區(qū)塊的剩余部分中。所有FIT區(qū)塊均包含此容量開銷,即使當由區(qū)塊索引的文
件實際上均不打開時也如此。因此,F(xiàn)IT占據(jù)比所需更多的存儲器容量。替代性FIT更新方法促使將經(jīng)更新的FIT條目組寫入在單獨FIT更新區(qū)塊中,而不 是寫入到其最初所處的區(qū)塊中的可用的已擦除容量中。圖24和25分別概述利用更新區(qū) 塊的針對文件目錄和FIT的索引技術。所述技術是相同的,只存在目錄與FIT的術語差 異。以下描述涉及更新如圖25所示的FIT區(qū)塊中的群組條目,但同等適用于更新文件目 錄(圖24)中的群組條目。從FIT區(qū)塊讀取群組條目如上文所述。FIT指針的FIT區(qū)塊編號字段界定邏輯FIT 區(qū)塊。FIT區(qū)塊列表包含在快閃中的數(shù)據(jù)結構中,且提供信息以將FIT區(qū)塊編號轉換成 其所處的區(qū)塊的物理地址。每當在壓縮或合并操作期間移動FIT區(qū)塊時,更新FIT區(qū)塊 列表中的區(qū)塊地址。所述區(qū)塊中最新近寫入的頁的文件指針區(qū)域允許將FIT指針中的FIT文件編號值轉 換成指定特定文件的文件群組條目組的開始的文件指針。接著可從FIT區(qū)塊讀取文件群 組條目。當更新文件的群組條目組中的群組條目的內容或群組條目的數(shù)目時,在已擦除頁中 重寫完整組的條目。(這是基于以下假定頁是快閃存儲器中最小的編程單位,擦除操作 之間禁止對同一頁進行多個寫入操作。)所述組視需要可占據(jù)多個頁。在當前描述的技術中,此頁是FIT區(qū)塊中的下一可用的頁。在經(jīng)修正的方案中,此 頁是單獨FIT更新區(qū)塊中的下一可用的頁。FIT更新區(qū)塊具有與FIT區(qū)塊相同的頁結構, 如圖23所示。其存在通過FIT更新區(qū)塊列表中目標FIT區(qū)塊編號的存在來識別,所述 FIT更新區(qū)塊列表還含有更新區(qū)塊的物理區(qū)塊地址和對應于原始FIT文件編號的更新文 件編號。正更新的每一 FIT區(qū)塊可能存在單獨的FIT更新區(qū)塊,或優(yōu)選地,F(xiàn)IT更新區(qū) 塊可涉及多個FIT區(qū)塊。單個FIT區(qū)塊也可涉及多個FIT更新區(qū)塊。當FIT更新區(qū)塊變得被填滿時,可將其有效數(shù)據(jù)以壓縮形式寫入到已擦除區(qū)塊,所 述已擦除區(qū)塊變成新的FIT更新區(qū)塊。如果更新僅涉及幾個文件,那么可能存在單個頁 那樣少的有效數(shù)據(jù)??蓪⒍鄠€FIT更新區(qū)塊壓縮在一起成為單個區(qū)塊。如果更新區(qū)塊涉 及可能繼續(xù)被更新的仍然打開的文件,那么區(qū)塊壓縮優(yōu)于區(qū)塊合并。當在FIT更新區(qū)塊中更新文件的群組條目時,原始FIT區(qū)塊中的所述文件的條目變 得過時。在某一階段,原始FIT區(qū)塊必須經(jīng)歷垃圾收集操作以對其進行清除。這可通過 將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ū)塊結構歸并成單個索引區(qū)塊結構,其可含有 目錄條目和文件群組條目兩者。當存在單獨的目錄區(qū)塊和FIT區(qū)塊結構時,或當存在組 合的索引區(qū)塊結構時,索引更新區(qū)塊可充當目錄條目和文件群組條目兩者的更新區(qū)塊。將認識到,上文參看圖20-25描述的文件目錄和FIT是以DOS系統(tǒng)為模型的?;蛘?, 其可以Linux、 Unix、 NT文件系統(tǒng)(NTFS)或某一其它已知的操作系統(tǒng)為模型。特定存儲器系統(tǒng)操作實例圖26-32的操作流程圖提供如上文參看圖2-6描述而構造的但使用參看圖9和10-22 描述的直接文件接口技術的特定組合的存儲器系統(tǒng)的操作的實例。圖26-32的流程圖中 包含的功能主要通過控制器ll (圖2)執(zhí)行其所存儲的固件來實行。首先參看圖26,圖中展示總體系統(tǒng)操作。在第一步驟251中,初始化存儲器系統(tǒng), 其包含處理器27 (圖2)執(zhí)行ROM 29中的引導代碼以將固件從非易失性存儲器加載到 RAM 31中。初始化之后,在此固件的控制下,存儲器系統(tǒng)接著期待來自主機系統(tǒng)的命 令,如步驟253所指示。如果有主機命令待決,那么從圖12中列舉的那些命令中識別所 述命令。如果是"讀取"命令(圖12A),那么其在步驟255中識別并通過257處指示的 過程執(zhí)行,下文參看圖27更完整地描述所述過程。如果不是"讀取"命令,那么圖12A 的"寫入"、"插入"或"更新"編程命令中的任一者在圖26的步驟259處識別并通過過 程261來執(zhí)行,所述過程261是圖28的主題。如果是"刪除"或"擦除"命令(圖12B), 那么其在步驟262中識別并在步驟263中執(zhí)行,如圖30中更詳細描述。來自主機的"閑 置"命令(圖12D)在圖26的264處識別并導致圖31的流程圖中所示的垃圾收集操作 265。圖26 - 32的此實例是針對如先前所述以元頁和元區(qū)塊操作的存儲器系統(tǒng)描述的, 但也可由按頁和/或區(qū)塊組織的存儲器系統(tǒng)執(zhí)行。如果此特定實例中,主機命令是除了 "讀取"、"寫入"、"插入"、"更新"、"刪除"、 "擦除"或"閑置"以外的命令,那么此另一命令由圖26的步驟267執(zhí)行。這些其它命 令中存在促使將垃圾收集操作添加到隊列的命令,例如圖12B中列舉且上文描述的"關 閉"和"之后關閉"命令。通過步驟257、 261、 263、 265或267中的任一者執(zhí)行所接收
的命令之后,下一步驟268詢問優(yōu)先垃圾收集隊列是否為空。如果是,那么處理返回步 驟253以執(zhí)行待決的主機命令(如果有一個存在的話)。如果不是,那么處理返回步驟 265以繼續(xù)進行垃圾收集,而不是允許執(zhí)行另一主機命令的可能性。對于參看26 - 32的 流程圖描述的特定實例,存在上文描述的五個不同的垃圾收集隊列針對過時元區(qū)塊(僅 具有過時數(shù)據(jù)的元區(qū)塊)和具有過時數(shù)據(jù)的共用元區(qū)塊的兩個優(yōu)先隊列,其中過時數(shù)據(jù) 是由于"擦除"命令而產(chǎn)生的;針對具有過時數(shù)據(jù)的過時元區(qū)塊和共用元區(qū)塊的另外兩 個隊列,其中過時數(shù)據(jù)是由于除了執(zhí)行"擦除"命令以外的原因而產(chǎn)生的;以及針對待 進行垃圾收集的文件的一個隊列。對于三個非優(yōu)先隊列中列舉的垃圾收集,給予另一待 決的主機命令優(yōu)先權以實行所列舉的垃圾收集操作。然而,對于優(yōu)先隊列中的垃圾收集, 給予垃圾收集優(yōu)于執(zhí)行新的主機命令的優(yōu)先權。也就是說,可使主機一直等到任何優(yōu)先 垃圾收集操作完成為止,然后可執(zhí)行新的主機命令。這是因為主機先前已將優(yōu)先權給予 通過使用"擦除"命令而擦除優(yōu)先隊列中的元區(qū)塊中的數(shù)據(jù)。優(yōu)先垃圾收集還導致以相 對較少的處理時間產(chǎn)生額外的已擦除元區(qū)塊。但如果不是優(yōu)先的,那么當主機閑置時在 后臺執(zhí)行垃圾收集,或當有必要維持已擦除區(qū)塊集區(qū)時將垃圾收集與其它操作交錯。如 果通過步驟268確定無待決的優(yōu)先垃圾收集操作,那么下一步驟是步驟253,其中執(zhí)行 新的主機命令(如果有的話)。返回圖26的步驟253,如果無待決的主機命令,那么,如果通過步驟269確定主機 已不活動或閑置持續(xù)預定的時間長度或最新近接收的主機命令是"閑置"命令,或者通 過步驟264確定待決的主機命令是"閑置"命令,那么實行垃圾收集265,包含非優(yōu)先 的垃圾收集。在這些情況下,因而最有可能完全在后臺執(zhí)行垃圾收集。圖26的步驟257中的"讀取"命令的執(zhí)行是圖27的流程圖的主題。第一步驟271 是讀取文件索引表(FIT),如上文參看圖19和22所描述。主機"讀取"命令包含文件 ID和讀取將開始的文件內的偏移量(見圖12A)。待讀取的文件的所有FIT條目或其部 分優(yōu)選地從非易失性存儲器讀取到控制器存儲器31 (圖2)中,以避免每當需要來自FIT 的某些數(shù)據(jù)時必須從非易失性存儲器讀取FIT。在步驟273中,將數(shù)據(jù)群組數(shù)目計數(shù)器 初始化為組成開始偏移量所處的所請求文件的數(shù)據(jù)群組的數(shù)目。這通過將主機指定的開 始偏移量與主機指定的文件的FIT條目中的數(shù)據(jù)群組的偏移量進行比較來進行。接著, 在步驟275中,將數(shù)據(jù)群組長度計數(shù)器初始化為初始數(shù)據(jù)群組內從主機供應的偏移量到 數(shù)據(jù)群組末端的數(shù)據(jù)的量。 一次讀取一個數(shù)據(jù)群組,且步驟273和275設置管理對第一 數(shù)據(jù)群組的讀取的兩個計數(shù)器。根據(jù)初始數(shù)據(jù)群組的FIT條目確定待讀取的數(shù)據(jù)在非易
失性存儲器內的開始物理字節(jié)地址。群組內數(shù)據(jù)的邏輯偏移和物理字節(jié)地址線性相關, 因此如果不在數(shù)據(jù)群組的開始處開始讀取,那么根據(jù)文件內的主機供應的開始偏移量計 算開始字節(jié)地址?;蛘?,為了簡化數(shù)據(jù)群組長度計數(shù)器的初始化,可將每一數(shù)據(jù)群組的 長度添加到其FIT的記錄219 (圖22)。對于對流程圖的此描述的其余部分,假定存儲器系統(tǒng)以元區(qū)塊操作且以元頁為單位 來讀取和編程數(shù)據(jù),如先前所述。在步驟277中,從存儲在非易失性存儲器中的包含開 始字節(jié)地址的初始數(shù)據(jù)群組讀取數(shù)據(jù)元頁。接著,通常將所讀取的數(shù)據(jù)寫入到控制器緩 沖存儲器(例如,圖2的RAM 31)中以便傳遞到主機。接著,在步驟279處,使數(shù)據(jù) 群組長度計數(shù)器遞減所述一個元頁。接著,在步驟281中,讀取所述計數(shù)器以確定其是 否已達到零。如果不是,那么有初始數(shù)據(jù)群組的更多數(shù)據(jù)待讀取。但在返回步驟277以 依次讀取下一數(shù)據(jù)元頁之前,步驟283檢查主機是否已發(fā)布另一命令。如果是,那么終 止讀取操作,且過程返回圖26的步驟253以識別所接收的命令并接著執(zhí)行所述命令。如 果不是,那么通過在圖27的步驟277和279中讀取初始數(shù)據(jù)群組的下一元頁而繼續(xù)讀取 初始數(shù)據(jù)群組。這一直繼續(xù),直到通過步驟281確定數(shù)據(jù)群組長度計數(shù)器已達到零為止。當此發(fā)生時,在步驟285中再次讀取文件的FIT條目以在步驟287中確定是否有當 前文件的任何另外的數(shù)據(jù)群組待讀取。如果是,那么在步驟289中更新數(shù)據(jù)群組數(shù)目計 數(shù)器以識別下一數(shù)據(jù)群組,且在步驟291中將數(shù)據(jù)群組長度計數(shù)器初始化為新群組中數(shù) 據(jù)的長度。接著,如果通過步驟283確定無其它主機命令待決,那么在步驟277中讀取 新的數(shù)據(jù)群組的第一元頁。接著,針對新的數(shù)據(jù)群組的每一元頁重復步驟277和279, 直到讀取了其所有數(shù)據(jù)為止,此時步驟285和287確定是否存在又一數(shù)據(jù)群組,依此類 推。當通過步驟287確定主機供應的偏移量之后的文件的所有數(shù)據(jù)群組均已被讀取時, 處理返回圖26的步驟253以執(zhí)行另一主機命令。在將文件用作環(huán)形緩沖器的特殊情況下,可在圖27的步驟287之后重復對文件的讀 取,而不是返回圖26的步驟253。這可在以下情況下發(fā)生讀取期間通過在步驟283中 響應將數(shù)據(jù)寫入到當前文件的主機命令而由主機對所述相同文件的數(shù)據(jù)進行編程。圖28的流程圖中給出圖26的數(shù)據(jù)編程操作261的實例。當從主機接收圖12A的數(shù) 據(jù)編程命令中的一者時,所述命令包含數(shù)據(jù)將被寫入到的文件的文件ID。第一步驟295 確定所述指定的文件當前是否打開以用于編程。如果是,那么下一步驟297確定控制器 緩沖器(例如,圖2的RAM 31)中是否存在針對所述文件的數(shù)據(jù)。主機系統(tǒng)將數(shù)據(jù)傳 遞到控制器緩沖存儲器中,且接著存儲器系統(tǒng)控制器將數(shù)據(jù)傳遞到快閃存儲器中。但如果通過步驟295確定主機指定的文件未打開,那么下一步驟299詢問當前由存 儲器系統(tǒng)打開以用于編程的文件的數(shù)目是否等于或大于存儲器系統(tǒng)允許同時打開的最大 數(shù)目Nl。數(shù)目Nl預設于存儲器系統(tǒng)內,且可為5、 8或某一其它文件數(shù)目。如果打開的 文件的數(shù)目小于N1,那么下一步驟301促使通過提供向新的文件編程數(shù)據(jù)所必需的系統(tǒng) 資源而打開所述文件,且處理進行到步驟297。然而,如果步驟299中確定打開的文件 的數(shù)目等于或大于N1,那么首先需要關閉當前打開的文件(如步驟303所指示),然后 才可在步驟301中打開新的文件。選擇要在步驟303中關閉的打開的文件的標準可變化, 但最一般地將是主機最久將數(shù)據(jù)寫入到的打開的文件。從這一情況推測,主機不太可能 在不久的將來將數(shù)據(jù)寫入到此文件。但如果其確實這樣做,那么在關閉另一打開的文件 之后再次打開所述文件(如果那時有必要的話)。當在步驟297中確定當前文件的至少一個數(shù)據(jù)元頁在控制器緩沖器中時,下一步驟 305確定存儲器陣列內的元區(qū)塊是否已打開以用于編程。如果是,那么接著在步驟307 中,將數(shù)據(jù)從控制器緩沖存儲器編程到打開的元區(qū)塊中。如果不是,那么在步驟308中, 通過提供向元區(qū)塊編程數(shù)據(jù)所必需的系統(tǒng)資源而首先打開所述元區(qū)塊。在此實例中,將 數(shù)據(jù)以一次一個元頁為單位寫入到打開的存儲器元區(qū)塊中。 一旦寫入了此數(shù)據(jù)單位,下 一步驟309就確定打開的寫入元區(qū)塊是否充滿數(shù)據(jù)。如果不是,那么過程通常通過步驟 311和313而前進并返回步驟297以重復對當前打開的文件中的下一數(shù)據(jù)元頁進行編程的 過程。然而,如果通過步驟309確定寫入元區(qū)塊已滿,那么在步驟315中關閉所述元區(qū)塊, 且在步驟317中更新FIT,其中包含關閉當前數(shù)據(jù)群組,因為已達到存儲器元區(qū)塊邊界。 接著,在步驟318中,更新較低優(yōu)先權的過時元區(qū)塊垃圾收集隊列的元區(qū)塊條目。在步 驟317中的FIT更新期間,確定填充寫入元區(qū)塊是否已創(chuàng)建另一含有當前文件的所有過 時數(shù)據(jù)或作為含有當前文件的過時數(shù)據(jù)的共用元區(qū)塊的元區(qū)塊。如果是,那么通過步驟 318將所述元區(qū)塊添加到適當?shù)妮^低優(yōu)先權元區(qū)塊隊列以進行垃圾收集。處理接著返回 步驟311并經(jīng)過步驟313而返回步驟297。這次通過步驟305和307,步驟308將打開新 的寫入元區(qū)塊,因為先前的元區(qū)塊剛剛通過步驟315關閉。已通過包含步驟307的路徑寫入每一數(shù)據(jù)元頁之后,步驟311詢問當前存在于已擦 除元區(qū)塊集區(qū)中的元區(qū)塊的數(shù)目是否超過已確定為有效地操作存儲器系統(tǒng)所必需的最小 數(shù)目N2。如果是,那么步驟313詢問是否己接收到另一主機命令。如果無其它主機命令 待決,那么針對待編程到存儲器中的下一數(shù)據(jù)元頁重復步驟297。但如果已接收到主機 命令,那么在步驟319中更新FIT以關閉已寫入的數(shù)據(jù)群組。在步驟320 (類似于上述 步驟318)中更新較低優(yōu)先權過時元區(qū)塊垃圾收集隊列中的元區(qū)塊條目之后,過程返回 圖26的步驟253。但如果在圖28的步驟311中確定缺乏用于存儲數(shù)據(jù)的已擦除元區(qū)塊(等于或小于預 設數(shù)目N2),那么執(zhí)行子例行程序以在前臺對文件或共用元區(qū)塊進行垃圾收集,以便增 加已擦除元區(qū)塊的數(shù)目。此垃圾收集優(yōu)選地不在將每一數(shù)據(jù)元頁寫入到存儲器中之后執(zhí) 行而是只是在己寫入每N3個元頁之后執(zhí)行。寫入元區(qū)塊元頁編程計數(shù)器維持己被連續(xù)編 程而其間沒有任何垃圾收集的主機數(shù)據(jù)元頁的數(shù)目的計數(shù)。每當執(zhí)行垃圾收集時將此計 數(shù)器重設為零,且接著每當編程一個數(shù)據(jù)元頁時使此計數(shù)器遞增1。在步驟321中,確 定所述計數(shù)是否超過預定數(shù)目N3。如果不是,那么在步驟323中使計數(shù)器遞增1以記錄 在步驟307中將一元頁寫入到存儲器中。但如果編程計數(shù)器的計數(shù)超過數(shù)目N3,那么通 過步驟325、 327和329發(fā)生垃圾收集,之后在步驟331中將編程計數(shù)器重設為零。在所述過程中的此點處進行垃圾收集的目的是為已擦除元區(qū)塊集區(qū)創(chuàng)建額外的已擦 除元區(qū)塊。但優(yōu)選地,每次僅通過執(zhí)行步驟325、 327和329而執(zhí)行垃圾收集操作的一部 分。將復制操作劃分為隨著時間散開的較小的操作以便使存儲器無法供主機使用的時間 間隔的持續(xù)時間最小化,借此使對數(shù)據(jù)編程性能的不良影響最小化。并且,由于同一原 因,僅每隔N3個編程循環(huán)執(zhí)行部分垃圾收集操作。盡管數(shù)目N2和N3可預設于系統(tǒng)中, 但其可替代地在存儲器系統(tǒng)的操作期間確定以適合可能遇到的特定情況。由于對文件或共用元區(qū)塊進行的完整的垃圾收集操作提供一個或一個以上額外已擦 除元區(qū)塊所需的時間的大部分由將有效數(shù)據(jù)復制到一個或一個以上復制元區(qū)塊中占據(jù), 所以正是此復制在圖28中主要與數(shù)據(jù)編程交錯。步驟325選擇前臺模式進行垃圾收集 329,這參看圖31的流程圖進行描述。接著,將數(shù)據(jù)群組的某一預設數(shù)目的元頁從正進 行垃圾收集的元區(qū)塊連續(xù)復制到先前已擦除的復制元區(qū)塊中。步驟327重設以此交錯方 式復制的元頁的計數(shù)器,使得在步驟329中,在操作從垃圾收集步驟中離開并返回到數(shù) 據(jù)編程循環(huán)中之前復制預設數(shù)目的元頁。接著,在每一垃圾收集操作329之后,通過步 驟331重設步驟321所參考的寫入元區(qū)塊元頁編程計數(shù)器。這促使在前臺發(fā)生另一垃圾 收集操作之前將N3個數(shù)據(jù)元頁寫入到存儲器中,借此使由于垃圾收集引起的數(shù)據(jù)編程的 任何延遲散開。圖29的時間線說明了此垃圾-編程算法的交錯性質。在垃圾收集操作之間將來自主 機的N3個數(shù)據(jù)元頁連續(xù)寫入到存儲器中。將每一垃圾收集操作限制為復制N4個數(shù)據(jù)元
頁,其后發(fā)生對另外N3個數(shù)據(jù)元頁的編程。當處于垃圾收集階段時,可促使主機等待存 儲器系統(tǒng)完成垃圾收集然后將額外的數(shù)據(jù)元頁傳遞到存儲器系統(tǒng)控制器緩沖器。圖30的流程圖展示圖26的刪除文件例行程序263的執(zhí)行。其主要目的是,識別具 有正被刪除的文件的過時數(shù)據(jù)的過時區(qū)塊和共用區(qū)塊,且接著將那些區(qū)塊放置于適當?shù)?垃圾收集隊列中。當存儲器系統(tǒng)接收到"刪除"或"擦除"命令(圖12B)以及待刪除 的文件的名稱或其它標識時,步驟335將數(shù)據(jù)群組數(shù)目計數(shù)器初始化為零。在步驟337 中,讀取文件目錄和文件索引表(FIT)以獲得存儲在存儲器中的組成指定文件的數(shù)據(jù)群 組的身份。接著,通過遞增以邏輯順序指向每一數(shù)據(jù)群組的數(shù)據(jù)群組數(shù)目計數(shù)器來一次 一個地檢査文件的每一數(shù)據(jù)群組。對于數(shù)據(jù)群組的第一詢問339是,其是否處于共用元區(qū)塊中。如果是,那么步驟341 將所述元區(qū)塊添加到共用區(qū)塊垃圾收集隊列中的一者中。如果正通過"擦除"命令刪除 文件,那么將元區(qū)塊放置于優(yōu)先的共用元區(qū)塊隊列中,且如果正通過"刪除"命令刪除 文件,那么將元區(qū)塊放置于另一共用元區(qū)塊隊列中。調度具有待刪除的文件的數(shù)據(jù)群組 的任何共用元區(qū)塊進行垃圾收集。如果通過步驟339確定數(shù)據(jù)群組不在共用元區(qū)塊中, 那么下一詢問343確定數(shù)據(jù)群組是否通過處于過時元區(qū)塊垃圾收集隊列中而在已被調度 進行垃圾收集的元區(qū)塊內。如果元區(qū)塊已被調度進行垃圾收集,那么不應將其再次添加 到所述相同隊列。但如果未如此調度,那么通過步驟345將其添加到過時元區(qū)塊垃圾收 集隊列中的一者中。如果正通過"擦除"命令刪除文件,那么將元區(qū)塊放置于優(yōu)先的過 時元區(qū)塊隊列中,且如果正通過"刪除"命令刪除文件,那么將元區(qū)塊放置于另一過時 元區(qū)塊隊列中。在已執(zhí)行步驟341或345中的任一者或者步驟343的詢問是肯定的之后,完成針對 一個數(shù)據(jù)群組的過程。下一步驟347遞增數(shù)據(jù)群組數(shù)目計數(shù)器。接著,作出詢問349: 文件中是否存在另一數(shù)據(jù)群組。如果是,那么處理返回步驟339并針對所述下一數(shù)據(jù)群 組而重復。如果不是,那么知道含有待刪除的文件的數(shù)據(jù)的所有元區(qū)塊已輸入到過時和 共用元區(qū)塊垃圾收集隊列中。接著,在步驟351中更新FIT以使待刪除的文件的數(shù)據(jù)群 組記錄過時。接著,通常在壓縮FIT時消除FIT中的過時數(shù)據(jù)群組的記錄。在最后步驟 353中,更新文件目錄201 (圖20)以從中移除被刪除的文件。圖31的流程圖說明圖26的垃圾收集操作265和圖28的垃圾收集操作329的特定實 例。當主機發(fā)送"閑置"命令(圖26的步驟264)或主機已閑置持續(xù)一段時間時在后臺 開始此算法(圖26的步驟265),或者當少于N2個已擦除元區(qū)塊保持在已擦除元區(qū)塊集 區(qū)中時在編程操作期間在前臺開始此算法(圖28的步驟329)。第一詢問355是是否存 在正在進行的尚未完成的垃圾收集操作。從對圖31的此描述中將看到,處理會在某些情 形下脫離垃圾收集,例如當主機發(fā)布另一命令時或當數(shù)據(jù)復制與其它操作交錯時。因此, 如果有未完成的垃圾收集操作待決,那么接下來是步驟357,因為待決的垃圾收集被給 予優(yōu)先權。但如果通過步驟355確定不存在待決的垃圾收集操作,那么下一步驟356查 看各個垃圾收集隊列以了解其中是否存在至少一個條目。如果是,那么下一步驟358根 據(jù)上述優(yōu)先權選擇所述條目中的一者(如果存在一個以上)。過時元區(qū)塊區(qū)塊隊列中次序 上處于下一個的元區(qū)塊的垃圾收集通常將相對于待進行垃圾收集的共用元區(qū)塊隊列上的 元區(qū)塊或文件隊列上的文件而被給予優(yōu)先權。這是因為可借助對過時元區(qū)塊進行垃圾收 集而更迅速地增加己擦除元區(qū)塊集區(qū)的大小,因為無需復制任何數(shù)據(jù)。下一組步驟360、 362和366確定對于選定隊列條目的垃圾收集的目標,因為所述過 程對于文件、共用元區(qū)塊和過時元區(qū)塊是不同的。詢問360詢問正在進行垃圾收集的是 否是文件。如果是,那么在步驟370和372中依次讀取所述文件的FIT條目以設定特定 計數(shù)器和計數(shù)。在步驟370中,將第一計數(shù)器設定為文件中數(shù)據(jù)群組的數(shù)目,且將第二 計數(shù)器設定為文件的第一數(shù)據(jù)群組中的數(shù)據(jù)的元頁的數(shù)目(長度)。如果其長度不是其條 目的一部分,那么可根據(jù)FIT數(shù)據(jù)群組條目計算此長度?;蛘?,每一數(shù)據(jù)群組的長度可 作為其條目的一部分而包含在FIT中,如圖20和22所示,從而不需要每當需要時均計 算數(shù)據(jù)群組長度。在步驟372中,將第三計數(shù)器設定為存儲在含有過時數(shù)據(jù)或來自其它 文件的數(shù)據(jù)的存儲器區(qū)塊中的當前文件數(shù)據(jù)的元頁的數(shù)目。這些是當前文件的需要移動 的數(shù)據(jù)。此第三計數(shù)優(yōu)選地忽略文件內所有過時和無效的數(shù)據(jù)群組。最后,計數(shù)由如果 文件的有效數(shù)據(jù)被壓縮到并填充在整數(shù)個元區(qū)塊中則會產(chǎn)生的數(shù)據(jù)的殘余元頁的數(shù)目組 成。也就是說,殘余元頁計數(shù)是在含有文件的數(shù)據(jù)的所有元區(qū)塊均包含在垃圾收集中的 情況下,將不得不占據(jù)共用或部分填充的元區(qū)塊的小于元區(qū)塊的文件的數(shù)據(jù)的量。設定 這三個計數(shù)器并形成且存儲殘余元頁計數(shù)之后,下一步驟359開始對文件的數(shù)據(jù)進行垃 圾收集。返回步驟360,如果步驟358選擇的條目不是文件,那么下一詢問362確定其是否 為待進行垃圾收集的共用元區(qū)塊。如果是,那么實行圖32的共用元區(qū)塊垃圾收集364。 如果不是,那么詢問366確定選定的條目是否針對過時元區(qū)塊,例如通過圖30的步驟 345添加到過時元區(qū)塊隊列的一個過時元區(qū)塊。如果是,那么在步驟368中擦除選定的 元區(qū)塊。在共用元區(qū)塊垃圾收集364、元區(qū)塊擦除368之后,或者如果詢問366產(chǎn)生否 定響應,那么處理返回圖26的步驟253。如果垃圾收集操作仍未完成,那么其將在下一 次開始垃圾收集算法時再繼續(xù)。返回步驟355,如果存在待決的垃圾收集,那么將進一步對其進行處理。圖31的步 驟357確定待決的操作是否針對文件,如同針對從垃圾收集隊列中選擇的新項目的步驟 360。如果不是針對文件,那么執(zhí)行上述針對新項目的步驟362、 364、 366和368的過程, 且垃圾收集接著通過返回圖26的步驟253而結束。如果通過圖31的步驟357確定再繼續(xù)的垃圾收集是針對文件的,那么接下來作出詢 問359。之后的處理對于再繼續(xù)垃圾收集(通過步驟357)的文件或對于通過步驟370和 372設定其計數(shù)器和殘余元頁計數(shù)的從隊列中選擇(通過步驟360)的新文件大體上相同。 當文件的垃圾收集正在進行并通過步驟357再繼續(xù)時,數(shù)據(jù)群組數(shù)目和文件元頁數(shù)目計 數(shù)器以及殘余元頁計數(shù)被設定為文件的垃圾收集首次開始時的狀態(tài)。數(shù)據(jù)群組數(shù)目和元 頁計數(shù)器可能已遞減為與最初通過對當前文件的早期部分垃圾收集而計算出的值不同的 值。當暫停文件的垃圾收集時存儲全部四個值,且接著在對相同文件的再繼續(xù)處理期間 訪問所述四個值。共用步驟359詢問當前數(shù)據(jù)群組內是否存在仍待復制的一個或一個以上元頁。這通 過參考數(shù)據(jù)群組長度計數(shù)器來確定。通過后續(xù)步驟一次檢查并復制有效數(shù)據(jù)群組的一個 元頁。如果步驟359確定數(shù)據(jù)保持在待決的數(shù)據(jù)群組中,那么下一詢問361確定復制元 區(qū)塊是否打開。如果是,那么通過步驟363從存儲有正進行垃圾收集的文件的當前數(shù)據(jù) 群組的數(shù)據(jù)元頁的元區(qū)塊中讀取所述數(shù)據(jù)元頁,并在步驟365中將其寫入到復制元區(qū)塊 中。接著在步驟367中使數(shù)據(jù)群組長度計數(shù)器遞減一個元頁,且在步驟369中使文件元 頁計數(shù)器遞減1。如果通過步驟361確定復制元區(qū)塊未打開,那么下一步驟371確定正進行垃圾收集 的文件是否為打開的文件。如果是,那么下一步驟373打開復制元區(qū)塊,且過程接著前 進到先前描述的步驟363。但如果不是打開的文件,那么下一步驟375詢問文件元頁計 數(shù)器的遞減的計數(shù)是否等于殘余元頁計數(shù)。如果不是,那么通過步驟373打開復制元區(qū) 塊。但如果它們相等,那么意味著當前文件中不存在剩余的待復制的數(shù)據(jù)的元區(qū)塊。因 此,在步驟377中,識別打開的共用元區(qū)塊以將殘余數(shù)據(jù)復制到其中。步驟363以及以 后的步驟的處理接著將當前文件的當前數(shù)據(jù)群組的剩余元頁復制到共用元區(qū)塊中。當步 驟371確定正進行垃圾收集的是打開的文件時不采取此路徑,因為可將會填滿另一元區(qū) 塊的其它數(shù)據(jù)群組寫入到當前文件。關閉打開的文件之后,將其放置于垃圾收集的隊列
中,此時通過步驟377將任何殘余數(shù)據(jù)復制到共用元區(qū)塊中。圖31的詢問379確定在寫入此額外的數(shù)據(jù)元頁之后復制元區(qū)塊現(xiàn)在是否已滿。如果 是,那么在步驟381中關閉復制元區(qū)塊,且通過步驟383更新FIT以反映所述事實。如 果復制元區(qū)塊未滿,或在步驟383之后,詢問385確定正進行垃圾收集的元區(qū)塊中的所 有數(shù)據(jù)是否現(xiàn)已被致使過時。如果是,那么在步驟387中擦除元區(qū)塊。如果不是,或在 元區(qū)塊擦除之后,詢問389詢問是否在編程操作期間通過圖28的步驟325設定了前臺模 式。如果不是,那么圖31的步驟391確定主機命令是否待決。如果是,且如果步驟392 確定正在進行的垃圾收集不是優(yōu)先的,那么通過在步驟393中更新FIT并接著返回圖26 的步驟253而暫停垃圾收集。然而,如果步驟391確定主機命令并非待決,或如果存在 待決的主機命令且步驟392確定正在進行的垃圾收集不是優(yōu)先的,那么處理返回詢問359 以將下一數(shù)據(jù)元頁從當前文件元區(qū)塊復制到復制元區(qū)塊中。如果圖31的詢問389確定已設定前臺模式,那么下一步驟395遞增通過圖28的步 驟327重設的復制元區(qū)塊元頁計數(shù)器。如果步驟397確定己連續(xù)復制預設數(shù)目N4個元頁, 那么下一步驟399重設前臺模式,且通過步驟393更新FIT。但如果在達到數(shù)目N4之前 存在更多待復制的元頁,那么除非詢問391確定存在待決的主機命令,否則過程繼續(xù)進 行步驟359。如果存在待決的主機命令,那么中斷復制操作,且過程返回圖26的步驟253。返回詢問359,如果數(shù)據(jù)群組長度計數(shù)為零,那么意味著從文件元區(qū)塊向復制元區(qū) 塊進行的一個數(shù)據(jù)群組的復制已完成。在此情形下,步驟401更新FIT以反映此情況。 接著,在步驟403中通過參考數(shù)據(jù)群組數(shù)目計數(shù)器確定正進行垃圾收集的當前文件是否 包含另一數(shù)據(jù)群組。如果不是,那么文件的垃圾收集已完成。過程接著返回步驟356以 對來自隊列的按照次序的下一文件或元區(qū)塊進行垃圾收集。其不會返回步驟355,因為 完成當前文件的垃圾收集意味著不可能再存在正在進行且可再繼續(xù)的文件的垃圾收集。如果從步驟403中知道當前文件中至少還有一個數(shù)據(jù)群組待復制,那么在步驟405 中確定含有此下一數(shù)據(jù)群組的元區(qū)塊是否還包含其它過時的數(shù)據(jù)。如先前所述,對含有 文件的過時數(shù)據(jù)的元區(qū)塊進行垃圾收集,但優(yōu)選不對那些不含有文件的過時數(shù)據(jù)的元區(qū) 塊進行垃圾收集,除非所述元區(qū)塊是共用元區(qū)塊或含有文件的殘余數(shù)據(jù)的不完整的元區(qū) 塊。因此,如果通過步驟405確定下一數(shù)據(jù)群組的元區(qū)塊中存在過時數(shù)據(jù),那么通過步 驟407將數(shù)據(jù)群組數(shù)目計數(shù)器更新按照次序處于下一個的數(shù)據(jù)群組的數(shù)目,且在步驟409 中用新數(shù)據(jù)群組中的數(shù)據(jù)的量初始化數(shù)據(jù)群組長度計數(shù)器。處理接著前進到步驟361以 將第一元頁的數(shù)據(jù)以先前描述的方式從文件的新數(shù)據(jù)群組復制到復制元區(qū)塊中的下一己 擦除元頁。但即使通過步驟405確定存在下一數(shù)據(jù)群組的元區(qū)塊中不存在過時數(shù)據(jù),如果(1) 下一數(shù)據(jù)群組處于共用元區(qū)塊中或(2)處于不完整的元區(qū)塊中且文件是關閉的文件,那 么仍可發(fā)生對所述元區(qū)塊中數(shù)據(jù)的垃圾收集。首先作出詢問411:當前數(shù)據(jù)群組是否處于 共用元區(qū)塊中。如果是,那么下一步驟413將共用元區(qū)塊添加到共用元區(qū)塊垃圾收集隊 列以進行隨后的垃圾收集,但處理繼續(xù)進行步驟407和409以將數(shù)據(jù)群組數(shù)目計數(shù)器和 數(shù)據(jù)群組長度計數(shù)器更新為下一元區(qū)塊的計數(shù)器以通過步驟361等等步驟進行復制。然 而,如果當前數(shù)據(jù)群組不處于共用元區(qū)塊中,那么步驟415詢問當前數(shù)據(jù)群組是否處于 不完整的元區(qū)塊中。也就是說,步驟415確定當前數(shù)據(jù)群組是否存在于仍具有至少最少 量的已擦除容量的元區(qū)塊中(例如,圖15的數(shù)據(jù)群組F3,D3)。如果不是,那么不復制 當前數(shù)據(jù)群組,而是處理返回步驟403以處理文件的下一數(shù)據(jù)群組(如果存在一個的話)。 但如果當前數(shù)據(jù)群組處于不完整的元區(qū)塊中,那么下一詢問417詢問不完整的元區(qū)塊是 否含有打開的文件的數(shù)據(jù)。如果是,那么同樣通過返回詢問403以繼續(xù)處理文件的任何 另外的數(shù)據(jù)群組而跳過對當前數(shù)據(jù)群組的復制。但如果存在下一數(shù)據(jù)群組的元區(qū)塊不含 有打開的文件的數(shù)據(jù),那么對所述下一數(shù)據(jù)群組實行步驟407、 409、 361等等步驟。返回圖31的步驟356,即使確定垃圾收集隊列中不存在文件或元區(qū)塊,也可發(fā)生垃 圾收集。如果不存在,那么不是結束過程,而是步驟421檢査已擦除元區(qū)塊集區(qū)中是否 存在N2個以上的已擦除元區(qū)塊。如果是,那么垃圾收集過程結束并返回圖26的步驟253。 但如果系統(tǒng)中不存在N2個以上的已擦除元區(qū)塊,那么借此機會從步驟421執(zhí)行垃圾收集。 此垃圾收集可對打開的文件(如果存在一個的話)進行,如步驟423所指示。由于隊列 為空,所以當集區(qū)中已擦除元區(qū)塊的數(shù)目為N2或更少時很可能不存在更多己擦除元區(qū)塊 的其它潛在來源。如果存在一個以上打開的文件,那么在步驟425中選擇其中之一。處 理接著針對打開的文件前進通過步驟370、 372和359,如先前所述。當通過圖31的詢問362確定正對共用元區(qū)塊中的數(shù)據(jù)群組實行當前垃圾收集操作 時,垃圾收集364稍許不同于上文針對其它元區(qū)塊描述的垃圾收集。圖32的流程圖概述 對共用元區(qū)塊的垃圾收集。步驟431詢問垃圾收集是否正在進行且因此再繼續(xù)。如果是, 那么數(shù)據(jù)群組長度計數(shù)器保留當垃圾收集暫停時的最后的值。如果不是,那么首先在步 驟435中通過參考作為處理的主體的第一數(shù)據(jù)群組的FIT而初始化數(shù)據(jù)群組數(shù)目計數(shù)器, 且接著通過步驟433確定此數(shù)據(jù)群組的長度。當通過步驟433確定數(shù)據(jù)群組長度計數(shù)器大于零時,開始復制當前數(shù)據(jù)群組。通過
步驟437,從共用元區(qū)塊讀取當前數(shù)據(jù)群組的元頁,且通過步驟439,將所述元頁編程到 打開的共用元區(qū)塊中。在步驟441中,接著使數(shù)據(jù)群組長度計數(shù)器遞減一個元頁。如果 如步驟443所指示,在前臺進行垃圾收集,那么步驟445促使復制元區(qū)塊元頁計數(shù)器遞 增1。此計數(shù)器跟蹤當前序列中已復制的數(shù)據(jù)的元頁的數(shù)目。如果通過步驟447確定此 計數(shù)超過預定數(shù)目N4,那么過程在步驟449中退出前臺模式。之后在步驟451中更新 FIT,且處理接著返回圖26的步驟253。如果通過圖32的步驟447確定復制元區(qū)塊元頁計數(shù)器的值為N4或更小,那么下一 步驟詢問主機命令是否待決。如果是,那么在步驟451中更新FIT且處理返回圖26的步 驟253以便可執(zhí)行待決的主機命令。如果不是,那么處理返回圖32的步驟433以詢問當 前數(shù)據(jù)群組中是否存在另一數(shù)據(jù)元頁,且如果是,那么將其從過時共用元區(qū)塊復制到打 開的共用元區(qū)塊,等等。類似地,如果在步驟443中確定垃圾收集不在前臺執(zhí)行,那么 接下來執(zhí)行步驟453。除非步驟453確定主機命令待決,否則處理接著返回步驟433以 可能復制當前數(shù)據(jù)群組中的下一數(shù)據(jù)元頁,而不管復制元區(qū)塊元頁計數(shù)器是否超過N4, 因為繞過了步驟447。此情況下,在后臺執(zhí)行垃圾收集。返回圖32的步驟433,如果數(shù)據(jù)群組長度計數(shù)不大于零,那么知道已復制當前數(shù)據(jù) 群組的所有元頁。接著在步驟455中更新FIT,且通過步驟457確定正進行垃圾收集的 共用元區(qū)塊中是否存在另一數(shù)據(jù)群組。如果不是,那么在步驟459中擦除過時共用元區(qū) 塊,且處理返回圖26的步驟253。但如果共用元區(qū)塊中存在另一數(shù)據(jù)群組,那么通過步 驟461更新數(shù)據(jù)群組數(shù)目計數(shù)器。接著在步驟463中讀取來自共用元區(qū)塊索引的FIT指 針,且在步驟465中讀取由所述指針界定的FIT條目。如果步驟467確定FIT條目與當 前數(shù)據(jù)群組匹配,那么詢問468確定當前數(shù)據(jù)群組是否為已識別的殘余數(shù)據(jù)的一部分。 如果是,那么步驟469促使將數(shù)據(jù)群組長度計數(shù)器初始化為從FIT讀取的數(shù)據(jù)群組的長 度。但如果在步驟468中確定當前數(shù)據(jù)群組不處于現(xiàn)有殘余數(shù)據(jù)中,那么在步驟470中 識別其所屬的新的殘余數(shù)據(jù)。在步驟471中,接著識別具有足夠空間以存儲新的殘余數(shù) 據(jù)的所有數(shù)據(jù)的打開的共用區(qū)塊。這防止當殘余數(shù)據(jù)含有兩個或兩個以上數(shù)據(jù)群組時文 件的殘余數(shù)據(jù)分裂在兩個或兩個以上不同的元區(qū)塊之間。這原本會在獨立地復制兩個或 兩個以上數(shù)據(jù)群組的情況下發(fā)生。在所述情況下,第一數(shù)據(jù)群組可復制到具有足夠的已 擦除空間以存儲所述數(shù)據(jù)群組但沒有足夠空間還存儲第二數(shù)據(jù)群組的共用區(qū)塊。接著第 二數(shù)據(jù)群組將復制到不同的共用區(qū)塊。這將不合需要,因為文件的殘余數(shù)據(jù)不應分裂在
兩個不同的元區(qū)塊之間。如果其如此分裂,那么對文件或對共用區(qū)塊的垃圾收集會花費 更多時間。接著通過步驟469初始化當前數(shù)據(jù)群組的數(shù)據(jù)群組長度計數(shù)器。通過步驟437和439 將當前數(shù)據(jù)群組的第一數(shù)據(jù)元頁從共用元區(qū)塊復制到經(jīng)識別的打開的共用元區(qū)塊中。然 而,如果通過步驟467確定FIT條目不與當前數(shù)據(jù)群組匹配,那么處理返回步驟457以 確定共用元區(qū)塊中是否存在另一數(shù)據(jù)群組。圖32的流程圖中所示的垃圾收集繼續(xù)進行,直到當前共用元區(qū)塊的所有有效數(shù)據(jù)群 組已復制到先前擦除的元區(qū)塊(其因而變成新的共用元區(qū)塊)或者復制到一個或一個以 上打開的共用元區(qū)塊為止。可將不同文件的數(shù)據(jù)群組復制到不同的打開的共用元區(qū)塊。 共用元區(qū)塊之前因其含有過時數(shù)據(jù)群組而被放置于垃圾收集隊列中。共用元區(qū)塊中每一 有效數(shù)據(jù)群組的所有數(shù)據(jù)元頁的完全傳遞對于每一此類元頁需要通過圖32的步驟一遍。 如果垃圾收集在前臺進行,或者當在前臺或后臺操作時接收到新的主機命令時,此復制 可能每N4個元頁被中斷。作為對永久地預設數(shù)目N3和N4的替代,存儲器系統(tǒng)控制器可響應于主機的數(shù)據(jù)編 程模式而改變所述數(shù)目,以便維持均勻的數(shù)據(jù)編程速度。存儲器區(qū)塊在操作期間的各種狀態(tài)圖33的圖表展示在上述類型的直接文件存儲存儲器系統(tǒng)內,系統(tǒng)的存儲器區(qū)塊或元 區(qū)塊的各種各個狀態(tài),以及那些狀態(tài)之間的轉換。在左側列中,區(qū)塊501展示為在已擦除區(qū)塊集區(qū)內處于已擦除狀態(tài)。在下一列中,區(qū)塊503、 505和507各含有一些有效數(shù)據(jù)但還具有可在其中寫入來自 主機的數(shù)據(jù)的已擦除容量。用單個文件的有效數(shù)據(jù)對"寫入?yún)^(qū)塊"503進行部分寫入, 且文件的另外的數(shù)據(jù)當由主機供應時應寫入到此區(qū)塊中。用單個文件的有效數(shù)據(jù)對"復 制區(qū)塊"505進行部分寫入,且文件的另外的數(shù)據(jù)當在文件的垃圾收集期間復制時應寫 入到所述區(qū)塊中。用兩個或兩個以上文件的有效數(shù)據(jù)對"打開的共用區(qū)塊"507進行部 分寫入,且任何文件的殘余數(shù)據(jù)群組可在垃圾收集期間寫入到所述區(qū)塊中。下一列的區(qū)塊509和511充滿文件數(shù)據(jù)。"文件區(qū)塊"509用單個文件的有效數(shù)據(jù)填 充。"共用區(qū)塊"511用兩個或兩個以上文件的有效數(shù)據(jù)填充。圖33的右側列的旁邊包含各含有一些過時數(shù)據(jù)的區(qū)塊513、 515、 517、 519和521。 "過時文件區(qū)塊"513用單個文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任何組合填充。用單個文件 的有效數(shù)據(jù)與過時數(shù)據(jù)的任何組合對"過時寫入?yún)^(qū)塊"515進行部分寫入,且文件的另
外的數(shù)據(jù)當由主機供應時應寫入到所述區(qū)塊中。用單個文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任 何組合對"過時復制區(qū)塊"517進行部分寫入。用兩個或兩個以上文件的有效數(shù)據(jù)與過 時數(shù)據(jù)的任何組合對"過時的打開的共用區(qū)塊"519進行部分寫入。"過時共用區(qū)塊"521 用兩個或兩個以上文件的有效數(shù)據(jù)與過時數(shù)據(jù)的任何組合填充。 圖33的右側列中的過時區(qū)塊523僅含有過時數(shù)據(jù)。圖33中說明的各個區(qū)塊在區(qū)塊狀態(tài)之間的轉換還通過標有小寫字母的線來展示。這 些轉換如下a-"已擦除區(qū)塊"501到"寫入?yún)^(qū)塊"503:將單個主機文件的數(shù)據(jù)寫入到已擦除區(qū)塊。b-"寫入?yún)^(qū)塊"503到"寫入?yún)^(qū)塊"503:將來自主機的單個文件的數(shù)據(jù)寫入到用于 所述文件的寫入?yún)^(qū)塊。c-"寫入?yún)^(qū)塊"503到"文件區(qū)塊"509:寫入來自主機的單個文件的數(shù)據(jù)以填充用 于所述文件的寫入?yún)^(qū)塊。d-"文件區(qū)塊"509到"過時文件區(qū)塊"513:文件區(qū)塊中的數(shù)據(jù)的一部分由于主機 將數(shù)據(jù)的經(jīng)更新版本寫入在用于所述文件的寫入?yún)^(qū)塊中而變得過時。e-"過時文件區(qū)塊"513到"過時區(qū)塊"523:過時文件區(qū)塊中的所有有效數(shù)據(jù)由于 數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。f-"寫入?yún)^(qū)塊"503到"過時寫入?yún)^(qū)塊"515:寫入?yún)^(qū)塊中的數(shù)據(jù)的一部分由于主機將數(shù)據(jù)的經(jīng)更新版本寫入在所述相同寫入?yún)^(qū)塊中或由于數(shù)據(jù)在垃圾收集期間被復制到另 一區(qū)塊而變得過時。g-"過時寫入?yún)^(qū)塊"515到"過時寫入?yún)^(qū)塊"513:將來自主機的單個文件的數(shù)據(jù)寫入到用于所述文件的過時寫入?yún)^(qū)塊。h-"過時寫入?yún)^(qū)塊"515到"過時文件區(qū)塊"513:寫入來自主機的單個文件的數(shù)據(jù)以填充用于所述文件的過時寫入?yún)^(qū)塊。i-"過時寫入?yún)^(qū)塊"515到"過時區(qū)塊"523:過時寫入?yún)^(qū)塊中的所有有效數(shù)據(jù)由于 數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。j-"已擦除區(qū)塊"501到"復制區(qū)塊"505:在垃圾收集期間將單個文件的數(shù)據(jù)從另 一區(qū)塊復制到已擦除區(qū)塊。k-"寫入?yún)^(qū)塊"503到"復制區(qū)塊"505:在垃圾收集期間將單個文件的數(shù)據(jù)從另一 區(qū)塊復制到用于所述文件的寫入?yún)^(qū)塊。1-"復制區(qū)塊"505到"復制區(qū)塊"505:在垃圾收集期間將單個文件的數(shù)據(jù)從另一 區(qū)塊復制到用于所述文件的復制區(qū)塊。m-"復制區(qū)塊"505到"文件區(qū)塊"509:在垃圾收集期間從另一區(qū)塊復制單個文 件的數(shù)據(jù)以填充用于所述文件的復制區(qū)塊。n-"復制區(qū)塊"505到"寫入?yún)^(qū)塊"503:當垃圾收集期間重新打開文件時將來自主 機的單個文件的數(shù)據(jù)寫入到用于所述文件的復制區(qū)塊。o-"復制區(qū)塊"505到"過時復制區(qū)塊"517:復制區(qū)塊中的數(shù)據(jù)的一部分或全部由 于主機將數(shù)據(jù)的經(jīng)更新版本寫入在用于所述文件的寫入?yún)^(qū)塊中或由于主機刪除文件而變 得過時。p-"過時復制區(qū)塊"517到"過時區(qū)塊"523:過時復制區(qū)塊中的所有有效數(shù)據(jù)由于 數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。q-"寫入?yún)^(qū)塊"503到"打開的共用區(qū)塊"507:在垃圾收集期間將文件的殘余數(shù)據(jù) 寫入到用于不同的已關閉文件的寫入?yún)^(qū)塊。r-"復制區(qū)塊"505到"打開的共用區(qū)塊"507:在垃圾收集期間將文件的殘余數(shù)據(jù) 寫入到含有不同文件的殘余數(shù)據(jù)的復制區(qū)塊。s-"打開的共用區(qū)塊"507到"打開的共用區(qū)塊"507:在垃圾收集期間將文件的殘余數(shù)據(jù)從不同的區(qū)塊復制到打開的共用區(qū)塊。t-"打開的共用區(qū)塊"507到"過時的打開的共用區(qū)塊"519:打開的共用區(qū)塊中一個文件的數(shù)據(jù)的一部分或全部由于主機將數(shù)據(jù)的經(jīng)更新版本寫入在用于所述文件的寫入 區(qū)塊中、由于數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。 u-"過時的打開的共用區(qū)塊"519到"過時區(qū)塊"523:過時的打開的共用區(qū)塊中的所有有效數(shù)據(jù)由于數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過 時。v-"打開的共用區(qū)塊"507到"共用區(qū)塊"511:在垃圾收集期間從另一區(qū)塊復制文 件的殘余數(shù)據(jù)群組以填充用于所述文件的打開的共用區(qū)塊。w-"共用區(qū)塊"511到"過時共用區(qū)塊"521:共用區(qū)塊中一個文件的數(shù)據(jù)的一部 分或全部由于主機將數(shù)據(jù)的經(jīng)更新版本寫入在用于所述文件的寫入?yún)^(qū)塊中、由于數(shù)據(jù)在 垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。x-"過時共用區(qū)塊"521到"過時區(qū)塊"523:過時共用區(qū)塊中的所有有效數(shù)據(jù)由于 數(shù)據(jù)在垃圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。 y-"寫入?yún)^(qū)塊"503到"過時區(qū)塊"523:寫入?yún)^(qū)塊中單個文件的所有有效數(shù)據(jù)由于 主機刪除文件而變得過時。z-"復制區(qū)塊"505到"過時區(qū)塊"523:復制區(qū)塊中的所有有效數(shù)據(jù)由于數(shù)據(jù)在垃 圾收集期間被復制到另一區(qū)塊或由于主機刪除文件而變得過時。aa-"文件區(qū)塊"509到"過時區(qū)塊"523:文件區(qū)塊中的所有數(shù)據(jù)由于主機刪除文 件而變得過時。ab-"過時區(qū)塊"523到"已擦除區(qū)塊"501:在垃圾收集期間擦除過時區(qū)塊。 結論盡管己參照本發(fā)明的示范性實施例描述了本發(fā)明的各個方面,但將了解,本發(fā)明有 權在所附權利要求書的完全范圍內受到保護。
權利要求
1. 一種操作可重新編程非易失性大容量存儲系統(tǒng)的方法,所述存儲系統(tǒng)具有組織成區(qū) 塊的存儲器單元,所述區(qū)塊在其中寫入任何新數(shù)據(jù)之前被擦除且各自具有存儲各自 包含至少512字節(jié)的數(shù)據(jù)的多個數(shù)據(jù)單位的容量,所述方法包括接收具有邏輯地址的數(shù)據(jù),所述邏輯地址包含唯一文件標識和所述被識別的文件內的數(shù)據(jù)的偏移量, 在所述存儲器單元區(qū)塊內的物理地址處對所述接收的數(shù)據(jù)進行編程,以及 維持所述各個文件的所述經(jīng)編程數(shù)據(jù)的多個記錄,所述記錄識別組成所述文件的可變量的數(shù)據(jù)的群組且各自具有所述群組內的數(shù)據(jù)的連續(xù)邏輯偏移地址和連續(xù)物理地址兩者。
2. 根據(jù)權利要求1所述的方法,其中維持所述多個記錄包含在所述各個記錄中至少提 供所述群組內的所述數(shù)據(jù)的開始邏輯偏移地址和開始物理地址。
3. 根據(jù)權利要求2所述的方法,其中維持所述多個記錄額外包含在所述各個記錄中提 供所述群組內的數(shù)據(jù)的長度。
4. 根據(jù)權利要求3所述的方法,其額外包括維持通過對所述各個文件的記錄進行分組 而組織的所述多個記錄的文件映射。
5. 根據(jù)權利要求l所述的方法,其中對數(shù)據(jù)進行編程包含通過以一已擦除區(qū)塊的第一 物理地址開始并繼續(xù)通過所述已擦除區(qū)塊以及必要的話以物理次序通過其它已擦 除區(qū)塊來對新文件的所述接收的數(shù)據(jù)進行編程,直到所述文件的所有所述接收的數(shù) 據(jù)已在一個編程操作中被編程為止。
6. 根據(jù)權利要求1所述的方法,其中對數(shù)據(jù)進行編程包含通過在現(xiàn)有文件數(shù)據(jù)在區(qū)塊 中結束之后立即以所述區(qū)塊的物理地址開始并繼續(xù)通過所述區(qū)塊的已擦除部分以 及必要的話以物理次序通過其它已擦除區(qū)塊來對先前存儲在所述存儲器系統(tǒng)中的 所述現(xiàn)有文件的所接收的額外數(shù)據(jù)進行編程,直到所述文件的所有所述額外數(shù)據(jù)已 在一個編程操作中被編程為止。
7. 根據(jù)權利要求6所述的方法,其中對所述額外數(shù)據(jù)進行編程包含對所述先前存儲的 文件內的插入的數(shù)據(jù)進行編程。
8. 根據(jù)權利要求7所述的方法,其中維持多個記錄包含改變所述現(xiàn)有文件的現(xiàn)有數(shù)據(jù) 群組的記錄,和添加至少一個其它數(shù)據(jù)群組的至少一個額外記錄。
9. 根據(jù)權利要求6所述的方法,其中對所述額外數(shù)據(jù)進行編程包含對對于所述先前存 儲的文件的數(shù)據(jù)的一部分的更新的數(shù)據(jù)進行編程,其導致所述先前存儲的文件的所 述數(shù)據(jù)部分變得過時。
10. 根據(jù)權利要求9所述的方法,其中維持多個記錄包含改變所述現(xiàn)有文件的現(xiàn)有數(shù)據(jù) 群組的記錄,和添加至少一個其它數(shù)據(jù)群組的至少一個額外記錄。
11. 根據(jù)權利要求1所述的方法,其中所述各個單位中的至少一些含有多個所述數(shù)據(jù)群 組。
12. 根據(jù)權利要求1所述的方法,其中所述大容量存儲系統(tǒng)含有若干足以存儲至少256 兆字節(jié)的數(shù)據(jù)的存儲器單元。
13. 根據(jù)權利要求l所述的方法,其中所述各個數(shù)據(jù)單位含有至少1024字節(jié)。
14. 根據(jù)權利要求l所述的方法,其中將至少8個數(shù)據(jù)單位寫入到所述大容量存儲系統(tǒng) 的各個區(qū)塊中。
15. —種在主機系統(tǒng)與可重新編程非易失性大容量存儲系統(tǒng)之間傳遞數(shù)據(jù)的方法,所述存儲系統(tǒng)具有組織成可一起擦除的存儲器單元區(qū)塊的存儲器單元,各個區(qū)塊在其中寫入新數(shù)據(jù)之前被擦除,其中所述主機系統(tǒng)通過唯一文件識別符和各個文件內給定大小的數(shù)據(jù)單位的偏移量 來識別其所產(chǎn)生的各個數(shù)據(jù)文件,以及所述大容量存儲系統(tǒng)將所述各個數(shù)據(jù)文件存儲到至少一個先前擦除的存儲器單 元區(qū)塊中,其中一個文件內具有不連續(xù)數(shù)據(jù)偏移量的數(shù)據(jù)群組之間或兩個不同文件 的數(shù)據(jù)群組之間具有以等于文件偏移地址單位的分辨率的物理地址分辨率指定的 邊界。
16. 根據(jù)權利要求15所述的方法,其中所述給定大小的數(shù)據(jù)單位含有一個字節(jié)的數(shù)據(jù)。
17. 根據(jù)權利要求15所述的方法,其中所述數(shù)據(jù)群組各自含有具有數(shù)據(jù)的連續(xù)邏輯偏 移量和連續(xù)物理地址兩者的可變量的數(shù)據(jù)。
18. 根據(jù)權利要求17所述的方法,其中所述大容量存儲系統(tǒng)維持組成所述各個文件的 數(shù)據(jù)群組的多個記錄。
19. 根據(jù)權利要求18所述的方法,其中維持所述多個記錄包含在所述各個記錄中至少 提供所述群組內的數(shù)據(jù)的開始邏輯偏移地址和開始物理地址。
20. 根據(jù)權利要求19所述的方法,其中維持所述多個記錄額外包含在所述各個記錄中 提供所述群組內的數(shù)據(jù)的長度。
21. —種用主機系統(tǒng)操作可重新編程非易失性存儲器系統(tǒng)的方法,所述存儲器系統(tǒng)具有 在其中寫入新數(shù)據(jù)之前被擦除的存儲器單元區(qū)塊,所述方法包括 接收通過唯一文件標識尋址的數(shù)據(jù),將所述接收的文件數(shù)據(jù)存儲在所述存儲器系統(tǒng)區(qū)塊中的一者或一者以上內, 隨后由于響應于來自所述主機的后續(xù)命令而致使所述被存儲的文件數(shù)據(jù)中的至少一些文件數(shù)據(jù)過時,以及隨后以在所述主機發(fā)送需要使用至少一個已擦除區(qū)塊來存儲新數(shù)據(jù)的對數(shù)據(jù)進行編程的命令之前獲得所述已擦除區(qū)塊的方式對含有所述過時文件數(shù)據(jù)的一個或一個以上區(qū)塊進行垃圾收集。
22. 根據(jù)權利要求21所述的方法,其中對區(qū)塊進行垃圾收集發(fā)生在所述主機閑置時的 周期期間。
23. 根據(jù)權利要求21所述的方法,其中對區(qū)塊進行垃圾收集發(fā)生在與所述存儲器系統(tǒng) 寫入或讀取數(shù)據(jù)的操作交錯的周期中。
24. 根據(jù)權利要求21所述的方法,其中對區(qū)塊進行垃圾收集包含將有效數(shù)據(jù)以物理次 序從含有所述過時文件數(shù)據(jù)的一個或一個以上區(qū)塊復制到至少一個其它區(qū)塊中,所 述物理次序與所述被復制數(shù)據(jù)的邏輯偏移地址次序相同。
25. 根據(jù)權利要求21所述的方法,其中接收通過唯一文件標識尋址的數(shù)據(jù)包含接收以 所述被識別的文件內的偏移量尋址的數(shù)據(jù)。
26. —種在主機系統(tǒng)與可重新編程非易失性大容量存儲系統(tǒng)之間傳遞數(shù)據(jù)的方法,所述 存儲系統(tǒng)具有可一起擦除的存儲器單元區(qū)塊,單個區(qū)塊在其中寫入新數(shù)據(jù)之前被擦 除,其中所述主機系統(tǒng)通過唯一文件識別符和各個文件內給定大小的數(shù)據(jù)單位的偏移量 來識別其所產(chǎn)生的各個數(shù)據(jù)文件,并且將此種文件識別符和偏移量發(fā)送到所述大容量存儲系統(tǒng),以及所述大容量存儲系統(tǒng)將文件的數(shù)據(jù)單位以從所述主機系統(tǒng)接收的次序寫入到至 少一個先前擦除的存儲器單元區(qū)塊中,所述存儲器單元具有不依賴于所述文件內的 數(shù)據(jù)偏移量的連續(xù)物理地址。
27. 根據(jù)權利要求26所述的方法,其中所述大容量存儲系統(tǒng)進一步寫入所述文件的數(shù) 據(jù)單位以填滿至少一個存儲器區(qū)塊,且將小于足以填滿另一存儲器區(qū)塊的量的任何 剩余數(shù)據(jù)寫入到也含有不同文件的殘余數(shù)據(jù)的共用區(qū)塊中。
28. —種大容量存儲系統(tǒng),其包括 組織成區(qū)塊的非易失性電荷存儲半導體存儲器單元陣列,所述區(qū)塊在其中寫入任 何新數(shù)據(jù)之前被擦除且各自具有存儲各自包含至少512字節(jié)的數(shù)據(jù)的多個所接收數(shù) 據(jù)單位的容量,控制器,其與所述存儲器單元陣列連接且適于接收具有包含唯一文件標識和所述 被識別的文件內的數(shù)據(jù)的偏移量的邏輯地址的數(shù)據(jù),以在所述存儲器單元區(qū)塊內的 物理地址處對所述接收的數(shù)據(jù)進行編程,且所述控制器進一步運行以維持各個文件 的所述經(jīng)編程數(shù)據(jù)的多個記錄,所述記錄識別組成所述文件的可變量的數(shù)據(jù)的群 組,所述群組內的數(shù)據(jù)各自具有連續(xù)邏輯偏移地址和連續(xù)物理地址兩者,其中所述 各個記錄至少包含所述群組內的數(shù)據(jù)的開始邏輯偏移地址和開始物理地址。
29. 根據(jù)權利要求28所述的大容量存儲系統(tǒng),其中所述各個記錄額外包含所述群組內 的數(shù)據(jù)的長度。
30. 根據(jù)權利要求28所述的方法,其中所述存儲器單元陣列包含若干足以存儲至少256 兆字節(jié)的數(shù)據(jù)的存儲器單元。
31. 根據(jù)權利要求28所述的方法,其中所述單個數(shù)據(jù)單位含有至少1024字節(jié)的數(shù)據(jù)。
32. —種大容量存儲系統(tǒng),其包括組織成區(qū)塊的非易失性電荷存儲半導體存儲器單元陣列,所述區(qū)塊在其中寫入任 何新數(shù)據(jù)之前被擦除且各自具有存儲至少1024字節(jié)的所接收數(shù)據(jù)的容量,控制器,其與所述存儲器單元陣列連接且適于接收具有包含唯一文件標識和所述 被識別的文件內的數(shù)據(jù)的偏移量的邏輯地址的數(shù)據(jù),以在所述存儲器單元區(qū)塊內的 物理地址處將所述接收的數(shù)據(jù)編程為經(jīng)界定的數(shù)據(jù)群組,所述數(shù)據(jù)群組各自具有等 于或小于所述各個存儲器單元區(qū)塊的容量的大小且含有具有連續(xù)邏輯和物理地址 的數(shù)據(jù),以及表,其能夠存儲所述存儲器單元陣列中所存儲的各個數(shù)據(jù)群組的記錄,數(shù)據(jù)文件 的各個數(shù)據(jù)記錄包含所述數(shù)據(jù)群組的開始邏輯偏移地址、開始物理地址和長度。
33. 根據(jù)權利要求32所述的大容量存儲系統(tǒng),其中所述各個數(shù)據(jù)記錄的開始物理地址 包含存儲器單元區(qū)塊的標識和在所述被識別的區(qū)塊內的字節(jié)位置。
全文摘要
使用每個文件的唯一標識和所述文件內數(shù)據(jù)的偏移量但不使用存儲器的任何中間邏輯地址或虛擬地址空間將主機系統(tǒng)數(shù)據(jù)文件直接寫入到大擦除區(qū)塊快閃存儲器系統(tǒng)。由所述存儲器系統(tǒng)的控制器而不是由所述主機將關于所述文件存儲在所述存儲器中何處的目錄信息維持在所述存儲器系統(tǒng)內。所述主機與存儲器系統(tǒng)之間的基于文件的接口允許所述存儲器系統(tǒng)控制器以增加的效率利用所述存儲器內的數(shù)據(jù)存儲區(qū)塊。
文檔編號G06F3/06GK101147119SQ200680008922
公開日2008年3月19日 申請日期2006年2月8日 優(yōu)先權日2005年2月16日
發(fā)明者艾倫·韋爾什·辛克萊 申請人:桑迪士克股份有限公司