JPH11237990A - 混合実行スタックおよび例外処理 - Google Patents

混合実行スタックおよび例外処理

Info

Publication number
JPH11237990A
JPH11237990A JP10319739A JP31973998A JPH11237990A JP H11237990 A JPH11237990 A JP H11237990A JP 10319739 A JP10319739 A JP 10319739A JP 31973998 A JP31973998 A JP 31973998A JP H11237990 A JPH11237990 A JP H11237990A
Authority
JP
Japan
Prior art keywords
function
frame
programming language
execution stack
exception
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.)
Pending
Application number
JP10319739A
Other languages
English (en)
Inventor
Lars Bak
バク ラーズ
Robert Greisemer
グライセマー ロバート
Urs Holzle
ホルツル ウールズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JPH11237990A publication Critical patent/JPH11237990A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract 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

(57)【要約】 【課題】 多重プログラミング言語で書かれた関数のた
めのフレームを格納する実行スタックを具体化するため
のシステムと方法を提供する。 【解決手段】 種々のプログラミング言語で書かれた関
数のためのフレームを同じ実行スタック上で交互に配置
することができる。実行スタック上のデータブロックを
利用することにより、前のフレームに対するスタックポ
インタおよびフレームポインタを格納することにより、
フレームまわりで実行スタックをトラバースさせること
ができる。その上、必要なら、変換することにより、種
々のプログラミング言語で書かれた実行スタック上のフ
レーム全体に例外を拡げることができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、実行スタックの具
体化に関する。より詳細には、本発明は、多重プログラ
ミング言語で書かれた関数とともに使用される実行スタ
ック、例えばJava(登録商標)仮想マシンのための
実行スタックの具体化に関する。
【0002】
【従来の技術】Java(登録商標)プログラミング言
語は、カリフォルニア州パロアルトのSun Microsystems
により開発されたオブジェクト指向の高レベルプログラ
ミング言語であり、小型のパソコンからスーパコンピュ
ータに至る広範なコンピュータ上で実行されるのに十分
ポータブルな設計になっている。Java(および他の
言語)で書かれたコンピュータプログラムは、Java
仮想マシンによる実行のために、仮想マシン命令にコン
パイルされる。一般的に、Java仮想マシンは、仮想
マシン命令を解読・実行するインタプリタである。
【0003】Java仮想マシンのための仮想マシン命
令は、バイトコードであり、これらが1バイト以上を含
むことを意味する。バイトコードは、クラスのメソッド
のためのバイトコードを含む「クラスファイル」と呼ば
れる特殊なファイルフォーマットで格納される。クラス
のメソッドのためのバイトコードに加えて、クラスファ
イルは記号テーブルや他の付属情報を含む。
【0004】1つ以上のクラスファイルにJavaバイ
トコードとして表現されるコンピュータプログラムは、
プラットフォームに依存しない。このコンピュータプロ
グラムは、Java仮想マシンの具体化を可能にする何
れのコンピュータ上でも、変更することなく実行される
ことがきる。Java仮想マシンは、Java仮想マシ
ン用コンピュータプログラムがプラットフォームに依存
しないようにするうえで主要な要素である「包括的」
(generic)コンピュータのソフトウェアエミュレータ
である。
【0005】Java仮想マシンは、普通は、ソフトウ
ェア・インタプリタとして具体化される。従来のインタ
プリタは、実行時、解釈されるプログラムの仮想マシン
命令を一度に1つだけ解読・実行する。他方、コンパイ
ラは、実行中に解読が行われないように、実行に先立っ
てソースコードを固有のマシン語命令に解読する。従来
のインタプリタは、命令に遭遇する度に各命令を繰り返
し実行する前に、それらの各命令が解読されるので、解
釈されたプログラムの実行は、一般的には、コンパイル
されるプログラムよりもかなり遅い。なぜなら、コンパ
イルされたプログラム固有のマシン語命令は、解読を必
要とせずに、固有のマシンまたはコンピュータシステム
上で実行できるからである。
【0006】Java仮想マシンは、Javaプログラ
ミング言語以外のプログラミング言語(例えば、C++
プログラミング言語)で書かれるのが一般的である。従
って、Javaプログラムの実行は、多重プログラミン
グ言語で書かれた関数の実行が伴ってもよい。その上、
バイトコード自体がJavaプログラミング言語で書か
れていない関数(例えば、入力/出力のためのシステム
関数)を呼び出すことができる。従って、実行中のJa
vaプログラムにとって多重プログラミング言語で書か
れた関数の実行を必然的に伴うのが普通である。多重プ
ログラミング言語で書かれた関数を格納する実行スタッ
クを備えるのが望ましくなるだろう。その上、必要な
ら、例外を適切なフォーマットに変換することにより、
例外がこれらの関数全体に拡げられるようにするのが有
益であろう。
【0007】
【発明が解決しようとする課題】Java仮想マシンに
より、Javaプログラムは、固有のメソッドを動的に
ロードし、これを実行することができ、固有のメソッド
は、Javaプログラミング言語以外の言語で具体化さ
れる。固有のメソッドでは、固有のメソッドが呼び出さ
れる毎に資源(resources)を割当て/割当て解除でき
るように、資源の実行が求められることが多い。しか
し、資源の割当てと割当て解除は、非常に時間がかかる
とされ、また資源の連続的な割当てと割当て解除は、解
釈されるプログラムの効率に有意な低下をもたらすだろ
う。従って、資源の割当てと割当て解除に、より効率的
な技法を提供するのが望ましいことになる。
【0008】よって、異なったプログラミング言語で具
体化(実行、implementing)される関数に関する関数ア
クティベーションを維持することができる実行スタック
を具体化するための、また特にこれらの関数および対応
する関数アクティベーション全体に例外を拡げることを
可能にする技法が必要である。その上、実行速度が高め
られるように、資源が割当てられ、また割当て解除され
る方法がより効率的になるインタプリタを提供する必要
がある。
【0009】
【課題を解決するための手段】一般的に、本発明の実施
形態は、多重プログラミング言語で書かれた関数のため
のフレームを格納する実行スタックを具体化するための
革新的システムと方法を提供する。多重プログラミング
言語で書かれた関数のためのフレームは、同一のプログ
ラミング言語で書かれた関数のための実行スタック上の
前のフレームに対するポインタを格納するエントリフレ
ーム(またはデータブロック)を利用して、同じ実行ス
タック上に格納することができる。関数が、異なるプロ
グラミング言語で書かれたものであり、例外のフォーマ
ットが異なっている場合でも、エントリフレームによ
り、実行スタックは、他のプログラミング言語で書かれ
た関数のためのフレーム「まわり」をトラバースされる
ことが可能になり、例外は、適切な例外ハンドラによる
処理のために実行スタック全体に拡がることができる。
その上、資源は、1つのプログラミング言語(例えばJ
avaプログラミング言語)で書かれた関数に入った時
点で割り当てられるので、他のプログラミング言語の何
れの後続関数(例えば「固有の」)にも利用可能であ
る。次に、呼出し関数が終了した時点で一度割当て解除
を行うことが可能であり、これにより資源の割当てと割
当て解除の効率が上がる。本発明の幾つかの実施形態を
以下に説明する。
【0010】1つの実施形態では、多重プログラミング
言語で書かれた関数のためのフレームを格納する実行ス
タックを具体化するためのコンピュータにより具体化さ
れる方法が提供される。第1プログラミング言語で書か
れた関数のための第1フレームは、実行スタック上に格
納することができる。第1関数が第2プログラミング言
語で書かれた第2関数を呼び出すとき、データブロック
は、第2関数のための第2フレームよりも前に、実行ス
タック上に格納することができる。データブロックは、
第1プログラミング言語で書かれた実行スタック上の前
のフレームに対する少なくとも1つのポインタを含む。
好ましい実施形態では、データブロックは、実行スタッ
ク上の前のフレームに対するスタックポインタとフレー
ムポインタを格納するが、ここでのスタックポインタと
フレームポインタは、ローカル記憶装置(例えば、スレ
ッドローカル記憶装置)に格納されていたものである。
【0011】もう1つの実施形態では、多重プログラミ
ング言語で書かれた関数のためのフレームを格納する実
行スタックを具体化するためのコンピュータにより具体
化される方法が提供される。第1プログラミング言語で
書かれた関数のための第1フレームは、実行スタック上
に格納することができる。第1関数が第2プログラミン
グ言語で書かれた第2関数を呼び出すとき、実行スタッ
ク上の第1フレームに対する少なくとも1つのポインタ
は、ローカル記憶装置(例えば、スレッドローカル記憶
装置)に格納することができる。この少なくとも1つの
ポインタは、スタックポインタとフレームポインタでよ
い。その後、第1プログラミング言語で書かれた第3関
数が呼び出されたとき、データブロックは、第3関数の
ための第3フレームよりも前に、実行スタック上に格納
することができる。データブロックは、ローカル記憶装
置に格納された、第1フレームに対するこの少なくとも
1つのポインタを実行スタック上に格納することによ
り、データブロックは、実行スタック上の第2フレーム
のまわりに道を提供する。好ましい実施形態において、
第1プログラミング言語は、Javaプログラミング言
語である。
【0012】もう1つの実施形態では、実行スタックを
具体化するためのコンピュータ読取り可能媒体により格
納されるデータ構造が提供される。第1フレームは、第
1プログラミング言語で書かれた第1関数のために実行
スタック上に格納される。第2フレームは、第2プログ
ラミング言語で書かれた第2関数のために実行スタック
上に格納される。実行スタック上の第2フレームよりも
上方にある実行スタック上に、実行スタック上の第1フ
レームに対する少なくとも1つのポインタを含むデータ
ブロックが格納される。好ましい実施形態では、データ
ブロックは、第1フレームに対するスタックポインタと
フレームポインタを格納する。
【0013】本発明の他の特徴と利点は、添付図面に関
連する以下の詳細な説明を参照すれば容易に明らになろ
う。
【0014】
【発明の実施の形態】定義 関数:ソフトウェアルーチン(サブルーチン、プロシー
ジャ、メンバ関数、メソッドとも呼ばれる)。
【0015】フレーム(または起動フレーム、起動レコ
ード):関数の実行のための情報を格納するために、関
数のための実行スタック上に格納されるレコードであ
り、このような情報には状態変数、ローカル変数、オペ
ランドスタックを含むことができる。
【0016】実行スタック:関数のためのフレームを逐
次呼出しの順序で格納するために、プログラム実行中に
利用されるスタック。関数(「コーリー(callee)」)
が呼び出されたとき、この関数のためのフレームが実行
スタック上でプッシュされる。続いて、この関数が終了
すると、フレームはスタックからポップオフし、実行ス
タック最上部のフレームのための関数(「コーラー(ca
ller)」)は実行を再開する。
【0017】オペランドスタック:実行中にマシン語命
令に用るためのオペランドを格納するために利用される
スタック。
【0018】外部コード:特定のプログラミング言語以
外のプログラミング言語(例えば、Javaプログラミ
ング言語)で書かれたコンピュータコード。例えば、J
ava仮想マシンは、C++プログラミング言語で書く
ことができ、Java仮想マシンは、解釈中のプログラ
ムのJavaコードに関して外部コードと見做すことが
できよう。外部コードは固有メソッド(native metho
d)を含む。
【0019】固有メソッド:Javaプログラミング言
語以外のプログラミング言語で書かれた関数。固有メソ
ッドは、固有メソッドが動的にロード・実行されるよう
にするJavaプログラムにより呼び出すことができ
る。その上、固有メソッドは、Javaプログラミング
言語で書かれた関数を呼び出すことができる。 全体像 以下の説明で、本発明は、Javaプログラム(例えば
バイトコード)を実行するJava仮想マシンのための
実行スタックを具体化する好ましい実施形態に関して説
明する。詳細には、Java仮想マシンがC++プログ
ラミング言語で書かれた実例を説明する。しかし、本発
明は、どのような、特定言語、コンピュータアーキテク
チャ、または特定の実行であっても、それらに限定され
ることはない。従って、以下の実施形態の説明は、説明
のためであって、限定するためではない。
【0020】図1は、本発明の実施形態のソフトウェア
を実行するために用いることができるコンピュータシス
テムの実例を説明している。図1は、ディスプレイ3、
スクリーン5、キャビネット7、キーボード9、および
マウス11を含むコンピュータシステム1を示してい
る。マウス11は、グラフィックユーザーインタフェー
スと対話するための1つ以上のボタンを備えることがで
きる。キャビネット7は、本発明と、本発明と共に用い
るデータ等を具体化するコンピュータコードを組み込ん
だソフトウェアプログラムを格納して検索するために利
用できるCD−ROMドライブ13、システムメモリ、
およびハードディスクを内蔵する(図2を参照)。CD
−ROM15は、典型的なコンピュータ読出し可能記憶
媒体として示すが、フロッピーディスク、テープ、フラ
ッシュメモリ、システムメモリ、ハードドライブを含
む、他のコンピュータ読出し可能記憶媒体を利用しても
よい。その上、搬送波(例えばインターネットを含むネ
ットワーク)で表現されるデータ信号は、コンピュータ
読出し可能記憶媒体でよい。
【0021】図2は、本発明の実施形態によるソフトウ
ェアを実行するために用いられるコンピュータシステム
1のシステムブロック図である。図1に示すように、コ
ンピュータシステム1は、モニタ3、キーボード9、お
よびマウス11を含む。コンピュータシステム1は、中
央処理装置51、システムメモリ53、固定記憶装置5
5(例えばハードドライブ)、取外し可能記憶装置57
(例えばCD−ROMドライブ)、ディスプレイアダプ
タ59、サウンドカード61、スピーカー63、および
ネットワークインタフェース65のようなサブシステム
を更に含む。本発明と共に用いるのに適する他のコンピ
ュータシステムは、含まれるサブシステムの増やしたり
減らしたりしてもよい。例えば、もう1つのコンピュー
タシステムは、2個以上のプロセッサ51(即ち多重プ
ロセッサシステム)またはキャッシュメモリを含むこと
ができる。
【0022】コンピュータシステム1のシステムバスア
ーキテクチャを、矢印67で示す。しかし、これらの矢
印は、サブシステムをリンクするのに役立つ何れの相互
接続構成をも説明する。例えば、ローカルバスは、中央
処理装置をシステムメモリとディスプレイアダプタとに
接続するために利用できる。図2に示すコンピュータシ
ステム1は、本発明と共に用いるのに適したコンピュー
タシステムの1つの実例にすぎない。異なる構成のサブ
システムを備える他のコンピュータアーキテクチャを利
用することもできる。
【0023】一般的に、Javaプログラミング言語で
書かれたコンピュータプログラムは、バイトコードまた
はJava仮想マシンの命令にコンパイルされ、次にJ
ava仮想マシンにより実行される。バイトコードは、
解釈のためJava仮想マシンに入力されるクラスファ
イルに格納される。図3は、インタプリタであるJav
a仮想マシンによる実行を通したJavaソースコード
の単一ピースの進行を示す。
【0024】Javaソースコード101は、Java
で書かれた古典的 Hello Worldプログラムを含む。次
に、ソースコードは、ソースコードをバイトコードにコ
ンパイルするバイトコードコンパイラ103に入力され
る。バイトコードは、ソフトウェアによりエミュレート
されたコンピュータにより実行されるので、仮想マシン
の命令である。一般的には、仮想マシン命令は、包括的
(即ち、何れの特定マイクロプロセッサまたはコンピュ
ータアーキテクチャ用にも設計されていな)だが、そう
である必要ではない。バイトコードコンパイラは、Ja
vaプログラム用のバイトコードを含むJavaクラス
ファイル105を出力する。
【0025】Javaクラスファイルは、Java仮想
マシン107に入力される。Java仮想マシンは、J
avaクラスファイル中のバイトコードを解読・実行す
るインタプリタを含む。Java仮想マシンは、インタ
プリタだが、ソフトウェアのマイクロプロセッサまたは
コンピュータアーキテクチャをエミュレートするので、
一般的に仮想マシン(例えば、ハードウェアに存在しな
いマイクロプロセッサまたはコンピュータアーキテクチ
ャ)と称される。
【0026】図4は、Javaランタイムシステムを具
体化した構成要素を示している。Java仮想マシンの
具体化は、Javaランタイムシステムとして知られ
る。Javaランタイムシステム201は、Javaプ
ログラムを実行するために、Javaクラスファイル2
03の入力、標準組込みJavaクラス205、および
固有メソッド207を受取ることができる。標準組込み
Javaクラスは、スレッド、ストリング等のオブジェ
クトのためのクラスでよい。固有メソッドは、Java
プログラミング言語以外のプログラミング言語で書くこ
とができる。固有メソッドは、一般的には、ダイナミッ
クリンクライブラリ(DLL)または共用ライブラリに
格納される。
【0027】Javaランタイムシステムは、オペレー
ティングシステム209とインターフェースをとること
も可能である。例えば、入力/出力関数は、オペレーテ
ィングシステムにより処理することが可能であり、Ja
vaクラスファイル203、標準組込みJavaクラス
205、および固有メソッド207とのインタフェース
をJavaランタイムシステムに提供することを含んで
いる。
【0028】ダイナミッククラスローダとベリファイヤ
211は、オペレーティングシステム209を介して、
Javaクラスファイル203と標準組込みJavaク
ラス205を記憶装置213にロードする。その上、ダ
イナミッククラスローダとベリファイヤは、Javaク
ラスファイル内のバイトコードの正確さを確認すること
が可能であり、検出される何れのエラーも報告する。
【0029】固有メソッドリンカ215は、オペレーテ
ィングシステム209を介して、固有メソッド207に
リンクして、Javaランタイムシステムにつながり、
固有メソッドを記憶装置213に格納する。図示の通
り、記憶装置213は、Javaクラスのためのクラス
とメソッドとの領域と、固有メソッドのための固有メソ
ッド領域とを含むことができる。記憶装置213内のク
ラスとメソッドの領域は、不要部分回収ヒープに格納す
ることができる。新オブジェクトが生成されると、不要
部分回収ヒープに格納される。アプリケーションでない
Javaランタイムシステムは、スペースがもはや利用
されなくなると、不要部分回収ヒープ内のメモリを再利
用する役割を担う。
【0030】図4に示すJavaランタイムシステムの
心臓部には実行エンジン217がある。この実行エンジ
ンは、記憶装置213に格納されている命令を実行し、
ソフトウェア、ハードウェア、またはこれら2つの組合
わせで具体化することができる。実行エンジンは、オブ
ジェクト指向アプリケーションをサポートし、また概念
的には、各Javaスレッドに対して1つのエンジンが
動作する同時動作の多重実行エンジンを備える。実行エ
ンジン217は、支援コード221を利用することもで
きる。支援コードは、例外、スレッド、セキュリティ等
に関連する機能性を提供することができる。
【0031】Javaプログラムが実行されると、関数
は各スレッド内で逐次呼び出される。各スレッドに対し
て、実行を完了していない各関数のためのフレームを格
納する実行スタックがある。フレームは、関数の実行の
ための情報を格納し、このような情報は状態変数、ロー
カル変数、およびオペランドスタックを含むことができ
る。関数が呼び出されると、関数のためのフレームは実
行スタック上でプッシュされる。関数が終了すると、関
数のフレームは実行スタックからポップオフされる。従
って、実行スタックの最上部のフレームに対応する関数
だけが活動状態になり、実行スタックの最上部よりも下
方にあるフレームに対応する関数により、フレームに呼
び出された関数が復帰する(即ち終了する)まで関数の
実行が中断される。
【0032】図5は、実行スタック上に格納される関数
のためのフレームを説明している。実行スタック最上部
にフレーム303を持つ実行スタック301が示されて
おり、フレーム305と307は、それぞれフレーム3
03の下方に格納される。スタックポインタSPは、実
行スタックの最上部を指し示し、一方、フレームポイン
タFPは、実行スタック301最上部のフレームでのフ
レームポインタを指し示す。
【0033】各フレームは、フレームに対応する関数の
ための状態変数、ローカル変数、およびオペランドスタ
ックを含むことを示す。その上、フレームに格納されて
いる最後のアイテムは、矢印309と311で示す通り
の実行スタック上の現行フレームの下方にあるフレーム
におけるフレームポインタを指し示すフレームポインタ
である。
【0034】関数がもう1つの関数を呼び出すとき、先
ずシステムは、実行スタック301上の現在の関数のた
めの復帰アドレスを最初にプッシュし、次に、最近に呼
び出された関数のための新しいフレームをプッシュす
る。このようにして、新しい関数が復帰すると、システ
ムは、実行スタック最上部のフレームをポップし、次に
実行スタックから復帰アドレスをポップオフし、また呼
び出された関数の実行が再開されるように、この復帰ア
ドレスに等しいプログラムカウンタを設定する。従っ
て、そのことが、フレーム305と307が復帰アドレ
スを含む理由であり、また活動フレーム303は復帰ア
ドレスを含まない。しかし、フレーム303に対応する
関数がもう1つの関数を呼び出す場合、復帰アドレス
は、新しい関数のためのフレームが実行スタック上でプ
ッシュされる前に、実行スタック301上でプッシュさ
れることになる。
【0035】フレームポインタにより、システムは実行
スタック上のフレームを正確にトラバースすることがで
きる。例えば、スタックポインタSPとフレームポイン
タFPは、実行スタック最上部のフレームを表す。更
に、フレーム303中のフレームポインタは、実行スタ
ック上の次のフレームを指定する。フレーム303での
フレームポインタ直下のアドレスは、実行スタック上の
次のフレームの始めであり、フレーム303のフレーム
ポインタの内容は、フレーム305である実行スタック
上の次のフレームでの最後のアイテムを指定する。同様
に、フレーム305中のフレームポインタ305は、実
行スタック上の次のフレームの位置を指定する。従っ
て、フレームポインタのチェーンにより、システムは実
行スタック上のフレームをトラバースする(例えば、フ
レームが実行スタックからポップオフした場合)ことが
できる。
【0036】図5は、実行スタックの具体化を示すが、
本発明は、図示の具体化に限定されない。例えば、実行
スタックは、メモリ内で上方に成長することを示してい
るが、スタックはメモリ内で下方にも成長できることが
明らかだろう。更に、各フレームに格納される情報は、
具体化内容に依存して変化してもよい。混合実行スタッ
ク図5に示す実行スタックは、同じプログラミング言語
で書かれた関数に対して良好に機能する。しかし、関数
が多重プログラミング言語で書かれている場合、図5で
示す実行スタックの構造は、幾つかの理由から満足なも
のでない。例えば、別のプログラミング言語で書かれた
フレームのフォーマットは、実質的に異なる場合があ
る。従って、多重プログラミング言語で書かれた関数の
ためのフレーム全体にわたってフレームポインタのチェ
ーンを生成することはできない。他のプログラミング言
語で書かれた関数のためのフレームの正確なサイズまた
は内容も知ることはできない。
【0037】この問題をより鮮明に説明するには、図5
に示す実行スタックを利用する実例を説明するのが有益
だろう。フレーム305と307は、フレーム303の
ための関数とは異なるプログラミング言語で書かれた関
数用であると、しばし仮定してみよう。フレーム303
のための関数が実行中のとき、フレーム305と307
の内容またはサイズは知られていない。従って、フレー
ム303のフレームポインタが、フレーム303(図示
しない)と同じプログラミング言語で書かれた関数のた
めの実行スタック上の前のフレームに設定されていたと
しても、そのフレームがその実行スタックのどこで始ま
るかを知ることは、やはりできない。従って、これらの
問題は、多重プログラミング言語で書かれた関数のため
のフレームを格納する実行スタックの具体化を困難にす
る。本発明は、多重プログラミング言語で書かれた関数
のためのフレームを格納する実行スタックの具体化を提
供するとともに、改善された資源の割当てと、例外処理
とを含む他の利点を提供する。
【0038】図6は、多重プログラミング言語で書かれ
た関数のための実行スタック上にフレームを格納するハ
イレベルのプロセスを示している。図6に示すプロセス
は、ハイレベルにあり、後に続く図面と説明で更に詳細
に述べる。ステップ401で、システムは、1つのプロ
グラミング言語で書かれた第1関数のための実行スタッ
ク上に第1フレームを格納する。
【0039】第1関数が別のプログラミング言語で書か
れた第2関数を呼び出すとき、システムは、ステップ4
03で、実行スタック上の第1フレームに対する1つま
たは複数のポインタをローカル記憶装置に格納する。好
ましい実施形態では、第1関数のプログラミング言語は
Javaプログラミング言語である。各Javaスレッ
ドはそのスレッドローカル記憶装置に関連しており、そ
のため、これらの好ましい実施形態では、ローカル記憶
装置は、第1と第2の関数を実行中のスレッドのための
スレッドローカル記憶装置である。その上、第1フレー
ムに対するスタックポインタとフレームポインタは、ス
レッドローカル記憶装置に格納される。
【0040】ステップ405で、システムは、別のプロ
グラミング言語で書かれた第2関数のための実行スタッ
ク上に第2フレームを格納する。実例として、他のプロ
グラミング言語は、C++プログラミング言語、PAS
CAL、FORTRAN、アセンブリ言語等でもよい。
【0041】第2関数が第1関数のプログラミング言語
で書かれた第3関数を呼び出すとき、システムは、ステ
ップ407において、実行スタック上の第1フレームに
対する1つまたは複数のポインタを含む実行スタック上
にデータブロック(即ちエントリフレーム)を格納す
る。ステップ403で、ローカル記憶装置に格納された
1つまたは複数のポインタは、第2関数のための第2フ
レームよりも上方にある実行スタック上でプッシュされ
るデータブロックにコピーされる。データブロックは、
実行スタック上の第2フレームまわり、またはその全体
にわたって実行スタックをトラバースするためのメカニ
ズムを提供する。図6に示すプロセスは、別のプログラ
ミング言語で書かれた、1つだけの第2関数を示すにす
ぎないが、別の言語で書かれ、第3関数が呼び出される
前に、相互に呼び出す多くの関数があってもよいことを
理解されたい。
【0042】ステップ409では、システムは、第1関
数のプログラミング言語で書かれた第3関数のための実
行スタック上に第3フレームを格納する。従って、実行
スタックは、多重プログラミング言語で書かれた関数の
ためのフレームを格納することができるようになり、実
行スタックをフレームの全域にわたってトラバ−スする
メカニズムを含む。図6に示すプロセスを更に説明する
ために、Javaプログラミング言語で書かれた関数の
ためのフレームを格納する実行スタックと、他のプログ
ラミング言語とを、図7を参照して説明する。
【0043】図7に示す通り、制御フレーム451は、
Javaプログラミング言語で書かれた関数のためのフ
レームと、Javaプログラミング言語以外のプログラ
ミング言語(例えば、C++プログラミング言語)で書
かれた関数のための外部フレームとを格納する。Jav
aフレーム453は、実行スタック最上部に格納され、
Javaフレーム455は実行フレーム上の下方に格納
される。単純化するために、フレームの詳細を示さない
が、好ましい実施形態では、フレームの詳細は図5で示
す通りである。
【0044】エントリフレーム457は、とりわけ、実
行スタック上の前のJavaフレーム459に対するポ
インタであるLAST_JAVA_SPとLAST_J
AVA_FPを格納する実行スタック上に示されてい
る。外部フレーム461は、エントリフレーム457と
Javaフレーム459との間の実行スタック上に示さ
れている。1つまたは複数の外部フレームは、Java
プログラミング言語以外の言語で書かれた関数用であ
る。図示の通り、エントリフレームは、外部フレームま
わりの少なくとも1つのポインタを含むデータブロック
である。
【0045】図7に示す実行スタックを生成したプログ
ラムを実行するタイムラインにおいて、Javaフレー
ム459に対応する関数が最初に実行されている。Ja
vaフレーム459に対応する関数は、別のプログラミ
ング言語で書かれた関数を呼び出す。この関数のための
外部フレームが実行スタック上でプッシュされる前に、
システムはローカル記憶装置内のJavaフレーム45
9に対する少なくとも1つのポインタを格納する。
【0046】その後、外部フレーム461に対応する関
数はJava関数を呼び出す。Java関数の呼出しに
応答して、システムは、エントリフレーム457を、実
行スタック上にプッシュし、ローカル記憶装置に格納さ
れていたJavaフレーム459(この場合、LAST
_JAVA_SPとLAST_JAVA_FP)に対す
るこの少なくとも1つのポインタをそこに格納する。次
に、Javaフレーム455に対応する関数は、Jav
aフレーム453に対応するJava関数を呼び出す。
【0047】本発明をより鮮明に理解するために、図7
の実行スタックに関して説明する4つの異なる動作(ア
クション)がある。図示の通り、システムは、Java
コードから外部コードに入ることができるが、このこと
は、Java関数が別のプログラミング言語で書かれた
外部関数を呼び出したことを意味する。その上、システ
ムは、外部コードからJavaコードに入ることができ
る。Javaフレーム455に対応するJava関数が
復帰すると、システムはJavaコードを出て外部コー
ドに至る。また外部フレーム461に対応する外部関数
が復帰すると、システムは外部コードを出てJavaコ
ードに至る。これら4つのプロセスをそれぞれ、より詳
細に以下説明する。
【0048】外部関数を呼び出すJava関数から開始
する。図8は、Javaコードから外部コードに入るプ
ロセスを示している。ステップ501で、システムは、
現在のスタックポインタSPとフレームポインタFP
を、LAST_JAVA_SPとLAST_JAVA_
FPとしてスレッドローカル記憶装置に格納する。ここ
の所では、Java関数が外部関数を呼び出したことに
留意されたい。スレッドローカル記憶装置に格納されて
いるスタックポインタとフレームポインタは、その後、
これらのポインタを格納するデータブロックまたはエン
トリフレームを利用して、外部フレームまわりをトラバ
ースするのに用いられる。好ましい実施形態は、スレッ
ドローカル記憶装置内のスタックポインタとフレームポ
インタの双方を格納するが、本発明は他の格納位置での
他の、またはもっと少ない数のポインタを格納して利用
するので都合がよい。
【0049】システムは、次に、ステップ503におい
て外部コードを呼び出す。ここの所では、システムは、
実行スタック上に、外部関数のための外部フレームをプ
ッシュする。外部コードを呼び出す前に、システムは、
実行スタック最上部の外部フレームをプッシュする前に
実行スタック上のJava関数のための戻りアドレスを
プッシュする。ひとたび外部コードになると、外部関数
は、Java関数を呼び出す、またはJava関数を呼
び出す別の外部関数を呼び出すこともできる。
【0050】外部関数を呼び出すJava関数を上で説
明した。外部関数からのJava関数の呼出しを以下説
明する。
【0051】図9は、外部コードからJavaコードに
入るプロセスを示している。一般的に、外部関数の戻り
アドレスは、Java関数が呼び出される前に、実行ス
タック上でプッシュされる。ステップ551で、システ
ムは、実行スタック上にエントリフレームまたはデータ
ブロックをプッシュする。次に、スレッドローカル記憶
装置に格納されているLAST_JAVA_SPとLA
ST_JAVA_FPは、ステップ553でエントリフ
レームにコピーされる。LAST_JAVA_SPとL
AST_JAVA_FPポインタは、実行スタック上の
前のJavaフレームを指し示す。当該技術に普通に精
通する当業者には明らかだが、本明細書に図示され、説
明されているプロセスステップは、本発明を説明するた
めに提供されたものであり、ステップの特定順序が何れ
も必ず必要であることを意味するものではない。例え
ば、本発明の実施形態は、エントリフレーム内のポイン
タを、実行スタック上でプッシュする前に、先ず格納す
ることが可能であり、このような実施形態は本明細書に
説明されている発明の範囲に入ることは明らかである。
【0052】ステップ555で、システムは、スレッド
ローカル記憶装置に格納されているLAST_JAVA
_SPとLAST_JAVA_FPをクリアする。スレ
ッドローカル記憶装置内のこれらのポインタは、それら
の値をゼロに設定することにより、あるいは当該技術に
普通に精通する当業者に周知の何れの他の方法でもクリ
アされることができる。好ましい実施形態では、ポイン
タは、Javaコードまたは外部コードがシステム上で
現在実行中かどうかを決定するためにチェックできる
(例えば、ゼロ以外は外部コード、ゼロはJavaコー
ド)ように、ゼロに等しく設定される。
【0053】従来システムで、固有メソッドのための資
源は、一般的には、固有メソッドが呼び出される時点で
割当てられる。Java関数は、複数の固有メソッドを
呼び出すことが多いので、従来の資源割当てでは、結果
として資源の複数割当てと割当て解除になってしまう。
本発明の実施形態を用いると、資源は、Java関数に
入ったときに固有メソッドに割当てられるので、これら
の資源は、Java関数が呼び出す全ての固有メソッド
に対して利用可能である。その上、資源は、Java関
数に入った時点で固有メソッドのために一度割当て、ま
たJava関数が復帰した時点で一度割当て解除を行う
ことができるので、資源の割当て/割当て解除の効率が
上がる。
【0054】ステップ557で、システムは、固有メソ
ッドのために資源を割当て、その資源をスレッドローカ
ル記憶装置に格納する。次にシステムは、ステップ55
9でJavaコードを呼び出す。
【0055】外部関数により呼び出されたJava関数
が復帰したあと、Java関数を呼び出した外部関数を
用いて実行を継続する。図10は、Javaコードを出
て外部コードに至るプロセスを示している。ステップ6
01で、システムは、LAST_JAVA_SPとLA
ST_JAVA_FPを、スレッドローカル記憶装置に
復元する。システムは、エントリフレームに格納されて
いるポインタをスレッドローカル記憶装置に再びコピー
する。よって、外部関数がJava関数をもう一度呼び
出す場合、ポインタは、エントリフレームを設定アップ
するために、スレッドローカル記憶装置で再び利用可能
になる。
【0056】システムは、ステップ603で、固有メソ
ッドのために資源の割当て解除を行う。好ましい実施形
態では、資源は、割当てられた後、スレッドローカル記
憶装置に格納される。ステップ605で、システムは、
実行スタック上の戻りアドレスにより一般的には指定さ
れる外部コードに戻る。
【0057】Java関数により呼び出された外部関数
がひとたび復帰すると、外部関数を呼び出したJava
関数で実行が再開される。図11は、外部コードを出て
Javaコードに至るプロセスを示している。ステップ
651で、システムは、スレッドローカル記憶装置中の
LAST_JAVA_SPとLAST_JAVA_FP
をクリアする。好ましい実施形態において、スレッドロ
ーカル記憶装置に格納されるスタックポインタとフレー
ムポインタは、システムがJava関数を実行中のと
き、ゼロの値に設定され、システムが外部コードを実行
中のときは、ゼロ以外の値に設定される。スタックとフ
レームポインタは、ポインタが実行スタック上の前のJ
avaフレームを指し示すとき、外部コードを実行する
場合はゼロ以外の値になる。
【0058】システムは、ステップ653でJavaコ
ードに戻る。システムは、外部関数がひとたび呼び出さ
れて実行スタック上にプッシュされた戻りアドレスにプ
ログラムカウンタを設定することにより、Javaコー
ドに戻る。
【0059】本発明の実施形態が多重プログラミングコ
ードで書かれた関数のためのフレームを格納する実行ス
タックをどのようにして具体化するかを上記の説明で示
した。Javaプログラミング言語のための関数に説明
の焦点を当てたが、本発明は、どのような特定プログラ
ミング言語にも限定されない。本発明は、多重プログラ
ミング言語で書かれた関数を利用してプログラムを実行
するシステムに適用できるので都合がよい。システムが
実行スタックをトラバースして資源をより効率的に振り
分けることができるようにすることにより、プログラム
をより効率的に実行することができる。例外例外は、並
外れた何かが起こったことを示す信号である。例えば、
例外は、システムがメモリを使い尽くしたこと、または
ファイルのエンドオブファイルに達したことを示すこと
ができる。幾つかの例外は、回復不能状態(例えば、メ
モリを使い尽くした)を、または幾つかの例外は、回復
可能状態(例えば、エンドオブファイル)を示す。
【0060】例外が生成されたとき、Javaランタイ
ムシステムは、一般的には、その例外のための例外ハン
ドラをサーチする。このサーチは、例外が棄てられた関
数内で始まり、次に、実行スタック上の関数内に拡が
る。例外ハンドラが見つかると、この例外ハンドラは、
その例外をキャッチし、別の例外を棄てることを含むこ
とのできる適切な処置をとる。
【0061】実例として、Java仮想マシンがC++
プログラミング言語で書かれた実施形態を説明する。従
って、実行スタックは、C++フレームとJavaフレ
ームを含む。本発明の実施形態を用いると、実行スタッ
ク上の様々なフレームに例外を拡げることができる。本
発明を説明するために、特定の実施形態を説明したが、
本発明は、何れの特定言語または構成にも限定されな
い。図12は、C++フレームとJavaフレームの双
方を含む実行スタックを説明している。C++フレーム
703は、実行スタックの最上部に位置する。C++フ
レーム703に対応するC++関数は、Javaフレー
ム705に対応するJava関数により呼び出される。
先に記載の通り、エントリフレーム707は、システム
がC++フレーム709と711をトラバースしてJa
vaフレーム713に至ることができるようにするた
め、実行スタック上に格納される。
【0062】概念として、C++フレーム703とJa
vaフレーム705間にシールド715が存在する。シ
ールド715は、C++フレーム703において処理さ
れないC++例外をキャッチし、この例外をJavaフ
レーム705に渡す。例外を渡す前に、C++例外をJ
ava例外に変換することが必要になる。図示の通り、
C++フレーム711とJavaフレーム713間にも
シールド716を置くことができる。
【0063】アンシールド(シールドなし)717は、
Javaフレーム705(およびエントリフレーム70
7)とC++フレーム709との間に存在する。アンシ
ールド717は、Javaフレーム705内で処理され
ないJava例外を無視し、これらをC++フレーム7
09に渡す。外部コードを出てJavaコードに至る例
外処理を説明することが有益であると考えられるので、
図12に示す実行スタックを手短かに説明した。
【0064】図13と14は、外部コードを出てJav
aコードに至る例外処理を示している。ステップ801
で、C++例外は棄てられる。C++例外は、当該技術
では周知の、キャッチして適切な例外ハンドラにより処
理することができる。C++例外がステップ803で例
外ハンドラにより処理される場合、システムは例外ハン
ドラの指示通りに実行を継続する。
【0065】ステップ805とその後のステップ80
7、809、811、813、815、817は、図1
2のシールド715に対応する。ステップ805で、シ
ステムは、C++フレーム内で処理されなかった全ての
例外をキャッチする。次にシステムは、ステップ807
において、キャッチされた例外がJava例外であるか
どうかを決定する。換言すれば、システムは、C++例
外をJava例外に変換できるかどうかを決定する。C
++例外がJava例外に変換できない場合、システム
は、ステップ809においてバグエラーメッセージを発
して例外を停止する。
【0066】C++例外がJava例外である場合、シ
ステムは、ステップ811で、実行スタックの最上部か
らC++フレームを取り外す。C++フレームは、例外
を棄てたとき実行中だったC++関数に対応する。シス
テムは、ステップ813で、例外および戻りアドレスを
スレッドローカル記憶装置に格納する。格納されている
戻りアドレスは、Java例外を生成するために利用す
ることができる。
【0067】ステップ815で、システムは、実行スタ
ック上の戻りアドレスを例外フォワダー(forwarder)
に向けたアドレスでパッチする。例外フォワダーは、J
ava例外を生成し、実行スタック上の次のJavaフ
レーム用の例外ハンドラに飛越す役割を担う仮想マシン
の関数(好ましい実施形態ではC++またはアセンブリ
言語で書かれた)の外部コードである。
【0068】ステップ817で、システムは外部コード
に戻る。Javaフレーム705のための戻りアドレス
が、例外フォワダーに照会するために、ステップ815
でパッチを終える時点で、システムは、次に、図14に
示す例外フォワダーを実行する。図14は例外フォワダ
ーの実施形態を示している。ステップ851で、システ
ムは、Java例外を設定アップする。Java例外
は、例外オブジェクトと、例外が棄てられた位置でのプ
ログラムカウンタ(即ち「発行PC」)との双方を含
む。プログラムカウンタは、戻りアドレスから1を引く
だけで、スレッドローカル記憶装置に格納されている戻
りアドレスからた易く生成することができる。説明した
実施形態は、戻りアドレスを格納するが、発行PCもス
レッドローカル記憶装置に格納できることは、簡単に分
かるだろう。
【0069】スレッドローカル記憶装置に格納されてい
る戻りアドレスを利用して、例外フォワダーは、戻りア
ドレスにより指定される方法のための例外ハンドラルー
チンを得ることができる。適切な例外ハンドラが識別さ
れたあと、ステップ855において例外ハンドラへの飛
越しが行われる。よって、C++例外がどのようにして
Java例外として変換・処理されるかを示した。Ja
vaコードを出て外部コードに至る例外を以下説明す
る。
【0070】図15と16は,Javaコードを出て外
部コードに至る例外のプロセスを示している。ステップ
901で、Java例外は棄てられる。例外がステップ
903で現在のJavaフレーム内で処理することがで
きる場合、システムは終了する。例外がこのフレームの
ための例外ハンドラにより処理することができる場合、
システムは、ステップ905において例外ハンドラへ飛
越す。
【0071】Java例外がこのJavaフレームのた
めの例外ハンドラで処理できない場合、システムは、ス
テップ907において実行スタックからJavaフレー
ムを取り外す。次にシステムは、ステップ909におい
て、CPUレジスタに格納されている戻りアドレスのた
めの例外ハンドラを見つける。ステップ911では、シ
ステムは例外ハンドラへ飛越す。この例外ハンドラは、
エントリフレームのための例外ハンドラである。
【0072】図16は、エントリフレームの例外ハンド
ラ用のプロセスを示している。ステップ951で、例外
ハンドラは、スレッドローカル記憶装置での例外をセー
ブする。例外ハンドラは、ステップ953で実行を終え
ると、C++での呼出しの後に実行を続ける。実行がC
++での呼出し後に始まるとき、図12においてアンシ
ールド717として示すアンシールドは、例外がステッ
プ955において未処理であるかどうかを決定する。例
外が未処理であるかどうかを調べるためにローカル記憶
装置をチェックすることにより、例外が未処理であるこ
とが決定される。例えば、例外がスレッドローカル記憶
装置に格納されているかどうかが決定される。例外が未
処理の場合、C++例外は、スレッドローカル記憶装置
に格納されている例外を棄てることにより、ステップ9
57で棄てることができる。よってJava例外は、C
++例外として変換され、再び棄てられている。
【0073】上述の実施形態では、多重プログラミング
言語で書かれた関数のためのフレームを格納する実行ス
タックを具体化するために、情報がスレッドローカル記
憶装置に格納できることを示した。図17は、スレッド
ローカル記憶装置に格納できる情報を示している。この
情報は、他の図に関して上述したものだが、ここに格納
されている情報を参照することは有益だろう。LAST
_JAVA_SP1001とLAST_JAVA_FP
1003は、実行スタック上の、前のJavaフレーム
に対するポインタである。これらのポインタにより、実
行スタックは、他のプログラミング言語で書かれた実行
スタック上のフレームのまわり、またはその全体にわた
ってトラバースすることができる。
【0074】資源1005は、システムが別のプログラ
ミング言語で書かれた関数からJava関数に入ると
き、割当てられる。次に資源は、Java関数、または
その後の何れかのJava関数により呼び出されたどの
ような固有メソッドでも利用できる。
【0075】例外1007と戻りアドレス1009は、
例外が別のプログラミング言語(例えば、C++プログ
ラミング言語)で書かれた関数からJava関数に、ま
たその逆に渡されるようにするために格納される。他の
情報もスレッドローカル記憶装置に格納できる。 結論 以上が本発明の好ましい実施形態の完全な説明だが、代
替案、変更案、同等案を用いることもできる。本発明
は、上記実施形態に適切な変更をすることにより、同程
度に適用可能である。例えば、上記実施形態は、Jav
aフレームを含む混合実行スタックに関するものだった
が、本発明の原理は、他のシステムや言語にもた易く適
用することができる。よって上記説明は、添付請求項の
境界とこれに相当するものの全範囲により限定される、
発明の範囲を制限するものではない。
【図面の簡単な説明】
【図1】本発明の実施形態のソフトウェアを実行するた
めに利用されるコンピュータシステムの実例である。
【図2】図1のコンピュータシステムのシステムブロッ
ク図を示す。
【図3】Javaソースコードプログラムがどのように
して実行されるかを示す。
【図4】Javaランタイムシステムの具体化の構成要
素を示す。
【図5】実行スタック上に格納される関数のためのフレ
ームを説明する。
【図6】多重プログラミング言語で書かれた関数のため
のフレームを格納する実行スタックを具体化するハイレ
ベルのプロセスを示す。
【図7】Javaプログラミング言語と別のプログラミ
ング言語で書かれた関数のためのフレームを格納する実
行スタックを示す。
【図8】Javaコードから外部コードに入るプロセス
を示す。
【図9】外部コードからJavaコードに入るプロセス
を示す。
【図10】Javaコードを出て外部コードに至るプロ
セスを示す。
【図11】外部コードを出てJavaコードに至るプロ
セスを示す。
【図12】C++フレームとJavaフレーム間の例外
シールドと、Javaフレームと別のC++フレーム間
の例外アンシールドとを持つ実行スタックを説明する。
【図13】外部コードを出てJavaコードに至る例外
のプロセスを示す。
【図14】外部コードを出てJavaコードに至る例外
のプロセスを示す。
【図15】Javaコードを出て外部コードに至る例外
のプロセスを示す。
【図16】Javaコードを出て外部コードに至る例外
のプロセスを示す。
【図17】多重プログラミング言語で書かれた関数のた
めのフレームを格納する実行スタックを具体化するため
に、スレッドローカル記憶装置に格納される情報を示
す。
【符号の説明】
1…コンピュータシステム、3…ディスプレイ、5…ス
クリーン、7…キャビネット、9…キーボード、11…
マウス、13…CD−ROMドライブ、15…CD−R
OM、51…中央処理装置(プロセッサ)、53…シス
テムメモリ、55…固定記憶装置、57…取外し可能記
憶装置、59…ディスプレイアダプタ、61…サウンド
カード、63…スピーカー、65…ネットワークインタ
フェース、67…矢印、101…Javaソースコー
ド、103…バイトコードコンパイラ、105,203
…Javaクラスファイル、107…Java仮想マシ
ン、201…Javaランタイムシステム、203…J
avaクラスファイル、205…標準組込みJavaク
ラス、207…固有メソッド、209…オペレーティン
グシステム、213…記憶装置、217…実行エンジ
ン、221…支援コード、303…活動フレーム、30
5,307…フレーム、301…実行スタック、40
1,403,405,407,409,807,80
9,811,813,815,818,851,85
5,901,905,907,909,951,955
…ステップ、451…制御フレーム、453,455,
459,705…Javaフレーム、457…エントリ
フレーム、461…外部フレーム、501,551,5
53,555,603,605,651,653,80
3…ステップ、703,709…C++フレーム、71
6…シールド、1001…LAST_JAVA_SP、
1003…LAST_JAVA_FP、1005…資
源、1007…例外、1009…戻りアドレス。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ロバート グライセマー アメリカ合衆国, カリフォルニア州, メンロパーク, オーク レーン 960, ナンバーエフ (72)発明者 ウールズ ホルツル アメリカ合衆国, カリフォルニア州, ゴリータ, ダヴェンポート ロード 7220, ナンバー105

