降低额外开销的异常检测方法和装置的制作方法

文档序号:6430051阅读:125来源:国知局
专利名称:降低额外开销的异常检测方法和装置的制作方法
技术领域
本发明涉及计算机程序语言,尤其涉及一种虚拟机器语言的翻译和执行。
背景技术
计算机程序语言用于产生由可人工读取的源代码构成的应用程序,该源代码表示供计算机执行的指令。但是在计算机能够履行该指令之前,该源代码必须转化为计算机可读取的二进制机器代码。
例如C、C++或COBOL的程序设计语言通常使用一个编译程序来从该源代码产生汇编语言,然后把该汇编语言翻译成转换为机器代码的机器语言。因此,该源代码的最终翻译出现在执行时间之前。不同的计算机需要不同的机器语言,所以由例如C++写成的一个程序只能运行于编写该程序的具体的硬件平台上。
编译的程序语言被设计来以源代码产生应用程序,该源代码将运行于多个硬件平台上。JavaTM是一种编译的程序设计语言,通过在执行时间之前产生转换成称之为″字节码″或″虚拟机器语言″的一种中间语言的源代码,实现操作平台的独立性。在执行时间,一种虚拟机把字节码翻译成适合操作平台的机器代码。本质上,虚拟计算机不是一个物理结构,而是一个自含式的工作环境(由编译软件或处理器指令序列产生),通过选择存储在VM或CPU之内的对应的本机机器语言指令来编译用于该硬件平台的字节码。该本机指令被随即提供到硬件平台的CPU并且连续地执行。一个典型的虚拟机要求每一字节码的20-60的处理时间周期(取决于字节码的质量和复杂性),以便执行操作的一个FDD序列。为了编译每一个字节码,Java虚拟机执行一个操作的″取得、解码和发送″(FDD)序列操作。针对每个字节码指令,Java虚拟机(JVM)包含以本机中央处理单元(CPU)指令表示的一个对应于执行程序。该JVM使得CPU从存储器中取得或读出一个虚拟机指令,解码针对该字节码指令的该执行程序的CPU地址,并且由该CPU的传送控制发送到执行程序。该解释处理是一个很耗时的过程。
如在本发明同一个发明人的PCT专利申请WO9918484中公开的那样,在存储器和CPU之间添加一个预处理器(一个虚拟机编译器(VMI))将加速虚拟机指令的处理。VMI是一种硬件模块,通过产生本机CPU指令″运行时″来编译Java字节码。首先,一个VMI从存储读出(取得)一个字节码。随后该VMI查寻该取得的字节码的几个特性(解码)。由该VMI提取的特性来确定该字节码将被处理成本机指令的方式,以便发送到该CPU并且在该CPU中执行。因此,该VMI能够以硬件而不是软件执行每一个FDD。在该CPU执行一个指令的同时,该VMI取得下一个字节码并且将其处理成CPU指令。
在编译字节码的序列的同时,一个虚拟机可能遇到引起一个非法操作的字节码(或字节码序列),例如访问一个阵列的边界外部的指令。除非该随后的功能是异常相关的,例如ExceptionOccurred、ExceptionDescribe和ExceptionClear,否则这样一个非法操作的执行将引起一个异常出现,必须在随后功能能够被调用以前处理和清除该异常。在基于处理器的异常检验步骤中,直至一个异常检验确定由一个字节码调用的该操作是否将实际导致该非法操作的执行,一个异常则将是待决状态,因为调用非异常相关的功能的同时,一个异常待决可能导致料想不到的结果。但是在Java语言中,在执行异常检测的同时异常不被保持在一个待决的状态。相反,通过CPU指令的执行来直接检测异常条件。一旦检测到一个异常状态,则根据该异常类型产生一个异常目标,并且调用异常控制软件。
相对于VMI实施方案来说,用于异常检测的虚拟机方案不是最佳的。例如,为了解释该IALoad字节码,虚拟机产生指令来把一个阵列存取的索引与该阵列的大小比较,其操作能够导致超出边界条件。该VMI的反应好像该可能的超出边界的条件是一种条件转移,并且因此中止处理字节码一个实际的时间量,同时等待收到来自该CPU的指示该超出边界异常是否实际发生的一个异常检测结果。因此,这种异常控制解决方案要求一个实质量的额外开销(即在处理时间上的一个负担)。
其中需要利用虚拟机硬件加速器(例如虚拟机解释程序)处理虚拟机指令的一种方法,其降低为了执行异常发现和检测所需的处理时间。
发明概要本发明通过提供在处理虚拟机指令的同时而检测异常的系统和方法满足了上述需要,其通过避免需要从该处理器产生的一个异常检验的返回的等待而有利地最小化了对异常检测的处理延迟差错。
更具体地说,根据本发明的系统和方法,如果该字节码将导致一个非法操作,则一个虚拟机硬件加速器(例如VMI)通过处理和发送引起CPU产生一个中断的本机指令来确定一个字节码是否将投出一个异常。
简言之,处理虚拟机指令的本方法的一个示例的实施例包括取得一个字节码并且递增一个字节码计数器。该VMI把取得的字节码处理成为可由一个处理器(CPU)执行的本机指令(即该VMI″产生″本机指令的一个序列),并且如果由该字节码调用的本机指令的执行导致一个非法操作,则该VMI将伴随引起一个处理器中断的本机指令发送对应于该字节码的该本机指令(该″中断指令″)。大多数CPU的指令集包括专门的中断功能,某些中断功能无条件地中断例如TRAP、SYSCALL或BREAK指令(用于MIP处理器)。但是,当调用的无条件中断指令使得一个CPU中断而不考虑是否存在一个异常。因此,该VMI将不使用无条件中断指令来检测异常,因为这样做将需要该VMI在调用一个无条件中断指令以前等待从该CPU接收该异常条件。相反,该VMI将使用有条件的中断指令检测异常。
当存在异常条件时,在VMI产生能够引起一个中断的指令序列在,则建立该有条件的中断情形。例如通过产生一个算法对于导致一个处理器中断的异常标志执行计算,该VMI产生引起一个处理器中断的本机指令的序列。另外,该VMI从该CPU指令集中产生单个的有条件中断指令。或中断指令的类型或指令序列由该VMI″产生″作为发送到该CPU的本机指令的序列的一部分。
该CPU执行伴随该中断指令的由字节码调用的该本机指令。如果由该字节码调用的该本机指令的执行导致一个非法操作,则该中断指令将引起一个处理器中断。因此,其中不需要把一个源于CPU的异常检测传送到VMI。结果是,根据本发明的异常检测是很少耗时的。
当出现一个处理器中断时,该示例的系统能够被编程来处理该异常。原则上,对于能够导致异常的每一操作,该Java编程器都必须指示一个正确的响应(即提供代码来控制异常)。因此在该字节码级,构成一个方法的字节码的每一序列都必须包含字节码的额外序列以及指示异常控制字节码的一个序列的一个表格,以便针对每一想得到的异常状态来执行。
本发明最佳实施例的系统是一个用于处理字节码的设备,包括一个带有执行本机指令的本机指令集的处理器,以及一个存储字节码的指令存储器。一个VMI从该指令存储器取得字节码,把该字节码处理成本机CPU指令,并且如果该处理的虚拟机指令的执行导致一个非法操作,则伴随该引起一个处理器中断中断指令发送该字节码。在每一字节码被处理之后递增一个虚拟机指令计数器。另外,该VMI或从CPU指令集恢复该中断指令,或产生该中断指令。
本发明能够在使用虚拟机执行JavaTM字节码的系统中实施,例如由Sun Microsystems公司制作的JVM系统。但是本发明还可以使用其它JavaTM虚拟机实施,例如微软(Microsoft)虚拟机,并且还适用于执行其它翻译语言,例如Visual Basic、dBASE、BASIC和NET的系统。
本发明的其它目标、优点和新颖特征在随后描述中阐明,并且当进行下列审查时对于本领域的技术人员来说变得显见,或可以通过本发明的实践而得知。
附图描述当参照说明书考虑本发明时,结合该说明书并且形成说明书的一部分的附图示出了本发明,其中

