一种基于延时策略的软件事务内存的实现方法

文档序号:6575768阅读:174来源:国知局
专利名称:一种基于延时策略的软件事务内存的实现方法
技术领域
本发明涉及基于多处理器系统软件事物内存的实现技术,特别是涉及一种基于延时策略 的软件事务内存的实现方法。
背景技术
在并行计算的多线程编程模型中,不可避免地会引入如何保证共享数据同步的问题。当 前,锁机制是实现对共享数据互斥访问较常用的方法。使用锁机制的过程一般是这样的程 序员首先正确地识别出算法中的并行性,然后编写代码将独立的任务分配到并行机上,通常 是一个处理器上运行一个线程。对于必须要顺序执行的任务,比如对共享资源的更新操作, 程序员必须使用同步机制来协调线程间的执行顺序。这时,程序员就使用互斥锁来创建临界 区,保证在某个时刻只允许一个线程进入访问共享资源。为了保证始终能互斥访问共享数据 结构,程序员必须使用锁来协调临界区内的数据访问。但是锁会带来很多额外的问题,使程 序设计变得复杂而费时。主要的问题有死锁、护航、优先级反转。
由于这些问题的存在,基于锁的并行编程对于一般的程序员来说并不是一个很好的选 择,特别是随着多核时代的到来。
同时,研究人员也在不断寻找代替锁策略的更先进、更高效的方案。其中最有前途、最 热门的当属事务内存。在事务内存模型中,程序员将多条访问共享内存的语句组成一个事务, 同基于锁的临界区一样,事务内对数据的更新从其他事务看来是瞬间发生的。但是,跟基于 锁的代码不同的是,事务内存的原子性不是通过互斥来保证的,而是通过乐观的并行执行并 在发生非线性操作时执行回滚操作的方式来保证原子性。因此,事务内存只在事务发生冲突 时使用相应的冲突仲裁策略来同步并行操作。目前,事务内存可以从硬件和软件加以实现。
硬件事务内存虽然提供了良好的性能,但是却缺乏一般性。而软件事务内存通过软件的 方式实现事务内存机制,不需要额外的硬件支持,所有的机制全是通过软件实现的。软件事 务内存提供了更好的适应性和普遍性。软件事务内存可以很容易地适用于不同的任务量。同 时,软件事务内存能在增加复杂度的情况下提供对无界事务的支持,因为,软件不会受到数 据cache大小和其他片上资源的限制。

发明内容
本发明的目的在于克服现有技术中的不足,提供一种基于延时策略的软件事务内存的 实现方法。
本发明解决其技术问题采用的技术方案如下-
1) 事务创建
软件事务的执行过程包括创建事务、进行读写操作、检测冲突、等待提交和提交; 本方法为软件事务提供了四个状态Active, Aborted, Committing和Committed,分
别表示事务正在运行,事务已经终止,软件事务已经完成对对象的操作等待提交和事务己经
提交成功;
在程序执行过程中碰到需要对一个对象进行读写操作时事务被创建,事务是一串连续的 对同一个对象进行操作的指令集合;在事务Si中,用Si表示创建事务i时的系统时间,作 为事务i的开始时间;用flag表示事务i是否有读写操作,如果有,则flag为真,如果没 有,则flag为假;
2) 事务冲突产生
在事务进行读写操作时,有两种情况会导致软件事务间的冲突 a.—事务进行读操作,在获取数据的过程中,发现有其他事务己经在写该数据; b.—事务进行写操作,在获取数据的过程中,发现有其他事务已经在读或写该数据;
3) 事务冲突延时仲裁
在事务i和j发生冲突时,采用延迟策略进行仲裁,仲裁方式如下
a. 当S"Sj或者Si :Sj时,延迟策略就将j事务终止;
b. 当Si〉S」时,延迟策略就让事务i等待一定的时间,在指定的时间T过后,去读取 事务j的状态,如果事务j的状态是Committed,表明事务j已经提交了,这时冲突在没有 中止任何事务的情况下得到了解决;如果事务j的状态是Active,则将事务j的标记字段 flag设置为False,事务再等待相同的时间T,如果在这段时间内,事务j进行了读写操作, 则将事务j的flag标记字段设置为True,在T时间过后,如果事务j的状态仍然为Active 而且flag仍然为False,说明这段时间内事务j没有读写操作,这样的话,延迟策略将事 务j终止;否则,事务i自己终止;
4) 事务提交或者终止
事务i和j的冲突经过延迟策略仲裁以后,事务i和j中将有一个事务被终止,另外一 个事务继续执行,具体情况分为两种,分别如下-
a. 事务i终止,则把事务i的状态置为aborted;
b. 事务j终止,事务i继续执行;如果事务i又和另外一个事务k冲突,则再次进行事务冲突延时仲裁;
如果事务i读写操作已经完成,则把事务i的状态置为committing,等待提交; 本发明与背景技术相比,具有的有益的效果是-
本发明采用延时策略来仲裁事务间发生冲突时的情况。这样的冲突仲裁策略简单高效, 有效地缓解了由于仲裁策略不当而造成的效率低下,提高了软件事物内存系统的性能。


