首页> 中国专利> 快闪存储器中利用直接数据文件存储的数据操作

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

摘要

在不使用存储器的任何中间逻辑地址或虚拟地址空间的情况下,用每一文件的唯一识别和数据在文件内的偏移量将主机系统数据文件直接写入到大型擦除区块快闪存储器系统。通过所述存储器系统的控制器而不是通过主机将关于所述文件存储在所述存储器中的哪个位置的目录信息维持在所述存储器系统内。

著录项

  • 公开/公告号CN101233498A

    专利类型发明专利

  • 公开/公告日2008-07-30

    原文格式PDF

  • 申请/专利权人 桑迪士克股份有限公司;

    申请/专利号CN200680028197.3

  • 发明设计人 艾伦·W·辛克莱;巴里·赖特;

    申请日2006-08-01

  • 分类号G06F12/02;

  • 代理机构北京律盟知识产权代理有限责任公司;

  • 代理人刘国伟

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 20:28:06

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-09-21

    未缴年费专利权终止 IPC(主分类):G06F12/02 授权公告日:20140312 终止日期:20150801 申请日:20060801

    专利权的终止

  • 2014-03-12

    授权

    授权

  • 2012-11-07

    专利申请权的转移 IPC(主分类):G06F12/02 变更前: 变更后: 登记生效日:20120928 申请日:20060801

    专利申请权、专利权的转移

  • 2008-09-24

    实质审查的生效

    实质审查的生效

  • 2008-07-30

    公开

    公开

说明书

技术领域

本申请案大体上涉及例如半导体快闪存储器等可重新编程的非易失性存储器系统的操作,其中包含管理主机装置与存储器系统之间的接口,且更具体地说,涉及有效地使用数据文件接口而不是常见的大容量存储器逻辑地址空间(LBA)接口。

背景技术

本文中描述在待决的第11/060,174号、第11/060,248号和第11/060,249号美国专利申请案中描述的快闪存储器的各种操作方面的发展,所述申请案全部在2005年2月16日以Alan W.Sinclair一人或其与Peter J.Smith两人名义申请(下文中称为“现有申请案”)。

进一步的发展在Alan W.Sinclair和Barry Wright的相关美国专利申请案中描述,即第11/382,224号和第11/382,232号非临时申请案以及第60/746,740号和第60/746,742号临时申请案,所述申请案全部在2006年5月8日申请;以及题为“Indexing Of File DataIn Reprogrammable Non-Volatile Memories That Directly Store Data Files”、“Reprogrammable Non-Volatile Memory Systems With Indexing of Directly Stored DataFiles”、“Methods of Managing Blocks in Nonvolatile Memory”和“Nonvolatile MemoryWith 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-1:用于编程文件数据的流程图;

图6-1:用于读取文件数据的流程图;

图7-1:用于删除文件的流程图;

图8-1:用于前台垃圾收集的交错操作;

图8-2:用于垃圾收集的自适应调度的操作原理;

图8-3:用于垃圾收集选择的流程图;

图8-4:用于文件垃圾收集的流程图;

图8-5:用于共用区块垃圾收集的流程图;

图8-6:用于区块合并的流程图;

图8-7A到8-7D:共用区块垃圾收集实例,其展示四个时序阶段;

图9-1:连续的主机数据编程;

图9-2:中断的主机数据编程;

图9-3:缓冲器清洗编程;

图9-4:缓冲器换出编程;

图9-5:缓冲器清洗之后的主机数据编程;

图9-6:换入数据读取;

图9-7:缓冲器换入之后的主机数据编程;

图9-8:对缓冲器的对准的数据读取;

图9-9:从缓冲器的对准的数据编程;

图9-10:对缓冲器的非对准的数据读取;

图9-11:从缓冲器的非对准的数据编程;

图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.直接数据文件平台

1.1概述

在图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.1创建

创建命令在装置中的目录内创建通过<文件ID>识别的条目。如果省略<文件ID>参数,那么装置向文件指派可用值并将所述值返回到主机。这是创建文件的正常方法。

主机可替代地向文件指派<文件ID>值。如果文件ID的特定值指示主机接口协议内的特定类型的文件,那么可使用这种方法。举例来说,主机可向根目录指派特定的文件ID。

2.1.1.2打开

这个命令启用对<文件ID>指定的文件执行后续的数据命令。如果文件不存在,那么返回错误消息。将所述文件的写入_指针设置到文件末尾,且将所述文件的读取_指针设置到文件开头。将文件_信息的信息_写入_指针设置到文件_信息末尾,且将所述文件的信息_读取_指针设置到文件_信息开头。存在可同时打开的文件的最大数目。如果超过这个数目,那么不执行所述命令,且返回错误消息。举例来说,同时打开的文件的最大数目可以是8。

只有在接收到后续写入、插入或移除命令之后,才使得装置内用于写入到指定文件的资源可用。

2.1.1.3关闭

这个命令停用对指定文件的后续数据命令的执行。所述文件的写入_指针、读取_指针、信息_写入_指针和信息_读取_指针值变得无效。

2.1.1.4删除

删除命令指示应当删除<文件ID>指定的文件的目录、文件索引表和信息表条目。可擦除所述文件的数据。随后可能不存取已删除的文件。

2.1.1.5擦除

擦除命令指示应当删除<文件ID>指定的文件的目录、文件索引表和信息表条目。必须在可执行任何其它命令之前擦除文件数据。随后可能不存取已擦除的文件。

2.1.1.6列举_文件

在接收到列举_文件命令之后,可按照数字次序将目录中的所有文件的文件ID值从装置中流出。当到达最后文件时终止文件ID流动,且可由主机借助于状态命令来识别这个条件。通过接收到其它任何命令来终止列举_文件命令。

2.1.2数据命令(见图2-2)

使用数据命令来起始对指定文件的数据输入和输出操作,并定义文件内的偏移地址值。指定的文件必须已经被主机打开。如果不是这样的话,那么返回错误。<文件ID>是在文件最后被打开时返回到主机的文件句柄。

2.1.2.1写入

在接收到写入命令之后流到装置的数据复写在由写入_指针的当前值定义的偏移地址处的指定文件中。使用写入命令来写入文件的新数据、将数据附加到文件和更新文件内的数据。通过接收到其它任何命令来终止写入命令。

2.1.2.2插入

将在接收到插入命令之后流到装置的数据插入在写入_指针的当前值定义的偏移地址处的指定文件中。文件大小增加了插入数据的长度。通过接收到其它任何命令来终止插入命令。

2.1.2.3移除

移除命令从写入_指针的当前值定义的偏移地址处的指定文件中删除<长度>定义的循序数据。文件大小减少了<长度>。

2.1.2.4读取

可在接收到读取命令之后从装置中流出由读取_指针的当前值定义的偏移地址处的指定文件中的数据。

当达到文件结尾时终止数据流动,且可由主机借助于状态命令来识别这个条件。通过接收到其它任何命令来终止读取命令。

2.1.2.5保存_缓冲器

指定文件的包含在装置缓冲器中但尚未编程到快闪存储器的数据保存在快闪存储器中的临时位置处。

当接收到后续写入或插入命令时将数据复原到缓冲器,并将其同与命令有关的数据一起编程到快闪。

2.1.2.6写入_指针

写入_指针命令将指定文件的写入_指针设置到指定的偏移地址。当在写入或插入命令之后将数据流到装置时,装置使写入_指针递增。

2.1.2.7读取_指针

读取_指针命令将指定文件的读取_指针设置到指定的偏移地址。当在读取命令之后从装置中流出数据时,装置使读取_指针递增。

2.1.3信息命令(见图2-3)

文件_信息是主机产生的与文件相关联的信息。文件_信息的性质和内容由主机确定,且其不由装置解译。使用信息命令来起始对指定文件的文件_信息输入和输出操作,并定义文件_信息内的偏移地址值。

2.1.3.1写入_信息

在接收到写入_信息命令之后流到装置的文件_信息复写由信息_写入_指针的当前值定义的偏移地址处的指定文件的文件_信息。指定文件的文件_信息的内容和长度由主机确定。通过接收到其它任何命令来终止写入_信息命令。

