(57)【要約】ソフトウェアトラップ方法をサポートする仮想マシン命令を処理するシステム及び方法である。アプリケーションプログラミングインターフェース（ＡＰＩ）は、再帰的仮想マシン命令の処理を仮想マシンハードウェアから削除し、代わりに再帰的仮想マシン命令を、ソフトウェアを使用して処理するようなソフトウェアトラップのための追加の機能を規定する。該追加の機能は、再帰的仮想マシン命令を処理するためのコンテキストのコンフィギュレーション（該コンフィギュレーションは上記仮想マシン命令がＣＰＵレジスタにアクセスして、必要に応じて変数の値を取り込み及び変更するのを可能にする）、再帰的仮想マシン命令の処理が完了した場合の上記コンフィギュレーションされたコンテキストの解放、及び非再帰的仮想マシン命令の処理のために仮想マシンへの制御の返還を含む。
2005504376.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン命令を処理する方法において、
パラメータを初期化して前記仮想マシン命令のうちの特定の特徴の組を持つ部分集合を識別するステップと、
前記仮想マシン命令のうちの前記識別された部分集合のメンバに出会うまで、一連の前記仮想マシン命令をプロセッサにより実行可能なネイティブ命令に翻訳するステップと、
前記仮想マシン命令のうちの前記識別された部分集合のメンバに出会った場合に、前記一連の仮想マシン命令の翻訳を中断するステップと、
インターフェースを実施化するステップであって、該インターフェースが、
前記仮想マシン命令のうちの前記識別された部分集合の前記メンバにより表されるネイティブプロセッサ命令を実行する前にプリアンブルを実行し、
前記プロセッサから、前記仮想マシン命令のうちの前記識別された部分集合の前記メンバにより表される前記命令に対応するネイティブ機能を取り込み、
前記取り込まれたネイティブ命令を実行し、
前記仮想マシン命令のうちの前記識別された部分集合の前記メンバにより表される前記ネイティブ命令を実行した後にポスタンブルを実行し、
仮想マシンにおいて前記一連の仮想マシン命令の翻訳を再開し、ここで、前記仮想マシン命令における前記識別された部分集合の他のメンバに出会うまで実行を継続する、
ような一群のネイティブプロセッサ命令を規定するようなステップと、
前記一群のネイティブプロセッサ命令を実行するステップと、
を有することを特徴とする方法。
【請求項２】
請求項１に記載の方法において、
メソッドを構成する取り込まれたネイティブ命令を実行する前にポスタンブルを実行するステップであって、該ポスタンブルが前記プロセッサにおけるレジスタ内の変数の値を変更して、前記メソッドを実行するために要するコンテキスト変更を実施するようなネイティブ命令を有するステップと、
メソッドを構成する取り込まれたネイティブ命令を実行した後にプリアンブルを実行するステップであって、該プリアンブルが、前記プロセッサにおけるレジスタからの値を前記メソッドが実行された後に実行されるネイティブ命令に対しアクセス可能な変数に書き込むネイティブ命令を有するようなステップと、
を更に有していることを特徴とする方法。
【請求項３】
請求項１に記載の方法において、前記プリアンブル及び前記ポスタンブルが前記仮想マシンにより発生されることを特徴とする方法。
【請求項４】
請求項１に記載の方法において、前記プリアンブル及び前記ポスタンブルがプロセッサメモリから取り込まれることを特徴とする方法。
【請求項５】
請求項１に記載の方法において、前記プリアンブルは前記プロセッサにおけるレジスタからの値を、前記仮想マシン命令のうちの前記識別された部分集合により表される命令に対してアクセス可能な変数に書き込むようなネイティブ命令を有していることを特徴とする方法。
【請求項６】
請求項１に記載の方法において、前記ポスタンブルは前記プロセッサにおけるレジスタ内の変数の値を、前記仮想マシン命令のうちの前記識別された部分集合により表される命令に従って変更するようなネイティブ命令を有していることを特徴とする方法。
【請求項７】
請求項１に記載の方法において、前記プリアンブル及び前記ポスタンブルが、前記仮想マシン命令のうちの前記識別された部分集合の前記メンバと関連する競合する命令をオーバーライドすることを特徴とする方法。
【請求項８】
請求項１に記載の方法において、前記プリアンブル及び前記ポスタンブルが、前記仮想マシン命令のうちの前記識別された部分集合の前記メンバと関連する競合する命令を変更することを特徴とする方法。
【請求項９】
請求項１に記載の方法において、更に戻りサブルーチンを開始するステップを有し、該戻りサブルーチンが、
前記プリアンブル及びポスタンブルによりアクセスされた前記プロセッサ内のレジスタを解放するステップと、
前記仮想マシンに、前記一連の仮想マシン命令における或る位置において翻訳を再開するよう指示するステップと、
を有していることを特徴とする方法。
【請求項１０】
仮想マシン命令を処理する方法において、
中央処理ユニット内に環境をコンフィギュレーションするステップと、
一連のネイティブプロセッサ命令を規定するようなインターフェースを実施化するステップであって、該一連のネイティブプロセッサ命令が、
前記仮想マシン命令により表される前記ネイティブプロセッサ命令を実行する前にプリアンブルを実行するステップ、
前記プロセッサから、前記仮想マシン命令により表される命令に対応するネイティブ機能を取り込むステップ、
前記取り込まれたネイティブ命令を実行するステップ、
前記仮想マシン命令により表される前記ネイティブ命令を実行した後にポスタンブルを実行するステップ、
及び前記コンフィギュレーションされた環境を解放するステップ、
を有するようなステップと、
前記一連のネイティブプロセッサ命令を実行するステップと、
を有することを特徴とする方法。
【請求項１１】
仮想マシン命令を処理する装置において、
ネイティブ命令セットを有し、ネイティブ命令を実行するように構成されたプロセッサと、
仮想マシン命令を記憶するように構成された命令メモリと、
前記命令メモリから仮想マシン命令を取り込むように構成されると共に、取り込まれた仮想マシン命令を前記プロセッサにより実行可能なネイティブ命令に翻訳するように構成された仮想マシンであるような前置プロセッサと、
前記命令メモリと前記プロセッサとの間に配されると共に、前記仮想マシン命令により表される命令に対してアクセス可能なプロセッサユニット内の変数の値を書くようなサブルーチンを開始し、前記仮想マシン命令により表される前記命令に対応するようなネイティブサブルーチンコールを発し、前記変数の値を前記仮想マシン命令に従って変更し、前記前置プロセッサに制御を返すように構成されたインターフェースと、
を有していることを特徴とする装置。
【請求項１２】
仮想マシン命令により呼び出されたネイティブプロセッササブルーチンを実行する方法において、
前記呼び出されたサブルーチンを実行する前にネイティブ命令のプリアンブルの群を実行するステップであって、前記プリアンブルが前記プロセッサ内のレジスタからの値を前記呼び出されたサブルーチンに対してアクセス可能な変数に書き込むように構成されているようなステップと、
前記呼び出されたサブルーチンを実行した後にネイティブ命令のポスタンブルの群を実行するステップであって、前記ポスタンブルが前記プロセッサにおけるレジスタ内の変数の値を前記呼び出されたサブルーチンに従って変更するように構成されているようなステップと、
を有することを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広くはコンピュータプログラミング言語に係り、更に詳細には仮想マシン言語の翻訳及び実行に関する。
【背景技術】
【０００２】
コンピュータプログラミング言語は、コンピュータが実行する命令を表すような人が読み取り可能なソースコードからなるアプリケーションを作成するために使用される。しかしながら、コンピュータが命令を理解することができる前に、上記ソースコードはコンピュータが読み取り可能な二進マシンコードに翻訳されねばならない。
【０００３】
Ｃ、Ｃ＋＋又はコボルのようなプログラミング言語は、典型的には、ソースコードからアセンブリ言語を発生し、次いで該アセンブリ言語をマシンコードに変換されるマシン言語に翻訳するためにコンパイラを使用している。このように、ソースコードの最終的な翻訳は、実行時の前に生じる。異なるコンピュータは異なるマシン言語を必要とするので、例えばＣ＋＋で書かれたプログラムは、該プログラムが書かれた特定のハードウェアプラットフォーム上でのみ動作することができる。
【０００４】
解釈（interpreted）プログラミング言語は、複数のハードウェアプラットフォーム上で動作するようなソースコードを用いてアプリケーションを作成するように設計されている。ジャバ（登録商標）は、実行時前に“バイトコード”又は“仮想マシン言語”として知られている中間言語に変換されるようなソースコードを発生することによりプラットフォームからの独立性を達成した解釈プログラミング言語である。実行時においては、上記バイトコードは、米国特許第4,443,865号に開示されているように、インタープリタソフトウェアを介してプラットフォームに適したマシンコードに翻訳される。各バイトコードを解釈するために、インタープリタソフトウェアは“取り込み、解読及びディスパッチ”（ＦＤＤ）なる一連の動作を実行する。各バイトコード命令に対して、インタープリタソフトウェアは、ネイティブな中央処理ユニット（ＣＰＵ）命令で表された対応する実行プログラムを含んでいる。インタープリタソフトウェアは、ＣＰＵにメモリから仮想マシン命令を取り込ませ又は読み込ませ、該バイトコード命令のための実行プログラムのＣＰＵアドレスを解読させ、ＣＰＵの制御を該実行プログラムに移すことによりディスパッチさせる。斯かる解釈処理は時間が掛かるものであり得る。
【０００５】
国際特許出願公開第WO9918484号に開示されているように、メモリとＣＰＵとの間に前置プロセッサ（仮想マシンインタープリタ（ＶＭＩ））を追加することにより、仮想マシン命令の処理が改善される。本質的に、仮想マシンは物理的構造ではなく、むしろ、当該ハードウェアプラットフォーム用のバイトコードをＶＭ又はＣＰＵ内に記憶された対応するネイティブなマシン言語命令を選択することにより解釈するような自立型（self-contained）動作環境である。この場合、上記ネイティブな命令は当該ハードウェアプラットフォームのＣＰＵに供給されると共に、該ＣＰＵにおいて連続的に実行される。典型的な仮想マシンは、ＦＤＤ系列の動作を実行するためにバイトコード当たり（該バイトコードの品質及び複雑さに依存する）２０ないし６０サイクルの処理時間を必要とする。
【０００６】
処理時間の更なる低減は、国際特許出願公開第WO9918484号及び第WO9918486号に開示されているように、ハードウェアアクセラレータを実施化することにより達成することができる。先ず、ＶＭＩがメモリからバイトコードを読み込む（取り込む）。次に、ＶＭＩは該取り込まれたバイトコードの複数の特性（プロパティ）をルックアップする（解読する）。ＶＭＩによりアクセスされた上記特性のうちの１つは、当該バイトコードが単純か又は複雑かを示し、これが、当該ＶＭＩが該バイトコードをハードウェアで翻訳することが可能かを決定する。ＶＭＩは単純なジャバ（登録商標）のバイトコードをネイティブなＣＰＵ命令の特化及び最適化されたシーケンスに変換し、次いで、これら命令が該ＣＰＵにより取り込まれ、実行される。ＣＰＵが命令を実行している間に、ＶＭＩは次のバイトコードを取り込み、ＣＰＵ命令に変換する。ＶＭＩは簡単なバイトコードは１ないし４サイクル内で処理することができる。バイトコードが複雑であると該コードの特性が示す場合は、ＶＭＩはネイティブなＣＰＵ命令の汎用的シーケンスを発生し、これにより、“ソフトウェアトラップ”を実施し、該トラップは上記複雑なバイトコードを解釈及び実行のためにソフトウェアに向かわせる。複雑なバイトコードに出くわすと、ＶＭＩはＣＰＵに対して、対応するネイティブな機能、即ち当該ＣＰＵ内に存在するマシンコードサブルーチン、を実行させるようなマシンコード命令を送出する。これに応答して、ＣＰＵは、前のバイトコード翻訳の結果としてＶＭＩにより発生されたネイティブ命令の実行を中断して、上記複雑なバイトコードにより呼び出されたネイティブ機能を実行する。ＶＭＩは自身の出力バッファからの更新された取り込みの検出を待ち、次いで、バイトコードのシーケンスの翻訳に戻る。上記ＶＭＩは複雑なバイトコードを命令毎に翻訳するというよりは、既存のネイティブ機能にアクセスするが、該ＶＭＩはＦＤＤ時間の効果を略零サイクルに低減する。何故なら、各ソフトウェアトラップのＶＭＩ処理（５〜２０サイクル）は、他のバイトコードのＣＰＵ実行と同時に生じるからである。
【０００７】
一連のバイトコードを解釈している間に、仮想マシンは“再帰的”であるような複雑なバイトコードに出会う可能性がある。再帰的バイトコード（ＲＢＣ）を実行する場合には困難さが生じる。何故なら、各ＲＢＣは、最終的にメソッド呼び出し（method call）となるようなネイティブ機能を呼び出すからである（即ち、当該ＶＭＩはジャババイトコードの他のシーケンスに関して再起動される）。このように、他のシーケンスからのバイトコードを解読するために、ＲＢＣにより呼び出された上記ネイティブ機能はＣＰＵレジスタに記憶された変数の値にアクセスしなければならない。ネイティブ機能は、通常は（常にとは限らない）、以下で“プリアンブル”及び“ポスタンブル”と呼ぶような標準の命令の組を含む。該標準のプリアンブルは、サブルーチンが実行される前に、幾つかの又は全てのＣＰＵレジスタの内容を待避するように設計されている。待避される上記内容の幾つかは、当該ネイティブ機能の実行の間に変更される必要があり得るような変数（当該仮想マシンを再起動するためのスタックポインタ及び戻りアドレス等の）の値に関するものである。しかしながら、これらの変数は通常は当該ＲＢＣにより意図されるネイティブ機能内ではアクセス可能ではない。何故なら、ＲＢＣメソッド呼び出しは、ＣＰＵレジスタにアクセスする必要があるマシンコードというよりは、プログラミング言語のソースコードで規定されているからである。ＲＢＣメソッド呼び出しはＣＰＵレジスタにアクセスすることができないので、標準サブルーチンポスタンブルは、当該ＲＢＣメソッド呼び出しにより変更された変数の値をＣＰＵレジスタに書き戻すことができない。言い換えると、再帰的バイトコードにより呼び出されたサブルーチンは、適切に実行することができない。何故なら、ＲＢＣサブルーチンはＣＰＵレジスタに記憶された変数に、コンテキスト設定の欠乏（プリアンブル又はポスタンブルが無い）により、又は呼び出されるネイティブ機能との互換性のないコンテキスト設定の関連付けの何れかにより、アクセスすることができないからである。この問題に、ＲＢＣサブルーチンの変数の値を書き込み及び変更するためのアセンブリ言語を発生するような手でコード化されたソフトウェアを実施することにより対処することもできる。しかしながら、この方法は、複雑な開発努力を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
このように、再帰的バイトコードにより意図される命令を正確に且つ効率的に実行し、それでいて実施化が極めて容易であるような解釈プログラミング言語のシステムに対する要求が存在する。
【課題を解決するための手段】
【０００９】
本発明は、再帰的バイトコードにより呼び出されるネイティブ機能に対してプリアンブル及びポスタンブルを供給すると共に斯かるネイティブ機能を実行するような特別な機能を規定することにより上記要求を満たすものである。上記プリアンブル及びポスタンブルは、ネイティブ機能に関連する標準の如何なるプリアンブル及びポスタンブルも置き換え（オーバーライドし）又は変更すると共に、上記ネイティブ機能が所要のＣＰＵレジスタの内容にアクセスし及び斯かる内容を変更するのを可能にする。他の実施例においては、如何なる複雑なバイトコードに対しても、特別な機能をプロセッサメモリから取り込むか又は発生することができる。これにより、本発明は正確さ及び速度を維持する一方、ソフトウェアトラップ又は“ＶＭＩ加速ハードウェア”方法の実施化を簡素化する。
【００１０】
更に詳細には、本発明はＶＭＩサポートをアプリケーションプログラミングインターフェース（ＡＰＩ）の形で提供する。ＶＭＩが一連のバイトコードを解釈及び実行している間に再帰的バイトコードに出くわすと、本発明のＶＭＩサポートソフトウェアは、該再帰的バイトコードにより呼び出されたトップレベルサブルーチンを追加のプリアンブル及び追加のポスタンブルでカプセル封止する。本発明の上記追加のプリアンブルは、当該サブルーチンが呼び出された場合にＣＰＵレジスタ内に含まれる変数の値を操作し、これにより、ＣＰＵが、これらの値を当該呼び出されたサブルーチン内でアクセス可能な変数に書き込むようにさせる。このようにして、呼び出されたサブルーチンは上記変数の値を変更することができる。標準のポスタンブルの後に実行されて、本発明の上記追加のポスタンブルは、ＣＰＵに、変更された変数の値を取り込ませ、斯かる値をＣＰＵレジスタに書き込ませる。従って、上記の変更された変数は、ＣＰＵが後続のバイトコード翻訳から生じるネイティブ命令の実行に戻る場合に利用可能となる。
【００１１】
簡単に述べると、本発明は仮想マシン命令を処理する方法及びシステムを含み、これら命令は本発明の実施例ではジャバ（登録商標）により発生される。プログラミングレベルにおいては、ジャバ（登録商標）ソースコードはバイトコードと呼ばれる中間言語にコンパイルされる。バイトコードは、プロセッサにより実行するために仮想マシンにより解釈することができるような、仮想マシン命令からなる。本発明の実施例によれば、実行時に仮想マシン（実施例では、ＶＭＩ）は初期化される。全てのソフトウェアトラップに対するエントリアドレスを含むようなテーブルがコンパイルされ、その場合に、斯かるソフトウェアトラップは特定の複雑なバイトコードの処理をＶＭハードウェアから除去し、代わりに複雑なバイトコードを、ソフトウェアを用いて処理する。パラメータが初期化され、これらパラメータはバイトコードを各バイトコードの特徴に適した処理方法に従って分類する。例えば、バイトコードは簡単、複雑又は再帰的（ＲＢＣ）として特徴付けることができる。再帰的バイトコードは、第２シーケンスのバイトコード内の１以上のバイトコードを実行し得るサブルーチンを呼び出すと共に第１シーケンスのバイトコードに戻るような、第１シーケンスのバイトコード内の仮想マシン命令である。再帰的ジャババイトコードの例は、INVOKESTATIC及びNEWを含む。ＲＢＣを処理するようにコンフィギュレーションされたソフトウェアトラップには、適切なプリアンブル及びポスタンブルが設けられる。
【００１２】
ＶＭＩは、一連のバイトコードの各々を１以上のネイティブ命令に翻訳する。ＲＢＣに出くわすと、ＶＭＩは当該シーケンスのバイトコードの翻訳を中断し、該ＲＢＣを適切なソフトウェアトラップを介して処理する。通常は、当該ソフトウェアトラップは、上記ＲＢＣの仮想マシン命令に対応するネイティブ機能（又は複数の機能）を取り出す。本発明のアプリケーションプログラミングインターフェース（ＡＰＩ）は、プリアンブルを実行し、上記ＲＢＣに対応するネイティブ機能を呼び出し、ポスタンブルを実行するような適切なサブルーチンを規定する。上記プリアンブルは、上記ＲＢＣにより呼び出されるネイティブ機能（又は複数の機能）の実行の前に実行される。上記ポスタンブルは、上記ＲＢＣにより呼び出されるネイティブ機能（又は複数の機能）の実行の後で、且つ、当該ＲＢＣネイティブ機能（又は複数の機能）における全てのRETURNステートメントの後で実行される。当該ＲＢＣにより呼び出されたサブルーチンが、標準のプリアンブル及び／又は標準のポスタンブルを含んでいる場合は、本発明のプリアンブルが優先し、典型的には上記標準のプリアンブルを実行する前に実行され、また、本発明のポスタンブルが優先し、典型的には上記標準のポスタンブルの実行の後に実行される。他の例として、本発明のプリアンブル及びポスタンブルは、標準のプリアンブル又は標準のポスタンブルに各々含まれる１以上の命令を、物理的に変更し又は書き換えることもできる。本発明の実施例の或る見地によれば、上記プリアンブルは、ＲＢＣにより呼び出されるサブルーチンにアクセス可能な変数に値を書き込む。本発明のポスタンブルは、呼び出されたサブルーチンにより変更された変数の値を、これら変数を含むＣＰＵレジスタに書き戻す。次いで、上記ＡＰＩにより規定されたサブルーチンは、前記シーケンスのバイトコードの翻訳処理を再開し、該翻訳処理は他のＲＢＣに出会うまで継続するか、又は、さもなければ該翻訳処理は終了する。他の例として、当該ＡＰＩにより指定されたサブルーチンは、ＶＭＩのコンテキストに対するネイティブ演算のアクセスを可能にするように必要に応じてプリアンブル及びポスタンブルを実行することができる。例えば、ネイティブ処理が開始する前に第１プリアンブルを、当該メソッドが処理される前に第１ポスタンブルを、当該メソッドの実行の後に他のプリアンブルを、ネイティブ処理が完了した後に最後のポスタンブルを実行することができる。
【００１３】
ＶＭＩ翻訳には、C RETURNステートメント等のコードを使用して戻る。しかしながら、本発明による実施例においては、ＲＢＣにより発せられる上記C RETURNステートメントは、該ＲＢＣを処理するための環境としてコンフィギュレーションされたＣＰＵの領域を解放すると共にＶＭＩ実行を当該バイトコードシーケンス内の位置、例えば最も最近に翻訳されたＲＢＣの直後の位置に戻すような復帰サブルーチンにより拡張される。
【００１４】
本発明の他の態様は、ジャバ（登録商標）のような解釈言語からの仮想マシン命令を実行するシステムである。該システムは、プロセッサ（ＣＰＵ）及び前置プロセッサ（ＶＭＩ）、命令メモリ、トランスレータ（ＪＶＭ）並びにアプリケーションプログラミングインターフェース（ＡＰＩ）を含む。上記プロセッサは、以下ではネイティブ命令と呼ぶハードウェア固有の命令を含み、且つ、斯かる命令を実行するように構成される。上記前置プロセッサは、上記命令メモリからバイトコードを取り込むと共に斯かるバイトコードをネイティブＣＰＵ命令に翻訳するように構成された、例えばＶＭＩ等の仮想マシンである。特定のタイプのバイトコードに対して、上記ＡＰＩは、ＣＰＵレジスタから変数に値を、これら変数が当該バイトコードにより表されるネイティブＣＰＵ命令にたいしてアクセス可能となるように書き込むと共に、斯かる変数の値を当該バイトコードにより表されるネイティブＣＰＵ命令に従って変更するように構成される。本発明の実施例においては、該ＡＰＩは、プリアンブルを当該バイトコードにより呼び出されるサブルーチンの実行よりも前に、ポスタンブルを斯かる実行の後に実施するようなサブルーチンを指定する。上記プリアンブルはＣＰＵレジスタからの値を、呼び出されるサブルーチンに対してアクセス可能な変数に書き込む。当該バイトコードにより表される命令を実行した後、当該ＡＰＩは上記変数の値を、それに応じて、ポスタンブルサブルーチンを実行することにより変更する。
【００１５】
種々のタイプのバイトコードを処理するために本発明のＡＰＩと組み合わされたソフトウェアトラップ方法を実施することは可能であるが、本発明の実施例は再帰的バイトコードの処理を目指すものである。
【００１６】
本発明は、例えばサンマイクロシステムズ（Sun Microsystems）により作成されたＪＶＭのような仮想マシンを使用してジャバ（登録商標）バイトコードを実行するシステムにおいて実施化することができる。しかしながら、本発明はマイクロソフト・バーチャル・マシン（Microsoft Virtual Machine）のような他のジャバ（登録商標）仮想マシンを用いて実施化することもできると共に、ビジュアルベーシック、ｄＢＡＳＥ、ベーシック及びＭＳＩＬ（マイクロソフト中間言語）のような他の解釈言語を実行するシステムにも適用可能である。
【００１７】
本発明の更なる目的、利点及び新規なフィーチャは、一部は以下の説明に記載されると共に、一部は下記の精査により当業者にとり一層明らかとなるか、又は本発明の実施により分かるであろう。
【発明を実施するための最良の形態】
【００１８】
添付図面（同様の符号は同様の構成要素を示している）に示された本発明の一実施例を詳細に参照するに、図１は本発明の環境の実施例のブロック図である。該環境の基本的構成要素はハードウェアプラットフォーム１００であり、該ハードウェアプラットフォームはプロセッサ１１０、前置プロセッサ１２０及び命令メモリ１５０を含み、これらは全てシステムバス１６０に接続されている。前置プロセッサ１２０は、少なくとも１つのテーブル１４０と、トランスレータ１３０とを含んでいる。ハードウェアプラットフォーム１００は、典型的には、中央処理ユニット（ＣＰＵ）、基本周辺機器及びオペレーティングシステム（ＯＳ）を含んでいる。本発明のプロセッサ１１０は、ＭＩＰＳ、ＡＲＭ、インテル（登録商標）ｘ８６、パワーＰＣ（登録商標）又はＳＰＡＲＣタイプのマイクロプロセッサ等のＣＰＵであり、以下ではネイティブ命令と呼ぶハードウェア固有の命令を含むと共に斯かる命令を実行するように構成されている。本発明の該実施例においては、トランスレータ１３０は、サンマイクロシステムズによるＫＶＭのような、ジャバ（登録商標）仮想マシン（ＪＶＭ）である。該実施例における前置プロセッサ１２０は、好ましくは、国際特許出願公開第WO9918486号に開示された仮想マシンインタープリタ（ＶＭＩ）であり、上記命令メモリからバイトコードを取り込むと共に該バイトコードをネイティブＣＰＵ命令に翻訳するように構成される。ＶＭＩ１２０はバス１６０上の周辺機器であり、所定の範囲のＣＰＵアドレスが該ＶＭＩ１２０に割り当てられるようなメモリマップ型周辺機器として動作する。ＶＭＩ１２０は、命令メモリ１５０における現在の（又は次の）仮想マシン命令を示す独立仮想マシン命令ポインタを管理する。命令メモリ１５０は、例えばジャバ（登録商標）バイトコード１７０のような仮想マシン命令を含む。
【００１９】
ＶＭＩ１２０は、ジャバ（登録商標）バイトコードの解釈を、殆どのバイトコード１７０をネイティブＣＰＵ命令の最適なシーケンスに変換することにより加速する。しかしながら、ＶＭＩ１２０は、複雑なバイトコード１７０を処理するソフトウェア解決策を、ソフトウェアトラップを実行することにより実施する。本発明は、概略的には、再帰型バイトコード（ＲＢＣ）２３０として知られている特定のタイプの複雑なバイトコードを目標とするソフトウェアトラップの実行を拡張するシステム及び方法を目指すものである。図２は、バイトコード１７０の第１系列２１０におけるＲＢＣ２３０の処理が、該バイトコード１７０の第２系列２２０におけるバイトコード１７０の処理、及び続いての系列２１０におけるバイトコード１７０の処理への戻りを生じさせるような、ＲＢＣ２３０の限定的な特徴を示している。このように、ＲＢＣ２３０の実行の結果、“メソッド”として知られているバイトコードサブルーチンとなる。系列２１０が系列２２０に等しい場合は、系列２１０は、“再帰的バイトコード”とは等価ではない用語の“再帰的メソッド”を構成することに注意されたい。本発明は、ＲＢＣ２３０をソフトウェアトラップの一般構造の指定を含むようなＡＰＩを規定することにより処理するようなソフトウェアトラップの一般的動作をサポートする。
【００２０】
本発明によれば、図３を参照すると、実行時にＶＭＩ１２０は初期化される、即ち当該ＶＭＩ１２０の翻訳制御レジスタの設定を含む処理がなされる。全てのソフトウェアトラップに対するエントリアドレスを含むテーブル１４０がコンパイルされる。当該ＶＭＩが各バイトコードを当該バイトコードの特性に従って処理するのを可能にするパラメータが初期化される。当該バイトコードが複雑である場合、ＶＭＩは該バイトコードを適切なソフトウェアトラップを介して処理する。本発明によれば、ＲＢＣ２３０を処理するようにコンフィギュレーションされたソフトウェアトラップは、一緒に該ソフトウェアトラップを形成するネイティブ命令の汎用シーケンスの一部としての適切なプリアンブル及びポスタンブルに向けられる。斯かるプリアンブル及びポスタンブルは、ＶＭＩ１２０により発生することもできるが、本実施例では、プロセッサメモリに記憶され、該メモリにおいてインスタンス生成され、該メモリから実行される。他の例として、プリアンブル及びポスタンブルは当該ＶＭＩ内のテーブル１４０に記憶することもできる。このように、当該ＡＰＩ構成においては、システム初期化に際して、各ＲＢＣソフトウェアトラップエントリポイントはネイティブサブルーチン（“ＰＰＡサブルーチン”）を指すようにプログラムされる。該ＰＰＡサブルーチンは、プリアンブル及びポスタンブルの実行を含み、当該ＲＢＣにより呼び出されるネイティブ機能（又は複数の機能）へのジャンプを含むようにインスタンス生成されている。
【００２１】
本発明の動作の一例として、ＶＭＩ１２０は系列２１０のバイトコード１７０の各々を１以上のネイティブ命令に翻訳する。ここで図２を参照すると、バイトコードＢ０ないしＢ２は非再帰的であるので、ＶＭＩ１２０は単に命令メモリ１５０からＢ０ないしＢ２を取り込み、各バイトコード１７０に対して定義されたネイティブ命令（又は複数のネイティブ命令）を選択し、斯かる命令（又は複数の命令）を実行のためにプロセッサ１１０に供給する。ＢｎはＲＢＣ２３０であり、該Ｂｎの実行は、結果として、第２シーケンス２２０の１以上のバイトコード（ここでは、ＢｏないしＢｓ）の実行となり得る。ジャバにおいては、メソッド呼び出しは常に第１バイトコードでシーケンスに入るが、他の言語が命令シーケンスに沿う他の位置で入るのを許容しないという技術的理由は存在しない。第２シーケンス２２０におけるバイトコードの実行の後、Ｂｓは、バイトコードの実行を第１シーケンス２１０における何処かで継続させるようなRETURNバイトコードである。ジャバメソッドは、Ｂｓがシーケンス２２０の最後のバイトコードではないものとして示されているように、幾つかの出口点（RETURNバイトコード）を有することができる。Ｂｓの後、実行は典型的には第１シーケンスにおけるＢn+1において継続するが、これが必ずしも当てはまる必要はない。
【００２２】
図３のブロック３１０に示されるように、ＶＭＩ１２０はブロック３２０に進んで各バイトコード１７０を取り込む前に、仮想マシンカウンタをインクリメントする。ブロック３３０において、ＶＭＩ１２０はバイトコード１７０を、当該バイトコード１７０の特性（プロパティ）から該バイトコード１７０が“単純”であるか、即ち該バイトコード１７０に対する少なくとも１つのネイティブ命令からなるハードウェア翻訳が存在するかを判定することによりデコードする。当該バイトコード１７０に対して既存のハードウェア翻訳が存在する場合は、当該方法はブロック３７０に進み、該単純なバイトコードをそれに応じて処理する。当該バイトコード１７０に対するハードウェア翻訳が存在しない場合は、該バイトコードは複雑である。ブロック３４０において、当該ＶＭＩは該バイトコード１７０を、複雑なバイトコードに対するネイティブ命令の適切な汎用シーケンスを識別するテーブル１４０内のパラメータに対して判定する。ＶＭＩ１２０は第１シーケンス２１０のバイトコード１７０の翻訳を中断し、当該複雑なバイトコードを、適切なソフトウェアトラップを形成し且つアドレスがテーブル１４０内に配置されているような該汎用シーケンスに従って処理する。ソフトウェアトラップは、典型的には、複雑なバイトコードを、当該バイトコード１７０により表されるサブルーチンを命令毎に解釈することによるよりは、当該バイトコード１７０に対応するネイティブ機能を取り出し、該ネイティブ機能をＣＰＵ１１０にディスパッチすることにより処理する。本発明のアプリケーションプログラミングインターフェース（ＡＰＩ）は、実施されるソフトウェアトラップ方法をＲＢＣを処理するよう拡張するのに要する機能を規定すると共に、該機能がどの様にアクセスされるかを規定する仕様である。ブロック３８０において仮定されているように当該バイトコード１７０が再帰的でない場合、ブロック３４０において識別される適切なソフトウェアトラップによれば、ブロック３６８におけるように制御がＶＭＩに戻されるまで、ブロック３８４においてネイティブ演算が処理される。当該バイトコード１７０が、ブロック３５０において仮定されているように、再帰的である場合、本発明のＡＰＩは適切なＰＰＡサブルーチン３６０を指定し、該サブルーチンはＲＢＣ２３０のための環境を、ＲＢＣ２３０により表されるネイティブ機能が当該サブルーチンの実行に必要な変数の値を含むＣＰＵ１１０内のレジスタにアクセスすることができるようにコンフィギュレーションする。必要な変数は、一定のプール、スタック、ローカル及びプログラムコードに対するポインタを含み得る。上記ＡＰＩにより指定されたＰＰＡサブルーチン３６０は、ＣＰＵがブロック３６４においてＲＢＣ３２０に対応するネイティブ演算を処理し始める前に、ブロック３６２においてプリアンブルを実行する。ネイティブ処理は、ブロック３６４においてネイティブコンテンツアクセス機能に出会い、ＶＭＩを再起動するまで継続する。ＶＭＩのパラメータは変更されて、RETURNバイトコードが何れかの残存ネイティブ処理を再開させる（ブロック３６６）まで、ブロック３６５においてメソッド２２０を処理する。ネイティブ処理の間に他のRETURNバイトコードに出会うと、制御はＰＰＡサブルーチンに戻され、該サブルーチンはブロック３６７においてポスタンブルを実行し、ブロック３６８においては、該ＰＰＡサブルーチン３６０の実行が完了した後に新たなパラメータに従って処理を行うために、制御がＶＭＩに戻される。適切なＰＰＡサブルーチン３６０のアドレスは、テーブル１４０に記憶され、再帰的であるバイトコード１７０を処理するように構成されたソフトウェアトラップに対応する。プリアンブルは、ＲＢＣ２３０により呼び出されるネイティブ演算（ネイティブ処理）の実行の前に実行される。標準のプリアンブルが、ＲＢＣ２３０により呼び出される上記ネイティブ機能に関連する場合、本発明のプリアンブルは該ネイティブ機能に関連する標準のプリアンブルに優先するか又は斯かる標準のプリアンブルを変更するかの何れかのように実行される。ポスタンブルは、ＲＢＣ２３０により呼び出されたネイティブ機能の実行の後で実行される。同様に、本発明のポスタンブルは、ＲＢＣにより呼び出されたネイティブ機能に関連する標準のポスタンブルに優先するか又は斯かる標準のポスタンブルを変更するかの何れかのように（標準のポスタンブルが存在する場合）、且つ、ＲＢＣネイティブ機能におけるC RETURNステートメントの後に実行される。
【００２３】
本発明の実施例の一態様によれば、プリアンブルは、スタックポインタ等の特定の重要なポインタを表す変数に値を書き込み、これにより斯かるポインタをＲＢＣ２３０により呼び出されるネイティブ機能に対してアクセス可能にする。例えば、ＲＢＣ２３０により呼び出されるネイティブ機能のコンテンツにアクセスするために、幾つかの機能は：
【数１】
2005504376.tif 000003
と定義される。同様に、下記の機能は一定のプールへのアクセスを可能にする：
【数２】
2005504376.tif 000004
下記の機能は現在の及び次のバイトコード１７０に対すルウアクセスを可能にする：
【数３】
2005504376.tif 000005
下記の機能は、ジャバ（登録商標）スタックにアクセスするために使用される：
【数４】
2005504376.tif 000006
【００２４】
次に図４を参照すると、ＶＭＩの能動的翻訳（ジャババイトコード処理）機能がジャバ仮想マシン（ＪＶＭ）規格により規定される。図４は、仮想的なバイトコード処理タイムラインを表し、該タイムラインにおいて間隔Ｔ０ないしＴ１２は、必ずしも等しくない任意の期間を表している。期間Ｔ０の間においては、ＶＭＩはバイトコード１７０を、再帰的バイトコード（ＲＢＣ）２３０に出会うまでインターフェースとしての本発明のＡＰＩを使用して翻訳する。図２の仮想図を相互参照すると、ＶＭＩはバイトコードＢ０ないしＢ２を処理し、次いでＢｎに出会う。ＲＢＣ２３０（Ｂｎ）は、適切なＲＢＣソフトウェアトラップ（ＡＰＩにより示されるように）が識別されると、期間Ｔ１において制御がネイティブ処理に渡されるようにし、対応するＰＰＡサブルーチンが実行される。期間Ｔ１ないしＴ１０においては、上記ソフトウェアトラップはＲＢＣ２３０により呼び出されたネイティブ機能を実行し、プリアンブルにより初期化されたコンテキストにアクセスする（期間Ｔ４において）。期間Ｔ３及びＴ４の処理サイクル（ＲＢＣ２３０に固有のネイティブ演算及びコンテキストアクセス機能への呼び出し）は、例えば期間Ｔ５及びＴ６において必要なだけ繰り返される。上記ネイティブ機能は最終的に（数千のネイティブに実行されたサイクルの後に可能となる）ネイティブコンテキストアクセス機能が得られ、これが期間Ｔ７においてＶＭＩを再起動する。ＶＭＩは、期間Ｔ７においてRETURNバイトコード（Ｂｓ）に出会うまで、新たに呼び出されるメソッド（仮想的なバイトコードＢｏないしＢｒ）に関してバイトコードを能動的に処理し、上記RETURNバイトコードは制御をネイティブ機能の処理に戻す。期間Ｔ８において、制御はＶＭＩ１２０のハードウェアによるか又はソフトウェア（ＡＰＩを介して、及びＣプログラミング言語のRETURNステートメントのようなコードを介して達成される）によるかの何れかにより、暗黙的にＶＭＩ１２０からネイティブ処理に戻される。ネイティブ処理は期間Ｔ１０を介して継続し、他のC RETURNステートメントが制御をＰＰＡサブルーチンに移すと、ポスタンブルが期間Ｔ１１において実行される。本発明のポスタンブルは、ＲＢＣサブルーチンにより変更された変数の値を、期間Ｔ１２において制御が再びＶＭＩ１２０に戻される（仮想的バイトコードＢn+1において）前に、斯かる変数を含むＣＰＵレジスタに書き戻す。図５に示す他の実施例によれば、プリアンブル及びポスタンブルは、新たに呼び出されるメソッド（例示としてのバイトコードＢｏないしＢｓ）を処理するために必要とされるコンテキスト変更を実施するように実行することができる。例えば、ネイティブ処理の前の第１プリアンブルは期間Ｔ１で始まり、第１ポスタンブルは上記メソッドがＴ９ないしＴ１１において処理される前であり、他のプリアンブルは該メソッドの実行の後の期間Ｔ１２においてであり、最終のポスタンブルはネイティブ処理が完了した後の期間Ｔ１６においてである。
【００２５】
再び図３を参照すると、ブロック３６８において当該ＡＰＩにより指定されたＰＰＡサブルーチン３６０は、ＶＭＩ１２０におけるシーケンス１２０のバイトコード１７０の翻訳の再開を始めるようにコンフィギュレーションされる。制御は、ＶＭＩ１２０によるか又はＡＰＩの実施を介して、従ってハードウェアかソフトウェアの何れかにより実施されるかの何れかにより、ＶＭＩ１２０からネイティブ処理に暗黙的に戻される。この戻しルーチンのソフトウェア実施は、Ｃプログラミング言語のRETURNステートメント（通常は、ネイティブ機能に含まれる）のようなコードを介して達成される。ネイティブ処理からの帰還の戻りの後に、上記コンテキストは例えば“vmi_freeFrame”により壊されるので、制御をＶＭＩ１２０に渡すことができる。上記コンテキストの破壊は、ＲＢＣ２３０を処理するための環境としてコンフィギュレーションされたＣＰＵ１１０の領域を解放し、ＶＭＩ１２０の翻訳をバイトコード１７０のシーケンス２１０内の位置に、例えば（必ずしもそうである必要はないが）最も最近に翻訳されたＲＢＣ２３０の直後の位置に戻す。
【００２６】
ブロック３１０において制御がＶＭＩ１２０に戻されると、前記仮想マシンカウンタはインクリメントされ、ＶＭＩ１２０は次のバイトコード１７０を取り込む。このように、ＶＭＩ１２０による翻訳は、他のＲＢＣ２３０に出会うか、又は、さもなければ当該翻訳処理が終了する（例えば、ＶＭＩが他の複雑なバイトコードに出会うか、又は処理すべきバイトコードを処理し尽くす）まで継続する。
【００２７】
上記から、本発明は仮想マシン命令を処理するソフトウェアトラップ方法をサポートするシステム及び方法を提供し、再帰的仮想マシン命令を正確且つ効率的に処理する方法の実施を容易にすることが分かるであろう。更に、上記は本発明の実施例に関係するのみで、添付請求項に記載される本発明の趣旨及び範囲から逸脱すること無しに本発明に対し種々の変更をなすことができると理解されるべきである。
【図面の簡単な説明】
【００２８】
【図１】図１は、本発明の環境の一実施例の機能的構成要素を示すブロック図である。
【図２】図２は、例示的なバイトコード処理シーケンスを示す。
【図３】図３は、本発明の一実施例による方法のフローチャートである。
【図４】図４は、本発明の実施例に関わる演算の相対タイミングを示すタイムラインである。
【図５】図５も、本発明の実施例に関わる演算の相対タイミングを示すタイムラインである。
【図４】
2005504376.tif 000007
【図５】
2005504376.tif 000008
【国際公開パンフレット】
2005504376.tif 000009
2005504376.tif 000010
2005504376.tif 000011
2005504376.tif 000012
2005504376.tif 000013
2005504376.tif 000014
2005504376.tif 000015
2005504376.tif 000016
2005504376.tif 000017
2005504376.tif 000018
2005504376.tif 000019
2005504376.tif 000020
2005504376.tif 000021
2005504376.tif 000022
2005504376.tif 000023
2005504376.tif 000024
2005504376.tif 000025
2005504376.tif 000026
2005504376.tif 000027
2005504376.tif 000028
2005504376.tif 000029
【国際公開パンフレット（コレクトバージョン）】
2005504376.tif 000030
【国際調査報告】
2005504376.tif 000031
2005504376.tif 000032
2005504376.tif 000033