图1是软件事务的执行过程示意图; 图2是软件事务的状态转化示意图; 图3是冲突事务的实例示意图4是当Si 〈Sj或者Si zSj时延时策略的示意图; 图5是当Si 〉Sj时延时策略的示意图。
具体实施例方式
在实施基于延时策略的软件事务内存的实现方法时,具体方式如下
1) 事务创建
软件事务的执行过程包括创建事务、进行读写操作、检测冲突、等待提交和提交,整 个过程如图l所示;
本方法为软件事务提供了四个状态Active, Aborted, Committing和Committed,分 别表示事务正在运行,事务已经终止,软件事务己经完成对对象的操作等待提交和事务已经 提交成功,如图2所示;
在程序执行过程中碰到需要对一个对象进行读写操作时事务被创建,事务是一串连续的 对同一个对象进行操作的指令集合;在事务i中,用j表示创建事务i时的系统时间,作为 事务i的开始时间;用flag表示事务i是否有读写操作,如果有,则flag为真,如果没有, 则flag为假;
以Java程序为例,在对链表List进行操作时产生两个事务,事务1和事务2(如图3 所示)。事务2先于事务1创建,即S1〉S2,事务1和事务2的flag字段的初始值都为假, 表示事务开始时都还未进行读写操作。等待时间T设置为lms。
2) 事务冲突产生
在事务进行读写操作时,有两种情况会导致软件事务间的冲突-
a. 本事务进行读操作,在获取数据的过程中,发现有其他事务己经在写该数据;
b. 本事务进行写操作,在获取数据的过程中,发现有其他事务已经在读或写该数据。 以事务1和事务2为例,事务1和事务2开始各自运行,事务2对ListList, find(c)读操作,把事务2的flag字段置为True,当事务1试图对链表List进行 List, insert (a)操作时发现事务2已经对链表List进行了读操作,这时就产生了冲突。 3)事务冲突延时仲裁
在事务i和j发生冲突时,采用延迟策略进行仲裁,仲裁方式如下
a. 当Si〈Sj或者Si二Sj时,延迟策略就将与j事务终止,如图4所示;
b. 当Si〉Sj时,延迟策略就让事务i等待一定的时间,在指定的时间T过后,去读取 事务j的状态,如果事务j的状态是Committed,表明事务j已经提交了,这时冲突在没有 中止任何事务的情况下得到了解决;如果事务j的状态是Active,则将事务j的标记字段 flag设置为False,事务再等待相同的时间T,如果在这段时间内,事务j进行了读写操 作,则将事务j的flag标记字段设置为True,在T时间过后,如果事务j的状态仍然为 Active而且flag仍然为False,说明这段时间内事务j没有读写操作,这样的话,延迟策 略将事务j终止;否则,事务ji己终止,如图5所示。
以事务i和事务2为例,因为S1〉S2,所以事务l就等待lms,再去看事务2的状态, 发现事务2还是Active,就把事务2的标记字段flag置为False,事务1再等lms,因为 事务2之后对链表List不再有任何操作,所以事务2的flag字段仍然为Flase,因此把事 务2终止,事务l继续执行。 4)事务提交或者终止
事务i和j的冲突经过延迟策略仲裁以后,事务i和j中一个事务终止,另外一个事务 继续执行
a. 事务i终止,则把事务i的状态置为aborted;
b. 事务j终止,事务i继续执行 '
如果事务i又和另外一个事务k冲突,则回到3),再调用事务冲突延时仲裁; 如果事务i读写操作已经完成,则把事务i的状态置为committing,等待提交。 以事务1和事务2为例,事务l继续执行,事务2终止,事务1之后没有再和其他任何
事务冲突,那么事务1执行完毕后状态置为committing,等待提交。
最后,还需要注意的是,以上公布的仅是本发明的具体实施例。本领域的普通技术人
员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
权利要求
1. 一种基于延时策略的软件事务内存的实现方法,包括以下步骤1)事务创建为软件事务提供四个状态Active,Aborted,Committing和Committed,分别表示事务正在运行、事务已经终止、软件事务已经完成对对象的操作等待提交、事务已经提交成功;在程序执行过程中碰到需要对一个对象进行读写操作时事务被创建,事务是一串连续的对同一个对象进行操作的指令集合;在事务Si中,用Si表示创建事务i时的系统时间,作为事务i的开始时间;用flag表示事务i是否有读写操作,如果有,则flag为真,如果没有,则flag为假;2)事务冲突产生在事务进行读写操作时,有两种情况会导致软件事务间的冲突a. 一事务进行读操作,在获取数据的过程中,发现有其他事务已经在写该数据;b. 一事务进行写操作,在获取数据的过程中,发现有其他事务已经在读或写该数据;3)事务冲突延时仲裁在事务i和j发生冲突时,采用延迟策略进行仲裁,仲裁方式如下a. 当Si<Sj或者Si=Sj时,延迟策略就将j事务终止;b. 当Si>Sj时,延迟策略就让事务i等待一定的时间,在指定的时间T过后,去读取事务j的状态;如果事务j的状态是Committed,表明事务j已经提交了,这时冲突在没有中止任何事务的情况下得到了解决;如果事务j的状态是Active,则将事务j的标记字段flag设置为False,事务再等待相同的时间T,如果在这段时间内,事务j进行了读写操作,则将事务j的flag标记字段设置为True;在T时间过后,如果事务j的状态仍然为Active而且flag仍然为False,说明这段时间内事务j没有读写操作,这样的话,延迟策略将事务j终止;否则,事务i自己终止;4)事务提交或者终止事务i和j的冲突经过延迟策略仲裁以后,事务i和j中将有一个事务被终止,另外一个事务继续执行,具体情况分为两种,分别如下a. 事务i终止,则把事务i的状态置为aborted;b. 事务j终止,事务i继续执行;如果事务i又和另外一个事务k冲突,则再次进行事务冲突延时仲裁;如果事务i读写操作已经完成,则把事务i的状态置为committing,等待提交。
全文摘要
本发明涉及基于多处理器系统软件事物内存的实现技术,旨在提供一种基于延时策略的软件事务内存的实现方法。该方法包括以下步骤事务创建、事务冲突产生、事务冲突延时仲裁、事务提交或者终止。本发明采用延时策略来仲裁事务间发生冲突时的情况。这样的冲突仲裁策略简单高效,有效地缓解了由于仲裁策略不当而造成的效率低下,提高了软件事物内存系统的性能。
文档编号G06F9/46GK101510162SQ200910096959
公开日2009年8月19日 申请日期2009年3月26日 优先权日2009年3月26日
发明者乔福明, 刘敬伟, 满 曹, 王春昊, 章铁飞, 缪良华, 剑 陈, 陈天洲, 项凌翔, 马建良 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1