CN102289387A - 软件事务存储器中的动作框架 - Google Patents
软件事务存储器中的动作框架 Download PDFInfo
- Publication number
- CN102289387A CN102289387A CN2011101789800A CN201110178980A CN102289387A CN 102289387 A CN102289387 A CN 102289387A CN 2011101789800 A CN2011101789800 A CN 2011101789800A CN 201110178980 A CN201110178980 A CN 201110178980A CN 102289387 A CN102289387 A CN 102289387A
- Authority
- CN
- China
- Prior art keywords
- affairs
- action
- stm
- storehouse
- readjustment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及软件事务存储器中的动作框架。软件事务存储器系统实现轻量的基于键的动作框架。该框架包括由STM库展示的一组统一的应用编程接口(API),该组统一的应用编程接口允许客户端实现可由STM代码中的事务或事务嵌套使用特定键来注册、查询和更新的动作。每个动作包括键、状态信息以及可被挂钩到事务执行的验证、提交、中止、和/或重新执行阶段的一组一个或多个回调。动作用定制的控制逻辑扩展STM系统的内建并发控制,支持事务嵌套语义,以及允许与垃圾收集系统的集成。
Description
技术领域
本发明涉及软件事务存储器中的动作框架。
背景技术
可编写计算机程序来允许使用线程或另一合适的并行执行机制来并行地执行程序的不同部分。为了并行地执行程序的不同部分,计算机系统或程序通常包括某种机制来管理对这些不同部分的存储器访问,以确保各部分按所希望的顺序访问公共存储器位置。
事务存储器系统允许程序员指定程序中的可被执行的事务,就好像这些事务隔离地执行(即独立于程序中的其他事务和其他非事务序列)。事务存储器系统通过以以下方式执行事务来管理事务的存储器访问,该方式是如果两个或更多事务试图以冲突的方式访问同一存储器位置,则事务的效果可被回滚或撤销。可使用硬件和/或软件来实现事务存储器系统。
诸如软件事务存储器(STM)系统之类的事务存储器系统通常对支持的编程场景的类型有限制。例如,STM系统通常不支持在事务中对线程本地存储器的使用、事物锁和传统锁之间的互操作、对静态类初始化器和模块化初始化器的使用、在事物内对软件锁省略(software lock elision)的使用、以及对定制的抽象并发控制的使用。尽管STM系统的开发者可能够对上述场景中的每一个以及其他场景实现单独的解决方案,但是这些单独的解决方案可能是代价高的且可导致不希望的STM系统架构。希望允许各种各样的编程场景被支持的具有统一且高效的解决方案的STM系统。
发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
一种软件事务存储器(STM)系统实现了轻量的基于键的动作框架。该框架包括由STM库展示的一组统一的应用编程接口(API),该组统一的应用编程接口允许客户端(例如程序员和/或编译器)实现可由STM代码中的事务或事务嵌套使用特定键来注册、查询和更新的动作。每个动作包括键、状态信息以及可被挂钩到事务执行的验证、提交、中止、和/或重新执行阶段的一组一个或多个回调。动作用定制的控制逻辑扩展STM系统的内建并发控制,支持事务嵌套语义,以及允许与垃圾收集系统的集成。STM系统可使用该动作框架来用一致性和高效性解决一个或多个STM编程场景。
附图说明
包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。
图1是示出软件事务存储器系统的实施例的框图。
图2是示出用于在STM系统中查询、注册和更新动作的方法的实施例的流程图。
图3是示出在事务执行阶段调用由动作实现的回调的方法的实施例的流程图。
图4是示出具有被配置成编译具有软件事务存储器事务的源代码的编译器的编译系统的实施例的框图。
图5是示出被配置成实现软件事务存储器系统的计算机系统的实施例的框图。
具体实施方式
在以下详细描述中,对附图进行了参考,附图构成了实施例的一部分且在其中作为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、“后方”、“前导”、“尾部”等的方向性术语参考正在描述的附图的方向来使用。因为实施例的各组件可位于多个不同的方向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结构上或逻辑上的改变而不背离本发明的范围。因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。
图1是示出软件事务存储器(STM)系统10的实施例的框图。STM系统10表示如图5中示出且在下文中更详细地描述的计算机系统100等计算机系统中的运行时操作模式,其中该计算机系统正在执行STM代码12的指令。如下文更为详细地描述的那样,STM系统10实现轻量的基于键的动作框架。
STM系统10包括STM库14和用于执行STM代码12的运行时环境16。STM系统10被配置成管理构成STM代码12中的原子块的STM事务20的执行,以允许事务被原子地执行,且如果需要则回滚或撤销由事务20作出的改变。为此,如由箭头36所示,对每个正在执行的事务20,STM系统10使用日志34来跟踪事务20对对象30的存储器访问。
运行时环境16可以是运行时库、虚拟机(VM)、诸如图5中所示且在下文更详细描述的OS 122所提供的功能之类的操作系统(OS)功能、和/或诸如图4和5所示且在下文更详细描述的编译器92所提供的功能之类的编译器功能的任何适当的组合。
STM代码12包括一组一个或多个事务20以及任何合适的非事务代码。每个事务20包括被设计成原子地执行的指令序列,即就好像该序列与STM代码12中的其他事务和非事务代码隔离地执行。每个事务20包括原子块命名符22或其他合适的句法,指示出STM代码12的相应部分是事务20。事务20还包括对STM原语的调用26,可由诸如图4和5中所示且在下文中更详细描述的编译器92之类的编译器添加,调用STM库14中的功能。如功能调用与返回28所指示的,STM库14的STM原语将结果返回给事务20。此外,每个事务20包括如由箭头32所示的从一个或多个对象30读取和/或写入一个或多个对象30的零个或多个存储器访问24,和/或一个或多个静态(未示出)。
STM代码12可在该组事务20中包括一个或多个嵌套的事务。嵌套的事务是由另一事务20,即父事务,调用的事务20。父事务和由父事务调用或源自父事务的调用的任何事务20构成事务嵌套。
STM库14包括STM原语和可由计算机系统结合运行时环境16执行的用以实现STM系统10的指令。STM库14的可由事务20调用的STM原语可包括实现STM库14中的开始、提交、中止、重试功能的管理原语。事务20调用开始功能以发起STM库14对事务20的管理。事务20调用提交功能以(如果成功的话)在存储器系统204中最终化事务20的结果。事务20调用中止功能以回滚或撤销存储器系统204中事务20的结果。事务20调用重试功能以重试事务20。在其他实施例中,STM库14执行的某些或全部功能可被包括在运行时环境16中或由诸如图4和5所示的编译器92之类的编译器添加到事务20中。
STM库14的可由事务20调用的STM原语还包括管理对由事务写和/或读的对象30的访问的存储器访问原语。存储器访问原语访问每个对象30的一组一个或多个事务锁39。在一个实施例中,STM系统10使用对象30的对象头来存储相应的事务锁39。每个事务锁39指示出相应的对象30或相应的对象30的一部分对于事务20进行的写和/或读来说是锁定的还是解锁的。在一个实施例中,当对象30对于写是锁定时,相应的事务锁39包括在写日志34W中定位对象30的条目的地址或其他引用。当对象30对于写是解锁时,相应的事务锁39包括对象30的版本号。
对于每个非数组对象30,存储器访问原语可访问对事务20进行的写和/或读锁定或解锁非数组对象30的单个事务锁39。对于每个数组对象30,存储器访问原语可访问一组一个或多个事务锁39,其中该组中的每个事务锁39对写和/或读锁定或解锁该数组对象30的相应部分。运行时环境16为每个对象30创建并管理事务锁39。
STM库14的存储器访问原语为当前正被执行的每个事务生成并管理一组一个或多个STM日志34。在一个实施例中,每一组STM日志34包括写日志34W和读日志34R。每个写日志34W包括用于每个对象30的由事务20写入的条目,其中每个条目包括相应的对象30的地址、来自相应的对象30的事务锁39的版本号、以及定位相应的对象30影子副本的地址或其他引用。每个读日志34R包括用于每个对象30的由事务20读取的条目,其中每个条目包括定位相应的对象30的事务锁39的引用。
STM库14执行下列算法或其变体以执行每个事务20。每次事务20由执行线程开始时,STM库14创建并初始化用于管理事务的变量。STM库14然后允许事务20执行,以及执行如下的对对象30的任何写和/或读存储器访问。
为了访问对象30进行写,事务20调用打开对象30进行写的存储器访问原语。如果锁可用,STM库14为事务20获得对应于对象30的事务锁39。如果对象30不可用(即对象30被另一事务20锁定),则STM库14检测当前事务20和该另一事务20之间的存储器访问冲突,并可发起事务执行的中止阶段以回滚并重新执行当前事务20。如果对象30被当前事务20锁定,则STM库14已经为事务20获得了对应于对象30的事务锁39。一旦获得了对应的事务锁39,STM库14使得每个写访问32要么对对象30本身作出,要么对相应的对象30的影子副本(未示出)作出,并使得对应于该写访问32的条目被存储在日志34W中。对于非数组对象30,如果使用影子副本的话,影子副本可被存储在日志34W中。对于数组对象30,如果使用共享影子副本的话,共享影子副本可与日志34W中分开存储。
为了访问对象30进行读,事务20调用打开对象30进行读的存储器访问原语。如果对象30对于乐观读访问不是写锁定的,则STM库14使得对应于该读访问的条目被存储到读日志34R中。如果对象30不是写锁定的,且对于悲观读访问不超过最大数量的悲观读,则STM库14在还没有获得对象30的事务锁39的情况下获得对象30的事务锁,递增该锁39的悲观读计数,并使得对应于该读访问的条目被存储在读日志34R中。如果对象30被另一事务20锁定,则STM库14检测当前事务20和该另一事务20之间的存储器访问冲突,并可发起事务执行的中止阶段以回滚并重新执行当前事务20。如果对象30被当前事务20锁定,则STM库14可使得对应于该读访问的条目被存储在读日志34R中,或在写日志34W中设置对应于该对象30的标志以指示出该对象30也曾被读。STM库14使得在已打开指定对象30供事务20进行写之前发生的读访问32从相应的对象30被直接作出。STM库14使得在已打开指定对象30供事务20进行写之后发生的每个读访问32从相应的对象30被直接地作出或从相应的影子副本被作出。
在事务20完成了执行或重新执行之后,STM库14执行事务执行的验证和提交阶段,以确保事务20进行的存储器访问不曾与任何其他事务20进行的存储器访问冲突。STM库14通过验证事务20的读访问来确认没有其他事务20曾在对应于事务20的读访问被执行之后写对应于该读访问的存储器位置,来执行验证阶段。如果STM库14在验证阶段检测到当前事务20和另一事务20之间的任何存储器访问冲突,则STM库14可发起事务执行的回滚阶段,以回滚并重新执行当前事务20。
STM库14通过更新由事务20用用于存储修改的影子副本修改了的任何对象30,释放任何事务锁39,和/或在由事务20修改了的任何对象30的事务锁39中存储更新的版本号,来执行提交阶段。
在成功执行了事务执行的验证和提交阶段之后,STM库14允许事务20完成并允许致使事务20执行的线程执行STM代码12中的另外的事务或非事务代码。
STM系统10实现轻量的基于键的动作框架。该框架包括由STM库14展示的一组统一的应用编程接口(API),该组统一的应用编程接口允许客户端(例如程序员和/或编译器)实现可由STM代码12中的事务20或事务嵌套使用特定键42来注册、查询和更新的动作40。每个动作40包括键42、状态信息44以及可被挂钩到事务执行的验证、提交、中止、和/或回滚阶段的一组一个或多个回调46。动作40用定制的控制逻辑扩展STM系统10的内建并发控制,支持STM系统10的事务嵌套语义,以及允许与STM系统10的与垃圾收集系统一起操作的实施例进行集成。STM系统10可使用该动作框架来用一致性和高效性解决一个或多个STM编程场景。
对于注册动作40的每个事务20,STM库14生成动作映射52,如由箭头54所指示的。每个动作映射52包括对由STM库14响应于来自相应的事务20的动作操作27而注册的动作40的引用。STM库14用相关联的键42来将每个动作40注册在事务20的相应动作映射52中,该键由事务20用动作操作27作为参数来提供。对于不对动作40提供键42的事务20(例如将不查询或更新动作40的事务20),STM库14可用全局共享键42来注册动作40,以模仿简单的回调添加和去除功能。每个动作40中的状态信息44和回调46可基于动作操作27的类型和/或事务20用动作操作27提供的一个或多个参数。动作操作27可由程序员或诸如图4和5所示的编译器92之类的编译器添加到事务20中。
STM库14使用键42来管理每个动作映射52中的动作40,而不是简单地将动作40在列表中排队。通过这样做,STM库14允许事务20在事务20的整个执行过程中查询和更新相应的动作40。相应地,状态信息44和回调46可由事务20修改。动作40所包含的键42、状态信息44以及回调46的组合可克服无状态的回调基础结构的局限,而这些局限不能解决某些STM编程情形。此外,对每个键42使用单个动作40可允许事务20通过避免为相同目的而添加多个回调调用来以增加的效率执行。
除了将按照实例的状态与事务20相关联,STM库14还可生成将实例标识符信息与设施(facility)标识符信息相组合的键42。通过这样做,STM库14允许多个动作40向同一个设施或跨不同的设施注册,并消除了使用对象地址作为用于不同目的(例如影子副本管理和监视锁管理)的键42的动作40之间的歧义。此外,STM库14防止一个设施访问由一不同设施维护的状态(即动作40)。结果,STM库14的动作框架可以安全的方式展示给用户。
图2是示出用于在STM系统10中查询、注册和更新动作40的方法的实施例的流程图。响应于框62中所指示的来自事务20的动作操作27,如果具有相关联的键42的动作40在动作映射52中没有被找到,则STM库14在事务20的动作映射52中用键42、状态信息44和回调46注册新动作40,如框64和66所指示的。如果在动作映射52中找到具有相关联键42的现有动作40,则STM库14可将现有动作40返回给事务20供查询,和/或基于事务20用动作操作27提供的一个或多个参数来更新动作40中的状态信息和回调46,如框64和68所指示的。
STM系统14在事务20的事务执行的每个阶段访问事务20的动作映射52,以标识具有与事务执行阶段相关联的回调46的动作40。图3是示出在事务执行阶段调用由动作40实现的回调46的方法的实施例的流程图。响应于到达如框72所指示的事务20的事务执行阶段,STM库14标识事务20的动作映射52中具有与该事务执行阶段相关联的回调46的每个动作40,如框74所指示的。如框76所指示的,对于动作映射52中的每个动作40,STM库14对该事务执行阶段调用回调46(如果有的话)。
STM库14的动作框架API提供了允许事务20挂钩到STM系统10中的三种类型的回调。回调包括事务阶段回调、嵌套集成回调以及资源管理和垃圾收集集成回调。如果希望特定的行为,每个动作40提供这些回调的定制实现。
在一个实施例中,事务阶段回调包括OnPrepareForCommit(在准备好提交时)、OnCommit(在提交时)以及OnRollback(在回滚时)。OnPrepareForCommit回调发生在事务20的验证阶段期间。在验证阶段期间,STM库14检测实现OnPrepareForCommit回调46的任何动作40,并调用任何这种回调46。OnPrepareForCommit回调46允许事务20参与确定事务20是否提交或回滚并重新执行的验证过程。OnCommit回调46在提交阶段期间发生。在提交阶段期间,STM库14检测实现OnCommit回调46的任何动作40,并调用任何这种回调46。当事务20中止或回滚以重新执行时,OnRollback回调46发生在回滚阶段期间。当事务20到达中止或回滚点时,STM库14检测实现OnRollback回调46的任何动作40,并调用任何这种回调46。在其他实施例中,事务阶段回调可包括与事务20的执行的不同阶段有关的其他回调46。
STM库14的动作框架包括对动作40的嵌套语义的内建支持。事务20可用动作操作27提供SearchParent(搜索父)参数,以指定当前动作40是与当前活动的最内嵌套的事务20相关联还是与整个事务嵌套相关联。与事务嵌套分层结构的紧密集成可向实现动作40的事务20提供更大的灵活性和可表达性。相应地,事务20可为它们的动作40选择要么平坦要么嵌套的语义。
在一个实施例中,嵌套集成回调包括DeferToParentOnCommit(在提交时推迟到父)、DeferToParentOnAbort(在中止时推迟到父)、MergeToParent(合并到父)以及SurviveOnRollback(回滚时幸存)回调46。DeferToParentOnCommit和DeferToParentOnAbort回调46允许嵌套的事务20指定动作40是在提交时被推迟到父事务20(DeferToParentOnCommit and DeferToParentOnAbort)还是中止(DeferToParentOnAbort)嵌套的事务20。对于被推迟到父事务20的动作40,STM库14在父事务20的动作映射52中注册或更新相应的动作40。MergeToParent回调允许嵌套的事务20指定如何将动作40的状态合并到父事务20的动作映射52中具有相同键42的动作40(如果有的话)中。SurviveOnRollback回调46使得在事务20回滚时动作40被保持在动作映射52中,而不是被删除。在其他实施例中,嵌套集成回调可包括与嵌套的事务20有关的其他回调46。
对于STM系统10的与垃圾收集驱动的语言(如C#或Java)一起工作的实施例来说,垃圾收集与STM库14的集成确保了正确性。如果STM系统10保持对由垃圾收集器管理的存储器位置的引用,则STM系统10将该引用报告给垃圾收集器,使得该应用可在垃圾收集期间被正确地更新。由于动作40可保持受管理的引用,STM库14提供了垃圾收集挂钩以使得动作40向垃圾收集器报告任何引用。
在一个实施例中,资源管理和垃圾收集集成回调包括Release(释放)和OnGCScan(在垃圾收集扫描时)回调46。Release回调46发生在提交阶段期间,其中STM库14允许事务20释放资源。OnGCScan回调46发生在垃圾收集期间,以允许STM库14向垃圾收集器报告动作40中的引用。在其他实施例中,资源管理和垃圾收集集成回调可包括与资源管理和垃圾收集有关的其他回调46。
STM库14使用该动作框架来解决一个或多个STM编程情形,例如支持在事务20中对线程本地存储器的使用、在事物锁和传统锁之间提供互操作、在事务20中支持静态类初始化器和模块化初始化器、允许在事物20内的软件锁省略(software lock elision)、以及提供定制的抽象并发控制。
根据定义,线程本地存储器(即本地变量、线程静态字段等)仅将由一拥有线程(owning thread)访问。相应地,可不使用STM库14的标准STM存储器并发控制逻辑(例如日志34)来管理线程本地存储器。然而,为了支持故障原子性,STM库14备份事务20使用的任何线程本地存储器的初始值,使得如果事务20不成功(即回滚或被中止),则这些初始值可被恢复。STM库14通过与byref分析组合来处理跨方法边界的指针到本地(pointer-to-locals)(包括结构类型)。
STM库14可被配置成使用该动作框架来处理事务20进行的线程本地存储器访问,来实现存储器撤销动作40。对于每个线程本地存储器区域,如果该区域可被修改,则存储器撤销动作40将该线程本地存储器区域的初始值进行高速缓存,在事务20被回滚或中止的情况下恢复初始值。存储器撤销动作40使用线程本地存储器区域的基地址作为键42。通过这样做,STM库14可每线程本地存储器区域注册单个存储器撤销动作40,并且如果事务20不成功,则每线程本地存储器区域执行单个撤销动作。结果,STM库14可处理线程本地存储器访问而无需为相同的线程本地存储器区域注册多个动作40。STM库14用每事务的范围来实现存储器撤销动作40,且不将存储器撤销动作40合并到父事务20中。每个事务20在事务20开始前为被访问的本地存储器区域注册一组存储器撤销动作。这允许在嵌套的事务20回滚或中止时线程本地存储器的部分回滚。
STM库14还可被配置成使用该动作框架在事务锁和传统锁之间提供互操作。通过这样做,STM库14可在STM系统10与STM代码12中的任何非事务代码之间提供增加的兼容性和可组成性。为了在STM代码12中的事务20和非事务代码之间提供隔离,STM库14注册锁互操作动作40,以使得事务20保持事务20所取得的每个锁39,直到包括该事务20的整个事务嵌套成功提交为止。锁互操作动作40使得锁39被保持,即使在事务20或事务嵌套内有解锁操作。由于STM库14使用键42来查询每个锁互操作动作40且锁释放被推迟直到整个事务嵌套成功提交为止,锁互操作动作40允许在事务嵌套中为每个锁39执行单个物理锁操作。STM库14更新锁互操作动作40以维护锁定和解锁递归计数,以允许在事务20中止或事务嵌套提交时锁操作被补偿。STM库14用每事务的范围来实现锁互操作动作40,但在中止或提交时将锁互操作动作40合并到任何父事务20。
当具有一个或多个锁互操作动作40的事务20提交时,STM库14基于递归计数来执行推迟的锁操作,以正确地设置锁39的状态。如果具有一个或多个锁互操作动作40的事务20中止,则STM库14通过对每个获得的锁执行相应的锁释放操作来补偿任何获得的锁。由于锁释放被推迟直到事务嵌套提交为止,当事务20中止时,STM库14忽略任何锁释放。
对锁互操作动作40的使用的附加细节可在同时提交的题为“COMPOSITION OF LOCKS IN SOFTWARE TRANSACTIONAL MEMORY(软件事务存储器中的锁的组成)”的美国专利申请号________、代理人档案号327945.01中找到,该申请通过引用被整体上结合于此。
此外,STM库14可被配置成使用该动作框架在事务20中支持静态类初始化器和模块化初始化器。在诸如微软.NET或Java虚拟机之类的系统中,仅允许一个线程执行某一个类的静态类初始化或某一个模块的模块化初始化。为了避免这种初始化中的潜在的数据竞争,每当在事务20中遇到初始化器时,STM库14注册初始化器动作40,并立即回滚并重新执行事务20。初始化器动作40实现OnRollback(在回滚时)回调46,该回调是在STM库14回滚事务时被调用的。初始化器动作40的OnRollback回调46在事务被重新执行之前执行预期的初始化。初始化器动作40具有事务嵌套范围,即整个事务嵌套仅具有每初始化器单个初始化器动作40。
STM库14可进一步使用该动作框架来允许事务20内的软件锁省略(elision)。软件锁省略是一种优化技术,它依赖于大多数时间锁操作(如对象30上的读锁和写锁)上都不会发生争用的假设。对于事务20的每个锁操作,STM库14注册锁省略动作40,该锁省略动作捕捉对象30的锁39的当前状态,并推测性地执行事务20而不用实际锁定对象30。在验证阶段期间,STM库14对每个锁省略动作40调用OnPrepareForCommit回调46,以确定相应的锁39是否已改变。如果任何锁39已改变,则STM库14使得事务20回滚并重新执行。STM库14用每事务的范围来实现锁省略动作40,但在中止或提交时将锁省略动作40合并到任何父事务20。
STM库14还可使用该动作框架来向程序员提供定制的抽象并发控制。有时,STM库14检测到的低级读和写的冲突可能是假冲突。例如,在基于链的散列表中,插入操作触及链表中的桶头部和条目一直到散列表中的合适位置。该插入操作将与更新桶或任一条目的任何事务20冲突,即使语义上不相交的条目实际上正被访问。为了避免这种假冲突,程序员可放弃STM库14提供的低级存储器并发控制(例如通过抑制并发控制或通过使用开放嵌套),以及使用该动作框架提供的高级抽象并发控制来管理它们的数据结构。
STM库14实现一个或多个定制的控制动作40来允许程序员向定制的并发控制算法提供回调信息46。定制的控制动作40可使用OnPrepareForCommit回调46来影响关于事务20是否可被提交的判定,可使用OnCommit回调46来驱逐事务20中被拖延的任何推迟的效果,以及可使用OnRollback回调46来提供任何补偿动作。如果希望嵌套语义,则可使用DeferToParentOnCommit、DeferToParentOnAbort、MergeToParent和SurviveOnRollback回调信息46来表达所希望的行为。
图4是示出具有被配置成编译具有STM事务20的源代码94的编译器92的编译系统90的实施例的框图。
编译器系统90表示如图5中示出且在下文中更详细地描述的计算机系统100等计算机系统中的操作的编译模式,其中该计算机系统正在执行将代码94编译成STM代码12的指令。在一个实施例中,编译器系统90包括结合由诸如图5中所示且在下文中更详细描述的OS 122之类的操作系统(OS)所执行的运行时环境、STM库14以及任何附加的运行库(未示出)在计算机系统中操作的即时(JIT)编译器系统。在另一实施例中,编译器系统90包括产生STM代码12供在同一或不同计算机系统上执行的独立编译器系统。
代码94包括一组一个或多个STM事务20。每个STM事务20包括原子块命名符22,向编译器92指示出代码94的相应部分是STM事务20。每个STM事务20可包括从对象30进行读和/或对对象30进行写的零个或多个存储器访问24。每个STM事务20还可包括生成、查询或更新动作40的零个或多个动作操作27(未示出)。代码94可以是用诸如Java或C#之类的语言或诸如公共中间语言(CIL)、微软中间语言(MSIL)或Java字节码之类的任何合适的字节码来编写的任何合适的源代码。
编译器92访问或以其他方式接收具有包括存储器访问24的事务20的代码94。编译器92标识存储器访问24并将代码94编译成对每个存储器访问24具有STM库14中的STM原语的调用26的STM代码12。编译器92还可标识可在其中使用动作40的实例,并将代码94编译成对其中可使用动作40的每个实例具有动作操作27的STM代码12。编译器92执行从代码94的指令集到可由指定的计算机系统执行的一组指令的任何所希望的转换,并将该组指令包括在STM代码12中。
图5是示出被配置成实现STM系统10的计算机系统100的实施例的框图。
计算机系统100包括一个或多个处理器封装102、存储器系统104、零个或更多输入/输出设备106、零个或更多显示设备108、零个或更多外围设备110、和零个或更多网络设备112。处理器封装102、存储器系统104、输入/输出设备106、显示设备108、外围设备110和网络设备112使用包括任何合适的类型、数量和配置的控制器、总线、接口、和/或其他有线或无线连接的一组互连114来进行通信。
计算机系统100表示出于通用或专用目的而配置的任何合适的处理设备。计算机系统100的示例包括服务器、个人计算机、膝上型计算机、图形输入板计算机、个人数字助理(PDA)、移动电话、和音频/视频设备。计算机系统100的组件(即,处理器封装102、存储器系统104、输入/输出设备106、显示设备108、外围设备110、网络设备112和互连114)可包含在公共外壳(未示出)中或任何合适数量的独立外壳(未示出)中。
处理器封装102各自可包括一个或多个执行核。每个执行核被配置成访问并执行存储在存储器系统104中的指令。指令可包括基本输入输出系统(BIOS)或固件(未示出)、操作系统(OS)122、STM代码12、STM库14、运行时环境16、编译器92以及代码94。每一执行核可结合或响应于从输入/输出设备106、显示设备108、外围设备110、和/或网络设备112接收到的信息来执行指令。
计算机系统100引导并执行OS 122。OS 122包括可由执行核执行来管理计算机系统100的组件并提供允许程序访问并使用这些组件的一组功能的指令。OS 122执行运行时环境16以允许STM代码12和STM库被执行。在一个实施例中,OS 122是Windows操作系统。在其他实施例中,OS 122是适于和计算机系统100一起使用的另一操作系统。
计算机系统100执行编译器92来从代码94生成STM代码12。编译器92访问或以其他方式接收代码94,并将代码94转换成STM代码12供计算机系统100执行。编译器92执行从代码94的指令集到可由计算机系统100执行的一组指令的任何所希望的转换,并将该组指令包括在STM代码12中。编译器92还从事务命名符22标识代码94中的块20,并修改STM代码12中的块20以包括对STM原语26的调用。
在一个实施例中,编译器92包括结合OS 122、运行时环境16以及STM库14在计算机系统100中操作的即时(JIT)编译器。在另一实施例中,编译器92包括产生STM代码12供在计算机系统100或另一计算机系统(未示出)上执行的独立编译器。
计算机系统100执行运行时环境16和STM库14来允许STM代码12以及其中的事务20如上所述地在计算机系统100中被执行。
存储器系统104包括被配置成存储指令和数据的任何合适的类型、数量和配置的易失性或非易失性存储设备。存储器系统104的存储设备表示存储包括STM代码12、STM库14、运行时环境16、OS 122、编译器92以及代码94的计算机可执行指令的计算机可读存储介质。指令可由计算机系统100执行来执行如此处所述的STM代码12、STM库14、运行时环境16、OS 122、编译器92以及代码94的功能和方法。存储器系统104存储从处理器封装102、输入/输出设备106、显示设备108、外围设备110和网络设备112接收的指令和数据。存储器系统104将存储的指令和数据提供给处理器封装102、输入/输出设备106、显示设备108、外围设备110和网络设备112。存储器系统104中的存储设备的示例包括硬盘驱动器、随机存取存储器(RAM)、只读存储器(ROM)、闪存驱动器和卡、以及诸如磁盘和CD和DVD之类的光盘。
输入/输出设备106包括被配置成将指令或数据从用户输入到计算机系统100并将指令或数据从计算机系统100输出到用户的任何合适的类型、数量和配置的输入/输出设备。输入/输出设备106的示例包括键盘、鼠标、触摸垫、触摸屏、按钮、拨盘、旋钮和开关。
显示设备108包括被配置成向计算机系统100的用户输出文本和/或图形信息的任何合适的类型、数量和配置的显示设备。显示设备108的示例包括监视器、显示屏和投影仪。
外围设备110包括被配置成用计算机系统100中的一个或多个其他组件来操作以执行通用或专用处理功能的任何合适的类型、数量和配置的外围设备。
网络设备112包括被配置成允许计算机系统100通过一个或多个网络(未示出)进行通信的任何合适的类型、数量和配置的网络设备。网络设备112可根据任何合适的网络协议和/或配置来操作以允许计算机系统100将信息发送给网络或者从网络接收信息。
尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换和/或等价实现来替换此处示出并描述的具体实施例而不背离本发明的范围。本申请旨在覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等效方案来限制。
Claims (10)
1.一种由软件事务存储器(STM)系统(10)在计算机系统(100)中执行的方法,所述方法包括:
从STM代码(12)中的事务(20)接收具有键(42)的第一动作操作;以及
用所述键注册对应于所述第一动作操作的动作(40),所述键允许所述事务随后执行查询和更新所述动作中的至少一个,所述动作实现回调(46)。
2.如权利要求1所述的方法,还包括:
响应于来自所述事务的具有所述键的第二动作操作,执行查询和更新所述动作中的至少一个。
3.如权利要求1所述的方法,还包括:
响应于到达对应于所述事务的事务执行阶段,调用所述动作中的回调。
4.如权利要求4所述的方法,其特征在于,所述事务执行阶段是验证阶段、提交阶段和回滚阶段中的一个。
5.如权利要求1所述的方法,还包括:
响应于来自所述事务的所述第一动作操作,生成所述事务的动作映射。
6.如权利要求1所述的方法,还包括:
将所述动作合并到所述事务的父事务的动作映射中。
7.如权利要求1所述的方法,还包括:
响应于垃圾收集,调用所述动作中的回调。
8.一种存储计算机可执行指令的计算机可读存储介质(104),所述计算机可执行指令在由计算机系统(100)执行时执行一种方法,所述方法包括:
从STM代码(12)中的第一事务(20)接收具有键(42)的第一动作操作;
如果在接收到对应于具有所述键的所述第一动作操作的第一动作(40)时所述第一动作还未被注册,则注册所述第一动作,所述第一动作实现回调(46);以及
如果在接收到所述第一动作操作时所述第一动作已被注册,则响应于所述第一动作操作执行查询和更新所述第一动作中的至少一个。
9.如权利要求8所述的计算机可读存储介质,其特征在于,所述方法还包括:
使用所述键确定在接收到所述第一动作操作时所述第一动作是否已被注册。
10.如权利要求9所述的计算机可读存储介质,其特征在于,所述方法还包括:
响应于到达对应于所述事务的事务执行阶段,调用所述动作中的回调。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/819,494 | 2010-06-21 | ||
US12/819,494 US9411634B2 (en) | 2010-06-21 | 2010-06-21 | Action framework in software transactional memory |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102289387A true CN102289387A (zh) | 2011-12-21 |
CN102289387B CN102289387B (zh) | 2019-09-03 |
Family
ID=45329706
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110178980.0A Active CN102289387B (zh) | 2010-06-21 | 2011-06-20 | 软件事务存储器中的动作框架 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9411634B2 (zh) |
CN (1) | CN102289387B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8433865B2 (en) | 2009-12-11 | 2013-04-30 | Microsoft Corporation | Consistency without ordering dependency |
US8793440B2 (en) | 2010-06-17 | 2014-07-29 | Microsoft Corporation | Error detection for files |
US8719515B2 (en) | 2010-06-21 | 2014-05-06 | Microsoft Corporation | Composition of locks in software transactional memory |
US9411634B2 (en) * | 2010-06-21 | 2016-08-09 | Microsoft Technology Licensing, Llc | Action framework in software transactional memory |
US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
GB2515047B (en) * | 2013-06-12 | 2021-02-10 | Advanced Risc Mach Ltd | Security protection of software libraries in a data processing apparatus |
GB2517932B (en) | 2013-09-04 | 2021-05-05 | 1Spatial Group Ltd | Modification and validation of spatial data |
US9824039B2 (en) | 2013-09-09 | 2017-11-21 | International Business Machines Corporation | Signal interrupts in a transactional memory system |
US10635504B2 (en) | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
US9715416B2 (en) * | 2015-06-03 | 2017-07-25 | Intel Corporation | Adaptive queued locking for control of speculative execution |
US10585873B2 (en) * | 2017-05-08 | 2020-03-10 | Sap Se | Atomic processing of compound database transactions that modify a metadata entity |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1139489A (zh) * | 1993-11-02 | 1997-01-01 | 帕拉科姆有限公司 | 加速计算机数据库事务处理的装置 |
US6360228B1 (en) * | 1999-06-02 | 2002-03-19 | Oracle Corporation | Transactional framework for executing statements involving non-native code |
CN101542437A (zh) * | 2005-12-07 | 2009-09-23 | 微软公司 | 软件事务性存储器操作的优化 |
US20100058338A1 (en) * | 2008-08-29 | 2010-03-04 | Red Hat, Inc. | Callbacks in virtual machines |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5237673A (en) * | 1991-03-20 | 1993-08-17 | Digital Equipment Corporation | Memory management method for coupled memory multiprocessor systems |
US6240413B1 (en) | 1997-12-22 | 2001-05-29 | Sun Microsystems, Inc. | Fine-grained consistency mechanism for optimistic concurrency control using lock groups |
US7206805B1 (en) * | 1999-09-09 | 2007-04-17 | Oracle International Corporation | Asynchronous transcription object management system |
US7120762B2 (en) | 2001-10-19 | 2006-10-10 | Wisconsin Alumni Research Foundation | Concurrent execution of critical sections by eliding ownership of locks |
US7496574B2 (en) | 2003-05-01 | 2009-02-24 | International Business Machines Corporation | Managing locks and transactions |
US7289992B2 (en) | 2003-05-01 | 2007-10-30 | International Business Machines Corporation | Method, system, and program for lock and transaction management |
US7587615B2 (en) | 2003-09-12 | 2009-09-08 | International Business Machines Corporation | Utilizing hardware transactional approach to execute code after initially utilizing software locking by employing pseudo-transactions |
US20050086446A1 (en) * | 2003-10-04 | 2005-04-21 | Mckenney Paul E. | Utilizing software locking approach to execute code upon failure of hardware transactional approach |
US7856537B2 (en) | 2004-09-30 | 2010-12-21 | Intel Corporation | Hybrid hardware and software implementation of transactional memory access |
US7636829B2 (en) | 2006-05-02 | 2009-12-22 | Intel Corporation | System and method for allocating and deallocating memory within transactional code |
US7478210B2 (en) * | 2006-06-09 | 2009-01-13 | Intel Corporation | Memory reclamation with optimistic concurrency |
US7434010B2 (en) | 2006-08-04 | 2008-10-07 | Microsoft Corporation | Combined pessimistic and optimisitic concurrency control |
US8060482B2 (en) * | 2006-12-28 | 2011-11-15 | Intel Corporation | Efficient and consistent software transactional memory |
US7899999B2 (en) | 2007-06-27 | 2011-03-01 | Microsoft Corporation | Handling falsely doomed parents of nested transactions |
US7644106B2 (en) | 2007-07-30 | 2010-01-05 | Oracle International Corporation | Avoiding lock contention by using a wait for completion mechanism |
US7840530B2 (en) | 2007-09-18 | 2010-11-23 | Microsoft Corporation | Parallel nested transactions in transactional memory |
US20090125519A1 (en) * | 2007-11-13 | 2009-05-14 | Intel Corporation | Device, system, and method for regulating software lock elision mechanisms |
WO2009076654A1 (en) * | 2007-12-12 | 2009-06-18 | University Of Washington | Deterministic multiprocessing |
US20090187599A1 (en) | 2008-01-23 | 2009-07-23 | Bruso Kelsey L | Generating identity values in a multi-host database management system |
US7899997B2 (en) | 2008-03-12 | 2011-03-01 | International Business Machines Corporation | Systems and methods for implementing key-based transactional memory conflict detection |
US8245244B2 (en) | 2008-08-26 | 2012-08-14 | Intel Corporation | Device, system, and method of executing a call to a routine within a transaction |
CN101510162B (zh) | 2009-03-26 | 2011-11-02 | 浙江大学 | 一种基于延时策略的软件事务内存的实现方法 |
US8229907B2 (en) * | 2009-06-30 | 2012-07-24 | Microsoft Corporation | Hardware accelerated transactional memory system with open nested transactions |
US8516202B2 (en) | 2009-11-16 | 2013-08-20 | International Business Machines Corporation | Hybrid transactional memory system (HybridTM) and method |
US8402227B2 (en) | 2010-03-31 | 2013-03-19 | Oracle International Corporation | System and method for committing results of a software transaction using a hardware transaction |
US8719515B2 (en) | 2010-06-21 | 2014-05-06 | Microsoft Corporation | Composition of locks in software transactional memory |
US9411634B2 (en) * | 2010-06-21 | 2016-08-09 | Microsoft Technology Licensing, Llc | Action framework in software transactional memory |
US20120158684A1 (en) | 2010-12-21 | 2012-06-21 | Lsi Corporation | Performance enhanced synchronization mechanism with intensity-oriented reader api |
-
2010
- 2010-06-21 US US12/819,494 patent/US9411634B2/en active Active
-
2011
- 2011-06-20 CN CN201110178980.0A patent/CN102289387B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1139489A (zh) * | 1993-11-02 | 1997-01-01 | 帕拉科姆有限公司 | 加速计算机数据库事务处理的装置 |
US6360228B1 (en) * | 1999-06-02 | 2002-03-19 | Oracle Corporation | Transactional framework for executing statements involving non-native code |
CN101542437A (zh) * | 2005-12-07 | 2009-09-23 | 微软公司 | 软件事务性存储器操作的优化 |
US20100058338A1 (en) * | 2008-08-29 | 2010-03-04 | Red Hat, Inc. | Callbacks in virtual machines |
Also Published As
Publication number | Publication date |
---|---|
CN102289387B (zh) | 2019-09-03 |
US20110314230A1 (en) | 2011-12-22 |
US9411634B2 (en) | 2016-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102289387A (zh) | 软件事务存储器中的动作框架 | |
Korland et al. | Noninvasive concurrency with Java STM | |
Burckhardt et al. | Concurrent programming with revisions and isolation types | |
CN102289393A (zh) | 软件事务存储器中的锁的组成 | |
CN101542437B (zh) | 软件事务性存储器操作的优化 | |
Biliris et al. | ASSET: A system for supporting extended transactions | |
Adl-Tabatabai et al. | Unlocking concurrency: Multicore programming with transactional memory | |
McDonald et al. | Architectural semantics for practical transactional memory | |
US8417897B2 (en) | System and method for providing locale-based optimizations in a transactional memory | |
CN101889266B (zh) | 事务存储器中的并行嵌套事务 | |
Turcu et al. | Hyflow2: A high performance distributed transactional memory framework in scala | |
US20080098374A1 (en) | Method and apparatus for performing dynamic optimization for software transactional memory | |
JP2013514569A (ja) | 静的に型付けされたクラスベースのオブジェクト指向ソフトウェアのノンブロッキング動的更新の方法、コンピュータ・プログラム製品、およびシステム | |
CN101689123A (zh) | 利用事务存储器硬件来加速虚拟化和仿真 | |
CN101689154A (zh) | 利用事务存储器硬件来加速虚拟化和仿真 | |
US8688921B2 (en) | STM with multiple global version counters | |
US8769514B2 (en) | Detecting race conditions with a software transactional memory system | |
Meier et al. | Virtual machine design for parallel dynamic programming languages | |
US9239803B2 (en) | Array object concurrency in STM | |
US8490115B2 (en) | Ambient state for asynchronous methods | |
Milovanović et al. | Transactional memory and OpenMP | |
McDonald et al. | Transactional memory: The hardware-software interface | |
Kalin et al. | Clojure for number crunching on multicore machines | |
CN101689136A (zh) | 事务存储器的对象模型 | |
Abadi et al. | Dynamic separation for transactional memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150729 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150729 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |