首页> 中国专利> 中间代码执行系统、中间代码执行方法与执行中间代码的计算机程序产品

中间代码执行系统、中间代码执行方法与执行中间代码的计算机程序产品

摘要

一个具有执行某个预定命令系统所包括的每个处理命令的处理模块(11、12)、并顺序解释与执行按照该命令系统写成的中间代码的中间代码执行系统(10)包括一个能从该中间代码中取出一个处理命令的命令获取部分(13),一个能判断那个处理命令是否对应于从该命令系统所包括的处理命令中选择的每个选定处理命令、并在该取出的处理命令对应于该选定处理命令时选择与执行对应于该选定处理命令的处理模块(11)的第一处理命令执行部分(15),和一个能认定该第一处理命令执行部分(15)中未被执行的一个处理命令类型、并选择与执行对应于那个处理命令的处理模块(12)的第二处理命令执行部分(17)。

著录项

  • 公开/公告号CN1419191A

    专利类型发明专利

  • 公开/公告日2003-05-21

    原文格式PDF

  • 申请/专利权人 亚普公司;

    申请/专利号CN02148185.7

  • 发明设计人 小林哲之;

    申请日2002-10-31

  • 分类号G06F9/45;

  • 代理机构72002 永新专利商标代理有限公司;

  • 代理人王敬波

  • 地址 日本东京

  • 入库时间 2023-12-17 14:44:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-12-15

    未缴年费专利权终止 IPC(主分类):G06F9/45 授权公告日:20071017 终止日期:20161031 申请日:20021031

    专利权的终止

  • 2007-10-17

    授权

    授权

  • 2004-10-20

    实质审查的生效

    实质审查的生效

  • 2003-05-21

    公开

    公开

说明书

                对相关申请的参照说明

本申请根据并要求2001年10月31日归档的现有日本专利申请号2001-334822的优先权,特此全部内容参考编入。

                     本发明的背景

1、本发明的领域

为了提供一个不依赖于某个计算机平台(譬如硬件或某个操作系统)的程序,已经提出了一种用某种软件技术或某种硬件技术在每个平台上构造一台虚拟机(VM)并在该虚拟机上执行某个源代码与某个目的代码之间的一个中间代码的方法。作为一个采用这种方法的程序语言,Java(R)采用了一种被称为一个类文件的中间代码形式。应当注意,该硬件或在该硬件基础上构造的虚拟机在下文可以被共同称为一个中间代码执行系统。

2、相关技术的说明

根据上述方法,由于单一的程序代码可以供给各种平台并被执行,所以不再需要准备只能在各自平台上执行的一个目的代码。结果,不仅该程序的分配可以简化,而且也提高了软件开发的效率。所以已经在各种计算机的平台上构造了虚拟机。而且近年来,也已经开始在各种内装一个处理器的电子设备(下文将称之为一个组装式设备)中构造基于一个微处理器的虚拟机。

这里,一个已知的虚拟机是某种解释器类型,它以软件的形式在该平台上构造,并顺序解释及执行某个类文件中所包括的字节代码命令。该解释器类型的虚拟机需要一个从该类文件中逐个取出字节代码命令并对它们的内容作出解释的过程。在现有技术中这一过程成为额外消耗,所以不能获得优良的性能。

因而,已经提出了一个JIT编译器(即时编译器)系统、一个AOT编译器(提前编译器)或类似系统,它们能将该类文件编译为每个硬件固有的某种本机代码并对其执行以便改进性能。而且,一直也在尝试硬件形式的虚拟机结构,如专门设计以便能够直接执行字节代码命令的某种Java芯片。

在上述的JIT或AOT编译器系统中,由于执行的是该处理器的本机代码,所以如果只注意命令执行的速度,那么它优于解释器程序系统。然而,该编译器系统需要一个对一种编译运行本身必不可少的工作区域,或者需要一个长度为该类文件4至10倍的储存该本机代码的区域,因而十分不利的是需要比该解释器系统更大量的存储器。这一问题在对硬件资源的限制比一个常规计算机更为严格的组装式设备中特别突出。而且,如果在指导执行该类文件后开始编译,那么该编译操作就成为额外消耗,也就不能得到足够好的性能。

