CN200910141226.2
2009.05.05
CN101576852A
2009.11.11
授权
有权
授权|||实质审查的生效|||公开
G06F12/02
英特尔公司
R·罗耶; H·H·曹; S·N·崔卡
美国加利福尼亚州
2008.5.5 US 12/151207
中国专利代理(香港)有限公司
朱海煜;徐予红
如果发生从电源故障恢复的情况,则利用非易失性存储器的元数据中的递增序列号来确定存储器中哪些数据是当前的有效数据,哪些数据不是。为了减少这些序列号所消耗的元数据空间量,允许这些序列号小至足以在达到最大值时绕回。公开两种不同的技术来阻止这种绕回情形造成序列号的相对值的不明确。
1、 一种用于控制计算机存储器的装置,包括:非易失性存储器;以及存储器控制器,用于控制所述存储器的内容的读、写和擦除,并且如果将数据写入到块的每个子单元中,则将序列号值写入到所述子单元的元数据中;其中所述存储器控制器用于在每次写入新的子单元时将所述序列号值递增,并且在所述序列号达到最大值之后,将所述序列号绕回到最小值。2、 如权利要求1所述的装置,其中所述序列号是全局序列号。3、 如权利要求1所述的装置,其中所述最大值是2N-1,其中N是用于表示所述序列号值的位数。4、 如权利要求1所述的装置,其中从所述最小值到所述最大值的值范围由第一范围和第二范围组成,所述第二范围与所述第一范围不重叠。5、 如权利要求4所述的装置,其中:所述存储器控制器用于选择所述第一范围和所述第二范围中包含最新活动序列号的一个范围作为顶部范围,并用于选择所述第一范围和所述第二范围中的另一个范围作为底部范围;并且指定所述顶部范围中的所有活动序列号具有大于所述底部范围中的所有活动序列号的有效值。6、 如权利要求5所述的装置,其中所述存储器控制器用于:重新定位包含位于所述底部范围中的序列号的每个子单元,使得重新定位后的子单元包含位于所述顶部范围中的序列号;以及擦除包含具有位于所述底部范围中的序列号的所述子单元的块。7、 如权利要求1所述的装置,其中所述存储器控制器用于:将最新的活动序列号的值分配给第一参数;以及将最旧的活动序列号的值分配给第二参数。8、 如权利要求7所述的装置,其中所述存储器控制器用于:从特定子单元读取数据;修改所述数据并将修改后的数据写入到新的子单元;将新的序列号写入到所述新的子单元的元数据中;以及将所述新的子单元中的所述新序列号的值重新分配给所述第一参数。9、 如权利要求8所述的装置,其中所述存储器控制器用于:擦除包含所述特定子单元的特定块,所述擦除包括擦除相关联的元数据;以及将现在最旧的活动序列号的值分配给所述第二参数。10、 如权利要求8所述的装置,其中当确定所述第一参数在所述第二参数的某个范围内时,所述存储器控制器用于执行包括以下步骤的操作:将包含最旧序列号的子单元重新定位到新块,并将新序列号分配给重新定位的子单元;擦除包含具有所述最旧序列号的所述子单元的块,所述擦除包括擦除相关联的元数据;以及将现在最旧的活动序列号的值重新分配给所述第二参数。11、 如权利要求1所述的装置,还包括耦合到所述非易失性存储器的电池。12、 一种用于控制计算机存储器的方法,包括:每次要将数据写入到非易失性存储器的新页中时,将计数器递增以生成序列号用于写入到所述非易失性存储器的元数据中;当所述计数器达到它的最大值时,将所述计数器绕回到所述计数器的最小值;以及当从电源故障恢复时,利用写入到所述页的多个页的元数据中的序列号来确定哪些页是当前页,哪些页是过期页。13、 如权利要求12所述的方法,其中从所述最小值到所述最大值的值范围由第一范围和不与所述第一范围重叠的第二范围组成,并且所述方法还包括:指定所述第一范围和所述第二范围中包含最新的活动序列号的一个范围作为顶部范围,并选择所述第一范围和所述第二范围中的另一个范围作为底部范围;以及指定所述顶部范围中的所有活动序列号具有大于所述底部范围中的所有活动序列号的值。14、 如权利要求13所述的方法,还包括:重新定位具有位于所述底部范围中的序列号的页,使得重新定位的页包含位于所述顶部范围中的序列号;以及擦除包含具有位于所述底部范围中的序列号的所述页的块。15、 如权利要求12所述的方法,还包括:将最新的活动序列号的值分配给第一参数;以及将最旧的活动序列号的值分配给第二参数。16、 如权利要求15所述的方法,还包括:从特定页读取数据;修改所述数据并将修改后的数据写入到新页;将新序列号写入到所述新页的元数据中;以及将所述新页中的所述新序列号的值分配给所述第一参数。17、 如权利要求16所述的方法,包括:擦除包含所述特定页的特定块,所述擦除包括擦除相关联的元数据;以及将现在最旧的活动序列号的值重新分配给所述第二参数。18、 如权利要求16所述的方法,还包括当确定所述第一参数在所述第二参数的某个范围内时执行包括以下步骤的操作:将包含最旧序列号的页重新定位到新块,并将新序列号分配给重新定位的页;擦除包含具有最旧序列号的页的块,所述擦除包括擦除相关联的元数据;以及将现在最旧的活动序列号的值分配给所述第二参数。19. 一种用于控制计算机存储器的设备,包括用于执行以下步骤的部件:每次要将数据写入到非易失性存储器的新页中时,将计数器递增以生成序列号用于写入到所述非易失性存储器的元数据中;当所述计数器达到它的最大值时,将所述计数器绕回到所述计数器的最小值;以及当从电源故障恢复时,利用写入到所述页的多个页的元数据中的序列号来确定哪些页是当前页,哪些页是过期页。20、 如权利要求19所述的设备,其中从所述最小值到所述最大值的值范围由第一范围和不与所述第一范围重叠的第二范围组成,并且所述设备还包括用于执行以下步骤的部件:选择所述第一范围和所述第二范围中包含最新的活动序列号的一个范围作为顶部范围,并选择所述第一范围和所述第二范围中的另一个范围作为底部范围;以及指定所述顶部范围中的所有活动序列号具有大于所述底部范围中的所有活动序列号的值。21、 如权利要求20所述的设备,还包括用于执行以下步骤的部件:重新定位具有位于所述底部范围中的序列号的页,使得重新定位的页包含位于所述顶部范围中的序列号;以及擦除包含具有位于所述底部范围中的序列号的页的块,其中所述擦除包括擦除相关联的元数据。22、 如权利要求19所述的装置,还包括用于执行以下步骤的部件:将最新的活动序列号的值分配给第一参数;以及将最旧的活动序列号的值分配给第二参数。23、 如权利要求22所述的设备,还包括用于执行以下步骤的部件:从特定页读取数据;修改所述数据并将修改后的数据写入到新页;将新序列号写入到所述新页的元数据中;以及将所述新页中的所述新序列号的值分配给所述第一参数。24、 如权利要求23所述的设备,还包括用于执行以下步骤的部件:擦除包含所述特定页的特定块并且擦除相关联的元数据;以及将现在最旧的活动序列号的值分配给所述第二参数。25、 如权利要求23所述的设备,还包括用于在确定所述第一参数在所述第二参数的某个范围内时执行以下步骤的部件:将包含最旧序列号的页重新定位到新块,并将新序列号分配给重新定位的页;擦除包含所述最旧序列号的块,所述擦除包括擦除相关联的元数据;以及将现在最旧的活动序列号的值分配给所述第二参数。
在非易失性存储器中为从电源故障恢复而绕回序列号 技术领域 本发明涉及在非易失性存储器中为从电源故障恢复而绕回序列号。 背景技术 一些类型的非易失性存储器(如闪存)不易修改各个存储单元中的已有数据,因为它们只能整块地擦除存储器。当数据改变不频繁时,通过将新的数据值并入到之前擦除的新块而将整个块复制到该新块,然后擦除旧块,使得旧块随后可用于用作新块,便可以充分地处理已有数据的内容改变。当数据改变较频繁时,一种较佳的技术是将新的数据值并入到相同块中之前为空的新页而将发生改变的页复制到该新页。这减少了在时间和存储器的有效寿命方面成本高的擦除操作的次数,但是这更加复杂,因为必须区分新的当前页和仍然驻留在存储器中的旧的过期页。对相同数据所做的多种改变可产生包含该数据的不同版本的几个页,其中只有一个页是当前的正确页。可以使用各种技术来跟踪哪些页是当前页、哪些页不是,但此信息一般保存在易失性存储设备中。电源故障事件会擦去此易失性信息,从而在从电源故障恢复时需要其它技术来重建哪些页是当前的正确页。一种方法是将递增的唯一序列号分配给每个新写入的页,并将该序列号置于该页的元数据中,这种方法允许在电源故障恢复时识别该页的最近版本。例如,在与相同逻辑地址相关联的所有页中(根据每个页的元数据),具有最高序列号的页就是该页的最近版本,并且因而就是正确版本。但是,利用大至足以在存储器的整个寿命中都是唯一的序列号需要为序列号预留多个位。页元数据空间是很宝贵的,这种方法成本很高,因为它要利用大量的元数据空间。 发明内容 本发明涉及一种用于控制计算机存储器的装置,包括: 非易失性存储器;以及 存储器控制器,用于控制所述存储器的内容的读、写和擦除,并且如果将数据写入到块的每个子单元中,则将序列号值写入到所述子单元的元数据中; 其中所述存储器控制器用于在每次写入新的子单元时将所述序列号值递增,并且在所述序列号达到最大值之后,将所述序列号绕回到最小值。 本发明涉及一种用于控制计算机存储器的方法,包括: 每次要将数据写入到非易失性存储器的新页中时,将计数器递增以生成序列号用于写入到所述非易失性存储器的元数据中; 当所述计数器达到它的最大值时,将所述计数器绕回到所述计数器的最小值;以及 当从电源故障恢复时,利用写入到所述页的多个页的元数据中的序列号来确定哪些页是当前页,哪些页是过期页。 本发明涉及一种用于控制计算机存储器的设备,包括用于执行以下步骤的部件: 每次要将数据写入到非易失性存储器的新页中时,将计数器递增以生成序列号用于写入到所述非易失性存储器的元数据中; 当所述计数器达到它的最大值时,将所述计数器绕回到所述计数器的最小值;以及 当从电源故障恢复时,利用写入到所述页的多个页的元数据中的序列号来确定哪些页是当前页,哪些页是过期页。 附图说明 通过参照以下描述和用于说明本发明实施例的附图,可以理解本发明的一些实施例。在附图中: 图1示出根据本发明一个实施例、具有非易失性存储器的计算机系统。 图2示出根据本发明一个实施例、包含序列号的存储器的一个页。 图3示出根据本发明一个实施例、存储器子系统在操作过程中的特定状态。 图4A、4B示出根据本发明一个实施例、利用非易失性存储器中的序列号使用双范围技术的方法的流程图。 图5A、5B示出根据本发明一个实施例、利用非易失性存储器中的序列号使用移动范围技术的方法的流程图。 具体实施方式 在以下描述中,阐述了众多具体细节。但是,应了解,没有这些具体细节也可实现本发明的实施例。在其它情况下,没有详细示出公知的电路、结构和技术,以免使本描述难以理解。 提到“一个实施例”、“实施例”、“示范实施例”、“各种实施例”等时表示,如此描述的本发明的这个(这些)实施例可以包括特定特征、结构或特性,但不是每个实施例都一定包括这些特定特征、结构或特性。此外,一些实施例可以具有针对其它实施例描述的特征中的一些、所有特征,或者可以不具有针对其它实施例描述的任何特征。 在以下描述和权利要求中,可以使用术语“耦合”和“连接”及其派生词。应了解,这些术语不是相互同义的。而是,在特定实施例中,“连接”用于表示两个或两个以上元件彼此直接物理或电接触。“耦合”用于表示两个或两个以上元件共同协作或相互交互,但是它们可以或者可以不直接物理或电接触。 如权利要求中所用,除非另外指出,否则使用序数形容词“第一”、“第二”、“第三”等来描述共同的元件只是表示,指的是类似元件的不同实例,它们不是用于暗示如此描述的元件必须处于按时间、空间、排序或任何其它方式处于给定序列中。 本发明的各种实施例可以在硬件、固件、软件或其任意组合中实施。本发明也可作为包含在机器可读介质之中或之上的指令来实施,一个或多个处理器可以读取并执行这些指令以使得能够执行本文描述的操作。机器可读介质可包括用于存储、传送和/或接收以机器(如计算机)可读形式的信息的任何机构。例如,机器可读介质可包括有形存储介质,例如但不限于只读存储器(ROM);随机存取存储器(RAM);磁盘存储介质;光存储介质;闪存设备等。机器可读介质也可包括经过调制以编码这些指令的传播信号,例如但不限于电磁、光或声载波信号。 在本文件的描述中可以频繁使用术语“闪”存。但是,该术语只是用作一个实例,而不应用于将本发明的各种实施例限于用此术语标明的存储器类型。一般来说,本文件中描述的本发明的实施例可以用于利用复制和块擦除操作作为改变所存储的数据的技术的任何类型的非易失性存储器中。一些其它的非限制性实例可以是相变存储器、铁电聚合物存储器等。本文件中所用的术语“块”是指非易失性存储器的擦除块中的存储空间。 本发明的各种实施例可以使用小于常规实施的序列号范围,并在序列号达到其最大值之后将其绕回到其最小值。因为在存储器的操作寿命期间,可以多次使用相同的序列号值,所以这允许使用小得多的序列号范围,从而需要更少的位。因为以此方式进行的绕回(wraparound)可以使新近的序列号具有小于仍然驻留在存储器中的较旧序列号的值,所以描述不同的技术来在从电源故障事件恢复期间重建存储器结构时防止这种情况造成混淆。一些实施例可使用全局序列号(即,在整个非易失性存储器中使用单个值范围),而其它实施例可使用局部序列号(将存储器分成多个部分,每个部分具有它自己的序列号范围,这些序列号范围可重复其它块的序列号范围)。注意:尽管本公开描述将序列号分配给每个“页”,但除非明确要求,否则在提到页时不应视为是隐含的限制。可以将序列号分配给存储器擦除块的任何其它子单元。 图1示出根据本发明一个实施例、具有非易失性存储器的计算机系统。系统100包括非易失性存储器子系统110、处理器120、电源130、通信控制器140以及其它未示出的组件。处理器120可用于控制系统的全部操作,而电源130可用于提供电力以操作系统的各个部分。在一些实施例中,电源130可包括电池,而在其它实施例中,它可包括设计成连接到本地电插座的电源。通信控制器140可用于与位于计算机系统100外部的其它设备通信。该实例示出用于进行无线通信的天线150,但也可以使用其它形式的通信。系统还可包括其它未示出的组件。 存储器子系统110包括用于管理存储器子系统110的内部操作的存储器控制器112以及非易失性(NV)存储器阵列114。NV存储器阵列114可以使用任何可行的技术,例如但不限于:1)NOR闪存,2)NAND闪存,3)相变存储器,4)铁电聚合物存储器,5)及其它。图中将存储器阵列114的可寻址存储设备示为分成数量为B的擦除块,每个块包含数量为P的页。B和P可以是任何适宜的数量,并且每个页可包含任何适宜数量的字节。尽管图中将页码示为是对于每个块重复,但其它实施例可使用其它技术(例如,分配总数为B×P的全局唯一的页码)。在操作中,包含数据的每个页可具有写入到其元数据的序列号,以便帮助跟踪哪些页是当前页。 图2示出根据本发明一个实施例、包含序列号的存储器的页。页220可以是如图1所示的任何页。元数据221可用于存储关于该页的信息,包括序列号以及在将序列号写入到该物理页时与该物理页相关联的逻辑页地址。在一些实施例中,元数据可以位于在存储器系统外部、不可见和/或不可寻址(因而使得该页的整个可寻址范围可用于存储用户或系统数据)的存储元件中,并且图1中的存储器控制器112可用于将元数据写入到那些存储元件或从那些存储元件读取元数据。在其它实施例中,可以为元数据预留一部分可寻址存储空间,从而减少了可用于存储用户/系统数据的存储量。在后一种情形中,可以将元数据存储在该页的任何适宜的部分中,例如但不限于页的开始或结束。元数据可占用任何适宜数量的位。在一个实施例中,元数据可占用48个位,其中序列号占用那些位中的32个位再加一个标志位,但其它实施例可对那些参数中的任意一个或两个使用其它大小。 序列号生成器210可用于生成序列号,序列号将被分配给页并与页一起存储。在一些实施例中,可以使用计数器来生成序列号,每次要将新的序列号分配给页时,便将计数器递增。当使用全局序列号时,在整个存储器系统中,每个序列号都将是唯一的,并且单个计数器可为所有非易失性存储器产生序列号。当使用局部序列号时,存储器的每个部分可以使用它自己的序列号生成器来生成序列号,这些序列号只在该部分中是唯一的,并且不同的存储器部分可以同时利用相同的序列号。以下描述假设采用全局序列号,但这不应视为是对本发明实施例的限制。 图3示出根据本发明一个实施例、存储器子系统在操作过程中的特定状态。可以指定存储器的每个物理块是有效的、无效的、或是已擦除的,这取决于其当前的操作状态。“有效”表示该特定块中存储有当前数据,并且对该数据的访问请求将指向该块。“无效”表示,出于某种原因,该块中的所有数据不再被认为是当前的,并且对数据的请求不会指向该块。最常见的是,这种状态表示该块中之前存储有有效数据,但该数据被复制到现在被认为是有效块的另一个块中。“已擦除”表示该块经历过擦除操作,不包含任何有效或无效的数据,并且准备好用作新块而用于复制操作。当使用存储器系统时,出于各种原因,每个块的状态可动态地改变。为了简单地说明,只示出八个存储器块,但是典型的存储器系统可具有比这多得多的块。 如针对块6所示,有效或无效块中可具有多个页,这些页各自被指定为是过期页、当前页或空页。空页仍处于已擦除状态,其中不具有系统/用户数据,并且可供随后用于存储这些数据。当前页中具有可供使用的数据,并且对该数据的访问请求将指向该页。过期页中仍具有旧数据,但是该数据不再被认为是当前的,并且不能再用。在典型的操作中,已擦除块的所有页都是空的,并且有效块具有至少一个当前页,而无效块不具有当前页并且具有至少一个过期页。有效块和无效块也可具有空页。 一旦指定已擦除块用于写操作,便可将数据写入到(通常)第一页。然后,该块的状态变为有效状态,而第一页的状态变为当前状态。当稍后要修改该页中的数据时,可从第一页读取数据,修改该数据,并将修改后的数据写入到第二页。然后,指定第二页为当前页,而指定第一页为过期页。该数据的其它变化可导致第三页变成当前页,而第二页变成过期页。这可继续进行,直到该块中没有留下足够的空页用于下一个操作。此时,或者出于某个其它原因,可能期望的是将当前页中的数据置于具有很多空页的之前擦除的新块中,此时,可以将当前页复制(取决于操作,可以具有或不具有修改)到新块的具有新序列号的页中。不需要复制过期页,因为其中包含的数据将不再使用。现在可以指定复制完的旧页为过期页,而旧块现在被认为是无效的。随后,可以擦除这个旧的无效块,并使其可用于将来的存储器操作。擦除旧块的动作还可擦除该块的页的元数据中包含的所有旧序列号。因此,每个有效和无效页可以在其元数据中具有序列号,而每个空页不应在其元数据中具有任何序列号。在一些实施例中,空页将包含已初始化为默认值(例如但不限于都为0或都为1)的序列号。当在电源故障之后重建存储器时,应将此默认值理解为不具有任何序列号。 尽管之前的描述提到在每个块中只具有单个当前页,但这对于一些操作可能过于限制,并且在相同块中可以同时存在多个当前页。但是,这些当前页应当与不同的逻辑地址相关联,并且因此将被认为是具有不同的数据集合,而不是具有相同数据的新、旧版本。为了简单说明,每个块只示出四个页,但是典型的存储器系统的每个块可以具有更多个页(例如每个块64页,但不应将此数量视为是对本发明实施例的推断性限制)。 当要将数据写入到新页时,将来自序列号生成器的最近序列号写入到该页的元数据中,也将与该数据相关联的逻辑地址写入到元数据中。随后,将来自序列号生成器的下一个序列号写入到新写入的下一页的元数据中。如果使用的是全局序列号,则可将这下一个序列号写入到不同的块或相同的块中。但不管怎样,特定块中的当前页将具有比该块中的任何相关联的过期页的序列号新的序列号,而空页实际上不具有序列号。在利用序列号的常规系统中,这意味着与特定逻辑地址相关联的当前页将具有比与该逻辑地址相关联的任何过期页的序列号高的序列号,从而使得只通过检查序列号便可容易地识别哪个页是当前页。但是,因为本发明的实施例可利用从其最大值绕回到其最小值的小序列号,所以可能的情况是,较新的序列号可能具有小于较旧序列值的绝对值。稍后将描述解决这种情形的技术。 因为当将数据复制到新块和/或新页时,与特定逻辑地址相关联的块和页的物理地址会改变,所以逻辑-物理(L2P)表312可动态地跟踪每个当前页从逻辑页地址到物理块/页地址的转换。但是,L2P表保存在易失性存储设备中,如果发生电源故障事件,L2P表会丢失。在此情况下,在从电源故障恢复时,可以利用存储在存储器的每个页的元数据中的序列号和逻辑地址来重建L2P表。在2005年6月30日提交的题为“非易失性存储器的写入技术(Technique to Write to aNon-Volatile Memory)”的美国专利申请号11/172608中介绍了用于此重建的一些技术。但是,尽管在从电源故障恢复的过程中进行的重建过程可以得益于本文描述的本发明的实施例,但此重建不被认为是这些实施例的一部分,并且此应用并未通过引用结合于此。 在这里描述的实施例中,可以为可寻址存储器的页和块保持转换,但是对于逻辑和物理地址,低阶地址位(即,页边界内包含的那些地址位)将是相同的,并且在电源故障恢复过程中不需要转换或重建。但是,其它实施例可以在不同于页边界的存储器子单元的层面跟踪转换,并且相同的原理适用于那些子单元边界。 一旦将序列号写入到页的元数据中,序列号便可一直保留在那里,直到擦除包含该页的块为止。因此,序列号将存在于有效和无效块的当前页和过期页的元数据中。包含在存储器的页的元数据中的序列号被认为是“活动(active)”序列号。(注意:在一些实施例中,空页可以具有初始化为默认状态的序列号,例如但不限于所有都为0或都为1。应将初始化后的序列号认为不与任何序列号相同,并且不将该页认为是活动的。)在将数据写入到该页时,元数据还可包含与该页相关联的逻辑地址。在从电源故障恢复的过程中,通过在恢复过程中读取每个页的元数据,可以假定,在其元数据中具有相同逻辑地址的所有页表示相同数据的不同版本,并且该组中具有最高序列号的页将被认为是当前页,而该组中的其它页将被认为是过期页。以此方式,即使在电源故障过程中没有保存每个页的当前/过期状态,仍可重建L2P表。 因为一旦达到最大值便允许递增序列号绕回,所以可能的情况是,较近的序列号将具有小于较旧序列号的绝对值。这会造成混淆,因为否则会将较小的序列号认为是较旧的序列号。这里描述两种通用方法来解决这种混淆,这两种方法分别称为“双范围”法和“移动范围”法。下文将单独描述每种方法。图4A、4B示出双范围法,而图5A、5B示出移动范围法。 双范围法 在双范围法中,将序列号范围分成两个子范围。一个实施例将范围分成两个大小相同的子范围,例如0...X的较低编号序列范围和(X+1)...(2N-1)的较高编号序列范围,其中N是序列号中的位数,并且X=2(N-1)。这有助于简单的区分,因为最高有效位可用于识别给定序列号处于哪个子范围。另外,可使用非易失性存储器中的标志来将包含最近序列号的子范围标为“顶部(top)”子范围,而另一个子范围被认为是“底部(bottom)”子范围。(请注意较高编号/较低编号子范围和顶部/底部子范围之间的区别。在任何给定的时间,可以指定较高编号或较低编号子范围为顶部子范围,而指定另一个子范围为底部子范围。) 如果发生在恢复时需要再建存储器结构的电源故障,则顶部子范围中的所有序列号被认为高于底部子范围中的所有序列号,而不管那些数的实际数值。但是,在每个子范围内,这些数的绝对值确定哪个序列号较高。基本上,标志被认为是可在这两个子范围之间动态切换的额外的最高有效位。通过赋予最近的序列号高于较旧序列号的有效值,这种技术将有效地解决当新序列号绕回到“0”时通常发生的混淆。 但是,如果仍然存在于存储器中的序列号范围的跨度大于总序列号范围的一半,则即使这种技术也会造成混淆。例如,如果序列号生成器绕回到0,使得最近的序列号=“0”,则会断言数值较低的子范围(0...X)为“顶部”子范围,使得这个新序列号将具有高于存储器中的较旧序列号的有效值,这些较旧的序列号虽然具有2N-1、2N-2等绝对值,但现在被认为位于底部范围中。但是,来自新的顶部子范围的上部的很旧的序列号(例如,绝对值为X-4)位于新的顶部子范围中,其绝对值高于绝对值为0的最近的序列号。 为了防止发生这种混淆情况,无论序列号生成器何时从一个子范围越到另一个子范围,都可启动“系列转换(series-conversion)”过程。这种过程可以根据需要将新的序列号重新分配给各页,使得所有剩余的页都具有位于相同子范围中的序列号,将指定该相同子范围为顶部子范围。一种实现此重新分配的方法是复制具有不在与最近序列号相同的子范围中的序列号的所有当前页,并将新的序列号分配给每个副本(副本于是变成该页的“当前”版本),使得所有当前页都将具有位于相同子范围中的序列号。然后,可断言这个子范围为顶部子范围。可以指定作为副本源的旧页为过期页,当这些页所在的块中不再存在任何当前页时,将此块指定为是无效的,随后擦除此无效块。这种技术还具有最终从存储器中除去所有相关联的过期页的优点,因为那些过期页仅仅遗留在将要擦除的旧块中。尽管不能立即擦除旧块,但是在进行此擦除之前,序列号不太可能再次移动到不同的子范围中,因此仍然可以避免前述混淆。 图4A、4B示出根据本发明一个实施例、利用非易失性存储器中的序列号使用双范围技术的方法的流程图。在一些实施例中,该方法可以在非易失性存储器的存储器控制器中执行,但其它实施例可以在其它区域中执行该方法,或者可以在存储器控制器中执行该方法的部分,而在其它区域中执行其它部分。在从图4A开始的所示流程图400中,在410,可以接收将数据写入到NV存储器的请求,并定位至少一个空页用于写入数据。在420,通过将之前的序列号递增,可以创建新的序列号。尽管在流程的特定位置示出此递增,但其它实施例可更早地递增序列号,并且当需要时,可仅仅使这个新递增的序列号变成可用。 如果要写入到页中的数据是已有数据的修改版本,则在435,可以从上一个当前页读取旧数据并对旧数据进行修改,并且在440,将修改后的数据以及新序列号写入到新的当前页中。然后,在445,可以指定上一个当前页是过期页,同时指定下一个页为当前页。注意,如果数据是新的,因此不存在其已有版本要修改,则操作435可省略,并且445处的指定旧页为过期页的操作也可省略。 既然已经将新的或者经过修改的数据写入到页中并且已经将序列号写入到该页的元数据中,便可检查存储器中的活动序列号以确定是否需要以某种方式对它们进行调整。在450,可以确定序列号是否跨到不同的子范围中。如果在440处写入的新序列号位于不同于就在之前的序列号的子范围中,则发生了这种跨越。之所以会发生这种情况是因为,序列号从较低编号子范围跨到较高编号子范围,或者是因为序列号通过从较高编号子范围跨到较低编号子范围而绕回。在任一情况下,如450处所确定,包含新序列号的子范围位于当前指定为底部子范围的子范围中,然后在460,可以触发前述系列转换过程。因为这种过程可能涉及相当大量的复制和擦除,所以在一些实施例中,这种过程将是后台任务,或者是其它形式的延迟任务,并且实际上要在稍后时间、例如在存储器控制器相对不忙时才执行。 图4B示出在图4A中触发的系列转换过程。在465,识别最旧(oldest)和最新的活动序列号(即,分别具有最低有效值和最高有效值的活动序列号)。此识别可以采用任何可行的方式来完成。因为此时尚未进行顶部/底部子范围指定的交换,所以最新序列号仍位于底部子范围中。在470,可以检查最旧序列号以确定它是否也位于底部子范围中。如果是的话,则在473,交换顶部/底部范围指定,使得序列号都在顶部范围中,并且过程可以在475退出。但是,如果如470处所确定,最旧序列号不在底部子范围中,则在480,可通过以下方法将具有最旧序列号的当前页(或者与具有最旧序列号的过期页相关联的当前页)重新定位到新块:将其复制到新块中的新页,并赋予副本一个新的序列号,这个新的序列号将位于底部子范围中。在485,可以识别下一个最旧的序列号,并对与其相关联的页进行470-480-485处的相同过程。这可继续进行,直到所有当前页都具有位于底部范围中的序列号为止,此时,可以在473交换顶部和底部子范围,使得所有当前页都具有位于顶部范围中的序列号。然后,过程可以在475退出。 重新定位过程包括:一旦将旧的当前页复制到具有新序列号的新块,并且指定该副本是当前的,便指定旧的当前页是过期页。无需重新定位已经被指定为是过期的页。一旦旧块中不再具有任何当前页,便可将旧块指定为是无效的。然后,可擦除包括旧页以及仍存储在其中的旧序列号的旧块,并使其可供将来使用。以此方式进行重新定位不仅可以使所有当前页具有位于相同(顶部)子范围中的序列号(这是目的所在),而且还可从存储器中除去旧块中的所有过期页及其相关联的序列号。 移动范围法 在移动范围法中,保留识别存储器中的最新和最旧活动序列号的指示符。例如,称为HI的参数可指示最新活动序列号的值,而称为LOW的参数可指示最旧活动序列号的值。如果HI的值大于LOW,则活动序列号的绝对值表示其真实的相对年龄,并且不需要做任何调整。在此状态,不存在绝对值小于LOW或大于HI的任何活动序列号。 但是,如果LOW的绝对值大于HI,则HI值发生了绕回。在此情况下,不应存在绝对值小于LOW并且还大于HI的任何序列号。使用中的具有小于LOW的值的任何序列号将被认为比LOW新。为了使这两个组相对于彼此保持正确,对于绝对值小于LOW的每个序列号,可以将标志设为“1”,而对于绝对值大于HI的每个序列号,可将标志设为“0”。如果将此标志认为是每个序列号的额外的最高有效位,则使用中的所有序列号的包含标志位在内的有效值都将是正确的。 在移动范围法中,在使用新序列号的任何时间,都可将HI设置成那个新序列号的值。在擦除最旧序列号的任何时间,修改LOW的值以指示仍存在于存储器中的现在为最旧的序列号。在擦除包含具有最新序列号的页的块的少见情况下,可以修改HI的值以指示现在为最新的仍在使用的序列号。如果因为最近写入的数据不能再用于任何程序而从存储器中除去该数据,则会发生这种情况。 可能的情况是,最旧活动序列号可保留在存储器中长至足以使最新序列号最终赶上它的时间,从而使得HI=LOW。这会不正确地暗示,存储器(以及存储器中的有效或无效块)中不存在任何序列号。为了避免这种不明确的状态,当HI的值从下面逼近LOW的值时,可以在HI和LOW之间保持最小间隔。例如,可以设置阈值间隔值T,使得当最新序列号的值=LOW-T时,可以将包含最旧序列号的块中的当前页重新定位到新块,并赋予重新定位的当前页一个新的序列号。这允许擦除旧块,这还将擦除该块中的旧页及其序列号。而这又会增加LOW的值,从而赋予随后的新序列号更多的增长空间。当重新定位当前页时,无需重新定位相关联的过期页,并且当擦除旧块时,还将擦除它们的序列号。 图5A、5B示出根据本发明一个实施例、利用非易失性存储器中的序列号使用移动范围技术的方法的流程图。在流程图500中,操作510-545与图4A中的对应操作410-445相同,这里不再单独描述。在550,在将新的或经过修改的数据写入到具有新序列号的新页之后,将参数HI设置成新序列号的值。在555,确定操作530-545是否产生擦除块的结果。如果不擦除块,则处理可移动到图5B的顶部。如果操作530-545产生擦除块的结果(或出于其它原因),则在进行该擦除之后,处理可移动到560,在560,确定存储器中(在擦除之后)现在最旧的序列号是否具有大于LOW的值。如果不是,则处理可移动到图5B的顶部。但是,如果最旧序列号具有大于LOW的值(这意味着擦除除去了之前最旧的序列号),则在565,通过找到存储器中现在最旧(now oldest)的序列号并将LOW设置成等于该值,可以设置LOW的新值。即使在擦除操作从存储器中除去之前最旧的序列号之后,此过程仍使LOW的值保持等于存储器中的最旧序列号。 如之前所述,重要的是不要让HI的值绕回并赶上LOW的值,因此图5B示出可如何避免这种情况。在570,可以确定HI的值是否小于LOW-T的值。换句话说,当HI绕回并且从下面逼近LOW的值时,认为T就是在HI和LOW之间的期望的最小间隔。如果HI小于LOW-T,则保持此间隔,并且过程可在580退出。但是,当如570处所确定,达到此最小间隔时,在575,可将包含最旧序列号的块中的当前页复制到新块,并赋予其一个新的(最高)序列号。这允许擦除旧块。如果包含最旧序列号的块中具有多于一个当前页,则可将那些当前页中的每个当前页复制到新块,并赋予其新的序列号,然后再允许擦除旧块。 设置HI和LOW的值以反应这些变化可以通过重复图5A中的操作550-555-560-565来实现。由于执行这些操作需要时间,所以只擦除单个块不足以保持HI和LOW之间的最小间隔(如570处所确定)。额外的重新定位和擦除可通过循环回路570-575-550-555-560-565多次直到达到间隔来实现,并且过程在580退出。可以选择T的值以适应此过程将花费多长时间的最坏情况估计。 以上描述用于说明而不是限制。本领域的技术人员将联想到变化。那些变化用于包含在本发明的各种实施例中,本发明的各种实施例只由随附权利要求的精神和范围限制。
《在非易失性存储器中为从电源故障恢复而绕回序列号.pdf》由会员分享,可在线阅读,更多相关《在非易失性存储器中为从电源故障恢复而绕回序列号.pdf(28页珍藏版)》请在专利查询网上搜索。
如果发生从电源故障恢复的情况,则利用非易失性存储器的元数据中的递增序列号来确定存储器中哪些数据是当前的有效数据,哪些数据不是。为了减少这些序列号所消耗的元数据空间量,允许这些序列号小至足以在达到最大值时绕回。公开两种不同的技术来阻止这种绕回情形造成序列号的相对值的不明确。 。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1