多处理器存储器一致性的高效仿真方法和系统的制作方法

文档序号:6378828阅读:348来源:国知局
专利名称:多处理器存储器一致性的高效仿真方法和系统的制作方法
技术领域
本发明通常涉及计算机系统,尤其涉及在另一个具有截然不同的存储器共享行为的多处理计算系统上仿真一个多处理计算机系统的存储器共享行为的方法。
背景技术
仿真的主要目的是以最小性能损失在另一个体系结构上执行针对一个特定体系结构而编写的系统。显然,仿真处理的效率和所得到的″宿主″代码序列的质量具有非常的重要性。计算系统通常包含若干部分,包含处理器、存储器和输入/输出设备。经常需要在另一个计算系统上仿真一个计算系统的行为。仿真的一个主要原因是允许在另一个系统(例如″宿主计算系统″)上以相同的结果执行针对一个系统(例如″目标计算系统″)而编写的程序。
已经开发了若干传统技术,以用于通过另一个处理器的指令集仿真一个处理器的指令集(例如,在Stephen A.Herrod的″通过完全的机器模拟理解计算机系统行为(Using Complete Machine Simulation to UnderstandComputer System Behavior)″,博士论文,Stanford大学,1998年2月中公开的SIMOS;在Cathy May的″模拟快速系统/370模拟器(MimicAFast System/370 Simulator)″,面向对象编程系统语言和应用会议(OOPSLA)会议录,Orlando,1987年10月4-8日,Sigplan公告专刊,vol.22,No.12,1987年12月,vol.22,No.7,6月24日中公开的MIMIC)。
为了如实地执行仿真,还必须仿真这种系统中存储器的行为。通常,行为所包含的远不止于使用程序指定的地址读取和写入存储器中的单元。
更具体地,当在多处理系统中由一个处理器改变某个单元的内容时,管理系统中所有处理器何时观察到所述改变的规则是在体系结构中妥善定义的。在这个方面,当系统中只有一个处理器时,当前的多数系统的行为几乎相同。也就是说,系统保持程序顺序,这意味着如果在程序中出现的指令序列内语句S1位于另一个语句S2前面,则处理器的操作象在S2开始其执行之前完成S1的执行那样。这意味着S2必须知道S1对任何资源产生的改变,包含寄存器和存储器。
因此,如图1所示,如果象在上述SimOS和SimICS技术中那样在单处理系统上仿真多处理系统,并且如果目标系统和宿主系统遵守程序顺序,则仿真期间的存储器访问可以被视作一系列阶段(epoch)101,每个阶段101均表示目标系统中的一个处理器。也就是说,其区域中的编号指示被仿真的处理器的标识,而阴影区100指示系统正执行其它功能。
由于阶段101期间在两个或更多处理器的仿真存储器访问之间不存在同时交互,通过简单地在宿主处理器上执行目标处理器的正确单处理器仿真,可以保证程序顺序。
因此在图1中,当人们尝试在单处理器上仿真多个处理器时,不同多处理器在不同时间出现交错。于是,会在某个时间仿真处理器1,然后在一段时间内仿真处理器2,接着仿真在一段时间内返回到处理器1的仿真,然后有一段时间(例如阴影区100)不进行仿真,但单处理器执行其它功能。于是,单处理器在指定时间只执行多处理器中的一个处理器,而不是全部处理器的仿真。
上述交叉操作非常低效。然而其一个优点是一个处理器的″临界段″不与另一个处理器的临界段交叉。也就是说,″临界段″是2个处理器不能同时进入的部分。
对单处理器而言,当其执行仿真时不必完成其它任务(例如不进行特别的操作),因为2个处理器从不同时进入临界段。在某种意义上,单处理器自动满足2个处理器不会同时进入临界段的条件。出于同样原因,当尝试在多处理系统上仿真多处理器时,情况发生显著的变化。也就是说,可能出现问题。
例如,图2图解了Dekker算法的应用,其中提供了有关处理器201和202之间的共享的例子。在图2的例子中,2个处理器201、202正尝试访问临界段。再次地,在单处理器中,对临界段(例如每次只有一个处理器可以进入的部分)的访问不会出现问题(例如由单处理器自动克服),因为通过使用图1示出的阶段,单处理器操作是顺序的。
因此,如果实现使用Dekker算法的程序并且程序正在多处理机上运行,而仿真正在单处理器上执行,则不会出现问题。然而,如果相同的使用Dekker算法的程序正在目标机上运行,并且目标机正被多处理系统仿真,则会出现问题。Dekker算法应当被视作正在作为目标处理器201、202的处理器201、202上运行。
具体地,第一处理器201设置变量x,并且保证在其进入临界段之前另一个处理器202尚未设置其自身的变量y。第二处理器202设置y,并保证在其进入临界段之前x不被设置。存在若干方式,其中整个应用程序在被仿真于单处理器上时可以被执行,在图3中示出了2个这样的方式。如上所述,以顺序1执行P1,直到阶段发生改变,此时P2被仿真。于是在图3的2处理器顺序中,每当存在阶段变化时,仿真切换到另一个处理器,并且显然在一个处理器(例如P1)处于临界段时,另一个处理器(P2)不能进入临界段。
然而,一个处理器的临界段不可能与第二处理器的临界段交叉,因为这意味着,宿主处理器一次会看见(x=1;y=0),另一次会看见(x=0;y=1),而在之间没有出现写入的情况下。
图4图解了会导致图2的方法/Dekker算法出现不正确行为的情况。图4的系统400包含共享存储器410以及高速缓存420A、420B,其中高速缓存420A、420B分别为第一和第二处理器430A、430B提供。因此在图4的情况下,两个处理器可能会同时在临界段中执行,从而导致问题。
也就是说,假定目标系统具有保证这种情况从不发生的一致性模型(例如在向存储器存储之后等待,直到从其它处理器接收到确认)。这种系统的例子包含IBM系统/390和INTEL x86。
还假定为了相对快速地加以实现,宿主系统具有更加宽松的一致性模型,并且不保证针对存储器的写入的原子记录。因此当上述例子被这种宿主系统仿真时,会导致不正确行为。
类似PowerPC、具有这种宽松一致性模型的系统总是提供特殊同步指令或存储器屏蔽指令,所述指令保证所有处理器在看见以后指令的结果之前已经看见前述指令之前的存储器操作的结果。
于是,一种保证正确进行模拟的方式是在每个存储器指令之后跟随存储器屏蔽指令。不幸的是,这种指令需要若干周期才能完成。此外,存储器指令(例如针对存储器进行载入和存储)是相当频繁的(例如出现次数占所有指令的三分之一)。
因此期望找到上述问题的解决方案。此外,期望使在另一个多处理系统上仿真一个多处理系统的存储器一致性行为的成本最小,尤其当宿主多处理系统与目标多处理系统(更加严格或″更强″)相比支持″更弱″(更加宽松)的一致性模型时。应当注意,术语″更弱″(或″宽松″)和″强″是本领域普通技术人员众所周知的(例如参见Sarita Adve等人,″共享存储器一致性模型讲座(Shared Memory Consistency ModelsA Tutorial)″,IEEE计算机,vol.29,no.12,1996年12月,pp.66-76,和L.Lamport,″如何使多处理器计算机正确执行多进程程序(How to Make A MultiprocessorComputer That Correctly Executes Multiprocess Programs)″,IEEE计算机学报,C-28,1979年9月9日,pp.690-691)。
于是,在传统仿真方法和技术中,可以使用各种级别的转换来增强仿真器产生的宿主指令的性能。然而,虽然当前有各种技术可用,然而仍然存在很大的改进空间。
因此,在传统技术和本发明之前的技术中,尚没有在另一个系统上仿真一个系统的存储器一致性的方法和装置,尤其当宿主支持上述宽松一致性模型并且目标系统使用强一致性模型时。

发明内容
考虑到传统方法和结构的上述和其它问题、缺点和不足,本发明的一个目的是提供一种在宿主多处理系统支持宽松一致性模型,而目标多处理系统规定了强一致性模型时,在另一个多处理系统上有效仿真一个多处理系统的存储器一致性行为的方法和结构。
在本发明的第一方面,在多处理器系统中进行仿真的方法(和系统)包含执行仿真,其中多处理器系统的宿主多处理系统支持弱一致性模型,而多处理器系统的目标多处理系统支持强一致性模型。
在本发明的第二方面,在包含用于仿真目标多处理器计算系统的行为的仿真器的多处理器计算系统中,仿真目标多处理器计算系统的存储器一致性行为的方法包含在存储器操作之前执行存储器屏蔽指令,存储器屏蔽指令保证宿主计算系统中的所有处理器已经得到执行存储器屏蔽指令之前所执行的存储器操作的结果,其中所述多处理器计算系统的宿主计算系统支持弱一致性模型,多处理器系统的目标多处理系统支持强一致性模型。
在本发明的第三方面,高效仿真多处理器存储器一致性的方法(和系统)包含形成存储器屏蔽指令,所述存储器屏蔽指令保证宿主计算系统中的全部处理器已经寄存执行存储器屏蔽指令之前所执行的存储器操作,其中宿主多处理系统支持宽松一致性模型,目标多处理系统规定了强一致性模型。
在本发明的第四方面,保证多处理系统中存储器一致性的方法(和系统)包含确定指令是否载入指令或存储指令,如果确定指令是载入或存储指令,则解析指令地址并且确定该地址是否被存储在本地后援缓冲器(locallookaside buffer,LLB)中,如果该地址处于LLB中,则确定其所指的单元是否处于共享读状态,如果确定其所指的单元处于共享读状态,则确定当前地址是否进行写入,如果当前地址不进行写入,则执行指令仿真。
在本发明的第五方面,在多处理器系统中插入用于保持一组指令内的一致性的代码的方法(和系统)包含确定指令是否为载入或存储指令,如果确定指令是载入或存储指令,则解析地址,并且确定该地址是否处于本地后援缓冲器(LLB)中,如果该地址处于LLB中,则确定其所指的单元是否处于共享读状态,如果其所指的单元被确定处于共享读状态,则确定当前访问是否为写入,如果当前访问被确定为写入,则将该单元设置为共享写,并且确定当前访问是否为载入指令,如果确定当前访问为载入,则执行载入并且确定是否由存储器顺序缓冲器(MOB)表来满足载入,如果没有从MOB表满足载入,则向根据存储器序列号索引的MOB表插入对应记录。
在本发明的第六方面,在指令的成组执行结束时提交针对存储器的共享写入的方法(和系统)包含在转换结束时加入存根代码,存根代码进行检查以保证没有其它处理器改变一个块所访问的″共享写″单元的数值。
在本发明的第七方面,共享多处理器系统的存储引用表(SRT)包含所构造的表,该表含有数量与存储引用的数量一样多的记录,其中每个记录含有多个字段,包含地址字段和用于存储要恢复的初值的旧值字段,其中表存储有关记录的共享写入状态的信息。
在本发明的第八方面,用于共享多处理器系统的存储器顺序缓冲器(MOB)包含所维护的表,该表具有有关当前被引用的单元的共享信息,其中信息包含用于区分记录的特定状态是否包括共享写状态的信息。
在本发明的第九方面,在多处理器系统中进行仿真的系统包含用于执行仿真的仿真器,其中多处理器系统的宿主多处理系统支持弱一致性模型,而多处理器系统的目标多处理系统支持强一致性模型。
在本发明的第十方面,提供实际包含机器可读指令程序的信号承载介质,所述机器可读指令程序可被数字处理设备运行,以便实现多处理器系统中的仿真方法,该方法包含执行仿真,其中多处理器系统的宿主多处理系统支持弱一致性模型,而多处理器系统的目标多处理系统支持强一致性模型。
通过本发明独特和非显而易见的方面,通过在多处理系统上仿真的多个处理器可以高效地对临界段进行仿真。也就是说,本发明涉及对多个处理器进入临界段进行仿真,而这些临界段是同时为不同处理器而被仿真的。过去尚未遇到这种问题,因为通常在单处理器上执行仿真。在这点上,本发明人首先认识到这种问题,并且提出了独特和非显而易见的解决方案。
为了保证上述存储器一致性,在第一实施例中,本发明提供了一个存储器屏蔽指令,存储器屏蔽指令保证在执行存储器屏蔽指令之前已经执行的存储器操作已经被宿主机中的全部处理器访问(例如寄存)。这保证实现存储器一致性,因为处理器有机会寄存这种存储器操作。
应当注意,本发明主要针对″共享写入″状态。


通过下面结合附图对优选实施例进行的详细说明可以更好地理解本发明的上述和其它目的、特性和优点,其中图1图解了多处理器系统的单处理器仿真中的阶段101;图2图解了在第一和第二处理器201、202运行的程序中实现的Dekker算法的例子;图3针对图2中的程序图解了单处理器上的仿真的2个样本顺序的例子;图4图解了系统400中会导致图2的算法出现不正确行为的情况;图5图解了全局页表记录500中的读/写屏蔽字段570;图6图解了用于确定页面的共享状态的过程600;图7图解了描述页面的共享存储器状态之间的转换的部分状态机700;图8图解了存储器屏蔽指令的插入过程800;图9图解了存储器顺序缓冲器(MOB)900;图10图解了共享存储器访问到图9的存储器顺序缓冲器900的映射1000;图11图解了保存针对存储引用表(SRT)1110的存储以便进行恢复的过程1100;图12图解了使用MOB 900和SRT 1110为保持一组指令内的一致性而插入代码的过程1200;图13图解了在成组执行结束时提交针对存储器的共享写入的过程1300;图14图解了包含本发明的示例性硬件/信息处理系统1400;而图15图解了信号承载介质1500(例如存储介质),用于存储根据本发明的方法的程序步骤。
具体实施例方式
现在参照附图,尤其参照图5-15,其中示出了根据本发明的方法和结构的优选实施例。
优选实施例为了便于讨论,假定目标多处理系统支持顺序一致性。这是一个比多数已知系统支持的一致性形式更强的一致性形式。Lamport定义了顺序一致性( L.Lamport,″如何得到正确执行多进程程序的多处理器计算机(How to Make a Multiprocessor Computer That Correctly ExecutesMultiprocess Programs)″,IEEE计算机学报,C-28,1979年9月9日,pp.690-691),该定义表明任何执行的结果均与按照某种顺序次序执行所有处理器的操作的结果相同,并且每个单个处理器的操作按照其程序指定的顺序出现。
还假定宿主多处理系统支持弱一致性(在上述Adve等人的文章中定义的RCsc),但是具有存储器一致性(例如,存储器一致性表明从任何处理器的角度观察,对单独单元进行的改变的顺序是相同的)。
另外,假定存在存储器屏蔽指令mbar,该存储器屏蔽指令被用来保证在所有处理器看见(例如寄存)了屏蔽之前的所有存储器操作之后,执行屏蔽之后的所有存储器操作。
通过在每个访问存储器的指令之后跟随mbar指令,可以保证顺序一致性。如前所述,同步指令通常占用多个周期,因此如果可能应当避免它。
注意到的第一点是存储器单元没有全部在处理器之间共享。于是,如果可以明确确定指定单元是否被共享,则会大大降低保持顺序一致性的成本。
在高速缓存系统的仿真的情况下,还不足以了解转换期间的共享行为,因为(a)指令所引用的地址在每次转换执行时会发生改变,并且(b)在执行过程中地址会改变其共享状态。下面描述了动态确定单元的共享性质的机构。
最好使用关于当前被引用的单元的共享信息维护一个表。为了降低表的尺寸,单元被组合在一起。一个方便的组合是页面单元,尽管可以定义其它可能较小的单元。页面单元是方便的,因为页面单元也是在页表和本地后援缓冲器(LLB)中受保护和映射信息的单元,其中在上述美国专利申请No.10/_,_中描述了本地后援缓冲器(LLB),这里参考引用了该专利申请,其IBM Docket No.为YOR920010535US1。每个页面处于下述5个状态中的一个1.未映射2.独占读取3.独占写入4.共享读取5.共享写入在页面被换入之前,或者在其被换出页表之后,该页面会处于″未映射″状态。当某个处理器请求读取或写入页面时,该页面被换入。因此,页面以″独占读取″或″独占写入″的状态进入页表。
与每个页表记录相关的是一列处理器,所述处理器将页面列在其本地后援缓冲器(LLB)中,其中在上述美国专利申请No.10/_,_中描述了本地后援缓冲器(LLB),这里参考引用了该专利申请,其IBM Docket No.为YOR920010535US1。
这种信息处于后援屏蔽字段中,其中例如第五个单元上的1指示第五个处理器在其LLB中具有这个页面。如图5的表500所示,修改这个描述以便包含有关页面是被读模式的处理器访问还是被写模式的处理器访问的信息。
表500包含有效/状态位字段510,进程标识字段520,虚拟地址字段530,实地址字段540,保护位字段550,后援屏蔽字段560,读/写屏蔽字段570和访问模式字段580。
在以后某个时间,如果处理器希望访问不在其LLB中,但在页表500中被映射的页面,则该处理器被加入此列表(例如在处理器ID字段520上),并且规定其访问模式(例如字段580)。
这时,如果所有访问该页面的处理器仅在读模式下对其进行访问,则页面状态被改变成″共享读取″。如果有一个处理器对该页面进行写入访问,则该页面被设置成″共享写入″模式。图6的流程图描述了这个过程。
于是如上所述,可以想到,页面具有″共享写入″状态的原因是本发明必须考虑的主要因素。
此外,如上所述,本发明作出某些示例性假设,例如目标系统支持″顺序一致性″(″强″),而宿主机支持″弱″一致性,等等。
然而这只是示例性的,本发明当然不限于此。实际上应当注意,本发明支持若干种不同的″强″、″弱″一致性组合和排列。然而发明人认识到,最困难的情况是″弱″环境中的″强″一致性,这里主要讨论该情况。其它情况(例如″强″上″强″,″弱″上″弱″,″弱″上″强″等等)与此类似,但更加容易。
也就是说,在支持″弱″一致性的系统上仿真具有″强″一致性的系统是最困难的仿真。作为说明该情况为何是最困难情况的简单例子,考虑黑板,其中不同的人正向黑板写入。在″强″一致性的情况下,当一个人正读取时,此人应当能够看见每个其它人已经写入的任何内容。类似地,当另一个人正写入时,此人保证在其开始写入之前其它人已经完成写入。这被称作″强″一致性,其中在读写黑板时保持强顺序。
在″弱″一致性(或″放松″一致性)的情况下,允许每个人在其希望时进行读写。在这点上,此人不需保证在其改变黑板内容前其它人已经进行读取(或写入)。在这种情况下,某个″教师″(例如在某些情况下的某个程序)负责保证在此人需要读取黑板时,此人事实上已经在另一个人开始再次向黑板回写(例如改变其写入的内容)之前完成读取。这是更加混乱的情况,因为人们不断进行读取和写入。当前许多传统处理器便使用这种″弱″一致性模型,因为″弱″一致性模型允许处理器具有比共享时的速度更快的速度。于是,从性能的角度看,当不存在较多的共享时,″弱″一致性模型是更优的模型。
因此,某些新机器正实现这种模型和操作模式。相反,更老的传统机器实现的是强一致性,其中操作是顺序的(逐个步骤的)。
于是,如人们预期的,非常难以采用非常有序的操作模式(″强″)并将其应用于相对混乱的操作(例如″弱″)。相反,采取非常混乱的操作模式(″弱″)并将其应用于有序操作(例如″强″)则较容易,因为这种情况会简单地提供更强的顺序。
于是,″共享写入″状态是核心问题。当页面被换入系统时,系统希望确定页面具有的状态。如表500中的读/写屏蔽字段570所确定和示出的,当页面具有″共享写入″状态时,标记这种状态。也就是说,读/写屏蔽允许识别页面是否具有″共享写入″状态。应当注意,访问模式字段580不是图5的表500中实际存在的字段。该字段的示出仅仅是为了使读者能够清楚和理解,并且仅仅描述到,通过查看后援屏蔽560和读/写屏蔽570的组合,可以确定共享写状态。
因此返回到图6,方法600涉及用于确定页面的共享状态的过程。也就是说,图6示出了一种技术,该技术通过主要查看后援屏蔽和读/写屏蔽,并且确定位单元等等以得到状态,从而确定表500中的最后列(例如字段580)。
更具体地,在步骤610中,确定后援屏蔽是否使不止一个位被置位。
如果在步骤610确定后援屏蔽使不止一个位被置位(例如″是″),则在步骤620确定读/写屏蔽是否使任何位被置位。
如果在步骤620确定读/写屏蔽使位被置位(例如″是″),则在步骤630将状态设置成″共享写入″。
如果在步骤620确定读/写屏蔽不使任何位被置位(例如″否″),则在步骤640将状态设置成″共享读取″。
如果在步骤610确定后援屏蔽不使不止一个位被置位(例如″否″),则在步骤650确定读/写屏蔽是否使任何位被置位。
如果在步骤650确定读/写屏蔽使一位或多位被置位(例如″是″),则在步骤660将状态设置成″独占写入″。
如果在步骤650确定读/写屏蔽不使任何位被置位(例如″否″),则在步骤670将状态设置成″独占读取″。接着过程终止。
在图7的部分状态机700中描述了各种共享存储器页面状态之间的可能转换。各种存储器状态包含″未映射″710,″独占读取″720,″独占写入″730,″共享读取″740和″共享写入″750。在图7中,″LR″是本地读取,″LW″是本地写入,″RR″ 是远程读取,″RW″是远程写入,″D″指示从某个LLB降级的页面,而″PO″指示被换出的页面。应当注意,当其被换出系统时,页面可以返回到″未映射″状态。
即使″共享写入″最吸引人,然而图7表明还需要其它状态(例如,其重要性使得有必要标出),以作为进入″共享写入″状态的方式。于是,在有限状态机700中,为了进入共享写状态,页面可以处于其它状态中的一个,并且示出到达共享写状态的路径。因此,在部分状态机700中标出这种其它状态。
只要单元当前未被写入,则不存在存储一致性问题。也就是说,仅当单元改变其内容时才出现存储一致性问题。假定在任意指定时间点上,指定目标处理器的执行均在一个确切的宿主处理器上进行,虽然执行仿真的确切宿主处理器在不同时间可能有所不同。
例如,2个独立处理器同时获取目标指令的操作数的方式是不被接受的。还假定,如在公共多道程序系统中那样,上下文切换与隐式或显式存储器屏蔽相关。这保证只要一个单元不被共享,则就不存在一致性问题,即使被仿真的目标处理器操作从一个宿主处理器转移到另一个宿主处理器也是如此。
上述假设将一致性问题限制到针对处于″共享写入″状态的页面进行的那些访问。于是,只需要在每个这样的访问之后跟随mbar指令。
在图8的流程图中描述了当一次一个地仿真指令时保证顺序一致性的过程。
也就是说,图8图解了保证存储器一致性的方法800,尤其涉及存储器屏蔽指令的插入。
首先在步骤805确定指令是否为载入或存储指令。由于载入和存储是影响存储器的主要指令,本发明不必关心其它指令。
如果在步骤805确定该指令不是载入或存储指令(例如″否″),则处理前进到步骤840,其中进行指令仿真,并且接着过程在步骤870完成。
出于同样原因,如果在步骤805确定指令是载入或存储指令(例如″是″),则处理前进到步骤810,其中对地址进行解析。例如,载入/存储指令通常需要将指令指定的2个数量相加以产生地址。这些数量或者驻留在指定寄存器中,或者其中的一个数量是指令自身的字段。地址解析意味着指定寄存器准备好其内容,已经执行了加法,并且已经调用地址转换机构将所得到的和数转换成实地址。因此,″解析地址″会将虚拟地址转换成实地址(例如加上位移,虚拟地址转换等等)。
在步骤815确定地址是否处于本地后援缓冲器(LLB)中。如果地址不在LLB中(例如″否″),则在步骤820启动用于处理LLB命中失误的过程(例如访问全局页表等等),并且接着过程循环回到步骤815。
如果地址处于LLB中(例如″否″),则在步骤825确定单元(例如地址)是否处于共享读状态。
如果在步骤825确定单元(例如地址)处于共享读状态(例如″是″),则过程继续执行步骤830,其中确定当前访问是否为写入。如果不是写入(例如″否″),则在步骤840执行指令仿真,并且过程在步骤870结束。
如果在步骤830确定当前访问为写入(例如″是″),则在步骤845将单元设置成共享写,并且在步骤850执行指令仿真,在步骤860放入mbar指令。过程接着在步骤870结束。
出于同样原因,如果在步骤825确定单元(例如地址)不处于共享读状态(例如″否″),则过程继续执行步骤835,其中确定单元(例如当前地址)是否为共享写。
如果在步骤835确定单元(地址)为共享写状态,过程继续执行步骤850,其中执行指令仿真,并且在步骤860放入mbar指令。过程接着在步骤870结束。
于是,图8在步骤830/835基本上示出了2个可能性,其中地址为共享写,或者指令转换成共享写,这取决于其来源。并且如图7所示,存在某些情况,其中不处于共享写但可以转换成共享写的指令取决于所采取的路径。例如如图7所示,″独占读取″状态720具有通过本地写入(LW)或远程写入(RW)到达″共享写入″状态750的路径。因此,共享写指令和可以转换成共享写的指令(例如转换成写入(本地或远程)的共享读取740等等)需要mbar指令。并且,在共享读取状态740中,在LW之后发出RW,接着会插入mbar。在转换成共享写的情况下会以类似方式执行mbar的其它插入。
根据目标系统(放松一致性)的操作之间允许的重新排序范围,可以进一步减少存储器屏蔽指令的数量。
例如,在System/390中,不需要在单指令的操作数读取之间保持次序。因此,可以省略System/390的仿真中这样的读取之间的mbar插入,从而保持在第二次读取之后有一个mbar。
另外,因为指令写入的结果取决于指令读取的操作数,可以省略390指令中从存储器读取操作数和向存储器写入结果之间的mbar,从而保持写入之后有一个mbar。
上述讨论假定仿真的存储器引用的程序顺序与目标系统已经执行的存储器引用的程序顺序相同。如前面若干已知例子(例如,参见美国专利No.6,031,992,这里参考引用了该专利)中所讨论的,通过考虑被一起转换的指令组,并且通过对转换的指令组执行优化,经常可以改进仿真性能。
然而这种优化往往会移动指令并且对其进行重新排序,以求找到该指令组的最优调度。当在多处理器环境中执行时,这种重新排序会违反一致性要求,即使每个仿真的引用后面跟有mbar指令也是如此。
参照图9,本发明现在提供一种方案,其中当存在这种重新排序时,该方案保持仿真期间的存储器操作所需的一致性。也就是说,图9涉及这样的情况,其中存在将被一起转换的指令组,该情况不同于图8中逐个转换指令的情况。应当注意,如果按组或逐个地转换指令,可以出现上述情况的组合。因此,在按组的情况下,可能具有引用的组合,其中一些引用是共享写,而另一些不是共享写。
为了简单,假定初始指令序列是具有单个入口和多个出口的顺序指令流,其中每个出口对应于转出被转换序列的条件分支。
还假定这个序列中的每个指令最多执行一次(即,不存在循环回到转换内的另一个指令的分支)。最终假定目标指令集中的存储器引用只能是寄存器和存储器之间的载入和存储。(这个最后假设不是限制性的,因为更加复杂的CISC指令可以被分散为包含这种载入和存储指令的适当指令序列。)在图9中,首先将存根代码附加到转换的开始处,以便保存可能被组中的指令改变的目标处理器的所有寄存器。如果需要消除指令组的假想转换,这个检查点是有利的。
接着,指令组中的每个载入和每个存储与2个编号相关,这2个编号包含(a)指示其在存储器引用序列中的单元的存储器序列号,和(b)指示其在存储引用子集序列中的单元的存储序列号。
接着如图9所示,构造被称作存储器顺序缓冲器(MOB)的表900,其中每个记录具有4个字段,包含有关其是否载入或存储的字段910,引用地址920,引用长度930和与引用相关的数值930(在载入的情况下,为加载或假定的数值,而在存储的情况下,为被存储在存储器中的数值)。于是,查看表900中载入/存储的数量,3个引用为共享写,而2个引用不是共享写。
表中记录的数量等于序列中存储器引用的数量。图10示出了目标代码1010,仿真代码1020和图9的表900。也就是说,如图10的结构1000所示,存储器引用的序列号是针对表900的索引。因此,共享存储器访问被映射到图9的MOB。
另外如图11的结构1100所示,构造存储恢复表(SRT)1110,存储恢复表含有的记录的数量与存储引用的数量一样多,其中每个记录含有2个字段,包含图11所示的地址字段和旧值字段。于是在图11中,存储被保存到SRT 1110以用于恢复。表1110是有用的,例如在发生问题时。
例如,当某人针对另一个人已经读取的单元进行写入,并且已经写入的内容是″新″内容(不是″旧″内容)时,会出现问题。结果,全部计算都是错误的。在这种情况下,将数值设回原值会是有用的。此外,某些计算可能已经实际存储到存储器,并且期望将那些单元复位回到前面的数值(例如回到其原始内容)。因此,使用表1110是有用的,因为它存储了用于消除问题的地址和数值。
更具体地,系统检测问题,并且现在必须返回并将数值恢复到为正确数值时的数值。通过循环返回并一次一个地遍历每个存储(例如最好在最后的检查点之后首先执行最后一个,等等),并且确定单元和旧数值,来执行这种操作。接着向其插入旧数值。
在每个存储器引用的转换中,引入具有图12示出的形式的代码。
也就是说,在图12的方法1200中,通过使用MOB 900和SRT 1110,插入代码以保持指令组内的一致性。
具体地,首先在步骤1205确定指令是否载入或存储指令。由于载入和存储是影响存储器的主要指令,本发明不必关心其它指令。
如果在步骤1205确定该指令不是载入或存储指令(例如″否″),则处理前进到步骤1240,其中进行指令仿真,并且接着过程在步骤1290完成。
出于同样原因,如果在步骤1205确定指令是载入或存储指令(例如″是″),则处理前进到步骤1210,其中对地址进行解析。这个步骤类似于前面参照图8描述的步骤810。
在步骤1215确定地址是否处于本地后援缓冲器(LLB)中。如果地址不在LLB中(例如″否″),则在步骤1220启动用于处理LLB命中失误的过程(例如访问全局页表等等),并且接着过程循环回到步骤1215。
如果地址处于LLB中(例如″否″),则在步骤1225确定单元(例如地址)是否处于共享读状态。
如果在步骤1225确定单元(例如地址)处于共享读状态(例如″是″),则过程继续执行步骤1230,其中确定当前访问是否为写入。如果不是写入(例如″否″),则在步骤1240执行指令仿真,并且过程在步骤1290结束。
如果在步骤1230确定当前访问是写入(例如″是″),则在步骤1245将单元设置成共享写,并且在步骤1250确定当前访问是否为载入指令。
如果在步骤1250确定当前访问为载入(例如″是″),则在步骤1255执行载入,并且确定是否从MOB满足载入(例如先前是否在MOB中出现载入/地址?)。如果满足载入,则操作在步骤1270终止。如果在步骤1255确定没有从MOB满足载入(例如″否″),则过程继续到步骤1260。在步骤1260中,记录被插入到按照存储器序列号索引的MOB中,并且过程在步骤1290终止。
如果在步骤1250确定当前访问不是载入(例如″否″),则在步骤1260向按照存储器序列号索引的MOB插入记录,并且过程在步骤1290终止。
出于同样原因,返回到步骤1235,如果确定单元(例如地址)不处于共享写状态(例如″否″),则过程继续执行步骤1265,其中判断访问是否为写入。
如果在步骤1265确定访问不是写入(例如″否″),则过程继续执行步骤1240,其中执行指令仿真,并且过程在步骤1290结束。
出于同样原因,如果在步骤1265确定访问是写入(例如″是″),则过程继续到步骤1270,此时读取该单元的旧数值。接着,在步骤1275执行存储,并且在步骤1280向按照存储序列号索引的SRT插入旧数值。此后,过程在步骤1290终止。
于是如图12所示,这个代码确定对应于被引用单元的页面是否为″共享写″,如果是,则分支转移到存根代码。
这个存根代码使用存储器引用的序列号索引MOB,并且记录(a)其是否为载入或存储,以及(b)引用的地址。如果引用为存储,则还记录要存储的数值。如果为载入,则执行载入并且接着记录加载的数值。
对于针对共享写单元(该单元曾经是转换中前面的存储的目标)的载入,存在特殊情况。在这种情况下,载入应当从MOB接收其内容,而载入本身不被记录在MOB中。
如果引用不针对″共享写″单元,并且如果它是存储,则在执行存储之前,单元的旧数值被读取和记录在SRT中。
应当注意,在其余转换过程中可以对这个存根代码进行优化和重新排序。在转换结束时,加入另一个存根,该存根进行检查以保证没有其它处理器针对这个块访问的″共享写″单元改变数值。
如图13所示,通过首先锁定共享存储器单元以防其它处理器访问,可实现此操作。每个载入单元被重新加载,并且与对应MOB记录中存储的数值相比较。如果发现所有重新加载与初始载入相同,则从MOB向其在存储器中的实际单元提交所有存储是安全的。
如果在载入验证过程期间发生失配,则取消该组的整个执行。通过将所有寄存器恢复到其旧状态,并且在SRT中进行撤消操作以撤消针对非″共享写″单元进行的存储,可达到这个目的。一旦系统回到其先前的有效状态,则重新尝试执行。为了避免指令组内的重复执行-取消循环,可以使用解释模式或简单转换模式一次一个地重新执行。
因此,图13图解了计算结束,于是在一起转换指令组和执行指令之后、向存储器保存每记录内容之前,期望保证在执行计算的同时没有发生任何改变。也就是说,其它处理器在指令组的执行期间可能进行了改变,而本发明希望保证这种改变不影响当前被仿真的处理器的数值/指令。
于是,现在逐个步骤地查看图13中用于在指令组执行结束时向存储器提交共享写入的过程1300,首先在步骤1305锁定对共享存储器单元的访问。
接着在步骤1310将指针设置到MOB中的第一个记录,并且在步骤1315确定是否已经到达MOB的结束处。应当注意,步骤1315之后过程的左边涉及载入,而步骤1315之后过程的右边涉及存储。
如果步骤1315的结果为″否″,则在步骤1320确定MOB中的记录是否为空。(如果步骤1315中的结果为″是″,则处理前进到步骤1340)。
接着在步骤1325确定记录是否为载入。如果步骤1325中的结果为″否″,则在步骤1340递增针对MOB的指针,并且循环回到步骤1315。
出于同样原因,如果在步骤1325确定记录为载入(例如″是″),则在步骤1330从记录中的地址重新加载记录。在步骤1335确定重新加载的数值是否与记录中的数值匹配。
如果步骤1335中的结果为″是″,则在步骤1340递增针对MOB的指针,并且循环回到步骤1315。
如果在步骤1335的结果为″否″,则在步骤1345释放锁,并且接着在步骤1350通过恢复状态并使用SRT恢复非共享写入,从而恢复到指令组的开始处。此时,仿真的程序计数器被复位到指令组的开始处,并且重新尝试执行过程。
出于同样原因,如果在步骤1315的结果为″是″,则过程前进到步骤1355,此时指针被设置到MOB中的第一个记录。在步骤1360确定是否到达MOB的结束处。
如果为″否″,则在步骤1365确定MOB中的记录是否为空。(如果步骤1365中的结果为″是″,则处理前进到步骤1380)。
接着在步骤1370确定MOB中的记录是否为存储。如果记录为存储(例如″是″),则在步骤1375将数值写入存储器,并且在步骤1380在MOB中递增指针,接着过程循环回到步骤1360。
如果步骤1370的结果为″否″,则过程继续到步骤1380,并且接着循环回到步骤1360。如果在步骤1360结果为″是″,则在步骤1385释放锁,并且过程在步骤1390完成。
于是如上所述,本发明可以逐个遍历指令,或者使用MOB和SRT处理指令组。
图14图解了用于本发明的信息处理/计算机系统的典型硬件结构,该系统最好具有至少一个处理器或中央处理单元(CPU)1411。
CPU 1411通过系统总线1412互连到随机访问存储器(RAM)1414,只读存储器(ROM)1416,输入/输出(I/O)适配器1418(用于将诸如磁盘单元1421和磁带驱动器1440的外部设备连接到总线1412),用户接口适配器1422(用于将键盘1424,鼠标1426,扬声器1428,话筒1432和/或其它用户接口设备连接到总线1412),用于将信息处理系统连接到数据处理网络,互联网,内部网,个人局域网(PAN)等等的通信适配器1434,和用于将总线1412连接到显示设备1438和/或打印机1439(例如数字打印机等等)的显示适配器1436。
除了如上所述的硬件/软件环境之外,本发明的不同方面包含用于执行上述方法的计算机实现方法。作为一个例子,可以在上述特定环境中实现这个方法。
例如可以通过诸如数字数据处理设备的计算机实现这种方法,以执行机器可读指令序列。这些指令可以驻留在各种信号承载介质中。
于是,本发明的这个方面涉及编程产品,包括信号承载介质,所述信号承载介质实际含有可被引入CPU 1411和上述硬件的数字数据处理器运行以便执行本发明的方法的机器可读指令程序。
这个信号承载介质可以包含CPU 1411内的RAM,例如快速存取存储器。可选地,指令可以被包含在另一个信号承载介质(例如磁性数据存储盘1500(图15))中,可被CPU 1411直接或间接访问。
无论是包含在磁盘1500、计算机/CPU 1411或其它地方,指令可以被存储在各种机器可读数据存储介质中,例如DASD存储器(例如传统″硬盘驱动器″或RAID阵列),磁带,电子只读存储器(例如ROM、EPROM或EEPROM),光学存储装置(例如CD-ROM,WORM,DVD,数字光带等等),纸张″穿孔″卡或其它适当的信号承载介质,包含诸如数字和模拟通信链路和无线通信链路的传输介质。在本发明的图解实施例中,机器可读指令可以包括从诸如″C″等等的语言编译而成的软件对象代码。
通过本发明独特和非显而易见的方面,通过多处理系统上仿真的多个处理器可以高效地对临界段进行仿真。也就是说,本发明可以对多个处理器进入临界段进行仿真,而这些临界段是同时为不同处理器而被仿真的。过去尚未遇到这种问题,因为通常在单处理器上执行仿真。在这点上,本发明人首先认识到这种问题,并且提出了如上所述的独特和非显而易见的解决方案。此外,本发明可以保证上述存储器一致性。
虽然前面根据若干优选实施例描述了本发明,然而本领域的技术人员会认识到,可以通过包含在所附权利要求书的宗旨和范围内的修改实施本发明。
此外应当注意,申请人的意图是涵盖所有权利要求的等价表述,即使以后在审查期间有所修改。
权利要求
1.一种多处理器系统中的仿真方法,包括执行仿真,其中所述多处理器系统的宿主多处理系统支持弱一致性模型,而多处理器系统的目标多处理系统支持强一致性模型。
2.如权利要求1所述的方法,还包括确定页面的共享状态,所述确定包括确定查找表中的后援屏蔽是否有不止一个位被置位;如果确定后援屏蔽有不止一个位被置位,则确定查找表中的读/写屏蔽字段是否有任意位被置位;如果确定读/写屏蔽有任意位被置位,则将状态设置为″共享写入″;和如果确定读/写屏蔽没有任何位被置位,则将状态设置为″共享读取″。
3.如权利要求2所述的方法,其中所述确定还包括如果确定后援屏蔽没有不止一个位被置位,则确定查找表中的读/写屏蔽字段是否有任意位被置位;和如果确定读/写屏蔽有一位或多位被置位,则将状态设置为″独占写入″。
4.如权利要求2所述的方法,其中所述确定还包括如果确定读/写屏蔽没有任何位被置位,则将状态设置为″独占读取″。
5.如权利要求1所述的方法,其中还包括提供包含关于当前被引用的单元的共享信息的表。
6.如权利要求5所述的方法,其中所述表后援屏蔽字段和读/写屏蔽字段,并且包含有关页面是被读模式的处理器访问还是被写模式的处理器访问的信息。
7.如权利要求6所述的方法,还包括当页面被换入系统时,确定页面具有的状态,其中当页面具有共享写状态时,标记这种状态。
8.如权利要求6所述的方法,其中所述表包括查找表,所述方法还包括确定页面的共享状态,所述确定包括确定所述查找表中的所述后援屏蔽是否有不止一个位被置位;如果确定后援屏蔽有不止一个位被置位,则确定表中的读/写屏蔽字段是否有任意位被置位;如果确定读/写屏蔽有任意位被置位,则将状态设置为″共享写入″;和如果确定读/写屏蔽没有任何位被置位,则将状态设置为″共享读取″。
9.如权利要求8所述的方法,其中所述确定还包括如果确定后援屏蔽没有不止一个位被置位,则确定查找表中的读/写屏蔽字段是否有任意位被置位;如果确定读/写屏蔽有一位或多位被置位,则将状态设置为″独占写入″;如果确定读/写屏蔽没有任何位被置位,则将状态设置为″独占读取″;和当一次一个地仿真指令时,保证顺序一致性。
10.多处理器计算系统中用于仿真目标多处理器计算系统的存储器一致性行为的方法,所述多处理器计算系统包含用于仿真目标多处理器计算系统的行为的仿真器,所述方法包括在存储器操作之前执行存储器屏蔽指令,存储器屏蔽指令保证宿主计算系统中的所有处理器已经得到执行存储器屏蔽指令之前所执行的存储器操作的结果,其中所述多处理器计算系统的所述宿主计算系统支持弱一致性模型,而多处理器计算系统的目标多处理器系统支持强一致性模型。
11.如权利要求10所述的方法,其中在访问被识别为具有特定状态的存储器单元之后,立即执行在存储器操作之前执行的存储器屏蔽指令。
12.如权利要求11所述的方法,其中所述特定状态包括共享写状态。
13.如权利要求10所述的方法,还包含如果来自目标多处理器计算系统的指令组中的指令在被转换到宿主机时被重新排序,保证存储器一致性。
14.用于多处理器存储器一致性的高效仿真的方法,包括构成存储器屏蔽指令,存储器屏蔽指令保证多处理器系统的宿主计算系统中的全部处理器已经寄存了执行存储器屏蔽指令之前已经执行的存储器操作,其中宿主计算系统支持宽松一致性模型,而所述多处理器系统的目标计算系统规定强一致性模型。
15.如权利要求14所述的方法,其中宿主计算系统支持具有存储器一致性的所述宽松一致性模型。
16.如权利要求14所述的方法,其中存储器屏蔽指令保证,在所有处理器寄存的屏蔽指令之前的所有存储器操作之后,执行屏蔽指令之后的所有存储器操作。
17.如权利要求14所述的方法,还包括提供使用关于当前被所述目标计算系统和所述宿主计算系统引用的单元的共享信息维护的表。
18.如权利要求17所述的方法,其中所述表包含后援屏蔽字段和读/写屏蔽字段,并且包含有关页面是被读模式的处理器访问还是被写模式的处理器访问的信息。
19.如权利要求14所述的方法,还包括当页面被换入系统时,确定页面具有的状态,其中当页面具有共享写状态时,标记这种状态。
20.如权利要求14所述的方法,还包括确定页面的共享状态,所述确定包括确定查找表中的后援屏蔽是否有不止一个位被置位;如果确定后援屏蔽有不止一个位被置位,则确定表中的读/写屏蔽字段是否有任意位被置位;如果确定读/写屏蔽有任意位被置位,则将状态设置为″共享写入″;和如果确定读/写屏蔽没有任何位被置位,则将状态设置为″共享读取″。
21.如权利要求19所述的方法,其中所述确定还包括如果确定后援屏蔽没有不止一个位被置位,则确定查找表中的读/写屏蔽字段是否有任意位被置位;和如果确定读/写屏蔽有一位或多位被置位,则将状态设置为″独占写入″。
22.如权利要求21所述的方法,其中所述确定还包括如果确定读/写屏蔽没有任何位被置位,则将状态设置为″独占读取″。
23.如权利要求14所述的方法,还包括当一次一个地仿真指令时,保证顺序一致性。
24.一种保证多处理系统中存储器一致性的方法,包括确定指令是否为载入或存储;如果确定指令是载入或存储,则解析上述指令的地址,并且确定该地址是否被存储在本地后援缓冲器(LLB)中;如果地址处于LLB中,则确定单元是否处于共享读状态;和如果确定单元处于共享读状态,则确定当前地址是否为写入,其中如果当前地址不是写入,则执行指令的仿真。
25.如权利要求24所述的方法,其中如果地址未存储在LLB中,则启动用于处理LLB命中失误的过程,所述方法还包括如果确定当前访问为写入,则将单元设置为共享写,并且仿真指令,以及放入存储器屏蔽指令。
26.如权利要求25所述的方法,还包括如果确定单元不处于共享读状态,则确定单元是否为共享写;如果确定单元为共享写状态,则仿真指令,并且放入存储器屏蔽指令。
27.如权利要求24所述的方法,还包括确定地址是否为共享写,或指令是否变成共享写;和放入针对共享写指令和可能转换成共享写的指令的存储器屏蔽指令。
28.如权利要求24所述的方法,还包括重新排序指令操作以使存储器屏蔽指令数量最小。
29.如权利要求28所述的方法,还包括提供存储器顺序缓冲器(MOB),用于当存在所述重新排序时在仿真期间保持存储器操作中所需的一致性。
30.如权利要求28所述的方法,还包括当指令组将被一起转换时,将存根代码附加到转换的开始处,以便保存可能被组中的指令改变的目标处理器的所有寄存器;和使指令组中的每个载入和每个存储与存储器序列号和存储序列号相关,其中存储器序列号指示其在存储器引用序列中的单元,存储序列号指示其在存储引用子集序列中的单元。
31.如权利要求30所述的方法,还包括构造存储器顺序缓冲器(MOB)表,其中每个记录具有多个字段,包含其是否为载入或存储,引用地址,引用长度和与引用相关的数值,其中表中记录的数量等于序列中存储器引用的数量;和将共享存储器访问映射到MOB表。
32.如权利要求31所述的方法,还包括构造存储恢复表(SRT),存储恢复表包含的记录的数量与存储引用的数量一样多,其中每个记录含有多个字段,包含地址字段和旧值字段,其中存储被保存到SRT以用于恢复,当确定单元的当前数值不正确并且需要正确数值时访问SRT,通过一次一个地循环返回遍历每个存储,确定单元和旧数值,以及插入旧数值,由SRT执行校正操作。
33.多处理器系统中插入用于保持指令组内一致性的代码的方法,包括确定指令是否为载入或存储;如果确定指令是载入或存储,则解析上述指令的地址,并且确定地址是否处于本地后援缓冲器(LLB)中;如果地址处于LLB中,则确定单元是否处于共享读状态;如果确定单元处于共享读状态,则确定当前访问是否为写入;如果确定当前访问为写入,则将单元为设置为共享写,并且确定当前访问是否为载入指令;如果确定当前访问为载入,则执行载入,并且确定是否从存储器顺序缓冲器(MOB)表满足载入;和如果不从MOB表满足载入,则向按照存储器序列号索引的MOB表插入对应记录。
34.如权利要求33所述的方法,还包括如果确定当前访问不是载入,则向按照存储器序列号索引的MOB表插入记录。
35.如权利要求34所述的方法,还包括如果确定单元不处于共享写状态,则确定访问是否为写入;和如果确定访问不为写入,则仿真指令。
36.如权利要求35所述的方法,其中如果确定访问为写入,则读取该单元的旧数值,执行存储,并且将旧数值插入按照存储序列号索引的存储引用表(SRT)。
37.如权利要求33所述的方法,还包括确定对应于被引用单元的页面是否为″共享写″,如果是,则分支转移到存根代码,其中所述存根代码使用存储器引用的序列号索引存储器顺序缓冲器(MOB),并且记录其是否为载入或存储,以及存储器引用的地址,其中如果存储器引用为存储,则记录要存储的数值,并且如果其为载入,则执行载入,并且记录加载的数值。
38.如权利要求37所述的方法,其中当载入所针对的是曾经作为转换中前面的存储的目标的共享写单元时,载入从MOB接收其内容,并且载入不被记录在MOB中,其中如果引用不针对″共享写″单元,并且如果它是存储,则在执行存储之前,单元的旧数值被读取和记录在SRT中。
39.在指令的成组执行结束时向存储器提交共享写入的方法,包括在转换结束时,加入存根代码,该存根代码进行检查以保证没有多处理器系统的其它处理器针对一个块访问的″共享写″单元改变数值。
40.如权利要求39所述的方法,还包括锁定共享存储器单元以防止其它处理器访问;和重新加载每个载入单元,并且将其与对应存储器顺序缓冲器(MOB)记录中存储的数值相比较,其中如果确定所有重新加载与初始载入相同,则针对其在存储器中的实际单元进行来自MOB的所有存储。
41.如权利要求39所述的方法,还包括如果在载入验证过程期间发生失配,通过将所有寄存器恢复到其旧状态,并且在存储恢复表(SRT)中进行撤消操作以撤消针对非″共享写″单元进行的存储,从而取消指令组的整个执行。
42.如权利要求41所述的方法,还包括在使系统回到其先前的有效状态,重新尝试执行。
43.如权利要求39所述的方法,还包括锁定对共享存储器单元的访问;将指针设置到存储器顺序缓冲器(MOB)中的第一个记录,并且确定是否已经到达MOB的结束处;如果尚未到达结束处,则确定MOB中的记录是否为空;和如果确定记录不是载入,则递增针对MOB的指针。
44.如权利要求43所述的方法,还包括如果确定记录为载入,则从记录中的地址重新加载记录;确定重新加载的数值是否与记录中的数值匹配;如果数值匹配,则递增针对MOB的指针;如果数值不匹配,则释放锁,并且通过恢复状态和使用存储恢复表(SRT)恢复非共享写入,恢复到指令组的开始处。
45.如权利要求44所述的方法,还包括如果已经到达MOB的结束处,则将指针设置到MOB中的第一个记录,并且确定是否已经到达MOB的结束处;如果尚未到达结束处,则确定MOB中的记录是否为空;确定MOB中的记录是否为存储;和如果记录为存储,则向存储器写入数值并且在MOB中递增指针。
46.如权利要求45所述的方法,其中如果MOB中的记录不是存储,则递增MOB中的指针。
47.如权利要求39所述的方法,还包括逐个处理指令。
48.如权利要求39所述的方法,还包括使用存储器顺序缓冲器(MOB)和存储恢复表(SRT)处理指令组中的指令。
49.用于共享多处理器系统的存储引用表(SRT),包括包含的记录的数量与存储引用的数量一样多的表,其中每个记录含有多个字段,包含地址字段和用于存储初值以便进行恢复的旧值字段,其中所述表存储有关所述记录的共享写入状态的信息。
50.用于共享多处理器系统的存储器顺序缓冲器(MOB),包括使用关于当前被引用的单元的共享信息维护的表,其中所述信息包含区分记录的特定状态是否包括共享写状态的信息。
51.如权利要求50所述的MOB,其中所述表包含后援屏蔽字段和读/写屏蔽字段,并且包含有关页面是被读模式的处理器访问还是被写模式的处理器访问的信息,其中所述表还包含有效/状态位字段、进程标识字段、虚拟地址字段、实地址字段和保护位字段。
52.用于多处理器系统中的仿真的系统,包括用于执行仿真的仿真器,其中所述多处理器系统的宿主多处理系统支持弱一致性模型,多处理器系统的目标多处理系统支持强一致性模型。
53.一种信号承载介质,实际包含可被数字处理设备运行以便实现多处理器系统中的仿真方法的机器可读指令程序,包括执行仿真,其中所述多处理器系统的宿主多处理系统支持弱一致性模型,而所述多处理器系统的目标多处理系统支持强一致性模型。
全文摘要
在多处理器系统中进行仿真的方法(和系统)包含执行仿真,其中多处理器系统的宿主多处理系统支持弱一致性模型,而多处理器系统的目标多处理系统支持强一致性模型。
文档编号G06F12/08GK1492324SQ03157020
公开日2004年4月28日 申请日期2003年9月9日 优先权日2002年9月17日
发明者R·奈尔, J·K·奥布瑞恩, K·M·奥布瑞恩, P·H·奥登, D·A·普雷纳, R 奈尔, 奥布瑞恩, 奥登, 普雷纳 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1