多线程处理器系统中的线程切换控制的制作方法

文档序号:6415867阅读:167来源:国知局

专利名称::多线程处理器系统中的线程切换控制的制作方法
技术领域
:本发明涉及下列美国专利申请,这些申请的主题在此被纳入作为参考(1)美国专利申请,题为“在多线程处理器中选择线程切换事件的方法和装置”,系列号08/958,716,于1997年10月23日递交,与本申请同时递交;(2)美国专利申请,题为“在多线程处理器中保证前进的装置和方法”,系列号08/956,875,于1997年10月23日递交,与本申请同时递交;(3)美国专利申请,题为“在多线程处理器中改变线程优先级”,系列号08/958,718,于1997年10月23日递交,与本申请同时递交;(4)美国专利申请,题为“在多线程处理器中强行线程切换的方法和装置”,系列号08/956,577,于1997年10月23日递交,与本申请同时递交,(5)美国专利申请,题为“在多线程处理器中后台完成指令及相关的取请求”,系列号773,572,于1996年12月27日递交;(6)美国专利申请,题为“多入口全相关过渡高速缓存”,系列号761,378,于1996年12月9日递交;(7)美国专利申请,题为“对从命令源到命令容纳点的命令设定优先级和路由的方法和装置”,系列号761,380,于1996年12月9日受理;(8)美国专利申请,题为“命令追踪处理过程的方法和装置”,系列号761,379,于1996年12月9日递交;(9)美国专利申请,题为“通过减小存储器访问等待延迟以增强数据处理系统中多线程操作的方法和系统”,系列号473,692,于1995年6月7日递交;(10)美国专利5,778,243号,题为“存储器的多线程单元”,1998年7月7日发布。一般而言,本发明涉及用于计算机数据处理系统的一种改进的方法和装置,具体而言,本发明涉及在处理器硬件中实现的一种改进的高性能多线程计算机数据处理系统和方法。现代计算机的基本结构包括与外部世界进行信息通信的外围装置;这些外围装置可以是键盘、监视器、磁带驱动器、与网络连接的通信线路等。在计算机的基本结构中还包括从外部世界接收这种信息,处理这种信息及向外部世界发布这种信息所必须的硬件,包括总线(bus)、存储器单元、输入/输出(I/O)控制器、存储装置、以及至少一个中央处理单元(CPU)等。CPU是系统的大脑。它执行包括计算机程序的指令,指挥其他系统部件的操作。从计算机硬件的角度看,大多数系统以基本相同的方式操作。处理器实际上是快速完成非常简单的操作,如算术和逻辑比较以及从一地到另一地移动数据。指挥计算机完成大量这种简单操作的程序给人一种错觉,似乎计算机在做复杂的事情。用户感觉到的计算机系统的新的或改善的能力实际上都可能是机器完成同样的简单操作,但快得多。所以,对计算机系统的不断改进需要使这些系统比以往更快。对计算机系统总速度的一种度量,也称作通过量,是由每单位时间完成的运算次数来度量的。从概念上讲,对系统速度的所有可能的改进中最简单的是提高各组成部分的时钟速度,特别是处理器的时钟速度。于是,如果每个部件以两倍速度运行而工作方式完全不变,则系统将在一半时间内完成给定任务。多年以前由分离元件构成的计算机处理器通过缩小尺寸和减少元件数量使其运行速度显著加快;最终使整个处理器作为一个集成电路组装到单个芯片上。这种尺寸减小使有可能提高处理器的时钟速度,从而提高系统速度。尽管由集成电路得到了速度的巨大改进,但仍然存在对更快计算机系统的需求。硬件设计者们通过更大规模的集成和其他技术、进一步减小电路尺寸,已能进一步改善速度。然而,设计者们认为,物理尺寸的减小不能无限地继续下去,而且继续提高处理器时钟速度也是有限的。所以,为进一步改善计算机系统的总体速度,其注意力已指向其他途径。不改变时钟速度,利用多处理器仍能改善系统速度。组装在集成电路芯片上的单个处理器成本适中,使得使用多处理器成为实际可行的。使用从属处理器,通过把工作从CPU卸载到从属处理器,相当大地改善了系统速度。例如,从属处理器常规地执行重复的和单一专用目的的程序,例如输入/输出装置通信和控制。还可能把多个CPU放入单一计算机系统,典型情况是同时服务于多用户的基于主机的系统。每个不同的CPU能代表不同的用户单独执行不同的任务,从而提高系统同时执行多个任务的总体速度。然而,要改善单个任务(例如一个应用系统)的执行速度则困难得多。在多个CPU当中协调各功能的执行和发送结果,这是一个需要技巧的事。对于从属I/O处理器,这不那么困难,因为功能是预先确定的和有限的,然而对于执行通用应用程序的多CPU,要协调各功能则困难得多,部分原因是设计者们事先不知道程序的详细情况。大多数应用程序遵循由处理器完成的单一路径或步骤流程。但有时可能打破这一单一路径,变成多个平行的路径,这样做的通用性应用还处于研究之中。一般地说,把一个长的任务分配成较短的任务让多处理器平行处理是由根据每个具体情况来编写代码的软件工程师完成的。这种专门特定方案对于执行那些不一定会重复或不一定可预测的商业事务是特别有问题的。这样,尽管多处理器能改善总体系统性能,但仍有许多理由要改善单个CPU的速度。如果CPU时钟速度是给定的,但通过增加每个时钟周期的平均运算次数,仍能进一步提高CPU速度,即增加每秒执行的运算次数。高性能单芯片微处理器的一般结构是简化指令集计算机(RISC)结构,其特点是一个快速执行的常用指令小型简化集合,即前面提到的那些快速完成的简单运算。随着半导体技术的进步,RISC结构的目标已经是开发能在每个机器时钟周期执行一个或多个指令的处理器。增加每个时钟周期执行的平均运算次数的另一途径是修改CPU内部的硬件。这一通过量度量,即每条指令的时钟周期数,通常用于表征高性能处理器的结构的性能。指令流水线和高速缓存存储器是能实现这一点的计算机结构特征。流水线指令执行允许在完成先前发出的指令之前开始执行其后的指令。高速缓存存储器存储经常使用的以及靠近存储器的其他数据,并在大多数情况下允许指令继续执行而无需等待主存储器的完全访问时间。利用向前看硬件找出要平行执行的指令,从而多执行单元也已表现出某些改进。在超标量(superscalar)计算机和甚长指令字(VLIW)计算机中能进一步提高传统RISC处理器的性能,这两种计算机在每个处理器周期平行地执行多于1条指令。在这种结构中提供了多功能单元或多执行单元以平行地运行多个流水线。在超标量结构中,指令可以按顺序完成和不按顺序完成。按顺序完成的意思是在其前面已安排的所有指令已经完成之前没有任何指令能完成。不按顺序完成的意思是允许在其前面的所有指令完成之前来完成该指令,只要能满足预先定义的规则即可。为了在超标量系统中按顺序和不按顺序完成指令,在某些环境下流水线将停止。如果一条指令依赖于先前分配的未完成指令的结果,则会造成流水线停止。例如,一些指令所依赖的加载/存储指令中所需数据未在高速缓存中,即高速缓存缺失(miss),则在高速缓存中能得到数据之前便不能完成这些指令。在高速缓存中保持为继续执行所需的数据,并维持高命中率,即对数据的请求次数与在高速缓存中准备好可用数据的次数之比,对于特别是涉及大数据结构的计算而言,可不是小事。高速缓存缺失能造成流水线停止达几个周期,而且如果在大部分时间里不能得到数据,则存储器等待时间总量将是严重的。虽然主存储器所用存储器装置的速度在变得更快,但这种存储器芯片和高端处理器之间的这种速度差距都不断增大。于是,在当前的高端处理器设计中有大量执行时间量花费在等待解决高速缓存缺失,而这些存储器访问延迟用去了处理器执行时间中越来越多的部分。改进CPU内硬件效率的又一种技术是把处理任务分配成可独立执行的指令序列,称作线程(thread)。这一技术涉及把一较大任务分配成较小的任务而由不同的处理器执行,唯其其中这些线程是由同一处理器执行。于是,当由于多种理由中的任何一个使CPU不能继续处理或执行这些线程之一时,该CPU便切换到去执行另一线程。在计算机结构领域中定义的术语“多线程(multithreading)”不同于该术语在软件方面的应用,在软件使用中该术语的意思是一个任务分成多个相关线程。在结构定义中,线程可以是独立的。所以,“硬件多线程”常用于区分该术语的两种应用。在本发明的范围内,术语“多线程”的意思就是承受存储器等待时间的硬件多线程。当对当前线程检测到流水线停止条件时,多线程允许处理器的流水线在不同的线程上作有用的工作。多线程还允许在检测到当前线程的停止条件时让实现非流水线结构的处理器为一单独的线程去做有用的工作。有两种基本的多线程形式。一种传统的形式是在处理器中保持N个线程或状态,并在逐个周期的基础上使这些线程相互交错。这要消除所有流水线的依赖关系,因为在单一线程中的指令是彼此分离的。多线程的另一种形式,即本发明中要考虑的一种形式,是对某些长等待时间事件交错其线程。多线程的传统形式涉及对每个线程复制处理器寄存器。例如,以商品名PowerPCTM售出的实现该结构的处理器,为实现多线程,处理器必须维持N个状态以运行N个线程。于是下列寄存器被复制N次通用寄存器、浮点寄存器、条件(condition)寄存器、浮点状态和控制寄存器、计数寄存器、链路寄存器、异常寄存器、保存/恢复寄存器、以及专用寄存器。再有,特殊的缓存器,如段后备缓存器,可被复制或每个入口可以用线程号作标记,如果不如此做,则可在每次线程切换时清仓。还有,一些分支预测机制,例如相关寄存器和返回堆栈,也应被复制。幸运的是,不需要复制处理器的某些更大的功能,例如一级指令高速缓存(L1I-高速缓存)、一级数据高速缓存(L1D-高速缓存)、指令缓存器、存储队列、指令调度器、功能或执行单元、流水线、翻译后备缓存器(TLB)、以及分支历史表。当一个线程遇到延迟时,处理器迅速切换到另一线程。这一线程的执行复盖了在第一线程上的存储器延迟。现有的多线程技术在一高速缓存缺失或一存储器查访上描述切换线程。在“Sparcle大规模多处理器的一种变革性设计”(Agarwal等,IEEE微(Micro)卷13、No.3,pp48-60,1993年6月)中回顾了这一技术的主要实例。如在RISC体系结构中应用的那样,通常用于支持功能调用的多寄存器集被修改成用于维持多线程。8个重叠的寄存器窗口被修改成4个不重叠的寄存器集,其中每个寄存器集是为捕获和消息处理所作的保留。这一系统揭示出一个线程切换,它发生在每次远程存储器请求中所造成的一级高速缓存缺失时。尽管这一系统代表了技术上的一种进步,但现代处理器设计经常利用附加在处理器上的多级高速缓存和高速存储器。该处理器系统利用某种公知的算法以确定每级高速缓存内将加载的主存储器的那个部分,这样,每当发生存储器访问时,如果它不在第一级高速缓存中,则处理器必须试图从第二级或更高级高速缓存中得到那个存储器访问内容。这样,本发明的一个目标是提供一种改进的数据处理系统,它能利用多线程数据处理系统中实现的硬件逻辑和寄存器在一多级高速缓存系统中减小由于存储器等待时间造成的延迟。本发明通过提供一个能在两个指令线程之间切换执行的多线程处理器和在带有可选的对线程切换条件进行软件改写的硬件寄存器中实现的线程切换逻辑来实现这一目标。处理各种指令线程的各种状态允许优化处理器在各线程当中的使用。当处理器为第一线程从各种存储器部件,例如第一线程的高速缓存、存储器、外部I/O、直接存取存储器,检索必要的数据和/或指令时,允许该处理器去执行第二指令线程从而提高对处理器的利用程度,否则它会是空闲的。线程线换的条件对于每个线程可以是不同的,或者可以通过利用一个软件线程控制管理器在处理过程中改变线程切换条件。当第一线程具有要求大量周期来完成的等待时间事件例如高速缓存缺失时,可处理第二线程,在此期间第二线程可能遇到在同一或不同高速缓存级上的高速缓存缺失,但它可在短得多的时间内完成。通过本发明实现一个前进计数寄存器和允许一个可编程最大线程切换次数的方法(在超过此最大次数之后处理器停止切换线程直至一个线程能够执行),可以避免翻来复去地重复,其中每个线程被锁在切换线程的一个重复周期中而没有任何指令在执行的情况。前进寄存器及其阈值监视在没有指令执行的情况下已发生的线程切换次数,并当这个次数等于阈值时便不再发生线程切换,直至一条指令被执行。前进计数寄存器的一个附加优点是能对某些等待时间的事件定制寄存器和阈值,例如一个阈值用于像访问外部计算机网络那样的等待时间很长的事件;而另一个前进阈值用于像高速缓存缺失那样的等待时间较短的事件。在等待由一线程切换超时寄存器中指定的周期数之后迫使一线程切换可以防止对一线程的计算机处理在一个超常的时间段内处于不活动状态。计算机处理系统不会由于急用共享资源而遭到挂起。实现了在线程之间公平分配处理器周期,而且限定了对外部中断及处理器外部其他事件的最大响应等待时间。快速线程切换是由硬件寄存器实现的,这些寄存器存储线程状态、线程优先级、以及线程切换条件。利用线程切换硬件寄存器能改变处理器中一个或多个线程的优先级。来自中断请求的信号或者软件指令都能用于修改指示每个线程优先级的状态寄存器中的位。然后,根据每个线程的优先级,可以发生线程切换,以允许较高优先级的线程有更多的处理周期。改变优先级的好处在于允许改变线程切换频率,增加至关重要的任务的执行周期数,减小由于线程切换等待时间造成的高优先级线程丢失的处理周期数。本发明的另一方面是一种计算机处理方法,包括把所有线程状态,该线程是在多线程处理器中执行的一个活动线程还是等待执行的一个后台线程,都存储在相应的硬件寄存器中;在多线程处理器中执行至少一个活动线程和改变活动线程的状态。改变活动线程的状态能使多线程处理器切换到执行一个后台线程。有若干方法去改变多处理组合中任何一个或所有线程的状态。当一线程遇到一个等待时间事件而该事件停止了多线程处理器中该线程的执行时,该线程的状态将改变。当一线程或另一线程的优先级被改变时,该线程的状态也会改变。作为若干事件之一或其组合的结果,多线程处理器能切换到另一线程。例如,本发明的方法还包括对至少一个活动线程已执行的多处理器周期数进行计数,而当执行周期数等于一超时值时,则把执行切换到至少一个后台线程。本发明方法的能造成多线程处理器切换线程的另一步骤是接收一个外部中断信号,该信号指示处理器中任何线程已从外部源中接收到数据和/或指令;该外部中断信号可能改变也可能不改变该中断信号所属的那个线程的优先级。本发明的方法还包括除了别的以外,还通过检验状态变化是否由等待事件引起、确定该等待事件是否为线程切换事件以及确定该线程切换事件是否被启动,从而确定是否在多线程处理器中任何线程状态的变化会使它切换到执行至少一个后台线程。当与该线程切换事件对应的线程切换控制寄存器中的至少一位被启动时,该线程切换事件便被启动。虽然在多线程处理器内的一个线程可以改变状态,但当等待事件不是一个线程切换事件时,或当在线程切换控制器中该线程切换事件未被启动时,或者当一个优先级改变是无关,多线程处理器可能仍不把执行切换到另一线程。通过对已发生的从至少一个活动线程离开的那些线程切换次数计数,把该计数与一计数阈值比较,并在该计数等于计数阈值时发出信号,并响应于该信号而不切换执行,这样,前进计数也能防止切换线程。本发明还是一种计算机处理方法,包括把至少一个活动线程的第一状态存储到至少一个硬件寄存器中,和把至少一个后台线程的第二状态存储在至少一个硬件寄存器中;在多线程处理器中执行至少一个活动线程。如果下列条件中的任何一个发生,则本方法改变活动线程的第一状态(i)由于一等待事件使一活动线程的执行停止;或(ii)把一活动线程的优先级改成等于或低于一后台线程的优先级。然后,本方法通过首先确定该等待事件是否是线程切换事件,然后确定该线程切换事件是否被启动,由此来确定改变该活动线程的第一状态是否会使多线程处理器把执行切换到该后台线程。在下列条件之一的情况下,本方法预见多线程处理器能把执行切换到至少一个后台线程(i)计数该活动线程已执行的处理器周期数,并当执行周期数等于超时值时把执行切换到后台线程;(ii)收到一个外部中断信号,然后把执行切换到后台线程;(iii)在线程切换控制寄存器中与线程切换事件对应的至少一位被启动;或(iv)把后台线程的优先级改变为等于或高于该活动线程的优先级。在下列条件之一的情况下,多线程处理器不准把执行切换到后台线程(i)等待事件不是一个线程切换事件;(ii)该线程切换事件未被启动;或(iii)通过对已发生的从那个活动线程离开的切换次数计数,然后把该计数与一计数阈值比较,并当该计数等于计数阈值时向线程切换控制寄存器发信号。本发明还是一个线程状态寄存器,包括用于存储至少一个活动线程的状态和至少一个后台线程的状态的多个位,其中这多个位中有些位指示一个等待事件、是否到每个相应状态的过渡会造成把执行切换到另一个线程、以及这些线程的优先级。本发明还是一个数据处理系统,包括一个带有多线程处理器的中央处理单元,这个多线程处理器能执行至少一个活动线程并存储至少一个后台线程的状态,还包括多个执行单元,多个寄存器,多个高速缓存存储器,一个主存储器以及一个指令单元;其中执行单元、寄存器、存储器及指令单元在功能上是互连的;所述中央处理单元还包括一个线程切换逻辑单元和一个存储控制单元,在功能上也与所述多线程处理器相连。该数据处理系统还包括多个外部连接,包括一个总线接口、总线、至少一个输入/输出处理器连于至少下述之一磁带驱动器、数据存储装置、计算机网络、光纤通信、工作站、外部装置、信息网络;它们之中任何一个都能通过总线向中央处理单元发送数据和指令。在本发明的数据处理系统中,当至少一个活动线程停止执行时,该事件及其理由被传送到存储控制单元,该存储控制单元向线程切换逻辑单元发送一相应的信号,于是线程切换逻辑单元改变这至少一个活动线程的状态并确定多线程处理器是否将切换线程并执行所述多个后台线程之一。本发明还是一个计算机处理系统,包括一个多线程处理器单元;一个功能上与多线程处理器相连的线程切换逻辑单元;以及功能上与多线程处理器及线程切换逻辑单元相连的存储控制单元。存储控制单元接收用于多线程处理器的数据、指令和输入,并根据这些数据、指令和输入向线程切换逻辑单元及多线程处理器发出信号。作为响应,线程切换逻辑向多线程处理器发出信号。该存储控制单元进一步包括过渡高速缓存、与至少一个指令单元相连的至少一个第一多路复用器以向多线程处理器提供指令供执行,以及至少一个第二多路复用器向至少一个执行单元供给数据。多线程处理器单元包括至少一个数据高速缓存、至少一个存储器、至少一个指令单元、以及至少一个执行单元。线程切换逻辑还包括一个线程状态寄存器以及一个线程切换控制寄存器。线程切换逻辑可以还包括前进计数寄存器、线程切换超时寄存器和线程切换管理器。本发明的计算机处理系统可以还包括一个多线程处理器组合,它具有至少一个能执行至少一个活动线程并存储多个指令线程中的至少一个后台线程的多线程处理器,本发明的计算机处理系统可以还包括一个数据高速缓存以向多线程处理器供给数据,至少一个带有指令高速缓存的指令单元,至少一个存储器以向高速缓存及多线程处理器供给数据和指令,以及至少一个在其中执行数据和指令的执行单元。该计算机处理系统进一步包括一个功能上与多线程处理器相连的存储控制单元,该存储控制单元包括一个过渡高速缓存,至少一个从过渡高速缓存或指令高速缓存或存储器向指令单元传送指令的第一多路复用器,以及至少一个从数据高速缓存或过渡高速缓存或存储器向至少一个执行单元传送数据的第二多路复用器,至少一个向至少存储器、高速缓存、多路复用器及执行单元提供控制信号的排序器单元。该计算机处理系统还包括一个功能上与多线程处理器及存储控制单元相连的线程切换逻辑单元,该线程切换逻辑单元还从排序器单元接收信号和向排序器单元发送信号,该线程切换逻辑单元包括一个线程状态寄存器以存储至少一个活动线程和后台线程的状态,以及一个线程切换控制寄存器以存储和启动多个线程切换事件。在这种计算机处理系统结构安排中,线程切换逻辑单元从存储控制单元接收表征多线程处理器中多个线程的信号,并对此作出响应,确定是否把执行从多线程处理器中的至少一个活动线程切换出去。本发明的计算机处理器系统的另一实施例包括处理至少一个活动指令线程的装置,存储至少一个活动线程状态的装置,存储至少一个后台指令线程状态的装置,改变至少一个活动线程和至少一个后台线程的状态的装置,以及响应于改变状态装置以切换线程从而使处理装置处理至少一个后台线程的装置。改变至少一个活动线程和至少一个后台线程的状态的装置包括一个外部硬件中断信号或一线程切换管理器。改变至少一个活动线程和至少一个后台线程的状态的装置包括发送有关处理装置遇到多个等待事件之一的信号的装置,该事件使处理装置停止继续处理这至少一个活动线程。切换线程装置包括使多个等待事件之一能成为线程切换事件的装置,改变任何线程优先级的装置以及使处理装置超时的装置。此外,本发明还提供不理会切换线程装置的装置。简言之,本发明还是一个计算机处理器,包括能执行多个指令线程中至少一个的多线程处理器,用于存储这多个指令线程中每个的状态的第一组硬件寄存器,以及用于存储多个第一事件的第二组硬件寄存器,一旦这些第一事件发生,多线程处理器将切换线程的执行,其中如果在第二组硬件寄存器中启动一个第二事件,它改变第一组硬件寄存器中多个指令线程中任何一个的状态,则计算机处理系统将切换线程。从下面对最佳实施例及附图的详细描述,将清楚看出本发明的其他目标、特性和特征;其结构的相关元件的方法、操作和功能;部件的组合;以及制造的经济方面,所有这些都构成本发明的一部分,其中在各图中相似参考数字标明相应的部件。然而,参考下文中结合附图阅读示例性实施例的详细描述,将会最好地理解发明本身及其最佳使用方式,以及其他目标和优点,其中,图1是能实现其中描述的发明的计算机系统方框图。图2显示根据本发明的多线程数据处理系统的高层次方框图。图3显示图2的存储控制单元的方框图。图4显示图2的线程切换逻辑、存储控制单元及指令单元的方框图。图5显示当线程遇到图4所示不同线程切换事件时该线程状态的变化。图6是本发明的前进计数的流程图。现在参考附图,具体参考图1,图中描述了计算机数据处理系统10的高极方框图,该系统可用于实现本发明的方法和系统。能利用本发明的计算机数据处理系统10的主要硬件及相互连接示于图1。用于处理指令的中央处理单元(CPU)100与高速缓存120、130及150相连。指令高速缓存150存储供CPU100执行的指令。数据高速缓存120存储CPU100所用数据,而高速缓存130能存储由CPU100使用的数据和指令二者,例如高速缓存130能是一个L2高速缓存。高速缓存与主存储器140中的随机存取存储器通信。CPU100和主存储器140还经由总线接口152与系统总线155通信。各种输入/输出处理器(IOP)160-168附加在系统总线155上并支持与各种存储装置及输入/输出(I/O)装置通信,例如直接存取存储装置(DASD)170、带驱动器172、远程通信线路174、工作站176、及打印机178。应该理解,图1是要在高一级上描述计算机数据处理系统10的代表性组成部件,这些组成部件的数量和类型可以变化。在CPU100内部,处理器核110包括专门化的功能单元,它们每个完成基本的操作,如对指令排序、执行涉及整数的运算、执行涉及实数的运算、在可编址存储器和逻辑寄存器阵列之间传送数值。图2显示处在计算机数据处理系统10的其他组成部件环境中的处理器核110的细节。在一个最佳实施例中,数据处理系统10的处理器核110是一个单个集成电路、构成流水线的超标量微处理器,它可利用任何计算机结构实现,如以商品名PowerPCTM出售的RISC处理器系列;例如由IBM出售的PowerPCTM604微处理器芯片。如下文中要讨论的那样,数据处理系统10最好包括各种单元、寄存器、缓存器、存储器及其他部分,它们都最好由集成电路构成。应该理解,在图中各数据路径已被简化;在实际上,有许多单独的和平行的数据路径进出各部件。此外,与其中描述的发明关系不密切的各种部件已被略去,但应该理解,处理器含有额外的单元用于额外的功能。数据处理系统10可根据简化指令集计算(RISC)技术或其他计算技术进行操作。如图2中表现的那样,数据处理系统10最好包括处理器核110、一级数据高速缓存L1D-高速缓存120、二级L2高速缓存130、过渡高速缓存210、主存储器140、以及一级指令高速缓存L1I-高速缓存150,所有这些都利用各种总线连接在操作上与存储控制单元200相连。如图1中所示,存储控制单元200包括用于互连L1D-高速缓存120和L2高速缓存130的过渡高速缓存210、主存储器140、以及多个执行单元。L1D-高速缓存120和L1I-高速缓存150最好作为处理器100的一部分在芯片上提供,而主存储器140和L2高速缓存130可在芯片外提供。存储器系统140准备用于代表随机存取主存储器(它可以在处理器核100内部,也可以不在)以及在处理器核100外部的其他数据缓存器和高速缓存(如果有的话),以及其他外部存储器,例如DASD170、带驱动器172及工作站176,如图1中所示。L2高速缓存130最好是比主存储器140速度更高的存储器系统,通过把选定的数据存储在L2高速缓存130中,能将由于访问主存储器140而发生的存储器等待时间减至最小。如图1所示,L2高速缓存130和主存储器140经由存储控制单元200直接连至L1I-高速缓存150和指令单元220二者。如图2所示,来自L1I-高速缓存150的指令最好输出到指令单元220,根据本发明的方法和系统,指令单元220控制由各种子处理单元(如分支单元260、定点单元270、存储控制单元200、浮点单元280以及其他单元)执行多个线程,这些单元由数据处理系统10的结构指定。除了图2中描述的各种执行单元外,本领域技术人员会理解,现代超标量微处理器系统常常包括每个这种执行单元的多种版本,可以增加它们而不离开本发明的实质和范围。这些单元大多数将有来自各种寄存器(如通用寄存器GPR272、浮点寄存器FPR282)的操作数信息,作为输入源。此外,可以利用多个专用寄存器SPR274。如图2所示,存储控制单元200和过渡高速缓存210直接与通用寄存器272及浮点寄存器282相连。通用寄存器272与专用寄存器274相连。在只有这个多线程处理器100才有的各功能硬件单元当中,是线程切换逻辑400和过渡高速缓存210。线程切换逻辑400含有各种寄存器,它们确定哪个线程将是活动的或执行的线程。线程切换逻辑400在操作上与存储控制单元200、执行单元260、270和280、以及指令单元220相连。在存储控制单元200内部的过渡高速缓存210必须能实现多线程。存储控制单元200和过渡高速缓存210最好允许每线程至少一个未完成的数据请求。这样,当第一线程响应于例如L1D-高速缓存缺失的发生而被挂起时,第二线程将能访问L1D-高速缓存以得到那里存在的数据。如果这第二线程也造成L1D-高速缓存缺失,则将发出另一个数据请求,这样在存储控制单元200和过渡高速缓存210中必须保持多个数据请求。过渡缓存210最好是递交美国专利申请系列号08/761,378的过渡高速缓存,该申请于1996年12月9日递交,题为“多入口全相关过渡高速缓存”,其中作为参考引入。存储控制单元200、执行单元260、270和280以及指令单元220都在操作上与线程切换逻辑400相连。由它确定要执行哪个线程。如图2所示,在存储控制单元200和指令单元220之间提供了总线205,用于例如把数据请求传送给存储控制单元200和把L2高速缓存130缺失传送给指令单元220。再有,提供了一个翻译后备缓存器TLB250,它含有虚拟到实际地址映射。虽然在本发明中未予说明,但可以提供各种附加的高级存储器映射缓存器,如段后备缓存器,它的工作方式与翻译后备缓存器250相同。图3更详细地显示存储控制单元200,如它的名称表明的那样,这一单元控制从各种存储单元输入和输出的数据和指令,它们包括各种高速缓存、缓存器以及主存储器。如图3所示,存储控制单元200包括过渡高速缓存210,它在功能上与L1D-高速缓存120、多路复用器360、L2高速缓存130以及主存储器140相连。再有,过渡高速缓存210从排序器350接收控制信号。排序器350包括多个排序器,最好是3个,用于处理指令和/或数据的取请求。排序器350还向过渡高速缓存210及L2高速缓存130输出控制信号,并对主存储器140收、发控制信号。图3所示存储控制单元200中的多路复用器360从L1D-高速缓存120、过渡高速缓存210、L2高速缓存130及主存储器140接收数据,如果数据是要存储到存储器的话,则还从执行单元270和280接收数据。多路复用器360对来自这些源的数据进行选择,并响应于一个从排序器350收到的选择控制信号,把数据输出到L1D-高速缓存120或执行单元。再有,如图3所示,排序器350输出一个选择信号去控制第二多路复用器370。多路复用器370根据从排序器350收到的这个选择信号,把来自L2高速缓存130或主存储器140的数据输出到L1I-高速缓存150或指令单元220。在产生上文讨论的控制和选择信号时,排序器350访问和更新L1D-高速缓存120的L1目录320及L2高速缓存130的L2目录。关于其中描述的处理器的多线程能力,存储控制单元200的排序器350还向线程切换逻辑400输出信号,这些信号指出数据和指令请求的状态。于是,来自高速缓存120、130和150、主存储器140以及过渡后备缓存器250的反馈被送到排序器350,然后传送到线程切换逻辑400,它可以造成线程切换,如下文讨论的那样。请注意,如果在任何装置中发生能在多线程处理器中造成线程切换的事件,则它在操作上与线程切换逻辑400相连。图4是线程切换逻辑硬件400的逻辑表示和方框图,该硬件400确定是否一个线程将被切换,如果是,是哪个线程。存储控制单元200和指令单元220与线程切换逻辑400互连。线程切换逻辑400最好容纳在指令单元220中,但如果有许多线程,则线程切换逻辑400的复杂性会增加,因此该逻辑对指令单元220而言是外部的。为易于解释,图示的线程切换逻辑400对指令单元220是外部的。在本实施例中会造成一个线程被切换的事件在线470、472、474、476、478、480、482、484及486上从存储控制单元200的排序器350向线程切换逻辑400传送。其他等待事件能引起线程切换;这个清单不想全包括;相反,它只是表示如何能实现线程切换。由第一线程T0或第二线程T1请求一个未在指令单元220中的指令,则造成一个能引起线程切换的事件,在图4中分别由470和472表示。线474指示何时活动线程(不论是T0还是T1)遇到一个L1D-高速缓存缺失120。L2高速缓存130对于线程T0或T1的高速缓存缺失分别由线476和478表示。当为T0线程或为T1线程返回数据时线480和482分别被激活。翻译后备缓存器缺失和完成表游动(tablewalk)分别由线484和486指示。这些事件都被馈送到线程切换逻辑400,更具体地说是馈送到线程状态寄存器440和线程切换控制器450。线程切换逻辑400对每个线程有一个线程状态寄存器。在其中描述的实施例中表现出两个线程,所以有T0状态寄存器442用于第一线程T0和T1状态寄存器444用于第二线程T1,其中将对它们进行描述。线程切换逻辑400包括线程切换控制寄存器410,它控制哪些事件将造成线程切换。例如,线程切换控制寄存器410能锁住会引起状态变化的事件,使线程切换控制器450看不到这些事件,从而使一线程不会由于被锁住事件的结果而被切换。线程切换控制寄存器410是题为“在多线程处理器中选择线程切换事件的方法和装置”的美国专利申请的主题,该申请的系列号是08/958,716,1997年10月23日递交,与本申请同时递交,其中作为参考引入。前进计数寄存器420用于防止翻来复去地重复,它可以包括在线程切换控制寄存器410中。前进计数寄存器420是题为“在多线程处理器中保证前进的装置和方法”的美国专利申请的主题,该申请的系列号是08/956,875,1997年10月23日递交,与本申请同时递交,其中作为参考引入。线程切换超时寄存器430是题为“在多线程处理器中迫使线程切换的方法和装置”的美国专利申请的主题,该申请的系列号是08/956,577,1997年10月23日递交,与本申请同时递交,其中作为参考引入。线程切换超时寄存器430分配公平性和实际锁定(livelock)事项。再有,利用软件460能改变线程优先级,这是题为“在多线程处理器中改变线程优先级”的美国专利申请的主题,该申请系列号是08/958,718,1997年10月23日受理,与本申请同时受理,其中作为参考引入。最后,但不限于此,线程切换控制器450包括无数个逻辑门,它们代表了所有逻辑的终极,这些逻辑实际确定是否一个线程被切换,哪个线程以及在什么环境下被切换。将进一步详细给出这些逻辑部件及其功能。线程状态寄存器线程状态寄存器440包括每个线程的一个状态寄存器,如其名称所表明的那样,它存储相应线程的状态;在这一情况中是T0线程状态寄存器442和T1线程状态寄存器444。对于具体的结构和线程切换优先级方案,可以定制位数和特定位的位置以描述每个线程的状态。在下表中列出对具有两个线程的多线程处理器在其线程状态寄存器442和444中各位的分配。线程状态寄存器位分配(0)指令/数据0=指令1=数据(12)缺失类型排序器00=无缺失01=翻译后备缓存器缺失(检验位0判定I/D)10=L1高速缓存缺失11=L2高速缓存缺失(3)过渡0=到当前状态的过渡不造成线程切换1=到当前状态的过渡造成线程切换(47)保留(8)0=加载1=存储(914)保留(1517)前进计数器111=复位(在这一线程中指令已完成)000=该线程W/0指令第一次执行完成001=该线程W/0指令第二次执行完成010=该线程W/0指令第三次执行完成011=该线程W/0指令第四次执行完成100=该线程W/0指令第五次执行完成(1819)优先级(可由软件设置)00=中等01=低10=高11=<非法>(2031)保留(3263)保留,如果是64位实现的话在其中描述的实施例中,位0标识缺失还是处理器停止执行的理由是一个加载指令请求或者加载或存储数据请求的结果。位1和2指示所请求的信息能否得到,如果如此,是从哪个硬件,即所翻译的数据或指令地址是否不在翻译后备缓存器250中,或者数据或指令本身不在L1D-高速缓存120或L2高速缓存130中,在图5的描述中将进一步解释。位3指示是否一线程状态的改变会造成线程切换。一个线程可以改变其状态而不造成线程切换。例如,如果当线程T1遇到一个L1高速缓存缺失时发生了线程切换,那么如果线程T1遇到一个L2高速缓存缺失则将不会有线程切换,因为该线程已由于L1高速缓存缺失而切换了。然而,T1的状态仍然改变。另一种情况是,如果通过选择,线程切换逻辑400被配置或编程,使得在L1高速缓存缺失时不切换,那么当一线程确实遇到L1高速缓存缺失时,即使该线程改变其状态,将没有线程切换。线程状态寄存器442和444的位8被分配为特定线程请求的信息是要加载到处理器核中还是从处理器核中存储到高速缓存或主存储器中。位15至17被分配为防止翻来复去的重复,下文中将参考前进计数寄存器420加以讨论。位18和19能在硬件中设定,或能由软件设定,以指示线程优先级。图5代表本实施例中由数据处理系统10处理的一个线程的4种状态,这些状态存储在线程状态寄存器440中,位的位置是12。状态00代表“准备好”状态,即该线程已准备好供处理,因为所需要的所有数据和指令都能得到;状态10代表这样的线程状态,其中在处理器内该线程的执行被停止,因为该线程在等待或者数据返回到L1D-高速缓存120中或者指令返回到L1I-高速缓存150中;状态11代表该线程在等待数据返回到L2高速缓存130;状态01表明在翻译后备缓存器250上有一缺失,即虚拟地址错或不可用,称作“表游走(tablewalk)”。在图5中还显示出线程状态的层次结构,其中状态00指示该线程已准备好供执行,具有最高优先级。短等待时间的事件最好赋予较高优先级。图5还显示了当从各种源提取数据时状态的变化。正常的无中断地执行线程T0在块510中表示为状态00。如果发生L1D-高速缓存或I-高速缓存缺失,则线程状态变为状态10,如在块512中表示的,遵循分别在线474(图4)上由存储器控制单元200发出的信号和在线470(图4)上由指令单元200发出的信号。如果所需的数据或指令在L2高速缓存130中并被提取,则在块510恢复T0的正常执行。类似地,图5的块514代表L2高速缓存缺失,它把T0或T1线程的状态改变为状态11,此时存储控制单元200在线476或478(图4)上通知这一缺失。当如线480和482(图4)上所指示的那样,从主存储器140中取出指令或数据到L2高速缓存中,并将其加载到处理器核100,则在块510,状态再变回到状态00。当所请求信息的虚拟地址在翻译后备缓存器250中不可用时,存储控制单元200在线484(图4)上与线程寄存器440通信,如块516所示,作为TLB缺失或状态01。当该地址变为可用的或者如果存在一个由存储控制单元200在线486(图4)上通告的数据存储中断指令,则该线程的状态返回到状态00,意思是已准备好供执行。状态数和每个状态代表什么,可由计算机结构自由选定。例如,如果一线程有多个L1高速缓存缺失,例如L1I-高速缓存缺失和L1D-高速缓存缺失二者,则可对每个高速缓存类型赋予单独的状态。另一种作法是可以赋予单个线程状态来代表不只一个事件或事件发生。给出了一个线程切换算法的实例,它针对有相等优先级的两个线程,用于确定是否要切换线程。能根据本发明的原理扩展和修改该算法,从而适用于更多的线程和线程切换条件。线程状态寄存器440(图4)中存储的每个线程的状态与线程切换算法给出的每个线程优先级二者之间的相互作用在每个周期要动态地被询问。如果活动线程T0有一个L1缺失,则该算法将使线程切换到休眠的线程T1,除非休眠线程T1在等待一个L2缺失的解决。如果未曾发生切换而且活动线程T0的L1高速缓存缺失转变成了L2高速缓存缺失,则该算法指示处理器切换到休眠线程T1而不管T1的状态如何。如果这两个线程都在等待一个L2高速缓存缺失的解决,则首先使L2缺失得到解决的那个线程成为活动线程。在每个切换决定时刻,在大多数情况下采取的行动是最佳化的,造成最好的性能。请注意,由L2高速缓存缺失造成的线程切换以其他线程的状态为条件,如果不是这样,则额外的线程切换就会发生,造成性能降低。线程切换控制寄存器在任何多线程处理器中,都存在与切换线程相关联的等待时间和性能代价。在其中描述的最佳实施例中的多线程处理器中,这种等待时间包括使当前线程完成到它能被中断并在其后被调用时能正确地重新启动的那一点所需要的时间,把针对该线程的硬件设施从当前线程的状态切换到新线程的状态所需要的时间,以及重新启动新线程和开始其执行所需要的时间。以本发明可操作的针对线程的硬件设施最好包括前面描述的线程状态寄存器和在美国专利5,778,243号中描述的存储器单元,该专利题为“存储器的多线程单元”,其中作为参考引入。为了在一个“粗粒的”多线程数据处理系统中实现最佳性能,与通常的单线程方式相反,在多线程方式中产生线程切换的事件的等待时间必须大于与切换线程相关联的性能损失。用于产生线程切换的事件的等待时间依赖于硬件和软件二者。例如,在多线程处理器中特别的硬件考虑包括实现处理器芯片外部L2高速缓存所用外部SRAM的速度。在L2高速缓存中的快SRAM减小L1缺失的平均等待时间,而较慢的SRAMS增加L1缺失的平均等待时间。这样,如果在外部L2高速缓存数据访问等待时间大于线程切换代价的硬件中把一个线程切换事件定义为一个L1高速缓存缺失,则性能得到增强。作为特定软件代码特性如何影响线程切换事件等待时间的一例,考虑代码的L2高速缓存命中与缺失之比,即在L2高速缓存中能准确得到数据的次数与由于数据不在L2高速缓存中而必须从主存储器中提取数据的次数之比。L2命中与缺失之比高则减小L2高速缓存缺失的平均等待时间,因为L1高速缓存缺失很少会造成更长的L2缺失等待时间。L2命中与缺失之比低则增加L1缺失的平均等待时间,因为更多的L1缺失造成更长等待时间的L2缺失。这样,如果执行代码的L2命中与缺失之比高,则一个L1高速缓存缺失可不作为线程切换事件,因为L2高速缓存数据访问等待时间小于线程切换代价。当执行的软件代码具有低L2命中与缺失之比时,L1高速缓存缺失将被启动为线程切换事件,因为L1高速缓存缺失多半能导致更长等待时间的L2高速缓存缺失。某些类型的等待事件是不容易被检测到的。例如,在某些系统中,当发生一高速缓存缺失时L2高速缓存向指令单元输出一个信号。然而,其他L2高速缓存不输出这种信号,例如,如果L2高速缓存控制器在处理器以外的单独芯片上,于是处理器不能容易地确定一个状态变化。在这些结构中,该处理器可对每个待决L1高速缓存缺失有一个周期计数器。如果在预定周期数之后缺失数据尚未从L2高速缓存返回,则处理器的行动犹如已发生了一个L2高速缓存缺失并相应地改变线程状态。这一算法可应用于有不只一种独特等待时间类型的其他场合。只作为一例,对于一个处理器中的L2高速缓存缺失,从主存储器取得数据的等待时间可能显著地不同于从另一处理器取得数据的等待时间。在线程状态寄存器中可对这两种事件赋予不同的状态。如果没有信号去区分这些状态,则可用一计数器去确定在它遇到L2高速缓存缺失之后该线程应为哪一状态。线程切换控制寄存器410是一个软件可编程的寄存器,它选择事件以确定线程切换,并对每个定义的线程切换控制事件有一个单独的启动位。虽然其中描述的实施例未对每个线程实施单独的线程切换控制寄存器410,但能对每个线程实施单独的线程切换控制寄存器410,从而以更多的硬件和复杂性为代价提供更大的灵活性和更高的性能。再有,在一个线程切换控制寄存器中的线程切换控制事件不需要与任何其他线程切换控制寄存器中的线程切换控制事件完全相同。线程切换控制寄存器410能由服务处理器以软件写入,例如在美国专利5,079,725号中说明的动态扫描通信接口,该专利题为“与扫描设计系统和扫描测试技术一起使用的芯片识别方法”,或者由处理器本身用软件系统代码写入。线程切换控制器450使用线程切换控制寄存器410的内容去使能允许或不允许产生一个线程切换。在寄存器410中的值1使与该位关联的线程切换控制事件能产生一个线程切换。在线程切换控制寄存器410中的值零不允许与该位关联的线程切换控制事件产生一个线程切换。当然,在执行线程过程中的一条指令能使那个特定线程或其他线程的任何一个或全部线程切换条件变为“不能”。下表显示线程切换事件和它们在寄存器410中的使能位之间的关联。线程切换控制寄存器位赋值(0)L1数据高速缓存取缺失时切换(1)L1数据高速缓存存储缺失时切换(2)L1指令高速缓存缺失时切换(3)指令TLB缺失时切换(4)L2高速缓存取缺失时切换(5)L2高速缓存存储缺失时切换(6)L2指令高速缓存缺失时切换(7)数据TLB/段后备缓存器缺失时切换(8)L2高速缓存缺失而且休眠线程无L2高速缓存缺失时切换(9)当达到线程切换超时值时切换(10)当L2高速缓存数据返回时切换(11)IO外部访问时切换(12)双X存储两个中第一缺失(*)时切换(13)双X存储两个中第二个缺失(*)时切换(14)存储多重/串任何访问缺失时切换(15)加载多重/串任何访问缺失时切换(16)保留(17)双X加载两个中第一个缺失(*)时切换(18)双X加载两个中第二个缺失(*)时切换(19)如果机器状态寄存器(问题状态)位,msr(pr)=1则当“或”1,1,1指令时切换。允许软件优先级变化不依赖于msr(pr)。如果位19为1,“或”1,1,1指令设为低优先级。如果位19为0,在“或”1,1,1指令被执行时,只有当msr(pr)=0时优先级才设为低优先级。见下文要讨论的“以软件改变为优先级”。(20)保留(21)线程切换优先级使能(2229)保留(3031)前进计数(3263)在64位寄存器实现中保留(*)双X加载/存储是指加载或存储一个基本半字、字或双字,它们穿过一个双字边界。在本文范围内的双X加载/存储不是加载或存储多个字或字串。线程切换超时寄存器如前文讨论的那样,粗粒多线程处理器依靠长等待时间的事件去触发线程切换。有时在执行过程中在一多处理器环境中的一个处理器或在一多线程结构中的一个后台线程有一资源的所有权,该资源只能有单一所有者,而另一处理器或活动线程需要访问该资源,然后它才能前进。实例包括更新存储器页面表或从任务分配器得到一任务。该活动线程不能得到对该资源的所有权时不造成线程切换事件,尽管如此,线程在一个循环中绕圈,不能做有用的工作。在这种情况中,握有资源的后台线程不能得到对处理器的访问以释放资源,因为它从未遇到一个线程切换事件,因而不能成为活动线程。在各线程当中分配处理周期是另一个关心的问题;如果与在同一处理器中其他线程上运行的软件代码相比,在一个线程上运行的软件代码很少遇到长等待时间的切换事件。那么该线程得到的处理周期便多于它的公平分享的处理周期。而可能超过最大可接受时间的另一种过度延迟是在一有限时间段内等待服务于一外部中断或在处理器外部的某些其他事件的一个不活动线程的等待时间。这样,如果没有有用的处理要完成以防止系统挂起的话,最好在某一时间之后迫使一线程切换到休眠线程。在一时间段之后迫使一线程切换的逻辑是线程切换超时寄存器430(图4),一个减量器,以及一个减量器寄存器用于保持被减量的值。该线程切换超时寄存器430保持线程切换超时值。在本实施例中使用的线程切换超时寄存器430的实现示于下表线程切换超时寄存器位(021)保留(2231)线程切换超时值其中描述的本发明实施例不对每个线程实现一个单独的线程切换超时寄存器430,当然可以那样做以提供更大的灵活性。类似地,如果有多个线程,每个线程不需要有相同的线程切换超时值。每次发生线程切换时,由硬件把线程切换超时值从线程切换超时寄存器430加载到减量寄存器中。减量寄存器每周期减量一次,直至减量寄存器值等于零为止,然后一个信号发送到线程切换控制器450,它迫使产生一个线程切换,除非没有任何其他线程准备好处理指令。例如,如果系统中所有其他线程由于高速缓存缺失而在等待因而没有准备好去执行指令,则线程切换控制器450不迫使产生一个线程切换。如果当减量寄存器中之值达到零时没有其他线程准备好处理指令,则被减量的值冻结在零直至另一线程准备好处理指令,在这一点上便发生一个线程切换,减量寄存器重新加载那个线程的线程切换超时值。类似地,减量寄存器也能同样容易地命名为增量寄存器,当一线程在执行时,该寄存器可增量至某一预先确定值,此时将迫使产生线程切换。线程切换超时寄存器430可如前述由一服务处理器写入,或由处理器本身用软件代码写入。可根据特定的硬件配置和/或特定的软件代码来专门确定加载到线程切换超时寄存器430中的线程切换超时值,从而使不必要的线程切换造成的周期浪费达到最小。当活动线程等待由另一线程掌握的资源时,或者如果一个外部中断290或处理器外部的其他事件的响应等待时间太长,则线性切换超时寄存器430中的值太高会造成性能下降。如果一个线程遇到的线程切换事件次数高而其他线程不是,则太高的超时值还会防碍公平性。推荐的线程切换超时值为长于最频繁的最长等待时间事件(例如访问主存储器)的2倍至若干倍。在等待由线程切换超时寄存器430中指定的周期数之后迫使产生一个线程切换,这防止了系统由于争夺共享资源而挂起,坚持了线程间处理器周期分配的公平性,并限制了对外部中断及处理器外部其他事件的响应等待时间。前进保证在某些情况下,例如当一个单一指令产生多个高速缓存访问和/或多个高速缓存缺失时,每次发出线程切换和新线程变为活动线程时必须至少有一个指令被执行的限制太强了。例如,一个取指令可能引起L1I-高速缓存150缺失,如果所请求的指令不在该高速缓存中的话;但当指令返回时,所请求的数据可能在L1D-高速缓存120中得不到。类似地,翻译后备缓存器250中的缺失也能造成数据高速缓存缺失。因此,如果严格地强迫向前进,则在其后访问时的缺失不会造成线程切换。第二个问题是某些高速缓存缺失可能需要大量周期去完成,在此期间可能有另一线程在同一高速缓存级别上遇到高速缓存缺失,而这一缺失能在短得多的时间内完成。如果在返回第一线程时强迫严格的前进,则处理器便不能切换到有较短高速缓存缺失的线程。翻来复去重复即在那种情况下每个线程被锁在切换线程重复周期中而没有执行任何指令,为了补救这一问题,存在一个前进计数寄存器420(图4),它允许达到可编程的最大线程切换次数,称作前进阈值值。在最大线程切换次数之后,一条指令必须被完成,然后才能再发生切换。这样,防止了翻来复去的重复。前进计数寄存器420实际上可以是线程切换控制寄存器410中的3031位,或该处理器的软件可编程前进阈值寄存器。前进计数逻辑使用线程状态寄存器442、444的位1517,它们指示线程的状态并被分配一个线程在没有指令执行的情况下已遇到的线程切换数。于是,这些位最好包括前进计数器。当一线程改变状态而启动线程切换算法时,如果在该活动线程中已完成了至少一个指令,则该活动线程的前进计数器复位,而线程切换算法继续比较处理器中各线程之间的线程状态。如果没有完成任何指令,则在活动线程的线程状态寄存器中的前进计数器值与前进阈值比较。如果计数器值不等于阈值,由线程切换算法继续评估处理器中各线程的线程状态。然后,如果发生线程切换,则前进计数器增量。然而,如果计数器值或状态等于阈值,则在能执行一条指令之前将不发生线程切换,即直到发生前进时才会发生线程切换。请注意,如果阈值寄存器有零值,则在切换到另一线之前在该活动线程内必须完成至少一条指令。如果每次线程切换需要3个处理器周期,而且如果存在两个线程,而且如果线程切换逻辑被编程为5次尝试之后停止尝试切换线程,则处理器将在30个周期内翻来复去地重复。本领域技术人员会理解,在一方面由于没有前进而禁止线程切换和另一方面由于已超过超时计数而迫使线程切换这二者之间存在潜在的冲突。这种冲突能根据结构和软件容易地解决。图6是线程切换逻辑400的前进计数特性的流程图,这防止翻来复去重复。在块610,在从属于线程T0的线程状态寄存器442中的位1517被复位为状态111。在块620试图执行这一线程,于是状态变为000。如果对线程T0成功地执行了一条指令,则线程T0的状态变回为111并保持此状态。然而,如果线程T0不能执行一条指令,则线程T1发生线程切换,或者切换到另一后台线程,如果在处理器结构中允许两个以上线程的话。当发生离开T1或其他后台线程的线程切换并使执行返回到线程T0时,则发生执行线程T0的第二次尝试,于是线程T0的状态在块630变为001。如果线程T0遇到线程切换事件,则处理器的控制再次从线程T0切换到另一线程。类似地,每当发生离开另一线程(例如T1)返回线程T0的线程切换,则在这第3次尝试执行T0时T0的状态变为010(块640);在第4次尝试执行T0时变为011(块650),并在第5次尝试执行T0时变为状态100(块660)。在这一实现中,有5次试图切换到线程T0。在第5次尝试之后,或每当线程状态寄存器(TSR)442中位1517的值等于线程切换控制寄存器(TSC)410中位3031之值加1的时候,即每当TSC(3031)+1=TSR(1517)时,则不会发生从线程T0离开的线程切换。可以理解,5次尝试是一个任意数;由于不成功执行而允许切换的最大次数,即前进阈值,是可编程的,而且在某些结构中可能认为5次切换太多,而在另一些结构中5次又太少。不管怎样,在无指令执行的情况下试图切换到一线程的次数必须与一阈值比较,而且一旦已达到那一阈值值,则不会再发生离开那个线程的线程切换,其中处理器将等待直至与那个线性关联的等待时间被化解为止。在其中描述的实施例中,由线程状态寄存器442的位1517代表的线程状态与线程切换控制寄存器410中的位3031比较。对于有特别长等待时间的特殊事件,如与输入/输出装置的相互作用,进行特殊处理以防止由前进逻辑过早地锁住线程切换,从而改善了处理器性能。处置这些特别长等待时间事件的一种方式是锁住前进计数器增量,或者忽略前进计数器与阈值比较的输出信号,如果数据尚未返回的话。处理特别长等待时间事件的另一方式是对这些特殊事件使用单独的更长的前进计数。分配给处理器的所有软件线程的线程状态最好如所描述的那样保持在图4中的线性状态寄存器442和444中。在单一处理器中在一个时刻一个线程执行它的指令而其他线程在休眠。当相对于前进寄存器420、线程切换控制寄存器410或线性切换超时寄存器430而言,该活动线程遇到了一个长等待时间事件,则执行从活动线程切换到一个休眠线程。与哪个线程是活动线程无关,这些硬件寄存器使用的条件在执行过程中不发生动态变化。由线程切换管理器灵活地改变线程切换条件改善了系统的总体性能。一个软件线程切换管理器能改变线程切换频率,增大至关重要任务可得到的执行周期数和减小由于线程切换等待时间造成的总周期损失。线程切换管理器或者可在编译时或者可在执行过程中由操作系统编程,例如,一个闭锁循环能改变线程切换频率;或者由于处在较低优先级的休眠线程在等待一个外部中断或否则已准备好,则可以把一操作系统任务分配。不允许或降低离开一活动线程的线程切换,从而使当前指令流的性能不受进出于它的切换所造成的等待时间的影响,这可能是有利的。另一种作法是,通过基本上降低其优先级,一个线程能放弃一些或全部它的执行周期,结果降低了进入它的切换频率或增加了离开该线程的切换频率,以增强系统的总体性能。线程切换管理器还能无条件地迫使或禁止一线程切换,或者影响下一次选择哪个线程去执行。多优先级线程切换方案对每个线程赋予一个优先级值,以使引起切换的条件定量化。还可能希望在某些情况下有由硬件改变线程优先级。例如,一个低优先级线程可能在等待某一事件,而当该事件发生时,该硬件能提高该线程的的优先级以影响该线程对该事件(例如一个外部中断290)的响应时间。各线程间的相对优先级或某一线程的优先级将影响对这一事件的处理。线程的优先级可由硬件响应于一个事件来调节,或由线程切换管理器软件使用一个或多个指令来调节。线程切换管理器改变硬件线程切换逻辑完成的行动,以有效地改变线程的相对优先级。对于其中描述的有两线程的实施例使用了3个优先级,这3个优先级足以区分线程以允许对性能调优而不会使系统性能变坏。利用3个优先级,两个线程能有相等的中等优先级状态,对两个线程选择3个优先级这种做法不想成为一种限制。在某些结构中,一个“正常”状态可能是有一个线程的优先级总是高于其他线程。在本发明的范围内想要复盖多于两个执行线程,具有一个或多个优先级,它们可在硬件中设定或由软件编程。每个线程的3个优先级是高、中、低。当线程T0的优先级与线程T1的优先级相同时,这对线程切换逻辑无影响。两个线程都有相等的优先级,则哪一个也没有优先的执行时间。当线程T0的优先级大于线程T1的优先级时,对某些线程切换事件,即所有L1高速缓存缺失(即数据加载、数据存储和指令取),便不能由T0切换到T1,因为L1高速缓存缺失的解决要比其他条件(例如L2缺失和翻译)快得多。可能使任何线程切换事件失效,从而给予线程T0以更好的机会,以比线程T1接受更多的执行周期,这允许线程T0继续执行,只要它不浪费过多的执行周期数。然而,如果线程T0遇到一个较长的执行等待时间,例如一个L2高速缓存缺失或从计算机系统外部的源提取数据,则处理器仍将放弃对线程T1的控制。从线程T1到T0的线程切换不受影响,除非当休眠线程T0准备好而在这种情况中线程T0优先于线程T1时发生切换。当由于一L2高速缓存缺失或翻译请求使线程T0被切换开,而当线程T1在执行时这一条件在后台得以解决,这时预计会发生这种情况。线程T0的优先级低于线程T1的情况类似于上述情况,只是指定的线程相反。有几种不同的可能途径去实现通过改变线程优先级来管理线程切换。对处理器结构可以增加新指令。有所希望的行动的那些有副作用的现存处理器指令也能使用。对在允许软件控制的各种方法当中进行选择有影响的各因素当中有(a)重新定义结构以包括新指令的容易程度和结构改变对现有处理器的影响;(b)在不同版本处理器上运行同一软件的需要;(c)在使用新的专用指令与重用现有指令并确定造成的副作用二者之间作性能权衡;(d)所希望的软件控制水平,例如能否由某些现有指令的每次执行(例如特殊的加载或存储)造成这种作用,或者是否需要通过向指令流中增加指令来增加控制以特别造成这种作用。其中描述的结构最好利用未用过的指令,它的值不改变处理器中纳入结构的通用寄存器;这一特性对于把多线程能力改进到一个处理器结构中是至关重要的。否则可对特殊指令编码。这个指令是一个“优选的空操作”“或0,0,0”,然而,其他指令能有效地用作空操作。空操作(no-op或nop)是这样一条指令,它的执行使计算机进入下一个要执行的指令而不完成任何操作。在一个最佳结构实施例中,通过使用不同版本的“或”指令,“或0,0,0”或“1,1,1”或任何现有的能把额外的优先权切换意义加到它上面以改变线程优先级的指令,这同一指令流可在一处理器上执行而不产生坏作用,例如非法指令中断。当试图执行一个非法指令,或不由本实现提供的保留指令或可选指令时,便会产生非法指令中断。一个扩展利用机器状态寄存器的状态去改变这些指令的意义。例如,可能不希望允许用户对部分或全部这些线程优先级指令进行编码并访问它们提供的功能。它们提供的特殊功能可能被规定为只在某些执行方式中发生,而在其他方式中它们没有作用而且将作为一个“空操作”正常执行。一种可能的实现,利用双线程的多线程处理器,使用3个优先级切换指令,这些指令成为执行软件本身的一部分,以改变本身的优先级tsop1“或1,1,1”-切换到休眠线程tsop2“或1,1,1”-置活动线程于低优先级-切换到休眠线程-注意只在特权模式下有效,除非TSC〔19〕=1Tsop3“或2,2,2”-置活动线程于中等优先级Tsop4“或3,3,3”-置活动线程于高优先级-注意只在特权模式下有效优先级切换指令tsop1和tsop2可为同一指令,如在其中实现为“或1,1,1”,但它们也可以各为单独的指令。如其中描述的那样,这些指令与线程切换控制寄存器410的19和21位以及机器状态寄存器的问题/特权位相互作用。如果线程切换控制寄存器410的位21位有值1,则线程切换管理器能把它的线程优先级置为线程状态寄存器中位1819中代表的3个优先级之一。如果线程切换控制寄存器410的位19有值0,则指令tsop2的线程切换与线程优先级设置由机器状态寄存器的问题/特权位控制。另一方面,如果线程切换控制寄存器410的位19有值1,或者如果机器状态寄存器的问题/特权位有值0而且在代码中出现指令“或1,1,1”,则该活动线程的优先级设为低而且执行立即切换到休眠或后台线程,如果该休眠线程被允许的话。指令“或2,2,2”置活动线程的优先级于中等,不管机器状态寄存器的问题/特权位的值如何。而当机器状态寄存器的问题/特权位有值0时,指令“或3,3,3”置活动线程的优先级于高。如果线程切换控制寄存器320的位21为零,则两个线程的优先级都置于中等,而且“或X,X,X,”指令时优先级的作用被锁住。如果一个外部中断请求有效,而且如果相应线程的优先级为低,则把该线程的优先级置于中等。被线程优先级改变的事件是(1)由于L1D-高速缓存加载数据缺失而切换;(2)由于L1D-高速缓存存储数据缺失而切换;(3)由于L1I-高速缓存指令取缺失而切换;(4)如果休眠线程处于准备好状态而切换。此外,外部中断生效可能改变相应线程的优先级。下表显示优先级对引起线程切换的条件的影响。在第3和第4列中的简单的TSC条目的意思是利用线程切换控制(TSC)寄存器410中提出的条件去启动一次线程切换。把TSC〔02〕条目作为0对待的意思是线程切换控制寄存器410的位02被看作是对那个线程这些位的值犹如零,而线程切换控制寄存器410中的其他位按原样定义引起线程切换的条件。在第4列中的短语“当线程T0准备好时”的意思是一旦线程T0不再等待使它切换出去的缺失事件时便发生到线程T0的切换。在第3列中的短语“当线程T1准备好时”的意思是一旦线程T1不再等待使它切换出去的缺失事件时便发生到线程T1的切换。如果这缺失事件是一个线程切换超时,则不保证在一较高优先级线程切换回来之前较低优先级事件能完成一条指令。建议给予做无产出工作的线程以低优先级以避免损失性能,即使在闲循环中的每条指令引起线程切换也如此。然而,仍然重要的是,如果一个设在低先级的线程请求一外部中断290,则应允许硬件改变线程优先级。在这种情况下,该线程被提高到中等优先级以允许更快地响应中断。这允许一个等待外部事件的线程把它本身设为低优先级,它将停留在那里直至该事件被通知出去。尽管已联系当前认为最实际的和最佳的实施例描述了本发明,但应该理解,本发明不限于所说明的实施例,而是相反,本发明要复盖在所附各权利要求的实质和范围内包括的各种修改和等价安排。权利要求1.一种计算机处理方法,包括把至少一个活动线程的第一状态存储到至少一个硬件寄存器中;在多线程处理器中执行这至少一个活动线程;以及改变这至少一个活动线程的第一状态。2.权利要求1的方法,还包括把至少一个后台线程的第二状态存储到至少一个硬件寄存器中;判定这至少一个活动线程的第一状态的改变是否引起多线程处理器把执行切换到这至少一个后台线程。3.权利要求1或2的方法,其中改变至少一个活动线程第一状态的步骤包括描述一个活动线程等待时间事件,它停止多线程处理器的执行。4.权利要求1或2的方法,其中改变至少一个活动线程第一状态的步骤包括改变该活动线程的优先级。5.权利要求1至4中任何一个的方法,还包括把执行切换到这至少一个后台线程。6.权利要求1至5中任何一个的方法,还包括对这至少一个活动线程已执行的处理器周期数计数并当该执行周期数等于一个超时值时把执行切换到这至少一个后台线程。7.权利要求1至6中任何一个的方法,还包括接收一个外部中断信号,于是把执行切换到这至少一个后台线程。8.权利要求2至7中任何一个的方法,其中判定这至少一个活动线程的第一状态的改变是否使多线程处理器把执行切换到这至少一个后台线程的步骤还包括检验第一状态的改变是否由一活动线程等待时间事件造成的;判定这等待时间事件是否是一个线程切换事件;以及判定该线程切换事件是否是被允许的。9.权利要求8的方法,其中当线程切换控制寄存器中与该线程切换事件对应的至少一位为使能位时该线程切换事件便被允许。10.权利要求2至9中任何一个的方法,其中判定这至少一个活动线程第一状态的改变是否使多线程处理器把执行切换到这至少一个后台线程的步骤还包括改变这至少一个活动线程的优先级,使其等于或低于这至少一个后台线程的优先级。11.权利要求2至10中任何一个的方法,还包括改变这至少一个后台线程的优先级,使其等于或高于这至少一个活动线程的优先级;以及判定改变这至少一个后台线程的第二状态是否使多线程处理器把执行切换到这至少一个后台线程。12.权利要求11的方法,还包括把执行切换到这至少一个后台线程。13.权利要求11的方法,还包括不把执行切换到这至少一个后台线程。14.权利要求2、3或4中任何一个的方法,还包括不把执行切换到这至少一个后台线程。15.权利要求2至7、10、11、13或14中任何一个的方法,其中判确定这至少一个活动线程第一状态的改变是否使多线程处理器把执行切换到这至少一个后台线程的步骤还包括检验第一状态的改变是否由于一等待时间事件的结果;判定该等待时间事件是否是一个线程切换事件;以及判定该线程切换事件不被允许。16.权利要求2、3、4、8、9、10、11、13或14中任何一个的方法,还包括对已经发生的离开这至少一个活动线的线程切换次数计数;把该次数与一计数阈值比较;当该次数等于计数阈值时发出信号,并响应于这一信号而不对执行进行切换。17.权利要求2至16中任何一个的方法,其中判定这至少一个活动线程第一状态的改变是否使多线程处理器把执行切换到这至少一个后台线程的步骤还包括把这至少一个活动线程的第一状态与这至少一个后台线程的第二状态相比较;以及选择有最低预期持续时间的等待时间事件的线程供多线程处理器中执行。18.权利要求17的方法,还包括当第二状态为准备好或后台线程在等待一个后台等待时间事件的预期持续时间等于或短于活动线程等待时间事件时,把执行切换到这至少一个后台线程。19.权利要求3至18中任何一个的方法,其中活动线程等待时间事件是一个L2高速缓存缺失或一个表后备缓存器缺失,而后台等待时间事件是一个L1高速缓存缺失。20.权利要求3至12或15至19中任何一个的方法,还包括改变这至少一个后台线程的第二状态;当活动线程等待时间事件的预期持续时间长于一后台等待时间事件时,或当这至少一个后台线程的第二状态为准备好时,把执行切换到这至少一个后台线程。21.一种计算机处理方法,包括把至少一个活动线程的第一状态存储到至少一个硬件寄存器中;把至少一个后台线程的第二状态存储到至少一个硬件寄存器中;在多线程处理器中执行这至少一个活动线程;如果下述条件中任何一个发生则改变这至少一个活动线程的第一状态由于一等待时间事件使这至少一个活动线程的执行停止;把这至少一个活动线程的优先级改变为等于或低于这至少一个后台线程的优先级;通过判定是否该等待时间事件是一个线程切换事件;以及判定是否该线程切换事件被允许。来判定改变这至少一个活动线程的第一状态是否使多线程处理器把执行切换到这至少一个后台线程;在下列条件之一的情况下把执行切换到这至少一个后台线程对这至少一个活动线程已执行的处理器周期数计数并当该执行周期数等于一超时值时,把执行切换到这至少一个后台线程;收到一个外部中断信号,于是把执行切换到这至少一个后台线程;在一线程切换控制寄存器中与该线程切换事件对应的至少一位是有效的;把这至少一个后台线程的优先级改为等于或高于这至少一个活动线程优先级;在下列条件之一的情况下不把执行切换到这至少一个后台线程确定该等待时间事件不是一个线程切换事件;确定该线程切换事件不是一个有效事件;对已发生的离开这至少一个活动线程的线程切换次数计数,并把该次数与一计数阈值比较,并当该计数等于计数阈值时向线程切换控制寄存器发信号。22.一个线程状态寄存器(440),包括多位用于存储至少一个活动线程的状态和至少一个后台线程的状态。23.权利要求22的线程状态寄存器,其中这多个位中的一些位指示一个等待时间事件,是否向每个有关状态的过渡造成把执行切换到另一线程,以及这些线程的优先级。24.一个数据处理系统(10),包括中央处理单元(100),包括一多线程处理器(110)能执行至少一个活动线程并存储至少一个后台线程的状态,还包括多个执行单元(260、270、280)、多个寄存器(272、274、284)、多个高速缓存存储器(120、130、150)、主存储器(140)、以及指令单元(220);其中执行单元、寄存器、存储器、及指令单元在功能上是互连的;所述中央处理单元还包括线程切换逻辑单元(400)和存储控制单元(200),它们也在功能上与所述多线程处理器相连;多个外部连接,包括总线接口(152)、总线(155)、至少一个输入/输出处理器(160)与下述中至少一个相连带驱动器(172)、数据存储装置(170)、计算机网络(166)、光纤通信(174)、工作站(176)、外围装置(178)、信息网络(174);它们任何一个都能经由总线向中央处理单元传送数据和指令;其中当这至少一个活动线程停止执行时,该事件及其理由以及其他数据和指令传送到存储控制单元,该存储控制单元把相应的信号发送到线程切换逻辑单元和多线程处理器,而线程切换逻辑单元改变这至少一个活动线程的状态并判定多线程处理器是否将切换线程并执行所述多个后台线程之一。25.权利要求24的计算机处理系统,其中该多线程处理器单元还包括至少一个数据高速缓存;至少一个存储器;至少一个指令单元;以及至少一个执行单元。26.权利要求24或25的计算机处理系统,其中存储控制单元(200)还包括过渡高速缓存(210);至少一个第一多路复用器(370)与这至少一个指令单元相连以提供指令供多线程处理器单元执行;至少一个第二多路复用器(360)向这至少一个执行单元供给数据。27.权利要求24至26中任何一个的计算机处理系统,其中该线程切换逻辑还包括线程状态寄存器(440);以及线程切换控制寄存器(410)。28.权利要求24至27中任何一个的计算机处理系统,其中线程切换逻辑还包括前进计数寄存器(420);线程切换超时寄存器(430);以及线程切换管理器。29.一个计算机处理器系统,包括处理至少一个活动指令线程的装置;存储这至少一个活动线程状态的装置;存储至少一个后台指令线程状态的装置;改变这至少一个活动线程和这至少一个后台线程的状态的装置;响应改状态装置,切换线程从而使处理装置处理这至少一个后台线程的装置。30.权利要求29的计算机处理器系统,其中改变这至少一个活动线程和这至少一个后台线程状态的装置包括一个外部硬件中断信号;一个线程切换管理器;当处理装置遇到多个等待时间事件之一时发信号的装置,该事件使处理单元停止继续处理这至少一个活动线程。31.权利要求29或30的计算机器系统,其中切换线程的装置包括使多个等待时间事件之一成为线程切换事件的装置;改变任何线程优先级的装置;使处理装置超时的装置;比较每个线程的状态并选择这样的线程的装置,该线程具有多个等待时间事件,而其中一个事件的预期等待时间最短。32.权利要求29至31中任何一个的计算机处理器系统,还包括不考虑切换线程装置的装置。33.一个计算机处理器,包括一个多线程处理器,能执行多个指令线程中的至少一个;第一组硬件寄存器,用于存储多个指令线程中每个的状态;第二组硬件寄存器,用于存储多个第一事件,一旦它们发生则多线程处理器将切换线程执行;其中如果改变第一组硬件寄存器中任何指令线程状态的第二事件在第二组硬件寄存器中为有效的话,则该计算机处理系统能切换线程。全文摘要在数据处理系统中完成计算机处理操作的系统和方法包括多线程处理器(110)和线程切换逻辑(400)。该多线程处理器(110)能在两个或更多个能独立执行的指令线程之间切换。每个线程根据其执行状态在线程状态寄存器(440)中有相应的状态。该线程切换逻辑含有一线程逻辑控制寄存器(410)存储能引发线程切换的条件。一旦发生线程切换事件,则动态地询问所有线程的状态和优先级,以确定哪个线程应为执行处理器的活动线程。线程切换逻辑有一超时寄存器(430),当活动线程在多线程处理器中的执行超过一可编程时间段时,该超时寄存器迫使发生线程切换。线程切换逻辑还有一个前进计数寄存器(420)以防止多线程处理器中在线程之间进行反复的无产出的线程切换。线程切换逻辑还响应于一线程切换管理器(460),它能改变不同线程的优先级,从而更换线程切换事件。文档编号G06F9/46GK1276887SQ98810345公开日2000年12月13日申请日期1998年10月14日优先权日1997年10月23日发明者约翰·M·博克哈根,理查德·J·埃克梅亚,威廉·T·弗林,谢尔登·B·莱文斯坦,安德鲁·H·沃特灵申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1