专利名称::使用影子寄存器扩展堆栈寄存器堆的制作方法
技术领域:
:本发明大体上涉及处理器的领域,且特定来说涉及使用影子寄存器来扩展堆栈寄存器堆的有效大小。
背景技术:
:RISC处理器的特征在于相对小的指令集,其中每个指令执行单个指令,例如算术、逻辑或装载/存储操作。算术和逻辑指令从一个或一个以上通用寄存器(GPR)获得其操作数,并将其结果写入所述GPR。GPR是结构化的寄存器。也就是说,GPR包括明显标识在指令集结构中的离散存储器位置,且通过指令直接寻址。GPR常实施在例如高速多端口寄存器阵列的硬件中,所述寄存器每一者都具有由指令集界定的字宽度(例如,32或64个位)。此物理寄存器阵列称为物理寄存器堆(PhysicalRegisterFile)。在直接映射寄存器实施方案中,物理寄存器堆中的寄存器数目与结构化GPR的数目完全匹配,且每个逻辑GPR识别符映射到一个特定的硬件寄存器。为了获得较高性能,且为了支持超标量管线(superscalarpipeline),许多现代处理器从物理寄存器堆中的物理寄存器去耦逻辑GPR识别符。寄存器重命名、重排序缓冲器以及类似技术是用于从物理寄存器去耦逻辑GPR识别符的技术中已知的技术。无论是直接映射还是重命名,在许多软件编制过程中对物理寄存器堆的管理是一项设计挑战,且常常是一个性能瓶颈。多数现代软件本质上是模块化的。也就是说,一个过程可"调用"另一过程(不同地称为函数、子例行程序、子模块或类似物)或将控制转移到另一过程。被调用的过程又可调用另一过程,依此类推,从而导致常达到相当大深度的过程嵌套。在由处理器执行期间,每个过程(在执行期间还称为上下文)被分配有某些处理器资源,包含若干GPR。分配给过程的GPR的数目可通过编译器对所述过程中指令的分析来确定,且其范围可从几个GPR变动到整个结构化GPR集。当第一过程调用第二过程(还称为上下文切换)时,第一(或调用)过程变为不活动,而第二(或被调用)过程被分配有单独的资源(包含其自己的GPR集),且开始执行。当第二过程完成执行时,其资源被解除分配,资源被重新分配给调用过程(如果有必要的话),且调用过程重新开始执行。由调用过程分配的资源的一部分可视情况保持对于被调用过程可用,所述部分例如是用于在过程之间传送调用参数并返回值的寄存器。在一些现有技术处理器(例如英特尔(Intel)!'-960)中,上下文切换或新的过程提示处理器将物理寄存器堆的整个内容存储到存储器,从而使整个物理寄存器堆对于所述新过程可用。当被调用过程完成执行并将控制返回给其调用过程时,先前保存的寄存器值被恢复到物理寄存器堆,且调用过程的执行继续进行。物理寄存器堆内容被保存到"后备存储器(BackingStore)",例如系统存储器(RAM)。为了在后备存储器包括芯片外RAM时减轻针对每一上下文的多次芯片外存储器存取的性能影响,处理器可提供一个或一个以上"高速缓冲存储器"寄存器堆(其可包括实际寄存器或替代地可包括芯片上高速缓冲存储器),以用于存储物理寄存器堆的内容。然而,即使在高速缓存的寄存器存储的情况下,也必须一次存储/检索整个物理寄存器堆,从而强加了性能瞬断(performancehit)。例如英特尔Itanium的许多现代处理器所使用的技术不需要一次存储和检索整个物理寄存器堆,所述技术称为堆栈寄存器堆结构。在堆栈寄存器堆结构中,高层级处理器控制器将物理寄存器堆视为具有无限深度的逻辑堆栈。通过在过程被调用时向其增量式分配寄存器,并在必要时保存先前分配的寄存器的内容,来在物理寄存器堆中实施这种逻辑上无限的堆栈。图1描绘代表性堆栈寄存器堆结构实施方案的功能框图。物理寄存器堆1包括高速多端口物理寄存器阵列,所述阵列包含至少与指令集结构中存在的GPR的数目一样多的寄存器。举例来说,物理寄存器堆1可包括128个寄存器,范围从底部的物理寄存器0(PRO)到顶部的物理寄存器127(PR127)。两个逻辑指针实施堆栈管理堆栈顶部指针和保存/恢复指针。起初,将两个指针都设置为PR0。随着过程被调用且寄存器被分配所述过程,堆栈顶部指针向上移动。当所有或几乎所有可用物理寄存器都已被分配,且新调用的过程需要的寄存器数目多于物理寄存器堆1中剩余的未分配寄存器的数目时,堆栈顶部指针将"绕回(wrap)",并开始从物理寄存器堆1的底部(以PR0开始)分配寄存器。然而在此情况发生之前,物理寄存器堆1底部的足够数目的寄存器必须已经将其内容保存到后备存储器3,例如系统存储器(RAM)。寄存器保存引擎2中断处理器,并执行对以下操作来说必要的指令执行寄存器读取和存储器存储操作,以将物理寄存器堆1底部的最近最少分配的寄存器的内容保存到后备存储器3。寄存器保存引擎2使保存/恢复指针递增,指示所述指针下方的寄存器可用于分配给新调用的过程。当寄存器保存引擎2完成寄存器保存操作并放弃对处理器的控制时,处理器控制器将寄存器分配给下一过程,并使堆栈顶部指针递增,从而使其绕回并使其递增而经过内容被保存到后备存储器3的寄存器,因为这些寄存器被重新分配并由被调用的过程利用。类似地,在被调用的过程完成执行并将控制返回给调用过程时,堆栈被弹出,且分配给被调用过程的寄存器被解除分配,或使其可用于分配给其它过程。如果与调用过程相关联的所有数据仍不在物理寄存器堆1中,也就是说,如果调用过程的寄存器中的一者或一者以上被重新分配,那么寄存器保存引擎2再次中断处理器,从后备存储器3检索最近最多保存的寄存器的内容,将数据恢复到物理寄存器堆1,将寄存器分配给调用过程,并使保存/恢复指针递增以指示寄存器被分配且含有有效数据。堆栈寄存器堆系统以较大物理寄存器堆1、相对较窄的过程嵌套深度和/或相对较少的分配给每个过程的寄存器来提供最佳性能。在这些条件下,堆栈顶部指针简单地上下移动通过物理寄存器堆l,在需要时向过程分配寄存器和解除分配寄存器,而没有延迟。然而,随着过程嵌套的深度增加,且/或一个或一个以上过程需要大量寄存器,处理器经历寄存器保存引擎2导致的大量中断,以在物理寄存器被从调用过程解除分配和重新分配给调用过程时,从物理寄存器堆1中的寄存器保存数据和将数据恢复到所述寄存器。提高堆栈寄存器堆系统的性能的一种方式是简单地增加物理寄存器堆1的大小。虽然这确实提供较高的性能,但物理寄存器堆1中的寄存器通常是高速多端口随机存取寄存器。每个寄存器可包含(例如)三个到五个读取和写入端口。此外,为了操作调度和寄存器分配的灵活性,每个物理寄存器的读取端口必须路由到每个管线中的每个执行管级,且每个管线中的回写管级必须连接到物理寄存器堆中的每个寄存器的写入端口。因此,增加物理寄存器堆1的大小在门数量和布线复杂性两方面代价较大,且伴随有测试和检验复杂性以及功率消耗的增加。在任何给定时间,只有一个过程在执行,通常只存取物理寄存器堆1中的寄存器的较小子集。因此,增加物理寄存器堆1的大小导致相当大的成本,且高成本硬件的利用率较低。
发明内容在一个或一个以上实施例中,在堆栈寄存器堆结构中,一个或一个以上影子寄存器堆插入在包括多个多端口寄存器的物理寄存器堆与备用存储器之间。影子寄存器堆每一者都包括两端口寄存器,且串行连接,从而形成从物理寄存器堆中的每个多端口寄存器延伸的链。将分配给不活动过程的多端口寄存器中的数据保存到第一影子寄存器堆中的对应双端口寄存器。随后在将与另一不活动过程相关联的较新数据从多端口寄存器保存到第一影子寄存器堆中的双端口寄存器时,可将所述数据移位到第二影子寄存器堆中的第二双端口寄存器。影子寄存器堆链可具有任意深度。寄存器保存引擎在必要时从所述链中最后一个影子寄存器堆向后备存储器(例如芯片外RAM)保存数据和从后备存储器恢复数据。在过程被重新激活时,数据穿过影子寄存器堆链,朝物理寄存器堆的多端口寄存器移位。一个实施例涉及一种管理具有一个或一个以上影子寄存器堆的影子寄存器堆系统的方法。将来自物理寄存器堆的一个或一个以上多端口寄存器分配给第一过程,并将与所述第一过程相关联的数据存储在所分配多端口寄存器中。将与所述第一过程相关联的数据从一个或一个以上多端口寄存器选择性地保存到一个或一个以上第一双端口寄存器,并释放对应的所分配多端口寄存器,以用于分配给第二过程。在所述第一过程继续执行之前,将与所述第一过程相关联的数据从所述双端口寄存器恢复到所述多端口寄存器,并所述寄存器被重新分配给所述第一过程。另一实施例涉及一种实施界定多个通用寄存器的指令集结构的处理器。所述处理器包含物理寄存器堆,其包括至少与所述处理器指令集结构中所界定的通用寄存器的数目一样多的多端口寄存器,所述寄存器被动态地分配给软件过程。所述处理器还包含寄存器保存引擎,其操作以选择性地从分配给不活动过程的多端口寄存器保存数据,并在所述过程变为活动之前,将数据恢复到所述多端口寄存器。所述处理器进一步包含第一影子寄存器堆,其包括与所述物理寄存器堆中的多端口寄存器数目相同的双端口寄存器。每个双端口寄存器的第一端口直接连接到对应的多端口寄存器,且操作以在所述寄存器保存引擎的控制下存储从分配给不活动过程的所述多端口寄存器保存的数据。图1是现有技术堆桟寄存器堆的框图。图2是处理器的功能框图。图3是包含多个影子寄存器堆的堆栈寄存器堆的功能框图。图4是管理堆栈寄存器堆结构的方法的流程图。图5是本发明实施例的流程图。具体实施例方式图2描绘处理器10的功能框图。处理器10根据控制逻辑14执行指令执行管线12中的指令。管线12可以是超标量设计,具有多个并行管线,例如12a和12b。每个管线12a、12b都包含组织成管级的各种寄存器或锁存器16,以及一个或一个以上算术逻辑单元(ALU)18。管线12a、12b从指令高速缓冲存储器(I-高速缓冲存储器或1$)20获取指令,其中存储器寻址和许可由指令侧翻译后援缓冲器(ITLB)22管理。从数据高速缓冲存储器(D-高速缓冲存储器或D$)24存取数据,其中存储器寻址和许可由主翻译后援缓冲器(TLB)26管理。在各个实施例中,ITLB22可包括TLB26的一部分的复本。或者,ITLB22和TLB26可集成。类似地,在处理器10的各个实施例中,I-高速缓冲存储器20和D-高速缓冲存储器24可集成或合成一体。I-高速缓冲存储器20和/或D-高速缓冲存储器24中的未中导致在存储器接口34的控制下对主(芯片外)存储器36的存取。管级寄存器或锁存器M和ALU18可从物理寄存器堆28中的寄存器读取操作数且/或将结果写入到物理寄存器堆28中的寄存器。物理寄存器堆28由寄存器保存引擎30管理,寄存器保存引擎30还管理一个或一个以上影子寄存器堆32。数据经由存储器接口34在一个影子寄存器堆32与主存储器36之间传递。下文更详细地描述物理寄存器堆28、寄存器保存引擎30和影子寄存器堆32的操作。处理器10可包含输入/输出(I/O)接口38,从而控制对各个外围装置40、42的存取。所属领域的技术人员将认识到处理器IO的大量变化形式是可能的。举例来说,处理器IO可包含用于I和D高速缓冲存储器中的任一者或两者的二级(L2)高速缓冲存储器。另外,处理器10中所描绘的功能框中的一者或一者以上可从特定实施例中省略。图3描绘处理器10的堆栈寄存器堆结构的功能框图。在以下各项中实施逻辑上无限的寄存器堆栈物理寄存器堆28,其包含至少与处理器的指令集结构界定的GRP—样多的多端口物理寄存器;一个或一个以上影子寄存器堆32,其每一者含有与物理寄存器堆28所含有的多端口寄存器数目相同的双端口寄存器;以及大小非常大的后备存储器36。如本文所使用,多端口寄存器是具有三个或三个以上独立数据读取/写入端口的存储位置。双端口寄存器是具有两个独立数据读取/写入端口的存储位置。物理寄存器堆28中的寄存器是多端口的,因为数据是通过多个管线级、ALU和类似物写入到寄存器且从寄存器读取的。事实上,是大量随机存取多端口寄存器的复杂性、硅面积和布线拥挤度使得物理寄存器堆28的简单扩展成为用以减少与将其内容保存到后备存储器36相关联的等待时间的高成本方法。物理寄存器堆28中的每个多端口寄存器直接连接到影子1寄存器堆32-1中的对应双端口寄存器的第一端口。如图3所描绘,影子1寄存器堆32-1中的每个双端口寄存器的第二端口直接连接到影子2寄存器堆32-2中的对应双端口寄存器的第一端口。影子2寄存器堆32-2中的双端口寄存器的第二端口由寄存器保存引擎30随机存取。尽管图3描绘两个影子寄存器堆32-1,32-2,但所属领域的技术人员将容易认识到,串联连接的影子寄存器堆32-l,32-2的数目的范围可从l到与需要一样多的数目。包含物理寄存器堆28和所有串联连接的影子寄存器堆32的寄存器集在本文中称为影子寄存器堆系统。堆栈顶部指针和保存/恢复指针管理物理寄存器堆28中的多端口寄存器的可用性,以及(在一些实施例中)管理将数据保存到最后一个影子寄存器堆32-2和从最后一个影子寄存器堆32-2恢复数据。两个指针都由寄存器保存引擎30维持。在一个实施例中,将两个指针初始化到寄存器堆的顶部。在物理寄存器堆28中的多端口寄存器被分配给新调用的过程时,堆栈顶部指针递增所分配的多端口寄存器的数目。位于堆栈顶部指针处或在堆栈顶部指针下方(且在保存/恢复指针的位置上方)的寄存器被分配给过程,且可含有程序数据,而堆栈顶部指针上方(且位于保存/恢复指针的位置处或在保存/恢复指针的位置下方)的寄存器可自由用于分配给新的过程。随着指针"绕回"寄存器堆,此关系保持平稳。当堆栈顶部和保存/恢复指针指向寄存器堆的同一位置时,物理寄存器堆28已满。在一个过程完成执行并将控制返回给其调用过程时,堆栈顶部指针递减分配给已完成过程的寄存器的数目。在堆栈顶部指针下方(且在保存/恢复指针的位置上方)的寄存器容纳与当前活动过程相关联的数据,且可能保存与一个或一个以上已调用其它过程的并不活动但在被调用过程完成执行时将被重新激活的过程相关联的数据。当一个过程被调用且请求分配数目比物理寄存器堆28中剩余的未分配多端口寄存器的数目多的多端口寄存器时,寄存器保存引擎30将与不活动过程相关联的数据,艮卩,存储在分配给不活动过程(可能包含调用过程)的多端口寄存器中的数据,从物理寄存器堆28保存到影子1寄存器堆32-1中的对应双端口寄存器。此操作在本文称为"溢出(spilling)"数据。由于物理寄存器堆28中的每个多端口寄存器直接连接到影子1寄存器堆32-l中的对应双端口寄存器,因此根据一个实施例,与所有不活动过程相关联的数据可在单次循环中从物理寄存器堆28保存到影子1寄存器堆32-1。然而,在单次循环中读取较大数目的多端口寄存器并写入相同较大数目的双端口寄存器可能会导致不合需要的功率"峰值(spike)"。因此,在另一实施例中,可使用递增较多的保存多端口寄存器到双端口寄存器的方法。举例来说,每当预定数目的存储数据的多端口寄存器变为不活动(即,其相关联的过程通过调用另一过程而变为不活动)时,所述数据可传递到双端口寄存器。一次将保存的寄存器的预定数目,即多端口寄存器数据保存操作的"粒度",可按照特定实施方案的需要来修改,且/或可(例如)通过将值写入配置寄存器而可变。在被调用过程完成执行,且其调用过程被重新激活时,堆栈顶部指针向下移动,从而释放与完成的被调用过程相关联的多端口寄存器。在堆栈顶部指针接近保存/恢复指针的位置时,数据从影子1寄存器堆32-1恢复到物理寄存器堆28中先前释放的多端口寄存器。此操作在本文称为"填充(filling)"数据。而且,每个多端口寄存器与双端口寄存器之间的直接连接允许在单次循环中恢复多个多端口寄存器。一次恢复的寄存器的数目可以是预定值,且在一些实施例中可以是可变的。在数据被恢复时,保存/恢复指针相应地向下移动。如图3所描绘,影子寄存器堆系统可包含一个以上影子寄存器堆32-1,32-2。在数据从物理寄存器堆28溢出到影子1寄存器堆32-1时,影子1寄存器堆32-1中的对应寄存器可容纳被保存的数据。在此情况下,每当数据从物理寄存器堆28中的多端口寄存器溢出到影子1寄存器堆32-l中的双端口寄存器时,双端口寄存器中保存的数据就移位到影子2寄存器堆32-2中的对应双端口寄存器中。因为多端口寄存器、影子l双端口寄存器和影子2双端口寄存器直接连接到专用读取/写入端口,所以在单次循环中可发生多个寄存器溢出操作。当数据从对应的影子1寄存器堆32-l双端口寄存器填充到或恢复到一个或一个以上物理寄存器堆28多端口寄存器时,如果被保存的数据驻存在对应的影子2寄存器堆32-2双端口寄存器中,那么所述数据恢复到影子1双端口寄存器,作为填充操作的一部分。所属领域的技术人员将容易了解,影子寄存器堆32可针对给定实施方案嵌套到任何所需或期望的深度,例如从l到n,其中ii是任意正整数。寄存器保存引擎30将数据从第n个现存影子寄存器堆(例如,图3所描绘的影子寄存器堆系统中的影子2寄存器堆32-2)溢出或保存到后备存储器36,例如芯片外RAM。与每个寄存器的两个读取/写入端口直接连接到其它寄存器的中间影子寄存器堆不同,寄存器保存引擎30可随机读取/写入第n个影子寄存器堆中的寄存器的第二端口。在一个实施例中,在数据从影子寄存器堆系统中溢出时,即,在数据被第(n-l)个影子寄存器堆"推"出寄存器时,在数据从物理寄存器堆28中的一个或一个以上多端口寄存器溢出时,寄存器保存引擎30从第n个影子寄存器堆32-n中的寄存器保存数据。下文以实例的方式描绘影子寄存器堆系统的基本操作。考虑图3的影子寄存器堆系统,但为了简洁,每个寄存器堆只包括四个寄存器。起初,第一过程(Pl)请求并被分配有物理寄存器堆(PRF)28中的两个多端口寄存器。堆栈顶部指针(初始化到PRF28的顶部)递增两次,且停在PRF28的"有效数据"区域的顶部,所述"有效数据"区域是位于堆栈顶部指针处或在堆栈顶部指针下方且在保存/恢复指针上方的PRF28区域。由于尚未有数据从PRF28溢出,因此保存/恢复指针不会从其在寄存器堆顶部的初始位置改变。P1将数据A和B写入到两个所分配的多端口寄存器<formula>formulaseeoriginaldocumentpage13</formula>魁过程P1调用第二过程(P2),P2请求三个多端口物理寄存器。在三个多端口寄存器可分配给P2之前,至少一些与现在不活动的过程Pl相关联的数据必须溢出到影子1寄存器堆(S1RF)32-l双端口寄存器。保存/恢复指针递增,指示从PRF28的保存(溢出)操作。P2接着保存数据C到E,且堆栈顶部指针绕回。由于在堆栈顶部指针上方但在保存/恢复指针下方没有寄存器,因此PRF中没有自由空间<table>tableseeoriginaldocumentpage13</column></row><table>表2过程P2调用第三过程(P3),P3请求两个物理寄存器。数据从PRF28中的两个多端口寄存器溢出到S1RF32-1,且保存/恢复指针递增两次。P3被分配有两个多端口寄存器,且堆栈顶部指针递增两次,且P3保存数据F和G:<image>imageseeoriginaldocumentpage14</image>表3过程P3调用第四过程(P4),P4请求三个物理寄存器。数据从两个PRF28多端口寄存器溢出到三个对应的S1RF32-1双端口寄存器中。这致使数据从一个S1RF32-1双端口寄存器溢出到对应的影子2寄存器堆(S2RF)32-2双端口寄存器中。保存/恢复指针递增三次(并绕回)。P4保存数据H到J,且堆栈顶部递增三次(并绕回)<table>tableseeoriginaldocumentpage14</column></row><table>表4过程P4调用第五过程(P5),P5请求三个物理寄存器。因为请求的多端口寄存器的数目多于S2RF32-2中存在的自由寄存器的数目,所以寄存器保存引擎30必须使数据从S2RF32-2中的至少一个双端口寄存器溢出到后备存储器36。在此保存操作之后,数据从三个PRF28寄存器溢出,获得以下结果PRFS1RFS2RF<table>tableseeoriginaldocumentpage15</column></row><table>在所描绘的实施例中,从S2RF32-2溢出到BS36的数据存储在逻辑堆栈或LIFO数据结构中。然而,本发明不限于此结构。一般来说,寄存器保存引擎30可以任何形式或结构将溢出的数据存储在BS36中,只要其跟踪所述数据,且能够以与所保存的数据溢出次序相反的次序向影子寄存器堆系统填充所述所保存的数据。接下来,过程P6完成执行,并将控制返回给其调用过程P5。通过递减堆栈指针两次来对含有与P6相关联的数据O和N的PRF28多端口寄存器进行解除分配。这致使存储在S1RF32-l和S2RF32-2的对应位置中的数据进行填充。这又致使寄存器保存引擎30向S2RF32-2的对应位置填充来自BS36的数据,其在保存/恢复指针的位置开始,并针对每个被填充寄存器而递减。在此寄存器填充操作之后,堆栈顶部指针和保存/恢复指针再次定址影子寄存器堆系统中的同一条目,从而指示PRF28己满<image>imageseeoriginaldocumentpage16</image>P1-A在过程完成并将控制返回给其调用过程时,PRF28中的多端口寄存器被解除分配,且数据从S1RF32-1填充到PRF28,从S2RF32-2填充到S1RF32-1,且从BS36填充到S2RF32-2。在每个被调用过程返回之后,影子寄存器堆系统的状态将为如上文所描绘的相反次序(例如,表4、表3、表2和表1)。为了高效操作,寄存器保存引擎30跟踪影子寄存器堆系统的内容。举例来说,在表2、表3和表4中所描绘的溢出操作中,寄存器保存引擎30不应使数据从第n个影子寄存器堆32溢出到后备存储器36。然而,在表5和表6中所描绘的溢出操作中,寄存器保存引擎30必须使数据从第n个影子寄存器堆32溢出到后备存储器36。在一个实施例中,寄存器保存引擎30通过对从物理寄存器堆28的数据溢出的次数进行计数来维持全局堆栈底部指针,并针对数据填充递减。通过以寄存器堆大小为模对此计数进行划分,寄存器保存引擎30可容易确定正从物理寄存器堆28溢出的数据链的"末端"。在另一实施例中,寄存器保存引擎30可根据正分配的寄存器的数目、保存/恢复指针的位置以及链中的前一寄存器堆是否已满来确定必要的操作。在此实施例中,已满(FULL)状态位与每个寄存器堆(例如,PRF28、S1RF32-1、S2RF32-2、…SnRF32-n)相关联。每当相应寄存器堆已满,就设置所述位,且当所述寄存器堆具有可用于存储新数据的自由寄存器时,使所述位复位。举例来说,在表2中,影子1寄存器堆32-1未满。因此,寄存器保存引擎30知道对于下一寄存器分配来说,向后备存储器36溢出将是不必要的,因为没有任何过程可被分配有多于物理寄存器堆28中寄存器数目的寄存器。在上述实例的实施例中,数据只在"根据需要"的基础上从物理寄存器堆28溢出。也就是说,当被调用过程请求三个寄存器,且物理寄存器堆28已满时,只有三个寄存器被溢出到影子1寄存器堆32-1(且在需要时进一步穿过影子寄存器堆系统)。当影子寄存器堆系统已满(即,物理寄存器堆28和所有影子寄存器堆32已满)时,对于每次新的寄存器分配均需要向后备存储器36溢出。一旦芯片上堆栈寄存器堆系统已满,这就会对每个过程调用和返回强加与芯片外RAM存取相关联的延迟。虽然此影子寄存器堆系统管理方法是完全有作用的并提供正确的结果,但所述方法可能是次优的。在另一实施例中,每当存在于物理寄存器堆28中的未分配多端口寄存器不足以满足被调用过程寄存器分配请求时,与不活动过程相关联的所有数据就可一起溢出到影子1寄存器堆32-l(且随后在需要时沿影子寄存器堆32链向下)。如果第n个影子寄存器堆含有有效数据,那么寄存器保存引擎30可能不得不向后备存储器36溢出数据,从而对过程调用强加存储器存取延迟。然而,相当大的未占用空间将保留在物理寄存器堆28中,且随后,可立即给被调用过程分配多端口寄存器。在其中一起溢出可能引起不合需要的功率峰值的另一实施例中,每当物理寄存器堆28中的预定数目的多端口寄存器含有与不活动过程相关联的数据,数据就可从物理寄存器堆28溢出。此预定数目可以是固定的,或者其可以是用户指定的,例如通过向配置寄存器写入某一值。在此实施例中,虽然物理寄存器堆28中的多端口寄存器向新调用过程的分配以及伴随的调用过程不活动是起始溢出操作(通过促使与不活动过程相关联的寄存器的预定数目被满足或超过)的触发事件,但无需完成溢出以继续进行多端口寄存器向新调用过程的分配。也就是说,溢出操作(使保存/恢复指针递增)从多端口寄存器分配(使堆栈顶部指针递增)去耦。这允许溢出操作例如通过对存储器接口34(只在足够的存储器存取带宽可用时被服务)的低优先权请求而作为"后台"任务继续进行。在此情况下,使影子寄存器堆系统中的空间可用于多端口物理寄存器向新调用过程的分配,同时对系统性能强加最小的影响。根据另一实施例,为了进一步使存取对后备存储器36的影响减到最小,寄存器保存引擎30可在不考虑物理寄存器堆28的内容的情况下对第n个影子寄存器堆32进行溢出和填充。如果寄存器保存引擎30预期大量的过程调用,或对需要大量物理寄存器的过程的调用,那么寄存器保存引擎30可积极地对第n个影子寄存器堆32进行溢出,以确保芯片上影子寄存器堆系统中的充足空间,使得没有任何过程将招致与对后备存储器36的溢出操作相关联的存储器存取等待时间。或者,如果寄存器保存引擎30预期大量的过程返回,或对已被分配大量物理寄存器的调用过程的返回,那么寄存器保存引擎30可积极地对第n个影子寄存器堆32进行填充,以确保影子寄存器堆系统中的充足数据,使得没有任何过程将招致与从后备存储器36的填充操作相关联的存储器存取等待时间。在此实施例中,寄存器保存引擎30可使用上文所述的全局堆栈底部指针单独地跟踪第n个影子寄存器堆32的溢出/填充点。或者,堆栈底部指针可只跟踪第n个影子寄存器堆32内的溢出/填充点,并依赖于与第(n-l)个影子寄存器堆32相关联的FULL指示符来识别向第n个影子寄存器堆32中的数据溢出。在任一情况下,由于对第n个影子寄存器堆32的双端口寄存器的第二端口的随机存取的缘故,寄存器保存引擎30可独立于物理寄存器堆28中的多端口寄存器的分配而在第n个影子寄存器堆32与后备存储器36之间溢出和填充数据。图4描绘堆栈寄存器堆系统及其物理实施方案(在图3所描绘的实施例中)的逻辑图。所述堆栈寄存器堆系统作为具有无限深度的多端口寄存器逻辑堆栈而操作。由于每个过程只能存取与指令集结构中界定的GPR—样多的寄存器,且物理寄存器堆28至少具有所述大小,因此由过程直接存取的寄存器是多端口寄存器。所述逻辑寄存器堆栈中的物理寄存器堆下方是影子寄存器堆32中的双端口寄存器。影子寄存器堆系统包括物理寄存器堆28和所有影子寄存器堆32。这些寄存器是芯片上寄存器,可以最小延迟从所述寄存器存取数据。所述逻辑寄存器堆栈底部处是保存到后备存储器36(例如芯片外RAM)的数据。请注意,在芯片上寄存器中实施的逻辑寄存器堆栈的深度是物理寄存器堆28的大小的整数倍(在所描绘的实施例中是3倍)。这些寄存器中的至少一半(在所描绘的实施例中是其2/3)是简单的、直接连接的双端口寄存器。然而,影子寄存器堆系统提供的性能非常接近于可由通过使用多端口寄存器使物理寄存器堆28的大小倍增的较高成本的选择实现的性能。物理寄存器堆28中的每个多端口寄存器与影子寄存器堆32中的一个或一个以上双端口寄存器的一一对应关系以及直接耦合链接允许将影子寄存器堆系统划分为若干个组,其中每个物理寄存器堆28组具有通过如上文所述的溢出和填充操作的操作而扩展的有效深度。举例来说,在某些应用中,例如电池供电的便携式电子装置,其中功率消耗是关键性的,已知的是使物理寄存器堆28的一个或一个以上组"断电"。使用影子寄存器堆32的影子寄存器堆系统完全支持此功率节省策略。可将每个影子寄存器堆32划分为对应于物理寄存器堆28的组的若干个组,且一个或一个以上影子寄存器堆32组可连同任何对应的物理寄存器堆28组一起断电。在操作的组中,堆栈顶部、保存/恢复以及(如果存在的话)堆栈底部指针在一个组的界限内如上文所述那样操作。数据从一个或一个以上多端口寄存器保存到对应的双端口寄存器,以增加物理寄存器堆28的操作的组的有效深度,而不会实施额外的昂贵的多端口寄存器。图5中以流程图形式描绘根据一个实施例的操作堆栈寄存器堆系统的方法。寄存器保存引擎30接收对分配物理寄存器堆28中的一个或一个以上多端口寄存器以专门供新调用的过程用于写入和读取数据(例如算术或逻辑指令的操作数或结果)的请求(框50)。寄存器保存引擎30确定物理寄存器堆28中是否保留有足够的未分配的寄存器(框52)。起初,存在所请求数目的物理寄存器堆28多端口寄存器并将将其分配给新的过程(框60)。在每个过程调用一相继过程(框50)时,此过程可重复若干次。在某个点,调用一个过程并请求多端口寄存器分配(框50),但保留在物理寄存器堆28中的未分配多端口寄存器不足以满足所述请求(框52)。寄存器保存引擎30接着确定必须释放物理寄存器堆28中的哪些寄存器以满足所述请求,以及影子寄存器堆32链末端处的对应双端口寄存器是否是自由的(框54)。如果是,那么通过将分配给一个或一个以上当前不活动过程的至少足够数目的多端口寄存器的内容保存到影子寄存器堆32中对应的直接连接的双端口寄存器,来解除分配所述多端口寄存器(框58)。双端口寄存器中的任何数据溢出到后续影子寄存器堆32中的双端口寄存器,且依此类推沿着链向下。寄存器保存引擎30接着将这些解除分配的寄存器连同物理寄存器堆28中现有的解除分配的寄存器一起分配给请求的新过程(框60),所述新过程可继续进行执行,并将数据存储在其被分配有的物理寄存器堆28多端口寄存器中。如果足够的新过程被调用,且/或如果新过程需要较大的寄存器分配,那么数据可能溢出到达最后一个或第n个影子寄存器堆32。在此情况下,根据新过程的请求(框50),如果第n个影子寄存器堆32中对应于物理寄存器堆28中待分配的多端口寄存器的双端口寄存器含有有效数据(框54),那么寄存器保存引擎30将使数据溢出到后备存储器36,例如芯片外RAM(框56)。接着可将数据从物理寄存器堆28中的多端口寄存器保存到影子寄存器堆32中的对应双端口寄存器(框58),且将释放的物理寄存器堆28多端口寄存器分配给新的过程(框60)。在新过程被调用时(框50),此过程可重复。在某个点,而不是调用新过程时(框50),活动过程将终止,并将控制返回给其调用过程,所述调用过程将请求重新激活(框62)。寄存器保存引擎30将核査以确定原先分配给不活动过程的所有寄存器是否在物理寄存器堆28中仍保持分配给所述不活动过程(框64)。如果是,那么所述过程写入的所有数据在所述过程调用另一过程并变为不活动之前保留在物理寄存器堆64中,且所述过程可重新激活并重新开始执行(框68)。如果寄存器保存引擎30使数据从原先分配给不活动过程的一个或一个以上多端口寄存器溢出到对应的双端口寄存器中,并将多端口寄存器分配给另一过程,那么寄存器保存引擎30通过使存储在对应的影子寄存器堆32两端口寄存器中的数据移位来填充物理寄存器堆28(框64)。接着重新激活所述不活动过程(框68)。可将数据从后备存储器36填充到第n个影子寄存器堆32。利用影子寄存器堆32的影子寄存器堆系统通过减少因针对物理寄存器堆28对后备存储器36进行保存/恢复操作而必须中断处理器的次数来增加处理器性能。这导致软件过程调用/返回时的较快寄存器分配/解除分配,并且减少了所需的相对较慢的芯片外存储器存取的次数。利用影子寄存器堆32的影子寄存器堆系统还通过减少芯片外存储器存取,且通过使用与物理寄存器堆28的多端口寄存器相比较简单的双端口寄存器驱动较短的导线来节省功率。在一个实施例中,为了使寄存器溢出/填充操作的速度增到最大且使功率消耗减到最小,将影子1寄存器堆32-l中的双端口寄存器物理上放置成直接邻近于物理寄存器堆28中的对应多端口寄存器,且直接连接。类似地,将影子2寄存器堆32-2中的双端口寄存器物理上放置成直接邻近于影子1寄存器堆32-1中的对应双端口寄存器,且直接连接。事实上,在一个实施例中,将每一"行"对应多端口和双端口寄存器设计为将放置在芯片上且在芯片上路由的一个单元。这确保了每个对应寄存器之间的具有最小导线长度的直接连接(与将物理寄存器堆28和影子寄存器堆32设计为单独的单元形成对比,在此情况下,可能在较大硅面积上使用较长导线长度来路由其间的连接)。尽管已经相对于本发明的特定特征、方面和实施例描述了本发明,但将明了,在本发明的广泛范围内,大量变化、修改和其它实施例是可能的,且因此,所有变化、修改和实施例都将被视为在本发明的范围内。因此本实施例在所有方面将被解释为说明性而非限制性的,且希望在所附权利要求书的意义和等效物范围内的所有改变都包含于本文中。权利要求1.一种管理具有一个或一个以上影子寄存器堆的影子寄存器堆系统的方法,其包括将一个或一个以上多端口寄存器从物理寄存器堆分配给第一过程,并将与所述第一过程相关联的数据存储在所述所分配的多端口寄存器中;选择性地将与所述第一过程相关联的数据从一个或一个以上多端口寄存器保存到一个或一个以上第一双端口寄存器,并释放对应的所述所分配的多端口寄存器以用于分配给第二过程;以及在所述第一过程继续执行之前,将与所述第一过程相关联的数据从所述第一双端口寄存器恢复到所述多端口寄存器,并将所述寄存器重新分配给所述第一过程。2.根据权利要求1所述的方法,其中将所述影子寄存器堆系统中的每个多端口寄存器直接连接到对应双端口寄存器的第一端口。3.根据权利要求1所述的方法,其进一步包括将与所述第一过程相关联的数据从所述第一双端口寄存器保存到后备存储器,且随后在将与所述第一过程相关联的所述数据恢复到所述多端口寄存器之前,将与所述第一过程相关联的所述数据从所述后备存储器检索到所述第一双端口寄存器。4.根据权利要求3所述的方法,其中将与所述第一过程相关联的数据从所述第一双端口寄存器保存到后备存储器包括从每个第一双端口寄存器的第二端口读取与所述第一过程相关联的数据,并将所述数据写入到所述后备存储器。5.根据权利要求3所述的方法,其中将与所述第一过程相关联的所述数据从所述后备存储器检索到所述第一双端口寄存器包括从所述后备存储器读取与所述第一过程相关联的数据,并将所述数据写入到从其读取所述数据的所述同一第一双端口寄存器的所述第二端口。6.根据权利要求2所述的方法,其进一步包括将与所述第一过程相关联的数据从一个或一个以上第一双端口寄存器保存到对应的第二双端口寄存器,并随后在将与所述第一过程相关联的所述数据从所述第一双端口寄存器恢复到所述多端口寄存器之前,将与所述第一过程相关联的所述数据从所述第二双端口寄存器检索到所述第一双端口寄存器。7.根据权利要求6所述的方法,其中将所述影子寄存器堆系统中的每个第一双端口寄存器的第二端口直接连接到对应第二双端口寄存器的第一端口。8.根据权利要求6所述的方法,其进一步包括将与所述第一过程相关联的数据从所述第二双端口寄存器保存到后备存储器,且随后在将与所述第一过程相关联的所述数据恢复到所述第一双端口寄存器之前,将与所述第一过程相关联的所述数据从所述后备存储器检索到所述第二双端口寄存器。9.根据权利要求8所述的方法,其中独立于多端口寄存器分配而执行从所述第二双端口寄存器保存数据和将数据检索到所述第二双端口寄存器。10.根据权利要求8所述的方法,其中将与所述第一过程相关联的数据从所述第二双端口寄存器保存到后备存储器包括从每个第二双端口寄存器的第二端口读取与所述第一过程相关联的数据,并将所述数据写入到所述后备存储器。11.根据权利要求8所述的方法,其中将与所述第一过程相关联的所述数据从所述后备存储器检索到所述第二双端口寄存器包括从所述后备存储器读取与所述第一过程相关联的数据,并将所述数据写入到从其读取所述数据的所述同一第二双端口寄存器的所述第二端口。12.根据权利要求1所述的方法,其中选择性地将与所述第一过程相关联的数据从一个或一个以上多端口寄存器保存到一个或一个以上第一双端口寄存器包括只在所述多端口寄存器中保留的未分配寄存器不足以分配给所述第二过程时,才将与所述第一过程相关联的数据保存到所述第一双端口寄存器。13.根据权利要求l所述的方法,其中选择性地将与所述第一过程相关联的数据从一个或一个以上多端口寄存器保存到一个或一个以上第一双端口寄存器包括只将与所述第一过程相关联的数据保存到所述第一双端口寄存器。14.根据权利要求l所述的方法,其中选择性地将与所述第一过程相关联的数据从一个或一个以上多端口寄存器保存到一个或一个以上第一双端口寄存器包括将与所述第一过程相关联的数据以及另外与在所述第一过程之前执行的一个或一个以上过程相关联的数据保存到所述第一双端口寄存器。15.根据权利要求14所述的方法,其中选择性地保存与所述第一过程和一个或一个以上先前过程相关联的数据包括在预定数目的多端口寄存器含有与不活动过程相关联的数据时保存所述数据。16.根据权利要求14所述的方法,其中选择性地保存与所述第一过程和一个或一个以上先前过程相关联的数据包括将所有数据保存在与不活动过程相关联的多端口寄存器中。17.根据权利要求l所述的方法,其进一步包括将所述物理寄存器堆和对应的双端口寄存器划分为两个或两个以上组;使至少一个组断电;以及分配多端口寄存器,将数据存储在多端口寄存器中,选择性地将数据保存到双端口寄存器,释放多端口寄存器以用于分配,将数据从所述双端口寄存器恢复到多端口寄存器,以及重新分配一个或一个以上操作的组中的所述多端口寄存器。18.—种实施界定多个通用寄存器的指令集结构的处理器,其包括-物理寄存器堆,其包括至少与所述处理器指令集结构中所界定的通用寄存器的数目一样多的多端口寄存器,所述寄存器被动态地分配给软件过程;寄存器保存引擎,其操作以从分配给不活动过程的多端口寄存器保存数据,并在所述过程变为活动之前将数据恢复到所述多端口寄存器;以及第一影子寄存器堆,其包括与所述物理寄存器堆中的多端口寄存器数目相同的双端口寄存器,每个双端口寄存器的第一端口直接连接到对应的多端口寄存器,且操作以在所述寄存器保存引擎的控制下存储从分配给不活动过程的所述多端口寄存器保存的数据。19.根据权利要求18所述的处理器,其进一步包括后备存储器,所述后备存储器操作以在所述寄存器保存引擎的控制下存储和检索与不活动过程相关联的数据。20.根据权利要求19所述的处理器,其中所述寄存器保存引擎可随机读取/写入每个第一影子寄存器堆寄存器的第二端口,且其中所述寄存器保存引擎进一步操作以将与不活动过程相关联的数据从所述第一影子寄存器堆保存到所述后备存储器。21.根据权利要求19所述的处理器,其中所述物理寄存器堆中的对应多端口寄存器和所述第一影子寄存器堆中的双端口寄存器物理上定位于彼此邻近处。22.根据权利要求19所述的处理器,其进一步包括第二影子寄存器堆,所述第二影子寄存器堆包括与所述第一影子寄存器堆数目相同的双端口寄存器,所述第二影子寄存器堆中的每个双端口寄存器的第一端口直接连接到所述对应第一影子寄存器堆寄存器的所述第二端口,所述第二影子寄存器堆操作以在所述寄存器保存引擎的控制下存储与不活动过程相关联的数据。23.根据权利要求19所述的处理器,其中所述第一影子寄存器堆中的双端口寄存器物理上定位成邻近于所述物理寄存器堆中的多端口寄存器,且其中所述第二影子寄存器堆中的双端口寄存器物理上定位成邻近于所述第一影子寄存器堆中的对应双端口寄存器。全文摘要在影子寄存器堆系统中,一个或一个以上影子寄存器堆(SRF)插入在物理寄存器堆(PRF)与后备存储器(BS)之间。所述SRF包括串联连接成距所述PRF任意深度的链的双端口寄存器。寄存器保存引擎可随机存取所述链中最终SRF中的寄存器的一个端口,并在所述最终SRF与例如RAM的所述BS之间保存/恢复数据。在PRF寄存器被从调用过程解除分配以供被调用的过程使用时,数据从所述PRF中的多端口寄存器串行移位通过SRF中的连续的对应双端口寄存器,且在所述PRF寄存器被重新分配给调用过程时,朝所述多端口寄存器串行移位返回。由于没有任何过程可存取多于所述PRF中寄存器数目的寄存器,因此通过使用成本较低的双端口寄存器增加了所述PRF的有效大小。文档编号G06F9/38GK101356497SQ200680050695公开日2009年1月28日申请日期2006年11月13日优先权日2005年11月10日发明者厄平德·辛格·巴贝尔,罗希特·卡普尔申请人:高通股份有限公司