2.1.3.2读取_信息

可在接收到读取_信息命令之后从装置中流出信息_读取_指针的当前值定义的偏移地址处的指定文件的文件_信息。当达到文件_信息的末尾时终止文件_信息流动,且可由主机借助于状态命令来识别这个条件。通过接收到其它任何命令来终止读取_信息命令。

2.1.3.3信息_写入_指针

信息_写入_指针命令将指定文件的信息_写入_指针设置到指定偏移地址。当在写入_信息命令之后将文件_信息流到装置时,装置使信息_写入_指针递增。

2.1.3.4信息_读取_指针

信息_读取_指针命令将指定文件的信息_读取_指针设置到指定的偏移地址。当在读取_信息命令之后从装置中流出文件_信息时,装置使信息_读取_指针递增。

2.1.4流命令(见图24)

流命令只与直接数据文件平台的行为建模一起使用。其用途是结合数据命令模拟去往和来自主机的流动数据。

2.1.4.1流

流命令模拟由<长度>定义的应由主机传递到平台或从平台传递的不间断的数据流。当向缓冲存储器添加数据或从中移除数据时,通过平台的模型将表示流的剩余长度的变量递减。

2.1.4.2暂停

暂停命令插入长度为<时间>的延迟,所述延迟在执行命令列表中的正在控制直接数据文件模型的操作的随后命令之前插入。<时间>以微秒定义。

2.1.5状态命令(见图2-6)

状态命令控制装置的状态。

2.1.5.1闲置

闲置命令指示主机正在将直接数据文件装置置于闲置状态,在此期间,装置可执行内部内务处理操作。主机将不会在闲置状态下故意从装置中移除电力。不论装置是否忙于内部操作,均可通过由主机传输其它任何命令来结束闲置状态。一旦接收到此其它命令,装置中的任何正在进行的内部操作均必须暂停或在指定时间内终止。此时间的一个实例是10毫秒或更短。

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.1.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.1.2物理存储器结构

直接数据文件平台在固定大小的元区块中存储文件的所有数据。组成元区块的快闪擦除区块的实际数目(即擦除区块并行度)可在产品之间有所不同。在整个本说明书中,术语“区块”始终用于指示“元区块”。

使用术语“元页”来指示具有元区块的完整并行度的页。元页是最大的编程单位。

使用术语“页”来指示存储器的平面内的页,也就是说,快闪擦除区块内的页。页是最小的编程单位。

使用术语“扇区”来指示与ECC相关联的存储数据的单位。扇区是向快闪存储器传递数据或从中传递数据的最小单位。

在文件的偏移地址与物理快闪存储器结构之间并未维持任何指定的对准。

3.1.3数据群组

数据群组是在文件内具有连续偏移地址的一组文件数据,其在单个存储器区块中以连续的物理地址编程。文件通常将被编程为多个数据群组。数据群组可具有介于一个字节到一个区块之间的任何长度。每一数据群组编程有一个标头,所述标头中含有文件识别符信息以用于交叉参考用途。文件的数据根据其包括的数据群组来在物理存储器中索引。文件索引表提供文件的每一数据群组的文件偏移地址和物理地址信息。

3.1.4编程区块

文件必须由主机打开以允许编程文件数据。每一打开的文件具有分派为编程区块的专用区块,且所述文件的数据在由编程区块内的编程指针定义的位置处编程。当文件由主机打开时,文件的编程区块被打开(如果不是已经存在一个编程区块的话)。将编程指针设置到编程区块的开始处。如果对于由主机打开的文件已经存在一个编程区块,那么其继续用于编程所述文件的数据。

将文件数据以其从主机处接收的次序编程在编程区块中,不论其在文件内的偏移地址如何或所述偏移地址的数据先前是否已被编程。当编程区块变满时,其称为文件区块,且来自擦除区块集区的擦除区块作为新的编程区块打开。在存储文件的数据的区块之间没有任何物理地址关系。