此外,按照上述Java芯片,尽管该类文件可以不进行编译以高性能执行,但在开发这一专用芯片时需要大量的开发成本,所以芯片本身的成本上升也就不可避免。另外考虑到,根据技术的进步或市场需要,总要在语言规范中适当更新版本或消除错误,所以构造硬件形式的虚拟机也未必是希望的方法。特别是,因为既强烈要求降低成本又要在一个短周期内对规范进行版本更新,所以在该组装式设备的虚拟机中采用Java芯片并不现实。

如上所述,由于很难将编译器系统或Java芯片这样的虚拟机应用于该组装式设备或类似设备,所以一直希望在具有解释器系统的虚拟机中能改进这种类文件的运行性能,由于该解释器系统以能够不依赖于某个特定硬件设计来处理规范中某种改变的软件形式安装,故而能够执行该紧凑的类文件。

                  本发明的简单概要

本发明的一个目的是改进由某个解释器系统来执行某个中间代码的一个中间代码执行系统的性能。

为达到这个目的,根据本发明的第一方面,提供了一个用某个解释器来执行某个中间代码的系统,对以某种预定程序语言生成的一个源代码进行转换可以得到该中间代码,该系统包括:一个处理器;一个相对较快的第一存储器部分;一个相对较慢的第二存储器部分;一个第一解释器模块,它被储存在该第一存储器部分内并对应于该程序语言的某个命令集合中的一个子集;和一个第二解释器模块,它被储存在该第二存储器部分内并对应于该命令集合中的其余命令,其中该处理器用该第一解释器模块判断取自该中间代码的一个命令对应于哪一个子集,若该命令在该子集之中就执行该对应命令,若该命令不在该子集之中,则用该第二解释器认定该命令所对应的一个其余命令,并执行该命令。

根据本发明的第二方面,提供了一种中间代码执行方法,它在一个处理器内执行对以某种预定程序语言生成的源代码进行转换所得的中间代码,一个相对较快的第一存储器部分以及一个相对较慢的第二存储部分与该处理器相连,该方法包括:使该处理器利用对应于该程序语言的某个命令集合中一个子集的一个第一解释器模块判断取自该中间命令的一个命令对应于哪一个子集,若该对应命令在该子集之中就执行该对应命令;若该对应命令不在该子集之中,则使该处理器利用对应于该命令集合中其余命令的一个第二解释器模块认定该命令对应于哪一个其余命令中,并对其执行。

根据本发明的第三方面,提供了一个计算机程序产品,它在一个处理器内执行对以预定程序语言生成的一个源代码进行转换所得的一个中间代码,一个相对较快的第一存储器部分以及一个相对较慢的第二存储器部分与该处理器相连,其中一个对应于该程序语言的某个命令集合中一个子集的第一解释器模块被储存在该相对较快的存储器部分内,该第一解释器模块被用来判断取自该中间代码的一个命令对应于哪一个子集,若该相应命令在该子集之中就执行该相应命令,对应于该命令集合中其余命令的一个第二解释器模块被储存在一个相对较慢的第二存储器部分内,若该相应命令不在该子集之中,则该第二解释器模块被用来认定该命令对应于哪一个其余命令,并对其执行。

本发明的其他目的与优点将在随后的说明中阐述,其中部分可以通过该说明变得显而易见,或者可以通过本发明的实践来认识。本发明的目的与优点可以借助下文特别指出的手段与组合来实现与获取。

                    附图的简单说明

编入并构成该说明书之一部分的附图演示了本发明目前希望的实施例,它们与上面给出的总体说明以及下面将要给出的对希望实施例的详细说明一道可用于说明本发明的原理。

图1是表示应用于符合本发明的一个第一实施例的某种硬件结构的示意图;

图2是应用于符合本发明的该第一实施例的一个中间代码执行系统的功能方框图;

图3是流程图,它说明应用于根据本发明的该第一实施例的中间代码执行系统的某个运行过程;

图4是表示应用于根据本发明的第二实施例的中间代码执行系统的功能方框图;

图5是流程图,它表示应用于根据本发明的该第二实施例的中间代码执行系统的某个运行过程。

                   本发明的详细说明

先参看图1、图2与图3来说明根据本发明的第一实施例。

