(57)【要約】条件付き分岐バイトコードは仮想マシンインタープリタ（ＶＭＩ）ハードウェアアクセラレータにより処理され、該アクセラレータは分岐予測方法を使用して、ＣＰＵが条件制御変数を戻すのを待つ間にバイトコードを投機的に処理すべきかを決定する。或る分岐予測方法においては、上記ＶＭＩは、条件付き分岐バイトコードが後方ジャンプを求める場合は分岐条件が満たされると仮定し、条件付き分岐バイトコードが前方ジャンプを求める場合は分岐条件が満たされないと仮定する。他の分岐予測方法においては、上記ＶＭＩは条件付き分岐バイトコードが後方ジャンプを求める場合にのみ仮定を行う。更に他の投機的実行方法において、上記ＶＭＩは、条件付き分岐バイトコードを処理する場合は常に分岐条件が満たされると仮定する。該ＶＭＩは、容易に元に戻すことが可能なバイトコード（例えば、単純なスタック操作を表すバイトコード）のみを投機的に処理し、容易に元に戻すことができないバイトコードに出会うと、バイトコードの投機的処理を保留する。該ＶＭＩによりなされた仮定は、上記条件制御変数が入力された際に確認又は無効化される。仮定が無効化された場合は、如何なる投機的に処理されたバイトコードも元に戻される。
2005504390.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン命令を処理する方法において、該方法が、
処理が条件制御変数の値に条件的に依存するような仮想マシン命令の部分集合を識別するステップと、
一連の仮想マシン命令を取り込むと共に、これら仮想マシン命令をプロセッサにより実行可能なネイティブ命令へと処理するステップであって、前記一連の仮想マシン命令における仮想マシン命令を処理し、実行のために前記プロセッサにディスパッチした後に仮想マシン命令カウンタがインクリメントされ、当該ステップを前記仮想マシン命令の部分集合のメンバに出会うまで継続するようなステップと、
前記メンバに出会うと、該メンバにより表されるネイティブ命令を実行のために前記プロセッサにディスパッチすることにより制御値取出処理を開始するステップと、
前記条件制御変数の実際値の仮定値に関して仮定がなされた場合に仮想マシン命令の投機的シーケンスを処理するステップであって、該投機的シーケンスを、
投機モードスイッチをオンに切り換え、
前記条件制御変数の前記実際値が入力されるまで、前記仮想マシン命令の投機的シーケンスにおける各仮想マシン命令をネイティブ命令へと処理するために前記仮定値に従って前記仮想マシン命令カウンタを更新し、前記各仮想マシン命令が処理された後に前記仮想マシン命令カウンタをインクリメントすると共に前記ネイティブ命令をディスパッチし、
前記実際値を前記仮定値と比較し、
前記実際値が前記仮定値と等しくない場合に、前記仮想マシン命令の投機的シーケンスの処理を元に戻し、投機モード履歴を除去し、前記仮想マシン命令カウンタの前記更新を元に戻すか、又は
前記実際値が前記仮定値に等しい場合に、前記投機モードスイッチをオフに切り換えると共に、前記投機モード履歴を除去する、
ことにより処理するようなステップと、
前記条件制御変数の実際値の仮定値に関して仮定がなされない場合に、前記一連の仮想マシン命令の更なる取り込み及び処理を前記条件制御変数の前記実際値が入力されるまで遅らせ、次いで次の仮想マシン命令を該実際値に従って処理するステップと、
を有することを特徴とする方法。
【請求項２】
請求項１に記載の方法において、前記一連の仮想マシン命令を取り込み及びプロセッサにより実行可能なネイティブ命令へと処理するステップが、仮想マシンインタプリタ（ＶＭＩ）の仮想マシンハードウェアアクセラレータによりなされることを特徴とする方法。
【請求項３】
請求項１に記載の方法において、前記仮想マシン命令の投機的シーケンスを処理するステップが、
前記投機的シーケンスの各仮想マシン命令を、該仮想マシン命令が容易に元に戻すことができるものである場合にのみ処理するステップと、
次の仮想マシン命令がスタック操作を表していない場合は、前記仮想マシン命令の投機的シーケンスの処理を、前記条件制御変数の実際値が入力されるまで保留するステップと、
を有していることを特徴とする方法。
【請求項４】
請求項３に記載の方法において、前記投機的シーケンスの処理を保留するステップが、前記条件制御変数の実際値が入力されるまで、前記プロセッサに対して一連の"ノーオペレーション"命令をディスパッチするステップを有していることを特徴とする方法。
【請求項５】
請求項２に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、
識別された前記仮想マシン命令の部分集合の前記メンバにより求められる前記仮想マシン命令カウンタに対する変位を決定するステップと、
前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの負の変位（オフセット<０）を求める場合に、前記条件制御変数の前記仮定値を分岐条件が満たされることを示すように設定するステップと、
を有していることを特徴とする方法。
【請求項６】
請求項５に記載の方法において、前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの正の変位（オフセット>０）を求める場合に、前記条件制御変数の前記仮定値を前記分岐条件が満たされないことを示すように設定するステップを更に有していることを特徴とする方法。
【請求項７】
請求項５に記載の方法において、前記識別された仮想マシン命令の部分集合の前記メンバが前記仮想マシン命令カウンタの正の変位（オフセット>０）を求める場合に、前記条件制御変数の前記実際値に関して仮定を行わないステップを更に有していることを特徴とする方法。
【請求項８】
請求項２に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を分岐条件が満たされることを示すように設定するステップを更に有していることを特徴とする方法。
【請求項９】
請求項２に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を分岐予測方法に従って設定するステップを更に有していることを特徴とする方法。
【請求項１０】
請求項２に記載の方法において、前記条件制御変数の実際値の仮定値に関して仮定を行うべきかを決定するステップが、前記条件制御変数の前記仮定値を投機的実行方法に従って設定するステップを更に有していることを特徴とする方法。
【請求項１１】
仮想マシン命令を処理する方法において、該方法が、
一連の仮想マシン命令を取り込むと共に、これら仮想マシン命令をプロセッサにより実行可能なネイティブ命令へと処理するステップであって、当該ステップを条件付き分岐命令に出会うまで継続するようなステップと、
前記条件付き分岐命令に出会うと、該条件付き分岐命令により表されるネイティブ命令を前記プロセッサに実行のためにディスパッチすることにより制御値取出処理を開始するステップと、
条件制御変数の値に関して仮定を行うかを決定するステップと、
前記条件制御変数の値に関して仮定が行われた場合に、仮想マシン命令の投機的シーケンスを処理するステップであって、該投機的シーケンスを、
前記仮想マシン命令の投機的シーケンスにおける仮想マシン命令を、該仮想マシン命令が容易に元に戻すことが可能である場合にのみ、予備的ネイティブ命令へと処理し、
該仮想マシン命令がスタック操作を表さない場合に、前記仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留する、
ことによって処理するステップと、
前記条件制御変数の値に関して仮定がなされない場合に、前記一連の仮想マシン命令の更なる取り込み及び処理を前記条件制御変数の値が入力されるまで遅らせ、次いで次の仮想マシン命令を該入力された値に従って処理するステップと、
を有することを特徴とする方法。
【請求項１２】
請求項１１に記載の方法において、前記仮想マシン命令の投機的シーケンスを処理するステップが、
前記入力された条件制御変数の値を仮定値と比較するステップと、
前記条件制御変数の値が前記仮定値と等しくない場合に、前記仮想マシン命令の投機的シーケンスの処理を元に戻すと共に、投機モード履歴を除去するステップと、
前記条件制御変数の値が前記仮定値と等しい場合に、投機モードスイッチをオフに切り換えると共に、前記投機モード履歴を除去するステップと、
を更に有することを特徴とする方法。
【請求項１３】
仮想マシン命令を処理する装置において、
ネイティブ命令セットを有すると共にネイティブ命令を実行するように構成されたプロセッサと、
仮想マシン命令を記憶するように構成された命令メモリと、
前記命令メモリから仮想マシン命令を取り込むと共に該取り込まれた仮想マシン命令を前記プロセッサにより実行可能なネイティブ命令へと処理し、条件付き仮想マシン命令を識別し、前記プロセッサにより条件制御変数の値が送られつつある間に仮想マシン命令を投機的に処理すべきかを決定し、これら投機的に処理された仮想マシン命令を前記条件制御変数が入力された際に確認するか又は元に戻すように構成されたプリプロセッサと、
を有し、前記プリプロセッサが、更に、
前記プロセッサから入力された前記条件制御変数の値を記憶するように構成された制御レジスタと、
処理されるべき次の仮想マシン命令を示すように構成された仮想マシン命令カウンタと、
仮定された制御変数の値を記憶するように構成された仮定変数レジスタと、
当該プリプロセッサが前記条件制御変数の値に関して仮定を行ったかを示すように構成された投機モードビットと、
前記条件制御変数の値が送られつつある間に投機モードビットを記憶するように構成された投機モード履歴と、
を有していることを特徴とする装置。
【請求項１４】
請求項１３に記載の装置において、前記プリプロセッサが仮想マシンインタープリタ（ＶＭＩ）の仮想マシンハードウェアアクセラレータであることを特徴とする装置。
【請求項１５】
請求項１３に記載の装置において、前記プリプロセッサは、容易に元に戻すことができる仮想マシン命令のみを投機的に処理し、容易に元に戻すことができない仮想マシン命令に出会った場合は仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留するように更に構成されていることを特徴とする装置。
【請求項１６】
請求項１５に記載の装置において、前記プリプロセッサは、投機的処理が保留されている間において、且つ、前記条件制御変数の値が入力されるまで、一連の"ノーオペレーション"命令をディスパッチするように更に構成されていることを特徴とする装置。
【請求項１７】
請求項１５に記載の装置において、前記プリプロセッサは、スタック操作を表すような仮想マシン命令のみを投機的に処理し、スタック操作でない仮想マシン命令に出会った場合は仮想マシン命令の投機的シーケンスの処理を前記条件制御変数の値が入力されるまで保留するように更に構成されていることを特徴とする装置。
【請求項１８】
請求項１７に記載の装置において、前記プリプロセッサは、投機的処理が保留されている間において、且つ、前記条件制御変数の値が入力されるまで、一連の"ノーオペレーション"命令をディスパッチするように更に構成されていることを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、広くはコンピュータプログラミング言語に係り、更に詳細には仮想マシン言語の翻訳及び実行に関する。
【背景技術】
【０００２】
コンピュータプログラミング言語は、コンピュータが実行する命令を表すような人が読むことが可能なソースコードからなるアプリケーションを作成するために使用される。しかしながら、コンピュータが理解することができる前に、上記ソースコードはコンピュータが読み取り可能な二進マシンコードに翻訳されねばならない。
【０００３】
Ｃ、Ｃ＋＋又はコボルのようなプログラミング言語は、典型的には、上記ソースコードからアセンブリ言語を発生し、次いで該アセンブリ言語をマシンコードに変換されるマシン言語に変換するためにコンパイラを使用している。このように、ソースコードの最終的翻訳は実行時の前に行われる。異なるコンピュータは異なるマシン言語を必要とするので、例えばＣ＋＋で書かれたプログラムは、該プログラムが書かれた特定のハードウェアプラットフォーム上のみで実行することができる。
【０００４】
解釈（interpreted）プログラミング言語は、複数のハードウェアプラットフォーム上で実行するソースコードでアプリケーションを作成するように設計されている。ジャバ（登録商標）は、実行時前に"バイトコード"又は"仮想マシン言語"として知られている中間言語に変換されるようなソースコードを発生することにより、プラットフォームからの独立性を達成する解釈プログラミング言語である。実行時において、上記バイトコードは、米国特許第4,443,865号に開示されているように、インタープリタソフトウェアを介してプラットフォームに適したマシンコードに変換される。各バイトコードを解釈するために、インタープリタソフトウェアは"取り込み、デコード及びディスパッチ"（ＦＤＤ）なる一連の処理を実行する。各バイトコード命令に対して、上記インタープリタソフトウェアは、ネイティブ中央処理装置（ＣＰＵ）命令で表された対応する実行プログラムを含んでいる。該インタープリタソフトウェアはＣＰＵにメモリから仮想マシン命令を取り込み又は読み取らせ、当該バイトコード命令に関して実行プログラムのＣＰＵアドレスをデコードさせ、ＣＰＵの制御を該実行プログラムに移行させることによりディスパッチさせる。斯かる解釈処理は時間の掛かるものであり得る。
【０００５】
国際特許出願公開第WO9918484号に開示されているように、メモリとＣＰＵとの間にプリプロセッサ（仮想マシンインタープリタ（ＶＭＩ））を付加することにより、仮想マシン命令の処理が改善される。本質的に、仮想マシンは物理的構造ではなく、むしろ、ＶＭ内又はＣＰＵ内に記憶された対応するネイティブマシン言語命令を選択することにより当該ハードウェアプラットフォーム用にバイトコードを解釈する自立型動作環境である。この場合、上記ネイティブ命令は当該ハードウェアプラットフォームのＣＰＵに供給され、次いで該ＣＰＵにおいて実行される。典型的な仮想マシンは、ＦＤＤ系列の処理を実行するのに、バイトコード当たり２０ないし６０サイクルの処理時間を必要とする（当該バイトコードの質及び複雑さに依存する）。先ず、ＶＭＩはメモリからバイトコードを読み取る（取り込む）。次に、ＶＭＩは該取り込まれたバイトコードの複数のプロパティをルックアップする（デコードする）。ＶＭＩによりアクセスされたプロパティは、当該ＣＰＵにおいて実行するために、該バイトコードがどの様にネイティブ命令に処理されるかを決定する。ＣＰＵが命令を実行している間に、ＶＭＩは次のバイトコードを取り込み、該次のバイトコードをＣＰＵ命令に処理する。ＶＭＩは単純なバイトコードを１ないし４サイクルで処理することができる。
【０００６】
一連のバイトコードを解釈している間に、仮想マシンは、条件付き分岐命令（以下、ＣＢＩと呼ぶ）を表すバイトコードに出会う可能性がある。ＣＢＩに出会うと、ＶＭＩは、ＣＰＵに当該条件が満たされているかを判定させる一連のネイティブ命令を発生する。従って、当該分岐を実行するとの決定は以前の計算に依存し、斯かる計算はＶＭＩの概念ではＣＰＵレジスタに残存している結果によりＣＰＵで実行されたものである。例えば、ジャバ（登録商標）のバイトコード"ifeq n"はバイトコードカウンタを"ｎ"だけオフセットするが、これは当該スタックの最上部が零である（即ち、前の計算が該スタックに値零を残した）場合のみである。分岐条件（ここでは、スタックの最上部）の値は取り出され、ＶＭＩの制御レジスタ（分岐条件のために特別に確保される）に書き込まれなければならない。条件が満たされている場合は、該ＣＢＩはＶＭＩバイトカウンタに対する更新を生じさせ（ジャンプ）、該カウンタが実行されるべきバイトコードのシーケンスを変更させる。典型的には、１つの命令がＶＭＩで処理されつつある場合、処理されるべき次の命令は既にＶＭＩパイプライン内にあるので、或る命令が分岐となる場合、ＶＭＩパイプライン内に既にあるバイトコードは流されねばならない。更に、プロセッサハードウェアの"パイプライン化"構造は、命令及び／又はデータがプロセッサにディスパッチされる時点と、プロセッサが実効的に斯かる命令を実行し及び／又は斯かるデータを処理する時点との間で斯かる命令及びデータを移送する固有の遅延を生じる。詳細には、典型的なＣＰＵは多段（典型的には、３ないし８段）のパイプラインを有しているので、書込命令は該命令が送出された直後には実行されないであろう。ＣＢＩの場合、ＣＰＵが条件が満たされるかを判定し、この判定の結果をＶＭＩに転送する間に付加的な遅延を生じる。分岐条件の値（制御値）が当該分岐条件が満たされていることを示す場合、幾つかの（ＣＰＵパイプラインの大きさに依存する）命令が既にＣＰＵパイプラインに入っているであろう。ＣＰＵ及び命令キャッシュをビジーに維持するために、当該条件が満たされるかを示す制御値を待つ間に、一連の"ノーオペレーション"（ＮＯＰ）コマンドを発生させることができる。制御値は、ＣＰＵが最後より１つ前のＮＯＰを実行し、ＶＭＩが最後のＮＯＰを発生する間に入力される。上記判定を行った後、ＶＭＩパイプラインは、ＶＭＩが次の命令を表すバイトコードをＶＭＩキャッシュから取り出すのに数サイクルを要する。
【０００７】
他の方法は、命令が結果として他のロケーションへの分岐となるかを予測することにより、可能性のある分岐命令を投機的に実行する。この方法の一例はＲＩＳＣ（縮小命令セット計算）マイクロプロセッサに関するもので、どの条件付き分岐が予測するのが"容易"であるかを判断するために分岐命令ビットを設け、これらの分岐に対してはジャンプを実行すべきかを判断するためにソフトウェア分岐予測を使用する。ソフトウェア分岐予測は、ソフトウェア制御された予測ビットを用いて分岐を予測する。分岐が予測するのが"困難"であると判断されたら、該分岐はハードウェア分岐予測（分岐予測アレイのような）を用いて予測される。この方法は、オフセットが零より小さい（後方分岐）なら分岐がとられ、オフセットが零より大きければ（前方分岐）分岐がとられないと予測するような分岐予測方法を用いることを開示している。この方法の問題点は、とられた分岐の履歴的処理が該分岐がとられるかを判断する場合に重要であるか否かに基づくような、前記予測の容易さの判断を行い且つ更新するためにプロセッサの資源を消費する点にある。
【０００８】
他の分岐予測方法においては、可能性のある分岐命令のアドレスからのビットが、ローカル分岐履歴テーブル及び全体履歴レジスタから連結されたビットと比較される。該比較の結果は分岐予測テーブルを読み取るために使用される。この方法の問題点は、上記連結及び比較処理を実行し、上記分岐予測テーブルを記憶及びアクセスするために要する資源の消費である。更に、該方法は予測誤りを補正する手段を開示していない。同様の方法論が米国特許第5,136,696号に開示されており、該方法において分岐予測は分岐キャッシュにより可能性のある分岐命令のアドレスに基づいて実行される。該開示によれば、予測が誤っている場合、対応する命令は無効化されるが、いずれにせよ実行されるので、分岐キャッシュは同一の命令に再び出会う場合に正しい予測により更新することができる。ＣＰＵパイプラインは、上記分岐キャッシュ更新と同一のサイクルの間において、当該パイプラインの最初の７段の命令の全てを無効化し、プログラムカウンタレジスタの内容をロードすることにより流される。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
条件付き分岐は頻繁に発生し（全仮想マシン命令のうちの約１０％）、高い精度は達成するがプロセッサ資源を消費するような既存の方法により処理される場合に処理が大変であるので、条件付き分岐命令バイトコードにより意図される命令を正確且つ効率的に実行し、それでいて処理速度を向上させるような、プログラミング言語を解釈するシステムへの要求が存在する。
【課題を解決するための手段】
【００１０】
本発明は、仮想マシンハードウェアアクセラレータ（ＶＭＩのような）を、条件付きバイトコード（ＣＢＩ）に出会った場合に該ＶＭＩが分岐予測を実行すると共に投機的実行処理を開始すべきかを決定するように構成することにより、上述した要求を満たす。決定された場合、投機的実行は、投機的に実行されたバイトコードが容易に元に戻し得る（reversible）限り、又は予測が確認されるまで、継続する。殆どの場合予測は正しく、これにより、予測が確認された後ＶＭＩ及びＣＰＵが投機的に選択されたバイトコードのシーケンスに沿って動作し続けるのを可能にする。予測が正しくない場合（従って無効化される）、ＶＭＩ及びＣＰＵで実行された投機的処理は流され、ＶＭＩは当該分岐の直前の状態に戻される。効率性は、仮想マシンハードウェア加速技術の性能利得と分岐予測方法及び可能性のある投機的実行とを組み合わせることにより、及び影響を容易に元に戻すことができる限りにおいてのみ命令を投機的に実行することにより実現される。正確さは、如何なる予測誤りも補正することにより達成される。従って、平均すると、条件付き分岐（ＣＢＩ）は比較的少ない遅延しか生じない。
【００１１】
本発明は、より複雑な分岐予測方法論（オブジェクト指向技術及びシステムに関する第５回USENIX会議（１９９９）の原稿集、第２１７〜２２８頁の"ジャバにおける仮想方法呼出をサポートするための分岐予測器のチューニング"で推奨されているハッシング方法及び経路履歴方法論のような）及び出会った各潜在的分岐命令のタイプに基づいて簡単な（しかし確かな）予測を行う方法に匹敵する。
【００１２】
簡単に述べると、本発明は条件付き分岐仮想マシン命令を処理するシステム及び方法を含むもので、斯かる命令は本発明の実施例においてはジャバ（登録商標）プログラミング言語により発生される。プログラミングレベルにおいては、ジャバ（登録商標）ソースコードは、バイトコードと呼ばれる中間言語にコンパイルされる。バイトコードは、プロセッサにより実行することができるように仮想マシンによって解釈することができるような仮想マシン命令からなる。本発明の実施例によれば、ランタイム時において、仮想マシン（実施例では、ＶＭＩ）は初期化される。各バイトコードの特定のプロパティの識別を可能にするパラメータが初期化される。例えば、バイトコードは単純又は複雑なものとして特徴付けることができ、更に条件付き又は再帰的として特徴付けることができる。条件付きバイトコードは、実行されるべきバイトコードのシーケンスを、分岐条件が満たされる場合にのみ、変更する仮想マシン命令である。
【００１３】
ＶＭＩは、一連のバイトコードの各々を１以上のネイティブ命令に処理するよう進行する。ＶＭＩは、各バイトコードが命令メモリから取り出される毎にインクリメントされるバイトコードカウンタを維持する。ＣＢＩに出会うと、ＶＭＩはＣＰＵに分岐条件制御値を取り出すことにより分岐条件が満たされているかを判断させるようなネイティブ命令のシーケンスを発生する。本発明の実施例のシステム及び方法によれば、制御値の取り出しが完了するまで処理を一次中止するというよりは、ＶＭＩは分岐予測を実行し、投機的実行を実行すべきか、即ち分岐条件が満たされるであろうかについて仮定を行うべきか、を決定する。仮定が行われた場合、該仮定が確認若しくは無効化されるまで、又は容易に元に戻すのができないバイトコードに出会うまで、バイトコード系列は投機的に実行される。
【００１４】
本発明の最初の３つの実施例においては、上記判断はＣＢＩにより指定された分岐のタイプに基づくものである。第１の実施例によれば、ＶＭＩはＣＢＩが後方分岐を指定しているなら分岐条件は真であると仮定し、該分岐により目標とされる次のバイトコードにジャンプするようバイトカウンタを更新する。当該ＣＢＩが前方分岐を指定する場合、ＶＭＩは分岐条件が満たされないであろうと仮定し、該分岐を実行しない。代替実施例は、ＣＢＩが後方分岐を求める場合、当該分岐条件は満たされると仮定するが、該ＣＢＩが前方分岐を求める場合は仮定を行わない。他の代替実施例においては、ＶＭＩは分岐条件が常に満たされると仮定し、投機的分岐に沿うバイトコードが容易に元に戻せるものである限り、及び当該仮定が確認又は無効化されるまで、該投機的分岐に沿ってバイトコードを処理する。
【００１５】
更に他の実施例においては、分岐を投機的に実行すべきかを判断するのに既知の分岐予測方法を使用するが、ＶＭＩは容易に元に戻すことが可能なバイトコードを、当該仮定が確認又は無効化されるまでしか、投機的に処理しない。この方法論は、ＶＭＩを用いた実施化に関して後に詳細に説明されるが、より多くの分岐予測又は投機的実行方法を用いて実施化することができる。
【００１６】
本発明の実施例によれば、仮定がなされた場合、ＶＭＩは投機的に実行される分岐に沿うか又はバイトコードの元のシーケンスに沿うかの何れかの順次のバイトコードの翻訳であるネイティブ命令を、これらのネイティブ命令が、例えばスタック操作に関わる命令（スタックプッシュのような）のような、容易に元に戻すことができるものである限り、ＣＰＵに対してディスパッチし続ける。容易に元に戻すことができないような命令に出会うと、制御値が入力されるまでＣＰＵをビジーに維持するために、ＶＭＩにより一連の"ノーオペレーション"（ＮＯＰ）コマンドが発生され、ディスパッチされる。続いて入力された制御値が仮定は正しいことを示すなら、ＶＭＩはＶＭＩパイプラインに存在するバイトコードを処理し続け、ＣＰＵはＣＰＵパイプライン内のネイティブ命令を処理し続ける。続いて入力された制御値が当該仮定は正しくない（即ち、予測誤りがあった）ことを示している場合は、ＣＰＵは当該分岐の直前の状態に戻され、これにより、当該投機的に実行された容易に元に戻すことが可能な（逆転可能な）バイトコードを元に戻す。この様に、正しくない仮定による予測誤りの逆転は、ＶＭＩ及びＣＰＵの両者を当該分岐の直前の各状態に戻すことを必要とし、投機的に実行されたバイトコードの特徴により容易に達成される。例えば、本発明の一実施例においては、"容易に元に戻すことが可能なバイトコード"とは、スタック操作のみを実行するか又はＶＭＩ外の如何なる状態も変更しないようなバイトコードと定義され、従って斯様なバイトコードのシーケンスの実行は、ＶＭＩにおけるバイトコードカウンタ及びレジスタスタックポインタをリセットすることにより逆転することができる。本発明によれば"容易に元に戻すことが可能な"の他の定義を実施することもでき、これらの定義の幾つかは、投機的に実行されたバイトコードを元に戻すためにＶＭＩ及びＣＰＵのパイプラインが流されることを必要とし得る。
【００１７】
本発明の他の態様は、ジャバ（登録商標）のような解釈言語からの仮想マシン命令を実行するシステムである。該システムは、プロセッサ（ＣＰＵ）及びプリプロセッサ（ＶＭＩ）、命令メモリ、並びにトランスレータ（ＪＶＭ）を含む。上記プロセッサは、ハードウェアに固有の命令（以下、ネイティブ命令と呼ぶ）を含み且つ斯かる命令を実行するように構成される。上記プリプロセッサは、上記命令メモリからバイトコードを取り込むと共に該バイトコードをネイティブＣＰＵ命令に翻訳するように構成された仮想マシン（例えば、ＶＭＩ）である。該ＶＭＩは制御レジスタ、バイトコードカウンタＢＣＣ、仮定変数レジスタ及び投機的モードスイッチ履歴を含む。本発明の実施例においては、上記ＶＭＩは、各バイトコードにより呼ばれるネイティブ命令を処理のためにＣＰＵにディスパッチするように構成されている。処理されるバイトコードがＣＢＩである場合、ＶＭＩによりディスパッチされたネイティブ命令は、ＣＰＵに分岐が実行されるべきかを示す制御値を送出させる。また、ＶＭＩは、分岐条件が満たされると推測又は確認された場合に、ＣＢＩにより呼ばれたジャンプを実行すべくＢＣＣを更新するように構成される。制御値を待つ間、ＶＭＩは、上記において実施例として掲げられた方法による分岐予測方法に基づいて、分岐を投機的に処理し又は処理をやめるように構成される。ＶＭＩは、仮定された制御値ＡＣＶを記憶することにより、仮定を行い又は仮定をするのをやめる際に仮定変数の値を更新するように構成される。また、ＶＭＩは投機的モードスイッチ履歴を維持するように構成され、該履歴はシーケンスが投機的に実行される場合又は投機的実行が終了する場合に更新され、制御値が入力される場合に除去される。分岐が投機的に実行されるべきであるとの仮定をした後、ＶＭＩは逆転可能なバイトコードを識別すると共に処理し、制御値を入力し、該ＶＭＩが前の仮定は誤っていたことを示すような制御値を後に入力した場合に投機的に実行されたバイトコードを逆転させる（元に戻す）ように構成される。
【００１８】
本発明の方法を種々のタイプの条件付き分岐命令を処理するように実施化することは可能であるが、本発明の実施例は、ジャバ（登録商標）の条件付き分岐バイトコードの処理に向けられている。
【００１９】
本発明は、ジャバ（登録商標）バイトコードをサンマイクロシステムズにより作成されたＪＶＭのような仮想マシンを用いて実行するようなシステムにおいて実施化することができる。しかしながら、本発明は、マイクロソフト仮想マシンのような他のジャバ（登録商標）仮想マシンを使用しても実施化することができ、ビジュアルベーシック、ｄＢＡＳＥ、ベーシック及び.ＮＥＴ等の他の解釈言語を実行するシステムにも適用可能である。
【００２０】
本発明の更なる目的、利点及び新規な特徴は、下記の記載に一部述べられ、当業者にとっては下記の説明を調べることにより一部明らかとなり、又は本発明の実施により知ることができるであろう。
【００２１】
明細書に組み込まれると共にその一部を形成する添付図面は、下記の説明を参照して見ることにより本発明を解説するものである。
【発明を実施するための最良の形態】
【００２２】
ここでは、必要に応じて、本発明の実施例が開示されるが、開示された斯かる実施例は種々の且つ代わりの形態で実施化することができるような本発明の単なる例示に過ぎないことに注意すべきである。また、各図は必ずしも寸法通りではなく、特定の構成要素の細部を示すために幾つかの特徴は誇張され又は極小化されている。従って、ここに開示された特定の構造的及び機能的詳細は、制限するものとしてではなく、単なる請求項の基礎として及び当業者に本発明を多様に使用することを教示するための代表的基礎として解釈されるべきものである。
【００２３】
添付図面（これら図面において、同様の符号は同様の構成要素を示す）に示された本発明の実施例を詳細に参照すると、図１は本発明の環境の実施例のブロック図である。該環境の基本的構成要素はハードウェアプラットフォーム１００であり、該プラットフォームはプロセッサ１１０、プリプロセッサ１２０及び命令メモリ１５０を含み、これらは全てシステムバス１６０に接続されている。プリプロセッサ１２０は制御レジスタ１３０とトランスレータ１４０とを含んでいる。ハードウェアプラットフォーム１００は、典型的には、中央処理装置（ＣＰＵ）、基本周辺機器及びオペレーティングシステム（ＯＳ）を含んでいる。本発明のプロセッサ１１０は、ＭＩＰＳ、ＡＲＭ、インテルｘ８６、パワーＰＣ又はSPARC型マイクロプロセッサであり、ハードウェア固有の命令（以下、ネイティブ命令と称す）を含むと共に、斯かる命令を実行するように構成されている。本発明の実施例において、トランスレータ１４０は例えばサンマイクロシステムズによるＫＶＭ等のジャバ（登録商標）仮想マシン（ＪＶＭ）である。命令メモリ１５０は例えばジャバ（登録商標）バイトコードのような仮想マシン命令を含んでいる。当該実施例におけるプリプロセッサ１２０は国際特許出願公開第WO9918486号に開示された仮想マシンインタープリタ（ＶＭＩ）であり、仮想マシン命令（例えば、バイトコード１７０）を命令メモリ１５０から取り込むと共に、該仮想マシン命令をネイティブＣＰＵ命令のシーケンスに変換するよう構成されている。ＶＭＩ１２０は、バス１６０上の周辺機器であって、メモリマップ型周辺機器として動作することができ、そこでは、所定の範囲のＣＰＵアドレスがＶＭＩ１２０に割り当てられる。ＶＭＩ１２０は、命令メモリ１５０における現在の（又は次の）仮想マシン命令を示す独立の仮想マシン命令ポインタ１８０を管理する。また、該ＶＭＩは投機的モードスイッチ履歴及び仮定変数（図示略）も管理する。
【００２４】
ここで図２を参照すると、本発明の実施例によれば、プロセッサ１１０はマシン命令の実行が連続したクロックサイクルの間において並列且つ密集行進的に行われるように多段パイプライン２００を含んでいる。言い換えると、第１命令Ｉ１が当該パイプラインの段２に入る時、後続の命令Ｉ２は段１に入り、等々となる。理想的には、各命令は連続するサイクルにおいて当該パイプラインに入り続け、これにより、８つの命令の同時的処理を可能にし、ここで、１つの命令はクロックサイクル毎に完全に実行される。しかしながら、典型的には、平均的命令の実行は実際には２クロックサイクル以上を必要とする。
【００２５】
本発明の動作の一例として、ＶＭＩ１２０は第１系列３１０のバイトコードの各々を１以上のネイティブ命令に翻訳して進む。ここで図３を参照すると、バイトコードＢ０ないしＢ２は非条件付きであるので、ＶＭＩ１２０は命令メモリ１５０からＢ０ないしＢ２を単に取り込み、各バイト１７０に対して定義されたネイティブ命令又は複数の命令を選択し、斯かる命令（又は複数の命令）を実行のためにプロセッサ１１０に供給する。Ｂｎは条件付き分岐命令（ＣＢＩ３３０）であるので、分岐条件が満たされるならＢｎは当該ＶＭＩを第１系列３１０から系列３２０におけるバイトコードＢｒへジャンプさせる。分岐条件が評価されている（即ち、ＶＭＩ２０がＣＰＵ１１０から返送されるべき制御値を待つ）間に、分岐予測方法に従い当該分岐条件が満たされるかについて予測がなされ、ＶＭＩ１２０は該予測を検証することができるまで命令を投機的に実行すべきかを決定する。分岐予測方法は、分岐条件が満たされるかについての予測を与えるような多様な複雑さの発見的処理及び、多分、予測の精度の統計的評価である。本発明の一実施例によれば、ＶＭＩ１２０は、ＣＢＩ３３０（Ｂｎ）が後方分岐（即ち、バイトコードカウンタＢＣＣに対して負のオフセット）を求める場合は分岐条件が満たされると仮定するような分岐予測方法を実施し、ＶＭＩ１２０はバイトコードＢｒへのジャンプを実行する。ＶＭＩ１２０は、同時的に、ＣＰＵ１１０に当該分岐条件が満たされているかを示す制御値を取り出させるようなネイティブ命令のシーケンスをディスパッチする。他の実施例の分岐予測方法によれば、ＣＢＩ３３０（Ｂｎ）が前方分岐（即ち、ＢＣＣに対して正のオフセット）を求める場合、ＶＭＩ１２０は当該分岐条件が満たされないと仮定し、ジャンプを実行しない。更に他の実施例の分岐予測方法によれば、ＣＢＩ３３０が分岐を求める場合、ＶＭＩ１２０は当該分岐条件が満たされると仮定し、ジャンプを実行する。
【００２６】
本発明の一実施例によれば、当該分岐予測方法が結果としてバイトコードのシーケンス３２０を投機的に実行することになる場合、不正確な予測の影響は、容易に元に戻す（逆転する）ことが可能なバイトコード１７０のみを投機的に実行することにより最小化される。逆転の容易さは、バイトコード１７０がデコードされる（即ち、該コードのプロパティがアクセスされる）際にＶＭＩ１２０により判断される。ＣＰＵ１１０は、ディスパッチされる各命令を投機的に実行する。例えば、多くの場合、分岐にはスタックプッシュ処理（即ち、定数又は変数がスタックにプッシュされる）が後続し、該処理はスタックポインタ値（ＶＭＩ１２０内に保持される）を当該分岐前の状態に再設定することにより容易に逆転させることができる。斯様なネイティブ命令（通常、"スタックプッシュ"と呼ばれる）は、制御値が入力されるまで、投機的に実行することができる。何故なら、該投機的実行の逆転は単にレジスタを再設定することにより達成され、従って、予測誤りの悪い影響は無視することができるからである。
【００２７】
このように、ＶＭＩ１２０が分岐条件は満足されると仮定する場合、バイトコードＢｒないしＢｚの処理（投機的分岐）が、ＶＭＩ１２０が該投機的分岐に沿って容易に逆転することができないネイティブ命令のシーケンスを表すようなバイトコードに出会うまで、引き続いて第２のシーケンス３２０において継続する。該投機的分岐に沿うバイトコード１７０が容易に逆転することができないものである場合、投機的実行は一時中止される。次いで、ＶＭＩ１２０が当該分岐条件は満たされなかったことを示すような制御値を入力すると、ＶＭＩ１２０は当該ジャンプを逆転するためにＢＣＣ及びレジスタスタックポインタを再設定する（もし必要なら、ＣＰＵ１１０に対してＣＰＵパイプライン２００を浄化するネイティブ命令を送出する）。ＶＭＩ１２０が分岐条件は満たされないと仮定する場合は、ＢＣＣはインクリメントされ、分岐が投機的に処理されることはない。非分岐バイトコードを投機的に処理している間に、ＶＭＩ１２０は入力された制御値が制御レジスタ１３０に書き込まれたかを継続的にチェックする。
【００２８】
図４のブロック４１０に示すように、ＶＭＩ１２０は、ブロック４２０において命令メモリ１５０から各バイトコード１７０を取り込む前に、仮想マシンカウンタＢＣＣをインクリメントする。ブロック４３０において、ＶＭＩ１２０は各バイトコード１７０を当該バイトコード１７０に関するプロパティにアクセスすることによりデコードする。シーケンスの最初のバイトコード１７０がデコードされた時に、投機モードスイッチＳＭＳはオフであるから、ＶＭＩ１２０は（ブロック４３５において）当該バイトコード１７０に対応するネイティブ命令のシーケンスをディスパッチする。ブロック４４５において、当該バイトコード１７０がＣＢＩ３３０でないと判断された場合は、当該方法はブロック４１０に戻り、ここで仮想マシンカウンタ（ＢＣＣ）１８０がインクリメントされ、取り込み処理に戻る（ブロック４２０）。しかしながら、ブロック４４５において当該バイトコード１７０が条件付きであると判断されたなら、ブロック４３５でディスパッチされたネイティブ命令はブロック４５０内で制御値取込処理を表すようになる。該制御値取込処理を構成するネイティブ命令は、ＣＰＵ１１０に、ＣＢＩ３３０により求められた分岐が実行されるべきであるか（即ち、現在実行されているバイトコードのシーケンス外にある目標バイトコード１７０にジャンプすべきか）を示すような制御値を送出させ、且つ、該制御値を制御レジスタ１３０に書き込ませる。上記制御値取込処理と同時的に、ＶＭＩ１２０は当該分岐条件が満たされるか又は満たされないかの仮定をなすべきかを決定する（ブロック４７０）。該決定は、使用されている特定の分岐予測又は投機実行方法に基づくものである。
【００２９】
ＶＭＩ１２０が当該分岐条件の満足に関する仮定を行うと決定すると、投機モードスイッチ（ＳＭＳ）がオンされ、仮定された制御値（ＡＶＣ）がＶＭＩレジスタに記憶される（仮定変数１９５）。ブロック４７５において、当該分岐が投機的にとられた場合、ＢＣＣが更新される（ＣＢＩ３３０により求められたジャンプを反映するために）。分岐が投機的になされるかに関係なく、当該方法はブロック４１０に進み、ここでＢＣＣはインクリメントされる。投機的に決定されたバイトコードのシーケンスに沿う次のバイトコード１７０は、該バイトコードが逆転可能（例えば、該次のバイトコード１７０に対応するネイティブ命令が、単純なスタック操作を構成する）ならば、処理される。逆転の容易性の判断は、当該バイトコード１７０のプロパティに基づくものである。容易に逆転可能なバイトコードは、典型的には、ＣＢＩ３３０の翻訳の直後のスタック最上部より上のスタック位置上で生じる処理であって、当該システム（特に、ＶＭＩ１２０の外側）の状態を変更するものではないような処理を表す。バイトコード１７０はブロック４２０において取り込まれ、ブロック４３０においてデコードされる。ＳＭＳはオンである。何故なら、ＶＭＩ１２０は仮定を行うように決定したからである（当該シーケンスは投機的に実行されている）。従って、制御値が未だ返送されておらず（ブロック４８５）、且つ、デコードされたプロパティが取り込まれたバイトコード１７０は容易に逆転可能であることを示している場合は、該取り込まれたバイトコードに対応するネイティブ命令がブロック４３５においてディスパッチされる。次いで、取り込まれるバイトコード１７０が他のＣＢＩ３３０でない限り（ブロック４４５）、ＢＣＣがインクリメントされ（ブロック４１０）、投機的シーケンスに沿う次のバイトコードが取り込まれ、デコードされる（ブロック４２０及び４３０）。このように、投機的シーケンスの処理は、次の各バイトコード１７０が容易に逆転可能なものである限り、且つ、分岐条件が入力されていない限り、ブロック４１０、４２０、４３０、４３２、４８５、４８６、４６０及び４３５を経てループする。
【００３０】
ブロック４６０において、投機的シーケンスの処理の間において容易に逆転可能でないバイトコード１７０に出会うと、ブロック４６１においてＳＭＳをオフに切り換えることにより投機が中止され、ＶＭＩ１２０はブロック４８５において制御値の入力を待たされる。入力された制御値ＲＣＶはＶＭＩ１２０の制御レジスタ１３０に記憶される。ブロック４８７において、当該分岐条件が評価される。ブロック４９４においてＲＣＶが当該分岐条件は満たされたことを示し、且つ、ＳＭＳ履歴が現シーケンスは投機的に処理されていたことを示す（ＳＭＳ履歴１９０が、当該ＳＭＳが現シーケンスの間における何処かでオンであったことを示す）場合、仮定変数１９５として記憶された仮定制御値ＡＣＶが、制御レジスタ１３０に記憶された入力制御値ＲＣＶと比較され、ＶＭＩ１２０によりなされた仮定が正しかったか（即ち、上記投機的シーケンスが処理されるべきであったか）を判断する。仮定が正しかった場合（即ち、ＡＣＶ＝ＲＣＶ）、現分岐シーケンスの投機的実行は確認されたことになる。言い換えると、ＶＭＩ１２０は、当該分岐がなされるべきと正しく仮定した。そして、ＢＣＣがブロック４１０においてインクリメントされ、取り込みに戻る。仮定が正しくなかった場合は、ＶＭＩ１２０は当該分岐を処理し損ない、ＶＭＩ１２０及びＣＰＵ１１０は、投機的に処理された非分岐シーケンスのバイトコードを逆転するために浄化される。そして、当該方法はブロック４９５においてジャンプを反映するためにＢＣＣを更新し、次いでブロック４１０に戻ってＢＣＣをインクリメントし、当該分岐シーケンスに沿う次のバイトコードを処理する。
【００３１】
ブロック４９４において、上記ＲＣＶが当該分岐条件は満足されなかったことを示し、且つ、上記ＳＭＳ履歴１９０が現シーケンスは投機的に処理されていたことを示す場合、仮定制御値ＡＣＶは入力制御値ＲＣＶと比較され、ＶＭＩ１２０によりなされた仮定が正しかったかを判断する。仮定が正しかった場合は、現非分岐シーケンスの投機的実行は確認されたことになる。言い換えると、ＶＭＩ１２０は分岐がされるべきでないことを正しく仮定した。そして、ＢＣＣがブロック４１０においてインクリメントされ、取り込みに戻る。上記仮定が正しくなかった場合は、当該分岐はなされるべきでなかったことになり、投機的に処理された分岐に沿う全てのバイトコードは、ブロック４９５においてＢＣＣ及びスタックレジスタポインタを再設定することにより逆転される。もし必要なら、ＶＭＩ１２０及びＣＰＵ１１０のパイプラインがブロック４９５において浄化される。
【００３２】
ＳＭＳ履歴１９０は制御値が入力される際に常にリセットされる。何故なら、分岐条件が解明され、かくして如何なる投機的処理も確認又は除去するからである。
【００３３】
ブロック４７０において、ＶＭＩ１２０が分岐条件の満足に関して仮定を行わないと決定する場合、ＶＭＩ１２０は、ブロック４８５において制御値の入力をチェックすることにより、実際の制御値が入力されるまで待つ。ＳＭＳはオフのままなので、ブロック４８６はブロック４８５に戻り、制御値が入力されるまでチェックを継続する。制御値が入力されると、当該方法はブロック４８７に進み、そこにおいて、当該分岐条件が評価される。該制御値が分岐条件は満たされたことを示す場合、当該バイトコードシーケンスの実行の間において何の投機も生じていないので、当該方法はブロック４９５に進み、そこでは、ＣＢＩ３３０により求められたジャンプを反映するためにＢＣＣが更新され、次いでブロック４１０においてバイトコードの取り込みに戻る。上記制御値が分岐条件は満たされなかったことを示す場合、当該方法はブロック４１０に戻り、バイトコードの取り込みに復帰する。このようにして、ＶＭＩ１２０が仮定を行わないと決定すると、ＶＭＩ１２０はＣＢＩ３３０を通常のように処理する（分岐条件が満たされる場合にのみ、分岐を行う）。
【００３４】
上述したように、分岐条件の満足に関して仮定を行うべきかの判断は、下記に示すように、実施される分岐予測方法に基づくものとなる。
【表１】
2005504390.tif 000003
【００３５】
本発明の第１実施例において、ＶＭＩ１２０は、後方分岐はなされ、前方分岐はなされないと仮定するような投機的実行方法を使用する。第２の代替実施例において、ＶＭＩ１２０は、後方分岐のみを投機的に実行し、前方分岐に関しては仮定を行わない。第３の代替実施例において、ＶＭＩ１２０は、全ての分岐がなされると仮定するような一層単純な投機的実行方法を使用する。更に、第４の代替実施例によれば、ＶＭＩ１２０は、分岐予測方法を使用して、分岐がなされるべきかを決定する。上述した実施例の何れによっても、投機的実行は容易に逆転が可能なバイトコードに対してのみ進行する。
【００３６】
本発明の第１実施例によれば、ＶＭＩ１２０はＣＢＩ３３０により示される分岐条件の結果に関する仮定を常に行うが、投機はＣＢＩ３３０により求められる分岐のタイプに基づかせる。ＣＢＩ３３０が前方分岐を求める（ＢＣＣオフセット>０）場合、ＶＭＩ１２０は分岐条件が満足されないと仮定し、容易に反転可能である限り、非分岐バイトコードシーケンスの処理を投機的に継続する。ＣＢＩ３３０が後方分岐を求める（ＢＣＣオフセット<０）場合、ＶＭＩ１２０は分岐条件が満足されると仮定し、容易に逆転可能である限りにおいて、分岐バイトコードシーケンスを投機的に処理する。
【００３７】
本発明の第２実施例によれば、ＶＭＩ１２０は、ＣＢＩ３３０が後方分岐を求める場合にのみ、ＣＢＩ３３０により示される分岐条件の結果に関する仮定を行う。ＣＢＩ３３０が前方分岐を求める場合、ＶＭＩ１２０は分岐条件を通常のように処理する。即ち、ＶＭＩ１２０は制御値の入力を待ち、それに従ってバイトコードの適切なシーケンスを処理する。
【００３８】
本発明の第３実施例においては、ＣＢＩに出会った場合に常に分岐がなされるように投機する。ＲＩＳＣコードを処理する場合、この投機的実行方法は時間の約７０％となる。何故なら、分岐は通常はループの最下部で生じ、ループは典型的には繰り返して実行されるからである。該分岐予測は、ＶＭＩの全体としてのＲＩＳＣコード処理性能を約３５％改善する。アムダールの法則によれば、ジャバコードを処理する場合、この簡単な予測はバイトコード処理速度を７〜２０％上昇させるであろう。分岐予測及び投機的処理を使用して、分岐のオーバーヘッドは、ネイティブに実行するＣＰＵと比較して１０〜２０サイクルから約２〜４サイクルに減少させることができる。第３実施例の態様によれば、ＶＭＩ１２０が分岐条件は満足されたと仮定する場合、ＶＭＩ１２０は分岐オフセットを反映するためにバイトコードカウンタＢＣＣを更新し、該オフセットアドレスからの取り込みを開始し、該ＶＭＩのパイプラインを回復する。仮定が正しい場合、当該分岐を処理するために要する時間は約５サイクルに低減される。しかしながら、本発明のこの実施例による分岐予測が処理時間を全ての分岐に関して約３なるファクタにより低減する（１４又は１５サイクルから）と結論することはできない。何故なら、全ての分岐のうちの約１０％はキャッシュミスに終わるからである。
【００３９】
第４実施例においては、各ＣＢＩ３３０を処理するために、何れかの既知の分岐予測方法がＶＭＩ１２０との組み合わせで使用される。
【００４０】
本発明のシステム及び方法の利点の多くを述べたが、当業者であれば他の利点もあることを認識するであろう。例えば、最適なバス利用のために、ＣＰＵ１１０はネイティブ命令をバースト（典型的には、少なくとも４サイクルからなる）で読み取る。従って、ＣＰＵ１１０は、制御値をＶＭＩ１２０に戻す前に、全バーストを読み取らねばならない。ＶＭＩ１２０は、制御値取出コマンドを含むバーストを充填するために幾つかのＮＯＰを発生して、該ＶＭＩ１２０が投機的分岐を処理する間にＣＰＵ１１０が該取出コマンドを処理することを保証しなければならない。本発明の利点は、ＶＭＩ１２０が、ＣＰＵバーストを満たすためにプロセッサ時間をＮＯＰにより占有しなければならないというよりは、各命令の効果を逆転することができる限りにおいて投機的シーケンス３２０から次の命令を投機的にディスパッチすることによりＣＰＵ１１０及びＶＭＩ１２０のパイプラインを意味のある命令で満たし続ける点にある。
【００４１】
上記の点から、本発明が条件付き分岐仮想マシン命令を正確且つ効率的に処理するシステム及び方法を提供することが理解されるだろう。しかしながら、上記は本発明の実施例にのみ関するものであって、添付請求項に記載された本発明の趣旨及び範囲から逸脱すること無しに種々の変更をなすことができると理解されるべきである。
【図面の簡単な説明】
【００４２】
【図１】図１は、本発明の環境の実施例の機能的エレメントを示すブロック図である。
【図２】図２は、典型的なＣＰＵパイプラインにおける命令の処理を示す概念図である。
【図３】図３は、一例としてのバイトコード処理シーケンスを示す。
【図４】図４は、本発明の一実施例による方法のフローチャートである。
【図２】
2005504390.tif 000004
【国際公開パンフレット】
2005504390.tif 000005
2005504390.tif 000006
2005504390.tif 000007
2005504390.tif 000008
2005504390.tif 000009
2005504390.tif 000010
2005504390.tif 000011
2005504390.tif 000012
2005504390.tif 000013
2005504390.tif 000014
2005504390.tif 000015
2005504390.tif 000016
2005504390.tif 000017
2005504390.tif 000018
2005504390.tif 000019
2005504390.tif 000020
2005504390.tif 000021
2005504390.tif 000022
2005504390.tif 000023
2005504390.tif 000024
2005504390.tif 000025
2005504390.tif 000026
2005504390.tif 000027
2005504390.tif 000028
【国際調査報告】
2005504390.tif 000029
2005504390.tif 000030