具体实施方式
在图1-6中示出了适合于在实现本发明的各个方面时使用的闪存存储器系统。图1的主机系统1将数据存储到闪存存储器2中,以及从闪存存储器2提取数据。闪存存储器可嵌入主机中,例如以个人计算机中安装的固态盘(SSD)驱动器的形式。可替换地,存储器2可以是通过如图1所示的机械和电连接器的配对部件3和4而可移除地连接到主机的卡的形式。被配置用作内部或嵌入式SSD驱动器的闪存存储器可能看起来类似于图1的示意图,主要区别在于存储器系统2在主机内部的位置。SSD驱动器可以是用于旋转磁盘驱动器的插入(drop-in)替换物的离散模块的形式。
商业可获得的SSD驱动器的一个例子是SanDisk公司生产的32吉字节(gigabyte)SSD。商业可获得的可移除闪存存储卡的例子包括CompactFlash(CF)、多媒体卡(MMC)、安全数字(SD)、miniSD、记忆棒、SmartMedia和TransFlash卡。尽管这些卡中的每一个具有根据其标准化规范的独有机械和/或电接口,但是每个卡中包括的闪存存储器系统是类似的。这些卡全部可以从本申请的受让人SanDisk公司获得。SanDisk还在其Cruzer商标下提供闪存驱动器线,其是具有用于通过插入主机的通用串行总线(USB)插口而与主机连接的USB插头的小封装的手持存储器系统。这些存储卡和闪存驱动器中的每一个包括与主机接口并控制它们之内的闪存存储器的操作的控制器。
可使用SSD、存储卡和闪存驱动器的主机系统多种多样。它们包括诸如桌上型或膝上型和其他便携式计算机的个人计算机(PC)、蜂窝电话、个人数字助理(PDA)、数字静态相机、数字摄像机和便携式音频播放器。对于便携式存储卡应用,主机可包括用于一种或多种存储卡或闪存驱动器的内置插口,或者主机可要求其中插入存储卡的适配器。存储器系统通常包含其自身的存储器控制器和驱动器,但也存在一些纯存储器(memory-only)系统,它们改为由连接该存储器的主机执行的软件来控制。在包含控制器的一些存储器系统,尤其是嵌入在主机中的那些存储器系统中,存储器、控制器和驱动器常常被形成在单个集成电路芯片上。
在考虑存储器2的情况下,图1的主机系统1可被看作具有由电路块(circuitry)和软件的组合构成的两个主要部分。它们是应用部分5和与存储器2接口的驱动器部分6。在PC中,例如,应用部分5可包括运行字处理、图形、控制或其他常用应用软件的处理器9以及用于管理主机1上的数据的文件系统10。在主要专用于执行单组功能的相机、蜂窝电话或其他主机系统中,应用部分5包括操作相机以拍摄和存储照片、操作蜂窝电话以发起和接收呼叫的软件等。
图1的存储器系统2包括闪存存储器7和电路8,二者与连接该卡以来回传递数据的主机接口并控制存储器7。典型地,在数据编程和读取期间,控制器8在主机1使用的数据的逻辑地址和存储器7的物理地址之间进行转换。
参照图2,描述了可用作图1的非易失性存储器2的典型的闪存存储器系统的电路块。系统控制器通常在单个集成电路芯片11上实现,集成电路芯片11通过系统总线13与一个或多个集成电路存储器芯片并联,在图2中示出了单个这样的存储器芯片15。所示的特定总线13包括分离的用来携带数据的一组导体17、用于存储器地址的一组导体19和用于控制和状态信号的一组导体21。可替换地,可以在这三个功能之间时间上共享单组导体。另外,可采用其他系统总线配置,如在2004年8月9日提交的题为“Ring BusStructure and It’s Use in Flash Memory Systems”的美国专利申请系列号10/915,039中描述的环状总线。
典型的控制器芯片11具有其自己的内部总线23,其通过接口电路25与系统总线13接口。正常连接到总线的主要功能是处理器27(如微处理器或微控制器)、包含用来初始化(“引导”)系统的代码的只读存储器(ROM)29、主要用来缓冲在存储器和主机之间传输的数据的只读存储器(RAM)31、以及对于经过存储器和主机之间的控制器的数据计算和检查纠错码(ECC)的电路33。控制器总线23通过电路35与主机系统接口,在图2的系统被包含在存储卡内的情况下,通过作为连接器4的一部分的卡的外部触头37实现电路35。时钟39与控制器11的每个其他组件连接并由其使用。
存储器芯片15以及与系统总线13连接的任何其他芯片可包含被组织为多个子阵列或平面的存储器单元的阵列,为了简化例示了两个这样的平面41和43,但可改为使用更多个,如4个或8个这样的平面。可替换地,芯片15的存储器单元阵列可以不被分为平面。然而当这样分时,每个平面具有其自己的可彼此独立操作的列控制电路45和47。电路45和47从系统总线13的地址部分19接收它们各自的存储器单元阵列的地址,并对它们解码以寻址各个位线49和51中的具体的一个或多个。响应于在地址总线19上接收的地址,通过行控制电路55对字线53寻址。源极电压控制电路57和59也与各自的平面(作为p阱电压控制电路61和63)连接。如果存储器芯片15具有存储器单元的单个阵列,并且如果在系统中存在两个或更多个这样的芯片,则可类似于上述多平面芯片内的平面或子阵列来操作每个芯片的阵列。
数据被通过与系统总线13的数据部分17连接的各自的数据输入/输出电路65和67而传输进或出平面41和43。电路65和67用于通过经各自的列控制电路45和47连接到平面的线69和71,将数据编程到存储器单元中以及用于从它们各自的平面的存储器单元读取数据。
尽管控制器11控制存储器芯片15的操作以编程数据、读取数据、擦除和参加各种常规事务(housekeeping matter),但每个存储器芯片也包含执行来自控制器11的命令以执行这样的功能的某控制电路块。接口电路73连接到系统总线13的控制和状态部分21。来自控制器的命令被提供给状态机75,然后状态机75提供其他电路的特定控制,以便执行这些命令。控制线77-81将状态机75与如图2所示的这些其他电路相连接。来自状态机75的状态信息被通过线83传送到接口73,以通过总线部分21发送到控制器11。
存储器单元阵列41和43的NAND体系是当前优选的,但也可改为使用其他体系,如NOR。NAND闪存存储器的例子和它们作为存储器系统的一部分的操作可参照美国专利号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的存储器系统的存储器单元阵列41的一部分。提供了大量的全局位线,但为了简单解释,在图2中仅仅示出了四条这样的线91-94。在这些位线之一和参考电势之间连接多个串联的存储器单元单列(string)97-104。使用存储器单元单列99为代表,多个电荷存储存储器单元107-110在单列的任一端与选择晶体管111和112串联。当使得单列的选择晶体管导电时,单列被连接在其位线和参考电势之间。然后一次对该单列中的一个存储器单元进行编程或读取。
图3的字线115-118单独在存储器单元的多个单列的每一个中的一个存储器单元的电荷存储元件上延伸,并且栅极119和120控制位于单列的每个端的选择晶体管的状态。共享公用字和控制栅极线115-120的存储器单元单列被制成为形成被一起擦除的存储器单元的块123。该单元块包含一次可物理擦除的最小数目的单元。一次对沿着字线115-118之一的一行存储器单元进行编程。典型地,按规定次序对NAND阵列的行进行编程,在此情况下,从沿着最接近单列连接到地或另一公用电势的那端的字线118的行开始。然后对沿着字线117的存储器单元的行编程,如此等等,贯穿块123。最后对沿着字线115的行编程。
第二块125是类似的,其存储器单元的单列连接到与第一块123中的单列相同的全局位线,但具有不同组的字和控制栅极线。字和控制栅极线被行控制电路55驱动到它们正确的操作电压。如果系统中存在多于一个的平面或子阵列,如图2的平面1和2,则一个存储器体系使用在它们之间延伸的公用字线。可替换地,可以有多于两个的平面或子阵列共享公用字线。在其他存储器体系中,分别驱动各个平面或子阵列的字线。
如在上面引用的一些NAND专利和公开申请中所描述的,存储器系统可被操作为在每个电荷存储元件或区域中存储多于两个的可检测电荷电平,由此在每个中存储多于一个比特的数据。存储器单元的电荷存储元件是最通常的导电浮置栅极,但可替换地,可以是不导电的介电电荷陷阱材料,如在美国专利申请公开号2003/0109093中所述的。
图4概念性地例示了被用作下面进一步描述的例子的闪存存储器单元阵列7(图1)的组织。存储器单元的四个平面或子阵列131-134可以在单个集成存储器单元芯片上、在两个芯片(每个芯片上两个平面)或在四个分离的芯片上。具体布置对于以下说明而言不重要。当然,系统中可存在其他数目的平面,如1、2、8、16或更多。通过位于各个平面131-134中的矩形,如框137、138、139和140,平面被各个分为图4中所示的存储器单元的块。每个平面中可以有数十或数百个块。
如上所述,存储器单元的块是擦除的单位,可一起物理擦除的最小数目的存储器单元。然而,为了增大的并行性(parallelism),以更大的元块(metablock)为单位来操作块。来自每个平面的一个块在逻辑上链接在一起以形成元块。四个块137-140被示出为形成一个元块141。元块内的所有单元一般被一起擦除。用于形成元块的块不需限于它们各自平面内的相同的相对位置,如由块145-148构成的第二元块143所示。尽管通常优选的是在所有平面上延伸元块,但为了更高的系统性能,可以利用动态形成不同平面中的一个、两个或三个块中的任一个或所有的元块的能力,操作存储器系统。这允许元块的尺寸更接近地匹配可用于在一个编程操作中存储的数据的量。
随后,为了操作性目的,将各个块分到存储器单元的页(page),如图5所示。例如,块137-140的每个的存储器单元每个被分为8个页P0-P7。可替换地,每个块内可以有16、32或更多的存储器单元的页。页是块内的数据编程和读取的单位,包含一次编程或读取的最小数据量。在图3的NAND体系中,页由块内沿着字线的存储器单元形成。然而,为了增加存储器系统操作并行性,两个或更多块内的这样的页可在逻辑上链接为元页(metapage)。图5中例示了元页151,由来自四个块137-140中的每个块的一个物理页形成。例如,元页151包括四个块中每个块的页P2,但元页的页不必具有每个块内的相同的相对位置。元页是编程的最大单位。
图6中所示的主机1和存储器系统2之间的公用逻辑接口利用连续的逻辑地址空间160,其大到足以对存储器系统2中可存储的所有数据提供地址。参照上述主机1和存储器系统2,要存储在闪存存储器7中的数据一般以逻辑块地址(LBA)格式接收。主机地址空间一般被分到数据簇的增量。可在给定主机系统中将每个簇设计为包含多个数据扇区,有些情况下4到64个扇区之间是典型的。标准扇区包含512字节的数据。参照图6,示出了NTFS文件系统的逻辑地址空间160中已分配簇162和空闲簇164的典型模式。
图7中示出了用于解决在图6中所见的逻辑地址空间160的破碎化的组织结构。这里描述的用于存储地址重新映射的系统和方法按照簇的块166(下面的描述中总称为“块”)分配LBA地址。通过始终将数据写入各个块166中,并在前进到下一可用块之前用数据完全填充该块166,来处理写操作,在以下描述中,完全用有效数据填充的块166被称为红块168,而不具有有效数据并由此仅仅包含未写容量的块被称为白块170。如果存储器系统采用“使用后擦除”类型的过程,则白块170中的未写容量可处于已擦除状态。可替换地,如果存储器系统采用“使用前擦除”类型的过程,则白块170中的未写容量可由需要在分配时擦除的废弃数据构成。已被完全编程并具有有效162和无效(也称为废弃)164数据簇两者的块被称为粉块172。
为了按照逻辑地址的块划分和管理逻辑地址空间160,主机和存储器系统可能需要交换关于闪存存储器中的物理块的块尺寸的信息。逻辑块的尺寸优选地与物理块的尺寸相同,并且在存储器系统与主机连接时通信此信息。该通信可被设置为作为加电或将存储器系统连接到主机时的握手操作而发生。在一个实施例中,主机可向存储器系统发送“识别驱动(Identify Drive)”询问,请求块尺寸和对准(alignment)信息,其中块尺寸是具体存储器系统的各个物理块的尺寸,而对准信息是对于可能已经占据(take up)每个物理块中的一些的系统数据,需要考虑距离物理块的起点有多大的偏移(如果有的话)。
识别驱动命令可被实现为传统LBA接口命令组中的保留码。可经由标准通信接口中的保留或未分配命令码,将命令从主机传送到存储器系统。合适的接口的例子包括用于固态盘的ATA接口,或者例如在CF或SD存储卡中使用的ATA相关接口。如果存储器系统未能提供块尺寸和偏移信息二者,则主机可假设默认的块尺寸和偏移。如果存储器系统仅仅用块尺寸信息响应识别驱动命令,而没有偏移信息,则主机可假设默认偏移。默认块尺寸可以是多个标准块尺寸中的任一个,并且优选地被设置为比有可能的实际物理块尺寸更大。默认偏移可以设置为零偏移,从而假设每个物理块可从主机接收从物理块中的第一地址开始的数据。如果主机被耦接到预定内部驱动器,如SSD,则可能无需执行该确定块尺寸和偏移的步骤,因为可能已经知道并预先编程了存储器装置的能力。因为即使内部驱动器可能被换掉,但是主机可被配置为始终检验存储器装置能力。对于可移除的存储器系统,主机可始终通过识别驱动命令或类似机制查询块尺寸和偏移。
这里描述的用于分配和写入簇的空闲块166的系统和方法可包括在主机系统和存储器系统之间的多个不同组合中分布的功能性或硬件。图8-11例示了实现簇的块分配的存储地址映射或重新映射算法如何可以在包括主机和固态存储装置中的文件的系统的层级结构内的四个不同级别上实现的例子。
图8和图9的布置为存储地址映射或重新映射功能性被完全包含在存储装置176、178内的实施例。在这前两个布置中,存储装置176、178可利用传统主机174操作,其中对主机174无需修改。相反,图10和图11所示的布置是存储地址映射或重新映射功能性被完全包含在主机180、182内的实施例。在这后两个实施例中,主机180、182可利用无需修改的传统存储装置184操作。
在图8的例子中,存储地址映射算法可被集成到存储装置176的存储器管理177中,其中来自主机174的LBA地址被直接映射到闪存存储器中的物理块,使得在前进到下一块之前,用数据完全填充物理存储器的第一块。可替换地,在图9中,存储地址重新映射机制可在存储装置178中实现,但与装置178的存储器管理器179分开。在图9的实现方式中,来自主机174的每个逻辑地址将利用按照完整块166的写数据的技术,重新映射到第二逻辑地址,这里将其称为存储逻辑块地址(存储LBA),这里也将其称为装置逻辑块地址(DLBA),然后存储器管理器179将在DLBA布置下组织的数据变换为物理存储器的块。在同于物理元块的统一尺寸的DLBA块中构造DLBA地址空间。图10的实现方式将存储地址重新映射的功能性从存储装置184移到主机180上的应用。在此实现方式中,将LBA地址映射到DLBA地址的功能将类似于图9,主要区别在于变换将在主机180上进行,而不是在存储器装置184中。然后主机180将在主机处生成的DLBA地址信息以及与DLBA地址相关联的数据一起传送到存储器装置184。最终,在图11中示出了在主机操作系统182自身中嵌入的数据分配布置。在该最后一个实现方式中,主机182的文件系统185(诸如WINDOWS XP或VISTA操作系统中的NTFS文件系统)将被布置为按照簇的完整的逻辑块来生成存储地址,而无需中间的逻辑地址到逻辑地址的变换。由此,图11的实现方式包括主机文件系统中修改的算法,使得初始生成LBA地址以在开始填充附加块之前填充全部块。
在图8-11的任一布置中,白块170被分配为用于写入数据的单独位置,并且用位于其写指针的当前位置的数据,按照其被主机提供的次序,顺序地填充。当存储地址的块被完全分配给有效数据时,其成为红块168。当文件被主机删除或者部分文件被主机更新时,则红块168中的一些地址可能不再被分配给有效数据,由此该块变为粉块172。如这里更详细讨论的,被分配为从主机接收数据的白块170被称为写入块,而被分配为在刷新操作期间接收数据的白块被称为重新放置块。可为了不同目的定义多个写指针。例如,在不同应用中,逻辑地址空间可基于地址范围(range)或基于文件尺寸而细分为多个顺序范围。逻辑地址空间的每个单独的范围可被配置为具有其自己的写入块和存储地址空间中的相关写指针。除了区段序列或文件尺寸之外,逻辑地址空间地址区段的划分可基于数据类型实现。例如,可能想要将经常更新的NTFS MFT表数据与不经常更新的数据分开。
存储地址重新映射算法通过将有效数据从粉块172重新放置(这里也称为刷新)到特殊写指针(称为重新放置指针),来管理白块170的创建。如果如上所述按范围或文件尺寸细分存储地址空间,则存储地址的每个范围可具有其自己的重新放置块和相关的重新放置指针。刷新操作通常作为背景操作执行,以将粉块变为红块和白块。粉块被根据其特性选择用于刷新操作。再次参照图7,在一个实现方式中,将选择具有最小量的有效数据(即图7中的最少阴影的簇)的粉块,因为具有有效数据的地址越少,使得在刷新该特定粉块时需要重新放置的数据越少。由此,在图7的例子中,因为粉块B含有更少的具有有效数据的地址,所以将选择粉块B,优先于粉块A。在其他实现方式中,选择用于刷新操作的粉块可以是与少于某一阈值量的有效数据相关联的一组粉块中的任一个。该阈值可以小于粉块的总集合中包含的有效数据的平均量。可以在列表中维持具有阈值量或阈值量以下的有效数据的粉块的子集,主机或存储器系统可从该列表选择粉块。例如,可维持当前满足阈值要求的粉块的限定数目(例如,16)或百分比(例如,百分之30)的动态列表,并且可从该列表选择用于刷新的任何粉块,而不论所选择的该列表中的粉块是否具有绝对最少量的有效数据。形成存储器系统或主机从其选择的列表的粉块的数目或百分比可以是固定值或可由用户选择的值。列表可包括按排序次序表示可用粉块中具有绝对最少量的有效数据的粉块的粉块组,或者可简单地包括落入阈值要求内的粉块。
可替换地,或者组合地,还可基于计算出的在特定粉块172中累积另外的废弃数据的概率,来选择粉块。在粉块172中累积其他废弃数据的概率可以基于如下假设:在存储器中存在得最久的数据最不可能被删除。由此,作为重新放置块的粉块172将包含比作为写入块的具有新的主机数据的粉块172更旧的健在(surviving)数据。然后,用于刷新的粉块172的选择处理将首先针对作为新近的重新放置块的粉块172,因为它们不太可能具有进一步删除的数据,由此能够期望更少的附加废弃数据。基于较新的数据更可能被删除的假设,选择先前作为写入块的粉块172用于之后的刷新,由此产生更多的废弃数据。
图12中示出了存储地址重新映射算法中的块状态改变的数据流和模式。如上所示,存储地址重新映射技术按照簇的块分配地址空间,并在分配另一簇的块之前填满簇的块166。这可通过以下实现:首先将白块分配为当前写入块(向其写入来自主机的数据),其中来自主机的数据根据其被接收的时间的顺序依次来写入到写入块中(在步骤188)。当用有效数据填充了当前写入块中的最后页面时,当前写入块变为红块(在步骤190)并且从白块列表分配新的写入块。应注意,如果在当前写入块被完全编程之前当前写入块内的某些页已经变废弃,则当前写入块也可以直接转变为粉块。为了简洁,未示出该转变;然而,其可以由从写入块到粉块的箭头表示。
再次参照图12中的数据流的具体例子,当通过删除LBA区段而使得红块内的一个或多个页废弃时,红块变为粉块(在步骤192)。当存储地址重新映射算法检测到需要更多白块时,算法启动刷新操作,以将有效数据从粉块移走,使得粉块变为白块(在步骤194)。为了刷新粉块,粉块的有效数据被顺序地重新放置到已经被指定为重新放置块的白块(在步骤194’和196)。在填充了重新放置块时,其变为红块(在步骤198)。如上参照写入块所述,如果重新放置块内的某些页已经变废弃,则它还可直接转变为粉块。为了简洁,未示出该转变,但可由图12中从重新放置块到粉块的箭头表示。
图13例示了替代数据流例子,其中存储地址重新映射功能性被应用于具有二进制200和多层单元(MLC)201的闪存存储器分区(partition)。MLC分区200中的块状态改变与图12中相同,但是二进制分区200中的块状态改变(在步骤202-205)与MLC分区201的不同。在二进制分区200中,在被顺序写入的写入块处接收从主机接收的数据,直到它被填充并变为红块为止(在202)。如果红块的页变废弃,则该块变为粉块(在203)。可如这里所讨论的那样刷新粉块,以创建新的白块(在204),其然后被指定为二进制分区中的新的白块(在205)。然而,来自二进制分区200中的粉块的有效数据以及来自红块的有效数据可被发送到MLC分区201。
在如图13所示的存储器系统2中,其中闪存存储器7被分为两级(two-tier)系统,二进制分区200充当从主机接收数据的高速缓存,MLC分区201充当从二进制分区接收数据的主存储区域,图8-11的“主机”可以是二进制分区。由此,这里讨论的存储地址重新映射技术可涉及完全在存储器系统2的各级内的操作,其中前一级(在该例子中,二进制分区200)被当作主机,而当前级(这里,MLC分区201)被当作存储装置。预期该关系可延伸到具有超过两级布局的存储器系统,其中前一级类似于主机而当前级被当作存储装置。在利用二进制和MLC分区的其他实施例中,主机1可直接写入到MLC分区201,而不必首先通过二进制分区200。
参照图9和图10所示的存储地址重新映射的实现方式,其中由存储装置(图9)或主机(图10)上的应用执行逻辑到逻辑、LBA到DLBA转变,现在参照图14-17讨论根据图12的状态图的地址操纵的详细例子。假设系统已经根据图12所表示的存储地址重新映射算法操作,则可如图14所示,表示给定时间上LBA地址空间208中的主机空闲簇图和DLBA地址空间210中的空闲簇图的假想部分。在LBA地址空间208中,空闲簇164分散在基本随机的位置上。在DLBA地址空间210中,两个白块170可用,并且存在具有不同数目的废弃(空闲)簇164的三个粉块172。
当主机然后具有要写入存储装置的数据时,其分配LBA地址空间208,无论在何处可得。图15示出了存储地址重新映射算法如何将可用白块170之一分配为写入块212,以及每个LBA地址如何映射到写入块212中可用的DLBA空间中的顺序的簇。DLBA空间中的写入块212按照写入LBA地址的次序写入,而不论LBA地址位置如何。在该例子中,为了容易说明,假设主机使用的空闲LBA簇的时间次序与地址次序相同,但是存储地址重新映射算法将按照使用LBA地址的时间次序分派写入块212中的DLBA地址,而不论LBA地址号的次序如何。数据被写入到一个或多个DLBA区段中的写入块中。DLBA区段是被映射到同一LBA区段中的连续LBA地址的一组连续DLBA地址。DLBA区段必须在DLBA地址空间210的块边界处终止。当写入块212被填满时,白块170被分配为下一写入块212。
DLBA块与闪存存储器的物理地址空间中的块214对齐,因此,DLBA块尺寸和物理地址块尺寸是相同的。这样,DLBA写入块212中的地址的布局也与物理地址空间中相应更新块的布局相同。由于此对应关系,在物理更新块中不曾需要分离数据整合(通常称为无用数据收集)。在通常的无用数据收集操作中,一般始终重新汇集逻辑地址的块,以维持逻辑块中的LBA地址的特定范围,这也反映在物理块中。更具体地,当利用通常的无用数据收集操作的存储器系统接收到与特定物理块中的扇区相对应的信息的更新扇区时,存储器系统将分配物理存储器中的更新块以接收更新的一个或多个扇区,然后将来自原有物理块的所有剩余有效数据整合为更新块的剩余部分(remainder)。以此方式,标准无用数据收集将使得特定LBA地址范围的数据块长期继续存在,从而对应于该特定地址范围的数据将始终被整合到共同的物理块中。下面更具体讨论的刷新操作不需要整合相同地址范围中的数据。相反,这里公开的刷新操作执行地址映射(图8和图11的实现方式)或重新映射(图9和图10的实现方式),以创建可作为来自各种物理块的数据的集合的新数据块,其中不意图整合具体LBA地址范围的数据。
如前所述,存储地址重新映射算法操作以确保对于要操作的顺序的写算法,可获得足够的白块供应。存储地址重新映射算法通过将来自粉块的数据刷新到被称为重新放置块216的特殊写入块(图16),管理白块的创建。当前选中用于刷新的粉块被称为刷新块。
现在参照图15-16,示出了块刷新处理的图示。存储地址重新映射算法将白块指定为重新放置块216,将从所选的粉块向重新放置块216刷新数据以产生另外的白块。刷新块(图15的粉块A)中的有效数据(也称为红数据)被重新放置到重新放置块216中的顺序的地址中,以将刷新块转换为白块170。还分派物理地址空间218中的相应更新块214以接收刷新的数据。如同用于从主机接收的新数据的更新块214那样,用于接收刷新的数据的更新块214将不需要用来整合有效数据的无用数据收集操作,这是因为刷新操作已经完成了DLBA地址空间210中的整合。
如图17所示,从剩余粉块中标识出下一刷新块(图16的粉块B)。具有最少的红数据的粉块被再次指定为刷新块,并且该粉块的红数据(有效数据)被传输到开放的重新放置块中的顺序的位置中。还进行更新块214中的物理地址的并行分派。同样,在被映射到重新放置块216的物理更新块214中不需要数据整合。作为背景操作而对粉块进行刷新操作,以按照足以补偿被指定为写入块的白块的消耗的速率来产生白块。图14-17的例子例示了对于来自主机的新数据以及对于来自粉块的重新放置的数据,如何分开维持白块和重新放置块,以及物理地址空间中的各个分离的更新块。类似于仅仅在当前写入块被完全编程时的分配新写入块以关联从主机接收的新数据的处理,优选地,仅仅在前一重新放置块已经被完全编程之后才分配新的重新放置块。优选地,在分配时,新的重新放置块仅仅包含未写容量,即,仅仅与准备擦除的废弃数据相关,或者已经被擦除且不包含有效数据。
在上述实施例中,来自主机的新数据与仅仅从主机接收其他新数据的写入块相关,并且在刷新操作中从粉块刷新的有效数据被移动到仅仅包含来自一个或多个粉块的有效数据的重新放置块中。在其他实现方式中,新数据和重新放置的数据可被传输到单个写入块,而无需分离的写入块和重新放置块。如上所述,在其他实施例中,可选择用于刷新的粉块,其中,可选取与低于阈值(如当前粉块的平均量)的量的红数据相关的粉块列表中的任何粉块,或者该粉块可以是可用粉块中具有特定排序(基于与粉块相关的有效数据量)的粉块中的任何粉块。
刷新操作将相对“冷”的数据从“热”数据已经废弃的块重新放置到包含类似的相对冷的数据的重新放置块中。这具有产生相对热和相对冷的块的分离的填入(population)的效果。将要刷新的块始终选择为包含最少量数据的热块。通过减少需要重新放置的数据量,热块填入的创建减少了存储器压力因素。
在一个实施例中,被选作刷新块的粉块可以是最稀疏填入的粉块,即,包含最少量有效数据的粉块,并且不是响应于主机所执行的特定写入和删除操作而选择的。以此方式选择粉块作为刷新块,允许通过最少地重新放置有效数据来执行块刷新操作,因为这样选择的任何粉块将累积了最大数目的由于主机删除文件而未分配的数据地址。
粉块选择处理的一个例子可以是选择具有最低数目的有效页或簇的5%的粉块中的任何粉块。在背景处理中,建立具有最低页或簇计数值的16个粉块的列表。粉块标识处理可完成“P”个调度块刷新操作所占据的时间中的一个周期。图18中例示了刷新块标识处理中的周期。包含用于白、粉和其他类型的DLBA地址块的块地址列表的块信息表(BIT)由如下将更详细描述的存储地址重新映射功能维持,并且被读取以在前一处理周期间标识的块的组之后,标识下一组Q个粉块(在步骤220)。应该在装置初始化之后的第一处理周期中标识第一组粉块。为了确保粉块的可用性,Q的值应该大于P。在一个实现方式中,Q的值可以是8而P可以是4。对于组中每个粉块,将有效页计数值设置为零(在步骤222)。维持以跟踪LBA和DLBA关系的存储地址表(SAT)页条目一次被扫描一条,以标识位于该组中任何粉块内的有效数据页(在步骤224)。下面更详细地描述存储地址表。有效页计数值相应递增。在已经扫描了所有SAT页之后,针对低有效页计数值的列表中的粉块,评估组中每个粉块的有效页计数值,并且在必要时,用该组中的块替换列表中的块(在步骤226)。在完成块刷新操作之后,应选择用于下一块刷新操作的块。这应该是列表中具有最低有效页计数值的块。
在开始例如参照图16-17所述的块刷新操作之前,必须映射所选块,以确定必须重新放置的有效DLBA区段的位置。这通过使用从块中读取的所选数据页的标头(header)中的LBA地址以及用于这些LBA地址的SAT条目的搜索算法来实现。搜索算法使用其逐步建立的已知有效和废弃DLBA区段的映射。当SAT条目定义了其在块中出现时,有效DLBA区段被添加到块映射。当正被映射的块的数据页标头中的LBA范围的SAT条目定义了有效DLBA在另一块中出现时,废弃DLBA区段被添加到块映射。搜索处理继续,直到块中所有DLBA地址已经被明确映射为有效或废弃。
在块刷新操作中,将在上述块映射处理中标识的有效DLBA区段内的所有页从所选块重新放置到重新放置块中的重新放置指针处。在SAT列表中记录被重新放置的DLBA的条目。在图9所示的布置的情况下,可由存储器系统2的控制器8执行有效和废弃DLBA区段的搜索,并且可在与控制器相关联的RAM中存储块DLBA映射。对于图10的布置,主机系统1处的CPU可执行搜索并在与主机系统CPU相关联的RAM中存储所得的块DLBA信息。
存储地址重新映射算法按照以下原则操作:当白块的数目落到预定阈值之下时,必须按照足以确保以与写入块中写入主机数据所消耗的白块容量相同的速率产生能分配用于写入数据的可用白块容量的速率,对粉块进行刷新操作。通过写入来自主机的数据而消耗的写入块中的页的数目必须与块刷新操作所覆盖的废弃页的数目平衡。在完成块刷新操作之后,通过如上所述从BIT和SAT读取特定条目,确定选择用于下一块刷新操作的粉块中的废弃数据的页数。下一块刷新操作被调度为在将该数目的有效页的数据写入到写入块之后立即开始。
存储地址表
为了实现上述存储地址重新映射,使用存储地址表(SAT)跟踪存储地址空间内的数据的位置。SAT中的信息也被写入作为用来完成闪存元块的顺序更新的一部分。因此,在一个实现方式中,将SAT信息写入到与用于从主机接收的数据的写入块分开、及与用于刷新操作的重新放置块分开的写入块中。在其他实现方式中,SAT信息可被存储在不同的块群组中,例如二进制闪存分区而不是由非SAT信息占据的MLC闪存分区中的块。可替换地,在相同类型的闪存块中存储SAT和非SAT数据,但由块隔开。在再一实施例中,可在同一块中混合SAT和非SAT数据。
SAT涉及图8-10的实施例,但不涉及图11,图11中主机文件系统在地址的逻辑块中顺序地写入数据,并且不需要将第一逻辑地址变换为第二逻辑地址。而且,尽管以下讨论针对与从主机LBA重新映射到被称为DLBA(也称为存储LBA)的与图9-10的主机和存储器装置配置有关的第二LBA空间,但该相同的SAT技术可应用于图8的实施例,其中与主机LBA相关的数据被直接映射到物理块,而没有中间的逻辑到逻辑变换。优选地,不论所讨论的实施例如何,将SAT信息存储在存储器装置中的闪存存储器中。对于图10的实施例,其中在主机180上进行从主机LBA到DLBA的重新映射,传送SAT信息以存储在存储器装置184的闪存存储器中。对于图8的实施例,其中在存储器装置内的存储器管理器中实现存储地址重新映射算法,术语DLBA是指闪存存储器7中的物理地址而不是在图9-10的实施例中所使用的第二逻辑地址空间,并且DLBA地址的块代表物理存储器中的元块。
存储地址表(SAT)包含将主机文件系统所分派的LBA地址与DLBA地址相关联的关联信息。更具体地,SAT用于记录在由主机文件系统分配给有效数据的LBA地址空间中的每个地址区段和由存储地址重新映射算法产生的DLBA地址空间210中的一个或多个地址区段之间的映射。如上所述,系统地址空间的单位是LBA,而LBA区段是当前由主机文件系统分配给有效数据的连续的一组LBA地址。LBA区段常常与未分配的LBA地址相邻,但是如果SAT数据结构有需要,LBA区段可作为多个更小的LBA区段来管理。装置地址空间的单位是DLBA,而DLBA区段是被映射到相同LBA区段中的连续LBA地址上的连续的一组DLBA地址。DLBA区段在DLBA地址空间中的块边界处终止。每个LBA区段被SAT映射到一个或多个DLBA区段。LBA区段的长度等于其所映射到的DLBA区段的累计长度。
LBA区段的SAT条目包含到其所映射到的第一DLBA区段的条目的链接。其还可以映射到的后续DLBA区段是紧接在该区段之后的顺序条目。DLBA区段包含到其映射到的LBA区段内的偏移地址的反向链接,但不是到LBA区段的绝对LBA地址。单个LBA地址可被定义为LBA区段内的LBA偏移。SAT记录与被映射到LBA区段的每个DLBA区段的起点相对应的LBA偏移。因而,与个别LBA地址相对应的个别DLBA地址可被标识为DLBA区段内的DLBA偏移。尽管SAT中的LBA区段可仅仅用于有效数据的区段,但在其他实现方式中,SAT也可被配置为存储用于有效和废弃数据这两者的LBA区段。
在被称为SAT块的LBA地址块内实现SAT。SAT包括已定义的最大数目的SAT块,并包含已定义的最大数目的有效SAT页。因而,SAT具有其对于指定最大数目的SAT块可索引(index)的最大数目的DLBA块。尽管定义了最大数目的SAT块,但SAT是可变尺寸的表,其可自动缩放直到最大数目,因为SAT中的条目数将根据主机所分派的LBA的破碎度自己调整。由此,如果主机分派了高度破碎的LBA,则SAT将包括比主机向数据分派了没那么破碎的LBA群组的情况下更多的条目。因此,如果主机LBA变得没那么破碎,则SAT的尺寸将减小。更低的破碎度带来更少的要映射的分离区段,并且更少的分离区段带来SAT中更少的条目,因为SAT在一个条目中将主机LBA地址的区段映射到一个或多个DLBA区段,而不是严格地跟踪和更新固定数目的逻辑地址。
由于SAT的区段到区段映射的布置,主机LBA地址的区段可被映射到两个或更多个DLBA区段,其中主机LBA区段是被分配给有效数据的一组连续逻辑地址,而DLBA(或存储LBA)区段是同一元块内的且被映射到同一主机LBA区段的连续的一组DLBA地址。图19中示出了SAT索引和映射结构的层级。示出了LBA 230和相应的DLBA 232。LBA到DLBA映射信息被包含在SAT页234中。LBA到SAT页索引信息被包含在SAT索引页236中,并且对于图10的实现方式,主控(master)页索引238在与主机处理器相关联的RAM中高速缓存,对于图8-9的实现方式,在与控制器8相关联的RAM中高速缓存。
SAT正常包括多个SAT块,但SAT信息仅可写入到单个块目前指定的SAT写入块。所有其他SAT块已经被全部写入,并且可包含有效和废弃页的组合。SAT页包含用于可变范围的主机LBA地址空间内的所有LBA区段的条目、以及用于它们所映射到的装置地址空间中的区段的条目。可存在大量SAT页。SAT索引页包含对更大范围的主机LBA地址空间内的每个有效SAT页的位置的索引。存在少量的SAT索引页,一般为1。通过在单个SAT写入块中的下一可用位置处重新写入更新页,并将前一版本的页当作废弃的,来修改SAT中的信息。因而,SAT中可能存在大量无效页。由与上面对主机数据描述的算法类比的用于写入页和刷新块的算法,来管理SAT块。
SAT块
每个SAT块是专用于存储SAT信息的DLBA地址的块。SAT块被分为表页,可用向其中写入SAT页234或SAT索引页236。SAT块可包含有效SAT页234、有效SAT索引页236和废弃页的任何组合。参照图20,示出了示例SAT写入块240。按照由递增的SAT写指针242所定义的顺序位置,将数据写入SAT写入块240中。可将数据仅仅写入到被指定为SAT写入块240的单个SAT块。按照与前面描述的主机数据写入块(例如,图15-17中的项目212)相同的方式,当SAT写入块240被完全写满时,白块被分配为新的SAT写入块240。SAT页位置通过其在SAT块内的序号来定址。
SAT页
SAT页234是SAT中映射信息的最小可更新单位。在SAT写指针242所定义的位置处写入更新后的SAT页234。SAT页234包含具有递增LBA地址的一组LBA区段的映射信息,但是连续LBA区段的地址无需是连续的。SAT页234中的LBA地址的范围与任何其他SAT页234中的LBA地址的范围不重叠。SAT页234可以分布在整组SAT块上,没有限制。任何范围的LBA地址的SAT页234可以在任何SAT块中。SAT页234可包括索引缓冲器字段244、LBA字段246、DLBA字段248和控制指针250。参数备用条目还包含易失性RAM中存储的一些参数值。
SAT页234内的LBA字段246包含一定范围的LBA地址内被分配用于数据存储的连续LBA地址的区段的条目。SAT页234跨越的LBA地址的范围与任何其他SAT页234跨越的LBA条目的范围不重叠。LBA字段是可变的长度,并包含可变数目的LBA条目。在LBA字段246内,存在用于由SAT页234索引的该范围的LBA地址内每个LBA区段的LBA条目252。LBA区段被映射到一个或多个DLBA区段。如图21所示,LBA条目252包含以下信息:区段中的第一LBA 254,扇区中LBA区段的长度256、以及LBA区段所映射到的第一DLBA区段的、同一SAT页234中的DLBA字段内的DLBA条目数258。
SAT页234内的DLBA字段248包含被映射到同一SAT页234中的LBA字段内的LBA区段的所有DLBA地址区段的条目。DLBA字段248是可变长度的,并且包含可变数目的DLBA条目260。在DLBA字段248内,存在用于被映射到相同SAT页234中的LBA字段246内的LBA区段的每个DLBA区段的DLBA条目260。如图22所示,每个DLBA条目260包含以下信息:区段中的第一DLBA地址262;以及第一DLBA地址所映射到的LBA区段中的LBA偏移264。作为每个SAT页234的一部分写入、但仅仅在最新近写入的SAT页234中保持有效的SAT页/索引缓冲器字段包含SAT索引条目266。
存在用于当前在相关SAT索引页236中没有有效条目的SAT中的每个SAT页234的SAT索引条目266。在每当写入SAT页234时创建或更新SAT索引条目,并在更新相关SAT索引页236时删除。它包含由SAT页234索引的第一LBA 268、由SAT页234索引的最后LBA 270、包含SAT页234的SAT块编号272、以及SAT块内的SAT页234的页编号274。SAT索引字段276具有用于固定数目的SAT索引条目278的容量。该数目确定了可写入SAT页234和SAT索引页236的相对频率。在一个实现方式中,该固定数目为32。
SAT页字段指针250定义了从LBA字段的起点到DLBA字段的起点的偏移。它包含作为LBA条目数的偏移值。SAT页234中的参数备用条目包含在易失性RAM中存储的参数的值。在功率周期之后,在(对于图8-9的实现方式,与控制器8相关联,或者对于图10的实现方式,与主机CPU相关联的)RAM中的信息的初始化期间使用这些参数值。它们仅仅在最新近写入的SAT页234中有效。
SAT索引页
一组SAT索引页236提供了对SAT中每个有效SAT页234的位置的索引。各个SAT索引页236包含定义了与一定范围的LBA地址有关的有效SAT页位置的条目278。SAT索引页236所跨越的LBA地址的范围与任何其他SAT索引页236所跨越的LBA地址的范围不重叠。根据条目相关的SAT页的LBA地址范围值来对条目排序。SAT索引页236包含固定数目的条目。SAT索引页236可分布在整组SAT块上,没有限制。用于任何范围的LBA地址的SAT索引页236可在任何SAT块中。SAT索引页236包括SAT索引字段和页索引字段。
SAT索引字段276包含用于SAT索引页236所跨越的LBA地址范围内的所有有效SAT页的SAT索引条目。SAT索引条目278关于单个SAT页234,并包含以下信息:由SAT页234索引的第一LBA,包含SAT页234的SAT块编号,以及SAT块内的SAT页234的页编号。页索引字段包含SAT中所有有效SAT索引页236的页索引条目。存在用于SAT中每个有效SAT索引页236的页索引条目,其包含以下信息:由SAT索引页索引的第一LBA,包含SAT索引页的SAT块编号,以及SAT块内的SAT索引页的页编号。页索引条目仅仅在最新近写入的SAT索引页236中有效。
临时SAT数据结构
尽管不是用于图19所示的地址映射的长期存储的SAT层级的一部分,但可在用于更新SAT的层级过程中使用附加数据结构。一种这样的结构是SAT列表,包括LBA条目和从对LBA区段的更新操作或还未被写入SAT页234中的块刷新操作而得到的新地址映射的新条目的相应DLBA映射。SAT列表可以是RAM中的易失性结构。当在SAT页更新期间将SAT列表中的条目写入到SAT页234时清除所述SAT列表中的条目。
表页
表页是用于存储一个SAT页234或一个SAT索引页236的SAT块内DLBA地址空间的固定尺寸的单元。表页的最小尺寸是一页,而最大尺寸是一元页(metapage),其中页和元页是与物理存储器中的页和元页相对应的DLBA地址空间的单位。
SAT中的条目尺寸
表1中示出了SAT页234和SAT索引页236内的条目的尺寸。
表1:SAT条目尺寸
条目 |
地址范围 |
条目尺寸,字节 |
SAT页/LBA字段/LBA条目/第一LBA |
2048GB |
4 |
SAT页/LBA字段/LBA条目/区段长度 |
32MB |
2 |
SAT页/LBA字段/LBA条目/DLBA条目号 |
64K条目 |
2 |
SAT页/DLBA字段/DLBA条目/第一DLBA |
2048GB |
4 |
SAT页/DLBA字段/DLBA条目/LBA偏移 |
32MB |
2 |
SAT页/索引缓冲器字段/SAT索引条目/第一LBA |
2048GB |
4 |
SAT页/索引缓冲器字段/SAT索引条目/最后LBA |
2048GB |
4 |
SAT页/索引缓冲器字段/SAT索引条目/SAT块地址 |
64K块 |
2 |
SAT页/索引缓冲器字段/SAT索引条目/SAT页地址 |
64K页 |
2 |
SAT页/字段指针 |
64K条目 |
2 |
SAT索引页/SAT索引字段/SAT索引条目/第一LBA |
2048GB |
4 |
SAT索引页/SAT索引字段/SAT索引条目/SAT块地址 |
64K块 |
2 |
条目 |
地址范围 |
条目尺寸,字节 |
SAT索引页/SAT索引字段/SAT索引条目/SAT页地址 |
64K页 |
2 |
SAT索引页/页索引字段/页索引条目/第一LBA |
2048GB |
4 |
SAT索引页/页索引字段/页索引条目/SAT块地址 |
64K块 |
2 |
SAT索引页/页索引字段/页索引条目/SAT页地址 |
64K页 |
2 |
地址变换
SAT可用于对与主机文件系统的LBA地址相对应的DLBA地址进行快速定位。在一个实施例中,在SAT中仅仅包括被映射到有效数据的LBA地址。因为SAT页234按LBA次序排列,在从一个SAT页234到另一个SAT页234的LBA范围中没有重叠,所以可使用简单的搜索算法来对期望数据进行快速确定目标(home)。图24中示出了这种地址变换过程的例子。首先由控制器或处理器(分别取决于存储地址重新映射实现方式如图9还是如图10配置)接收目标LBA 280。在其他实施例中,预期SAT可包括被映射到有效数据和废弃数据的LBA地址,并跟踪数据是有效还是废弃。
除了例示了地址变换过程之外,图24还示出了可如何配置来自最后写入的SAT索引页的页索引字段和来自最后写入的SAT页的索引缓冲器字段。在图24的实现方式中,在诸如存储装置或主机中的RAM的易失性存储器中临时维持这两个字段。最后写入的SAT索引页的页索引字段包括对每个SAT索引页的指针。索引缓冲器字段可包含用于还未被写入索引页中的新近写入的SAT页的一组索引条目。
在特定SAT页234中保存目标LBA地址到相应DLBA地址的映射信息,其包含围绕目标地址的一定范围的LBA地址的所有映射信息。地址变换过程的第一阶段是标识和读取该目标SAT页。参照图24,对最后写入的SAT页中的索引缓冲器字段的高速缓存的版本进行二进制搜索,以确定是否存在用于目标LBA的SAT索引条目(在步骤282)。如果已经新近重新写入了目标SAT页,则将存在条目,但还未写入包含了记录目标SAT页的新位置的SAT索引条目的SAT索引页。如果找到用于目标LBA的SAT索引条目,则其定义了目标SAT页的位置并且读取此页(在步骤284)。
如果在步骤282中未找到用于目标LBA的SAT索引条目,则对最后写入的SAT索引页中的页索引字段的高速缓存的版本进行二进制搜索,以对用于目标LBA的SAT索引条目进行定位(在步骤286)。在步骤286中找到的用于目标LBA的SAT索引条目定义了包含目标LBA的LBA地址范围的SAT索引页的位置。读取该页(在步骤288)。进行二进制搜索以对用于目标LBA的SAT索引条目进行定位(在步骤290)。用于目标LBA的SAT索引条目定义了目标SAT页的位置。读取该页(在步骤292)。
当在步骤284或步骤292中读取了目标SAT页时,可如下进行LBA到DLBA变换。对LBA字段进行二进制搜索,以对包含了目标LBA的目标LBA区段的LBA条目进行定位。记录目标LBA区段内的目标LBA的偏移(在步骤294)。字段指针中的信息定义了用于二进制搜索的LBA字段的长度,以及相对于LBA字段的起点的DLBA字段的起点(在步骤296)。步骤294中找到的LBA条目定义了被映射到LBA区段的第一DLBA条目的DLBA字段内的位置(在步骤298)。与在步骤298中定位的多个DLBA条目之一一起使用在步骤294中确定的偏移,以确定目标DLBA地址(在步骤300)。
在另一实施例中,不对于与有效数据相关的每个LBA地址区段生成SAT中的单独LBA条目,而是可在SAT中映射LBA地址块,从而每个LBA地址块是SAT上的一个条目。在此实施例中,可在SAT中记录LBA地址空间中的完整LBA地址块,而不只是各个LBA区段。该实现方式中的LBA条目将会是列出LBA地址块所映射到的DLBA地址空间中的DLBA区段数以及对于相同SAT页中的第一DLBA区段的指针的一个条目。根据存储器装置中存储的数据的破碎程度,LBA地址块可被映射到最小一个DLBA区段,或者最大直到LBA地址块中的簇数。
用于LBA地址块的相应DLBA条目将列出DLBA块以及每个DLBA区段的地址偏移及其相应的LBA偏移二者。不同于上面讨论的对每个LBA区段记录分离的LBA条目的SAT版本(其中仅仅记录与有效数据相关联的LBA区段),记录LBA地址块中的每个LBA区段。由此,记录了当前未被分配给有效数据的LBA地址块中的LBA区段以及被分配给有效数据的LBA区段。在SAT页的DLBA条目部分中,标记未分配的LBA地址组的起点的LBA偏移与DLBA地址空间中的默认值配对。该默认值代表未分配的地址。相同的整体SAT结构和功能性以及参照图19-20讨论的基本SAT层级应用于LBA地址块映射实现方式,但是SAT页代表LBA地址块到DLBA区段映射信息,而不是各个LBA区段到DLBA区段信息。而且,在该实现方式中,SAT索引页存储LBA地址块到SAT页映射信息。
SAT例子
通过例子,在图25中例示了使用图9或图10的逻辑到逻辑存储地址重新映射技术、使用图19-23的各个LBA区段到DLBA区段映射的数据写处理。在图25中,例示了用于时间A-D的LBA地址空间302和DLBA地址空间304。在时间A,主机在三个分离的LBA区段(按序列L1、L2和L3)中写入数据。在LBA空间302中,每个数据区段彼此分开。然后三个LBA区段按照它们被接收的时间次序,重新映射到如时间A所示的DLBA地址空间中的块。该例子假设DLBA地址空间304中的簇的第一块是当前写入块。因此,LBA地址区段L1被分为DLBA地址区段D1以及在被指定为写入块的另一白块中的D2。类似地,在D2之后顺序地,将LBA地址空间区段L2变换为DLBA地址空间区段D3。然后使用最后一个DLBA地址空间区段L3来完成具有DLBA地址空间区段D4的簇的块,并开始具有DLBA地址空间区段D5的新写入块。参照下面的表A,目前为止所描述的LBA到DLBA变换将产生时间A处的SAT,其中向每个LBA区段提供指针、LBA地址空间中的簇长度和DLBA指针。
在SAT的DLBA条目侧,列出了对应于LBA区段的每个DLBA区段。在该例子中,因为单个LBA区段L1已经被分解为DLBA地址空间中两个分离的块,所以存在两个DLBA区段。在每个DLBA区段之后提供LBA偏移数,从而提供距离第一LBA簇和DLBA标记(marker)的偏移。由此,因为接着是标记DLBA2,具有作为LBA区段L1中的5簇的地址,所以它的偏移是5簇。接着是LBA2和LBA3标记,按照LBA次序在SAT的LBA条目一侧列出。因此,尽管DLBA地址空间中的数据区段对应于L1、L2和L3,其中L1、L2和L3代表写入这些分离区段的次序,但是通过LBA地址次序而不是LBA时间次序来组织表的LBA条目一侧。
表A
再次参照图25,在时间B,将附加LBA地址区段L4附接到L2。区段L2和L4实际上形成了单个LBA区段,但在该例子中为了简洁而分开标识。L4的数据被写入为在D5中最后一个条目之后被部分填充的第三写入块中的DLBA地址区段D6。如表B所示,时间B之后的SAT简单地在表的LBA条目一侧的结尾处加上LBA4标记,并指向DLBA条目一侧的DLBA7。
表B
参照图25中时间C处的活动,主机已经删除了其数据被写入LBA地址区段L1和L2的一个或多个文件。在DLBA地址空间304中,L1对应于D1和D2,L2对应于D3。因为这些区段现在表示废弃数据,所以由于有效(红)和废弃(白)数据的混合,在该例子中,之前为红块的两个地址块现在是粉块。如下面的表C所示,相应地更新SAT。移除所有废弃LBA区段,使得仅仅保留有效LBA区段。因为仅仅保留LBA地址空间区段L3和L4,LBA条目仅仅包含标记LBA2和LBA4以及相应的DLBA指针。SAT的DLBA条目一侧也仅仅包含有效数据所需的DLBA指针。
表C
在图25所示的时间的最后快照(时间D)中,原始LBA地址空间区段L3被主机用LBA地址空间L5处的信息部分更新。相应的DLBA地址空间变换是废弃部分D4和D5,使得显示附加的白空间,然后在DLBA地址空间中的当前写入块的结尾处顺序地添加新的LBA区段L5,直到完成该块,并标识新的写入块,使得LBA地址空间区段的剩余部分可被变换为DLBA地址。这造成了结束一个写入块的DLBA区段D7,以及开始新写入块的D8。参照下面的表D,再次更新表,使得LBA空间302中的LBA2指针仍然指向DLBA空间304中第一个DLBA指针,但DLBA条目一侧包括开始与对应于L3的其余DLBA地址相对应的DLBA区段的附加的三个DLBA指针。因为LBA地址空间302中没有对L4进行改变,所以对应于LBA4的用于L4的条目保持相同。应注意,图25的例子看起来示出了簇的连续块。尽管可能可以获得簇的连续块,但期望DLBA地址空间的块将由一个或多个中间块分开。仅仅为了例示的方便而提供连续的DLBA地址空间块。
表D
类似于上述用于数据的DLBA地址块的SAT刷新方案被实现以消除废弃SAT信息并创建白块以重新使用。
存储地址重新映射算法按照以下原则操作:当白块的数目落到预定阈值之下时,必须按照足以确保以与写入块中写入主机数据所消耗的白容量相同的速率产生能分配用于写入数据的可用白容量的速率,来对粉块进行刷新(也称为重新放置)操作。能分配用于写入数据的可用白簇容量是白块的容量加上可在刷新操作期间向其写入数据的重新放置块内的白簇容量。
如果选择用于刷新操作的粉块中的白簇容量占据每个粉块的x%,则一个粉块上通过刷新操作产生的新的可用容量是从粉块产生的一个完整白块减去通过重新放置来自正被刷新的块的数据而在重新放置块中消耗的块的(100-x)%。因而,对粉块的刷新操作产生新可用容量的白块的x%。因而,对于由被写入的主机数据填充的每个写入块,必须对100/x个粉块进行刷新操作,并且必须重新放置的数据是(100-x)/x块。因而,被编程的扇区对于主机写入的扇区的比率近似确定为1+(100-x)/x。
通过所使用的总装置容量的百分比以及包含数据的块(即,红块)的百分比,来确定平均粉块中的白簇容量的百分比。例如,如果装置有80%满,并且包含数据的块中30%为红块,则粉块包含26.2%的白簇容量。有可能的是,删除数据在装置中的LBA地址上的不均匀分布将导致一些粉块具有两倍的白块容量平均百分比。因而,在该例子中,选择用于刷新操作的粉块将具有52.4%白容量,即,x=52.4,并且由主机写入的数据的每个扇区中的被编程扇区的比率将为1.90。
当确定要刷新哪些粉块,是主机数据粉块还是SAT粉块时,存储地址重新映射算法可通过监视由NTFS写入的$bitmap(位图)文件,来检测未分配地址的指定。可按两种方式调度刷新操作。优选地,刷新操作作为背景操作,由此仅仅在SSD或其他便携式闪存存储器装置空闲时才工作,从而不影响主机数据写速度。可替换地,可在前景操作中利用刷新操作,其在主机正写入数据时活动。如果刷新操作被布置为前景操作,则当主机活动发生时,或当“刷新高速缓存”命令表示SSD或便携式闪存存储器装置的潜在关机时,自动暂停这些操作。前景和背景刷新操作选择可以是动态的判定,其中,当要求比在存储器装置的空闲状态期间能实现的速率更高的刷新速率时,执行前景操作。例如,主机或存储器装置可在前景和背景刷新操作之间反复(toggle),从而刷新速率被控制为维持恒定主机数据写速度,直到存储器装置填满。前景刷新操作可与主机数据写操作交错。例如,如果由于主机接口处的持续活动而不能获得足够的空闲时间,则用来执行块刷新操作的数据页的重新放置可在短脉冲群(short burst)内与响应于主机命令的装置活动交错进行。
SAT更新过程
使用表2所示的层级过程更新SAT数据结构内的元素。
表2:SAT的更新结构的层级
结构 |
位置 |
内容 |
更新触发 |
DLBA区段 |
写入块或重新放置块 |
主机数据 |
由主机确定 |
SAT列表 |
RAM |
还未写入SAT页中的LBA到DLBA映射条目 |
当DLBA区段被写入到写入块或重新放置块时 |
SAT页 |
SAT写入块 |
LBA到DLBA映射 |
当SAT列表满时,或当指 |
|
|
条目 |
定量的主机数据已作为DLBA区段写入时 |
结构 |
位置 |
内容 |
更新触发 |
SAT索引缓冲器 |
最后写入的SAT页 |
还未写入SAT索引页中的SAT索引条目 |
当写入任何SAT页时 |
SAT索引页 |
SAT写入块 |
SAT索引条目 |
当SAT索引缓冲器变满时,或当指定数目的SAT索引页需要更新时 |
如表2所示,除了DLBA区段更新之外,由SAT层级中更低级结构中的活动触发特定结构的SAT更新。每当与完整DLBA区段相关联的数据被写入到写入块时,更新SAT列表。当SAT列表中存在最大允许数目的条目时,更新一个或多个SAT页。当SAT页被更新时,来自SAT列表的一个或多个条目被添加到SAT页,并从SAT列表中移除。在SAT列表填满时更新的SAT页可被分为多个不同页群组,并且在一次操作中仅仅需要更新一个群组。这可帮助使得SAT更新操作可能延迟来自主机的数据写操作的时间最小化。在此情况下,仅仅从SAT列表复制到已经更新的SAT页群组的条目才从SAT列表中移除。被更新的SAT页的群组尺寸可被设置为不干扰主机系统1访问存储器系统2的能力的点。在一个实现方式中,群组尺寸可以是4个SAT页。
SAT索引缓冲器字段在最新近写入的SAT页中有效。每当写入SAT页时,更新它而没有附加编程。最终,当在SAT索引缓冲器中存在最大允许数目的条目时,更新SAT索引页。在SAT索引页更新期间,来自SAT索引缓冲器的一个或多个条目被添加到SAT索引页,并从SAT索引缓冲器中移除。如上参照SAT页的更新所述,必须更新的SAT索引页可被分为多个不同页群组,并且在一次操作中仅仅需要更新一个群组。这使得SAT更新操作可能延迟来自主机的数据写操作的时间最小化。仅仅从SAT索引缓冲器复制到已经更新的SAT索引页群组的条目才从SAT索引缓冲器中移除。在一个实现方式中,被更新的SAT索引页的群组尺寸可以是4。
由SAT页或SAT索引页跨越的LBA范围内所需的条目数是可变的,并可随时间改变。因而,并非不常见的是,SAT中的页溢出,或页被非常少地填入(populated)。这些情形可由用于分离和合并SAT中的页的方案来管理。
当在更新SAT页或SAT索引页期间要添加条目,但在页中没有充足的可获得的未用空间来容纳该变化时,页被分为两个。引入新SAT页或SAT索引页,并且对于先前填满的页和新空白页(每个将给予使得它们半满的多个条目),确定LBA范围。如有可能,然后在一次编程操作中写入该两个页。当该页为SAT页时,在最后写入的SAT页中的索引缓冲器字段中包括用于两个页的SAT索引条目。当该页为SAT索引页时,在最后写入的SAT索引页中的页索引字段中包括页索引条目。
当具有相邻LBA范围的两个或多个SAT页或两个SAT索引页被较少地填入时,页可被合并为单页。当所得的单页不会被填满超过80%时,合并启动。由分开的合并的页所跨越的范围限定用于新的单页的LBA范围。当合并的页是SAT页时,在最后写入的SAT页中的索引缓冲器字段中更新用于新页和合并页的SAT索引条目。当页是SAT索引页时,在最后写入的SAT索引页中的页索引字段中更新页索引条目。
在功率周期之后,即,在已经移除和恢复了功率之后,有必要将RAM中的SAT列表重新构造为与功率周期前完全相同的状态。这可通过从数据标头中的LBA地址信息中扫描所有写入块和重新放置块来实现,以标识从最后的SAT页更新起已经写入的附加数据。还在最后写入的SAT页中的字段中记录在最后一次SAT页更新时这些块的位置以及它们之中写指针和重新放置指针的位置。因而,扫描仅仅需要在这些指针的位置处开始。
刷新SAT块
刷新SAT块的处理类似于上面针对从主机接收的数据所述的处理,但仅仅对SAT块操作。由存储地址重新映射写和刷新算法对SAT进行的更新使得SAT块在如图26所示的块状态之间转变。首先,来自白块列表的白块被分配为SAT写入块(在310)。当已经分配了SAT写入块中的最后一页时,块变为红SAT块(在312)。可能的是,如果SAT写入块中的某些页已经变废弃,则SAT写入块还可转变为粉SAT块。然而,为了简洁,该转变在图26中未示出。当更新SAT页或SAT索引页时,使得红SAT块中的一个或多个页废弃,并且红SAT块变为粉SAT块(在314)。当对所选粉SAT块的刷新操作已完成时,粉SAT块变为白块(在316)。
现在将描述选择哪些SAT块将经受刷新过程的处理。选择包含少数有效页或簇的SAT块,作为要刷新的下一SAT块。该块应该是在具有最少数有效页的5%的SAT块之中。可通过构建具有最低有效页计数值的16个SAT块的列表的背景处理,完成块的选择。优选地,在M个调度的SAT块刷新操作所占据的时间中,该处理应该完成一个周期。
图27中例示了在用于确定接下来刷新哪些SAT块的背景处理的一个周期中发生的活动的例子。首先,扫描块信息表(BIT)以标识跟在先前处理周期期间所标识的块的组之后的下一组N个SAT块(在步骤318)。应该在装置初始化之后的第一处理周期中标识第一组SAT块。N的值可针对特定应用适当地选择,并且优选地大于对M选择的值,以便确保SAT刷新块的可用性。作为一个例子,M可以是4,而N可以是8。对于组中的每个SAT块,有效页计数值被设为零(在步骤320)。然后在高速缓存的页索引字段中扫描页索引条目,以标识位于组中任何SAT块中的有效SAT索引页(在步骤322)。有效页计数值相应地递增。依次在每个SAT索引页中扫描SAT索引条目,以标识位于组中任何SAT块中的有效SAT页(在步骤324)。有效页计数值相应地递增(在步骤326)。在扫描了页索引和SAT索引页以确定有效页计数值之后,针对低有效页计数值的列表中的SAT块,评估组中每个SAT块的有效页计数值,并且在必要时,用该组中的块替换列表中的块(在步骤328)。当应该调度SAT块刷新操作时,选择列表中具有最低有效页计数值的块。
在SAT块刷新操作中,所有有效SAT索引页和SAT页被从所选块重新放置到SAT写指针242。仅仅在最后写入的SAT索引页中更新页索引字段。为了让SAT块的数目保持近似恒定,对SAT页和SAT索引页的更新操作所消耗的SAT中的页数必须与SAT块刷新操作所恢复的废弃SAT页和SAT索引页的数目平衡。如上面参照图27所述,确定选择用于下一SAT刷新操作的SAT块中的废弃信息的页数。下一SAT块刷新操作可被调度为在从前一SAT刷新操作起相同数目的信息有效页已经被写入SAT时进行。
块信息表(BIT)
使用块信息表(BIT)记录白块、粉块和SAT块的块地址的分开的列表。BIT写入块包含关于所有其他BIT块定位在哪里的信息。在一个实现方式中,期望的是,存储地址重新映射算法和相关系统维持白块列表,以允许选择要被分配为写入块、重新放置块或SAT块的块。还期望的是,维持粉块列表,以允许选择粉块和SAT块以作为块刷新操作的对象。在BIT中维持这些列表,其结构近似为SAT的列表的镜像。
BIT数据结构
在被称为BIT块的DLBA地址的块内实现BIT。块列表信息被存储在BIT页内,并且“DLBA块到BIT页”索引信息被存储在BIT索引页中。在同一BIT块中,可按任何次序混合BIT页和BIT索引页。BIT可由多个BIT块构成,但BIT信息仅可写入当前被指定为BIT写入块的单个块。所有其他BIT块先前已经被写满,并可包含有效和废弃页的组合。实现与上述针对SAT块描述的相同的BIT块刷新方案,以消除废弃BIT信息的页并产生用于重新使用的白块。
BIT块
如图28所示的BIT块是专用于存储BIT信息的DLBA地址的块。其可包含BIT页342或BIT索引页344。BIT块可包含有效BIT页、有效BIT索引页和废弃页的任何组合。仅仅可将BIT信息写入到被指定为BIT写入块340的单个BIT块。按照由递增的BIT写指针346所定义的顺序位置,将BIT信息写入BIT写入块340中。当BIT写入块340被完全写满时,白块被分配为新的BIT写入块。包括BIT的块每个都由它们的BIT块位置标识,它们的BIT块位置是在装置中填入块中的它们的块地址。BIT块被分为表页,可向表页中写入BIT页342或BIT索引页344。BIT页位置通过其在BIT块内的序号来定址。BIT信息可与闪存存储器的不同块中的非BIT信息隔开,可以被隔离为不同于非BIT信息的不同类型的块(例如,二进制对(vs.)MLC),或可与块中的非BIT信息混合。
BIT页
BIT页342是BIT中块列表信息的最小可更新单位。在BIT写指针346所定义的位置处写入更新后的BIT页。BIT页342包含具有定义范围内的DLBA块地址的白块、粉块和SAT块的列表,虽然任何列表中连续块的块地址无需是连续的。BIT页中的DLBA块地址的范围与任何其他BIT页中的DLBA块地址的范围不重叠。BIT页可以分布在整组BIT块上,没有限制。任何范围的DLBA地址的BIT页可以在任何BIT块中。BIT页包括白块列表(WBL)字段348、粉块列表(PBL)字段350、SAT块列表(SBL)字段352和索引缓冲器字段354,以及两个控制指针356。参数备用条目还包含易失性RAM中存储的一些参数的值。
BIT页342内的WBL字段348包含与BIT页342有关的DLBA块地址范围内白块列表中的块的条目。BIT页342所跨越的DLBA块地址的范围与任何其他BIT页342跨越的DLBA块地址的范围不重叠。WBL字段348是可变长度的,并包含可变数目的WBL条目。在WBL字段内,存在用于由BIT页342索引的DLBA块地址范围内每个白块的WBL条目。WBL条目包含块的DLBA地址。
BIT页342内的PBL字段350包含与BIT页342有关的DLBA块地址范围内粉块列表中的块的条目。BIT页342所跨越的DLBA块地址的范围与任何其他BIT页342跨越的DLBA块地址的范围不重叠。PBL字段350是可变长度的,并包含可变数目的PBL条目。在PBL字段内,存在用于由BIT页342索引的DLBA块地址范围内每个粉块的PBL条目。PBL条目包含块的DLBA地址。
BIT页内的SBL字段352包含与BIT页342有关的DLBA块地址范围内SAT块列表中的块的条目。BIT页342所跨越的DLBA块地址的范围与任何其他BIT页342跨越的DLBA块地址的范围不重叠。SBL字段352是可变长度的,并包含可变数目的SBL条目。在SBL字段内,存在用于由BIT页352索引的DLBA块地址范围内每个SAT块的SBL条目。SBL条目包含块的DLBA地址。
索引缓冲器字段354被写入为每个BIT页342的一部分,但仅仅在最新近写入的BIT页中保持有效。BIT页342的索引缓冲器字段354包含BIT索引条目。存在用于当前在相关BIT索引页344中没有有效条目的BIT中的每个BIT页342的BIT索引条目。在每当写入BIT页342时创建或更新BIT索引条目,并在更新相关BIT索引页344时删除。BIT索引条目可包含由BIT页342索引的范围的第一DLBA块地址,由BIT页342索引的范围的最后DLBA块地址,包含BIT页342的BIT块位置,以及BIT块内的BIT页的BIT页位置。索引缓冲器字段354具有用于固定数目的BIT索引条目的容量,假设为32。该数目确定了可写入BIT页342和BIT索引页344的相对频率。
BIT页342的控制指针356定义了PBL字段350的起点和SBL字段352的起点距离WBL字段348的起点的偏移。BIT页342包含作为列表条目数的偏移值。
BIT索引页
一组BIT索引页344提供了对BIT中每个有效BIT页342的位置的索引。各个BIT索引页344包含定义了有效BIT页相对于一定范围的DLBA块地址的位置的条目。BIT索引页所跨越的DLBA块地址的范围与任何其他BIT索引页344所跨越的DLBA块地址的范围不重叠。根据条目相关的BIT页342的DLBA块地址范围值来对条目排序。BIT索引页344包含固定数目的条目。
BIT索引页可分布在整组BIT块上,没有限制。用于任何范围的DLBA块地址的BIT索引页344可在任何BIT块中。BIT索引页344包括BIT索引字段358和页索引字段360。BIT索引字段358包含用于BIT索引页344所跨越的DLBA块地址范围内的所有有效BIT页的BIT索引条目。BIT索引条目关于单个BIT页342,并包含由BIT页索引的第一DLBA块、包含BIT页的BIT块位置、以及BIT块内的BIT页的BIT页位置。
BIT索引页344的页索引字段360包含BIT中所有有效BIT索引页的页索引条目。存在用于BIT中每个有效BIT索引页344的BIT页索引条目,其可以包含由BIT索引页索引的第一DLBA块、包含BIT索引页的BIT块位置、以及BIT块内的BIT索引页的BIT页位置。
维持BIT
更新BIT页342以从WBL 348、PBL 350和SBL 352中增加或移除条目。假设列表可在功率周期后恢复到RAM,对多个条目的更新可累积在RAM中的列表中,并在一次操作中在BIT中实现。BIT索引缓冲器字段在最新近写入的BIT页中有效。每当写入BIT页时,更新它而没有附加编程。当更新BIT索引页时,来自BIT索引缓冲器的一个或多个条目被添加到BIT索引页,并从BIT索引缓冲器中移除。当在BIT索引缓冲器中存在最大允许数目的条目时,更新一个或多个BIT索引页344。
由BIT页342或BIT索引页344跨越的DLBA块范围内所需的条目数是可变的,并可随时间改变。因而,并非不常见的是,BIT中的页溢出,或页被非常少地填入。这些情形可由用于分离和合并BIT中的页的方案来管理。
当在更新BIT页342或BIT索引页344期间要添加条目,但在页中没有充足的可获得的未用空间来容纳该变化时,页被分为两个。引入新BIT页342或BIT索引页344,并且对于先前填满的页和新空白页(每个将给予使得它们半满的多个条目),确定DLBA块范围。如有可能,然后在一次编程操作中写入两个页。当该页为BIT页342时,在最后写入的BIT页中的索引缓冲器字段中包括用于两个页的BIT索引条目。当该页为BIT索引页344时,在最后写入的BIT索引页中的页索引字段中包括页索引条目。
相反,当具有相邻DLBA块范围的两个或多个BIT页342或两个BIT索引页344被较少地填入时,页可被合并为单页。当所得的单页不会被填满超过80%时,启动合并。由分离的合并页所跨越的范围限定用于新的单页的DLBA块范围。当合并的页是BIT页时,在最后写入的BIT页中的索引缓冲器字段中更新用于新页和合并页的BIT索引条目。当页是BIT索引页时,在最后写入的BIT索引页中的页索引字段中更新页索引条目。
刷新BIT块
刷新BIT块的处理严格遵循上面针对SAT块所述的处理,这里不再重复。
控制块
在其他实施例中,BIT和SAT信息可以被存储在同一块的不同页中。被称为控制块的该块可被构造为使得SAT或BIT信息的一页占据控制块中的一页。控制块可由具有整数个页的页单元构成,其中每个页单元通过其在控制块中的顺序编号来定址。页单元可具有一页物理存储器的最小尺寸以及一个元页的最大尺寸。控制块可包含有效SAT页、SAT索引页、BIT页、BIT索引页和废弃页的任何组合。由此,不是具有分开的SAT和BIT块,而是可将SAT和BIT信息这两者都存储在相同的一个或多个块中。如同上述分离的SAT和BIT写入块那样,控制信息(SAT或BIT信息)可仅仅被写入单个控制写入块,控制写指针将标识用于接收控制数据的下一顺序位置,并且当控制写入块被写满时,写入块被分配为新的控制写入块。另外,每个控制块可由其在填入存储器系统2的二进制块时的块地址标识。可按照上述针对分开的SAT和BIT块描述的相同方式,刷新控制块以生成新的未写容量,其中差别在于用于控制块的重新放置块可接受与有效SAT或BIT信息有关的页。可按上面针对SAT刷新处理所述的相同方式,实现用于刷新的适当的粉控制块的选择和定时。
监视LBA分配状态
存储地址重新映射算法仅仅记录当前由主机分配给有效数据的主机LBA地址的地址映射信息。因而,必须确定何时由主机将簇从数据存储中解除分配,以便精确地维持此映射信息。
在一个实施例中,来自主机文件系统的命令可向存储地址重新映射算法提供关于解除分配的簇的信息。例如,提出了在微软公司的Vista操作系统中使用的“Dataset”(数据集)命令。已经由微软向T13提交了“Notificationof Deleted Data Proposal for ATA8-ACS2”的提案。此新命令想要提供删除数据的通知。单个命令可向装置通知代表最多2GB废弃数据的连续LBA地址上的数据的删除。
解译NTFS元数据
如果不能得到诸如修整(trim)命令的主机文件系统命令,则可通过跟踪由NTFS写入的$bitmap系统文件(其包含卷上所有簇的分配状态的位图)中的信息变化,来监视LBA分配状态。现在讨论跟踪个人计算机(PC)中的$bitmap变化的一个例子。
分区引导扇区
分区引导扇区是分区上的扇区0。在字节偏移0x30处的字段包含主控文件表(MFT)的起点的逻辑簇号,如表3中的例子。
表3
0x30 |
0x31 |
0x32 |
0x33 |
0x34 |
0x35 |
0x36 |
0x37 |
|
D2 |
4F |
0C |
00 |
00 |
00 |
00 |
00 |
0xC4FD2 |
MFT中的$bitmap记录
名为$bitmap的系统文件包含卷(volume)上所有簇的分配状态的位图。$bitmap文件的记录是MFT中的记录编号6。MFT记录具有1024字节的长度。因而,$bitmap记录具有相对于MFT起点的十进制12个扇区的偏移。在以上例子中,MFT在簇0xC4FD2处,或十进制的806866开始,其为十进制6454928扇区。因而$bitmap文件记录在十进制扇区6454940处开始。
在$bitmap记录中存在以下信息(在所述例子中)。在字节偏移0x141到0x142处的字段包含$bitmap文件的第一数据属性的簇中的长度,如表4的例子。
表4
在字节偏移0x143到0x145处的字段包含$bitmap文件的第一数据属性的起点的簇数,如表5的例子。
表5
在字节偏移0x147到0x148处的字段包含$bitmap文件的第二数据属性的簇中的长度,如表6的例子。
表6
在字节偏移0x149到0x14B处的字段包含在$bitmap文件的第一数据属性的起点和第二数据属性的起点之间的簇的数目,如表7的例子。
表7
$bitmap文件的数据属性
用于$bitmap文件的数据属性内的扇区包含按照逻辑簇号次序的、卷中每个簇的分配状态的位图。‘1’表示簇已经被文件系统分配给数据存储,‘0’表示簇是空闲的。位图中每个字节与8个簇或64个十进制扇区的逻辑范围有关。位图中每个扇区与0x1000(十进制4096)个簇或0x8000(十进制32768)个扇区的逻辑范围有关。位图中每个簇与0x8000(十进制32768)个簇或0x40000(十进制262144)个扇区的逻辑范围有关。
维持簇分配状态
每当来自主机的写操作针对$bitmap文件的数据属性内的扇区时,必须从存储装置读取前一版本的扇区,并将其数据与刚刚已由主机写入的数据进行比较。必须标识已经从“1”状态回到“0”状态的所有位,并且确定由主机解除分配的簇的相应逻辑地址。每当诸如所提出的修整命令或NTFS元数据跟踪的命令指示已经存在主机进行的簇解除分配时,必须更新存储地址表(SAT)以记录指定簇的地址的解除分配。
逻辑到物理映射
上述讨论主要关注存储地址重新映射的实现,其中期望从主机LBA地址空间到DLBA地址空间(也称为存储LBA空间)的逻辑到逻辑映射。如上所述,图8的实施例(其中映射算法被并入存储器装置的存储器管理器而不是分别如图9-10的存储器装置或主机上的分离的应用中)从主机LBA映射到存储器系统2中的物理地址。在图8的实施例中,用物理存储器地址而不是中间逻辑地址来代替上述DLBA。图8的布置中的存储重新映射算法是存储器系统2中存储器控制器8的一部分,而不是存储器系统2或主机1(分别是图9和图10)上的分离的应用。
图8的逻辑到物理映射布置与图9-10的逻辑到逻辑映射布置之间的不同之处可参照图29-32说明。图29示出了逻辑到物理存储地址重新映射算法如何将物理存储器中的可用白块之一分配为写入块412,以及LBA地址空间408中的每个LBA地址如何被映射到写入块412中可用的物理地址空间410中的顺序位置。物理地址空间410中的写入块412按照接收LBA地址的次序写入,而不论LBA地址位置如何。在该例子中,如同图15的并行逻辑到逻辑映射例子,为了容易说明,假设主机使用的空闲LBA簇的时间次序与地址次序相同,但是存储地址重新映射算法将按照使用LBA地址的时间次序分派写入块412中的物理地址,而不论LBA地址号的次序如何。数据被写入到一个或多个数据区段中的写入块中。数据区段是被映射到同一LBA区段中的连续LBA地址的一组连续物理地址。数据区段在物理地址空间410的块边界处终止。当写入块412被填满时,新的白块被分配为下一写入块412。由此,不分派中间逻辑地址,而是逻辑到物理布置在输入数据被直接写入物理存储器时对输入数据重新排序。
类似于图9-10的逻辑到逻辑映射布置,用于图8的逻辑到物理布置的存储地址重新映射算法操作以确保对于要操作的顺序的写算法可获得白块的足够供应。存储地址重新映射算法通过将数据从粉块刷新到重新放置块416(图30),管理白块的创建。当前被选择用于刷新的粉块被称为刷新快。
如图29-30所示,示出了块刷新处理的图示。存储地址重新映射算法将白块指定为重新放置块416,将从所选的粉块向重新放置块416刷新数据以产生另外的白块。将数据从刷新块(图29的粉块A)中包含有效数据(也称为红数据)的位置重新放置到重新放置块416中的顺序的地址中,以将刷新块转换为白块418。如图31所示,从剩余粉块中标识出下一刷新块(图30的粉块B)。具有最少有效数据(最少的红数据)的粉块,或者从当前低于有效数据平均量或低于某一预定阈值量的粉块列表中选择的粉块,被再次指定为刷新块,并且该粉块的红数据(有效数据)按照有效数据在粉块中出现的次序而传输到开放的重新放置块416中的顺序的物理位置中。作为背景操作而对粉块进行刷新操作,以按照足以补偿被指定为写入块的白块418的消耗的速率来产生白块418。图29-31的例子例示了对于来自主机的新数据以及对于来自粉块的重新放置的数据,如何分开维持白块和重新放置块。在其他实现方式中,可将新数据和重新放置的数据传输到单个写入块,而无需分离的写入块和重新放置块。
用于逻辑到物理重新映射的SAT
SAT也用于图8的逻辑到物理布置。这里,SAT具有与逻辑到逻辑存储地址重新映射布置中相同的基本结构,其中DLBA(也称为存储LBA)地址信息被数据区段的物理地址代替。图32中例示了用于逻辑到物理布置的SAT索引和映射结构的层级。示出了LBA 432和相应的数据区段430。LBA到物理映射信息被包含在SAT页434中。LBA到SAT页索引信息被包含在SAT索引页436中,主控页索引438在与控制器8相关联的RAM中高速缓存。SAT可包括多个SAT块,或可仅仅写入到单个块目前指定的SAT写入块。所有其他SAT块已经被写满,并且可包含有效和废弃页的组合。实现类似于主机数据块的SAT块刷新方案以消除废弃SAT消息的页并产生用于重新使用的白块。
如同上述逻辑到逻辑SAT映射,图中的逻辑到物理布置中的SAT是可变尺寸表,其自动缩放直到最大数目,因为SAT中的条目数将根据主机所分派的LBA的破碎度自己调整。由此,如果主机分派了高度破碎的LBA,则SAT将包括比在主机向数据分派了没那么破碎的LBA群组的情况下更多的条目。因此,如果主机LBA变得没那么破碎,则SAT的尺寸将减小。更低的破碎度带来更少的要映射的分离区段,并且更少的分离区段导致SAT中更少的条目,因为SAT在一个条目中将主机LBA地址的区段映射到一个或多个数据区段(物理地址区段),而不是严格地跟踪和更新固定数目的逻辑地址。主机LBA地址区段可被映射到两个或更多个数据区段,其中主机LBA区段是被分配给有效数据的一组连续逻辑地址,而数据(或物理地址)区段是同一元块内且被映射到同一主机LBA区段的连续的一组物理地址。
SAT块
每个SAT块是专用于存储SAT信息的物理地址的块。SAT块被分为表页,可向其中写入SAT页434或SAT索引页436。SAT块可包含有效SAT页434、有效SAT索引页436和废弃页的任何组合。参照图33,示出了SAT写入块440。在由递增的SAT写指针442所定义的顺序位置上,将数据写入SAT写入块440中。可将数据仅仅写入到被指定为SAT写入块440的单个SAT块。将数据写入SAT写入块440中,作为由递增的SAT写指针442所定义的顺序位置。按照与前面针对主机数据写入块(例如,图15-17中的项目212)描述的相同方式,当SAT写入块440被完全写满时,白块被分配为新的SAT写入块440。SAT页位置通过其在SAT块内的序号来定址。SAT页可在非SAT信息块之间混合,或者可以进一步分离到特殊类型的块中,如二进制闪存块,而非SAT信息被存储在MLC闪存块中。在其他实施例中,可在同一块中混合SAT信息和非SAT信息。
SAT页
SAT页434是SAT中映射信息的最小可更新单位。在SAT写指针442所定义的位置处写入更新后的SAT页434。SAT页434包含具有递增LBA地址的一组LBA区段的映射信息,虽然连续LBA区段的地址无需是连续的。SAT页434中的LBA地址的范围与任何其他SAT页434中的LBA地址的范围不重叠。SAT页434可以分布在整组SAT块上,没有限制。任何范围的LBA地址的SAT页434可以在任何SAT块中。SAT页434可包括索引缓冲器字段444、LBA字段446、数据区段字段448和控制指针450。参数备用条目还包含易失性RAM中存储的一些参数的值。
SAT页434内的LBA字段446包含一定范围的LBA地址内被分配用于数据存储的连续LBA地址的区段的条目。SAT页434跨越的LBA地址的范围与任何其他SAT页434跨越的LBA条目的范围不重叠。LBA字段是可变长度的,并包含可变数目的LBA条目。在LBA字段446内,存在用于由SAT页434索引的LBA地址范围内每个LBA区段的LBA条目452。LBA区段被映射到一个或多个数据区段。
如图34-36所示,逻辑到物理布置下的SAT的条目在几个方面中与逻辑到逻辑地址重新映射布置有所不同。参照图34,LBA条目452包含以下信息:其映射到的数据条目数454;以及LBA区段所映射到的第一数据区段的、同一SAT页434中的数据字段448内的数据条目数458。
SAT页434内的数据字段448包含被映射到相同SAT页434中的LBA字段446内的LBA区段的所有数据地址区段的条目。数据字段448是可变长度的,并且包含可变数目的数据条目460。在数据字段448内,存在用于被映射到同一SAT页434中的LBA字段246内的LBA区段的每个数据区段的数据条目460。如图35所示,每个数据条目460包含以下信息:区段中的第一数据地址462;以及第一数据地址所映射到的LBA区段中的LBA偏移464。作为每个SAT页434的一部分写入但仅仅在最新近写入的SAT页434中保持有效的SAT页/索引缓冲器字段包含SAT索引条目466。
存在用于当前在相关SAT索引页436中没有有效条目的SAT中的每个SAT页434的SAT索引条目466。参照图36,在每当写入SAT页434时创建或更新SAT索引条目,并在更新相关SAT索引页436时删除。它包含由SAT页434索引的第一LBA 468、由SAT页434索引的最后LBA 470、包含SAT页434的SAT块编号472、以及SAT块内的SAT页434的页编号474。SAT索引字段476具有用于固定数目的SAT索引条目466的容量。该数目确定了可写入SAT页434和SAT索引页436的相对频率。在一个实现方式中,该固定数目可以为32。
SAT页字段指针450定义了从LBA字段的起点到数据字段的起点的偏移。它包含作为LBA条目数的偏移值。SAT页434中的参数备用条目包含在易失性RAM中存储的参数的值。在功率周期之后,在(对于图8-9的实现方式与控制器8相关联的)RAM中的信息的初始化期间,使用这些参数值。它们仅仅在最新近写入的SAT页434中有效。
在另一实施例中,不对于与有效数据相关的每个LBA地址区段生成SAT中的单独LBA条目,而是可在SAT中映射LBA地址块,从而每个LBA地址块是SAT上的一个条目。如图37所示,可在SAT中记录LBA地址空间中的完整LBA地址块480。该实现方式中的LBA条目482将会是列出LBA地址块所映射到的物理地址空间中的数据区段484的数目以及对于相同SAT页中的第一数据区段的指针的一个条目。根据存储器装置中存储的数据的破碎程度,LBA地址块可被映射到最小一个数据区段,或者最大直到LBA地址块中的簇数。
在图37的例子中,LBA地址块480包括8个LBA区段,其中4个区段被分配给有效数据(从LBA偏移L1、L3、L4和L6开始的阴影部分),而4个区段是未分配的地址区段(从LBA偏移0、L2、L5和L7开始的白色部分)。LBA地址块480的相应数据条目488将由物理块和地址偏移(P1-P3)表示的数据区段的物理地址490与相应的LBA偏移492相联系。不同于上面讨论的对于每个LBA区段记录单独的LBA条目的SAT版本(其中仅仅记录与有效数据相关联的LBA区段),记录LBA地址块中的每个LBA区段。由此,记录了当前未被分配给有效数据的LBA地址块480中的LBA区段以及被分配给有效数据的LBA区段。在图37所示的SAT页的数据条目部分488中,标记未分配的LBA地址组的起点的LBA偏移与物理地址空间中的“FFFFFFFF”值配对。这代表指示未分配地址的保留值的默认十六进制数。上述相同的整体SAT结构和功能性以及参照图32讨论的基本SAT层级应用于LBA地址块映射实现方式,但是SAT页代表LBA地址块到数据区段映射信息,而不是各个LBA区段到数据区段信息。而且,在该实现方式中,SAT索引页存储LBA地址块到SAT页映射信息。
SAT索引页
再次参照图34-36,一组SAT索引页436提供了对SAT中每个有效SAT页434的位置的索引。单独的SAT索引页436包含定义了与一定范围的LBA地址相关的有效SAT页的位置的条目466。SAT索引页436所跨越的LBA地址的范围与任何其他SAT索引页436所跨越的LBA地址的范围不重叠。根据条目相关的SAT页的LBA地址范围值来对条目排序。SAT索引页436包含固定数目的条目。SAT索引页436可分布在整组SAT块上,没有限制。用于任何范围的LBA地址的SAT索引页436可在任何SAT块中。SAT索引页436包括SAT索引字段和页索引字段。
SAT索引字段476包含用于SAT索引页436所跨越的LBA地址范围内的所有有效SAT页的SAT索引条目。SAT索引条目466关于单个SAT页434,并包含以下信息:由SAT页434索引的第一LBA;包含SAT页434的SAT块编号;以及SAT块内的SAT页434的页编号。页索引字段包含SAT中所有有效SAT索引页436的页索引条目。存在用于SAT中每个有效SAT索引页436的页索引字段,其包含以下信息:由SAT索引页索引的第一LBA;包含SAT索引页的SAT块编号;以及SAT块内的SAT索引页的页编号。
临时SAT数据结构
对逻辑到逻辑存储地址重新映射描述的临时SAT数据结构以及表页和地址变换,对于图8的逻辑到物理布置而言是相同的,区别在于物理地址代替先前讨论中的对逻辑地址(DLBA)的引用。例如,当用物理地址或地址区段代替第二逻辑地址空间(DLBA)时,图24的SAT变换过程和图25的SAT创建和更新例子以及表A-D也应用于图8的逻辑到物理布置。类似地,图8的逻辑到物理布置利用相同的BIT结构,但其中BIT引用物理地址而不是逻辑(DLBA)地址。
主机逻辑块地址的修改分配
图11的配置直接在主机文件系统内集成了图8-10的一部分特征,但是图11的存储地址映射布置不从第一逻辑地址空间变换为第二逻辑地址空间。相反,修改分配主机LBA地址的初始主机文件系统方法,以减少破碎度。
图11中的地址映射建立物理存储器中的数据映射,其类似于图8-10的配置所建立的映射。不同于仅仅得知根据簇的主机LBA空间的典型主机文件系统,该实施例中的主机文件系统10得知与存储器系统2中的物理块尺寸相对应的块尺寸。从对应于物理存储器块的所选块中分配用于数据存储的主机LBA地址。按顺序的次序分配所选块中所存在的所有空闲簇地址。映射算法允许物理存储器中的更新块中所需的数据整合量保持最小。在LBA地址空间内的块中管理用于数据存储的空闲簇的分配。主机文件系统根据块中所包含的空闲簇数来对块排序。选择具有最高数目的空闲簇的块,作为下一分配块。
参照图38,示出了可在图11的主机文件系统配置中实现的地址映射的例子。由图11的配置实现的地址映射在主机上的主机文件系统中发生,并且优选地由主机1的CPU 9执行。如同图9和图10的配置的例子中那样,在尺寸上与存储器系统中的闪存存储器的物理存储器块相对应的块中管理用于数据存储的空闲簇的分配。不同于图9-10的例子,在图11的配置中实现的地址映射管理主机LBA地址空间内的空闲簇的分配,但不将主机LBA地址空间重新映射到存储LBA地址空间中。相反,如下所述,优化由主机文件系统执行的地址映射算法,以在分派主机LBA地址的下一块中的地址之前,利用主机LBA地址空间中的可用地址来完全分配主机LBA地址的一个块中的可用地址。
在图38的例子中,主机LBA地址空间494中的块按照它们之中包含的空闲簇数来排序。参照图1,如果主机文件系统10是NTFS文件系统,则块的排序可基于主机文件系统10在存储器系统2上存储和更新的NTFS$bitmap文件中的分配图(map)。在从NTFS $bitmap文件中提取分配图时,主机文件系统10将现在具有最高数目的空闲(废弃)簇的块选择作为下一分配块。在图38的例子中,选择块1作为分配块,因为它包含最高数目的废弃(由此空闲)簇。废弃簇的主机LBA地址按照顺序的次序从块1中分配给数据,其中图38中每个箭头例示了从主机1向新数据的可用地址的分派。仅仅当块1中所有空闲簇已经被分配时,块2才被选作下一分配块。然后按顺序的次序将块2中空闲簇的地址分派给新数据。
主机LBA地址空间494中分派地址的顺序次序可以是从块中的最低可用地址值到最高可用地址值,或者可以是块中可用地址值的“回绕(wrap-around)”序列。例如,假设图38中块1的地址值为1至16,该块中可用的地址是地址值(从左到右)3-5、7-8、11-13和15-16。地址从最低到最高的分派将包括按照从地址值3开始的序列分派每个可用地址。可替换地,回绕将包括在除了地址值3之外的某个点开始分派地址,按照从该第一个选择的地址值增加的值来分派地址,然后继续从最低可用地址分派主机LBA块中的可用地址,直到当前主机LBA块中的所有地址都已被分派为止。由此,如果在该例子中块1中的地址12被首先分派,则地址13、15-16、3-5、7-8和11将是分派剩余部分的次序。
在存储器系统2(其可以是使用标准LBA接口的多种已知存储器系统中的任一种),在对应于块1的物理更新块496中存储被写入所分配的簇地址的数据。存储器系统2还将分配对应于块2的单独物理更新块498。在对应于所选分配块的原始块中仍然有效的数据500与已经写入更新块中的新主机数据502整合。因为一般按顺序次序对闪存存储器的物理块中的页编程,所以该整合可在新主机数据已经写入更新块中,或者更一般地,与正被写入的新主机数据交错之后进行。可通过存储器系统2中的控制器8管理将主机LBA块的数据整合到单个闪存块中的处理。因为主机文件系统选择具有最高数目的空闲簇的块作为分配块,所以将整合的数据量控制为最小。然而,不同于参照图8-10的实施例所讨论的刷新处理,其中将从一个块刷新的有效数据顺序地写入可以具有与不同于其他块的地址范围相关联的数据的重新放置块,图11的分配处理带来无用数据收集处理,其中通过将块的剩余有效数据与相同地址范围的更新数据相合并来维持地址的块。
当在例如图11和图38所示的主机文件系统185中实现地址映射分配算法时,物理存储器的块中整合的数据量可与通过图8-10的实施例中描述的存储地址重新映射从等价块重新放置的数据量相同。因为在图11的实施例中不发生由文件系统分配的主机LBA地址的重新映射,所以在该实现方式中无需SAT。而且,因为是主机文件系统的正常实践,所以为此目的在数据结构中记录被分配用于存储文件数据的地址,如用于NTFS文件系统的$MFT文件或用于文件分配表(FAT)文件系统的FAT结构。
这里讨论的地址映射和重新映射系统和方法的优点可包括存储器管理器级的无用数据收集的减少或消除以及减少闪存存储器的压力。当使用存储器管理算法(其不使用中间DLBA地址)并且如图8所示将连续LBA地址的块映射到单个物理块时,在数据被写入到比物理块尺寸更小的LBA地址区段时需要无用数据收集操作。在这样的无用数据收集过程中,将具有LBA块中的地址的所有数据整合到同一物理块中。例如,当被写入的文件的平均尺寸是40KB而物理块尺寸是4MB时,如果文件系统分配算法和空闲簇空间的破碎性使得每个文件作为分开的碎片写入分离的块中,则每个由主机写入的数据扇区中编程扇区的比率将为100。
对于传统的逻辑到物理块映射,每当将主机数据的碎片分开写入到逻辑地址块时,在无用数据收集操作期间必须重新放置数据体。对于存储地址重新映射算法,数据始终被写入到顺序的地址中,直到块(逻辑或物理)被填满,因此不需要无用数据收集。这里公开的存储地址重新映射中的刷新操作不是由写处理触发,而是仅仅响应于数据被废弃。由此,数据重新放置开销应该比具有这里描述的存储地址重新映射功能性的系统中更低。在其他实施例中,存储器系统可被配置为分开维持某些范围的LBA地址,从而在每个主机LBA地址范围内,可应用上述存储地址重新映射技术。由此,每个分派的LBA地址范围将具有其自己的写入块和重新放置块,并且当用于该具体分派的主机LBA地址范围的之前写入块或重新放置块被写满时,新的白块将被分配给该具体分派的主机LBA地址范围,作为写入块或重新放置块。
已经描述了用于存储地址重新映射的系统和方法,其能够在随机写应用中增加存储器系统的性能,其特征在于需要将短脉冲群的数据写入到装置的LBA地址空间中的无关区域,这可在个人计算机中的固态盘应用中经历到。在所公开的存储地址重新映射的某些实施例中,将主机数据从主机所分派的第一逻辑地址映射到第二逻辑地址空间中的连续逻辑地址的块。因为废弃与完全编程的地址块相关的数据,所以公开了从具有最少量有效数据或具有少于有效数据阈值量的粉块群组中选择粉块,并重新放置这些块中的有效数据,从而释放这些块以用于写入更多数据。将重新放置的数据按照其在需要刷新的块中出现的次序,连续写入到重新放置块,而不论主机所分派的逻辑地址如何。以此方式,可通过不特意整合由主机分派的逻辑地址区段,来减少开销。使用存储位置表来跟踪在由主机分派的逻辑地址和第二逻辑地址之间的映射,以及映射中由于刷新引起的后续变化。在由主机分派的逻辑地址被直接映射到物理地址的实施例中,存储地址表跟踪该关系,并维持块信息表以跟踪例如特定块是具有有效和废弃数据两者的粉块,还是仅具有未写容量的白块。
SAT将主机文件系统分配给有效数据的逻辑地址空间中的每个地址区段映射到装置地址空间(对于图8的布置,物理地址空间;对于图9-10的布置,逻辑存储地址空间)中的一个或多个地址区段。主机所使用的连续地址空间的可变长度单元(LBA区段)被映射到连续装置地址空间的一个或多个可变长度单元。区段到区段地址映射方案的使用可提供相对于基于固定尺寸单元的映射方案的益处。SAT中所需的映射条目数与主机所写入的数据的区段中的平均簇数成反比。这使得SAT数据结构的数目最小化,并使得在主机写入和删除文件数据时更新这些数据结构的平均时间最小化。
因而,意图将前面的详细描述看作是例示性而不是限制性的,并且应理解,意图是包括所有等价物的以下权利要求限定本发明的精神和范围。