在程序控制流中实现改变的装置和方法

文档序号:6477426阅读:214来源:国知局
专利名称:在程序控制流中实现改变的装置和方法
技术领域
本发明涉及数据处理系统,具体地说,涉及具有实现执行数据处理指令的软件解释程序的系统。
背景技术
Java编程语言是一种面向对象的高级编程语言,它是由Sun微系统有限公司开发的,其设计得足够便携,从而能在从小型个人计算机一直到超级计算机的广泛范围内运行。用Java(和其它语言)写的计算机程序可以被编译成虚拟机指令用于由Java虚拟机(JVM)执行。一般地,Java虚拟机是译码并执行虚拟机指令的解释程序(interpreter)。
用于Java虚拟机的虚拟机指令是字节码,这意味着它们包含一个或者更多的字节。字节码储存在被称为“类文件”的特殊文件格式中。除了字节码,类文件还包括符号表以及其它辅助信息。
像Java字节码一样在一个或更多类文件中实现的计算机程序是独立的平台。该计算机程序可以在能够运行Java虚拟机的工具的任意计算机上不做更改地运行。Java虚拟机是“一般”计算机的软件仿真器,它是允许用于Java虚拟机的计算机程序成为独立平台的一个主要因素。
Java虚拟机通常作为软件解释程序实现。在运行过程中,常规的解释程序一次一条指令地译码并执行被解释程序的虚拟机指令。另一方面,编译器在执行前将虚拟机指令转化为本地机器指令,这样在执行过程中就不会对虚拟机指令进行译码。因为每次遇到指令时,常规解释程序都会在执行之前对每条指令重复地译码,由于被编译程序的本地机指令可以在本地机或者计算机系统上直接执行,因此典型地,被解释程序的执行要比被编译程序慢得多。
由于为了译码和执行被解释程序而必须执行软件解释程序,软件解释程序会消耗资源(例如存储器)这些资源不能再被解释程序使用。这与被编译程序形成了对比,被编译程序会像本机指令一样执行,这样它们会在目标计算机上直接地被执行,因此通常只需要比被解释程序更少的资源。
因此,需要有新的技术来加快被注释的计算机程序的执行速度。此外,需要提供在考虑它们需要的资源时有效的解释程序。
由于Java语言的独立平台和普遍存在的性质以及Java虚拟机工具的发展,许多嵌入式器件正在变得可使用Java。许多低成本嵌入式系统希望像JVM一样实现Java处理功能,以避免专用Java处理器或者硬件加速器(例如分离的协同处理器)的硬件开销。实现JVM和执行Java程序的一个简单方法就是通过使用软件解释程序。
解释程序完成了被注释指令流的指令取数,译码,执行等标准功能,在此意义上,实现了一个处理器的软件版本。典型地,该解释程序是作为重复进行取数,译码和执行步骤的程序循环而实现的。
当Java指令(字节码)被取出时,解释程序维持一个虚拟程序计数器(Java PC),并且由带有子句的大的选择语句(情况语句)根据字节码的每个二进制编码完成对每个被注释Java指令的译码。每个子句内的代码进行由字节码定义的实际操作。
由于字节码必须被取出并被译码,因此存在与处理每个字节码相关的开销。由于许多Java指令(字节码)只进行简单操作,因此与序列的取数和译码部分相关的开销会在整个执行时间中占据很大的百分比。
由于Java环境支持多线程执行的概念,解释程序循环的附加功能是支持用于确定何时发生线程(任务)转换的计数器。
在Java虚拟机的某些实现中,线程转换的确定是基于已执行的Java字节码的数量的。通过保持每次解释程序循环执行时都会修改的计数器的值,并且把它与预设值进行比较,解释程序也可以实现线程转换逻辑。维持计数器并确定何时线程转换也制造了大量的开销。这个开销大大限制了软件解释程序的操作效率。
附图简要说明