3.1.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.如果数据群组容量超过物理容量的X%,那么确定文件是普通文件。X值的实例是98%。X%小于100%,以允许因缓冲器清洗操作引起的未编程空间在普通文件中保持。

8.3垃圾收集操作

8.3.1废弃区块

废弃区块只含有废弃数据且可被擦除,而无需将数据重新定位到另一区块。

8.3.2共用区块

共用区块是来源区块,且含有一个或一个以上文件的一个或一个以上部分或完全废弃的数据群组。必须将有效数据从这个来源区块重新定位到一个或一个以上目的地区块。

以完整文件群组为单位重新定位数据,其中文件群组包括共用区块内的同一文件的一个或一个以上数据群组。将每一文件群组完整地重新定位到目的地区块,但可将不同的文件群组重新定位到不同区块。

共用区块是目的地区块的优选选择,如果没有合适的共用区块可用的话则后接编程区块,如果没有合适的编程区块可用的话则后接擦除区块。

垃圾收集操作可继续进行,直到发生以下条件之一为止:操作完成;主机发送命令;或在前台模式下达到交错突发的末尾。

图8-5中展示共用区块垃圾收集操作的流程图。

8.3.3文件垃圾收集

执行文件垃圾收集,以便恢复所述文件的废弃数据所占据的容量。其将处于已编辑的普通文件状态或已编辑的共用文件状态下的文件复原成普通文件状态。第一步骤是对其FIT文件中的FIT条目执行分析,以识别其数据群组必须在垃圾收集期间被复制的废弃文件区块和共用区块。这个分析的程序如下:

1.以偏移地址次序评估相关FIT文件中的FIT条目。

2.构造数据群组列表以将数据群组与物理区块联系起来。从这个列表中排除编程区块中的数据群组。

3.确定列表中提及的每一区块中由数据群组和数据群组标头占据的物理容量。

4.如果数据群组容量超过区块容量的X%,那么确定所述区块是文件区块。X值的实例是98%。X%小于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_blocks;

编程区块和共用区块的组合数目=data_blocks;

编程区块和共用区块中的有效数据页的总数=data_pages;

废弃区块的数目=obsolete_blocks;且

区块中的页的数目=pages_per_block,

那么

可通过垃圾收集创建的擦除区块的数目表达为data_blocks-(data_pages/pages_per_block);

垃圾收集之后的擦除区块的总数表达为erased_blocks+obsolete_blocks+data_blocks-(data_pages/pages_per_block);

可写入的递增数据元页的数目表达为pages_per_block.*(erased_blocks+obsolete_blocks+data_blocks)-data_pages。

如果

假设有效数据在所有编程区块和共用区块中均匀分布(这是个悲观的假设,因为将具有低数据页计数的区块选作用于区块合并操作的来源区块)

那么

垃圾收集期间重新定位的元页的数目表达为data_pages*(data_blocks-data_pages/pages_per_block)ldata_blocks。

最佳交错率N1∶N2是可写入的递增数据元页的数目与在垃圾收集期间必须重新定位的元页的数目的比率。因此,

N1∶N2=(pages_per_block*(erased_blocks+obsolete_blocks+data_blocks)-data_pages)/(data_pages*(data_blocks-data_pages/pages_per_block)/data_blocks)

请注意,尚未在自适应调度算法中包含废弃文件区块中的废弃容量的恢复。此容量只是由编辑文件产生的,且不常发生。如果在废弃文件区块中存在相当大容量,那么以自适应方式确定的交错率可能不是最佳的,但是切换到具有最小比率的操作(在8.4.3.2中描述)将确保对此类区块的高效垃圾收集。

8.4.3.2交错控制

在三个区段中定义交错率N1∶N2,如下。

1)最大值:设置交错率的最大限度,以便确保永远不会完全抑制垃圾收集。此最大限度的实例是10∶1。

2)自适应:在自适应区段中,将交错率控制为对于共用区块和废弃区块的待决垃圾收集以及编程区块和共用区块的合并来说为最佳的。其通过以下关系式定义:

N1∶N2=(pages_per_block*(erased_blocks+obsolete_blocks+data_blocks)-data_pages)/(data_pages*(data_blocks-data_pages/pages_per_block)/data_blocks),

其中N1和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-1中展示连续主机数据编程的实例。

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的实例中所示,在缓冲器扇区中积累来自主机的文件数据。将数据区段1、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.1从缓冲器中写回

将数据从所述四个扇区缓冲器编程到目的地元页,如图9-9所示。针对扇区1、2、3和4产生和存储ECC。

9.6.1.2芯片上复制

当拟复制的数据的元页对准与在来源和目的地元页中相同时,可使用快闪芯片内的芯片上复制来提高复制操作的速度。如果ECC检验未显示任何错误,那么将数据编程到目的地元页。

9.6.1.3共用区块内的元页对准

应当迫使共用区块内的每一文件群组的开头与元页的开头对准。编程区块中的数据群组也与区块中的第一元页的开头对准。因此,共用区块的所有数据复制操作(例如将编程区块合并到共用区块,并将文件群组从一个共用区块复制到编程区块或另一共用区块)将与对准的元页之间的数据复制一起操作。当将数据复制到共用区块或从共用区块中复制数据时应使用快闪芯片内的芯片上复制以便提高复制操作的速度。

9.6.2从未对准的循序元页中复制数据

当拟复制到完整目的地元页的数据虽然连续但占据了两个循序来源元页时,将来源和目的地元页称为未对准。图9-10中展示读取来源元页的实例。将数据扇区1A/1B、2和3从第一来源元页读取到三个扇区缓冲器,且将数据扇区4和5A/5B从第二来源元页读取到另外两个扇区缓冲器。在每一扇区上检验ECC。

将数据部分1A/1B、2A/2B、3A/3B和4A/4B从扇区缓冲器编程到目的地元页中的扇区1、2、3和4,如图9-11所示。针对扇区1、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从扇区缓冲器编程到目的地元页中的扇区1、2、3和4,如图9-13所示。针对扇区1、2、3和4产生和存储ECC。

10.文件索引

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.1FIT范围

FIT范围是FIT的子集。每一FIT范围映射到单独的物理FIT区块。FIT范围可含有一个FIT文件到最大数目的FIT文件,所述最大数目例如可为512。

10.3.2.2FIT文件编号

FIT文件编号是用来在FIT内识别FIT文件的逻辑编号。

10.3.3文件信息指针

文件信息指针是在控制日志内指向信息区块列表中的文件条目的逻辑指针,且可能也是指向信息更新区块列表中的文件条目的逻辑指针。

文件信息指针具有两个字段:

1)信息范围;和

2)信息编号。

10.3.3.1信息范围

信息范围是信息表的子集。每一信息范围映射到单独的物理信息区块。信息范围可含有一组文件_信息到最大数目的组的文件_信息,所述最大数目例如可为512。

10.3.3.2信息编号

信息编号是用来在信息区块中识别一组文件_信息的逻辑编号。

10.3.4目录结构

目录存储在专用于所述用途的快闪区块中。图10-3展示实例性目录区块格式。所述目录被构造成一组页,在每一页内针对具有连续文件ID值的文件存在一组条目。这组条目称为目录范围。

通过在由控制指针定义的下一擦除页位置处写入目录页的修订版本来更新目录。如果必要的话,可通过将多个页编程到元页中的不同页来同时更新所述多个页。

通过目录区块中的最后写入页中的范围指针来识别目录范围的当前页位置。

10.4区块列表

文件索引表和信息表两者均包括一系列逻辑范围,其中范围与物理快闪区块具有相关性。在控制日志中维持区块列表以便记录文件数据指针或文件信息指针中定义的范围与物理区块之间的相关性,以及文件数据指针或文件信息指针中定义的逻辑编号与文件索引表和信息表内的物理区块中使用的逻辑编号之间的相关性。

10.4.1FIT区块列表

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.1FIT文件

FIT文件是文件内的数据群组的一组连续FIT条目。所述组中的条目以文件偏移地址排序。FIT文件中的FIT条目是连续的,且包含在单个FIT范围内或者从一个FIT范围溢出到下一个连续的FIT范围。

10.5.2FIT标头

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.3FIT条目

FIT条目指定数据群组。其具有四个字段:

1)偏移地址,

2)长度,

3)指针,和

4)EOF旗标。

10.5.3.1偏移地址

偏移地址是文件内与数据群组的第一字节有关的以字节计的偏移量。

10.5.3.2长度

其定义数据群组内的文件数据的以字节计的长度。完整数据群组的长度比这个值长

出数据群组标头的长度。

10.5.3.3指针

其是指向数据群组的开头在快闪区块中的位置的指针。所述指针具有两个字段:

1)区块地址,其定义含有所述数据群组的物理区块,和

2)字节地址,其定义数据群组的开头在区块内的字节偏移量。这个地址含有数据群组标头。

10.5.3.4EOF旗标

EOF旗标是识别数据群组作为文件末尾的单个位。

10.5.4FIT区块格式

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.5FIT更新区块

在所有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更新操作

只在合并操作期间编程FIT区块。这导致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文件指针。

11.区块状态管理

11.1区块状态

可将存储文件数据的区块分类成以下八种状态,如图11-1的状态图所示。

11.1.1擦除区块

擦除区块在擦除区块集区中具有擦除状态。从这个状态的可能转变如下:

(a)擦除区块到编程区块

当从主机供应单个文件的数据或者当在文件的垃圾收集期间复制所述文件的数据时,将所述数据编程到擦除区块。

11.1.2编程区块

编程区块中部分地编程有单个文件的有效数据,且含有一些擦除容量。所述文件可能是打开或关闭的。当主机供应文件的其它数据或者当在文件的垃圾收集期间复制所述文件的其它数据时,应当将所述数据编程到所述区块。

从这个状态的可能转变如下:

(b)编程区块到编程区块

当从主机供应单个文件的数据时或者当在文件的垃圾收集期间复制所述文件的数据时,将所述数据编程到所述文件的编程区块。

(c)编程区块到文件区块

编程来自主机的单个文件的数据,以便填充所述文件的编程区块。

(f)编程区块到废弃区块

由于在垃圾收集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一部分,所以编程区块中的文件的所有数据变成废弃的。

(h)编程区块到废弃编程区块

由于主机将数据的更新版本写入到编程区块或者由于主机删除文件的一部分,所以同一编程区块中的数据的一部分变成废弃的。

(l)编程区块到共用区块

在文件或共用区块的垃圾收集期间或者在编程区块合并期间,将所述文件的剩余数据编程到不同关闭文件的编程区块。

11.1.3文件区块

文件区块完全由单个文件的有效数据填充。

从这个状态的可能转变如下:

(d)文件区块到废弃的文件区块

由于主机将数据的更新版本编程在文件的编程区块中,所以文件区块中的数据的一部分变成废弃的。

(g)文件区块到废弃区块(g)

由于主机将区块中的数据的更新版本编程在文件的编程区块中或者由于主机删除文件的全部或一部分,所以文件区块中的所有数据变成废弃的。

11.1.4废弃的文件区块

废弃的文件区块中填充有单个文件的有效数据与废弃数据的任意组合。

从这个状态的可能转变如下:

(e)废弃的文件区块到废弃区块(e)

由于主机将区块中的有效数据的更新版本编程在文件的编程区块中、由于在垃圾收集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一部分,所以废弃的文件区块中的所有数据变成废弃的。

11.1.5废弃的编程区块

废弃的编程区块中部分地编程有单个文件的有效数据与废弃数据的任意组合,且含有一些擦除容量。当主机供应文件的其它数据时,应当将所述数据编程到区块。然而,在垃圾收集期间,不应当将文件的数据复制到区块,且应当打开新的编程区块。

从这个状态的可能转变如下:

(i)废弃的编程区块到废弃的编程区块

当从主机供应单个文件的数据时,将所述数据编程到所述文件的废弃编程区块。

(j)废弃的编程区块到废弃区块

由于在垃圾收集期间将有效数据复制到另一区块或者由于主机删除文件的全部或一部分,所以废弃的编程区块中的文件的所有数据变成废弃的。