图1是表示本发明环境的示例实施例的功能部件的方框图。
图2是表示根据本发明最佳实施例的一个方法的流程图。
最佳实施例的详细描述按照需要,在此公开本发明的详细实施例;但是,应该理解的是该公开的实施例仅是能以各种替换形式实现的本发明的示例。附图不是按比例作出;为了展示具体组成部分的细节而可以夸大或最小化某些特征。因此,在此公开的具体结构和功能细节不被理解为限制,而是仅作为权利要求的基础并且作为指教本专业技术人员多样地采用本发明示意性的基础。
现参考附图详细说明本发明的最佳实施例,附图中示出的最佳实施例以相同的数字表示相同的成分,图1是本发明环境的示例实施例的一个框图。该环境的基础部件是硬件平台100,它包括处理器110、预处理器120、以及指令存储器150,全部由系统总线160连接。预处理器120包括控制寄存器130和翻译机器140。硬件平台100通常包括中央处理单元(CPU),基本的外围设备和操作系统(OS)。本发明的处理器110是一个CPU,例如MIPS、ARM、Intel x86、PowerPC、或SPARC类型的微处理器,以及包容文件,被配置执行硬件特定的指令,下文称作本机指令。在本发明的最佳实施例中,翻译器140是一个JavaTM虚拟机(JVM),例如由Sun Microsystems公司制作的KVM。指令存储器150包含虚拟机指令,例如JavaTM字节码170。在本示例的实施例中的预处理器120是WO9918486中公开的虚拟机解释程序(VMI),构成来从指令存储器150取出一个虚拟机指令(例如,字节码170),并且把该虚拟机指令翻译成为本机CPU指令的序列。VMI 120是在总线160上的一个外围设备,起到一个存储器映射的外围设备的作用,其中一个预定范围的CPU地址被分配给该VMI 120。VMI 120管理一个独立虚拟计算机指令指示器180(该″字节码计数器″),指示在该指令存储器150中的当前(或随后)虚拟机指令。
图2是表示根据本发明最佳实施例的一个方法的流程图。详细参考图2,在步骤210中,VMI 120在步骤220以前递增字节码计数器BCC 180,从指令存储器150取出每一字节码170。在步骤230中,该VMI 120通过存取针对字节码170的特性而解码每一字节码170。在步骤240中,VMI120从包括取得的字节码170的翻译的翻译表140恢复本机指令的一个序列,被伴随一个取得的字节码170执行的检测异常条件的中断指令,以及必须被伴随该取得的字节码170执行的其它指令。当执行由该取得的字节码170调用的指令引起一个非法操作时,该中断指令通过请求一个处理器中断来检测异常条件。这些中断指令是由VMI 120产生的现有CPU指令(以CPU指令集115指定)或是由VMI 120产生的指令序列(算法)。
中断指令序列可以包括将引入处理器中断的本机指令的任何组合。根据一个最佳实施例,该VMI产生对于异常标志进行操作的计算指令,以便只要实际上出现异常就将引起一个算术溢出。例如,由VMI 120处理的字节码能够要求一个数组索引检验,其中该对应的本机指令将与该阵列边界索引比较(例如使用SLTU)。比较的结果(0=OK,1=故障)存储在CPU寄存中,并且成为异常标志。如果该比较失败,则这一VMI产生的中断指令序列将以如下方式通过左移位该异常标志31的位置并且把该异常标志加到其本身而建立一个中断SLTU $1,$bound,$idxSLL $1,$1,31ADD$1,$1,$1如果该移位异常标志的值是1,则获得最大的可能负数(在一个31位的计算机上)。把这一数加到本身的结果是得到一个引起算术溢出异常的数字。CPU中断条件的另一可能的产生机制是由零函数所除。
VMI 120(在步骤250中)伴随该中断指令发送对应于取得的字节码170的本机指令的序列(到CPU 110)。步骤260和270出现在该CPU之内。该CPU 110执行该本机指令序列和中断指令。如果步骤260中投入异常,则由中断指令引起一个处理器中断,并且在步骤270请求异常控制处理。例如,VMI 120能够被编程,以便伴随构成一个方法的每一取出的字节码序列发送异常控制字节码序列。如果没有异常出现,该VMI120将通过返回到步骤210而进入处理来自指令存储器150的下一个字节码170。
虽然参考在虚拟机解释程序加速器硬件中的实施方案描述了本发明,但是本领域的技术人员将理解到,结合各种其它字节码处理系统的实施方案是可能的。
据前所述,将理解到本发明提供了一种系统和方法,用于准确和高效检测在虚拟机指令的处理过程中的异常。还应该理解到,上述的描述仅涉及本发明的示例的实施例,并且在不背离由随后权利要求定义的本发明精神范围的条件下,可以作出许多改变。
权利要求
1.处理虚拟机指令的一种方法,包括步骤取出一个虚拟机指令;把该虚拟机指令处理成可由处理器执行的本机指令;如果该处理的本机指令的执行导致一个非法操作,则伴随该引起一个处理器中断的本机指令,把该处理的本机指令发送到处理器用于执行;如果该处理的本机指令的执行导致一个非法操作,则执行该处理的本机指令和该引起一个处理器中断的本机指令。
2.权利要求1的方法,其中 取出该虚拟机指令并且将其处理成可由处理器执行的本机指令的步骤是通过一个虚拟机解释程序(VMI)虚拟机硬件加速器实现的。
3.权利要求1的方法,进一步包括步骤如果该处理的本机指令的执行导致一个非法操作,则产生引起一个处理器中断的本机指令。
4.权利要求3的方法,其中的步骤如果该处理的本机指令的执行导致一个非法操作,则执行该处理的本机指令和该引起一个处理器中断的本机指令,进一步包括步骤如果该发送的本机指令的执行导致一个非法操作,则产生一个异常检测结果;和如果该处理的本机指令的执行导致一个非法操作,则通过对于其中引起一个处理器中断的异常检测结果执行一种算法来执行该引起一个处理器中断的本机指令。
5.用于处理虚拟机指令的一种装置(100),包括处理器(110),具有一个本机指令集并且构成来执行本机指令的;指令存储器(150),构成来存储虚拟机指令;和预处理器(120),配置来从该指令存储器取出虚拟机指令,把取出的虚拟机指令处理成为可由该处理器执行的本机指令,如果该处理的虚拟机指令的执行导致一个非法操作,附加该引起一个处理器中断的本机指令,并且把该处理的本机指令和该附加的本机指令发送到处理器以供执行。
6.权利要求5的装置(100),其中该预处理器(120)是一个虚拟机解释程序(VMI)虚拟机硬件加速器。
7.权利要求5的装置(100),其中该预处理器(120)被进一步构成用于如果该处理的本机指令的执行导致一个非法操作,则产生该引起一个处理器中断的本机指令。
8.权利要求7的装置(100),其中该处理器(110)被进一步构成执行该处理的本机指令和该附加的本机指令,以便如果该发送本机指令的执行导致一个非法操作,则产生一个异常标志,并且通过对于引起一个处理器中断的该异常标志执行一种算法而执行该附加的本机指令。
全文摘要
如果取得的字节码引起一个异常的发生,则通过把取得的字节码伴随引起一个处理器中断的指令发送来加快在虚拟机解释程序(VMI)加速器硬件(120)中的异常检测。处理器中断用于对该VMI(120)指示一个异常条件的存在,从而对于该VMI(120)来说,不需要等待把异常检测的结果从CPU(110)发送到VMI(120)。
文档编号G06F9/48GK1575451SQ02821079
公开日2005年2月2日 申请日期2002年10月10日 优先权日2001年10月25日
发明者O·L·斯泰部斯, M·M·林德维 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1