JP2005506630A - 低オーバヘッドの例外チェック - Google Patents
低オーバヘッドの例外チェック Download PDFInfo
- Publication number
- JP2005506630A JP2005506630A JP2003538889A JP2003538889A JP2005506630A JP 2005506630 A JP2005506630 A JP 2005506630A JP 2003538889 A JP2003538889 A JP 2003538889A JP 2003538889 A JP2003538889 A JP 2003538889A JP 2005506630 A JP2005506630 A JP 2005506630A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- native instruction
- virtual machine
- processor
- execution
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 claims description 23
- 238000012545 processing Methods 0.000 claims description 17
- 238000004422 calculation algorithm Methods 0.000 claims description 4
- 238000001514 detection method Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 6
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
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
例外検出は、フェッチされたバイトコードを、当該フェッチされたバイトコードが例外を投げさせる場合にプロセッサ中断を生じる命令と共にディスパッチすることによって、仮想機械インタプリタ(VMI)アクセラレータハードウェア(120)で促進される。プロセッサ割込みは、例外条件が存在することをVMI(120)に示す役目を果たし、これにより、例外チェックの結果がCPU(110)からVMI(120)に送信されるのをVMI(120)が待つ必要性を不要にする。
Description
【技術分野】
【0001】
本発明は、一般にはコンピュータプログラム言語に関し、より詳細には、仮想機械言語の変換及び実行に関する。
【背景技術】
【0002】
コンピュータプログラム言語は、コンピュータが実行するための命令を表す、人間が読取り可能なソースコードからなるアプリケーションを作成するために用いられる。しかし、コンピュータが命令に従うことができる前に、ソースコードはコンピュータが読取り可能なバイナリマシンコードに変換されなければならない。
【0003】
一般的に、C、C++又はCOBOL等のプログラム言語は、コンパイラを用いて、ソースコードからアセンブリ言語を生成し、次に、アセンブリ言語を、機械コードに変換される機械語に変換する。従って、ソースコードの最終的な変換は、実行時の前に行われる。異なったコンピュータは異なった機械語を必要とするため、例えばC++で記述されるプログラムは、該プログラムがそれ用に記述された特定のハードウェアプラットフォームでのみ実行することができる。
【0004】
翻訳されたプログラム言語は、複数のハードウェアプラットフォーム上で実行されるソースコードを有するアプリケーションを作成するように設計されている。Java(R)は、実行時の前に「バイトコード」又は「仮想機械言語」として知られる中間言語に変換されるソースコードを生成することによってプラットフォーム独立性を達成する翻訳されたプログラム言語である。仮想機械は、実行時に、バイトコードをプラットフォームに適切なマシンコードに変換する。本質的には、仮想機械は物理構造ではなく、VM内又はCPU内に記憶される対応するネイティブ機械語命令を選択することによってハードウェアプラットフォームのためのバイトコードを翻訳する、(インタプリタソフトウェア又は一連のプロセッサ命令によって生成される)自己内蔵型動作環境である。次に、ネイティブ命令は、ハードウェアプラットフォームのCPUに供給され、続けて、実行される。典型的な仮想機械は、動作のFDD系列を実行するのに、バイトコードごとに(バイトコードの品質及び複雑性に応じて)20〜60サイクルの処理時間を必要とする。各バイトコードを翻訳するために、Java仮想機械は、「フェッチ、デコード、ディスパッチ」(FDD)動作のシーケンスを実行する。各バイトコード命令について、Java仮想機械(JVM)は、ネイティブ中央処理装置(CPU)命令で表される対応する実行プログラムを含む。JVMは、CPUに、メモリから仮想機械命令をフェッチさせ又は読み取らせ、バイトコード命令のための実行プログラムのCPUアドレスをデコードさせ、当該実行プログラムにCPUの制御権を移動することによりディスパッチさせる。解釈プロセスは、時間がかかりうる。
【0005】
本願と同一の発明者及び譲受人のPCT特許出願公開第WO9918484号に開示されるように、メモリとCPUとの間にプリプロセッサ(仮想機械インタプリタ(VMI))を加えることは、仮想機械命令の処理を加速する。VMIは、ネイティブCPU命令を「オンザフライ(on-the-fly)」で生成することによってJavaバイトコードを翻訳するハードウェアモジュールである。VMIは、まず、メモリからバイトコードを読み取る(フェッチする)。VMIは、次に、フェッチされたバイトコードの多くの特性を調べる(デコードする)。VMIによってアクセスされる特性は、バイトコードがCPUへのディスパッチ及び実行のために如何に処理されてネイティブ命令にされるかを決定する。従って、VMIは、各FDDをソフトウェアではなくハードウェアで実行することができる。CPUが1つの命令を実行している最中に、VMIは次のバイトコードをフェッチして、処理してCPU命令にする。
【0006】
仮想機械は、バイトコードのシーケンスを翻訳する最中に、アレイの境界外にアクセスする命令等の、不正な動作を生じるバイトコード(又はバイトコードのシーケンス)に遭遇する可能性がある。このような不正な動作の実行は、投げられるべき例外を生じさせ、この例外は、引き続きの関数が、ExceptionOccurred、ExceptionDescribe及びExceptionClear等、例外に関連していない限り、次の機能がコールされることができる前に対処され消去されなければならない。プロセッサに基づいた例外チェック手順において、例外は、例外チェックが、バイトコードによって要求される動作が実際に不正な動作の実行を生じるかどうかを決定するまで保留される。なぜなら、例外の保留中に例外に関連しない機能をコールすることは、予期せぬ結果を生じうるからである。しかし、Javaでは、例外チェックが実行される間、例外は保留状態に保持されない。むしろ、例外条件は、CPU命令の実行を通じて明白にチェックされる。一旦例外状況が検出されると、例外のタイプに応じて例外オブジェクトが作成され、例外処理ソフトウェアが実行される。
【0007】
例外チェックへの仮想機械アプローチは、VMI実現に関しては最適でない。例えば、仮想機械は、IALoadバイトコードを翻訳するために、アレイアクセスのインデックスをアレイのサイズと比較する命令を生成する。これは、境界外状態を生じる可能性がある動作である。VMIは、潜在的な境界外状態が条件付き分岐の一種であるかのように反応し、境界外の例外が実際に起こるかどうかを示す例外チェックの結果のCPUからの受領を待つ間、かなりの時間バイトコードの処理を停止する。従って、この例外処理の解決策は、相当な量のオーバヘッド(即ち処理時間の負荷)を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【0008】
例外検出及びチェックを実行するのに必要な処理時間を低下させる仮想機械ハードウェアアクセラレータ(仮想機械インタプリタ等)による仮想機械命令の処理方法の必要がある。
【課題を解決するための手段】
【0009】
本発明は、プロセッサからの例外チェックの結果の返答を待つ必要性を不要にすることによって例外チェックに付随する処理遅延を有利に最小化する、仮想機械命令を処理する最中に例外を検出するシステム及び方法を提供することによって上記の要求を満たす。
【0010】
より詳細には、本発明のシステム及び方法によれば、仮想機械ハードウェアアクセラレータ(VMI等)は、バイトコードが不適切な動作を生じたらCPUに割込みを生じさせるネイティブ命令を処理しディスパッチすることによってバイトコードが例外を投げるかどうか決定する。
【0011】
簡潔には、仮想機械命令を処理する方法の典型的な実施例は、バイトコードをフェッチするステップと、バイトコードカウンタをインクリメントするステップとを含む。VMIは、フェッチされたバイトコードを処理して、プロセッサ(CPU)によって実行可能なネイティブ命令にし(即ち、VMIはネイティブ命令のシーケンスを「生成する」)、VMIは、バイトコードに対応するネイティブ命令を、バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令(「割込み命令」)とともに、ディスパッチする。ほとんどのCPUの命令セットは、特別な割込み機能を含み、その幾つかは、TRAP、SYSCALL又はBREAK(MIPsプロセッサ用)等の無条件の割込み命令である。しかし、無条件の割込み命令は、実行されると、例外が存在するかどうかに関係なくCPU割込みを生じさせる。従って、無条件の割込み命令は、例外を検出するためにはVMIによって用いられない。なぜなら、そうすることは、無条件の割り込み命令を発動する前にCPUからの例外条件の受信をVMIが待つことを必要とするからである。そうではなく、VMIは、条件つきの割込み命令を用いて例外を検出する。
【0012】
例外条件が存在すると割込みを生じさせることができる命令シーケンスをVMIが生成するとき、条件付きの割込み状況が作成される。VMIは、プロセッサ割込みを生じさせるネイティブ命令のシーケンスを、例外インジケータに計算を実行してプロセッサ割込みを生じさせるアルゴリズムを作成することによって生成する。代替的に、VMIはCPU命令セットから個々の条件付き割込み命令を生成する。割込み命令又は命令シーケンスのいずれのタイプも、VMIによって、CPUにディスパッチされるネイティブ命令のシーケンスの一部として「生成される」。
【0013】
CPUは、バイトコードによって要求されるネイティブ命令を割込み命令とともに実行する。バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合、割込み命令はプロセッサ割込みを生じる。従って、CPUからVMIに例外チェックの結果を転送する必要性がない。その結果、本発明によるJava例外チェックは、より時間がかからない。
【0014】
プロセッサ割込みが行われると、例示のシステムは、例外を取り扱うようにプログラムされることができる。原理的には、例外を生じうるあらゆる動作について、Javaプログラマは適切な応答を示さなければならない(即ち、その例外を取り扱うためにコードを提供する)。従って、バイトコードレベルで、方法を構成する全てのバイトコードのシーケンスは、バイトコードの追加のシーケンスと、あらゆる考えうる例外状況について実行されるべき例外処理バイトコードのシーケンスを示すテーブルとを含まなければならない。
【0015】
本発明の実施例のシステムは、ネイティブ命令を実行するネイティブ命令セットを有するプロセッサ及びバイトコードを記憶する命令メモリを含む、バイトコードを処理する装置である。VMIは、命令メモリからバイトコードをフェッチし、バイトコードを処理してネイティブCPU命令にし、該バイトコードを、前記処理された仮想機械命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる割込み命令とともにディスパッチされる。仮想機械命令カウンタは、各バイトコードが処理された後にインクリメントされる。代替的に、VMIは、割込み命令をCPU命令セットから取得するか、又は、割込み命令を生成する。
【0016】
本発明は、Sun Microsystemsによって作られたJVMs等の仮想機械を用いてJava(R)バイトコードを実行するシステムで実現されることができる。しかし、本発明はまた、Microsoft Virtual Machine等の他のJava(R)仮想機械を用いて実現されることができ、また、Visual Basic、dBASE、BASIC及び.NET等の他の翻訳された言語を実行するシステムに適用可能である。
【発明を実施するための最良の形態】
【0017】
本発明の他の目的、利点及び新規な特徴は、一部は以下の説明で開示され、一部は、当業者には、以下の検討によって明らかになる又は本発明の実施によって学習されるであろう。
【0018】
明細書に組み込まれその一部をなす添付の図面は、説明を参照することにより本発明を表す。
【0019】
ここで、必要とされるとおり、本発明の詳細な実施例が開示されるが、開示された実施例は、種々の代替形式で実現されることができる本発明の実施例に過ぎないということが理解されるべきである。図は、必ずしも一定の比率ではなく、幾つかの機能は、特定の部品の詳細を示すために誇張又は最小化されていてよい。従って、ここで開示された具体的な構造的、機能的詳細は、制限的であると解釈されるべきではなく、請求項の基礎に過ぎず、本発明を当業者に種々に適用するための代表的な基礎に過ぎないと解釈されるべきである。
【0020】
添付の図面に示された本発明の1つの実施例の詳細をここで参照する。図面においては類似の番号は類似の部品を示す。図1は、本発明の環境の実施例のブロック図である。環境の基本的な部品は、プロセッサ110、プリプロセッサ120及び命令メモリ150を含み、これらが全てシステムバス160によって接続される、ハードウェアプラットフォーム100である。プリプロセッサ120は、制御レジスタ130及び変換器140を含む。ハードウェアプラットフォーム100は、一般的に、中央処理装置(CPU)、基本的な周辺機器及びオペレーティングシステム(OS)を含む。本発明のプロセッサ110は、MIPS、ARM、インテルx86、PowerPC又はSPARC型マイクロプロセッサ等のCPUであり、ハードウェアに固有の命令(以下ではネイティブ命令と呼ばれる)を含み、これを実行するように構成される。本発明の実施例において、翻訳器140はJava(R)仮想機械(JVM)(例えばSun MicrosystemsによるKVM)である。命令メモリ150は、仮想機械命令(例えばJava(R)バイトコード170)を含む。実施例のプリプロセッサ120は、国際出願公開第WO9918486号において開示される仮想機械インタプリタ(VMI)であり、命令メモリ150から仮想機械命令(例えばバイトコード170)をフェッチしてきて、仮想機械命令をネイティブCPU命令のシーケンスに変換するように構成される。VMI 120は、バス160上の周辺機器であって、所定の範囲のCPUアドレスがVMI 120に割り当てられるメモリマッピングされた周辺機器として作動してもよい。VMI 120は、命令メモリ150のその時点の(又は次の)仮想機械命令を示す独立した仮想機械命令ポインタ180(「バイトコードカウンタ」)を管理する。
【0021】
図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によって生成される命令シーケンス(アルゴリズム)である。
【0022】
割込み命令シーケンスは、プロセッサ割込みを引き起こすネイティブ命令のあらゆる組合せを含むことができる。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で除算する関数である。
【0023】
VMI 120は、(ステップ250で)フェッチされたバイトコード170に対応するネイティブ命令のシーケンスを割込み命令とともに(CPU 110に)送る。ステップ260及び270は、CPU内で発生する。CPU 110は、ネイティブ命令及び割込み命令のシーケンスを実行する。ステップ260において例外が投げられる場合、割込み命令によってプロセッサ割込みが生じ、ステップ270において例外処理プロセスが実行される。例えば、VMI 120は、方法を構成するフェッチされたバイトコードシーケンスの各々とともに、例外を処理するバイトコードシーケンスを送るようにプログラムされることができる。例外が投げられない場合、VMI 120は、ステップ210に戻ることによって命令メモリ150から次のバイトコード170を処理するように進行する。
【0024】
本発明は、仮想機械インタプリタアクセラレータハードウェアの実現例に関して説明されるが、当業者に理解されるように、種々の他のバイトコード処理システムと連携した実現例が可能である。
【0025】
前述を鑑みて、本発明は、仮想機械命令の処理の最中の例外の正確で効率のよい検知のシステム及び方法を提供することが理解されるであろう。更に、上述は、本発明の実施例に関するのみであり、以下の請求項により規定される本発明の精神及び範囲から逸脱することなく、上記の実施例に多くの変更が加えられることができることが理解されるであろう。
【図面の簡単な説明】
【0026】
【図1】本発明の環境の実施例の機能素子を示すブロック図である。
【図2】本発明の実施例による方法を示すフローチャートである。
【0001】
本発明は、一般にはコンピュータプログラム言語に関し、より詳細には、仮想機械言語の変換及び実行に関する。
【背景技術】
【0002】
コンピュータプログラム言語は、コンピュータが実行するための命令を表す、人間が読取り可能なソースコードからなるアプリケーションを作成するために用いられる。しかし、コンピュータが命令に従うことができる前に、ソースコードはコンピュータが読取り可能なバイナリマシンコードに変換されなければならない。
【0003】
一般的に、C、C++又はCOBOL等のプログラム言語は、コンパイラを用いて、ソースコードからアセンブリ言語を生成し、次に、アセンブリ言語を、機械コードに変換される機械語に変換する。従って、ソースコードの最終的な変換は、実行時の前に行われる。異なったコンピュータは異なった機械語を必要とするため、例えばC++で記述されるプログラムは、該プログラムがそれ用に記述された特定のハードウェアプラットフォームでのみ実行することができる。
【0004】
翻訳されたプログラム言語は、複数のハードウェアプラットフォーム上で実行されるソースコードを有するアプリケーションを作成するように設計されている。Java(R)は、実行時の前に「バイトコード」又は「仮想機械言語」として知られる中間言語に変換されるソースコードを生成することによってプラットフォーム独立性を達成する翻訳されたプログラム言語である。仮想機械は、実行時に、バイトコードをプラットフォームに適切なマシンコードに変換する。本質的には、仮想機械は物理構造ではなく、VM内又はCPU内に記憶される対応するネイティブ機械語命令を選択することによってハードウェアプラットフォームのためのバイトコードを翻訳する、(インタプリタソフトウェア又は一連のプロセッサ命令によって生成される)自己内蔵型動作環境である。次に、ネイティブ命令は、ハードウェアプラットフォームのCPUに供給され、続けて、実行される。典型的な仮想機械は、動作のFDD系列を実行するのに、バイトコードごとに(バイトコードの品質及び複雑性に応じて)20〜60サイクルの処理時間を必要とする。各バイトコードを翻訳するために、Java仮想機械は、「フェッチ、デコード、ディスパッチ」(FDD)動作のシーケンスを実行する。各バイトコード命令について、Java仮想機械(JVM)は、ネイティブ中央処理装置(CPU)命令で表される対応する実行プログラムを含む。JVMは、CPUに、メモリから仮想機械命令をフェッチさせ又は読み取らせ、バイトコード命令のための実行プログラムのCPUアドレスをデコードさせ、当該実行プログラムにCPUの制御権を移動することによりディスパッチさせる。解釈プロセスは、時間がかかりうる。
【0005】
本願と同一の発明者及び譲受人のPCT特許出願公開第WO9918484号に開示されるように、メモリとCPUとの間にプリプロセッサ(仮想機械インタプリタ(VMI))を加えることは、仮想機械命令の処理を加速する。VMIは、ネイティブCPU命令を「オンザフライ(on-the-fly)」で生成することによってJavaバイトコードを翻訳するハードウェアモジュールである。VMIは、まず、メモリからバイトコードを読み取る(フェッチする)。VMIは、次に、フェッチされたバイトコードの多くの特性を調べる(デコードする)。VMIによってアクセスされる特性は、バイトコードがCPUへのディスパッチ及び実行のために如何に処理されてネイティブ命令にされるかを決定する。従って、VMIは、各FDDをソフトウェアではなくハードウェアで実行することができる。CPUが1つの命令を実行している最中に、VMIは次のバイトコードをフェッチして、処理してCPU命令にする。
【0006】
仮想機械は、バイトコードのシーケンスを翻訳する最中に、アレイの境界外にアクセスする命令等の、不正な動作を生じるバイトコード(又はバイトコードのシーケンス)に遭遇する可能性がある。このような不正な動作の実行は、投げられるべき例外を生じさせ、この例外は、引き続きの関数が、ExceptionOccurred、ExceptionDescribe及びExceptionClear等、例外に関連していない限り、次の機能がコールされることができる前に対処され消去されなければならない。プロセッサに基づいた例外チェック手順において、例外は、例外チェックが、バイトコードによって要求される動作が実際に不正な動作の実行を生じるかどうかを決定するまで保留される。なぜなら、例外の保留中に例外に関連しない機能をコールすることは、予期せぬ結果を生じうるからである。しかし、Javaでは、例外チェックが実行される間、例外は保留状態に保持されない。むしろ、例外条件は、CPU命令の実行を通じて明白にチェックされる。一旦例外状況が検出されると、例外のタイプに応じて例外オブジェクトが作成され、例外処理ソフトウェアが実行される。
【0007】
例外チェックへの仮想機械アプローチは、VMI実現に関しては最適でない。例えば、仮想機械は、IALoadバイトコードを翻訳するために、アレイアクセスのインデックスをアレイのサイズと比較する命令を生成する。これは、境界外状態を生じる可能性がある動作である。VMIは、潜在的な境界外状態が条件付き分岐の一種であるかのように反応し、境界外の例外が実際に起こるかどうかを示す例外チェックの結果のCPUからの受領を待つ間、かなりの時間バイトコードの処理を停止する。従って、この例外処理の解決策は、相当な量のオーバヘッド(即ち処理時間の負荷)を必要とする。
【発明の開示】
【発明が解決しようとする課題】
【0008】
例外検出及びチェックを実行するのに必要な処理時間を低下させる仮想機械ハードウェアアクセラレータ(仮想機械インタプリタ等)による仮想機械命令の処理方法の必要がある。
【課題を解決するための手段】
【0009】
本発明は、プロセッサからの例外チェックの結果の返答を待つ必要性を不要にすることによって例外チェックに付随する処理遅延を有利に最小化する、仮想機械命令を処理する最中に例外を検出するシステム及び方法を提供することによって上記の要求を満たす。
【0010】
より詳細には、本発明のシステム及び方法によれば、仮想機械ハードウェアアクセラレータ(VMI等)は、バイトコードが不適切な動作を生じたらCPUに割込みを生じさせるネイティブ命令を処理しディスパッチすることによってバイトコードが例外を投げるかどうか決定する。
【0011】
簡潔には、仮想機械命令を処理する方法の典型的な実施例は、バイトコードをフェッチするステップと、バイトコードカウンタをインクリメントするステップとを含む。VMIは、フェッチされたバイトコードを処理して、プロセッサ(CPU)によって実行可能なネイティブ命令にし(即ち、VMIはネイティブ命令のシーケンスを「生成する」)、VMIは、バイトコードに対応するネイティブ命令を、バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令(「割込み命令」)とともに、ディスパッチする。ほとんどのCPUの命令セットは、特別な割込み機能を含み、その幾つかは、TRAP、SYSCALL又はBREAK(MIPsプロセッサ用)等の無条件の割込み命令である。しかし、無条件の割込み命令は、実行されると、例外が存在するかどうかに関係なくCPU割込みを生じさせる。従って、無条件の割込み命令は、例外を検出するためにはVMIによって用いられない。なぜなら、そうすることは、無条件の割り込み命令を発動する前にCPUからの例外条件の受信をVMIが待つことを必要とするからである。そうではなく、VMIは、条件つきの割込み命令を用いて例外を検出する。
【0012】
例外条件が存在すると割込みを生じさせることができる命令シーケンスをVMIが生成するとき、条件付きの割込み状況が作成される。VMIは、プロセッサ割込みを生じさせるネイティブ命令のシーケンスを、例外インジケータに計算を実行してプロセッサ割込みを生じさせるアルゴリズムを作成することによって生成する。代替的に、VMIはCPU命令セットから個々の条件付き割込み命令を生成する。割込み命令又は命令シーケンスのいずれのタイプも、VMIによって、CPUにディスパッチされるネイティブ命令のシーケンスの一部として「生成される」。
【0013】
CPUは、バイトコードによって要求されるネイティブ命令を割込み命令とともに実行する。バイトコードによって要求されるネイティブ命令の実行が不正な動作を生じる場合、割込み命令はプロセッサ割込みを生じる。従って、CPUからVMIに例外チェックの結果を転送する必要性がない。その結果、本発明によるJava例外チェックは、より時間がかからない。
【0014】
プロセッサ割込みが行われると、例示のシステムは、例外を取り扱うようにプログラムされることができる。原理的には、例外を生じうるあらゆる動作について、Javaプログラマは適切な応答を示さなければならない(即ち、その例外を取り扱うためにコードを提供する)。従って、バイトコードレベルで、方法を構成する全てのバイトコードのシーケンスは、バイトコードの追加のシーケンスと、あらゆる考えうる例外状況について実行されるべき例外処理バイトコードのシーケンスを示すテーブルとを含まなければならない。
【0015】
本発明の実施例のシステムは、ネイティブ命令を実行するネイティブ命令セットを有するプロセッサ及びバイトコードを記憶する命令メモリを含む、バイトコードを処理する装置である。VMIは、命令メモリからバイトコードをフェッチし、バイトコードを処理してネイティブCPU命令にし、該バイトコードを、前記処理された仮想機械命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる割込み命令とともにディスパッチされる。仮想機械命令カウンタは、各バイトコードが処理された後にインクリメントされる。代替的に、VMIは、割込み命令をCPU命令セットから取得するか、又は、割込み命令を生成する。
【0016】
本発明は、Sun Microsystemsによって作られたJVMs等の仮想機械を用いてJava(R)バイトコードを実行するシステムで実現されることができる。しかし、本発明はまた、Microsoft Virtual Machine等の他のJava(R)仮想機械を用いて実現されることができ、また、Visual Basic、dBASE、BASIC及び.NET等の他の翻訳された言語を実行するシステムに適用可能である。
【発明を実施するための最良の形態】
【0017】
本発明の他の目的、利点及び新規な特徴は、一部は以下の説明で開示され、一部は、当業者には、以下の検討によって明らかになる又は本発明の実施によって学習されるであろう。
【0018】
明細書に組み込まれその一部をなす添付の図面は、説明を参照することにより本発明を表す。
【0019】
ここで、必要とされるとおり、本発明の詳細な実施例が開示されるが、開示された実施例は、種々の代替形式で実現されることができる本発明の実施例に過ぎないということが理解されるべきである。図は、必ずしも一定の比率ではなく、幾つかの機能は、特定の部品の詳細を示すために誇張又は最小化されていてよい。従って、ここで開示された具体的な構造的、機能的詳細は、制限的であると解釈されるべきではなく、請求項の基礎に過ぎず、本発明を当業者に種々に適用するための代表的な基礎に過ぎないと解釈されるべきである。
【0020】
添付の図面に示された本発明の1つの実施例の詳細をここで参照する。図面においては類似の番号は類似の部品を示す。図1は、本発明の環境の実施例のブロック図である。環境の基本的な部品は、プロセッサ110、プリプロセッサ120及び命令メモリ150を含み、これらが全てシステムバス160によって接続される、ハードウェアプラットフォーム100である。プリプロセッサ120は、制御レジスタ130及び変換器140を含む。ハードウェアプラットフォーム100は、一般的に、中央処理装置(CPU)、基本的な周辺機器及びオペレーティングシステム(OS)を含む。本発明のプロセッサ110は、MIPS、ARM、インテルx86、PowerPC又はSPARC型マイクロプロセッサ等のCPUであり、ハードウェアに固有の命令(以下ではネイティブ命令と呼ばれる)を含み、これを実行するように構成される。本発明の実施例において、翻訳器140はJava(R)仮想機械(JVM)(例えばSun MicrosystemsによるKVM)である。命令メモリ150は、仮想機械命令(例えばJava(R)バイトコード170)を含む。実施例のプリプロセッサ120は、国際出願公開第WO9918486号において開示される仮想機械インタプリタ(VMI)であり、命令メモリ150から仮想機械命令(例えばバイトコード170)をフェッチしてきて、仮想機械命令をネイティブCPU命令のシーケンスに変換するように構成される。VMI 120は、バス160上の周辺機器であって、所定の範囲のCPUアドレスがVMI 120に割り当てられるメモリマッピングされた周辺機器として作動してもよい。VMI 120は、命令メモリ150のその時点の(又は次の)仮想機械命令を示す独立した仮想機械命令ポインタ180(「バイトコードカウンタ」)を管理する。
【0021】
図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によって生成される命令シーケンス(アルゴリズム)である。
【0022】
割込み命令シーケンスは、プロセッサ割込みを引き起こすネイティブ命令のあらゆる組合せを含むことができる。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で除算する関数である。
【0023】
VMI 120は、(ステップ250で)フェッチされたバイトコード170に対応するネイティブ命令のシーケンスを割込み命令とともに(CPU 110に)送る。ステップ260及び270は、CPU内で発生する。CPU 110は、ネイティブ命令及び割込み命令のシーケンスを実行する。ステップ260において例外が投げられる場合、割込み命令によってプロセッサ割込みが生じ、ステップ270において例外処理プロセスが実行される。例えば、VMI 120は、方法を構成するフェッチされたバイトコードシーケンスの各々とともに、例外を処理するバイトコードシーケンスを送るようにプログラムされることができる。例外が投げられない場合、VMI 120は、ステップ210に戻ることによって命令メモリ150から次のバイトコード170を処理するように進行する。
【0024】
本発明は、仮想機械インタプリタアクセラレータハードウェアの実現例に関して説明されるが、当業者に理解されるように、種々の他のバイトコード処理システムと連携した実現例が可能である。
【0025】
前述を鑑みて、本発明は、仮想機械命令の処理の最中の例外の正確で効率のよい検知のシステム及び方法を提供することが理解されるであろう。更に、上述は、本発明の実施例に関するのみであり、以下の請求項により規定される本発明の精神及び範囲から逸脱することなく、上記の実施例に多くの変更が加えられることができることが理解されるであろう。
【図面の簡単な説明】
【0026】
【図1】本発明の環境の実施例の機能素子を示すブロック図である。
【図2】本発明の実施例による方法を示すフローチャートである。
Claims (8)
- 仮想機械命令を処理する方法において、
仮想機械命令をフェッチするステップと、
前記仮想機械命令を処理してプロセッサによって実行可能なネイティブ命令にするステップと、
前記処理されたネイティブ命令を、実行のために、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令と共に前記プロセッサにディスパッチするステップと、
前記処理されたネイティブ命令と、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令とを実行するステップと、
を有する方法。 - 請求項1に記載の方法において、前記仮想機械命令をフェッチして、これを処理してプロセッサによって実行可能なネイティブ命令にする前記ステップは、仮想機械インタプリタ(VMI)仮想機械ハードウェアアクセラレータによって達成される、方法。
- 請求項1に記載の方法において、更に、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令を生成するステップを有する方法。
- 請求項3に記載の方法において、前記処理されたネイティブ命令と、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令とを実行する前記ステップが、更に、
前記ディスパッチされたネイティブ命令の実行が不正な動作を生じるかの例外チェック結果を生成するステップと、
プロセッサ割込みが生じた前記例外チェックの結果にアルゴリズムを実行することによって、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令を実行するステップと、
を有する方法。 - 仮想機械命令を処理する装置において、
ネイティブ命令セットを有すると共にネイティブ命令を実行するように構成されたプロセッサと、
仮想機械命令を記憶するように構成された命令メモリと、
前記命令メモリから仮想機械命令をフェッチし、前記フェッチされた仮想機械命令を処理して前記プロセッサによって実行可能なネイティブ命令にし、前記処理された仮想機械命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせるネイティブ命令を追加し、前記処理されたネイティブ命令及び前記追加されたネイティブ命令を実行のために前記プロセッサにディスパッチする、ように構成されるプリプロセッサと、
を有する装置。 - 請求項5に記載の装置において、前記プリプロセッサは、仮想機械インタプリタ(VMI)仮想機械ハードウェアアクセラレータである、装置。
- 請求項5に記載の装置において、前記プリプロセッサは、更に、前記処理されたネイティブ命令の実行が不正な動作を生じる場合にプロセッサ割込みを生じさせる前記ネイティブ命令を生成するように構成される、装置。
- 請求項7に記載の装置において、前記プロセッサは、更に、前記処理されたネイティブ命令及び前記追加されたネイティブ命令を実行し、前記ディスパッチされたネイティブ命令の実行が不正な動作を生じる場合に例外インジケータを生成し、前記例外インジケータにアルゴリズムを実行してプロセッサ割込みを生じさせることによって前記追加された前記ネイティブ命令を実行する、ように構成される、装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP01402778 | 2001-10-25 | ||
PCT/IB2002/004183 WO2003036467A1 (en) | 2001-10-25 | 2002-10-10 | Low overhead exception checking |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005506630A true JP2005506630A (ja) | 2005-03-03 |
Family
ID=8182940
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003538889A Withdrawn JP2005506630A (ja) | 2001-10-25 | 2002-10-10 | 低オーバヘッドの例外チェック |
Country Status (6)
Country | Link |
---|---|
US (1) | US20030093456A1 (ja) |
EP (1) | EP1442361A1 (ja) |
JP (1) | JP2005506630A (ja) |
KR (1) | KR20040058228A (ja) |
CN (1) | CN1575451A (ja) |
WO (1) | WO2003036467A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7747989B1 (en) | 2002-08-12 | 2010-06-29 | Mips Technologies, Inc. | Virtual machine coprocessor facilitating dynamic compilation |
US20050015768A1 (en) * | 2002-12-31 | 2005-01-20 | Moore Mark Justin | System and method for providing hardware-assisted task scheduling |
JP3866749B2 (ja) * | 2005-03-07 | 2007-01-10 | 富士通株式会社 | マイクロプロセッサ |
KR101493076B1 (ko) * | 2009-04-07 | 2015-02-12 | 삼성전자 주식회사 | 버퍼 오버플로우 관리를 통한 바이러스 코드 실행방지장치 및 그 방법 |
US9990273B2 (en) | 2016-03-17 | 2018-06-05 | Tata Consultancy Services Limited | Methods and systems for anomaly detection |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5363501A (en) * | 1992-12-22 | 1994-11-08 | Sony Electronics, Inc. | Method for computer system development verification and testing using portable diagnostic/testing programs |
US5842017A (en) * | 1996-01-29 | 1998-11-24 | Digital Equipment Corporation | Method and apparatus for forming a translation unit |
US5802373A (en) * | 1996-01-29 | 1998-09-01 | Digital Equipment Corporation | Method for providing a pipeline interpreter for a variable length instruction set |
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 |
KR100623403B1 (ko) * | 1997-10-02 | 2006-09-13 | 코닌클리케 필립스 일렉트로닉스 엔.브이. | 가상 머신 명령을 처리하기 위한 데이터 처리 장치 |
US5915117A (en) * | 1997-10-13 | 1999-06-22 | Institute For The Development Of Emerging Architectures, L.L.C. | Computer architecture for the deferral of exceptions on speculative instructions |
US6170083B1 (en) * | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
US6631514B1 (en) * | 1998-01-06 | 2003-10-07 | Hewlett-Packard Development, L.P. | Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations |
US6760907B2 (en) * | 1998-06-30 | 2004-07-06 | Sun Microsystems, Inc. | Code generation for a bytecode compiler |
KR20010072477A (ko) * | 1998-08-13 | 2001-07-31 | 썬 마이크로시스템즈, 인코포레이티드 | 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 |
US6332215B1 (en) * | 1998-12-08 | 2001-12-18 | Nazomi Communications, Inc. | Java virtual machine hardware for RISC and CISC processors |
US7065750B2 (en) * | 1999-02-17 | 2006-06-20 | Elbrus International | Method and apparatus for preserving precise exceptions in binary translated code |
EP1290555A2 (en) * | 2000-03-20 | 2003-03-12 | Koninklijke Philips Electronics N.V. | Method of executing a computer program with an interpreter, computer system and computer program product |
US6981132B2 (en) * | 2000-08-09 | 2005-12-27 | Advanced Micro Devices, Inc. | Uniform register addressing using prefix byte |
JP2004507832A (ja) * | 2000-08-31 | 2004-03-11 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 仮想マシン命令を実行するシステム |
GB2367653B (en) * | 2000-10-05 | 2004-10-20 | Advanced Risc Mach Ltd | Restarting translated instructions |
US6718539B1 (en) * | 2000-12-22 | 2004-04-06 | Lsi Logic Corporation | Interrupt handling mechanism in translator from one instruction set to another |
US6895579B2 (en) * | 2001-07-31 | 2005-05-17 | Intel Corporation | Method and apparatus for maintaining exception reporting for register promotion |
US6976254B2 (en) * | 2001-11-28 | 2005-12-13 | Esmertec Ag | Inter-method control transfer for execution engines with memory constraints |
US7577951B2 (en) * | 2002-05-30 | 2009-08-18 | Hewlett-Packard Development Company, L.P. | Performance of computer programs while they are running |
-
2002
- 2002-10-10 JP JP2003538889A patent/JP2005506630A/ja not_active Withdrawn
- 2002-10-10 WO PCT/IB2002/004183 patent/WO2003036467A1/en not_active Application Discontinuation
- 2002-10-10 CN CNA028210794A patent/CN1575451A/zh active Pending
- 2002-10-10 KR KR10-2004-7006003A patent/KR20040058228A/ko not_active Application Discontinuation
- 2002-10-10 EP EP02772730A patent/EP1442361A1/en not_active Withdrawn
- 2002-10-22 US US10/277,538 patent/US20030093456A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20030093456A1 (en) | 2003-05-15 |
KR20040058228A (ko) | 2004-07-03 |
CN1575451A (zh) | 2005-02-02 |
WO2003036467A1 (en) | 2003-05-01 |
EP1442361A1 (en) | 2004-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6349377B1 (en) | Processing device for executing virtual machine instructions that includes instruction refeeding means | |
EP3314422B1 (en) | Extending a virtual machine instruction set architecture | |
US7434030B2 (en) | Processor system having accelerator of Java-type of programming language | |
KR100463810B1 (ko) | 어드레스되는 구성요소의 물리적 특성에 관한 추측 실패를 검출하는 마이크로프로세서용 메모리 제어기 | |
US6122638A (en) | Object-oriented processor and method for caching intermediate data in an object-oriented processor | |
US5812823A (en) | Method and system for performing an emulation context save and restore that is transparent to the operating system | |
US20060277532A1 (en) | Method and apparatus for converting program code with access coordination for a shared resource | |
US20070288909A1 (en) | Hardware JavaTM Bytecode Translator | |
KR100443759B1 (ko) | 개선된 마이크로프로세서 | |
JP2001504957A (ja) | 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置 | |
JP2000347871A (ja) | スタブ/アダプタ自動生成器 | |
US7210140B2 (en) | Software support for virtual machine interpreter (VMI) acceleration hardware | |
Probst | Dynamic binary translation | |
US7243350B2 (en) | Speculative execution for java hardware accelerator | |
JP2004538556A (ja) | 複数命令セットシステムにおける非処理操作処理 | |
KR100421687B1 (ko) | 개선된 마이크로프로세서를 위한 변환 메모리 보호 장치 | |
US5732235A (en) | Method and system for minimizing the number of cycles required to execute semantic routines | |
JP2005506630A (ja) | 低オーバヘッドの例外チェック | |
US20050216711A1 (en) | Null exception handling | |
US20050251652A1 (en) | Methods and apparatus for processing an extensible firmware interface byte code instruction in a loop | |
KR100930831B1 (ko) | 바이트코드 변환 가속 장치 및 그 방법 | |
WO2002071211A2 (en) | Data processor having multiple operating modes | |
JPS61251936A (ja) | 仮想計算機システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051007 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20070522 |