用于方便快速唤醒快闪存储器系统的方法和系统的制作方法

文档序号:6567790阅读:231来源:国知局

专利名称::用于方便快速唤醒快闪存储器系统的方法和系统的制作方法
技术领域
:本发明涉及用于维护可以用于方便唤醒闪存管理系统的数据结构的方法和系统。
背景技术
:在发明人为Lasser并且名为"MethodForFastWake-UpofaFlashMemorySystem"的美国专利No.6,510,488中/>开了一种在快闪存储器系统通电之后,即使闪存系统软件依赖于管理表并且从暂存区(scratch)中生成管理表的处理非常耗时,也能使快闪存储器系统获得快速唤醒时间的方法和系统。并且这种快速唤醒时间是在不牺牲数据完整性的情况下获得的。在这里,出于如完全在此提出的全部目的,Lasser的上述专利将被全部引入作为参考。如在Lasser的专利中说明的那样,将快闪存储器设备用于计算机数据存储通常需要位于主计算机的操作系统与设备底层存取例程之间的某些软件转换层。这是因为闪存技术存在某些使用限制,并且取。这其中的一个限制是无法随机改写任何期望的存储器位置。因此,要将新内容写入快闪存储器位置,首先需要擦除包含该位置的整个块(保留仍旧需要的其他位置的内容),然后仅写入新的内容。转换层为作为宿主的操作系统提供了关于独立数据区的随机存取可寻址阵列的虚拟视图,同时隐藏并处理了将这些虚拟地址映射到其在闪存介质中的真实位置的细节。这种转换机制并不是微不足道的,并且在发明人为AmirBan的美国专利No.5,937,425中公开了这种快闪存储器转换层的一个实例,其中该专利在这里引入作为参考。Ban公开的是一种用于在虚拟和物理闪存地址之间实施映射机制的方法。此外,在美国专利6,678,785中还公开了这种系统的另一个实例,其中该专利同样在这里引入作为参考。转换处理依赖于内部转换表,该转换表为闪存系统软件提供了将主计算机数据存取请求转换成实际闪存存取请求所需要的信息。这些转换表是在系统唤醒过程中(或者如果是由宿主软件请求的,则是在稍后时间)由软件基于存储在闪存设备内部的控制信息来构造的。虽然在理论上可以不构造这种表并且改为只使用来自闪存的原始控制数据,但这在实践中却是无法使用的,这是因为针对存取请求的响应时间将会太慢。此外,出现这种情况的原因还在于存取闪存中的数据要远远慢于存取常规计算机RAM存储器中的数据,并且存储表通常优化的。举例来说,闪存物理单元可以包含映射到其上的虛拟单元编号。在程序运行时,我们有可能频繁需要将虛拟单元编号转换成其物理对应物。如果我们只能依赖于快闪存储控制数据,那么我们有可能需要扫描所有单元,直到我们发现具有指定虚拟单元编号的单元为止,如果借助的是简单媒体存取标准,那么这个处理将会是一个非常漫长的过程。但是,通过在系统唤醒时对闪存设备扫描一次,并且构造一个将每个虚拟单元编号映射到相应物理单元编号的表,我们将能够在以后非常有效地实施这种映射。这其中的问题在于在系统唤醒时扫描快闪数据存储设备可能会耗费很长的时间,对大容量设备来说尤为如此。特别地,对于那些用户希望即时开启的系统和设备(也就是蜂窝电话、PDA等等)来说,这种处理将会令人感到烦恼。简单地将表存储在闪存中是适用于只读存储设备,例如仅仅存储了无法被用户改变的计算机可执行代码的闪存设备。但是,当使用那些用来存储有可能频繁变化的数据的设备时,如果仅仅将表存储在闪存中,那么将是无法取得成功的。这是因为在对设备进行连续写入并改变其内容的时候,转换表的内容同样也会改变。如果当其每次在存储器中发生变化时都更新闪存中的表的拷贝,那么所招致的开销将会极大地减慢系统的速度,因此,这种处理是不切实际的。由此,在存储于闪存的表与存储器中的"正确"表之间将会累积差别。现在,如果用户切断电源并且随后再将其打开,那么在没有对表进行更新的情况下,软件将会从闪存中读取错误的转换表,其结果则是在写入新数据时发生数据丢失。依照Lasser公开的某些实施例,这个问题可以通过将转换表存无效化的装置来解决。这其中的可能实施方式(但不是唯一的实施方式)包括添加一个使所有条目总和与某个固定的已知值相等的校验和值,或者为所存储的表添加有效性标志。此外,我们还可以要求应用软件在关闭系统之前调用转换层中的特定函数。以这些方式,当系统经历有序关机时,快闪存储器设备能够启动快速唤醒处理,并且会在系统经历无序关机时回复为正常唤醒。虽然这种解决方案在很多情况下都是有用的,但是这种解决方案无法胜任的情况也是存在的。这种解决方案有可能无法胜任的第一个实例是频繁出现突然掉电的情形,并且很多(甚至是大多数)通电事件预期将会遭遇到无效存储表,并且将会导致速度很慢的正常唤醒。这种解决方案有可能无法胜任的第二个实例是充当快闪存储器系统宿主的设备的操作系统没有为软件应用提供有序卸载或关机的服务。虽然Limix之类的复杂操作系统提供了这种服务,但是还有很多更为简单并且更小的被设计成在通电时启动存储系统以及永远都不将其关闭的操作系统。在这种情况下,Lasser的方法将会导致在每次为系统通电时都执行闪存管理系统的正常唤醒处理,由此将会从这些方法中一无所获。这种解决方案有可能无法胜任的第三个实例是对于系统通电与系统预备工作之间的时间间隔长度存在严格的限制。由此,即使很少发生电源故障并且几乎所有通电情况都会快速唤醒闪存管理系统,但是,无论电源故障如何少见,所述电源故障都会导致随后的正常通电序列,而这仍旧是无法接受的。对本公开来说,术语"块,,被定义成是可以在单次操作中擦除的最小快闪存储器单元。术语"页"被定义成是可以在单次操作中写入(也被称为"编程")的最小快闪存储器单元。一般来说,一个块包含很多页。对本公开来说,术语"闪存管理系统,,和"闪存文件系统"是同义词,并且是可以交换使用的。对这里的每个术语来说,无论模块输出的接口是面向文件(具有"打开文件,,或"写入文件"之类的命令)还是面向块的(具有"读取块"或"写入块"之类的命令),并且无论软件模块是在单纯专用于闪存管理的控制器上运行,还是在运行了使用存储系统的应用的同一主计算机上运行,这些术语都是指用于管理快闪存储器设备中的数据存储的软件模块。由此广泛认为需要一种可以在不损害快闪数据结构完整性的情况下始终确保快速唤醒快闪存储器系统的方法和系统,如果具有这种方法和系统,那么将会是非常有利的。
发明内容某些或所有前述需要以及其他需要可以通过本发明的若干个方面来满足。发明人现在公开的是这样一种技术,其中当发生了快闪存储器系统的某些但并非所有事件之后,这时可以借助该技术来更新一个或多个闪存管理表,并且将其保存在非易失快闪存储器中。在唤醒时,如果最终结果是保存在非易失闪存中的指定闪存管理表包含过期信息,那么所存储的一个或多个表仍旧可以为系统唤醒提供便利,并且没有必要使这些过期的表无效。与无效这种表所不同,当唤醒时,在关机和/或电力损失之前保存在快闪存储器中的过期闪存表存储表可以用于重新构造"正确的"表(也就是反映系统的当前状态)。在某些实施例中,该处理可以通过同时在快闪存储器中维护事件日志来执行。在唤醒时,保存在事件日志中的数据可以用于更新闪存存储表,由此即使在没有电力损失或关机之前没有按顺序退出,也可以保持数据的完整性。在某些实施例中,从保存在快闪存储器中的"过期"表推导出"最新,,表的处理要比通过扫描闪存存储设备来构造最新数据表的处理更快。现在,在这里将首次公开一种根据快闪存储器系统的事件来维护快闪数据结构的方法。当前公开的这种方法包括(a)在快闪存储器中维护至少一个闪存管理表,其中这些闪存管理表的内容指示快闪存储器系统的状态;(b)在快闪存储器中维护关于至少一个时间点的事件日志,(i)最近存储的至少一个闪存管理表指示快闪存储器系统的较早状态;以及(ii)至少在事件日志中保存比所述至少一个较早状态更新的至少一个事件。根据某些实施例,在至少一个时间点期间,最新的事件被保存在事件日志中。根据某些实施例,在至少一个时间点期间,快闪存储器系统的当前状态由所存储的事件日志以及所存储的至少一个闪存管理表的内容反映。该特征可以用于保持数据完整性,由此可以在以后例如在唤醒时构造经过更新的闪存管理表。根据某些实施例,当前公开的方法还包括(c)从至少一个指示较早状态的表以及从事件日志中产生至少一个指示快闪存储器系统的更接近当前的状态的表。根据某些实施例,更接近当前的状态是快闪存储器系统在生成时的最接近当前的状态。根据某些实施例,所述生成是在唤醒时实施的。根据某些实施例,维护至少一个管理表包括在与所述至少一个时间点不同的另一个时间点将至少一个闪存管理表与事件日志中的最近记录的事件相同步。根据某些实施例,在快闪存储器中维护至少一个闪存管理表包括在快闪存储器中厨期性地将至少一个闪存管理表与当前状态相同步。根据某些实施例,在快闪存储器中维护至少一个闪存管理表包括对于快闪存储器系统的每N个状态改变,在快闪存储器中将至少一个闪存管理表与当前状态相同步,其中>>=2。根据某些实施例,在闪存存储表中维护至少一个闪存管理表包括i)在发生第一预定类型的状态改变时,在快闪存储器中将至少一个闪存管理表与当前状态相同步;以及ii)在发生第二预定类型的状态改变时,在快闪存储器中不将至少一个闪存管理表与当前状态相同步。根据某些实施例,在快闪存储器中更新至少一个闪存管理表的频率是根据快闪存储器系统的资源可用性来确定的。根据某些实施例,至少一个闪存管理表包括将虚拟块编号映射成物理块编号的转换表。根据某些实施例,至少一个闪存管理表包括自由块表。根据某些实施例,所述维护包括在快闪存储器中维护多个闪存管理表。根据某些实施例,在快闪存储器中维护事件日志包括使用快闪存储器的快速写入模式而将数据写入快闪存储器。根据某些实施例,快闪存储器提供MLC和SLC模式,并且在快闪存储器中维护事件日志是使用SLC模式执行的。根据某些实施例,维护日志是作为快闪存储器系统的緩存操作的一部分执行的。现在,在这里将首次公开一种快闪存储器系统中的唤醒方法。当前公开的这种方法包括I)在唤醒时,(a)从快闪存储器中读取至少一个描述快闪存储器系统的状态的闪存管理表;(b)从快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件日志;(c)对于保存在事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新至少一个闪存管理表。根据某些实施例,所述更新将会重复执行,直至根据事件日志中的最近事件更新了至少一个闪存管理表为止。根据某些实施例,所述至少一个闪存管理表包括将虛拟块编号映射成物理块编号的转换表。根据某些实施例,所述至少一个闪存管理表包括自由块表。根据某些实施例,多个闪存管理表是从快闪存储器中读取和更新的。现在,在这里将首次公开一种快闪存储器系统,包括(a)用于存储数据的快闪存储器;以及(b)用于维护用于存取快闪存储器的数据结构的闪存管理软件,其中该闪存管理软件用于i)在快闪存储器中维护至少一个闪存管理表,其中该闪存管理表的内容指示快闪存储器系统的状态;以及b)在快闪存储器中维护事件日志,由此对于至少一个时间点,I)最近存储的至少一个闪存管理表指示快闪存储器系统的较早状态;以及II)在事件日志中存储至少一个比所述较早状态更近的事件。现在,在这里将首次公开一种快闪存储器系统,包括(a)用于存储数据的快闪存储器;以及(b)用于维护用于存取快闪存储器的至少一个数据结构的闪存管理软件,其中在唤醒时,该闪存管理软件用于(I)从快闪存储器中读取至少一个描述快闪存储器系统的状态的闪存管理表;(II)从快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件日志;(III)对于存储在事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新至少一个闪存管理表。现在,在这里将首次公开一种计算机可读存储介质,在所述计算机可读存储介质中嵌入计算机可读代码,该计算机可读代码包括根据快闪存储器系统的事件来维护快闪数据结构的指令,其中该指令包括如下指令(a)在快闪存储器中维护至少一个闪存管理表,其中该闪存管理表的内容指示快闪存储器系统的状态;(b)对于至少一个时间点,在快闪存储器中维护的事件日志,(i)最近存储的至少一个闪存管理表指示快闪存储器系统的较早状态;以及(ii)在事件曰志中存储比所述较早状态更新的至少一个事件。现在,在这里将首次公开一种计算机可读存储介质,在该计算机可读存储介质中嵌入计算机可读代码,该计算机可读代码包括根据快闪存储器系统的事件来维护快闪数据结构的指令,其中该指令包括如下指令(I)在唤醒时,(a)从快闪存储器中读取至少一个描述快闪存储器系统的状态的闪存管理表;(b)从快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件日志;(c)对于存储在事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新至少一个闪存管理表。现在,在这里将首次公开一种根据快闪存储器系统的事件来维护快闪数据结构的方法,该方法包括(a)在快闪存储器中维护至少一个闪存管理表,其中该闪存管理表的内容指示快闪存储器系统的状态;(b)在快闪存储器中维护事件日志;以及(c)在维护至少一个闪存管理表的同时,在快闪存储器中维护唯一标识事件日志中的特定事件的数据。在某些实施例中,该特定事件是与至少一个表的内容相对应的最近事件(例如影响和/或修改了表的内容的最近事件)。现在,在这里将首次公开一种根据快闪存储器系统的事件来维护快闪数据结构的方法。当前公开的这种方法包括(a)在快闪存储器中维护至少一个闪存管理表,该闪存管理表的内容指示快闪存储器系统的状态;(b)在快闪存储器中维护事件日志;以及(c)在维护事件日志的同时,在快闪存储器中维护唯一标识事件日志中的特定事件的数据。根据某些实施例,维护唯一标识数据包括在快闪存储器中维护事件日志中的最近事件的指示。从以下的详细描述和实例中将会清楚了解这些和其他实施例。图1是根据本发明某些实施例的例示快闪存储器系统的框图。图2A2B提供的是根据本发明某些实施例的例示转换表的图示《图3、56提供的是用于描述根据本发明某些实施例而在快闪存储器中维护一个或多个闪存管理表以及事件日志的不同例程的流程图。图4、8A8C提供的是根据本发明某些实施例的例示事件日志的图示。图7提供的是用于唤醒的例示例程的流程图。具体实施方式现在将根据具体的例示实施例来描述本发明。应该理解的是,本发明并不局限于所公开的例示实施例。此外还应该理解,对当前公开的根据快闪存储器系统的事件来维护数据结构的方法、设备和计算机可读代码来说,并不是其中的每一个特征都是实施附加权利要求中的任何一个权利要求的发明所必需的。在这里描述设备的不同部件和特征是为了充分地启用本发明。此外还应该理解,在本公开中,当显示或描述处理或方法时,除非从上下文中可以清楚了解某个步骤依赖于首先执行的另一个步骤,否则所述方法的步骤可以按照任何顺序执行或是同时执行。举例来说,在有可能遭遇到频繁的电源故障的环境中,当前公开的用于维护数据结构的方法、系统和计算机可读代码有助于为快闪存储器系统的"快速唤醒,,提供便利。但是,这一点不应被理解成是对本发明的限制,并且它仅仅是作为当前公开的用于维护快闪存储器系统数据结构的技术的非限制性应用而被公开的。特别地,即使在频繁发生非预期电源故障的情况下,当前公开的技术也可用于提供快速唤醒闪存管理系统,而不会牺牲数据完整性。图1是根据本发明某些实施例的非限制性的例示快闪存储器系统100的框图。该例示系统包括用于存储数据的存储器模块120,以及经由主机接口180而与存储器模块120通信的主机设备110(例如微型计算机、智能卡终端或其他任何设备)。存储器模块包括任何类型的快闪存储器130,以及根据通过主机接口180接收的读取和/或写入和/或擦除请求来存取快闪存储器的控制器140。对于图l所示的实例,控制器包括CPU150、ROM160(其中存储了CPU执行的代码)以及由CPU用来支持其代码执行的RAM170。图1的非限制性实例的这个框图代表了典型的非易失存储模块,例如安全数字闪存存储卡或便携式USB闪存驱动器。闪存管理表应该指出的是,快闪存储器系统IOO通常在非易失存储器中存储一个或多个闪存管理表,其中举例来说,所述非易失存储器可以是存储器模块120的RAM170、主机设备110的RAM或是其他任何恰当的位置。关于这种闪存管理表的一个非限制性实例是提供从虛拟块编号到物理块编号的地址转换的转换表,存在于众多闪存管理系统之中的映射,例如美国专利5,937,425的系统中的映射。应该指出的是,相同的概念和方法同样适用于其他任何类型的闪存管理表,例如表示哪些块能够自由使用以及哪些块不能自由使用的自由块表,表示从虚拟块编号到一个或多个物理块编码的群组的映射的表等等。对本公开来说,"闪存管理表,,是包含闪存管理系统用来支持其算法操作的数据的任何表,其中该表中处于任何特定时间点(Pointintime)的数据表示存储系统在特定时间具有的某些状态特性(aspect)。举例来说,如果闪存管理表是包含快闪存储器中每个块一比特的表,其中该比特指示相应的块是否能够自由使用,那么该表在第一时间点统状态特性的第一比特图案。在稍后的时间点,该表中的比特图案可以与第一时间点不同,这意味着某些自由块变成不自由以及某些非自由块变成自由所导致的自由和非自由块的不同混合。随着时间的流逝,存储在快闪存储器中的数据有可能发生变化,并且与快闪存储器相关的不同辅助数据同样有可能改变。在发生了闪存管理系统的不同事件(例如写入请求、内务操作等等)时,快闪存储器系统的"状态"将会随时间而改变。应该指出的是,每一个闪存管理表都表示闪存管理系统的总体"状态,,的一个或多个特性。由此,任何指定的闪存管理表或表的集合没有必要表示该系统的完整状态,而是只代表了它的某些特性。在上述自由块表的实例中,关于哪些块自由以及哪些块不自由的知识无疑是不足以定义系统的完整状态的。非自由块可能只包含单独的已使用页面,此外它的所有页面也可能都被写入了有效数据。这一点并没有被自由块表所反映,而是通过其他的闪存管理表或是通过某些其他手段反映的,但是该表仍旧没有表示系统状态的某些特性,由此将会落入闪存管理表的定义。由此,当在易失或非易失存储器中存储一个或多个用于表示快闪存储器系统的"当前状态"或"较早状态"或"稍后状态"或"最近状态"的特定闪存存储表时,这表示所述一个或多个特定闪存存储表表示的快闪存储器系统特性的"较早"或"当前"或"稍后"或"最近"状态。随着时间的流逝,闪存管理表会在状态序列之间移动,其中对指定时间来说,每个状态都代表了快闪存储器系统在该时间的一个或多个特性。由表模拟的系统状态特性会在离散的状态之间切换,并且这些状态具有与快闪存储器系统的事件相对应的确定转换点。例示的闪存管理表图2A显示的是在第一时间点(t-tj将虚拟块编号映射到物理块编号的例示闪存管理表的内容。这个表是用虚拟块编号索引的,并且将会产生物理块编号,其中所述物理块编号当前包含了相应虚拟块的数据。在实际的实施方式中,由于所述表是用所述虚拟块编号排序的,并且由此可以被直接标引到正确条目,因此未必需要分配用于存储虚拟块编号的空间。但是为了便于表示,该表被显示成实际提供了这两个列的样子。对图2描绘的虚拟-物理映射状态来说,如果必须存取虚拟块编号2,那么该表将会告诉我们相应的物理块是块编号172。在某个时间点,发送到闪存管理系统的命令(或者即使是在没有外部命令的情况下由系统采取的内部内务操作,例如无用信息收集操作)有可能导致所述映射发生变化。例如,将新数据写入虛拟块编号2并且由此改写其先前数据的命令有可能导致闪存管理系统分配另一个物理块与虚拟块编号2相对应,并且新的数据被存储在所述块中。图2B显示的是在稍后时间(t=t2)发生了变化之后的虛拟-物理闪存管理表的内容。现在,虛拟块编号2在所述表中与物理块编号777相对应,并且不再与物理块172相对应。由此,该表将会从第一状态切换到第二状态。闪存管理表的内容的任何改变都被定义成是所述表的状态改变。应该强调的是,并不是在闪存管理系统中发生的每个写入操作都会导致该系统的所有闪存管理表的状态改变。举例来说,如果物理块172的某些页面未被使用,并且写入操作被指引到了虛拟块编号2,那么根据闪存管理系统的算法,新的数据将被存储到物理块172的这些未使用页面,这样一来,在所述写入操作之后,虚拟-物理映射不会改变,并且所述表将会保持不变。由此,闪存管理表状态的改变速率通常慢于系统内部执行操作的速率。此外,如果在同一个闪存管理系统内部维护了多个闪存管理表(每一个都代表了该系统状态的不同特性),那么,每一个表都可以在不同时间点改变其状态。存储在唤醒时有用的数据结构(也就是一个或多个表以及事件日士)如上所述,当在通电之后初始化系统时,管理软件有可能需要在RAM中创建它所使用的任何一个闪存管理表的完全更新的拷贝。为了实现系统的快速唤醒,通常,只从散布于存储系统的块的数据中重新产生表的内容的处理是不能接受的,这是因为这种处理的速度很慢。此外,对于在每次状态改变时都将表的拷贝存入非易失快闪存储器的相反替换方案来说,由于该方案添加了很高的开销并且降低了系统性能,因此这种方案同样是无法接受的。由本发明不同实施例提供的技术提出的是在这两种现有技术方案之间进行折衷。由此,闪存管理表可以只在某些状态改变时才被存入非易失存储器,而不是在每次发生状态改变的时候。在图3中对这种情况进行了描述,该图描述的是依照本发明的某些实施例而在快闪存储器中维护闪存管理系统的数据结构的例示例程。这里使用的"在快闪存储器中维护"包括在快闪存储器中进行存储。通常,在快闪存储器中维护包括将表和/或用于填充所述表的相关数据保存在易失存储器/RAM中,以及对于多个时间点,在快闪存储器中存储更新版本的表(也就是与快闪存储器系统的当前状态相同步)。根据图3的非限制性实施例,应该指出的是,在非限制性实施例中,系统在某些时间点有可能是空闲的,并且系统可以等待206下一个事件。一旦对闪存管理系统2的事件进行处理210,那么通常会在易失存储器中根据发生的事件来更新214—个或多个表。在指定事件之后,在非易失闪存中既可以更新所述一个或多个表,也可以不对其进行更新。关于例示事件日志的说明发明人现在描述的是在发生了某些但不是全部事件之后,闪存管理表将被存储的某些情况下,这时,较为有益的是在快闪存储器中维护一个事件日志。在例示实施例中,这个事件日志包含了多个记录,其中每一个记录都包含了描述闪存管理系统的特定事件的数据。虽然并非本发明的限制,但是应该指出的是,一般来说,这种事件日志是在每一个事件之后在快闪存储器中更新的。如果在快闪存储器中并没有始终保存经过更新的一个或多个表(也即是依照快闪存储器系统的最近事件进行更新),那么在这种情况下,上述处理将会有益于维护数据完整性。对于提供了数据完整性的实施例来说(也就是说,即使在具有电力损失的情况下),通常,在任何指定时间,下列条件之一是成立的a)在非易失闪存中存储依照最近事件更新的表,b)在快闪存储器中存储依照较早状态更新的表(也就是说,早于最近的事件,换言之,从"较早,,事件时起,在快闪存储器系统中已经发生了其他事件),此外,存储在快闪存储器中的事件日志包含了从"较早事件,,时起发生的所有事件。关于事件日志的一个例示实施方式是注册了影响系统状态(也就是存储在一个或多个闪存管理表中的"系统的至少一个特性,,的状态)的每个事件的顺序序列,其中该事件可以是外部写入命令、内部内务操作、或是其他任何影响状态的事件。在图4中以图形方式显示了关于这种顺序事件日志的一个非限制性的可能实施方式,该实施方式是一个循环队列,其中该队列会在达到其最高地址之后折回到其最低地址。根据图4的实例,循环序列的大小是"M,,(可以保存多达M个事件)。根据图4的实例,在闪存中通常维护了两个指针。其中一个指针(在图4中指向事件M-2)被表示为PointerMOSTrecentevent。这个指针指向日志中的最后一个注册条目。只要在日志中添加了新的条目,那么该指针首先将会循环递增,以便指向下一个条目位置(图3的步骤218),然后则会将新的条目(图3的步骤222)记录在所指向的条目中。应该指出的是,在事件日志中重复记录222快闪存储器系统的事件的处理被定义为"在快闪存储器中维护事件日志"。通常,PointerMOSTRECENTevent被保存218在闪存中(通过在曰志中存储指示数据来显性或隐性存储,由此确定PointerMOSTRECENTEVENT的位置)。在一个实例中,没有明确的PointerMOsTrecentevent,并且事件日志被构造成可以在不需要附加信息的情况下通过扫描其内容来识别其最新条目。根据该实例,这个特征很容易就可以通过在每个条目中包含"产生(generation)"字段来实现,其中所述产生是随每个连续条目递增的数字。然后,日志中的最新条目将会是具有最高生成字段的条目。此外,用于实现这个特征的其他实施方式同样是可行的(例如存储一个明确的PointerMOST—recent—event)-可以理解的是,用以指示P0interMOST—recenteve!vt的数据可以存储在闪存中的任何位置,并且没有必要与事件日志一起存储在闪存中的单独位置。根据"循环队列,,的非限制性实例,如果分配给日志的空间足够大,由此它在任何闪存管理表的两个连续保存操作之间都不会填满,那么没有必要监视队列的内容,并且新的条目可以非常安全地改写队列末端处的最早条目。现在将对图4中的第二指针PointerMOSTrecenttablesave进行描述。如图3所示,对快闪存储器系统的某些但不是所有事件来说(也就是说,只对满足226"保存表,,条件的事件——在下文中将对所述条件进行讨论),在闪存中存入230—个或多个闪存管理表。由此,在某些实施例中,只要将一个或多个闪存管理表存入非易失闪存,则也保存最近事件的更新指示P0interMOSTrecenttable—SAVE。这时,保存在非易失闪存中的闪存管理表被认为与快闪存储器系统的"与最近状态同步,,或"与最近事件相同步"。这时,图4所示的"间隙"将会消失。如果随后在未将经过更新的一个或多个表存入快闪存储器的情况下更新日志(对于至少一个事件),那么P0interM0STrecenttable—save将会开始落在最近事件(用PointerMOSTrecentevent表示)之后,并且间隙将会再次产生。参考步骤230,应该指出的是,当在非易失緩存中保存指示快闪存储器系统的当前状态的表时,这被定义为"在快闪存储器中将表与当前状态同步"。对于在不同事件之后将一个或多个闪存管理表存储在快闪存储器中的处理总体被定义为"在快闪存储器中维护表"。在不同的时间点,另一个版本的一个或多个闪存管理表(通常,每一个后续版本表示快闪存储器系统的稍后状态)由此将会被存储在快闪存储器中。因此,"在快闪存储器中维护表"并不需要在任何给定时刻将最近保存在快闪存储器中的表与快闪存储器系统的当前状态相同步。关于图3的检查表明有可能存在这样的时段,在该时段中,最近存储的一个或多个闪存管理表指示快闪存储器系统的较早状态(也就是在快闪存储器系统中发生更接近当前的事件之前的系统的状态)。应该指出的是,可以在以后从闪存中检索指示PointerMOSTrecenttablesave,例如在闪存系统通电之后。通过将以在任何给定时间确定所保存的一个或多个闪存管理表是否反映了系统的最近状态(也就是表中描述的状态特性)。虽然事件日志的上述实施方式非常简单并且易于实施,但这并不是唯--种可行的实施方式,并且其他的实施方式同样是可行的。应该指出的是,在某些实施例中,为事件日志中的每个事件所记录的数据至少包含重新产生事件对系统状态所造成的影响所需要的所有数据。在事件日志中没有必要记录与事件相关联的实际数据,并且在例示实施例中,实际数据并未被记录。举例来说,如果事件是来自外部主机系统的要求写入一页数据的命令,那么日志中的相应记录包含的是被写入区段的虚拟地址,而不是所要写入的数据。如上所述,在某些实施例中,当在闪存中更新一个或多个表时,可以在每一个事件之后保存PointerMOSTRECENT—event,而只在某些事件之后才保存指示PointerMOSTrecenttablesave的数据。用于确定何时将已更新的一个或多个闪存管理表存入非易失快闪存储器的策略任何用于确定将已更新的表存入快闪存储器的事件构成的策略——也就是说,步骤226的"保存条件,,都在本发明的范围以内。发明人现在公开多种依照本发明特定实施例的策略。在第一实施例中(如图5所示),在表的状态每发生N次变化时保存所述表,其中N是预先确定的。举例来说,当保存开销很低时,N可以和2—样小,而当保存开销很高时,它可以与100—样大,甚至可以更大。由此,如图5所示,计数器变量将被初始化218为零。在每一个事件之后,这个计数器变量将会递增240。如果计数器变量超出244预定阈值W,则将一个或多个表存入快闪存储器230,并且PointerMOSTRECENTTABLESAVE将会在快闪存储器中与事件日志中的事mostrecenttablesave相比较,可件中的最近事件同步。在第二实施例中(如图6所示),根据最近事件触发的状态改变确定"保存表,,条件(在步骤226中出现)。为此目的,状态改变将被分成"次要,,改变或"主要,,改变。表状态中次要的改变不会导致即时(也就是在处理210下一个事件之前)保存该表(也就是步骤226B之后的"否"分支),而主要的改变则会导致即时保存。关于将改变分成次要和主要的非限制性实例是自由块闪存管理表,其中将自由块变成非自由块的改变被认为是次要的,而将非自由块变成自由块的改变则是主要的。此外,对于何时将闪存管理表存入非易失快闪存储器的策略的其他实施例也是可能的。在第三实施例中,只要预定时间间隔到期,则对一个或多个表执行周期性保存。通常,在表被更新的频繁程度与在将一个或多个闪存管理表存入非易失闪存中耗费的系统资源量之间存在折衷。另一方面,如果较频繁地保存一个或多个管理表,那么这意味着平均来说,在唤醒过程中从快闪存储器中检索的表更有可能得到更多更新,由此将会提供更快的唤醒。应该指出的是,任何时间间隔都处于本发明的范围以内。在例示的非限制性实施例中,时间间隔介于0.1秒与5分钟或更长时间之间。在第四实施例中,表被更新的频率是根据系统资源的可用性确定的。在一个实例中,当控制器140处理众多读/写/擦除请求时,或者在有很多内务操作的时段中,这时,将一个或多个闪存管理表存入非易失闪存的处理将会减少,由此节约系统资源。在"低使用"时段中,当系统以其他方式空闲或者遭遇到很低的使用率时,这时可以更为频繁地将一个或多个闪存管理表存入非易失闪存,而不会对闪存系统性能产生显著影响。如果较为频繁地将一个或多个闪存管理表存入闪存,那么将可以提供更快的唤醒,尤其是在没有按序退出的情况下(例如非预期的电力损失)。由于并不是每一个状态改变都会触发表的保存,因此在最后保存的表的拷贝与其在RAM中的最近更新拷贝之间最终将会出现一个间隙或失配。当保存表时,这个间隙将会消除,并且这两个拷贝(也就是易失RAM存储器中的拷贝和保存在非易失闪存中的拷贝)将会相同,但是未导致表的存储的新的状态改变将会再次产生间隙。唤醒在某些实施例中,当应用执行按序退出时,已更新的一个或多个闪存管理表(也就是依照快闪存储器系统的最近事件更新)将被存入快闪存储器。然后,在唤醒时,从快闪存储器中检索所述一个或多个闪存管理表。如果没有按序退出,那么在唤醒时可以将一个或多个"过期,,闪存管理表从快闪存储器检索到易失存储器中,然后,根据存储在事件日志中的记录,在易失存储器中更新过期的闪存管理表。由此,本发明的实施例不再需要像在Lasser的US6,510,488中公开的那样无效过期的表。图7提供的是描述了根据本发明某些实施例的例示唤醒例程的流程图。在通电410之后,闪存管理系统将会检索414所保存的闪存管理表的拷贝。然后,闪存管理系统检索418再将一个或多个闪存管理表存入非易失緩存时指向最近事件的PointefMOST—recent_table_save<接下来,闪存管理系统将会确定422PointerMOSTrecenteventj其中举例来说,所述确定可以通过扫描事件日志以及标识其最近条目来实现,也可以通过从非易失快闪存储器中检索显性值来实现,还可以通过其他技术来实现。PointerMOSTrecentevent指向最近i己入日志的事件-在系统关机之前发生的最近事件。如果在最后保存了闪存管理表之后以及在表的状态发生附加变化之前(举例来说,如果是"有序退出,,或是其他任何情况)系统立即关机,那么这两个指针(也就是PointerMOSTrecenttablesave和PointerMOSTRECENTEVENT)应该是相同的。但是,如果在表的最后保存之后以及在系统关机之前发生了一个或多个闪存管理表的一个或多个状态改变,那么在这两个指针之间应该会看到差别。PointerMOsTrecenttablesave指向事件日志中已被所保存的表反映了其对表的状态的影响的最近事件。在该事件之后在日志中出现的所有事件,直至由PointerMOST—RECENT—EVENT指向的日志中的最后一个事件,并没有在所保存的表中反映。对此,能够"回放"表中尚未反映的新的事件。为此目的,来自事件日志的条目(也就是在最近通电410之前被存入事件日志的"预存储,,事件)可以按照从最旧(即由PointerMOSTrecenttablesave指向的)到最新(即由PointerMOSTRECENTEVENT指向的)的顺序而-皮逐一读取434。对每一个此类事件来i兌,一个或多个闪存管理表的状态可以采用与影响状态的初始事件完全相同的方式得到更新438(例如在易失存储器中)。为此目的,在某些非限制性实施方式中,较为有利的是定义一个"临时,,指针PointerTEMP,这个指针充当了一个"迭代器,,变量,并且指向事件日志中当前处理的事件。在一开始,Pointertemp的值4皮i殳置426成PointerMOSTRECENTtable—save(如图8A所示)。对从日志表检索434的每一个事件(如图8A8C所示)来说,每一个闪存管理表(如果具有一个以上的闪存管理表)都会被更新438,以便反映为其应用的特定状态改变。在处理了事件日志中保存的每个事件(例如由PointerTEMP指向的)之后,该指针(例如PointerTEMP)可被提前442,以便指向事件日志中的下一个事件。一旦处理了最近的日志条目(参见图8C),那么Pointertemp=PointerMOsTrecentevent,并且我们将会完成处理。在某些实施例中,确定指定日志条目是否为"最近,,日志条目的处理可以通过将"迭代"指针值(例如PointerTEMP)与PointerMOSTrecentevent进行比较430来实施。这时,当Pointertemp=PointerMosTrecentevent时,一个或多个闪存管理表现在将会得到完全更新,并且每一个闪存管理表反映其在系统关机之前具有的最近状态。作为选择,一个或多个现在更新的闪存管理表被存入446非易失存储器(连同已更新的PointerMOST_RECENT_TABLE—SAVE一起),由此,所述表的任何未来的重新产生的处理(如果需要的话)都是从当前状态开始的。当确定在易失存储器以及可选地在非易失存储器中更新一个或多个闪存管理表之后,这时可以以快闪存储器系统的正常操作进行450。关于性能的一般论述由本发明的特定实施例提供的一个益处是读取保存的闪存管理表的拷贝以及回放未在所保存的表的拷贝中反映的日志条目的处理与通过扫描存储系统的众多的块来从暂存器中重新创建表的处理相比,耗费的时间将会极大缩短。如果在保存了表之后并且在附加状态改变发生之前系统关闭(举例来说,如果有序退出,或者如果我们足够"幸运的,,在PointerMOSTRECENTEVENT=PointerMOSTRECENTTABLESAVE时关机),那么在某些实施例中,唤醒时间将会是最快的,这与有序关机时的Lasser的方法相同。但是,即使在最后保存了所述表之后发生某些状态改变,系统的唤醒时间也未必会像Lasser的方法在没有有序关机的时候那样糟糕。在很多情况下,只需要读取日志中的少量条目,并且只需要重新创建其对所述表的状态的影响。这种处理耗费的确切时间通常取决于所要回放的条目的数量。而这转而可以取决于用以将表存入非易失存储器的速率。所述速率越高,平均将要被回放的条目就越少,并且唤醒处理平均来说将会越快。另一方面,保存速率越高,在系统正常操作中在保存中花费的时间开销也会越高。另一个有可能相关的因素是写入事件日志条目所耗费的开销。通常,在提供数据完整性的实施例中,日志是基于每个事件而被写入的,这意味着它必须在每次发生可能影响闪存管理表的状态的每个系统状态改变的时候写入。我们有可能希望知道维护事件日志的开销成本是否没有高于在每次状态改变时保存闪存管理表的开销。由此,在某些实施例中,闪存管理系统可以被设计成将事件记录以最快写入的方式写入事件曰志。为此目的,当闪存介质提供一个以上的写模式时,这时可以使用较快的写模块。用于将至少一个记录写入事件日志,以及将指示一个或多个闪存管理表的数据写入非易失快闪存储器)。这其中的一个实例是使用同时提供多级单元(MLC)和单级单元(SLC)模式的快闪存储器设备的闪存系统。在发明人为Chen的美国专利6,456,528中公开这种设备,并且该专利在这里将被全部引入。为了实现最高的存储密度,使用较慢的MLC模式写入保存在系统中的"常规数据"(例如使用来自主机设备110的写入请求传递的数据),使用更快的SLC模式写入事件日志。将日志作为快闪存储器系统的緩存操作的一部分来加以维护在某些实施例中,无论闪存管理表具有怎样的考虑因素,当前公开的一种或多种技术都可以在必须维护事件日志的情况下提供特定的优点。当闪存管理系统为输入数据使用緩存处理时,这种情况将会出现,其中输入数据首先会在其到达时被保存在快闪存储器中的第一个位置,在稍后的时间,该数据将会移动到第二个位置,以便进行长期存储。这里使用的"緩存"是指写入第一个位置。由此,在此类系统中,将数据保存在第一个位置(也就是緩存)的处理可以采用一种同样提供了事件日志功能的方式来实施。在这种情况下,其中并没有用于实施日志的额外开销,并且本发明的这种方法的益处将会是最高的。虽然上述说明主要集中于闪存管理系统内部的单个闪存管理表,但是本发明同样适用于多个闪存管理表,其中每一个闪存管理表都代表了系统状态的一个不同特性。如果存在多个表,那么每一个表都可以使用其自己的保存策略来进行存储,而不需要在相同时间点存储。在通电时,闪存管理表可以使用上述方法并结合用于所有表的相同事件日志而纟皮重新构造。关于当前公开的系统的附加论述当前公开的技术可以使用硬件、固件和软件的任何组合来实施。在一个非限制性示例中,保存闪存管理表的处理以及在通电时恢复和重建所述闪存管理表的处理全都是由控制140执行的,或者更确切的说,这些处理是由执行来自ROM160的代码的CPU150执行的。但是,这并不是可用于使用本发明的唯一系统架构。举例来说,本发明的方法还可以由主计算机IIO中运行的代码来实施,这种情况会在存储模块是板栽NAND闪存设备并且没有独立控制器的情况下出现。另一种可能性是本发明的方法至少部分由主计算机110执行,并且部分由控制器140执行的。所有这些架构和众多其他架构全都在本发明的范围内。在本申请的说明书和权利要求书中,每一个动词"包括"、"包含,,和"具有"及其动词变化都被用于表示动词的一个或多个客体未必完整列举了动词的一个或多个主语所具有的元件、组件、部件或部分。这里引用的所有参考文献都被全部引入作为参考。参考文献的引用并不承认该参考文献是现有技术。这里4吏用的冠词"一"和"一个,,指的是该冠词的一个或一个以上(也就是至少一个)语法客体。例如,"一个部件"指的是一个部件或一个以上的部件。这里使用的术语"包括"指的是短语"包括但不局限于",并且它可以与该短语交换使用。除非在上下文中以其他方式明确指示,否则这里使用的术语"或"指的是"和/或",并且可以与之交换使用。这里使用的术语"例如"是指短语"例如但不局限于,,,并且它可以与该短语交换使用。在这里使用作为实例提供的优选实施例的详述对本发明进行了描述,并且这些实施例并没有限制本发明的范围。所描述的实施例包含了不同的特征,但是并非所有这些特征在本发明的所有实施例中都是需要的。本发明的某些实施例仅仅使用了其中某些特征或是这些特征的可能组合。对本领域技术人员来说,所描述的本发明实施例变体权利要求1.一种根据快闪存储器系统的事件来维护快闪数据结构的方法,该方法包括(a)在快闪存储器中维护至少一个闪存管理表,其中所述闪存管理表的内容指示快闪存储器系统的状态;(b)在所述快闪存储器中维护事件日志,其中对于至少一个时间点,i)最近存储的所述至少一个闪存管理表指示快闪存储器系统的较早状态;以及ii)在所述事件日志中存储比所述较早状态更新的至少一个事件。2.如权利要求l所述的方法,其中,对于所述至少一个时间点,最新的事件被存储在所述事件日志中。3.如权利要求l所述的方法,其中,对于所述至少一个时间点,快闪存储器系统的当前状态由所述存储的事件日志以及所述存储的至少一个闪存管理表的内容反映。4.如权利要求2所述的方法,还包括(c)从所述至少一个指示所述较早状态的表以及从所述事件日志中产生至少一个指示快闪存储器系统的更接近当前的状态的表。5.如权利要求4所述的方法,其中,所述更接近当前的状态是快闪存储器系统在所述产生时的最接近当前的状态。6.如权利要求4所述的方法,其中,所述产生在唤醒时实施。7.如权利要求l所述的方法,其中,所述维护所述至少一个管理表包括在与所述至少一个时间点不同的另一个时间点,将所述至少一个闪存管理表与所述事件日志中的最近记录的事件相同步。8.如权利要求l所述的方法,其中,所述在所述快闪存储器中维护所述至少一个闪存管理表包括在所述快闪存储器中周期性地将所述至少一个闪存管理表与当前状态相同步。9.如权利要求l所述的方法,其中,所述在所述快闪存储器中维护所述至少一个闪存管理表包括对于快闪存储器系统的每N个状态改变,在所述快闪存储器中将所述至少一个闪存管理表与当前状态相同步,其中N>=2。10.如权利要求l所述的方法,其中,所述在所述快闪存储器中维护所述至少一个闪存管理表包括i)在发生第一预定类型的状态改变时,在所述快闪存储器中将所述至少一个闪存管理表与当前状态相同步;以及ii)在发生第二预定类型的状态改变时,在所述快闪存储器中不将所述至少一个闪存管理表与所述当前状态相同步。11.如权利要求l所述的方法,其中,在所述快闪存储器中更新所述至少一个闪存管理表的频率是根据快闪存储器系统的资源可用性来确定的。12.如权利要求l所述的方法,其中,所述至少一个闪存管理表包括将虚拟块编号映射成物理块编号的转换表。13.如权利要求l所述的方法,其中,所述至少一个闪存管理表包括自由块表。14.如权利要求l所述的方法,其中,所述维护包括在所述快闪存储器中维护多个所述闪存管理表。15.如权利要求l所述的方法,其中,所述在所述快闪存储器中维护事件日志包括使用所述快闪存储器的加快写入模式而将数据写入所述快闪存储器。16.如权利要求1所述的方法,其中,所述快闪存储器提供MLC和SLC模式,并且在快闪存储器中维护事件日志是使用所述SLC模式执行的。17.如权利要求l所述的方法,其中,所述维护所述日志的处理是作为快闪存储器系统的緩存操作的一部分执行的。18.—种快闪存储器系统中的唤醒方法,该方法包括I)在唤醒时,a)从快闪存储器中读取至少一个描述快闪存储器系统状态的闪存管理表;b)从所述快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件曰志;c)对于保存在所述事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新所述至少一个闪存管理表。19.如权利要求18所述的方法,其中所述更新重复执行,直至根据所述事件日志中的最近事件更新了所述至少一个闪存管理表为止。20.如权利要求18所述的方法,其中所述至少一个闪存管理表包括将虚拟块编号映射成物理块编号的转换表。21.如权利要求18所述的方法,其中所述至少一个闪存管理表包括自由块表。22.如权利要求18所述的方法,其中多个所述闪存管理表是从所述快闪存储器中读取和并被更新。23.—种快闪存储器系统,包括a)用于存储数据的快闪存储器;以及b)维护用于存取所述快闪存储器的数据结构的闪存管理软件,其中所述闪存管理软件用于i)在所述快闪存储器中维护至少一个闪存管理表,其中该闪存管理表的内容指示快闪存储器系统的状态;以及ii)在所述快闪存储器中维护事件日志,使得对于至少一个时间点,I)最近存储的所述至少一个闪存管理表指示快闪存储器系统的较早状态;以及II)在所述事件日志中存储至少一个比所述较早状态更近的事件。24.—种快闪存储器系统,包括a)用于存储数据的快闪存储器;以及b)用于维护用于存取所述快闪存储器的至少一个数据结构的闪存管理软件,其中,在唤醒时,所述闪存管理软件用于i)从快闪存储器中读取至少一个描述快闪存储器系统的状态的闪存管理表;ii)从所述快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件曰'志;Hi)对于存储在所述事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新所述至少一个闪存管理表。25.—种计算机可读存储介质,在所述计算机可读存储介质中嵌入了计算机可读代码,所述计算机可读代码包括根据快闪存储器系统的事件来维护快闪数据结构的指令,其中所述指令包括如下指令a)在快闪存储器中维护至少一个闪存管理表,其中所述闪存管理表的内容指示快闪存储器系统的状态;b)在所述快闪存储器中维护事件日志,其中对于至少一个时间点,i)最近存储的所述至少一个闪存管理表指示快闪存储器系统的较早状态;以及ii)在所述事件日志中存储比所述较早状态更新的至少一个事件。26.—种计算机可读存储介质,在所述计算机可读存储介质中嵌入了计算机可读代码,所述计算机可读代码包括根据快闪存储器系统的事件来维护快闪数据结构的指令,其中所述指令包括如下指令I)在唤醒时,a)从快闪存储器中读取至少一个描述快闪存储器系统的状态的闪存管理表;b)从所述快闪存储器中读取包含快闪存储器系统的预存储事件的记录的事件日志;c)对于保存在所述事件日志中的至少一个事件,根据所述至少一个事件产生的变化来更新所述至少一个闪存管理表。27.—种根据快闪存储器系统的事件来维护快闪数据结构的方法,该方法包括a)在快闪存储器中维护至少一个闪存管理表,该闪存管理表的内容指示快闪存储器系统的状态;b)在所述快闪存储器中维护事件日志;以及c)在所述维护所述至少一个闪存管理表的同时,在所述快闪存储器中维护唯一标识所述事件日志中的特定事件的数据,其中所述特定事件是与所述至少一个表的所述内容相对应的最近事件。全文摘要本发明涉及用于方便快速唤醒快闪存储器系统的方法和系统。在这里公开的是根据快闪存储器系统的事件来维护快闪数据结构的方法、系统和计算机可读代码。在快闪存储器中同时存储事件日志以及至少一个闪存管理表。对于至少一个时间点,最近存储的闪存存储表指示快闪存储器系统的较早状态,而在事件日志中则存储了比所述较早状态更为接近当前的至少一个事件。在通电时,从快闪存储器中检索闪存管理表。如果闪存存储表中的最接近的事件早于事件日志中的最近事件,则从事件日志中检索事件,以便更新闪存存储表。作为选择,更新的闪存存储表将被保存到快闪存储器中。文档编号G06F12/00GK101218566SQ200680021190公开日2008年7月9日申请日期2006年5月9日优先权日2005年5月9日发明者曼纳切姆·拉瑟申请人:晟碟以色列有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1