(k)废弃的编程区块到废弃的文件区块

当从主机供应单个文件的数据时,将所述数据编程以填充所述文件的废弃的编程区块。

11.1.6共用区块

共用区块中编程有两个或两个以上文件的有效数据,且通常含有一些擦除容量。可在编程区块的垃圾收集或合并期间将任何文件的剩余数据编程到共用区块。

从这个状态的可能转变如下:

(m)共用区块到共用区块

在文件或共用区块的垃圾收集期间或者在编程区块的合并期间,将文件的剩余数据编程到共用区块。

(n)共用区块到废弃的共用区块

由于主机将数据的更新版本编程在文件的编程区块中、由于在文件的垃圾收集期间将数据复制到另一区块或者由于主机删除文件的全部或一部分,所以共用区块中的一个文件的数据的一部分或全部变成废弃的。

11.1.7废弃的共用区块

废弃的共用区块中编程有两个或两个以上文件的有效数据与废弃数据的任意组合,且通常含有一些擦除容量。不应将其它数据编程到区块。

从这个状态的可能转变如下:

(o)废弃的共用区块到废弃区块

由于主机将一个文件的数据的更新版本编程在文件的编程区块中、由于在文件的垃圾收集期间将一个文件的数据复制到另一区块或者由于主机删除一个文件的全部或一部分,所以废弃的共用区块中的所有文件的数据变成废弃的。

11.1.8废弃区块

废弃区块只含有废弃数据,但尚未被擦除。

从这个状态的可能转变如下:

(p)废弃区块到擦除区块(p)

在垃圾收集期间擦除废弃区块,并将其添加回到擦除区块集区。

12.擦除区块管理

12.1元区块链接

将擦除区块链接到元区块中的方法与针对早先的第3代LBA系统定义的相比没有变化。

12.2擦除区块集区

擦除区块集区是装置中的可供分派以用于存储文件数据或控制信息的擦除区块的集区。集区中的每一擦除区块是元区块,且所有元区块具有相同的固定并行度。

将集区中的擦除区块记录为控制区块中的擦除区块日志中的条目。根据区块的擦除次序将条目在日志中排序。将用于分派的擦除区块选为日志顶部处的条目。当擦除区块时将条目添加到日志尾部。

13.控制数据结构

将控制数据结构存储在专用于所述用途的快闪区块中。如下定义三类区块:

1)文件目录区块,

2)文件索引表区块,和

3)控制区块。

1 3.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.7FIT区块列表

这个字段含有用于将FIT范围映射到FIT区块的信息。其含有定义每一FIT范围的FIT区块物理地址的条目。

13.3.4.8FIT更新区块列表

这个字段含有用于将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 Anatolievich Gorobets的题为“Interfacing systemsOperating Through A Logical Address Space and on a Direct Data File Basis”的专利申请案中描述了静态文件使用的实例性应用。在所述申请案中,通过存储器控制器将主机的逻辑地址空间划分成此类静态文件。

直接数据文件装置以与针对其它任何文件的方式完全相同的方式管理静态文件的存储。然而,主机可以用静态文件优化装置的行为和性能的方式在直接数据文件命令集中使用命令。

14.1.1静态文件分区

将静态文件作为一个组存储在装置中的专用分区中。分区中的所有静态文件具有相同的文件大小。

14.1.2静态文件大小

主机通过写入到文件的偏移地址范围来定义文件大小。静态文件的大小等于元区块的大小。

主机管理写入_指针和读取_指针代表的文件偏移值,以便将其维持在始终对静态文件允许的值的范围内。

14.1.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指定文件数据指针和文件信息指针。

文件数据指针识别文件索引表中的一组条目,其中每一条目指定所述组所涉及的用于文件的数据群组。

文件信息指针识别信息表中的一串文件信息:

文件_信息由主机写入且不由直接数据文件装置解译。

文件_信息可包含文件的文件名、父目录、子目录、属性、权利信息和文件关联。

文件索引-索引结构

见图10-2

