管理高速缓存数据和元数据的制作方法

文档序号:6595515阅读:288来源:国知局
专利名称:管理高速缓存数据和元数据的制作方法
技术领域
本发明涉及用于使用非易失性存储器设备的技术,如可移动和不可移动非易失性随机存取存储器(NVRAM)设备。
背景技术
一些常规操作系统提供采用非易失性存储器设备(即,可用于向计算机提供辅助存储和/或存储器的外围设备,如闪存USB驱动器)来作为较慢存储设备(例如,盘存储介质或可经由网络访问的一个或多个存储设备)的块或文件级高速缓存以提高操作系统和/ 或应用程序的性能的能力。在这一方面,因为对非易失性存储器设备(此后,为简明起见称为“高速缓存设备”)的读和写操作与对较慢存储设备的读和写操作相比可以执行得更快, 所以使用高速缓存设备来对存储在这样的较慢设备上的数据进行高速缓存提供了显著地提高操作系统和/或应用程序的输入/输出(I/O)操作的速度的机会。为此,美国华盛顿州雷蒙德市的微软公司生产的微软Windows Vista操作系统包括被称为ReadyBoost (就绪推进)的特征,该特征允许用户使用高速缓存设备来对还驻留在较慢存储设备(此后为方便起见称为“盘存储”或“盘”,但应当理解,这些术语一般指I/O通常执行得比高速缓存设备慢的任何存储介质和/或设备,包括可经由网络访问的存储设备)中的数据进行高速缓存。采用高速缓存设备来对存储在盘上的数据进行高速缓存可以使用高速缓存管理器组件来实现,在一些实现中,该组件是在操作系统的I/O栈中实现的驱动程序。图1A-1B 描绘示例高级过程10A-10B,其中高速缓存管理器组件100对数据在高速缓存设备110中的高速缓存进行管理。可以使用有线和/或无线通信基础结构和协议来将高速缓存设备110 耦合到高速缓存管理器110所处的计算机(未示出)上。例如,高速缓存设备110可以是可从计算机(例如,包括闪存USB驱动器)移除的、不可移除的和/或可由计算机经由一个或多个有线和/或无线网络来访问。在过程IOA(图1A)的开始,高速缓存管理器100接收指定数据应被写入盘存储 (即,高速缓存的卷120)上的地址X的写请求。高速缓存管理器100通过在操作101使得该数据被写到高速缓存的卷120上的地址X并还在操作102使得该数据被写到高速缓存设备110上的地址Y来处理该请求。过程10B(图1B)包括在接收到指定应当读出存储在高速缓存的卷120上的地址X处的数据的读请求之后执行的操作。高速缓存管理器100确定该数据被高速缓存在高速缓存设备110上的地址Y处,并且在操作103使得在地址Y处的数据被读取。随后在操作104,从高速缓存设备来提供该数据以满足读请求。高速缓存管理器在元数据中维护盘地址(例如,地址X)到对应的高速缓存地址 (例如,地址Y)的映射,并且这一 “高速缓存元数据”通常被用于从高速缓存设备读取或向其写入。通常,高速缓存元数据被维护在存储器中并且在接收到I/O请求时由高速缓存管理器来访问。如此,在高速缓存管理器接收到定向到盘偏移X的读请求时,高速缓存管理器使用该高速缓存元数据来确定该数据还被存储在高速缓存偏移Y处,并且通过使得从高速缓存偏移Y而非盘偏移X读取该数据来满足该请求。在高速缓存管理器接收到定向到盘偏移X的写请求时,高速缓存管理器采用该高速缓存元数据来确定该盘地址处的数据是否也被存储在高速缓存中。如果是(例如,如果该数据被存储在高速缓存地址Y处),高速缓存管理器可以使得该数据被写到高速缓存中的适当地址或驱逐在该地址处的高速缓存内容。 如果否,则高速缓存管理器可以使得该数据被写到高速缓存,并可以更新高速缓存元数据以使得将来对盘偏移χ的读取可以改为从存储在高速缓存中的数据来进行服务。常规操作系统能够支持具有相对有限存储容量的高速缓存设备。例如,Windows Vista操作系统的ReadyBoost特征支持具有多达4GB存储容量的高速缓存设备。(在发行 Windows Vista时,高速缓存设备的最大存储容量大约是2GB。)高速缓存设备的存储容量近年来增长迅速,其中一些高速缓存设备提供多达16GB的存储容量,在进行压缩的情况下这可存储相对于32GB数据。

发明内容
申请人:明白,具有相对较大存储容量的高速缓存设备提供很大的机会来提高操作系统和应用程序所执行的I/O操作的速度。申请人还明白,常规操作系统只支持具有相对有限存储容量的高速缓存设备的一个原因是在发生某种类型的电源转换(例如,待机、休眠(或非微软Windows操作系统所使用的等效模式)、或重启)时高速缓存内容必须被重新填充。对于具有相对较大存储容量的高速缓存设备,重新填充高速缓存内容可花费相当长的时间并消费显著的处理资源。作为示例,在使用来自盘的大约IOMB每秒的后台I/O的情况下,可保持多达16GB压缩数据的8GB闪存设备可能花费多达30分钟来重新填充。这不仅有效地否定了通过采用高速缓存设备所获得的任何性能好处,而且可显著地拖慢系统操作。高速缓存内容必须在某些电源转换之间重新填充的一个原因是在计算机重启时没有方法来可靠地确保高速缓存内容准确地表示盘存储的内容,因为高速缓存设备和/或盘的内容可能在该电源转换期间被修改。例如,在第一计算机关机时,黑客可以将可移动高速缓存设备断开连接,将其连接到另一计算机,并修改高速缓存内容,以使得在该设备随后被重新连接到第一计算机的情况下,不正确的数据(此后称为“不可信”数据)可能从该高速缓存设备提供以满足I/O请求。除黑客的恶意动作之外,在电源转换期间,高速缓存内容也可能由于计算机或高速缓存设备的硬件故障而被毁坏。在电源转换期间,高速缓存内容也可因盘上的数据在该转换期间被更新而变 “ I日”,使得在计算机重启时,高速缓存内容不再准确地表示盘内容。例如,在关机之后,用户可能将盘引导到不能识别该高速缓存设备的另一操作系统并且修改被高速缓存在该高速缓存设备上的存储在盘上的数据,使得在计算机重启时,高速缓存内容不再反映存储在盘上的内容。在另一示例中,在关机期间,计算机上的一些动作可在高速缓存设备被呈现为不可由操作系统访问之后发生,(例如,在高速缓存设备被关闭之后),使得操作系统在这一时间点之后所执行的对盘的任何写操作可能不能被高速缓存内容准确地反映。多个事件中的任一个可以使得高速缓存内容在电源转换之间变丨日。本发明的各实施方式提供用于管理这些和其他问题的技术,使得在电源转换之间就准确地反映存储在盘上的数据而言高速缓存内容是可以依赖的。例如,本发明的一些实施方式提供用于验证高速缓存内容在电源转换之间保持可信的技术。另外,一些实施方式提供用于可靠地确保高速缓存内容在电源转换之间不变旧的技术。此外,一些实施方式提供用于在电源转换之间以及在正常操作(“稳定状态”)期间管理高速缓存元数据的技术, 从而确保在电源转换发生时高速缓存元数据可被有效地访问并被可靠地保存和还原。通过提供确保在电源转换之间就准确地反映存储在盘上的数据而言高速缓存内容可被依赖的技术,本发明的一些实施方式可以允许采用具有大量存储容量的高速缓存设备来显著地加速操作系统和/或应用程序所执行的I/O操作。I/O操作的提高的速度可以不仅加速计算机的正常“稳定状态”操作,还可显著地加速在引导期间执行的操作,使得计算机更快地就绪。在本发明的一些实施方式中,提供了一种用于操作包括存储器并且与存储介质和高速缓存设备耦合的计算机的方法,该存储介质将多个数据项的每一个存储在相应的地址处,该多个数据项中的每一个还被存储在高速缓存设备上的对应地址处,该计算机可访问的高速缓存元数据提供存储介质上的地址与高速缓存设备上存储每一数据项的对应地址之间的映射。该方法包括以下动作(A)将高速缓存元数据存储在包括多个分层结构层的分层数据结构中;以及(B)只将多个分层结构层的子集加载到存储器中。其他实施方式提供了其上编码有在被包括存储器并且与盘存储和高速缓存设备耦合的计算机执行时执行一种方法的指令的至少一个计算机可读存储介质,该盘存储将多个数据项的每一个存储在相应的地址处,该多个数据项中的每一个还被存储在高速缓存设备上的对应地址处,该计算机可访问的高速缓存元数据提供盘存储上的地址与高速缓存设备上存储每一数据项的对应地址之间的映射,该方法包括以下动作(A)将高速缓存元数据存储在高速缓存设备中的包括多个分层结构层的分层数据结构中;(B)启动该计算机的重新引导;(C)在启动该计算机的重新引导之后,只将多个分层结构层的子集加载到存储器;(D)接收读取存储在存储介质上的一地址处的数据项的请求;(E)访问高速缓存元数据的第一部分以标识数据项被存储在高速缓存设备上的对应地址;以及(F)将高速缓存元数据的第一部分存储在存储器中。又一些实施方式提供一种计算机系统,包括存储器;在相应地址处存储多个数据项的存储介质;高速缓存设备,该高速缓存设备也在对应地址处存储多个数据项并存储提供存储介质上的地址与高速缓存设备上存储每一数据项的对应地址之间的映射的高速缓存元数据,该高速缓存元数据被存储在包括多个分层结构层的分层数据结构中;至少一个处理器,该至少一个处理器被编程成在启动计算机的重新引导之后,只将多个分层结构层的子集加载到存储器;通过使用高速缓存元数据来标识数据项被存储在高速缓存设备中的对应地址并通过将所标识的对应地址存储在存储器中来处理读取存储在存储介质上的相应地址处的数据项的请求;以及通过将多个分层结构层的该子集和所标识的对应地址从存储器中转移到高速缓存设备中来处理关闭计算机的命令。


