快闪存储器中利用直接数据文件存储的数据操作的制作方法

文档序号:6568426阅读:160来源:国知局
专利名称:快闪存储器中利用直接数据文件存储的数据操作的制作方法
快闪存储器中利用直接数据文件存储的数据操作技术领域本申请案大体上涉及例如半导体快闪存储器等可重新编程的非易失性存储器系统的 操作,其中包含管理主机装置与存储器系统之间的接口,且更具体地说,涉及有效地使 用数据文件接口而不是常见的大容量存储器逻辑地址空间(LBA)接口。
技术背景本文中描述在待决的第11/060,174号、第11/060,248号和第11/060,249号美国专利 申请案中描述的快闪存储器的各种操作方面的发展,所述申请案全部在2005年2月16 日以Alan W. Sinclair—人或其与Peter J. Smith两人名义申请(下文中称为"现有申请 案")。进一步的发展在AlanW. Sinclair和Barry Wright的相关美国专利申请案中描述,即 第11/382,224号和第11/382,232号非临时申请案以及第60〃46,740号和第60/746,742号 临时申请案,所述申请案全部在2006年5月8日申请;以及题为"Indexing Of File Data In Reprogrammable Non-Volatile Memories That Directly Store Data Files "、 "Reprogrammable Non-Volatile Memory Systems With Indexing of Directly Stored Data Files,,、 "Methods of Managing Blocks in Nonvolatile Memory"禾口 "Nonvolatile Memory With Block Management"的非临时申请案,所述申请案全部在2006年7月21日申请。本文中引用的所有专利、专利申请案、文章及其它出版物、文献以及资料出于所有 目的在此以引用的方式全文并入本文中。就任何并入的出版物、文献或资料中的任一者 与本申请案之间在术语定义或使用方面的任何不一致或冲突而言,应以本申请案的为主。发明内容本文中将数据合并与垃圾收集区别对待,且至少部分地通过不同的算法来实施所述 两种处理。当文件或存储器区块中含有废弃数据时,利用垃圾收集操作来将所述文件或 区块的有效数据移动到一个或一个以上其它区块。这种操作将有效数据聚集到数目较少 的区块中,因而一旦擦除原始来源区块便释放了废弃数据所占据的容量。在数据合并中, 将一个部分填充区块(例如通常因写入新文件而产生)的有效数据与另一部分填充区块 的有效数据组合。作为数据来源的原始区块中的一者或两者现在含有废弃的重复数据,于是将其调度以进行垃圾收集。虽然提供多个队列以用于调度各个垃圾收集操作以恢复 由废弃数据占据的存储器存储容量,但优选地在未调度任何垃圾收集且以其它方式满足 了合并条件时发生数据合并。不是在关闭新近写入的文件之后立刻调度对所述文件的数据合并,而是将新近写入 的文件的数据维持在其从主机接收之后被编程到的原始区块中。这最常见的是包含由新 数据部分填充的区块。由于常见的是用会形成废弃数据的方式删除或更新数据文件,所 以在关闭文件之后尽可能长期地拖延对部分填充区块的数据合并。可在不需要重新定位 任何数据的情况下将所述文件删除。因此,如果在此种合并变得必要之前删除或更新文 件,那么会避免合并。当存储器变满时此种合并可能变得必要,以使得具有足够的擦除 区块用于对新数据进行进一步编程。但是因为基于文件的存储器不保持已经被主机删除 的数据文件,所以与使用逻辑接口的情况相反,存储器将通常具有充分数目的擦除区块, 即使合并被延迟也是如此。因此节省了省略的合并所花费的时间,且因而改进了存储器 的性能。在直接文件存储中存在下述的若干其它发展,可概述如下1. 一旦关闭文件,不将其添加到文件垃圾收集队列,除非其含有废弃数据。2. 对文件的垃圾收集不会产生含有来自另一文件的数据的共用区块。将文件的必须 在垃圾收集期间复制的数据编程到所述文件的当前编程区块。编程区块在垃圾收集结束 时保持部分编程。3. 当因区块中的文件群组由于删除文件而变得废弃而必须从共用区块中重新定位 数据时,将剩余的有效数据重新定位到编程区块的可用空间中。4. 避免移动直接写入到编程区块的全部或一部分中的主机数据。5. 在文件的垃圾收集期间,将数据重新定位到文件的编程区块。没有专门的中间复 制区块。6. 用完整的数据扇区在存储器系统控制器缓冲存储器与存储器单元阵列之间转移 数据。这允许在编程期间产生ECC且在数据读取期间检验ECC。7. 将共用区块中的数据群组或文件群组的开头与元页的开头对准。可因此将芯片上 复本用于区块合并。编程区块中的数据群组与物理结构之间没有特定对准关系。8. 快闪存储器内的交换区块用来针对不活动的打开文件(也就是说,当最近写入命 令涉及到不同文件时)对保持在非易失性控制器缓冲存储器中的数据进行安全复制。其 还可用作虚拟缓冲器结构的一部分,以便通过在二者之间使用交换操作来允许可用的缓冲存储器容量支持较多打开文件。9. 当因为FIT文件的当前范围溢出而将所述FIT文件移动到另一FIT范围时,更新 目录中的文件数据指针以便反映新的FIT范围。10. 当FIT更新区块中的一个FIT范围的数据量超过阈值时,将所述范围的FIT更新 区块中的数据与所述范围的FIT区块中的数据合并。这允许将新文件的数据合并到FIT 区块。11. 在对FIT更新区块进行压縮期间,如果存在充分的已擦除空间,那么将关闭的文 件的FIT文件重新定位到其范围的FIT区块。否则,将其重新定位到压縮的FIT更新区 块。12. 主机可使用写入一指针和读取—指针命令来控制一个组中的所有文件而使其具有 相等大小(与元区块的大小相同),且可使用关闭和闲置命令来致使所述组中的文件在文 件关闭之后立刻被合并到单个元区块中。13. 所述主机命令集包含针对指定文件ID的读取和写入命令,其中包含针对写入—指 针和读取—指针的值的伙伴命令,所述伙伴命令提供拟开始所命令的数据写入或读取的存 储器地址。


