使用监视-存储器等待的被排序的锁定的制作方法

文档序号:6416122阅读:84来源:国知局
专利名称:使用监视-存储器等待的被排序的锁定的制作方法
技术领域
本发明涉及处理器,更具体地说,涉及使用监视-存储器等待来为一个或多个等待锁定的处理器监视锁定,直到锁定变得可用。
背景技术
通常,超线程或多线程处理器能够同时处理多个指令序列。促使在单个处理器中执行多个指令流的主要推动因素是所得到的处理器利用率的提高。超线程处理器允许多个指令流在不同的执行资源中同时执行,试图更好地利用这些资源。此外,超线程处理器能够被用于这样的程序,其遇到高等待时间的延迟或者常常等待事件发生。
通常,超线程处理器具有单个的资源装置,该资源装置被所有的线程或逻辑处理器(处理器)共享。没有足够的资源可能在处理器之间产生明显的争用,尤其是在一个或多个处理器等待锁定变得可用的时候。已经提议了若干技术来改进涉及多个处理器间的锁定争用的程序运行的低效率以及其他资源消耗延迟。例如,在传统的螺旋等待锁定系统中,使用等待队列来将等待锁定的处理器放置到等待列表中,直到锁定变得可用为止。但是,在这样的等待期间,处理器不断地访问锁定的存储器位置,使得在该存储器位置产生存储器争用,造成资源瓶颈,浪费存储器带宽、计算带宽、微体系结构资源以及功率。这样的“忙等待”处理器可能对有关的其他处理器的性能造成不利的影响。


所附的权利要求具体地阐述了本发明的特征。本发明的实施例及其优点可以通过下面结合附图的详细说明得到最好的理解,其中图1是图示具有存储器存取监视器的超线程处理器的实施例的框图;
图2是图示了超线程处理器操作的实施例的流程图;图3是图示了超线程处理器的实施例的框图;图4是图示用于资源划分、共享和复制的处理的实施例的框图;图5是图示用于暂停和恢复线程执行的处理的实施例的流程图;图6是图示了用于激活和操作监视逻辑的处理的实施例的流程图;图7是图示了用于监视操作的处理的实施例的流程图;图8是图示了使用监视-存储器等待获取锁定和监视锁定的处理的实施例的流程图;图9图示了使用监视-存储器等待来释放锁定和监视锁定的处理的实施例的流程图;图10是图示了系统的实施例的框图;以及图11是图示了用于设计的模拟、仿真和制造的各种设计表示或形式的实施例的框图。

发明内容
本发明描述了用于为一个或多个等待锁定的处理器监视锁定的方法和装置。宽泛地说,本发明的实施例提出使用监视-存储器等待来为一个或多个等待锁定的处理器监视锁定,直到锁定变得可用。
系统、装置和方法被提供来使要获取可能被其他处理器争用的锁定的处理器休眠,直到监视器事件发生,例如锁定变得对该处理器可用。换句话说,虽然处理器可以等待锁定变得可用,但是在队列中等待的同时,它可以休眠。根据一个实施例,处理器休眠的选项可以包括处理器让出其资源并提供所让出的资源以由其他处理器使用。根据一个实施例,寻求锁定的处理器可以是超线程处理器的逻辑处理器。典型的超线程处理器可以包括共享相同资源的多线程或逻辑处理器。
根据一个实施例,监视-存储器等待(monitor-mwait)机制可以被用来监视被争用的锁定,并且使处理器休眠,例如直到锁定变得可用。被争用的锁定可以指一个或多个处理器等待或寻求获得的锁定。根据一个实施例,可以与处理器相对应地产生节点或队列单元(节点)。根据一个实施例,使用监视-存储器等待,节点可以与被争用的锁定相关联地被初始化并被监视。节点的监视可以包括例如通过监视锁定的锁定地址来监视锁定,锁定地址可以被称为监视地址。
根据一个实施例,一个或多个事件或者设定的时间周期可以被称为监视器事件,并且基于监视器事件的发生,节点的监视可以结束,并且处理器可以被唤醒。例如,使队列中的下一个处理器声明(claim)锁定和锁定的可用性可以被称为监视器事件。换句话说,当处理器是队列中下一个(或者第一个)接收被争用的锁定并且锁定变得可用时,处理器可以要求锁定并且还可以收回(reclaim)一些或全部先前被让出的资源。根据一个实施例,被争用的锁定当被拥有锁定的另外的处理器释放时,可以变得可用。
根据一个实施例,可以在让其他处理器使用处理资源时,在一个线程或处理器中实现监视-存储器等待。例如,根据一个实施例,可以设立监视器,使得处理器可以休眠,直到发生特定存储器存取,所述存储器存取例如是向规定存储器位置的写。处理器可以依据规定的事件被唤醒,而不用执行可能浪费处理器资源的例程。根据一个实施例,先前被专用于当前休眠的处理器的分区在该处理器仍然休眠时可以被让出。本发明的这些和/或其他实施例可以相对地改善总的机器处理量。
具体实施例方式
在下面的说明中,为了提供对本发明各种实施例的更全面的理解,阐述了许多具体的细节,比如逻辑实现方式、操作码、资源划分、资源共享和资源复制的实现方式、系统部件的类型和相互关系以及逻辑划分/集成选择。但是,应该理解,对于本领域的技术人员,基于所公开的内容,本发明的实施例可以在没有这些特定细节时也能够被实施。在其他例子中,为了不使本发明模糊,没有详细地示出控制结构、门级电路和完全的软件指令序列。本领域的普通技术人员,通过所包括的说明,不用过分的试验就将能够实现适当的功能。
下面将对本发明实施例的各个步骤进行说明。实施例的各个步骤可以由硬件部件执行或体现在机器可执行指令中,它们可以被用来使通过这些指令编程的通用或专用处理器、机器或逻辑电路执行各个步骤。或者,实施例的各个步骤可以通过组合硬件和软件的结合被执行。
本发明的各种实施例可以被提供为计算机程序产品,这些产品可以包括在其上存储有指令的机器可读介质,这些指令可以被用来对计算机(或其他电子设备)编程,以执行根据本发明各种实施例的处理。机器可读介质可以包括但不限于软盘、光盘、CD-ROM、磁光盘、ROM、RAM、EPROM、EEPROM、磁/光卡、闪存或适于存储电子指令的其他类型的介质/机器可读介质。而且,本发明的各种实施例也可以作为计算机程序产品被下载,其中,程序可以通过通信链路(例如,调制解调器或网络连接)以被体现在载波或其他传播介质中的数据信号的方式从远程计算机传输到请求计算机。
图1是图示具有存储器存取监视器110的超线程处理器100的实施例的框图。根据一个实施例,处理器100可以被形成为单个集成电路。根据另一个实施例,多个集成电路可以一起形成处理器100,根据又一个实施例,硬件和软件例程(例如,二进制译码例程)可以一起形成处理器100。如图所示,总线/存储器控制器120可以向前端130提供用于执行的指令。前端130可以根据指令指针170引导从各种线程获取指令。指令指针逻辑可以被复制来支持多线程。
根据一个实施例,前端130可以将指令送入线程/处理器可划分资源140中,以进行进一步处理。当处理器100中有多个线程是活动的时,线程/处理器可划分资源140可以包括在逻辑上被分开的专用于特定线程的分区。根据一个实施例,每个单独的分区可以仅包含来自被该部分专用于的线程的指令。线程/处理器可划分资源140例如可以包括指令队列。当处于单线程模式时,线程/处理器可划分资源140的分区可以被组合来形成专用于一个线程的单个大分区。
根据一个实施例,处理器100还可以包括复制的状态180。复制的状态180可以包括足以维护逻辑处理器环境的状态变量。使用复制的状态180,可以执行多个线程而不用为状态变量存储进行竞争。此外,可以为每个线程复制寄存器分配逻辑。复制的状态相关的逻辑可以使用适当资源分区进行操作,以准备输入指令用于执行。
根据一个实施例,线程/处理器可划分资源140可以将指令传递到共享资源150。共享资源150可以对指令进行操作,而不考虑它们来源。例如,调度器和执行单元可以是不知道线程的共享资源。可划分资源140可以公平的方式通过在线程间交替,将指令从多个线程送入到共享资源150,这种方式使得每个活动线程都持续前进。于是,共享资源150可以在适当的状态执行所提供的指令,而不用考虑线程混合。
根据一个实施例,共享资源150可以跟随有另一组线程/处理器可划分资源160。该线程/处理器可划分资源160可以包括退休资源,比如重新排序缓冲器。因此,线程/处理器可划分资源160可以确保来自每个线程的指令的执行正确地结束,并且确保对于该线程的适当状态被适当地更新。
根据一个实施例,可以为程序设计者提供一种机制来实现监视-存储器等待功能,而不用要求存储器位置的不断轮询或甚至是执行指令。例如,处理器100可以包括存储器存取监视器110。可以使用关于存储器存取周期的信息对存储器存取监视器110编程,存储器存取监视器110可以被使能对该存储器存取周期进行监视。因此,存储器存取监视器110可以包括监视器周期信息寄存器112,其通过比较逻辑114从总线/存储器控制器120接收的总线周期信息进行比较。如果匹配,则产生恢复线程信号以重新开始被暂停的线程。存储器存取信息可以从处理器的内部和/或外部总线获得。
监视器周期信息寄存器112可以包含说明周期类型和/或可以触发线程恢复的地址的细节。根据一个实施例,监视器周期信息寄存器112可以存储物理地址,并且存储器存取监视器110可以监视任何表明向该物理地址实际的或潜在的写的总线周期。这样的周期可以是显式写周期形式,和/或可以是为了所有权的读取或是另一个代理试图取得对可高速缓存线的独占所有权的无效周期,使得它可以不用外部总线事务而向该线写入。在不同的实施例中,存储器存取监视器110可以被编程来触发各种事务。
图2是图示了超线程处理器操作的实施例的流程图。参考图2的流程图,可以对图1的各种实施例的操作做进一步的解释。根据一个实施例,处理器100的指令集可以包括MONITOR操作码(指令),用于建立监视器事务信息。在处理框200,MONITOR操作码被作为第一线程(T1)指令序列的一部分被接收。在处理框210,响应于MONITOR操作码,对于指定的存储器存取,处理器100使能存储器存取监视器110监视存储器存取。触发存储器存取可以由隐式或显式操作数指定。因为监视地址可以作为隐式操作数被预先存储在寄存器中或其他位置,所以执行MONITOR操作码可以指明监视地址。在判断框215,存储器存取监视器110可以测试是否检测到指定的周期。如果指定的周期没有被检测到,则存储器存取监视器110可以继续监视存储器存取。如果检测到触发周期,则在处理框220设定监视器事件挂起指示器。
根据一个实施例,MONITOR操作码的执行可以触发存储器存取监视器110的激活。存储器存取监视器110可以开始与处理器100中的其他操作并行工作。根据一个实施例,MONITOR指令本身可以仅创建具有适当存储器周期信息的存储器存取监视器110,并且激活存储器存取监视器110,而不对监视器事件去屏蔽。换句话说,在执行MONITOR操作码之后,可以产生监视器事件,但除非这些监视器事件被显式地去屏蔽,它们可以不被识别出。
在处理框225,存储器等待(mwait)的触发被图示为分别的事件。根据一个实施例,MWAIT操作码可以被用来触发监视器事件的识别和T1的暂停。使用两个分别的指令来创建和触发线程暂停可以为程序设计者提供更多的灵活性,并且允许更有效的编程。根据另一个实施例,mwait可以从第一操作码触发,该第一操作码也可以创建存储器存取监视器110。在两者中的任一情况中,一个或多个指令可以使存储器存取监视器110待命中断,并且使得能够识别监视器事件。
根据一个实施例,在使用分别的操作码来使存储器存取监视器110待命中断并触发识别监视器事件的情形中,可以在判断框230执行测试来保证存储器存取监视器110在暂停线程之前已经被激活。此外,通过测试监视器事件是否已经挂起(未示出),可以避免暂停T1,并且可以在处理框250继续操作。如果监视器110已经被使能,并且没有监视器事件是已经挂起的,则可以在处理框235暂停T1。
随着T1被暂停,根据一个实施例,处理器100可以进入依赖执行过程的状态,这可以允许其他线程更加充分地利用处理器资源。根据一个实施例,处理器可以让出专用于T1的可划分资源140和160的一些或全部分区。根据另一个实施例,MONITOR操作码的不同排列或与其相关联的设置可以指出如果有的话,让出哪些资源。例如,当程序设计者预见出较短的等待时,可以暂停线程,但却维持它的资源分区。因为在该线程暂停期间,共享资源可以被其他线程独占地使用,所以处理量仍然得到了提高。当预见到较长的等待时,让出所有与被暂停的线程相关联的分区可以允许其他线程具有额外的资源,潜在地提高了其他线程的处理量。在线程分别被暂停或恢复时,这些额外的处理量可能以与移除和添加分区相关联的开销为代价。
根据一个实施例,T1可以保持暂停状态,直到监视器事件挂起。如前所讨论的,存储器存取监视器110可以独立地操作以检测和用信号通知监视器事件(框215~220)。如果在判断框240,处理器100检测到监视器事件挂起,则在处理框250可以恢复T1。在T1中不需要发生用以唤醒T1的对于监视器事件的指令的活动处理;而是,T1可以保持被暂停,并且被使能的存储器存取监视器110可以向处理器100用信号通知事件。处理器100可以处理事件,并认识到指示T1的事件应该被恢复,并执行适当的动作以恢复T1。
图1和2的实施例可以提供技术,以允许被程序暂停的线程在发生指定的存储器存取时被恢复。根据一个实施例,其他的事件也可以使T1被恢复。例如,中断可以使T1恢复。这样的实施方式可能使得存储器存取监视器110不那么理想,因为它可能丢失(未检测到)应该使得线程恢复的某些存储器存取或其他条件。因而,T1可能不时地被不必要地唤醒。但是,这样的实施方式减少了T1由于丢失的事件而被永久冻结的可能性,简化了硬件设计和验证。对T1不必要的唤醒可能仅仅是小小的不便,因为可以构建循环来使T1被双重检测——它正在等待的条件是否的确发生了,以及如果不是则再次暂停自身。
根据一个实施例,线程/处理器可划分资源、复制的资源和共享的资源可以被不同地安排。在一些实施例中,在共享的资源两端可以都没有可划分资源。根据一个实施例,线程/处理器可划分资源可以不被严格的划分,而是可以允许一些指令跨越分区,或者可以允许分区根据在该分区中正被执行的线程或被执行线程的总数来改变大小。另外,资源的不同组合可以被指定为被共享、复制和线程划分的资源。
图3是图示了超线程处理器实施例的框图。如图所示,根据一个实施例,除了其他的部件,图3包括一致性相关逻辑350、监视器310的一个实现以及线程暂停/恢复和处理器休眠/唤醒逻辑377的一个具体的实现。根据一个实施例,总线接口300包括总线控制器340、事件检测逻辑345、监视器310和一致性相关逻辑350。
根据一个实施例,总线接口300可以向前端365提供指令,前端365进行微操作数(uOP)产生,从微指令产生uOP。执行资源370可以从前端365接收uOP,后端逻辑380可以在uOP被执行之后退休它们。根据一个实施例,可以由前端、后端和执行资源支持乱序执行。
根据一个实施例,MONITOR操作码可以通过总线接口300进入处理器,并且准备由前端365执行。根据一个实施例,可以产生特定的MONITOR uOP以由执行资源370执行。根据一个实施例,利用可以被提供给监视器310的被地址翻译逻辑375翻译为物理地址的监视地址,MONITOR uOP可以类似于存储操作而被执行单元处理。监视器310可以与线程暂停/恢复和处理器休眠/唤醒逻辑337通信,以使线程恢复。在活动线程的数目改变时,线程可以暂停,并且恢复逻辑可以对资源进行划分和退火(anneal)。
例如,图4是图示用于资源的划分、共享和复制的过程的实施例的框图。根据一个实施例,经划分的资源可以根据机器中的活动线程的流被划分和退火(重新结合在一起以由其他线程重新使用)。根据一个实施例,被复制的资源可以包括流水线的取指令部分405中的指令指针逻辑、流水线的重命名部分415中的寄存器重命名逻辑、状态变量(未示出)以及中断控制器(未示出)。根据一个实施例,被共享的资源可以包括流水线的调度段425中的调度器、流水线的寄存器读部分430和寄存器写部分445中的寄存器池、流水线的执行部分435中的执行资源。此外,跟踪高速缓存(在取指令部分405中)和L1数据高速缓存(在L1高速缓存440中)可以是根据存储器存取而产生的与线程环境无关的被共享的资源。根据另一个实施例,在高速缓存判定中,可以考虑线程环境。根据一个实施例,被划分的资源可以包括流水线排队段410中的两个队列、流水线退休段450中的重新排序缓冲器以及存储缓冲器。线程选择多路转换逻辑可以在各种被复制和划分的资源之间变换以向线程提供合理的访问。
为了举例的目的,假设如图4所示的划分、共享和复制可以结合图3的实施例使用,以进一步说明图3的处理器实施例的操作。具体地说,现在将参考图5的流程图,对图3的实施例的操作做更详细的说明。假设处理器以多线程模式执行,其中至少有两个线程是活动的。
图5是图示用于暂停线程和恢复执行线程的过程的实施例的流程图。在处理框500,前端365可以在执行第一线程(T1)期间接收MONITOR操作码。根据一个实施例,前端365可以产生特定的监视器uOP。该MONITOR uOP可以被传递到执行资源370。MONITOR uOP可以具有指示将被监视的地址(监视地址)的关联地址。关联地址可以采取显式操作数或隐式操作数(即,关联地址是从预定的寄存器或其他存储位置取得的)的形式。关联地址可以“指示”监视地址,因为它传达了足够的信息以确定监视地址(可能结合其他寄存器或信息)。例如,关联的地址可以是具有对应的物理地址的线性地址,其可以是适当的监视地址。或者,监视地址可以虚拟地址的形式给出,或者可以被指示为相对地址,或者以其他公知或方便的地址指定方式指明。如果使用虚拟地址操作数,则可能希望允许将一般性保护错误识别为中止事件(break event)。
监视地址可以指示用于监视的存储器的任何适当的单元。例如,根据一个实施例,监视地址可以指示高速缓存线。但是,根据另一个实施例,监视地址可以指示高速缓存线的一部分、存储器的特定/选择大小的部分或单元,或者单个地址,其中所述存储器的特定/选择大小的部分或单元可以与不同处理器的高速缓存线的大小具有不同的关系。监视地址可以指示包含有由操作数指定的数据(和更多数据)的单元,或可以具体指示出所期望的数据单元的地址。
使用图3的图示,根据一个实施例,监视地址可以被提供给地址翻译逻辑375并被传送给监视器310,在这里它可以被存储在监视地址寄存器335中。响应于MONITOR操作码,执行资源370然后可以使能和激活监视器310,如处理框510所指示的以及图6所详细说明的那样。根据一个实施例,在MONITOR操作码之后发生的任何存储操作可以被防护(fence),以确保存储可以在任何线程暂停发生之前被处理并因此被检测到。根据一个实施例,作为激活监视器310的结果,需要在任何随后的序列指令被进行之前进行一些操作。但是,处理框510被显示为与处理框505并行发生,因为根据一个实施例,监视器310一旦被MONITOR操作码激活,就可以继续与其他操作并行运行,直到中止事件发生。
在处理框505,可以接收线程1中的存储器等待(MWAIT)操作码。根据一个实施例,MWAIT操作码可以被执行用来对监视器事件去屏蔽。响应于MWAIT操作码,可以在处理框515进行测试,以确定监视器事件是否挂起。如果没有监视器事件挂起,则可以在处理框520进行测试以确定监视器是否是活动的。例如,如果MWAIT被执行而没有事先执行MONITOR,则监视器310可能不是活动的。如果监视器是非活动的或监视器事件挂起,则可以在处理框565继续线程1的执行。
根据一个实施例,如果监视器310是活动的并且没有监视器事件挂起,则可以在处理框525暂停线程的执行。在处理框530,为了清空所有指令,线程暂停/恢复逻辑377可以包括流水线刷新(flush)逻辑382,以排空处理器流水线。在处理框535,一旦流水线已经被排空,划分/退火逻辑385可以使得任何独占地与线程1相关联的已划分资源被让出,以由其他线程使用。这些被让出的资源可以被退火以形成一组更大的资源,以供剩余的活动线程使用。例如,参考图4的双线程示例,与线程1相关的所有指令可以从两个队列中排空。然后每对队列可以被组合来为第二线程提供更大的队列。类似地,可以使得更多来自寄存器池的寄存器对第二线程可用,来自存储缓冲器的更多项可以被释放用于第二线程,可以使得重新排序缓冲器中的更多项对第二线程可用。大体上,这些结构被回复到两倍大小的单个专用结构。应考虑使用不用数目的线程的实施方式所产生的不同比例。
根据一个实施例,在处理框540、545和550,测试各种事件来确定线程1是否可以被恢复。特别地,这些测试可以不由被作为线程1的一部分而执行的指令进行。而是,这些操作可以由处理器并行于其他线程的处理而进行。如将参考图6更详细讨论的那样,监视器自身可以检查监视器写事件是否已经发生,并因此通过设置事件挂起指示器来指示。事件挂起指示器可以通过EVENT信号被提供给暂停/恢复逻辑377(例如,微代码)。因为在处理框505该事件被MWAIT操作码去屏蔽,所以在一个实施例中(框540),在适当的指令边界,微代码可以识别监视器事件。事件检测逻辑345可以检测其他事件,例如中断,这些事件是在处理框545被指定为中止事件。此外,根据一个实施例,可以在处理框550周期性地使用可选的计时器来退出存储器等待事件,以确保处理器没有由于某些特定的事件序列而被冻结。如果这些事件没有用信号通知退出mwait状态,则线程1可以保持暂停。
如果线程1被恢复,根据一个实施例,在检测到适当的事件时,线程暂停/恢复逻辑377可以再次被激活。而且,流水线可以在处理框555刷新,以从流水线中排空指令,使得资源可以被再次划分以适应即将被唤醒的线程1。在处理框560,适当的资源可以再次被划分,并且在处理框565,线程1可以被恢复。
图6是图示了用于监视逻辑的激活和操作的处理的实施例的流程图。在处理框600,取线程1的前端可以被停止,以防止线程1进一步的操作进入机器。在处理框605,关联地址操作数可以由地址翻译逻辑375从线性地址转换为物理地址。在处理框610,可以增加向被监视地址的写的可观测性,也许可以使高速缓存代理使得写操作对于监视器310自身可见,这些写操作将影响到存储在监视地址的信息。在处理框615,用于监视的物理地址可或早或晚地被存储在该序列中。
接下来,根据一个实施例,在处理框620,监视器可以被使能。监视器监视用于向物理地址写的总线周期,该物理地址可以是被存储在监视地址寄存器335中的监视地址。以下参考图7,讨论监视操作的进一步的细节。在监视器被使能以后,根据一个实施例,可以在处理框625执行存储防护(store fence)操作。存储防护可以帮助确保机器中的所有存储在MONITOR操作码完成执行时被处理。利用从监视器被从机器排空以前的所有存储,可以减少错误地进入存储器等待(mwait)状态的可能性。存储防护操作可以作为预防措施,并且可能是耗时的操作。
存储防护是可选的,因为根据一个实施例,监视-存储器等待机制可以被设计为多出口机制。换句话说,例如某些中断、识别、板上系统计时器等的各种事件也可以造成从mwait状态退出。根据一个实施例,因为被监视的数据值已经改变,线程可以被唤醒。因此,根据一个实施例,软件可以双重检查存储在存储器中的特定值是否已经改变。根据一个实施例,某些事件,包括断言(assert)不可屏蔽中断(NMI)和系统管理中断(SMI)、机器检测中断以及错误,可以是被考虑的中止事件,而其他事件,例如关机事件,可以不是。例如,根据一个实施例,A20M管脚的断言也可以被认为是中止事件。
在处理框630,根据一个实施例,监视器可以继续测试总线周期的发生是否指示或看似指示对监视地址的写。如果检测到这样的总线周期,则可以在处理框635设置监视器事件挂起指示器。在执行了MWAIT操作码(图5的框505)之后,该事件挂起指示器可以被用作事件,并且引起图5的框555~565中的线程恢复。此外,改变地址翻译的事件可以引起线程1恢复。例如,引起转换表缓冲区(translation look-aside buffer)被刷新的事件可以触发线程1恢复,因为被进行来产生监视地址的从线性地址到物理地址的翻译可能不再有效。例如,在X86 Intel体系结构兼容处理器中,向控制寄存器CR0、CR3和CR4以及向某些机器专用寄存器的写入可能引起退出mwait状态。
图7是图示了用于处理监视操作的过程的实施例的流程图。具体地说,图7图示了图6的处理框620以及图3的监视器310的操作的进一步的细节。根据一个实施例,在处理框700,监视器310可以从总线控制器340接收用于总线事务的请求和地址信息。在处理框710,监视器310可以检查总线周期的类型和受影响的(一个或多个)地址。具体地说,周期比较逻辑320可以确定总线周期是否是指定的周期。根据一个实施例,地址比较电路330可以将总线事务地址与存储在监视地址寄存器335中的监视地址相比较,并且写检测逻辑325可以对来自总线控制器340的周期类型信息译码,以检测是否已经发生写入。如果发生向监视地址的写入,则可以在处理框720设置监视器事件挂起指示器。信号(WRITEDETECTED)可以被提供给线程暂停/恢复逻辑377,以用信号通知该事件(并且假设其已经由执行存储器等待(MWAIT)被使能,该信号将被服务)。最后,可以在处理框730停止监视器310。停止监视器可以节约功率,但在错误监视器事件被屏蔽或以别的方式没有产生,则这可能不是关键的。监视器事件指示器也可以在此时被复位。通常,服务监视器事件也可以屏蔽对其他监视器事件的识别,直到MWAIT可以再被执行。
在对监视地址读取的情形中,根据一个实施例,一致性相关逻辑350可以被激活。在处理框740,信号(比如HIT#)可以被断言,以防止其他代理获得所有权,该所有权可以允许以后的写,而不用一致性广播。根据一个实施例,监视器310可以保持活动,返回到处理框700,并且可以保持不被取监视地址的读影响。此外,如果事务不是对监视地址的读取也不是对监视地址的写入,则监视器可以保持活动并返回处理框700。
根据一个实施例,MONITOR指令可以是对于要被监视的某些类型的存取。这些存取可以是因为表明了有效的编程技术而被选择的存储,或者可以是由于其他原因而被选择的。例如,根据一个实施例,存储器存取必需是在自然对齐的回写存储器中的可高速缓存的存储。自然对齐的单元可以是指在可以由N除尽的地址开始的N位单元。作为使用自然对齐的单元的结果,为了向被监视地址写入,可能需要访问单个高速缓存线(而不是在数据被分割跨越两个高速缓存线的情形可能需要的两个高速缓存线)。因而,使用自然对齐的存储器地址可以简化总线观测。
图8是图示了用于使用监视-存储器等待获取锁定以及监视锁定的处理的实施例的流程图。一般的超线程或多线程处理器可以包括多个线程或多个逻辑处理器(处理器)。通常,多个处理器表现出分别的物理处理器,并且共享相同的资源。在处理框802,处理器可以寻求获得锁定,该锁定可能被其他处理器争用。在判断框804,确定处理器所寻求获取的锁定是否被另外的处理器争用。被争用的锁定可以指一个或多个处理器所等待获得的锁定。如果锁定没有被争用,则在处理框806,处理器可以通过声明可用的锁定的所有权,使用获取锁定的传统方法获取锁定。
通常,如果锁定被一个或多个处理器争用,则可以形成等待队列来将寻求被争用的锁定的处理器包括于其中,以进行等待。但是,这样的处理器等待一般是“忙等待”,因为等待的处理器使用对它们可用的资源例如来存取被争用的锁定的存储器位置。在处理框808,根据一个实施例,如果锁定被争用,则可以为处理器创建队列单元或节点(节点),比如节点N。根据一个实施例,然后可以在处理框810初始化节点。根据另一个实施例,因为节点可能已经被初始化了,所以初始节点可能不是必须的。在处理框812,被初始化的节点然后可以被与被争用的锁定相链接或关联。根据一个实施例,一旦相关联,则节点可以用作被争用锁定的尾指针。
根据一个实施例,在处理框814,可以在节点上设立监视器,以监视与被争用的锁定相关联的节点,从而监视被争用的锁定。监视被争用的锁定可以包括监视锁定的锁定地址,以确定该锁定是否已经对第一处理器可用{Monitor(N.lock)}。根据一个实施例,设立监视器可以包括响应于前端365接收MONITOR操作码以及前端365产生特定的监视器uOP而激活监视。监视器uOP可以被传递到执行资源370。监视器uOP可以具有指示要被监视的地址(监视地址)的关联地址。根据一个实施例,监视地址可以包括节点被链接到的锁定的锁定地址。关联地址可以“指示”监视地址,因为它可以传达足够的信息以确定监视地址(可能结合其他寄存器或信息)。
如图3所示,根据一个实施例,监视地址可以被提供给地址翻译逻辑375,并且被传递到监视器,在此处它可以被存储在监视地址寄存器335中。响应于MONITOR操作码,执行资源370然后可以使能并激活监视器,如在处理框510中所指示和在图6中更详细说明的那样。根据一个实施例,一旦被根据一个实施例的MONITOR操作码激活时,监视器可以继续与其他操作并行运行,直到监视器事件发生。
在处理框816,根据一个实施例,存储器等待(mwait)指令可以被执行来使处理器休眠,同时等待被争用的锁定变得可用。根据一个实施例,MWAIT操作码可以被接收和传递用于执行。根据一个实施例,MWAIT操作码的执行可以对各种监视器事件去屏蔽。响应于MWAIT操作码,可以进行测试来确定监视器事件是否挂起。如果没有监视器事件挂起,则可以进行测试以确定监视器是否是活动的。例如,如果MWAIT被执行,而事先没有实现执行MONITOR,则监视器可能不是活动的。根据一个实施例,如果监视器是非活动的或监视器事件挂起,则处理器可以不进行休眠。根据一个实施例,监视器事件可以指这样的事件基于该事件的发生,监视器可以变成非活动的,结束对节点的监视,并且处理器可以被唤醒。例如,监视器事件可以包括处理器被轮到声明对锁定的所有权和/或锁定当由其他当前拥有锁定的处理器释放时,对该处理器变得可用。
根据一个实施例,在处理框818,可以使用对节点的监视-存储器等待机制,使处理器进入休眠。根据一个实施例,如果监视器是活动的并且没有挂起的监视器事件,则处理器可以进入休眠,直到监视器事件发生。换句话说,第一处理器可以休眠,直到例如处理器被识别为队列中声明对被争用的锁定的所有权的第一处理器。这样的事件可以被称为发生了监视器事件,其在处理框820使得监视不活动并唤醒处理器。
根据一个实施例,监视器事件可以不限于一个事件,可以测试各种事件来确定监视是否可以被结束,处理器是否可以被唤醒。如参考图6所讨论的,监视器自身可以检查监视器事件是否已经发生,并且因此通过设置事件挂起指示器来指示。事件挂起指示器可以通过EVENT信号被提供给处理器休眠/唤醒逻辑377(例如,微代码)。根据一个实施例,因为该事件已经被MWAIT操作码去屏蔽,所以微代码可以在适当的指令边界识别监视器事件。此外,事件检测逻辑345可以被用来检测被指定为监视器事件的各种事件。另外,根据另一个实施例,可以周期性地使用可选的计时器来退出mwait状态,以确保超线程处理器正确工作,并且对可能引起超线程处理器冻结的一些特定的事件序列进行检查。如果这些事件没有用信号通知退出mwait状态,则第一处理器可以保持休眠。
在处理框822,现在被唤醒的第一处理器可以声明对锁定的所有权,并且可以收回任何先前让出的资源。先前让出的资源可以指由第一处理器在休眠和等待锁定时让出的资源。根据一个实施例,在处理器休眠时,处理器休眠/唤醒逻辑377可以包括流水线刷新逻辑382,用于在处理框530,为了清除所有的指令而排空处理器流水线。一旦流水线已经被排空,划分/退火逻辑385可以使独占地与第一处理器相关联的任何被划分的资源被让出,用于由其他处理器使用。这些被让出的资源可以被退火来形成一组更大的资源,用于由其他处理器利用。例如,参考图4的双线程示例,所有与线程1相关的指令可以从两个队列中被排空。每对队列然后可以被组合来向第二线程提供更大的队列。类似地,可以使得更多来自寄存器池的寄存器对第二线程可用,来自存储缓冲器的更多项被释放用于第二线程,可以使得重新排序缓冲器中的更多项对第二线程可用。大体上,这些结构被回复到两倍大小的单个专用结构。应考虑使用不同数目的处理器的实施方式所产生的不同比例。
根据一个实施例,一旦第一处理器醒来或恢复,在检测到监视器事件时,处理器休眠/唤醒逻辑337可以再次被激活。同样,流水线可以被刷新以从流水线中排空指令,使得先前被让出的资源能够被再次划分以适应即将被唤醒的或最近被唤醒的第一处理器。
图9是图示了使用监视-存储器等待来释放锁定并监视锁定的过程的实施例的流程图。如参考图8所描述的,根据一个实施例,监视-存储器等待(monitor-mwait)可以被用来通过监视对应的队列单元或节点(节点),比如节点N,来监视被争用的锁定,并且使寻求被争用的锁定的处理器休眠,直到例如被争用的锁定变得可用。相对于释放锁定来使用监视-存储器等待,在判断框902,确定该锁定是否被争用。如果锁定没有被争用,则可以在处理框904释放锁定。但是,如果锁定被争用,则可以直到例如拥有该锁定的处理器(释放处理器)响应于包括一个或多个监视器事件的一个或多个事件释放了锁定,才发生锁定的释放。
根据一个实施例,监视器事件可以指寻求锁定的处理器(休眠处理器)是队列中下一个(或第一个)来声明被争用的锁定的处理器。例如,释放处理器可以发出store N.next->Lock,来从休眠/mwait唤醒寻求被争用的锁定的休眠处理器(if(N.next!=0){Store to N.next->Lock//唤醒休眠的处理器}),如参考图8的获取阶段中所描述的。换句话说,在判断框906,确定节点是否已经到达(或循环回到)零(0)。如果节点已经到达零,即N.next!=0,则释放处理器可以发出store N.next->Lock,即休眠处理器在队列中是下一个拥有锁定的处理器,并且休眠处理器在处理框910被从休眠中唤醒。如果节点还没有到达零,则该锁定在处理框908可以不被释放。在处理框912,锁定由释放处理器释放。根据一个实施例,在MONITOR操作码之后出现的任何存储操作都可以被防护,以确保这些存储可以被处理和检测到。根据一个实施例,作为激活监视器的结果,可能需要在采取任何随后的指令之前进行一些操作,或者一旦被MONITOR操作码激活,这些操作可以与其他操作并行进行,直到监视器事件发生。
图10是图示了系统的实施例的框图。根据一个实施例,如图所示,系统包括一组N个超线程处理器,处理器1005-1到1005-N。超线程处理器1005-1~1005-N与总线1050耦合。根据另一个实施例,可以使用单个处理器或超线程处理器与单线程处理器的组合。另外,可以使用其他公知或以其他方式可用的系统安排。例如,处理器1005-1~1005-N可以以点对点的方式连接,并且例如存储器接口的部件可以被集成到每个处理器1005-1~1005-N中。
根据一个实施例,与总线1050耦合的存储器接口1015与存储器130和介质接口1020相耦合。存储器1030可以包括多处理就绪操作系统1035,以及用于第一线程1040的指令和用于第二线程1045的指令。根据一个实施例,指令1030可以包括空循环。
根据一个实施例,执行各种功能或实施例的适当的软件可以被提供在多种机器可读介质中的任何一种中。根据一个实施例,介质接口1020可以提供对这些软件的接口。
根据一个实施例,介质接口1020可以是对存储介质(例如,磁盘驱动器、光盘驱动器、磁带驱动器、易失性存储器、非易失性存储器等)的接口,或者是对传输介质的接口(例如,网络接口或其他数字或模拟通信接口)。介质接口1020可以从介质(例如,存储介质1092或传输介质1095)读取软件例程。机器可读介质是可以至少暂时存储用于由机器接口读取的信息的任何介质。这可以包括信号传输(通过作为介质的导线、光或空气)和/或物理存储介质1092,例如各种类型的磁盘和存储器存储装置。
图11是图示了用于设计的模拟、仿真和制造的设计表现或格式的实施例的框图。代表设计的数据可以许多式表现设计。首先,如在模拟中有用的,可以使用硬件描述语言或其他功能描述语言表示硬件,它们基本上可以提供关于希望如何执行所设计的硬件的计算机化模型。硬件模型1110可以存储在比如计算机存储器的存储介质1100中,使得可以使用模拟软件1120对模型进行模拟,该模拟软件1120可以对硬件模型1110应用特定的测试程序1130,以确定它是否在执行了其所希望的功能。根据一个实施例,模拟软件1120可以不被记录、保存或包含在介质中。
根据一个实施例,具有逻辑和/或晶体管门电路的电路级模型可以在设计过程的一些阶段中产生。这样的模型可以被类似地模拟,有时候是通过使用可编程逻辑形成模型的专用硬件模拟器。进一步说,这种模拟可以是仿真技术。根据一个实施例,可重构的硬件可以包括存储了利用所公开的技术的模型的机器可读介质。
此外,根据一个实施例,大部分设计在某些阶段可以达到表示硬件模型中的各个器件物理放置的数据的水平。在可以使用传统半导体制造技术的地方,代表硬件模型的数据可以是说明在用于掩膜的不同掩模层上存在或不存在各种特征的数据,这些掩模层被用于生产集成电路。这种代表集成电路的数据可以具有所公开的电路,因为数据中的电路或逻辑能够被仿真或制造来实现这些技术。
根据一个实施例,数据可以以任何一种计算机可读介质的形式被存储。被调制或以其他方式被产生的用于传输这样的信息的光或电波1160、存储器1150或者例如盘的磁或光存储设备1140可以代表这样的介质。描述设计和设计的特定部分的一组数据可以表示这样的物品,其可以被单独地销售或由其他人用来进一步设计或制造。
尽管已经在附图中示出和描述了某些示例实施例,但是应该理解,这样的实施例仅仅是说明性的而不是限制性的,并且因为本领域的普通技术人员在研究了本公开后,将会想到各种其他的修改,所以本发明的实施例不限于所示出和所说明的特定结构和安排。
权利要求
1.一种方法,包括监视与被争用的锁定相关联的节点;以及使要获取所述被争用的锁定的处理器休眠,直到一个事件发生。
2.如权利要求1所述的方法,其中,监视所述节点包括通过执行用于激活所述节点的所述监视的监视指令,监视与所述被争用的锁定的相对应的锁定地址。
3.如权利要求1所述的方法,还包括执行存储器等待指令来使处理器休眠,直到所述事件发生。
4.如权利要求1所述的方法,还包括当所述事件发生时,唤醒所述处理器,其中所述事件包括所述被争用的锁定变得可用;以及所述处理器获取所述可用的锁定。
5.如权利要求1所述的方法,其中,所述被争用的锁定变得可用包括所述处理器是队列中下一个要获取所述被争用的锁定的处理器,并且所述被争用的锁定被释放。
6.如权利要求1所述的方法,其中,使所述处理器休眠包括由所述处理器让出资源,用于其他处理器使用。
7.如权利要求4所述的方法,其中,所述唤醒包括使所述节点的所述监视不活动,以及所述处理器使用所述被让出的资源。
8.如权利要求7所述的方法,其中,所述让出包括让出寄存器池中的多个寄存器;让出指令队列中的多个指令队列项;让出存储缓冲器中的多个存储缓冲器项;让出重新排序缓冲器中的多个重新排序缓冲器项。
9.一种方法,包括指定与队列单元相关联的监视地址,以监视所述队列单元,其中,所述指定包括执行监视指令和存储器等待指令。
10.如权利要求9所述的方法,其中,所述队列单元对应于要获取被争用的锁定的处理器。
11.如权利要求10所述的方法,其中,使用监视/存储器等待的组合,使所述处理器在等待所述被争用的锁定时休眠。
12.如权利要求11所述的方法,其中,当一个事件发生时,所述处理器被唤醒,所述事件包括所述处理器是队列中下一个要获取所述被争用的锁定的处理器,并且所述被争用的锁定被释放。
13.一种处理器,包括执行单元,用于执行监视指令和存储器等待指令,以监视与被争用的锁定相关联的节点;和逻辑,用于使要获取所述被争用的锁定的逻辑处理器休眠,直到一个事件已经发生。
14.如权利要求13所述的处理器,还包括检测逻辑,用于检测所述事件的发生,其中所述事件包括指定事件,所述指定事件包括所述被争用的锁定变得可用。
15.如权利要求13所述的处理器,其中,使所述逻辑处理器休眠包括由所述逻辑处理器让出资源,用于其他逻辑处理器使用。
16.如权利要求13所述的处理器,其中,所述逻辑还用于当所述事件发生时,唤醒所述逻辑处理器,所述唤醒包括使所述节点的所述监视不活动,以及所述逻辑处理器使用所述被让出的资源。
17.如权利要求16所述的处理器,其中,所述让出包括让出寄存器池中的多个寄存器;让出指令队列中的多个指令队列项;让出存储缓冲器中的多个存储缓冲器项;让出重新排序缓冲器中的多个重新排序缓冲器项。
18.一种系统,包括存储介质;和与所述存储介质耦合的处理器,所述处理器具有执行单元,用于执行监视指令和存储器等待指令,以监视与被争用的锁定相关联的节点;和逻辑,用于使要获取所述被争用的锁定的逻辑处理器休眠,直到一个事件已经发生。
19.如权利要求18所述的系统,还包括检测逻辑,用于检测所述事件的发生,其中所述事件包括指定事件,所述指定事件包括所述被争用的锁定变得可用。
20.如权利要求18所述的系统,其中,使所述逻辑处理器休眠包括由所述逻辑处理器让出资源,用于其他逻辑处理器使用。
21.如权利要求18所述的系统,其中,所述逻辑还用于当所述事件发生时,唤醒所述逻辑处理器,所述唤醒包括使所述节点的所述监视不活动,以及所述逻辑处理器使用所述被让出的资源。
22.一种在其上存储有代表指令序列的数据的机器可读介质,所述指令序列当被机器执行时,使所述机器监视与被争用的锁定相关联的节点;以及使要获取所述被争用的锁定的处理器休眠,直到一个事件发生。
23.如权利要求22所述的机器可读介质,其中,监视所述节点包括通过用于激活所述节点的所述监视的监视指令,监视与所述被争用的锁定相对应的锁定地址。
24.如权利要求22所述的机器可读介质,所述指令序列当被机器执行时,还使所述机器执行存储器等待指令来使处理器休眠,直到所述事件发生。
25.如权利要求22所述的机器可读介质,所述指令序列当被机器执行时,还使所述机器当所述事件发生时,唤醒所述处理器,其中所述事件包括所述被争用的锁定变得可用;以及允许所述处理器获取所述可用的锁定。
26.如权利要求22所述的机器可读介质,其中,使所述处理器休眠包括由所述处理器让出资源,用于其他处理器使用。
27.一种在其上存储有代表指令序列的数据的机器可读介质,所述指令序列当被机器执行时,使所述机器指定与队列单元相关联的监视地址,以监视所述队列单元,其中,所述指定包括执行监视指令和存储器等待指令。
28.如权利要求27所述的机器可读介质,其中,所述队列单元对应于要获取被争用的锁定的处理器。
29.如权利要求28所述的机器可读介质,所述指令序列当被机器执行时,还使所述机器使用监视/存储器等待的组合,使所述处理器在等待所述被争用的锁定时休眠。
30.如权利要求29所述的机器可读介质,所述指令序列当被机器执行时,还使所述机器当一个事件发生时唤醒所述处理器,所述事件包括所述被争用的锁定变得可用。
全文摘要
本发明提供了一种用于使用监视-存储器等待来监视锁定的方法、装置和系统。根据一个实施例,与被争用的锁定相关联的节点被监视;寻求被争用的锁定的处理器被休眠,直到监视器事件发生。
文档编号G06F9/46GK1577282SQ20041005946
公开日2005年2月9日 申请日期2004年6月28日 优先权日2003年6月27日
发明者佩尔·哈马隆德, 詹姆斯·B·克罗斯兰, 阿尼尔·阿加尔沃, 夏夫南丹·D·考希克 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1