[发明专利]事务存储器中的并行嵌套事务有效
申请号: | 201210399252.7 | 申请日: | 2008-09-16 |
公开(公告)号: | CN102929702A | 公开(公告)日: | 2013-02-13 |
发明(设计)人: | M·M·马格鲁德;D·德特勒夫;J·J·达菲;G·格雷费;V·K·格罗弗 | 申请(专利权)人: | 微软公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46;G06F17/30 |
代理公司: | 上海专利商标事务所有限公司 31100 | 代理人: | 顾嘉运 |
地址: | 美国华*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 事务 存储器 中的 并行 嵌套 | ||
本申请是申请日:2008.09.16,申请号为200880107300.2(国际申请号为PCT//US2008/076563),名称为“事务存储器中的并行嵌套事务”的申请的分案申请。
背景
软件事务存储器(STM)是类似于数据库事务的、用于在并发计算中控制对共享存储器的访问的并发控制机制。事务存储器的上下文中的事务是对共享存储器执行一系列读取和写入的一段代码。换言之,事务访问一个或多个对象中的数据。事务存储器的上下文中的对象是作为一个实体来锁定的一组连接的存储单元。该上下文中的对象也可能是静态变量,或一组这样的变量,或者该对象可能是一组高速缓存线。
STM用作传统锁定机制的替换。STM允许更简单地编写并发程序。事务指定应当如同其隔离执行一样地执行的代码序列。这一隔离错觉可以通过对象的细粒度锁定,以及通过以在发现事务与某一其它事务相冲突的情况下允许回退该事务的副作用的模式执行来实现。如果对于数据访问所生成的代码被修改成包括对这些锁定和回退机制的支持,则可以说该访问被“事务化”。
事务可以进行嵌套,并且可被分类为开放或封闭嵌套。如果一线程当前正在执行一事务并且到达一新原子块的开头,则该原子块作为当前执行的父事务的封闭嵌套子事务来执行。该嵌套事务与封闭事务在同一隔离边界内执行,并且就像封闭事务中所访问的其他存储器那样,嵌套事务的影响将只在该封闭事务提交时变得可见。换言之,有效地挂起父事务,并且允许封闭嵌套事务运行至在继续父事务中的处理之前完成。在嵌套事务回退时,其临时影响被撤消并且父事务的状态恢复到该嵌套事务开始的点处。
给定线程正在执行的“最外面的”事务是不嵌套的;称之为顶层事务。该顶层事务必须原子地执行,因此嵌套事务变成其一部分。如果某些抽象A和B各自具有即使在由并发线程使用时它们也想要维护的内部表示不变量,则可能引发嵌套,并且这些抽象由此在实现其方法时使用原子块以确保并发访问不违反这些不变量。现在假设某一更高级的抽象C在其实现时使用A和B的实例,并且具有使这些A和B实例相关的某些不变量。C的方法可能使用事务来确保不违反该不变量。如果在C的事务内部使用A和B方法,则A和B方法中的事务将进行嵌套(在这种情况下)。
现有事务存储器系统不允许将在一个事务的隔离边界内执行的工作分布在多个并发执行线程之间。在现有系统中,事务只可具有一个嵌套子事务。这些系统的语义简单地不允许事务内的这样的并行性,并且一次执行不止一个嵌套事务的尝试将导致嵌套事务日志条目在父事务的日志中无序混合和其他错误,以及用于提供隔离错觉的基本的底层细粒度锁定协议的崩溃。
概述
公开了用于支持事务存储器系统中的并行嵌套事务的各种技术和方法。为单个父事务创建多个封闭嵌套事务,并且将这些封闭嵌套事务作为并行嵌套事务来并发执行。使用各种技术来确保对父事务之外的其他事务隐藏并行嵌套事务的影响直到该父事务提交。
在一个实现中,就并行嵌套事务使用版本化写锁。当事务存储器字从写锁变为版本化写锁时,在全局版本化写锁映射中形成一条目以存储指向该版本化写锁所替换的写日志条目的指针。当在事务处理期间遇到该版本化写锁时,咨询全局版本化写锁映射以便将该版本化写锁转换成指向写日志条目的指针。
在另一实现中,对于并行事务支持释放重复写锁以便回退。在并行嵌套事务的回退处理期间,遇到表示写锁的第一写日志条目。如果该写锁被确定为是重复的,则获取全局锁并使用该全局锁来同步对全局版本化写锁映射的访问。
在又一实现中,对并行嵌套事务支持乐观读取确认。在乐观读取确认期间,如果版本化写锁指示来自兄弟并行嵌套事务的冲突,则咨询信息以确定是否应破坏并行嵌套事务。在一个实现中,该信息被包含在版本化写锁和全局版本化写锁映射中。
在又一其他实现中,对并行嵌套事务支持写锁获取。在试图获取并行嵌套事务的写锁时,读取并分析事务存储器字以确定是否能够获取该写锁。如果事务存储器字指示版本化写锁,则访问全局版本化写锁映射以取回指向第一写日志条目的写日志条目指针。
在又一实现中,对并行嵌套事务支持悲观读取。为并行嵌套事务创建悲观重复检测数据结构。将对应于并行嵌套事务中的每一悲观读取的条目形成到该数据结构中。在提交并行嵌套事务时,将新的悲观读锁传递给直接父事务,并且在兄弟事务之间同步的情况下将一条目形成到直接父事务的单独的悲观重复检测数据结构中。该悲观重复检测数据结构还可用于从悲观读取到写锁的升级。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软公司,未经微软公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210399252.7/2.html,转载请声明来源钻瓜专利网。