包含以下列举的图式作为本申请案的一部分,且在以下描述中参看所述图式图1-1:具有直接数据文件平台的存储卡;图1-2:直接数据文件平台组成部分;图2-1:文件命令;图2-2:数据命令;图2-3:信息命令;图2-4:流命令;图2-5:状态命令;图2-6:装置命令;图3-1:普通文件的格式;图3-2:共用文件的格式;图3-3:已编辑的普通文件的格式;图3-4:己编辑的共用文件的格式;图4-1:用于装置操作的流程图;图5-l:用于编程文件数据的流程图;图6-l:用于读取文件数据的流程图;图7-l:用于删除文件的流程图;图8-l:用于前台垃圾收集的交错操作;图8-2:用于垃圾收集的自适应调度的操作原理;图8-3:用于垃圾收集选择的流程图;图8-4:用于文件垃圾收集的流程图;图8-5:用于共用区块垃圾收集的流程图;图8-6:用于区块合并的流程图;图8-7A到8-7D:共用区块垃圾收集实例,其展示四个时序阶段;图9-l:连续的主机数据编程;图9-2:中断的主机数据编程;图9-3:缓冲器清洗编程;图9-4:缓冲器换出编程;图9-5:缓冲器清洗之后的主机数据编程;图9-6:换入数据读取;图9-7:缓冲器换入之后的主机数据编程;图9-8:对缓冲器的对准的数据读取;图9-9:从缓冲器的对准的数据编程;图9-10:对缓冲器的非对准的数据读取;图9-ll:从缓冲器的非对准的数据编程;图9-12:对缓冲器的非对准且非循序的数据读取;图9-13:从缓冲器的非对准且非循序的数据编程;图10-1:文件索引;图10-2:文件索引结构;图10-3:目录区块格式;图10-4:文件索引表(FIT)逻辑结构;图10-5: FIT页格式;图10-6:物理FIT区块;图10-7: FIT文件更新操作的实例;图11-1:区块状态图;图12-1:控制区块格式;图12-2:常用区块日志格式;以及图13-1:与静态文件一起使用的命令集(在应当连在一起的部分A和B中)。
具体实施方式
1.直接数据文件平台 l.l概述在图1-1中说明具有直接数据文件平台的存储卡。直接数据文件平台是用文件形式 组织的数据存储装置,其中通过文件名和文件偏移地址来识别数据。其充当存储卡中的 存储平台,所述平台可并入除数据存储之外的功能。通过外部文件接口通道在平台中存 取文件数据。存储装置没有逻辑地址。针对每一文件存在独立的地址空间,且存储器管理算法根 据数据的文件结构来组织数据存储。与将常规的文件系统与常规的逻辑分区存储器管理 集成的文件存储装置的操作特性相比,在直接数据文件平台中采用的数据存储组织会产 生操作特性的显著改进。1.2平台组成部分直接数据文件平台具有以下组成部分,其如图1-2所示那样以功能性层构造直接数据文件接口文件API,其提供来自所述卡中的其它功能区块对通过文件名和文件偏移地址识别的数据的存取。文件到快闪映射算法用于消除文件分裂并提供最大性能和耐久性的以文件形式组 织的数据存储的方案。编程文件数据根据文件到快闪映射算法来编程文件数据。 读取文件数据从快闪存储器中读取由文件偏移地址指定的数据。删除文件识别含有已删除文件的数据的区块,并将所述区块添加到垃圾收集队列。 垃圾收集经执行以恢复废弃数据所占据的存储器容量的操作。这些可能需要将有效数据复制到另一位置,以便擦除区块。文件索引文件索引允许按偏移地址次序识别文件的有效数据群组的位置。 数据缓冲与编程对于拟编程的数据使用缓冲存储器,以及对编程区块中的文件数据进行编程的序列。擦除区块管理对于装置中可供分配以用于存储文件数据或控制信息的擦除区块集区的管理。区块状态管理用于存储文件数据的区块可被分类成的八种状态之间的转变。 控制数据结构存储在专用于所述用途的快闪区块中的控制数据结构。 2.直接数据文件接口直接数据文件接口是对直接数据文件平台的API,其形成用于并入有快闪大容量数 据存储设备的装置内的快闪存储器管理的后端系统。 2.1命令集以下部分定义用以支持与多种来源的基于文件的介接的一般命令集。用六种类别定 义命令。1. 文件命令2. 数据命令3. 文件信息命令4. 流命令(只用于建模)5. 状态命令6. 装置命令2.1.1 文件命令(见图2-1)文件是装置内通过文件ID独立识别的对象。文件可包括由主机创建的一组数据,或 者可能没有任何数据,在此情况下,其代表目录或文件夹。 2丄1,1创建创建命令在装置中的目录内创建通过<文件ID〉识别的条目。如果省略<文件ID〉参 数,那么装置向文件指派可用值并将所述值返回到主机。这是创建文件的正常方法。主机可替代地向文件指派<文件IDM直。如果文件ID的特定值指示主机接口协议内 的特定类型的文件,那么可使用这种方法。举例来说,主机可向根目录指派特定的文件 ID。2丄1.2打开这个命令启用对<文件10>指定的文件执行后续的数据命令。如果文件不存在,那么 返回错误消息。将所述文件的写入—指针设置到文件末尾,且将所述文件的读取—指针设 置到文件开头。将文件j言息的信息一写入—指针设置到文件—信息末尾,且将所述文件的 信息—读取一指针设置到文件—信息开头。存在可同时打开的文件的最大数目。如果超过这 个数目,那么不执行所述命令,且返回错误消息。举例来说,同时打开的文件的最大数目可以是8。只有在接收到后续写入、插入或移除命令之后,才使得装置内用于写入到指定文件 的资源可用。 2丄1.3关闭这个命令停用对指定文件的后续数据命令的执行。所述文件的写入一指针、读取—指 针、信息一写入—指针和信息一读取一指针值变得无效。 2丄1.4删除删除命令指示应当删除〈文件ID〉指定的文件的目录、文件索引表和信息表条目。可 擦除所述文件的数据。随后可能不存取已删除的文件。 2.1.1.5擦除擦除命令指示应当删除<文件10>指定的文件的目录、文件索引表和信息表条目。必 须在可执行任何其它命令之前擦除文件数据。随后可能不存取已擦除的文件。 2.1.1.6列举—文件在接收到列举—文件命令之后,可按照数字次序将目录中的所有文件的文件ID值从 装置中流出。当到达最后文件时终止文件ID流动,且可由主机借助于状态命令来识别这 个条件。通过接收到其它任何命令来终止列举—文件命令。2丄2 数据命令(见图2-2)使用数据命令来起始对指定文件的数据输入和输出操作,并定义文件内的偏移地址 值。指定的文件必须已经被主机打开。如果不是这样的话,那么返回错误。 <文件10>是 在文件最后被打开时返回到主机的文件句柄。2.1.2.1写入在接收到写入命令之后流到装置的数据复写在由写入—指针的当前值定义的偏移地 址处的指定文件中。使用写入命令来写入文件的新数据、将数据附加到文件和更新文件 内的数据。通过接收到其它任何命令来终止写入命令。2.1.2.2插入将在接收到插入命令之后流到装置的数据插入在写入j旨针的当前值定义的偏移地 址处的指定文件中。文件大小增加了插入数据的长度。通过接收到其它任何命令来终止 插入命令。2.1.2.3移除移除命令从写入—指针的当前值定义的偏移地址处的指定文件中删除<长度〉定义的循序数据。文件大小减少了<长度>。 2丄2.4读取可在接收到读取命令之后从装置中流出由读取—指针的当前值定义的偏移地址处的 指定文件中的数据。当达到文件结尾时终止数据流动,且可由主机借助于状态命令来识别这个条件。通 过接收到其它任何命令来终止读取命令。 2丄2.5保存—缓冲器指定文件的包含在装置缓冲器中但尚未编程到快闪存储器的数据保存在快闪存储器 中的临时位置处。当接收到后续写入或插入命令时将数据复原到缓冲器,并将其同与命令有关的数据 一起编程到快闪。2丄2.6写入—指针写入_指针命令将指定文件的写入_指针设置到指定的偏移地址。当在写入或插入命 令之后将数据流到装置时,装置使写入—指针递增。 2丄2.7读取j旨针读取一指针命令将指定文件的读取—指针设置到指定的偏移地址。当在读取命令之后 从装置中流出数据时,装置使读取—指针递增。 2丄3 信息命令(见图2-3)文件一信息是主机产生的与文件相关联的信息。文件—信息的性质和内容由主机确定, 且其不由装置解译。使用信息命令来起始对指定文件的文件—信息输入和输出操作,并定 义文件一信息内的偏移地址值。2.1.3.1写入—信息在接收到写入—信息命令之后流到装置的文件一 信息复写由信息—写入—指针的当前值 定义的偏移地址处的指定文件的文件—信息。指定文件的文件—信息的内容和长度由主机 确定。通过接收到其它任何命令来终止写入j言息命令。2.1.3.2读取—信息可在接收到读取—信息命令之后从装置中流出信息_读取—指针的当前值定义的偏移 地址处的指定文件的文件—信息。当达到文件—信息的末尾时终止文件—信息流动,且可由 主机借助于状态命令来识别这个条件。通过接收到其它任何命令来终止读取—信息命令。2丄3.3信息—写入—指针信息_写入一指针命令将指定文件的信息—写入—指针设置到指定偏移地址。当在写入一 信息命令之后将文件—信息流到装置时,装置使信息—写入—指针递增。 2丄3.4信息一读取—指针信息—读取_指针命令将指定文件的信息—读取—指针设置到指定的偏移地址。当在读 取一信息命令之后从装置中流出文件—信息时,装置使信息—读取—指针递增。 2.1.4 流命令(见图2-4)流命令只与直接数据文件平台的行为建模一起使用。其用途是结合数据命令模拟去 往和来自主机的流动数据。 2.1.4.1流流命令模拟由<长度>定义的应由主机传递到平台或从平台传递的不间断的数据流。 当向缓冲存储器添加数据或从中移除数据时,通过平台的模型将表示流的剩余长度的变 量递减。2.1.4.2暂停暂停命令插入长度为<时间>的延迟,所述延迟在执行命令列表中的正在控制直接数 据文件模型的操作的随后命令之前插入。 <时间>以微秒定义。 2丄5 状态命令(见图2-6) 状态命令控制装置的状态。 2.1.5.1闲置闲置命令指示主机正在将直接数据文件装置置于闲置状态,在此期间,装置可执行 内部内务处理操作。主机将不会在闲置状态下故意从装置中移除电力。不论装置是否忙 于内部操作,均可通过由主机传输其它任何命令来结束闲置状态。 一旦接收到此其它命 令,装置中的任何正在进行的内部操作均必须暂停或在指定时间内终止。此时间的一个 实例是IO毫秒或更短。2.1.5.2待命待命命令指示主机正在将直接数据文件装置置于待命状态,在此期间,装置可以不 执行内部内务处理操作。主机将不会在待命状态下故意从装置中移除电力。可通过由主 机传输其它任何命令来结束待命状态。2.1.5.3关机关机命令指示当装置接下来不处于繁忙状态时,将通过主机从装置中移除电力。装 置响应于关机命令而关闭所有打开的文件。2.1.6 装置命令(见图2-6) 装置命令允许主机询问装置。 2.1.6.1容量响应于容量命令,装置报告存储在装置中的文件数据的容量以及可用于新文件数据 的容量。2.1.6.2状态响应于状态命令,装置报告其当前状态。状态包含三种类型的繁忙状态1. 装置忙于执行用于写入或读取数据的前台操作。2. 装置忙于执行在装置处于闲置状态时起始的后台操作。3. 缓冲存储器繁忙,且不可供主机用于写入或读取数据。 2丄7 命令参数以下参数与下文定义的命令一起使用。 2.1.7.1文件ID这是用来识别装置的目录内的文件的文件识别符。 2.1.7.2偏移量偏移量是文件或文件—信息内的相对于所述文件或文件—信息开头的以字节计的逻辑 地址。2.1.7.3长度这是文件的一连串具有循序偏移地址的数据的以字节计的长度。 2.1.7.4时间 这是以微秒计的时间。 3.文件到快闪映射算法由直接数据文件平台采用的文件到快闪映射算法是一种用于文件组织的数据存储设 备的新机制,所述机制经定义以在主机经由基于文件的接口执行文件数据写入和文件删 除操作时提供最大系统性能和最大存储器耐久性。所述映射算法已经设计以将快闪存储 器中的区块之间的文件数据复制减到最少。通过以下方式来实现这点以实现含有一个 以上文件的数据的区块的最低发生几率的方式将文件数据映射到快闪区块。3.1文件到快闪映射原理3.1.1 文件文件是主机创建和维持的一组数据。数据由主机通过文件名来识别,且可通过其偏 移位置从文件开始处存取。文件偏移地址可通过主机设置,且可通过装置作为写入指针 来递增。3丄2物理存储器结构直接数据文件平台在固定大小的元区块中存储文件的所有数据。组成元区块的快闪 擦除区块的实际数目(即擦除区块并行度)可在产品之间有所不同。在整个本说明书中, 术语"区块"始终用于指示"元区块"。使用术语"元页"来指示具有元区块的完整并行度的页。元页是最大的编程单位。 使用术语"页"来指示存储器的平面内的页,也就是说,快闪擦除区块内的页。页 是最小的编程单位。使用术语"扇区"来指示与ECC相关联的存储数据的单位。扇区是向快闪存储器传 递数据或从中传递数据的最小单位。在文件的偏移地址与物理快闪存储器结构之间并未维持任何指定的对准。 3丄3 数据群组数据群组是在文件内具有连续偏移地址的一组文件数据,其在单个存储器区块中以 连续的物理地址编程。文件通常将被编程为多个数据群组。数据群组可具有介于一个字 节到一个区块之间的任何长度。每一数据群组编程有一个标头,所述标头中含有文件识 别符信息以用于交叉参考用途。文件的数据根据其包括的数据群组来在物理存储器中索 引。文件索引表提供文件的每一数据群组的文件偏移地址和物理地址信息。3丄4 编程区块文件必须由主机打开以允许编程文件数据。每一打开的文件具有分派为编程区块的 专用区块,且所述文件的数据在由编程区块内的编程指针定义的位置处编程。当文件由 主机打开时,文件的编程区块被打开(如果不是已经存在一个编程区块的话)。将编程指 针设置到编程区块的开始处。如果对于由主机打开的文件已经存在一个编程区块,那么 其继续用于编程所述文件的数据。将文件数据以其从主机处接收的次序编程在编程区块中,不论其在文件内的偏移地 址如何或所述偏移地址的数据先前是否已被编程。当编程区块变满时,其称为文件区块, 且来自擦除区块集区的擦除区块作为新的编程区块打开。在存储文件的数据的区块之间 没有任何物理地址关系。3丄5共用区块共用区块中含有一个以上文件的数据群组。如果同一文件的多个数据群组存在于共 用区块中,那么其被连续定位且所述连续单位称为文件群组。只在区块合并操作或共用 区块垃圾收集操作期间将数据编程到共用区块。共用区块内的各个数据群组或文件群组的开头必须与元页的开头对准。文件群组内的数据群组不具有插入空间。此类数据群组之间的边界可发生在页内。 文件应当仅在单个共用区块中具有数据(见8.3.4,其是这种情况的例外)。3.2文件类型3.2.1 普通文件普通文件包括任何数目的完整文件区块和一个部分编程的编程区块。可通过通常以 循序的偏移地址次序编程来自主机的文件的数据或通过对己编辑文件的垃圾收集来创建 普通文件。图3-1中展示实例性普通文件。普通文件可以是打开的文件或关闭的文件。可在编程区块中的编程指针处编程文件的其它数据。如果主机将文件删除,那么可 立刻将含有其数据的区块擦除,而无需将数据从此类区块复制到快闪存储器中的另一位 置。因此,普通文件格式是非常高效的,且存在尽可能长久地以这种格式保持文件的优 点。3.2.2共用文件共用文件包括任何数目的完整文件区块和一个共用区块,所述共用区块含有所述文 件的数据连同其它无关文件的数据。图3-2中展示多个实例。共用文件可在垃圾收集操 作期间从普通文件中创建或者通过合并编程区块来创建。共用文件一般是关闭的文件,且不具有相关联的写入指针。如果主机打开共用文件, 那么编程区块被打开,且将编程指针设置到编程区块的开始处。如果主机将文件删除, 那么其文件区块可立刻被擦除,但必须在擦除共用区块之前在垃圾收集操作中将无关文件的数据从共用区块复制到快闪存储器中的另一位置。 3.2.3 已编辑的普通文件普通文件可在任何时间由主机编辑,主机写入文件的先前编程的偏移地址的更新数 据。图3-3中给出多个实例。用正常方式在编程区块中的编程指针处编程此种更新数据, 且所得的已编辑普通文件将在一个或一个以上废弃的文件区块或在编程区块本身中含有 废弃数据。可在文件的垃圾收集操作中,将已编辑的普通文件复原成普通文件。在此垃圾收集 期间,将任何有效文件数据从每一废弃的文件区块复制到文件的编程指针,并擦除所得的完全废弃的区块。如果可能的话,直到文件已被主机关闭之后才执行垃圾收集。 3.2.4已编辑的共用文件打开的共用文件可在任何时间由主机编辑,所述主机写入所述文件的先前编程的偏 移地址的更新数据。图3-4中展示多个实例。用正常方式在编程区块中的编程指针处编 程此种更新数据,且所得的已编辑共用文件将在一个或一个以上废弃的文件区块中、在 共用区块中或在编程区块本身中含有废弃数据。可在文件的垃圾收集操作中将已编辑的共用文件复原成普通文件格式。在此垃圾收 集期间,将任何有效的文件数据从每一废弃的文件区块和共用区块复制到所述文件的编 程指针。擦除所得的完全废弃的文件区块,且记录废弃的共用区块以进行单独的后续垃 圾收集操作。3.3垃圾收集和区块合并3.3.1垃圾收集执行垃圾收集操作,以便恢复废弃数据所占据的存储器容量。这些可能导致必须将 有效数据复制到另一位置以便擦除区块。垃圾收集无需响应于废弃数据的创建而立刻执 行。将待决的垃圾收集操作记录在垃圾收集队列中,且随后根据调度算法以最优速率执 行。直接数据文件平台支持可由主机命令起始的后台垃圾收集操作。这允许主机向装置 分派静止时间以进行内部内务处理操作,所述操作将在主机随后写入文件时实现更高性 能。如果主机不使充分的后台时间可用,那么装置作为前台操作执行垃圾收集。垃圾收 集操作的突发与编程来自主机的文件数据的突发交错。可自适应地控制交错工作循环, 以便将垃圾收集率维持在最小,同时确保不积累积压工作。3.3.2 区块合并装置中的每一普通文件包含不完全填充的编程区块,且可将大量擦除容量锁定在此 类编程区块中。共用区块还可含有擦除容量。因此实施合并关闭文件的编程区块和共用 区块的持续进行的过程,以便控制锁定的擦除容量。将区块合并作为垃圾收集功能的一 部分处理,且通过相同的调度算法对其进行管理。通过以下方式将编程区块或共用区块中的数据与一个或一个以上无关文件的数据合 并从另一共用区块或编程区块复制此种无关数据。如果原始区块是编程区块,那么其 变成共用区块。优选的是将编程区块与废弃的共用区块合并,而不是与另一编程区块合并。废弃的共用区块中含有废弃数据,且因此不可避免地必须将有效数据从所述区块重 新定位到另一位置。然而,编程区块不含有废弃数据,且将数据从所述区块复制到另一 位置是一项不理想的额外开销。 3.3.3 均衡状态当文件数据占据了较高百分比的装置容量时,主机必须对文件执行删除操作,以便 创建用于写入新文件的容量。在此状态下,装置中的大多数文件将具有共用文件格式, 因为在普通文件格式的文件的编程区块中将存在很少的容量可供擦除空间使用。删除共用文件需要在垃圾收集期间将无关文件的有效数据从其共用区块中重新定 位。此类文件群组的数据最常见的是被重新定位到关闭文件的一个或一个以上编程区块 中的可用容量。在用于最近由主机写入接着又关闭的文件的编程区块中的可用未使用容 量与因文件被主机删除而从共用区块中重新定位文件数据所需的容量之间经常存在均 衡。这种一般的均衡状态减少了从编程区块重新定位文件数据的需要,并且有助于文件 到快闪映射算法的效率。4.装置操作4.1装置操作的执行通过主机供应的命令流来确定装置的操作序列。当接收到主机命令时,中断当前装 置操作,且以正常方式解译命令。特定命令将导致执行如下四个主要装置操作之一1. 数据读取;2. 数据编程;3. 文件删除;或4. 垃圾收集。 ' 装置操作继续进行,直到达到以下条件之一1. 操作完成;2. 接收到另一主机命令;或3. 在前台垃圾收集模式下达到交错突发的末尾。如果将优先级垃圾收集操作排队以供执行,那么在解译任何新命令之前完成这些操作。展示装置操作的总体流程图见图4-1。5. 编程文件数据 5.1编程文件数据的原理当文件的数据遵照来自主机的写入或插入命令而从主机流到装置时,将所述数据编 程到快闪存储器。当己经在缓冲存储器中积累了充分数据以用于下一编程操作时,将其 编程在文件的编程区块中。见第9章中对此操作的描述。当编程区块变满时,将其规定为文件区块,且将来自擦除区块集区的擦除区块分派 为编程区块。此外,更新共用区块和废弃区块的文件索引表和垃圾收集队列。文件数据编程程序根据垃圾收集调度算法(见部分8.4)所建立的交错参数N1起始 前台垃圾收集的突发。每当在快闪存储器中起始元页编程操作时,将交错编程计数器递 增,且当这个计数器超过值N1时起始前台模式的垃圾收集操作。文件数据编程以一个元页为单位继续进行,直到主机传输另一命令为止。说明编程文件数据的流程图见图5-1。6. 读取文件数据 6.1读取文件数据的原理响应于来自主机的读取命令,从快闪存储器读取从由读取_指针指定的地址处开始的 文件偏移地址的数据,并将其循序返回到主机,直到达到文件末尾为止。读取文件索引 表(FIT),且评估文件的FIT条目以识别对应于读取—指针的位置。随后的FIT条目指定 文件的数据群组的位置。以一个元页为单位读取文件数据,直到达到文件末尾为止,或者直到主机传输另一 命令为止。图6-1中给出读取文件数据的实例性过程。7. 删除文件 7.1删除文件的原理响应于来自主机的对文件的删除命令,识别含有所述文件的数据的区块并将其添加 到垃圾收集队列,以用于随后的垃圾收集操作。删除文件的程序不会起始这些垃圾收集 操作,且因此不会立刻擦除文件的数据。首先评估文件的FIT条目,以便识别可能含有所述文件的数据的共用区块。此后, 以偏移地址次序评估文件的FIT条目,并将数据群组位于其中的数据区块添加到共用区 块队列或废弃区块队列,以用于随后的垃圾收集。接着更新文件目录和文件索引表,以 移除所述文件的条目。7.2擦除文件响应于来自主机的对文件的擦除命令,应当遵循与用于删除命令相同的程序,但是其中将含有文件的数据的区块添加到优先级共用区块队列和优先级废弃区块队列,以用 于垃圾收集。接着,主要装置操作序列确保在执行其它任何主机命令之前执行这些区块的垃圾收 集操作。这确保立刻擦除由擦除命令识别的文件数据。 文件删除过程的流程图见图7-1。 8.垃圾收集 8.1垃圾收集的原理垃圾收集是必须执行以恢复由废弃文件数据占据的快闪存储器容量的操作。垃圾收 集可能因删除文件或因编辑文件数据而成为必要的。区块合并是一种形式的垃圾收集,执行所述形式的垃圾收集以恢复未由文件数据完 全填充的区块中的擦除容量,以便允许将其用于存储无关文件。可对普通文件中的编程 区块执行合并以将其转换成共用区块,或者对共用区块执行合并以减少其数目。垃圾收集和区块合并的过程按照文件到快闪映射算法的规定,将有效文件数据从来 源快闪区块重新定位到一个或一个以上目的地区块,以便允许擦除来源区块。不立刻执行待决的垃圾收集操作,而是根据分阶段执行的调度算法执行。在装置操 作期间不时地将需要垃圾收集的对象的条目添加到三个垃圾收集队列。针对文件、废弃 区块和共用区块存在单独队列。从所述队列中选择对象以用于以预定义的优先级次序进 行下一垃圾收集操作。如果队列为空,那么可执行区块合并。可用两种方式调度垃圾收集操作。当主机不在对装置进行读取或写入存取时,主机 可起始后台操作,且装置连续执行后台操作,直到主机进行另一存取为止。当装置正被 主机存取时,装置可调度前台操作,且以与从主机接收的文件数据的编程操作突发交错 的突发形式执行前台操作。可用自适应的方式控制交错突发的长度,以便将垃圾收集速 率始终维持在所需的最小值。8.2垃圾收集队列垃圾收集队列含有对其存在待决的垃圾收集操作的对象的条目。三个队列每一者分 别含有用于废弃区块的条目、用于共用区块的条目和用于文件的条目。给予两个额外队 列高于这三个队列的优先级,并且所述两个额外队列分别含有用于废弃区块的条目和用 于共用区块的条目。将所述五个垃圾收集队列存储在快闪存储器中的控制区块中的控制 日志中。8.2.1 优先级废弃区块队列这个队列含有已经因为来自主机的擦除命令而变得完全废弃的区块的条目。其是最 高优先级垃圾收集队列。必须在从主机处接受其它任何命令之前或在对来自其它任何队 列的对象起始垃圾收集操作之前完成对所述队列中识别的所有区块的垃圾收集操作。8.2.2优先级共用区块队列这个队列含有已经因为来自主机的擦除命令而变得部分废弃的共用区块的条目。其 是第二高优先级垃圾收集队列。必须在从主机处接受其它任何命令或在对来自较低优先 级队列的对象起始垃圾收集操作之前完成对所述队列中识别的所有共用区块的垃圾收集 操作。8.2.3 废弃区块队列这个队列含有因为来自主机的删除命令或因为对文件数据的编辑而变得完全废弃的 区块的条目。其是第三高优先级垃圾收集队列。应当在对来自较低优先级队列的对象起 始操作之前完成对所述队列中识别的所有区块的垃圾收集操作。8.2.4共用区块队列这个队列含有已经因为来自主机的删除命令或因为对文件数据的编辑而变得部分废 弃的共用区块的条目。其是第四高优先级垃圾收集队列。应当在对来自较低优先级队列 的对象起始操作之前完成对所述队列中识别的所有区块的垃圾收集操作。8.2.5文件队列这个队列含有因为对文件数据的编辑而具有废弃数据的文件的条目。其是最低优先 级垃圾收集队列。当主机将文件关闭时,除非文件是普通文件,否则将其条目添加到文 件队列。因此,在主机关闭文件时有必要对文件的FIT条目执行分析,以便确定文件是 普通文件还是已编辑文件(普通的或共用的)。这个分析的程序如下1. 以偏移地址次序评估相关FIT文件中的FIT条目。2. 确定数据群组和数据群组标头的累积容量。3. 确定由文件数据占据的物理容量。这是除了含有文件数据的编程区块之外的区块 数目加上编程区块中的己使用容量。4. 如果数据群组容量超过物理容量的XX,那么确定文件是普通文件。X值的实例 是98%。乂%小于100%,以允许因缓冲器清洗操作引起的未编程空间在普通文件中保持。8.3垃圾收集操作 8.3.1 废弃区块废弃区块只含有废弃数据且可被擦除,而无需将数据重新定位到另一区块。 8.3.2 共用区块共用区块是来源区块,且含有一个或一个以上文件的一个或一个以上部分或完全废 弃的数据群组。必须将有效数据从这个来源区块重新定位到一个或一个以上目的地区块。以完整文件群组为单位重新定位数据,其中文件群组包括共用区块内的同一文件的 一个或一个以上数据群组。将每一文件群组完整地重新定位到目的地区块,但可将不同 的文件群组重新定位到不同区块。共用区块是目的地区块的优选选择,如果没有合适的共用区块可用的话则后接编程 区块,如果没有合适的编程区块可用的话则后接擦除区块。垃圾收集操作可继续进行,直到发生以下条件之一为止操作完成;主机发送命令; 或在前台模式下达到交错突发的末尾。图8-5中展示共用区块垃圾收集操作的流程图。8.3.3文件垃圾收集执行文件垃圾收集,以便恢复所述文件的废弃数据所占据的容量。其将处于已编辑 的普通文件状态或己编辑的共用文件状态下的文件复原成普通文件状态。第一步骤是对 其FIT文件中的FIT条目执行分析,以识别其数据群组必须在垃圾收集期间被复制的废 弃文件区块和共用区块。这个分析的程序如下1. 以偏移地址次序评估相关FIT文件中的FIT条目。2. 构造数据群组列表以将数据群组与物理区块联系起来。从这个列表中排除编程区 块中的数据群组。3. 确定列表中提及的每一区块中由数据群组和数据群组标头占据的物理容量。4. 如果数据群组容量超过区块容量的XX,那么确定所述区块是文件区块。X值的 实例是98%。 XX小于100%,以允许因缓冲器清洗操作引起的未编程空间在文件区块中 保持。5. 将被确定为文件区块的区块中的数据群组从以上构造的数据群组列表中移除。 修订的数据群组列表中提及的数据群组包含在废弃文件区块或共用区块中,且在文件垃圾收集操作期间被复制到编程区块。可能因为文件垃圾收集操作而修改文件的数据 群组结构,也就是说,可能通过区块边界将重新定位的数据群组一分为二,或者可将其 与邻近的数据群组归并。将所述文件的编程区块用作目的地区块。当这个区块填满时, 打开另一编程区块。垃圾收集操作可继续进行,直到发生以下条件之一为止操作完成;主机发送命令; 或在前台模式下达到交错突发的末尾。在图8-4中展示文件垃圾收集操作的流程图。 8.3.4 区块合并执行区块合并以恢复已经被不完全编程的编程区块和共用区块中的擦除容量,并使 得所述容量可用于存储其它文件的数据。将用于合并的来源区块选作编程区块日志或共用区块日志中具有最低编程容量的区 块,以允许在尽可能最少的数据重新定位之后擦除所述区块。以完整文件群组为单位重 新定位数据,其中文件群组包括编程区块或共用区块内的同一文件的一个或一个以上数 据群组。将每一文件群组完整地重新定位到目的地区块,但可将不同的文件群组重新定 位到不同区块。共用区块是目的地区块的优选选择,如果没有合适的共用区块可用的话则后接编程 区块。在没有目的地区块可用的稀有情况下,可将文件群组进行分裂以将其重新定位到 一个以上目的地区块。区块合并操作可继续进行,直到发生以下条件之一为止操作完成;主机发送命令; 或在前台模式下达到交错突发的末尾。图8-6中展示区块合并操作的流程图。8.4垃圾收集操作的调度在主机装置正在存取卡的时期期间,优选地将垃圾收集作为后台任务执行。在直接 数据文件平台中支持由主机起始的后台垃圾收集。然而,也可能有必要在主机正向装置写入数据时将垃圾收集作为前台任务来执行。 在这个模式下,完整的垃圾收集操作不需要作为单个事件来完成。垃圾收集的突发可与 编程来自主机的数据的突发交错,以使得可在多个单独阶段中完成垃圾收集操作,且对 于主机对装置的可用性的中断有限。8.4.1 后台操作当主机向装置发送闲置命令时起始后台垃圾收集。这指示主机将不会故意从装置移 除电力,且不会立刻意图存取装置。然而,主机可在任何时间通过传输另一命令来结束 闲置状态。在所述闲置状态下,装置执行连续的垃圾收集操作,直到发生以下条件之一为止 主机传输另一命令;或所有垃圾收集队列为空且不可能有任何区块合并操作。8.4.2 交错操作通过用于编程文件数据的直接数据文件过程来起始交错的垃圾收集操作。图8-1中 说明交错操作。在主机接口活动且对快闪存储器进行N1个编程操作的主机数据写入阶段 之后,装置切换到垃圾收集阶段。在这个阶段中,执行一个或一个以上垃圾收集操作中 的一部分,直到完成对快闪存储器的N2个编程操作为止。可在垃圾收集阶段末尾暂停正在进行的垃圾收集操作,且在下一个此种阶段中重新 开始垃圾收集操作。通过自适应调度算法确定N1和N2的值。8.4.3 自适应调度使用自适应调度方法来控制主机数据编程和垃圾收集的交错突发的相对长度,以使 得可将垃圾收集操作对主机数据写入操作的中断保持到最小值。在还确保不积累可能导 致随后性能降低的待决垃圾收集的积压工作的同时实现这一点。8.4.3.1操作原理在任何时间,装置状态均包括由先前写入的主机数据占据的容量、擦除区块集区中 的区块中的擦除容量和可供垃圾收集操作写入其它主机数据使用的可恢复容量。此可恢 复容量可能在编程区块、共用区块或与先前写入的主机数据共享的废弃文件区块中,或 者在完全废弃的区块中。图8-2中展示这些类型的容量利用。垃圾收集的自适应调度控制编程递增主机数据和重新定位先前写入的主机数据的交 错率,使得所述比率可在其间所有可恢复容量均可供主机数据使用的自适应时期中保持 恒定。如果主机删除文件(这将先前写入的主机数据转换成可恢复容量),那么相应地改 变交错率且开始新的自适应时期。可如下确定最佳交错率如果擦除区块集区中的擦除区块的数目=erased _Woc";编程区块和共用区块的组合数目=&to—编程区块和共用区块中的有效数据页的总数=&^—废弃区块的数目二o&okre—Woe";且区块中的页的数目=/ ag"_^er—WocA;,那么可通过垃圾收集创建的擦除区块的数目表达为dwa—Wocfo - (^rnjag" / pages—per—WocW;垃圾收集之后的擦除区块的总数表达为erawcLWoc/b + ofeo&"—Woc" + c afa—Z /och - 』ag"/戸g"—per—Woc&);可写入的递增数据元页的数目表达为pag"—per—Wocfc * (era"(Wocjb + o&soZere—Wocfcy + Aua—Wocfcs) - dataj ages。如果假设有效数据在所有编程区块和共用区块中均匀分布(这是个悲观的假设,因为将 具有低数据页计数的区块选作用于区块合并操作的来源区块) 那么垃圾收集期间重新定位的元页的数目表达为datojag" * (^ato—Woch - rfflf^pag" /pages"afC由。最佳交错率N1:N2是可写入的递增数据元页的数目与在垃圾收集期间必须重新定位的元页的数目的比率。因此,N1:N2 = fpag"一per一/ Zocfc * (era化^LWocfcy + oiw^e—Wo由 + d加—Wocfo)陽 d虛一; ag^) / (d咖—戸g" *〖dafa—— ^a一/^ge51 /; ag"—per一Wocfc) / da a—Wo由)请注意,尚未在自适应调度算法中包含废弃文件区块中的废弃容量的恢复。此容量 只是由编辑文件产生的,且不常发生。如果在废弃文件区块中存在相当大容量,那么以自适应方式确定的交错率可能不是最佳的,但是切换到具有最小比率的操作(在8.4.3.2 中描述)将确保对此类区块的高效垃圾收集。 8.4.3.2交错控制在三个区段中定义交错率N1:N2,如下。1) 最大值设置交错率的最大限度,以便确保永远不会完全抑制垃圾收集。此最大 限度的实例是10:1。2) 自适应在自适应区段中,将交错率控制为对于共用区块和废弃区块的待决垃圾收集以及编程区块和共用区块的合并来说为最佳的。其通过以下关系式定义N1:N2 = (^agw一; e厂一Woc/: * (eras^—+ oZ so^e—Woch + d咖—Wocfo)-其中Nl和N2定义为页编程操作的数目。定义N2的值,其代表垃圾收集突发的优选持续时间。这个值的实例是16。3) 最小值如果擦除区块集区中的区块数目在所定义的最小值以下,那么不是以自 适应方式定义交错率,而是将其设置成固定的最小限度。这个最小限度的实例是1:10。8.4.3.3控制参数以下参数维持在快闪存储器中的控制区块中的控制日志中,以用于控制自适应调度 擦除区块计数维持擦除区块集区中的区块数目的计数。当向擦除区块集区添加区块或从中移除区块时更新这个计数。编程与共用区块计数维持编程区块与共用区块的组合数目的计数。共用区块可含 有废弃数据。当向编程区块日志和共用区块日志添加区块或从中移除区块时更新所述计 数。编程与共用区块页计数维持编程区块和共用区块中的有效数据页的数目的计数。 当向编程区块日志和共用区块日志添加区块或从中移除区块时更新所述计数。废弃区块计数维持等待垃圾收集的完全废弃区块的数目的计数。当向废弃区块垃 圾收集队列添加区块或从中移除区块时更新所述计数。8.5垃圾收集的流程图在图8-3中给出用于选择若干特定垃圾收集操作之一的特定算法的流程图。图8-4 是用于图8-3的"文件垃圾收集"方框的流程图。用于图8-3的"共用区块垃圾收集"方 框的流程图是图8-5的主题。通过图8-6的流程图展示图8-3的"区块合并"功能。图8-7A到图8-7D四个图展示可由图8-5的过程产生的共用方块的实例性垃圾收集。 图8-7A展示初始条件,而图8-7B到图8-7C说明垃圾收集过程中的三个步骤。箭头展示 将有效数据从废弃区块传递到不满的文件区块中,于是这些目的地文件区块变成共用区 块。9.数据缓冲与编程本部分中描述的数据缓冲和编程方法限于使用与当前产品中采用的相同的快闪接口 和错误校正码(ECC)结构。如果将来引入新的快闪接口和ECC结构,那么可采用替代 的最优方法。9.1数据缓冲器缓冲存储器存在于控制器中的SRAM (现有申请案的RAM 31)中,以用于临时存 储正在编程到快闪存储器或从中读取的数据。使用缓冲存储器中的分派区域来积累文件 的充分数据,以允许在单个操作中将完整元页编程到快闪存储器中。缓冲存储器中的文 件的数据的偏移地址不重要。缓冲存储器可存储多个文件的数据。为了允许将主机的写入和读取操作两者管线化,具有两个元页的容量的缓冲存储器 空间应当可用于正被缓冲的每一文件。缓冲存储器包括一组扇区缓冲器。可分派各个扇 区缓冲器以用于临时存储单个文件的数据,且当已经将数据传递到其最终目的地时将所述扇区缓冲器解除指派。通过扇区缓冲器编号0到N-1来识别扇区缓冲器。扇区缓冲器 的数目(N)的实例是64。按扇区缓冲器的扇区缓冲器编号的次序循环分派可用的扇区缓冲器。每一扇区缓冲 器具有文件标签以及定义其中所含有的数据开头和末尾的两个相关联指针。还记录扇区 缓冲器中的数据内的文件偏移地址范围。扇区缓冲器以及与其相关联的控制信息两者均 只存在于控制器中的易失性存储器内。9.2数据编程9.2.1 元页元页是快闪存储器中的最大编程单位。应当在可能时以元页为单位编程数据,以便 实现最大性能。9.2.2 页页是元页的子集,并且是快闪存储器中的最小编程单位。9.2.3 扇区扇区是页的子集,并且是控制器与快闪存储器之间的最小数据传递单位。扇区通常 包括512个字节的文件数据。由控制器针对每一扇区产生ECC (例如通过现有申请案的 图2的控制器ECC电路33),并且将所述ECC传递到附加于扇区末尾的快闪。当从快闪 中读取数据时,必须将所述数据以多个完整扇区的形式传递到控制器,以便允许检验 ECC。9.3缓冲器清洗文件的数据一般在扇区缓冲器中积累,直到有充分的数据可用于在快闪存储器中编 程完整的元页为止。当主机停止流动文件的数据时, 一个或一个以上扇区缓冲器保持有 元页的一部分的文件数据。这个数据保持在缓冲存储器中,以便允许主机写入所述文件 的其它数据。然而,在特定情形下,必须在一种称为缓冲器清洗的操作中将缓冲存储器 中的数据提交给快闪存储器。缓冲器清洗操作导致将保持在扇区缓冲器中的文件的所有 数据编程在元页内的一个或一个以上页中。在以下两种情况下执行缓冲器清洗操作1) 主机关闭文件,或2) 主机接收到关机命令。如果己经将主机关闭的文件的数据换出到交换区块,那么应当将所述数据复原到缓 冲存储器,且应当执行缓冲器清洗。应当将电源移除后在装置初始化期间处于交换区块中的数据复原到缓冲存储器,且应当执行缓冲器清洗。 9.4缓冲器交换缓冲器交换是这样一种操作其中将一个或一个以上扇区缓冲器中的文件的数据编 程在称为交换区块的临时位置中,以便随后在主机继续写入所述文件的数据时复原到缓 冲存储器。9.4.1交换区块的格式交换区块是存储己经从扇区缓冲器中换出的文件的数据的专用区块。将文件的数据 连续存储在交换区块中专用于所述文件的一个或一个以上页中。当随后将数据换入回到 缓冲存储器时,所述数据在交换区块中变成废弃的。当交换区块变满时,将交换区块内的有效数据以压縮形式写入到擦除区块,所述擦 除区块于是变成交换区块。这种压縮形式允许不同文件的数据存在于同一页内。优选地 只存在单个交换区块。9.4.2对存储在交换区块中的数据进行索引将交换区块索引维持在快闪存储器中,其中针对交换区块中的每一文件含有先前针 对缓冲存储器中的文件而记录的信息的复本(见9.1)。 9.4.3将数据移动到交换区块(换出)在没有充分的扇区缓冲器可用于分派到已经被主机打开的文件或者分派到因来自主 机的对文件的写入命令而必须从交换区块中换入的文件时,发生换出操作。选定用于换 出的文件应当是在缓冲存储器中存在相应缓冲器的文件中最早写入的文件。视情况而定,为了在未调度的电源移除的情况下改进数据安全性,可针对缓冲存储 器中与来自主机的最近写入命令无关的任何文件执行换出。在此情况下,所述文件的数 据可保留在缓冲存储器中,且如果尚未移除电源的话,则不需要进行后续的换入操作。9.4.4从交换区块中复原数据(换入)将文件的完整数据从交换区块读取到一个或一个以上扇区缓冲器。文件数据无需具 有与其换出之前完全相同的与扇区缓冲器的对准。由于压縮了缓冲区块,所以对准可能 已经发生变化。交换区块中的文件的数据变成废弃的。9.5编程来自主机的文件数据本部分中给出的实例涉及每个元页具有两个页且每个页具有两个扇区的快闪存储器 配置。9.5.1编程来自主机的连续数据文件的数据从主机中流出且在连续分派的扇区缓冲器中积累。当充分的扇区缓冲器 已经被填满时,将其数据与每一扇区的ECC—起传递到快闪存储器,且将文件的编程区 块中的目的地元页编程。图9-l中展示连续主机数据编程的实例。9.5.2编程来自主机的中断数据文件的数据从主机中流出且在连续分派的扇区缓冲器中积累。图9-2展示已经被中 断的主机数据编程的实例。在数据区段2A之后中断流,同时执行不同文件的写入操作。 当接收到针对所述文件的另一写入命令时,在与以前一样的扇区缓冲器中积累从主机流 出的数据,其中从数据区段2B处开始。当已经有充分的扇区缓冲器被填满时,将其数据 连同每一扇区的ECC—起传递到快闪存储器,且编程文件的编程区块中的目的地元页。9.5.3编程从缓冲器中清洗的数据从主机流出文件数据,并将其积累在连续分派的扇区缓冲器中。然而,不存在充分 的数据以编程在完整元页中。在图9-3中给出实例。将数据区段1和2A连同填补区段 2B并连同每一扇区的ECC —起传递到快闪存储器,且编程文件的编程区块中的目的地 页。9.5.4编程正从缓冲器换出的数据这个操作与用于缓冲器清洗编程的操作相同,区别只是目的地页是交换区块中的下 一可用页,而不是文件的编程区块中的页。图9-4对此进行说明。 9.5.5编程在从缓冲器中清洗之后来自主机的数据与从缓冲存储器中清洗的数据分离地编程在文件的缓冲器清洗操作之后由主机供应 的文件数据。编程因此必须从文件的编程区块中的下一可用页开始。积累足以完成当前 元页的数据,且将其与ECC—起传递并编程,如针对图9-5中的扇区3和4所示那样。9.5.6编程在换入到缓冲器之后来自主机的数据当接收到已经从缓冲存储器中换出的文件的其它数据时,将其积累在缓冲存储器中 分派的扇区缓冲器中。还将换出数据从交换区块复原到缓冲存储器。当已经积累了充分 的数据时,在单个操作中编程整个元页。如图9-6中说明的,从交换区块中读取数据区段1和2A连同填补区段2B,并在两 个扇区缓冲器中复原。在所述两个扇区上检验ECC。如图9-7的实例中所示,在缓冲器扇区中积累来自主机的文件数据。将数据区段l、 2A/2B、 3A/3B和4A/4B连同每一扇区的ECC—起传递到快闪存储器,并将其编程为扇 区1、 2、 3和4。9.6编程从快闪中复制的数据 9.6.1从对准的元页中复制数据当拟复制到完整目的地元页的数据占据了单个完整的来源元页时,将来源元页和目 的地元页称为对准的,如图9-8中说明的。将数据扇区1、 2、 3和4从来源元页读取到 四个扇区缓冲器,且在每一扇区上检验ECC。9.6丄1从缓冲器中写回将数据从所述四个扇区缓冲器编程到目的地元页,如图9-9所示。针对扇区l、 2、 3 和4产生和存储ECC。 9.6丄2芯片上复制当拟复制的数据的元页对准与在来源和目的地元页中相同时,可使用快闪芯片内的 芯片上复制来提高复制操作的速度。如果ECC检验未显示任何错误,那么将数据编程到 目的地元页。9.6丄3共用区块内的元页对准应当迫使共用区块内的每一文件群组的开头与元页的开头对准。编程区块中的数据 群组也与区块中的第一元页的开头对准。因此,共用区块的所有数据复制操作(例如将 编程区块合并到共用区块,并将文件群组从一个共用区块复制到编程区块或另一共用区 块)将与对准的元页之间的数据复制一起操作。当将数据复制到共用区块或从共用区块 中复制数据时应使用快闪芯片内的芯片上复制以便提高复制操作的速度。9.6.2从未对准的循序元页中复制数据当拟复制到完整目的地元页的数据虽然连续但占据了两个循序来源元页时,将来源 和目的地元页称为未对准。图9-10中展示读取来源元页的实例。将数据扇区1A/1B、 2 和3从第一来源元页读取到三个扇区缓冲器,且将数据扇区4和5A/5B从第二来源元页 读取到另外两个扇区缓冲器。在每一扇区上检验ECC。将数据部分1A/1B、 2A/2B、 3A/3B和4A/4B从扇区缓冲器编程到目的地元页中的扇 区l、 2、 3和4,如图9-ll所示。针对扇区l、 2、 3和4产生和存储ECC。当正被复制的元页数据是一长串连续数据中的一部分时,可将所述复本部分地管线 化。将数据以完整元页的形式从来源位置读取到缓冲存储器。必须读取N+1个来源元页,以便编程N个目的地元页。9.6.3从未对准的非循序元页中复制数据当拟复制到完整目的地元页的数据不连续并且占据两个或两个以上非循序的来源元页时,将来源和目的地元页称为未对准且非循序。这种情况代表将文件内的两个或两个 以上非连续数据群组中的一部分复制到单个目的地元页。如图9-12所示,将数据扇区 1A/1B、2和3A/3B从第一来源元页读取到三个扇区缓沖器,且将数据扇区4A/4B和5A/5B 从第二来源元页读取到另外两个扇区缓冲器。在每一扇区上检验ECC。
接着将数据部分1A/1B、 2A/2B、 3A/3B和4A/4B从扇区缓冲器编程到目的地元页中 的扇区l、 2、 3和4,如图9-13所示。针对扇区l、 2、 3和4产生和存储ECC。
IO.文件索引
10.1 文件索引的原理
图10-1中大体上展示文件索引。将文件的数据存储为一组数据群组,其中每一数据 群组在文件偏移地址空间和物理地址空间两者中跨越一连串连续地址。文件的所述组内 的数据群组无需彼此具有任何特定的物理地址关系。文件索引表(FIT)允许以偏移地址 次序识别文件的有效数据群组的位置。通过文件数据指针识别文件的一组FIT条目。
将主机产生的与文件相关联的信息作为文件—信息存储在信息表(IT)中。文件—信 息的性质和内容由主机确定,且其不由装置解译。文件—信息可包含文件的文件名、父目 录、子目录、属性、权利信息和文件关联。IT中的文件的文件一信息通过文件信息指针识 别。
目录含有装置中的每个有效文件的文件数据指针和文件信息指针。文件的这些目录 条目通过文件ID来识别,所述文件ID是数字值。
10.2 文件索引结构
图10-2展示文件索引结构的实例。
10.3 目录 10.3.1文件ID
文件ID是直接数据文件平台内的文件的数字识别符。其由直接数据文件平台响应于 创建命令而分派,或者可通过创建命令指定为参数。
当由装置分派文件ID值时,使用指向目录中的条目的循环指针来定位下一个可用文 件ID。当文件被删除或擦除时,将文件的文件ID识别的目录条目标记为可用的。
文件ID值定义目录中的条目,所述条目含有文件的文件数据指针和文件信息指针的 字段。
通过针对文件ID分派的位的数目来确定可存储在装置中的文件的最大数目。 10.3.2文件数据指针文件数据指针是在控制日志内指向FIT区块列表中的文件条目的逻辑指针,且可能 也是指向FIT更新区块列表中的文件条目的逻辑指针。 文件数据指针具有两个字段
1) FIT范围,和
2) FIT文件编号。
即使当文件具有零长度时也存在针对所述文件的文件数据指针。
10.3.2.1 FIT范围
FIT范围是FIT的子集。每一 FIT范围映射到单独的物理FIT区块。FIT范围可含有 一个FIT文件到最大数目的FIT文件,所述最大数目例如可为512。
10.3.2.2 FIT文件编号
FIT文件编号是用来在FIT内识别FIT文件的逻辑编号。 10.3.3文件信息指针
文件信息指针是在控制日志内指向信息区块列表中的文件条目的逻辑指针,且可能 也是指向信息更新区块列表中的文件条目的逻辑指针。 文件信息指针具有两个字段
1) 信息范围;和
2) 信息编号。
10.3.3.1 信息范围
信息范围是信息表的子集。每一信息范围映射到单独的物理信息区块。信息范围可 含有一组文件—信息到最大数目的组的文件j言息,所述最大数目例如可为512。
10.3.3.2 信息编号
信息编号是用来在信息区块中识别一组文件—信息的逻辑编号。 10,3,4目录结构
目录存储在专用于所述用途的快闪区块中。图10-3展示实例性目录区块格式。所述 目录被构造成一组页,在每一页内针对具有连续文件ID值的文件存在一组条目。这组条 目称为目录范围。
通过在由控制指针定义的下一擦除页位置处写入目录页的修订版本来更新目录。如 果必要的话,可通过将多个页编程到元页中的不同页来同时更新所述多个页。 通过目录区块中的最后写入页中的范围指针来识别目录范围的当前页位置。 10.4 区块列表文件索引表和信息表两者均包括一系列逻辑范围,其中范围与物理快闪区块具有相 关性。在控制日志中维持区块列表以便记录文件数据指针或文件信息指针中定义的范围 与物理区块之间的相关性,以及文件数据指针或文件信息指针中定义的逻辑编号与文件 索引表和信息表内的物理区块中使用的逻辑编号之间的相关性。
10.4.1 FIT区块列表
FIT区块列表是控制日志中的为文件的FIT中的条目分派FIT文件指针的列表。FIT 文件指针含有分派到文件数据指针中定义的范围的物理快闪区块的地址,以及在文件数 据指针中定义的同一 FIT文件编号。FIT区块列表中的条目含有单个字段一一区块物理 地址。
FIT更新区块列表是控制日志中的为FIT中正被更新的文件条目分派FIT文件指针 的列表。FIT文件指针含有当前分派为FIT更新区块条目的物理快闪区块的地址,以及 FIT更新区块中分派给正被更新的FIT文件的FIT更新文件编号。FIT更新区块列表中的 条目含有三个字段
1) FIT范围,
2) FIT文件编号,和
3) FIT更新文件编号。
当应当从FIT区块列表中确定对应于文件数据指针的FIT文件指针时,搜索FIT更 新区块以确定是否存在与文件数据指针有关的条目。如果不存在,那么FIT区块列表中 的与文件数据指针有关的条目是有效的。
10.4.2信息区块列表
将主机写入的文件—信息直接存储在信息表中,所述信息表通过文件信息指针来识 别。存在信息区块列表以向信息表中的文件—信息分派信息指针。用于这些信息区块列表 的索引机制与针对FIT区块列表描述的机制完全相似。
信息区块列表中的条目含有单个字段一一区块物理地址。
信息更新区块列表中的条目含有三个字段
1) 信息范围,
2) 信息编号,和
3) 更新信息编号。 10.5 文件索引表
文件索引表(FIT)包括一串FIT条目,其中每一FIT条目识别文件偏移地址和在数据群组的快闪存储器中的物理位置。FIT含有存储在装置中的文件的所有有效数据群组 的条目。不通过FIT来索引废弃的数据群组。图10-4中给出实例性FIT逻辑结构。
将文件中的数据群组的一组FIT条目以文件偏移地址次序维持为连续条目。所述组 条目称为FIT文件。将FIT维持为一系列FIT范围,且每一 FIT范围与物理快闪区块具 有相关性。FIT范围的数目将根据装置中的数据群组的数目而变化。在装置操作期间将 创建新的FIT范围和消除FIT范围。使用FIT区块列表来根据文件数据指针创建FIT文 件指针,可通过所述FIT文件指针来识别FIT中的位置。
10.5.1 FIT文件
FIT文件是文件内的数据群组的一组连续FIT条目。所述组中的条目以文件偏移地 址排序。FIT文件中的FIT条目是连续的,且包含在单个FIT范围内或者从一个FIT范 围溢出到下 一 个连续的FIT范围。
10.5.2 FIT标头
FIT文件中的第一条目是FIT标头。其具有三个字段
1) 文件ID,
2) 编程区块,和
3) 编程指针。
FIT标头具有等于FIT条目的整数的固定长度。这个数目可能是1。
10.5.2.1 文件ID
文件ID识别目录中的文件的条目。
10.5.2.2 编程区块
每当将FIT文件的更新版本写入到FIT中时,将文件的编程区块的当前物理地址记 录在FIT标头中。这用来在主机重新打开文件时定位文件的编程区块。其还可用来验证 FIT文件与所述文件的编程区块之间的对应性,所述文件已经被选定进行编程区块合并。
10.5.2.3 编程指针
每当将FIT文件的更新版本写入在FIT中时,将文件的编程区块内的编程指针的当 前值记录在FIT标头中。这用来在主机重新打开文件时或者在编程区块已经被选定进行 编程区块合并时定义文件的编程区块内用于编程数据的位置。
10.5.3 FIT条目
FIT条目指定数据群组。其具有四个字段
1)偏移地址,2) 长度,
3) 指针,和
4) EOF旗标。
10.5.3.1 偏移地址
偏移地址是文件内与数据群组的第一字节有关的以字节计的偏移量。
10.5.3.2 长度
其定义数据群组内的文件数据的以字节计的长度。完整数据群组的长度比这个值长 出数据群组标头的长度。
10.5.3.3 指针
其是指向数据群组的开头在快闪区块中的位置的指针。所述指针具有两个字段
1) 区块地址,其定义含有所述数据群组的物理区块,和
2) 字节地址,其定义数据群组的开头在区块内的字节偏移量。这个地址含有数据群 组标头。
10.5.3.4 EOF旗标
EOF旗标是识别数据群组作为文件末尾的单个位。 10.5.4 FIT区块格式
FIT范围映射到单个物理区块,其称为FIT区块。将这些区块中的更新版本的数据 编程在共用更新区块中,其称为FIT更新区块。以一个页为单位更新数据。如果必要的 话,可并行地更新元页内的多个页。
10.5.4.1 间接寻址
通过FIT文件指针识别FIT文件。这个指针内的FIT文件编号字段是逻辑指针,其 在FIT文件的数据在用于索引的物理结构内移动时保持恒定。物理页结构内的指针字段 提供逻辑到物理指针转译。
10.5.4.2 页格式
FIT区块和FIT更新区块中采用的页格式相同。
将页再分为两个区域,第一区域用于FIT条目,且第二区域用于文件指针。图10-5 中给出实例。
第一区域含有多个FIT条目,其每一者指定数据群组或含有FIT文件的FIT标头。 FIT页中的FIT条目的数目的实例是512。通过一组连续FIT条目来指定FIT文件,所述 组FIT条目在一个FIT页内或者与两个或两个以上FIT页重叠。通过第二区域中的文件指针来识别FIT文件的含有FIT标头的第一条目。
第二区域只在最近编程的FIT页中含有有效文件指针。所有其它页中的第二区域是 废弃的,且未使用。文件指针区域针对FIT区块中可能含有的每一 FIT文件含有一个条 目,也就是说,文件指针条目的数目等于FIT区块中可能存在的FIT文件的最大数目。 根据FIT文件数目循序存储文件指针条目。第N个文件指针条目含有指向FIT区块内的 FIT文件N的指针。其具有两个字段
1) 页编号,其指定FIT区块内的物理页,和
2) 条目编号,其指定物理页内的FIT条目。
文件指针条目提供用于将FIT区块内的逻辑FIT文件编号转译成区块内的物理位置 的机制。当编程每个FIT页时更新整组文件指针,但是所述整组文件指针只在最近编程 的页中有效。当在FIT更新区块中更新FIT文件时,其在FIT区块或FIT更新区块中的 先前位置变成废弃的,且不再被文件指针参考。
10.5.5 FIT更新区块
在所有FIT区块间共享的单个FIT更新区块中对FIT区块中的FIT文件作出改变。 图10-6中展示物理FIT区块的实例。
文件数据指针是指向FIT文件的逻辑指针。其FIT范围字段用来寻址FIT区块列表 以识别映射到这个FIT范围的FIT区块的物理区块地址。接着,FIT文件指针的FIT文 件编号字段为FIT区块中的目标FIT文件选择正确的文件指针。
文件数据指针的FIT范围字段和FIT文件编号字段两者均用来寻址FIT更新区块列 表,以识别目标FIT文件是否已经被更新。如果在这个列表中找到条目,那么其提供FIT 更新区块的物理区块地址以及FIT文件的更新版本的更新区块内的FIT文件编号。这可 能与用于FIT区块中的FIT文件的FIT文件编号不同。FIT更新区块含有FIT文件的有 效版本,且FIT区块中的版本是废弃的。
10.5.6更新操作
只在合并操作期间编程HT区块。这导致FIT文件在区块内紧密压縮。当修改、添 加或移除FIT条目时或者在压縮操作期间,更新FIT更新区块。图10-7展示对FIT文件 的更新操作的实例。
由于合并操作的缘故,FIT文件在FIT区块中紧密压縮。FIT区块可能不是被完全填 满,因为其内可存在的FIT文件具有最大数目。FIT文件可从一个页溢出到下一页。当 更新FIT区块中的FIT文件或将其在FIT更新区块中复写时,所述FIT文件变成废弃的。当更新FIT文件时,将其完全复写在FIT更新区块中的下一可用页中。更新FIT文 件可能由改变现有FIT条目的内容或改变FIT条目的数目组成。FIT文件可从一个页溢 出到下一页。FIT更新区块内的FIT文件无需均与同一 FIT范围有关。10.5.7创建FIT范围当必须创建新的FIT范围以便适应FIT文件的额外存储空间时,不立刻创建FIT区 块。首先将这个范围内的新数据写入到FIT更新区块。随后当针对所述范围执行合并操 作时创建FIT区块。10.5.8压縮与合并10.5.8.1 压縮目录更新区块或FIT更新区块当FIT更新区块变得填满时,可将其有效FIT文件数据以压縮形式编程到擦除区块, 所述擦除区块于是变成更新区块。如果更新只涉及到几个文件,那么可能只有少到一页 压縮有效数据要编程。如果拟在压縮操作中重新定位的FIT文件涉及关闭文件,且所述范围的FIT区块含 有充分的未编程页,那么可将FIT文件重新定位到FIT区块,而不是重新定位到压縮的 更新区块。10.5.8.2 合并目录区块或FIT区块当更新FIT条目时,FIT区块中的原始FIT文件变成废弃的。此类FIT区块应当周 期性地经受垃圾收集,以便恢复废弃空间。借助于合并操作来实现这一点。此外,可能 已经在一个范围内创建了新文件,且所述新文件可能在更新区块中具有条目,但是可能 在FIT区块中不存在相应的废弃条目。应当周期性地将此类FIT文件重新定位到FIT区 块。可对于相关范围将更新区块中的FIT文件合并到FIT区块中,且因此从更新区块中 消除所述FIT文件,而其它FIT文件保留在更新区块中。如果FIT文件中的FIT条目的数目已经在更新过程期间增加,且无法将FIT范围的 有效数据合并到单个擦除区块中,那么可将原先指派给所述FIT范围的一些FIT文件指 派给另一FIT范围,且可在单独操作中在两个区块中执行合并。在FIT文件的此种重新 指派的情况下,必须对目录中的文件数据指针进行更新以反映新FIT范围。当FIT更新区块中的一个范围的有效数据的容量达到所定义的阈值时,应当执行针 对所述范围的合并操作。这个阖值的实例是50%。对于涉及到仍然打开且主机可能继续存取的文件的活动FIT文件,应当优先于合并而执行压縮。10.6 信息表信息表使用与部分10.5中针对文件索引表所定义的相同的结构、索引机制和更新技 术。然而,文件的文件一信息包括不在直接数据文件平台内解译的单串信息。10.7 数据群组数据群组是一组具有文件的连续偏移地址的文件数据,其在单个存储器区块中的连 续物理地址处编程。文件通常将被编程为多个数据群组。数据群组可具有介于一个字节 与一个区块之间的任何长度。10.7.1数据群组标头每一数据群组均编程有标头,所述标头含有文件识别符信息以用于交叉参考目的。 标头含有包括数据群组的文件的FIT文件指针。 ll.区块状态管理 11.1 区块状态可将存储文件数据的区块分类成以下八种状态,如图11-1的状态图所示。 ll丄l擦除区块擦除区块在擦除区块集区中具有擦除状态。从这个状态的可能转变如下(a) 擦除区块到编程区块当从主机供应单个文件的数据或者当在文件的垃圾收集期间复制所述文件的数据 时,将所述数据编程到擦除区块。11.1.2编程区块编程区块中部分地编程有单个文件的有效数据,且含有一些擦除容量。所述文件可 能是打开或关闭的。当主机供应文件的其它数据或者当在文件的垃圾收集期间复制所述 文件的其它数据时,应当将所述数据编程到所述区块。从这个状态的可能转变如下(b) 编程区块到编程区块当从主机供应单个文件的数据时或者当在文件的垃圾收集期间复制所述文件的数据 时,将所述数据编程到所述文件的编程区块。 (C)编程区块到文件区块编程来自主机的单个文件的数据,以便填充所述文件的编程区块。 (f)编程区块到废弃区块由于在垃圾收集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一 部分,所以编程区块中的文件的所有数据变成废弃的。(h) 编程区块到废弃编程区块由于主机将数据的更新版本写入到编程区块或者由于主机删除文件的一部分,所以 同一编程区块中的数据的一部分变成废弃的。 (1)编程区块到共用区块在文件或共用区块的垃圾收集期间或者在编程区块合并期间,将所述文件的剩余数 据编程到不同关闭文件的编程区块。 11丄3文件区块文件区块完全由单个文件的有效数据填充。 从这个状态的可能转变如下-(d) 文件区块到废弃的文件区块由于主机将数据的更新版本编程在文件的编程区块中,所以文件区块中的数据的一 部分变成废弃的。(g)文件区块到废弃区块(g)由于主机将区块中的数据的更新版本编程在文件的编程区块中或者由于主机删除文 件的全部或一部分,所以文件区块中的所有数据变成废弃的。 11丄4废弃的文件区块废弃的文件区块中填充有单个文件的有效数据与废弃数据的任意组合。 从这个状态的可能转变如下(e) 废弃的文件区块到废弃区块(e)由于主机将区块中的有效数据的更新版本编程在文件的编程区块中、由于在垃圾收 集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一部分,所以废弃的 文件区块中的所有数据变成废弃的。1L1.5废弃的编程区块废弃的编程区块中部分地编程有单个文件的有效数据与废弃数据的任意组合,且含 有一些擦除容量。当主机供应文件的其它数据时,应当将所述数据编程到区块。然而, 在垃圾收集期间,不应当将文件的数据复制到区块,且应当打开新的编程区块。从这个状态的可能转变如下(i) 废弃的编程区块到废弃的编程区块当从主机供应单个文件的数据时,将所述数据编程到所述文件的废弃编程区块。 (j)废弃的编程区块到废弃区块由于在垃圾收集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一 部分,所以废弃的编程区块中的文件的所有数据变成废弃的。 (k)废弃的编程区块到废弃的文件区块当从主机供应单个文件的数据时,将所述数据编程以填充所述文件的废弃的编程区块。11丄6共用区块共用区块中编程有两个或两个以上文件的有效数据,且通常含有一些擦除容量。可 在编程区块的垃圾收集或合并期间将任何文件的剩余数据编程到共用区块。 从这个状态的可能转变如下(m)共用区块到共用区块在文件或共用区块的垃圾收集期间或者在编程区块的合并期间,将文件的剩余数据 编程到共用区块。(n)共用区块到废弃的共用区块由于主机将数据的更新版本编程在文件的编程区块中、由于在文件的垃圾收集期间 将数据复制到另一区块或者由于主机删除文件的全部或一部分,所以共用区块中的一个 文件的数据的一部分或全部变成废弃的。11丄7废弃的共用区块废弃的共用区块中编程有两个或两个以上文件的有效数据与废弃数据的任意组合, 且通常含有一些擦除容量。不应将其它数据编程到区块。 从这个状态的可能转变如下 (o)废弃的共用区块到废弃区块由于主机将一个文件的数据的更新版本编程在文件的编程区块中、由于在文件的垃 圾收集期间将一个文件的数据复制到另一区块或者由于主机删除一个文件的全部或一部 分,所以废弃的共用区块中的所有文件的数据变成废弃的。11.1.8废弃区块废弃区块只含有废弃数据,但尚未被擦除。从这个状态的可能转变如下(p)废弃区块到擦除区块(p)在垃圾收集期间擦除废弃区块,并将其添加回到擦除区块集区。12. 擦除区块管理12.1 元区块链接将擦除区块链接到元区块中的方法与针对早先的第3代LBA系统定义的相比没有变化。12.2 擦除区块集区擦除区块集区是装置中的可供分派以用于存储文件数据或控制信息的擦除区块的集 区。集区中的每一擦除区块是元区块,且所有元区块具有相同的固定并行度。将集区中的擦除区块记录为控制区块中的擦除区块日志中的条目。根据区块的擦除 次序将条目在日志中排序。将用于分派的擦除区块选为日志顶部处的条目。当擦除区块 时将条目添加到日志尾部。13. 控制数据结构将控制数据结构存储在专用于所述用途的快闪区块中。如下定义三类区块-1) 文件目录区块,2) 文件索引表区块,和3) 控制区块。13.1 文件目录区块先前已经描述了文件目录区块的结构。13.2 文件索引表区块 先前已经描述了文件索引表的结构。13.3 控制区块控制区块将控制信息存储在四个独立的日志中。针对每一日志分派单独的页。如果 有必要的话,可将此延伸为每一日志多个页。图13-1中展示控制日志的实例性格式。通过在控制指针定义的下一擦除页位置处写入完整日志的修订版本来更新日志。如 果有必要的话,可通过将多个日志编程到元页中的不同页来同时更新所述多个日志。通 过控制区块中的最后写入的页中的日志指针来识别所述四个日志中每一者的有效版本的 页位置。13.3.1共用区块日志共用区块日志记录关于装置中存在的每个共用区块的信息。将共用区块日志中的日 志条目细分成两个区域,第一区域用于区块条目且第二条目用于数据群组条目,如图13-2中说明的。每一区块条目记录共用区块的物理位置。条目具有固定大小,且在共用区块 日志中存在固定数目。每一条目具有以下字段-1) 区块物理地址;2) 指向共用区块中用于编程的下一可用页的指针,3) 指向区块的数据群组条目中的第一条目的指针,和4) 数据群组条目的数目。数据群组条目记录关于共用区块中的数据群组的信息。 一组连续数据群组条目定义 共用区块中的所有数据群组。在共用区块中存在可变数目的数据群组。每一条目优选地 具有以下字段1) 共用区块内的字节地址,和2) FIT文件指针。 13.3.2编程区块日志编程区块日志记录关于装置中存在的用于关闭文件的每个编程区块的信息。针对每 一编程区块存在一个条目,且条目具有以下字段-1) 区块物理地址,2) 指向编程区块中用于编程的下一可用页的指针,和3) FIT文件指针。 13.3.3擦除区块日志擦除区块日志记录装置中存在的每个擦除区块的身份。针对每一擦除区块存在一个 条目。根据区块的擦除次序将条目在日志中排序。将用于分派的擦除区块选作日志顶部 处的条目。当擦除区块时,将条目添加到日志的尾部。条目具有单个字段区块物理地 址。13.3.4控制日志控制日志在以下字段中记录各种控制信息 13.3.4.1 打开文件列表这个字段含有关于当前打开文件中每一者的信息,如下1) 路径名,2) 文件名,3) FIT文件指针,和4) 编程区块物理地址。编程区块日志中不包含打开文件的编程区块。13.3.4.2 共用区块计数这个字段含有共用区块日志中记录的共用区块的总数。13.3.4.3 编程区块计数这个字段含有编程区块日志中记录的编程区块的总数。当向编程区块日志添加区块 或从中移除区块时更新所述计数。13.3.4.4 擦除区块计数这个字段含有擦除区块日志中记录的擦除区块的总数。当向擦除区块日志添加区块 或从中移除区块时更新所述计数。13.3.4.5 编程/共用区块页计数这个字段含有编程区块和共用区块中的有效数据页的数目的计数。当向编程区块日 志和共用区块日志添加区块或从中移除区块时更新所述计数。13.3.4.6 废弃区块计数这个字段含有等待垃圾收集的完全废弃区块的数目的计数。当向废弃区块垃圾收集 队列添加区块或从中移除区块时更新所述计数。13.3.4.7 FIT区块列表这个字段含有用于将FIT范围映射到FIT区块的信息。其含有定义每一 FIT范围的 FIT区块物理地址的条目。13.3.4.8 FIT更新区块列表这个字段含有用于将FIT范围和FIT文件编号映射到FIT更新文件编号的信息。其 含有针对存在于更新区块中的每一有效FIT文件的条目。条目具有以下三个字段1) FIT范围,2) FIT文件编号,和3) FIT更新文件编号。13.3.4.9 目录区块列表这个字段含有用于将目录范围映射到目录区块的信息。其含有定义每一目录范围的 目录区块物理地址的条目。13.3.4.10目录更新区块列表这个字段含有用于将目录范围和子目录编号映射到更新子目录编号的信息。其含有 针对于存在于更新区块中的每一有效子目录的条目。条目具有以下三个字段1) 目录范围,2) 子目录编号,和3) 更新子目录编号。 13.3.4.11缓冲器交换区块索引这个字段含有交换区块中的有效数据群组的索引。每一数据群组的索引含有以下字段1) FIT文件指针,2) 交换区块内的字节地址,和3) 长度。13.3.4.12优先级废弃区块队列这个字段含有用于垃圾收集的优先级废弃区块队列中所有区块的区块地址。 13.3.4.13优先级共用区块队列这个字段含有用于垃圾收集的优先级共用区块队列中所有区块的区块地址。 13.3.4.14废弃区块队列这个字段含有用于垃圾收集的废弃区块队列中所有区块的区块地址。 13.3.4.15共用区块队列这个字段含有用于垃圾收集的共用区块队列中所有区块的区块地址。 13.3.4.16 文件队列这个字段含有用于垃圾收集的文件队列中所有文件的FIT文件指针。14.静态文件14.1 静态文件有些主机可能通过创建一组具有相同大小的文件并在所述组中的文件内周期性地更 新数据来在直接数据文件装置中存储数据。将作为此组的一部分的文件称为静态文件。 主机可能在存储卡外部,或者可能是存储卡内的执行卡上应用程序的处理器。在与本申请案同时申请的Sergey Anato!ievich Gorobets的题为"Interfacing systems Operating Through A Logical Address Space and on a Direct Data File Basis"的专禾ll申请案 中描述了静态文件使用的实例性应用。在所述申请案中,通过存储器控制器将主机的逻 辑地址空间划分成此类静态文件。直接数据文件装置以与针对其它任何文件的方式完全相同的方式管理静态文件的存 储。然而,主机可以用静态文件优化装置的行为和性能的方式在直接数据文件命令集中使用命令。14丄1静态文件分区将静态文件作为一个组存储在装置中的专用分区中。分区中的所有静态文件具有相 同的文件大小。14.1.2静态文件大小主机通过写入到文件的偏移地址范围来定义文件大小。静态文件的大小等于元区块 的大小。主机管理写入—指针和读取—指针代表的文件偏移值,以便将其维持在始终对静态文 件允许的值的范围内。14丄3删除静态文件与直接数据文件装置中的其它文件不同,主机不在正常操作期间删除静态文件。静 态文件由主机创建,接着在装置中连续存在。在任何时间写入到文件的数据均复写现有 的文件数据。然而,主机始终有能力(例如)在主机重新格式化装置或减少装置中的静态文件分 区大小的操作期间删除静态文件。14.2 与静态文件一起使用的命令集图14-1给出用于与静态文件一起使用的命令集,在图2-1到2-6中展示了其中的一 个子集,所述命令集支持静态文件所需的所有操作。14.3 创建静态文件通过使用来自主机的创建命令在装置中创建静态文件。主机通常将指定其希望用来 识别文件的文件ID。主机可追踪其已经在装置中创建了哪些文件,或者其可响应于在主机已经试图打开 其文件ID在装置中尚不存在的文件之后来自装置的错误消息而创建文件。14.4 打开静态文件主机通过使用文件的文件ID作为参数发送打开命令来打开静态文件。 主机可用以下方式与装置中的所述组静态文件一起操作其控制装置中同时打开的文件数目或在装置中同时打开的具有由主机定义的特定类型的文件的数目。主机可因此在打开另一静态文件之前关闭一个或一个以上静态文件。14.5 对静态文件的写入当首次写入静态文件时,其占据装置中的单个完整的文件区块,因为主机将文件大小定义为恰好等于快闪存储器中的元区块的大小。因此,文件的偏移地址范围恰好等于 快闪存储器中的元区块的大小。对静态文件的随后写入导致在这个偏移地址范围内更新数据。主机通过借助于写入— 指针命令控制文件的写入—指针值来控制正在更新数据的文件偏移地址。主机不允许写入 —指针值超过与静态文件大小有关的偏移地址范围的末尾。类似地,主机将读取一指针值 限制在这个范围内。当在己经打开文件之后更新静态文件中的现有数据时,打开向其编程更新数据的编 程区块。文件区块中具有相应偏移地址的数据变成废弃的。如果更新了完整的静态文件, 那么编程区块中的所有数据有效,且编程区块变成所述文件的文件区块。文件的先前文 件区块中的所有数据己经变成废弃的,且将区块添加到废弃区块垃圾收集队列。如果针 对文件接收到其它更新数据,那么将擦除区块指派为编程区块。如果静态文件的编程区块变满,但其不含有文件的所有有效数据,那么所述编程区 块中的一些数据废弃,因为己经对同一偏移地址进行了多次更新。在此情况下,编程区 块无法变成文件区块,且当接收到文件的其它数据时,不打开另一空编程区块。分派擦 除区块,向其复制来自所述编程区块的有效数据(所述编程区块是压缩的),于是这个部 分填充区块变成文件的编程区块。文件的先前编程区块中的所有数据现在是废弃的,且 将所述区块添加到废弃区块垃圾收集队列。请注意,主机可通过如以下部分14.6中描述那样关闭文件来强制合并文件区块与编 程区块,其中所述区块每一者均含有所述文件的一些有效数据。主机可选择在部分废弃 的编程区块变满时临时关闭文件,而不是在接收到文件的其它数据时允许直接数据文件 装置压縮编程区块。14.6 关闭静态文件主机通过使用静态文件的文件ID作为参数发送关闭命令来关闭所述文件。 如果文件的数据中只有一部分已经被更新,那么静态文件的关闭导致将文件放置到 文件垃圾收集队列中。这允许如以下部分14.7中描述那样对文件进行后续垃圾收集操作。 然而,也可如部分14.7中描述那样,主机可强制立刻对文件进行垃圾收集操作。14.7 静态文件的垃圾收集已经在更新有条目处于文件垃圾收集队列中的静态文件中的一部分数据之后关闭了 所述静态文件。所述文件的文件区块中含有一些有效数据和一些废弃数据,且编程区块 含有一些有效数据,可能含有一些废弃数据,且可能含有一些擦除容量。文件垃圾收集操作将文件的所有有效数据合并到单个区块。如果编程区块不含有任 何废弃数据,那么将有效数据从文件区块复制到编程区块,且擦除文件区块。如果编程 区块含有废弃数据,那么将来自文件区块和编程区块两者的所有有效数据复制到擦除区 块,且擦除文件区块和编程区块两者。当条目达到队列的顶部时,在垃圾收集调度算法确定的时间执行文件垃圾收集。然 而,主机可在关闭文件时强制对文件立刻执行垃圾收集操作。主机通过在对文件的关闭 命令之后立刻发送闲置命令来进行此操作,这导致装置连续执行垃圾收集或区块合并操 作,直到接收到另一命令为止。主机在发送另一命令之前监视装置的内部繁忙状态,直 到其检测到装置不再忙于执行内部操作为止。通过这种机制,主机可确保在关闭文件之 后立刻对文件的文件区块和编程区块进行合并。根据以上描述的实例性存储器系统的概述直接数据文件平台直接数据文件平台充当用于管理快闪存储器中的数据存储的通用后端系统。直接数据文件接口是支持多个数据来源的内部文件存储接口。具有对没有预定义长度的文件数据的随机读取/写入存取的文件存取接口。具有对有预定义长度的完整文件对象的传递的对象接口。与并入有文件系统的常规主机的LBA接口。将逻辑区块存储为逻辑文件。具有对文件内的数据的随机存取的嵌入式应用程序。直接数据文件存储是在逐文件基础上组织数据存储的后端系统。对存储装置没有逻辑地址空间。没有文件系统。直接数据文件与现有系统直接数据文件平台提供优于现有系统的益处 高数据写入速度消除了由于文件分裂引起的逐渐性能降低;当在后台操作中擦除主机所删除的文件时,可提高峰值数据写入速度。数据写入速度的一致性当在后台或在与写入主机数据交错的突发中执行垃圾收集时,可改进用于流动数据 的持续写入速度。益处是由于直接数据文件平台中所使用的算法的特性引起的有限的文件分裂有限的文件和区块合并真实的文件删除最佳的文件数据索引高效的垃圾收集直接数据文件接口-理想的特征直接数据文件接口应当独立于主机中的操作系统 在平坦的分级结构中管理具有数字识别符的文件;可存储与文件相关联的数据,以便允许在高于接口的级别处构造和维持分级目录。直接数据文件接口优选地支持各种格式的文件数据传递大小未定义且可向其流动数据的文件;在被写入之前大小已被定义的文件;大小固定且永久存在的文件。直接数据文件接口-实施方案文件内的数据具有随机写入和读取存取,其粒度为一个字节。 可将数据附加、复写或插入在文件的现有数据内。将正被写入或读取的文件数据流动到装置或从中流出,其没有预定义长度。通过接收到另一命令来终止当前操作。 '打开文件以供写入数据,且在文件结束时或者当文件不活动时关闭文件。装置为主机所指定的文件返回文件句柄。支持但不维持分级目录。可存储文件的相关联信息。可通过主机起始其中装置可在后台执行内部操作的状态。直接数据文件接口-命令集文件命令用于控制文件对象的命令,创建、打开、关闭、删除、擦除、列举_文件。 数据命令用于写入和读取文件数据的命令,写入、插入、移除、读取、保存—缓冲器、写入—指针、读取—指针。信息命令用于写入和读取与文件相关联的信息的命令,写入一信息、读取_信息、信息_写入一指针、信息一读取—指针。 状态命令用于控制装置状态的命令, 闲置、待命、关机。 装置命令用于询问装置的命令,容量、状态。文件到快闪映射算法数据结构文件数据群组区块类型-编程区块文件区块共用区块文件类型普通文件共用文件已编辑文件存储器恢复垃圾收集区块合并文件到快闪映射算法-数据结构 文件文件是一组由主机创建和维持的数据; 主机可以是外部主机或者可以是存储卡内的应用程序;通过主机创建的文件名或通过直接数据文件平台创建的文件句柄来识别文件 通过文件偏移地址来识别文件内的数据;不同文件的偏移地址组充当装置内的独立逻辑地址空间。对于装置本身没有逻辑地 址空间。数据群组数据群组是单个文件的在文件内具有连续偏移地址的一组数据;数据群组存储在单个区块中的连续物理地址处;数据群组可具有介于一个字节与一个区块之间的任何长度;数据群组是用于将逻辑文件地址映射到物理快闪地址的基本单位。文件到快闪映射算法-区块类型编程区块将主机写入的所有数据编程在编程区块中; 编程区块专用于单个文件的数据;编程区块中的文件数据的文件偏移地址可具有任何次序,且编程区块可含有文件的 多个数据群组;针对每一打开文件和针对未指定数目的关闭文件存在单独的编程区块。 文件区块当己经编程了编程区块的最后位置时,所述编程区块变成文件区块。 共用区块共用区块含有一个以上文件的数据群组;通过在共用区块的垃圾收集期间或在区块合并操作期间将无关文件的数据群组编程 到编程区块来创建共用区块;可在另一共用区块的垃圾收集期间或在区块合并操作期间将数据群组写入到共用区块。文件到快闪映射算法-文件类型 普通文件(见图3-1):普通文件包括任何数目的完整文件区块和一个部分写入的编程区块。 可将普通文件删除,而无需在其擦除之前从任何区块重新定位数据。共用文件(见图3-2):共用文件包括任何数目的完整文件区块和一个共用区块,所述共用区块含有所述文 件的数据连同其它无关文件的数据。在删除文件之后必须只对共用区块执行垃圾收集操作。已编辑文件(见图3-3和图3-4)由于现有偏移地址处的数据已经被复写,所以已编辑文件在其一个或一个以上区块 中含有废弃数据。可通过文件垃圾收集操作来恢复废弃数据所占据的存储器容量。文件垃圾收集操作将已编辑文件复原成普通文件格式。文件到快闪映射算法-存储器恢复垃圾收集执行垃圾收集操作以恢复废弃数据所占据的存储器容量。将待决操作记录在垃圾收集队列中,并随后根据调度算法以最佳速率执行所述待决 操作。可通过主机命令来起始垃圾收集,并在主机接口静止时在后台执行垃圾收集。在接 收到其它任何主机命令后,暂停操作。也可作为前台操作在与主机数据写入操作交错的突发中执行垃圾收集。 区块合并可实施持续进行的区块合并过程,以便恢复编程区块和共用区块中锁定的擦除容量。 只有在编程区块中的文件数据容量与共用区块中的删除文件的废弃数据容量的分布 不平衡时才有必要。合并多个编程或共用区块中的数据以允许擦除一个或一个以上区块。 编程文件数据当由文件句柄识别的文件的数据遵循写入或插入命令从主机中流出时,将所述数据 编程到快闪存储器。通过写入指针来定义数据的初始文件偏移地址,所述写入指针的值可由主机设置。 当己经在缓冲存储器中积累了充分的数据时,在文件的编程区块中编程元页。 当编程区块变得填满时,将其规定为文件区块,且将擦除区块分派为文件的新编程 区块。每当编程区块变得填满时或者每当接收到另一主机命令时,在快闪存储器中更新数 据群组索引结构。文件数据编程程序以自适应调度算法确定的主机数据流间隔来起始前台垃圾收集突发。当接收到另一主机命令时,退出文件数据编程程序。读取文件数据遵循读取命令从快闪存储器中读取由文件句柄识别的文件的数据,并将其流动到主机。通过读取指针来识别数据的初始文件偏移地址,所述读取指针的值可由主机来设置。 以一个元页为单位读取文件数据,直到达到文件末尾为止或直到接收到另一主机命 令为止。以文件偏移地址次序将数据传递到主机。通过文件索引结构来定义拟针对文件读取的数据群组的位置。 当接收到另一主机命令时,退出文件数据读取程序。 删除文件响应于对文件的删除命令,识别含有所述文件的数据的区块,并将其添加到垃圾收 集队列以进行后续的垃圾收集操作。更新文件目录和文件索引表,以移除文件的条目。删除文件的程序并不起始垃圾收集操作,且不立刻擦除文件的数据。 响应于对文件的擦除命令,遵循与删除命令相同的程序,但在执行其它任何主机命 令之前起始并完成垃圾收集操作。 垃圾收集垃圾收集是用以恢复废弃数据所占据的快闪容量的操作。在装置操作期间不时地将对象添加到3个垃圾收集队列,以定义后续的垃圾收集操作废弃区块队列-当区块由于更新文件数据或删除文件而变得完全废弃时,将其添加到 这个队列。共用区块队列-当区块中的含有多个文件的数据的一部分中的数据由于文件数据更 新、删除文件或对文件的垃圾收集而变成废弃的时,将其添加到这个队列。文件队列-当文件被主机关闭时,将其添加到这个队列。可针对优先级垃圾收集规定 对象。可用两种方式调度垃圾收集操作主机可在其不在对装置进行读取或写入存取时起始后台操作。直接数据文件平台可在其不正被主机存取时起始前台操作。垃圾收集-调度通过主机起始后台垃圾收集。主机经由直接数据文件接口处的特定命令来起始闲置 状态,在所述闲置状态中准许装置执行内部操作。在闲置状态持续的同时,对来自垃圾 收集队列的对象的垃圾收集继续进行。当从主机接收到任何命令时暂停垃圾收集。主机 可视情况监视装置的繁忙状态,以允许垃圾收集操作在发送下一命令之前完成。当主机尚未起始后台操作时,由直接数据文件平台起始前台垃圾收集。根据自适应 算法来调度垃圾收集。当前垃圾收集操作的编程和擦除操作的突发与从主机接收到的文 件数据的编程操作的突发交错。可以自适应方式控制突发的长度,以便定义交错垃圾收 集的工作循环。垃圾收集-自适应调度(见图8-2)快闪存储器通常具有用于写入其它主机数据所需的包含在编程区块、共用区块和废 弃文件区块中的可恢复容量。自适应垃圾收集控制编程其它主机数据与重新定位先前写入的主机数据的交错率。 通过将可恢复容量转换成擦除容量而使得所述容量可供新的主机数据使用。垃圾收集速 率在自适应期间中保持恒定。垃圾收集-操作优先级从具有以下优先级次序的垃圾收集队列中选择经调度垃圾收集的操作1. 废弃区块优先级垃圾收集选择因文件擦除命令而创建的废弃区块的下一条目。2. 共用区块优先级垃圾收集选择因文件擦除命令而创建的部分废弃共用区块的下一条目。3. 废弃区块垃圾收集 选择废弃区块的下一条目。4. 共用区块垃圾收集 选择部分废弃共用区块的下一条目。5. 文件垃圾收集 选择部分废弃文件的下一条目。6. 区块合并当垃圾收集队列中不存在条目时,针对区块合并操作选择来源区块和目的地区块。 垃圾收集-共用区块垃圾收集有效文件在编程区块或共用区块中含有一些数据。当删除文件时,任何含有所述文件的废弃数据的共用区块均经历共用区块垃圾收集 操作。将无关文件的数据群组重新定位到另一共用区块或编程区块(见图8-7A到图8-7D)。 在共用区块垃圾收集操作期间,将有效文件群组从来源共用区块重新定位到一个或 一个以上选定的目的地区块。针对每一文件群组单独选择目的地区块。 用于选择目的地区块的优先级如下1. 具有作为拟重新定位的来源文件群组的最佳匹配的可用擦除容量的共用区块;2. 具有作为拟重新定位的来源文件群组的最佳匹配的可用擦除容量的编程区块;和3. 擦除区块,其接着被规定为编程区块。 垃圾收集-文件垃圾收集可在已经关闭文件之后执行文件垃圾收集,以恢复文件的废弃数据所占据的容量。 这只有在所述文件的数据已经在编辑期间被复写的情况下才是必要的。将已编辑普通文件状态或已编辑共用文件状态下的文件复原成普通文件状态(含有 单个编程区块且不含有共用区块)。通过将有效数据群组从含有废弃数据的区块复制到文件的编程区块来执行文件垃圾 收集。遵循初始编程指针从偏移地址开始以循序次序复制数据群组,且在文件末尾处绕回。 垃圾收集-区块合并在区块合并操作期间,将有效文件群组从选定来源区块重新定位到一个或一个以上 选定的目的地区块。将来源区块选作具有最低数据容量的共用区块或编程区块。 针对每一文件群组单独选择目的地区块。用于选择目的地区块的优先级如下1. 具有拟重新定位的来源文件群组的最佳匹配的可用擦除容量的共用区块。2. 具有拟重新定位的来源文件群组的最佳匹配的可用擦除容量的编程区块。3. 具有最高可用擦除容量的编程区块或共用区块,向其写入文件群组的一部分。在此情形下,可准许文件与其它无关文件共享两个区块。4. 具有来源文件群组的剩余部分的最佳匹配的可用擦除容量的第二编程区块或共 用区块,向其写入文件群组的剩余部分。5.随后规定为编程区块的擦除区块,向其写入文件群组的剩余部分。 文件索引(见图10-1)通过在主机创建文件时由直接数据文件装置分派的文件ID来识别文件。 平坦目录针对每一文件ID指定文件数据指针和文件信息指针。文件数据指针识别文件索引表中的一组条目,其中每一条目指定所述组所涉及的用 于文件的数据群组。文件信息指针识别信息表中的一串文件信息-文件—信息由主机写入且不由直接数据文件装置解译。文件—信息可包含文件的文件名、父目录、子目录、属性、权利信息和文件关联。文件索弓l-索引结构见图10-2文件索弓卜文件索引表(FIT)-见图10-4FIT含有快闪存储器中的所有用于文件的有效数据群组的条目。不通过FIT来索引 废弃的数据群组。将FIT划分成多个逻辑范围,其中每一者映射到物理区块。 FIT文件是文件的一组具有文件偏移地址次序的连续条目。通过FIT文件指针来识别FIT文件,所述FIT文件指针定义物理区块和逻辑文件编号。文件索弓l-更新文件索引(见图10-6和图10-7) 针对文件索引表和信息表使用相同结构。使用区块列表将逻辑文件数据指针与物理FIT区块或FIT更新区块内的FTI文件联 系起来。FIT文件以压缩格式存储在FIT区块中。FIT文件的更新版本存储在共享FIT更新区块中,其中页中具有单个FIT文件。 不时地执行FIT更新区块的压縮和FIT区块中的FIT文件合并。 文件索弓l-索引页格式(见图10-5)针对FIT区块、FIT更新区块、信息区块和信息更新区块使用相同结构。 以一个页为单位编程信息。将页细分为两个区域,用于FIT条目和文件指针。文件指针将一个范围内的逻辑文件编号转译成相应FIT文件的开头的页编号和条目编号。FIT文件包括物理上连续的FIT条目。 数据缓冲和编程在一组扇区缓冲器中缓冲由主机写入或正在快闪存储器内重新定位的数据。数据群组边界的分辨率是一个字节,但将数据以一个扇区的倍数传递到快闪和从快 闪中传递出来,以用于ECC产生和检验。在可能的情况下,以元页为单位在快闪中编程来自缓冲器的数据。当关闭文件或关机正在迫近时,缓冲器清洗操作只编程页的一部分。文件索引技术 允许页的未编程部分持续。缓冲器换出操作允许将缓冲器中的文件数据临时存储在共用交换区块中,以用于管 理缓冲器空间和缓冲器中的数据备份。将编程区块或共用区块中的文件群组的开头与元页的开头对准。可针对快闪中的大多数数据重新定位使用芯片上复制。区块状态管理直接数据文件系统维持与数据存储相关联的的八种区块状态(见图11-1)。 擦除区块管理直接数据文件在固定大小的元区块中存储文件的所有数据和所有控制信息。(术语 "区块"通常用来表示"元区块"。)将擦除区块链接到区块中的方法与以下待决美国专利申请案中描述的在具有逻辑地 址空间(LBA)接口的系统中使用的方法相同2003年12月30日申请的题为"Management of Non-Volatile Memory Systems Having Large Erase Blocks"的第10〃49,831号;2003年 12月30日申请的题为"Non-Volatile Memory and Method with Block Management System" 的第10/750,155号;2004年8月13日申请的题为"Non-Volatile Memory and Method with Memory Planes Alignment"的第10/917,888号;2004年8月13日申请的第10/917,867 号;2004年8月13日申请的题为"Non-Volatile Memory and Method with Phased Program Failure Handling"的第10/917,889号;2004年8月13日申请的题为"Non-Volatile Memory and Method with Control Data Management"的第10/917,725号;2005年7月27日申请的 题为 "Non-Volatile Memory and Method with Multi-Stream Update Tracking" 的第 11/192,200号;2005年7月27日申请的题为"Non-Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks"的第11/192,386号;以及2005年7月27日申请的题为"Non-Volatile Memory and Method with Multi-Stream Updating"的第 11/191,686号。可供分派以用于存储数据或控制信息的擦除区块保持在擦除区块集区中。将擦除区块记录为擦除区块日志中的条目。将用于分派的擦除区块选为日志顶部处的条目。当擦除区块时,将条目添加在日志尾部处。控制数据结构将控制数据结构存储在专用控制区块中。将控制信息存储在四个独立日志中。每一 日志占据控制区块中的一个或一个以上页。 通过最后写入的页中的日志指针来追踪有效的日志页。共用区块日志含有快闪存储器中存在的所有共用区块的条目,按其含有的可用擦除 容量排序。编程区块日志含有快闪存储器中存在的所有编程区块的条目,按其含有的可用擦除 容量排序。擦除区块日志含有快闪存储器中存在的所有擦除区块的条目,按其擦除顺序排序。 控制日志含有控制参数、计数和列表的预定义字段。通过在控制区块中的下一擦除页位置处写入完整日志的修订版本来更新日志。
权利要求
1.一种操作可重新编程的非易失性存储器系统的方法,所述存储器系统具有多个在将数据写入其中之前被分别擦除的存储器单元区块,且接收具有由唯一文件识别符和各个文件内的偏移量产生的逻辑地址的数据,当将第一文件的数据存储在至少第一和第二区块中且其中所述第二区块只部分填充有所述第一文件的数据而所述第二区块的剩余部分被擦除时,所述方法包括响应于将所述第一文件的数据从所述第一区块重新定位,将所述第一文件的有效数据从所述第一区块复制到所述第二区块的所述擦除部分中,借此不将所述有效数据复制到完全擦除的区块中。
2. 根据权利要求1所述的方法,其中在从所述第一区块复制所述第一文件的数据之前, 第二文件的数据也存储在所述第一区块中。
3. 根据权利要求l所述的方法,其中将所述第一文件的数据存储为多个数据群组,所 述多个数据群组分别具有数据在所述群组内的连续逻辑偏移地址和连续物理地址 两者。
4. 一种可重新编程的非易失性存储器系统的操作方法,所述存储器系统具有多个在将 数据写入其中之前被分别擦除的存储器单元区块,且接收作为具有由唯一文件识别 符和数据在文件内的偏移量产生的逻辑地址的文件的数据,所述方法包括将文件的数据写入到一个或一个以上擦除区块的连续页;以及 在将所述文件的数据写入到所述一个或一个以上擦除区块中的一者的所述页中 的仅仅一部分且接着将其关闭的情况下,另外只有当所述文件的存储在所述一个区 块中的数据中的至少一些是废弃的时,才响应于接收到用以关闭所述文件的命令而 对所述一个区块执行垃圾收集操作。
5. 根据权利要求4所述的方法,其中写入所述文件的数据包含写入多个数据群组,所 述多个数据群组分别具有数据在所述群组内的连续逻辑偏移地址和连续物理地址 两者。
6. —种操作可重新编程的非易失性存储器系统的方法,所述存储器系统具有多个在将 数据写入其中之前被分别擦除的存储器单元区块,且接收具有由唯一文件识别符和 各个文件内的偏移量产生的逻辑地址的数据,所述方法包括将给定文件的数据存储在第一区块中; 将所述给定文件的新近接收数据写入到第二区块中;以及通过将所述给定文件的数据从所述第一区块复制到所述第二.区块中而执行所述给定文件的垃圾收集。
7. 根据权利要求6所述的方法,其另外包括在所述存储器系统内维持所述给定文件的 存储位置的记录作为多个数据群组,所述多个数据群组分别具有数据在所述群组内 的连续逻辑偏移地址和连续物理地址两者。
8. —种可重新编程的非易失性存储器系统,其具有多个在将数据写入其中之前被分别 擦除的存储器单元区块,其中接受具有由唯一文件识别符和各个文件内的偏移量产生的逻辑地址的数据; 将第一文件的数据存储在至少第一和第二区块中,其中所述第二区块只部分填充有所述第一文件的数据而所述第二区块的剩余部分被擦除;且响应于将所述第一文件的数据从所述第一区块重新定位,将所述第一文件的有效数据从所述第一区块复制到所述第二区块的所述擦除部分中,借此不将所述有效数据复制到完全擦除的区块中。
9. 根据权利要求8所述的存储器系统,其中在从所述第一区块复制所述第一文件的数 据之前,第二文件的数据也存储在所述第一区块中。
10. 根据权利要求8所述的存储器系统,其中将所述第一文件的数据存储为多个数据群 组,所述多个数据群组分别具有数据在所述群组内的连续逻辑偏移地址和连续物理 地址两者。
11. 一种可重新编程的非易失性存储器系统,其能够接收作为具有由唯一文件识别符和 数据在文件内的偏移量产生的逻辑地址的文件的数据,其中所述存储器系统包含多个在将数据写入其中之前被分别擦除的存储器单元区块; 将文件的数据写入到处于擦除状态时的一个或一个以上区块的连续页;且 在将所述文件的数据写入到所述一个区块中的一者的所述页的仅仅一部分且接 着将其关闭的情况下,只有当所述文件的存储在所述一个区块中的数据中的至少一 些是废弃的时,才响应于接收到用以关闭所述文件的命令而对写入到所述一个或一 个以上区块中的至少一者中的数据执行垃圾收集操作。
12. 根据权利要求11所述的存储器系统,其中以多个数据群组的形式写入所述文件的数 据,所述多个数据群组分别具有数据在所述群组内的连续逻辑偏移地址和连续物理 地址两者。
13. —种可重新编程的非易失性存储器系统,其接收具有由唯一文件识别符和各个文件内的偏移量产生的逻辑地址的数据,其中所述存储器系统包含多个在将数据写入其中之前被分别擦除的存储器单元区块; 将给定文件的数据存储在第一区块中; 将所述给定文件的新近接收数据写入到第二区块中;且通过将所述给定文件的数据从所述第一区块复制到所述第二区块中而执行所述 给定文件的垃圾收集。
14.根据权利要求13所述的存储器系统,其中以多个数据群组的形式写入所述给定文 件的数据,所述多个数据群组分别具有数据在所述群组内的连续逻辑偏移地址和连 续物理地址两者。
全文摘要
在不使用存储器的任何中间逻辑地址或虚拟地址空间的情况下,用每一文件的唯一识别和数据在文件内的偏移量将主机系统数据文件直接写入到大型擦除区块快闪存储器系统。通过所述存储器系统的控制器而不是通过主机将关于所述文件存储在所述存储器中的哪个位置的目录信息维持在所述存储器系统内。
文档编号G06F12/02GK101233498SQ200680028197
公开日2008年7月30日 申请日期2006年8月1日 优先权日2005年8月3日
发明者巴里·赖特, 艾伦·W·辛克莱 申请人:桑迪士克股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1