用于使用记录板机制处理加载锁定指令的方法和装置的制作方法

文档序号:6420543阅读:123来源:国知局
专利名称:用于使用记录板机制处理加载锁定指令的方法和装置的制作方法
技术领域
本发明总体上涉及一种用于处理计算机处理器内的加载锁定指令的方法和装置。更特别地,本发明涉及一种用于使用记录板机制处理乱序计算机处理器内的加载锁定指令的系统和方法。
背景技术
许多处理器,例如从市场上可获得的Intel公司的Pentium处理器,为“乱序”处理器。当所需的数据和执行单元变得可用时,乱序处理器推测性地按照任意次序执行指令。计算机系统内的一些指令通过机器寄存器依赖于其它指令。乱序处理器尝试通过以下方式拓展并行性主动地寻找其输入源可用于计算的指令,并且即使在程序流(程序次序)中较早出现的其它指令还未得到执行的情况下也调度它们以便执行。这样就为机器资源的更有效利用和更快的整体执行创造了机会。
加载锁定指令用于多任务/多重处理系统中以便对信号量进行操作。信号量是如下的标志变量,所述标志变量被用来防止资源或数据被多处理器系统中的一个以上的代理同时访问,因为同时访问会导致程序不确定的行为。为了保障对信号量的唯一访问,加载锁定指令结合存储解锁指令必须要以原子方式加以执行。也就是说,一旦加载锁定指令访问了信号量值,在相应的存储解锁指令释放它之前,任何其它的指令都不能对该信号量进行操作,直到对应的存储解锁指令将它释放为止。加载锁定/存储解锁指令对还在x86处理器中引入需求,因为按照程序次序在加载锁定/存储解锁指令对之前的所有加载指令和所有存储指令必须在所述原子操作之前得到执行。另外,按照程序次序在所述加载锁定/存储解锁指令对之后的所有后续的加载指令和存储指令必须在所述加载锁定/存储解锁指令都完全得到执行之后才能被执行。在任何x86程序执行中都一定不能违反这一“防护”语义。
推测性的执行意味着指令在解决相关的控制依赖性之前可被提取和执行。以推测性的乱序方式执行“加载锁定”指令隐含着如果没有得到正确的处理,可以不遵守加载锁定/存储解锁指令对的防护语义。但是,如果加载锁定指令可以被推测性地执行,就能够显著地提高性能,因为在资源能够使用时以及在加载锁定指令之前的所有指令已经被完成以外的任何时间,所述执行都可以被进行。
通过只在指令已经达到“到达退出(at-retirement)”时才执行加载锁定指令,在处理乱序机器中的加载锁定指令过程中的传统方法就保障了防护语义。当一条指令按照程序次序接下来将要退出时,该“到达退出”(或者“在退出(at-retire)”)条件被加上标志。也就是说,按照程序次序所有靠前的指令都已经退出了。另外,这些传统的方法堆积所有的锁定指令,而不管它们是否在两个高速缓存线之间被分开(即“分开”或“未分开”锁定操作),并且不管它们是否将被写回到可高速缓存的区域。因此,大量的无关时间和资源被广泛地用来准备和处理任一加载锁定指令。在加载锁定指令变为符合退出条件时,这些方法产生了对应要执行的加载锁定指令的长的等待时间并且占用了大量的处理资源。


