(57)【要約】例外検出は、フェッチされたバイトコードを、当該フェッチされたバイトコードが例外を投げさせる場合にプロセッサ中断を生じる命令と共にディスパッチすることによって、仮想機械インタプリタ(VMI)アクセラレータハードウェア(120)で促進される。プロセッサ割込みは、例外条件が存在することをVMI(120)に示す役目を果たし、これにより、例外チェックの結果がCPU(110)からVMI(120)に送信されるのをVMI(120)が待つ必要性を不要にする。
2005506630.tif 000002
【特許請求の範囲】
【請求項１】
仮想機械命令を処理する方法において、
仮想機械命令をフェッチするステップと、
前記仮想機械命令を処理してプロセッサによって実行可能なネイティブ命令にするステップと、
前記処理されたネイティブ命令を、実行のために、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令と共に前記プロセッサにディスパッチするステップと、
前記処理されたネイティブ命令と、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令とを実行するステップと、
を有する方法。
【請求項２】
請求項1に記載の方法において、前記仮想機械命令をフェッチして、これを処理してプロセッサによって実行可能なネイティブ命令にする前記ステップは、仮想機械インタプリタ(VMI)仮想機械ハードウェアアクセラレータによって達成される、方法。
【請求項３】
請求項1に記載の方法において、更に、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令を生成するステップを有する方法。
【請求項４】
請求項3に記載の方法において、前記処理されたネイティブ命令と、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令とを実行する前記ステップが、更に、
前記ディスパッチされたネイティブ命令の実行が不正な動作を生じるかの例外チェック結果を生成するステップと、
プロセッサ割込みが生じた前記例外チェックの結果にアルゴリズムを実行することによって、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令を実行するステップと、
を有する方法。
【請求項５】
仮想機械命令を処理する装置において、
ネイティブ命令セットを有すると共にネイティブ命令を実行するように構成されたプロセッサと、
仮想機械命令を記憶するように構成された命令メモリと、
前記命令メモリから仮想機械命令をフェッチし、前記フェッチされた仮想機械命令を処理して前記プロセッサによって実行可能なネイティブ命令にし、前記処理された仮想機械命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令を追加し、前記処理されたネイティブ命令及び前記追加されたネイティブ命令を実行のために前記プロセッサにディスパッチする、ように構成されるプリプロセッサと、
を有する装置。
【請求項６】
請求項5に記載の装置において、前記プリプロセッサは、仮想機械インタプリタ(VMI)仮想機械ハードウェアアクセラレータである、装置。
【請求項７】
請求項5に記載の装置において、前記プリプロセッサは、更に、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令を生成するように構成される、装置。
【請求項８】
請求項7に記載の装置において、前記プロセッサは、更に、前記処理されたネイティブ命令及び前記追加されたネイティブ命令を実行し、前記ディスパッチされたネイティブ命令の実行が不正な動作を生じる場合に例外インジケータを生成し、前記例外インジケータにアルゴリズムを実行してプロセッサ割込みを生じさせることによって前記追加された前記ネイティブ命令を実行する、ように構成される、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にはコンピュータプログラム言語に関し、より詳細には、仮想機械言語の変換及び実行に関する。
【背景技術】
【０００２】
コンピュータプログラム言語は、コンピュータが実行するための命令を表す、人間が読取り可能なソースコードからなるアプリケーションを作成するために用いられる。しかし、コンピュータが命令に従うことができる前に、ソースコードはコンピュータが読取り可能なバイナリマシンコードに変換されなければならない。
【０００３】
一般的に、C、C++又はCOBOL等のプログラム言語は、コンパイラを用いて、ソースコードからアセンブリ言語を生成し、次に、アセンブリ言語を、機械コードに変換される機械語に変換する。従って、ソースコードの最終的な変換は、実行時の前に行われる。異なったコンピュータは異なった機械語を必要とするため、例えばC++で記述されるプログラムは、該プログラムがそれ用に記述された特定のハードウェアプラットフォームでのみ実行することができる。
【０００４】
翻訳されたプログラム言語は、複数のハードウェアプラットフォーム上で実行されるソースコードを有するアプリケーションを作成するように設計されている。Java（Ｒ）は、実行時の前に「バイトコード」又は「仮想機械言語」として知られる中間言語に変換されるソースコードを生成することによってプラットフォーム独立性を達成する翻訳されたプログラム言語である。仮想機械は、実行時に、バイトコードをプラットフォームに適切なマシンコードに変換する。本質的には、仮想機械は物理構造ではなく、VM内又はCPU内に記憶される対応するネイティブ機械語命令を選択することによってハードウェアプラットフォームのためのバイトコードを翻訳する、(インタプリタソフトウェア又は一連のプロセッサ命令によって生成される)自己内蔵型動作環境である。次に、ネイティブ命令は、ハードウェアプラットフォームのCPUに供給され、続けて、実行される。典型的な仮想機械は、動作のFDD系列を実行するのに、バイトコードごとに(バイトコードの品質及び複雑性に応じて)20〜60サイクルの処理時間を必要とする。各バイトコードを翻訳するために、Java仮想機械は、「フェッチ、デコード、ディスパッチ」(FDD)動作のシーケンスを実行する。各バイトコード命令について、Java仮想機械(JVM)は、ネイティブ中央処理装置(CPU)命令で表される対応する実行プログラムを含む。JVMは、CPUに、メモリから仮想機械命令をフェッチさせ又は読み取らせ、バイトコード命令のための実行プログラムのCPUアドレスをデコードさせ、当該実行プログラムにCPUの制御権を移動することによりディスパッチさせる。解釈プロセスは、時間がかかりうる。
【０００５】
本願と同一の発明者及び譲受人のPCT特許出願公開第WO9918484号に開示されるように、メモリとCPUとの間にプリプロセッサ(仮想機械インタプリタ(VMI))を加えることは、仮想機械命令の処理を加速する。VMIは、ネイティブCPU命令を「オンザフライ(on-the-fly)」で生成することによってJavaバイトコードを翻訳するハードウェアモジュールである。VMIは、まず、メモリからバイトコードを読み取る(フェッチする)。VMIは、次に、フェッチされたバイトコードの多くの特性を調べる(デコードする)。VMIによってアクセスされる特性は、バイトコードがCPUへのディスパッチ及び実行のために如何に処理されてネイティブ命令にされるかを決定する。従って、VMIは、各FDDをソフトウェアではなくハードウェアで実行することができる。CPUが1つの命令を実行している最中に、VMIは次のバイトコードをフェッチして、処理してCPU命令にする。
【０００６】
仮想機械は、バイトコードのシーケンスを翻訳する最中に、アレイの境界外にアクセスする命令等の、不正な動作を生じるバイトコード(又はバイトコードのシーケンス)に遭遇する可能性がある。このような不正な動作の実行は、投げられるべき例外を生じさせ、この例外は、引き続きの関数が、ExceptionOccurred、ExceptionDescribe及びExceptionClear等、例外に関連していない限り、次の機能がコールされることができる前に対処され消去されなければならない。プロセッサに基づいた例外チェック手順において、例外は、例外チェックが、バイトコードによって要求される動作が実際に不正な動作の実行を生じるかどうかを決定するまで保留される。なぜなら、例外の保留中に例外に関連しない機能をコールすることは、予期せぬ結果を生じうるからである。しかし、Javaでは、例外チェックが実行される間、例外は保留状態に保持されない。むしろ、例外条件は、CPU命令の実行を通じて明白にチェックされる。一旦例外状況が検出されると、例外のタイプに応じて例外オブジェクトが作成され、例外処理ソフトウェアが実行される。
【０００７】
例外チェックへの仮想機械アプローチは、VMI実現に関しては最適でない。例えば、仮想機械は、IALoadバイトコードを翻訳するために、アレイアクセスのインデックスをアレイのサイズと比較する命令を生成する。これは、境界外状態を生じる可能性がある動作である。VMIは、潜在的な境界外状態が条件付き分岐の一種であるかのように反応し、境界外の例外が実際に起こるかどうかを示す例外チェックの結果のCPUからの受領を待つ間、かなりの時間バイトコードの処理を停止する。従って、この例外処理の解決策は、相当な量のオーバヘッド(即ち処理時間の負荷)を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
例外検出及びチェックを実行するのに必要な処理時間を低下させる仮想機械ハードウェアアクセラレータ(仮想機械インタプリタ等)による仮想機械命令の処理方法の必要がある。
【課題を解決するための手段】
【０００９】
本発明は、プロセッサからの例外チェックの結果の返答を待つ必要性を不要にすることによって例外チェックに付随する処理遅延を有利に最小化する、仮想機械命令を処理する最中に例外を検出するシステム及び方法を提供することによって上記の要求を満たす。
【００１０】
より詳細には、本発明のシステム及び方法によれば、仮想機械ハードウェアアクセラレータ(VMI等)は、バイトコードが不適切な動作を生じたらCPUに割込みを生じさせるネイティブ命令を処理しディスパッチすることによってバイトコードが例外を投げるかどうか決定する。
【００１１】
簡潔には、仮想機械命令を処理する方法の典型的な実施例は、バイトコードをフェッチするステップと、バイトコードカウンタをインクリメントするステップとを含む。VMIは、フェッチされたバイトコードを処理して、プロセッサ(CPU)によって実行可能なネイティブ命令にし(即ち、VMIはネイティブ命令のシーケンスを「生成する」)、VMIは、バイトコードに対応するネイティブ命令を、バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令(「割込み命令」)とともに、ディスパッチする。ほとんどのCPUの命令セットは、特別な割込み機能を含み、その幾つかは、TRAP、SYSCALL又はBREAK(MIPsプロセッサ用)等の無条件の割込み命令である。しかし、無条件の割込み命令は、実行されると、例外が存在するかどうかに関係なくCPU割込みを生じさせる。従って、無条件の割込み命令は、例外を検出するためにはVMIによって用いられない。なぜなら、そうすることは、無条件の割り込み命令を発動する前にCPUからの例外条件の受信をVMIが待つことを必要とするからである。そうではなく、VMIは、条件つきの割込み命令を用いて例外を検出する。
【００１２】
例外条件が存在すると割込みを生じさせることができる命令シーケンスをVMIが生成するとき、条件付きの割込み状況が作成される。VMIは、プロセッサ割込みを生じさせるネイティブ命令のシーケンスを、例外インジケータに計算を実行してプロセッサ割込みを生じさせるアルゴリズムを作成することによって生成する。代替的に、VMIはCPU命令セットから個々の条件付き割込み命令を生成する。割込み命令又は命令シーケンスのいずれのタイプも、VMIによって、CPUにディスパッチされるネイティブ命令のシーケンスの一部として「生成される」。
【００１３】
CPUは、バイトコードによって要求されるネイティブ命令を割込み命令とともに実行する。バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合、割込み命令はプロセッサ割込みを生じる。従って、CPUからVMIに例外チェックの結果を転送する必要性がない。その結果、本発明によるJava例外チェックは、より時間がかからない。
【００１４】
プロセッサ割込みが行われると、例示のシステムは、例外を取り扱うようにプログラムされることができる。原理的には、例外を生じうるあらゆる動作について、Javaプログラマは適切な応答を示さなければならない(即ち、その例外を取り扱うためにコードを提供する)。従って、バイトコードレベルで、方法を構成する全てのバイトコードのシーケンスは、バイトコードの追加のシーケンスと、あらゆる考えうる例外状況について実行されるべき例外処理バイトコードのシーケンスを示すテーブルとを含まなければならない。
【００１５】
本発明の実施例のシステムは、ネイティブ命令を実行するネイティブ命令セットを有するプロセッサ及びバイトコードを記憶する命令メモリを含む、バイトコードを処理する装置である。VMIは、命令メモリからバイトコードをフェッチし、バイトコードを処理してネイティブCPU命令にし、該バイトコードを、前記処理された仮想機械命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる割込み命令とともにディスパッチされる。仮想機械命令カウンタは、各バイトコードが処理された後にインクリメントされる。代替的に、VMIは、割込み命令をCPU命令セットから取得するか、又は、割込み命令を生成する。
【００１６】
本発明は、Sun Microsystemsによって作られたJVMs等の仮想機械を用いてJava（Ｒ）バイトコードを実行するシステムで実現されることができる。しかし、本発明はまた、Microsoft Virtual Machine等の他のJava（Ｒ）仮想機械を用いて実現されることができ、また、Visual Basic、dBASE、BASIC及び.NET等の他の翻訳された言語を実行するシステムに適用可能である。
【発明を実施するための最良の形態】
【００１７】
本発明の他の目的、利点及び新規な特徴は、一部は以下の説明で開示され、一部は、当業者には、以下の検討によって明らかになる又は本発明の実施によって学習されるであろう。
【００１８】
明細書に組み込まれその一部をなす添付の図面は、説明を参照することにより本発明を表す。
【００１９】
ここで、必要とされるとおり、本発明の詳細な実施例が開示されるが、開示された実施例は、種々の代替形式で実現されることができる本発明の実施例に過ぎないということが理解されるべきである。図は、必ずしも一定の比率ではなく、幾つかの機能は、特定の部品の詳細を示すために誇張又は最小化されていてよい。従って、ここで開示された具体的な構造的、機能的詳細は、制限的であると解釈されるべきではなく、請求項の基礎に過ぎず、本発明を当業者に種々に適用するための代表的な基礎に過ぎないと解釈されるべきである。
【００２０】
添付の図面に示された本発明の1つの実施例の詳細をここで参照する。図面においては類似の番号は類似の部品を示す。図1は、本発明の環境の実施例のブロック図である。環境の基本的な部品は、プロセッサ110、プリプロセッサ120及び命令メモリ150を含み、これらが全てシステムバス160によって接続される、ハードウェアプラットフォーム100である。プリプロセッサ120は、制御レジスタ130及び変換器140を含む。ハードウェアプラットフォーム100は、一般的に、中央処理装置(CPU)、基本的な周辺機器及びオペレーティングシステム(OS)を含む。本発明のプロセッサ110は、MIPS、ARM、インテルx86、PowerPC又はSPARC型マイクロプロセッサ等のCPUであり、ハードウェアに固有の命令(以下ではネイティブ命令と呼ばれる)を含み、これを実行するように構成される。本発明の実施例において、翻訳器140はJava（Ｒ）仮想機械(JVM)(例えばSun MicrosystemsによるKVM)である。命令メモリ150は、仮想機械命令(例えばJava（Ｒ）バイトコード170)を含む。実施例のプリプロセッサ120は、国際出願公開第WO9918486号において開示される仮想機械インタプリタ(VMI)であり、命令メモリ150から仮想機械命令(例えばバイトコード170)をフェッチしてきて、仮想機械命令をネイティブCPU命令のシーケンスに変換するように構成される。VMI 120は、バス160上の周辺機器であって、所定の範囲のCPUアドレスがVMI 120に割り当てられるメモリマッピングされた周辺機器として作動してもよい。VMI 120は、命令メモリ150のその時点の(又は次の)仮想機械命令を示す独立した仮想機械命令ポインタ180(「バイトコードカウンタ」)を管理する。
【００２１】
図2は、本発明の1つの実施例による方法を示すフローチャートである。図2を詳細に参照すると、ステップ210において、VMI 120はバイトコードカウンタBCC 180をインクリメントし、その後、ステップ220で、命令メモリ150から各バイトコード170をフェッチする。ステップ230において、VMI 120はバイトコード170の特性にアクセスすることによって各バイトコード170をデコードする。ステップ240において、VMI 120は、変換表140から、フェッチされたバイトコード170の変換、フェッチされたバイトコード170とともに実行されると例外条件を検出する割込み命令、及び、フェッチされたバイトコード170とともに実行されなければならない他の命令を含むネイティブ命令のシーケンスを取得する。割込み命令は、フェッチされたバイトコード170によって要求された命令の実行によって違法な動作が生じるとプロセッサ割込みを呼び出すことによって例外条件を検出する。これらの割込み命令は、VMI 120によって生成される既存のCPUコマンド(CPU命令セット115において特定される)又はVMI 120によって生成される命令シーケンス(アルゴリズム)である。
【００２２】
割込み命令シーケンスは、プロセッサ割込みを引き起こすネイティブ命令のあらゆる組合せを含むことができる。1つの実施例によれば、VMIは、例外が実際に発生する場合にのみ算術的あふれを引き起こすように例外インジケータに動作する計算命令を生成する。例えば、VMI 120によって処理されるバイトコードは、アレイインデックス検査を要求することができ、ここで、対応するネイティブ命令は、インデックスをアレイ境界と(例えばSLTUを用いることにより)比較する。この比較の結果(0 = OK、1 = FAIL)は、CPUレジスタに記憶されて、例外インジケータになる。比較が失敗すると、このVMIにより生成された割込み命令シーケンスは、例外インジケータ31の位置を左に移動して、以下のように例外インジケータを自身に加えることによって割込みを作成する：
SLTU $1, $bound, $idx
SLL $1, $1, 31
ADD $1, $1, $1
移動された例外インジケータの値が1である場合、(31ビットマシンで)最大の可能な負数が得られる。この数を自身に加える結果は、算術的あふれ例外が生じる数である。CPU割込み状態の可能な他のイニシエータは、0で除算する関数である。
【００２３】
VMI 120は、(ステップ250で)フェッチされたバイトコード170に対応するネイティブ命令のシーケンスを割込み命令とともに(CPU 110に)送る。ステップ260及び270は、CPU内で発生する。CPU 110は、ネイティブ命令及び割込み命令のシーケンスを実行する。ステップ260において例外が投げられる場合、割込み命令によってプロセッサ割込みが生じ、ステップ270において例外処理プロセスが実行される。例えば、VMI 120は、方法を構成するフェッチされたバイトコードシーケンスの各々とともに、例外を処理するバイトコードシーケンスを送るようにプログラムされることができる。例外が投げられない場合、VMI 120は、ステップ210に戻ることによって命令メモリ150から次のバイトコード170を処理するように進行する。
【００２４】
本発明は、仮想機械インタプリタアクセラレータハードウェアの実現例に関して説明されるが、当業者に理解されるように、種々の他のバイトコード処理システムと連携した実現例が可能である。
【００２５】
前述を鑑みて、本発明は、仮想機械命令の処理の最中の例外の正確で効率のよい検知のシステム及び方法を提供することが理解されるであろう。更に、上述は、本発明の実施例に関するのみであり、以下の請求項により規定される本発明の精神及び範囲から逸脱することなく、上記の実施例に多くの変更が加えられることができることが理解されるであろう。
【図面の簡単な説明】
【００２６】
【図１】本発明の環境の実施例の機能素子を示すブロック図である。
【図２】本発明の実施例による方法を示すフローチャートである。
【図２】
2005506630.tif 000003
【国際公開パンフレット】
2005506630.tif 000004
2005506630.tif 000005
2005506630.tif 000006
2005506630.tif 000007
2005506630.tif 000008
2005506630.tif 000009
2005506630.tif 000010
2005506630.tif 000011
2005506630.tif 000012
2005506630.tif 000013
2005506630.tif 000014
2005506630.tif 000015
2005506630.tif 000016
【国際調査報告】
2005506630.tif 000017
2005506630.tif 000018
2005506630.tif 000019