Claims (28)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータシステムにおいて、複数の
    プログラミング言語で書かれた関数のためのフレームを
    格納する実行スタックを具体化するための方法であっ
    て、 第1プログラミング言語で書かれた第1関数のための実
    行スタック上に第1フレームを格納する工程と、および
    第2プログラミング言語で書かれた第2関数を呼び出す
    前記第1関数に応答して、前記第2関数のための第2フ
    レームよりも前に、データブロックを前記実行スタック
    上に格納する工程であって、前記データブロックは、前
    記第2プログラミング言語で書かれた前の関数のため
    の、前記実行スタック上の前のフレームに対する少なく
    とも1つのポインタを含む前記工程とを含む方法。
  2. 【請求項2】 前記少なくとも1つのポインタは、前の
    スタックポインタと、フレームポインタとを含む請求項
    1に記載の方法。
  3. 【請求項3】 前記第2関数を呼び出す前記第1関数に
    応答して、前記第2プログラミング言語以外のプログラ
    ミング言語で書かれた、前記第2関数により呼び出され
    ることのできる関数のための資源を割当てる工程を更に
    含む請求項1または2に記載の方法。
  4. 【請求項4】 前記第2関数を出た時点で、前記第2プ
    ログラミング言語以外のプログラミング言語で書かれた
    関数のために資源を割当て解除する工程を更に含む請求
    項3に記載の方法。
  5. 【請求項5】 前記第2関数の実行中に呼び出され、前
    記第2関数のための例外ハンドラにより処理されなかっ
    た例外をキャッチする工程を更に含む請求項1〜4のい
    ずれか1項に記載の方法。
  6. 【請求項6】 前記データブロックのための、前記例外
    を処理する例外ハンドラを識別し、前記識別された例外
    ハンドラへ飛び越す工程を更に含む請求項5に記載の方
    法。
  7. 【請求項7】 前記識別された例外ハンドラは、前記例
    外をローカル記憶装置に格納する請求項6に記載の方
    法。
  8. 【請求項8】 前記ローカル記憶装置は、第1と第2の
    関数が実行中のときの現行スレッドと関連する記憶装置
    である請求項7に記載の方法。
  9. 【請求項9】 前記第1関数に戻った時点で、例外が係
    属中であるかどうかを決定するために前記ローカル装置
    をチェックする工程と、例外が係属中なら前記格納され
    ている例外を棄てる工程とを更に含む請求項7または8
    に記載の方法。
  10. 【請求項10】 前記格納されている例外を、前記第1
    プログラミング言語のためのフォーマットに変換する工
    程を更に含む請求項9に記載の方法。
  11. 【請求項11】 前記第2プログラミング言語は、Ja
    vaプログラミング言語である請求項1〜10のいずれ
    か1項に記載の方法。
  12. 【請求項12】 複数のプログラミング言語で書かれた
    関数のためのフレームを格納する実行スタックを具体化
    するコンピュータプログラムプロダクトであって、 第1プログラミング言語で書かれた前記第1関数のため
    の第1フレームを前記実行スタック上に格納するコンピ
    ュータコードと、 第2プログラミング言語で書かれた第2関数を呼び出す
    前記第1関数に応答して、前記第2関数のための第2フ
    レームよりも前に、データブロックを前記実行スタック
    上に格納するコンピュータコードであって、前記データ
    ブロックは、前記第2プログラミング言語で書かれた前
    の関数のための前記実行スタック上の前記前のフレーム
    に対する少なくとも1つのポインタを含み、 前記コンピュータコードを格納するコンピュータ読取り
    可能媒体とを含むコンピュータプログラムプロダクト。
  13. 【請求項13】 コンピュータ読取り可能媒体は、CD
    −ROM、フロッピーディスク、テープ、フラッシュメ
    モリ、システムメモリ、ハードディスク、および搬送波
    で表現されるデータ信号から構成される群から選択され
    る請求項12に記載のコンピュータプログラムプロダク
    ト。
  14. 【請求項14】 複数のプログラミング言語で書かれた
    関数のためのフレームを格納する実行スタックを具体化
    するためのコンピュータシステムであって、 プロセッサと、 前記実行スタックを格納するプロセッサに結合されてい
    るメモリと、および第1プログラミング言語で書かれた
    第1関数のための第1フレームを前記実行スタック上に
    格納し、第2プログラミング言語で書かれた第2関数を
    呼び出す前記第1関数に応答して前記第2プログラミン
    グ言語で書かれた前の関数のための前記実行スタック上
    の前のフレームに対する少なくとも1つのポインタを含
    むデータブロックを、前記第2関数のための第2フレー
    ムよりも前に、前記実行スタック上に格納する、前記プ
    ロセッサ上で動作するコンピュータプログラムとを含む
    コンピュータシステム。
  15. 【請求項15】 コンピュータシステムにおいて、複数
    のプログラミング言語で書かれた関数のためのフレーム
    を格納する実行スタックを具体化するための方法であっ
    て、 第1プログラミング言語で書かれた第1関数のための第
    1フレームを前記実行スタック上に格納する工程と、お
    よび第2プログラミング言語で書かれた第2関数を呼び
    出す前記第1関数に応答して前記実行スタック上の前記
    第1フレームに対する少なくとも1つのポインタをロー
    カル記憶装置に格納し、前記第2関数のための第2フレ
    ームを前記実行スタック上に格納する工程とを含む方
    法。
  16. 【請求項16】 前記少なくとも1つのポインタは、前
    のスタックポインタとフレームポインタを含む請求項1
    5に記載の方法。
  17. 【請求項17】 前記ローカル記憶装置は、前記第1と
    第2の関数が実行中のときの現行スレッドに関連する記
    憶装置である請求項15または16に記載の方法。
  18. 【請求項18】 前記第2関数を出た時点で前記ローカ
    ル記憶装置に格納されている前記少なくとも1つのポイ
    ンタをクリアする工程を更に含む請求項15〜17のい
    ずれか1項に記載の方法。
  19. 【請求項19】 前記第2関数のための例外ハンドラに
    より処理されなかった前記第2関数の実行中に呼び出さ
    れた例外をキャッチする工程を更に含む請求項15〜1
    8のいずれか1項に記載の方法。
  20. 【請求項20】 前記例外が前記第1プログラミング言
    語に適切であるかどうかを決定する工程を更に含む請求
    項19に記載の方法。
  21. 【請求項21】 前記例外を前記ローカル記憶装置に格
    納する工程を更に含む請求項19または20に記載の方
    法。
  22. 【請求項22】 前記実行スタック上の戻りアドレス
    を、例外フォワダーのアドレスでパッチする工程を更に
    含み、前記フォワダーは、前記第1関数のための前記例
    外を処理する例外ハンドラを識別し、前記識別された例
    外ハンドラへ飛越す請求項19〜21のいずれか1項に
    記載の方法。
  23. 【請求項23】 前記例外フォワダーは、前記例外を前
    記第1プログラミング言語のためのフォーマットに変換
    する請求項22に記載の方法。
  24. 【請求項24】 前記第1プログラミング言語で書かれ
    た第3関数を呼び出す前記第2関数に応答して、前記ロ
    ーカル記憶装置に格納されている前記第1フレームに対
    する少なくとも1つのポインタを含む前記データブロッ
    クを、前記第3関数のための第3フレームよりも前に、
    前記実行スタック上に格納する工程を更に含む請求項1
    〜23のいずれか1項に記載の方法。
  25. 【請求項25】 前記第3関数を呼び出す前記第2関数
    に応答して、前記第1プログラミング言語以外のプログ
    ラミング言語で書かれた、前記第3関数により呼び出さ
    れる関数のために資源を割当てる工程と、および前記第
    3関数を出た時点で前記第1プログラミング言語以外の
    プログラミング言語で書かれた関数のために資源を割当
    て解除する工程とを更に含む請求項24に記載の方法。
  26. 【請求項26】 前記第3関数のための例外ハンドラに
    より処理されなかった前記第3関数の実行時に呼び出さ
    れた例外をキャッチする工程を更に含む請求項24の方
    法。
  27. 【請求項27】 複数のプログラミング言語で書かれた
    関数のためのフレームを格納する実行スタックを具体化
    するコンピュータプログラムプロダクトであって、第1
    プログラミング言語で書かれた第1関数のための第1フ
    レームを前記実行スタック上に格納するコンピュータコ
    ードと、 第2プログラミング言語で書かれた第2関数を呼び出す
    前記第1関数に応答して、前記実行スタック上の前記第
    1フレームに対する少なくとも1つのポインタをローカ
    ル記憶装置に格納し、また前記第2関数のための第2フ
    レームを前記実行スタック上に格納するコンピュータコ
    ードと、および前記コンピュータコードを格納するコン
    ピュータ読み取り可能媒体とを含むコンピュータプログ
    ラムプロダクト。
  28. 【請求項28】 実行スタックを具体化するためのコン
    ピュータ読み取り可能媒体により格納されるデータ構造
    であって、 前記コンピュータ読み取り可能媒体により前記実行スタ
    ック上に格納され、第1プログラミング言語で書かれた
    第1関数のための第1フレームと、 前記コンピュータ読み取り可能媒体により前記第1フレ
    ームの上方にある前記実行スタック上に格納され、第2
    プログラミング言語で書かれた第2関数のための第2フ
    レームと、および前記コンピュータ読み取り可能媒体に
    より前記第2フレームの上方にある前記実行スタック上
    に格納され、前記実行スタック上の前記第1フレームに
    対する少なくとも1つのポインタを含むデータブロック
    とを含むデータ構造。
JP10319739A 1997-10-06 1998-10-06 混合実行スタックおよび例外処理 Pending JPH11237990A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/944,335 US6009517A (en) 1997-10-06 1997-10-06 Mixed execution stack and exception handling
US08/944335 1997-10-06

Publications (1)

Publication Number Publication Date
JPH11237990A true JPH11237990A (ja) 1999-08-31

Family

ID=25481215

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10319739A Pending JPH11237990A (ja) 1997-10-06 1998-10-06 混合実行スタックおよび例外処理

Country Status (6)

Country Link
US (3) US6009517A (ja)
EP (2) EP1698974A3 (ja)
JP (1) JPH11237990A (ja)
KR (1) KR100640314B1 (ja)
CN (1) CN1108560C (ja)
DE (1) DE69835062T2 (ja)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6865734B2 (en) * 1997-10-06 2005-03-08 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
US6327702B1 (en) * 1998-12-30 2001-12-04 Microsoft Corporation Generating a compiled language program for an interpretive runtime environment
GB2345355A (en) 1998-12-30 2000-07-05 Ibm Garbage collection in a Java virtual machine
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
US6886094B1 (en) * 2000-09-28 2005-04-26 International Business Machines Corporation Apparatus and method for detecting and handling exceptions
US6912647B1 (en) 2000-09-28 2005-06-28 International Business Machines Corportion Apparatus and method for creating instruction bundles in an explicitly parallel architecture
US6883165B1 (en) 2000-09-28 2005-04-19 International Business Machines Corporation Apparatus and method for avoiding deadlocks in a multithreaded environment
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
DE102004051824A1 (de) * 2004-10-25 2006-05-04 Giesecke & Devrient Gmbh Übergabe von Variablen
DE102004051823A1 (de) * 2004-10-25 2006-05-04 Giesecke & Devrient Gmbh Übergabe von Variablen zwischen Interpreter-basierten und nativen Programmcodeteilen
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
US9436475B2 (en) * 2012-11-05 2016-09-06 Nvidia Corporation System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor 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
MX2020002104A (es) * 2017-08-24 2020-09-18 Lutron Tech Co Llc Seguridad de pilas para operaciones definidas independientemente.
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)