图1是根据本发明的第一实施方案举例说明一个具有如下重放(replay)系统的计算机处理器核心的框图,该重放系统具有包含锁定记录板机制的检查器;图2是根据本发明的第一实施方案描述用于使用锁定记录板机制推测性地处理乱序处理器核心内的加载锁定指令的方法的流程图。
图3是根据本发明的一些实施方案描述用于保持锁定记录板的方法的流程图;图4是根据本发明的第一实施方案描述用于当加载锁定指令到达检查器阶段的时候推测性地执行检查的方法的流程图;图5是根据本发明的第二实施方案举例说明一个具有如下重放系统的计算机处理器核心的框图,该重放系统具有包含锁定记录板机制的检查器;图6是根据本发明的第二实施方案描述用于使用锁定记录板机制推测性地处理乱序处理器核心内的加载锁定指令的方法的流程图。
图7是根据本发明的第二实施方案描述用于当加载锁定指令到达检查器阶段的时候推测性地执行检查的方法的流程图;以及图8是按照本发明的一些实施方案的一种已知的多代理系统的框图,该系统包含在图1和图5中所示的用于执行加载锁定指令的处理器核心。
具体实施例方式
本发明的一些实施方案在一个处理核心中提供专用于对加载锁定指令进行管理的记录板。该加载锁定记录板包含多个代表不同条件的记录板条目,在加载锁定指令可退出之前这些条件必须得到满足。在加载锁定指令执行期间,记录板受到检查。如果记录板指示有一个或多个退出条件没有得到满足,那么就重放该加载锁定指令。否则,就允许该加载锁定指令退出。当退出条件被清除(clear)时,记录板管理功能定期对记录板内容进行更新。
图1是根据本发明的第一实施方案的在一个示例性处理器内的处理器核心100的框图。处理器核心100可以包含调度器110、执行管道120、退出单元130、重放路径140,以及存储转发缓冲器150。处理器核心100可以被连接到写组合缓冲器160和高速缓冲存储器170。处理器核心100还可以包含传统的电路(图8),以便将处理器核心100连接到通信总线(图8)并且允许它与在计算机系统内的其它实体即代理(图8)进行通信。
调度器110可以从指令队列(未示出)接收指令流。顾名思义,调度器110可以在相关联的输入资源变得容易得到的时候调度每条指令以便执行,而不管程序次序。可以被连接到调度器110的执行管道120可以包含专用于指令的各种执行单元,例如各种加法器和算术单元、加载单元、存储单元和其它电路系统(未示出)。依赖于指令类型,该调度器可以把一条指令提交到一个执行单元,该执行单元执行该指令。执行管道120还可以确定是要退出还是重放所分派的指令。
可以被连接到执行管道120的退出单元130可以使得被正确和完全执行的指令退出。退出单元130按照程序次序使指令退出。例如,第一指令Inst A按照程序次序可能出现在第二指令Inst B之前。如果Inst A没有先退出,则即使Inst B在Inst A之前被完全和正确地执行,它也不可以退出。重放路径140可以被连接到执行管道120。重放路径140重新执行没有被正确和完全执行的指令。存储转发缓冲器150可以被连接到执行管道120。在多个已得到执行的存储指令准备退出的时候,存储转发缓冲器150可以临时存储来自它们的结果。
处理器核心100可以被连接到外部单元,包含写组合缓冲器(WCB)160和高速缓冲存储器170。WCB 160可以被连接到存储转发缓冲器150和执行管道120。WCB 160临时地存储与存储解锁和加载锁定指令相关联的数据和地址。然后,WCB 160等待最佳时间,以便使用与被临时存储的数据相关联地址来将临时存储的数据写到高速缓冲存储器170。数据被以预先确定的大小(此处称为“高速缓存线”)为单位写到高速缓冲存储器170。高速缓冲存储器180可以被连接到WCB 160和系统存储器(图8)。然后高速缓冲存储器170等待最佳时间,以便通过外部总线将这种数据写到系统存储器。存储转发缓冲器150和WCB160都生成到执行管道120的命中/未命中信号。该命中/未命中信号指示一个特定的存储区是否包含加载锁定指令所指向的数据和地址。在这方面,处理器的操作和体系结构是众所周知的。
本发明的一些实施方案引入了锁定记录板180,执行单元120在确定使加载锁定指令退出或重放时可以参考该锁定记录板180。锁定记录板180可以保持关于与所有加载锁定指令相关联的预先确定的退出条件的状态的信息。实际上,它保持那些已经得到满足和没有得到满足的退出条件的运行表。锁定记录板180的状态可以周期性地得到更新,例如在当每次执行加载锁定指令时检测到一些改变的情况下。锁定记录板180的结构可以相当简单;例如它可以包含代表退出条件中的每个的单个字段位置。
通过使用锁定记录板180,对应最近得到执行的加载锁定指令的退出判定就变为了一种非常快的操作。未分开写回加载锁定指令的执行仅需要从锁定记录板读取,并且如果任一字段指示有一退出条件尚未得到满足,它就重放加载锁定指令。例如,在一种实施方案中,可以通过被设置为逻辑“1”的二进制标志来指示未满足的退出条件;通过对各种退出标志的内容进行逻辑或,执行单元180可以在单个时钟周期中确定是要使加载锁定指令退出还是重放加载锁定指令。在其它实施方案中,未满足的退出条件可以通过被设置成逻辑“0”的标志来加以指示,在这种情况下,各种退出标志可以被“与”在一起。这样,为了确定是否要使加载锁定指令退出,执行管道120可以参考锁定记录板180。
本发明的一些实施方案提供了用于使用记录板机制在多处理器系统中推测性地处理加载锁定指令的方案。这种方案的各种实施方案可以在以下情况下得到使用当新的加载锁定指令被接收并被存储在调度器中的时候,当执行加载锁定指令的时候,以及当使加载锁定指令退出的时候。
图2举例说明了根据本发明的第一实施方案,可以在加载锁定指令生存期间实施这种方案的方法。更具体的,图2提供了用于使用记录板机制推测性地处理在乱序处理器核心中的加载锁定指令的第一方法1000。该第一方法1000可以在执行管道接收到加载锁定指令(块1010)的时候变得可操作。在那时,可以确定锁定记录板是已经被“清除”还是被完成(块1020)。“清除”,在这个上下文中,意味着所有用于加载锁定指令的退出条件都得到了满足。更具体的,可以确定由锁定记录板监视的每个退出条件是否已经得到了满足。如果已经得到了满足,则执行管道就可以执行加载锁定指令(块1030)。在加载锁定指令的执行之后,处理器核心可以将其发送到退出单元。该退出单元可以在它已就绪时使所述加载锁定指令退出(块1040)。
如果锁定记录板并未被清除,则处理器核心可以使用最近的信息更新锁定记录板。更具体的,处理器核心可以确定锁定记录板的至少一个其它字段是否可以被清除(块1050)。如果可以,则处理器核心可以通过清除该字段来更新锁定记录板(块1060)。然后处理器核心可以通过将加载锁定指令转发到重放路径来重放该加载锁定指令(块1070)。如果锁定记录板的任何字段都不可以被清除(块1050),则这可能隐含着没有对锁定记录板进行更新。相应地,处理器核心可以直接将加载锁定指令转发到重放路径,在那里加载锁定指令被重放(块1070)。
根据一种实施方案,锁定记录板条目可以保持与一条加载执行指令相关联的退出条件信息(即该加载锁定指令是否符合退出条件)。可以通过扩展锁定记录板来包含多个条目以便允许处理器核心同时监视不止一个加载锁定指令。例如,如果处理器核心支持多个并发线程,那么一个条目可以专用于对应每个线程的每条加载锁定指令。典型地,记录板条目的数量,至少部分地根据加载锁定指令将被在处理器中使用的频率的期望,在处理器设计期间加以确定。
与如下的现有技术相比,使用记录板可以带来优势,所述现有技术在加载锁定指令达到“到达退出”的时候执行迭代测试,以便确定一条已经执行的指令是否可以退出。也就是说,在加载锁定指令达到“到达退出”之前,处理器核心可以运行连续测试来确定所要求的退出条件是否得到满足。
所要求的退出条件之一可以包含与加载指令相关联的错误地址或故障条件的存在。这样,锁定记录板的一个字段可被设置成代表故障条件或错误地址。如所知道的,故障条件和/或错误地址可以包含但并不限于,数据的不正确转发、未知数据和/或地址、存储器排序故障、自修改代码页故障等。
锁定记录板的另一个字段可以代表在写组合缓冲器(WCB)中是否有命中,它与加载锁定指令相关联。当存在与由前面的存储指令产生的、相同的高速缓存线相同的副本时,在WCB中就存在命中。这样的WCB命中要求那个副本应在可执行加载锁定指令之前被逐出。在WCB命中时,为WCB命中指定的锁定记录板字段将会保持不被清除并且处理器核心可以重放加载锁定指令。
另外,锁定记录板的另一个字段可以指示加载锁定指令是否“在退出”。指令的到达退出条件通常在“在退出”指针指向该指令的时候被指示。相应地,如果指令不处于达到“在退出”或者没有被到达退出指针所指向,则该指令就不可以退出。
锁定记录板的另一个字段可以指示加载锁定指令是否拥有(或保持)锁定记录板。例如,在程序流程中的任意给定点,处理器核心可能正在执行一条或多条加载锁定指令。加载锁定指令是否拥有记录板依赖于它是否比保持锁定记录板的加载锁定指令更老。如果当前受到处理的加载锁定指令在程序流程中比某些其它的加载锁定指令“年轻”,它就可以得到重放。因为处理器核心按照程序次序使指令退出,如果存在一些还未得到执行的更老的加载锁定指令,那么更年轻的加载锁定指令不能拥有锁定记录板并应该得到重放。
锁定记录板的另一个字段可以代表要被释放完的是较老的还是优先的存储指令。一个“较老”的存储指令是指这样一种存储指令它在程序次序上出现在加载锁定指令之前并且仍位于执行管道中。优先的存储指令是指这样一种存储指令它已经从执行管道中退出,但已经将它的数据存储在存储转发缓冲器,并且等待被写到高速缓冲存储器。较老和优先的存储指令典型地在加载锁定指令执行之前被释放完以便遵守加载锁定指令操作的防护语义。
这些测试均可能会花费了许多时钟周期来完成,并且一旦一条已得到执行的加载锁定指令已被视为要退出,那么这些测试已经在前面得到了运行。根据本发明的一种实施方案,可以检查这些相同的退出条件来确定是否使一条已得到执行的加载锁定指令退出。但是,如果一个测试指示一个特定的退出条件得到了满足,则该测试的结果可以存储在记录板中供以后使用。这样,在后续迭代时,不需要再次运行该测试。当加载锁定指令最终就绪要退出的时候,执行管道不需要在一系列测试上消耗几个时钟周期。相反,它可以在单个周期中确定加载锁定指令就绪要退出。通过这种方式,在一切(时间和资源)都以就绪要执行加载锁定指令的时候,处理器核心就可以锁定系统存储器一次。
在单个事件中可以测试一个或多个退出条件。应该注意到每个字段可以不依赖于其它字段得到确定。还应该理解上面的退出条件在性质上纯粹是示例性的。依赖于系统体系结构和实施方案,上述的退出条件可以被修改,一些可以完全被省略。
仍然参考图2,处理器核心可以对加载锁定指令迭代第一方法1000,直到所有需要的退出条件都得到了满足。根据本发明的第一实施方案,处理器核心可以在加载锁定指令能够被退出之前对其执行几次第一方法1000。通过执行第一方法1000,处理器核心确保所有需要的资源都是可用的,并且对于加载锁定指令来说,退出是安全的。这样,当加载锁定指令达到“到达退出”时,它能够被执行而没有延迟。这一延迟的降低允许退出单元快速地进展到后续指令。因此,它还降低了程序的整体执行时间。
图3根据本发明的一种实施方案举例说明了用于加载锁定指令保持锁定记录板的第二方法2000。第二方法2000可以在执行管道接收加载锁定指令时变得可以操作。当执行管道接收加载锁定指令时,处理器核心可以确定锁定记录板是否为空(块2010)。如果锁定记录板为空,则处理器核心重新设置和保持锁定记录板(块2050)。
可替换的,如果锁定记录板非空或者具有拥有者(块2010),则处理器核心可以确定锁定记录板的拥有者是否比加载锁定指令“更年轻”(块2020)。“更年轻”的指令是指按照程序次序的任一后续指令。如果锁定记录板的拥有者是更年轻的,则执行管道可以逐出该拥有者(块2040)。一旦该拥有者被逐出,则锁定记录板可以被重新设置,并且正被处理的加载锁定指令可以保持记录板(块2050)。
另一方面,如果锁定记录板具有拥有者(块2010)但是锁定记录板的拥有者比处理中的加载锁定指令更老(块2020),则处理核心可以通过将处理中的加载锁定指令转发到重放路径来重放该加载锁定指令(块2030)。例如,有三个加载锁定指令,Inst A、Inst B和InstC,它们是按照此次序连续写的。在这种情况下,Inst B和Inst C比Inst A年轻。Inst C比Inst B年轻,而Inst A比Inst B老。假设当前正被处理的指令是Inst B,如果锁定记录板当前被Inst A所占用,那么处理器核心就重放Inst B,因为占用锁定记录板的加载锁定指令(Inst A)比正被处理的加载锁定指令(Inst B)要老。可替换的,如果锁定记录板当前被Inst C占用,则处理器核心从锁定记录板逐出Inst C并且将它保留用于Inst B。
较老的加载锁定指令在退出方面具有优于较年轻的加载锁定指令的优先权,因为处理器核心根据程序次序使指令退出。如提到过的,可以通过扩展锁定记录板来保持用于多于一条加载锁定指令的信息。如果这样的话,因为每个锁定记录板用于一个线程的加载锁定指令,所以加载锁定指令的程序次序以每个线程为基础而加以保持。
图4根据本发明的第一实施方案举例说明了方法3000,该方法3000可以在加载锁定指令的生存期间扩充图1中所示的方案。第三方法3000在加载锁定指令符合退出条件或者满足所有要求的退出条件时变得可以操作。此时,处理器核心检查对应所有权请求的预取读取(预取-RFO)的状态(块3010)。在传统的系统中,当尝试进行存储指令(例如存储解锁指令)的执行时,它可以引起WCB预取数据的高速缓存线,从而使得所述数据在存储指令退出的时候变得可用。预取-RFO是由处理器在通信总线上所发出的事务,通过它,处理器不仅获得高速缓存线的当前副本,而且还获得根据管理高速缓冲存储器一致性协议修改高速缓存线内数据的权力。在事务进展中的某点,该事务将被“全局观察”。全局观察发生在计算机系统内的所有其它代理-不管它们是其他处理器、系统存储器还是其他集成电路-已经观察到该事务,并且已经更新了它们自己的存储器以便反映所要求的高速缓存线的处理器的所有权之时。例如,在Intel的Pentium Pro处理器的总线协议中,全局观察发生在事务进展到探听阶段之时;此时,处理器响应它对数据的请求而接收“探听”结果。
如果预取-RFO已经得到全局观察(块3020),可以在WCB中为加载锁定指令分配一个条目(块3030)。随后,如果需要的话,WCB发出对应所有权加载锁定请求的读取(RFO加载锁定请求)(块3040)。一旦发出了RFO加载锁定请求,处理器核心等待着直到该RFO加载锁定请求得到全局观察(块3050)为止。然后处理器核心可以允许加载锁定指令退出(块3060)。此后,处理器核心可以执行存储解锁指令并且使该指令退出,所述存储解锁指令反过解锁被寻址的存储器位置并且将数据存储到写组合缓冲器(块3070)。该WCB条目将仅在存储解锁指令退出时被释放。同时,一旦该WCB条目被锁定,系统中不会有其它代理可以探听出该WCB条目。在存储解锁指令退出后,锁定记录板被重新设置。然后方法3000可以结束。
如果在块3020预取-RFO还没有被全局观察,则处理器核心可以确定预取-RFO请求是否被发出在通信总线上(块3090)。一旦将预取-RFO请求作为事务发送在总线上,将允许进展到一个自然的结束。因此,加载锁定指令得到重放(块3080)并且方法3000返回到块3010。但是,如果预取-RFO还没有被发送到总线上,该方法可以在预取-RFO被发送到总线上之前终止该请求(块3100)。相反的,方法3000可以进展到块3030和3040,为加载锁定指令分配WCB并且发送具有可使用的锁定的RFO。
如果存储指令被执行时引起预取-RFO请求被发送的系统,预取-RFO引起在WCB中的一个条目被分配。这种实施在加载锁定/存储解锁对的情况下可能会造成死锁条件。因为在用于所有存储指令的数据被从WCB中释放完之前,加载锁定通常不会被允许退出,所以对已被分配给较年轻的存储解锁指令的WCB条目来说,有可能防止较老的加载锁定指令退出。加载锁定指令会得到重放,直到WCB条目被释放完为止。但是,WCB条目可能永远都不被释放完,因为它与只能在较老的加载锁定指令退出之后才可以退出的存储解锁指令相关联。为了克服这个问题,WCB条目可以包含一个标志,可能是1比特标志,以便指示该条目已经被分配给存储解锁指令。在这种方案中,所述标志能够使在退出测试期间WCB会生成的命中信号失效,以便确定例如加载锁定指令是否在WCB中命中。每次重新设置锁定记录板的时候,WCB标志列也可以得到重新设置。
图5是根据本发明的第二实施方案的处理器核心500的框图。处理器核心500可以包含调度器510、执行管道520、退出单元530、重放路径540、存储转发缓冲器550,以及锁定记录板580。处理器核心500可以被连接到写组合缓冲器560和高速缓冲存储器570。处理器核心500还可以包含传统的电路(未示出),以便将处理器核心连接到通信总线并且允许它与计算机系统内的其它实体或代理进行通信。
处理器核心500还可以包含加载锁定排序缓冲器590。该加载锁定排序缓冲器590用来与执行管道进行通信。加载锁定排序缓冲器590保持当前正在被执行的所有加载锁定指令的排序(按照程序次序)。当指令首先被处理器核心500接收时,在分配时间跟踪加载锁定指令的排序。加载锁定排序缓冲器590仅允许最老的加载锁定指令保持锁定记录板580。通过这种方式,加载锁定排序缓冲器590防止过分的“摧毁(nuking)”,即一种用于清除执行管道中的内容的操作。该“摧毁”操作将在下面得到详细描述。加载锁定排序缓冲器的保持对本领域的技术人员来说是周知的。
第二实施方案加速了加载锁定指令的执行,这是通过在已经确认所有较老的和优先的存储指令已经从WCB中被释放完之前分派该加载锁定指令用于执行来进行的。在这种实施方案中,加载锁定指令的“生命周期”可以经历三个阶段。首先,当加载锁定指令等待要清除的执行条件的时候加载锁定指令的执行可以停止。其次,在执行条件清除之后,加载锁定指令可以执行并且然后进入等待退出的“慢安全”模式。最后,加载锁定指令可以退出并且被从处理器核心除去。
在慢安全模式中,指令已经得到执行并且等待退出。慢安全模式本身是周知。当加载锁定指令达到慢安全状态时,核心已经向处理器内的其它部件发出了请求;预期的是那些其它的部件已经读取了至核心的所请求的数据的副本,除非在核心的请求可得到完成之前,其它的处理器请求了所述数据。
图6举例说明了根据本发明的一种实施方案的记录板管理方法6000。方法6000在执行管道接收到加载锁定指令并为其分配了核心资源时变得可以操作(块6010)。加载锁定指令被标记为不可退出并且进入执行管道(块6020、6030)。在管道中的某点,可以确定要执行还是要重放加载锁定指令。读取锁定记录板(块6040),并且根据记录板确定所有执行条件是否已经得到满足(块6050)。如果没有得到满足,记录板可以得到更新(块6060)并且加载锁定指令可以得到重放(块6070)。
如果执行条件已经得到了满足,则加载锁定指令就被执行(块6080)。在执行加载锁定指令后,处理器核心可以进入到慢安全模式(块6090)。
可以注意到,加载锁定指令可以处于慢安全模式,直到退出单元就绪要使加载锁定指令退出为止。当在慢安全模式中的时候,如果出现“命中” (指向与加载锁定指令相同的存储器)加载锁定指令的探听探头(snoop probe),则加载锁定指令和记录板就被摧毁(块6100、6110)。摧毁操作涉及清除(按照程序次序地)跟在加载锁定指令后面的所有未完成的指令。然后加载锁定指令被返回到执行管道并且记录板被清除。但是,相反,当退出条件仍然满足时,允许加载锁定指令退出(块6120、6130)。
与根据本发明的第一实施方案的锁定记录板相比,在第二实施方案中的锁定记录板可以保持较少的执行条件。这种方案允许加载锁定指令比在第一种实施方案中更早执行(起作用)。例如,与第一实施方案相比,在这种第二实施方案中的锁定记录板不需要保持关于在管道和/或WCB中是否存在要被释放完的任何优先的或较老的存储指令的信息。基于加载锁定指令不太可能与这种释放完发生冲突这一假设,这个条件可以被消除。这样,处理器核心可以在不用保证所有前面的存储指令被释放完的情况下执行加载锁定指令的所有要求的操作。
根据第二实施方案,加载锁定指令按照图3中所示的方式保持锁定记录板。特别地,如果锁定记录板为空的话,加载锁定指令可以对其重新设置和保持。可替换的,如果锁定记录板由“较年轻”的指令所保持,则加载锁定指令可以逐出所述较年轻的加载锁定指令并且保持该记录板。否则,加载锁定指令可以得到重放。
图7举例说明了根据本发明的一种实施方案在WCB可操作的方法7000。方法7000在加载锁定指令执行的时候变得可以操作。此时,WCB检查对应所有权请求的预取读取(预取-RFO)的状态,该预取-RF0可能已经由伴随加载锁定指令的存储解锁指令生成了(块7010)。如前面提到过的,预取-RFO是由处理器核心发送到通信总线上的事务,通过它,所述过程获得高速缓存线的当前副本和修改高速缓存线内数据的权力。在进行过程中的某点,事务受到系统内其它代理的全局观察。在受到全局观察的时候,系统内的其它代理更新它们自己的系统存储器来反映处理器核心对于所请求的高速缓存线的所有权。当执行加载锁定指令的时候,无法知道先前的预取-RFO是已经在总线上得到完成,当前正在总线上的进行处理,还是在它被传递到总线上之前就被消除了。
方法7000可以确定是否存在来自相关联的存储解锁指令的执行的任一预取-RFO(块7020)。如果不存在的话,可以按照加载锁定指令发出所有权的读取(RFO)(块7030)并且可以为RFO数据分配一个WCB中的条目(块7040)。加载锁定指令可以进入到慢安全模式。
如果的确存在预取-RFO,那么该方法可以确定对于预取-RFO而言已经进行到了什么阶段。该方法可以确定例如是否已将预取-RFO发送到总线上(块7050),或者,如果它已经被发送到总线上,该预取-RFO是否已经被全局观察(块7060)。如果预取-RFO存在但是还没有被发送到总线上,该方法可以等待直到预取-RFO被发送为止。在这种情况下,还有可能由于某个外部事件而丢弃该预取-RFO,这些外部事件例如事务队列中的低的资源可用性,在这种情况下该方法还应该进行检查来确保预取-RFO保持存在。如果预取-RFO已经被发出但并未得到全局观察,该方法也可以停止。在某点,预取-RFO将得到全局观察并且加载锁定指令可进入到慢安全模式。在这样做的过程中,可以将先前分配给预取-RFO请求的WCB条目分配给加载锁定指令(块7070)。
应该注意到,在慢安全模式中(块7080),可以预期加载锁定指令前进到退出,除非发生异常事件,例如接收到指向与加载锁定指令的地址相同的地址的探听探头。在慢安全模式中,该方法等待着直到所有较老的存储已经被从WCB释放完(块7090)并且随后将加载锁定指令标记为可退出(块7100)。一旦加载锁定指令变为可退出,它就等待着直到指令退出为止。该方法继续确定是否接收到指向与加载锁定指令的地址相同的地址的探听探头(块7110)。如果是这样的话,WCB条目被摧毁(块7120)并且该方法终止。如果在加载锁定指令被终止的时候没有接收到任何探听探头,则所述慢安全模式终止。该方法在跟在加载锁定指令后面的存储解锁指令退出的时候重新设置记录板(块7130)。
图8举例说明了具有多个代理50-50的典型的多处理器核心系统,其中它们中的一个(如代理50)为图5和/或图5中显示的处理器核心。多个代理50-50通过公用的外部总线60相互进行通信。一个“代理”可以是通过外部总线进行通信的集成电路,包含微处理器、输入/输出设备、存储器系统和专用芯片组或数字信号处理器。典型地,这些代理中的一个,例如50,为存储数据的系统存储器。代理50-50使用预先确定的协议通过外部总线60进行通信。数据转移操作,例如读和写操作,可以发生在由一个代理发送到总线上的总线事务中,并且所述总线事务被其它的代理观察到。已经为计算机系统开发了多种总线协议,包含允许几个事务同时挂在总线上的管道总线协议和仿照一对代理之间的点对点通信的串行总线协议。在操作期间,其它的代理50-40可以共享相同的数据。典型地,为系统规定高速缓冲存储器一致性协议,以便保证在一个代理操作数据的时候,它使用系统中可用的数据的最当前的副本。在这方面,计算机系统的操作是为人们所熟知的。
为了执行加载锁定指令,代理50典型地将一个事务发送到总线60上,指示被寻址的高速缓存线的一个读操作。通常,在事务请求数据中提供一个标志以标识该读操作应该锁定系统存储器中的被寻址的高速缓存线;当被启用时,该锁定将使其它代理不具备访问所述高速缓存线的能力。事务可以根据传统的技术在总线60上进行。在某点,事务会达到全局观察。在该点,系统存储器内的电路将所述被寻址的线标记为加锁,并且所有其它的代理使它们可能存储的数据的任意副本无效。在事务进行期间,被寻址的高速缓存线的副本可以被从系统存储器50转移到发出请求的代理50,或者如果另一个代理(如代理20)存储有所述数据的脏副本(dirty copy),则被寻址的高速缓存线的副本就可被从该代理转移到发出请求的代理50。在一些情况中,发出请求的代理50已经存储了数据的当前的副本,代理50可以在事务数据中这样指示;数据不需作为事务的一部分被转移到发出请求的代理50。
存储解锁指令的执行可以引起另一事务被发送到通信总线60上。再一次,发出请求的代理50可以将处理数据发送到总线60上,指示对被寻址的高速缓存线的写操作。可以在事务数据中提供一个标志,用于指示所述被寻址的高速缓存线将在系统存储器中被解锁。当所述事务达到全局观察时,系统存储器内的电路将会清除先前施加到被寻址的高速缓存线的标记。发出请求的代理50还将发送存储在系统存储器内的高速缓存线内容的副本。
本发明的一些实施方案发现了应用,因为加载锁定指令被限制在系统存储器内的单个高速缓存线。这是计算机系统所使用的最普通类型的加载锁定指令。跨越多个高速缓存线的其它类型锁定指令的处理对于容易知道的传统的锁定协议来说可以是缺省的。
另外,在这里特别地对本发明的几个实施方案进行了举例说明和描述。但是,可以理解在不偏离本发明的精神和预期范围的情况下,本发明的修改和变化由以上教导所覆盖并且在所附的权利要求的范围之内。
权利要求
1.一种用于处理乱序处理器核心中的加载锁定指令的方法,包含读取具有一个或多个字段的锁定记录板,其中每个字段在各自的退出条件得到满足的时候被清除;在加载锁定指令是下一个要退出的指令之前,执行所述加载锁定指令;以及仅当锁定记录板的所有字段都清除时,才使加载锁定指令退出。
2.如权利要求1所述的方法,进一步包含在锁定记录板未被清除时确定是否可以清除锁定记录板的任一字段。
3.如权利要求2所述的方法,进一步包含当锁定记录板的任一字段可以被清除时更新锁定记录板。
4.如权利要求2所述的方法,进一步包含当锁定记录板未被清除时重放加载锁定指令。
5.如权利要求1所述的方法,进一步包含按照一种预先规定的方式为加载锁定指令保持锁定记录板。
6.如权利要求5所述的方法,进一步包含确定是否存在锁定记录板的拥有者,其中拥有者是保持锁定记录板的另一个加载锁定指令;确定加载锁定指令是否比锁定记录板的拥有者老,当加载锁定指令在程序次序上出现在所述拥有者之前的时候,所述加载锁定指令比所述拥有者老;当加载锁定指令比所述拥有者要老的时候,逐出所述拥有者;为所述加载锁定指令保持锁定记录板。
7.如权利要求5所述的方法,进一步包含确定是否存在锁定记录板的拥有者,其中所述拥有者是保持锁定记录板的另一个加载锁定指令;确定加载锁定指令是否比锁定记录板的拥有者年轻,当加载锁定指令在程序次序上出现在所述拥有者之后的时候,所述加载锁定指令比锁定记录板的拥有者要年轻;以及在所述拥有者比加载锁定指令老的时候,重放所述加载锁定指令。
8.如权利要求1所述的方法,进一步包含确保处理器核心拥有一个高速缓存线,其中所述处理器核心通过所述高速缓存线从系统存储器中读取数据、向系统存储器写数据以及修改系统存储器中的数据。
9.如权利要求8所述的方法,进一步包含将加载锁定指令分配给写组合缓冲器,其中所述写组合缓冲器临时存储将要通过高速缓存线写到系统存储器的数据。
10.如权利要求8所述的方法,进一步包含发起对于所有权加载锁定指令请求的读取(RFO加载锁定),以便确保处理器核心锁定系统存储器。
11.如权利要求8所述的方法,进一步包含在系统存储器被锁定时执行加载锁定指令。
12.如权利要求1所述的方法,进一步包含当加载锁定指令被执行的时候,使所述加载锁定指令退出。
13.一种处理器,包含一个调度器,用来调度程序指令的执行,一个执行管道,用来执行被调度的指令并且确定已经得到执行的指令是否要被重新执行,一个重放单元,用来使指令被重新执行,一个记录板,具有用于存储与加载锁定指令相关联的退出条件标志的多个字段,所述记录板提供与执行管道的通信。
14.如权利要求13所述的处理器,进一步包含具有连接到记录板字段的输入和连接到执行单元的输出的或门。
15.如权利要求13所述的处理器,进一步包含具有连接到记录板字段的输入和连接到执行单元的输出的与门。
16.一种在计算机系统中的处理器核心,包含一个执行管道,按照乱序来执行指令;一个锁定记录板,用于监视对应加载锁定指令的退出条件,所述记录板具有用于多个退出条件中的每个条件的标志位置,其中加载锁定指令通过在锁定记录板的拥有者比加载锁定指令年轻时逐出所述拥有者来保持锁定记录板。
17.如权利要求16所述的处理器,其中所述拥有者是另一条加载锁定指令。
18.如权利要求16所述的处理器,其中当所述拥有者出现在处理中的加载锁定指令之前时,所述拥有者是更年轻的。
19.如权利要求16所述的处理器,其中当所述拥有者不如所述加载锁定指令年轻的时候,所述加载锁定指令被重放。
20.如权利要求16所述的处理器,其中所述退出条件之一是是否存在故障条件和错误地址中的一个。
21.如权利要求16所述的处理器,其中所述退出条件之一是加载锁定指令是否拥有锁定记录板。
22.如权利要求16所述的处理器,其中所述退出条件之一是是否存在要释放完的较老的存储指令或优先的存储指令之一。
23.如权利要求16所述的处理器,其中所述退出条件之一是在写组合缓冲器中是否存在命中。
24.如权利要求16所述的处理器,其中所述退出条件之一是加载锁定指令是否在退出。
25.一种用于保持锁定记录板以便处理乱序处理器中的当前的加载锁定指令的方法,包含确定是否存在记录板的拥有者,所述拥有者是保持锁定记录板的另一条加载锁定指令;如果是这样的话,则确定在程序流中所述拥有者是否比当前的加载锁定指令年轻;如果是这样的话,则逐出锁定记录板的拥有者,保持用于当前加载锁定指令的锁定记录板,并且重新设置锁定记录板,以及此后,在与当前的加载锁定指令相关联的退出条件得到满足的时候,清除锁定记录板的标志。
26.如权利要求25所述的方法,其中当前的加载锁定指令在拥有者不如当前的加载锁定指令年轻的时候被重放。
27.如权利要求25所述的方法,进一步包含在记录板的所有标志被清除时使当前的加载锁定指令退出。
28.一种用于执行乱序处理器核心内的加载锁定指令的方法,所述处理器核心位于具有系统存储器的计算机系统内,所述方法包含读取锁定记录板的内容,所述锁定记录板具有多个字段,这些字段的每个指示用于加载锁定指令的退出条件中的一个是否已得到满足,当所有退出条件都已经得到满足的时候执行加载锁定指令,将一个读取请求发送到通信总线上,所述读取请求寻址系统存储器中的第一高速缓存线并且指示所述第一高速缓存线要被锁定,并且当所述读取请求已经被计算机系统全局观察的时候,使加载锁定指令退出。
29.如权利要求28所述的方法,在执行之前进一步包含确定是否存在作为读取请求的寻址到第一高速缓存线的预取请求,如果这样的话,确定所述预取请求是否已经发送到通信总线上,并且如果这样的话,延迟加载锁定指令的执行直到预取请求已经被全局观察。
30.如权利要求29所述的方法,其中如果预取请求还没有被发送到通信总线上,则终止预取请求。
31.如权利要求29所述的方法,进一步包含,依照预取请求,在写组合缓冲器中为所述预取请求分配一条目,并且在所述条目中设置一个标志,以便将所述条目与存储解锁指令关联起来。
32.如权利要求31所述的方法,进一步包含在标志被设置时锁定写组合缓冲器中的条目。
33.如权利要求31所述的方法,进一步包含在加载锁定指令退出的时候清除条目。
34.如权利要求31所述的方法,进一步包含在加载锁定指令退出的时候清除锁定记录板。
35.如权利要求29所述的方法,进一步包含,在一个多代理计算机系统中并且依照预取请求如果在除了系统存储器之外的某个代理中存储了比在系统存储器中存储的更当前的第一高速缓存线的数据的副本,则由所述代理提供更当前的数据;并且否则,由系统存储器提供在第一高速缓存线的数据的副本。
36.如权利要求28所述的方法,进一步包含,在一个多代理计算机系统中并且依照读取请求如果在除了系统存储器之外的某个代理中存储了比在系统存储器中存储的更当前的第一高速缓存线的数据的副本,则由所述代理提供更当前的数据;并且否则,由系统存储器提供在第一高速缓存线的数据的副本。
37.一种多代理的计算机系统,包含通过公用总线互连的多个代理;包含处理器核心的至少一个代理,所述处理器核心包含执行单元、具有用来存储涉及与加载锁定指令相关联的退出条件的数据的字段的锁定记录板、以及连接到公用总线的通信电路,并且在加载锁定指令的执行期间,发出带有标识要被施加的锁定的指示符的读取请求,包含系统存储器的至少一个其他代理,通过锁定系统存储器的被寻址的存储器位置以防止任何其它代理使用,来响应具有所述指示符的读取请求。
38.如权利要求36的系统,其中所述系统存储器通过解锁被寻址的存储器位置来响应标识被寻址的存储器位置的写请求,所述写请求具有解锁标识符。
全文摘要
本发明提供了一种使用锁定记录板机制的处理核心。所述锁定记录板用来管理加载锁定指令。加载锁定记录板包含代表不同条件的多个记录板条目,这些条件在加载锁定指令可以退出之前必须得到满足。在加载锁定指令的执行期间,推测性地执行退出条件,并且记录板相应地得到更新和检查。如果记录板指示一个或多个退出条件没有得到满足,就重放加载锁定指令。否则,允许加载锁定指令退出。当退出条件被清除时,记录板管理功能定期更新记录板内容。这样就可以实现加载锁定操作的快速退出。
文档编号G06F12/00GK1510567SQ20031011389
公开日2004年7月7日 申请日期2003年11月10日 优先权日2002年12月24日
发明者H·H·胡姆, H H 胡姆 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1