一种并发访问内存的方法及装置的制造方法_2

文档序号:8258383阅读:来源:国知局
以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0053]在一个典型的配置中,多核系统可包括多个处理器(CPU)、一个或多个输入/输出接口、网络接口和内存。
[0054]内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0055]计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0056]经过将近20多年的发展,Transact1n memory可以分别由软件或者硬件实现,软件实现的Transact1n memory执行效率非常低,而硬件实现的Transact1n memory大大提高了其实用性,因此本文主要讨论硬件基础上的Transact1n memory。
[0057]首先介绍一下硬件Transact1n memory的工作原理。
[0058]Transact1n memory用代码告诉CPU Transact1n内存区域的开始和结束,例如Transact1n_start 和 Transact1n_end。中间部分为执行 Transact1n 区域,一旦执行结束Transact1n_end指令要求CPU将所有修改过的数据以原子方式提交(也就是提交过程不可被打断和访问)。
[0059]执行Transact1n的过程中任何读过或者写过的内存区域都会被监视起来以免产生写-读,读-写,以及写-写冲突。举例来说,每条cache line (缓存行)都有两个bit (写标识位write-bit和读标识位read-bit)分别表示写过和读过;比如第一事务Transact1n0读了数据A,则将数据A对应的缓存行的read-bit置位,即设定为“I”以表示读过(读过是指已经读到了 Transact1n。对应的缓存中但尚未提交Transact1n。,如果提交了则将该read-bit复位,即设定为“O”);若之后Transact1n又写了数据A,则会先将数据A对应的缓存行的数据复制到私有不可见的缓存区域(比如第一层缓存)进行更新操作,同时将原数据A对应的缓存行的write-bit设定为“1”,read-bit设定为“O”。
[0060]如果第一线程P。通过第一处理器CPUtl进入第一事务Transact1n。的区域写(或者读)了一条缓存行(64字节)的数据,那么就会设置这条缓存行上对应的写(或者读)的标记bit ;而另外的第二线程Pl通过第一处理器CPU1进入了第一事务Transact1ntl或者其他事务的区域,准备读(或者写)刚才被写过(或者读过)相同的缓存行,那么这样的操作事件将被第一处理器CPUtl所捕获,因此产生的结果为第一线程Ptl或者第二线程P1进行回滚,另外写-写冲突也将产生回滚现象阻碍CPU性能,尤其在读写共享内存(一个或多个缓存行)操作频繁的情况下,即不能达到并行操作还要产生冗余回滚因此将严重阻碍性能
[0061]为了使数据冲突时能够回滚到进入Transact1n区域起始的状态,当前Transact1n memory操作对所有内存写操作之前都必须将原有的数据复制一份;比如可以复制需要进行写操作的一条缓存行到私有不可见的缓存中(比如第一层缓存中),写操作中是对私有不可见的缓存中相应的缓存行进行写入更新;这样一旦产生冲突则将放弃私有不可见的缓存(比如第一层缓存)之中更新过的数据(以缓存行为单位),程序从Transact1n入口点重新运行,如果成功完成Transact1n,则用私有不可见的缓存(比如第一层缓存)中最新写入的数据代替原有的数据。
[0062]实施例一、一种并发访问内存的方法,包括:
[0063]S101、当第一事务需要对第一数据进行写操作时,如果存在读过所述第一数据或将要读所述第一数据的第二事务,则生成表示所述第一事务的写操作和所述第二事务的读操作冲突的记录;
[0064]S102、执行所述第二事务的处理,执行完成后提交所述第二事务并根据所述记录通知所述第一事务;
[0065]S103、执行所述第一事务的处理,执行完成且收到所述第二事务的通知后提交所述第一事务。
[0066]其中,执行所述第一、第二事务的处理的步骤可不分先后且可以并行。这里的“读过”是指读过是指已经读到了第二事务对应的缓存中但尚未提交。
[0067]本实施例中设计了在冲突时的提交流程及保证该提交流程实现的措施,能保证事务按照读、写操作的顺序提交,避免在读-写冲突(要进行写操作的数据被读过)和写-读冲突(要进行写操作的数据将要被读)发生时进行回滚,因此提高读操作并发性并且减少了回滚的产生,能提高多个系统的整体性能。
[0068]本实施例的一种实施方式中,可以为多核系统中的每个处理器增加一个读写冲突检测寄存器(后文简称为T-CCR),格式如图2所示,包括多核系统中各处理器对应的处理器标识位CO, CP^Cn,以及用于指示本处理器上当前运行的Transact1n是产生读操作冲突还是写操作冲突的操作冲突标识位Reader/Writer,在一个Transact1n中不允许读、写操作冲突同时发生,如果同时发生将需要进行回滚。
[0069]本实施方式中,所述生成表示所述第一事务的写操作和所述第二事务的读操作冲突的记录的步骤具体可以包括:
[0070]在运行所述第一事务的第一处理器的第一读写冲突检测寄存器中,将运行所述第二事务的第二处理器对应的处理器标识位置位,将操作冲突标识位置为表示产生写操作冲突的值;
[0071]在所述第二处理器的第二读写冲突检测寄存器中,将所述第一处理器对应的处理器标识位置位,将操作冲突标识位置为表示产生读操作冲突的值。
[0072]相应地,根据所述记录通知所述第一事务的步骤包括:
[0073]在所述第二读写冲突检测寄存器中,查找置位的处理器标识位;
[0074]确定置位的处理器标识位对应于所述第一处理器;
[0075]通知所述第一处理器上运行的所述第一事务。
[0076]举例来说,比如产生读-写冲突时(假设第一处理器CPUtl上运行的Transact1n。要写的缓存行和第二处理器CPU1上运行的Transact1n1读过的缓存行冲突),则第一处理器CPUtl的T-CCRtl中,第二处理器CPU1对应的处理器标识位Cl将会置位,同时Reader/Writer被置为“1”,表示第一处理器CPUtl上当前运行的Transact1n是产生写操作冲突;而第二处理器CPU1对应的T-CCR1中,第一处理器CPUtl对应的处理器标识位CO将会置位,同时Reader/Writer被置为“O”,表示第二处理器CPU1上当前运行的Transact1n1是产生读操作冲突。表示读/写操作冲突的值也可以互换。
[0077]作为进行读操作的第二事务(运行该第二事务的第二处理器的T-CCR1中Reader/Writer为“0”,并且CO?Cn中其它处理器对应的处理器标识位都没有被置位),即使由于某些情况产生回滚,也要根据所述第二处理器的T-CCR1中对应的冲突位卿CO?Cn中被置位的对应于其它处理器的处理器标识位,本例中就是CO),相应清除该冲突位所对应的处理器的T-CCR中,第二处理器对应的处理器标识位(本例中即T-CCRtl中的处理器标识位Cl)。
[0078]本实施方式中,如图3所示,步骤S103具体可以包括:
[0079]S301、执行所述第一事务的处理,执行完成后进行步骤S302 ;
[0080]S302、判断所述第一读写冲突检测寄存器中的操作冲突标识位是否为表示产生写操作冲突的值,如果是则进行步骤S303,如果为表示读操作冲突的值则进行步骤S305 ;
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1