持久存储器版本化和合并的制作方法

文档序号:11450346阅读:165来源:国知局

背景技术
::诸如动态随机访问存储器设备之类的易失性存储器设备由于其快速访问时间而可以用于形成计算机系统的工作存储器。计算机系统可以将数据存储在具有较慢访问时间的非易失性大容量存储设备中,非易失性大容量存储设备诸如基于磁性介质的存储设备或基于光学介质的存储设备。一些计算机系统还可以实现提供快速访问时间并在计算机系统断电时保存数据的非易失性存储器设备。这样的非易失性存储器设备可以用于形成计算机系统的工作持久存储器。附图说明下面将参考以下附图描述各种示例。图1是示出具有用于版本化和合并持久存储器中的数据的版本控制器的示例系统的框图。图2是示出具有用于版本化和合并持久存储器中的数据的版本控制器的示例系统的框图。图3是示出具有用于版本化和合并持久存储器中的数据的版本控制器的示例系统的框图。图4a图示了根据示例实现的向前合并操作。图4b图示了根据示例实现的向后合并操作。图5是用于版本化和合并持久存储器中的数据的示例方法的流程图。图6是用于对事务提交命令进行响应的示例方法的流程图。图7是用于版本化和合并持久存储器中的数据的示例方法的流程图。图8是示出编码有用于版本化和合并持久存储器中的数据的示例指令的非暂时性机器可读介质的框图。图9是示出编码有用于对事务提交命令进行响应的示例指令的非暂时性机器可读介质的框图。具体实施方式计算机系统可以包含由诸如闪速存储器设备、相变存储器设备、自旋转矩存储器设备、电阻随机访问存储器设备(也称为忆阻器存储器设备)等之类的非易失性存储器设备形成的工作持久存储器。这样的持久存储器可以具有与易失性存储器相当的快速访问速度,并且还可以具有在计算机系统断电之后保留数据的能力。此外,持久存储器可以在系统架构中实现,该系统架构在处理器上的存储器控制器与持久存储器上的介质控制器之间划分存储器控制功能,该处理器和该持久存储器通过存储器结构连接。例如,处理器的存储器控制器可以包括高速缓存一致性功能和其他处理器特定的存储器功能,而持久存储器的介质控制器可以包括特定于持久存储器设备的功能。由于持久存储器保留数据的能力,计算机系统可以包括版本化和事务能力。例如,在计算机系统的处理器上执行的应用可以确定数据的多个版本应当维持一段时间。版本中的一个可以表示数据的初始状态,并且另一个版本可以累积对数据的改变以用于原子事务。然而,在版本化期间执行的一些数据操作(诸如数据复制和版本合并/替换)可能会增加处理器和/或存储器开销,并可能降低计算机系统性能。此外,版本化的一些实现可以通过执行整个数据页面的写入时复制而表现出开销。本申请的技术可以涉及在一些示例中耦合到处理器和持久存储器的版本控制器。版本控制器可以接收寻址到图像页面的高速缓存行的应用数据,可以将接收到的应用数据写入到与图像页面的所寻址的高速缓存行对应的复制页面的高速缓存行,可以追踪应用数据被写入到的复制页面的高速缓存行,并且可以取决于合并方向策略通过将图像页面向前合并到复制页面中或者将复制页面向后合并到图像页面中来生成最终页面。更具体地,技术的一些方面可以涉及基于应用数据被写入到的复制页面的高速缓存行的数量的合并方向策略。因此,本申请的技术可以有用于将数据版本化操作(诸如数据复制和版本合并/替换)从处理器卸载到版本控制器。此外,本申请的技术可以有用于减少数据版本化中所涉及的数据移动的量。现在参考附图,图1是示出示例版本控制器100(其也可以称为控制器100)的框图。如本文将描述的,版本控制器100可以包括存储器周期调度器102、版本控制模块104和合并模块106,并且版本控制器100可以有用于版本化和合并持久存储器112中的数据。该数据可以与在处理器108上执行的应用110的原子事务的写入请求相关。术语“原子的”、“原子地”、“原子性”或类似的术语可以指其中所有操作发生或者没有操作发生的事务。例如,原子更新事务可以是其中执行构成事务的所有更新或者不执行任何更新的事务。在一些实现中,处理器108可以是单核处理器、多核处理器、专用集成电路、现场可编程门阵列和/或适于从连接到处理器108的机器可读介质检索和/或执行机器可执行指令的其他硬件设备。机器可执行指令可以包括例如当由处理器108执行时形成应用110的指令集。在一些实现中,持久存储器112可以由非易失性存储器设备形成,非易失性存储器设备诸如闪速存储器设备、相变存储器设备、自旋转矩存储器设备、电阻随机访问存储器设备(也称为忆阻器存储器设备)等。持久存储器112可以通信地耦合到处理器108。版本控制器100还可以通信地耦合到处理器108和持久存储器112两者。版本控制器100可以包括存储器周期调度器102、版本控制模块104和合并模块106,它们中的每个可以是编码在设备的机器可读介质上并可由设备的处理器执行的指令集,并且附加地或替代地,可以包括包含用于实现下面描述的功能的电子电路的硬件设备。此外,还可以理解,在一些实现中,本文描述的存储器周期调度器102、版本控制模块104和合并模块106的功能中的一些可以直接归于版本控制器100。版本控制模块104可以在接收到用于对图像页面114进行版本化以用于在通信地耦合到版本控制器100的处理器108上执行的应用110的原子事务的复制命令时,在通信地耦合到版本控制器100的持久存储器112中分配复制页面。存储器周期调度器102可以从应用110接收寻址到图像页面114的高速缓存行的应用数据。存储器周期调度器102可以将接收到的应用数据写入到与图像页面114的所寻址的高速缓存行对应的复制页面116的高速缓存行。在一些实现中,版本控制模块104可以在版本控制结构120中追踪应用数据被写入到的复制页面116的高速缓存行。版本控制模块104可以从应用110接收事务提交命令。合并模块106可以响应于由版本控制模块104接收到的事务提交命令是替换命令,而取决于合并方向策略通过将图像页面114向前合并到复制页面116中或将复制页面116向后合并到图像页面114中来生成最终页面。在一些实现中,版本控制器100、处理器108和持久存储器112可以包括在计算系统150的一部分中或形成计算系统150的一部分,所述计算系统150诸如服务器、工作站、台式计算机、膝上型计算机、平板计算设备、移动设备等。图2是示出示例版本控制器200(其也可以被称为控制器200)的框图。如本文将描述的,版本控制器200可以包括存储器周期调度器202、版本控制模块204和合并模块206,并且版本控制器200可以有用于版本化和合并持久存储器212中的数据。该数据可以与在处理器208上执行的应用210的原子事务的写入请求相关。在一些实现中,处理器208可以是单核处理器、多核处理器、专用集成电路、现场可编程门阵列和/或适于从连接到处理器208的机器可读介质检索和/或执行机器可执行指令的其他硬件设备。机器可执行指令可以包括例如当由处理器208执行时形成至少一个应用210的指令集。在一些实现中,可以在处理器208上形成多个应用210,包括操作系统。处理器208还可以包括集成存储器控制器209,所述集成存储器控制器209用于管理去往和来自存储器(诸如持久存储器212)的数据的流动(尽管在一些实现中,存储器控制器209可以与处理器208分离,但是通信地耦合到处理器208)。在一些实现中,持久存储器212可以由非易失性存储器设备形成,非易失性存储器设备诸如闪速存储器设备、相变存储器设备、自旋转矩存储器设备、电阻随机访问存储器设备(也称为忆阻器存储器设备)等。持久存储器212可以通信地耦合到处理器208,并且更具体地,耦合到处理器208的存储器控制器209。版本控制器200还可以通信地耦合到处理器208和持久存储器212两者。例如,在一些实现中,版本控制器200、处理器208和持久存储器212可以通过插槽间(inter-socket)存储器结构通信地耦合。在一些实现中,版本控制器200、处理器208和持久存储器212可以被包括在计算系统250的一部分中或形成计算系统250的一部分,所述计算系统250诸如服务器、工作站、台式计算机、膝上型计算机、平板计算设备、移动设备等。除了版本控制器200、处理器208和持久存储器212之外,在一些实现中,计算系统150还可以包括易失性存储器(例如,动态随机访问存储器、静态随机访问存储器等)、存储设备(例如,基于磁性的存储设备、基于光学的存储设备、或其他物理存储设备)、以及任何有线或无线网络接口。在一些实现中,如图3中所描绘的,示例系统250的持久存储器212可以由多个持久存储器设备213-1至213-n(例如,多个双列直插存储器模块)形成,并且每个存储器设备213-1至213-n可以包括相应的介质控制器240-1至240-n。在一些实现中,如图3中所图示的,示例系统250的处理器208可以在多个处理器208-1至208-n之中。处理器208-1至208-n中的每个可以包括相应的存储器控制器209-1至209-n。持久存储器设备213-1至213-n、多个处理器208-1至208-n、以及版本控制器200中的每个可以通过插槽间存储器结构通信地耦合,使得处理器和版本控制器200中的任何一个可以访问持久存储器设备中的任何一个或与持久存储器设备中的任何一个进行通信。通过上述布置,虚拟控制器200可以在处理器208和持久存储器212之间作为独立的中间设备对数据执行版本化。再次参考图2,版本控制器200可以包括存储器周期调度器202、版本控制模块204和合并模块206,它们中的每个可以是包括用于实现下面描述的功能的电子电路的硬件设备,并且附加地或替代地,可以是编码在设备(例如,系统250)的机器可读介质上并可由设备的处理器执行的指令集。此外,还可以理解,在一些实现中,本文描述的存储器周期调度器202、版本控制模块204和合并模块206的功能中的一些可以直接归于版本控制器200。版本控制器200并且特别是版本控制模块204可以从应用210接收用于对图像页面214进行版本化以用于应用210的原子事务的复制命令。例如,图像页面214可以是由多个高速缓存行(本文中也称为原始高速缓存行)构成并存储在持久存储器212中的数据的页面,并且应用208将请求图像页面214的原始数据(即原始高速缓存行)中的至少一些的修改,作为原子事务的一部分。应用210可以发布复制命令,因为其确定应当在一段时间内为事务维持多个版本的数据(例如,原始数据和经修改的数据)。按每个复制命令由应用210版本化的图像页面214也可以被称为版本化的图像页面。在接收到复制命令时,版本控制模块204可以在持久存储器212中分配复制页面216,所述持久存储器212通信地耦合到版本控制器200。在一些实现中,应用210可以分配复制页面216并将复制页面216的物理存储器地址与复制命令一起提供给版本控制器200(例如,版本控制模块204),而不是版本控制模块204分配复制页面216。在一些实现中,所分配的复制页面216不包含对应用210有意义的任何有效数据。例如,为了分配复制页面216,版本控制模块204可以预留等同于根据复制命令要版本化的图像页面214的大小的持久存储器212的量,并且在一些实现中,不将任何数据写入到复制页面216。可以由版本控制模块204或应用210从持久存储器212中的空闲页面218的队列分配复制页面216。在一些实现中,如果队列没有足够的要从其分配复制页面216的空闲页面,则应用210可以将附加的空闲页面借给空闲页面的队列。当版本控制模块204解除分配图像页面或复制页面时(例如,当页面不再需要用于操作时),也可以由版本控制模块204将附加的空闲页面添加到空闲页面队列218,如将在下面描述的。如果由应用210借出解除分配的页面,则应用210可以追踪借出的页面的使用,并且在借出的页面解除分配到空闲页面队列218时恢复或回收再利用借出的页面以用于应用210的其他目的。在一些实现中,版本控制模块204还在接收到复制命令时创建版本控制结构220。版本控制结构220可以被存储在可由版本控制器200访问的系统250的持久存储器中,诸如持久存储器212。版本控制结构220可以描述对应的复制页面216,并且还可以包括表1中所示的字段中的至少一些,其将在本文进一步描述。如表1中所示,版本控制结构206的一些实现可以包括高速缓存行有效字段,它可以追踪复制页面216的各个高速缓存行是否有效。例如,高速缓存行有效字段可以包括用于复制页面216的每个高速缓存行的单个位,以追踪对应的高速缓存行是有效还是无效。当由版本控制模块204最初分配复制页面216时,可以设置或初始化高速缓存行有效字段以指示复制页面216的所有高速缓存行是无效的。高速缓存行有效字段被更新以指示当来自应用210的数据被写入到该高速缓存行时复制页面216的特定高速缓存行是有效的,如下面将描述的。因此,对于应用210的特定复制命令和事务,版本控制器200可以使用图像页面214、复制页面216和版本控制结构220的对应集合来执行版本化。在分配复制页面216和版本控制结构220之后,版本控制模块206可以将版本控制结构200的页面状态字段设置为初始状态。在一些实现中,事务可以涉及多个图像页面,例如,其中由事务所操纵的数据跨越多个图像页面(仅作为一个示例,每个图像页面的大小可以是四千字节)。在这样的情况下,版本控制模块204可以分配多个复制页面(例如,与多个图像页面中的每个对应的复制页面),并且可以原子地创建用于多个复制页面中的每个的版本控制结构220。用于每个复制页面的版本控制结构可以指相同的事务id,并且可以(例如,使用表1中描述的下一页、上一页和主复制页面字段)在双向链接的复制页面列表中链接与相同事务相关的多个复制页面。因此,应当理解,本文中呈现的技术可以在多个对应的图像页面、复制页面和版本控制结构上执行。在一些实现中,版本控制器200(例如,响应于多个复制命令,不管是来自相同的应用210还是来自不同的应用)可以并发地处理不同的事务,并且因此,版本控制器200可以管理对应的图像页面、复制页面和版本控制结构的多个集合。在一些实现中,除了版本控制结构220之外,版本控制模块204也可以创建和维持各种辅助结构222。辅助结构222可以存储在系统250的易失性存储器或持久存储器中。例如,版本控制模块204可以在辅助结构222中维持空闲页面列表,该空闲页面列表追踪在空闲页面队列218中的空闲页面在持久存储器212中的位置。版本控制模块204还可以在辅助结构222中维持事务索引,该事务索引追踪与特定事务相关联的复制页面的物理存储器地址(或追踪主复制页面,其中多个复制页面在事务中涉及)。版本控制模块204还可以在辅助结构222中维持页面索引,该页面索引包括对应的图像页面地址和复制页面地址,并且将图像页面和复制页面这两者与对应的版本控制结构220相关。至少部分地由于前述辅助结构222中的一些,版本控制器200可以向处理器208虚拟化在版本化操作中涉及的页面。在一些实现中,应用210可以修改处理器208的页表,使得参与事务的应用210(及其过程)可以除了图像页面214之外或代替图像页面214还引用复制页面216。直到至少在版本控制器200以如下所述的方式从应用210接收到事务提交命令之后。通过仅向应用210提供对复制页面216的访问,版本控制器200可以提供隔离性质,使得应用210的事务不会影响在处理器208上执行和/或利用持久存储器212的并发事务。版本控制器200可以从应用210接收写入请求(例如,处理器208的存储指令)和寻址到持久存储器212中的页面的高速缓存行的应用数据。更具体地,在一些实现中,存储器周期调度器202接收应用数据,并且版本控制模块204接收写入请求。在一些实现中,当接收到应用数据时,版本控制模块204将版本控制结构220的页面状态字段设置为活动(如果先前未设置为“活动”的话)。版本控制器200(更具体地,存储器周期调度器202)可以例如通过检查在辅助结构222中是否引用高速缓存行地址,诸如上述的页面索引,来确定接收到的写入请求和应用数据是否被寻址到由版本控制器200版本化的事务中涉及的图像页面(版本化图像页面)。如果写入请求和应用数据未被寻址到版本化图像页面(例如,而是寻址到非版本化图像页面215),则存储器周期调度器202可以将写入请求和应用数据在不由版本控制器200进一步处理的情况下传递到持久存储器212。另一方面,如果写入请求和应用数据被寻址到由控制器版本化的事务中涉及的图像页面(例如,版本化图像页面214),则存储器周期调度器202(例如,从页面索引)标识对应的版本控制结构220和复制页面216。在已经标识了与寻址到版本化图像页面214的写入请求和应用数据对应的版本控制结构220和复制页面216的情况下,存储器周期调度器202可以(例如,通过执行具有存储器参考操作数的存储指令或其他指令)而将接收到的应用数据写入到与图像页面214的所寻址的高速缓存行对应的复制页面的高速缓存行216。也就是说,版本控制器200更新或修改充当图像页面214的新版本的复制页面216,而不是更新或修改原始图像页面214。在一些实现中,存储器周期调度器202针对未使用的存储器周期调度写入。在一些实现中,存储器周期调度器202可以在标识了与所寻址的版本化图像页面214对应的版本控制结构208和复制页面216之后立即(例如,在下一可能的周期,而不具有有意的或编程的延迟)写入应用数据。在存储器周期调度器202将应用数据写入到复制页面216之后,版本控制模块204可以在版本控制结构220中追踪应用数据被写入到的复制页面216的高速缓存行。例如,版本控制模块204可以通过在版本控制结构220的高速缓存行有效字段中设置与写入的高速缓存行对应的位以指示复制页面216中的高速缓存行现在有效来追踪写入的复制页面高速缓存行。仅作为一个图示,在图4a中,寻址到图像页面214的高速缓存行224-2的应用数据已经被写入到复制页面216的对应的高速缓存行226-2,并且因此,(版本控制结构220的)高速缓存行有效字段221-a的对应位被设置为指示该高速缓存行226-2的有效性(例如,在该示例中为“1”的值)。另一方面,在图4a中,应用数据尚未分别写入到对应的高速缓存行226-1和226-3,并且根据复制页面216的原始分配,与那些高速缓存行226-1和226-3对应的高速缓存行有效字段221-a的位保持设置为无效(例如,在该示例中为“0”的值)。在一些实现中,存储器周期调度器202可以响应于来自应用210的与特定原子事务相关的多个写入请求而将多个高速缓存行写入到复制页面216,并且版本控制模块204可以追踪应用数据被写入到的复制页面216的高速缓存行中的每个。在一些实现中,存储器周期调度器202可以改写应用数据先前已经根据较新的写入请求而被写入到的复制页面216的高速缓存行。存储器周期调度器202可以以上述方式继续向复制页面216写入(或改写)寻址到版本化图像页面214的应用数据,直到版本控制模块204从应用210接收到事务提交命令。在描述版本控制器200如何处理事务提交命令之前,将首先描述版本控制器200的各种预先提交功能。在一些实现中,由版本控制器200(即,版本控制模块204)接收的复制命令可以包括向前合并提示。向前合并提示指示在版本控制模块204接收到事务提交命令之后,合并模块206将执行把图像页面214向前合并到复制页面216中(以下述的方式)。在一些实现中,版本控制模块204响应于向前合并提示将版本控制结构220的页面状态字段设置为在向前合并的情况下活动。如果复制命令包括向前合并提示,则在接收到事务提交命令之前并且在未使用的存储器周期期间,存储器周期调度器202可以将图像页面214的对应高速缓存行复制到没有应用数据被写入的复制页面216的高速缓存行。换句话说,存储器周期调度器202可以基于版本控制结构220的高速缓存行有效字段来确定复制页面216的哪些高速缓存行是无效的,并且将图像页面214的对应高速缓存行(即,原始高速缓存行)向前复制到复制页面216的那些无效高速缓存行。版本控制模块204可以将高速缓存行有效字段的位设置为有效,因为复制页面216的对应高速缓存行由于向前合并提示而被向前复制。在一些实现中,存储器周期调度器202可以监视和调度未使用的存储器周期以执行向前复制,以避免在高速缓存行被写入(诸如从应用210接收和寻址到版本化图像页面214的那些高速缓存行)的同时复制高速缓存行。通过在事务提交命令之前并且根据向前合并提示将来自图像页面214的复制高速缓存行向前复制到复制页面216,版本控制器200可以通过使完整或接近完整版本的最终页面在接收到事务提交命令时提交来加速图像页面214的版本化。在一些实现中,版本控制器200可以从处理器208接收访问图像页面214的数据的请求,而不是如上所述的写入请求。存储器周期调度器202可以确定由处理器208并且更具体地由应用210以及由与事务不相关联的其他应用对图像页面214的访问是应被引导到图像页面214还是复制页面216。例如,处理器208或在处理器208上执行的应用可以发送寻址到图像页面214的读取请求(例如,加载指令)。存储器周期调度器202可以(例如,通过直接地或经由版本控制模块204检查版本控制结构220)确定读取地址是否指代与复制页面216的高速缓存行对应的图像页面214的高速缓存行,所述复制页面216的高速缓存行根据版本控制结构220(是有效的。如果读取地址的高速缓存行对应于复制页面216的有效高速缓存行,则存储器周期调度器202将读取请求重新寻址到复制页面216的对应高速缓存行。否则,存储器周期调度器202可以将原始读取请求传递到图像页面214。在一些实现中,应用210可以向版本控制器200冲刷(flush)寻址到图像页面214的修改的高速缓存行(例如,处理器208的高速缓存中的剩余数据),以准备发送事务提交命令。版本控制器200可以以与上述类似的方式处理冲刷的高速缓存行,所述方式即通过将寻址到图像页面214的高速缓存行的剩余应用数据写入到复制页面216的对应高速缓存行并因此更新版本控制结构220(例如,高速缓存行有效字段)。版本控制模块204可以从应用210接收事务提交命令,诸如替换命令、分离命令、组合命令或删除命令。前述命令在本文中也可以被称为替换型命令、分离型命令、组合型命令或删除型命令。现在将继而描述版本控制器200对前述事务提交命令中的每个的响应。响应于作为替换命令的事务提交命令,合并模块206可以取决于合并方向策略通过将图像页面214向前合并(例如,230)到复制页面216中或者将复制页面216向后合并(例如,232)到图像页面214中来生成最终页面。在一些实现中,存储器周期调度器202可以调度未使用的存储器周期以使合并模块206执行向前合并230或向后合并232以生成最终页面。合并方向策略可以包括在合并模块206中,并且下面将描述合并方向策略的各种实现。在描述合并方向策略的实现之前,将首先描述向前合并230和向后合并232。如果合并方向策略指示应当执行向前合并230,则版本控制模块204可以将版本控制结构220的页面状态字段设置为提交(这可以指示复制页面216将被维持为最终页面并且图像页面214被视为将被解除分配的弃用页面)。合并模块206可以基于版本控制结构220的高速缓存行有效字段来确定复制页面216的哪些高速缓存行是无效的,并且可以控制或指令存储器周期调度器202调度未使用的存储器周期以将图像页面214的对应原始高速缓存行向前复制到复制页面216的那些无效高速缓存行。随着图像页面214的高速缓存行被复制到复制页面216的对应高速缓存行,通过将高速缓存行有效字段的每个对应位设置为有效,版本控制模块204可以更新版本控制结构220,并且在高速缓存行有效字段的所有位被设置为有效之后,向前复制230可以被视为完成。版本控制模块204可以将最终页面(即复制页面216)的物理存储器地址提供给应用210(或更一般地,提供给处理器208)。例如,物理存储器地址可以从版本控制结构220的复制页面物理存储器地址字段提供。然后,处理器208可以更新其页表,使得最初映射到图像页面214的物理存储器地址的任何虚拟地址将被替代地映射到复制页面216(作为最后页面)的物理存储器地址以供将来读取和写入请求。如果合并方向策略规定应当执行向后合并232,则版本控制模块204可以将版本控制结构220的页面状态字段设置为弃用(这表明图像页面214将被维持为最终页面,并且复制页面216将被解除分配)。合并模块206可以基于版本控制结构220的高速缓存行有效字段来确定复制页面216的哪些高速缓存行是有效的,并且可以控制或指令存储器周期调度器202来调度未使用的存储器周期以将复制页面216的那些有效高速缓存行向后复制到图像页面214的对应高速缓存行。随着复制页面216的高速缓存行被复制到图像页面214的对应高速缓存行,通过将高速缓存行有效字段的每个对应位设置为无效(因为那个该高速缓存行被复制),版本控制模块204可以更新版本控制结构220。版本控制模块204可以将最终页面(即,图像页面214)的物理存储器地址提供给应用210(或处理器208),并且在一些实现中,可能不需要更新处理器208的页表。例如,物理存储器地址可以从版本控制结构220的图像页面物理存储器地址字段提供。在一些实现中,版本控制模块204可以在将页面状态字段设置为提交以用于向前合并230或设置为弃用以用于向后合并232之后,但是在向前合并230或向后合并232完成之前并且在高速缓存行有效字段的所有位分别被设置为有效或无效之前,将最终页面的物理存储器地址提供给处理器208,包括在其上执行的任何应用或过程。在这样的实现中,处理器208可以通过版本控制器200在版本控制结构220中追踪每个有效高速缓存行在正在进行的向前或向后合并期间在何处来高效地访问最终页面(即使最终页面尚未完全生成,并且有效高速缓存行分散在图像页面214和复制页面216之间)。在其他实现中,版本控制器模块204可以在向前合并230或向后合并232完成之后提供最终页面的物理存储器地址。为了说明,图4a描绘了通过(例如,根据高速缓存行有效字段221-a)将图像页面214的对应原始高速缓存行224-1、224-3和224-n复制到复制页面216的无效高速缓存行226-1、226-3和226-n的向前合并。在所描绘的向前合并完成之后,高速缓存行有效字段的所有位应被设置为有效(例如,在图4a中,高速缓存行有效字段221-b的所有位都被设置为“1”)。图4b描绘了通过(例如,根据高速缓存行有效字段221-a)将复制页面216的有效高速缓存行226-2复制到图像页面214的高速缓存行224-2的向后合并。在所描绘的向后合并完成之后,高速缓存行有效字段221的所有位应被设置为无效(例如,在图4b中,高速缓存行有效字段221-b的所有位都被设置为“0”)。现在将描述可以支配是执行向前合并230还是向后合并232的合并方向策略的示例实现。在一些实现中,合并方向策略可以基于应用数据被写入到的复制页面216的高速缓存行的数量。例如,合并模块206可以确定有效的(版本控制结构220的)高速缓存行有效字段的位的百分比,并且合并方向可以取决于该百分比是否满足或超过阈值。更具体地,在一些示例中,如果复制页面216中的有效高速缓存行的百分比为50%或更大,则合并方向可以是向前合并230,并且如果复制页面216中的有效高速缓存行的百分比小于50%,则合并方向可以是向后合并232。应当理解,可以修改百分比阈值,例如,以优化版本提交过程的效率。其他基于数量的量度也可以在其他实现中以类似的方式使用,诸如有效高速缓存行的计数。因为合并方向策略基于复制页面216中的有效高速缓存行的数量,所以版本控制器200可以朝向与最终页面最类似的页面复制高速缓存行,因而潜在地最小化用于创建最终页面的高速缓存行复制操作的数量。在一些实现中,合并方向策略可以基于引用图像页面214的处理器208的虚拟地址的数量。例如,在执行向前合并230之后(即,当页面状态被设置为提交时),其中虚拟存储器地址被映射到图像页面214的物理存储器地址的处理器208的页表中的每个实例被重新映射到复制页面216的物理存储器地址,如上所述。随着这样的虚拟存储器地址的数目增加,由处理器208执行的重新映射的数目也可以增加。因此,与将大量或许多虚拟存储器地址重新映射到复制页面216的物理存储器地址相比,执行向后合并可以被视为是更高效的。应当理解,处理器208的虚拟地址的数量可以被选择例如以优化版本提交过程的效率。在一些实现中,版本控制模块204可以移除系统250中的对弃用页面的引用。弃用页面可以是未被合并成形成最终页面的图像页面214或复制页面216中的任何一个,或者换句话说,弃用页面可以是向前合并230中的图像页面214,并且可以是向后合并232中的复制页面216。版本控制模块204可以移除例如处理器208的页表中的对弃用页面的引用。在一些实现中,版本控制模块204可以在版本控制结构220中将页面状态字段设置为“提交”或“弃用”之后移除对弃用页面的引用。在一些实现中,版本控制模块204还可以例如通过将弃用页面释放(例如,使之可用)到空闲页面队列218并且更新辅助结构222中的空闲页面列表或者通过将弃用页面释放到应用210或处理器208来解除分配弃用页面。在一些实现中,版本控制模块204还可以解除分配版本控制结构220。在一些实现中,在解除分配弃用页面和/或版本控制结构220之前,版本控制模块204等待直到例如按照由来自处理器208或应用210的释放命令所指示的那样移除对系统250中(例如,处理器208中)的弃用页面的引用。在一些实现中,由版本控制模块204从应用210接收的事务提交命令可以是删除命令。例如,当应用210的事务被中止时,应用210可以发布删除命令。响应于删除命令,版本控制模块204可以解除分配版本控制结构220和复制页面216。通过对删除命令的响应,仅原始的未修改的图像页面214可以保留。在一些实现中,由版本控制模块204从应用210接收的事务提交命令可以是分离命令。响应于作为分离命令的事务提交命令,版本控制模块204可以将版本控制结构220的页面状态字段设置为分离,并且合并模块206可以针对没有应用数据被写入到的复制页面216的高速缓存行(即,版本控制结构220的高速缓存行有效字段的对应位被设置为无效)而将来自图像页面214的原始高速缓存行复制到复制页面216。换句话说,合并模块206可以执行向前合并230。在一些实现中,如果版本控制器200接收寻址到图像页面214的高速缓存行的新的应用数据,并且复制页面216的对应高速缓存行是无效的,则存储器周期调度器202可以在将图像页面214的高速缓存行写入到复制页面216的无效高速缓存行之后,将新的应用数据调度写入到图像页面214。分离命令的上述数据复制和写入过程可以以上述的方式按照由存储器周期调度器202调度的那样在未使用的存储器周期期间执行。此外,可以以上述的方式使用向前合并提示来执行上述数据复制和写入过程。版本控制器200可以将分离复制页面216的物理存储器地址和图像页面214的物理存储器地址这两者提供给处理器208(并且更具体地,提供给应用210),并且可以删除版本控制结构220。通过对分离命令的响应,处理器208可以保留对图像页面214中的原始数据和复制页面216中的事务修改数据这两者的访问。在一些实现中,由版本控制模块204从应用210接收的事务提交命令可以是组合命令。响应于作为组合命令的事务提交命令,版本控制器200可以原子地组合或添加来自第一事务的复制页面和来自第二事务的另一复制页面。此外,在其中事务涉及多个复制页面的情况下,版本控制器200可以将来自第一事务的第一组复制页面组合或添加到来自第二事务的第二组复制页面。版本控制器200可以通过例如修改要组合的复制页面的版本控制结构的链接列表字段(诸如主组合页面和下一组合页面字段)来组合复制页面。例如,可以修改用于第一组复制页面的链接列表字段以并入第二组复制页面,和/或反之亦然。第一事务和第二事务两者都可以是应用210的事务。当第一事务的(多个)复制页面和第二事务的(多个)复制页面正在组合时,合并模块206可以通过确定(第一事务的)复制页面和(第二事务的)另一个复制页面是否是同一图像页面的两个版本来确定是否存在任何潜在组合冲突。例如,合并模块206可以检查用于第一事务的复制页面的版本控制结构的一个或多个字段(诸如,图像页面物理字段)是否匹配于用于第二事务的复制页面的对应字段。如果复制页面和另一个复制页面是同一图像页面的两个版本,则合并模块206可以确定是否存在冲突,冲突是数据被写入到复制页面和另一个复制页面这两者的对应高速缓存行的情况。例如,合并模块206可以检查用于复制页面和另一个复制页面两者的版本控制结构,并且如果复制页面和另一个复制页面的任何对应高速缓存行有效位两者都被设置为有效,则冲突可以由合并模块206视为存在。因为两个对应的高速缓存行都是有效的,所以版本控制器200和应用210都不可能能够确定复制页面或另一个复制页面中的哪一个包含期望的(例如,最新的)应用数据。如果不存在冲突,则合并模块206可以将复制页面216和另一个复制页面组合或链接。如果存在冲突,则版本控制器200可以向处理器208和/或应用210发送错误消息,这继而可以中止第一事务和第二事务两者。在第一事务的复制页面和第二事务的复制页面被组合之后,版本控制器200可以将组合的页面的物理存储器地址发送到处理器208和/或应用210。图5是用于版本化和合并持久存储器中的数据的示例方法500的流程图。方法500可以在下面被描述为由诸如图1的系统150的系统运行或执行。也可以使用各种其他合适的系统,诸如例如图2的系统250。方法500可以以存储在至少一个机器可读存储介质上并由系统150的至少一个处理器或控制器执行的可执行指令的形式和/或以电子电路的形式来实现。在本公开的一些实现中,方法500的一个或多个块可以基本上并发地或以与图5中所示的不同次序执行。在本公开的一些实现中,方法500可以包括比图5中所示的更多或更少的块。在一些实现中,方法500的一个或多个块可以在某些时间是进行中的和/或可以重复。方法500可以在块502处开始并继续到块504,在块504中在从系统150的处理器(例如,108)上执行的应用(例如,110)接收到版本化图像页面(例如,114)以用于原子事务的复制命令时,系统150可以例如通过版本控制器100(更具体地,通过版本控制模块104)在持久存储器(例如,112)中分配复制页面(例如,116)。在一些实现中,复制命令是对多个图像页面进行版本化,并且作为响应,版本控制模块104可以分配多个对应的复制页面。在块506处,系统150可以在版本控制器100(更具体地,在存储器周期调度器102处)接收寻址到图像页面114的高速缓存行的应用数据。在块508处,系统150可以通过版本控制器100(更具体地,通过存储器周期调度器102)将接收到(即,在块506处接收到的)的应用数据写入到与图像页面114的所寻址的高速缓存行对应的复制页面116的高速缓存行。在块510处,系统150可以在版本控制结构(例如,120)中追踪在块508处应用数据被写入到的复制页面116的高速缓存行。更具体地,在一些实现中,版本控制器100(或更具体地,版本控制模块104)在版本控制结构120中执行追踪,并且版本控制结构可以存储在版本控制器100中(例如,机载机器可读介质、高速缓存或储存器)、持久存储器112或系统150的另一个存储器或储存器。版本控制结构120可以例如类似于上面关于图2描述的版本控制结构220。在一些实现中,应用110在一段时间内(例如,在处理器108的多个连续和/或非连续周期内)发送寻址到图像页面114的应用数据,并且版本控制器100可以针对所接收的每个应用数据重复块506、508和510。在块512处,系统150可以在版本控制器100处(更具体地,在版本控制模块104处)接收事务提交命令。在一些实现中,事务提交命令可以由应用110发送。如果在块512处接收的事务提交命令是替换命令,则在块514处,版本控制器100(更具体地,合并模块106)可以取决于合并方向策略通过将图像页面114向前合并到复制页面116中或者将复制页面116向后合并到图像页面114中来生成最终页面。换句话说,通过执行块514,复制页面116经由向前合并成为最终页面,或者图像页面114经由向后合并成为最终页面。在一些实现中,版本控制模块104可以在版本控制结构120中追踪向前合并或向后合并(视情况而定)的进展。例如,在向前合并的情况下,版本控制结构120可以指示复制页面116的高速缓存行是否处于最终状态,即,复制页面116的高速缓存行是否先前在块508处被写入有应用数据或者先前在块514处经由向前合并被复制有图像页面114的对应高速缓存行。类似地,在向后合并的情况下,版本控制结构120可以指示图像页面114的高速缓存行是否处于最终状态,即,数据是否在块512处经由向后合并从复制页面116的对应高速缓存行被复制到图像页面114的高速缓存行(如果复制页面116的该高速缓存行先前在块508处被写入有应用数据的话)。在一些实现中,合并方向策略514可以基于应用数据由块508被写入到的复制页面116的高速缓存行的数量(例如,百分比、计数等)或者映射到图像页面114的虚拟地址的数量。在块514之后,方法500可以在块516处结束。图6是用于版本化和合并持久存储器中的数据的示例方法600的流程图。方法600可以在下面被描述为由诸如图2的系统250的系统运行或执行。也可以使用各种其他合适的系统,诸如例如图1的系统150。方法600可以以存储在至少一个机器可读存储介质上并由系统250的至少一个处理器或控制器执行的可执行指令的形式和/或以电子电路的形式来实现。在本公开的一些实现中,方法600的一个或多个块可以基本上并发地或者以与图6中所示的不同次序执行。在本公开的一些实现中,方法600可以包括比图6中所示的更多或更少的块。在一些实现中,方法600的一个或多个块可以在某些时间是进行中的和/或可以重复。方法600可以在块602处开始并继续到块604,在块604中版本控制器200(更具体地,版本控制模块,例如,204)可以从应用210接收事务提交命令。块604可以在许多方面与方法500的块512类似,并且在一些实现中,可以在方法500的块512之后执行方法600。例如,在块604处接收到事务提交命令之前,版本控制器200可以已经在持久存储器(例如,212)中分配复制页面(例如,216),可以已经接收寻址到图像页面(例如,214)的高速缓存行的应用数据,可以已经将接收到的应用数据写入到与图像页面214的所寻址的高速缓存行对应的复制页面216的高速缓存行,并且可以已经在版本控制结构(例如,220)中追踪应用数据被写入到的复制页面216的高速缓存行。在块604处接收的事务提交命令可以是例如组合命令、分离命令或替换命令。在块606处,如果事务提交命令是组合命令(在块606处为“是”),则控制转到将在下面描述的块612。如果事务提交命令不是组合命令(在块606处为“否”)而是分离命令(在块608处为“是”),则控制转到将在下面描述的块618。如果事务提交命令不是组合命令(在块606处为“否”)或分离命令(在块608处为“否”)而是替换命令(在块610处为“是”),则控制转到块622。块622可以在许多方面类似于方法500的块514,并且系统250可以通过版本控制器200(更具体地,合并模块206)基于合并方向策略通过将图像页面214合并到复制页面216中(向前合并,例如230)或将复制页面216合并到图像页面214中(向后合并,例如232)来生成最终页面。如果事务提交命令既不是组合命令(在块606处为“否”)、分离命令(在块608处为“否”)也不是替换命令(在块610处为“否”),则方法600可以在块624处结束。在一些实现中,方法600可以包括用于处理其他事务提交命令-诸如删除命令(如上面关于版本控制器200描述的)的功能。此外,应当理解,在一些实现中,块606、608和610可以以其任何组合或作为单个块执行。如果事务提交命令是组合命令(在块606处为“是”),则版本控制器200可以将来自第一事务的第一组复制页面原子地组合或添加到来自第二事务的第二组复制页面。在一些实现中,例如,可以通过在先执行图5的方法500来创建来自第一事务和第二事务两者的复制页面。当第一组复制页面和第二组复制页面被组合时,版本控制器200(更具体地,合并模块206)可以执行块612以确定(例如,第一事务的)复制页面和(例如,第二事务的)另一个复制页面是否是同一图像页面的两个版本。在块614处,版本控制器200(更具体地,合并模块206)可以确定是否存在冲突,冲突是数据被写入到(例如,第一事务的)复制页面和(例如,第二事务的)另一个复制页面两者的对应高速缓存行的情况。在块616处,如果不存在冲突(如在块614处所确定的),则版本控制器200(更具体地,合并模块206)可以通过例如修改与复制页面对应的版本控制结构的链接列表字段以并入和另一个复制页面和/或反之亦然而将复制页面和另一个复制页面组合或链接。如果事务提交命令是分离命令(在块606处为“是”),则控制可以转到618,在618中版本控制器200(更具体地,合并模块206)可以针对没有应用数据被写入到的复制页面216的高速缓存行(根据版本控制结构220)而将来自图像页面214的高速缓存行复制到复制页面216。在块620处,版本控制器200(更具体地,版本控制模块204)可以删除版本控制结构220。版本控制器200可以将图像页面214和复制页面216两者的物理存储器地址提供给处理器208和/或应用210,使得两个版本均可用于将来的事务。方法200可以例如,在块610、616、620、622之后)最终继续到块624(,在块624中方法200可以结束。图7是用于版本化和合并持久存储器中的数据的示例方法700的流程图。方法700可以在下面被描述为由诸如图2的系统250的系统运行或执行。也可以使用各种其他合适的系统,诸如例如图1的系统150。方法700可以以存储在至少一个机器可读存储介质上并由系统250的至少一个处理器或控制器执行的可执行指令的形式和/或以电子电路的形式来实现。在本公开的一些实现中,方法700的一个或多个块可以基本上并发地或以与图7中所示的不同次序执行。在本公开的一些实现中,方法700可以包括比图7中所示的更多或更少的块。在一些实现中,方法700的一个或多个块可以在某些时间是进行中的和/或可以重复。方法700可以在块702处开始并继续到块704,在块704中系统250可以从在处理器(例如,208)上执行的应用(例如,210)将附加的空闲页面接收到持久存储器(例如,212)中的空闲页面队列(例如,218)中。在块706处,版本控制器200(更具体地,版本控制模块,例如204)可以响应于从应用210接收到版本化图像页面(例如,214)以用于应用210的原子事务的复制命令而从空闲页面队列218分配复制页面(例如,216)。在块708处,版本控制器200可以接收寻址到图像页面214的高速缓存行的应用数据,可以将应用数据写入到与图像页面214的所寻址的高速缓存行对应的复制页面216的高速缓存行,并且可以(例如,通过将版本控制结构220的高速缓存行有效字段的对应位设置为有效)来在版本控制结构(例如,220)中追踪数据被写入到的复制页面216的高速缓存行。在一些实现中,块708可以在许多方面总体上类似于方法500的块506、508和510。在块710处,如果复制命令包括向前合并提示,则控制转到块712,并且版本控制器200(具体地,存储器周期调度器202)可以在接收到事务提交命令(如下面关于块714描述的)之前并且在未使用的存储器周期期间,将图像页面214的对应高速缓存行复制到没有应用数据被写入到的复制页面216的高速缓存行。如果复制命令不包括向前合并提示,则版本控制器200在接收到事务提交命令之前不将图像页面214的高速缓存行复制到复制页面216。在块714处,版本控制器200(更具体地,版本控制模块204)可以从应用210接收事务提交命令。结合事务提交命令,应用210还可以向版本控制器200冲刷(例如,来自于处理器208的高速缓存的)经修改的高速缓存行,并且作为响应,版本控制器200可以接收冲刷的高速缓存行并以与上面关于块708描述的类似的方式写入每个高速缓存行。应用210可以例如在由版本控制器200接收到事务提交命令之前、与接收到事务提交命令并发地、或者在接收到事务提交命令之后,冲刷高速缓存行(并且版本控制器200可以接收冲刷的高速缓存行)。在块718处,版本控制器200(即,合并模块206)可以以类似于方法500的块514的方式基于合并方向策略通过将图像页面214合并到复制页面216中(向前合并230)或者将复制页面216合并到图像页面214中(向后合并232)来生成最终页面。此外,在块718处,版本控制器200(更具体地,版本控制模块104)可以在版本控制结构220中追踪向前合并230或向后合并232(视具体情况而定)的进展。例如,版本控制模块104可以使用版本控制结构220的高速缓存行有效字段来在每个高速缓存行基础上追踪合并进展。特别地,高速缓存行有效字段可以指示高速缓存行是已经通过向前合并230或向后合并232复制(并且因此被视为处于最终状态),还是需要在向前合并230或向后合并232下复制(并且因此被视为尚未处于最终状态)。在块718期间,当版本控制器200正在合并图像页面214和复制页面216以生成最终页面时,版本控制器200可以控制对持久存储器212的访问,使得处理器208(包括在处理器208上执行的任何应用或过程,诸如应用210)可以在尝试访问图像页面214或复制页面216时有效地访问最终页面。在一些实现中,可以理解,因为版本控制器200在版本控制结构220中追踪哪些高速缓存行相对于向前或向后合并(视情况而定)处于最终状态,所以处理器208可以访问(读取或写入)最终页面中的数据,如同最终页面完成了一样,即使版本控制器200还处于生成最终页面的过程中并且有效高速缓存行可能分散或散布在图像页面214和复制页面216之间也是如此。在块718期间,版本控制器200可以从处理器208接收数据访问请求(读取或写入),所述数据访问请求寻址到最终页面,并且更具体地寻址到未达到其最终状态的图像页面214或复制页面216的高速缓存行,诸如例如针对向前合并230还要从图像页面214复制的复制页面216的高速缓存行、或根据向后合并232还要从复制页面216复制的图像页面214的高速缓存行。这样的数据访问请求可以潜在地与在块718处正在进行的合并冲突(正在进行的合并活动(包括在块218期间要复制的高速缓存行的物理存储器地址)可以在高速缓存行中在飞行中表(in-flighttable)中追踪)。例如,如果数据访问请求是在该高速缓存行达到其最终状态之前将新数据写入到最终页面的高速缓存行,则最终页面的高速缓存行中的该新数据可能最终通过块218的向前或向后合并错误地改写。为了减轻这样的冲突,版本控制器200的存储器周期调度器200可以通过以下冲突避免动作中的至少一个来管理数据访问。在一些实现中,如果高速缓存行有效字段的对应位无效,则版本控制器200可以将数据访问请求(特别是对于读取请求)寻址到图像页面214的高速缓存行,并且如果对应的高速缓存行有效字段有效,则可以将请求寻址到复制页面216。在一些实现中,版本控制器200(更具体地,存储器周期调度器202)可以通过例如将数据访问请求调度成在对应的高速缓存行已经按照向前合并230或向后合并232被复制并因此达到其最终状态之后发生来管理由于数据访问请求(即,读取或写入请求)引起的调度冲突。在块720处,版本控制器200(即,版本控制模块204)可以向应用210(和/或在一些实现中向处理器208)提供最终页面的物理存储器地址。在块722处,版本控制器200(更具体地,版本控制模块204)可以移除处理器208中(或更一般地,系统250中)的对弃用页面的引用,或者可以使得对弃用页面的引用从处理器208移除,弃用页面是在块718中未被合并成的图像页面214或复制页面216中的任何一个。换句话说,如果在块718中执行向前合并以形成最终页面,则图像页面214可以被视为弃用页面,并且如果在块718中执行向后合并,则复制页面214可以被视为弃用页面。例如,处理器208中对弃用页面的引用可以在页表中或者在应用或过程(诸如应用210)中。在一些实现中,处理器208响应于来自版本控制器200的指令或请求而移除对弃用页面的引用。在块724处,版本控制器200(更具体地,版本控制模块204)可以解除分配弃用页面。在一些实现中,版本控制器200可以在执行块724以解除分配弃用页面之前等待直到块722完成(并且移除处理器208中对弃用页面的引用)。例如,版本控制器200可以等待和接收来自处理器208的释放命令,该释放命令发信号通知或指示对弃用页面的引用已经被移除,并且块722已经完成。在块726处,版本控制器200(更具体地,版本控制模块204)可以解除分配版本控制结构220。在一些实现中,版本控制器200可以在执行块726之前等待直到块722完成。例如,版本控制器200可以在执行块726之前等待和接收来自处理器208的释放命令(它可以是上面在块724处描述的相同的释放命令)。更具体地,在块722完成并且版本控制器200从处理器208接收到释放命令之后,例如,版本控制器200可以同时或顺序地执行块724和块726(例如,通过在块726之前开始块724或者通过在块724之前开始块726)。在块726之后,方法200可以在块728处结束。图8是图示根据示例实现的系统800的框图,系统800包括编码有版本化和合并持久存储器中的数据的指令的机器可读介质。在一些示例实现中,系统800可以是或形成计算设备的一部分,所述计算设备诸如服务器、工作站、台式计算机、膝上型计算机、平板计算设备、移动设备等。在一些实现中,系统800是基于处理器的系统,并且可以包括耦合到机器可读介质804的处理器802。处理器802可以包括单核处理器、多核处理器、专用集成电路、现场可编程门阵列和/或适于从机器可读介质804检索和/或执行指令(例如,指令806、808、810、812、814)以执行本文所讨论的各种功能的其他硬件设备。此外或替代地,处理器802可以包括用于执行本文描述的功能(包括指令806、808、810、812和/或814的功能)的电子电路。关于在图8中表示为框的可执行指令,应当理解,在替代实现中,包括在一个框内的可执行指令和/或电子电路的部分或全部可以被包括在图中所示的不同框中或未示出的不同框中。机器可读介质804可以是适于存储可执行指令的任何介质,诸如随机访问存储器(ram)、电可擦除可编程只读存储器(eeprom)、闪速存储器、硬盘驱动器、光盘等。在一些示例实现中,机器可读介质804可以是有形的非暂时性介质,其中术语“非暂时性”不包括暂时性的传播信号。机器可读介质804可以被设置在系统800内,如图8中所示,在这种情况下,可执行指令可以被视为“安装”在系统800上。替代地,机器可读介质804可以是例如便携式(例如外部)存储介质,所述便携式(例如外部)存储介质允许系统800远程执行指令或从存储介质下载指令。在该情况下,可执行指令可以是“安装包”的一部分。如下文进一步描述的,机器可读介质804可以被编码有一组可执行指令806、808、810、812、814。指令806当由处理器802执行时,可以在从在基于处理器的系统800上执行的应用接收到版本化图像页面以用于原子事务的复制命令时在持久存储器中分配复制页面。指令808当由处理器802执行时可以接收寻址到图像页面的高速缓存行的应用数据。例如,应用数据可以从在处理器802上执行(或者更一般地,在基于处理器的系统800上执行)的应用或过程接收。指令810当由处理器802执行时可以将接收到(例如,通过指令808接收到的)的应用数据写入到与图像页面的所寻址的高速缓存行对应的复制页面的高速缓存行。指令812当由处理器802执行时可以在版本控制结构中追踪应用数据被写入(例如,通过指令810写入)到的复制页面的高速缓存行。指令814当由处理器802执行时可以响应于接收到替换型事务提交命令,而取决于合并方向策略通过将图像页面向前合并到复制页面中或者将复制页面向后合并到图像页面中来生成最终页面。在一些实现中,可以从发送复制命令和/或应用数据的处理器802(或基于处理器的系统800)上执行的应用或过程接收事务提交命令。在一些实现中,合并方向策略基于应用数据被写入到的复制页面的高速缓存行的数量或者被映射到图像页面的基于处理器的系统800的页表(或更具体地,处理器802的页表)中的虚拟地址的数量。图9是图示根据示例实现的系统900的框图,系统900包括编码有版本化和合并持久存储器中的数据的指令的机器可读介质。在一些示例实现中,系统900可以是或形成计算设备的一部分,所述计算设备诸如服务器、工作站、台式计算机、膝上型计算机、平板计算设备、移动设备等。在一些实现中,系统900是基于处理器的系统,并且可以包括耦合到机器可读介质904的处理器902。处理器902可以包括单核处理器、多核处理器、专用集成电路、现场可编程门阵列和/或适于从机器可读介质904检索和/或执行指令(例如,指令906、908)以执行本文讨论的各种功能的其他硬件设备。此外或替代地,处理器902可以包括用于执行本文描述的功能(包括指令906、908的功能)的电子电路。关于在图9中表示为框的可执行指令,应当理解,在替代实现中,包括在一个框内的可执行指令和/或电子电路的部分或全部可以被包括在图中所示的不同框中或未示出的不同框中。机器可读介质904可以是适于存储可执行指令的任何介质,诸如随机访问存储器(ram)、电可擦除可编程只读存储器(eeprom)、闪速存储器、硬盘驱动器、光盘等。在一些示例实现中,机器可读介质904可以是有形的非暂时性介质,其中术语“非暂时性”不包括暂时性的传播信号。机器可读介质904可以被设置在系统900内,如图9中所示,在这种情况下,可执行指令可以被视为“安装”在系统900上。替代地,机器可读介质904可以是例如便携式(例如外部)存储介质,所述便携式(例如外部)存储介质允许系统900远程执行指令或从存储介质下载指令。在该情况下,可执行指令可以是“安装包”的一部分。如下文进一步描述的,机器可读介质904可以被编码有一组可执行指令906、908。指令906当由处理器902执行时可以对接收到分离型事务提交命令做出响应,并针对没有应用数据被写入到的复制页面的高速缓存行将高速缓存行从图像页面复制到复制页面,并且删除版本控制结构。在一些实现中,指令906可以向应用提供复制页面的和图像页面的物理存储器地址。指令908当由处理器902执行时可以对接收到组合型事务提交命令做出响应,确定复制页面和另一个复制页面是否是同一图像页面的两个版本,确定是否存在冲突,冲突是数据被写入到复制页面和另一个复制页面这两者的对应高速缓存行的情况,并且如果不存在冲突,则将复制页面和另一个复制页面链接或组合。在一些实现中,可以从在处理器902上执行(或者更一般地,在基于处理器的系统900上执行)的应用或过程接收分离型或组合型事务命令。鉴于上述描述,可以理解,用于版本化持久存储器上的数据的操作(诸如数据复制和版本合并/替换)可以从计算系统的处理器卸载到版本控制器,并且还可以以使数据复制和数据移动最小化的高效方式执行。此外,通过取决于合并方向策略在向前或向后方向上合并版本化数据,可以在事务版本管理期间使数据复制最小化。在前面的描述中,阐述了许多细节以提供对本文公开的主题的理解。然而,实现可以在没有这些细节中的一些或全部的情况下实施。其他实现可以包括从以上讨论的细节的修改和变化。意图的是以下权利要求涵盖这些修改和变化。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1