图1是表示根据本发明该第一实施例的一个中间代码执行系统1的硬件结构的示意图,图2是中间代码执行系统1的方框图。

如图1所示,中间代码执行系统1的硬件结构包括一个内含一个处理器2(譬如一个CPU或一个MPU)以及一个高速存储器3的芯片1和一个内含一个RAM 7以及ROM 8的存储器部分6。另外还可以具有一个输入设备、一个显示设备、一个外部接口或类似设备,但它们不直接与这个实施例的结构以及效果/优点相关,故而这里从略。

这里,处理器2与存储器部分6通过一条外部总线5相连,而处理器2与高速存储器3则通过一条比外部总线4具有更大总线宽度的内部总线4相连,而且高速存储器3能够以比存储器部分5内更快的传输速度向处理器2传输数据。尽管一个内部存储器或者一个高速缓冲存储器都可以被用作一个高速存储器3,但只对该内部存储器被用于这个实施例的情况加以说明。

在上述硬件配置中,形成图2所示功能方框图的中间代码执行系统1可以利用处理器2执行储存在存储器部分6内的各种软件来实现。中间代码执行系统1执行一个不依赖于某个平台的中间代码,在这个实施例中将说明对某个以Java语言生成的源代码进行编译所得的一个类文件的执行过程。现在说明每个功能块。

中间代码执行系统1包括一个处理命令获取部分13、一个第一处理命令执行部分15和一个第二处理命令执行部分17。

命令获取部分13从该类文件中顺序取出需要执行的下一个命令代码,该取出的命令代码被传送到第一处理命令执行部分15。

第一处理命令执行部分15包括一个选定处理命令判断部分14与若干处理模块11,它具有一个顺序解释并执行从该Java语言的一个命令系统内所包括的所有字节代码命令中选定的各字节代码命令子集的功能。更具体地讲,在选定处理命令判断部分14中,将处理命令获取部分13取出的一个命令代码与该子集中所包括的每个字节代码进行比较,若它们彼此相符,就执行对应于该字节代码的处理模块11。该处理模块11是按照该子集所包括的每个字节代码命令来提供的一个软件程序,它使处理器2根据每个字节代码命令的某个定义内容执行处理。如果在该子集所包括的各字节代码命令中没有相同的命令代码,那么该取出的命令代码就被传送到第二处理命令执行部分17。

第二处理命令执行部分17包括一个非选定命令认定部分16与一个处理模块12,并具有一种顺序解释并执行不包括在该子集中的各字节代码命令的功能。更具体地讲,在非选定处理命令认定部分16中,将该取出的命令代码与不包括在该子集中的每个字节代码命令进行比较。那么,如果它们彼此匹配,就执行对应于那个字节代码命令的处理模块12。如上所述,预定的处理是在对应于该取出的命令代码的处理模块11或12中由第一处理命令执行部分15与第二处理命令执行部分17联合执行的。

如上所述,在这个实施例中,字节代码命令被划分为在第一处理命令执行部分15中执行的命令与在第二处理命令执行部分17中执行的命令。这里,以Java(R)语言写成的字节代码命令被大致划分为精度低的基于四则运算的命令(iadd,isub,imul,idiv,...)或基于位操作的命令(ior,iand,ishl,...)、精度中等的基于存储器操作的命令(iload,istore,iaload,...)和精度高的Java特别命令(new,invokespecial,...)。而且通常还存在一种倾向,即精度低的命令在这种类文件中的出现频度高,而精度高的命令在这种类文件中的出现频度低。

所以,在这个实施例中,预先从所有字节代码命令中选出长度短且出现频度高的命令,并在第一处理命令执行部分15中执行这些选定的字节代码命令,而其余的字节代码命令则在第二处理命令执行部分17中执行。就是说,第一处理命令执行部分15具有对应于每个选定字节代码命令的处理模块11。而且,选定处理命令判断部分14将某个给定命令代码的一个操作代码与这些选定字节代码命令的操作代码进行逐一比较,如果它们彼此相符就执行对应的处理模块11。再者,第二处理命令执行部分17具有对应于每个其余字节代码的处理模块12。另外,非选定处理命令认定部分16将该给定命令代码的操作代码与其余字节代码命令的操作代码进行逐一比较,如果它们彼此相符就执行处理模块12。

