本发明涉及一种信息处理装置,更具体地说,是涉及采用一种用于寄存器的组织方法和存取方法的信息处理装置,这种方法特别适用于寄存器的存取时间远短于主存储器存取时间的情况。 到现在为止,对于包括大量寄存器的计算机系统,已经讨论过一种对单个寄存器赋值的方法,例如见D.A.Patterson和C.H.Sequin 1982年9月在IEEE(pp8-21)上发表的一种超大规模集成电路RISC计算机(A VISI RISC,COMPU TER),这种方法通常是以RISC I-微处理器(下面简称为RISC I)的形式实现的。
在RISC I中,有32个可由指令赋值的逻辑寄存器,和138个物理寄存器。由L0,L1,…及L31表示被指令赋值的逻辑寄存器,R0,R1,…及R937表示物理寄存器。寄存器L0,L1,…及L9在任何时间里总是分别对应于寄存器R0,R1,…R9。寄存器L10,L11…L31只是在初始化时分别对应于寄存器R116,R117…R137。但是,在调用第一个子程序之后,它们就分别与寄存器R100,R101,…R121对应,在调用仅低于第一子程序等级的子程序之后,它们又分别与寄存器R84,R85,…R105对应。根据这种方式,寄存器之间的对应依照子程序调用的嵌套级以每16个寄存器为一组而下移。在从子程序返回时,其对应情况是以每16个寄存器为一组而上移。在调用子程序的前后,逻辑寄存器L26,L27,…L31分别指示对应于寄存器L10,L11,…L15的物理寄存器。
根据这种方式,依照子程序调用的嵌套级以利用部分不同的寄存器置位,从而希望减少寄存器的“保存”和“恢复”操作。当子程序调用的嵌套级很多,而且物理寄存器已被用完时,将产生中断。
在如上所述的先有技术中存在下列问题:(a)只有当从子程序返回或被调用时,所使用的寄存器区域才以一定数量上移或下移,它完全没有考虑通过改变寄存器位置来适应程序地特点或编程形式,因此不可能有效地利用寄存器。(b)当交换任务时,大量的物理寄存器需要保存和恢复,而且物理寄存器数量的进一步提高不会导致速度的提高。(c)当物理寄存器被用完时,寄存器存贮等操作由一个中断处理程序来完成,因此,处理时需要很长的时间。
其中,(b)项是一个很严重的问题,它使得大规模集成电路的高密度集成技术不能得到充分的利用。
本发明的目的是改进上述问题,并提供一种信息处理装置,其中,随着物理寄存器数量的增加,当子程序引用和任务交换时,寄存器的保存和恢复操作可以大大减少,从而简化对一个程序的寄存器分配,提高处理速度。
实现该目的的本发明的信息处理装置,其特征在于,包括这样的装置,它通过利用同一指令对主存贮器的地址空间区域和一个寄存器块同时赋值,由每条指令所使用的一个寄存器的赋值表示为一个区域寄存器的赋值和一个寄存器位移的赋值的结合,前者具有作为一个数值的寄存器区域的寄存器地址,后者表示在该寄存器区域中的一个相对寄存器地址。
下面介绍本发明的基本原理。
在计算机运行进行处理的每个时间点上,由软件根据寄存器使用的情况对区域寄存器置值。总的来说,尽管很可能只有一个区域寄存器,但设置多个区域寄存器也是可以的。每条指令的寄存器字段由一个区域寄存器部分和一个寄存器位移部分构成,前者指示将使用的区域寄存器,后者表示指定区域内的一个相对寄存器地址。在某些情况下,区域寄存器由一个专用寄存器实现,在另一些情况下,它由一个其特定区域在寄存器块范围内的寄存器(以下简称为“特定寄存器”)实现,该寄存器块中由通用寄存器所组成。在使用专用寄存器的情况下,提供有装入和存贮寄存器值的指令。相反,在使用特定寄存器的情况下,省略了相应于特定区域的区域寄存器的赋值,所使用的区域寄存器的地址只由寄存器位移赋值。
作为一个合成赋值的区域寄存器值和寄存器位移值成为寄存器地址的装置,在一些情况下使用对两个值进行算术相加的加法器,在另一些情况下使用一个高速“OR”电路。
寄存器以环形构成,对于每个寄存器,都要确定其在前寄存器和后续寄存器,这样可以同样对所用寄存器位置的前移和恢复进行处理。
此外,为消除在每个程序中由于所用的寄存器的安排而产生的程序干扰,为有效地使用寄存器以及简化寄存器的配置,设有寄存器工作区,每个寄存器工作区包含一定数量的寄存器,任一个所使用的寄存器工作区都可由置入区域寄存器的值来确定。
另外,为缩短子程序调用和任务交换时的寄存器存贮和恢复过程,将寄存器块分为多个寄存器区(寄存器工作区),该区又进一步分为包括多个工作区的一个环形工作区和多个整体工作区,该环形工作区在调用和返回子程序时以环形形式前移和恢复一个工作区位置,而整体工作区可随着任务交换而改变它们的赋值,并且因此提供了用于控制它们的使用的工作区控制指令和工作区控制指针。
进一步来说,若一个环形工作区由m个包括10个寄存器的工作区组成,而且一组整体工作区由n个分别由l1,l2,…ln个寄存器组成的工作区构成,则寄存器的总数为l0×m+l1+l2+…+ln。在这种情况下,寄存器l0,l1…ln的最大数目可以由指令的寄存器位移部分赋值。环形工作区中的每一工作区以对应嵌套子程序调用的嵌套级之一的形式进行分配,而每个整体工作区以对应异步执行的作业之一的形式进行分配。特别是,关于环形工作区,当子程序调用的嵌套级增加一级时,在环形位置下一个位置上的一个工作区用作现行工作区,至那时为止作为现行工作区的那一工作区被置为在先工作区。当由于从子程序返回而减少嵌套级时,环形位置恢复一位,从而将在先工作区置为现行工作区,在环形位置前一个位置上的那一工作区被置为新的在先工作区。整体工作区的分配可随着任务交换而变化,但在同一个任务中调用和返回子程序时,其分配保持不变而且其内容不能自动地被保存和恢复。整体工作区之一被系统任务固定用于处理中断等,因而这个整体工作区被称为“系统工作区”。
只在一个子程序中使用的信息被放入环形工作区,而超出子程序调用部分之外的整体信息和在子程序调用时不需要被保存和恢复的暂时信息放入整体工作区。当被提供给低一级子程序的信息保持在现行工作区的寄存器中时,被调用的子程序可将其视为在先工作区的寄存器。当从调用的子程序回到高一级子程序的作为函数值及其类似的信息存放在先工作区的寄存器中时,在返回时它可被视为一个现行工作区的寄存器。
工作区控制指针包括,一个指示正在使用的现行工作区位置的现行工作区指针,一个指示在先工作区位置的在先工作区指针,一个指示整体工作区位置的整体工作区指针,此外,还有一个指示有效信息项边界的有效工作区指针以及一个指示环形工作区存贮位置的工作区指针。
作为工作区控制指令,有一个控制环形工作区前移和恢复的前移环形工作区指令和一个恢复环形工作区指令,它们在有效信息消失前将其自动保存起来并在需要引用之前将存贮的信息自动恢复;执行整体工作区分配的一个装入工作区状态指令和一个存贮工作区状态指令,用于置入环形工作区控制信息并为环形工作区存贮区域赋值;以及集中转移工作区内容的一个块转移指令。
为了能对现行工作区寄存器中的寄存器(其在后续的环形工作区前移或恢复中保持其内容不变)进行赋值,设有一个指示向量,当与之相应的寄存器为i时,该向量的第i位置为1,否则该位为0并且该向量被置入现行工作区的特定存贮器中。
作为一种指令图,几乎所有指令的寄存器区域都被允许分配给整体工作区的寄存器,使得也可产生只使用整体工作区的程序。
进而,还设有一种整体工作区模式,在这种模式中,环形工作区的寄存器与整体工作区的寄存器被同等处理,因而可提高整体工作区的数量,采用环形工作区的环形工作区模式和整体工作区模式之间可由程序控制进行变换。
为避免或消除任务转换时的环形工作区的存贮操作,设有多个环形工作区,将一个环形工作区和一个整体工作区分配给多个任务中的一个任务。不需要对环形工作区或整体工作区执行保存和恢复处理,就可以交换具有指定工作区的任务。
若寄存器的位置被表示为一个二进制数的寄存器地址,每个寄存器区的寄存器数量被表示为2的乘方,并且一个区域寄存器的值是2的乘方的整数倍,则实际使用的寄存器的位置,可以由一个OR电路根据该区域寄存器的值和所赋给一个寄存器位移部分的值来确定,这样可以提高处理速度。若寄存器位置被表示为二进制数0~2P-1,则可以很容易地计算出在寄存器地址为i的寄存器前后的寄存器,它们的寄存器地址的模分别为(i-1,2)和(i+1,2)。当一个环形工作区包括2r个寄存器工作区,而每个寄存器工作区又包括2g个寄存器时,工作区控制指针的值被置为2的整数倍,可以很容易地计算出一个以i×2为起始地址的工作区的在先和后续工作区,它们的前寄存器地址的模分别为((i-1)×28,2P+8)和((i+1)×2q.,2P+8)。
若一组整体工作区中的每个整体工作区的寄存器数目都为l1,每个环形工作区的工作区数都为m,并且环形工作区中的每一工作区所包含的寄存器数目都为l0,则在程序运行中可选用任一整体工作区或环形工作区。
由于将寄存器块和寄存器存储机构集成在同一半导体芯片上作为算术一逻辑单元,因此可以大大降低半导体芯片与外部之间的信息交换频率,从而提高处理速度。
在本发明的信息处理装置中,在执行一条使用通用寄存器的指令前面部分如一个程序或子程序的首部设置了一个区域寄存器的值。若所使用的寄存器区根据所处理的信息类型而改变时,对于每一种类型的信息,可以使用不同的区域寄存器。当一条指令,其区域寄存器部分为i而寄存器位移部分为d,在一个区域寄存器i的值被置为Ai时到来,则被指令实际使用的寄存器的地址变为Ai+d。若由一个OR电路根据一个区域寄存器的值和一个寄存器位移值合成一个寄存器地址,则程序这样拟定,寄存器位移值可限定为一个最多表示为l′位的数值,其中l′表示一个小于寄存器位移部分位长的数,而区域寄存器的值可限定为一个在l′位以下均为0的数值。这样,OR电路中的合成值就与加法器中的相加值相同了,从而不会引起误动作。
可以在任何需要的时刻置入区域寄存器的值,而不必只限于子程序的首部分等。因此,当程序运行时,可以根据寄存器过去的使用状态和将来要求的状态改变所使用的寄存器的赋值。
图1是根据本发明的信息处理装置的第一实施例的块排列图;
图2(a)-2(e)是用于根据本发明的信息处理装置的指令的基本部分的格式图;
图3是表示本发明第二实施例的信息处理装置的基本部分的排列图;
图4是本发明第三实施例的基本部分的排列图;
图5是表示图4中一个寄存器块的结构图;
图6是本发明第四实施例中一条指令的寄存器指示部分;
图7是图6中一条工作区状态控制指令的一种格式;
图8是解释本发明中寄存器工作区的保存和恢复的细节;
图9是本发明第五实施例的基本部分的排列图;
图10是图4中的指令处理器集成在一个半导体芯片上时的情况。
下面结合附图对本发明进行详细描述。
首先,详细说明本发明的信息处理装置中寄存器工作区使用方法的一个例子,设l表示由用于信息处理装置的一条指令的寄存器位移部分赋值的寄存器数目,m表示环形工作区的数目,n表示整体工作区的数目。
当启动程序时,用一条工作区状态输入指令将现行工作区指针的值置为0,将先行工作区指针的值置为l(m-1),整体工作区指针的值置为分配给该程序的工作区地址,有效工作区指针的值置为l(m-1),工作区堆栈指针的值置为用作程序中的工作区存储区域的位置。
当调用子程序时,作为自变量传送给子程序的信息项被放入现行工作区的寄存器中,保存指示向量被放入现行工作区的特定寄存器,随后执行用于启动子程序的指令序列。当自变量的数太大以至于现行工作区的寄存器已安排不下时,则通过存贮器传送溢出部分。
在调用的子程序中,首先执行一条前移环形工作区指令。在这条指令中,在调用前就将现行工作区指针的值置为新的在先工作区指针的值,并由环形地址表示的直接后续工作区地址被置为新的现行工作区指针的值(如果在调用前,现行工作区指针的值i小于l(m-1),则工作区地址为i+l,如果它等于l(m-1),则工作区地址为0)。在这种情况下,新的在先工作区指针将一个寄存器块的内容存入由工作区栈指针指示的位置。(而该寄存器块是由一个有效工作区指针指示的工作区中的一个保存指示向量所指示的),而且它还将有效工作区指针的值前移到以环形地址表示的下一个工作区地址,并根据所存贮数据的量前移工作区堆栈指针的值。除非新的在先工作区指针要超过有效工作区指针,否则不执行由前移工作区指令控制的工作区存贮。
在子程序中利用传送的信息项作为自变量时,将由程序给出一条关于在先存贮器内容的指令。在调用端置入寄存器位移部分i的现行寄存器中的信息,可被认为是被调用端寄存器位移部分i的在先寄存器的内容。在调用端置入整体工作区的信息可与被调用端同样使用。
从子程序返回时,如果需要的话,交还给调用端的信息(如函数值)首先被置入在先寄存器。然后,执行一条恢复环形工作区指令。这条指令的功能是在返回前,将在先工作区指针的值置为一个新的现行工作区指针的值,并将在先的环形地址置为新的在先工作区指针的值(若新的在先工作区指针的地址i大于0,则为i-l,若等于0,则为l(m-1))。在这种情况下,当新的现行工作区指针的值与有效工作区指针的值成为相等时,由新的在先工作区指针指示的工作区存贮区域的内容被转移,因而恢复原内容,而新的在先工作区指针的值被置为新的有效工作区指针的值,并且工作区堆栈指针根据转移的量而恢复。一个保存指示向量指示一个向其转移内容的寄存器,该向量被包含在从工作区存贮区域转移的数据的首部之中。
当有异常情况(如中断)发生时,利用一个系统工作区的堆栈指针将此时在执行的指令地址推入栈中,然后,所执行的操作转移到相应于该情况类型的异常处理单元。在异常处理单元中,根据存贮工作区状态指令存贮异常情况发生时的现行工作区指针的值,在先工作区指针的值及工作区栈指针的值,根据输入工作区状态指令,将异常处理单元所用的值置入各指针。
当用操作系统的软件或及其类似的软件进行任务交换时,根据保存工作区状态指令保存用于现行任务的现行工作区指针的值,在先工作区指针的值、整体工作区指针的值、有效工作区指针的值及工作区堆栈指针的值,然后,根据装入工作区状态指令,置入用于下一个任务的各指针的值。那时,若一个环形工作区被另一个任务共享,则亦根据块转移指令保存和恢复环形工作区的内容。
利用这种方式,当子程序引用时将极少产生寄存器保存和恢复操作,因而能够提高操作速度。
还可以只使用整体工作区,而不使用环形工作区来运行一个程序。因此,当这样的程序作为任务运行时,不需要进行环形工作区的保存和恢复处理。若这样的一个任务有自己单独的整体工作区,而不需要与另一个任务竞争,则它就完全不需要寄存器的保存和恢复处理。若一个中断处理单元或类似单元以这种方式构成,则其处理速度会提高。通过利用整体工作区模式,可以完成大量的这种任务,其中,环形工作区可按整体工作区同等处理。
既使在使用环形工作区的情况下,在只使用少量寄存器的一个小子程序中,并不总是需要子程序首部的前移环形工作区指令和位于其尾部的恢复环形工作区指令,它们可以被省略,以实现高速子程序引用。至于一个以这种形式分配的任务,它既不与另一个任务分享整体工作区,也不与其共用环形工作区,则既使当任务被交换时,整体工作区和环形工作区的内容都被没有任何改变的存贮起来。因此,当重新启动任务时,可以立刻从断点重新开始处理。
图1是表示本发明第一个实施例的信息处理装置的基本部分的排列图。
第一个实施例中的信息处理装置基本上由指令处理器1和主存贮器2构成。指令处理器1包括:由多个操作寄存器R0,R1,R2…RN组成的寄存器块3,算术-逻辑单元4,寄存器存取机构5,主存贮存存取机构6及指令译码器10。主存贮器2的主存地址空间和寄存器块3的寄存器地址空间分别限定不同的地址空间。在本实施例中,寄存器地址被表示为L位二进制整数0,1,2,…2L-1并保持N=2L-1。在寄存器存取机构5中,有一个区域寄存器选择电路20,寄存器区域指针22,用于合成寄存器地址的OR电路30及寄存器选择电路31。在主存贮器存取机构6中,有转移寄存器41和主存地址寄存器42。
指令译码器10或者从用户直接给出的指令列中抽取指令,作为用于进行信息处理的指令序列,或者从语言加工程序产生的指令序列中抽取指令,也可从主存贮器2中的预定序列中抽取指令,而且根据指令中各组成部份的作用,指令译码器对每条指令进行处理。典型的指令包含指示操作类型的操作码部份11,寄存器指示部分12和主存贮器指示部份15。寄存器指示部份进一步包括区域寄存器部份13和长度为L位的寄存器位移部份14。设i表示某特定指令的区域寄存器部份13的值,则值i被送入寄存器存取机构5的区域寄存器选择电路20中,位于寄存器块3中的寄存器Ri(21)便被选中作为区域寄存器。设bi表示Ri寄存器21中的内容,将值bi送入寄存器区域指示器22。如果寄存器位移部份14的位长用l表示,则把L位寄存器地址中低l位部份24的内容与寄存器位移部份14的内容输入OR电路30进行逻辑或运算,并将由此得到的逻辑和送入寄存器选择电路31。此外,寄存器地址的高(L-1)位按照区域寄存器指针22中高(L-1)位23的值设置。
当区域寄存器21的值用bi表示且某个低l位为0的二进制数已事先设置时,则按照上述由OR电路30合成的寄存器地址等于值bi与寄存器位移部分14的值d之间的算术和bi+d。区域寄存器21内容中的低l位无需总设置为0,一条指令中,令l′表示等于或小于寄存器位移部份14的位长L,某个区域寄存器的内容根据其低l′位为零的数目进行设置,并且区域寄存器的地址用在区域寄存器部份13;如果寄存器位移部分的值限制在由l′位表示的数内,则与之类似,由OR电路30合成的寄存器号与由区域寄存器值和寄存器位移部分的值之间的算术和所表示的值相同。用于限定置入寄存器位移部分14的l′值可以由软件选择。因此,值l′可根据每个所用的区域寄存器不同而不同。更进一步,甚至对于一个区域寄存器来说,它可以根据使用的时间而变。
现在,当按照上述方法,根据某指令所选的区域寄存器的值bi和寄存器位移部分的值d合成出存存器号bi+d,并将其送入寄存器选择电路31时,寄存器地址bi+d对应的寄存器(Rbi+d)32被选中作为指令所用的寄存器。如果指令操作码部分11的内容表示操作指令,且操作数是所选寄存器的内容,则寄存器Rbi+d中的内容送入ALU单元4,并且运算从这里开始执行。换句话说,如果操作码部分11的内容表示操作结果寄存器是选中的寄存器,则ALU4输出的操作结果装入寄存器Rbi+d中。如果操作码部分11的内容是装入指令,则由主存贮器指示部分15指定的主存贮器地址的内容装入寄存器Rbi+d中,如果是存贮指令,则寄存器Rbi+d中的内容存入由主存贮指示部分15指定的主存贮器地址的对应单元。位于主存贮器存取机构6中的转移寄存器41是用于暂时存放信息的寄存器,这些信息在主存贮器2与指令处理器1之间传递,而主存贮器地址寄存器42用于暂时存贮当时被选中的主存贮器2的地址。
在本实施例中,就其区域寄存器部分13的内容是零的指令而言,寄存器位移部分14的内容d被不失真地送入寄存器选择电路31中,并且地址为d的寄存器被选作该指令所用的寄存器。即,寄存器地址从零开始的这个寄存器区域被置为区域寄存器的一个特定寄存器区域。因此,通过使用其区域寄存器部分13为零的指令,能够设置或涉及区域寄存器的值。
图2(a)-2(e)是用于本发明的信息处理装置的指令格式图。该图给出不同的指令格式,它涉及信息处理装置中每条指令的主存贮器地址标志、寄存器地址以及操作代码。作为指令的组成部分,除了图中所示的各个部分之外,还有表示附加信息的部分,表示所用常数的部分等等。
图2(a)示出一种指令格式,它包括操作码部分101,寄存器指示部分102以及主存贮器指示部分103。在寄存器指示部分102中,包含区域寄存器部分105和寄存器位移部分106,并且以与图1相同的方式选择所用的寄存器。同样,在主存贮器指示器部分103中,有用于指示基址寄存器的寄存器指示部分104,主存贮器位移部分109,用于指示相对于基址寄存器的值的相对地址。在这种指令中,所用的寄存器的寄存器地址只是按照上述方式,根据寄存器指示部分107和寄存器位移部分108而得到的,并且,B+D被设置为指令所用的主存贮器的地址,B+D是通过将上述寄存器地址对应的寄存器Rb的内容B与主存贮器位移部分109的值D相加后得到的。
图2(b)示出一种指令,该指令的主存贮器指示部分112包括:表示基址寄存器的寄存器指示部分,用于指示变址寄存器的寄存器指示部分114和主存贮器位移部分121。在这种指令中,用作基址寄存器的寄存器Rb是依照上述形式、根据一侧的区域寄存器部分117和寄存器位移部分118得到的,而用作变址寄存器的寄存器Rx是依照上述形式,根据另一侧的区域寄存器部分119和寄存器位移部分120而得到的,用作指令中使用的主存贮器2的地址,三部分内容是:基址寄存器Rb的内容,变址寄存器Rx的内容和主存贮器位移部分12的值。
图2(c)示出使用二个寄存器的指令格式图。在该指令中,以上述形式并根据区域寄存器部分124和一个寄存器指示部分122的寄存器位移部分125确定的地址,是作为第一寄存器的地址,而根据区域寄存器部分126以及另一个寄存器指示部分123的寄存器位移部分,并以上述形式确定的寄存器地址,作为第二个寄存器的地址,并用第一和第二寄存器执行处理。
图2(d)示出了另一指令,根据这种指令,如果使用专用寄存器区域作为区域寄存器,则专用区域寄存器的值存贮在主存贮器中。该指令包括用于指示专用区域寄存器地址的专用寄存器部分130以及主存贮器指示部分131。
图2(e)示出了使用一个专用区域寄存器和一个通用寄存器的的指令。在指令中,包括专用区域寄存器部分133和通用存存器部分134,通过使用区域寄存器部分135和寄存器位移部分136,并按前述方式选择寄存器。
图3是信息处理装置基本组成部分的排列图,用于说明本发明的第二个实施例。在这个实施例中,区域寄存器块207是一组专用区域寄存器,在指令处理器201中,它与通用寄存器块203分开排列。通用寄存器块203由通用寄存器R0,R1…RN组成,而区域寄存器块由区域寄存器Q0、Q1、…QK构成。当一条指令的寄存器指示部分212中包含的区域寄存器部分213的内容i被送入寄存器存取机构205中的区域寄存器选择电路220时,区域寄存器块207中的区域寄存器(Qi)221的内容bi被置入区域寄存器指针222中。区域寄存器Qi的内容bi与指令中寄存器位移部分214的内容d通过寄存器地址运算电路230相加,其和bi+d被送入寄存器选择电路231。结果,位于通用寄存器块203中的寄存器(Rbi+d)232被选中作为该指令所用的寄存器。诸如ALU204、主存贮器存取机构206等其它部分与图1中所描述的第一个实施例相同。
图4是本发明第三个实施例的信息处理装置基本组成部分的结构图。在这个实施例中,信息处理装置的主要部分是指令处理器301和主存贮器302。这里的指令处理器301包括:操作寄存器块303,ALU306,区域寄存器块310,寄存器存取机构320,主存贮器存取机构330,指令译码器340,操作寄存器块指针323(BMR),和工作区堆栈指针324(BSP)。其中,操作寄存器块303包括一个环形工作区304和一个整体工作区集305。区域寄存器块包括四个区域寄存器,分别是:在先工作区指针311(PBNR),现行工作区指针312(CBNR),有效工作区指针313(VBNR)和整体工作区指针314(GBNR)。为了实现保存环形工作区304的内容的功能,安排了工作区堆栈指针324(BSP)和位于主存贮器302中的工作区堆栈325。更进一步而言,设有指示“工作区用途模式”的工作区模式寄存器323(BMR)。图4中的虚线示范地说明区域寄存器和工作区堆栈指针指向的目标。
图5(a)和5(b)用于说明图4中的寄存器区的安排。如图5(a)所示,环形工作区304由m个工作区RB0、RB1、…RBm1构成,每个工作区由l个寄存器,即:R0、R1、R2、……Re1构成。这里,数351所指的RBx指出了任一需要的工作区,352指出工作区中的寄存器块。
如图5(b)所示,整体工作区集305由n个整体工作区GB0、GB1、GB2、……GBn1构成,每个工作区由k个寄存器R0′、R1′、R2′……R′k-1构成。其中,353所指的工作区GBy表示任一需要的工作区,数354表示位于整体工作区中的寄存器块。
作为第三个实施例的这个信息处理装置,其环形工作区304的工作区数量m和整体工作区集305中的工作区数量n可以在信息处理装置运行期间改变。即:有用于改变环形工作区304的工作区数量m和改变整体工作区集的工作区数量n的指令,例如:m可变为0、4、8,n可变为2、4、8和16。环形工作区304的工作区数大于1的情况称作“环形工作区模式”,而环形工作区304的工作区数量等于零且仅能使用整体工作区集的情况称为“整体工作区模式”。涉及环形工作区304的工作区数量和整体工作区集305的工作区数量时,信息处理装置的状态由工作区模式寄存器323给定。后面将要描述,有一类可以设置控制寄存器的指令,使用这些指令可以改变工作区模式,这样,工作区模式寄存器323发生变化,从而指示工作区模式改变的时刻。
在后面的描述中,将首先解释环形工作区模式的操作,然后解释整体工作区模式的操作。
图6是本发明第四个实施例的指令的寄存器部分的框图。这个信息处理装置的许多指令除了有如图6所示的操作码部分416以外,还有寄存器指示部分417。该寄存器指示部分417包括:区域寄存器部分418和寄存器位移部分419,区域寄存器部分用于指示含有指令所用的寄存器的任一个整体工作区,现行工作区或在先工作区,位移部分419指示位于工作区中的相对地址。在寄存器位移部分419中,其数值可为0到(l-1)。在某些指令中,所用的寄存器固定于整体工作区、现行工作区和在先工作区中之一。在这种情况下,区域寄存器部分418通常可从指令的指示部分中省掉。
考虑这样一种情况,即指令中寄存器位移部分419的内容是从0~(l-1)的整数值i,如果区域寄存器部分418指示整体工作区,则由整体工作区指针(图4)指示的工作区中的寄存器i被使用;如果区域寄存器部分418指示现行工作区,则由现行寄存器指针312所指示的工作区中的寄存器i被选用;如果区域寄存器部分418指示在先工作区,则由在先工作区指针311指示的工作区中的寄存器i被选用。
在环形工作区模式中,若环形工作区中寄存器的数量大于1,则工作区控制指针(如现行工作区指针)的值必须初始化。为此,需使用工作区状态装入指令BSL或控制寄存器装入指令MTCR。
图7给出图6中工作区状态控制指令的一种格式图。如图7所示,工作区状态装入指令421有一个操作数指示部分422。在使用它时,在存贮器中提供五个字段,它们分别是:423、424、425、426和427。将送入整体工作区指针314中的工作区号事先存在字段423中,将送入在先工作区指针311的工作区号存在字段424中,送入现行工作区指针312的工作区号位于字段425中,送入有效工作区指针313的内容放在字段426中,送入工作区栈指针324的位置值位于字段427中。字段序列的首位置由操作数指示部分422指示。当在此状态下,执行工作区状态装入指令时,则按照上述对应关系,字段422到427的值被作为工作区控制寄存器的值。当执行工作区状态存贮指令时,五个指针被存贮在由指令操作数指示部分422指示的内存位置中,其形式如图7中数值423、424、425、426和477所示。
图8是本发明中寄存器工作区保存恢复操作的详细说明图。
作为与子程序调用有关的指令,除了调用指令和返回指令,还有前移环形工作区指令和恢复环形工作区指令。当子程序被调用时,所传递的作为变量的信息被置于现行工作区的寄存器中,之后,称为保存指示向量(如图8数字429所指)的这一信息置于现行工作区439中的第0个寄存器440中,即由现行工作区指针312所指示的工作区。保存指示向量429是具有l位长度的信息,其中l表示每个工作区所含寄存器的数量。设i表示整数值0-(l-1),如果需要保持现行工作区439中443所指的第i个寄存器Ri的内容,则保存指示向量429中433所指的第i位bi的值假设为“1”;同样,如果其内容不需保留,则假设bi为零。数430所指的第0位bo总保持为“1”。当设置完现行工作区的第0个寄存器R0(440)中的保存指示向量而执行调用指令时,该指令的下一个地址被送入用于子程序引用的栈中,并开始执行指定的子程序的指令序列。
在子程序指令序列的起始处,首先执行前移环形工作区指令。当执行前移环形工作区指令时,图4所示的现行工作区指针312(CBNR)和在先工作区指针311(PBNR)的值前移,并且如必要的话,有效工作区指针313(VBNR)和工作区栈指针324(BSP)的值也发生变化。下面,将引用符号CBNR1、CNB1、VBNR1、BSP1和符号CBNR2、PBNR2、VBNR2和BSP2说明前移环形工作区指令的功能,第一组符号表示前移环形工作区指令执行前,四个指针各自的值,而第二组符号表示前移指令执行后,四个指针各自的值。在执行前移环形工作区指令过程中,首先,将表示指令执行前现行工作区的值CBNR1置入表示同条指令执行后在先工作区指针的值PBNR2中,然后现行工作区指针的值更新为值m(CBNR1+1,m)。这里,模(a,b)表示用整数b除整数a后所得的余数,m表示一个工作区内寄存器的数量。这样,如果保持CBNR1=VBNR1,即如果更新前的现行工作区指针值与更新后有效工作区指针值相等,则由更新后现行工作区指针的值CMNR2所指示的工作区中的寄存器之间,由包含于所指示工作区中第0个寄存器里的保存指示向量所指示的寄存器的内容被有选择地延迟保存在由工作区指针BSP1所指示的位置中。
下面,将参考图8进一步详细说明这个工作区保存结构。更新后,由现行工作区指针CBNR2所指示的工作区439中有1个寄存器;第0个寄存器R0是440,第1个寄存器R1是441,第2个寄存器R2是442,……,第(l-1)个寄存器Re1是444。在保存指示向量429中也有1位;第0位b0是430,第1位b1是431,第2位b3是432,……第(l-1)位bl-1是434。如果要保持第i个寄存器443(0≤i≤l-1)的内容,则要预先将保存指示向量的第i位bi433量“1”,如果该内容不需保留,则bi位置“0”。这个保存指示向量429被存贮在工作区439的第0个寄存器R0440中。如果更新前的现行工作区指针值CBNR1(即更新后在先工作区指针的值PBNR2)等于更新前的有效工作区指针值VBNR1,则将更新后的保存指示向量429从bl-1位434向b0位430的方向顺序扫描,该向量429存贮在由现行工作区指针值CBNR2所指示的新的现行工作区439的第0个寄存器R0440中。若bi位为“1”(0≤i≤l-1),则工作区栈指针(BSP)324的值前移一个寄存器,而且寄存器Ri的内容被存贮在由工作区堆栈325中的工作区栈指针的新值所指示的位置。若bi位为“0”,则工作区栈指针324不前移,也不执行寄存器Ri的存贮。当对保存指示向量429进行扫描而改变i为l-1,l-2,……2,1,及0,并且已经重复了所需要的寄存器保存操作时,工作区栈指针324的值是由前移环形工作区指令所更新的值BSP2。因为保存指示向量的第0位b0总是置为“1”,所以在更新后保存的工作区的寄存器R0的值存贮在由工作区栈指针所指示的位置中,即工作区栈325的最上端。
当这个工作区存贮操作结束时,根据更新前的VBNR1值,有效工作区指针313的新值VBNR2被置为VBNR2=mod(CBNR1+1,m)。
除非更新后的在先工作区指针值PBNR2等于更新前的有效工作区指针值VBNR4,否则不执行上述工作区存贮操作,而且工作区栈指针324和有效工作区指针313的值均不改变。
从上是前移环形工作区指令的功能。
从子程序返回时,根据需要,将待送回调用端的功能值置于现行工作区的寄存器中,然后执行恢复环形工作区指令,接着执行返回指令。当执行恢复环形工作区指令时,恢复现行工作区指针CBNR312和在先工作区指针PBNR311的值,并根据需要改变有效工作区指针VBNR313和工作区指针BSP324的值。下面,用符号CBNR3、PBNR3、VBNR3及BSP3和符号CBNR4、PBWP4、VBNR4及BSP4来说明恢复环形工作区指令的功能,前一组符号表示执行该指令前的四个指针的值,后一组符号表示执行该指令后的四个指针的值。
在执行恢复环形工作区指令的过程中,首先,将更新前的在先工作区指针311的值BPNR3置为现行工作区指针312的新值CBNR4。并更新在先工作区指针的值,以建立关系:PBNR4=mod(PBNR3l,m)。如果更新后的现行工作区指针的值CBNR4与更新前的有效工作区指针313的值VBNR3相同,则更新后的在先工作区指针值BBNR3所指示的工作区的内容,按照工作区堆栈325中的工作区栈指针所指示的信息有选择地被恢复。
这种工作区恢复结构将参考图8加以描述。首先,把由更新前的工作区栈指针324的值BSP3所指示的工作区堆栈325的最上端内容置入由更新前的在先工作区指针311的值PBNR4所指示的工作区中的第0个寄存器R0中,然后工作区指针324的值以一个寄存器的量进行恢复。在工作区堆栈325的最上端,保存指示向量在子程序调用时已被置入。因此,随着上述操作,保存指示向量429进入寄存器R0(440)中。随后,将保存指示向量的内容沿从b1位431向b8-1位434的方向依次扫描。如果bi位的值(1≤i≤l-1)433是“1”,则位于工作区堆栈325中工作区栈指针324的新值所指示的位置的数据被传送至寄存器Ri(443)中,并且以一个寄存器的量恢复工作区栈指针324的值。如果bi位的值是“0”,则不执行向寄存器Ri(443)的传送操作,并且也不恢复工作区栈指针324。当i从1、2、3、向(l-1)变化时,通过重复上述操作(l-1)次所得到的工作区栈指针324的值即为由恢复环形工作区指令更新前的BSP4值。之后,有效工作区指针313的值恢复一个单位。即:VBNR4=mod(VBNR3-1,m)。该值与更新后的在先工作区指针的值相同。
除非更新后的现行工作区指针值CBNR4与更新前有效工作区指针值VBNR3相同,否则不执行上述工作区恢复操作,并且工作区栈指针324的值和有效工作区指针313的值也不改变。
上面所介绍的是恢复环形工作区指令的功能。
当执行返回指令时,返回地址从子程序引用栈中压出,然后从返回地址所指示的位置开始执行指令。
在交换任务时,通常需要保存和恢复环形工作区的内容。为此,提供了工作区块存贮指令和工作区块装入指令,作为块传送指令。
当执行工作区块存贮指令时,通过与前移环形工作区指令的工作区保存操作相同的处理,从有效工作区指针VBNR所指示的工作区的下一个工作区到由现行工作区指针CBNR所指示的工作区之间的这些工作区的内容,都被存贮于工作区堆栈中。操作过程详述如下。
当执行工作区块存贮指令时,首先核查有效工作区指针313的值VBNR是否等于现行工作区指针312的值CBNR。如果它们不等,则把由值VBNR所指示的工作区的下一个工作区的内容(即由mod(VBNR+1,m)所指示工作区)存贮在工作区堆栈中,其操作过程与描述前移环形工作区指令时的工作区保存操作过程相同。这样,工作区栈指针324的值BSP前移,并且有效工作区指针313的值BSP前移至下一工作区。对于VBNR的新值,也要核查它与现行工作区指针的值CBNR是否相同。如果相等,则重复执行上述工作区保存操作。当现行工作区指针的值与有效工作区指针的值相等时,或开始时就它们就相同,则不执行工作区保存操作就结束执行工作区块存贮指令。
工作区块装入指令的功能是:把执行工作区块存贮指令时存贮的在先工作区和现行工作区的内容从各自的工作区中取出。执行该指令时,有效工作区指针与现行工作区指针具有相同的值。当执行工作区块装入指令过程中,所执行的工作区恢复操作与描述的工作区恢复指令的操作一样,其功能是首先恢复由现行工作区指针312所指示的工作区的内容,而后恢复由在先工作区指针311所指示的工作区的内容。结果,有效工作区指针的值与在先工作区指针的值相同。
作为改变工作区状态的指令,有控制寄存器装入指令MTCR和控制寄存器存贮指令MFCR,它们可以改变指示环形工作区或整体工作区状态的控制信息,并且也可被使用。由这两条指条,能够单独设置或单独访问现行工作区指针312、在先工作区指针311、有效工作区指针313、整体工作区指针314、工作区栈指针324和工作区模式寄存器323(参考图4)各自的值。当工作区模式寄存器323的内容发生变化时,环形工作区中的寄存器数量和整体工作区集中寄存器的数量也可改变。当环形工作区中的工作区数设置为0时,则确定了整体工作区模式,这样,所有工作区均能作为整体工作区使用。即,在整体工作区模式时,在另一种模式里作为环形工作区使用的工作区也能作为整体工作区使用。在整体工作区模式下执行指令时,其中的地址模式部分不能指示在先工作区或现行工作区。除此之外,在整体工作区模式下,不能使用前移环形工作区指令和恢复环形工作区指令。
图9是说明信息处理装置第四个实施例的基本组成部分的排列图。在该例中,指令处理器501中的寄存器块503由n个整体工作区GB0(510)、GB1(511)、……、GB(513)和n个环形工作区R0(520)、R1(521)、……、Rn-1(523)所构成。每个整体工作区(GB0、GB1、…GBn-1)由如图5(b)所示的K′个寄存器构成。如图5(a)所示,每个环形工作区(R0、R1、……、Rn-1)由m个工作区构成,而每个工作区包括1个寄存器。
在图9的实施例中,一个整体工作区和一个环形工作区分配给异步运行的程序之一。按照这种方式,可消除任务交换时用于寄存器块的保存和恢复的开销。
图10所示的例子是针对图4的实施例的,指令处理器在一个半导体芯片上制成。该例以这样的形式实现,其中,单半导体芯片包包:算术寄存器块610、寄存器存取机构620、ALU630、主存贮器存取机构640、指令译码器650和控制电路。
按照本实施例的这种方式,可被赋值的寄存器数目由区域寄存器的位数所确定,并且大于指令寄存器指示部分的位数。因此,既使当每条指令的寄存器指示部分较短时,也能使用大量的寄存器。这样,通过能使用大批量寄存器这一事实,可使寄存器块作为一个或多个栈加以利用。因此,既使在含有一个大容量寄存器块的情况下,无需保存和恢复寄存器,或通过仅保存并恢复少量区域寄存器,就能够执行子程序调用或任务交换,并且能够无开销的大量使用高速寄存器以实现高速处理。特别地,使用第三个实施例,在环形工作区模式下,除了当现行工作区指针前移超过有效工作区指令,并当在先工作区指针恢复到超出有效工作区指针时,就无需伴随子程序调用和返回而保存和恢复寄存器,因此,能够提高子程序引用的速度。此外,考虑仅使用少量寄存器的程序时,能够将不同的整体工作区分配给异步运行的各程序,并且能设计出仅有由给定方式分配的整体工作区的程序。因此,在这种情况下,可以避免程序转换时的寄存器位移,而且程序转换(如任务交换)的速度亦可提高,当子程序引用时,直到执行工作区被看作是下一个在先工作区的情况下,变量和函数值可以通过寄存器传送而不必进行复制,因此而提高子程序引用的速度。既使在环形工作区且需要保存和恢复的情况下,保存指示寄存器保存在环形工作区的每个工作区中,由此,待保存和待恢复的寄存器被限制为确实需要的一个。因此,提高了处理速度。
现有技术的困难是:当物理寄存器数量增加时,在子程序引用任务交换操作中所需的寄存器保存和恢复的开销也随之增加。相反,根据本实施例,寄存器数量的增加减少了保存和恢复的次数,因此,减少了开销。此外,使用整体工作区模式,本处理装置可在无保存和无恢复的条件下运行,使得可以增量地提供以高速交换的任务。
在第四个实施例中,当提供若干环形工作区时,甚至在使用环形工作区的情况下,随着任务的交换,可以没有寄存器的保存和恢复操作,从而实现了高速任务交换操作。
如上所述,根据本发明,每条指令所用的寄存器可在程序运行过程中,而不是在程序生成时确定。因此,在任何时刻,根据寄存器的先使用和该一时刻对寄存器的使用要求,可以对寄存器进行最佳分配。此外,能赋值的寄存器数目由区域寄存器的位数确定,而且区域寄存器的位数大于一条指令的寄存器指示部分的位数,因此,既使当每条指令的寄存器指示部分较短时,也能使用大量的寄存器。