图1方框图类型中说明的是一个示例性的数据处理系统;图2中说明的是一个已知编码序列,示出了Java程序执行时的执行流;图3中说明的是与图2的Java程序的执行相关联的一个已知解释程序开销图;图4中说明根据本发明的当程序执行时的Java程序及相关仿真编码表;图5中说明的是根据本发明、需要比组大小所能允许的还要多的仿真编码的Java程序执行的一个例子;图6说明根据本发明的一个示例仿真编码表,示出了指令时隙(instruction slot)的一种配置;图7中说明根据本发明的用于在Java程序中转换指令流的Java解释程序指令解释;图8方框图说明根据本发明的用于实现程序执行的图1的系统的数据处理器的一部分;和图9中说明根据本发明的一个示例仿真编码表,示出了指令时隙的另一种配置。
具体实施例方式
本发明是通过举例而不是通过对附图中的限定而说明的,其中相似的引用表示类似的部件。在下面的说明中,将阐述诸如具体字或字节长度等许多的具体细节,以提供对本发明的透彻理解。但是,很显然,对于本领域技术人员,没有这样的具体细节也可以实现本发明。其它的例子中,为了不以不必要的细节混淆本发明,以方框图示出了电路。在很大程度上,忽略了关于定时考虑和其它类似的细节,因为这样的细节对于获得本发明的完全理解是不必要的,并且是在相关领域的普通技术人员的技巧之内。
术语“总线”被用来指可用于传输一个或更多不同类型信息(诸如数据,地址,控制,或状态)的多个信号或者导线。术语“声明”和“否定”将在表示信号、状态位、或者类似装置分别进入其逻辑真或逻辑假状态的反映时使用。如果逻辑真状态是逻辑电平1,那么逻辑非状态就是逻辑电平0。如果逻辑真状态是逻辑电平0,那么逻辑非状态就是逻辑电平1。在下面的说明和附图中,通过预附加‘0x’,对于某些数值使用了十六进制的概念。因此,数值0xff就代表十进制数值255。
图1是说明数据处理系统10的一个实施例的方框图,它包括处理器12,协同处理器14,协同处理器16,存储器18,其它模块20和外部总线接口22,他们都通过总线28进行双向连接。本发明的其它实施例也可具有仅仅一个协同处理器14,两个协同处理器14和16或者甚至更多的协同处理器(未示出)。外部总线接口22通过集成电路终端35与外部总线26双向相连。存储器24双向连接到外部总线26。处理器12可通过集成电路终端31有选择地把外部连接到数据处理系统10。协同处理器14可通过集成电路终端32有选择地把外部连接到数据处理系统10。存储器18可通过集成电路终端33有选择地把外部连接到数据处理系统10。其它模块20可通过集成电路终端34有选择地把外部连接到数据处理系统10。处理器12通过协同处理器接口30双向连接到协同处理器14和协同处理器16。数据处理系统10中处理器12的具体操作将在下面Java代码执行的上下文中引用。
参看图2和图3,给出了Java程序中指令的一个常规执行流的例子。通常,已知解释程序的一个重要操作问题是软件花费了大量的时间用于在每个仿真的Java字节码之间改变指令流并且执行解释程序开销程序。图2中说明的指令执行步骤将突出显示出这一点。注意到,图2中从步骤1到7的每个标识步骤都需要在软件程序中流的改变。在现有技术中,必须重复地跳转到诸如解释程序开销54的一个或者更多软件程序,这将制造额外的解释程序开销。图3示出了与图2相同的软件程序,但更清楚地示出了需要完成解释程序开销程序的时间量和软件之间的关系,这可以与需要为诸如a,f和c的不同功能执行仿真编码的更少时间量和软件作比较。解释程序开销软件包括取数、译码和发送Java字节码。发送是实现跳转到与被仿真的Java字节码对应的仿真码的步骤。注意到,解释程序开销还包括实现计数器功能的软件以确定线程转换何时应该发生。注意到,解释程序开销54软件还包括必须保持更新的用于Java虚拟机的虚拟程序计数器。注意到,图2和图3示出了Java程序字节码和处理器(例如图1的处理器12)需要的仿真码表,以实际地执行Java程序所需要的字节码。注意到,对于每个由处理器12执行的Java字节码,需要完成Java字节码仿真的代码需要两个部分。第一部分是实际完成功能(a,f,c)的代码,第二部分是将仿真码的执行返回到解释程序开销54软件的软件程序(routine)。参看图3,注意,粗线示出的解释程序开销软件可能是需要执行Java字节码的软件中很重要的一部分。结果,我在这里讲述能够有效减少执行仿真码解释程序开销部分所需软件和时间量的一种系统和方法。应该从图2注意到,需要执行每个功能(a,f,c)的仿真码在大小上可以并且典型地显著不同,而且经常是代码量相对较少。相反地,作为与需要执行特殊Java字节码的仿真码的比较,解释程序开销54软件的代码量却很巨大。
现在参看图4,根据本发明的一个实施例,这里示出了可由图1的处理器12执行的Java程序60及其相应的仿真码表62的一个例子。注意到,在图4说明的本发明的程序执行实施例中,每个Java字节码都在仿真码表62中具有一个相应的组。从一般意义上来说,每组都与程序的预设操作码相关,正如本发明没有限定仅仅使用于Java程序一样。通过在仿真码表中以所示的步骤1,2和3的顺序进行搜索,可以进行对字节码a,f,c...的字节码执行。在图4中示出的本发明的特殊实施例中,由Java字节码十六进制值诸如0x0,0x1,等等限定的仿真码表62中的每个代码组,包含16条处理器12指令。数字16被选择作为能为大部分Java字节码仿真提供足够指令时隙并且不会出现过多的未用时隙的一个数值。有些Java字节码可使用少于16条的处理器12指令来执行,有些则多于16条。结果,应该很好地认识到,本发明的其它实施例可以对每组使用任意数量的处理器12指令时隙。组数量也可以根据更高级语言所需要的字节码的数量而不同。还注意到,解释程序开销软件不再是仿真码所需的必须跳转到的单独程序。如图2所示的现有技术要求的解释程序开销已经由在每个组中使用的标识着“开销+JAVASW”的代码块代替了。注意,“开销+JAVASW”代码块现在分布遍及处理器12执行的仿真码。注意,与图2中的现有技术相比较,图4中示出的软件流和仿真码表的流步骤的改变更少些。应该认识到,流的改变是控制改变的一种形式,胜于完成一个跳转指令,在实现控制改变的地方可以进行的操作可能是另一个操作,诸如在用户和超级用户模式之间转换。本发明提供的流步骤改变的减少,节省了大量的软件开销。图2和图4中示出的箭头需要额外的软件以执行,注意到这一点很重要。注意,虽然在图4示出的实施例中,每个Java字节码都分配了16条指令时隙,但是一些特殊的Java字节码不需要所有16条指令时隙。另一方面,一些Java字节码在仿真码中需要多于16条的指令时隙。这样的例子将在图5中讨论。因此,图4说明了可以由图1的处理器12执行的仿真码表62。在示出的类型中,仿真码表62具有256个相同大小的组,这些组是分配用于每个Java字节码的仿真的,正如0x0到0xFF的十六进制地址标识。这样,当处理器12执行Java程序时,图4中示出的仿真码表提供了更连续的流。这个更连续的流减少了软件开销量,此软件开销是现有技术所需的大量程序流的改变所需要的(参见图2)。
现在参看图5,图5说明了本发明可如何用于需要比在仿真码表63中的组大小更多仿真码的Java字节码。图5中说明的是仿真码表63。对于图5中示出的说明,假设仿真码的初始部分开始于如步骤1箭头表示的地址0x67。步骤2表明,已经使用了所有16条指令时隙都,而相应的字节码还需要额外的仿真码。因此,步骤2表明,仿真软件流必须移动到新的并且可用的代码块以完成Java字节码的执行。在图5中示出的例子中,步骤2说明了在仿真码跳转的类型中程序执行的转移,其中仿真码是跳转到越过原始仿真码表62末端的位置,在该位置将会定位代码块以完成Java字节码的执行。这个额外的代码可以是任意大小,并且只受到系统资源的限制。额外的代码可以存储在系统中具有可用资源的任意位置,该可用资源允许储存要被执行的剩余Java字节码仿真代码。因此应该认识到,被选择的跳转地址可以在预设的地址范围(0x0到0xFF)内,该地址范围小于数据处理系统内的总地址范围,或者,被选择的跳转地址可以在预设的用于存储在具有可用资源的任意地方的地址范围之外。步骤3示出,一旦用于特殊Java字节码的仿真码完成,仿真码可以跳转回位于“开销+JAVASW”软件开始位置的256组之中的任意组。这样,在仿真码表63末尾处需要用来完成Java字节码仿真的额外的软件就不需要包括“开销+JAVASW”软件了。在仿真码表63中Java字节码不能只使用一组被仿真的情况下,这个操作特点允许重新使用至少一组“开销+JAVASW”软件部分。
参看图6,选择分配给每组的指令时隙的数量是一个很重要的问题。这个选择通常涉及了仿真码表总体大小和超出组大小的溢出Java字节码数量之间的一个折衷。虽然图6中示出的实施例每组使用了16条指令时隙,但是本发明的其它实施例可以将组的大小优化成不同数量的指令时隙。注意到,具有固定的组大小可以大大地简化用于指向每个被仿真字节码的仿真码的地址计算。这对于每条指令,对于处理器12,这可能是大量的计算时间,并且能够对数据处理系统10的性能造成显著地影响。
仍然参看图6,注意到,可以使用一个或者更多硬件加速器,作为数据处理系统10的部件(参见图1,协同处理器14,16),以改进数据处理系统10的性能。应该可以很好地认识到,协同处理器恰恰是可能会使用的硬件加速器的一种类型。参看图6,以两种方法示出了IADD(整数加)程序,以说明仿真码表是如何基于硬件加速器的存在与否而变化的。整数加功能只是作为例子而选择的。图6的“IADD”程序的左边是软件程序80,其可以在不存在硬件加速器的情况下由处理器12执行。右边的代码82说明了可以在存在硬件加速器(例如协同处理器14)的情况下由处理器12执行程序。注意到,硬件加速器可用于完成Java字节码执行的重要部分。比较图6中代码的左块和右块,很显然地看到,当使用硬件加速器时,不再需要先前不得不由处理器12执行的大量的存取指令。正如将在有关图8的进一步细节中说明的,在本发明的一个类型中提供了用户可决定的控制信号,该信号允许系统用户选择预设代码大小组合的第一仿真表结构或者不同的预设代码大小组合的第二仿真表结构。注意,硬件加速器和处理器必须具有某种类型的接口或者信号交换机制,以进行通信和协调Java字节码的执行。参看图1,处理器12和协同处理器14,16通过协同处理器接口30进行通信。注意到,处理器12与协同处理器14,16之间的通信可能会由于如下事实而变得复杂Java程序中可能会发生线程转换。Java程序执行期间,软件的至少一部分必须周期性地检查确定是否有必要转换任务并允许另一个任务占用处理器12执行时间的一部分。在Java中软件任务之间的这个转换或者改变被称为线程转换。参看图1,常规上,处理器12根据是否发生线程转换来发信号通知协同处理器14,16是否有有效Java字节码要执行。这条信号是JAVASW指令执行的一部分;并且,由于除非处理器12也执行字节码,协同处理器是不会执行Java字节码的,因此这条信号是有条件的,即基于这样的事实没有进行线程转换;并且,当进行线程转换时,应该被正常执行的Java字节码将保持不被执行状态,直到当前线程被重新启动。注意到,协同处理器接口30还可包括监听或者广播信号以允许处理器12和协同处理器14,16在由其它处理器操作着的软件流中具有可见性。对于可用本发明的关于任意一个已知处理器到协同处理器接口的具体信息,可以参考美国专利5,983,338,在此通过引用将其结合进来。
注意到,图6的仿真码表72包括256个可寻址的组(0x0到0xff),其中每个组都分配有一个相应的Java字节码。希望对仿真码定位以在仿真码表中实现Java线程转换。由于每组中有固定数量的指令时隙,所以在可用于线程转换软件的仿真码表72中没有未被分配的存储器定位。因此,有必要在一个或更多组中使用未被使用的指令时隙来对线程转换代码进行定位。在本发明的一个实施例中,线程转换软件程序定位在第一组中,相当于Java字节码零(0)。作为例子,由于需要4条指令时隙的这一组被分配了空操作(NOP)指令,剩余了12条未被使用的指令时隙来存储软件程序的至少一部分用于进行线程转换。注意到,如果线程转换程序不在已分配时隙的范围内,可以进行一个跳转,到越过仿真码表72末尾的位置,如图5中的针对仿真码表63所说明的一样。本发明的其它实施例可以定位软件,用于在仿真码表72中的其它位置进行线程转换。注意到,使用仿真码表72中的这第一组对线程转换软件进行定位,允许硬件用于实现JAVASW指令(在这里要进一步说明),其中JAVASW指令将要在处理器12中以使用硬件的更直接的方式来实现。
图7进一步说明了先前在图4和图5的仿真表中引用的“JAVASW”指令的细节。在本发明的一个实施例中,JAVASW指令是一个由处理器12执行的指令(参见图1)。为了进一步清楚了解JAVASW指令的执行,图8中进一步提供了图1中处理器12的详细部分。图8中说明的是指令寄存器116。指令译码104有一个输入,用于通过连接到指令寄存器116输出的导线117,从指令寄存器116接收处理器12指令,和一个连接到控制电路105输入的输出。控制电路105也在输入118处接收要被执行的Java字节码。控制电路105的输出连接到多路复用(Mux)和混合器106的控制输入,连到具有程序计数器108的寄存器107和其它寄存器109的输入/输出终端,连接到算术逻辑单元(ALU)110的输入/输出终端,以及通过导线130连接到地址选择逻辑111的输入/输出终端。递增电路112具有一个输出,通过导线120连接到地址选择逻辑1 1的第一输入。跳转地址121连接到地址选择逻辑111的第二输入。例外地址(Exception Address)122连接到地址选择逻辑111的第三输入,分支地址123连接到地址选择逻辑111的第四输入。多路复用和混合器106的输出连接到地址选择逻辑111的第五输入,用于提供JAVASW程序计数器地址124。导线133连接到递增电路112的输入,连接到地址选择逻辑111的输出,和连接到用于向控制电路105和从控制电路105通信的程序计数器108的输入/输出终端。跳转地址121,例外地址122和分支地址123均由控制电路105提供。多路复用和混合器106具有用于接收常数0x8100的输入,具有等于R4<<1 101的值(寄存器109的寄存器R4中左移一位的值)的输入,具有等于R4<<5102(寄存器109的寄存器R4中左移五位的值)的值的输入,表外入口点103,和用于接收程序计数器值+2(PC+2)的输入。控制电路105具有用于通过一条或更多条导线134接收转换线程门限值的附加的输入。
参看图7,在“伪C”代码的类型中说明了JAVASW指令的一个实施例的操作。在一个实施例中,JAVASW引起了到字节码仿真序列的一个跳转。方程92说明了此字节码仿真序列的地址的计算方法。方程92的括号中包括的部分表示了JAVASW指令执行期间载入寄存器107的程序计数器108(PC)的跳转地址。这个值是图8中的多路复用和混合器106通过导线124提供给地址选择逻辑111的。方程92的值“PC+2”是程序计数器108在经过递增电路112的递增之后的程序计数器值。此递增过程作为处理器12执行流水线中的固有步骤而发生,并因此很方便作为基础地址值。在本发明的其它实施例中,将改为使用一个非递增的程序计数器值。之后,递增加的程序值将与值0xffffe000进行逻辑与操作。这个布尔操作具有使(PC+2)的值的低13位为0的效果。结果地址指向仿真码表72中的第一字节码指令组的第一指令时隙(参见图6)。注意到,在本发明的某些实施例中,不要求逻辑与操作。实际上,值PC+2的低13位也可以直接舍去。如果指针值没有舍去,它将与存储在寄存器R4(寄存器109中的一个)中的字节码值进行逻辑或操作,根据组大小移动一定的数量。所述操作将把新程序计数器地址有效地指引到仿真码表72内的正确位置,以使程序计数器寄存器现在能够为将要由处理器12仿真的Java字节码指向正确指令组的开始位置。组成指针值的另一个方法是将PC+2的高18位与储存在寄存器R4中的Java字节码值连接起来,之后给结果添上5bit的0以组成一个32位的地址。注意到,跳转地址可以由不同的方式组成。但是,不管用于组成跳转地址的是如何不同的技术及其组合,结果总是指向与当前Java字节码对应的仿真码表72(参见图6)内的正确指令组起始的地址。注意到,如果没有发生线程转换,方程92将用于计算跳转地址。注意到,如果语句91为真,则不发生线程转换。语句91判断是否越过了转换计算(SWCOUNT)门限(数据处理系统实现程序任务改变的点),以确定另一个Java线程的改变是否应该发生。因此,语句91需要对一个值(诸如计算值)与预设值(转换计算门限值)进行比较确定。如果语句91为真,有第一结果,如果语句91不为真,则有第二结果。但是,如果语句91不为真的话,那么“else”语句93将引出用于计算储存在程序计数器108中的跳转地址的方程94。注意到,方程94中的与操作是与上述方程92中的相同的与操作。但是,方程94的或操作用于指引到仿真码表的包含线程转换软件的部分。再次注意到,如果在方程94中用舍去操作代替与操作的话,那么舍去操作的结果将与线程转换软件的偏移量(常数0x8)联系或者合并起来。之后,语句95表示转换计算值(SWCOUNT)递减的Java指令。应该很容易看出来,本发明的其它实施例也可以使用递增计数器而不是递减计数器。或者可以以某种其它的方式来记住线程转换,诸如通过在转换发生之前设定了一定时间的一个定时器。虽然图7中说明的实施例以非常具体的方法选择了跳转地址,但是本发明的其它实施例也可使用其它的方程来实现方程92和94以及语句93。虽然所述的本发明的说明的实施例使用了由方程92和94限定的跳转到字节码仿真序列的具体地址,但是本发明的其它实施例也可以使用修改形式的方程92和94,跳转到所希望的地址。虽然图7中说明的本发明的实施例记述了用于跳转到字节码仿真序列的处理器12的指令,但是本发明的其它实施例也可以使用这种类型的指令,针对多种不同的目的,跳转到多个跳转目的地址中的一个。因此,本发明并不限定于跳转到Java字节码仿真序列,而是也适用于其它类型的跳转。此外,语句91和93可以是选择多个可能跳转目的地址中的一个的任意类型的不同条件。应该进一步认识到,语句95是可选的,可以不在某些实施例中使用。
图7中说明的指令格式90也可以叫做操作码。在优选的类型中,指令格式90存于指令寄存器116之中,由图8的指令译码104电路译码,从而提供给控制电路105以在处理器12中执行JAVASW指令。
注意,JAVASW指令期间进行的跳转操作是始终发生的。跳转并不是可选的或者有条件的,而是总是发生,跳转到多个跳转目的地址中的一个。
注意,R4<<5表示预设值(在本例中是字节码值)在载入寄存器R4之前被左移5位。在图7中说明的本发明的实施例中,每条指令都是16位长度,因此占用2字节的存储。注意到,左移5位相当于乘32字节或者16条指令。参看图6,字节码值移动5或者乘32的原因是为了允许偏移到仿真码表72中从而指到仿真码表72内的正确字节码指令组。因此,值R4<<5用于移动跳转目的地址指针到仿真码表72内的正确组的开始位置。
应该意识到,本发明的其它实施例可以包括使用多于1条指令的JAVASW指令功能的工具。注意,本发明的一个实施例中,JAVASW指令合并了控制计数器的功能和在单独指令中实现表跳转的功能。这在图7中作为语句95示出,该语句95是完成方程92或94中一个之后又完成的。注意到,对于JAVASW指令,指令流的改变是始终发生的,而并非是用于条件分支指令的情况。注意到,响应JAVASW指令进行的跳转是到两个地址中的一个的,其中这两个地址都在预设表之内(参见图4中的仿真码表62)。此外,在本发明的一个实施例中,JAVASW指令进行了表跳转操作,其中表跳转的目的地是Java字节码值和计数器值的一个函数。在本发明的一个实施例中,计数器值可以是转换计算值(图7中的SWCOUNT),其被Java解释程序用来决定应该何时发生线程转换。在一个实施例中,寄存器109的一个可以用作计数器。其它的实施例也可以在处理器12中使用硬件和硬件或者软件和硬件的组合,以实现这个转换计数器功能。对于JAVASW指令的一个实施例,计数器值有条件地使得跳转的正常入口点被返回仿真表的预设固定入口点(图7和8中如0x8说明的)所重叠(override)。其它实施例可以使用不同于0x8的地址。如图7中所说明的,正常表入口点对应由方程92的执行所决定的PC值的地址计算,并且在没有线程转换要发生的时候发生。当线程转换要发生时,没有使用对应方程92的正常表入口点。实际上,当现在应该进行线程转换时,它被方程94定义的入口点所重叠,并且不再输入用于应该被正常仿真的Java字节码的仿真码。
JAVASW指令提供了这样一条指令当使用无重叠表入口点时,该指令通过握手信号(协同处理器接口30的一部分)有条件地向硬件加速器(例如协同处理器14,16)发出信号。这个握手信号允许硬件加速器决定处理器12是否在执行图7中的方程92(在这种情况中,字节码由处理器12和硬件加速器进行仿真),或者决定处理器12是否通过执行图7中的方程94来进行线程转换(在这种情况中,硬件加速器必须不进行当前字节码的仿真)。
此外,JAVASW指令可以提供允许图6中所示正常表结构被重叠小组字节码值的调度机制。例如,通常对于已执行的、需要多于16条指令时隙的并因此会溢出分配的组大小的Java字节码,可以提供使得JAVASW指令跳转到仿真码表之外位置的硬件,以执行Java字节码需要的代码。注意到,仅需要实现这样一个调度机制的硬件是对将溢出它们所分配的指令时隙的所选组的Java字节码进行译码的少量译码逻辑,下面介绍的在图8中的多路复用和混合器106的附加输入103连同相应的控制一起允许这个所选Java字节码的仿真码跳转到仿真码表外的位置。注意,这个译码电路可以在处理器12的控制电路105内实现,如下面结合图8的介绍。
如前所述,图8说明了图1的处理器12的相应部分的仅仅一个实施例。重申一下,用于仿真Java字节码的指令由指令译码电路104从指令寄存器116中接收。指令译码电路104对仿真指令进行译码并把译码结果提供给控制电路105。控制电路105把控制信号提供给处理器12中的其它单元以执行这些指令。如前所示,控制电路105是通过导线130双向连接到寄存器107,算术逻辑单元(ALU)110和地址选择逻辑111的。控制电路105把控制信号提供给多路复用和混合器106。本发明的其它实施例可以使用多路复用和混合器106的更多、更少、或者不同的输入。多路复用和混合器106的输出是提供作为地址选择逻辑111输入的JAVASW程序计数器地址124。地址选择逻辑111接收分支地址123,例外地址122,和跳转地址121作为输入。此外,地址选择逻辑111的输出可以由递增电路112进行递增,之后通过导线120作为地址选择逻辑111的输入反馈进来。在本发明说明的实施例中,递增电路112把地址增加了2字节,这2字节相当于一个指令的长度。本发明的其它实施例可以使用递增电路112把地址增加不同的数量。由地址选择逻辑111输出的地址通过导线133提供给程序计数器108和控制电路105。控制电路105用于产生跳转地址121、例外地址122、和分支地址123。控制电路105通过一条或更多条导线134接收一个或更多的转换线程门限信号。如上所述,寄存器107通过导线130、131、和132双向连接到算术逻辑单元110。
在所说明的类型中,多路复用和混合器106的不同输入给数据处理系统10提供了大量的灵活性。多路复用和混合器106的输入113提供了来自程序计数器108的当前PC+2值,该值被用于与多路复用和混合器106的其它输入组合来形成多种JAVASW程序计数器地址124值。例如,提供常数0x8的输入100可与输入113一起被使用,使JAVASW程序计数器地址指向线程转换软件程序76,该程序位于图6中的仿真码表72的第一组。新程序计数器地址将在需要线程转换软件的时候使用。多路复用和混合器106的输入101指出寄存器R4的内容被左移一个数位,这个移动相当于乘2。当仿真码表72中的组包含一个单独的指令来储存越过实现相应字节码的仿真码所在的仿真码表72尾部的跳转地址的时候,输入101用于形成新程序计数器地址。下面图9的介绍中将进一步说明这个功能。多路复用和混合器106的输入102指出寄存器R4的内容左移5,这相当于乘32。将左移后的值R4<<5与输入113一起用来在仿真码表72的组中进行选择。这样的移动是一个调整,用于当处理器12完成前一个Java字节码的执行并且转移到下一个Java字节码的执行时产生新程序计数器地址。多路复用和混合器106的输入103允许对于较小组的字节码值,正常表结构被重叠。换句话说,可以通过输入到多路复用和混合器106的表外入口点103信号使得仿真码表72外的地址成为预设的值。注意到,本发明的其它实施例可以具有其它多路复用和混合器106的输入,用于基于数据处理系统10的需要创建不同的新程序计数器地址。注意到,多路复用和混合器106的输入可用于改变仿真码表72内组的大小。虽然所说明的实施例只示出了一个标准组大小,但是本发明的其它实施例可以使用不同的组大小或者由多路复用和混合器106的输入限定的多个组大小。这在确定需要仿真诸如Java的高级语言的不同字节码的代码长度方面,给数据处理器10的用户提供了很大的灵活性。
现在参看图9,图9说明了针对字节码值的大组允许仿真码表被压缩的调度机制。如较早前根据图5的讨论,对于某些字节码值,相应的仿真码可能需要比组大小所能提供的更多的指令时隙。如果仿真码保持在连续序列中,有关图5中步骤2和3的开销有可能被简化。注意到,对于Java字节码编码来说,在0xc0到0xff的范围内有很大百分比的字节码需要比16时隙的组大小更多的指令时隙,希望用图9中的替换的仿真码表83。于是,图9示出了作为包含256个入口(每字节码一组)的储存设备的仿真码表83,其中,前192个入口(入口的3/4)具有16指令时隙的组大小,(对应字节码0x0到0xbf的入口),后64个入口(入口的1/4)具有1指令时隙的组大小。通过以这种方式构成表,字节码0x0到0xbf的入口可根据图5和6的前述而被利用,此时字节码0x0到0xbf的入口包含一个跳转到用于相应字节码的实际仿真码的跳转指令。这个结构允许表在大小上被压缩,并且这些更复杂字节码的仿真码可以保持连续,而不是像图5中所做的那样被分成起始部分和结束部分。调度机制通过去除对图5中步骤2和3的操作,简化了代码并且减少了开销。实际上,引入替换的步骤2,该步骤将直接跳转到用于范围0xc0到0xff的Java字节码的入口仿真程序。往回参看图8,通过使用多路复用和混合器106的输入101以及PC+2输入113和控制电路105完成这个表压缩。通过衡量(scaling)R4<<1,完成了对表83的后64个入口的适当指引。对应多路复用和混合器106的输入113的值PC+2被控制电路105修改,作为对控制电路105的输入118上0xc0到0xff范围内的字节码进行译码的响应,以指向图9的起始入口88。之后,将这个修改的值与R4<<1合并,以在多路复用和混合器106中选择适当的表入口点。控制电路105可以通过使用在输入118接收的Java字节码,进一步实现一个用户可决定的控制信号。该控制信号选择预设组大小的第一仿真表结构或者预设组大小的第二仿真表结构,并且提供了是通过类似图5的储存设备还是类似图9的储存设备进行操作来的灵活性。
根据本发明,尽管图9中说明的实施例示出字节码0xc0到0xff的特殊段作为已压缩码入口的字节码,可以选择其它的字节码组,或者可以为已压缩的表入口选择不同数量的字节码。
至此,应该很明显地看到,这里提供了一种数据处理指令,该指令对有关解释程序循环的开销进行了合并和最小化。可以将一种形式的指令储存在集成电路芯片内的或者与集成电路芯片独立且分离的存储媒介中。该指令的硬件支持允许对用于实现解释程序功能的存储器的优化。结果,显著地减少了执行时间类型中的开销、所需的硬件资源量和所需的解释程序软件量。本发明合并了对计数器的控制和对表跳转的实现,其中总是发生流的改变。JAVASW指令实现了把表跳转的目的地作为字节码值和计数器值的一个函数,计数器值有条件地使得表中正常计算的入口点被预设的固定入口点所重叠。当没有进行线程转换的时候,JAVASW指令也通过交换信号有条件地向硬件加速器发出信号。在说明的实施例中,提供了针对小组字节码值允许正常存储结构被重叠的调度机制。同时也提供了针对大组字节码值允许存储表被压缩的调度机制。此外,存储表可配制成支持对应简单和复杂的字节码的多组大小(例如2,8,16字节等等)。在这样的分情况处理过程中,操作码(字节码)得到了译码,代码基于组大小被有选择地分开。
在前述的说明中,已经参考具体实施例描述了本发明。但是,本领域普通技术人员应该认识到,在不背离如所附权利要求阐明的本发明的范围的条件下,可以做出不同的修改和变更。因此,本说明书和附图应该被理解为说明性的,而非限定性的,并且所有这样的修改都将落入本发明的范围之中。技术人员应该认识到,附图中的部分是为了简单明了而示例的,没有必要进行详述。例如,图中某些部分的尺寸相对于其它部分可能是被放大的,这是为了帮助更好地理解本发明的实施例。
上面已经介绍了相对具体实施例的好处、其它优点、以及对问题的解决。但是,好处、优点、问题的解决,以及可以带来任何好处、优点、或者出现的或变得更显著的解决的元素被不会被解释为任何或所有权利要求元素的关键的、需要的、或者重要的特点或要素。正如在此所使用的,术语“包括”,“包含”或者它的其它任何变种,涵盖非排它性的包括,这样包括一系列要素的处理,方法,项目,或者装置,它们不仅包括这些要素,还可包括没有明确列出的或者这样的处理,方法,项目,或者装置所固有的其它要素。
权利要求
1.一种在数据处理系统中的程序执行方法,该系统包括取出位于第一地址的第一条指令的装置;和用所述数据处理系统执行所述第一条指令的装置,该方法包括执行所述的第一条指令;基于一个值选择跳转地址,如果所述值与预设值的比较有第一结果,则为所述跳转地址提供第二地址,如果所述值与预设值的比较有第二结果,则为所述跳转地址提供第三地址,其中所述第二地址和所述第三地址都不与所述第一地址相邻;和通过改变程序执行方向到所述跳转地址,始终在所述程序执行中实现控制的改变,以此响应执行所述第一指令。
2.根据权利要求1的方法,其中所述第一结果是所述值大于所述预设值的比较判断,所述第二结果是所述值小于或等于所述预设值的比较判断。
3.根据权利要求1的方法,进一步包括通过在程序执行期间保留具有递增的地址值的程序计数器,舍去所述地址值的预设数量的几个低比特位,并且组合偏移值与一结果以创建所述跳转地址,从而产生所述跳转地址。
4.根据权利要求1的方法,进一步包括提供具有预设地址范围的存储设备,用于存储将要被执行的装置所执行的处理指令,所述处理指令排列成组,每组都与程序的预设操作码相关。
5.根据权利要求4的方法,进一步包括以预设数量的指令时隙各分段组成存储设备,预设数量的每段都专用于所述指令的存储。
6.根据权利要求4的方法,进一步包括将所述处理指令的执行从所述存储设备的一个段指引到所述预设地址范围外的一个地址,随后将程序执行的方向改变回所述存储设备的另外一个段的预设部分。
7.一种数据处理系统,其包括存储器,用来存储多个程序指令;通过数据总线连接到所述存储器的处理器,用于从所述存储器中取出所述程序指令,并且有选择地执行所述多个程序指令;和存储设备,用于存储将要被所述处理器执行的多个处理指令,所述多个处理指令被安排在多组中,其中每组都与所述多个程序指令中预设的一个相关;所述处理器在预设地址执行预设处理指令,并基于一个数值选择跳转地址,如果所述值与预设值的比较具有第一结果,则为所述跳转地址提供第一地址,如果所述值与预设值的比较具有第二结果,则为所述跳转地址提供第二地址,其中所述第一地址和所述第二地址都不与所述第一地址相邻,所述预设处理指令的执行始终在程序执行中实现控制的改变。
8.根据权利要求7的数据处理系统,其中所述处理器进一步包括指令寄存器,用于接收所述程序指令;连接到所述指令寄存器的指令译码器,用于将所述程序指令译码成具体的操作码值;连接到所述指令译码器的控制电路,用于提供控制信号作为对所述具体操作码值的响应;连接到所述控制电路的地址产生电路,用于接收所述控制信号并创建所述跳转地址;连接到所述地址产生电路的寄存器,用于存储操作数作为对所述控制电路的响应;和连接到所述地址产生电路和所述控制电路的算术逻辑单元,所述算术逻辑单元处理由寄存器存储的所述操作数。
9.根据权利要求8的数据处理系统,其中所述控制电路进一步包括用户可决定的控制信号,该控制信号选择预设组大小的第一结构或者预设组大小的第二结构。
全文摘要
本发明公开了一种数据处理器,通过将表跳转的任务与由诸如计数器或者定时器的运行值控制的线程或任务转换进行合并,可以执行指令(JAVASW)以实现有效解释程序的功能。指令的执行始终需要进行流的改变。在一种类型中,指令可以导致向硬件加速器发送信号以完成指令执行。此外,通过使用分离存储包含与具体字节码相关的仿真码的存储表,可以针对大量已识别字节码被压缩。进一步地,存储表的相同部分的使用可以连同不同字节码的执行一起发生。尽管是在Java字节码的上下文中讨论,但是指令适用于任何编程语言和处理器结构。
文档编号G06F9/318GK1531680SQ01822555
公开日2004年9月22日 申请日期2001年12月18日 优先权日2001年2月9日
发明者威廉C·莫耶, 威廉C 莫耶 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1