CN1108560C - 用于存储与多种编程语言相关的执行数据的方法和装置 - Google Patents
用于存储与多种编程语言相关的执行数据的方法和装置 Download PDFInfo
- Publication number
- CN1108560C CN1108560C CN98124313A CN98124313A CN1108560C CN 1108560 C CN1108560 C CN 1108560C CN 98124313 A CN98124313 A CN 98124313A CN 98124313 A CN98124313 A CN 98124313A CN 1108560 C CN1108560 C CN 1108560C
- Authority
- CN
- China
- Prior art keywords
- function
- frame
- program language
- execution stack
- java
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 230000002159 abnormal effect Effects 0.000 title 1
- 230000006870 function Effects 0.000 claims abstract description 230
- 238000000034 method Methods 0.000 claims abstract description 99
- 230000004044 response Effects 0.000 claims description 2
- 230000000644 propagated effect Effects 0.000 abstract description 2
- 238000006243 chemical reaction Methods 0.000 abstract 1
- 230000008569 process Effects 0.000 description 21
- 230000008901 benefit Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 4
- 230000005856 abnormality Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004140 cleaning Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- TZBJAXGYGSIUHQ-XUXIUFHCSA-N Asp-Leu-Leu-Ser Chemical compound OC(=O)C[C@H](N)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CC(C)C)C(=O)N[C@@H](CO)C(O)=O TZBJAXGYGSIUHQ-XUXIUFHCSA-N 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
Abstract
提供一种用于实现存储有以多种程序语言写的各函数的帧的执行堆栈的系统和方法。以不同程序语言写的各函数的帧,在同一执行堆栈上可被交叉。在执行堆栈上的数据块通过存储的指向前一帧的堆栈指针和帧指针,可被用于移动帧的执行堆栈。相应地,异常可以被传送,如必要可被转换,通过在执行堆栈中以不同程序语言写的帧。
Description
技术领域
本发明涉及实现一执行堆栈,特别是,本发明涉及实现具有可以以多种编程语言编写的函数的执行堆栈,例如,用于JavaTM虚拟机的执行堆栈。
背景技术
JavaTM程序语言是由Palo Alto,California的Sun Microsystem开发的一种面向对象的高级程序语言并被设计成可在从小型个人计算机到超级机的计算机范围的一宽范围执行的便携形式。以Java写的计算机程序(和其它语言)可被编译成由Java虚拟机执行的虚拟机指令。通常,Java虚拟机是译码并执行虚拟机指令的解释。
Java虚拟机的虚拟机指令是包括一个或多个字节的字节代码。字节代码以被称之为“类文件”的特殊文件格式存储,该类文件包含有用于一个类方法的字节代码。除用于类方法的字节代码之外,该类文件包括有符号表,以及其它辅助信息。
作为一个或多个类文件中的Java字节代码所实现的计算机程序是平台独立的。在能够实现Java虚拟机运行的任何计算机上,计算机程序可以被执行、可以不被修改。Java虚拟机是“通用类”计算机的软件仿真程序,它是允许Java虚拟机的计算机程序为平台独立的主要因素。
Java虚拟机通常被实现作为软件解释器。普通解释器在执行期间一次译码和执行一所解释程序的一个指令的虚拟机指令。另一方面,编译器在执行前将源代码译码成本机指令,以便在执行期间不进行译码。由于普通解释器在它每次重复执行所遇到的指令之前,去译码每个指令,解释程序的执行十分典型地要比编译程序慢些,因为编译程序的本机指令能被在本机或不必译码的计算机系统上执行。
典型地,Java虚拟机将以程序语言而不是Java程序语言(例如,C++程序语言)编写。因此,Java程序的执行会包括以多种程序语言编写的执行函数。另外,字节代码本身也可调用不是以Java程序语言编写的函数(例如,用于输入/输出的系统函数)。因此,用于执行Java程序的共同要求是以多种程序语言编写的函数的执行。这就会希望具有用于存储以多种程序语言编写的函数的堆栈。另外,它的益处是允许通过这些函数传播异常,必要时,以将该异常转换成适当格式。
Java虚拟机允许Java程序动态装载和执行本机方法,这里,本机方法是以不是Java程序语言的一种语言实现的。本机方法经常需要资源去执行,使得每次本机方法被调用时,资源被分配和去分配。然而,每次资源分配和去分配会消耗时间,以及资源的连续分配和去分配其结果是明显降低了解释程序的效率。因此,这会希望能提供更高效的资源分配和去分配技术。
发明内容
相应地,就需要一种实现执行堆栈的技术,该执行堆栈能够保持以各种不同程序语言实现的函数的函数启动,以及特别是允许通过这些函数传播异常并相应启动。另外,也需要提供高效解释器,使得资源分配和去分配更有效以增加执行速度。
通常,本发明的实施例提供了用于实现执行堆栈的革新的系统和方法,该执行堆栈存储以多种程序语言编写的函数的帧。以多种程序语言编写的函数的帧,利用项目帧(或数据块)被存储在相同的执行堆栈上,该项目帧存储指向在一个函数的执行堆栈上的前一个帧的指针,该函数是用以相同程序语言编写的函数。该项目帧允许以其它程序语言编写的函数的执行堆栈横向“环绕”帧,和异常可以通过执行堆栈传播以通过适当的异常处理器处理,即使以不同的程序语言已编编写函数和异常格式不同时。另外资源可以被分配在以一种程序语言编写的函数上(例如,该Java程序语言),使得该资源对于随后的其它程序语言编写的函数(例如,本机的)都是可利用的。然后,该资源在当调用函数结束时被去分配,从而增加了资源分配和去分配的效率。本发明的若干实施例将在以下描述。
在一实施例中,提供一种实现执行堆栈的计算机实现的方法,该执行堆栈存储以多种程序语言编写的函数的帧。以第一程序语言编写的函数的第一帧可被存储在该执行堆栈上。当第一函数调用以第二程序语言编写的第二函数时,在第二函数的第二帧之前,数据块可被存储在该执行堆栈上。数据块包括至少一个指针,该指针指向以第一种程序语言编写的在执行堆栈上的原先帧。在最佳实施例中,数据块存储堆栈指针和指向执行堆栈上前一帧的帧指针,这里堆栈指针和帧指针已被存储在本机存储器中(例如,线程局部存储器)。
在另一实施例中,提供一种实现执行堆栈的计算机实现的方法,该执行堆栈存储以多种程序语言编写的函数的帧。以第一程序语言编写的函数的第一帧可被存储在该执行堆栈上。当第一函数调用以第二程序语言编写的第二函数时,指向执行堆栈上的第一帧的至少一个指针可被存储在本机存储器中(例如,线程本机存储器)。至少一个指针可以是堆栈指针和帧指针。接着,当以第一程序语言编写的第三函数被调用时,在第三函数的第三帧之前,数据块可被存储在该执行堆栈上。该数据块可以存储指向存储在局部存储器中的执行堆栈上的第一帧的至少一指针,使得该数据块提供在执行堆栈上环绕该第二帧的方式。在最佳实施例中,第一程序语言是Java程序语言。
在另一实施例中,提供有用于实现执行堆栈的由计算机可读介质存储的数据结构。对于以第一程序语言编写的第一函数,第一帧被存储在该执行堆栈上,对于以第二程序语言编写的第二函数,第二帧被存储在该执行堆栈上。在执行堆栈的第二帧上面的执行堆栈上,存储的数据块包括指向执行堆栈上的第一帧的至少一个指针。在最佳实施例中,该数据块存储指向第一帧的一堆栈指针和一帧指针。
附图说明
随着以下结合附图的详细描述,本发明的其它特点和优点将变得容易理解。
图1示出可用于执行本发明实施例软件的计算机系统的一例;
图2示出图1计算机系统的系统方框图;
图3示出如何执行Java源代码程序;
图4示出实现Java运行时系统的各单元;
图5示出存储在执行堆栈的各函数的帧;
图6示出实现执行堆栈的高级处理过程,执行堆栈存储有以多种程序语言编写的函数的帧;
图7示出存储有以Java程序语言和其它程序语言编写的各函数的帧的执行堆栈;
图8示出从Java代码进入外部代码的过程;
图9示出从外部代码进入Java代码的过程;
图10示出从Java代码退出到外部代码的过程;
图11示出引导外部代码退出到Java代码的过程;
图12示出在C++帧和Java帧之间具有异常屏敝的执行堆栈,和在Java帧和另一C++帧之间异常未屏敝;
图13A和13B示出从外部代码异常退出到Java代码的过程;
图14A和14B示出从Java代码异常退出到外部代码的过程;
图15示出可被存储在线程本机存储器中的,以便于实现存储有以多种程序语言编写的函数的帧的执行堆栈的信息。
具体实施方式
定义
函数-软件程序(也称为了程序,过程,成员函数和方法)。
帧(或启动帧,启动记录)-存储在一个函数执行堆栈上的记录,用于存储该函数的执行信息,这样的信息可以包括状态变量,局部变量和操作数堆栈。
执行堆栈-在程序执行期间利用的堆栈,该堆栈存储在函数连续调用顺序中的函数的帧。当函数(“被调用者”)被调用时,函数帧被压入执行堆栈。随后,当函数结束时,该帧被弹出堆栈和在执行堆栈顶部的帧的函数(“调用者”)重新开始执行。
操作数堆栈-用于存储操作数的堆栈,该操作数在执行期间由机器指令使用。
外部代码-以程序语言而不是专门的程序语言(例如,Java程序语言)编写的计算机代码。例如,Java虚拟机可以C++程序语言编写,和根据解释的程序的Java代码,该Java虚拟机可被视为外部代码。外部代码包括本机方法。
本机方法-以程序语言而不是Java程序语言编写的函数。由Java程序可以调用本机方法,使它们被动态地装载和执行。另外,本机方法可调用以Java程序语言编写的函数。
在以下描述中,本发明将描述关于用于实现执行Java程序(例如,字节代码)的Java虚拟机的执行堆栈的最佳实施例。特别是在将描述的例子中,其中Java虚拟机是以C++程序语言编写的。然而,本发明并不限于任何特殊语言,计算机结构,或专门的完成方法。从而,以下实施例的描述仅限于描述的目的,但并不用于限制。
图1描述了一系统计算机的举例,它可被用于执行本发明实施例的软件。图1示出的计算机系统1包括显示器3,屏5,机箱7,键盘9,和鼠标11。鼠标11可有一或多个按钮,以用于与图形用户接口相互作用。机箱7容纳CD-ROM驱动器13,系统存储器和硬盘驱动器(见图2),这些可被用于存储和检索实现本发明的结合计算机代码的软件程序,本发明使用的数据,和类似内容。虽然所示CD-ROM是典型的计算机可读存储介质,也可利用其它计算机可读存储介质,这包括软盘,磁带,闪速存储器,系统存储器,硬盘驱动器。另外,以载波(例如,以包括Internet的网络形式)形式体现的数据信号可以是计算机可读存储介质。
图2示出用于执行本发明的实施例软件的计算机系统1的系统方框图。作为图1,计算机系统1包括监视器3和键盘9,和鼠标11。计算机系统1进一步包括子系统,例如,中央处理器51,系统存储器53,固定存储器55(例如,硬盘驱动器),可移动存储器57(例如,CD-ROM驱动器),显示器适配器59,声卡61,扬声器63,和网络接口65。适用于本发明的其它计算机系统可以包括附加的或少量子系统。例如,其它计算机系统可包括多于一个的处理器51(即多处理器系统),或高速缓存存储器。
计算机系统1的系统总线结构由箭头67表示。然而,这些箭头所示的任何相互连接的图示是链接各子系统。例如,局部总线被用于连接该中央处理器到系统存储器和显示器适配器。图2所示计算机系统1仅是适用于本发明的计算机系统的一例。也可以利用具有不同的子系统配置的其它计算机结构。
典型地,以Java程序语言编写的计算机程序被编译成字节代码或Java虚拟机指令,然后由Java虚拟机执行。该字节代码被存储在类文件中,并输入到Java虚拟机用于解释。图3示出一系列由解释器、Java虚拟机执行的Java源代码的简单片断。
Java源代码101包括以Java编写的传统的Hello World程序。源代码然后被输入到字节代码编译器103,将源代码编译成字节代码。字节代码是虚拟机指令,它们将由软件仿真计算机执行。典型地,虚拟机指令是通用的(即,不是没计成用于任何专门的微处理器或计算机结构),而这不是所必需的。字节代码编译器输出包括用于Java程序的字节代码的Java类文件105。
Java类文件被输入到Java虚拟机107。Java虚拟机包括译码和执行Java类文件的字节代码的解释器。Java虚拟机可以被看作是一种解释器,而且一般被认为它是以软件仿真一微处理器或计算机结构的虚拟机(例如,在硬件上可以是不存在的微处理器或计算机结构)。
图4示出实行Java运行时系统的各单元。Java虚拟机的实行被示为Java运行时间系统。Java运行时系统201可以接收Java类文件203的输入,标准内装的Java类205和本机方法207,以便执行Java程序。标准内装Java类可以是用于诸如线程、串等的对象的类。本机方法可以不是以Java程序语言的程序语言编写。本机方法被典型存储在动态链库(DLLS)或共享库中。
Java运行时系统也与操作系统209接口。例如,输入/输出函数可由操作系统处理,该操作系统包括提供该Java运行时系统与Java类文件203,标准内装Java类205和本机方法207的接口。
动态类加载器和检验器211经由操作系统209装载Java类文件203和标准内装Java分类205到存储器213。另外,动态类加载器和检验器可以检验被检测的Java类文件的字节代码的正确性,并报告被检验出的任何错误。
本机方法链接器215经由操作系统209将本机方法207链接到Java运行时系统并存储本机方法到存储器213。如所示的,存储器213可以包括用于Java类的类和方法区和用于本机方法的本机方法区。在存储器213中的类和方法可以被存储在垃圾收集堆中。作为被创造的一个新对象,它们被存储在垃圾收集堆中。当不再利用空间时,不是应用而是Java运行时系统,对在垃圾收集堆中的存储器的重新恢复负责。
图4示出Java运行时系统的核心是执行引擎217。执行引擎执行在存储器213中存储的指令并可以由软件,硬件或两者结合实现。执行引擎支持面向对象的应用,以及在理论上,有多个执行引擎同时运行,每个Java线程一个。执行引擎217也可以利用支持代码221。支持代码可以提供与异常,线程,安全、等等相关的功能。
在Java程序执行时,在每个线程中,连续调用函数。每线程有一执行堆栈,用于存储尚未完成执行的每个函数的帧。帧存储执行函数的信息,这样的信息可以包括状态变量,局部变量和操作数堆栈。在函数被调用时,函数的帧被压入执行堆栈中。当一函数结束时,函数的帧从执行堆栈中弹出。相应地对应于在执行堆栈顶部的帧的函数是激活的,对应于低于执行堆栈顶部的各帧的函数被停止执行,直到该函数被调用返回(即结束)。
图5示出存储在执行堆栈中各函数的帧。被示出的执行堆栈301在执行堆栈顶部有帧303,和低于帧303分别有帧305和307。堆栈指针SP指向执行堆栈的顶部,而帧指针FP指向在执行堆栈301的顶部的帧的帧指针。
所示的每帧包括用于对应于该帧的函数的状态变量,局部变量和操作数堆栈。另外,如由箭头309和311所示,在帧中存储的最后一项是指向在执行堆栈中低于当前帧的帧中的帧指针。
当一个函数调用另一函数时,系统首先将该当前函数的返回地址压入执行堆栈301,和然后压入当前调用的函数的一新帧。以这种方式,当新函数返回时,该系统能够弹出执行堆栈顶部的帧和然后弹出执行堆栈的返回地址并建立等于该返回地址的程序计数器,以便重新开始调用函数的执行。另外,这是帧305和307包括返回地址和激活帧305不包括返回地址的理由。然而,如果对应帧303的函数调用另一函数,在新函数的帧被压入执行堆栈之前,返回地址将被压入执行堆栈301中。
帧指针允许系统在执行堆栈中精确移动帧。例如,堆栈指针SP和帧指针FP描述执行堆栈顶部的帧。而且帧303中的帧指针指明了执行堆栈中的下一帧。恰低于帧303中的帧指针的地址是执行堆栈中下一帧的开始,和帧303的帧指针的内容指明了执行堆栈中下一帧,即帧305的最后项。类似地,在帧305中的帧指针指明了执行堆栈中下一帧的位置。因此,帧指针的链允许系统在执行堆栈上移动帧(例如,当帧被弹出执行堆栈时)。
虽然图5示出一种执行堆栈的实现过程,但本发明并不限于所示过程。例如,执行堆栈所示为在存储器中向上增长,然而,应很清楚,堆栈在存储器中也可往下增长。而且在每帧中存储的信息的变化也可以取决于实现过程。
混合执行堆栈
图5所示执行堆栈可以很好地执行以相同程序语言编写的函数。然而,如果是以多种程序语言写的函数,由于多种理由,图5所示图5所示执行堆栈的构成就不令人满意了。例如,另一种程序语言的帧格式会是本质的不同。因而就不可能通过以多种程序语言写的各函数的帧,去建立帧指针的链。也不会知道以其它程序语言写的各函数帧的精确尺寸和内容。
为更清楚地阐述该问题,描述利用图5所示执行堆栈的举例会是有益的。假设帧305和307是以与帧303的函数不同的程序语言写的函数。在帧303的函数被执行时,帧305和帧307的内容或尺寸可以不知道。因此,即使帧303的帧指针曾被设在一函数的执行堆栈中的前一帧,该函数是以与帧303(未示出)相同程序语言写的,它也仍不了解堆栈中帧开始的位置。相应地,这些问题使得实现存储有以多种程序语言编写的各函数的帧的执行堆栈时是困难的。本发明提供实现存储有以多种程序语言编写的函数的帧的执行堆栈和还提供了其它优点,如包括改进资源分配和异常处理。
图6示出在以多种程序语言编写的各函数的执行堆栈中存储帧的高级处理过程。图6所示处理是高级的并将随同附图作更详细描述,描述如下。在步401,系统存储在以一种程序语言编写的第一函数的执行堆栈中的第一帧。
当第一函数调用以另一程序语言编写的第二函数时,系统在步403在局部存储器中存储指向执行堆栈中第一帧的一指针或多个指针。在最佳实施例中,第一函数的程序语言是Java程序语言。每个Java线程与在这些最佳实施例中的它的线程局部存储器相联系,局部存储器是用于执行第一和第二函数的线程的线程局部存储器。另外,指向第一帧的堆栈指针和帧指针被存储在线程局部存储器中。
在步405,系统存储以其它程序语言编写的第二函数的执行堆栈中的第二帧。作为举例,其它程序语言可以是C++程序语言,Pascal,FORTRAN,汇编,等等。
当第二函数调用以第一函数的程序语言写的第三函数时,系统在步407在执行堆栈中存储数据块(或项目帧),包括指向执行堆栈中的第一帧的指针或多个指针。在步403被存储在局部存储器中的指针或多个指针被复制(拷贝)到该数据块,该数据块是被压入在第二函数的第二帧上的执行堆栈中。该数据块提供用于围绕或经过执行堆栈上的第二帧移动执行堆栈的机制。虽然图6所示过程仅示出以另一程序语言写的单个第二函数,但也应理解,也可以有以另一种程序语言编写的在第三函数被调用之前彼此调用的许多函数。
在步409,系统存储以第一函数的程序语言写的第三函数的在执行堆栈中的第三帧。相应地,执行堆栈现在存储以多种程序语言编写的各函数的诸帧并包括通过这些帧,移动执行堆栈的机制。为便于进一步描述图6的过程,将参照图7描述存储有以Java程序语言和其它程序语言编写的各函数帧的执行堆栈。
如图7所示,控制帧451存储以Java程序语言编写的各函数的帧和以不是Java程序语言的程序语言(例如,C++程序语言)编写的各函数的外部帧。Java帧453被存储在执行堆栈的顶部和Java帧455被存储在执行堆栈的低处。为简化起见,各帧的细节未示出,然而,在最佳实施例中,各帧的细节波示出在图5中。
在执行堆栈中示出的项目帧457其中存储有LAST_JAVA_SP和LAST_JAVA_FP等指针,指向在执行堆栈中的前一个Java帧459。外部帧461在执行堆栈上的项目帧457和Java帧459之间被示出。外部帧或多个帧可以是用于不是Java程序语言的语言写的函数。如所示,项目帧是包括有环绕外部帧至少一个指针的数据块。
在产生如图7所示执行堆栈中产生的程序执行期间中,对应于Java帧459的函数被首先执行。相应于Java帧459的函数调用以另一程序语言写的函数。在该函数的外部帧在压入执行堆栈中之前,系统在局部存储器中存储指向Java帧459的至少一个指针。
接着,对应于外部帧461的函数调用Java函数。响应Java函数的调用,系统压入项目帧457进入执行堆栈并存储其中的指向在局部存储器中存储的Java帧459的至少一个指针,在此情况下就是LAST_JAVA_SP和LAST_JAVA_FP。对应于Java帧455的函数然后调用对应于Java帧453的Java函数。
为便于更清楚地理解本发明,将参照图7的执行堆栈描述四不同方面的作用。如所示,系统可以从Java代码进入外部代码,意味着Java函数调用以其它程序语言写的外部函数。另外,系统可从外部代码进入Java代码。随着对应于Java帧455的Java函数返回,系统从Java代码退出到外部代码,和随着对应于外部帧461的外部函数返回,系统从外部代码退出到Java代码。以下将更详细描述这四种过程的每一个。
从Java函数调用外部函数开始。图8示出从Java代码进入外部代码的过程。在步501,系统开始存储当前堆栈指针SP和帧指FP作为在线程局部存储器中的LAST_JAVA_SP和LAST_JAVA_FP。在这一点它应记忆着Java函数已经调用外部函数。在线程局部存储器中存储的堆栈指针和帧指针将随后使用存储这些指针的数据块或项目帧用于移动外部帧。虽然最佳实施例在线程局部存储器中存储堆栈指令和帧指针这两者,本发明的优点是可以利用在其它存储单元中存储其它或少量指针。
在步503,系统然后调用外部代码。在该点系统将外部函数的外部帧压入执行堆栈。在调用外部代码之前,在压入外部帧到执行堆栈的顶部之前,系统将Java函数的返回地址压入执行堆栈中。在外部的代码中,外部函数可以调用一个Java函数或调用调用一个Java函数的其它外部函数。
以上已经描述了调用外部函数的Java函数。现在描述从外部函数调用Java函数。
图9示出从外部代码进入Java代码的过程。典型地,在Java函数被调用之前,把外部函数的返回地址压入执行堆栈中。在步551,系统压入项目帧或数据块到执行堆栈中。然后,在步553在线程局部存储器中存储的LAST_JAVA_SP和LAST_JAVA_FP被拷贝到项目帧。LAST_JAVA_SP和LAST_JAVA_FP指针指向在执行堆栈中的前一个Java帧。很明显,对于本领域的普通技术人员,这里描述和所示处理步骤被用于描述本发明和这并不意味着必须需要任何特定的步骤顺序。例如,本发明的实施例可以在它被压入在执行堆栈中之前,首先存储该项目帧的指针和这样的实施例会明显落在所描述的本
发明的范围内。
在步555,系统清除在线程局部存储器中存储的LAST_JAVA_SP和LAST_JAVA_FP。在线程局部存储器中的这些指针,可通过没它们的值等于零或通过本领域中已知的其它任何方式加以清除。在最佳实施例中,指针被没置等于零,以便检验指针,以确定在系统中当前运行的是Java代码还是外部代码(例如,非零=外部和零=Java)。
在通常系统中,当调用本机方法时,本机方法的资源被典型地分配。通常,Java函数将调用多个本机方法,使得普通资源分配造成资源多次分配和去分配。利用本发明的各实施例,当进入Java函数时,为本机方法分配资源,使得Java函数调用的所有本机方法可以获得这些资源。进而,一旦Java函数被进入时资源就可被分配,和一旦Java函数返回时资源就被去分配,从而增加了资源分配/去分配的效率。
在步557,系统为本机方法分配资源和在线程局部存储器中存储资源。然后在步559系统调用Java代码。
在由外部函数已经调用的Java函数返回之后,执行将随调用Java函数的外部函数继续。图10示出从Java代码退出到外部代码的过程。在步601,系统恢复LAST_JAVA_SP和LAST_JAVA_FP到线程本机存储器。系统拷贝回在项目帧中存储的指针到线程局部存储器。相应地,外部函数一旦再次调用Java函数,在线程局部存储器中指针将再次有效以设置一个项目帧。
在步603,系统去分配本机方法的资源。在最佳实施例中,在它们被分配之后,资源被存储到线程本机存储器中。在步605,系统返回到由在执行堆栈中的返回地址典型指定的外部代码。
一旦由Java函数已经调用的外部函数返回,执行将在调用的外部函数的Java函数中重新开始。图11示出从外部代码退出到Java代码的过程。在步651,系统清除在线程局部存储器中的LAST_JAVA_SP和LAST_JAVA_FP。在最佳实施例中,当系统执行Java函数时,在线程局部存储器中存储的堆栈指针和帧指针被置成零值,和当系统执行外部代码时,被置成非零值。当执行外部代码时,堆栈和帧指针是非零值,因为指针指向在执行堆栈中前一个Java帧。
在步653,系统返回到Java代码。一旦外部函数被调用时通过设置程序计数器到被压入执行堆栈中的返回地址,系统返回到Java代码。
上述本发明的实施例提供一种执行堆栈的实现方法,该执行堆栈存储以多种程序语言编写的各函数的帧。虽然描述集中在Java程序语言的函数,但本发明不限于任何专门的程序语言。本发明给系统提供的优点是,利用以多种程序语言写的函数执行程序。通过允许系统移动执行堆栈和是有效地分配资源,程序的执行可以更有效。
异常
异常是表示不寻常的某些事件发生的信号。例如,异常可以是系统用完存储器或是遇到一个文件的文件结束。某些异常表示不可恢复的情况(例如,用完存储器)和某些异常表示可恢复的情况(例如,文件结束)。
当异常发生时,Java运行时系统典型地检索用于该异常的异常处理器。在异常发生的函数内部开始检索和然后通过在堆栈中的诸函数传播。如果找到异常处理器,异常处理(器)捕捉异常并产生适当作用,也可以包括产生另一异常。
作为举例,我们将描述以C++程序语言编写的Java虚拟机的实施例。相应地,执行堆栈将包括C++帧和Java帧。采用本发明的这些实施例,异常可以通过在执行堆栈中不同的帧传播。虽然是以特定的实施例描述本发明,但本发明不限于任何特定实施例或结构。图12描述了包括C++和Java帧这二者的执行堆栈。C++帧703位于执行堆栈预部。对应于C++帧703的C++函数被对应于Java帧705的Java函数调用。如先前所述,项目帧707被存储在执行堆栈中以允许系统移动C++帧709和711到Java帧713。
理论上在C++帧703和Java帧705之间有屏敝715。屏敝715捕捉在C++帧703中未被处理的C++异常并传递该异常到Java帧705。在异常被传递之前,必须转换C++异常成为Java异常。如所示,在C++帧711和Java帧713之间也可以有屏敝716。
无屏敝717在Java帧705(和项目帧707)和C++帧709之间。无屏敝717传递在Java帧705中未被处理的Java异常和并将它们传递到C++帧709。图12所示执行堆栈现在是简化描述,以便有利于从外部代码退回到Java代码的异常的描述。
图13A和13B示出从外部代码退回到Java代码的异常的过程。在步801,C++异常已经产生。在已知技术中,C++异常可以由适当的异常处理器捕捉和处理。在步803,如果C++异常由异常处理器处理,系统由异常处理器指导进行执行。
步805和接着的步807,809,813,815,和817对应着图12的屏敝715。在步805,系统捕捉在C++帧中未被处理的所有异常。然后,在步807,系统确定所捕捉的异常是否是Java异常。换言之,系统确定C++异常是否可以转换成Java异常。如果C++异常不能转换成Java异常,在步809,系统发出故障错误信息并停止执行。
如果C++异常是Java异常,在步811,系统从执行堆栈顶部移除C++帧。C++帧对应于当异常发生时正在被运行的C++函数。在步813,系统存储异常和返回地址到线程局部存储器中。该存储的返回地址可被用于产生Java异常。
在步815,系统用到异常输送器的地址修正执行堆栈上的返回地址。异常输送器是虚拟机函数的外部代码(在最佳实施例中以C++或汇编编写的),它负责产生Java异常和跳变到执行堆栈中下一个Java帧的异常处理器。
在步817,系统返回到外部代码。现在,在步815,用于Java帧的705的返回地址已被修正以引用异常输送器,该系统将进一步执行图13B所示的异常输送函数。图13B示出异常输送器的实施例。在步851,系统建立Java异常。Java异常包括异常对象和产生异常的程序计数器(或“发布PC”)这二者。通过从返回地址中简单地减1,就可以从存储在线程局部存储器中的返回地址中迅速产生程序计数器。虽然描述的实施例存储返回地址,应很容易明白,发布PC也可被存储在线程局部存储器中。
利用在线程局部存储器中存储的返回地址,异常输送器得到用于由返回地址指定方法的异常处理程序。在适当的异常处理被鉴别之后,在步855完成到异常处理器的跳跃。相应地,已经示明,C++异常如何可以被作为Java异常被转换和处理。以下将描述从Java代码退回到外部代码的异常。
图14A和14B示出引导Java代码退回到外部代码的异常过程。在步901,Java异常已经产生。在步903,系统确定异常是否可以在当前Java帧处理。如果异常可以由用于该帧的异常处理器处理,在步905,系统跳到该异常处理器。
如果对于该Java帧,Java异常不可以由异常处理器处理,在步907,系统从该执行堆栈移除该Java帧。然后,在步909,系统确定用于在CPU寄存器存储的返回地址的异常处理器。在步911,系统跳到异常处理器。异常处理器是用于项目帧的异常处理器。
图14B示出项目帧的异常处理器的过程。在步951,异常处理器在线程局部存储器中存储该异常。在步953,在C++调用之后,异常处理器完成执行和继续。当在C++调用之后开始执行时,如在图12中的无屏敝717所示的无屏敝确定该异常是否是未决的(步955)。它可以通过检验局部存储器去看异常是否是未决的来确定异常是未决的。例如,它可以确定异常是否存储在线程局部存储器中。如果异常是未决的,在步957通过产生在线程局部存储器中存储的异常来产生C++异常。相应地,Java异常可被转换和再产生C++异常。
上述实施例示明,信息可以存储在线程局部存储器中,以便于实现存储有以多种程序语言写的函数帧的执行堆栈。图15示出可以存储在线程局部存储器中的信息。上述已被描述的信息可参考其它附图;无论如何,查阅其中可被存储信息是有益处的。LAST_JAVA_SP 1001和LAST_JAVA_FP 1003是指向执行堆栈中前一个Java帧的指针。这些指针允许执行堆栈被移动或通过在该执行堆栈上以其它程序语言写的帧。
当系统从以其它程序语言写的函数中进入Java函数时,资源1005被分配。然后通过Java函数或任何随后的Java函数调用的任何本机方法可以利用这些资源。
异常1007和返回地址1009被存储,以允许异常从以其它程序语言(例如,C++程序语言)写的函数传递到Java函数,反之亦然。其它信息也可以被存储在线程局部存储器中。
结论
以上是本发明的最佳实施例的完整描述,也存在可利用的替换,修改和等价物。很明显,对上述实施例作适当修改;同样可以应用。例如,上述实施例是包括Java帧的混合执行堆栈,而本发明的基本原理很容易应用到其它系统和语言。因此,以上所述并不是对本发明范围的限制,而是由全部等效范围的所附权利要求来界定。
Claims (35)
1.在计算机系统中,一种用于实现一个执行堆栈的方法,该执行堆栈存储以多种程序语言写的函数的帧,该方法包括:
在执行堆栈中存储第一函数的第一帧,第一函数是以第一种程序语言写的;和
响应该第一函数调用以第二种程序语言写的第二函数,在执行堆栈中,在第二函数的第二帧之前存储数据块,该数据块包括指向在执行堆栈中用于以第二程序语言写的前一函数的前一帧的至少一个指针。
2.根据权利要求1所述的方法,其特征在于,至少一个指针包括一前一堆栈指针和帧指针。
3.根据前述权利要求中的任何一个所述的方法,其特征在于,进一步包括:响应第一函数调用第二函数,分配不是以第二程序语言的程序语言写的可以由第二函数调用的资源。
4.根据权利要求3所述的方法,其特征在于,进一步包括,当退出该第二函数时,去分配以不是第二程序语言的程序语言写的函数的资源。
5.根据前述权利要求中的任何一个所述的方法,其特征在于,进一步包括捕捉在执行第二函数期间产生的异常,该异常没有被第二函数的异常处理器处理。
6.根据权利要求5所述的方法,其特征在于,进一步包括识别用于数据块的异常处理器,以处理该异常和跳到被识别的异常处理器。
7.根据权利要求6所述的方法,其特征在于,该被识别的异常处理器在局部存储器中存储异常。
8.根据权利要求7所述的方法,其特征在于,该局部存储器是与第一和第二函数在其中执行的当前线程相关联的存储器。
9.根据权利要求7和8之一所述的方法,其特征在于,进一步包括,当返回到第一函数时,检验该局部存储器,以确定异常是否是未决的和如果异常是未决的,则产生出该存储的异常。
10.根据权利要求9所述的方法,其特征在于,进一步包括,转换该存储的异常成为用于第一程序语言的格式。
11.根据前述权利要求中的任何一个所述的方法,其特征在于,第二程序语言是Java程序语言。
12.一种计算机系统,具有存储有以多种程序语言写的函数的帧的执行堆栈,所述计算机系统包括:
一个处理器;
一个耦合到该处理器并存储有该执行堆栈的存储器;并且
其中所述处理器在执行堆栈中存储第一函数的第一帧,该第一函数是以第一程序语言写的,和响应该第一函数调用以第二程序语言写的第二函数,在第二函数的第二帧之前,在执行堆栈中存储数据块,该数据块包括指向在执行堆栈中用于以第二程序语言写的前一函数的前一帧的至少一个指针。
13.在一个计算机系统中,一种用于在一个执行堆栈中存储以多种程序语言写的函数的帧的方法,该方法包括:
在执行堆栈中存储第一函数的第一帧,第一函数是以第一程序语言写的;和
响应该第一函数调用以第二程序语言写的第二函数,在局部存储器中存储指向在执行堆栈中的第一帧的至少一个指针和存储在执行堆栈中的第二函数的第二帧。
14.根据权利要求13所述的方法,其特征在于,该至少一个指针包括一前一堆栈指针和帧指针。
15.根据权利要求13和14之一所述的方法,其特征在于,局部存储器是与第一和第二函数在其中正在执行的当前线程相关联的存储器。
16.根据权利要求13至15中的任何一个所述的方法,其特征在于,进一步包括,当退出第二函数时,清除在局部存储器中存储的该至少一个指针。
17.根据权利要求13至16中的任何一个所述的方法,其特征在于,进一步包括,捕捉在执行第二函数期间产生的异常,该异常没有由用于第二函数的异常处理器处理过。
18.根据权利要求17所述的方法,其特征在于,进一步包括,确定该异常是否适用于第一程序语言。
19.根据权利要求17和18之一所述的方法,其特征在于,进一步包括,在局部存储器中存储该异常。
20.根据权利要求17至19中的任何一个所述的方法,其特征在于,进一步包括,用异常输送器的地址修正执行堆栈中的返回地址,异常输送器识别用于第一函数的异常处理器,以处理该异常和跳到该识别过的异常处理器。
21.根据权利要求20所述的方法,其特征在于,该异常输送器转换该异常成为第一程序语言的格式。
22.根据权利要求13至21中的任何一个所述的方法,其特征在于,进一步包括,响应该第二函数调用以第一程序语言写的第三函数,在第三函数的第三帧之前,在执行堆栈中存储一数据块,该数据块包括指向在局部存储器中存储的第一帧的至少一个指针。
23.根据权利要求22所述的方法,其特征在于,进一步包括:
响应该第二函数调用第三函数,分配以不是第一程序语言的程序语言写的可以由第三函数调用的各函数的资源;和
当退出第三函数时,去分配以不是第一程序语言的程序语言写的各函数的资源。
24.根据权利要求22所述的方法,其特征在于,进一步包括,捕捉在不曾由用于第三函数的异常处理器处理过的在第三函数执行期间产生的异常。
25.在一个计算机系统中,该系统具有一个存储以多种程序语言写的各函数的帧的执行堆栈,一种用于利用所述执行堆栈操作所述计算机系统的方法,所述方法包括:
在执行堆栈中存储第一函数的第一帧,该第一函数是以第一程序语言写的;
响应第一函数调用以第二程序语言写的第二函数,在第二函数的第二帧之前,在执行堆栈中存储数据块,该数据块包括指向在执行堆栈中的用于以第二程序语言写的前一函数的前一帧的至少一个指针。
26.根据权利要求25所述的方法,其特征在于,该至少一个指针包括一前一堆栈指针和帧指针。
27.根据权利要求26所述的方法,其特征在于,响应该第一函数调用第二函数,分配以不是第二程序语言的程序语言写的可以由第二二函数调用的各函数的资源。
28.根据权利要求27所述的方法,其特征在于,进一步包括,当退出第二函数时,去分配以不是第二程序语言的程序语言写的各函数的资源。
29.根据权利要求28所述的方法,其特征在于,进一步包括,捕捉在不曾由用于第二函数的异常处理器处理过的在第二函数执行期间产生的异常。
30.根据权利要求29所述的方法,其特征在于,进一步包括识别用于数据块的异常处理器,以处理该异常和跳到被识别的异常处理器。
31.根据权利要求30所述的方法,其特征在于,该被识别的异常处理器在局部存储器中存储异常。
32.根据权利要求30所述的方法,其特征在于,该局部存储器是与第一和第二函数在其中执行的当前线程相关联的存储器。
33.根据权利要求32所述的方法,其特征在于,进一步包括,当返回到第一函数时,检验该局部存储器,以确定异常是否是未决的和如果异常是未决的,则产生出该存储的异常。
34.根据权利要求33所述的方法,其特征在于,进一步包括,转换该存储的异常成为用于第一程序语言的格式。
35.根据权利要求34所述的方法,其特征在于,第二程序语言是Java程序语言。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US944335 | 1997-10-06 | ||
US08/944,335 US6009517A (en) | 1997-10-06 | 1997-10-06 | Mixed execution stack and exception handling |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1234548A CN1234548A (zh) | 1999-11-10 |
CN1108560C true CN1108560C (zh) | 2003-05-14 |
Family
ID=25481215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN98124313A Expired - Fee Related CN1108560C (zh) | 1997-10-06 | 1998-10-05 | 用于存储与多种编程语言相关的执行数据的方法和装置 |
Country Status (6)
Country | Link |
---|---|
US (3) | US6009517A (zh) |
EP (2) | EP1698974A3 (zh) |
JP (1) | JPH11237990A (zh) |
KR (1) | KR100640314B1 (zh) |
CN (1) | CN1108560C (zh) |
DE (1) | DE69835062T2 (zh) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6865734B2 (en) * | 1997-10-06 | 2005-03-08 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
US5970249A (en) * | 1997-10-06 | 1999-10-19 | Sun Microsystems, Inc. | Method and apparatus for performing byte-code optimization during pauses |
US6317796B1 (en) * | 1997-10-06 | 2001-11-13 | Sun Microsystems, Inc. | Inline database for receiver types in object-oriented systems |
DE59709316D1 (de) | 1997-10-31 | 2003-03-20 | Endress & Hauser Gmbh & Co Kg | Anordnung zum Fernsteuern und/oder Fernbedienen eines Feldgeräts mittels eines Steuergeräts über einen Feldbus |
US7076765B1 (en) * | 1998-06-24 | 2006-07-11 | Kabushiki Kaisha Toshiba | System for hiding runtime environment dependent part |
US6324688B1 (en) * | 1998-07-30 | 2001-11-27 | International Business Machines Corporation | Method and apparatus for optimizing execution of Java programs |
US6941552B1 (en) * | 1998-07-30 | 2005-09-06 | International Business Machines Corporation | Method and apparatus to retain applet security privileges outside of the Java virtual machine |
US6205578B1 (en) * | 1998-08-14 | 2001-03-20 | Ati International Srl | Interpreter for stack-based languages |
US6131187A (en) * | 1998-08-17 | 2000-10-10 | International Business Machines Corporation | Method and system for translating exception handling semantics of a bytecode class file |
GB2345355A (en) | 1998-12-30 | 2000-07-05 | Ibm | Garbage collection in a Java virtual machine |
US6327702B1 (en) * | 1998-12-30 | 2001-12-04 | Microsoft Corporation | Generating a compiled language program for an interpretive runtime environment |
US6848111B1 (en) * | 1999-02-02 | 2005-01-25 | Sun Microsystems, Inc. | Zero overhead exception handling |
US6481006B1 (en) * | 1999-05-06 | 2002-11-12 | International Business Machines Corporation | Method and apparatus for efficient invocation of Java methods from native codes |
GB2358261B (en) * | 2000-01-17 | 2004-06-09 | Advanced Risc Mach Ltd | Data processing with native and interpreted program instruction words |
US7181745B1 (en) * | 2000-03-03 | 2007-02-20 | The Mathworks, Inc. | Method and system for accessing objects defined within an external object-oriented environment |
EP1182547A1 (de) * | 2000-08-24 | 2002-02-27 | Wincor Nixdorf GmbH & Co KG | Programmkopplungsmethode |
US6883165B1 (en) | 2000-09-28 | 2005-04-19 | International Business Machines Corporation | Apparatus and method for avoiding deadlocks in a multithreaded environment |
US6912647B1 (en) | 2000-09-28 | 2005-06-28 | International Business Machines Corportion | Apparatus and method for creating instruction bundles in an explicitly parallel architecture |
US6886094B1 (en) * | 2000-09-28 | 2005-04-26 | International Business Machines Corporation | Apparatus and method for detecting and handling exceptions |
US7036113B1 (en) | 2000-10-26 | 2006-04-25 | International Business Machines Corporation | Detection of resource exceptions |
CA2347404C (en) * | 2001-05-10 | 2008-11-18 | Corel Corporation | System and method for recovering applications |
US7003778B2 (en) * | 2001-10-24 | 2006-02-21 | Sun Microsystems, Inc. | Exception handling in java computing environments |
GB0213218D0 (en) * | 2002-06-08 | 2002-07-17 | Koninkl Philips Electronics Nv | Operation of java virtual machine |
CA2406025A1 (en) * | 2002-09-30 | 2004-03-30 | Ibm Canada Limited-Ibm Canada Limitee | Validating content of localization data files |
US20050198464A1 (en) * | 2004-03-04 | 2005-09-08 | Savaje Technologies, Inc. | Lazy stack memory allocation in systems with virtual memory |
US8006071B2 (en) * | 2004-03-31 | 2011-08-23 | Altera Corporation | Processors operable to allow flexible instruction alignment |
KR100577366B1 (ko) * | 2004-09-25 | 2006-05-10 | 삼성전자주식회사 | 이종의 자바 메소드를 실행하는 방법 및 장치 |
US7596780B2 (en) * | 2004-10-22 | 2009-09-29 | Microsoft Corporation | System and method for virtual catching of an exception |
DE102004051823A1 (de) * | 2004-10-25 | 2006-05-04 | Giesecke & Devrient Gmbh | Übergabe von Variablen zwischen Interpreter-basierten und nativen Programmcodeteilen |
DE102004051824A1 (de) * | 2004-10-25 | 2006-05-04 | Giesecke & Devrient Gmbh | Übergabe von Variablen |
US7870541B1 (en) * | 2004-11-01 | 2011-01-11 | Wind River Systems, Inc. | Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer |
US7574702B2 (en) * | 2005-03-18 | 2009-08-11 | Microsoft Corporation | Method and apparatus for hybrid stack walking |
EP1865435A1 (en) * | 2006-06-06 | 2007-12-12 | Texas Instruments France | Enhanced exception handling |
US7861072B2 (en) * | 2007-06-25 | 2010-12-28 | Microsoft Corporation | Throwing one selected representative exception among aggregated multiple exceptions of same root cause received from concurrent tasks and discarding the rest |
US8146085B2 (en) * | 2007-06-25 | 2012-03-27 | Microsoft Corporation | Concurrent exception handling using an aggregated exception structure |
US7752424B2 (en) * | 2007-08-08 | 2010-07-06 | Arm Limited | Null value checking instruction |
US20100192023A1 (en) * | 2009-01-26 | 2010-07-29 | International Business Machines Corporation | Optimizing Exception and Error Propagation Through Scopes |
US9727338B2 (en) * | 2012-11-05 | 2017-08-08 | Nvidia Corporation | System and method for translating program functions for correct handling of local-scope variables and computing system incorporating the same |
CN103645931B (zh) * | 2013-12-25 | 2016-06-22 | 盛杰 | 代码转换的方法及装置 |
US9569185B2 (en) | 2014-02-07 | 2017-02-14 | Oracle International Corporation | Changing de-optimization guard representation during the compilation process |
CN106610602B (zh) * | 2015-10-27 | 2019-04-02 | 西门子公司 | 一种用于异常检测的方法和装置 |
US10303493B2 (en) * | 2016-11-04 | 2019-05-28 | International Business Machines Corporation | Performance acceleration in mixed-language applications |
EP3673368A1 (en) * | 2017-08-24 | 2020-07-01 | Lutron Technology Company LLC | Stack safety for independently defined operations |
DE112018007090T5 (de) * | 2018-02-15 | 2020-11-12 | Intel Corporation | Techniken zur identifizierung unrichtiger informationen in aufrufstapeln |
CN115237475B (zh) * | 2022-06-23 | 2023-04-07 | 云南大学 | 一种Forth多核堆栈处理器及指令集 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS57153339A (en) * | 1981-03-18 | 1982-09-21 | Hitachi Ltd | Information processor |
US4399507A (en) * | 1981-06-30 | 1983-08-16 | Ibm Corporation | Instruction address stack in the data memory of an instruction-pipelined processor |
US5522072A (en) * | 1990-09-04 | 1996-05-28 | At&T Corp. | Arrangement for efficiently transferring program execution between subprograms |
US5274817A (en) * | 1991-12-23 | 1993-12-28 | Caterpillar Inc. | Method for executing subroutine calls |
US5475822A (en) * | 1993-11-15 | 1995-12-12 | Motorola, Inc. | Data processing system for resuming instruction execution after an interrupt and method therefor |
US5574915A (en) * | 1993-12-21 | 1996-11-12 | Taligent | Object-oriented booting framework |
US5634046A (en) * | 1994-09-30 | 1997-05-27 | Microsoft Corporation | General purpose use of a stack pointer register |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
US5822606A (en) * | 1996-01-11 | 1998-10-13 | Morton; Steven G. | DSP having a plurality of like processors controlled in parallel by an instruction word, and a control processor also controlled by the instruction word |
US5784553A (en) * | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
KR100618756B1 (ko) * | 1996-01-24 | 2007-05-04 | 선 마이크로시스템즈 인코퍼레이티드 | 네트워크또는로컬메모리로부터수신된명령세트를실행하는프로세서및컴퓨터시스템 |
US5761491A (en) * | 1996-04-15 | 1998-06-02 | Motorola Inc. | Data processing system and method for storing and restoring a stack pointer |
US5884062A (en) * | 1996-08-30 | 1999-03-16 | Texas Instruments Incorporated | Microprocessor with pipeline status integrity logic for handling multiple stage writeback exceptions |
US5884083A (en) * | 1996-09-20 | 1999-03-16 | Royce; Robert | Computer system to compile non-incremental computer source code to execute within an incremental type computer system |
US5937193A (en) * | 1996-11-27 | 1999-08-10 | Vlsi Technology, Inc. | Circuit arrangement for translating platform-independent instructions for execution on a hardware platform and method thereof |
-
1997
- 1997-10-06 US US08/944,335 patent/US6009517A/en not_active Expired - Lifetime
-
1998
- 1998-09-24 DE DE69835062T patent/DE69835062T2/de not_active Expired - Lifetime
- 1998-09-24 EP EP06012989A patent/EP1698974A3/en not_active Withdrawn
- 1998-09-24 EP EP98307742A patent/EP0911726B1/en not_active Expired - Lifetime
- 1998-10-05 CN CN98124313A patent/CN1108560C/zh not_active Expired - Fee Related
- 1998-10-06 JP JP10319739A patent/JPH11237990A/ja active Pending
- 1998-10-07 KR KR1019980041792A patent/KR100640314B1/ko not_active IP Right Cessation
-
1999
- 1999-10-12 US US09/416,373 patent/US6415381B1/en not_active Ceased
-
2004
- 2004-07-01 US US10/884,826 patent/USRE39519E1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US6415381B1 (en) | 2002-07-02 |
KR100640314B1 (ko) | 2007-03-02 |
EP0911726A2 (en) | 1999-04-28 |
DE69835062T2 (de) | 2007-05-16 |
EP1698974A2 (en) | 2006-09-06 |
EP0911726A3 (en) | 2001-08-29 |
KR19990036883A (ko) | 1999-05-25 |
US6009517A (en) | 1999-12-28 |
CN1234548A (zh) | 1999-11-10 |
JPH11237990A (ja) | 1999-08-31 |
EP0911726B1 (en) | 2006-06-28 |
USRE39519E1 (en) | 2007-03-13 |
EP1698974A3 (en) | 2008-04-16 |
DE69835062D1 (de) | 2006-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1108560C (zh) | 用于存储与多种编程语言相关的执行数据的方法和装置 | |
JP5602597B2 (ja) | 外来情報を区分けすることにより仮想マシン・コードをメモリ最適化する方法、コンピュータ・プログラム、およびシステム | |
CN1149470C (zh) | 一种分析面向对象的程序的执行的方法和设备 | |
CN1134731C (zh) | 在计算机系统中编译指令的方法 | |
US8239861B2 (en) | Software-based unloading and reloading of an inactive function to reduce memory usage of a data processing task performed using a virtual machine | |
CN1271892A (zh) | 自动的承接软件/适配器生成器 | |
CN1838088A (zh) | 探测具有限制性调用约定代码的方法 | |
JP2002508560A (ja) | マルチプル・クラスファイルのランタイムイメージへの結合 | |
US9003377B2 (en) | Efficient resumption of co-routines on a linear stack | |
CN1234551A (zh) | 动态优化字节编码程序的方法和装置 | |
CN103729235A (zh) | Java虚拟机的编译方法和Java虚拟机 | |
EP3455736B1 (en) | Dynamically sized locals with precise garbage collection reporting | |
CN1924805A (zh) | 在无线二进制运行环境平台实现动态链接库方法 | |
WO2024169933A1 (zh) | 一种程序异常向量空间优化系统、方法、设备及介质 | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
US7240341B2 (en) | Global constant pool to allow deletion of constant pool entries | |
CN1129846C (zh) | 程序执行方法 | |
CN1096025C (zh) | 信息处理装置及多任务控制方法 | |
CN1267818C (zh) | 将单处理器的软件程序转换为多处理器的软件程序的方法 | |
CN1027324C (zh) | 编程支持方法及系统 | |
CN1945542A (zh) | 一种嵌入式软件开发的方法及系统 | |
CN102375740A (zh) | 手持装置及利用其实现Java组件与自定义构件互操作的方法 | |
CN1912828A (zh) | 用于开发计算机系统的装置及其方法 | |
CN1438576A (zh) | 基于操作栈记录的恢复的Java线程迁移的方法 | |
Qian et al. | AutoHammer: Breaking the Compilation Wall Between Deep Neural Network and Overlay-based FPGA Accelerator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |