可虚拟化的先进同步设备的制作方法

文档序号:6594766阅读:165来源:国知局
专利名称:可虚拟化的先进同步设备的制作方法
可虚拟化的先进同步设备
背景技术
共享存储器(Shared-memory)计算机系统允许多个并发执行的线程访问共享存 储器位置。不幸的是,由于协调并发存储访问的复杂性,编制正确的多线程程序是困难的。传统的,为了确保程序的正确性,编程者已经使用锁(lock)或其他相互排除机制 来调整到共享存储器位置的访问。例如,使用传统的锁,一个线程可以被配置为在每一个它 需要独占访问的存储器位置上请求并持有一个锁。当该线程持有锁时,没有其他的线程可 以请求该锁,并且因此,没有其他的线程能够访问被该锁保护的存储器位置。然而,传统的 锁定机制(locking techniques)对多种缺陷来说是易攻击的,包括死锁、竞态条件,优先级 翻转,软件复杂度以及性能限制。一种替代的并发控制方式是事务存储器(transactional memory) 0在事务 存储器编程模式下,编程者能够指定代码段(一条执行路径或一组代码指令)作为“事 务” (transaction),该代码段相对于其他线程的执行应该被原子地(atomically)执行。举 例来说,如果该事务包括两个存储器存储操作,那么事务存储系统则要确保所有的其他线 程仅仅可以或者看到这两个存储操作的叠加结果或者两个操作结果都看不到,但是不会只 看到其中一个存储操作的结果。除了简单的编程模式之外,由于事务存储系统可允许比传 统的锁更细粒度的(grained)存储器共享,因此事务存储系统也能够提高应用的性能。近来已经提出了多种不同的事务存储系统,包括那些以硬件、软件以及结合的方 式实现的。然而,许多以前的概念和实现被不同的限制所局限。例如,当基于硬件的事务存 储系统(HTM)可能受抑于复杂的实现时,基于软件的事务存储系统(STM software-based transactional memory system)则需要承受令人不快的性能过载。

发明内容
在事务存储系统中执行事务的系统和方法被公开。该系统包括耦合到共享存储器 的多个处理器中的一个处理器。其中该处理器执行相对于多处理器的执行是原子(atomic) 事务的代码段,所述代码段包括到共享存储器的多个存储器访问操作。根据一些实施例,处理器可被配置为确定存储器访问操作是否包括一组禁止指令 的任何一个,其中,该组指令包括一个或多个在虚拟计算环境中和原生计算环境中以不同 方式操作的指令。如果任何存储器访问操作是上述禁止指令之一,那么处理器中止该事务。