然而,一个具有某个高频度的字节代码命令随中间代码执行系统10所安装的环境而变。譬如,它被安装在一部移动电话内的情形、它被安装在一个车辆路线指引系统内的情形以及它被安装在一个PDA内的情形都有不同的使用目的与使用状况,所以一个在某个给定环境中具有高频度的命令不一定在某个其他系统中具有高频度。因此,希望根据中间代码执行系统10所安装的每种环境来检查这些字节代码命令的出现频度,并根据某个检查结果来选择需要在第一处理命令执行部分15中执行的字节代码命令。

另外,在这个实施例中,构成具有上述结构的第一处理命令执行部分15的软件程序(第一解释器模块)的一个代码在该类文件被储存到高速存储器3内的情况下执行该类文件。譬如,中间代码执行系统10可以在执行该类文件之前将第一处理命令执行部分15的一个代码从存储器部分6复制到高速存储器3内。为了做到这一点,要调整需要在第一处理命令执行部分15中执行的选定字节代码命令的数量,要使构成第一处理命令执行部分15的软件程序长度能够被储存到高速存储器3内。

另一方面,构成第二命令执行部分17的软件程序(第二解释器模块)可以被保留储存在存储器部分6内。

现在参看图3来说明符合这个实施例的中间代码执行系统10的运行过程。这里,中间代码执行系统10包括处理命令获取部分13、内含选定处理命令判断部分14与处理模块11的第一处理命令执行部分15和内含非选定处理命令认定部分16与处理模块12的第二处理命令执行部分17,而且它们都是由处理器2通过执行储存在存储器部分6内的一系列软件程序来实现的。

譬如,中间代码执行系统10从一个图中未画的信息输入方接收一个Java应用类文件,并将该接收到的类文件储存到存储器部分6的RAM7内(S1)。然后,中间代码执行系统10执行该软件程序,并通过下面将要提到的一系列操作来进一步执行该类文件。在这一时刻,构成第一处理命令执行部分15的软件程序(第一解释器模块)已经预先被保留储存在高速存储器3内。下述的操作也适用于符合该第一实施例的中间代码执行方法。

处理器2首先通过执行该软件程序来构成处理命令获取部分13,并从该类文件中取出一个命令代码(S2)。

随后,执行储存在高速存储器3内的、构成第一处理命令执行部分15的软件程序(第一解释器模块),判断在S2中取出的命令代码可以被认定为哪一个选定字节代码命令(S3),如果能够判断就执行对应于该命令代码的处理模块11(S4)。更具体地讲,这里执行的处理是,在第一处理命令执行部分15的选定处理命令判断部分14中将取出的命令代码的操作代码与该选定字节代码命令的操作代码逐一加以比较,若它们彼此相符就执行对应的处理模块11。

如果确定在S3中不能进行判断,就是说,在选定处理命令判断部分14中认定该取出的命令代码的操作代码不与该选定字节代码命令的任何操作代码相符,那么就执行构成第二处理命令执行部分17的软件程序(第二解释器模块),认定该命令代码所对应的一个其余字节代码命令(S5),并执行对应于该认定命令代码的处理模块12(S6)。更具体地讲,这里执行的处理是,在第二处理命令执行部分17的非选定处理命令认定部分16中将该给定命令代码的操作代码与其余字节代码的操作代码逐一进行比较,如果它们彼此相符就执行对应的处理模块12。

此后,对该类文件所包含的下一个命令代码执行类似的步骤,并重复这些步骤来执行该类文件。

根据上述操作,从所有字节代码命令中选定的字节代码命令是通过构成一个以参考字符L1标记的内环处理过程来执行的,而其余字节代码命令则是通过构成一个以参考字符L2标记的外环处理过程来执行的。

