专利名称:具有区块管理系统的非易失性存储器和方法
技术领域:
本发明一般涉及一种非易失性半导体存储器,且明确地说,本发明涉及具有存储器区块管理系统的非易失性半导体存储器。
背景技术:
能够非易失性存储电荷的固态存储器(特别是采用被包装为小形状因数卡的EEPROM和快闪EEPROM的形式)近些年来已成为各种移动式和手提式装置(尤其是信息家电和消费性电子产品)中选用的存储器。与同为固态存储器的RAM(随机存取存储器)不同的是,快闪存储器为非易失性的,且即使关闭电源后仍可保留其已存储的数据。另外,与ROM(只读存储器)不同的是,快闪存储器可与光盘存储装置类似地来进行重写。尽管成本较高,但快闪存储器已越来越多地被用于大量存储应用中。常用的大量存储(以旋转磁性媒体为主,例如硬盘和软盘)并不适用于移动式和手持式环境中。此是因为磁盘驱动器体积趋于庞大,容易产生机械故障,而且具有高延迟和高电源需求。这些不合需要的属性使得基于光盘的存储无法用于大部分的移动式和便携式应用中。另一方面,快闪存储器(嵌入式和抽取式卡的形式)由于其尺寸小、功耗低、速度快和可靠性高的特征而非常适用于移动式和手提式环境中。
快闪EEPROM与EEPROM(电可擦除可编程只读存储器)的类似之处在于其为可被擦除的非易失性存储器,并且将新数据写入或“编程”到其存储单元中。两者均在场效应晶体管结构中利用位于半导体衬底中介于源极区与漏极区之间的通道区上的浮动(未连接的)导电栅极。接着在浮动栅极上提供一控制栅极。晶体管的阈值电压特征受控于保留在浮动栅极上的电荷量。也就是说,对于浮动栅极上既定的电荷电平而言,必须在晶体管被“开启”前施加对应的(阈值)电压到控制栅极,以在其源极区与漏极区之间产生导通。明确地说,例如快闪EEPROM的快闪存储器允许同时擦除全部的存储单元区块。
浮动栅极能够保留某个范围的电荷,且因此可被编程为阈值电压窗口内任意的阈值电压电平。阈值电压窗口的大小由装置的最小阈值电平和最大阈值电平来界定,而所述阈值电平对应于可被编程于浮动栅极上的电荷范围。阈值窗口通常取决于存储器装置的特征、操作条件和历史数据。原则上,窗口内的每一不同的、可解析的阈值电压电平范围均可用于指明所述单元一明确的存储器状态。
通常用以下两种机制中的一种将用作存储单元的晶体管编程到一“经编程”状态。在“热电子注入”中,被施加到漏极的高电压使衬底通道区上的电子加速。同时,被施加到控制栅极的高电压经由一薄的栅极电介质将热电子拉到浮动栅极之上。在“隧穿注入”中,相对于所述衬底施加一高电压给控制栅极。以此方式,从所述衬底将电子拉到中间的浮动栅极。虽然术语“编程”过去是用于描述通过将电子注入到存储单元的初始被擦除的电荷存储单位中以便改变存储器状态,但现在将其与例如“写入”或“记录”的更常见术语互换使用。
可用以下几种机制来擦除存储器装置。对于EEPROM而言,可通过相对于控制栅极施加一高电压给所述衬底,以便在浮动栅极中诱发出电子使其隧穿一薄氧化物而进入衬底通道区(即,Fowler-Nordheim隧穿效应),来电擦除一存储单元。通常地,EEPROM可以逐个字节的方式来擦除。对于快闪EEPROM而言,可每次将存储器全部电擦除或每次电擦除一个或一个以上最小可擦除区块,其中最小可擦除区块可能由一个或一个以上扇区组成,且每一扇区均可存储512个字节以上的数据。
存储器装置通常包含可安装于卡上的一个或一个以上存储器芯片。每一存储器芯片均包含一受到外围电路(例如解码器和擦除电路、写入电路以及读取电路)支持的存储单元阵列。更复杂的存储器装置还搭配一执行智能的且更高水平的存储器操作与对接的控制器。
现今已有许多商业上成功的非易失性固态存储器装置。这些存储器装置可能为快闪EEPROM,或可采用其它类型的非易失性存储单元。快闪存储器与系统和其制造方法的实例揭示于美国第5,070,032号、第5,095,344号、第5,315,541号、第5,343,063号和第5,661,053号、第5,313,421号和第6,222,762号专利中。明确地说,具有NAND串结构的快闪存储器装置描述于美国第5,570,315号、第5,903,495号、第6,046,935号专利中。另外,还可用具有用于存储电荷的电介质层的存储单元来制造非易失性存储器装置。其使用电介质层来取代前面所述的导电浮动栅极元件。这些利用电介质存储元件的存储器装置已描述于Eitan等人于2000年11月在IEEE Electron Device Letters第21卷第11期第543-545页发表的“NROMA Novel Localized Trapping,2-Bit Nonvolatile Memory Cell”中。一ONO电介质层延伸穿过源极与漏极扩散区之间的通道。一个数据位的电荷在靠近漏极的电介质层中被局部化,而另一数据位的电荷在靠近源极的电介质层中被局部化。举例而言,美国第5,768,192号和第6,011,725号专利揭示一种在两层二氧化硅层之间夹放一捕获电介质的非易失性存储单元。通过分开读取电介质内空间分离的电荷存储区域的二元状态来实施多状态的数据存储。
为改善读取和编程性能,可并行读取或编程一阵列中多个电荷存储元件或存储器晶体管。因此,可同时读取或编程一由复数个存储器元件组成的“页”。在现有存储器结构中,一行通常含有数个交错页或其可能构成一页。一页中的所有存储器元件将被同时读取或编程。
在快闪存储器系统中,擦除操作所花费的时间可能为读取和编程操作的倍数长度。因此,希望具有非常大的擦除区块。以此方式,将擦除时间分摊到大量的存储单元聚合体中。
快闪存储器的特性判定必须将数据写入一已擦除的存储器位置中。如果要更新来自主机的特定逻辑地址的数据,那么一种方式为在相同的物理存储器位置中重写所述更新数据。也就是说,逻辑到物理地址映射并未改变。然而,此意谓着整个擦除区块会含有必须首先被擦除然后再以已更新数据进行重写的物理位置。此更新方法效率低,因为其需要擦除并重写整个擦除区块,如果待更新的数据仅占据擦除区块的一小部分效率尤其低。其还将会导致更频繁的擦除循环使用所述存储器区块,就此类型存储器装置的有限耐用性而言此为不合需要的。
管理快闪存储器系统的另一问题为必须处理系统控制与目录数据。在各项存储器操作过程期间产生并访问所述数据。因此,其有效的处理和便捷的访问将直接影响性能。希望将此类型的数据保存在快闪存储器中,因为快闪存储器为很好的存储器且为非易失性。然而,如果使用介于控制器与快闪存储器之间的中间文件管理系统,那么无法直接访问所述数据。另外,系统控制与目录数据倾向于非常有源且会被碎离,其并不利于存储在具有大持讯区块擦除的系统中。按照惯例,此类型的数据会被设置在控制器RAM中,从而允许所述控制器来直接访问。在供电给存储器装置后,一初始化程序使快闪存储器能够被扫描,以便编辑必要的系统控制与目录信息,用以将其置于控制器RAM中。此程序花费时间且需要控制器RAM容量,因而必须进一步提高快闪存储器容量。
US 6,567,307揭示一种在大型擦除区块中处理扇区更新的方法,其包括将更新数据记录于用作便笺式存储器(scratch pad)的多个擦除区块中,并最终在按照逻辑上循序的次序将其重新排列之后合并各个区块中的有效扇区并重写所述扇区。以此方式,混乱在每次轻微更新时擦除并重写一区块。
WO 03/027828和WO 00/49488均揭示一种在大型擦除区块中处理更新的存储器系统,其包括将逻辑扇区地址分割成复数个区段。保留一小型的逻辑地址范围区段以供有源系统控制数据使用,所述区段与供用户数据使用的另一区段分离。以此方式,在其自己的区段中更改系统控制数据将不会与另一区段中的关联数据相互作用。更新为逻辑扇区级的操作,且有一写入指标指向某一待被写入的区块中的对应的物理扇区。所述映射信息在RAM中被缓冲,且最终被存储于主存储器中的扇区配置表中。一逻辑扇区的最新版本将舍弃现有区块中已经变成部分过时的所有先前版本。其执行废弃项目收集以保持可接收数目的部分过时区块。
现有技术的系统趋于将更新数据分布在许多区块中,或者更新数据可能会使许多现有区块变成部分过时。其结果通常为必须针对所述部分过时的区块进行大量的废弃项目收集,其效率低且会造成存储器提早老化。另外,相较于非循序更新,并没有任何系统性且有效的方式来处理循序更新。
因此,通常需要高容量且高性能的非易失性存储器。明确地说,需要一种能够在大型区块中进行存储器操作且没有前述问题的高容量非易失性存储器。
发明内容
一种非易失性存储器系统被组织成由复数个物理存储器位置所组成的复数个物理群组。每一物理群组(元区块)均可作为一个单元擦除,并可用于存储一数据逻辑群组。一存储器管理系统允许通过配置一专用于记录所述逻辑群组的所述更新数据的元区块来更新一逻辑群组。所述更新元区块按照收到的次序来记录更新数据,且并未限制所述记录是(循序)否(混乱)具有如原来被存储般正确的逻辑循序。最终,所述更新元区块对进一步的记录关闭。将进行数项处理中的一项,但最终都会以正确的次序产生一用来取代所述原始元区块的完全填充的元区块而结束。在所述混乱情况中,以有利于频繁更新的方式将目录数据保存在所述非易失性存储器中。所述系统支持同时被更新的多重逻辑群组。
本发明的一个特征允许以逐个逻辑群组的方式来更新数据。因此,当要更新一逻辑群组时,逻辑单位的分布(以及更新过时的存储器单位的分散)被限制于某个范围中。当所述逻辑群组正常地被包含于一物理区块中时尤为如此。
在所述逻辑群组的更新期间,通常需要分配一或两个区块来缓冲已更新的逻辑单位。因此,仅需要在相当少数的区块中执行废弃项目收集。可用合并法或压缩法来执行一混乱区块的废弃项目收集。
相较于所述循序区块,所述更新处理的经济性在所述更新区块的一般处理中更加明显,使得无需为混乱(非循序)更新分配任何额外的区块。所有的更新区块均被配置为循序的更新区块,且任何的更新区块均可被改变为一混乱的更新区块。实际上,可任意地将一更新区块从循序式改变为混乱式。
有效地使用系统资源允许使用更新多个逻辑群组。此进一步提高效率并降低额外开销。
从本发明的优选实施例的以下描述中将了解本发明的额外特征和优点,应配合附图来参考所述描述。
图1示意性说明适于实施本发明的存储器系统的主硬件组件。
图2说明根据本发明一优选实施例的存储器,其被组织成复数个物理扇区群组(或元区块)并由控制器的存储器管理器来管理。
图3A(i)-3A(iii)根据本发明一优选实施例示意性说明逻辑群组与元区块之间的映射。
图3B示意性说明复数个逻辑群组与复数个元区块之间的映射。
图4说明物理存储器中元区块与各结构的对准。
图5A说明连接不同平面的最小擦除单位所构成的元区块。
图5B说明一个实施例,其中从每一平面中选出一个最小擦除单位(MEU)以连接成一元区块。
图5C说明另一实施例,其中从每一平面中选出一个以上MEU以连接成一元区块。
图6为元区块管理系统被建构于控制器和快闪存储器中时的示意性方框图。
图7A说明以循序次序被写入一循序更新区块的一逻辑群组中的复数个扇区的实例。
图7B说明以混乱次序被写入一混乱更新区块的一逻辑群组中的复数个扇区的实例。
图8说明进行两次具有不连续逻辑地址的单独主机写入操作而以循序次序被写入一循序更新区块的一逻辑群组中的复数个扇区的实例。
图9为根据本发明一通用实施例说明由更新区块管理器用于更新逻辑数据群组的处理的流程图。
图10为根据本发明一优选实施例说明由更新区块管理器用于更新逻辑数据群组的处理的流程图。
图11A为更详细地说明关闭图10中所示的混乱更新区块的合并处理的流程图。
图11B为更详细地说明关闭图10中所示的混乱更新区块的压缩处理的流程。
图12A说明一逻辑群组的所有可能状态,以及在各种操作下所述状态之间可能的转变。
图12B为列出一逻辑群组的可能状态的表格。
图13A说明一元区块的所有可能状态,以及在各种操作下所述状态之间可能的转变。一元区块为一对应于一逻辑群组的物理群组。
图13B为列出一元区块的可能状态的表格。
图14(A)-14(J)为展示对逻辑群组的状态以及物理元区块所进行的各项操作的效果的状态图。
图15说明用于追踪已开放和已关闭的更新区块和已擦除区块以进行配置的配置区块列表(ABL)的结构的优选实施例。
图16A说明混乱区块索引(CBI)扇区的数据字段。
图16B说明被记录于专用元区块中的混乱区块索引(CBI)扇区的实例。
图16C为说明访问正在进行混乱更新的给定逻辑群组的一逻辑扇区的数据的流程图。
图16D为根据一替代实施例说明访问正在进行混乱更新的给定逻辑群组的一逻辑扇区的数据的流程图,其中逻辑群组已被分割成复数个子群组。
图16E说明在将每一逻辑群组分割成多个子群组的实施例中的混乱区块索引(CBI)扇区的实例和其功能。
图17A说明群组地址表(GAT)扇区的数据字段。
图17B说明被记录于一GAT区块中的群组地址表(GAT)扇区的实例。
图18为说明针对使用和循环使用已擦除区块而言,控制与目录信息的分布和流动的示意性方框图。
图19为展示逻辑到物理地址转换的处理的流程图。
图20说明在存储器管理操作过程中对控制数据结构所执行的操作的分级。
具体实施例方式
图1示意性说明适于实施本发明的存储器系统的主硬件组件。存储器系统20通常经由一主机接口配合主机10进行操作。存储器系统通常呈存储器卡或嵌入式存储器系统的形式。存储器系统20包括一存储器200,所述存储器200的操作由一控制器100来控制。存储器200由分布于一个或一个以上集成电路芯片中的一个或一个以上非易失性存储器单元阵列组成。控制器100包括一接口110、一处理器120、一可选协处理器121、ROM 122(只读存储器)、RAM 130(随机存取存储器)及可视情况编程的非易失性存储器124。接口110具有一个用于将控制器对接到主机的组件,以及用于对接到存储器200的另一组件。存储于非易失性ROM 122和/或可选非易失性存储器124中的固件提供处理器120实施控制器100的功能所要的编码。误差校正码可由处理器120或可选协处理器121来处理。在一替代实施例中,控制器100由一状态机(未图示)来实施。在另一实施例中,在主机中实施控制器100。
逻辑与物理区块结构图2说明根据本发明优选实施例的存储器,所述存储器被组织成复数个物理扇区群组(或元区块)并由控制器的存储器管理器来管理。存储器200被组织成复数个元区块,其中每一元区块为一群组可一起擦除的物理扇区S0、...、SN-1。
当在文件系统或操作系统下运行应用程序时,主机10访问存储器200。通常,主机系统以逻辑扇区为单位来访问数据,举例而言,其中每一扇区可能含有512个字节的数据。另外,主机通常以逻辑群集为单位来读取或写入存储器系统,每一逻辑群集由一个或一个以上逻辑扇区组成。在某些主机系统中,可能存在可选主机端存储器管理器,以在所述主机处执行较低级存储器管理。在读取或写入操作期间的大部分情况中,主机10基本上发出一命令到主机系统20,用于读取或写入含有一串具有连续地址的逻辑数据扇区的程序段(segment)。
存储器端存储器管理器建构于存储器系统20的控制器100中,用以管理在快闪存储器200的复数个元区块中存储与检索主机逻辑扇区的数据。在优选实施例中,存储器管理器含有许多用于管理元区块的擦除操作、读取操作和写入操作的软件模块。存储器管理器还在快闪存储器200和控制器RAM 130中保存与其操作相关联的系统控制和目录数据。
图3A(i)-3A(iii)根据本发明一优选实施例示意性说明逻辑群组与元区块之间的映射。物理存储器的元区块具有N个物理扇区,其用于存储一逻辑群组的N个逻辑扇区数据。图3A(i)展示来自逻辑群组LGi的数据,其中所述逻辑扇区呈现连续的逻辑次序0、1、...、N-1。图3A(ii)展示正以相同的逻辑次序被存储于元区块中的相同数据。当以此方式存储时,所述元区块便为所述的“循序式”。一般而言,元区块可能具有以不同次序存储的数据,在此情况中,所述元区块则为所谓的“非循序式”或“混乱式”。
在一逻辑群组的最低地址与其所映射到的元区块的逻辑地址之间可能会有偏移。在此情况中,逻辑扇区地址在所述元区块内以环状的方式从逻辑群组的底部反卷绕到顶部。举例而言,在图3A(iii)中,元区块在其开始在逻辑扇区k的数据的第一位置中进行存储。当到达最后的逻辑扇区N-1时,其回绕到扇区0,并最终将与逻辑扇区k-1相关联的数据存储于其最后的物理扇区中。在优选实施例中,使用一页标签来识别任何偏移,例如识别存储于元区块的第一物理扇区中的数据的开始逻辑扇区地址。当两个区块仅相差一个页标签时,我们将认为所述两个区块是以类似的次序来存储其逻辑扇区。
图3B示意性说明复数个逻辑群组与复数个元区块之间的映射。每一逻辑群组均映射到一唯一的元区块,除了其中的数据当前正在被更新的少数逻辑群组以外。在一逻辑群组已被更新之后,其可能被映射到不同的元区块。所述映射信息被保存在一组逻辑到物理目录中,稍后将更详细描述。
还可设计其它类型的逻辑群组到元区块映射。举例而言,由Alan Sinclair于与本发明同一天申请的共同待决及且共同拥有的美国专利申请案,标题为“AdaptiveMetablocks”之中揭示具有可变大小的元区块。所述共同待决的申请案的全部揭示内容以引用的方式并入本文中。
本发明的一个特征为所述系统配合一单一逻辑分割进行操作,且存储器系统的整个逻辑地址范围中的逻辑扇区群组均被相等地来处理。举例而言,含有系统数据的扇区和含有用户数据的扇区可分布在逻辑地址空间中的任意处。
与现有技术的系统不同的是,并没有任何特殊的系统扇区分割或分区(即,文件配置表、目录或子目录有关的扇区),用以在逻辑地址空间中定位可能含有频繁且小尺寸更新的数据的扇区。相反,本发明的更新逻辑扇区群组的方案将有效地处理系统扇区以及文件数据特有的访问图案。
图4说明物理存储器中元区块与各结构的对准。快闪存储器包含复数个存储器单元区块,所述存储器单元均可作为一个单元一起擦除。这些擦除区块为快闪存储器的最小的擦除单位,或为存储器的最小可擦除单位(MEU)。所述最小擦除单位为存储器的硬件设计参数,不过,在支持多重MEU擦除的某些存储器系统中,可能配置含有一个以上MEU的“超级MEU”。对于快闪EEPROM而言,MEU可能含有一个扇区,但优选包括多个扇区。在所示实例中,其具有M个扇区。在优选实施例中,每一扇区可存储512个字节数据,且具有用户数据部分,以及用于存储系统或额外开销数据(overheaddata)的标头部分。如果元区块由P个MEU构成且每一MEU含有M个扇区,那么每一元区块将具有N=P*M个扇区。
在系统级,元区块代表一群组存储器位置,例如可一起擦除的复数个扇区。快闪存储器的物理地址空间可视为一组元区块,其中每一个元区块为最小的擦除单位。在本说明书中,术语“元区块”和“区块”同义,其用于定义在系统级处媒体管理的最小擦除单位,且术语“最小擦除单位”或MEU则用于表示快闪存储器的最小擦除单位。
连接复数个最小擦除单位(MEU)以形成一元区块为最大化编程速度和擦除速度,可利用并行度(parallelism)尽可能地将位于多个MEU中的多个信息页排列成会被并行编程,且将多个MEU排列成会被并行擦除。
在快闪存储器中,页为可在单一操作中一起被编程的复数个存储器单元的集合。一页可包含一个或一个以上扇区。另外,一存储器阵列可被分割成一个以上平面,其中一平面内每次仅有一个MEU会被编程或擦除。最后,所述平面可能分布于一个或一个以上存储器芯片之中。
在快闪存储器中,所述MEU可能包含一个或一个以上页。快闪存储器芯片内的复数个MEU可被组织于复数个平面内。因为可同时编程或擦除来自每一平面中的一个MEU,所以从每一平面中选出一个MEU有利于形成一多重MEU元区块(参见下文图5B)。
图5A说明连接不同平面的最小擦除单位所构成的元区块。每一元区块(例如MB0、MB1、…)均由来自存储器系统的不同平面的复数个MEU所构成,其中所述不同平面可能分布于一个或一个以上芯片中。图2中所示的元区块连接管理器170针对每一元区块管理MEU的连接。每一元区块均在初始的格式化过程期间进行配置,且在系统的整个寿命期间保持其构成MEU,除非所述MEU中的一者受损。
图5B说明一个实施例,其中从每一平面中选出一个最小擦除单位(MEU)以连接成一元区块。
图5C说明另一实施例,其中从每一平面中选出一个以上MEU以连接成一元区块。在另一实施例中,可从每一平面中选出一个以上MEU以形成一超级MEU。举例而言,一超级MEU可能由两个MEU所形成。在此情况中,其可能需要一次以上通过以进行读取或写入操作。
由Carlos Gonzales等人于与本发明同一天申请的共同待决且共同拥有的美国专利申请案,标题为“Adaptive Deterministic Grouping of Blocks into Multi-Block Structures”之中也揭示将复数个MEU连接和再连接成元区块。所述共同待决的申请案的全部揭示内容以引用的方式并入本文中。
元区块管理图6为元区块管理系统被建构于控制器和快闪存储器中时的示意性方框图。所述元区块管理系统包含建构于控制器100中的各种功能模块,并将各种控制数据(包括目录数据)保留在分级地分布于快闪存储器200和控制器RAM 130中的表格和列表中。建构于控制器100中的功能模块包括一接口模块110、一逻辑到物理地址转换模块140、一更新区块管理模块150、一擦除区块管理模块160和一元区块连接管理器170。
接口110使元区块管理系统与主机系统对接。逻辑到物理地址转换模块140将来自主机的逻辑地址映射到物理存储器地址。更新区块管理模块150在供给定逻辑数据群组使用的存储器中管理数据更新操作。擦除区块管理器160管理元区块的擦除操作,并管理其配置以存储新信息。元区块连接管理器170管理复数个扇区的最小可擦除区块的子群组的连接,以构成一给定的元区块。这些模块将在其个别的章节中作详细描述。
在操作期间,元区块管理系统产生并配合控制数据(例如地址、控制与状态信息)来工作。因为大部分控制数据倾向于为频繁改变的小尺寸数据,所以其并不容易存储且很难有效地保留在具有大区块结构的快闪存储器中。采用分级且分布式方案将较静态的控制数据存储于非易失性快闪存储器中,同时将数量较少变化较大的控制数据置于控制器RAM中,以供更有效地更新与访问。如果电源关闭或故障,那么所述方案允许通过在非易失性存储器中扫描小型的控制数据组而在非易失性控制器RAM中快速地重建控制数据。因为本发明限制与一给定逻辑数据群组的可能活动相关联的区块数,所以此作法是可能的。以此方式,可约束扫描。此外,控制数据中需要持久的部分存储于可逐个扇区进行更新的非易失性元区块中,每次更新会产生一新扇区,所述新扇区被记录以取代先前的扇区。针对控制数据采用扇区索引方案以追踪元区块中逐个扇区的更新。
非易失性快闪存储器200存储非常静态的庞大控制数据。其包括群组地址表(GAT)210、混乱区块索引(CBI)220、已擦除区块列表(EBL)230和MAP 240。GAT 210追踪逻辑扇区群组与其对应的元区块之间的映射。除非更新,否则所述映射不会改变。CBI 220追踪更新期间逻辑上非循序扇区的映射。EBL 230追踪已被擦除的元区块集区。MAP 240为一位图,其展示快闪存储器中所有元区块的擦除状态。
易失性控制器RAM 130存储频繁改变且被访问的一小部分控制数据。其包含一配置区块列表(ABL)134和一已清除区块列表(CBL)136。ABL 134追踪元区块的配置,用于记录更新数据,而CBL 136则追踪已被解除配置且被擦除的元区块。在优选实施例中,RAM 130起供存储于快闪存储器200中的控制数据使用的高速缓冲存储器的作用。
更新区块管理器更新区块管理器150(图示于图2中)处理逻辑群组的更新。根据本发明的一个方面,每一经过的更新的逻辑扇区群组均配置一用于记录更新数据的专用更新元区块。在优选实施例中,逻辑群组的一个或一个以上扇区的任何程序段将被记录于更新区块中。更新区块可设法以循序次序或非循序(也称为混乱)次序接收已更新的数据。混乱更新区块可在逻辑群组内以任意次序来更新扇区数据,且具有任意重复的个别扇区。明确地说,循序更新区块可变为无需更新区块,而不需要再配置任何的数据扇区。混乱数据更新不需要任何预定的区块配置;可在任何逻辑地址处自动进行非循序写入。因此,与现有技术系统不同的是,不必特别处理逻辑群组的各个更新程序段究竟是逻辑循序次序还是非循序次序。通用的更新区块将简单地用于以主机所要求的次序来记录各个程序段。举例而言,即使主机系统数据或系统控制数据倾向于以混乱方式进行更新,仍然不需要以不同于具有主机用户数据的区域的方式来处理对应于主机系统数据的逻辑地址空间的区域。
一完整逻辑扇区群组的数据优选以逻辑上循序次序存储于单一元区块中。以此方式,可预定义指向所存储的逻辑扇区的索引。当元区块以预定义的次序存储一给定逻辑群组的所有扇区时,其被称为“完全一致”。就更新区块而言,当其最后以逻辑上循序次序补满更新数据后,接着所述更新区块将变成一已更新的完整元区块,其易于取代原始元区块。另一方面,如果所述更新区块以逻辑上不同于完全一致区块的循序来补满更新数据,那么所述更新区块为一非循序或混乱更新区块,且必须进一步处理失序的程序段,以使最后以与完全一致区块相同的次序来存储逻辑群组的更新数据。在优选情况中,在单一元区块中其处于逻辑上循序次序。进一步的处理包括将更新区块中的已更新扇区和原始区块中的未改变扇区合并到另一更新元区块中。接着,已合并的更新区块将处于逻辑上循序次序,且可用于取代原始区块。在某些预定条件下,在合并处理之前进行一个或一个以上压缩处理。所述压缩处理仅将混乱更新区块的扇区重新记录到一取代的混乱更新区块中,同时对同一逻辑扇区进行后续更新以删除已经过时的任何备份逻辑扇区。
所述更新方案允许同时允许多个更新线程,直到预定义的最大值为止。每一线程均为一逻辑群组,其使用其专用更新元区块来进行更新。
循序数据更新当首先更新属于一逻辑群组的数据时,配置一元区块,且所述元区块专用作供逻辑群组的更新数据使用的更新区块。当从主机接收到一命令时,配置所述更新区块,用以写入逻辑群组的一个或一个以上扇区的程序段,其中有一现有元区块已完全一致地存储其所有的扇区。对于第一次主机写入操作而言,将一第一数据程序段记录于更新区块中。因为每次主机写入均为具有连续逻辑地址的一个或一个以上扇区的程序段,所以本质上所述第一次更新必定为循序的。在随后的主机写入中,按照接收自主机的次序将相同逻辑群组内的复数个更新程序段记录于所述更新区块中。一区块继续被安排成一循序更新区块,而相关逻辑群组内由主机更新的扇区仍保持逻辑上循序状态。此逻辑群组中已更新的所有扇区均被写入到此循序的更新区块中,直到所述区块被关闭或被转换成混乱更新区块为止。
图7A说明进行两次单独的主机写入操作而以循序次序被写入一循序更新区块的一逻辑群组中的复数个扇区的实例,同时所述逻辑群组的原始区块中的对应扇区变为过时。在主机写入操作#1中,正在更新逻辑扇区LS5-LS8中的数据。已更新的数据LS5′-LS8′被记录于新配置的专用更新区块中。
为方便起见,逻辑群组中待更新的第一扇区被记录在始于第一物理扇区位置处的专用更新区块中。一般而言,待更新的第一逻辑扇区并不必为所述群组的逻辑第一扇区,且所述逻辑群组的起点与所述更新区块的起点之间可能会有偏移。此偏移称为页标签,如前面配合图3A所描述。随后的扇区以逻辑上循序次序进行更新。当写入逻辑群组的最后一扇区后,群组地址回绕,并对所述群组的第一扇区继续进行写入序列。
在主机写入操作#2中,正在更新逻辑扇区LS9-LS12中的数据的程序段。已更新的数据LS9′-LS12′被记录于直接跟在上次写入结束处后面的位置中的专用更新区块中。可发现,两次主机写入的方式是以逻辑上循序次序(即,LS5′-LS12′)将更新数据记录在更新区块中。所述更新区块被视为一循序更新区块,因为其已按照逻辑上循序次序被填补。记录于所述更新区块中的更新资料舍弃原始区块中对应的数据。
混乱数据更新当相关逻辑群组内由主机更新的任何扇区逻辑上为非循序时,对现有的循序更新区块开始混乱更新区块管理。混乱更新区块为一数据更新区块形式,其中可以任何次序来更新一相关逻辑群组内的逻辑扇区且具有任何重复数。当主机以逻辑非循序的方式将一扇区写入被更新的逻辑群组内的先前已被写入的扇区中时,将一循序更新区块转换成一混乱更新区块。此逻辑群组中随后被更新的所有扇区被写入所述混乱更新区块中下一个可用的扇区位置中,而不管其逻辑扇区地址位于所述群组内何处。
图7B说明作为五次单独主机写入操作的结果而以混乱次序被写入一混乱更新区块的一逻辑群组中的多个扇区的实例,同时所述逻辑群组的原始区块中已被取代的扇区以及所述混乱更新区块中已备份的扇区变为过时。在主机写入操作#1中,更新存储于一原始元区块中的一给定逻辑群组的逻辑扇区LS10-LS11。已更新的逻辑扇区LS10′-LS11′存储于新配置的更新区块中。此时,所述更新区块为一循序更新区块。在主机写入操作#2中,将逻辑扇区LS5-LS6更新为逻辑扇区LS5′-LS6′,并将其记录于所述更新区块中紧跟在上次写入面的位置中。此操作将更新区块从循序更新区块转换成一混乱更新区块。在主机写入操作#3中,再度更新逻辑扇区LS10,并将其作为LS10″记录于所述更新区块的下一个位置中。此时,更新区块中的LS10″取代先前记录中的LS10′,接着便取代原始区块中的LS10。在主机写入操作#4中,再度更新逻辑扇区LS10中的数据,并将其作为LS10″记录于更新区块的下一个位置中。因此,LS10为目前最新且对于逻辑扇区LS10是唯一有效的数据。在主机写入操作#5中,更新逻辑扇区LS30中的数据,并将其作为LS30′记录于更新区块中。因此,所述实例说明可以任何次序以及任何重复数将一逻辑群组内的扇区写入一混乱更新区块中。
强制循序更新图8说明作为两次具有不连续逻辑地址的单独主机写入操作的结果而以循序次序被写入一循序更新区块的一逻辑群组中的多个扇区的实例。在主机写入#1中,逻辑扇区LS5-LS8中的更新数据作为LS5′-LS8′被记录于一专用更新区块中。在主机写入#2中,逻辑扇区LS14-LS16中的更新数据作为LS14′-LS16′被记录于上次写入面的更新区块中。然而,在LS8与LS14之间有地址跳跃,而且主机写入#2通常会使更新区块变成非循序。因为地址跳跃并不大,所以一个选项为在执行主机写入#2之前首先从原始区块将中间扇区的数据复制到更新区块来执行填补操作(#2A)。以此方式,可保留所述更新区块的循序性质。
图9为根据本发明一通用实施例说明由更新区块管理器用于更新逻辑数据群组的处理的流程图。所述更新处理包含以下步骤步骤260存储器被组织成复数个区块,每一区块均被分割成可一起擦除的复数个存储器单位,每一存储器单位用于存储一逻辑数据单位。
步骤262数据被分割成复数个逻辑群组,每一逻辑群组均被分割成复数个逻辑单位。
步骤264在标准情况中,根据第一种规定的次序,优选以逻辑上循序次序,将一逻辑群组的所有逻辑单位存储于一原始区块的存储器单位中。以此方式,可知道用于访问所述区块中所述个别逻辑单位的索引。
步骤270对于一给定的逻辑数据群组(例如,LGx)而言,要求更新LGx内的一逻辑单位。(逻辑单位更新作为一实例给出。一般而言,所述更新将为LGx内一个或一个以上连续逻辑单位的程序段。)步骤272所要求的更新逻辑单位将被存储于一第二区块中,所述第二区块专门用于记录LGx的更新。记录次序依照第二次序,通常为要求所述更新的次序。本发明的一个特征允许在初始时将一更新区块设置成通用以按照逻辑上循序或混乱的次序来记录数据。所以,取决于第二次序,第二区块可为循序区块或混乱区块。
步骤274第二区块继续如步骤270的处理循环般地要求记录逻辑单位。当出现预定的关闭条件时,第二区块将关闭以接收另外的更新。在所述情况中,所述处理进入步骤276。
步骤276确定已关闭的第二区块是否以与原始区块类似的次序来记录其更新逻辑单位。当两个区块记录逻辑单位仅相差一页标签时,所述两个区块被认为具有类似的次序,如配合图3A中所描述。如果所述两个区块具有类似次序,那么所述处理进入步骤280,否则需要在步骤290中执行某种废弃项目收集(garbage collection)。
步骤280因为第二区块具有与第一区块相同的次序,所以其用于取代原始的第一区块。接着所述更新处理在步骤299处结束。
步骤290从第二区块(更新区块)和第一区块(原始区块)中搜集所述给定逻辑群组的每一逻辑单位的最新版本。接着,将所述给定逻辑群组的已合并的逻辑单位以与第一区块类似的次序写入一第三区块中。
步骤292因为第三区块(已合并的区块)具有与第一区块类似的次序,所以其用于取代原始的第一区块。接着所述更新处理在步骤299处结束。
步骤299当封闭处理产生一完全一致的更新区块时,其成为所述给定逻辑群组的新标准区块。将终止所述逻辑群组的更新线程。
图10为根据本发明一优选实施例说明由更新区块管理器用于更新逻辑数据群组的处理的流程图。所述更新处理包含以下步骤步骤310对于一给定的逻辑数据群组(例如,LGx)而言,要求更新LGx内的一逻辑扇区。(扇区更新作为一实例给出。一般而言,所述更新将为LGx内一个或一个以上连续逻辑扇区的程序段。)步骤312如果尚未存在专用于LGx的更新区块,那么进入步骤410以开始针对所述逻辑群组执行新更新线程。此步骤将通过配置专用于记录逻辑群组的更新数据的更新区块而完成。如果已经有一更新区块开放,那么进入步骤314以开始将所述更新扇区记录于所述更新区块中。
步骤314如果当前的更新区块已经混乱(即,非循序),那么径行进入步骤510以将所要求的更新扇区记录于所述混乱更新区块中。如果当前的更新区块为循序的,那么进入步骤316以处理一循序更新区块。
步骤316本发明的一个特征允许在初始时将一更新区块设置成通用以按照逻辑上循序或混乱的次序来记录数据。然而,因为所述逻辑群组最终将其数据以逻辑上循序次序存储于一元区块中,所以需要尽可能保持所述更新区块的循序状态。接着,当关闭一更新区块以不再进行进一步更新时,因为不需要进行废弃项目收集,所以将需要较少处理。
因此,确定所要求的更新是否将遵照所述更新区块当前的循序次序。如果所述更新循序地遵照,那么进入步骤510以执行循序更新,且所述更新区块将保持循序状态。另一方面,如果所述更新未循序地遵照(混乱更新),那么在不发生其它动作的情况下,其将使所述循序更新区块转换成一混乱更新区块。
在一个实施例中,不会采取任何更多动作来挽救此情况,且所述处理直接进入步骤370,此处允许进行所述更新以将所述更新区块转换成混乱更新区块。
可选强制循序处理在另一实施例中,尽可能依照即将进行的混乱更新来视情况执行一强制循序处理步骤320,以保留循序更新区块。存在两种情况,其两者均需要从原始区块中复制丢失的扇区,以维持记录于所述更新区块中的逻辑扇区的循序次序。第一种情况为所述更新产生一短距地址跳跃。第二种情况为提早封闭一更新区块以保持其循序状态。所述强制循序处理步骤320包含以下子步骤步骤330如果所述更新产生一不大于预定量CB的逻辑地址跳跃,那么所述处理进入步骤350中的强制循序更新处理,否则所述处理进入步骤340以考虑其是否具有强制循序关闭的资格。
步骤340如果未被填充的物理扇区的数目超过预定的设计参数CC(其标准值为更新区块的大小的一半),那么所述更新区块很少被用到且将不会被提早关闭。所述处理进入步骤370且所述更新区块将变成混乱的。另一方面,如果所述更新区块被充分填充,那么其被认为已被充分利用,且因此直接进入步骤360以便强制循序封闭。
步骤350强制循序更新允许当前的循序更新区块保持循序状态,只要所述地址跳跃不超过预定量CB即可。基本上,拷贝更新区块的关联原始区块中的扇区来填补所述地址跳跃所跨越的间隙。因此,在进入步骤510之前将利用中间地址中的数据来填补循序更新区块,以循序地记录当前的更新。
步骤360如果当前的循序更新区块已充分被填充,那么强制循序封闭允许关闭当前的循序更新区块,而不是通过即将进行的混乱更新将其转换成一混乱更新区块。混乱或非循序更新被定义成一具有未被上述地址跳跃例外涵盖的正向地址转变、反向地址转变或地址重复使用的更新。为防止一循序更新区块被一混乱更新转换,可通过复制更新区块的关联原始部份过时区块中的扇区来填充更新区块中未被写入的扇区位置。接着,所述原始区块便完全过时并且可被擦除。现在,当前的更新区块具有满载的逻辑扇区集,且接着被封闭形成一完全一致的元区块,用以取代原始元区块。接着所述处理进入步骤430,以在正确的位置中配置一新的更新区块,用以接受步骤310中首先要求的即将进行的扇区更新的记录。
转换成混乱更新区块步骤370当即将进行的更新并非循序次序且视情况并不符合强制循序条件,当所述处理进入步骤510时,可通过允许将即将进行的更新扇区(具有非循序的地址)记录于更新区块中,来将所述循序更新区块转换成一混乱更新区块。如果存在最大数目的混乱更新区块,那么必需在允许进行转换之前关闭最近最少被访问的混乱更新区块,从而防止超过最大数目的混乱更新区块。识别最近最少被访问的混乱更新区块的方式与步骤420中所述的一般情况相同,只不过仅限于混乱更新区块。此时可通过如步骤550所述进行合并来实现关闭混乱更新区块。
在系统条件限制下配置新的更新区块步骤410将一擦除元区块配置为一更新区块的处理始于确定是否超过预定系统限制。归因于有限的资源,所述存储器管理系统通常允许同时存在预定的最大更新区块数目CA。此限制为循序更新区块与混乱更新区块的总和,且为一设计参数。在一优选实施例中,举例而言,所述限制为最大8个更新区块。另外,归因于对系统资源需求较高,可同时开放的混乱更新区块的最大数目同样会有对应的预定限制(例如,4个)。
因此,当已经配置CA个更新区块时,那么只有在关闭现有已配置的更新区块之后才可能满足下次配置的要求。所述处理进入步骤420。当开放更新区块的数目小于CA时,所述处理直接进入步骤430。
步骤420如果超过最大更新区块数目CA,那么关闭最近最少被访问的更新区块,并执行废弃项目收集。最近最少被存取的更新区块被识别为与最近最少被访问的逻辑区块相关联的更新区块。出于确定最近最少被访问的区块的目的,访问包括写入和视情况读取逻辑扇区。依照访问次序来保存开放更新区块的列表;初始时,给定没有任何访问次序。当更新区块为循序的时,更新区块的关闭遵照与步骤360和步骤530中所述处理类似的处理;当更新区块为混乱的时,则遵照与步骤540所述处理类似的处理。所述关闭产生空间以供在步骤430中配置新的更新区块。
步骤430通过配置一新的元区块作为所述给定逻辑群组LGx专用的更新区块来满足配置要求。接着所述处理进入步骤510。
将更新数据记录于更新区块中步骤510将所要求的更新扇区记录到更新区块中下一个可用物理位置中。接着,所述处理进入步骤520,以确定所述更新区块是否可以封闭。
更新区块封闭步骤520如果所述更新区块仍具有空间以接受额外更新,那么进入步骤570。否则进入步骤522以封闭所述更新区块。当当前所要求的写入试图写入的逻辑扇区多于区块所拥有的空间时,有两种可能的实施方式来填充一更新区块。在第一种实施方式中,将写入要求分成两部分,其中第一部分一直写到所述区块的最后物理扇区为止。接着关闭所述区块,且写入的第二部分将被视为下一个要求的写入。在另一种实施方式中,保留所要求的写入,而所述区块填补其剩余的扇区然后关闭。所要求的写入将被视为下一个要求的写入。
步骤522如果更新区块为循序的,那么进入步骤530以进行循序关闭。如果更新区块为混乱的,那么进行步骤540以进行混乱关闭。
循序更新区块封闭步骤530因为更新区块为循序的且被完全填充,所以其中所存储的逻辑群组为完全一致的。所述元区块为完全一致的且取代原始元区块。此时,原始区块完全过时且可被擦除。接着,所述处理进入步骤570,结束所述给定逻辑群组的更新线程。
混乱更新区块封闭步骤540因为更新区块被非循序地填充,且可能多次更新部分的逻辑扇区,所以执行废弃项目收集以挽救其中的有效数据。混乱更新区块将被压缩或合并。在步骤542中将确定要执行哪一处理。
步骤542执行压缩或合并将取决于更新区块的老化情形。如果一逻辑扇区被多次更新,那么其逻辑地址会高度老化。在更新区块中将记录相同逻辑扇区的多重版本,但只有最后被记录的版本是所述逻辑扇区的有效版本。在含有具有多重版本的逻辑扇区的更新区块中,不同逻辑扇区的数目将远少于逻辑群组的数目。
在优选实施例中,当更新区块中不同逻辑扇区的数目超过预定的设计参数CD(其标准值为一逻辑群组的大小的一半)时,封闭处理将在步骤550中执行合并,否则所述处理将在步骤560中执行压缩。
步骤550如果混乱更新区块将被合并,那么可用含有经合并的数据的新标准元区块来取代原始区块和更新区块。合并后,更新线程将在步骤570中结束。
步骤560如果混乱更新区块将被压缩,那么其将被带有经压缩的数据的新更新区块所取代。压缩后,经压缩的更新区块的处理将在步骤570中结束。或者,可延迟到更新区块再次被写入才进行压缩,从而可去除压缩后跟着进行合并而没有中间更新的可能性。当步骤502中出现下一个要求在LGx中进行更新时,那么可使用新更新区块来进一步更新所述给定的逻辑区块。
步骤570当封闭处理产生一完全一致的更新区块时,其变为所述给定的逻辑群组的新标准区块。逻辑群组的更新线程将终止。当封闭处理产生一新更新区块以取代现有更新区块时,将使用所述新更新区块来记录针对所述给定的逻辑群组所要求的下次更新。当一更新区块未被封闭时,所述处理将在步骤310中出现下一个要求在LGx中进行更新时继续。
从上述的处理可以看出,当关闭一混乱更新区块时,其中所记录的更新数据被进一步处理。明确地说,其有效数据会经过废弃项目收集处理,可能是进行压缩处理而被收集到另一混乱区块中,或是与其关联原始区块进行合并处理以形成新的标准循序区块。
图11A为更详细地说明关闭图10中所示的混乱更新区块的合并处理的流程图。混乱更新区块合并为在封闭更新区块时(例如当更新区块因其最后的物理扇区位置被写入而全部填满时)所执行的两种可能处理中的一者。当被写入所述区块中的不同逻辑扇区的数目超过预定的设计参数CD时选择合并。图10中所示的合并处理步骤550包含以下子步骤步骤551当要关闭一混乱更新区块时,配置一取代它的新元区块。
步骤552在所述混乱更新区块和其关联原始区块之中搜集每一逻辑扇区的最新版本,忽略所有过时的扇区。
步骤554以逻辑上循序的次序将已搜集到的有效扇区记录于新元区块中以形成一完全一致的区块,即,形成一具有按照循序次序被记录的一逻辑群组的所有逻辑扇区的区块。
步骤556以新的完全一致的区块来取代原始区块。
步骤558擦除已封闭的更新区块和原始区块。
图11B为更详细地说明关闭图10中所示的混乱更新区块的压缩处理的流程图。当被写入所述区块中的不同逻辑扇区的数目低于预定的设计参数CD时选择压缩。图10中所示的压缩处理步骤560包含以下子步骤步骤561当要压缩一混乱更新区块时,配置一取代它的新元区块。
步骤562在待压缩的现有混乱更新区块中搜集每一逻辑扇区的最新版本。
步骤564将已搜集到的扇区记录于新更新区块中以形成一具有经压缩的扇区的新更新区块。
步骤566利用所述具有经压缩的扇区的新更新区块来取代现有更新区块。
步骤568擦除已封闭的更新区块。
逻辑与元区块状态图12A说明一逻辑群组的所有可能状态,以及在各种操作下所述状态之间可能的转变。
图12B为列出一逻辑群组的可能状态的表格。所述逻辑群组状态的定义如下1.完全一致所述逻辑群组中的所有逻辑扇区已按照逻辑上循序的次序被写入单一元区块中,其可能使用页标签回绕方式。
2.未被写入所述逻辑群组中没有任何逻辑扇区已被写入。所述逻辑群组在一群组地址表中被标记为未被写入且没有任何已配置的元区块。其响应针对此群组内每个扇区的主机读取而送回一预定义的数据图案。
3.循序更新所述逻辑群组内部分扇区已按照逻辑上循序的次序被写入一元区块中,其可能使用页标签,使得其取代来自所述群组的任何先前的完全一致状态的对应逻辑扇区。
4.混乱更新所述逻辑群组内部分扇区已按照逻辑上非循序的次序被写入一元区块中,其可能会使用页标签,使得其取代来自所述群组的任何先前的完全一致状态的对应逻辑扇区。所述群组内的一扇区可能被写入一次以上,其最新的版本取代所有先前的版本。
图13A说明一元区块的所有可能状态,以及在各种操作下所述状态间可能的转变。
图13B为列出一元区块的可能状态的表格。所述元区块状态的定义如下1.已擦除所述元区块中的所有扇区均已被擦除。
2.循序更新所述元区块已被部分写入,其扇区呈逻辑上循序的次序,其可能使用页标签。所有扇区均属于相同的逻辑群组。
3.混乱更新所述元区块已被部分或完全写入,其扇区呈逻辑上非循序的次序。任何扇区均可被写入一次以上。所有扇区均属于相同的逻辑群组。
4.完全一致所述元区块已按照逻辑上循序的次序被完全写入,其可能使用页标签。
5.原始所述元区块为先前完全一致的元区块,但至少一个扇区已经因主机数据更新而变为过时。
图14(A)-14(J)为展示对逻辑群组的状态以及物理元区块所进行的各项操作的效果的状态图。
图14(A)展示对应于第一次写入操作的逻辑群组和元区块转变的状态图。主机以逻辑上循序的次序将一先前未被写入的逻辑群组的一个或一个以上扇区写入一新配置的已擦除元区块中。所述逻辑群组与所述元区块进入循序更新状态中。
图14(B)展示对应于第一次完全一致操作的逻辑群组和元区块转变的状态图。一先前未被写入的循序更新逻辑群组在所有扇区均被主机循序写入时变为完全一致。如果所述卡通过用预定义的数据图案来填充剩余的未被写入扇区以填满所述群组,那么也可能发生转变。所述元区块变为完全一致。
图14(C)展示对应于第一次混乱操作的逻辑群组和元区块转变的状态图。一先前未被写入的循序更新逻辑群组在至少一个扇区已被主机非循序写入时变为混乱。
图14(D)展示对应于第一次压缩操作的逻辑群组和元区块转变的状态图。一先前未被写入的混乱更新逻辑群组内的所有有效扇区均从旧的区块被复制到一新的混乱元区块,接着擦除所述旧的区块。
图14(E)展示对应于第一次合并操作的逻辑群组和元区块转变的状态图。一先前未被写入的混乱更新逻辑群组内的所有有效扇区均从旧的混乱区块中被移出,以按照逻辑上循序的次序来填充一新配置的已擦除区块。未被主机写入的扇区用预定义的数据图案来填充。接着擦除旧的混乱区块。
图14(F)展示对应于一循序写入操作的逻辑群组和元区块转变的状态图。主机以逻辑上循序的次序将一完全一致的逻辑群组的一个或一个以上扇区写入一新配置的已擦除元区块中。所述逻辑群组和所述元区块进入循序更新状态中。所述先前完全一致的元区块变为一原始元区块。
图14(G)展示对应于一循序填充操作的逻辑群组和元区块转变的状态图。一循序更新逻辑群组在其所有扇区均被主机循序写入时变为完全一致。在用来自原始区块的有效扇区填充循序更新逻辑群组以使其变成完全一致时的废弃项目收集期间也会发生此转变,其后擦除原始区块。
图14(H)展示对应于一非循序写入操作的逻辑群组和元区块转变的状态图。一循序更新逻辑群组在至少一个扇区被主机非循序写入时变为混乱。所述非循序扇区写入会使得更新区块或对应的原始区块中的有效扇区变为过时。
图14(I)展示对应于一压缩操作的逻辑群组和元区块转变的状态图。一混乱更新逻辑群组内的所有有效扇区均从旧的区块被复制到一新的混乱元区块中,接着擦除所述旧的区块。所述原始区块未受到影响。
图14(J)展示对应于一合并操作的逻辑群组和元区块转变的状态图。一混乱更新逻辑群组内的所有有效扇区均从旧的混乱区块和原始区块被复制,以按照逻辑上循序的次序来填充一新配置的已擦除区块。接着擦除旧的混乱区块和原始区块。
更新区块追踪和管理图15说明用于追踪已开放和已关闭的更新区块和已擦除区块以进行配置的配置区块列表(ABL)的结构的优选实施例。所述配置区块列表(ABL)610保留于控制器RAM130中,以允许管理已擦除区块的配置、管理已配置的更新区块、管理关联区块和控制结构,并启用正确的逻辑到物理地址转换。在优选实施例中,所述ABL包括一份已擦除区块的列表、一份开放更新区块列表614和一份已关闭更新区块列表616。
开放更新区块列表614为ABL中具有开放更新区块属性的区块登录项的集合。所述开放更新区块列表针对当前开放的每一数据更新区块均具有一个登录项。每一登录项保留以下信息LG为当前更新元区块专用的逻辑群组地址。循序/混乱为一状态,其指示所述更新区块所填充的究竟是循序的还是混乱的更新数据。MB为更新区块的元区块地址。页标签为被记录在更新区块的第一物理地址处的起始逻辑扇区。已写入的扇区数指示当前已被写入更新区块中的扇区数目。MB0为关联原始区块的元区块地址。页标签0为关联原始区块的页标签。
已关闭更新区块列表616为配置区块列表(ABL)的子集。其为ABL中具有已关闭更新区块属性的区块登录项的集合。所述已关闭更新区块列表针对已关闭的每一数据更新区块均具有一个登录项,但其登录项并未在一逻辑到主物理目录中被更新。每一登录项保留以下信息LG为当前更新区块专用的逻辑群组地址。MB为更新区块的元区块地址。页标签为被记录在更新区块的第一物理位置处的起始逻辑扇区。MB0为关联原始区块的元区块地址。
混乱区块索引循序更新区块以逻辑上循序的次序来存储数据,因此可轻易地找出所述区块中的任何逻辑扇区。混乱更新区块以失序的方式来存储其逻辑扇区,且可能存储一逻辑扇区的多重更新代。此处必须保存额外的信息,以便追踪每一有效逻辑扇区在混乱更新区块中的所在位置。
在优选实施例中,混乱区块索引数据结构允许追踪和快速访问混乱区块中的所有有效扇区。混乱区块索引独立地管理小型的逻辑地址空间区域,并且有效地处理系统数据和用户数据热区。索引数据结构基本上可将索引信息保存在具有不频繁更新要求的快闪存储器中,使得不会严重影响性能。另一方面,混乱区块中最近被写入的扇区的列表保留在控制器RAM中的混乱扇区列表中。另外,来自快闪存储器的索引信息的高速缓存保留在控制器RAM中,以便最小化供地址转换用的快闪扇区访问次数。每一混乱区块的索引均被存储于快闪存储器的混乱区块索引(CBI)扇区中。
图16A说明混乱区块索引(CBI)扇区的数据字段。混乱区块索引扇区(CBI扇区)含有针对逻辑群组中被映射到混乱更新区块的每一扇区的索引,其定义逻辑群组的每一扇区在混乱更新区块或其关联原始区块内的位置。CBI扇区包括一混乱区块索引字段,其用于追踪混乱区块内的有效扇区;一混乱区块信息字段,其用于追踪混乱区块的地址参数;和一扇区索引字段,其用于追踪存储CBI扇区的元区块(CBI区块)内的有效CBI扇区。
图16B说明被记录于专用元区块中的混乱区块索引(CBI)扇区的实例。所述专用元区块将被称为CBI区块620。当更新一CBI扇区时,其被写入CBI区块620中的下一个可用物理扇区位置中。因此在所述CBI区块中可能存在一CBI扇区的多重拷贝,其中只有最后被写入的拷贝有效。举例而言,逻辑群组LG1的CBI扇区已被更新三次,其中最新的版本为有效的版本。CBI区块中的每一有效扇区的位置可用所述区块中最后被写入的CBI扇区中的索引集来识别。在此实例中,所述区块中最后被写入的CBI扇区为LG136的CBI扇区,且其索引集为取代所有先前索引集的有效索引集。当CBI区块最终完全充满CBI扇区后,通过将所有有效扇区重新写入一新的区块位置而在一控制写入操作期间压缩所述区块。接着擦除所述满载的区块。
CBI扇区内的混乱区块索引字段含有针对逻辑群组或子群组内被映射到混乱更新区块的每一逻辑扇区的索引登录项。每一索引登录项表示混乱更新区块内对应逻辑扇区的有效数据所在的偏移。预留的索引值指示在混乱更新区块中不存在所述逻辑扇区的任何有效数据,而关联原始区块中的对应扇区有效。部分混乱区块索引字段登录项的高速缓存保留在控制器RAM中。
CBI扇区内的混乱区块信息字段含有针对存在于系统中的每一混乱更新区块的一个登录项,其记录所述区块的地址参数信息。此字段中的信息仅在CBI区块中最后被写入的扇区中有效。此信息还存在于RAM的数据结构中。
每一混乱更新区块的登录项均包括三个地址参数。第一个参数为与混乱更新区块相关联的逻辑群组的逻辑地址(或逻辑群组号码)。第二个参数为混乱更新区块的元区块地址。第三个参数为混乱更新区块中最后被写入的扇区的物理地址偏移。偏移信息设定初始化期间混乱更新区块的扫描起始点,用以在RAM中重建数据结构。
扇区索引字段含有针对CBI区块中每一有效CBI扇区的登录项。其定义CBI区块内与每一容许的混乱更新区块有关的最近被写入的CBI扇区所在的偏移。索引中一偏移的预留值指示不存在容许的混乱更新区块。
图16C为说明访问正在进行混乱更新的给定逻辑群组的一逻辑扇区的数据的流程图。在更新处理期间,更新数据被记录于混乱更新区块中,而未改变的数据仍存在于与逻辑群组相关联的原始元区块中。在混乱更新下访问逻辑群组的一逻辑扇区的处理如下步骤650开始找出一给定逻辑群组的一给定逻辑扇区。
步骤652在CBI区块中找出最后被写入的CBI扇区。
步骤654通过查找最后被写入的CBI扇区的混乱区块信息字段来找出与给定逻辑群组相关联的混乱更新区块或原始区块。此步骤可在步骤662之前的任何时间处执行。
步骤658如果最后被写入的CBI扇区与给定的逻辑群组有关,那么便找出CBI扇区。进入步骤662,否则进入步骤660。
步骤660通过查找最后被写入的CBI扇区的扇区索引字段来找出给定逻辑群组的CBI扇区。
步骤662通过查找已找到的CBI扇区的混乱区块索引字段以在混乱区块或原始区块中找出给定的逻辑扇区。
图16D为根据一替代实施例说明访问正在进行混乱更新的给定逻辑群组的一逻辑扇区的数据的流程图,其中逻辑群组已被分割成复数个子群组。CBI扇区的有限容量仅能追踪一预定最大的逻辑扇区数目。当逻辑群组的逻辑扇区多于单一CBI扇区所能处理者时,逻辑群组被分割成多个子群组,每一子群组均分配一CBI扇区。在一个实例中,每一CBI扇区具有足够容量来追踪由256个扇区以及多达8个混乱更新区块所组成的逻辑群组。如果逻辑群组的大小超过256个扇区,那么逻辑群组内存在一单独的CBI扇区供每一256扇区子群组来使用。在一逻辑群组内所存在的CBI扇区可供多达8个子群组使用,支持多达2048扇区大小的逻辑群组。
在优选实施例中,采用间接索引方案来帮助管理所述索引。所述扇区索引的每一登录项均具有直接和间接字段。
直接扇区索引定义CBI扇区内与特定混乱更新区块有关的所有可能CBI扇区所在的偏移。此字段中的信息仅在与特定混乱更新区块有关的最后被写入的CBI扇区中有效。索引中一偏移的预留值指示不存在所述CBI扇区,因为与混乱更新区块有关的对应逻辑子群组不存在,或因为已配置更新区块而尚未被更新。
间接扇区索引定义CBI扇区内与每一容许的混乱更新区块有关的最近被写入的CBI扇区所在的偏移。所述索引中一偏移的预留值指示不存在容许的混乱更新区块。
图16D展示在混乱更新下访问逻辑群组的一逻辑扇区的处理,其步骤如下步骤670将每一逻辑群组分割成多个子群组并分配一CBI扇区给每一子群组。
步骤680开始找出一给定逻辑群组的一给定子群组的一给定逻辑扇区。
步骤682在CBI区块中找出最后被写入的CBI扇区。
步骤684通过查找最后被写入的CBI扇区的混乱区块信息字段来找出与给定子群组相关联的混乱更新区块或原始区块。此步骤可在步骤696之前的任何时间处执行。
步骤686如果最后被写入的CBI扇区与给定逻辑群组有关,那么进入步骤691。否则进入步骤690。
步骤690通过查找最后被写入的CBI扇区的间接扇区索引字段来找出给定逻辑群组的多重CBI扇区中最后被写入的CBI扇区。
步骤691已找出与给定逻辑群组的子群组中的一个子群组相关联的至少一CBI扇区。继续。
步骤692如果所找到的CBI扇区与给定的子群组有关,那么找出给定子群组的CBI扇区。进入步骤696。否则进入步骤694。
步骤694通过查找当前所找到的CBI扇区的直接扇区索引字段来找出给定子群组的CBI扇区。
步骤696通过查找给定子群组的CBI扇区的混乱区块索引字段以在混乱区块或原始区块中找出给定逻辑扇区。
图16E说明在将每一逻辑群组分割成多个子群组的实施例中的混乱区块索引(CBI)扇区的实例和其功能。逻辑群组700初始时将其完整的数据存储于原始元区块702中。接着,逻辑群组进行更新,其配置一专用混乱更新区块704。在当前实例中,逻辑群组700被分割成复数个子群组(例如子群组A、B、C、D),每一子群组均具有256个扇区。
为在子群组B中找出第i个扇区,首先找出CBI扇区620中最后被写入的CBI扇区。最后被写入的CBI扇区的混乱区块信息字段提供地址以找出给定逻辑群组的混乱更新区块704。同时,其提供被写入混乱区块中的最后一扇区的位置。此信息在扫描索引和重建索引时有用。
如果最后被写入的CBI扇区是给定逻辑群组的四个CBI扇区中的一个CBI扇区,那么将进一步确定其是否确实为含有第i个逻辑扇区的给定子群组B中的CBI扇区。如果是,那么CBI扇区的混乱区块索引将指向元区块位置,用以存储第i个逻辑扇区的数据。扇区位置可能位于混乱更新区块704或原始区块702中。
如果最后被写入的CBI扇区是给定逻辑群组的四个CBI扇区中的一个CBI扇区但并非确实为子群组B所有,那么查找其直接扇区索引以找出子群组B的CBI扇区。一旦找出此确实的CBI扇区之后,便查找其混乱区块索引以在混乱更新区块704和原始区块702中找出第i个逻辑扇区。
如果最后被写入的CBI扇区并不是给定逻辑群组的四个CBI扇区中的任何一个,那么查找其间接扇区索引以找出四个CBI扇区中的一个CBI扇区。在图16E所示的实例中,找出子群组C的CBI扇区。接着,查找子群组C的此CBI扇区的直接扇区索引以找出子群组B的确实的CBI扇区。所述实例展示出,当查找其混乱区块索引时,发现第i个逻辑扇区并未改变且其有效数据将位于原始区块中。
类似考虑可应用于找出给定逻辑群组的子群组C中的第j个逻辑扇区。所述实例展示出最后被写入的CBI扇区并不是给定逻辑群组的四个CBI扇区中的任何一个。其间接扇区索引指向给定逻辑群组的四个CBI扇区中的一个CBI扇区。被指到的四个CBI扇区中最后被写入者同样确实为子群组C的CBI扇区。当查找其混乱更新索引时,发现到第j个逻辑扇区位于混乱更新区块704中的指定位置处。
在所述系统中,每一混乱更新区块均有一份混乱扇区列表存在于控制器RAM中。每份列表均含有一份自一相关CBI扇区在快闪存储器中最后被更新以来被写入混乱更新区块中的扇区的记录。用于一特定混乱更新区块的逻辑扇区地址的数目(其可能保留于一混乱扇区列表中)为一设计参数,其标准值为8个到16个。所述列表的最佳大小取决于其对混乱数据写入操作的额外开销的影响与初始化期间扇区扫描时间之间的取舍结果。
在系统初始化期间,必要时扫描每一混乱更新区块,以识别自其关联CBI扇区其中之一的前次更新以来被写入的有效扇区。在控制器RAM中为每一混乱更新区块构造一份混乱扇区列表。仅需要从最后被写入的CBI扇区中其混乱区块信息字段中所定义的最后扇区地址扫描每一区块。
当配置一混乱更新区块时,写入一CBI扇区,以对应於所有已更新的逻辑子群组。混乱更新区块的逻辑与物理地址均被写入所述扇区中一可用混乱区块信息字段中,而混乱区块索引字段中无登录项。在控制器RAM中开放一份混乱扇区列表。
当关闭一混乱更新区块时,写入一CBI扇区,其中从所述扇区中的混乱区块信息字段中去除所述区块的逻辑与物理地址。RAM中的对应混乱扇区列表变为不使用。
控制器RAM中的对应混乱扇区列表经过修改以包括被写入混乱更新区块的扇区的记录。当控制器RAM中的混乱扇区列表没有任何可用空间来记录被写入一混乱更新区块的其它扇区时,写入与所述列表中的扇区有关的逻辑子群组的已更新CBI扇区,并清除所述列表。
当CBI区块620满载时,将有效的CBI扇区复制到所配置的已擦除区块,并擦除先前的CBI区块。
地址表图2中所示的逻辑到物理地址转换模块140负责使主机的逻辑地址与快闪存储器中对应的物理地址产生联系。逻辑群组与物理群组(元区块)之间的映射被存储在分布于非易失性快闪存储器200和易失性但比较迅速的RAM 130(参见图1)中的表格集和复数份列表中。地址表被保存于快闪存储器中,其含有存储器系统中每个逻辑群组的元区块地址。此外,最近被写入的扇区的逻辑到物理地址记录被暂时保留在RAM中。这些易失性存储器可在开机后初始化所述系统时从快闪存储器中的区块列表和数据扇区标头中重新构造。因此,不需要频繁地更新快闪存储器中的地址表,从而使控制数据的额外开销写入操作的百分比低。
逻辑群组的地址记录的分级包括开放更新区块列表、RAM中的已关闭更新区块列表和保存在快闪存储器中的群组地址表(GAT)。
开放更新区块列表为一份位于控制器RAM中由复数个数据更新区块组成的列表,其为当前开放用来写入已更新扇区数据。当关闭一区块时,所述区块的登录项被移至已关闭更新区块列表中。已关闭更新区块列表为一份位于控制器RAM中由已被关闭的复数个数据更新区块所组成的列表。在控制写入操作期间,所述列表中登录项所组成的子集被移至群组地址表中的一扇区中。
群组地址表(GAT)为一份由存储器系统中主机数据的所有逻辑群组的元区块地址所组成的列表。GAT针对每一逻辑群组均含有一登录项,其依照逻辑地址循序排列。GAT中的第n个登录项含有地址n的逻辑群组的元区块地址。在优选实施例中,其为一份位于快闪存储器中的表格,其包含一组扇区(称为GAT扇区),其中登录项定义存储器系统中每一逻辑群组的元区块地址。GAT扇区位于快闪存储器中一个或一个以上专用控制区块(称为GAT区块)中。
图17A说明群组地址表(GAT)扇区的数据字段。举例而言,GAT扇区可能具有足够容量以容纳一组128个连续逻辑群组的GAT登录项。每一GAT扇区均包括两个组成部分,即一组GAT登录项,其供某一范围内每一逻辑群组的元区块地址使用;和一GAT扇区索引。第一组成部分含有用于找出与逻辑地址相关联的元区块的信息。第二组成部分含有用于找出GAT区块内所有有效GAT扇区的信息。每一GAT登录项均具有三个字段,即元区块号码;页标签,如先前配合图3A(iii)所定义;和旗标,其指示元区块是否已被重新连接。GAT扇区索引列出GAT区块中有效GAT扇区的位置。此索引位于每个GAT扇区中,但被下次写入GAT区块中的GAT扇区的版本取代。因此,只有最后被写入的GAT扇区中的版本有效。
图17B说明被记录于一个或一个以上GAT区块中的群组地址表(GAT)扇区的实例。GAT区块为专用于记录GAT扇区的元区块。当更新GAT扇区时,其被写入GAT区块720中的下一个可用物理扇区位置中。因此,在GAT区块中可能存在GAT扇区的多重拷贝,其中只有最后被写入的拷贝有效。举例而言,GAT扇区45已被更新至少两次,最新的版本为有效版本。GAT区块中每一有效扇区的位置可用所述区块中最后被写入的GAT扇区中的一索引集来识别。在此实例中,所述区块中最后被写入的GAT扇区为GAT扇区56,而其索引集为取代所有先前索引集的有效索引集。当GAT区块最后完全充满GAT扇区后,可通过将所有有效扇区重新写入一新的区块位置以在控制写入操作期间来压缩所述区块。接着可擦除所述满载的区块。
如前所述,GAT区块含有逻辑地址空间区域中一逻辑连续群组集的登录项。GAT区块内的GAT扇区各含有供128个连续逻辑群组使用的逻辑到物理映射信息。用于存储GAT区块所扩及的地址范围内所有逻辑群组的登录项所需要的GAT扇区数目仅占去区块中总扇区位置的一部分。因此,可通过将一GAT扇区写入区块中下一个可用的扇区位置处来更新所述GAT扇区。所有有效GAT扇区的索引和其在GAT区块中的位置均被保存在最近被写入的GAT扇区中的一索引字段中。GAT区块的总扇区中被有效GAT扇区占去的部分为一系统设计参数,其通常为25%。然而,每一GAT区块最多有64个有效的GAT扇区。在具有大逻辑容量的系统中,可能需要将GAT扇区存储于一个以上的GAT扇区中。在此情况中,每一GAT区块均与一固定范围的逻辑群组相关联。
GAT更新作为控制写入操作的一部分来执行,当ABL用完配置用的区块时触发所述GAT更新(参见图18)。所述更新与ABL填充操作和CBL净空操作同时执行。在GAT更新操作期间,一个GAT扇区利用来自己关闭更新区块列表中对应登录项的信息来更新登录项。当更新一GAT登录项后,从已关闭更新区块列表(CUBL)中去除任何对应的登录项。举例而言,可基于已关闭更新区块列表中的第一登录项来选择待更新的GAT扇区。经更新的扇区被写入GAT区块中下一个可用的扇区位置中。
当没有任何扇区位置可供一已更新的GAT扇区使用时,在控制写入操作期间发生GAT重写操作。一新的GAT区块被配置,并按照循序次序从满载的GAT区块中复制由GAT索引所定义的有效GAT扇区。接着擦除满载的GAT区块。
GAT高速缓存位于控制器RAM 130中,其为GAT扇区中128个登录项的子部分中复数个登录项的拷贝。GAT高速缓存登录项的数目为一系统设计参数,标准值为32个。每次从一GAT扇区读取一登录项时,便为相关扇区子部分产生一GAT高速缓存。可保存多个GAT高速缓存。所述数目为一设计参数,标准值为4个。可在最近最少被使用的基础上用不同扇区子部分的登录项来重写一GAT高速缓存。
已擦除元区块管理图2中所示的擦除区块管理器160使用一组列表来保存目录和系统控制信息,用以管理擦除区块。这些列表分布于控制器RAM 130和快闪存储器200中。当必须配置一已擦除元区块来存储用户数据或存储系统控制数据结构时,在保留于控制器RAM中的配置区块列表(ABL)(参见图15)中选择下一个可用的元区块号码。类似地,当一元区块在其已退役后被擦除时,其号码被加进同样保留于控制器RAM中的已清除区块列表(CBL)中。非常静态的目录和系统控制数据被存储于快闪存储器中。这些包括已擦除区块列表,以及列出快闪存储器中所有元区块的已擦除状态的位图(MAP)。所述已擦除区块列表和MAP被存储于个别的扇区中,并被记录到专用元区块(称为MAP元区块)中。这些列表分布于控制器RAM和快闪存储器中,其提供已擦除区块记录的分级,以有效地管理已擦除元区块的使用情形。
图18为说明针对使用和循环使用已擦除区块而言,控制与目录信息的分布和流动的示意性方框图。控制与目录数据保存于复数个列表中,所述列表则保留于控制器RAM130中,或保留于驻存在快闪存储器200中的MAP区块750中。
在优选实施例中,控制器RAM 130保留配置区块列表(ABL)610和已清除区块列表(CBL)740。如先前配合图15所述,配置区块列表(ABL)追踪最近被配置用于存储用户数据或存储系统控制数据结构的元区块。当需要配置一新的已擦除元区块时,在配置区块列表(ABL)中选择下一个可用的元区块号码。类似地,所述已擦除区块列表(CBL)用于追踪已被解除配置并擦除的更新元区块。ABL和CBL均保留于控制器RAM130(参见图1)中,以在追踪非常有源的更新区块时可快速访问且容易操纵。
配置区块列表(ABL)追踪一已擦除的元区块集区并将所述已擦除元区块配置成一更新区块。因此,可由一属性来描述的这些元区块中的每一者均指明其究竟是ABL即将进行的配置中的已擦除区块、开放的更新区块还是已关闭的更新区块。图18展示ABL含有已擦除ABL列表612、开放更新区块列表614和已关闭更新区块列表616。此外,与开放更新区块列表614相关联的为关联原始区块列表615。类似地,与已关闭更新区块列表相关联的为关联的已擦除原始区块列表617。如先前图15中所示,这些关联的列表分别为开放更新区块列表614和已关闭更新区块列表616的子集。已擦除ABL区块列表612、开放更新区块列表614和已关闭更新区块列表616全部为配置区块列表(ABL)610的子集,每一者中的登录项各具有对应的属性。
MAP区块750为快闪存储器200中专用于存储擦除管理记录的元区块。MAP区块存储一时间连续的复数个MAP区块扇区,每一MAP扇区均为一擦除区块管理(EBM)扇区760或一MAP扇区780。当已擦除区块已配置殆尽且在一元区块退役时循环使用时,关联的控制与目录数据优选地被包含于逻辑扇区中,所述逻辑扇区可在MAP区块中进行更新,其每一更新数据实例被记录到一新的区块扇区中。在MAP区块750中可能存在复数个EBM扇区760和复数个MAP扇区780的多重拷贝,其中只有最新的版本有效。指向所述有效MAP扇区的位置的索引被包含于EMB区块的一个字段中。在控制写入操作期间,有效的EMB扇区必定最后才被写入MAP区块中。当MAP区块750满载时,可通过将所有有效扇区重写到一新的区块位置以在控制写入操作期间将其压缩。接着擦除满载的区块。
每一EBM扇区760均含有复数份已擦除区块列表(EBL)770,所述列表为由已擦除区块群的子集的地址所组成的列表。已擦除区块列表(EBL)770可起一缓冲器的作用,其中含有已擦除元区块号码,从中可定期地取用元区块号码来重新填充ABL,并可定期地将元区块号码加入其中以重新净空CBL。EBL 770可用作缓冲器,用于作为可用区块缓冲器(ABB)772、已擦除区块缓冲器(EBB)774和已清除区块缓冲器(CBB)776。
可用区块缓冲器(ABB)722含有位于ABL 610中紧跟在前次ABL填充操作后的登录项所组成的拷贝。实际上,其为某次ABL填充操作之后ABL的备份拷贝。
已擦除区块缓冲器(EBB)774含有复数个已擦除区块地址,所述地址先前已从MAP扇区780或从CBB列表776(下文描述)传送,并且其可在ABL填充操作期间传送给ABL 610。
已清除区块缓冲器(CBB)776含有已擦除区块的地址,所述地址已在CBL净空操作期间从CBL 740传送,并且随后将被传送给MAP扇区780或EBB列表774。
所述MAP扇区780中的每一者均含有被称为MAP的位图结构。MAP针对快闪存储器中的每一元区块使用一个位来表示每一区块的擦除状态。对应于EBM扇区中的ABL、CBL或已擦除区块列表中所列的区块地址的位均不会在MAP中被设定为已擦除状态。
不含有有效数据结构且未被指定为MAP内的一已擦除区块、已擦除区块列表、ABL或CBL的任何区块均不被区块配置算法使用,且因此不可访问用于存储主机或控制数据结构。此方式提供一种简单的机制,用以从可访问的快闪存储器地址空间中排除具有缺陷位置的区块。
图18中所示的分级可有效地管理已擦除区块记录,并对存储于控制器的RAM中的区块地址列表提供完整的安全性。可不频繁地在这些区块位置列表与一个或一个以上MAP扇区780之间交换已擦除的区块登录项。可在电源关闭之后系统初始化期间,经由存储于快闪存储器中复数个扇区中的已擦除区块列表和地址转换表中的信息,并有限地扫描快闪存储器中少量被参照的数据区块,来重新构造这些列表。
用于更新已擦除元区块记录的分级所采用的算法可以下面的次序来配置已擦除区块将来自MAP区块750的区块突发在地址次序中交错来自CBL 740的区块地址突发,其反映区块被主机更新的次序。对大部分元区块大小和系统存储器容量而言,单一MAP扇区可针对系统中的所有元区块提供一位图。在此情况中,已擦除区块必定以与被记录于此MAP扇区中相同的地址次序来配置使用。
擦除区块管理操作如前所述,ABL 610列表具有可被配置使用的已擦除元区块以及最近被配置为数据更新区块的元区块的地址登录项。ABL中的实际区块地址数目介于最大上限与最小下限之间,上下限两者均为系统设计变量。制造期间被格式化的ABL登录项数目为卡类型和容量的函数。此外,ABL中的登录项数目在接近系统的寿命终点时可能会减少,因为可用的已擦除区块的数目会因为其寿命期间区块发生故障而减少。举例而言,在填充操作后,ABL中的登录项可能指明可供以下用途使用的区块。部分被写入的数据更新区块的登录项为每一区块一个登录项,其不超过同时开放的更新区块最大值的系统限制。有一到二十个登录项供可配置为数据更新区块的已擦除区块使用。四个登录项供可配置为控制区块的已擦除区块使用。
ABL填充操作当ABL 610经过配置而耗尽时,其将需要进行再填充。填充ABL的一项操作发生于控制写入操作期间。当必须配置一区块,但ABL所含的已擦除区块登录项却不足以配置为一数据更新区块或特定其它的控制数据更新区块时,触发此项操作。在控制写入期间,ABL填充操作与GAT更新操作同时进行。
在一ABL填充操作期间会发生以下动作1.保留具有当前数据更新区块的属性的ABL登录项。
2.保留具有已关闭数据更新区块的属性的ABL登录项,除非所述区块的一登录项正在同时进行的GAT更新操作中被写入,在此情况中则从ABL中去除所述登录项。
3.保留未被配置的已擦除区块的ABL登录项。
4.对ABL进行压缩,以去除因登录项移除所产生的间隙,从而保持登录项的次序。
5.通过附加来自EBB列表中下一个可用的登录项来完全填充ABL。
6.用ABL中当前的登录项来重写ABB列表。
CBL净空操作CBL为由控制器RAM中已擦除的区块地址所组成的列表,已擦除区块登录项的数目限制与ABL相同。净空CBL的一项操作发生于控制写入操作期间。因此,其与ABL填充操作/GAT更新操作、或CBI区块写入操作同时进行。在一CBL净空操作中,登录项从CBL 740中被去除并写入CBB列表776中。
MAP交换操作当EBB列表774已净空时,在控制写入操作期间可能在MAP扇区780与EBM扇区760中的擦除区块信息之间定期进行MAP交换操作。如果系统中所有已擦除元区块均被记录于EBM扇区760中,那么不存在任何MAP扇区780,且不执行任何MAP交换。在MAP交换操作期间,用于将已擦除区块馈送给EBB 774的MAP扇区被视为来源MAP扇区782。相反地,用于从CBB 776接收已擦除区块的MAP扇区则被视为目的地MAP扇区784。如果仅存在一个MAP扇区,那么其可同时起来源与目的地MAP扇区的作用,其定义如下。
在一MAP交换期间执行以下动作。
1.基于递增的指标来选择一来源MAP扇区。
2.基于不在来源MAP扇区中的第一CBB登录项中的区块地址来选择一目的地MAP扇区。
3.如CBB中相关登录项所定义,更新目的地MAP扇区,并从CBB中去除所述登录项。
4.将已更新的目的地MAP扇区写入MAP区块中,除非不存在单独的来源MAP扇区。
5.如CBB中相关登录项所定义,更新来源MAP扇区,并从CBB中移除所述登录项。
6.将CBB中剩余的登录项附加到EBB中。
7.用来源MAP扇区所定义的已擦除区块地址尽可能地填充所述EBB。
8.将已更新的来源MAP扇区写入MAP区块中。
9.将一已更新的EBM扇区写入MAP区块中。
列表管理图18展示控制与目录信息在各种列表之间的分布和流动。为方便起见,将图18中用以在所述列表的元件之间移动登录项的操作或改变登录项的属性的操作标示成下面的[A]到[O]。
当一已擦除区块被配置为一更新区块供主机数据使用时,其位于ABL中的登录项的属性从已擦除ABL区块变成开放更新区块。
当一已擦除区块被配置为一控制区块时,其位于ABL中的登录项被去除。
当产生一具有开放更新区块属性的ABL登录项时,将一关联原始区块字段加入登录项中,以记录待更新的逻辑群组的原始元区块地址。此信息从GAT获得。
当关闭一更新区块时,其位于ABL中的登录项的属性从开放更新区块变成已关闭更新区块。
当关闭一更新区块时,擦除其关联原始区块,且其位于ABL中的登录项中的关联原始区块字段的属性变成已擦除原始区块。
在一ABL填充操作期间,在相同控制写入操作期间在GAT中地址更新的任何已关闭更新区块均从ABL中去除其登录项。
在一ABL填充操作期间,当从ABL中去除一已关闭更新区块的登录项时,将其关联的已擦除原始区块的登录项移到CBL中。
当擦除一控制区块时,将其登录项加入CBL中。
当在一ABL填充操作期间,已擦除的区块登录项从EBB列表中被移到ABL,并且被赋予已擦除ABL区块的属性。
在一ABL填充操作期间修改所有相关ABL登录项之后,ABL中的区块地址取代ABB列表中的区块地址。
在控制写入期间与一ABL填充操作同时地将CBL中已擦除区块的登录项移到CBB列表中。
在一MAP交换操作期间,所有相关登录项均从CBB列表移到MAP目的地扇区。
在一MAP交换操作期间,所有相关登录项均从CBB列表移到MAP来源扇区。
在[L]和[M]之后,在一MAP交换操作期间,所有剩余的登录项均从CBB列表移到EBB列表。
在[N]之后,在一MAP交换操作期间,如果可能,除[M]中被移动的登录项以外的登录项均从MAP来源扇区中被移动以填充EBB列表。
逻辑到物理地址转换为在快闪存储器中找出一逻辑扇区的物理位置,图2中所示的逻辑到物理地址转换模块140执行逻辑到物理地址转换。除了最近被更新的那些逻辑群组以外,可使用驻存在快闪存储器200中的群组地址表(GAT)或控制器RAM 130中的GAT高速缓存来执行大部分转换。对最近被更新的逻辑群组进行地址转换将需要查找主要驻存在控制器RAM 130中的更新区块的地址列表。因此,针对一逻辑扇区地址所进行的逻辑到物理地址转换的处理取决于与扇区所在的逻辑群组相关联的区块的类型。区块的类型如下完全一致区块、循序数据更新区块、混乱数据更新区块、已关闭数据更新区块。
图19为展示逻辑到物理地址转换的处理的流程图。基本上,可通过首先使用逻辑扇区地址查找各个更新目录(例如开放更新区块列表和关闭更新区块列表)而找出对应的元区块和物理扇区。如果关联的元区块并不是更新处理的一部分,那么由GAT提供目录信息。逻辑到物理地址转换包括以下步骤步骤800提供一逻辑扇区地址。
步骤810在控制器RAM中的开放更新区块列表614(参见图15和18)中查找所提供的逻辑地址。如果查找失败,那么进入步骤820,否则进入步骤830。
步骤820在已关闭更新区块列表616中查找所提供的逻辑地址。如果查找失败,那么所提供的逻辑地址并非为任何更新处理的一部分;进入步骤870,进行GAT地址转换。否则进入步骤860,进行已关闭更新区块地址转换。
步骤830如果含有所提供的逻辑地址的更新区块为循序的,那么进入步骤840,进行循序更新区块地址转换。否则进入步骤850,进行混乱更新区块地址转换。
步骤840使用循序更新区块地址转换来获得元区块地址。进入步骤880。
步骤850使用混乱更新区块地址转换来获得元区块地址。进入步骤880。
步骤860使用已关闭更新区块地址转换来获得元区块地址。进入步骤880。
步骤870使用群组地址表(GAT)转换来获得元区块地址。进入步骤880。
步骤880将元区块地址转换为物理地址。所述转换方法取决于元区块是否已被重新连接。
步骤890已获得物理扇区地址。
各种地址转换处理详细描述如下循序更新区块地址转换(步骤840)从开放更新区块列表614(图15和18)中的信息可直接完成与循序更新区块相关联的逻辑群组中的目标逻辑扇区地址的地址转换,如下所示1.从列表中“页标签”和“已写入的扇区数”字段中确定目标逻辑扇区究竟位于更新区块中还是位于其关联原始区块中。
2.从列表中读取适于目标逻辑扇区的元区块地址。
3.从适当的“页标签”字段中确定元区块内的扇区地址。
混乱更新区块地址转换(步骤850)与混乱更新区块相关联的逻辑群组中的目标逻辑扇区地址的地址转换序列如下。
1.如果从RAM中的混乱扇区列表中确定所述扇区为最近被写入的扇区,那么从其在此列表中的位置可直接完成地址转换。
2.CBI区块中最近被写入的扇区在其混乱区块数据字段中含有与目标逻辑扇区地址有关的混乱更新区块的物理地址。其还在其间接扇区索引字段中含有与此混乱更新区块有关的最后被写入的CBI扇区的CBI区块内的偏移(参见图16A-16E)。
3.这些字段中的信息被高速缓存于RAM中,而不需要在随后的地址转换期间读取扇区。
4.读取在步骤3处由间接扇区索引字段识别的CBI扇区。
5.将最近被访问的混乱更新子群组的直接扇区索引字段高速缓存于RAM中,而不需要执行步骤4处的读取以重复访问相同的混乱更新区块。
6.在步骤4或步骤5处所读取的直接扇区索引字段接着可识别与含有目标逻辑扇区地址的逻辑子群组有关的CBI扇区。
7.从在步骤6中所识别的CBI扇区中读取目标逻辑扇区地址的混乱区块索引登录项。
8.最近被读取的混乱区块索引字段可高速缓存于控制器RAM中,而不需要执行步骤4和步骤7处的读取以重复访问相同的逻辑子群组。
9.混乱区块索引登录项在混乱更新区块或关联的原始区块中定义目标逻辑扇区的位置。如果目标逻辑扇区的有效拷贝位于原始区块中,那么使用原始元区块和页标签信息来找出所述有效拷贝。
已关闭更新区块地址转换(步骤860)
从已关闭区块更新列表(参见图18)中的信息可直接完成与已关闭更新区块相关联的逻辑群组中的目标逻辑扇区地址的地址转换,如下所示。
1.从列表中读取被分配给目标逻辑群组的元区块地址。
2.从列表的“页标签”字段中确定元区块内的扇区地址。
GAT地址转换(步骤870)如果一逻辑群组未被开放区块更新列表或已关闭区块更新列表参照,那么其在GAT中的登录项有效。被GAT参照的逻辑群组中的目标逻辑扇区地址的地址转换序列如下。
1.估算RAM中可用的GAT高速缓存的范围,用以确定目标逻辑群组的一登录项是否被包含于一GAT高速缓存中。
2.如果在步骤1中发现目标逻辑群组,那么GAT高速缓存含有完全的群组地址信息,其包括元区块地址和页标签,允许进行目标逻辑扇区地址的转换。
3.如果目标地址并不位于GAT高速缓存中,那么必须读取目标GAT区块的GAT索引,以识别与目标逻辑群组地址有关的GAT扇区的位置。
4.将最后被访问的GAT区块的GAT索引保留于控制器RAM中,并可进行访问而不需要从快闪存储器中读取一扇区。
5.将由每个GAT区块的元区块地址和被写入每一GAT区块中的扇区数所组成的列表保留在控制器RAM中。如果步骤4处无法访问必要的GAT索引,那么因此立刻从快闪存储器中读取。
6.从步骤4或步骤6处所获得的GAT索引所定义的GAT区块中的扇区位置中读取与目标逻辑群组地址有关的GAT扇区。使用含有目标登录项的扇区的子部分来更新一GAT高速缓存。
7.从目标GAT登录项内的元区块地址字段和“页标签”字段中获得目标扇区地址。
元区块到物理地址转换(步骤880)如果与元区块地址相关联的旗标指示所述元区块已被重新连接,那么从BLM区块读取相关的LT扇区,以确定目标扇区地址的擦除区块地址。否则,从元区块地址直接确定擦除区块地址。
控制数据管理图20说明在存储器管理操作过程中对控制数据结构所执行的操作的分级。数据更新管理操作作用于驻存在RAM中的各个列表上。控制写入操作作用于快闪存储器中各个控制数据扇区和专用区块上,而且还与RAM中的列表交换数据。
数据更新管理操作在RAM中针对ABL、CBL和混乱扇区列表来执行。当一已擦除区块被配置为一更新区块或控制区块时,或是关闭一更新区块时,更新ABL。当擦除一控制区块时,或时将一已关闭的更新区块的一个登录项写入GAT中时,更新CBL。当一扇区被写入一混乱更新区块中时,更新所述更新混乱扇区列表。
控制写入操作使得来自RAM中的控制数据结构的信息被写入快闪存储器中的控制数据结构中,必要时随之更新快闪存储器和RAM中的其它支持的控制数据结构。当ABL不含待被配置为更新区块的已擦除区块的任何其它登录项时,或是重写CBI区块时,触发所述操作。
在优选实施例中,ABL填充操作、CBL净空操作和EBM扇区更新操作均在每个控制写入操作期间执行。当含有EBM扇区的MAP区块变为满载时,将有效EBM和MAP扇区复制到已配置的已擦除区块中,并擦除先前的MAP区块。
在每个控制写入操作期间写入一个GAT扇区,并进而修改已关闭的更新区块列表。当GAT区块变为满载时,执行GAT重写操作。
如前所述,经过几次混乱扇区写入操作之后,写入一CBI扇区。当CBI区块变为满载时,将有效CBI扇区复制到已配置的已擦除区块中,并擦除先前的CBI区块。
如前所述,当EBM扇区中的EBB列表中没有任何其它已擦除区块登录项时,执行MAP交换操作。
MAP地址(MAPA)扇区(其记录MAP区块的当前地址)在MAP区块被重写的每一情形下被写入一专用的MAPA区块中。当MAPA区块变为满载时,将有效MAPA扇区复制到已配置的已擦除区块中,并擦除先前的MAPA区块。
引导(Boot)扇区在MAPA区块被重写的每一情形下被写入一当前的引导区块中。当引导区块变为满载时,将有效的引导扇区从引导区块的当前版本中复制到备份版本,接着所述备份版本变为当前版本。先前的当前版本被擦除并变为备份版本,且有效的引导扇区被写回其中。
尽管已关于特定实施例描述本发明的各个方面,但应了解本发明受到随附权利要求书的完整范畴的保护。
权利要求
1.一种在被组织成复数个区块的非易失性存储器中用于存储并更新数据的方法,每一区块均为可一起擦除的复数个存储器单位,每一存储器单位均用于存储一逻辑数据单位,所述方法包含将数据组织成复数个逻辑群组,每一逻辑群组均被分割成复数个数据逻辑单位;每一逻辑单位均可存储于一区块的一存储器单位中;根据一第一次序将一给定逻辑群组的所有逻辑单位存储于一第一区块的多个存储器单位中;根据一第二次序将所述给定逻辑群组的一连串已更新的逻辑单位存储在专用于所述给定逻辑群组的一第二区块的多个存储器单位中,直到对存储进一步的更新关闭所述第二区块的一预定关闭条件出现为止;和响应所述第二区块被关闭而进行以下任一项操作当所述第二与第一次序类似时,用所述第二区块来取代所述第一区块,或者当所述第二与第一次序不类似时,用一第三区块来取代所述第一区块,所述第三区块已根据所述第一次序与搜集自所述第一和第二区块的所述给定逻辑群组中的每一逻辑单位的一最新版本进行合并。
2.根据权利要求1所述的方法,其进一步包含响应所述第二区块被关闭且所述第二区块含有少于一预定数目的不同逻辑单位,将来自所述第二区块的每一逻辑单位的一最新版本压缩至一第四区块;和用所述第四区块取代所述第二区块以作为用于存储所述给定逻辑群组的更新的一专用区块。
3.根据权利要求2所述的方法,其中不同逻辑单位的所述预定数目为所述给定逻辑群组中逻辑单位数目的一半。
4.根据权利要求1所述的方法,其中所述关闭的预定条件为当所述第二区块满载时。
5.根据权利要求1所述的方法,其中所述关闭的预定条件为所述第二区块到目前为止一直按照一与所述第一次序类似的次序存储所述一连串更新但所述一连串更新中的所述当前更新除外,且所述第二区块至少被填充一半。
6.根据权利要求5所述的方法,其中所述第二区块通过根据所述第一次序与已搜集自所述第一和第二区块的所述给定逻辑群组中的每一逻辑单位的一最新版本进行合并而关闭。
7.根据权利要求1所述的方法,其中当所述将一连串已更新逻辑单位存储至所述第二区块到目前为止一直按照一与所述第一次序类似的次序来存储,但由所述一连串更新中所述当前更新中的一地址跳跃所跨越的一间隙除外,其进一步包括在存储所述一连串更新中的所述当前更新以前,用由从所述第一区块复制的所述地址跳跃所跨越的多个逻辑单位来填充所述间隙。
8.根据权利要求1所述的方法,其中当所述将一连串已更新逻辑单位存储至所述第二区块到目前为止一直按照一与所述第一次序类似的次序来存储但所述一连串更新中的所述当前更新除外时,其进一步包括根据所述第二次序来保存存储于所述第二区块中的多个已更新逻辑单位的一索引。
9.根据权利要求8所述的方法,其中所述索引保存于所述非易失性存储器中。
10.根据权利要求1所述的方法,其中所述给定逻辑群组为同时被所述方法更新的多个逻辑群组中的一个。
11.根据权利要求1所述的方法,其中所述非易失性存储器具有多个浮动栅存储单元。
12.根据权利要求1所述的方法,其中所述非易失性存储器为快闪EEPROM。
13.根据权利要求1所述的方法,其中所述非易失性存储器为NROM。
14.根据权利要求1所述的方法,其中所述非易失性存储器为一存储器卡。
15.根据权利要求1到14中任一权利要求所述的方法,其中所述非易失性存储器具有各存储一位数据的多个存储单元。
16.根据权利要求1到14中任一权利要求所述的方法,其中所述非易失性存储器具有各存储一位以上数据的多个存储单元。
17.一种非易失性存储器,其包含一被组织成复数个区块的存储器,每一区块均为可一起擦除的复数个存储器单位,每一存储器单位均用于存储一数据逻辑单位;一控制器,其用于控制所述区块的操作;所述控制器根据一第一次序将其一给定逻辑群组的所有逻辑单位存储于一第一区块的多个存储器单位中;所述控制器根据一第二次序将所述给定逻辑群组的一连串已更新逻辑单位存储在专用于所述给定逻辑群组的一第二区块的多个存储器单位中,直到关闭所述第二区块以存储进一步的更新的一预定关闭条件出现为止;和所述控制器响应所述第二区块被关闭而进行以下任一项操作当所述第二与第一次序类似时,用所述第二区块来取代所述第一区块,或者当所述第二与第一次序不类似时,用一第三区块来取代所述第一区块,所述第三区块中已由所述控制器根据所述第一次序存储有已搜集自所述第一和第二区块的所述给定逻辑群组的每一逻辑单位的一最新版本。
18.根据权利要求17所述的非易失性存储器,其进一步包含响应所述第二区块被关闭且所述第二区块含有少于一预定数目的不同逻辑单位,所述控制器将来自所述第二区块的每一逻辑单位的一最新版本存储至一第四区块;和用所述第四区块取代所述第二区块以作为用于存储所述给定逻辑群组的更新的专用区块。
19.根据权利要求18所述的非易失性存储器,其中不同逻辑单位的所述预定数目为所述给定逻辑群组中的逻辑单位数目的一半。
20.根据权利要求17所述的非易失性存储器,其中所述关闭的预定条件为当所述第二区块满载时。
21.根据权利要求17所述的非易失性存储器,其中所述关闭的预定条件为所述第二区块到目前为止一直按照一与所述第一次序类似的次序来存储所述一连串更新但所述一连串更新中的所述当前更新除外,且所述第二区块至少被填充一半。
22.根据权利要求21所述的非易失性存储器,其中所述第二区块通过根据所述第一次序与已搜集自所述第一与第二区块的所述给定逻辑群组的每一逻辑单位的一最新版本进行合并而关闭。
23.根据权利要求17所述的非易失性存储器,其中当所述将一连串已更新逻辑单位存储至所述第二区块到目前为止一直按照一与所述第一次序类似的次序来存储但由所述一连串更新中所述当前更新中一地址跳跃所跨越的一间隙除外时,其进一步包括在存储所述一连串更新中的所述当前更新之前,用由从所述第一区块复制的所述地址跳跃所跨越的多个逻辑单位来填充所述间隙。
24.根据权利要求17所述的非易失性存储器,其中当所述将一连串已更新逻辑单位存储至所述第二区块到目前为止一直按照一与所述第一次序类似的次序来存储但所述一连串更新中的所述当前更新除外时,其进一步包括根据所述第二次序来保存存储于所述第二区块中的多个已更新逻辑单位的一索引。
25.根据权利要求24所述的非易失性存储器,其中所述索引保存于所述非易失性存储器中。
26.根据权利要求17所述的非易失性存储器,其中所述给定逻辑群组为同时被所述方法更新的多个逻辑群组中的一个。
27.根据权利要求17所述的非易失性存储器,其中所述非易失性存储器具有多个浮动栅存储单元。
28.根据权利要求17所述的非易失性存储器,其中所述非易失性存储器为快闪EEPROM。
29.根据权利要求17所述的非易失性存储器,其中所述非易失性存储器为NROM。
30.根据权利要求17所述的非易失性存储器,其中所述非易失性存储器为一存储器卡。
31.根据权利要求17到30中任一权利要求所述的非易失性存储器,其中所述非易失性存储器具有各存储一位数据的多个存储单元。
32.根据权利要求17到30中任一权利要求所述的非易失性存储器,其中所述非易失性存储器具有各存储一位以上数据的多个存储单元。
全文摘要
本发明揭示一种非易失性存储器系统,其被组织成由复数个物理存储器位置所组成的复数个物理群组。每一物理群组(元区块)均可作为一个单元擦除,且可用于存储一逻辑数据群组。存储器管理系统允许通过配置一专用于记录所述逻辑群组的所述更新数据的元区块来更新一逻辑数据群组。所述更新元区块按照所接收的次序来记录更新数据,且对所述记录是按照原来所存储的正确逻辑次序(循序)或未按照原来所存储的正确逻辑次序(混乱)未有限制。最终,所述更新元区块对进一步的记录关闭。将进行数项处理中的一项,但最终都会以正确的次序产生一取代所述原始元区块的完全填充的元区块而结束。在所述混乱情况中,以有利于频繁更新的方式将目录数据保存在所述非易失性存储器中。所述系统支持同时被更新的多重逻辑群组。
文档编号G06F11/20GK1914689SQ200480041562
公开日2007年2月14日 申请日期2004年12月21日 优先权日2003年12月30日
发明者艾伦·戴维·贝内特, 艾伦·道格拉斯·布赖斯, 瑟吉·戈罗别茨, 艾伦·韦尔什·辛克莱, 彼得·约翰·史密斯 申请人:桑迪士克股份有限公司