用于存储与多种编程语言相关的执行数据的方法和装置制造方法及图纸

技术编号:2887699 阅读:234 留言:0更新日期:2012-04-11 18:40
提供一种用于实现存储有以多种程序语言写的各函数的帧的执行堆栈的系统和方法。以不同程序语言写的各函数的帧,在同一执行堆栈上可被交叉。在执行堆栈上的数据块通过存储的指向前一帧的堆栈指针和帧指针,可被用于移动帧的执行堆栈。相应地,异常可以被传送,如必要可被转换,通过在执行堆栈中以不同程序语言写的帧。(*该技术在2018年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及实现一执行堆栈,特别是,本专利技术涉及实现具有可以以多种编程语言编写的函数的执行堆栈,例如,用于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虚拟机可被视本文档来自技高网...

【技术保护点】
在计算机系统中,用于实现执行堆栈的方法,该执行堆栈存储以多种程序语言写的函数的帧,该方法包括:在执行堆栈中存储第一函数的第一帧,第一函数是以第一种程序语言写的;和响应该第一函数调用以第二种程序语言写的第二函数,在执行堆栈中,在第二函 数的第二帧之前存储数据块,该数据块包括指向在执行堆栈中用于以第二程序语言写的前一函数的前一帧的至少一个指针。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:L巴克R格里瑟梅尔U赫尔茨勒
申请(专利权)人:太阳微系统有限公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1