如上所述,在这个实施例中,首先从所有代码命令中预先选出长度短且出现频度高的字节代码命令,在对应于这些选定字节代码命令的第一处理命令执行部分15中解释并执行这些代码命令,然后,未被执行的命令代码则在第二处理命令执行部分17中被解释并执行。所以,具有高出现频度的字节代码命令被优先解释与执行。此外,由于构成第一处理命令执行部分15的软件程序(第一解释器模块)被储存在高速存储器3内,因而第一处理命令执行部分15能够以某个高速度来解释与执行具有高出现频度的字节代码命令。所以,根据这个实施例,具有高出现频度的字节代码命令能够以某个高速度被优先执行。另一方面,由于具有低出现频度的字节代码命令由第二处理命令执行部分17解释与执行,所以执行这些字节代码命令的速度无法提高。但是,第一处理命令执行部分15以某个高速度优先执行具有高出现频度的字节代码命令的效率非常高,考虑执行该类文件的整个处理过程,那么中间代码执行系统10的性能可以得到改进。

此外,在这个实施例中,构成第一处理命令执行部分15的软件程序(第一解释器模块)可以被配置得能最优执行该选定的命令代码,中间代码执行系统10的性能也会因此而进一步改进。

举例来说,构成第一处理命令执行部分15的软件程序(第一解释器模块)与构成第二处理命令执行部分17的软件程序(第二解释器模块)均可以用某种高级语言(如C或C++)生成,但前者也可以采用汇编语言配置成最优。

而且,在选定处理命令判断部分14中将取出的命令代码的操作代码与选定字节代码命令的操作代码比较并判断出它们是否彼此相符时,更希望以较高频度字节代码命令在先的顺序进行比较。这也适用于非选定处理命令认定部分16。

考虑到用于执行该中间代码的计算机程序产品,这个实施例如下。

这就是,提供能够在某个处理器中执行某个中间代码的一个计算机程序产品,对以某种预定语言生成的一个源代码进行转换可获得该中间代码,高速存储器3与存储器部分6与该处理器相连,其中对应于该程序语言的某个命令集合中一个子集的第一解释器模块被储存在高速存储器3内,该第一解释器模块被用于判断取自该中间代码的一个命令是否对应于该子集的任何命令,如果这个命令在该子集之中就执行该对应命令,对应于该命令集合中其余命令的第二解释器模块被储存在存储器部分6内,如果该子集内没有对应命令,那么该第二解释器模块就被用于认定那个命令对应于哪一个其余命令,并对其执行。在这种情况下,假定该程序语言的该命令集合中的该子集已经预先定义。

现在参看图4与图5来说明符合本发明的一个第二实施例。

图4是符合本发明该第二实施例的中间代码执行系统20的一个功能方框图。在图4中,相同的参照数码表示与该第一实施例中相同的构成部分。

符合该第二实施例的中间代码执行系统20的基本结构类似于符合该第一实施例的系统,但与之不同的是,提供了一个第一选定处理命令执行部分24与一个第二选定处理命令执行部分26来代替该第一实施例中的第一处理命令执行部分15。现在主要说明这一差别。

第一选定处理命令执行部分24包括一个第一选定处理命令判断部分23与处理模块21,而且具有一种顺序解释并执行一个从所有字节代码命令中选择的第一字节代码命令子集的功能。

第二选定处理命令执行部分26包括一个第二选定处理命令判断部分25与处理模块22,而且具有一种顺序解释并执行一个从不包含该第一子集的其余字节代码命令中选择的第二字节代码命令子集的功能。

处理模块21是一个使某个处理器2按照属于该第一子集的每个字节代码命令的某个定义内容来执行处理的软件程序,而处理模块22是一个使某个处理器2按照属于该第二子集的每个字节代码命令的某个定义内容来执行处理的软件程序。

此外,第一选定处理命令执行部分24与第二选定处理命令执行部分26的各具体功能也基本类似于该第一实施例中处理命令执行部分15的功能。如果某个取出的命令代码与属于该第一子集或该第二子集的某个字节代码命令相同,那么这些部分就执行那个字节代码命令。

这里,该第一子集包括某个类文件中具有最高出现频度的一个字节代码命令,该第二子集包括某个类文件中具有次高出现频度的一个字节代码命令。而且在这个实施例中,构成第一选定处理命令执行部分24的软件程序的一个代码被储存在一个高速存储器3内。尽管在有足够的自由存储器容量时希望将构成第二选定处理命令执行部分26的一个代码储存在高速存储器3内,但如果高速存储器3没有足够的自由存储器容量,也可以将它储存在某个存储器部分6内。

现在参看图5来说明中间代码执行系统20的运行过程。

像该第一实施例一样,中间代码执行系统10首先从一个图中未画的信息输入方接收该Java应用类文件,将该接收到的类文件储存在存储器部分6中的RAM 7内(S11),并按照下述步骤借助储存在高速存储器3内的、构成第一选定处理命令执行部分24的软件程序来执行该类文件。

首先像该第一实施例一样从该类文件中取出一个命令代码(S12)。

然后,执行储存在高速存储器3内的、构成第一选定处理命令执行部分24的软件程序,判断该取出的命令代码能否被认定为该第一子集中的任何代码命令(S13),如果能够认定就执行对应于那个命令代码的处理模块21(S14)。

如果确定在S13中无法认定,就执行构成第二选定处理命令执行部分17的软件程序,判断该命令代码能否被认定为该第二子集中的任何代码命令(S15),如果能够认定就执行对应于那个命令代码的处理模块22(S16)。

再者,如果确定在S15中无法认定,就执行构成第二处理命令执行部分17的软件程序,认定那个命令代码所对应的一个其余代码命令(S17),并执行对应于该认定命令代码的处理模块12(S18)。

对该类文件所包括的下一个命令代码执行类似的步骤,重复这些步骤就可以执行该类文件。

根据用上述操作来执行该类文件的这个实施例,该类文件中具有最高出现频度的字节代码命令可以像该第一实施例一样以某个高速度被优先执行,而该类文件中具有次高出现频度的字节代码命令则以比其他任何字节代码命令都高的优先级执行。

另外,在上述操作中,尽管构成第一选定处理命令执行部分24的软件程序代码被预先储存在高速存储器3内,但在执行该类文件时高速存储器3内的某个自由存储器容量可以被删除,而且如果有足够的自由存储器容量,构成第二选定处理命令执行部分26的软件程序代码也可以同样被储存在高速存储器3内。

尽管上面已经说明了符合该第一与第二实施例的中间代码执行系统,但本发明并不限于这些实施例,可以很自然地作出各种改进/修改而不偏离本发明的范围。

譬如,尽管在前述实施例中用该内部存储器作为高速存储器3,但本发明并不限于此,高速存储器3也可以是一个高速缓冲存储器。此外,本发明也不限于图1所示的硬件配置示例,任何硬件配置只要能同时提供一个相对较快的存储器与一个相对较慢的存储器,就可以采用那个硬件配置。举例来说,芯片1可以是一个ASIC或一个微控制器,而且一个包括一组芯片1或处理器2的结构就能满足要求。

如果在该第一实施例中采用高速缓冲存储器作为高速存储器3,那么开始执行该类文件时可以将构成该第一处理命令执行部分15的软件程序储存在存储器部分6内。在这种情况下,由于该代码被一个预定的高速缓冲存储器装置储存到作为高速存储器3的该高速缓冲存储器内,所以就像前述实施例一样,中间代码执行系统10的性能得到改善。在该第二实施例中使用该高速缓冲存储器也是如此。

此外,尽管在前述每个实施例中都已经描述了将Java类文件作为该中间代码来执行的情况,但本发明并不限于此。

而且,构成该中间代码执行系统的软件程序可以预先储存在存储器部分6内,或者它可以根据需要从该中间代码执行系统的外部提供。在这种情况下,从该中间代码执行系统外部接收该软件程序的结构并不限于通过某个网络从一个服务器下载,该软件也可以从一个存储器媒体(如一个CD-ROM或一个便携式存储器)提供。

再者,采用使至少一部分处理模块被确定为硬件逻辑的结构可以进一步改善性能。譬如,将该第一实施例中第一处理命令执行部分15的处理模块11确定为硬件逻辑,就能够以某个更快的速度来执行具有某个高频度的字节代码命令。在这种情况下,可以通过调整需要选择的字节代码命令数量来将实现该硬件逻辑所需的门电路数量限制在一个允许范围之内。

那些熟悉技术的人员很容易发现其他优点与修改。所以本发明就其更广的方面讲并不限于这里显示及描述的个别细节与代表性实施例。因此,可以作出各种修改而不偏离该所附权利要求以及它们的等价条款所定义的总体发明概念的精神或范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号