* Cited by examiner, † Cited by third party
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
KR100513138B1 (ko) * 1996-01-24 2005-09-07 선 마이크로시스템즈 인코퍼레이티드 네트워크 또는 로컬 메모리로부터 수신된 명령 세트를실행하는 프로세서 및 컴퓨터 시스템
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

Also Published As

Publication number Publication date
KR19990036883A (ko) 1999-05-25
EP1698974A3 (en) 2008-04-16
CN1108560C (zh) 2003-05-14
US6415381B1 (en) 2002-07-02
DE69835062D1 (de) 2006-08-10
EP0911726A3 (en) 2001-08-29
KR100640314B1 (ko) 2007-03-02
DE69835062T2 (de) 2007-05-16
CN1234548A (zh) 1999-11-10
USRE39519E1 (en) 2007-03-13
EP0911726A2 (en) 1999-04-28
EP0911726B1 (en) 2006-06-28
EP1698974A2 (en) 2006-09-06
US6009517A (en) 1999-12-28

Similar Documents

Publication Publication Date Title
US6415381B1 (en) Mixed execution stack and exception handling
US6381737B1 (en) Automatic adapter/stub generator
US5628016A (en) Systems and methods and implementing exception handling using exception registration records stored in stack memory
US6349408B1 (en) Techniques for implementing a framework for extensible applications
US8307352B2 (en) Classpath optimization in a Java runtime environment
US6851109B1 (en) Process and system for dynamically compiling a partially interpreted method
JP2520543B2 (ja) プログラムの実行を管理する方法及びシステム
US6886094B1 (en) Apparatus and method for detecting and handling exceptions
EP0547840A2 (en) Event handling in a high level programming language environment
US6295642B1 (en) Method and apparatus for partial just in time compiling in a data processing system
US7114152B2 (en) Method, apparatus, and program to determine the mutability of an object at loading time
US8607098B2 (en) Generating appropriately sized core files used in diagnosing application crashes
JPH11327916A (ja) コンパイル済コ―ドにおけるダイナミッククラス初期化チェックのコスト低減技術
JP2000172512A (ja) バイトコ―ドを実行するための方法およびデ―タ処理システム
GB2365553A (en) Trace information in a virtual machine
US6523168B1 (en) Reduction of object creation during string concatenation and like operations that utilize temporary data storage
US6385764B1 (en) Method and apparatus for improving invocation speed of Java methods
US8903776B2 (en) Caching socket connections while ensuring that there are file descriptors available for the applications
US6779188B1 (en) Apparatus and method for improved devirtualization of method calls
JPH05250182A (ja) プログラム条件処理
US6457111B1 (en) Method and system for allocation of a persistence indicator for an object in an object-oriented environment
US6978448B1 (en) Method and apparatus for rewriting bytecodes to minimize runtime checks
US6748503B1 (en) System and method facilitating unmanaged code participation in garbage collection
JP2001117759A (ja) プラグ可能なバーチャル・マシンをインプリメントする技術

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20051005

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081021

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090317