文件索引-文件索引表(FIT)-见图10-4

FIT含有快闪存储器中的所有用于文件的有效数据群组的条目。不通过FIT来索引废弃的数据群组。

将FIT划分成多个逻辑范围,其中每一者映射到物理区块。

FIT文件是文件的一组具有文件偏移地址次序的连续条目。

通过FIT文件指针来识别FIT文件,所述FIT文件指针定义物理区块和逻辑文件编号。

文件索引-更新文件索引(见图10-6和图10-7)

针对文件索引表和信息表使用相同结构。

使用区块列表将逻辑文件数据指针与物理FIT区块或FIT更新区块内的FTI文件联系起来。

FIT文件以压缩格式存储在FIT区块中。

FIT文件的更新版本存储在共享FIT更新区块中,其中页中具有单个FIT文件。

不时地执行FIT更新区块的压缩和FIT区块中的FIT文件合并。

文件索引-索引页格式(见图10-5)

针对FIT区块、FIT更新区块、信息区块和信息更新区块使用相同结构。

以一个页为单位编程信息。

将页细分为两个区域,用于FIT条目和文件指针。

文件指针将一个范围内的逻辑文件编号转译成相应FIT文件的开头的页编号和条目编号。

FIT文件包括物理上连续的FIT条目。

数据缓冲和编程

在一组扇区缓冲器中缓冲由主机写入或正在快闪存储器内重新定位的数据。

数据群组边界的分辨率是一个字节,但将数据以一个扇区的倍数传递到快闪和从快闪中传递出来,以用于ECC产生和检验。

在可能的情况下,以元页为单位在快闪中编程来自缓冲器的数据。

当关闭文件或关机正在迫近时,缓冲器清洗操作只编程页的一部分。文件索引技术允许页的未编程部分持续。

缓冲器换出操作允许将缓冲器中的文件数据临时存储在共用交换区块中,以用于管理缓冲器空间和缓冲器中的数据备份。

将编程区块或共用区块中的文件群组的开头与元页的开头对准。

可针对快闪中的大多数数据重新定位使用芯片上复制。

区块状态管理

直接数据文件系统维持与数据存储相关联的的八种区块状态(见图11-1)。

擦除区块管理

直接数据文件在固定大小的元区块中存储文件的所有数据和所有控制信息。(术语“区块”通常用来表示“元区块”。)

将擦除区块链接到区块中的方法与以下待决美国专利申请案中描述的在具有逻辑地址空间(LBA)接口的系统中使用的方法相同:2003年12月30日申请的题为“Managementof Non-Volatile Memory Systems Having Large Erase Blocks”的第10/749,831号;2003年12月30日申请的题为“Non-Volatile Memory and Method with Block Management System”的第10/750,155号;2004年8月13日申请的题为“Non-Volatile Memory and Method withMemory Planes Alignment”的第10/917,888号;2004年8月13日申请的第10/917,867号;2004年8月13日申请的题为“Non-Volatile Memory and Method with Phased ProgramFailure Handling”的第10/917,889号;2004年8月13日申请的题为“Non-Volatile Memoryand 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 withImproved 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号。

可供分派以用于存储数据或控制信息的擦除区块保持在擦除区块集区中。

将擦除区块记录为擦除区块日志中的条目。

将用于分派的擦除区块选为日志顶部处的条目。

当擦除区块时,将条目添加在日志尾部处。

控制数据结构

将控制数据结构存储在专用控制区块中。

将控制信息存储在四个独立日志中。每一日志占据控制区块中的一个或一个以上页。通过最后写入的页中的日志指针来追踪有效的日志页。

共用区块日志含有快闪存储器中存在的所有共用区块的条目,按其含有的可用擦除容量排序。

编程区块日志含有快闪存储器中存在的所有编程区块的条目,按其含有的可用擦除容量排序。

擦除区块日志含有快闪存储器中存在的所有擦除区块的条目,按其擦除顺序排序。

控制日志含有控制参数、计数和列表的预定义字段。

通过在控制区块中的下一擦除页位置处写入完整日志的修订版本来更新日志。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号