图1是根据不同实施例,说明被配置为实现ASF的多处理器计算机系统组件的方 块图。图2是根据一个实施例,说明组成处理器的更详细的组件视图的方块图。图3是根据不同实施例,说明利用ASF执行事务的方法大致流程图。图4是根据一个实施例,说明嵌套事务(nested transaction)例子的方块图。图5是根据一些实施例,说明预测(SPE⑶LATE)指令实现在回退模式(rollbackmode)下开始预测段的流程图。图6是根据一些实施例,说明在条件存储模式下执行开始(BEGIN)指令以开始预 测段的步骤的流程图。图7是根据一些实施例,一组定义了各种ASF实现如何处理数据竞争的规则组成 的表。图8是根据不同实施例,说明在回退模式下ASF机制可执行事务的方法流程图。图9是根据一些实施例,说明诸如通过执行提交(COMMIT)指令提交事务的方法。图10是根据一些实施例,说明在条件存储模式下执行事务的方法流程图。图11是根据一个实施例,说明用于配置基于ASF的事务以用锁代码进行互操作的 方法流程图。图12是说明被配置为实现不同ASF实施例的计算机系统的一个实施例,如此处所 述。尽管此处通过不同的实施例以及所示附图描述本发明,本领域技术人员应该意识 到本发明不限于所描述的实施例或附图。可以被理解的是,此处的附图和详细的说明书并 不试图将本发明限定在所公开的特定形式上,相反地,应涵盖所附权利要求所限定的所有 落于本发明的精神与领域的修改、相等物与替代形式。此处使用的任何标题仅用于组织目 的而不意味着限制说明书或权利要求的范围。申请中所使用的单词“可/可以(may)”用来 表示许可的意思(也就是可能可以)而不是强制的意思(也就是必须)。同样的,单词“包 括(include, including, includes),,意味着包括而不限于。优选实施方式的详细描述事务存储系统可允许在多线程系统中的软件线程相对于其他线程原子地 (atomically)访问(读和/或写)一组共享存储器位置,而不需要与诸如使用锁的互斥排 他的传统同步机制相关的额外系统开销和复杂编程。然而,为了提高事务存储系统的性能, 更进一步的技术是必须的。根据一些实施例,不同的硬件机制可用来实现高效的事务存储机制,如此处描述。 在一些实施例中,在计算上很便宜的元语(primitivies)(例如程序指令)可被定义成命令 硬件执行不同的同步功能,这些元语可被用来合成更高级的同步机制。此处的硬件机制和 /或程序指令可被统称为高级同步工具(ASF =Advanced Synchronization Facility)。在一些实施例中,一种现有的处理器架构(例如x86)可被扩充来实现ASF机制。 为了清楚的解释这一点,本发明的其余部分会描述公知的64位x86构架AMD64如何用ASF 机制扩充来实现事务存储器。然而,这些示例性实施例并不是为了将ASF机制仅限于这种 架构中,根据发明的优点,在其他处理器架构中实现ASF机制对本领域技术人员是显而易 见的。图1是根据不同实施例,说明被配置来实现ASF的多处理器计算机系统组件的方 块图。根据所示的实施例,计算机系统100可包括多个处理器,如处理器IlOa和110b。在 一些实施例中,处理器110可包括多个物理或逻辑(例如,SMT)的内核并且它们彼此耦合和 /或通过互联(interconnect)诸如140耦合到共享存储器150上。在不同的实施例中,可 使用不同的互联(interconnect),比如处于不同的拓扑结构(例如,全连接,环形链接等) 的共享存储器总线或点到点网络。
根据所示的实施例,每一个处理器110可包括一层或多层存储器缓存(memory cache) 130。存储器缓存的层数可被分层设置(例如,Ll缓存,L2缓存,L3缓存等)并且用 来缓存存储在共享存储器150中的值的本地副本。在不同的实施例中,存储器缓存130可包括多种缓存一致性机制132。在一个实 施例中,缓存一致性机制132可在互联的处理器之间实现缓存一致性通信协议以确保包 含在每一个处理器110的存储器缓存130中的值与存储在共享存储器和/或其他处理器 的存储器缓存中的值相一致。一些这样的协议已经存在(包括MESI (Illinois协议)和 MOESI协议)并且可由多种的实施方式来实现。缓存一致性协议可定义一组消息和规则, 通过这些消息和规则处理器可相互通知对共享的数据的修改并因此来确保缓存的一致性。 例如,根据MESI协议,每一个存储在缓存中的块必须被标记为四种状态中的一种修改 (modified)、互斥(exclusive)、共享(shared)或无效(invalid)。给定的协议定义一组发 送和解释这些状态的消息和规则,通过这些定义处理器维护在每一个块上的正确标记。基 于给定的缓存块的状态,处理器可被限制不能执行一些操作。例如,处理器不可以执行依赖 于被标记为无效的缓存块的程序指令。在不同的实施例中,缓存一致性机制可通过硬件、软 件或其结合来实现。缓存一致性消息可通过互联140来被通信并且可被广播或点到点传 播。根据所示的实施例,每一个处理器110也可以包括实现事务存储的多种ASF机制, 如此处所述。在不同的实施例中,更多的处理器110被连接到互联140,并且多种分层的存 储器缓存可在多个这样的处理器和/或每一个处理器的多个内核之间共享。图2是根据一个实施例,说明组成处理器诸如处理器110的组件的更详细视图的 方块图。根据图2所示的实施例,处理器200包括寄存器文件210,该文件可包括各种寄存 器,其中每个寄存器可以是任意大小的(例如,16-位,32-位,64-位,128-位等等)。例如, 寄存器文件210可包括多种现有的x86寄存器,诸如rSP寄存器212(堆栈指针),rIP寄存 器214 (指令指针),rAX寄存器216 (累加器寄存器),和/或rFLAGS寄存器218 (指示处 理器状态的标志寄存器)。在一些实施例中,寄存器文件210可进一步包括任意数量的通用 目的寄存器220和/或浮点指针寄存器222。在一些实施例中,寄存器文件210可包括一个 或多个128-位寄存器,诸如XMM寄存器224。在不同的实施例中,寄存器文件210可包括任 意数量的其他具有各种大小的寄存器226。根据所示的实施例,处理器200可包括用来在共享存储器中存储本地副本的存储 器缓存230和用来维持分布在共享存储器、缓存和其他缓存中的多个副本的数值的一致性 的缓存一致性机制232。处理器200也可包括用来实现事务同步机制的ASF机制M0,如 此处所述。根据不同的实施例,ASF机制240可包括数据结构和/或逻辑来实现此处所述 的存储器事务。在一些实施例中,ASF机制240可包括一个锁定线缓冲器(locked line buffer) 242,其可被用在发生中止(abort)时回退由部分已执行的事务对存储器造成的改 变,如下所述。在一些实施例中,ASF机制240可包括嵌套层寄存器M4,其可存储指示当前 事务被嵌套到其他事务中的深度值,如下详细描述。在一些实施例中,ASF机制可包括指示 事务是否处于有效状态的标志,诸如事务有效状态标志(transaction active flag) 2460 在一些实施例中,ASF机制可包括指示事务模式的标志,诸如条件存储模式标志M8,设置 该标志来指示执行中的事务是否处于条件存储模式或其他模式下。在进一步的实施例中,其他标志和/或寄存器可在ASF机制中实现以支持事务的执行。图3是根据不同实施例说明利用ASF来执行事务的方法流程图。根据所示的实 施例,ASF可允许软件(例如,线程)通过执行表示事务开始的给定指令(或多个指令) 来开始一个事务(关键段代码),如步骤310所示。如后讨论的,在不同的实施例中,诸如 SPECTULATE或BEGIN的ASF指令可用来指示关键段(critical section)的开始。在一个事务开始之后,线程可执行包括事务实体的一系列指令,如步骤320所示。 该系列指令可包括多个存储器访问(读和/或写)操作,一些存储器访问操作可指定被访 问的存储器位置应该是受保护(protected)的。线程可指定给定的存储器位置应该通过使 用由ASF提供的一个或多个特定说明符(declarator)指令来被保护。ASF机制可确保到 受保护存储器(由说明符指令所指定的)的访问相对于系统中所有其他同时执行的线程原 子地(atomically)发生(所有的访问同时发生或没有访问发生)。例如,如果事务包括多 个到存储器的受保护的写操作,那么ASF机制可确保没有其他线程可看到那些到存储器的 受保护的写操作的仅子集的结果。又例如,根据一些实施例,如果事务包括一个或多个受保 护的存储器读操作,那么ASF机制可确保只有在这样的情况下,即在事务完成之前没有其 他线程已修改受保护的读位置,事务才成功地完成。在多个实施例中,被说明符操作保护的 “存储器位置”可以具有不同的大小,诸如取决于系统的缓存块或其他大小。根据这样的实施例,ASF可被配置为仅保护已利用指定的说明符指令指定的存储 器线。在这样的实施例中,所有其他存储器位置可保持为未受保护的并且可使用标准的x86 指令在关键段内被修改。这些到未保护的存储器的修改对其他CPU是在执行时(例如,以 程序顺序(program order))即时可见的。在一些实施例中,事务实体(例如,在步骤320 中执行的指令)可包括一个或多个其他事务(即,嵌套事务)。根据多个实施例,如果事务执行的一个或多个条件已经被违背,那么该事务可中 止(如步骤330的肯定指向所示)。在不同的实施例中,事务尝试可在任何点由于与其他处 理器的竞争、远程控制传输(far control transfer)(诸如由中断或错误引起的)、明确的 软件指令ABORT的执行、不足的硬件资源、其他特定的实现条件等等而中止。在不同的实施例中,当事务尝试中止时,不同的恢复动作可基于事务执行的模式 而被采用。在不同的实施例中,ASF可支持回退(rollback)模式的执行和/或条件存储 (store-conditional)模式的执行。在一些实施例中,响应于事务尝试的中止,事务执行的 模式可确定采取什么样的动作。例如,在一些实施例中,中止回退模式下的事务可造成事务 的执行被回退到事务的开始,而中止在条件存储模式下的事务尝试可使得事务继续执行但 是事务存储操作却不被执行(即,在没有被中止的事务上执行事务存储是有条件的)。根据所示的实施例,当执行在回退模式下的事务中止时(如步骤340的肯定指向 所示),ASF机制可被配置为执行恢复动作,如步骤350,其包括丢弃(discard)对受保护线 的内容的修改。通过丢弃这样的修改,如步骤350,ASF机制可使得该修改对系统中的其他 线程是不可见的,因此符合了事务的原子特性。然而,ASF机制可被配置为不回退对未受保 护的存储器的修改,诸如那些使用传统x86存储器指令来执行的。在这些实施例中,应用的 编程者可提供用于适应这些未受保护的修改的软件,诸如被配置为再次输入通向关键段的 初始化序列的软件恢复例程(routine)。在不同的实施例中,恢复动作350可被配置为仅回退系统寄存器(例如rIP和rSP)的子集而不是回退所有寄存器。在这样的实施例中,不依赖于不同寄存器的内容,当进 入到事务执行中时,软件因此可被写入(例如,通过忽略中止事件之后某些寄存器的原始 内容和/或在事务执行期间不修改多个寄存器)。在一些示例中,在中断或异常处理程序(exception handler)返回前,操作系统代 码或其他进程可在该间歇执行。进一步,在一些示例中,其他进程甚至已经执行ASF事务, 该ASF事务观察和修改作为中断事务目标的位置。在一些实施例中,通过在上下文转换过 程中不需要维持任何ASF相关状态,ASF机制从而可排除这些顾虑。而是,在这样的实施例 中,当被中断的线程返回到处理器时,ASF机制可被配置为自动中止并重试该事务。根据所示的实施例,在执行某个或一些恢复动作后,线程可重试事务,如从步骤 350到步骤310所示的反馈循环。在一些实施例中,在条件存储模式下执行的事务中止(如步骤340的否定指向所 示)与在回退模式下执行的事务中止(如步骤340的肯定指向所示)是以不同方式处理的。 例如,回退模式事务的中止可自动重置到关键段的开始部分(或到其他恢复代码)的执行 流程,而条件存储模式下事务的中止可通过如下操作被处理,即撤消(undo)或以其他方 式丢弃由关键段对受保护存储器位置中的数值的造成的修改然后“无效(deactivate) ”该 事务,如步骤360中所示。在不同实施例中,无效该事务可包括设置指示中止已经发生和/ 或事务不再有效的状态代码。在条件存储模式下,在事务已经被无效之后(步骤360),系统 可继续执行关键段而不需要执行任何到受保护存储器位置的存储操作(步骤370)。例如, 在事务被无效后,随后的到受保护存储位置的操作可被看作无操作(no-op)。在一些实施例中,当中止的事务完成时,状态代码可被设置在寄存器(诸如rAX寄 存器216)中以指示事务已经被中止。在一些实施例中,线程可被配置为检测中止状态代码 已经被设置并且执行一个或多个恢复操作,如从步骤370到步骤350的反馈循环所示。在 不同的实施例中,恢复动作350对在条件存储模式下(即,从步骤370)中止的事务和在回 退模式下(即,从步骤340)中止的事务可以是不同的。在回退和条件存储模式下事务的更 详细的讨论将在下面论述。根据所示的实施例,一旦事务实体已经被完成,线程可执行一个或多个指示到ASF 机制的事务结束的指令,如在步骤380中所示,诸如提交(COMMIT)指令,将会在下面讨论。 在提交事务之后,如在步骤380中,线程可继续执行,如在步骤390中。在一些实施例中,ASF可支持一个或多个事务与一个或多个其他事务的嵌套。例 如,在步骤310中,在一个事务开始之后(例如,通过执行预测(SPE⑶LATE)命令),在步骤 320中被执行的事务实体的指令在第一个事务完成之前可开始另一个事务(例如,通过执 行另一个预测(SPECTULATE)命令)。在这种情况下,第二个(“子”)事务可被称作“嵌套” 在第一个(“父”)事务中。不嵌套在任何其他事务中的事务此处可被称作“顶层”事务。图4是根据一个实施例说明嵌套事务的例子。根据图4所示,顶层父事务400是 一个包括两个嵌套事务的回退模式事务同样处于回退模式的嵌套父事务410和处于条件 存储模式的嵌套事务440。根据所示的实施例,嵌套父事务400包括两个嵌套事务,包括嵌 套事务420和嵌套事务430,上述两个事务分别处于回退模式和条件存储模式。在一些实施例中,ASF机制可被配置为平滑(flatten)嵌套事务(例如,由多个预 测-提交对(SPE⑶LATE-C0MMIT pair)组成的)为单一事务。在一些实施例中,嵌套事务可共享ASF硬件资源。也就是说,在一些实施例中,在嵌套事务的执行过程中,受父事务保 护的存储器位置对子事务也是受保护的。进一步的,在一些实施例中,即使在嵌套事务已经 被完成之后,在嵌套事务中被保护的存储器位置可依然在父事务中被保护。这样,在一些实 施例中,当处理被子事务保护的存储器位置时,父事务可能需要继续使用保护存储器操作。 因此,在这样的实施例中,由父事务在被子事务保护的存储器位置上执行的常规存储器写 操作的使用可导致常见的保护错误被引起(#GP异常)。在一些实施例中,一个或多个条件存储事务可被嵌套在一个或多个回退事务中, 在一些实施例中,由于嵌套事务的平滑化,ASF机制可被配置为通过执行顶层父事务的恢复 操作来响应于嵌套的条件存储事务的中止(如在步骤350中)。然而,根据一些实施例,在 条件存储事务内部,嵌套事务可能被禁止。为了使能事务执行,ASF机制可定义并公开可以被软件线程调用(invoke)的多个 一致性控制指令。由于这些指令在不同实施例中可能被不同地命名,因此多个实施例可公 开与下述一个或多个相匹配或相似的一致性控制指令。图5是根据一些实施例说明预测(SPE⑶LATE)指令的实现。如上所讨论的,在一 些实施例中,预测(SPE⑶LATE)指令可通过线程被执行以指示回退模式中事务的开始。根 据所示的实施例,执行预测(SPECTULATE)操作可包括检查事务的嵌套是否超过了系统所 支持的最大嵌套深度,如在步骤505中。在不同的实施例中,不同的寄存器和/或存储器位 置可被用来存储(hold)当前执行事务的深度。如果该事务比系统定义的最大嵌套深度还 深的话,如步骤505否定指向所示,那么ASF机制可产生通用保护错误(#GPW]),如在步骤 515 中。根据所示的实施例,执行预测(SPECULATE)指令可进一步包括确定事务是否被嵌 套到条件存储事务中,如在步骤510中。在一些事务不能被嵌套到条件存储事务中的实施 例中,为了响应于检测到父事务是条件存储事务,如步骤510中肯定指向所示,则ASF机制 可被配置为产生一个通用保护错误(或采取其他动作),如在步骤515中。在不同的实施例 中,可读出用于指示当前执行模式的寄存器或存储器位置的内容,以此来判断父事务是否 在条件存储模式下执行。在进一步的实施例中,事务合法性的其他不同检查也被执行并且 如果其中一个或多个条件被违反的话,则产生GP错误。根据所示的实施例,如果事务是合法的(例如,没有超出最大嵌套深度并且没有 嵌套在条件存储事务中),那么rAX寄存器(或其他相应的寄存器)可被重置,诸如将其设 置为零值。在一些实施例中,rAX寄存器可存储(hold)不同的数值和代码以指示事务执行 的状态,如下所述。根据所示的实施例,预测(SPECULATE)的执行可确定该事务是否是顶层事务,如 在步骤530中。在一些实施例中,这种确定包括根据检查到的增加的嵌套层数的数值来确 定当前的事务是否被嵌套。如果该事务是顶层事务,如步骤530中肯定指向所示,则执行预 测(SPE⑶LATE)可包括记录检查点(checkpoint),该检查点包括能够在事务被中止时由处 理器使用以返回到给定的回退点的信息。在一些实施例中,记录检查点可包括记录在预测 (SPECULATE)指令已经被执行之后指令指针(例如,rIP214)和堆栈指针(例如,rSP212)的 即时值,如在步骤535和MO中。这样,一旦事务被中止,该记录的检查点可被用来传输控 制到紧跟在预测(SPE⑶LATE)指令之后的指令上。在一些实施例中,执行预测(SPE⑶LATE)可进一步包括设置或修改一个或多个寄存器中的值以指示处理器状态,诸如在rFLAGS寄 存器218中的值。在一些实施例中,预测(SPE⑶LATE)指令可开始回退模式下的事务,而不同的指 令(例如,开始(BEGIN))可在开始条件存储模式下的事务。图6是根据一些实施例说明执行开始(BEGIN)指令的步骤。通过确定事务的 一个或多个合法性条件来开始方法600。在一些实施例中,上述合法性条件与执行预测 (SPE⑶LATE)事务时检查的条件是相似的。例如,在方法600中,执行开始(BEGIN)包括确 定是否已达到最大嵌套深度(如在步骤605中)并确定当前事务是否被嵌套在另一个条件 存储段内(如在步骤610中)。如果任何一个条件成立(如步骤605和步骤610各自的肯 定指向所示),那么ASF机制产生GP或其他错误,如在步骤615中。另外,根据方法600,执 行开始(BEGIN)可包括重置rAX或其他寄存器(例如,设为0),如在步骤620中,增加嵌套 层数(如在步骤625中),并设置当前事务是在条件存储模式下的标志(如在步骤630中), 继续事务实体的事务执行(如在步骤635中)。在不同的实施例中,在步骤630中设置的标 志可用来确定当前事务是否处于条件存储模式下,诸如在步骤510和610中。在一些实施例中,ASF机制可定义不同存储器-引用(memory-reference)指令,被 称作说明符(delcarators),这些指令用来指定哪些存储器位置应该被保护为事务的一部 分(需要原子访问的存储器位置)。例如,在一些实施例中,ASF机制可公开与标准的x86 MOV指令相似的用于读取存储器的说明符存储器访问指令。类似于传统的MOV指令,ASF-定 义的LOCK MOV指令可被用来从存储器中加载数据。然而,根据一些实施例,如果一个线程 使用LOCK MOV指令读取事务内部的存储器位置,则ASF机制可增加包含引用存储器位置的 第一字节的存储器缓存块到受保护的缓存块组。在一些实施例中,软件机制可确保未对准 (unaligned)的存储器访问不会跨越(span)受保护和不受保护的缓存线。根据一些实施 例,引用受保护的缓存块的说明符指令可像通用存储器引用一样来操作并且不会改变块的 受保护状态。在一些实施例中,说明符在关键段外是被禁止的(例如,发生异常)。在一些 实施例中,关键段外的说明符可被看作是通用的存储器操作。在一些条件存储模式是可用 的实施例中可能会出现这种情况。在一些实施例中,ASF机制可定义说明符而不是LOCK MOV指令。例如,与x86 PREFETCH和/或PREFETC冊类似的指令可被使用(例如,LOCK PREFETCH,LOCK PREFETC冊)。 与x86指令相似的是,LOCK PREFETCH和LOCK PREFETCHW被用来从存储器中提取数值以 读(PREFETCH)或写(PREFETCHW)到缓存中。然而,与没有LOCK前缀的标准预取不同的是, L0CKPREFETCH和LOCK PREFETCHW可使得存储器位置被保护。此外,在一些实施例中,LOCK PREFETCH和LOCK PREFETCHW也可校验特定存储器地址的翻译错误和存储器访问权限(读 或写,分别地),并在校验不成功的情况时生成页面错误。在一些实施例中,当引用已经被数 据断点配置的存储器地址时,LOCK PREFETCH和LOCK PREFETCHW可生成#DB异常。在一些实施例中,一旦存储器位置已经使用说明符而被保护时,则它在事务中不 是以非预测方式而是以预测方式被再次修改。例如,在一些实施例中,在存储器位置已经使 用LOCK MOV读指令被读取后,存储在该位置的数值可使用ASF定义的LOCK MOV存储指令 被以预测方式修改。根据一些实施例,这种预测的更新可仅在事务被提交时可见。根据这 样的实施例,如果事务尝试中止,那么预测的更新则被回退和/或以其他方式丢弃。在一些实施例中,在事务执行期间,已经使用说明符来保护的存储器位置可仅被预测的存储指令 修改。在这样的实施例中,如果在事务模式下的线程试图使用传统的非预测存储操作来修 改受保护的存储器位置的数值时,则ASF机制可产生异常/错误(例如,#GP (0))。在一些实施例中,如果预测的存储指令(例如,LOCK MOV)在关键段外被执行,那 么异常则可能发生。在其他诸如条件存储模式下是可用的实施例中,关键段外部的预测存 储操作可被看作是无操作(no-op)。在不同的实施例中,说明符存储器指令可参与到系统缓存一致性协议中。例如,如 果读取存储器位置的LOCK MOV或L0CKPREFETCH指令在缓存中不中(miss in the cache) 时,它可发送非无效探测(probe)到其他处理器,如由系统缓存一致性协议所示。在另一个 例子中,如果给定的缓存线没有在本地缓存中以排他/独占状态驻留,则使用LOCM MOV指 令修改该缓存线会导致发送无效探测(invalidating probe)到其他处理器,如在系统缓存 一致性协议所示。在一些实施例中,执行LOCK PREFETCHW指令可也导致发送无效探测等等。不同的ASF机制可被用来监测和/或加强受保护的存储器位置(例如,受保护缓 存块)。在一些实施例中,ASF机制可包括到一个或多个系统缓存的扩展(例如,存储器缓 存230),该扩展用来指示哪些缓存线(块)被保护。例如,在一个实施例中,在给定缓存中 的每一个缓存线可包括“被保护”标志,如果在当前执行的事务中缓存线被保护时则设置该 标志,反之则不设置。在一些实施例中,被保护的标志可包括一个或多个位。在一些实施例中,跟踪被保护缓存线的ASF机制可包括锁定线缓冲器(locked line buffer)。在这样的实施例中,当被保护存储器中的数值被修改时(例如,使用LOCK MOV指令),在锁定线缓冲器上增加条目(entry)以指示修改之前的缓冲器所具有的缓存块 和数值。在这样的实施例中,当事务中止发生时,锁定缓冲器的条目可被用来将每一个受保 护缓存线的事务前(pre-transaction)的数值恢复到本地缓存中。在这样的实施例中,锁 定线缓冲器可参与到系统缓存一致性协议中,如下所述。在另一个实施例中,不是如上面所述的利用锁定线缓冲器来撤消(undo)存储器 存储,而是在事务被提交之前,不同的ASF实现可防止到关键段中的受保护存储器位置的 存储指令被写入到缓存和/或存储器中。例如,ASF可用来将所有存储器修改保留在内部 存储缓冲器中并转发这些缓冲的数值到事务中随后的加载操作。在这样的实施例中,一旦 事务被提交,则ASF机制可允许将内部存储缓冲器中被缓冲的存储操作写回到缓存中。在一些实施例中,由于不同ASF硬件组件的固定容量,可在事务(或嵌套的事务 组)执行期间被同时保护的存储器位置的数量上存在不同限制。例如,如上所述,根据一些 实施例,在关键段的时间段中,实现可能要求所有被保护存储器位置同时驻留在一个数据 缓存中(例如,存储器缓存230)。在这样的实施例中,如果一个受保护的缓存线在事务执行 期间被从缓存中逐出的话(例如,由于容量限制),则关键段被中止。例如,当被保护存储器 位置N+1 (其中所有N+1个存储器位置被映射到N路关联数据缓存中的相同的组)被访问 时,因为至少一个被保护的缓存线被从缓存逐出,则碰巧引用N+1存储器位置的关键段可 能失败。然而,如果事务执行更加分布的引用模式的话,那么在任何一个缓存索引被超出以 及受保护缓存线从数据缓存中被替换之前,事务能够并发保护多于N个的存储器位置。在不同的实施例中,可能存在不同于缓存关联的容量限制。例如,在使用锁定线缓 冲器的实施例中,并发的被保护修改存储器位置的最大数量可由锁定线缓冲器的容量来确定。在另一个采用存储缓冲器机制的实施例中,ASF硬件容量可依赖于存储缓冲器的容量 (由系统流水线(pipeline)支持的最大数量的剩余(outstanding)存储)。在不同的实施例中,只要受保护位置的数量没有超过给定的最小保证容量的话, 则ASF机制可保证关键段不会由于硬件容量的问题而失败。在不同的实施例中,不管受保 护存储器位置驻留在可缓存的地址空间的何处,上述保证都可实现。例如,在需要所有受保 护存储器位置同时驻留在一个数据缓存的实施例中,最小保证容量可依赖于数据缓存的关 联性(关联组的大小)。在不同的实施例中,如果事务超出了硬件容量,那么事务尝试可中 止。在一些实施例中,ASF机制可允许执行事务的线程从事务的受保护存储器位置 组中删除未修改的受保护存储器位置。在一些实施例中,通过执行由ASF提供的明确的 RELEASE指令,线程可完成上述删除操作。在一些实施例中,当受保护的存储器位置被释放 时(例如,使用RELEASE指令),则不再监视该位置与其他线程的竞争。例如,在使用受保护 标志的实施例中,可修改与被释放的缓存块相关的受保护标志的数值以指示该缓存块不再 被保护。因此,通过从受保护存储器位置组中删除未修改的受保护存储器位置,线程可避免 与其他线程不必要的数据冲突和/或超出ASF实现的硬件容量,上述冲突和超出容量可导 致事务中止。在一些实施例中,RELEASE指令可保证或不保证特定的受保护存储器位置将 会被释放。在一些实施例中,只有未被修改的受保护缓存线可被释放。如上所述,在一些实施例中,如果事务试图保护(利用说明符)比ASF实现容量能 够支持的存储器位置更多的存储器位置(例如,缓存块)的话,那么事务可被中止。在另一 实施例中,响应于错误的生成,中止也可被执行。在不同的实施例中,事务中止可由不足的硬件容量之外的其它条件引起。例如,中 止可由存储器竞争引起,也就是,是由其他试图访问受保护存储器位置的处理器引起的冲 突。在不同的实施例中,ASF机制可被配置为检测与一个或多个受保护缓存线相关的各种缓 存一致性消息(例如,无效和/或非无效(non-invalidating)探测)并确定该探测是否指 示存在数据冲突。响应于检测到的数据冲突,ASF机制可中止事务尝试。例如,假定第一线 程是在事务模式下执行并保护存储器位置(使用说明符指令读取存储器位置)。如果随后 第二线程试图对上述被保护的存储器位置进行存储,那么执行第二线程的处理器可发送无 效探测到执行第一线程的处理器,依照系统采用的特定缓存一致性协议。如果当存储器位 置依然被保护时(例如,在第一线程提交它的事务或以其他方式释放存储器位置之前)第 一处理器接收到了该无效探测,那么数据冲突则可能存在。在这样一个例子中,ASF机制可 被配置为检测无效探测是与被保护存储器位置相关的并且响应于该检测,中止第一线程的 事务。根据不同的实施例,如果ASF机制检测到与被保护缓存线相关的无效探测被接收 时,则中止事务。在一些实施例中,如果ASF机制检测到与被保护缓存线相关的非无效探测 被接收时,则事务也被中止。图7是根据一些实施例,由一组定义不同的ASF实现如何处理数据冲突的规则组 成的表。图7的表描述了如下冲突的结果,S卩,当在第一处理器(CPU Α)上执行的第一线程 在给定存储器位置上执行给定存储器访问操作时,第二处理器(CPU B)上的第二线程正在 执行已经保护该位置的事务。如上所述,不同缓存一致性协议允许存储器缓存具有不同的状态的缓存存储器的值,诸如只读访问的“共享”状态,或者写访问的“独占,,或“排他”状 态。“保护共享”和“保护独占”列各自对应于共享和独占状态的受保护缓存线。例如,根据一个实施例,在图7的表中的顶层条目详细描述了如何处理这种状况, 其中CPU A正在任意模式中(关键段的内部或外部)执行并且执行对CPU B保护的处于共 享或独占状态之一的存储器位置的读操作。根据所示的实施例,如果CPU B保护的位置处于 独占状态,那么CPU B的事务中止,反之则CPU B的事务不中止。如果CPU A已经在任意模 式中执行预取操作或它已经从事务内部执行LOCK MOV或LOCK PREFETCH操作,那么将生成 类似的结果。然而,根据所示的实施例,如果CPU A将在任意模式中执行写或PREFETCHW操 作到存储器位置或者在事务模式中执行LOCK PREFETCHW操作到存储器位置的话,那么CPU B将中止事务而不管它所持有的存储器位置是独占还是共享状态。在一些实施例中,事务可利用ASF定义的ABORT指令被明确的中止。在一些实施 例中,由于其试图执行禁止指令(诸如导致远程控制传输的指令),事务可被中止。在不同 的实施例中,远程控制传输可包括传输控制到另一段中的位置的指令,诸如通过改变x86 实现中的CS寄存器的内容来实现。远程控制传输可包括陷阱(trap),错误,匪Is,SMIs, 未遮罩(unmasked)和未延迟(nondeferred)的中断,被转化为异常的禁止指令,等等。在 一些实施例中,禁止指令可包括特权化指令,诸如那些必须在高特权层(例如,CPL = 0)被 执行的、导致远程控制传输或异常的指令以及任何可被安全虚拟机(SVMuecure virtual machine)管理程序(hypervisor)解释的指令。在不同的实施例中,禁止指令可包括參 FAR JMP,FAR CALL, FAR RET· SYSCALL, SYSRET, SYSENTER, SYSEXIT· INT, INTx, I RET, RSM· BOUND, UD2· PUSHF, POPF, PAUSE, HLT, CPUID, MONITOR, MWAIT, RDTSC, RDTSCP, RDPMC· IN, OUT 所有特权化指令(All privileged instructions) 所有 SVM 指令(All SVM instructions)此处所使用的术语SVM指令指的是虚拟机监视程序和/或虚拟机可用来在虚拟机 的边界进行交互的任何指令。在不同的实施例中,这样的指令可包括,但不限于,VMRUN(运 行虚拟机),VML0AD/VMSAVE(加载/保存不同的虚拟机状态到处理器中和/或存储器中的 保存区域),和/或VMCALL (执行对虚拟机监视程序的调用)。在不同的实施例中,虚拟机监视程序可诸如通过截取操作来阻止处理器上一组可 配置指令的执行。此处这样的指令被称作“可截取的”。根据一些实施例,多个或所有的SVM 指令可以是可截取的。在一些实施例中,事务内部任何可截取的指令的执行会导致事务被 中止。在一些实施例中,ASF机制可禁止事务中的指令在虚拟环境中(例如,虚拟机)和 在原生环境中执行不同的操作。通过强加这样的限制,实施例可被完全虚拟化并可被用在 虚拟机环境中而不需要忍受来自当在虚拟环境中被执行时这样的指令可能会造成的不可 预测或不正确的行为。例如,在一些实施例中,所有可截取的指令在事务内部是被禁止的。 在一些实施例中,虚拟机特定指令和/或特权化指令被禁止。
在一些实施例中,试图执行禁止指令或在关键段中弓I发远程控制传输的指令可生 成异常(例如,#GP异常),这会造成事务尝试被中止。在一些实施例中,远程控制传输可在 中止之后执行。在这样的实施例中,软件修复规则可基于从远程控制传输(或被禁止事务 所引起的异常所调用的错误处理程序)的返回而被执行。如上所述,在不同的实施例中,基于硬件容量限制,与其他线程的存储器冲突,执 行禁止指令的线程(例如,远程控制传输),和/或如果该线程执行明确的ABORT指令,ASF 机制可中止事务尝试。图8是根据不同实施例说明ASF机制在回退模式下执行事务的方法流程图。根 据方法800,线程可首先通过执行SPE⑶LATE指令来开始在回退模式下的事务。如图5中 所详细描述的,执行SPECULATE可包括检查点(保存)指令和堆栈寄存器值以供以后使 用。然而,在一些实施例中,如果事务被嵌套到其他事务中,那么检查点可能已存在并且 SPECULATE指令将不会导致其他检查点被记录,如图5所示。执行SPE⑶LATE指令之后,线程可确定是否已设置中止状态,如在步骤810中,并 且如果已经设置的话,则跳转并执行恢复例程,诸如步骤815。在一些实施例,软件可通过检 查一个或多个放置多个中止状态代码的寄存器(例如,rAX寄存器)来确定中止状态代码 是否已被设置。在一些实施例中,不同的中止状态代码指示之前的事务尝试是否以及因为 什么原因被中止。在不同的实施例中,不同的中止状态代码可被设置,诸如那些指示之前的 事务尝试的中止或不中止是由竞争,容量限制,禁止指令的执行,远程控制传输或其他原因 而引起的。在一些实施例中,恢复例程815可根据确定的中止状态代码来采取不同的恢复 操作。例如,在一些例子中,恢复例程815可确定线程不应该使用ASF来重试事务的执行。根据方法800,线程然后可开始执行事务主体,其可包括保护一定数量的被保护的 存储器位置,如在步骤820中。在一些实施例中,保护存储器位置可使用如上描述的不同的 说明符指令来实现,诸如LOCK MOV。在一些实施例中,对应于每一个受保护存储器位置的缓 存块的受保护的标志可被设置以指示该位置已被保护。根据图8所示的例子,执行事务实 体可进一步包括向一个或多个受保护的存储器位置进行写操作,如在步骤825中。在一些 实施例中,写操作可通过如上描述的多个预测存储操作来实现,诸如L0CKM0V。在利用锁定 线缓冲器的实施例中,向受保护存储器位置的写操作可包括存储未被修改的数值到锁定线 缓冲器上然后执行写操作到本地缓存上。根据方法800,中止条件可在方法执行中被满足,如由步骤830的肯定指向所示。 如上所述,在不同的例子中,中止条件可由与其他线程的冲突,容量限制,远程控制传输,禁 止指令,和/或由线程执行的明确的ABORT指令来引起。如果中止条件被检测到(步骤830 中的肯定指向),那么ASF机制可被配置为丢弃由部分执行的事务造成的到所有受保护存 储器位置的修改。在不同的实施例中,丢弃对所有受保护的存储器位置的修改,如在步骤835中,可 以不同的形式来完成,其依赖于所使用的特定的可预测执行机制。例如,在一些实施例中, 其中ASF利用存储缓冲器来延迟如上描述的到受保护存储器的存储操作的写回阶段,丢弃 修改(如在步骤835中)可包括丢弃正在存储缓冲器中等待的、对受保护存储器位置的任 何存储操作。在利用锁定线缓冲器的实施例中,丢弃修改(如在步骤835中)可包括将存 储在锁定线缓冲器中的每一个存储器位置的旧值(被事务修改之前的每一个存储器位置处的数值)写回到本地缓存中。根据方法800,在回退模式下中止事务可进一步包括释放所有受保护的存储器位 置,如在步骤840中,这样这些位置就不再被保护。例如,释放受保护的存储器位置可包括 重置与被中止的事务保护的每一个存储器位置相关的一个或多个受保护标志。在利用锁定 线缓冲器的实施例中,释放受保护存储器位置可进一步包括删除与事务中修改的被保护存 储器位置相对应的锁定线缓冲器的条目。根据所示的实施例,ASF机制然后可确定中止的原因以确定相应的中止状态代码。 在一些实施例中,ASF机制可通过编码状态代码到状态寄存器中(例如,rAX寄存器216中) 来将中止状态代码与软件机制相通信,如在步骤845中。在一些实施例中,状态寄存器(例如,rAX寄存器)可用来同时存储多个状态代 码。例如,状态寄存器位的一些子集可用来存储中止状态代码,同时其他一个或多个子集也 可用来存储其他信息。例如,如果中止是由执行ABORT指令的线程造成的,那么状态寄存器 位的子集可存储一个或多个由被调用时线程传送给ABORT指令的数值。在一些实施例中, 状态寄存器位的子集也可存储当前事务嵌套深度的指示。在进一步的实施例中,不同的状 态寄存器位的子集可存储其他组不同的状态信息。根据方法800,ASF机制然后可回退操作到事务的开始,诸如通过回退指令和堆栈 指针到检查点值,如在步骤850中。在一些例子中,如果事务是顶层事务,那么检查点可能 已经作为执行SPE⑶LATE指令的一部分而被记录(如在步骤805中)并且回退执行可导致 将控制流程返回到事务实体的开始部分,如从步骤850到步骤810的反馈循环。在另一实 施例中,如果事务是嵌套事务,那么检查点可能已被记录在顶层事务中并且回退执行可导 致将控制流程返回到顶层事务的实体的开始部分。这样,在一些实施例中,中止嵌套的事务 可包括中止所有该嵌套事务嵌套在其中的父事务。根据方法800,事务实体可被尝试直到它在没有检测到中止条件的情况下完成。如 果事务尝试在没有中止的情况下而完成,如步骤830的否定指向所示,那么该线程提交该 事务,如在步骤855中。在一些实施例中,提交事务可包括执行COMMIT指令。图9是根据一些实施例,说明提交事务的方法(诸如通过COMMIT指令)。图9是根据一些实施例说明ASF机制可中止在条件存储模式下执行的事务的方法 流程图。根据所示的实施例,方法900可通过确定事务是否是有效的(active)来开始,如 在步骤905中。如果事务是有效的,如步骤905的肯定指向所示,那么事务在执行过程中不 中断。这样,在一些实施例中,指示成功执行的代码可被存储在状态寄存器中。例如,在一 些实施例中,rAX寄存器可如在步骤910中被清空(诸如通过存储0值到该寄存器中)。根据方法900提交事务可进一步包括设置指示该执行不是在条件存储模式下的 标志,如在步骤915中,并递减指示有效事务的嵌套层数的计数器,如在步骤920中。在一 些实施例中,如果被提交的事务是嵌套事务,如步骤925的否定指向所示,那么事务可被结 束,如在步骤940中。因此,在这样的实施例中,即使在嵌套事务已被提交之后,被执行在嵌 套事务内部的预测存储可依然是可预测的(并且是对冲突敏感的)。根据图9中的实施例,如果事务是顶层事务,如步骤925的肯定指向所示,那么ASF 机制可提交所有的修改到受保护的存储器位置这样它们对系统中的其他线程是全局可见 的,如在步骤930中。在不同的实施例中,提交修改到受保护的存储器位置可涉及不同的动作,其依赖于使用的预测机制。例如,在到受保护存储器的预测存储操作在存储缓冲器中 被延迟直到事务提交时的实施例中,提交修改可意味着执行写回这些数值到存储器中(例 如,到本地缓存和/或主存储器)。在不同的实施例中,提交顶层事务可进一步包括释放所 有受保护的存储器位置,如在步骤935中,这样,这些位置就不再被ASF机制所保护。例如, 在受保护标志被用来指示受保护缓存块的实施例中,设置与受保护的缓存块相关的标志的 值以指示缓存块不再被保护。这样,ASF机制就不需要确保相对于被释放的存储器位置的 原子性了。在一些实施例中,线程试图提交无效(not active)的事务,如步骤905的否定指 向所示,那么接下来的操作则依赖于执行的模式是否是条件存储模式还是回退模式。如果 执行模式是回退模式,如步骤945的否定指向所示,那么ASF机制可被配置为产生诸如#GP 异常的异常。否则,如果执行模式是条件存储(如步骤945的肯定指向所示),那么ASF机 制可被配置为存储中止状态代码到状态寄存器(诸如rAX)中(如在步骤955中)并跳转 到恢复例程,如在步骤960中。该事务然后可在需要时被再次尝试。图10是根据一些实施例说明在条件存储模式下执行事务的方法流程图。根据方 法1000,在条件存储模式下执行事务可由执行一个BEGIN指令开始,如在步骤1005中。在 一些实施例中,执行BEGIN指令可包括执行图6中的方法600。在不同的实施例中,BEGIN 指令可设置一个或多个确定执行在条件存储模式下的事务是否是有效的标志。根据所示的实施例,事务然后可使用说明符指令来保护一个或多个存储器位置, 如在步骤1010中。在一些例子中,事务也可试图写入到一个或多个在步骤1010中被保护 的存储器位置,如在步骤1015中。根据方法1000,如果ASF机制没有检测到中止条件(例如,竞争、容量限制超出,远 程控制传输,禁止指令,等等),如步骤1025的否定指向所示,那么线程可提交该事务,如在 步骤1040中。在一些实施例中,提交事务,如在步骤1025中,可包括执行一个诸如图9中 所示的提交指令。在一些实施例中,如果中止条件在事务执行过程中被检测到,如在步骤1025的肯 定指向所示的,那么事务被中止,如在步骤1030中。在一些实施例中,中止事务可包括撤销 或丢弃由事务的存储操作造成的到受保护的存储器位置上的任何修改。在一些实施例中, 指示导致中止的原因的中止状态代码(例如,冲突,容量,禁止事务,等等)可被作为中止事 务的一部分而记录,如在步骤1030中。根据所示的实施例,事务被中止之后(如在步骤1030中),控制流程可依然保留 在事务实体中并且该事务通过排除到受保护存储器位置的预测存储可继续执行,如在步骤 1035中。在一些实施例中,在事务尝试被中止之后,在事务实体中出现的说明符指令可被作 为常规存储器引用来执行(例如,没有为存储器位置设置保护标志的读取指令)和/或到 受保护存储器位置的访问可被忽略(例如,被认为是无操作指令)。根据一些实施例,在条件存储模式下执行事务的线程可被配置为验证事务是否被 中断。例如,在一些实施例中,线程可执行VALIDATE指令,如在步骤1040中,来确定事务是 否是有效的(即,还没被中止)。在一些实施例中,该VALIDATE指令是通过拷贝当前中止状 态代码到软件可读取的程序可读状态寄存器(例如,到rAX寄存器中)而能执行。如果事 务还没有被中止,那么该VALIDATE指令则通过给状态寄存器设置说明该事务依然是有效的值(例如,设置rAX为0值)而能执行。根据所示的实施例,如果线程执行VALIDATE指令,则线程然后可检查状态寄存器 (例如,rAX)来确定事务是否已经被中止。如果事务不是有效的,如在步骤1045的否定指 向所示,那么线程可执行一些恢复动作,如在步骤1055中。根据不同的实施例,执行恢复动 作可包括释放任何受保护存储器位置和/或将程序的控制返回到事务开始以重新执行。如 果事务依然是有效的,如在步骤1045的肯定指向所示,那么线程可继续执行事务和/或提 交事务,如在步骤1050中。根据所示的实施例,一旦线程完成了执行事务,它可试图提交该事务,如在步骤 1050中。如上所示,提交事务可包括执行提交指令,如图9中所示的那样。作为执行提交指 令的一部分,ASF机制可检测事务是否是有效的(如在步骤905中)并且如果事务不是有 效的,则存储一个中止状态到软件可读寄存器中(例如,如在步骤955中的rAX)并且跳转 到恢复例程(如在步骤960中),该规则与步骤1055中的恢复动作相似或相同。执行恢复 例程可包括释放任何受保护存储器位置和/或为将程序控制返回到事务再次执行的开始。 在一些实施例中,如果该段(section)被嵌套到一个或多个回退模式的事务中,那么父事 务可被中止并且控制可被返回到最高级的SPECULATIVE指令所采用的检查点,参见如上的 图8中所描述的。在不同的实施例中,编程者可创建利用ASF使能系统的事务存储编程模式的应 用。在这样的实施例中,编程者可配置程序以执行事务开始指令(例如,SPE⑶LATE,BEGIN 等)来开始事务,执行一个或多个到受保护存储器的访问(例如,LOCK M0V,等),然后执行 一个或多个指令来提交事务(例如,COMMIT)。在一些实施例中,可编制程序来使得ASF使能的事务存储器编程模式与其他同时 存在的诸如非ASF、基于锁代码的控制机制协同工作。例如,假定有一个诸如B-tree的数 据结构。共享存储器应用中的并行线程可频繁地执行到B-tree的插入和删除操作,其是 在利用基于ASF的事务存储器的事务性且无锁的方式下的。B-tree可能偶尔的由于性能 问题需要重新平衡,操作可包括在B-tree的多个存储器位置上的原子性操作。然而,既然 这些操作可包括保护多个存储器位置,那么试图作为一个事务完成该操作可导致频繁的中 止。例如,冲突中止可能是因为与其他当前正在执行的向B-tree删除和/或插入操作的线 程的冲突所导致的。在另一例子中,同时保护如此多的存储器位置可能超出了 ASF实现的 容量,因此造成事务的容量中止。在这种情况中,如果使用传统的、基于锁的互斥排除操作 而不是采用事务存储器来执行重新平衡的操作,则该操作可能会更加有效。例如,锁可能与 整个B-treee相关并且可在对该B-tree的互斥访问时需要。在这个例子中,重新平衡操作 可通过请求B-tree锁开始,然后执行重新平衡操作,然后释放锁。然而,在这样的例子中, 必须谨慎以确保利用基于锁的互斥排除语义的代码与利用基于ASF事务存储器语义的代 码安全地互操作。图11是根据一个实施例,说明配置基于ASF事务与基于锁代码的互操作方法流程 图。根据所示实施例,线程可通过执行诸如SPECULATE或BEGIN指令来开始事务,如在步骤 1110中,如前所述。被保护在事务内部的存储器位置组在此可被称作事务的读出组(read-set)。在基 于锁代码的表现中,事务的读出组可包括一个或多个与锁相关的存储器位置。任何与锁相关并由锁保护的存储器位置在此被称作锁保护(lock-protected)。根据所示的实施例,线程可被配置为原子地读取(例如,使用说明符操作)与在事 务读出组中每一个锁保护存储器位置相关的每一个锁的值,如在步骤1120中。因此,通过 原子地读出锁的值,线程增加锁到事务的读取组(ASF机制监视锁并将其作为事务的一部 分加以保护)。例如,在上述的B-tree例子中,事务的插入操作可首先通过原子地读出与整 个B-tree结构相关的锁值来开始。在一些实施例中,原子地读出锁值可包括利用说明符操 作来读取锁值。根据所示的实施例,线程然后可确定是否保持(hold) 了在步骤1120中被读取的 任意一个锁。如果保持了锁的话,如步骤1130肯定指向所示,那么线程可再试事务。在一 些实施例中,线程可继续重读每个锁的值直到所有的锁都被释放,如步骤1130的否定指向 所示。在一些实施例中,如果具有任意一个锁,那么线程可中止事务(例如,通过执行ABORT 指令)并再次试图执行事务。在其他实施例中,如果保存了任何一个锁,则线程可试图回退 事务已经在受保护的存储器位置上造成的修改然后提交该事务。根据所示的实施例,一旦线程检测到未保持从步骤1120中读取的锁,如步骤1130 的否定指向所示,则线程可继续执行事务,如在步骤1140中。在所示实施例中,由于不同锁 的存储器位置通过说明符操作被保护,任何对锁的值的改变(例如,不同的线程请求锁)可 导致事务的冲突中止。因此,中止条件在事务执行过程中被检测到(例如,由于被请求锁的 冲突中止),然后ASF机制和/或线程可中止事务并执行一些恢复动作(如在步骤1160中) 并再次尝试事务(如从步骤1160到步骤1120的反馈循环)。例如,继续上述的B-tree的 例子,如果不同的线程试图请求与B-tree相关的锁时(例如,作为执行重新平衡操作的一 部分),那么缓存一致性消息可被发送到正在执行的线程,引起插入操作事务的冲突中止。根据所示实施例,如果没有中止条件被检测到(如步骤1150的否定指向所示),那 么线程可提交事务,如在步骤1160中。图12说明被配置为实现此处所描述的ASF不同实施例的计算机系统的一个实施 例。计算机系统1200可是任何类型的装置,包括但不限于,个人计算机系统,桌面电脑,膝 上型电脑或笔记本计算机,主机计算机系统,手持计算机,工作,网络计算机,用户装置,应 用服务器,存储装置,串行装置(比如交换机),调制解调器,或者任何类型的通用计算机系 统。计算机系统1200可包括多个处理器1270,每一个处理器都包括多个内核,每一个 内核可是单线程或多线程的(例如,并行多处理,Hyperthreading ,等等)。在一些实施例 中,处理器1270可包括动态调度机制1272,像那些能够为实现预测存储缓冲器在加载/存 储队列1274中延迟预测存储,如此描述的。在一些实施例中,处理器1270可包括多个加载、 存储、和/或加载/存储队列,比如1274,以用于在处理器流水线中保持飞行(in-flight) 存储器操作。处理器1270可包括诸如rAX,rFLAGS或其他特定目的寄存器1276,这样的寄 存器用来记录事务的嵌套深度,事务模式或状态(有效或无效的)。在一些实施例中,处理 器1270可包括任意数量的ASF硬件事务存储器机制1278,如此处描述的。例如,ASF机制 1278可包括用于监视被活动事务保护的存储器位置的锁定线缓冲器和/或硬件逻辑。在一 些实施例中,处理器1270可包括多个缓存一致性机制1279,该机制可被用来实现不同的缓 存一致性协议(例如,MESI, M0ESI,等等)以及可通过ASF机制用来检查冲突中止,如此处描述的。计算机系统1200还可包括一个或多个永久存储装置1沈0(例如,光盘存储,磁盘 存储,硬盘驱动器,磁带驱动器,固体存储器,等等),其可存储文件,例如通过如文件系统 1262的文件系统。计算机系统1200可包括被多处理器共享的一个或多个存储器1210 (例 如,缓存,SRAM, DRAM, RDRAM, EDO RAM, DDR 10RAM, SDRAM, Rambus RAM, EEPROM,等等中的一 个或多个)。不同的实施例可包括更少或更多的未示在图12中的组件(例如,显卡,声卡, 附加网络接口,串行设备,类似ATM接口,以太网接口,帧延迟接口的网络接口,等等。)处理器1270,存储装置1260以及共享存储器1210可被耦合到系统互联 (interconnect) 1250上。一个或多个系统存储器1210可包含程序指令1220。程序指令 1220可以平台原生二进制码,任何解释性语言,诸如Java 字节_代码,或任何诸如C/C++, Java 等其他语言或它们的任何组合被编码。程序指令1220可包括实现一个或多个基于ASF事务存储器应用1222的可执行程 序指令。每一个应用1222可以是多线程的并且可被配置为利用ASF事务存储机制。在一 些实施例中,一个或多个应用1222可被配置为既使用ASF事务存储指令又使用互斥锁来操 作,如此所述。在这样的实施例中,共享存储器1210可包括多种数据结构和变量1230,任何 数据结构和变量可与一个或多个互斥锁1240相关。在一些实施例中,程序指令1220和/或基于ASF事务存储器应用1222可作为一种 计算机可读存储介质的产品而被提供,其中计算机可读存储介质中具有存储在其上的指令 并且这些指令可在计算机系统(或其他电子设备)上编程以根据多个实施例执行不同的操 作。计算机可读存储介质包括任何以机器(例如,计算机)可读形式(例如,软件,处理应 用)存储信息的介质。机器可读存储介质可包括,但并不限于,磁性存储介质(例如,软盘); 光盘存储介质(例如,CD-ROM),磁-光存储介质;只读存储器(ROM);随机存储器(RAM) ’易 擦除可编程存储器(例如,EPROM和EEPROM);闪存,电子,或适于存储程序指令的其他有形 介质。除此之外,程序指令可使用无形媒介-光,声或其他传输信号的模式(例如,载波,红 外信号,数字信号等等)来通信。尽管上面的实施例已经被尽可能详细描述,但以上所公开的内容一旦理解后,多 种变化及修改对本领域技术人员将变得很明显。接下来的权利要求应当被解释为涵盖所有 这种变化和修改。工业实用性本发明一般可应用于共享存储器计算机系统中。
权利要求
1.一种装置,包括能够耦合到被一个或多个其他处理器共享的共享存储器的处理器,其中所述处理器被 配置为执行相对于所述一个或多个其他处理器是原子事务的代码段,所述代码段包括对所 述共享存储器的多个存储器访问操作;其中所述处理器被配置为确定所述多个存储器访问操作是否包括一组禁止指令中的 至少一个,其中所述组禁止指令包括一个或多个在虚拟计算环境和原生计算环境中以不同 能够方式操作的指令;其中所述处理器被配置为响应于所述多个存储器访问操作之一包括所述组禁止指令 中的至少一个而中止所述事务。
2.根据权利要求1所述的装置,其中所述组禁止指令包括根据是否在虚拟机内而在所 述处理器上以不同方式执行的至少一个指令。
3.根据权利要求1所述的装置,其中所述组禁止指令包括远程控制传输指令,其中所 述远程控制传输指令能够执行以通过修改所述处理器的区段寄存器内的值而传输程序控 制到不是包含所述指令的存储器区段的存储器区段。
4.根据权利要求1所述的装置,其中所述组禁止指令包括一个或多个仅在所述处理器 的最高特权级执行的指令。
5.根据权利要求1所述的装置,其中所述处理器被配置为通过丢弃由所述多个存储器 访问操作中的一个或多个的执行对所述共享存储器中的一个或多个值的任何修改来中止 所述事务。
6.一种方法,包括与共享存储器耦合的、多个处理器中的第一处理器执行相对于所述多个处理器是原子 事务的代码段,所述代码段包括对共享存储器的多个存储器访问操作;所述第一处理器确定所述多个存储器访问操作是否包括一组禁止指令中的至少一个, 其中所述组禁止指令包括根据是否在虚拟机内执行而以不同方式操作的一个或多个指令; 以及响应于所述多个存储器访问操作包括所述组禁止指令中的至少一个,所述第一处理器 中止所述事务。
7.根据权利要求6所述的方法,所述组禁止指令包括远程控制传输指令,其中所述远 程控制传输指令能够执行以通过修改所述处理器的区段寄存器内的值而传输程序控制到 不是包含所述指令的存储器区段的存储器区段。
8.根据权利要求6所述的方法,其中所述组禁止指令包括仅在所述第一处理器最高特 权级执行的指令
9.根据权利要求6所述的方法,其中所述中止操作包括丢弃由所述多个存储器访问操 作中的一个或多个的执行对所述共享存储器中的一个或多个值的任何修改。
10.一种系统,包括共享存储器;与所述共享存储器耦合的多个处理器;其中所述多个处理器的第一处理器被配置为执行包括对所述共享存储器的多个存储 器访问操作,其中所述第一处理器被配置为相对于所述多个处理器中的其他处理器作为原子事务执行所述多个存储器访问操作;其中所述第一处理器被配置为确定所述多个存储器访问操作是否包括一组禁止指令 中的至少一个指令,其中所述组禁止指令中的至少一个指令的执行是基于所述第一处理器 的特权级的;其中所述第一处理器被配置为响应于所述多个存储器访问操作之一包括所述组禁止 指令中的至少一个而中止所述事务。
11.根据权利要求10所述的系统,其中所述组禁止指令包括根据是否在虚拟机内执行 而在所述处理器上以不同方式执行的指令。
12.根据权利要求10所述的系统,其中所述组禁止指令包括特权指令。
13.根据权利要求10所述的系统,其中所述组禁止指令包括远程控制传输指令。
14.根据权利要求10所述的系统,其中所述第一处理器被配置为通过丢弃由所述多个 存储器访问操作中的一个或多个的执行对所述共享存储器中的一个或多个值的任何修改 来中止所述事务。
15.根据权利要求10所述的系统,其中所述组禁止指令包括一个或多个与管理程序相 关的指令。
全文摘要
本发明公开了一种在事务存储系统中执行事务的系统和方法。该系统包括耦合到共享存储器的多个处理器中的一个处理器,其中该处理器执行相对于多处理器的执行是原子(atomic)事务的代码段,该代码段包括到共享存储器的多个存储器访问操作。根据实施例,处理器确定存储器访问操作是否包括任何一组禁止指令,其中,该组指令包括一个或多个在虚拟计算环境中和现实计算环境中操作不同的指令。如果任何一个存储器访问操作是上述禁止操作之一,那么处理器中止该事务。
文档编号G06F9/455GK102144218SQ200980135774
公开日2011年8月3日 申请日期2009年7月28日 优先权日2008年7月28日
发明者斯特凡·迪特尔赫斯特, 米夏埃尔·P·赫姆斯, 达维德·S·克里斯蒂 申请人:超威半导体公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1