CN101310258A - 在软件事务内存系统中保护共享变量 - Google Patents
在软件事务内存系统中保护共享变量 Download PDFInfo
- Publication number
- CN101310258A CN101310258A CN200680042986.2A CN200680042986A CN101310258A CN 101310258 A CN101310258 A CN 101310258A CN 200680042986 A CN200680042986 A CN 200680042986A CN 101310258 A CN101310258 A CN 101310258A
- Authority
- CN
- China
- Prior art keywords
- stm
- internal memory
- affairs
- office
- variable
- 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
Abstract
对于在程序的基于软件的事务内存系统(STM)所定义的(STM定义的)临界区域中至少被访问一次的变量,通过以下操作来修改在任何STM定义的临界区域系统之外发生的对所述变量的访问,所述操作包括:开始基于硬件的基于事务内存的事务;在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;如果所述变量当前不被STM事务所拥有,则执行所述访问,然后提交所述基于硬件的事务内存事务;以及如果所述变量当前被STM事务所拥有,则执行响应操作。
Description
相关申请
本申请涉及名称为“LOCK ELISION WITH TRANSACTIONALMEMORY”、代理方卷号为P22226的待审U.S.专利申请No.xx/xxxxx,该专利申请被转让给本发明的受让人。
背景技术
在M.Herlihy和J.Moss,Transactional memory:Architectural support forlock-free data structures,Proceedings of the 20th Annual InternationalSymposium on Computer Architecture 20,1993(Herlihy和Moss)中描述了使用事务内存以硬件形式对无锁定共享数据结构的事务支持。该方法描述了对启用所述无锁定访问的现有多处理器高速缓存一致性协议的一组扩展。在本文中,使用事务内存的事务被称为事务内存事务或无锁定事务。
附图说明
图1示出一个实施例中的基于处理器的系统。
图2示出软件事务内存系统的实现。
图3示出一个实施例中的处理。
具体实施方式
参考图1,所示出的基于处理器的系统可以包括耦合到总线110的一个或多个处理器105。可选地,该系统可以具有这样一种处理器,该处理器为一个多核处理器或者在其它实例中为多个多核处理器。在一些实施例中,处理器可以是超线程的,或者能够以如同其为多核处理器一样(尽管仅具有单核)的方式执行处理。在一个简单实例中,可以将总线110耦合到系统内存115、例如磁盘驱动器的存储器设备或其它存储器设备120、外围设备145。存储器120可以存储各种软件或数据。该系统可以经由一个或多个总线系统而连接到多个外围设备145。已经公知,所述外围设备可以包括显示器和打印系统。
在一个实施例中,如在Herlihy和Moss中所描述的,例如图示的处理器系统添加事务内存系统100,该事务内存系统100允许利用被缓存在事务内存系统中的共享数据结构来执行无锁定事务。从而,处理器105可以包括支持这种无锁定的或基于事务内存的事务的指令集体系结构。在这种体系结构中,该实施例中的系统支持一组指令,包括:开始事务的指令、正常终止事务的指令以及中止事务的指令。
图1的系统仅是一个实例,本发明并不局限于任何特定的体系结构。在具有其它体系结构的系统的特定组件上的变型可以包括:在一些实例中,将事务内存包括作为系统的一个或多个处理器的组件;在另一些实例中,事务内存可以是连接到处理器的总线上的独立组件。在其它实施例中,系统可以具有对无锁定事务进行管理的附加指令。在其它实施例中,指令的实际形式或格式可以不同。可以存在附加的内存或存储器组件。可以存在很多其它变型。
软件事务内存系统(STM系统)在本领域中是公知的。为了清楚具体地描述实施例,以下提供了软件事务内存的特定的简单实现。该描述广泛地基于Language Support For Lightweight Transactions,Tim Harris和KeirFraser,Proceedings of OOPSLA 2003(Harris类型STM)。Harris类型STM系统以软件形式提供对例如由公知的并发控制协议所实现的基本事务的运行时间支持:条件临界区(CCR:conditional critical region)。如在本领域中公知的,CCR所具有的一般形式为:
atomic(condition){
statements;
}
其定义了一种CCR:如果必要则等待,直到condition(条件)为真,然后执行statements(声明)。为了实现CCR的基本功能,Harris类型STM提供下列原语:
STMStart();STMRead(&x);STMWrite(&y,value);STMCommit.
利用这些原语,可以将STM用于实现以源代码语言写出的原子(atomic)声明,如以下原子累加实例中所示:
atomic{
y=x+1;
}
上述代码将由以下的汇编后的底层(underlying)代码代替:
boolean done=false;
while(!done){
STMStart();
try{
temp=stmRead(&x);
stmWrite(&y,temp+1);
done=STMCommit();
}catch(Throwable t){
done=STMCommit();
if(done){
throw t;
}
}
}
上述代码段利用伪代码实现所列原子累加的STM定义的临界区段版本。STMstart调用创建基于软件的事务,其中,该处理尝试原子地读取x的值并将x+1的值写入变量y。当事务成功时,执行提交(STMCommit),由此停止临界区段。即使出现错误,例如,如果try区段因为检测到数据冲突而失败,则停止事务并且再次尝试原子累加:以标准方式将整个处理封闭在while循环中,以便反复尝试访问直到实现成功提交为止,由此将变量done设置为true。
如在图2中所示,为了实现由Harris类型STM的原语所提供的功能,上述参考文章中所描述的实现使用了三种类型的数据结构。第一种数据结构是应用程序堆栈240,其中保存了数据本身。应用程序堆栈将地址映射到存储在堆栈中的值,所述地址例如205处的地址a1,所述值例如存储在225处的值10。第二种类型的结构是所有权记录集合250,其被用于对事务进行协调。例如哈希函数210的所有权函数将应用程序堆栈中的每个地址映射到相关联的所有权记录,该所有权记录指示哪个事务拥有与当前地址相关联的变量。例如,经由映射210将225处的变量映射到215处的所有权记录。在地址和记录之间不需要一对一的对应。结构250中的每个所有权记录保存版本号或与其相关联的地址的当前所有者,例如,记录245与地址a4处的变量相关联并且包括其版本号8。每次更新应用程序堆栈中的位置时,必须累加版本号。版本号被用于检测是否可以提交事务。230处的记录与地址a2处的变量相关联,其是活动事务的一部分。该记录引用了事务描述符,其包括对变量a2的访问。255处的第三种类型的结构保存事务描述符,其表示每个活动事务的以及其已对应用程序堆栈进行的访问的当前状态。利用事务入口来描述每个访问,该事务入口指定了正在针对的地址、将被保存在该地址处的旧值和新值以及这些值的旧版本号和新版本号。状态字段指示事务是ACTIVE(活动的)(能够为其激活STMAbort、STMWait、STMCommit、STMRead和STMWrite操作)、COMMITTED(提交的)、ABORTED(中止的)还是ASLEEP(休眠的)。描述符最初为ACTIVE,并且当尝试提交、中止或等待时,描述符移动到其它状态。由此,例如,基于字段235的值,与222处的变量a1相关联的事务描述符指示由标识符tid1所标识的事务的状态是ACTIVE。事务描述符还在220处指示事务正在尝试将a1处变量的值从10改为45,并且将其版本号从7改为8。类似地,与247处的事务变量a2相关联的事务描述符指示将要把变量从值223更新到值34,并且将其版本号从值3累加到值4。然而,由于对应于描述符247的事务tid2的状态为ASLEEP,所以该事务描述符指示事务tid2不是活动的。
在运行时间,可以基于其值所取决于的所述位置的一致性快照来确定一个地址处变量的逻辑状态:地址本身、其所有权记录、以及拥有描述符的状态和来自该描述符内入口的信息。一个处理能够通过读取上述数据结构中的相关字段来直接计算逻辑状态。
虽然在以上参考的文章中可以找到Harris类型STM的原语实现的更多细节,但是基于前面的概述,本领域技术人员应该清楚:由于维护和实现各种数据结构所需的所有操作都以软件形式出现,所以为了使用STM实现原子事务,需要若干操作和许多内存引用。也可能在大多数其它类型的STM以及STM的大多数其它实现中存在该特征。
当使用依赖底层STM的多线程代码实现原子性、正确性和临界区段时,例如,由于程序员无意的错误,可能在代码的另一部分内在临界区段之外引用在代码的一部分内正被原子地使用的变量。如果具有对共享变量的未受保护引用的线程与在临界区段内引用共享变量的线程并发执行,则由于可能发生未预料到的数据冲突以及该冲突甚至可能保持未被检测(尽管程序员期望该变量被原子地访问),前述情况可能引起问题。
对该问题的过于简单的解决方案是:使编译器在对共享变量的任何访问周围插入基于STM的临界区段,其中该共享变量存在于代码的未受保护区段中。然而,如上面所解释的,由于在执行这些操作过程中引起开销,这可能在性能方面导致过于昂贵。
在一个实施例中,通过利用基于硬件的事务内存系统的功能来增强软件事务系统的运行时间实现,能够防止由于使用底层STM功能原子地访问变量以及在原子区域外以不受保护的方式访问变量而出现的错误。在该混合实施例中,一般将能够检测到由于无意访问代码临界区段之外的受保护变量所引起的错误,而不会导致为了在完全基于STM的系统中实现这种保护所将需要的相同级别的性能损失。
在较高层中,图3示出用于实现这种保护的一个实施例中的处理。在该实施例中,编译器处理基于STM的代码,并且修改对共享变量的每个未受保护访问。编译器可以使用各种静态或动态算法来检测共享变量。图中示出了在运行时间在该处理之后被修改代码的执行。首先,在305处,系统检测内存访问是否确实位在STM定义的临界区段内。如果是,则硬件事务就不是必须的,并且利用常规的STM读取和写入屏障(barrier)在310处继续执行。然而,如果内存访问不在STM定义的临界区段或原子区域内,则该处理在315处开始硬件事务。在该硬件事务中,在325处,该处理检测其访问受到保护的变量的所有权记录。如果所有权记录为空,则这意味着没有其它事务拥有该特定的内存地址。因此,基于硬件的事务可以在340处执行所请求的内存操作,然后在350处提交事务。另一方面,如果所有权记录非空,则这意味着另一个事务正在访问同一个内存位置,从而产生潜在的数据竞争。然后,该处理在345处引发异常。也可能存在可选实施例,其中,该处理可以决定在方框305处重新开始之前等待所有权记录变空。
此外,在325处的检测之后的任何点处,如果另一个处理通过访问例如所有权记录或变量本身的硬件事务内的任何内存位置而造成了可能的数据冲突,则在335处以硬件形式生成中断事件。然后,事务的中止处理程序在320处进行接管,并且在330处利用数据竞争异常来中止事务。也可能存在可选实施例,例如,中止处理程序可以引起通过在方框305处重新开始执行而重试内存操作。
从而,现在,在每种情况下都可保护所有潜在的之前未被检测到的数据竞争,其中,所述数据竞争可能由于对STM系统中共享变量的未受保护访问而出现。此外,与一般的STM相比较,由于基于硬件的事务系统相对高效,所以以相对较低的性能开销实现了这种保护。
load addr1start HW transaction2If(ownership_record(addr)==NULL){3temp=*addr;4commit HW transaction;5return temp;6}7commit HW transaction;/*如果此处包含数据竞争*/8raise data_race exception;store addr,value9start HW transaction10If(ownership_record(addr)==NULL){ |
11*addr=value;12commit HW transaction;13return;14}15commit HW transaction;/*如果此处包含数据竞争*/16raise data_race exception; |
表1
表1列出了在用于保护对STM定义的临界区段外部共享变量的访问的实施例中的伪代码。在第1至8行给出了用于替换引用这种共享变量的load指令(即,读取操作)的伪代码。该伪代码对应于之前参考图3所描述的处理流程,特别是路径315以及325、340、350或325、345。在表1的第1行处开始硬件事务之后,该处理首先在第2行检查与共享变量的地址相关联的所有权记录是否为空。如果所有权记录非空,则在第2行处的检查将失败。然后,代码在第7行执行提交以停止硬件事务,并在第8行引发数据竞争异常。然而,如果在第2行处所有权记录为空,则所述load可以继续,第3和4行完成load、提交事务,并且该处理在第5行处返回变量的值。
除了第11和13行之外,用于将值(对应于写入操作)store到变量的相应代码以及第9-16行都与之前在load情况下所使用的代码是相同的。在第11行处,通过将所提供的值存储在变量的地址处来完成store;并且由于store操作不返回值,所以与load不同,在第13行处的return不伴随有值。
应当注意,以上仅是对一个实施例的描述。一般地,可提供许多不同类型的软件事务内存系统,并且这些软件事务内存系统在本领域中是公知的。上述的对出现在软件事务内存分段之外共享变量访问的保护仅仅依赖于存在与变量相关联的所有权记录的某些实现。应当注意,仅是为了表达的具体和清楚而提供Harris类型STM的其它细节。在其它实施例中,可以给出图3中所示的处理流程以及表1中所示的相应代码的许多变型。例如,用于对硬件事务系统进行控制的正确处理调用可以不同。类似地,对变量的所有权记录的访问将取决于特定STM所需的正确语法。为了清楚,未在附图或表格中给出中止处理程序的细节,但是其对本领域技术人员来说将是显而易见的。此外,如本领域技术人员应当清楚的,上述表格仅仅是一个实施例中的示例性代码片断。在其它实施例中,实现语言可以是其它语言,例如C或Java;所使用的变量名可以不同,并且所定义或调用的所有函数的名称可以不同。已经公知,在不改变输入和输出关系的情况,可以任意改变实现以上所列程序所实现函数的程序的结构和逻辑。
在前述描述中,为了解释的目的,给出了许多具体细节,以便提供对所描述实施例的详尽理解,然而,本领域技术人员将会意识到,可以在不采用这些具体细节的情况下实现许多其它实施例。
针对在基于处理器的系统内对数据比特的操作的算术和符号表示,给出以上详细描述的某些部分。这些算法描述和表示是本领域技术人员用于最有效地将其工作内容转达给本领域其它人员的手段。所述操作是一些需要对物理量进行物理操控的操作。这些量可以采用能够被存储、传递、组合、比较以及操控的电、磁、光和其它物理信号的形式。已经证实,主要由于通用的原因,在某些时候将这些信号称为比特、值、元素、符号、字符、项、数量等是方便的。
然而,应该注意,所有这些和类似的术语都与适当的物理量相关联,并且其仅仅是应用于这些量的方便性标签。除非特别声明,否则,就如在本说明书中所出现的,例如“执行”或“处理”或“计算”或“运算”或“确定”等术语可以指基于处理器的系统或类似的电子计算设备的操作和处理,所述基于处理器的系统或类似的电子计算设备或者其它这种信息存储、传输或显示设备对基于处理器的系统存储器内被表示为物理量的数据进行操控,并且将其变换为类似表示的其它数据。
在对实施例的描述中,可以对附图进行参考。在附图中,类似的标号在若干视图中描述基本类似的组件。可以使用其它实施例,并且可以实现结构、逻辑和电性的改变。此外,应该理解,虽然各个实施例不同,但是其不必互相排斥。例如,在一个实施例中所描述的特定特征、结构或特性可以被包括在其它实施例中。
此外,在处理器中实现的实施例的设计可以经历从创建到仿真到制作等多个阶段。用于表示设计的数据可以用多种方式来表示所述设计。首先,如在仿真中可用的,可以使用硬件描述语言或其它功能描述语言来表示硬件。另外,可以在设计过程的某些阶段处生成具有逻辑电路和/或晶体管门的电路级模型。此外,在某个阶段处,大多数设计到达在硬件模型中表示各个器件的物理布局的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是为用于生成集成电路的掩模指定在不同掩模层上各种特征的出现与否的数据。在所述设计的任何表示中,可以将数据存储在任何形式的机器可读介质中。被调制或生成以便发送信息的光波或电波、内存、或者例如盘片的磁或光存储器可以是机器可读介质。这些介质中的任何介质可以“携带”或“指示”设计或软件信息。当对指示或携带代码或设计的电载波进行发送而达到进行电信号的复制、缓存或重传的程度时,就执行新的复制。由此,通信提供商或网络提供商可以对构成或表示实施例的产品(载波)进行复制。
可以将实施例提供作为程序产品,该产品可以包括其上存储有数据的机器可读介质,当机器对其进行访问时,可以使机器根据所要求保护的主题而执行处理。机器可读介质可以包括(但不限于)软盘、光盘、DVD-ROM盘片、DVD-RAM盘片、DVD-RW盘片、DVD+RW盘片、CD-R盘片、CD-RW盘片、CD-ROM盘片以及磁光盘片、ROM、RAM、EPROM、EEPROM、磁或光卡、闪存或者适合于存储电子指令的其它类型的媒介/机器可读介质。此外,还可以将实施例下载作为程序产品,其中,可以经由通信链路(例如,调制解调器或网络连接),以嵌入在载波或其它传播介质内的数据信号的方式,将程序从远程数据源传送到请求设备。
以最基本的形式对许多方法进行了描述,但是在不脱离所要求保护主题的基本范围的情况下,可以在任何方法中添加或删除步骤,并且可以在任何所描述的消息中添加或删减信息。本领域技术人员将会清楚,可以进行更多的进一步的修改和改变。特定的实施例并非被提供用于限制所要求保护的主题,而是对其进行示例。所要求保护主题的范围不是由以上提供的特定实例所确定的,而仅由所附权利要求确定。
Claims (24)
1、一种方法,包括:
对于在程序的基于软件的事务内存系统(STM)所定义的(STM定义的)临界区域中至少被访问一次的变量,通过以下操作来修改在任何STM定义的临界区域系统之外发生的对所述变量的访问:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;
如果所述变量当前不被STM事务所拥有,则执行所述访问,然后提交所述基于硬件的事务内存事务;以及
如果所述变量当前被STM事务所拥有,则执行响应操作。
2、如权利要求1所述的方法,其中,所述响应操作包括以下操作中的至少一个:
如果所述变量当前被STM事务所拥有,则引发指示错误的异常;以及
等待限定的时间,然后检查所述变量当前是否被STM事务所拥有。
3、如权利要求2所述的方法,其中,所述响应操作包括:如果所述变量当前被STM事务所拥有,则引发指示错误的异常。
4、如权利要求2所述的方法,其中,所述响应操作包括:等待限定的时间,然后检查所述变量当前是否被STM事务所拥有,然后如果所述变量当前被STM事务所拥有则引发异常。
5、如权利要求2所述的方法,其中,所述响应操作包括:重复限定的时间的所述等待以及之后的对所述变量当前是否被STM事务所拥有的所述检查,直到所述变量当前不被STM事务所拥有为止。
6、如权利要求1所述的方法,还包括:如果在所述基于硬件的事务内存事务期间发生临界事件则引发异常,其中所述临界事件需要利用所述基于硬件的事务内存事务的中止处理程序进行处理。
7、如权利要求6所述的方法,其中,所述临界事件还包括:利用所述基于硬件的事务内存事务之外的处理,对所述变量的所有权记录或所述变量本身的访问。
8、如权利要求1所述的方法,其中,修改对所述变量的所述访问的操作还包括以下操作中的至少一个:
编译器利用包括以下指令的代码,替代引用对应于所述变量的地址的加载指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述加载指令,然后提交所述基于硬件的事务内存事务;以及
编译器利用包括以下指令的代码,替代引用对应于所述变量的地址的写入指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述写入指令,然后提交所述基于硬件的事务内存事务。
9、如权利要求2所述的方法,其中,引发异常的操作还包括:
提交所述基于硬件的事务内存事务;以及
引发数据竞争异常。
10、如权利要求6所述的方法,其中,引发异常的操作还包括:
提交所述基于硬件的事务内存事务;以及
引发数据竞争异常。
11、一种其上存储有数据的机器可读介质,当机器对其进行访问时,使得所述机器执行一种方法,该方法包括:
对于在程序的基于软件的事务内存系统(STM)所定义的(STM定义的)临界区域中至少被访问一次的变量,通过以下操作来修改在任何STM定义的临界区域系统之外发生的对所述变量的访问:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;
如果所述变量当前不被STM事务所拥有,则执行所述访问,然后提交所述基于硬件的事务内存事务;以及
如果所述变量当前被STM事务所拥有,则执行响应操作。
12、如权利要求11所述的机器可读介质,其中,所述响应操作包括以下操作中的至少一个:
如果所述变量当前被STM事务所拥有,则引发指示错误的异常;以及
等待限定的时间,然后检查所述变量当前是否被STM事务所拥有。
13、如权利要求12所述的机器可读介质,其中,所述响应操作包括:如果所述变量当前被STM事务所拥有,则引发指示错误的异常。
14、如权利要求12所述的机器可读介质,其中,所述响应操作包括:等待限定的时间,然后检查所述变量当前是否被STM事务所拥有,然后如果所述变量当前被STM事务所拥有则引发异常。
15、如权利要求12所述的机器可读介质,其中,所述响应操作包括:重复限定的时间的所述等待以及之后的对所述变量当前是否被STM事务所拥有的所述检查,直到所述变量当前不被STM事务所拥有为止。
16、如权利要求11所述的机器可读介质,其中,所述方法还包括:如果在所述基于硬件的事务内存事务期间发生临界事件则引发异常,其中所述临界事件需要利用所述基于硬件的事务内存事务的中止处理程序进行处理。
17、如权利要求16所述的机器可读介质,其中,所述临界事件还包括:利用所述基于硬件的事务内存事务之外的处理,对所述变量的所有权记录或所述变量本身的访问。
18、如权利要求11所述的机器可读介质,其中,修改对所述变量的所述访问的操作还包括以下操作中的至少一个:
编译器利用包括以下指令的代码,替代引用对应于所述变量的地址的加载指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述加载指令,然后提交所述基于硬件的事务内存事务;以及
编译器利用包括以下指令的代码,替代引用对应于所述变量的地址的写入指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述写入指令,然后提交所述基于硬件的事务内存事务。
19、如权利要求12所述的机器可读介质,其中,引发异常的操作还包括:
提交所述基于硬件的事务内存事务;以及
引发数据竞争异常。
20、如权利要求16所述的机器可读介质,其中,引发异常的操作还包括:
提交所述基于硬件的事务内存事务;以及
引发数据竞争异常。
21、一种系统,包括:
处理器,用于执行程序;
内存;
基于硬件的事务内存体系结构;以及
编译器,其被存储在所述内存中,用于通过将包括以下指令的代码插入到程序中,修改对在所述程序的基于软件的事务内存系统(STM)所定义的(STM定义的)临界区域中至少被访问一次的变量的访问,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;
如果所述变量当前不被STM事务所拥有,则执行所述访问,然后提交所述基于硬件的事务内存事务;以及
如果所述变量当前被STM事务所拥有,则执行响应操作。
22、如权利要求19所述的系统,其中,所述响应操作包括以下操作中的至少一个:
如果所述变量当前被STM事务所拥有,则引发指示错误的异常;以及
等待限定的时间,然后检查所述变量当前是否被STM事务所拥有,
如果满足下列条件中的至少一个,则引发异常:
所述变量当前被STM事务所拥有;
出现利用所述基于硬件的事务内存事务之外的处理对所述变量的所有权记录的访问。
23、如权利要求19所述的系统,其中,所述编译器还执行以下操作中的至少一个:
利用包括以下指令的代码,替代引用对应于所述变量的地址的加载指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述加载指令,然后提交所述基于硬件的事务内存事务;以及
利用包括以下指令的代码,替代引用对应于所述变量的地址的写入指令,该代码所包括的指令用于:
开始基于硬件的基于事务内存的事务;
在所述基于硬件的基于事务内存的事务内,检查所述变量当前是否被STM事务所拥有;以及
如果所述变量当前不被STM事务所拥有,则执行引用对应于所述变量的所述地址的所述写入指令,然后提交所述基于硬件的事务内存事务。
24、如权利要求19所述的系统,其中,所述内存还包括动态随机存取存储器(DRAM)。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/305,634 | 2005-12-16 | ||
US11/305,634 US7870545B2 (en) | 2005-12-16 | 2005-12-16 | Protecting shared variables in a software transactional memory system |
PCT/US2006/046775 WO2007078571A1 (en) | 2005-12-16 | 2006-12-06 | Protecting shared variables in a software transactional memory system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101310258A true CN101310258A (zh) | 2008-11-19 |
CN101310258B CN101310258B (zh) | 2012-08-22 |
Family
ID=37964588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200680042986.2A Expired - Fee Related CN101310258B (zh) | 2005-12-16 | 2006-12-06 | 用于在软件事务内存系统中保护共享变量的方法和系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US7870545B2 (zh) |
EP (1) | EP1960879A1 (zh) |
CN (1) | CN101310258B (zh) |
WO (1) | WO2007078571A1 (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760095A (zh) * | 2011-04-25 | 2012-10-31 | 清华大学 | 基于静态共享变量识别的动态数据竞争检测方法 |
CN103235745A (zh) * | 2013-03-27 | 2013-08-07 | 华为技术有限公司 | 一种地址冲突检测方法及装置 |
CN106030532A (zh) * | 2014-03-26 | 2016-10-12 | 英特尔公司 | 用于事务存储器程序的软件回放器 |
CN106062707A (zh) * | 2014-03-26 | 2016-10-26 | 英特尔公司 | 使能混合事务存储器系统中的最大并发性 |
CN109522736A (zh) * | 2018-12-13 | 2019-03-26 | 中国科学院信息工程研究所 | 一种在操作系统中进行密码运算的方法和系统 |
CN111159022A (zh) * | 2019-12-20 | 2020-05-15 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
US11556395B2 (en) * | 2020-01-24 | 2023-01-17 | Microsoft Technology Licensing, Llc | Data race detection with per-thread memory protection |
Families Citing this family (65)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7809903B2 (en) * | 2005-12-15 | 2010-10-05 | Intel Corporation | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions |
US7870545B2 (en) | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US8683143B2 (en) * | 2005-12-30 | 2014-03-25 | Intel Corporation | Unbounded transactional memory systems |
US20070186056A1 (en) * | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US8180977B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory in out-of-order processors |
US8180967B2 (en) * | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US8316352B2 (en) * | 2006-06-09 | 2012-11-20 | Oracle America, Inc. | Watchpoints on transactional variables |
KR100799687B1 (ko) * | 2006-09-19 | 2008-02-01 | 삼성전자주식회사 | 비휘발성 메모리를 공유하는 두 개 이상의 콘트롤러를내장한 시스템 |
US7802136B2 (en) | 2006-12-28 | 2010-09-21 | Intel Corporation | Compiler technique for efficient register checkpointing to support transaction roll-back |
US8132158B2 (en) * | 2006-12-28 | 2012-03-06 | Cheng Wang | Mechanism for software transactional memory commit/abort in unmanaged runtime environment |
US8719807B2 (en) * | 2006-12-28 | 2014-05-06 | Intel Corporation | Handling precompiled binaries in a hardware accelerated software transactional memory system |
US8185698B2 (en) * | 2007-04-09 | 2012-05-22 | Bratin Saha | Hardware acceleration of a write-buffering software transactional memory |
US8006227B2 (en) * | 2007-06-01 | 2011-08-23 | Microsoft Corporation | Efficiently locating transactional code blocks in a transactional memory system |
US8458724B2 (en) | 2007-06-15 | 2013-06-04 | Microsoft Corporation | Automatic mutual exclusion |
US9280397B2 (en) * | 2007-06-27 | 2016-03-08 | Intel Corporation | Using buffered stores or monitoring to filter redundant transactional accesses and mechanisms for mapping data to buffered metadata |
US8140773B2 (en) | 2007-06-27 | 2012-03-20 | Bratin Saha | Using ephemeral stores for fine-grained conflict detection in a hardware accelerated STM |
US8140497B2 (en) * | 2007-12-31 | 2012-03-20 | Oracle America, Inc. | System and method for implementing nonblocking zero-indirection transactional memory |
US20090204969A1 (en) * | 2008-02-11 | 2009-08-13 | Microsoft Corporation | Transactional memory with dynamic separation |
US7908265B2 (en) * | 2008-02-19 | 2011-03-15 | Microsoft Corporation | Transactional memory with dynamic separation |
US8533663B2 (en) * | 2008-05-12 | 2013-09-10 | Oracle America, Inc. | System and method for utilizing available best effort hardware mechanisms for supporting transactional memory |
US8214833B2 (en) * | 2008-05-12 | 2012-07-03 | Oracle America, Inc. | Systems and methods for supporting software transactional memory using inconsistency-aware compilers and libraries |
US8839213B2 (en) | 2008-06-27 | 2014-09-16 | Microsoft Corporation | Optimizing primitives in software transactional memory |
US8769514B2 (en) * | 2008-06-27 | 2014-07-01 | Microsoft Corporation | Detecting race conditions with a software transactional memory system |
US8341133B2 (en) | 2008-06-27 | 2012-12-25 | Microsoft Corporation | Compressed transactional locks in object headers |
US9274855B2 (en) * | 2008-12-24 | 2016-03-01 | Intel Corporation | Optimization for safe elimination of weak atomicity overhead |
US20100228929A1 (en) * | 2009-03-09 | 2010-09-09 | Microsoft Corporation | Expedited completion of a transaction in stm |
US8812796B2 (en) | 2009-06-26 | 2014-08-19 | Microsoft Corporation | Private memory regions and coherence optimizations |
US8370577B2 (en) | 2009-06-26 | 2013-02-05 | Microsoft Corporation | Metaphysically addressed cache metadata |
US8356166B2 (en) * | 2009-06-26 | 2013-01-15 | Microsoft Corporation | Minimizing code duplication in an unbounded transactional memory system by using mode agnostic transactional read and write barriers |
US8489864B2 (en) * | 2009-06-26 | 2013-07-16 | Microsoft Corporation | Performing escape actions in transactions |
US8161247B2 (en) * | 2009-06-26 | 2012-04-17 | Microsoft Corporation | Wait loss synchronization |
US8250331B2 (en) | 2009-06-26 | 2012-08-21 | Microsoft Corporation | Operating system virtual memory management for hardware transactional memory |
US8225139B2 (en) * | 2009-06-29 | 2012-07-17 | Oracle America, Inc. | Facilitating transactional execution through feedback about misspeculation |
US8229907B2 (en) * | 2009-06-30 | 2012-07-24 | Microsoft Corporation | Hardware accelerated transactional memory system with open nested transactions |
US8521995B2 (en) * | 2009-12-15 | 2013-08-27 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
US8402218B2 (en) * | 2009-12-15 | 2013-03-19 | Microsoft Corporation | Efficient garbage collection and exception handling in a hardware accelerated transactional memory system |
US8095824B2 (en) * | 2009-12-15 | 2012-01-10 | Intel Corporation | Performing mode switching in an unbounded transactional memory (UTM) system |
US8316194B2 (en) | 2009-12-15 | 2012-11-20 | Intel Corporation | Mechanisms to accelerate transactions using buffered stores |
US8539465B2 (en) | 2009-12-15 | 2013-09-17 | Microsoft Corporation | Accelerating unbounded memory transactions using nested cache resident transactions |
US9092253B2 (en) * | 2009-12-15 | 2015-07-28 | Microsoft Technology Licensing, Llc | Instrumentation of hardware assisted transactional memory system |
US8533440B2 (en) * | 2009-12-15 | 2013-09-10 | Microsoft Corporation | Accelerating parallel transactions using cache resident transactions |
US9477515B2 (en) | 2009-12-15 | 2016-10-25 | Intel Corporation | Handling operating system (OS) transitions in an unbounded transactional memory (UTM) mode |
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 |
US9110691B2 (en) * | 2010-11-16 | 2015-08-18 | Advanced Micro Devices, Inc. | Compiler support technique for hardware transactional memory systems |
CN102141932B (zh) * | 2010-12-14 | 2012-11-14 | 清华大学 | 大临界区保护方法 |
US9069557B2 (en) | 2010-12-17 | 2015-06-30 | Microsoft Technology Licensing, LLP | Business intelligence document |
US9104992B2 (en) | 2010-12-17 | 2015-08-11 | Microsoft Technology Licensing, Llc | Business application publication |
US9111238B2 (en) | 2010-12-17 | 2015-08-18 | Microsoft Technology Licensing, Llc | Data feed having customizable analytic and visual behavior |
US9864966B2 (en) | 2010-12-17 | 2018-01-09 | Microsoft Technology Licensing, Llc | Data mining in a business intelligence document |
US9336184B2 (en) | 2010-12-17 | 2016-05-10 | Microsoft Technology Licensing, Llc | Representation of an interactive document as a graph of entities |
US8677331B2 (en) * | 2011-09-30 | 2014-03-18 | Oracle International Corporation | Lock-clustering compilation for software transactional memory |
US8719828B2 (en) * | 2011-10-14 | 2014-05-06 | Intel Corporation | Method, apparatus, and system for adaptive thread scheduling in transactional memory systems |
JP5906325B2 (ja) | 2011-12-16 | 2016-04-20 | インテル・コーポレーション | トランザクションをサポートするコンピューターアーキテクチャにおけるコード特殊化のための例外を用いるプログラム及びコンピューティングデバイス |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US10437602B2 (en) * | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US10061609B2 (en) | 2013-06-26 | 2018-08-28 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
CN103729290A (zh) * | 2013-12-23 | 2014-04-16 | 华中科技大学 | 一种基于共享变量访问频度的采样率决策方法与系统 |
US10884945B2 (en) | 2015-06-30 | 2021-01-05 | International Business Machines Corporation | Memory state indicator check operations |
US10635307B2 (en) | 2015-06-30 | 2020-04-28 | International Business Machines Corporation | Memory state indicator |
CN106844215B (zh) * | 2017-01-24 | 2020-03-31 | 东南大学 | 一种基于约束求解的原子违背探测方法 |
CN112631925A (zh) * | 2020-12-29 | 2021-04-09 | 北京轩宇信息技术有限公司 | 一种单变量原子违背缺陷的检测方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5428761A (en) * | 1992-03-12 | 1995-06-27 | Digital Equipment Corporation | System for achieving atomic non-sequential multi-word operations in shared memory |
DE4415255C2 (de) * | 1994-04-30 | 1997-09-04 | Fraunhofer Ges Forschung | Pyrotechnische Ladung zur Freigabe von eingeschlossenem Druckgas |
US5613121A (en) * | 1994-10-19 | 1997-03-18 | International Business Machines Corporation | Method and system of generating combined storage references |
FR2762418B1 (fr) * | 1997-04-17 | 1999-06-11 | Alsthom Cge Alcatel | Procede de gestion d'une memoire partagee |
US6961923B2 (en) * | 2000-12-07 | 2005-11-01 | International Business Machines Corporation | Method of detecting zombie breakpoints |
US20020169935A1 (en) * | 2001-05-10 | 2002-11-14 | Krick Robert F. | System of and method for memory arbitration using multiple queues |
US7395382B1 (en) * | 2004-08-10 | 2008-07-01 | Sun Microsystems, Inc. | Hybrid software/hardware transactional memory |
US7870545B2 (en) | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
-
2005
- 2005-12-16 US US11/305,634 patent/US7870545B2/en not_active Expired - Fee Related
-
2006
- 2006-12-06 CN CN200680042986.2A patent/CN101310258B/zh not_active Expired - Fee Related
- 2006-12-06 WO PCT/US2006/046775 patent/WO2007078571A1/en active Application Filing
- 2006-12-06 EP EP06844988A patent/EP1960879A1/en not_active Withdrawn
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760095A (zh) * | 2011-04-25 | 2012-10-31 | 清华大学 | 基于静态共享变量识别的动态数据竞争检测方法 |
CN102760095B (zh) * | 2011-04-25 | 2014-11-26 | 清华大学 | 基于静态共享变量识别的动态数据竞争检测方法 |
CN103235745A (zh) * | 2013-03-27 | 2013-08-07 | 华为技术有限公司 | 一种地址冲突检测方法及装置 |
CN103235745B (zh) * | 2013-03-27 | 2016-08-10 | 华为技术有限公司 | 一种地址冲突检测方法及装置 |
CN106030532A (zh) * | 2014-03-26 | 2016-10-12 | 英特尔公司 | 用于事务存储器程序的软件回放器 |
CN106062707A (zh) * | 2014-03-26 | 2016-10-26 | 英特尔公司 | 使能混合事务存储器系统中的最大并发性 |
US9971627B2 (en) | 2014-03-26 | 2018-05-15 | Intel Corporation | Enabling maximum concurrency in a hybrid transactional memory system |
CN109522736A (zh) * | 2018-12-13 | 2019-03-26 | 中国科学院信息工程研究所 | 一种在操作系统中进行密码运算的方法和系统 |
CN111159022A (zh) * | 2019-12-20 | 2020-05-15 | 北京轩宇信息技术有限公司 | 基于单变量访问序模式的中断数据访问冲突检测方法及装置 |
US11556395B2 (en) * | 2020-01-24 | 2023-01-17 | Microsoft Technology Licensing, Llc | Data race detection with per-thread memory protection |
Also Published As
Publication number | Publication date |
---|---|
US20070156780A1 (en) | 2007-07-05 |
EP1960879A1 (en) | 2008-08-27 |
US7870545B2 (en) | 2011-01-11 |
CN101310258B (zh) | 2012-08-22 |
WO2007078571A1 (en) | 2007-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101310258B (zh) | 用于在软件事务内存系统中保护共享变量的方法和系统 | |
US7809903B2 (en) | Coordinating access to memory locations for hardware transactional memory transactions and software transactional memory transactions | |
JP5284103B2 (ja) | ソフトウェアトランザクショナルメモリ動作の最適化 | |
KR101203297B1 (ko) | 직접 업데이트 소프트웨어 트랜잭션 메모리 | |
CN101889266B (zh) | 事务存储器中的并行嵌套事务 | |
US8473950B2 (en) | Parallel nested transactions | |
US8180986B2 (en) | Memory conflict detection via mapping of the physical heap to control access permissions to the memory | |
CN101814017B (zh) | 提供硬件属性的存储器模型以支持事务执行的方法和设备 | |
US20090183159A1 (en) | Managing concurrent transactions using bloom filters | |
JP3512439B2 (ja) | チェックイン・チェックアウトモデルにおける施錠方式 | |
US8457943B2 (en) | System and method for simulating a multiprocessor system | |
CN101331456A (zh) | 越过障碍的推测性执行 | |
CN101416168B (zh) | 阵列比较和交换操作 | |
US10169092B2 (en) | System, method, program, and code generation unit | |
CN104598397A (zh) | 使用缓冲存储加速事务的机构 | |
US20060143609A1 (en) | System and method for managing memory of Java session objects | |
CN101689138B (zh) | 处理嵌套事务的错误地破坏的父事务 | |
CN101814018A (zh) | 事务存储器(tm)系统中的读和写监控属性 | |
CN101950259A (zh) | 在硬件中登记用户处理程序以用于事务存储器事件处理 | |
CN109933606B (zh) | 一种数据库修改方法、装置、设备及存储介质 | |
US8296742B2 (en) | Automatic native generation | |
US8769514B2 (en) | Detecting race conditions with a software transactional memory system | |
US8839213B2 (en) | Optimizing primitives in software 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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120822 Termination date: 20191206 |