图1A-1B是描绘根据现有技术的用于对高速缓存设备进行读写的技术的框图;图2A-2B描绘根据本发明的一些实施方式的用于对高速缓存设备进行读写的示例性技术;
图3是描绘根据本发明的一些实施方式的用于确保在电源转换之后高速缓存设备准确地反映存储在盘上的数据的示例性技术的框图;图4是描绘根据本发明的一些实施方式的用于存储高速缓存元数据的示例性技术的框图;图5是描绘根据本发明的一些实施方式的高速缓存元数据的示例性存储操作的框图;图6是根据本发明的一些实施方式的描绘用于使用高速缓存设备来对读请求进行服务的示例性技术的流程图;图7是描绘可被用来实现本发明的各方面的示例计算机的框图;以及图8是描绘其上可以记录实现本发明的各方面的示例计算机存储器的框图。
具体实施例方式本发明的一些实施方式提供用于确保在电源转换之间高速缓存内容准确地反映盘存储的内容的技术。例如,一些实施方式提供用于确保在电源转换之间高速缓存内容保持可信和/或没有变旧的能力。此外,一些实施方式提供用于管理高速缓存元数据以确保该元数据在电源转换期间不被篡改的技术。另外,一些实施方式提供用于存储可提高电源转换和正常操作的执行效率的高速缓存元数据的能力。以下章节详细地描述这些实施方式。I.验证高速缓存数据真实性在计算机经历电源转换时(例如,进入待机或休眠模式,或被重新引导),高速缓存设备可以从该计算机断开连接,并且其内容可被更改(例如,被恶意黑客更改)。例如,在计算机被带入待机或休眠模式时,诸如闪存驱动器等可移动高速缓存设备可以从该计算机断开连接并且其内容被修改。在重新引导(即,重新加载,从而重启计算机)操作系统时, 即使诸如内部NVRAM设备等不可移动设备也可以断开连接并且它们的内容被改变。结果, 在高速缓存设备重新连接到计算机时,它可以存储与用户认为的信息所不同的信息(即, 存储在高速缓存中的数据可能不是“可信的”)。如果从高速缓存提供不可信的数据来满足输入/输出(I/O)请求,则计算机的操作可能受到不利影响。本发明的一些实施方式提供用于检测在电源转换期间发生的对高速缓存内容的修改的技术,以确保I/O请求不是使用来自高速缓存的不可信数据来满足的。在一些实施方式中,提供检测在电源转换期间发生的对高速缓存内容的任何“离线修改”的能力,这些离线修改致使高速缓存内容变得不可信。—些实施方式使用该数据的至少一部分的表示来提供这一能力。例如,可以按预定方式从该数据的至少一部分和/或其他信息计算出或导出表示。该表示可以在该数据被首次写到高速缓存时生成并被存储在一个或多个位置处。例如,该表示可以连同该数据一起被写到高速缓存或某一(些)其他位置。当被存储到高速缓存时,该表示可以按将该表示与该数据进行关联的方式来存储(例如,它可被写到与该数据被写到的地址相邻的高速缓存地址、写到与该数据相关联的高速缓存元数据、和/或以某一其他方式进行关联)。当随后从高速缓存读取该数据时,还可以取回该表示。该表示可以按预定的方式来重新生成, 并且重新生成的表示可以与取回的表示进行比较。如果这些表示相匹配,则确定从高速缓存导出的数据是可信的,并且被提供来满足读请求。如果否,则发起请求来改为从盘存储读取该数据以满足该读请求,并且存储在高速缓存上的不可信数据可被驱逐(例如,删除)。图2A-2B更详细地描绘这一过程。具体而言,图2A中的过程20A包括在数据被写到高速缓存时执行的操作,并且图2B中示出的过程20B包括在从高速缓存读取了数据之后执行的操作。过程20A-20B各自包括由高速缓存的卷120(在每一附图的左侧)、高速缓存管理器100(在中间)以及高速缓存设备110(在右侧)所执行的操作。在过程20A的开始(图2A),在动作205中,高速缓存管理器100接收定向到盘存储上的地址X的写请求。在动作210,高速缓存管理器100采用高速缓存元数据(未示出) 来确定该数据还应被写到的高速缓存设备110上的地址Y。高速缓存管理器还生成该数据的至少一部分的表示。本发明的各实施方式可以使用任何合适的技术来生成这一表示。在一些实施方式中,可以使用一种或多种密码认证技术来生成该表示。例如,在一些实施方式中,该表示可包括从该数据和一组密钥和按数据项的序列号生成的消息认证码(MAC)。然而,本发明不限于这样的实现,因为可以使用用于生成该表示的任何合适技术。例如,不必使用密码认证技术。作为示例,强散列和/或循环冗余码(CRC)可以作为替换使用以表示数据,并且可以从存储到高速缓存的各单独数据项或一组或多组数据项中生成。在这一方面,申请人明白,如果验证数据真实性的目标仅仅是检测硬件故障的情况(即,对数据进行的黑客攻击不是关心的问题),则使用CRC可以是足够的,并且与为每一数据项生成MAC相比可以消费更少处理资源。然而,如果目标是阻止黑客或恶意行动者修改高速缓存内容,则密码解决方案可以是优选的,使得可以使用诸如MAC等表示。本发明不限于任何特定实现,因为可以使用任何合适的技术。在动作215,高速缓存管理器100对高速缓存设备110发起将数据写到高速缓存地址Y的请求。高速缓存管理器还向高速缓存设备110发起写入表示的请求。例如,高速缓存管理器100可以指定该表示应被写到与高速缓存地址Y相邻的一个或多个位置,或可被存储在该数据的高速缓存元数据中,和/或使用任何其他技术。如上所述,本发明不限于将该表示写到任何特定位置(例如,它不必被写到高速缓存设备110)。如果被写到高速缓存,则该表示可以按任何所需方式来与该数据相关联。在动作220,高速缓存设备110接收该请求并通过在动作225中写入该数据和该表示来处理该请求。在动作230,高速缓存管理器100向高速缓存的卷120发起将该数据写到盘地址X 的对应请求。在动作235,高速缓存的卷120接收这一请求并且在动作240通过将该数据写到地址X来处理这一请求。虽然在图2A中被示为在地址215-225中的到高速缓存的写操作之后执行,但动作230-240可以与动作215-225并行执行,或在任何其他合适的时间执行,因为本发明不限于任何特定实现。过程20A随后完成。过程20B(图2B)包括被执行来读取存储到高速缓存的数据的操作。在动作M5, 高速缓存管理器100接收读取存储在高速缓存的卷120上的地址X处的数据的请求。在动作250,使用高速缓存元数据(未示出),高速缓存管理器100确定该数据存储在高速缓存设备110上的地址Y处。在动作255,高速缓存管理器100向高速缓存设备110发起读请求以取回存储在地址Y处的数据和相关联的表示。在动作260,该请求由高速缓存设备110接收并在动作265进行处理,随之高速缓存设备100将结果返回到高速缓存管理器100。在动作270,高速缓存管理器100确定从高速缓存取回的数据是否可被验证。在一些实施方式中,这可以通过重新生成数据的表示并将重新生成的表示与最初在动作215生成的表示进行比较来完成。例如,动作270可包括重新生成该数据的MAC或CRC并将其与在动作265从高速缓存取回的表示进行比较。如果在动作270确定表示可被验证,则该过程进行至动作275,其中提供从高速缓存设备110取回的数据来满足读请求,并且过程20B随后完成。如果在动作270确定该表示可被验证,则该过程进行至动作观0,其中高速缓存管理器110向高速缓存设备110发起驱逐(例如擦除或以其他方式使其不可访问)存储在地址Y的数据的请求。在动作观5,高速缓存管理器100随后向高速缓存的卷120发起从盘上的地址X读取该数据的请求。在动作290接收该请求并在动作295进行处理,随之将该数据返回到高速缓存管理器100。在动作四9,随后提供从地址X读取的数据以满足读请求。过程20B随后完成。如果使用用于验证数据真实性的密码解决方案,则在电源转换期间,用于生成表示的任何密钥可被写到与高速缓存设备不同的位置,以阻止黑客获得对密钥的访问来重新生成被更改数据项的表示。例如,在一些实施方式中,密钥可被存储在盘存储中(例如,在计算机关机时)以阻止未经授权的访问。然而,本发明不限于这样的实现,因为不必存储密钥,并且如果存储了密钥则该密钥可以驻留在任何合适的位置。例如,所存储的密钥可被置于操作系统所提供的在系统引导期间可用的任何配置存储(例如,Windows中的系统注册表),或基于某用户输入(例如,口令)来重新生成,使得密钥存储不是必需的。应当明白,用于验证存储在高速缓存设备上的数据项的真实性的上述实施方式仅仅是示例,并且该真实性可以使用任何合适的技术来验证。例如,数据项真实性不一定通过在写入该数据项时生成该数据项的至少一部分的表示(在读取该数据项时该表示稍后被重新生成)来验证。可以使用可靠地确保从高速缓存读取的数据项是可信的并与先前写到高速缓存的数据项相匹配的任何合适的技术。本发明不限于任何特定实现。II.阻止高速缓存数据变旧如上所述,在致使高速缓存内容变旧的电源转换期间,常规操作系统不能检测何时对存储在盘上的数据项执行了写操作。本发明的一些实施方式提供用于检测这些“离线写”何时发生的机制,从而确保在电源转换发生之后高速缓存内容准确地反映存储在盘上的数据。对于一些操作系统(例如,微软公司提供的Windows系列操作系统),一些电源转换(例如,待机和休眠模式)的语义是在电源转换期间不可移动存储设备(例如,盘存储) 上的数据不能被修改。如此,与这样的不可移动介质上的数据相对应的高速缓存内容一般不变旧。然而,在计算机关机时,使盘上数据可能被修改的多件事情可能发生。例如,用户可将该盘引导到该计算机上的另一操作系统,或连接到另一计算机,并修改存储在盘上的数据。另外,如上所述,许多常规操作系统的关机机制是在关机期间的某一点处,高速缓存设备被关闭并且不再可由该操作系统访问,但该操作系统可继续访问盘。如此,操作系统可以更新盘上的被高速缓存在高速缓存设备上的数据项。因为高速缓存设备已被关闭,所以操作系统无法也更新这些高速缓存内容,使得它们变旧。为了管理这些和其他情况,本发明的一些实施方式提供用于检测在启动关机之后对存储在盘上的数据的修改的技术,以使得被这样的修改变旧的高速缓存内容可被更新、 从高速缓存中驱逐或以其他方式处理。为了检测在高速缓存设备被切断之后发生的关机操作期间对盘存储执行的写,本发明的一些实施方式采用写记录器组件。写记录器组件可以例如被实现为操作系统的I/O 路径中的驱动程序,但本发明不限于这样的实现。例如,写记录器组件可以是基于硬件的。 作为示例,盘存储硬件可以提供一个或多个接口,这些接口提供标识在特定时间段期间发生的一组修改或在特定时间段期间是否发生了修改的能力。例如,盘存储硬件可以提供可被用来推断出至少一些所存储的数据项已被更新的加速自旋/上电/引导计数器,在这种情况下,可以驱逐与存储器盘上的数据相对应的高速缓存内容(这不应频繁地发生,所以采用高速缓存设备仍然具有很多优点)。本发明不限于任何特定实现。在一些实施方式中,写记录器组件被配置成在启动关机时变得活动,并且保持对盘存储执行的所有写的跟踪,直至关机完成。结果,在稍后重启计算机时,这些写可被应用于高速缓存内容。例如,在重启计算机并且盘卷变得在线时,高速缓存管理器可随后启动并可开始跟踪对盘的写。高速缓存管理器可以查询写记录器组件来确定在高速缓存设备被切断之后发生的离线写,将这些写与高速缓存管理器在启动期间跟踪到的写相归并,并将写的经归并的集合应用于高速缓存内容。将写应用于高速缓存内容可包括例如更新与写被定向到的盘上的数据相对应的高速缓存内容(例如,对这些高速缓存内容执行相同的写操作)、驱逐这些高速缓存内容、这两者的组合(例如,将写操作应用于某些高速缓存内容并驱逐其他高速缓存内容)、或执行某一(些)其他操作。在将离线写应用于高速缓存内容之后,写记录器组件可被关闭,并且高速缓存设备可以开始对I/O请求进行服务。图3描绘用于跟踪离线写并将这些写应用于高速缓存内容的示例过程30。具体而言,过程300包括由高速缓存管理器100、写记录器300、高速缓存设备110以及高速缓存的卷120在计算机的关机和后续重新引导期间执行的操作。在动作305 (这发生在计算机关机期间),高速缓存管理器100激活写记录器300 并向其提供标识写记录器要跟踪的写操作的集合(即,生成)的“持久标识符”。(使用持久标识符的示例在下文详细描述。)在动作310,高速缓存管理器100将持久标识符以及存储在存储器中的高速缓存元数据写到高速缓存设备110中。在关机过程中的这一点处,高速缓存设备110被关闭并变得不可由高速缓存管理器100访问。在动作315,写记录器300将在动作305传递给它的持久标识符写到高速缓存的卷 120,并开始跟踪在关机期间对高速缓存的卷执行的任何写操作。例如,写记录器300可以在高速缓存的卷120上或在某一其他位置处创建日志文件或一个或多个其他数据结构,以指示对其执行写操作的盘上的地址和/或写到这些地址的数据。在动作315完成之后,计算机的关机操作结束。此后,重启计算机。作为引导过程的一部分,使高速缓存的卷120上线,重启写记录器300和高速缓存管理器100。高速缓存管理器100随后可以开始跟踪对高速缓存的卷 120执行的写操作。例如,高速缓存管理器100可以创建日志文件并将其存储在高速缓存设备110、高速缓存的卷120和/或计算机的存储器(未在图3中示出)上。在动作320,写记录器300读取在动作315中记录的卷改变,以及在动作315被写到高速缓存的卷120的持久标识符。随后在动作325,将卷改变和持久标识符传递到高速缓存管理器100。
应当明白,写记录器300可能不能够跟踪在高速缓存设备110被关闭之后对盘的所有写。例如,硬件数据毁坏、不合时宜的断电和/或在写日志文件时的问题可致使记录器 300不能够跟踪对盘卷执行的所有离线写。在这种情况下,写记录器300可以在动作325向高速缓存管理器100指示它不能可靠地确定日志是所执行的所有离线写的完整且准确的记录。如果这种情况发生,则高速缓存管理器100因为可能不可靠而可以驱逐整个高速缓存内容或其一部分(例如,与写记录器不能跟踪其所有写操作的特定盘卷相对应)。图3的描述的其余部分设想写记录器300能够跟踪所有离线写。在动作330,高速缓存管理器100从高速缓存设备110将高速缓存元数据和持久标识符读到存储器中。高速缓存管理器100确定持久标识符是否可被验证(这在下文进一步描述)。如果不能,则高速缓存管理器100可以驱逐高速缓存设备110的整个内容或其一部分(例如,与持久标识符不能被验证的特定盘卷相对应)。如果持久标识符可被验证,则高速缓存管理器100归并对盘存储执行的任何写操作,因为计算机是使用写记录器300跟踪到的任何写操作来重启的。例如,如果一个或多个日志指示被写到盘上的每一地址的数据, 则高速缓存管理器100可以选择对每一地址执行的最近更新并将其写到存储器。在一些实施例中,写记录器300可被配置成在重启计算机之后继续记录写,使得高速缓存管理器100不必记录在该点之后执行的写并将它们与写记录器300跟踪到的写相归并。相反,写记录器300可以简单地向高速缓存管理器100提供所有写的记录。在动作335,使用在动作330中读取的高速缓存元数据,高速缓存管理器100随后将一组写应用于高速缓存设备110的内容。如上所述,应用写可包括驱逐高速缓存内容、更新高速缓存内容、进行这两个操作、或执行某一(些)其他操作。例如,可以通过驱逐对应的高速缓存内容来应用写记录器300在动作315跟踪到的离线写,而可通过更新对应的高速缓存内容来应用高速缓存管理器100跟踪到的自计算机重启以来的写以反映这些写。将写操作应用于高速缓存内容可以用任何合适的方式来执行,因为本发明不限于任何特定实现。在动作335完成之后,图3的过程完成。应当明白,本发明不限于使用被配置成在关机启动时变得活动的写记录器组件, 因为还可以或替换地跟踪不在关机期间发生的写操作。例如,在一些实现中,高速缓存设备能在一段时间期间不可访问。例如,如果高速缓存设备是经由一个或多个网络访问的,则连接可能丢失,或者如果高速缓存设备可从计算机移除,则可发生意外(例如,非有意)移除。 结果,一些实施例可以使用写记录器来跟踪对盘执行的所有(或一部分)写,而非只跟踪在关机期间发生的那些写,以及被配置成当在线时周期性地捕捉高速缓存“快照”的高速缓存设备。如此,如果高速缓存在某一时间段期间变得不可访问并且稍后重新连接,则最新高速缓存快照可以使用写记录器所跟踪的写操作来进行更新,而非必须被完全重建。还应当明白,尽管图3的示例过程30可以检测操作系统在关机期间执行的离线写,但在关机之后可能需要其他测量来检测对盘执行的离线写。这样的写可以在例如以下情况下发生用户在关机之后将盘引导到另一操作系统或在关机之后将盘从计算机移除并将其连接到另一计算机,并随后修改存储在盘上的数据。认识到与尝试跟踪在关机之后发生的离线写(例如,由另一操作系统进行的)相关联的困难,本发明的一些实施例改为阻止它们发生。例如,一些实施例尝试使特定盘卷对在关机之后不提供写记录器组件的操作系统不可用。这能够以多种方式中的任一种来完成。在一些实施例中,写记录器300可以用以下方式来标记盘卷该盘卷不可由不提供用于跟踪离线写的写记录器组件的操作系统挂载。例如,写记录器300可以修改指示在该卷所使用的文件系统的类型的卷标识符。就此,本领域技术人员将认识到,卷标识符使操作系统能够标识被用来在该卷上存储数据的文件系统的类型,从而使操作系统能够理解存储在该卷上的数据的结构、在何处找到文件,等等。例如,如果卷标识符指示使用NT File System(NTFS)文件系统来在该卷上存储数据,则尝试挂载该卷的另一操作系统会理解将需要解析NTFS文件系统并访问其上的数据。如果卷标识符没有提供被用来在卷上存储数据的文件系统的类型的指示,则大多数操作系统将不能挂载该卷,因为将没有可靠的方式来理解存储在其上的数据的结构。如此,本发明的一些实施例修改盘卷的卷标识符以使其不可访问,从而防止用户将该盘卷引导到另一操作系统以及防止用户对存储在该卷上的数据进行离线改变。认识到即使该卷标识符被修改一些操作系统也能够标识用来在卷上存储数据的文件系统的类型,本发明的一些实施例提供一种用于检测操作系统何时挂载该卷的机制。 就此,为了挂载盘卷,任何操作系统将需要更新卷标识符(例如,以指示使用了 NTFS文件系统来在该卷上存储数据)以允许访问其上的数据。在重新引导时,任何这样的更新将是易于检测的。如果检测到这样的更新,则本发明的一些实施例可以设想自最后关机以来该卷的内容已被修改,并且驱逐与存储在该卷上的数据相对应的高速缓存内容。本发明的一些实施例提供盘卷可由此被引导到也使用写记录器组件的另一操作系统的能力。例如,如果盘要从运行提供写记录器组件的操作系统的一个计算机移除,并且将该盘引导到提供写记录器组件的另一操作系统,则该另一操作系统可被配置成识别出经改变的卷标识符指示该卷被高速缓存。结果,该另一操作系统可以添加到第一操作系统所创建的离线写的日志(例如,存储在该卷上)。被设计成使盘卷不可由某些操作系统挂载的上述实施例可能对依赖于卷标识符来执行特定功能(例如,备份应用)的某些应用造成问题。对于这些应用,如果卷标识符被改变,则该卷不可识别并且因而不可被备份。因此,本发明的一些实施例提供一种用于确定在关机之后文件系统是否被挂载的机制。如果是,则设想对文件系统中的数据进行了改变, 并且驱逐与该文件系统中的数据相对应的所有高速缓存内容。一些实施例可以通过在关机时将文件系统日志置于将需要尝试挂载文件系统的任何操作系统以某种方式修改(例如,改变其位置、添加新条目等)该日志的状态来检测关机之后对该文件系统的挂载。例如,写记录器300可以在文件系统被卸载时记录文件系统日志的位置和/或内容来作为记录离线写的任务的一部分(例如在日志本身中)。因为尝试挂载该文件系统的任何操作系统都将必须改变该日志(例如,如果该文件系统是NTFS系统,则尝试挂载该文件系统的操作系统将向该日志添加一条目),所以如果该日志在重新引导期间未被改变,则设想该文件系统在电源转换期间没有被另一操作系统挂载,使得对应于存储在该文件系统中的数据的高速缓存内容未被致使变旧。相反,如果该日志被以某种方式改变(例如,其位置已改变,并且添加了条目,等等),则设想该文件系统被另一操作系统挂载,并且存储在其中的数据已被改变,致使对应于存储在该文件系统中的数据的高速缓存内容变旧。如此,可以驱逐这些高速缓存内容。除提供用于防止离线写的机制之外,本发明的一些实施例提供用于管理不一致的各代高速缓存内容的能力。可能出于多种原因中的任一种而产生了不一致的各代高速缓存内容。在其上连接有第一和第二高速缓存设备的第一和第二计算机采用本文描述的技术跨电源转换来持久存储高速缓存内容的情况下,一个示例可以发生。如果第二高速缓存设备连接到第一计算机(或第一高速缓存设备连接到第二计算机)并且第一计算机重启,则可从第二高速缓存设备提供不正确的数据来满足I/O请求。这是因为第一计算机的操作系统将认为第二高速缓存设备的内容是真实(因为重新生成的从高速缓存返回的数据的表示可与原始生成的表示相匹配)且不旧的(因为离线写可被应用于高速缓存内容)。另一示例可以在以下情况下发生第一高速缓存设备连接到计算机,该计算机被关机(从而持久存储高速缓存内容),该计算机随后重启,连接第二高速缓存设备,并且该计算机被再次关机(从而再次持久存储高速缓存内容)。如果该计算机随后再次重启并且连接第一高速缓存设备,则可提供不正确的数据来满足I/O请求,因为没有可靠的方式来确定第一高速缓存设备没有存储最新一代的高速缓存内容。一些实施例提供用于标识不一致的各代高速缓存内容的能力,使得在最后关机之前持久存储的高速缓存内容不会被错误地用来满足I/O请求。在一些实施例中,这一能力是经由唯一的持久标识符来提供的,这可以按多种方式中的任一种来在启动关机时生成 (作为示例)。例如,可以将GUID和/或密码随机数生成器用于这一目的。如以上参考图3 所述,在计算机启动时,持久标识符可以存储在高速缓存设备上(例如,存储在高速缓存元数据中或与其一起存储)以及计算机上(例如,在盘上和/或存储器上)并且被验证(例如,通过将两个版本进行比较)。如果验证成功,则高速缓存内容可因表示先前持久存储的高速缓存代而被驱逐。如上述认证密钥一样,用来生成持久标识符的任何密钥可在电源转换期间被写到与高速缓存设备不同的位置。例如,在一些实施例中,写记录器组件可以将密钥以及持久标识符写到盘存储(例如,在关机时)。然而,本发明不限于这样的实现,因为本领域技术人员可以想到可保存密钥的多个替换位置。密钥可以例如被保持在操作系统所提供的在系统引导期间可用的任何配置存储中(例如,Windows中的注册表)。III.高速缓存元数据如上所述,高速缓存元数据可以提供存储了数据项的盘地址与高速缓存设备上的高速缓存了这些数据项的对应地址之间的映射。本发明的一些实施例提供用于存储高速缓存元数据的能力,这一能力显著地减少了在系统运行时操作期间存储高速缓存元数据所需的存储器容量。另外,一些实施例提供在跨电源转换或使高速缓存设备离线的任何其他情况下 (例如,从计算机移除高速缓存设备、使网络高速缓存设备不可访问的网络断线,等等)允许依赖高速缓存元数据的技术,使得在计算机重启和/或使高速缓存设备在线时高速缓存内容可被可靠地访问。就此,应当明白,对于特定类型的电源转换(例如,待机或休眠模式),简单地将高速缓存元数据存储在存储器(即,RAM)中是可接受的,因为在待机和休眠转换期间存储器的内容被保留。然而,在重新引导期间,系统存储器的内容不被保留。如此,本发明的一些实施例允许在关机期间将高速缓存元数据存储在某一个或多个非易失性介质中,并随后在重新引导时还原。例如,高速缓存元数据可以存储在高速缓存设备上,和/ 或存储在一个或多个分开的非易失性介质上。此外,一些实施例能够从高速缓存元数据的一部分中导出其他部分,使得不需要存储所有高速缓存元数据。一些实施例可以使用在以上第I节中描述的用于验证高速缓存元数据的真实性的技术,以便检测并防止在高速缓存设备离线时(例如,在计算机关机期间,从计算机移除高速缓存设备,使网络高速缓存设备不可访问的网络断线,等等)对元数据的无意或恶意修改。例如,在高速缓存设备上线时,高速缓存管理器可以在使用参考图2A-2B描述的技术在将元数据加载到存储器时验证元数据的真实性。如果高速缓存元数据的真实性不能被验证,则如上所述,对应的高速缓存内容可基于存储在盘上的数据而被更新、驱逐、或以其他方式处理。在一些实施例中,高速缓存元数据可被压缩以减少在关机期间保存并在重新引导时加载的元数据的量。因为元数据的压缩需要保存包含与该元数据有关的信息的单独一段信息(例如,高速缓存中的头),所以上述技术也可被用来在重新引导时验证这一信息的真实性。本发明的一些实施例提供用于以极大地减少任何一次存储在存储器中的高速缓存元数据的量的方式来存储高速缓存元数据的技术,从而减少将高速缓存元数据加载到存储器或从存储器中卸载它(例如,在运行时和启动/关机操作期间)所需的时间量并极大地减少高速缓存元数据的存储器“脚印”。就此,应当明白,在高速缓存设备具有相对大的存储容量的情况下,需要相当大量的元数据来管理高速缓存内容。例如,具有16GB存储容量的高速缓存设备能够存储多达32GB的压缩数据。在一些实现中,盘地址在高速缓存元数据中以表示4KB盘存储的“数据单元”来反映。如此,为了跟踪32GB数据的位置,需要8百万个不同的数据单元。如果这8百万个数据单元中的每一个都使用16字节映射(即,从盘地址到高速缓存地址)来在高速缓存元数据中表示,则这些映射需要U8MB存储。申请人明白,在许多计算机中,在存储器中存储U8MB高速缓存元数据将占据不必要这么大的存储器部分。另外,在关机期间将U8MB高速缓存元数据从存储器写到非易失性介质中或在重新引导时将U8MB高速缓存元数据从非易失性介质还原到存储器中所需的时间,将是极其耗时的并且消耗过多量的处理资源。认识到高速缓存元数据的量不能容易地减少,本发明的一些实施例提供被设计成减少存储高速缓存元数据所需的存储资源以及在关机和启动期间保存和还原高速缓存元数据所需的时间和处理资源的技术。在一些实施例中,这是通过将高速缓存元数据存储在一个或多个分层数据结构中 (例如,树、多级数组等)来实现的。使用分层数据结构可以允许该分层结构的较低层被存储在非易失性介质中(例如,高速缓存设备),而只有该分层结构的较高层被存储在存储器中。例如,在一些实施例中,只有分层结构的较高层被存储在存储器中,使得即使在支持具有大存储容量的高速缓存设备所需的高速缓存元数据的量被总体存储时,存储器在高速缓存元数据中占据的“脚印”也被极大地减少。当然,尽管只将分层结构的较高层存储在高速缓存元数据中,但一些实施例也可以允许将在该分层结构的较低层处保存的一些信息存储在存储器中,以便降低与对这一信息的重复访问相关联的I/O开销。本发明不限于用任何特定方式来实现。
在系统操作期间,在处理读请求时,为执行该读操作而从非易失性介质中(即,从分层结构的较低层)读出的高速缓存元数据可被“编页”到(即,从存储介质中读到)存储器中,以使得它可被针对同一盘/高速缓存地址的后续读请求更快地访问。在计算机稍后关机时和/或使高速缓存设备离线时,只有存储在分层结构的较高层处的高速缓存元数据和存储在分层结构的较低层处的被编页到存储器中的高速缓存元数据才需要被保存到非易失性介质中。如此,在关机时将高速缓存元数据从存储器移到非易失性存储以及在重新引导时将高速缓存元数据从非易失性存储还原到存储器所需的时间可被显著地减少。本发明的一些实施例使用B+树来存储高速缓存元数据的至少一部分。如本领域技术人员将明白的,B+树可以使用大分支因子,并且因此减少所使用的分层结构中的层级的数量。使用以上给出的示例,如果要在高速缓存元数据中表示8百万个数据单元并且使用分支因子为200(使得分层结构中的每一节点具有200个“子”节点)的B+树,则只具有 3层的数据结构将足以存储该元数据最高层处单个“根”节点,第二层处200个节点,以及第三层处4万个节点,这4万个节点中的每一个包括指向200个数据单元的指针(即,总共 8百万个数据单元)。图4描绘包括根节点400、二层节点410^。以及三层节点420^。的这一示例B+ 树。每一节点包括200个元素,各元素由指向分层结构中的下一层处的节点的指针来分开。 例如,根节点400中的元素402被指针401和403定界。可以通过沿着节点中的元素的左侧或右侧的指针来确定与给定键(例如,盘地址)相关联的值(例如,高速缓存地址),其中在该键小于该元素的情况下沿着该元素左侧的指针,并且在该键大于该元素的情况下沿着右侧的指针。例如,为了确定小于元素402的键的值,将沿着指针401到达二层节点410” 为了确定大于元素402而小于元素404的键的值,将沿着指针403到达二层节点4102 (未示出),以此类推。类似地,在二层节点处,沿着元素左侧或右侧(取决于键大于还是小于节点中的元素)的指针到达三层节点。在第三层处,沿着最终指针(同样基于键小于还是大于节点中的元素)到达该值,其中第三层处的每一指针都引用高速缓存元数据中的8百万个数据单元之一。应当明白,具有大分支因子的B+树提供相对“平坦”的分层结构,几乎所有节点都位于该分层结构的底层。即,在该树中的总共40,201个节点中,40,000个节点处于最低层。本发明的一些实施例通过以下方式来利用这一点在启动时只还原该分层结构的头两层,同时该分层结构的最低层中的高速缓存元数据被存储在高速缓存设备中直至需要它为止(例如,它可在处理读请求时被按需加载到存储器中、懒散地加载,等等)。因为只有分层数据结构的一部分被存储在存储器中,所以与在存储器中维护全部高速缓存元数据或其更大部分所需的存储器相比,高速缓存元数据可占据小得多的存储器部分。另外,在计算机关机时,只有头两层的数据和在操作期间被加载到存储器中的数据需要存储在高速缓存设备上。结果,启动和关机操作可以快速且高效地执行。因此,本发明的一些实施例提供分层结构的被存储在存储器中的至少一层(在以上示例中,分层结构的头两层)处的节点中的指针,这些指针引用该分层结构的存储在高速缓存设备上的另一层(在以上示例中,第三层)处的节点。例如,在接收到对高速缓存的数据项的读请求时,本发明的各实施例沿着指针穿过该分层结构的存储在存储器中的一层或多层并随后到达该分层结构的存储在高速缓存中的较低层处的元数据,以确定该数据项被存储在高速缓存中的地址。在一些实施例中,一旦确定了数据项的高速缓存地址,它就可被存储在存储器中,使得读取该项的后续请求可以在不必从高速缓存设备读取高速缓存元数据的情况下来执行。图5描绘根据本发明的一些实施例的用于管理高速缓存元数据的示例系统50。图 5描绘存储器500和高速缓存设备110,这两者都可由计算机(未示出)访问。在计算机启动时,在操作505,包括诸如B+树等分层数据结构的一层或多层的高速缓存元数据被加载到存储器500中。使用以上示例来说明,如果高速缓存元数据中表示了 8百万个数据单元,使得可以使用三层分层数据结构来存储该高速缓存元数据,则分层结构的头两层可被加载到存储器500。当然,如果元数据中表示了多于或少于8百万个数据单元,并且使用了具有多于或少于三层的分层数据结构,则该分层结构的不同数量的层可被加载到存储器500中。此后,在读请求被定向到在高速缓存中维护的数据项时,通过访问分层结构的被存储在高速缓存设备110中的(各)层中所存储的高速缓存元数据来确定存储该数据项的高速缓存地址。这一高速缓存元数据随后被存储在存储器510中,使得对该数据项的后续读或写可以在不必读取存储在高速缓存设备上的高速缓存元数据以确定存储该数据项的高速缓存地址的情况下来执行。相反,可以从存储器中读取该高速缓存地址,这可比对高速缓存的读更快地执行。稍后,在计算机关机时,在动作515,将存储在存储器中的高速缓存元数据(即, 分层结构的在操作505被加载到存储器中的各层中所存储的元数据,以及用于满足读请求的、在操作510写到存储器的任何元数据)加载到高速缓存设备500中。作为相对小量的高速缓存元数据被存储在存储器中的结果,可以快速地执行关机,而不需要大量的处理资源。应当明白,B+树只是可被用来存储高速缓存元数据的多种类型的数据结构之一, 并且可以使用其他类型的数据结构(例如分层结构,诸如AVL树、红黑树、二分搜索树、B树、 和/或其他分层和非分层数据结构)。本发明不需要少于任何一种数据结构或数据结构的组合来存储高速缓存元数据。一些实施例可以允许在任何一次都要在存储器中保持“目标量”的高速缓存元数据。该目标量可以用任何合适的方式来确定。例如,目标量可以是计算机可用的物理存储器的量的百分比。例如,如果计算机具有IGB存储器,则可在任何一次在存储器中存储2MB 高速缓存元数据(作为示例)。因此,在计算机关机时,只需加载2MB高速缓存元数据到高速缓存设备中。在一些实施例中,高速缓存元数据可以在存储器中进进出出地循环。例如,如果目标量的高速缓存元数据已经存储在存储器中,并且执行了需要从高速缓存设备中读取高速缓存元数据的读,则如该元数据可被“编页”到存储器中,并且可以擦除其他高速缓存元数据(例如,最不频繁访问的高速缓存元数据)。例如,高速缓存元数据可以在被写到高速缓存设备之后擦除。或者,该系统可以确定高速缓存元数据自它最后一次被写出之后是否已改变,并且如果否,则可简单地擦除它,从而消除了写入该高速缓存元数据所需的时间和处理资源。使用上述技术,可保持高速缓存元数据在存储器中占据小的“脚印”。图6描绘一示例。具体而言,图6中示出的过程60包括可由高速缓存管理器110 执行来使用上述技术读取高速缓存元数据的操作。在过程600的开始处,在动作605接收请求以读取存储在盘地址X处的数据。在动作610,作出存储该数据的高速缓存地址是否可从存储在存储器中的高速缓存元数据中标识的判定。如果是,则过程进行至动作615,在这里确定所标识的高速缓存地址,并随后在动作620将其用来发起对高速缓存设备110的读请求。过程60随后完成。如果不能使用存储在存储器中的高速缓存元数据标识该高速缓存地址,则过程进行至动作625,在这里从高速缓存设备110读取高速缓存元数据以确定存储该数据的高速缓存地址。使用在动作 625标识的高速缓存偏移,在动作620向所标识的高速缓存偏移发起读请求,并且过程60随后完成。应当明白,将高速缓存元数据存储在高速缓存设备上不仅可以在启动和关机期间加快加载和还原高速缓存元数据的过程,还可以加快启动和关机期间执行的系统操作。就此,关机和启动通常涉及对特定数据项的多次访问,并且对高速缓存设备执行两次读操作通常比对盘存储执行一次读操作还快。结果,如果在关机和/或启动期间访问的数据项以及指定其位置的元数据两者都被存储在高速缓存中,则该数据项可比该数据项被存储在盘上的情况被更快地访问,因为对高速缓存的两次读(即,一次访问高速缓存元数据以确定该项的位置,并且第二次访问该项本身)通常可比对盘的单次读执行得更快。如此,在关机和启动期间执行的各单独操作可被加速。此外,如果在从高速缓存第一次读取高速缓存元数据期间存储该项的地址被编页到存储器中,则对该数据项的后续读可以更快速地执行, 因为对存储器的读通常可以比对高速缓存的读更快地执行。用于实施本发明的各特征的系统和方法的各方面可被实现在一个或多个计算机系统上,如图7中示出的示例性计算机系统700。计算机系统700包括输入设备702、输出设备701、处理器703、存储器系统704和存储706,这些设备全都经由可包括一个或多个总线、 交换机、网络和/或任何其他合适互连的互连机制705来直接或间接耦合。输入设备702接收来自用户或机器(例如,人类操作者)的输入,并且输出设备701向用户或机器(例如, 液晶显示器)显示或传送信息。处理器703通常执行被称为操作系统(例如,微软Windows 系列操作系统或任何其他合适的操作系统)的计算机程序,操作系统控制其他计算机程序的执行并提供调度、输入/输出以及其他设备控制、会计、汇编、存储安排、数据管理、存储器管理、通信以及数据流控制。笼统而言,处理器和操作系统定义为其编写应用程序和其他计算机程序语言的计算机平台。处理器703还可执行一个或多个计算机程序以实现各种功能。这些计算机程序语言可以用任何类型的计算机程序语言来编写,包括过程程序设计语言、面向对象的程序设计语言、宏语言、或它们的组合。这些计算机程序可以存储在存储系统706中。存储系统 706可以将信息保持在易失性或非易失性介质上,并可以是固定或可移动的。在图8中更详细的示出了存储系统706。存储系统706通常包括计算机可读和可写非易失性记录介质801,其上存储有定义计算机程序或要由该程序使用的信息的信号。介质可以是例如盘或闪存。通常,在操作中,处理器703使得数据从非易失性记录介质801读入易失性存储器802(例如,随机存取存储器,即RAM)中,易失性存储器802与介质801相比允许处理器703进行更快的信息访问。存储器802可以位于存储系统706中,如图8所示,或位于存储器系统704中,如图7 所示。处理器703 —般处理集成电路存储器704、802内的数据,然后在处理完成之后将这些数据复制到介质801中。已知有各种机制可用于管理介质801和集成电路存储元件704、802之间的数据移动,并且本发明不限于此。本发明也不限于特定的存储器系统704或存储系统706。此外,本发明的各实施例也不限于使用被实现成操作系统的I/O栈中的驱动程序的高速缓存管理器组件。作为替换或补充,可以使用任何合适的组件或组件组合,这些组件中的每一个可由操作系统或一个或多个独立组件来实现。本发明不限于任何特定实现。可以用多种方式中的任一种来实现本发明的上述实施例。例如,可使用硬件、软件或其组合来实现上述功能。当使用软件实现时,该软件代码可在无论是在单个计算机中提供的还是在多个计算机之间分布的任何合适的处理器或处理器集合上执行。就此,应当理解,执行在此描述的功能的任何组件或组件集合一般可被认为是控制上述功能的一个或多个控制器。一个或多个控制器可以用众多方式来实现,诸如用专用硬件、或通过采用使用执行上述功能的微码或软件来编程的一个或多个处理器。在控制器存储或提供数据以供系统操作的情况下,这些数据可以存储在中央储存库中、多个储存库中、或其组合。此外,应当明白,(客户机或服务器)计算机可以用多种形式的任一种来具体化, 如机架式计算机、台式计算机、膝上型计算机、平板计算机、或其他类型的计算机。另外,(客户机或服务器)计算机或终端可以嵌入在通常不被认为是计算机但具有合适的处理能力的设备中,包括个人数字助理(PDA)、智能电话、或任何其他合适的便携式或固定电子设备。同样,(客户机或服务器)计算机可以具有一个或多个输入和输出设备。这些设备主要可被用来呈现用户界面。可被用来提供用户界面的输出设备的示例包括用于可视地呈现输出的打印机或显示屏和用于可听地呈现输出的扬声器或其他声音生成设备。可被用作用户接口的输入设备的示例包括键盘和诸如鼠标、触摸板和数字化桌等定点设备。作为另一示例,计算机可以通过语音识别或以其他可听格式来接收输入信息。这些计算机可以通过任何合适形式的一个或多个网络来互连,包括作为局域网或广域网,如企业网络或因特网。这些网络可以基于任何合适的技术并可以根据任何合适的协议来操作,并且可以包括无线网络、有线网络或光纤网络。而且,此处略述的各种方法或过程可被编码为可在采用各种操作系统或平台中任何一种的一个或多个处理器上执行的软件。此外,软件可使用多种合适的程序设计语言和/或常规程序设计或脚本工具中的任何一种来编写,而且它们还可被编译为可执行机器语言代码或在框架或虚拟机上执行的中间代码。就此,本发明可被具体化为用一个或多个程序编码的一个或多个存储介质(例如,计算机存储器、一个或多个软盘、紧致盘、光盘、磁带、闪存、现场可编程门阵列或其他半导体器件中的电路配置、或其他计算机存储介质),当这些程序在一个或多个计算机或其他处理器上执行时,它们执行实现本发明的上述各个实施例的方法。这一个或多个存储介质可以是便携的,使得其上存储的一个或多个程序可被加载到一个或多个不同的计算机或其他处理器上以便实现本发明上述的各个方面。此处以一般的意义使用术语“程序”或“软件”来指可被用来对计算机或其他处理器编程以实现本发明上述的各个方面的任何类型的计算机代码或计算机可执行指令集。另外,应当理解,根据本实施例的一个方面,当被执行时实现本发明的方法的一个或多个计算机程序不必驻留在单个计算机或处理器上,而是可以按模块化的方式分布在多个不同的计算机或处理器之间以实现本发明的各方面。计算机可执行指令可以用可由一个或多个计算机或其他设备执行的各种形式来提供,诸如程序模块。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。通常,在各实施例中,程序模块的功能可以视需要组合或分布。本发明的各个方面可单独、组合或以未在前述实施例中具体讨论的各种安排来使用,从而并不将其应用限于前述描述中所述或附图中所示的组件的细节和安排。例如,可使用任何方式将一个实施例中描述的各方面与其他实施例中描述的各方面组合。在权利要求书中使用诸如“第一”、“第二”、“第三”等序数词来修饰权利要求元素本身并不意味着一个权利要求元素较之另一个权利要求元素的优先级、先后次序或顺序、 或者方法的各动作执行的时间顺序,而仅用作将具有某一名字的一个权利要求元素与(若不是使用序数词则)具有同一名字的另一元素区分开的标签以区分各利要求元素。同样,此处所使用的短语和术语是出于描述的目的而不应被认为是限制。此处对 “包括”、“包含”、或“具有”、“含有”、“涉及”及其变型的使用旨在包括其后所列的项目及其等效物以及其他项目。至此描述了本发明的至少一个实施例的若干方面,可以理解,本领域的技术人员可容易地想到各种更改、修改和改进。这样的更改、修改和改进旨在是本发明的一部分且旨在处于本发明的精神和范围内。因此,上述描述和附图仅用作示例。
权利要求
1.一种用于操作包括存储器并且与存储介质(706)和高速缓存设备(110)耦合的计算机(700)的方法,所述存储介质将多个数据项的每一个存储在相应的地址处,所述多个数据项中的每一个还被存储在所述高速缓存设备(110)上的对应地址处,所述计算机可访问的高速缓存元数据提供所述存储介质上的地址与所述高速缓存设备上存储每一数据项的对应地址之间的映射,所述方法包括以下动作(A)将所述高速缓存元数据存储在包括多个分层结构层的分层数据结构中;以及(B)只将所述多个分层结构层的子集加载到所述存储器中。
2.如权利要求1所述的方法,其特征在于,所述动作(B)还包括将所述多个分层结构层的剩余层中的至少一部分存储在所述高速缓存设备上。
3.如权利要求1所述的方法,其特征在于,还包括在动作(A)之后执行的动作,该动作包括启动所述计算机的重新引导和/或使所述高速缓存设备离线,并且其中所述动作(B) 是在启动所述计算机的重新引导和/或使所述高速缓存设备在线之后执行的。
4.如权利要求1所述的方法,其特征在于,所述分层数据结构具有至少一百的分支因子。
5.如权利要求1所述的方法,其特征在于,动作(A)还包括响应于使所述高速缓存设备离线的命令来将高速缓存元数据存储在所述高速缓存设备上。
6.如权利要求1所述的方法,其特征在于,还包括以下动作(D)接收读取存储在所述存储介质上的一地址处的数据项的请求;(E)访问所述高速缓存元数据的第一部分以标识所述高速缓存设备上的存储所述数据项的对应地址;以及(F)将所述高速缓存元数据的所述第一部分中的至少一些存储在所述存储器中。
7.如权利要求6所述的方法,其特征在于,所述地址(D)还包括作为被执行来引导操作系统和/或使高速缓存设备在线的操作的一部分来接收读取数据项的请求。
8.如权利要求6所述的方法,其特征在于所述动作(D)还包括接收读取每一个都存储在所述存储介质上的相应地址处的多个数据项的请求;所述动作(E)还包括对于在(D)中接收到的每一请求,访问所述高速缓存元数据来标识所述高速缓存设备上的存储数据项的对应地址;所述动作(F)还包括对于(E)中的每一访问,将所述对应地址的指示存储在所述存储器中;以及其中所述方法还包括以下动作(G)在接收到关闭所述计算机的命令之后,将所述多个分层结构层的在(C)中被加载到所述存储器中的子集和/或在(F)中存储的所述指示存储到所述高速缓存设备。
9.如权利要求6所述的方法,其特征在于,所述动作(F)还包括(Fl)确定高速缓存元数据的目标量已被存储在所述存储器中;(F2)如果确定高速缓存元数据的所述目标量已被存储在所述存储器中,则;标识高速缓存元数据的要从所述存储器中擦除的第二部分;擦除高速缓存元数据的所述第二部分;以及将高速缓存元数据的所述第一部分存储到所述存储器;以及(F3)如果确定高速缓存元数据的目标量尚未被存储在所述存储器中,则将高速缓存元数据的所述第一部分存储到所述存储器。
10.如权利要求9所述的方法,其特征在于,所述存储器具有一存储容量,并且其中所述动作(F)中的确定是相对于所述存储器的存储容量来执行的。
11.如权利要求6所述的方法,其特征在于,所述动作(E)还包括验证所述高速缓存元数据在所述动作(A)完成之后未被修改。
12.如权利要求11所述的方法,其特征在于,动作(A)还包括生成所述高速缓存元数据的至少一部分的表示并将所述表示写入到所述高速缓存设备,并且其中(E)中的验证动作包括(El)获取被写入到所述高速缓存设备的表示;(E2)重新生成所述表示;以及(E3)将在(El)中获取到的表示与在(E》中重新生成的表示进行比较以确定所述高速缓存元数据是否可被可靠地用来标识所述高速缓存设备上的存储所述数据项的对应地址。
13.如权利要求12所述的方法,其特征在于,还包括以下动作(E4)如果确定所述高速缓存元数据能被可靠地用来标识所述对应地址,则读取所述高速缓存设备上的对应地址处的数据项;以及(E5)如果确定所述高速缓存元数据不能被可靠地用来标识所述对应地址,则驱逐所述高速缓存元数据并从所述存储介质上的地址读取所述数据项。
14.至少一个其上编码有在被包括存储器并且与盘存储(706)和高速缓存设备(110) 耦合的计算机(700)执行时执行一种方法的指令的计算机可读存储介质,所述盘存储将多个数据项的每一个存储在相应的地址处,所述多个数据项中的每一个还被存储在高速缓存设备上的对应地址处,该计算机可访问的高速缓存元数据提供所述盘存储上的地址与所述高速缓存设备上存储每一数据项的对应地址之间的映射,所述方法包括以下动作(A)将所述高速缓存元数据存储在所述高速缓存设备中的包括多个分层结构层的分层数据结构中;(B)启动所述计算机的重新引导;(C)在启动所述计算机的重新引导之后,只将所述多个分层结构层的子集加载到所述存储器;(D)接收读取存储在所述存储介质上的一地址处的数据项的请求;(E)访问所述高速缓存元数据的第一部分以标识所述高速缓存设备上的存储所述数据项的对应地址;以及(F)将所述高速缓存元数据的所述第一部分存储在所述存储器中。
15.一种计算机系统(700),包括存储器(704);将多个数据项存储在各相应地址的存储介质(706);高速缓存设备(110),所述高速缓存设备也将所述多个数据项存储在对应地址处,并存储提供所述存储介质上的地址与所述高速缓存设备上存储每一数据项的对应地址之间的映射的高速缓存元数据,所述高速缓存元数据存储在包括多个分层结构层的分层数据结构中;至少一个处理器(703),所述至少一个处理器被编程为在启动所述计算机的重新引导之后,只将所述多个分层结构层的子集加载到所述存储器;处理读取被存储在所述存储介质上的各相应地址处的数据项的请求,所述请求是通过使用所述高速缓存元数据来标识所述高速缓存设备中的存储所述数据项的对应地址并通过将所标识的对应地址存储在所述存储器中来处理的;以及通过将所述多个分层结构层的子集和所标识的对应的地址从所述存储器转移到所述高速缓存设备来处理关闭所述计算机的命令。
全文摘要
提供了用于管理将存储介质(例如,盘)上的地址映射到高速缓存设备上的对应地址的高速缓存元数据的技术。高速缓存元数据可以存储在分层数据结构中。只有分层结构的各层的子集可被加载到存储器,从而减少高速缓存元数据的存储器“足迹”并在启动期间加速它的还原。启动还可以通过使用高速缓存元数据来执行与重新引导相关联的操作来进一步加速。在使用高速缓存元数据来标识该数据被存储在高速缓存中的地址以处理对从存储中读取数据的请求时,所标识的地址可被存储在存储器中。在计算机稍后关机时,只有分层结构各层的子集和/或所标识的地址会被转移(例如,转移到高速缓存设备),而不是必须将高速缓存元数据整个从存储器转移到存储中,从而加速关机。
文档编号G06F13/10GK102216899SQ200980145878
公开日2011年10月12日 申请日期2009年11月3日 优先权日2008年11月14日
发明者A·柯申鲍姆, C·厄冈, D·菲尔德斯, M·伊伊京, M·福汀, Y·巴克 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1