背景技术
本申请是普遍转让共同未决的美国专利申请序号08/966,706的继续部分,于1997年11月10申请,标题为“有效对实地址高速缓存器管理的设备和方法,其是本文的参考文献。
本申请还和下述普遍转让共同未决的美国专利申请有关,它们都是本文的参考文献:
序号08/976,533,於1997年11月21日申请,标题为“在多线程数据处理系统中从多条目全相关高速缓存缓冲器存取数据”。
序号08/958,718,1997年10月23日申请,标题为“在多线程处理机中改变线程优先级”。
序号08/958,716,1997年10月23日申请,标题为“在多线程处理机中用于选择线程切换事件的方法和设备。
序号08/957,002,1997年10月23日申请,标题为“多线程处理机系统中的线程切换控制”。
序号08/956,875,1997年10月23日申请,标题是“多线程处理机中保证正向进展的设备和方法”。
序号08/956,577,1997年10月23日申请,标题为“在多线程处理机中强制线程切换的方法和设备”。
序号08/773,572,1996年12月27日申请,标题为“多线程处理机中指令和相关的取请求的后台完成”。
现代计算机系统通常包括中央处理机(CPU)以及存储、检索及传送信息所需的支持硬件,例如通信总线和存储器。它还包括和外界通信所需的硬件,例如输入/输出控制器或存储控制器,以及连在其上的部件,如键盘、监视器、磁带机、磁盘机、和连网的通信线路、等等。CPU是系统的心脏。它执行构成计算机程序的指令并且指导其它系统部件的操作。
从计算机硬件的角度来看,大多数系统以基本上相同的方式运行。处理机能执行有限的非常简单的运算集,例如,算术、逻辑比较以及把数据从一个单元移动到另一个单元。但以非常快的速度执行每次运算。指导计算机执行大量的这些简单运算的程序给出计算机错综复杂地做事的错觉”通过执行基本上相同的非常简单的运算集而可能达到的计算机系统的新的或者改进的能力,只是使用户感觉计算机系统工作得更快。从而,对计算机系统的持续改进要求使这些系统还要更快。
计算机系统的总速度(亦称为“吞吐量”)可以粗略地用单元时间内执行的运算次数来量测。概念上,所有可能的改进系统速度方法中的最简单方法是提高各部件的时钟速率,尤其是处理机的时钟速率。例如,若每件事加倍快地运行而其它方面完全照常工作,系统会以一半的时间完成给定的任务。由许多分离器件构成的早期计算机处理机容易通过缩小器件尺寸、减少器件数量以及最终把整个处理机装配成单块芯片上的集成电路明显地提高速度。尺寸的减少使得有可能提高处理机的时钟速度,从而提高系统速度。
尽管由集成电路得到速度上的极大改进,对速度更快的计算机系统的需求仍然存在。通过更大的集成(即增加单块芯片上封装的电路数量)、通过进一步减小电路的尺寸以及通过各种别的技术,硬件设计者能得到速度上的进一步改进。然而,设计者可以看出不能无限地不断减小物理尺寸,他们的继续提高处理机的时钟速率的能力是受到限制的。从而注意力转向到其它进一步改进计算机系统的总速度的方法上。
在不改变时钟速率的情况下,有可能通过使用多个处理机改进系统的吞吐量。在集成电路芯片上装配的各个处理机的不贵的价格使此成为现实的。尽管采用多个处理机存在确实的潜在好处,但也引入了附加的体系结构问题。在不对此深入研究时,仍可看出存在许多改进各个CPU的速度的理由,不管系统总线采用多个CPU还是采用单个CPU。若CPU时钟速率是给定的,有可能通过提高每个时钟周期中执行的运算的平均数量提高每个CPU的速度,即,每秒钟执行的运算的数量。
为了提高CPU速度,在高性能处理机设计中常常采用指令流水线技术,以及一层或多层超高速缓冲存储器。流水线指令执行允许在结束前一个发布的指令之前开始执行后继的指令。超高速缓冲存储器存储频繁使用的数据以及其它更接近处理机的数据,并且在大多数情况下允许不必等待对主存储器的全部存取时间下持续地执行指令。
在某些情况下流水线会失去作用,一条依赖于尚未完成的先前调度的指令的结果的指令会造成流水线失去作用。例如,依赖于装入/存储指令的但该装入/存储指令中所需的数据不在超高速缓存(即超高速缓存未命中)的指令在能在超高速缓存中得到该数据之前不能被执行。保持超高速缓存中连续执行所必需的必要数据并保持高命中率并不是琐碎小事,尤其当计算涉及大数据结构时,其中命中率为对数据的请求数量和数据已可在超高速缓存中容易地得到次数的比。超高速缓存未命中可使流水线失效数个周期,并且若在大多数时间不能得到数据则存储器等待时间的总量将是严重的。尽管主存储器使用的存储器部件变得更快,但是这种存储器芯片和高级处理机之间的速度差距变得日益增大。从而,当前高级处理机设计中的相当多的执行时间花费在解决超高速缓存未命中上。
可以看出,减少处理机等待某些事件,例如重填某流水线或从存储器检索数据,所花费的时间会增加每时钟周期中的平均操作数量。一种面向该问题的体系结构上的发明被称为“多(执行)线程”。该技术涉及到把工作负荷分成多个独立的可执行指令序列,称为多个(执行)线程。CPU在任何时刻都保持多个线程的状态。从而,它相对简单地和快速地切换线程。
在计算机体系结构界对“多线程”术语的定义不同于软件上对该术语的使用,在后一情况下它意味着把任务划分成多个相关的线程。在体系结构定义中,线程可能是独立的。从而,常常使用“硬件多线程”以区分该术语的二种使用。在本文中,“多线程”指的是硬件多线程。
多线程存在二种基本形式。在更为传统的形式下,即有时称为“细粒多线程”下,处理机在逐个周期的基础上通过叠加执行并发地执行N个线程。这在单个线程内的各指令的执行之间建立了间隔,它使处理机不再需要等待某些短期的等待时间事件,例如对指令流水线的重填。在有时称为“粗粒多线程”的第二种形式的多线程下,相继地执行单个路线中的多条指令,直至处理机遇到一些较长期的等待时间事件,例如超高速缓存未命中。
通常,多线程涉及为每个线程复制处理机寄存器,以保持多个线程的状态。例如,对于商标名Power PCTM下出售的实现该体系结构以执行多线程的处理机,其必须保持N个状态以运行N个线程。从而,要把下述复制N次:通用寄存器、浮点寄存器、条件判别寄存器、浮点状态及控制寄存器、计算寄存器、链接寄存器、异常寄存器、保存/恢复寄存器以及专用寄存器。此外,可以复制诸如段后备缓冲器或者可利用线程号标记每个条目,并且若不这样做则必须在每次切换下进行清洗。此外,还应该复制某些转移预测机制,例如相关寄存器和返回栈。
通常,不复制较大的硬件结构,如层一指令高速缓存器、层一数据高速缓存器、功能单元或执行单元。在所有其它条件都相同的情况下,复制较大的硬件结构可能会有某些性能改善好处。然而,任何这种方法需要在增加的好处和所需的附加硬件之间进行折衷。超高速缓存在处理机芯片上占据相当大的面积,这些面积本能另有用途。从而,必须细心地选择超高速缓存的尺寸以及超高速缓存的数量和功能。
为了高性能设计,通常把层一指令高速缓存器(L1指令高速缓存器)插入到处理机芯片上。L1指令高速缓存器用于保持被认为是可能要在最近的将来执行的指令。
在把LI指令高速缓存器用于多线程处理机中的情况下,还要关心其它事情。指令超高速缓存器应在线程之间不存在过分争用下支持线程的快速切换。避免争用的一种方法是使每个线程具有独立的指令高速缓存器,但这会消耗宝贵的硬件并使各用于单个线程的超高速缓存过分小。最好在没有线程之间的过分争用下由所有的线程共享单个L1指令高速缓存器。还希望在可能下使高速缓存存取机制避免使用慢的地址转换机制。
对于高速处理机的运行,L1指令高速缓存器的设计是关键性的。若L1指令高速缓存器未命中率高、或存取时间太慢、或不同线程之间存在过分竞争、或难以保持超高速缓存的相关性,处理机会花费过分的等待执行下条指令的时间。处理机的持续改进要求L1指令高速缓存器有效地解决这些有关问题,尤其在多线程环境下。
具体实施方式
图1A中示出用于采用依据本发明的优选实施例的指令高速缓存器体系结构的单CPU计算机系统的主要硬件部件。用于处理指令的CPU101包含独立的内部的层一指令高速缓存器(L1指令高速缓存器)106和层一数据高速缓存器(L1数据高速缓存器)107。L1指令高速缓存器存储由CPU101执行的指令。L1数据高速缓存器存储由CPU101处理的数据(而不是指令)。CPU101和层二高速缓存器(L2高速缓存器)108连接,后者可用于保持指令和数据二者。存储器总线109在L2高速缓存器108和主存储器102之间或者在CPU101和主存储器102之间传送数据。CPU101、L2高速缓存器108以及主存储器102还通过总线接口105和系统总线110通信。各种I/O处理单元(IOP)111-115连至系统总线上并且支持和各种存储部件和I/O部件,例如直接存取存储部件(DASD)、磁带机、工作站、打印机以及用于和远程部件或其它计算机系统通信的远程通信线路,的通信。
应理解图1A的意图是在高层上描述系统100的主要代表性部件,而且这些部件的数量和类型是可变的。尤其,系统100可包含多个CPU。在图1B中描绘这样的多CPU系统。图1B示出一个具有四个CPU 101A、101B、101C、101D的系统,每个CPU分别具有各自的L1指令高速缓存器106A、106B、106C、106D以及各自的L1数据高速缓存器107A、107B、107C、107D。每个CPU分别和一个独立的L2超高速缓存108A、108B、108C、108D相连。
在该优选实施例中,每个CPU能够保持二个线程的状态,并且在某些等待时间事件下在线程之间切换执行。即,CPU执行单个线程(现用线程)直至遇到某些强制CPU等待的等待时间事件(粗粒多线程的一种形式)。然而,应理解本发明可用各CPU中的不同数量的线程状态实施,而且有可能在逐个周期的基础上交错执行来自每个线程的指令(细粒多线程,或者在别的不同基础上切换线程。
图2是CPU 101的主要部件的高层图,以更详细地示出图1A和1B中所描绘的依据该实施例的CPU 101。在该实施案中,在单个半导体芯片上组装图2中示出的部件。CPU 101包括指令单位部分201、执行单元部分211和存储控制部分221。通常,指令单元201从L1指令高速缓存器106得到指令、译码指令以确定要执行的操作并且解出转移条件以控制程序流。执行单元211对寄存器中的数据执行算术操作和逻辑操作,并装载或存储数据。存储控制单元221访问L1数据高速缓存器中的数据或者与CPU外部的必须从其处存取指令或数据的存储器接口。
指令单元201包括转移单元202,缓冲器203、204、205,以及译码/调度单元206。来自L1指令高速缓存器106的指令从L1指令高速缓存器指令总线232装入到三个缓冲器中的一个。顺序缓冲器203按当前执行顺序存储16条指令。转移缓冲器205存储8条来自转移目的地的指令;在转移事件下在转移评价之前这8条指令被抽象地装入到缓冲器205。线程切换缓冲器204存储8条非现用线程的指令;在需要从当前现用线程到该不现用线程的线程切换事件下,可以立即得到这些指令。译码/调度单元206从缓冲器中的一个接收要执行的当前指令,并且译码该指令以判定要执行的操作或转移条件。载移单元202通过评估转移条件控制程序流,并且通过在L1指令高速缓存器地址总线231上发送所需指令的有效地址从L1指令高速缓存器106重填各缓冲器。
执行单元211包括S流水线213、M流水线214、R流水线215以及一组通用寄存器217。寄存器217划分成二组,每个线程一组寄存器。R流水线是一个算术流水线单元,用于执行整数算术的子集和执行简单整数的逻辑函数。M流水线214是一个用于执行一个更大的算术和逻辑函数集的算术流水线单元。S流水线213是一个用于执行装入和存储操作的流水线单元。浮点单元212和相关的浮点寄存器216用于某些典型地需要多个周期的复杂浮点运算。类似于通用寄存器217,浮点寄存器216也分成二组,每个线程一组寄存器。
存储控制单元221包括存储器管理单元222、L2高速缓存器目录223、L2高速缓存器接口224、L1数据高速缓存器107以及存储器总线接口225。L1数据高速缓存器是用于数据的单片高速缓存器(和指令相反)。L2高速缓存器目录223是L2高速缓存器108的内容的目录。L2高速缓存器224处理直接向和从L2高速缓存器108的数据传送。存储器总线接口225处理存储器总线109上的数据传送,该传送可能是对主存储器102的或是对与其它CPU相关的L2高速缓存器单元的。存储器管理单元222负责对各单元的数据存取的路由选择。例如,当S流水线213处理装入命令要求把数据装入到某寄存器中时,存储器管理单元可能从L1数据高速缓存器107、L2高速缓存器108或主存储器102取该数据。存储器管理单元222确定从何处得到该数据。L1数据高速缓存器107和L2高速缓存器目录223一样是可直接访问的,以便使单元222判定数据是否在L1数据高速缓存器107或L2高速缓存器108之中。若数据既不在单片L1数据高速缓存器中也不在L2高速缓存器108中,则利用存储器接口225从存储器总线取该数据。
尽管在高层上说明并示出了各种CPU构件,应理解优选实施例的CPU包含许多其它未示出的对理解本发明不是必需的部件。例如,例如,在典型的设计中会需要各种附加的专用寄存器,其中的一些必须为每个线程复制。还应理解,CPU101内的部件的数量、类型和布局是可变的。例如,可以改变缓冲器和高速缓存器的数量和配置;可以改变执行单元流水线的数量和功能;可在不同的阵列或不同的组中配置寄存器;可以有或者没有专用的浮点处理硬件;等等。
理想地,指令单元201提供在译码器206中译码的和由执行单元211执行的持续指令流。L1指令高速缓存器106必须在最小延迟下响应访问请求。在被请求的指令实际上在L1指令高速缓存器中的情况下,它必须不要求译码器/调度器206不等待的情况下作响应并填充适当的缓冲器。在L1指令高速缓存器不能响应(即被请求的指令未在L1指令高速缓存器中)的情况下,必须采取经高速缓存器填充总线233通过存储器管理单元222的较长路径。在该情况下,可能从L2高速缓存器108、从主存储器102或者可能从盘或其它存储器得到该指令。当系统100包括多个处理机时,还有可能从别的处理机的L2高速缓存器得到该指令。在所有这些情况中,从远程位置取该指令所需的延迟可能使指令单元201切换线程。即,现用线程变成不现用的,而先前不现用的线程变成现用的,并且指令单元201开始处理在线程切换缓冲器204中保持的该先前不现用的线程。
图3比图1A、1B或2更详细地示出依据该优选实施例的L1指令高速缓存器106的主要部件。L1指令高速缓存器106包括有效地址到实地址表(ERAT)301、指令高速缓存器目录阵列302以及指令高速缓存器指令阵列303。指令高速缓存器指令阵列303存储提供给指令单元201供执行的实际指令。指令高速缓存器目录阵列302包括用于管理指令阵列303尤其是判定在指令阵列303中是否实际上存在所需指令的实页面号、有效位组以及其它信息的集合。ERAT301包括多个有效页面号和实页面号对,用于把有效地址和实地址关联起来。
该优选实施例的CPU101支持多级的地址转换,如图8中逻辑地示出那样。这三个基本寻址结构是有效地址801、虚拟地址802和实地址803。“有效地址”指的是由指令单元201生成的以定位某指令的地址。即,它是从用户的可执行代码角度来看的地址。可以从已知技术中的各种方法中的任一种生成有效地址,例如,通过连接专用寄存器中的某些高位地址位(其不频繁地改变,例如当启动新任务的执行时)和指令中的低位地址位;通过计算对通用寄存器中的地址的偏移;通过对当前执行的指令的偏移;等等。在本实施例中,有效地址包括64位,编号从0到63(0为最高位)。“虚拟地址”是操作系统思维结构,用于隔离不同用户的地址空间。即,若每个用户可引用整个范围的有效地址,则为避免冲突必须把不同用户的有效地址空间变换到一个更大的虚拟地址空间中。在这个意义上虚拟地址不是在寄存器中存储的物理实体;它是一种逻辑结构,是通过把52位的虚拟段ID814和有效地址的28个低位连接起来产生,总共80位。“实地址”指的是存储器102中存储该指令的物理单元。实地址由40位组成,编号成24至63(24为最高位)。
如图8中所示,有效地址801包括36位的有效段ID811、16位的页面号812和12位的字节索引813,有效段ID占据高位位置。通过把36位的有效段ID811变换成52位虚拟段ID814并且接上带有页面号812和字节索引813从有效地址构成虚拟地址802。通过把虚拟段ID814和页面号812变换成52位实页面号815并把该实页面号和字节索引813连接起来从虚拟地址导出实地址803。由于主存储器的一个页面包括4K(即212)字节,字节索引813(最低的12个地址位)规定一个页面内的地址,并且不论地址为有效、虚拟或实地址它都是相同的。页面由高位规定,从而有时把这些高位称为“有效页面号”或“实页面号”,这视具体情况而定。
计算机系统100包含一个用于把CPU101生成的有效地址转换成存储器102中的实地址的地址转换机制。该地址转换机制包括一个用于把有效段ID811变换成虚拟段ID814的段表机制821,以及一个用于把虚拟段ID814和页面号812变换成实页面号815的页面表机构822。虽然在图8中出于示意目的把这些机制表示成单个实体,事实上它们由不同级上的多个表或寄存器组成。即,在主存储器102中驻留完整的页面表和完整的段表,同时在CPU101本身中或L2高速缓存器中包含这些表中的数据的不同较小的被高速缓存的部分。在一些有限的情况下存在附加的直接从有效地址转换到实地址的转换机制(未示出)。
CPU101在支持图8中所示的地址转换的同时,还支持更为简单的寻址。具体地,该优选实施例的CPU101可在“标记现用”模式或“标记不现用”模式之一下运行。这些不同的模式意味着不同的寻址,并用于支持不同的操作系统。机器状态寄存器(一个专用寄存器)中的一位记录当前的运行模式。上面说明的完整寻址转换是在“标记不现用”模式下使用的。在“标记现用”模式下,有效地址和虚拟地址相同(即,有效段ID811不必查找而直接从有效段ID811变换到虚拟段ID814,从而虚拟段ID的16个高位都为0)。CPU101还可运行在有效=实寻址模式下(后面解释)。
如所看见的那样,从有效地址到实地址的地址转换需要多级的表查找。此外,地址变换机制的一些部分位于CPU芯片之外并和存储器102有关,和访问单片高速缓存器相比对该机制的访问要慢得多。可把ERAT301看成是一个小的高速缓存器,其包括地址转换机制保持的一部分信息并且把有效地址直接变换成实地址,从而在多数情况下允许在不必访问地址转换机制下迅速地在L1指令高速缓存器内把有效地址和实地址关联起来。
当指令单元201提供被请求指令的有效地址向指令高速缓存器106请求指令时,指令超高速缓存必须迅速判定该被请求的指令实际上是否在该高速缓存器中,若在的话回送该指令,而若没有的话启动从别处(例如,L2高速缓存器、主存储器)得到该指令的操作。在该指令实际上在L1指令高速缓存器106中的常规情况下,如图3中所示,在该指令高速缓存器中并发地出现下述动作:
(a)利用来自指令单元201的有效地址访问ERAT301中的某条目以导出有效页面号和相关的实页面号。
(b)利用来自指令单元201的有效地址访问目录阵列302中的某条目以导出一对实页面号。
(c)利用来自指令单元201的有效地址访问指令数组303中的某条目以导出一对含有一些指令的高速缓存器行。
在上面的每种情况中,对ERAT310、目录阵列302或指令阵列303中任一个的输入和这些部件中任何其它一个的输出无关,从而上述动作中任一个的开始都不必等待其它动作的完成。ERAT301、目录数据302和指令数据303的输出接着按如下处理:
(a)在比较器304中对来自ERAT301的有效页面号和来自指令单元201的有效地址的相同地址位组进行比较;若它们匹配,则存在ERAT“命中”。
(b)在比较器305中把来自ERAT的实页面号和来自目录数组302的各实页面号进行比较;若它们匹配或者已存在ERAT命中,则存在指令高速缓存器“命中”,即,被请求的指令实际上在指令高速缓存器106中,并且具体地在指令数组303中。
(c)利用来自ERAT301和目录阵列302的实页面号比较输出(使用选择多路复用器307)选择指令数组303中包含着所需指令的一对高速缓存线。
并发地执行这些动作使当所需指令实际上在指令高速缓存器时延迟为最小。无论所需指令是否在该指令高速缓存器中,在指令高速缓存器输出上出现某些到指令单元201的数据。一个独立的指令高速缓存器命中信号会告诉指令单元201该输出数据实际上包含所需的指令;当不存在该指令高速缓存器命中信号时,指令单元201忽略掉该输出数据。本文的后面会讨论高速缓存器未命中事件下指令高速缓存器106采取的行动。
图4详细示出ERAT301以及相关的控制结构。ERAT301是一个82位×128的阵列(即,包括128个条目,每个条目82位)。每个ERAT条目包括一个有效地址部分(位0-46)、一个实地址部分(位24-51)以及几个后面说明的附加位。
通过构建有效地址(EA)的位45-51的一个散列函数以及二个控制行访问ERAT301,这二个控制行是:指示多线程是否现用的多线程控制行(MT)(在该优选实施例的CPU设计中,有可能关掉多线程)以及表示二个线程中哪个线程现用的现用线程行(ActT)。散列函数(HASH)如下:
HASH0:6=(EA45 AND-MT)OR(ActT AND MT)‖EA46‖
EA38 XOR EA47‖EA39 XOR EA48‖EA49:51
可以看出,这是一个7位函数,这足以规定ERAT中128个条目中的任一条目。选择逻辑电路401根据上面的散列函数选择适当的ERAT条目。
比较器304把指令单元201生成的有效地址的位0至位46和选定的ERAT条目的有效地址部分进行比较。由于来自指令单元201的有效地址的位47-51用于构建该散列函数,可以表明位0-46的匹配足以保持地址的全部有效页面部分,即位0-51的匹配。这二个地址部分的匹配意味着ERAT条目中的实页面号(RA24:51)实际上是和指令单元201规定的有效地址页面号(EA0:51)对应的实页面号。因此,有时不大严格地把ERAT条目中存储的有效地址部分称为有效页面号,尽管在该优选实施例中它只包含有效页面号的位0-46。
在某些情况下,CPU101会执行一种特殊的称为有效=实模式(E=R)的寻址模式。在这种模式下执行时,指令单元201生成的有效地址的40位低位(即,EA24:63)和实地址(RA24:63)相同。典型地,这种模式是为某些低层操作系统功能保留的,若永远存储在相同的实地址单元中可更有效地执行这些功能。如图4中所示,当控制行E=R现用时,ERAT301事实上被旁路。即,当E=R假时选择多路复用器402从选定的ERAT条目把RA24:51选择成实页面号(RPN)输出,而当E=R真时多路复用器402从指令单元201选择EA24:51。另外,当E=R真时,与比较器304中的比较结果无关地认为ERAT被命中。
由于ERAT事实上旁路前面在图8中说明和描述的地址转换机制,ERAT复制常规地址转换机制中包含的某些访问控制信息。即,通过段表821、页面表822或其它处中包含的其它信息,从有效地址到实地址的转换将正常地验证访问权利。ERAT301高速缓存该信息的子集,以避免需要引用这些地址转换机制。可从美国专利申请序列号08/966,706中找到有关ERAT的操作的更多信息,该申请于1997年11月10日申请,标题为“有效地址至实地址的高速缓存器管理设备和方法,其作为本文的参考文献。
每个ERAT条目包括数个奇偶检验位、保护位和访问控制位。具体地,每个ERAT条目包括一个高速缓存器禁止位、一个问题状态位和一个访问控制位。此外,独立的阵列403(1位×128)包含和每个独立的ERAT条目相关的单个有效位。最后,在独立的寄存器404中存储一对标记方式位。阵列403的有效位记录对应的ERAT条目是否有效;各种条件可使处理机逻辑电路(未示出)复位该有效位,造成对相应ERAT条目的相继访问重新装入该条目。高速缓存器禁止位用于禁止把被请求的指令写入指令高速缓存器数组303。即,尽管地址的某范围可含有ERAT中的某条目,但可能希望在指令高速缓存器的该地址范围内避免高速缓存指令。在该情况下,该地址范围内对指令的每次请求将使行填充顺序逻辑电路(后面说明)得到该被请求的指令,但不把该指令写到数组303(目录数组302也不被更新)。问题状态位记录装入ERAT条目时刻正执行着线程的“问题状态”(即,管理员或用户中的一者)。管理员状态下执行的线程通常要比问题状态下的线程具有更大的访问权限。若在一种状态期间装入某ERAT条目,并接着改变问题状态,存在着当前执行的线程未访问过该ERAT条目范围内的各地址的风险,从而在访问该ERAT时必须验证该信息。访问控制位也在装入ERAT条目的时刻记录访问信息,并且在访问时刻被检查。标记方式位组404记录ERAT装入时处理机的标记方式(标记现用或标记不现用);存在着和ERAT的每一半(64个条目)相关联的一个标记方式位,利用ERAT的HASH函数的0位选择它。因为标记方式影响如何解释有效地址,标记方式的改变意味着ERAT条目中的实页面号可能不能认为是可靠的。预计标记方式如果改变的话也不会经常改变。从而,若检测出改变,则把对应的一半ERAT中的所有条目标志成无效的,并且最终重新装入。
ERAT逻辑电路405根据选择器304的输出、有效=实模式、上述的各个位以及CPU机器状态位寄存器(来示出)中的某些位,生成若干控制选择多路复用器402的RPN输出的使用和ERAT维护的控制信号。具体地,逻辑电路405生成命中ERAT Hit(ER)信号410、保护异常(PROT-EXC)信号411、未命中(ERAT Miss)信号412和高速缓存器禁止(Cache Inhibit)信号413。
ERAT Hit信号410表示选择多路复合器402的RPN输出可作为和被请求的有效地址对应的真实页面号。当effective=real(有效=实,旁路ERAT)时或当比较器304检测出匹配并不存在保护异常并且不存在迫使ERAT未命中的某些条件时,该信号是有效的。逻辑上可把它表示成:
ERAT_Hit=(E=R)OR(Match_304 AND Valid AND Protection_Exc
AND Force_Miss)其中Match-304是来自比较器304的指示来自指令单元201的EA0:46和ERAT条目中的EA0:46匹配的信号,而Valid是来自阵列403的有效位的值。
保护异常信号411表示,尽管ERAT条目含有有效数据,当前执行的处理不许访问所需的指令。ERAT Miss信号412表示被请求的ERAT条目不含有所需的实页面号,或者该条目不可被认为是可靠的;在这二种情况下,该ERAT条目必须被重装入。高速缓存器禁止信号413防止被请求的指令被在指令数组303中高速缓存。逻辑上按如下导出这些信号:
Force_Miss=(MSR(Pr)≠ERAT(Pr))OR(MSR(TA)≠Tag_404)
Protection_Exc=E=R AND Force_Miss AND Match_304 AND Valid
AND ERAT(AC) AND(MSR(Us) OR MSR(TA))
ERAT_Miss=E=R AND(Match_304 OR Valid OR Force_Miss)
Cache_Inhibit=E=R AND ERAT(CI)
其中
ERAT(Pr)是来自ERAT条目的问题状态位;
ERAT(AC)是来自ERAT条目的访问控制位;
ERAT(CI)是来自ERAT条目的高速缓存器禁止位;
MSR(TA)是来自机器状态寄存器的标记现用位;
MSR(Us)是来自机器状态寄存器的用户状态位;以及
Tag-404是来自寄存器的选定标记位。
图5更详细地示出指令高速缓存器目录阵列302和相关的控制结构。指令高速缓存器目录阵列包括一个用于保持实页面号和一些控制位的66位×512阵列502和一个用于存储最新使用位的附加的1位×512阵列503。阵列502和503物理上是分开的,虽然在逻辑上可把它们对待成单个阵列。阵列502逻辑上划分成二组,每个阵列条目的前33位属于第一组(0),而每个条目的后33位属于第二组(1)。阵列502中的每个条目包括一个和组0对应的28位实页面号(即,实地址位24-51)、四个用于组0的有效位、一个用于组0的奇偶校验位、一个用于组1的28位实页面号、四个用于组1的有效位和一个用于组1的奇偶校验位。
图6详细地示出指令高速缓存器阵列303和相关的控制结构。指令高速缓存器阵列303由64字节×2048的阵列组成,其类似于目录阵列502在逻辑上可划分成二个组,每个阵列条目的前32个字节属于组0,后32个字节属于组1a指令阵列303包括8个与组0对应的处理机可执行指令(各为4字节)和8个与组1对应的处理机可执行指令(各为4字节)。
目录阵列502中的每个条目和指令阵列303中的4个条目的邻接组相关。单个组(组0或组1中包含的该4个条目的邻接组称为一个高速缓存器行,而每个组中所包含的单个条目称为高速缓存器子行。尽管选择逻辑电路601能够独立地访问每个条目(即,各来自组0和组1之一的一对高速缓存器子行),目录阵列502中只存在一个和每个高速缓存器行或四个子行组对应的实页面号。因此,如本文中更完整地解释那样,在单次高速缓存器行填充操作中,按一组填入构成一个高速缓存器行的四个高速缓存器子行。
在该优选实施例中,指令阵列303中的一个高速缓存器行包含128个字节,从而需要7个地址位(地址位57-63)以指定高速缓存器行的空间的某字节。地址位57和58规定高速缓存器行内的四个高速缓存器子行中的一个子行。用实地址位组24-56指定高速缓存器行的实地址。有效地址位组48-56(对应于高速缓存器行的低位地址位组)用于选择阵列502和503中的一个条目。选择逻辑501是这些地址位的直接译码。它实际上是一个简单的散列函数,即,存在有效地址位组48-56的29个可能组合,但233个高速缓存器行的可能实地址(对应于实地址位组24-56)被变换到该阵列中,类似地,利用有效地址位组48-58(对应于高速缓存器子行的低位地址位组)选择指令阵列303中的一个条目,选择逻辑601是这些地址位组的直接译码。指令阵列303中的高速缓存器子行的实地址是对应条目的实页面号(RA24:51)并在目录阵列502中设置成和有效地址位组52-58(EA52:58)连接。
由于在每个条目中存在二个实页面号(来自组0和组1),在指令高速缓存器目录中存在二个和有效地址位组48-56的每个9位组合对应的二个实页面号(以及指令阵列303中的二个高速缓存器行)。这种特征使得有可能避免线程之间的指令高速缓存器争用。
由于选择逻辑501充当一个稀疏的散列函数,不能保证阵列502中一个条目内所包含的二个实页面号对应于所需指令的完整有效地址页面号。为了验证对应性,利用比较器305和306同时把选择出二个实页面号和ERAT301的实页面号输出411进行比较。在该比较的同时,利用有效地址位组57-58从数组502中该选择的条目选择组0中四个有效位中的一个适当有效位和组1中四个有效位中的一个适当有效位。这些选定的有效位对应于所需指令的高速缓存器子行。它们和各个对应比较器305、306的输出进行“与”运算,以生成一对表示和各个组匹配的信号对。这些信号的逻辑“或”和ERAT命中信号410进行“与”运算以生成指令高速缓存器命中信号510,其表示所需的指令确实在L1指令高速缓存器中。
如前面所解释,选择逻辑601利用指令单元提供的所需指令的有效地址访问指令数组303中的一个条目(一对“子行”)。选择器602选择数组303的组0中的子行或者从高速缓存器写总线604选择一个旁路子行值。当在高速缓存器未命中后填充某高速缓存器行时使用该旁路子行值;在该情况下,一旦新的高速缓存器子行值可从外部源中得到则立即呈现在高速缓存器写总线604,不必先写到指令数组303。通过在高速缓存器填充操作期间这样旁路指令数组可节省少量时间。当高速缓存器禁止行413有效时也使用这种旁路。
取决于组选择行511的值,选择器603选择选择器602的输出或者选择阵列303的组1的子行。若对高速缓存器一半的组1存在高速缓存器命中,组选择行511为高电平。即,当比较器306检测出来自ERAT的实页面号411和来自目录数组502中选定条目的组1实页面号之间的匹配时,并且选择器505选择的对应子行有效位有效,则组选择行511将为高电平,使得选择器603选择阵列303的组1的字行。在所有别的情况下(其中包括高速缓存器未命中),选择选择器602的输出。选择器603的输出是来自表示8条指令的连续存储器单元的32字节的数据。它被提交给指令单元201,用于写入顺序缓冲器203、路线缓冲器204或转移缓冲器205中的一个。在存在高速缓存器未命中的事件下,指令高速缓存器命中行500为低电平,并且忽略选择器603的输出(即,它不被写入到指令单元201中的一个缓冲器里)。若存在高速缓存器命中(行510有效),和选定的目录条目对应的阵列503中的MRU位用组选择行511的值更新。
上面说明所查找的指令实际上在指令高速缓存器中的情况。当存在指令高速缓存器未命中时,存在二种可能:(a)已存在ERAT命中,当该指令不在指令阵列中;或(b)存在ERAT未命中。在存在ERAT命中的情况下,有可能快得多地填充所需的高速缓存器行。由于实页面号在ERAT中,知道所需数据在主存储器中(和可能在L2高速缓存器中)。L1指令高速缓存器106中的逻辑电路可能在不必访问外部地址转换机制的情况下从ERAT数据构建所需指令的完整实地址,并直接从L2高速缓存器或主存储器取该数据。在存在ERAT未命中的情况下,为了构建所需指令的实地址必须访问外部地址转换地址,并且按需要用新的实页面号更新ERAT。在该情况下所需数据有可能根本不在主存储器中,并且必须要从诸如磁盘机的辅助存储中读入。尽管理论上可能实际上所需指令处于指令阵列303时仍出现ERAT未命中,这事实上很少出现。从而,一旦存在ERAT未命中,同时启动指令阵列的行填充。
图7示出主快速行填充器逻辑电路,即,在存在ERAT命中但高速缓存器未命中事件下生成高速缓存器行填充的控制逻辑电路。快速行填充定序器逻辑电路包括行填充启动逻辑电路701和一对寄存器710、711(标志成LFAddrO和LFAddrl),它们存储完成行填充操作之前的行填充请求参数。
每个LFAddr寄存器710、711各对应于二个路线中的一个,即,LFAddrO 710对应于线程0,而LFAddrl对应于线程1。若指令单元201在执行路线0的同时作出对某指令的请求,在LFAddrO寄存器710中存储请求参数,类似地,在LFAddrl寄存器711中存储执行路线1时的请求。(在关掉多线程的事件下,只使用LFAddrO寄存器710。)每个LFAddr寄存器710、711只能存储单个行填充请求。从而,在某给定线程存在ERAT命中和指令高速缓存器未命中但同一线程存在待决的未完成行填充请求时,第二请求必须被延迟。
每个LFAddr寄存器包含有效地址位48-58(EA48:58)、实地址位24-51(RA24:51)、一个组位和一个请求未完成(“R”)位。地址位组既用于要填充的高速缓存器行的存储器中实地址,也用于当回送高速缓存器行时写目录阵列502和指令阵列303。组位确定要写入目录阵列502和指令阵列303的哪个组(组0或组1)。当把未完成请求放入LFAddr寄存器时把请求未完成“R”位置为1,并且当完成行填充请求时复位(未示出复位逻辑电路)。
行填充启动逻辑电路接收作为输入的ERAT命中线410、指令高速缓存器中线510、规定哪个线程有效的有效线程控制线(ActT)以及来自LFAddrO寄存器710和LFAddrl寄存器711的请求未完成位(分别标记成“RO”和“R1”)。一旦存在ERAT命中、指令高速缓存器未命中并且在和当前现用线程对应的LEAddr寄存器中不存在当前待决的行填充请求时,启动行填充请求(激励行填充请求行703)。若存在ERAT命中和指令高速缓存器未命中,但在和当前现用线程对应的LFAddr寄存器中存在未决的行填充请求,在完成该未决的行填充请求(对“R”位复位)前指令高速缓存器等待,然后才启动新的行填充请求。这些输入和输出之间的逻辑关系可按如下表达:
LFReq=ERATHit AND ICacheHit AND
[(ActT AND R0)OR(ActT AND R1)]
在启动行填充请求时,行填充启动逻辑电路生成写信号704、705,以使请求参数被写到LFAddr寄存器710、711之一中。在任何时刻写信号704、705中只有一个可以一直是有效的。若写信号704、705中之一变为在效的,在和当前现用路线对应的LFAddr寄存器中存储EA48:58(来自L1指令高速缓存器地址总线231)、RA24:51(路径411,来自ERAT301)以及来自组逻辑720的一个组位。同时,该寄存器中的请求未完成位被设置成1。写信号的逻辑推导如下:
Write0=ERAT_Hit AND ICacheHit AND ActT AND R0
Write1=EPAT_Hit AND ICacheHit AND ActT AND R1
由于目录阵列502和指令阵列303分成二个组(组0和组),并且每个组用相同的散列函数索引,逻辑上可对二个组写来自行填充请求的高速缓存器行。要向哪个组写高速缓存器行是通过组逻辑电路720在做出行填充请求时决定的并存储到适当的LFAddr寄存器的组位中。通常,被选定的组是要填充的高速缓存器行的最近最少使用组,即,和由散列函数索引的目录阵列502中的条目对应的MRO位相反的组。但是,在非现用路线存在未完成行填充请求,并且该未完成的行填充将填充同一高速缓存器行情况下,则选定的组是和为非现用路线的未完成行填充请求选择的组相反的组。通过这样的确定启动行填充请求时刻的组,可避免可能的活锁情况(即,二个未完成的行填充请求试图写同一个组)。
图7中示出寄存器710中存储的信息的使用。为简明说明,图中省略掉来自寄存器711的类似数据路径。从可使用的LFAddr寄存器中存储的一些地址信息中导出含有被请求指令的高速缓存器子行的地址。具体地,实页面号(RA24:51)和位组EA52:58连接以得到高速缓存器子行的实地址。在图7中这用数字712表示。它不必是一个独立的寄存器,只是仅仅示出从一个LFAddr的适当位组装配地址。行填充请求线703启动对存储器管理单元222的数据请求,在高速缓存器填充总线233上发送用712代表的地址。还发送一个路线标志位,以使L1指令高速缓存器控制逻辑能在稍后确定回送的指令和哪个LFAddr寄存器相关。接着存储器管理单元判定是否从L2高速缓存器108、主存储器102或别的源得到被请求的指令。当存储器管理单元222可得到被请求的指令时,在总线233上把该指令和路线标志位一起发送给L1指令高速缓存器。
总线233上的被请求指令的回送将产生把数据写入目录阵列502和指令阵列303的控制信号。具体地,利用来自适当的LFAddr寄存器710、711的EA48:56选择阵列502中的一个条目。LFAddr寄存器的组位用于和控制信号一起生成一个在写信号线706、707之一上的对阵列502的一半的写信号,该组位的状态确定对阵列502的哪一半写(即,写信号线706或707中的哪个是有效的)。LFAddr寄存器的实页面号(RA24:51)被写到阵列502中通过组位确定的半个阵列里的用EA48:51选择的条目里。同时更新目录阵列的MRU位。
在上述操作的同时,利用LFAddr寄存器的EA48:56选择指令阵列303中的一个条目,并类似地利用LFAddr寄存器的组位生成用于该阵列一半的写信号。写到该单元上的数据是来自总线233的数据(一串指令),其呈现在图6中示出的LF数据总线604上。然而,在填充指令阵列303的情况下,一次只能写入一个子行。LF数据总线604一次呈现一条子行(32字节)。利用LFAddr寄存器的EA48:56以及顺序逻辑电路(未示出)提供的二个附加地址位57和58,由选择逻辑电路601选择整个子行。从而填充整个高速缓存器行需要4个写周期。
在把更新的指令阵列条目的实页面号写到目录阵列时,把四个有效位(每个子行一位)初始地设置成无效的。在每次地相继的子行写入到指令阵列303时,目录阵列502中的对应有效位被更新以反映该数据现在是有效的。若出于任何原因要中断上述的连续写周期内对高速缓存器行的写入,目录阵列502将含有正确的信息。
在ERAT未命中事件下,选择器402的实页面号输出是不可靠的。在做任何事之前,必须把来自指令单元201的有效地址的页面号部分转换成实页面号。ERAT-Miss线412将触发图8中逻辑地描述的地址转换机制。进行该转换的实际硬件不是指令高速缓存器106的一部分;该硬件一部分可包含在CPU201中,而其它硬件可在主存储器102或别处中。和上面说明的行填充操作相比,该地址转换典型地需要相对多的周期数。当在ERAT未命中后回送转换好的实页面号时,该实页面数同时用于更新ERAT310并被写入适当的LFAddr寄存器(710或711)以启动行填充操作。尽管理论上在该情况下有可能该被请求的指令会在该虽然已经ERAT未命中的高速缓存器中,事实上这是很少见的通过立即请求行填充操作而不是等待填充ERAT条目改善性能的事件。
可以理解,出于简明从图中和说明中省略了对于理解本发明不是必要的逻辑电路。例如,省略掉用于保持阵列502中的MRU位的逻辑电路以及用于检测奇偶校验错误并采取适当修正行为的逻辑电路。
在该优选实施例中,利用ERAT提供实地址的一部分(实页面号),以便为了验证高速缓存器中把它和目录阵列中的实页面号进行比较。由于ERAT提供和主地址转换机制的响应时间无关的对实页面号的快速转换,这种设计是优选的。因为不要求主地址转换机制在支持指令高速缓存器中单周期响应时间所需的快速性的情况下转换地址,这把系统设计员从一些限制中解放出来。但是,在替代的实施例中,有可能在不具有ERAT下构建本文中说明的指令高速缓存器。在这种情况下,可使用主地址转换机制提供用来和目录阵列中的实页面号比较的实页面号。在别的替代实施例中,有可能利用L1指令高速缓存器内部的或外部的某其它机制提供实页面号。
在该优选实施例中,高速缓存器相关数量和线程数量相同。这帮助避免对公用高速缓存器的线程争用。但是,有可能更替地设计本文中说明的高速缓存器,在其中线程的数量和高速缓存器结合度不同。例如,若处理机支持的线程数量是大的,为避免争用可能不需要和线程数量那么多的高速缓存器结合度。在这种情况下,尽管在结合度小于线程数量下理论上可能会有争用,偶而的更小的结合度却是可接收的。甚至可容许为1的高速缓存器结合度,尽管这有可能存在某些争用。
尽管通过目前认为是最实用的各优选例说明了本发明,可以理解本发明不受限于所公开的各实施例,相反,各实施例用于复盖附属权利要求书的实质和范围内所包括的各种修改和等同方案。