JPH11296381A - 仮想マシン及びコンパイラ - Google Patents
仮想マシン及びコンパイラInfo
- Publication number
- JPH11296381A JPH11296381A JP10096204A JP9620498A JPH11296381A JP H11296381 A JPH11296381 A JP H11296381A JP 10096204 A JP10096204 A JP 10096204A JP 9620498 A JP9620498 A JP 9620498A JP H11296381 A JPH11296381 A JP H11296381A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- virtual machine
- unit
- branch
- block
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
行を可能とした仮想マシンを提供する。 【解決手段】 スタック型仮想マシンであって、最上段
TOSと次段SOSが実マシン201のレジスタに割り当てら
れたスタック120と、実行対象となる仮想マシン命令
列が格納された命令格納部102と、それら仮想マシン
命令それぞれに対応づけられた情報であって、対応づけ
られた仮想マシン命令に後続する仮想マシン命令が実行
された場合のスタック120での記憶段数が増加するか
減少するかを示す先行命令情報が格納された先行命令情
報格納部101と、それらから次に実行すべき仮想マシ
ン命令及び対応する先行命令情報を読み出して解読する
デコード部103と、解読された仮想マシン命令の演算
処理と先行命令情報に基づくスタック120の先行処理
とを実行する実行部110とを備える。
Description
想マシンコンパイラに関し、特に仮想マシンの実行速度
を向上させる技術に関する。
下、「実マシン」と呼ぶ。)の種別に依存することな
く、同一のプログラムをそのまま、各種CPUを備える
パーソナルコンピュータやワークステーション等のコン
ピュータ上で実行させる技術として仮想マシンがある。
情報通信分野、特に、異機種のコンピュータ同士が接続
されるネットワークにおいては、共有資源の迅速かつ円
滑な利用のために、このような実マシンのアーキテクチ
ャの差異を吸収する技術である仮想マシンの果たす役割
は大きい。
下、「仮想マシン命令」と呼ぶ。)の集まりからなる実
行形式のプログラム(以下、「仮想マシンプログラム」
又は「仮想マシン命令列」と呼ぶ。)をソフトウェア的
に解読・実行する仮想的なプロセッサであり、一般に、
仮想マシン自体は、実マシン用の命令(以下、「実マシ
ン命令」と呼ぶ。)で書かれたプログラム(以下、「実
マシンプログラム」又は「実マシン命令列」と呼ぶ。)
で実現されている。そして、仮想マシンの中心的な課題
である実行速度の確保という点から、仮想マシン自体の
アーキテクチャとしてはスタック型(スタックマシン)
が採られる。
SunMicrosystems,Inc.社が開発したJava(登録商標)が
ある。図71は、Javaのような従来のスタック型仮想マ
シン4400の構成を示す機能ブロック図である。従来
の仮想マシン4400は、実行対象となる仮想マシンプ
ログラムを保持する命令格納部4401、その命令格納
部4401から仮想マシン命令を読み出して解読するデ
コード部4402、その解読結果であるデコードデータ
に従ってオペレーションを実行する実行部4410及び
その実行のための一時的な後入れ先出し方式の記憶領域
であるスタック4420から構成される。なお、本図に
おいて、実線はデータの流れ、点線は制御の流れを示
す。
マシン4400が実行する全ての仮想マシン命令それぞ
れに対応するマイクロプログラム(これは、実行部44
10に格納されている。)へのジャンプアドレス等を予
め記憶するデコードテーブル4406、命令格納部44
01から次に読み出すべき命令のアドレスを保持するプ
ログラムカウンタ(PC)4404、その命令を読み出
す読込み部4403及び読み出した命令に対してデコー
ドテーブル4406を参照することにより対応するジャ
ンプアドレスを特定して実行部4410に出力する検索
部4405を有する。ここで、マイクロプログラムと
は、個々の仮想マシン命令のオペレーションに対応する
実マシンプログラムを意味する。
ム、つまり、全ての仮想マシン命令それぞれに対応する
実マシンプログラムを予め上記ジャンプアドレスで始ま
る箇所に記憶しているマイクロプログラム記憶部441
1及びスタック4420の最上位アドレスを示すスタッ
クポインタ(SP)4412を有する。図72は、この
仮想マシン4400の命令セットを説明するための図で
ある。本図には、この仮想マシン4400が解読・実行
する全ての仮想マシン命令のニーモニック表示、オペレ
ーションの意味、スタックの状態変化及び実行後のスタ
ックポインタの変化が示されている。本図において、表
記"s0"はスタックの最上位の値を表し、"s1"はスタック
の最上位から2番目の値を表す。例えば仮想マシン命
令"Add"の表記"s0←s0+s1"は、実行後にスタックの最上
位の値が、実行前のスタックの最上位の値と、スタック
の最上位から2番目の値を加えたものとなることを意味
する。表記"sp←sp-1"は、実行後にスタックの階層が一
つ減ることを意味する。
ブル4406の内容を示す図である。各仮想マシン命令
の種別を示すオペコード4406aと、その仮想マシン
命令に対応するマイクロプログラム記憶部4411内の
マイクロプログラムへのジャンプアドレス4406b
と、その仮想マシン命令に含まれるオペランド数440
6cとが格納されている。なお、全てのオペコードは1
バイト長とし、オペランドの単位も1バイトとする。ま
た、物理的なビット配列で表現された仮想マシン命令
(オペコードだけやオペランドだけを指すこともある)
を「仮想マシンコード」と呼ぶ。
1に示されたマイクロプログラム記憶部4411に格納
されているマイクロプログラムのうち、仮想マシン命
令"Push"、"Add"、"Mult"に対応するもの及びそれらに
共通する後半部分(次の仮想マシン命令にジャンプする
ための実マシンプログラム)のリストを示す。ここで用
いられている実マシン命令の意味は、図75に示される
通りである。つまり、この仮想マシン4400自体は、
図75に示される実マシン命令を解読・実行する実マシ
ンによって実行されるものとしている。なお、物理的に
は、仮想マシン4400のPC4404は実マシンのレ
ジスタ2番(r2)に、仮想マシン4400のSP44
12は実マシンのレジスタ3番(r3)に割り当てられ
ている。
402の動作を示すフローチャートである。読込み部4
403は、実行部4410から信号線Rを介して「次の
命令を読み込む」旨の指示を受けると(ステップ450
2〜4503)、PC4404に格納されたアドレスに
基づいて命令格納部4401に格納された仮想マシン命
令を読み出す(ステップ4504〜4505)。続い
て、検索部4405は、デコードテーブル4406を参
照することにより、その仮想マシン命令に対応するジャ
ンプアドレスと必要なオペランドとをデコードデータと
して実行部4410に出力すると共に(ステップ450
6)、1個の仮想マシン命令に対する解読の区切りを示
す旨の通知「読込み終了」を信号線Rを介して実行部4
410に通知する(ステップ4507)。
るステップ4506の詳細を示す図である。検索部44
05は、まず、読込み部4403によって読み込まれた
1バイト分の仮想マシンコード(オペコード)とデコー
ドテーブル4406中のオペコード4406aとを逐一
に比較し(ステップ4802〜4807)、一致した場
合には、対応するジャンプアドレス4406bとオペラ
ンド数4406cとをデコードテーブル4406から読
み出す。そして、そのジャンプアドレス4406bを実
行部4410に出力した後に(ステップ4808)、そ
のオペランド数4406cに相当するオペランドを読込
み部4403を介して命令格納部4401から読み出
し、実行部4410に出力する(ステップ4809〜4
813)。
チャートは、デコード部4402から出力されたデコー
ドデータが直接実行部4410に渡されることを前提と
するものであるが、複数のデコードデータを記憶できる
バッファを介して実行部4410に渡されることを前提
とした場合には、デコード部4402の動作は、図78
に示されるフローチャートの通りとなる。つまり、バッ
ファの記憶容量が許す限り、実行部4410による実行
とは独立して、命令格納部4401からの仮想マシン命
令の読み出しと解読とを行う(ステップ4605〜46
13)。
0の動作を示すフローチャートである。実行部4410
は、SP4412とPC4404とを初期化しておいた
後に(ステップ4702)、個々の仮想マシン命令ごと
に以下の動作を繰り返す(ステップ4703〜470
7)。つまり、読込み部4403に対して信号線Rを介
して「次の命令を読み込む」旨の指示を通知した後に
(ステップ4703)、その信号線Rから「読込み終
了」の通知を受けるまで、検索部4405から送られて
くるデコードデータを読込み、そのデコードデータに含
まれるジャンプアドレスにジャンプすることで、その仮
想マシン命令に相当するマイクロプログラム記憶部44
11内のマイクロプログラムを実行する(ステップ47
04〜4707)。
0の具体的な動作例を説明するためのサンプルプログラ
ムのリストを示す。つまり、命令格納部4401には、
図80(b)に示される演算式「2*(3+4)」を計算する
仮想マシンプログラムが置かれているとする。図80
(c)は、図80(a)に示された仮想マシンプログラ
ムが従来の仮想マシン4400によって解読・実行され
た場合において、デコード部4402から順次出力され
るデコードデータを示す図である。つまり、デコード部
4402は、解読した仮想マシン命令に相当するマイク
ロプログラムのジャンプアドレスと必要なオペランドを
デコードデータとして順次実行部4410に渡す。
80(c)に示されたデコードデータ列に従って実行部
4410が図80(a)の仮想マシンプログラムを実行
した場合における各仮想マシン命令が実行される前後で
のPC4404、SP4412及びスタック4420の
一連の変化の前半部と後半部を示す図である。ここで、
PC4404は、図80(a)に示された仮想マシンプ
ログラム中の次に実行すべき仮想マシン命令の左欄に付
されたアドレスを差し、その初期値は「1」である。ま
た、SP4412は、実行部4410が最後に格納又は
読み出したスタック4420の最上位の位置を示し、そ
の初期値はスタック4420が空であることを示す「−
1」である。図81(a)及び(b)から分かるよう
に、PC4404が9に達した段階で、計算式"2*(3+
4)"の値が算出されている。
な課題は実行速度の向上である。つまり、仮想マシン
は、仮想マシン命令を解読する等の処理のためにオーバ
ーヘッドを生じるので、実マシンによる実マシンプログ
ラムの直接的な実行の場合に比較し、大幅に実行速度が
劣る。そこで、仮想マシンの実行速度を向上させる従来
の技術として、以下の手法が提案されている。 (第1の従来技術)第1の従来技術は、スタックの最上
位の記憶域(以下、「Top Of Stack(TOS)変数」と呼
ぶ。)をメモリ上ではなく、実マシンの特定のレジスタ
に割り当てておく手法である(「PLDI」ACM 199
5,pp315-327 参照)。
基づいてマイクロプログラム記憶部を実装した場合の主
な仮想マシン命令についてのマイクロプログラムのリス
トであり、上述の仮想マシン4400における図74に
対応する。ここでは、物理的には、TOS変数は、実マシ
ンのレジスタ0番(r0)に割り当てられている。ま
た、PC4404及びSP4412は、図74(a)〜
(d)と同様に、それぞれレジスタ2番(r2)及びレ
ジスタ3番(r3)に割り当てられている。
〜(d)に示されたマイクロプログラムを備える仮想マ
シンによって図80(a)の仮想マシンプログラムが実
行された場合のPC4404、SP4412、TOS変数
4421及びスタック4420のうちメモリに割り当て
られた領域4422(以下、仮想マシンのスタックのう
ち、メモリに割り当てられた領域を「メモリスタック」
と呼ぶ。)の一連の変化の前半部と後半部を示す図であ
り、上述の仮想マシン4400における図81(a)及
び(b)に対応する。この手法によっても、PCが9に
達した段階で、計算式"2*(3+4)"の値が算出されている
ことが分かる。
(d)とを比較して分かるように、この第1の従来技術
によれば、メモリへのアクセスの回数が減少される。加
算"Add"や乗算"Mult"等の仮想マシン命令の実行におい
ては、上述の仮想マシン4400によれば、各演算のた
めにスタック4420からの2回の読み出しと1回の書
き込みの合計3回のメモリアクセスが必要とされたが、
この従来技術によれば、TOS変数がメモリ上ではなくレ
ジスタに割り当てられているので、必要なメモリアクセ
スはメモリスタック4422からの1回の読み出しだけ
で済む。従って、メモリアクセスが減少された分だけ実
行速度が向上され得る。 (第2の従来技術)第2の従来技術は、「ネイティブコ
ード化」と呼ばれている方法であり、仮想マシンプログ
ラムの特定箇所を実マシン命令で記述しておき、その特
定箇所については実マシンによって直接に実行させると
いう手法である。そのために、その特定箇所が実マシン
命令で記述されている旨の識別子が用いられる。
グラムを収めるクラスファイルのアクセスフラグ(構造
体"method_info"の要素である16ビットのフラグ"access
_flags"等)に定数名"ACC_NATIVE"(256)を格納しておく
ことで、そのプログラム部分は実マシン命令で実装され
ていることを示す(米国 SunMicrosystems,Inc.社発行
のJavaバイトコード及びJava仮想マシンの仕様書(1995
年版)参照)。
ラムについては、実マシンによって直接に実行されるの
で、その分だけ実行速度は向上され得る。 (第3の従来技術)第3の従来技術は、「その場式コン
パイラ(Just-In-Time Compiler)」と呼ばれる手法で、
仮想マシンプログラムの実行時において、必要に応じて
その一部をコンパイル、即ち、実マシン命令に置き換え
る手法である(ローラ・リメイほか「Java言語入門」
(株)プレンティスホール出版,1996年 参照)。この
従来技術によれば、既にコンパイルが完了しているプロ
グラム部分については、実マシンにより直接に実行され
るので、その分だけ実行速度が向上され得る。 (第4の従来技術)第4の従来技術は、ネットワーク上
のサーバコンピュータに存在する仮想マシンプログラム
を自らのコンピュータにダウンロードした後に実行する
ような形態において、予め仮想マシンプログラムのコー
ドをLZ法やハフマン符号化などによって圧縮しておくこ
とで、転送時間を削減する手法である(特開平7−12
1352や特開平8−263263など)。
ラムの転送時間の全体の処理時間に占める割合が大きい
場合には、全体としての実行速度が向上され得る。
来技術には以下の問題点がある。 (第1の従来技術の問題点)上記第1の従来技術、つま
り、TOS変数を実マシンのレジスタに割り当てておく手
法には、近年安価になってきたスーパースカラアーキテ
クチャの実マシン(以下、「スーパースカラマシン」と
呼ぶ。)には向いていないという問題点、つまり、並列
処理機能を有しない通常の実マシン(以下、「通常マシ
ン」と呼ぶ。)で実行する場合と比較し、大きくは実行
速度が向上されないという問題点がある。以下、その問
題点を説明する。
パースカラマシンや通常マシンなどのレジスタマシンが
有するパイプラインの一般的な動作及びその表記法を説
明する。図84は、パイプラインの各ステージに対する
省略記号を説明する図である。ここでは、スーパースカ
ラマシン及び通常マシンは、いずれも5個のステージか
らなるパイプラインを有するとする。
想的な流れを示す図である。ここでは、4つの実マシン
命令が1クロックごとに隙間なく順次に処理される様子
が示されている。この状態では、パイプラインの各ステ
ージは並列に動作するので、平均して、1クロックで1
つの実マシン命令が実行されることになる。一方、図8
6は、スーパースカラマシンのパイプラインの理想的な
流れを示す図である。ここでは、スーパースカラマシン
は、2本の独立したパイプラインを有するものとしてい
る。この状態では、平均して、1クロックで2つの実マ
シン命令が実行されることになる。つまり、通常マシン
に比べ、2倍の処理能力を持つ。
インにハザード(干渉)が生じた場合のパイプラインの
流れを示す図である。ここでは、命令Bは、先行する命
令Aに対して真のデータ依存関係(true dependency又
はdata dependensyと呼ばれる関係)を持つ、つまり、
命令Aによる演算結果を用いる命令としている。する
と、命令Aによる演算結果は、メモリ参照ステージMEM
が完了しないと明らかにならないため、直後の命令B
は、命令AのステージMEMの完了まで実行が一時的に保
留される結果、ここにハザード(図中の記号"-"で示さ
れるステージ)が生じる。なお、パイプライン構造を採
る実マシンでは、先行する命令の実行が保留されると、
後続の命令も次のステージに移ることができないため、
本図に示されるように、命令Bの直後の命令Cも実行が
一時的に保留される。
おいて、パイプラインにハザードが生じた場合のパイプ
ラインの流れを示す図である。ここでは、命令B1は、
先行する命令A1及び命令A2に対して真のデータ依存
関係を持つとしている。なお、本図において、命令C2
の5クロック目にハザードが生じているのは、先行する
命令B1と命令C1とによって実行に必要な2個のユニ
ット(ALU)が使用されているからである。
び図88の場合において、メモリ参照が行われてからそ
の値が次に使用されるまでに2クロックの時間を必要と
するときのパイプラインの流れを示す図である。実際の
実マシンでは、一次キャッシュのメモリから、値を得る
までに2クロックの時間を要する場合が多いからであ
る。なお、二次キャッシュ等にアクセスする場合は、よ
り多くのクロック数を要する。
ン及びスーパースカラマシンにおいて、命令A及び命令
A2がレジスタでジャンプ先を指定する命令である場合
のパイプラインの流れを示す図である。ジャンプ先は、
それぞれ、命令A及び命令A2のレジスタ参照ステージ
RFが終了しないと判明しないので、その間に無駄にフェ
ッチされた後続命令Bは、次の第3クロック(記号"x"
で示されるステージ)おいてキャンセルされる。従っ
て、ジャンプ先の命令C及び命令C1は、それぞれ命令
A及び命令A2のレジスタ参照ステージRFが終了した後
で実行される。
の従来技術に係るスーパースカラマシン及び通常マシン
の具体的な問題点を説明する。図93〜図96は、いず
れも、第1の従来技術に係る仮想マシンが図80(a)
に示された仮想マシンプログラムを実行した場合の実マ
シンのパイプラインの流れ、より具体的には、アドレス
7の仮想マシン命令"Add"のマイクロプログラム(図8
2(a))の後半部分(図82(d)に示されたジャン
プ処理)と、続くアドレス8の仮想マシン命令"Mult"の
マイクロプログラム(図82(c))の前半部分(乗算
計算処理)におけるパイプラインの流れを示す。但し、
図93〜図96は、それぞれ、メモリ参照が行われてか
らその値が次に使用されるまでに1クロックの時間で済
む場合における通常マシン、その場合におけるスーパー
スカラマシン、メモリ参照が行われてからその値が次に
使用されるまでに2クロックの時間を必要とする場合に
おける通常マシン、その場合におけるスーパースカラマ
シンのパイプラインの流れを示す。
(d)及び図82(a))には、重大な真のデータ依存
関係が二つ存在する。つまり、仮想マシン命令"Add"の
ジャンプ処理(図82(d))におけるジャンプアドレ
スの読込み命令"Load"とジャンプ命令"Jmp"との間に存
在する第1の依存関係と、仮想マシン命令"Mult"の計算
処理(図82(c))におけるスタックの2番目の変数
を読み込む命令"Load"と乗算命令"Mult"との間に存在す
る第2の依存関係である。
第1の依存関係は、実マシン命令"Load"と実マシン命
令"Jump"間に挿入された実マシン命令"Inc"で吸収さ
れ、さらに上記第2の依存関係も、実マシン命令"Load"
と実マシン命令"Mult"間に挿入された実マシン命令"De
c"で吸収されるため、一連の処理において生じるパイプ
ラインの乱れは、実マシン命令"Jmp"の実行に起因する
1個の命令のキャンセルだけとなり、処理全体は11ク
ロックで完了する。
第1及び第2の依存関係は吸収されないために、一連の
処理において生じるパイプラインの乱れは、上記第1の
依存関係に起因する第4クロックのハザードと、実マシ
ン命令"Jmp"の実行に起因する5個の命令のキャンセル
と、上記第2の依存関係に起因する第8クロックのハザ
ードの合計3個所となり、処理全体は、図93の場合と
同様に、11クロックを要することになる。
4の場合と同様に上記第1及び第2の依存関係は吸収
ず、一連の処理において生じるパイプラインの乱れは、
上記第1の依存関係に起因する第5クロックのハザード
と、実マシン命令"Jmp"の実行に起因する1個の命令の
キャンセルと、上記第2の依存関係に起因する第10ク
ロックのハザードの合計3個所となり、処理全体は13
クロックで完了する。
4の場合と同様に上記第1及び第2の依存関係は吸収
ず、一連の処理において生じるパイプラインの乱れは、
上記第1の依存関係に起因する第4及び第5クロックの
ハザードと、実マシン命令"Jmp"の実行に起因する7個
の命令のキャンセルと、上記第2の依存関係に起因する
第9及び第10クロックのハザードの合計3個所とな
り、処理全体は、図95の場合と同様に、13クロック
を要することになる。
理はいずれも11クロックを要していること、及び、上
記図95及び図96に示された一連の処理はいずれも1
3クロックだけ要していることから分かるように、この
従来技術によれば、通常マシンによる場合とスーパース
カラマシンによる場合とで実行時間に差がなく、スーパ
ースカラマシンによる並列処理の長所が生かされていな
い。
スカラマシンによる実行効率が大幅に低下するという問
題点があるが、これに加えて、エラーなどの例外処理や
デバッグに不可欠な割込み処理の実現方法が提供されて
いないという問題点もある。そのために、一般の実マシ
ンと同様に、1個の仮想マシン命令を実行する度に割込
み状態の検出と処理を行うことになるが、それでは、仮
想マシン命令を実行する度に新たなメモリアクセス(割
込み状態を保持するメモリ上の変数をレジスタに読み込
むためのデータ転送)が加わることになり、TOS変数を
レジスタに割り当てることによってメモリアクセス回数
が削減されるという効果も打ち消されてしまい、全体と
しての実行速度が向上されない。 (第2の従来技術の問題点)上記第2の従来技術、つま
り、ネイティブコード化と呼ばれている方法には、アー
キテクチャの異なる実マシンを対象として仮想マシンプ
ログラムを共有化することが困難になるという問題点が
ある。この従来技術では、仮想マシンプログラムの一部
が特定の実マシンを対象とする実マシン命令で記述され
るからである。そのために、例えば、ネットワーク上の
異なるアーキテクチャの実マシンを備える5種類のコン
ピュータによって同じプログラムが共有される場合であ
れば、それら5種類の実マシンを対象とする実マシンプ
ログラムを準備しておく必要がある。
に異なるために、たとえ同じアーキテクチャの実マシン
を対象とする場合であっても、必ずしも仮想マシン命令
よりも実マシン命令のほうが実行速度の点で優るとも言
えない。例えば、プログラムのコードサイズが一般的に
大きくなってしまうRISC(縮小型命令セットコンピュー
タ)タイプの実マシンを対象とする場合では、そのメイ
ンメモリのサイズが充分でないときには仮想マシン命令
を実マシン命令に置き換えることで仮想メモリのページ
入れ替えが頻発し、却って実行速度が低下する結果とな
る。 (第3の従来技術の問題点)上記第3の従来技術、つま
り、その場式コンパイラと呼ばれる手法でには、仮想マ
シンプログラムをコンパイルするのに要する時間が長く
なってしまうという問題点がある。
有のジャンプ先についての制限を満足するための処理が
必要とされることである。例えば、ジャンプ先のアドレ
スがメインメモリのワード(基本語長)境界に制限され
る実マシンを対象とする場合には、仮想マシン命令をた
だ単に対応する実マシンプログラムに変換しただけで
は、その制限を違反してしまう。
のサンプル仮想マシンプログラムのリストであり、図9
8は、そのフローチャートである。このサンプル仮想マ
シンプログラムは、0から9までの合計10個の整数の
和を算出するものであり、初期値の設定(ステップ70
02、アドレス0〜6)、計算の終了判断(ステップ7
003、アドレス8〜13)、加算と被加算値の設定
(ステップ7004、アドレス15〜29)及び終了処
理(ステップ7005、アドレス31)からなる。
ル時に使用される変換テーブルである。つまり、コンパ
イルの対象となる仮想マシン命令と、それと置き換えら
れる実マシンプログラム等との対応表である。なお、こ
の変換テーブルには、参考のために、各実マシンプログ
ラムのコードサイズも示されている。図100は、図9
9に示された変換テーブルを用いて図97に示された仮
想マシンプログラムをコンパイルした場合に得られる実
マシンプログラムのコード配置の様子を図である。ここ
には、元の仮想マシンに対応する各実マシンプログラム
の相対的な配置アドレスが示されている。
ード境界でしかジャンプ先を指定できないとするなら
ば、図100から明らかなように、アドレス13の仮想
マシン命令"Brz"で指定されるジャンプ先であるアドレ
ス31の仮想マシン命令"Stop"及びアドレス29の仮想
マシン命令"Br"で指定されるジャンプ先であるアドレス
15の仮想マシン命令"Push"は、いずれも、実マシンプ
ログラムにおける奇数アドレスに配置されるため、即
ち、2ワードの境界には配置されないため、ジャンプ先
の制限に違反する。従って、そのような制限違反を犯さ
ないための処理が必要とされる。
対象とする実マシンによっては分岐に伴う特別な処理が
必要とされることである。例えば、米国SPARCInternati
onal,Inc.社のSPARC(登録商標)アーキテクチャのCPUや
米国MIPS Technologies,Inc.社のCPUなど、一部のリス
クアーキテクチャのCPUでは、分岐命令の直後に配置さ
れるいくつかの命令のみを特別なルールで実行するもの
がある。具体的には、分岐の成否にかかわらず後続する
所定の命令を実行したり(遅延分岐;delayed branc
h)、分岐が成立した場合にのみ後続する所定の命令を
実行したり(打ち消し分岐;cancellingbranch)する。
は、一定の解析を行った後に命令の配置をスケジューリ
ングするか、NOP等の無動作命令を分岐命令の直後に配
置するなどの特別な処理が必要とされる。 (第4の従来技術の問題点)上記第4の従来技術、つま
り、予め仮想マシンプログラムを圧縮符号化しておく方
法では、圧縮された仮想マシンプログラムにおける分岐
命令の実行に伴って生じる不具合についての解決手段が
示されていないという問題点がある。
ための圧縮符号化テーブルの例であり、可変長符号93
00aと仮想マシン命令9300bとを対応付けてい
る。図101(b)は、図101(a)に示されたテー
ブルを用いて仮想マシン命令列A("babc")を符号化し
て得られる符号列である。図101(b)に示された符
号列は、その先頭から復号されるならば、元の仮想マシ
ン命令列A("babc")に復元され得る。ところが、分岐
命令などによって図101(b)の途中箇所Bに実行制
御が移った場合において、その箇所Bから始まる符号
列"0010110"に対して図101(a)に示されたテーブ
ルを用いて復号した場合には、誤った仮想マシン命令
列"aabc"に復号されてしまうという問題がある。 (第1〜4の従来技術に共通の問題点)上記第1〜4の
従来技術には、キャッシュ処理を効率化するための技術
については提案されていないという共通の問題点があ
る。そのために、キャッシュメモリを備える実マシンや
コンピュータの処理能力を生かした高速な仮想マシンの
実現が期待されている。
想マシンにおいて生じうる問題点を説明するための図で
あり、仮想マシンのプログラムカウンタ6901と命令
キャッシュ6902の構成を示すブロック図である。命
令キャッシュ6902は、10番地分の命令列6903
をキャッシュブロックとしてキャッシュメモリに存在す
る全てのキャッシュブロックを特定するためのアドレス
を記憶するキャッシュテーブル6904を備える。
プログラムがキャッシュメモリに置かれた場合における
各キャッシュブロックを区切る境界線A,B,Cを示す
図である。本図に示された境界線Cから分かるように、
単純に仮想マシンプログラムを一定長のキャッシュブロ
ックに分割しただけでは、1個の仮想マシン命令"Br8"
のオペコード"Br"とオペランド"8"とが分断されてしま
う。そのために、仮想マシンプログラムのキャッシュブ
ロックへの分割において、プログラムカウンタ6901
の値を変更する全ての仮想マシン命令について、キャッ
シュブロックを跨ぐような変更をしていないか判定しな
ければならず、処理が複雑化し、結果的にキャッシュを
導入することで、仮想マシン全体の実行速度が低下して
しまう。
ッシュメモリに配置する方法や、その場式コンパイラに
よる仮想マシンプログラムの内容解析の結果を用いてキ
ャッシュメモリに配置する方法が考えられる。しかし、
前者の方法では、キャッシュメモリの利用効率が悪く、
ネットワーク環境におけるデータ転送に要する時間が大
きくなってしまうという問題があり、また、後者の方法
では、キャッシュメモリへの読込み時間が長くかかると
いう問題があり、いずれの方法によっても、仮想マシン
全体としての実行効率は大幅に低下してしまう。 (発明の目的)そこで、本発明はかかる問題点に鑑みて
なされたものであり、従来よりも高速に仮想マシンプロ
グラムを実行する仮想マシン、そのための仮想マシンコ
ンパイラ(以下、仮想マシンと仮想マシンコンパイラと
を併せて「仮想マシンシステム」と呼ぶ。)及びその場
式コンパイラを提供することを目的とする。ここで、仮
想マシンコンパイラとは、C言語等の高級言語で記述さ
れたソースプログラムを仮想マシンプログラムに翻訳す
るプログラムである。
的は以下の通りである。第1に、真のデータ依存関係の
影響を吸収することで高速実行を可能とした仮想マシン
システムを提供する。第2に、割込み処理に基づく実行
効率の低下を回避することで高速実行を可能とした仮想
マシンシステムを提供する。
マシンを対象とする場合であっても、そのために全体と
しての実行速度を低下させることなく個々の実マシンの
環境に応じたネイティブコード化が可能な仮想マシンシ
ステム、即ち、実行速度を低下させることなく実マシン
のアーキテクチャへの非依存性を高めた仮想マシンシス
テムを提供する。
ュブロックへの分割に伴う実行効率の低下や、その場式
コンパイラを採用した場合における複雑なアドレス解決
に伴う実行効率の低下などを回避することで高速実行を
可能としたキャッシュ機構に対応した仮想マシンシステ
ムを提供する。第5に、分岐命令が含まれている場合で
あっても圧縮された仮想マシンプログラムを正しく伸長
できることが保証された高速実行可能な仮想マシンシス
テムを提供する。
ない高速動作が可能なその場式コンパイラを提供する。
を達成するために、本発明に係る仮想マシンは、実マシ
ンによる制御の下で仮想マシン命令を実行するスタック
型仮想マシンであって、データを後入れ先出し方式で一
時的に記憶するためのスタック手段と、実行対象となる
仮想マシン命令列と、それら仮想マシン命令それぞれに
対応づけられた情報であって、対応づけられた仮想マシ
ン命令に後続する仮想マシン命令が実行された場合の前
記スタック手段でのデータの格納状態の変化を示す先行
命令情報とを記憶する命令記憶手段と、前記命令記憶手
段から次に実行すべき仮想マシン命令及び対応する先行
命令情報を読み出す読み出し手段と、読み出された仮想
マシン命令と先行命令情報との組み合わせに対応する演
算処理を特定し実行する解読実行手段とを備えることを
特徴とする。
ク型仮想マシンを対象とするコンパイラであって、ソー
スプログラムを前記仮想マシンが実行する仮想マシン命
令列に変換する命令列変換手段と、変換によって得られ
た仮想マシン命令列を構成する仮想マシン命令それぞれ
について、後続する仮想マシン命令が前記仮想マシンに
よって実行された場合の前記スタック手段でのデータの
格納状態の変化を示す先行命令情報を生成する先行命令
情報生成手段と、生成された先行命令情報と対応する仮
想マシン命令とを関連付けて出力する関連付け手段とを
備えることを特徴とする。
に、本発明に係る仮想マシンは、実マシンによる制御の
下で仮想マシン命令を実行する仮想マシンであって、実
行対象となる仮想マシン命令列を記憶する命令記憶手段
と、前記命令記憶手段から次に実行すべき仮想マシン命
令を読み出す読み出し手段と、読み出された仮想マシン
命令に対応する演算処理を特定し実行する解読実行手段
とを備え、前記解読実行手段は、読み出された仮想マシ
ン命令が実行制御の流れを分岐させる分岐命令であるか
否かを判定する分岐命令判定部と、分岐命令であると判
定される度に、その分岐命令の実行に加えて、この仮想
マシンへの割込み要求の発生の有無の検出と、発生して
いる場合の割込み処理とを実行する割込み処理部とを有
することを特徴とする。
ンによる制御の下で仮想マシン命令を実行する仮想マシ
ンであって、実行対象となる仮想マシン命令列を記憶す
る命令記憶手段と、前記命令記憶手段から次に実行すべ
き仮想マシン命令を読み出す読み出し手段と、読み出さ
れた仮想マシン命令に対応する演算処理を特定し実行す
る解読実行手段とを備え、前記解読実行手段は、読み出
された仮想マシン命令が一定個数の仮想マシン命令の集
まりをブロックとした場合の各ブロックを代表する仮想
マシン命令に相当するか否かを判定するブロック判定部
を備え、各ブロックを代表する仮想マシン命令であると
判定される度に、その仮想マシン命令の実行に加えて、
この仮想マシンへの割込み要求の発生の有無の検出と、
発生している場合の割込み処理とを実行する割込み処理
部とを有するとすることもできる。
に、本発明に係る仮想マシンは、実マシンによる制御の
下で仮想マシン命令を実行する仮想マシンであって、実
マシン命令からなる複数のサブプログラムを記憶する実
マシンプログラム記憶手段と、実行対象となる仮想マシ
ン命令列を記憶する第1領域と、前記実マシンプログラ
ム記憶手段における各サブプログラムへのポインタを記
憶する第2領域とを含む命令記憶手段と、前記命令記憶
手段の第1領域から次に実行すべき仮想マシン命令を読
み出す読み出し手段と、読み出された仮想マシン命令に
対応する演算処理を特定し実行する解読実行手段とを備
え、前記解読実行手段は、読み出された仮想マシン命令
が前記第2領域に実行制御を移す命令であるか否かを判
定する領域判定部と、前記第2領域に実行制御を移す命
令であると判定された場合に、その移動先の第2領域の
箇所に格納された前記ポインタが示す前記サブプログラ
ムを実行するアドレス変換実行部とを有することを特徴
とする。
域と第2領域とは、一定のアドレス値を境界とする隣接
した記憶位置に設けられ、前記領域判定部は、読み出さ
れた仮想マシン命令がサブプログラムを呼び出す命令で
ある場合に、その呼び出し先アドレスと前記境界との大
小関係を比較することによって前記判定を行うとするこ
ともできる。
に、本発明に係る仮想マシンは、実マシンによる制御の
下で仮想マシン命令を実行する仮想マシンであって、実
行対象となる仮想マシン命令列を記憶する命令記憶手段
と、前記命令記憶手段から次に実行すべき仮想マシン命
令を読み出す読み出し手段と、読み出された仮想マシン
命令に対応する演算処理を特定し実行する解読実行手段
とを備え、前記命令記憶手段は、前記仮想マシン命令列
を構成する基本ブロックそれぞれに対応する命令ブロッ
クの集まりからなり、各命令ブロックは、その命令ブロ
ックの前記命令記憶手段における先頭位置を特定するた
めの識別子を格納した識別子領域と、対応する基本ブロ
ックの非分岐命令だけを格納した非分岐命令領域と、対
応する基本ブロックの分岐命令を格納した分岐命令領域
とを含み、前記分岐命令領域に格納された分岐命令は、
その分岐先が前記識別子によって指定され、前記解読実
行手段は、読み出された仮想マシン命令が前記分岐命令
である場合には、その分岐先として指定されている識別
子に対応する命令ブロックの非分岐命令領域の先頭に実
行制御を分岐させることを特徴とする。
に、本発明に係る仮想マシンは、実マシンによる制御の
下で仮想マシン命令を実行する仮想マシンであって、実
行対象となる仮想マシン命令列を圧縮符号で記憶する命
令記憶手段と、前記命令記憶手段から次に実行すべき仮
想マシン命令の圧縮符号を読み出し、対応する仮想マシ
ン命令に復号する読み出し手段と、復号された仮想マシ
ン命令に対応する演算処理を特定し実行する解読実行手
段とを備え、前記命令記憶手段は、前記仮想マシン命令
列を構成する基本ブロックそれぞれに対応する命令ブロ
ックの集まりからなり、各命令ブロックは、その命令ブ
ロックの前記命令記憶手段における先頭位置を特定する
ための識別子を格納した識別子領域と、対応する基本ブ
ロックの非分岐命令だけを格納した非分岐命令領域と、
対応する基本ブロックの分岐命令を格納した分岐命令領
域とを含み、前記分岐命令領域に格納された分岐命令
は、その分岐先が前記識別子によって指定され、前記解
読実行手段は、復号された仮想マシン命令が前記分岐命
令である場合には、その分岐先として指定されている識
別子に対応する命令ブロックの非分岐命令領域の先頭に
実行制御を分岐させることを特徴とする。
に、本発明に係るその場式コンパイラは、実マシンによ
る制御の下で仮想マシン命令を実行する仮想マシンと共
に用いられ、実行対象となる一部の仮想マシン命令列を
その実行に先立って実マシン命令列に変換するその場式
コンパイラであって、前記仮想マシン命令列を構成する
仮想マシン命令それぞれについて、前記仮想マシン命令
列を基本ブロックに分割した場合の各基本ブロックの先
頭となる仮想マシン命令であるか否かを示すブロック先
頭情報の入力を受け付けるブロック先頭情報獲得手段
と、前記仮想マシン命令列を構成する仮想マシン命令そ
れぞれについて、対応する実マシン命令列に変換する変
換手段と、前記変換手段によって得られた実マシン命令
列における実マシン命令であって、前記ブロック先頭情
報獲得手段が受け付けたブロック先頭情報によって特定
された基本ブロックの先頭となる仮想マシン命令に対応
する実マシン命令が、前記実マシンによってアドレシン
グされ得ない位置に配置される命令であるか否かを判定
する分岐違反判定手段と、前記分岐違反判定手段によっ
て前記実マシン命令が前記位置に配置される命令である
と判定された場合に、前記実マシン命令が前記位置に配
置されないよう1個以上の無動作命令を前記実マシン命
令列に追加挿入して出力する出力手段とを備えることを
特徴とする。
て、図面を用いて説明する。 (実施形態1)まず、真のデータ依存関係の影響を吸収
する実施形態1に係る仮想マシンシステムについて説明
する。
テムが動作するコンピュータのシステム(ハードウエ
ア)構成図である。このコンピュータ200は、実マシ
ン201、メモリ202、キーボード203、マウス2
04、ディスプレイ206、ハードディスク207、ネ
ットワークカード208及びそれらを接続する内部バス
205a〜205cから構成され、このハードウェア構
成自体は、汎用のパーソナルコンピュータと異ならな
い。
マシンコンパイラは、実マシン201用の命令で記述さ
れた実行形式のプログラムであり、ハードディスク20
7に格納されているが、操作者や他のプログラムからの
指示によってメモリ202にロードされ、実マシン20
1によって実行される。なお、実マシン201は、従来
技術での説明と同様に、図75に示された実マシン命令
を解読・実行するCPUである。 (仮想マシンの構成)図2は、本実施形態に係る仮想マ
シン100の構成を示す機能ブロック図であり、従来技
術の説明における図71に対応する。この仮想マシン1
00は、先行命令情報格納部101、命令格納部10
2、デコード部103、実行部110及びスタック12
0から構成される。
マシンプログラムを保持する記憶領域であり、一方、先
行命令情報格納部101は、その仮想マシンプログラム
を構成する各仮想マシン命令に対応する先行命令情報を
保持する記憶領域である。ここで、先行命令情報とは、
仮想マシンプログラムにおいて対象とする仮想マシン命
令の次に実行される仮想マシン命令がスタック120の
階層を増加させる命令であるか減少させる命令であるか
を示す1ビットの情報(前者の場合の情報を「U」、後
者の場合の情報を「D」と記す。)をいい、後述する本
実施形態に係る仮想マシンコンパイラによってソースプ
ログラムから仮想マシンプログラムと共に生成され得
る。
令情報格納部101及び命令格納部102に格納されて
いる先行命令情報及び対応する仮想マシンコードの例を
示す。ここでは、図80(a)に示された仮想マシンプ
ログラムと同一内容、即ち、「2*(3+4)」を計算する仮
想マシンプログラム及びその先行命令情報が格納されて
いる。例えば、先行命令情報格納部101のアドレス1
及び2には、命令格納部102の対応するアドレス1及
び2に置かれた仮想マシン命令"Push 2"の次に実行され
る仮想マシン命令"Push 3"がスタック120の階層を増
加させる旨の先行命令情報「U」が格納されている。
101に格納された先行命令情報を参照しながら命令格
納部102に格納された仮想マシン命令を逐一に読み出
して解読し、その結果を実行部110に出力するもので
あり、さらに、先行命令情報読込み部104、命令読込
み部105、検索部106、プログラムカウンタ(P
C)107及びデコードテーブル108から構成され
る。
命令情報格納部101それぞれに格納された次に読み出
すべき1対の仮想マシン命令及び先行命令情報のアドレ
ス(これらのアドレスは、本実施形態では同一としてい
る。)を保持するための記憶領域であり、実行部110
によってそのアドレスが書き込まれることによって更新
される。なお、PC107は、従来技術と同様に、物理
的には、実マシン201のレジスタ2番(r2)に割り
当てられている。
命令格納部102のアドレスに置かれた仮想マシン命令
を読み出して検索部106に送る。同様にして、先行命
令情報読込み部104は、命令読込み部105に同期し
て動作し、PC107が示す先行命令情報格納部101
のアドレスに格納された先行命令情報を読み出し、検索
部106に送る。
ン100が解読・実行する全ての仮想マシン命令(ここ
では、図72に示された仮想マシン命令とする。)のオ
ペコードと上述した2種類の先行命令情報との全ての組
み合わせについて、マイクロプログラム記憶部111に
格納された対応するマイクロプログラムへのジャンプア
ドレス及びその仮想マシン命令に伴うオペランドの数を
予め記憶する。なお、全てのオペコードは1バイト長で
あり、オペランドの単位も1バイトである点は、従来技
術と同じとする。
示す図であり、図73に示された従来技術におけるデコ
ードテーブル4406に対応する。このデコードテーブ
ル108には、従来のデコードテーブル4406と相違
し、1種類の仮想マシン命令108aにつき、「U」と
「D」の2種類の先行命令情報108bに対応するジャ
ンプアドレス108c及びオペランド数108dが格納
されている。例えば、1種類の仮想マシン命令"Push"に
ついて、先行命令情報108bが「U」の場合には、上
向きPushを処理するマイクロプログラムへのジャンプア
ドレスが格納され、一方、先行命令情報108bが
「D」の場合には、下向きPushを処理するマイクロプロ
グラムへのジャンプアドレスが格納されている。
送られてきた仮想マシン命令のオペコードと先行命令情
報読込み部104から送られてきた先行命令情報との組
み合わせに対応するデコードテーブル108内のエント
リを特定し、そのエントリに格納されたジャンプアドレ
スを読み出し、それをデコードデータとして実行部11
0に出力する。
てきたデコードデータに従って、仮想マシン命令のオペ
レーションを実行するものであり、さらに、マイクロプ
ログラム記憶部111及びスタックポインタ(SP)1
12を有する。マイクロプログラム記憶部4411は、
この仮想マシン100が解読・実行する全ての仮想マシ
ン命令と上述した2種類の先行命令情報との全ての組み
合わせに対応するマイクロプログラムを予め記憶する。
これらマイクロプログラムの詳細については後述する。
ク120の最上位のアドレスを保持する記憶領域であ
り、物理的には、実マシン201のレジスタ3番(r
3)に割り当てられている。スタック120は、実行部
110による仮想マシンプログラムの実行のための一時
的な後入れ先出し方式の記憶領域であり、さらに、TOS
変数121、SecondOf Stack(SOS)変数122及びメ
モリスタック123から構成される。TOS変数121
は、スタック120の最上位の値を格納する記憶域であ
り、物理的には、実マシン201のレジスタ0番(r
0)に割り当てられている。SOS変数122は、スタッ
ク120の最上位から2番目の値を格納する記憶域であ
り、物理的には、実マシン201のレジスタ4番(r
4)に割り当てられている。メモリスタック123は、
スタック120の最上位から3番目以降の値を格納する
記憶域であり、物理的には、メモリ202に割り当てら
れている。 (マイクロプログラム記憶部111の内容)図5(a)
及び(b)は、それぞれ、マイクロプログラム記憶部1
11に格納されているマイクロプログラムのうち、上向
き仮想マシン命令"Push"及び下向き仮想マシン命令"Pus
h"に対応するもののリストを示す。同様に、図6(a)
及び(b)は、それぞれ、上向き仮想マシン命令"Add"
及び下向き仮想マシン命令"Add"に対応するもの、図7
(a)及び(b)は、それぞれ、上向き仮想マシン命
令"Mult"及び下向き仮想マシン命令"Mult"に対応するも
ののリストを示す。そして、図8(a)及び(b)それ
ぞれは、図6(a)及び図7(a)に示された上向き仮
想マシン命令のマイクロプログラムの後半に相当する部
分、図6(b)及び図7(b)に示された下向き仮想マ
シン命令のマイクロプログラムの後半に相当する部分の
リストである。なお、ここで用いられている実マシン命
令の意味は、図75に示される通りである。
4(a)〜(d)及び図82(a)〜(d)に示された
従来技術のものと比較して分かるように、本仮想マシン
100のマイクロプログラム記憶部111に格納された
マイクロプログラムには以下の特徴がある。つまり、第
1の特徴は、同一の仮想マシン命令であっても先行命令
情報が異なれば対応するマイクロプログラムの内容が異
なることである。これは、直後に実行される仮想マシン
命令によるスタック操作を予め考慮することによって、
無駄なスタック操作や、真のデータ依存関係に基づくパ
イプラインの乱れを回避するためである。例えば、図5
(b)に示されるように、仮想マシン命令"Push"のマイ
クロプログラムであるにも拘わらず、SOS変数122の
値をメモリスタック123にプッシュする操作が記述さ
れていないのは、この仮想マシン命令の先行命令情報が
下向き、即ち、次に実行される仮想マシン命令によって
ポップ操作が行われるので、無駄となってしまうことを
避けるためである。
記憶域(TOS変数121)だけでなく上位から2番目の
記憶域(SOS変数122)についても、メモリ202で
はなくレジスタに割り当てられていることである。これ
は、加算などの演算の対象となる2つの値をレジスタに
保持することで、実マシン201とメモリ202間のデ
ータ転送の回数を削減するためである。例えば、図6
(a)に示されるように、加算だけのオペレーションで
あれば、レジスタとメモリ202間でのデータ転送は不
要となる。
される仮想マシン命令が属する種別の変化を示す状態遷
移図である。ここで、各状態は、本仮想マシン100に
よって解読・実行される全ての仮想マシン命令とその先
行命令情報との組み合わせの全てについて、スタック1
20に対する操作内容の観点から分類した場合における
各分類種別に相当する。各状態中に記された「X、Y
(Z)」におけるX、Y、Zは、それぞれ、演算対象と
なるスタック格納値の数、演算後に増加するスタックの
階層数、先行命令情報を示す。例えば、状態"2,-1(U)"
は、2つの値を用いて演算し、その演算後にはスタック
の階層数が1つ減少し、先行命令情報「U」が対応付け
られた仮想マシン命令の全てを示す。具体的には、上向
き仮想マシン命令"Add"などが該当する。なお、各状態
の右下に記された式は、その状態に属する仮想マシン命
令によるTOS変数121とSOS変数122の変化を示し、
Xはオペランドを意味する。
は、遷移元の状態に属する仮想マシン命令に必要なオペ
レーションのうち、遷移先に依存することなく先行して
行うことが可能な処理の内容を示す。従って、各状態か
ら出ていく遷移矢印線の種別は全て同一である。例え
ば、状態"2,-1(D)"からの遷移先としては、"2,-1(U)","
2,-1(D)","1,0(U)","1,0(D)","1,-1(U)","1,-1(D)"の6
種類が考えられるが、いずれに遷移する場合であって
も、その遷移矢印線の種別が示す処理"Pop SOS"、即
ち、メモリスタック123の最上位の値をSOS変数12
2にポップすることが可能であることが分かる。なお、
無条件分岐命令"Br"及び終了命令"Stop"は、TOS変数1
21に対して空の演算を行う命令"1,0(U)"(又は"1,0
(D)")としている。
は、本仮想マシン100に係る全ての仮想マシン命令に
ついて先行して行うことが保証された処理内容を示す解
析結果と言える。そして、この解析結果は、対応するマ
イクロプログラムに反映されている。つまり、マイクロ
プログラム記憶部111に格納された各マイクロプログ
ラムには、この状態遷移図に示された対応する先行処理
(対応する状態から出ていく遷移矢印線が示す処理)が
組み込まれている。 (仮想マシンの動作)以上のように構成された仮想マシ
ン100の動作について説明する。
部103の動作を示すフローチャートであり、従来技術
における図76に対応する。これらの図を比較して分か
るように、このデコード部103の動作は、従来のデコ
ード部4402と基本的な流れは同一であるが、先行命
令情報読込み部104が命令読込み部105と同期して
先行命令情報格納部101から先行命令情報を読み込む
処理(ステップ4906)が追加されている点と、テー
ブル検索(ステップ4907)における詳細な動作内容
において、従来と異なる。
示されたテーブル検索(ステップ4907)の詳細を示
すフローチャートの前半部及び後半部であり、従来技術
における図77に対応する。これらの図を比較して分か
るように、本実施形態におけるテーブル検索は、従来の
ものと基本的な流れは同一であるが、本仮想マシン10
0の検索部106が命令読込み部105から送られてく
る仮想マシン命令のオペコードだけでなく先行命令情報
読込み部104から送られてくる先行命令情報との組み
合わせを考慮し、それらが一致するデコードテーブル1
08のエントリに格納されたジャンプアドレス108c
とオペランド数108dを参照してデコーデータを特定
し実行部110に出力する処理(ステップ5003、5
007)が追加されている点で、従来と異なる。
る先行命令情報及び仮想マシン命令が先行命令情報格納
部101及び命令格納部102に格納されている場合
に、それらに基づいてデコード部103が実行部110
に順次出力するデコードデータを示し、従来技術におけ
る図80(c)に対応する。先行命令情報と仮想マシン
命令との組み合わせに対応するマイクロプログラムへの
ジャンプアドレスが出力されていることが分かる。
は、図79に示された従来技術に係るフローチャートに
示される通りである。つまり、実行部110は、PC1
07とSP112とを初期化しておいた後に(ステップ
4702)、デコード部103から送られてくるデコー
ドデータを読み込んで(ステップ4704)、そのデコ
ードデコードに含まれるジャンプアドレスが示すマイク
ロプログラム記憶部111内のマイクロプログラムに分
岐し実行する動作(ステップ4705)を繰り返す(ス
テップ4703〜4704)。
13に示されたデコードデータ列に従って実行部110
が図3(b)に示された仮想マシンプログラムを実行し
た場合における各仮想マシン命令が実行される前後での
PC107、SP112、TOS変数121、SOS変数12
2及びメモリスタック123の一連の変化の前半部と後
半部を示す図であり、従来技術における図81(a)及
び(b)や図83(a)及び(b)に対応する。ここ
で、本図の遷移矢印の中には、対応する先行命令情報
(UまたはD)と仮想マシン命令との組がそれぞれスラ
ッシュ「/」の左側及び右側に記されている。本図にお
いても、PCが9に達した段階で、計算式"2*(3+4)"の
値が算出されていることが分かる。
的なことは、例えば、仮想マシン命令"U/Push 3"の実行
後において既にSOS変数122の値がメモリスタック1
23の最上位に格納されている点、仮想マシン命令"D/P
ush 4"の実行後においてSP112及びメモリスタック
123の内容が変化していない点などである。これら
は、上述した解析に基づく先行処理が行われていること
に起因する。
ン100が図3(b)に示された仮想マシンプログラム
を実行した場合の実マシン201のパイプラインの流
れ、より具体的には、アドレス7の下向き仮想マシン命
令"Add"のマイクロプログラム(図6(b))の後半部
分(図8(b)に示されたジャンプ処理)と、続くアド
レス8の下向き仮想マシン命令"Mult"のマイクロプログ
ラム(図7(b))の前半部分(乗算計算処理)におけ
るパイプラインの流れを示す。但し、図15〜図18
は、それぞれ、実マシン201が通常マシンであってメ
モリ参照を行ってから1クロック後にその参照値を使用
することができる場合、実マシン201がスーパースカ
ラマシンであって同様の場合、実マシン201が通常マ
シンであってメモリ参照を行ってから2クロック後にそ
の参照値を使用することができる場合、実マシン201
がスーパースカラマシンであって同様の場合におけるパ
イプラインの流れを示し、従来技術における図93〜図
96に対応する。
に、パイプラインの乱れは、実マシン命令"Jmp"の実行
に起因する1個の命令のキャンセルだけとなり、処理全
体は11クロックで完了する。つまり、実マシン201
が通常マシンであって、かつ、メモリ参照を行ってから
1クロック後にその参照値を使用することができる場合
には、本仮想マシン100は、実行速度において、従来
の仮想マシンと異ならない。
ように、本仮想マシン100によれば、従来の仮想マシ
ンで生じた第1及び第2の依存関係は吸収され、パイプ
ラインの乱れは、実マシン命令"Jmp"の実行に起因する
1個の命令のキャンセルだけとなり、処理全体は9クロ
ックで完了する。つまり、実マシン201がスーパース
カラマシンであって、かつ、メモリ参照を行ってから1
クロック後にその参照値を使用することができる場合、
本仮想マシン100によって、11クロック要する従来
の仮想マシンに比べ、実行速度は22%だけ高速化され
る。
イクロプログラムにおいて、次に実行すべき仮想マシン
命令"Mult"の実行のための先行処理、即ち、メモリスタ
ック123からSOS変数122へのポップ(Load r4,[r
3])及びSP112のデクリメント(Dec r3)を実行し
ているので、メモリ参照(Load r1,[r2])から分岐(Jm
p r1)までに充分な時間が確保され、パイプラインの乱
れが吸収されたからである。
ように、本仮想マシン100によれば、同様の理由によ
り、従来の仮想マシンで生じた第1及び第2の依存関係
は吸収されるので、パイプラインの乱れは、実マシン命
令"Jmp"の実行に起因する1個の命令のキャンセルだけ
となり、処理全体は11クロックで完了する。つまり、
実マシン201が通常マシンであって、かつ、メモリ参
照を行ってから2クロック後にその参照値を使用するこ
とができる場合、本仮想マシン100によって、13ク
ロック要する従来の仮想マシンに比べ、実行速度は18
%だけ高速化される。
ように、本仮想マシン100によれば、同様の理由によ
り、従来の仮想マシンで生じた第1の依存関係に基づく
ハザードの数が低減され、かつ、第2の依存関係は吸収
されるので、パイプラインの乱れは、第1の依存関係に
基づく1クロック分のハザードと実マシン命令"Jmp"の
実行に起因する1個の命令のキャンセルだけとなり、処
理全体は10クロックで完了する。つまり、実マシン2
01がスーパースカラマシンであって、かつ、メモリ参
照を行ってから2クロック後にその参照値を使用するこ
とができる場合、本仮想マシン100によって、13ク
ロック要する従来の仮想マシンに比べ、実行速度は30
%だけ高速化される。
ン100は、個々の仮想マシン命令の実行において、対
応する先行命令情報を参照することで、真のデータ依存
関係をもつ2つの実マシン命令を実行する間に、後続す
る仮想マシン命令の実行において必要とされるスタック
処理を先行して実行する。これによって、真のデータ依
存関係に基づくパイプラインの乱れが抑えられ、実行速
度が向上する。 (仮想マシンコンパイラの構成)次に、上記仮想マシン
100を対象とする仮想マシンコンパイラについて説明
する。
する仮想マシンコンパイラ3400の構成を示す機能ブ
ロック図である。本仮想マシンコンパイラ3400は、
高級言語で記述されたソースプログラム3404を入力
とし、上記仮想マシン100固有の仮想マシン命令(図
72に示された仮想マシン命令)からなる命令列340
5aと、それら仮想マシン命令に対応する先行命令情報
の列3405bとを生成するクロスコンパイラであり、
さらに、命令列変換部3402、先行命令情報生成部3
401及び関連付け部3403から構成される。
ード208やハードディスク207等から経路Sを経て
入力されるソースプログラム3404を構文解析して言
語変換することによって、上記仮想マシン100固有の
仮想マシン命令からなる命令列を生成し、その命令列を
経路C1及びC3を介して先行命令情報生成部3401及び
関連付け部3403に順次出力する。
換部3402から送られてきた個々の仮想マシン命令に
対応する先行命令情報を特定し、経路C2を介して関連付
け部3403に順次出力する。なお、命令列変換部34
02及び先行命令情報生成部3401は、対応する仮想
マシン命令と先行命令情報との組が同期して関連付け部
3403に到達するように、それらを出力する際のタイ
ミングを調整している。
02から送られてくる仮想マシン命令と先行命令情報生
成部3401から送られてくる先行命令情報とを組にし
て関連付けた後に、最終的な出力プログラム3405と
して、それぞれを経路D1及びD2を経てメモリ202やハ
ードディスク207等に出力する。図20及び図21
は、経路Sを経て命令列変換部3402に入力されるソ
ースプログラム3404のデータ構造を説明するための
図であり、それぞれ、ソースプログラム3404の命令
列(ここでは、"x:=(1+2)*(3+4)")に対応する木構造及
びその木構造を構成する各ノードのデータ構造を示す。
各ノードは、ソースプログラム3404の命令列を構成
する個々の命令に対応し、その種別を示す命令種別52
01、左部分木へのポインタ5202及び右部分木への
ポインタ5203から構成される。 (仮想マシンコンパイラの動作)次に、以上のように表
現されたソースプログラム3404が本仮想マシンコン
パイラ3400に入力された場合の動作について説明す
る。
順の概略を示すフローチャートである。命令列変換部3
402は、木構造で表現されたソースプログラム340
4の命令列を読み込むと(ステップ5402)、まず、
その木構造の枝を順次に辿るための計算用スタックを初
期化する(ステップ5403)。そして、その木構造に
おけるルートノードへのポインタを変数ptrにセットし
た後に(ステップ5404)、その木構造全体に対応す
る仮想マシン命令列、即ち、仮想マシンコードを生成し
(ステップ5405)、バイト単位で先行命令情報生成
部3401及び関連付け部3403に送る。
5の詳細を示すフローチャートである。命令列変換部3
402は、木構造における左部分木に位置するノードに
対する変換処理(ステップ5603〜5606)を右部
分木に位置するノードに対する変換処理(ステップ56
07〜5610)に優先させて、各ノードの命令種別5
201を数値又はアドレスとしてそのまま出力していく
か又は対応する仮想マシンコードに変換するかの処理を
繰り返す(ステップ5611〜5613)。なお、全て
のノードについて処理を繰り返すために、ステップ56
05及びS5609において、この処理(ステップ56
01〜5614)自体を再帰的に呼び出している。
3の詳細を示すフローチャートであり、図20に示され
るサンプルプログラムに対応するものである。命令列変
換部3402は、各ノードの命令種別5201の値knd
によって、対応する4種類の仮想マシン命令"Push","Mu
lt","Pop","Add"のいずれかのオペコードを生成してい
く(ステップ5901〜5909)。
動作を示すフローチャートである。先行命令情報生成部
3401は、命令列変換部3402から順次送られてく
る仮想マシンコードをバイト単位で受け取り(ステップ
5502)、その2バイト目以降の仮想マシンコードに
ついて、それがオペランドであるか、仮想マシン命令"P
ush"のオペコードであるか、他の仮想マシン命令のオペ
コードであるかを判断し、それぞれに対応する先行命令
情報Nextを関連付け部3403に出力していく(ステッ
プ5503〜5509)。なお、最後に出力する先行命
令情報は、固定的に"U"としている(ステップ551
0)。
すフローチャートである。関連付け部3403は、直前
に処理した仮想マシンコードの先行命令情報を記憶する
変数prv及び最終的に生成する先行命令情報及び仮想マ
シンコードのアドレスAddrを初期化した後に(ステップ
6002)、命令列変換部3402から送られてくる仮
想マシンコードが無くなるまで次の処理(ステップ60
04〜6010)を繰り返す(ステップ6003)。
令情報生成部3401からそれぞれ経路C1及びC2を経
て、対応する1バイト分の仮想マシンコード及び先行命
令情報Nextを受け取った後に(ステップ6004、60
05)、その先行命令情報Nextが直前と同一である旨を
示す"X"であるか否か判断することによって(ステップ
6006)、その仮想マシンコードの先行命令情報now
を決定し(ステップ6007、6008)、決定した先
行命令情報nowと上記仮想マシンコードとを対にしてア
ドレスAddrで示されるメモリ202等の出力領域におけ
る位置に出力する(ステップ6009、6010)。
3400によって、高級言語等で記述されたソースプロ
グラム3404から、本実施形態に係る仮想マシン10
0をターゲットとする仮想マシンプログラム、即ち、図
2に示された仮想マシン100の先行命令情報格納部1
01及び命令格納部102に格納すべき先行命令情報列
及び仮想マシン命令列の組が生成される。
イラ3400は、木構造で表現されたソースプログラム
3404を入力としたが、本発明はこれに限定されるも
のではなく、C言語等のプログラミング言語で記述され
たテキストそのものを入力としてもよい。そして、命令
列変換部3402が、そのテキストを木構造や3オペラ
ンド方式等による中間コードに変換する前処理を行って
もよい。 (実施形態2)次に、割込み処理に基づく実行効率の低
下を回避した実施形態2に係る仮想マシンについて説明
する。 (仮想マシンの構成)図27は、本実施形態に係る仮想
マシン3500の構成を示す機能ブロック図である。本
仮想マシン3500は、命令格納部4401、デコード
部3502、割込み制御部3510、実行部4410及
びスタック4420から構成される。
本仮想マシン3500は、従来の仮想マシン4400と
ほぼ同一の構成要素を備える。同一の構成要素について
は、同一の符号を付し、その説明を省略する。相違する
点は、従来の仮想マシン4400が備える構成要素に加
えて、さらに、この仮想マシン3500への割込み要求
に応じた処理を実行制御するための割込み制御部351
0を備えること、デコード部3502からの制御信号及
びデコードデータは分岐命令検出部3505に出力され
ていること、実行部3515のマイクロプログラム記憶
部4411には割込み処理のための実マシンプログラム
である割込み処理プログラム3516が追加して格納さ
れていることである。以下、従来の仮想マシン4400
と相違する点を中心に説明する。
500が分岐命令を解読・実行するたびに割込み発生の
有無を検出し、必要な割込み処理を実行部4410に行
わせるよう制御するものであり、さらに、分岐命令検出
部3505、割り込み命令挿入部3506及び割込み状
態格納部3507から構成される。分岐命令検出部35
05は、検索部4405から信号線D1を介して送られて
きたデコードデータが分岐命令"Br","Brz","Brnz","Cal
l","Ret"のいずれかのマイクロプログラムへのジャンプ
アドレスであるか否か判断し、肯定的に判断した場合に
のみ、信号線C2をオンにしてそのデコードデータを割り
込み命令挿入部3506に出力し、否定的に判断した場
合には、信号線C2をオフにしたままそのデコードデータ
を割り込み命令挿入部3506に出力する。
ン3500に対する割込み要求が発生しているか否か及
び発生している場合の割込み種別を特定する状態変数ID
を保持する記憶域であり、物理的には、メモリ202や
ネットワークカード208内のレジスタ等に割り当てら
れる。割り込み命令挿入部3506は、分岐命令検出部
3505が分岐命令を検出した旨の通知を信号線C2を介
して受けると、その時点における割込み状態格納部35
07の状態変数IDを参照することで、割込みが発生して
いるか検査し、発生している場合に、その分岐命令のデ
コードデータの出力に先立ち、割込み処理を実行させる
ためのデコードデータ、即ち、マイクロプログラム記憶
部4411内の割込み処理プログラム3516へのジャ
ンプアドレスと上記状態変数IDとを実行部4410に出
力する。
み命令挿入部3506から通知された状態変数IDに基づ
くメモリ202上のアドレスに格納された割込みベクタ
を読み出し、その割り込みベクタが示すジャンプ先のサ
ブルーチンを処理するという割込み処理を行うための実
マシンプログラムである。 (仮想マシンの動作)以上のように構成された仮想マシ
ン3500の動作について説明する。
ち、テーブル検索とデコードデータの出力処理の詳細を
示すフローチャートであり、従来における図77に対応
する。図77と異なる点は、デコードデータの出力先の
変更に伴う処理(ステップ6108〜6111)であ
る。つまり、検索部4405は、読込み部4403から
送られてきた仮想マシン命令のオペコードに対応するジ
ャンプアドレスをデコードテーブル4406から読み出
し終えると(ステップ6106)、分岐命令検出部35
05に対して、信号線C1をオンにしたまま信号線D1を介
してそのジャンプアドレスをデコードデータとして出力
する(ステップ6108〜6110)。
を示すフローチャートである。分岐命令検出部3505
は、信号線D1を介して入力されたデコードデータを読み
込んで一時記憶した後に(ステップ6202、620
3)、そのデコードデータddataがマイクロプログラム
へのジャンプアドレスであるか否かを信号線C1の状態に
よって判断する(ステップ6204)。
ある場合にはさらに、そのジャンプアドレスが予め内部
に記憶する分岐命令"Br","Brz","Brnz","Call","Ret"の
マイクロプログラムのジャンプアドレスのいずれかと一
致するか否かを判断し(ステップ6205)、一致する
ときにのみ信号線C2をオンにして(ステップ620
6)、一時記憶していたデコードデータddataを出力す
る(ステップ6206〜6208)。
04、6205)、信号線C2をオフにしたまま、デコー
ドデータddataを出力する(ステップ6207、620
8)。図30は、割込み命令挿入部3506の動作を示
すフローチャートである。割り込み命令挿入部3506
は、信号線D2を介して入力されたデコードデータを読み
込んで一時記憶した後に(ステップ6302、630
3)、そのデコードデータddata2が分岐命令のマイクロ
プログラムへのジャンプアドレスであるか否か信号線C2
の状態によって判断する(ステップ6304)。
ある場合には、割込み状態格納部3507に格納された
状態変数IDを読み出し(ステップ6305)、その値か
ら割込みが発生しているか否か判断し(ステップ630
6)、発生している場合にのみ、予め定められた割込み
処理を実行させるためのデコードデータ(状態変数IDと
割込み処理プログラム3516へのジャンプアドレス)
を実行部4410に出力した後に(ステップ630
7)、一時記憶していた分岐命令のデコードデータddat
a2を実行部4410に出力する(ステップ6308)。
その結果、実行部3515は、分岐命令の実行に先立
ち、状態変数IDに基づく割込み処理プログラム3516
を実行する。
ドデータが分岐命令のマイクロプログラムへのジャンプ
アドレスでないと判断されたり(ステップ6304)、
割込みが発生していないと判断された(ステップ630
6)場合には、特別な処理を行なうことなく、単に、一
時記憶していた分岐命令のデコードデータddata2を実行
部4410に出力する(ステップ6308)。
1個の分岐命令を解読・実行するたびに、この仮想マシ
ン3500への割込みが発生しているか否かが検査さ
れ、発生している場合には割込み処理が追加されて実行
される。なお、本実施形態に係る仮想マシン3500に
よれば、従来の仮想マシン4400に比べ、1個の分岐
命令につき、割込み処理のための1個の分岐命令が追加
して実行されるので、メモリアクセスの回数が1回分余
計に増える。しかしながら、通常のプログラムでは分岐
命令から次の分岐命令までに平均6個の非分岐命令が存
在するので、このような仮想マシンプログラムにおいて
は、本仮想マシン3500によって増加するメモリアク
セスの回数は、1命令当たりに換算すれば、わずか0.
2以下である。従って、例えば、本実施形態の割込み処
理機能を実施形態1に係る仮想マシン100に適用する
ことで、TOS変数によるメモリアクセス回数の削減の効
果を打ち消してしまうことなく、全体として従来よりも
メモリアクセス回数を削減させることができるので、実
行速度の高速化に好適な割込み処理機能付き仮想マシン
が実現される。
ン3500によれば、デコード部3502と実行部44
10との間に割込み制御部3510が設けられ、分岐命
令検出部3505によって分岐命令が解読実行される場
合に限定して割込み発生の検出と割込み処理が行なわれ
るので、全ての仮想マシン命令ごとに行われる場合に比
べて実行効率の低下が抑止され、適度な頻度で割込み検
出処理が行なわれる。
2からのデコードデータを監視することで分岐命令の発
生が検出されたが、これをデコード部3502に入力さ
れる仮想マシン命令(のオペコード)を監視することで
同一の検出をしてもよい。同様に、デコード部3502
からのデコードデータを監視するのではなく、マイクロ
プログラム記憶部4411に記憶された分岐命令に対応
するマイクロプログラムの中に、割り込み命令挿入部3
506が有する手順を予め追加して記述しておく方法で
あっても同じ結果が得られる。 (実施形態3)次に、実施形態2と別の方法によって割
込み処理に基づく実行効率の低下を回避した実施形態3
に係る仮想マシンについて説明する。 (仮想マシンの構成)図31は、本実施形態に係る仮想
マシン3600の構成を示す機能ブロック図である。本
仮想マシン3600は、命令格納部4401、デコード
部3502、割込み制御部3610、実行部4410及
びスタック4420から構成される。
本仮想マシン3500は、実施形態2に係る仮想マシン
3500とほぼ同一の構成要素を備える。相違する点
は、実施形態2における分岐命令検出部3505がブロ
ック化部3605に置き換えられていること、そのブロ
ック化部3605についての接続関係である。以下、実
施形態2に係る仮想マシン3500と相違する点を中心
に説明する。
600により解読された仮想マシンコードのブロック
化、即ち、一定個数(例えば、10バイト)の仮想マシ
ンコードが解読されたか否かを繰り返し検出し、ブロッ
ク化(検出)する度にその旨を割り込み命令挿入部35
06に通知する。 (仮想マシンの動作)以上のように構成された仮想マシ
ン3600の動作について説明する。
示すフローチャートである。ブロック化部3605は、
信号線D1を介して入力されたデコードデータを読み込ん
で一時記憶した後に(ステップ6402、6403)、
その時点でのPC4404の値を読み出す(ステップ6
404)。すなわち、デコード部3502から送られて
きたデコードデータがいずれのアドレスに置かれた仮想
マシンコードに対応するものかを参照する。
eで割った余りmを算出し(ステップ6405)、その余
りmがゼロであるか否かを判断し(ステップ640
6)、ゼロであるときにのみ信号線C2をオンにして(ス
テップ6407)、一時記憶していたデコードデータdd
ataを出力する(ステップ6407〜6409)。一
方、ゼロでない場合には(ステップ6406)、信号線
C2をオフにしたまま、デコードデータddataを出力する
(ステップ6408、6409)。
2の場合と同様にして、信号線C2がオンとなると、割込
み発生の有無を検査し、発生している場合にのみ、割込
み処理を実行させるためのデコードデータ、即ち、マイ
クロプログラム記憶部4411内の割込み処理プログラ
ム3516へのジャンプアドレスと上記状態変数IDとを
実行部4410に出力する。
一定個数bsizeの仮想マシンコードが解読される度に、
この仮想マシン3600への割込みが発生しているか否
かが検査され、発生している場合には割込み処理が追加
されて実行される。つまり、本実施形態に係る仮想マシ
ン3600によれば、割込み検出処理が実行される頻度
は、定数"bsize"で指定される数の仮想マシンコードに
つき一回に限定される。
数"bsize"を一定値以上とし、本実施形態の割込み処理
機能を実施形態1に係る仮想マシン100に適用するこ
とで、実施形態1に係る仮想マシン100におけるTOS
変数によるメモリアクセス回数の削減の効果を打ち消し
てしまうことなく、全体として従来よりもメモリアクセ
ス回数を削減させた高速な割込み処理機能付き仮想マシ
ンが実現される。
0によれば、ブロック化部3605はPC4404の値
を参照しているが、PC4404自体は実マシン201
のレジスタ2番(r2)に割り当てられているので、こ
の参照によってはメモリアクセスの回数が増加すること
はない。また、本実施形態に係る仮想マシン3600に
よれば、定数"bsize"を変更するだけで割込み検出処理
の実行頻度を調整することが可能となり、メモリアクセ
スの回数を柔軟に制御できる仮想マシンが実現される。
は、デコード部3502から送られてきたデコードデー
タに対応するPC4404の値と定数bsizeを比較した
が、これに代えて、内部にカウンタを設けることによっ
て、デコード部3502からの信号線C1がオンになった
回数をカウントし、その値と定数bsizeとを比較しても
よい。これによって、一定バイト数の仮想マシンコード
ではなく、一定個数の仮想マシン命令ごとに割込み検出
処理が行なわれることになる。
610が独立してブロック化を行ったが、実行部441
0がPC4404を参照できることを考慮すれば、マイ
クロプログラム記憶部4411の内容として割込み制御
部3610の処理手順を予め追加しておく方法であって
も同じ結果が得られる。 (実施形態4)次に、実マシンのアーキテクチャへの非
依存性を高めた実施形態4に係る仮想マシンについて説
明する。 (仮想マシンの構成)図33は、本実施形態に係る仮想
マシン3700の構成を示す機能ブロック図である。本
仮想マシン3700は、命令格納部3701、デコード
部4402、実行部3710及びスタック4420から
構成される。
本仮想マシン3700は、従来の仮想マシン4400と
ほぼ同一の構成要素を備える。相違する点は、命令格納
部3701に格納されている内容と、実行部3710に
領域判定部3704とアドレス変換部3705が加えら
れていることと、実マシン関数記憶部3706が追加さ
れていることである。以下、従来の仮想マシン4400
と相違する点を中心に説明する。
命令で記述された関数(以下、「実マシン関数」と呼
ぶ。)の集まり、つまり、仮想マシンプログラムで必要
とされる定型的な処理を行う関数の集合を実行時ライブ
ラリとして予め記憶しており、物理的には、メモリ20
2に割り当てられている。具体的には、後述する第0〜
(RMmax−RMmin)番までの合計(RMmax−RMmin
+1)個の実マシン関数を記憶している。
想マシンプログラムだけでなく、実マシン関数テーブル
も予め保持している。ここで、実マシン関数テーブルと
は、上記実マシン関数記憶部3706に格納された各実
マシン関数それぞれへのポインタ(先頭アドレス)の集
まりである。図34は、命令格納部3701のメモリマ
ップ、即ち、仮想マシン3700から見たメモリ領域の
用途分割を示す。アドレスVMmin〜VMmaxの領域は、
仮想マシンプログラム6501、即ち、仮想マシン命令
で記述された関数(仮想マシン関数)の集まりが配置さ
れる領域に割り当てられ、これに続くアドレスRMmin
〜RMmaxの領域は、実マシン関数テーブル6502が
配置される領域に割り当てられている。なお、実マシン
関数テーブル6502の領域は、仮想マシンプログラム
6501の領域の直後に置かれている。つまり、アドレ
スRMminは、アドレスVMmax+1に等しい。
テーブル6502の構造を示す。命令格納部3701の
アドレスRMmin〜RMmaxの領域には、各番地ごとに、
第0〜(RMmax−RMmin)番の実マシン関数へのポイ
ンタが格納されている。但し、各ポインタは、アドレス
の逆順に対応づけて格納されている。例えば、第0番の
実マシン関数は、アドレスRMmaxに置かれた仮想マシ
ン関数が呼び出された場合に実行される関数であり、同
様に、第(RMmax−RMmin)番の実マシン関数は、ア
ドレスRMminに置かれた仮想マシン関数が呼び出され
た場合に実行される関数である。
2から出力されたデコードデータを監視することで、実
行部3710による実行対象が関数呼び出し命令"Call"
である場合に、その命令の実行に先立ち、その呼び出し
先が仮想マシンプログラム6501内であるか実マシン
関数テーブル6502が置かれた領域内であるかを判定
する。
704によって実行対象の仮想マシン命令が実マシン関
数テーブル6502の領域内への関数呼び出し命令"Cal
l"であると判定された場合にのみ、その仮想マシン命
令"Call"の実行に代えて、そのジャンプアドレスに対応
する実マシン関数テーブル6502内の関数ポインタが
示す実マシン関数記憶部3706内の実マシン関数を直
接実マシン201に実行させる。 (仮想マシンの動作)以上のように構成された仮想マシ
ン3700の動作について説明する。
3710の動作、特に、デコード部4402から関数呼
び出し命令"Call"のデコードデータが送られてきた場合
の領域判定部3704とアドレス変換部3705の動作
を中心としたフローチャートである。領域判定部370
4は、信号線Rの状態及び検索部4405からのデコー
ドデータを監視することによって、デコード部4402
から関数呼び出し命令"Call"のオペランドが送られてき
たことを知ると、その仮想マシン命令の実行に先立ち、
そのオペランドが示す呼び出し先JaddrがアドレスRMm
in〜RMmaxの範囲、即ち、実マシン関数テーブル65
02が置かれた領域内であるかを判定する(ステップ6
802〜6804)。
であると判定された場合には、アドレス変換部3705
は、上記逆順に基づいて、呼び出し先Jaddrに対応する
実マシン関数テーブル6502へのインデックスidxを
算出し(ステップ6805)、そのインデックスidxが
示す実マシン関数テーブル6502のエントリに格納さ
れたポインタptrを読み出す(ステップ6806)。そ
して、実行部3710は、元の仮想マシン命令"Call"に
代えて、ポインタptrが示す実マシン関数記憶部370
6内の実マシン関数を直接実行する(ステップ680
7)。
び出し命令"Call"の呼び出し先Jaddrが実マシン関数テ
ーブル6502の領域外であると判定された場合には、
実行部3710は、通常の関数呼び出し処理を続行する
(ステップ6808〜6810)。つまり、実行部37
10は、戻り番地を記憶した後に(ステップ6808、
6809)、その呼び出し先Jaddrに置かれた仮想マシ
ン関数を実行する(ステップ6810)。
呼び出し先Jaddrが仮想マシンプログラム6501の領
域に属する場合には、そのまま仮想マシン関数が呼び出
され、一方、実マシン関数テーブル6502の領域に属
する場合には、対応する実マシン関数が実行される。こ
こで、図34に示されたメモリマップから分かるよう
に、関数呼び出し命令"Call"に対して仮想マシン関数を
実行させるか実マシン関数を実行させるかは、2つの領
域6501、6502を区切る境界線を移動させること
によって容易に変更することができる。例えば、境界線
となるアドレスVMmaxを下げた場合には、これに伴っ
てアドレスRMminも下がるので、たとえ同一アドレスJ
addrへの関数呼び出し命令"Call"であっても、それまで
の仮想マシン関数の実行に代えて実マシン関数を実行さ
せることが可能となる。同様に、境界線のアドレスVM
maxを上げた場合には、それまでの実マシン関数の実行
に代えて仮想マシン関数を実行させることが可能とな
る。
ン3700によれば、わずか1つのパラメータVMmax
の値を変更することによって、仮想マシン関数への呼び
出しをそのまま実行させたり実マシン関数に置き換えて
実行させたりする制御が可能となる。従って、本仮想マ
シン3700は、複数の異なる種別の実マシンやコンピ
ュータ環境の下で動作させる仮想マシンとして好適なア
ーキテクチャを備えていると言える。複数の異なるアー
キテクチャの実マシンやコンピュータそれぞれに応じて
仮想マシンプログラムの一部を実マシン関数に置き換え
ておく場合には、それらアーキテクチャごとに仮想マシ
ン関数として実行させる箇所と実マシン関数として実行
させる箇所とを容易に切り分けられるからである。
なく、実マシンのアーキテクチャへの非依存性を高めた
仮想マシンが実現される。なお、本実施形態では、命令
格納部3701のアドレスVMmin〜VMmaxの領域に
は、仮想マシンプログラム6501だけが配置されてい
たが、本発明はこれに限られず、例えば、図37に示さ
れるように、各アドレスごとのメモリ属性6701(V
又はR)と、その属性に対応するデータ(仮想マシンプ
ログラム)又は実マシン関数テーブルへのインデックス
を格納してもよい。これによって、境界線VMmaxを移
動させることなく、同一アドレスへの仮想マシン関数の
呼び出しに対してそのまま仮想マシン関数として実行さ
せるか実マシン関数を直接実行させるかの切り替えが可
能となる。 (実施形態5)次に、仮想マシンプログラムのキャッシ
ュブロック化やその場式コンパイラのコンパイル時間が
短縮化される実施形態5に係る仮想マシンシステムにつ
いて説明する。 (仮想マシンの構成)図38は、本実施形態に係る仮想
マシン3800の構成を示す機能ブロック図である。本
仮想マシン3800は、命令格納部3801、デコード
部3802、実行部3810及びスタック4420から
構成される。
本仮想マシン3800は、従来の仮想マシン4400と
ほぼ同一の構成要素を備える。相違する点は、命令格納
部3801に格納されている内容と、PC3804の構
成と、実行部3810に分岐先変換部3811が追加さ
れていることである。以下、従来の仮想マシン4400
と相違する点を中心に説明する。
想マシンプログラムを命令ブロックと呼ばれる単位に区
分して記憶しているものであり、各命令ブロックを記憶
する複数の命令ブロック格納領域3852a〜3852
dからなる。ここで、命令ブロックとは、本仮想マシン
プログラムを基本ブロックに分割し、得られた基本ブロ
ックそれぞれにユニークな識別子を付与し、それら基本
ブロックを論理的に接続するための分岐命令を後続位置
に追加したものをいい、後述する本仮想マシン3800
固有のコンパイラによって生成される。なお、基本ブロ
ックとは、先頭に配置された命令をそのブロックへの唯
一の入口とし、最後部に配置された命令をそのブロック
からの唯一の出口とする命令列をいう。また、本実施形
態では、識別子は、命令ブロック格納領域における各命
令ブロックの先頭位置を特定するアドレス情報からな
る。
2dそれぞれは、各命令ブロックの識別子を格納してい
る識別子格納領域3853aと、各命令ブロックに属す
る仮想マシン命令のうち分岐命令を除くもの(以下、
「非分岐命令」と呼ぶ。)だけを格納している非分岐命
令格納領域3854aと、その分岐命令だけを格納して
いる分岐命令格納領域3855aとからなる。
ている仮想マシンプログラムの格納状態の例を示す図で
あり、図97に示されたサンプル仮想マシンプログラム
が格納されている場合に相当する。本図に示されるよう
に、上記仮想マシンプログラムは5個の命令ブロック3
852a〜3852dに分割され、各命令ブロック38
52a〜3852dは、その命令ブロックの識別子38
53a〜3853dと、各命令ブロックに属する基本ブ
ロックの非分岐命令だけからなる部分3854a〜38
54dと、その基本ブロックの最後部に配置された分岐
命令及び次の命令ブロックに接続するための分岐命令と
からなる部分3855a〜3855dとから構成され
る。
た仮想マシンプログラムは、図72に示された各仮想マ
シン命令の意味から明らかなように、それらプログラム
の制御フローは図40に示される通りであり、実質的に
同一の処理内容を行うことは明らかである。PC380
4は、さらに、識別子セグメントレジスタ3804aと
オフセットカウンタ3804bとから構成される。識別
子セグメントレジスタ3804aは、次に読み出すべき
命令格納部3801中の仮想マシンコードが属する命令
ブロックの識別子に相当するセグメントアドレス(以
下、「識別子セグメント」と呼ぶ。)を保持し、オフセ
ットカウンタ3804bは、その仮想マシンコードの命
令ブロックにおけるオフセットを保持している。
示されるように、16ビットによるアドレシングを行
い、その上位8ビットを識別子セグメント、下位8ビッ
トをオフセットとしている。つまり、識別子セグメント
レジスタ3804aには8ビットの識別子セグメントが
格納され、オフセットカウンタ3804bには8ビット
のオフセットが格納され、これらが連結された16ビッ
トのアドレスによって、命令格納部3801中の1個の
仮想マシンコードが特定される。
において分岐命令を実行する場合に、その分岐命令のオ
ペランド、即ち、分岐先となる命令ブロックの識別子
を、識別子セグメントとオフセットとの組み合わせに変
換し、それぞれの値をPC3804に格納することで更
新する。 (仮想マシンの動作)以上のように構成された仮想マシ
ン3800の動作について説明する。
は、従来の仮想マシン4400とほぼ同様の動作をす
る。異なる点は、通常の順次実行においては、実行部3
810によってPC3804のオフセットカウンタ38
04bだけがインクリメントされる点と、分岐命令の実
行においては、分岐先変換部3811によってPC38
04の識別子セグメントレジスタ3804aとオフセッ
トカウンタ3804bが更新される点である。
変換部3811の動作を示すフローチャートである。分
岐先変換部3811は、デコード部3802から送られ
たきた分岐命令のオペランド、即ち、8ビットで表現さ
れた命令ブロックの識別子Jaddrを獲得すると(ステッ
プ8102)、それを分岐先の識別子セグメントとする
と共にオフセットをゼロとして16ビットの物理アドレ
スを生成し、それぞれでPC3804の識別子セグメン
トレジスタ3804a及びオフセットカウンタ3804
bを更新する(ステップ8103)。
ログラムにおける論理的なアドレスと識別子とを物理的
なアドレスに置き換えたものであり、分岐先変換部38
11によるアドレス変換の結果を示す。例えば、図39
における識別子番号1の命令ブロックにおける分岐命
令"Brz"のオペランド"x03"は、分岐先変換部3811に
よって識別子番号3の命令ブロックの先頭への物理的な
番地"x0300"に変換される。
岐命令を実行するごとに、そのオペランドで指定された
命令ブロックの先頭に分岐する制御を行う。このように
して、本仮想マシン3800は、命令ブロックに分割さ
れて格納されている仮想マシンプログラムに対して、命
令ブロックに分割されなかった場合と実質的に同じ処理
手順により、解読・実行を行う。 (仮想マシンコンパイラの構成)次に、本仮想マシン3
800を対象とする仮想マシンコンパイラについて説明
する。
ンパイラ7660の構成示すブロック図である。本仮想
マシンコンパイラ7660は、C言語等の高級言語で記
述されたソースプログラム7650を入力とし、これを
上記仮想マシン3800の命令格納部3801に格納す
るのに適した形式、つまり、命令ブロック集合7651
に変換するコンパイラであり、中間命令列変換部766
1、生成部7662及びブロック化部7663から構成
される。
ソースプログラムを構文解析した後に最適化のために一
時的な中間コードに展開し、生成部7662は、中間命
令列変換部7661により展開された中間コードを、例
えば図97に示されるような仮想マシンプログラム76
64のコードに変換する。これら中間命令列変換部76
61及び生成部7662は、従来の一般的な仮想(又は
実マシン)コンパイラが有する機能と異ならない。
から生成された仮想マシンプログラム7664を上記命
令格納部3801に格納可能な命令ブロックの集まりに
変換するものであり、その際の主な処理は、基本ブロッ
クへの分割と、その分割に伴うアドレス解決である。こ
こで、アドレス解決とは、仮想マシンプログラム766
4中の分岐命令で用いられていた分岐先を命令ブロック
の識別子IDに置き換える処理である。
のアドレス解決のために、一時的な変数テーブルとし
て、分岐先変更テーブル7663aを作成し用いる。図
45は、分岐先変更テーブル7663aの構造を示す図
である。本テーブルの各行(エントリ)は、生成される
個々の命令ブロック及びブロック化部7663に入力さ
れた仮想マシンプログラム7664中の個々の分岐命令
それぞれに対応して作成されるものである。各エントリ
において、「コード位置」は、当該命令ブロックの先頭
命令又は当該分岐命令の仮想マシンプログラム7664
上でのアドレス、「登録フラグ」は、当該分岐命令につ
いてのアドレス解決が終了したか否かのフラグ、「参照
位置識別子」及び「参照位置offset」は、当該命令ブロ
ックに分岐する分岐命令又は当該分岐命令が置かれてい
る命令ブロックの識別子及びオフセットを示す。 (仮想マシンコンパイラの動作)図46は、本仮想マシ
ンコンパイラ7660の特徴的な処理、即ち、ブロック
化部7663の動作を示すフローチャートである。ま
ず、ブロック化部7663は、命令ブロック集合765
1として生成する命令ブロックの識別子IDと、各命令ブ
ロックにおける相対的な命令格納位置を示すポインタof
fsetと、仮想マシンプログラム7664から順次に読み
出す1バイトの仮想マシンコードVCの位置を示すカウン
タPCと、分岐先アドレスを変更するための分岐箇所の個
数を示すカウンタRcountとを初期化する(ステップ76
02〜7603)。
ウンタPCをインクリメントしながら仮想マシンプログラ
ム7664から1バイトずつ仮想マシンコードVCを読み
出し、その仮想マシンコードVCが属すべき命令ブロック
の識別子ID及びその命令ブロック中での相対位置である
ポインタoffsetと共に、命令ブロック集合7651とし
て出力する(ステップ7604〜7611)。
ックの先頭であるか否かの判断(ステップ7607)
と、分岐命令であるか否かの判断を行い(ステップ76
08)、それそれ肯定的に判断された場合には、対応す
る特別な処理(ステップ7701〜7704及びステッ
プ7609)を行う。図47は、図46におけるステッ
プ7607、即ち、仮想マシンコードVCが基本ブロック
の先頭とすべきものか否かの判断処理の詳細を示す。つ
まり、仮想マシンコードVCが分岐先の命令及び分岐命令
の直後に配置された命令のいずれかに該当する場合に
は、その仮想マシンコードVCは基本ブロックの先頭と判
断する(ステップ7302〜7306)。
ドVCが基本ブロックの先頭であると判断すると、新たな
命令ブロックを生成するために識別子IDを更新すると共
に(ステップ7701)、直前の命令ブロック(識別子
ID)の最後部と次の命令ブロック(識別子NID)の先頭と
を接続するための無条件分岐命令を生成する(ステップ
7702)。そして、この新たな命令ブロックに属する
仮想マシンコードを生成するための準備をした後に(ス
テップ7703)、この新たな識別子NIDの付与に伴う
アドレス解決を行う(ステップ7704)。
シンコードVCが分岐命令であると判断した場合には、そ
の分岐先を適切に変更するためのアドレス解決を行う
(ステップ7609)。このブロック化部7663によ
る分割処理と新たな分岐命令の追加処理などによって、
元の仮想マシンプログラム7664における各仮想マシ
ン命令の配置位置が変動するからである。
4、即ち、新たな命令ブロックの識別子NIDの付与に伴
うアドレス解決の詳細を示す。ここでは、ブロック化部
7663は、この新たな命令ブロックの識別子NIDの付
与に伴って初めてアドレス解決が可能な分岐命令が発見
された場合には、そのアドレス解決を行い(ステップ7
905〜7910)、そうでない場合には、以降の処理
においてこの命令ブロックに分岐する分岐命令のアドレ
ス解決を行うために、分岐先変更テーブル7663aへ
の追加登録をする(ステップ7913、7914)。
9、即ち、仮想マシンプログラム7664中の分岐命令
で指定されていた分岐先のアドレス解決の詳細を示す。
ここでは、ブロック化部7663は、この分岐命令が前
方への分岐、即ち、分岐先変更テーブル7663aに既
に登録された命令ブロックへの分岐である場合には、そ
の分岐先を命令ブロックの識別子に置き換えることによ
ってアドレス解決を行い(ステップ7802〜780
9、7812)、そうでない場合には、アドレス未解決
として新たなエントリを分岐先変更テーブル7663a
に追加登録する(ステップ7810、7811)。
60によって、高級言語で書かれたソースプログラム
は、一旦、図97に示されるような一般的な仮想マシン
プログラム7664に変換された後に、基本ブロックに
分割されて識別子が付与され、さらに、各基本ブロック
を接続するための分岐命令が追加された後に、識別子付
与に伴うアドレス解決が行なわれることで、本実施形態
に係る仮想マシン3800の実行対象となる命令ブロッ
ク集合7651に変換される。 (考察)このように、本実施形態に係る仮想マシン38
00及び仮想マシンコンパイラ7660によって、実行
対象となる仮想マシンプログラムは、図97に示される
ような従来形式のまま命令格納部3801に配置され実
行されるのではなく、基本ブロックに分割された状態で
命令格納部3801に配置され実行されることになる
が、そのことの技術的意義について考察する。
のコンパイル時間という観点から考察する。上述したよ
うに、従来のその場式コンパイラによれば、仮想マシン
プログラムにおける各分岐先について、その位置が一定
の制限を違反していないかどうかの解析が必要とされ、
違反している場合には、その分岐先を移動させる等の処
理が必要とされた。ところが、本仮想マシンシステムに
よれば、いずれの分岐先も、必ず、各命令ブロックの先
頭であることが保証されている。従って、従来において
必要とされた、分岐先についての上記処理のほとんどは
不要となる。
ば、遅延分岐等のために、分岐命令の後続位置に配置す
る命令、即ち、分岐の正否の影響を受けない命令を特定
する等の処理が必要とされた。ところが、本仮想マシン
システムによれば、命令格納部3801に格納された仮
想マシンプログラムは、各命令ブロック中において非分
岐命令格納領域と分岐命令格納領域とに分けられてお
り、さらに、分岐命令格納領域においては1個の分岐命
令のあとには高々1個の分岐命令だけが後続することが
保証されている。従って、従来において必要とされた、
遅延分岐等についての上記処理のほとんどは不要とな
る。
応化という観点から考察する。従来のようなキャッシュ
機構への対応化によれば、仮想マシンプログラムをキャ
ッシュブロックに分割する際に、プログラムカウンタを
変更する全ての仮想マシン命令についてキャッシュブロ
ックの境界をまたいで変更していないか判断する必要が
あった。ところが、本仮想マシンシステムによれば、命
令格納部3801に格納された仮想マシンプログラムを
命令ブロック単位でキャッシュさせるならば、キャッシ
ュの境界をまたいでプログラムカウンタを変更する仮想
マシン命令は、分岐命令格納領域3855aに属する分
岐命令だけとなる。
800において、命令ブロック単位でキャッシュさせた
場合のPC3804、命令ブロック格納領域3852a
〜3852d及びキャッシュテーブル8404の関係を
示す図であり、従来における図102に対応する。従来
では、10番地分の命令列6903がキャッシュブロッ
クとして命令キャッシュ6902に置かれたが、本仮想
マシン3800の場合には、命令ブロック3852a〜
3852dの単位で命令キャッシュ8402に配置さ
れ、それらの識別子がキャッシュテーブル8404で管
理される様子が示されている。
800において、命令ブロック単位でキャッシュさせた
場合の実行部3810による分岐命令の実行処理を示す
フローチャートであり、キャッシュ機構に対応させてい
ない場合の図42に対応する。これらを比較して分かる
ように、本仮想マシン3800をキャッシュ機構に対応
した仮想マシンとするには、実行部3810が、キャッ
シュテーブル8404内の識別子を参照することで命令
ブロック単位でキャッシュヒットの有無を判断し(ステ
ップ8504)、ミスヒット時には命令キャッシュ84
02への読込みを行えばよい(ステップ8505)。
ンプログラムをキャッシュすることにより、従来におい
て必要とされたキャッシュブロックの境界に伴う判断処
理などが不要になる。そして、ミスヒットに伴うキャッ
シュへの読込みが発生した場合であっても、もともとの
仮想マシンプログラムが予め命令ブロック単位で分割格
納されているので、読込み時の負荷も削減される。
ンシステムでは、ソースプログラムは一般的な仮想マシ
ンプログラムに変換された後にさらに基本ブロックを単
位とする命令ブロックに分割されて命令格納部3801
に格納され、全ての分岐命令の分岐先は命令ブロックの
識別子にて指定されている。これにより、その場式コン
パイラでの分岐先命令のアドレス解析処理は単純化さ
れ、コンパイル時間が短縮される。また命令キャッシン
グを命令ブロック単位で行うことで、キャッシュ境界に
伴う判定処理は簡略化され、仮想マシンにキャッシュを
導入した場合の実行効率の低下は、従来に比較して抑え
られる。
7660は、中間命令列変換部7661及び生成部76
62を備えたが、これらに代えて、ソースプログラムか
ら仮想マシンプログラムを生成する一般的なコンパイラ
を採用してもよいことは言うまでもない。 (実施形態6)次に、上記実施形態5に係る仮想マシン
における解読処理の高速化を図った実施形態6に係る仮
想マシンについて説明する。 (仮想マシンの構成)図52は、本実施形態に係る仮想
マシン3900の構成を示す機能ブロック図である。本
仮想マシン3900は、命令格納部3901、デコード
部3902、実行部3810及びスタック4420から
構成される。
本仮想マシン3900は、実施形態5に係る仮想マシン
3800とほぼ同一の構成要素を備える。相違する点
は、命令格納部3901に格納されている内容と、デコ
ード部3902にカレントフラグ記憶部3907が追加
されていること、命令読込み部3903の機能と、実行
部3910にカレントフラグ読出制御部3912が追加
されていることである。以下、実施形態5に係る仮想マ
シン3800と相違する点を中心に説明する。
格納部3801と比較し、予め、実行対象となる仮想マ
シンプログラムを複数の命令ブロック3952a〜39
52dの単位で記憶している点において共通するが、各
命令ブロック格納領域3952a〜3952dには、当
該命令ブロックの非分岐命令格納領域及び分岐命令格納
領域(これらを併せて「仮想マシンコード領域」と呼
ぶ。)に格納されている全ての仮想マシンコードに対応
するデコードデータ列(以下、「デコード命令列」と呼
ぶ。)を格納するためのデコード命令列格納領域395
6a〜3956dが設けられている点において異なる。
01に格納されている仮想マシンプログラムの格納状態
の例を示す図であり、図97に示されたサンプル仮想マ
シンプログラムが格納されている場合に相当する。本図
に示されるように、各命令ブロック格納領域3952a
〜3952cに設けられたデコード命令列格納領域39
56a〜3956cは、さらに、上記デコード命令列を
格納するための実マシンコード領域8607a〜860
7cと、当該実マシンコード領域8607a〜8607
cにデコード命令列が格納されているか否かを示すフラ
グを格納するフラグ領域8605a〜8605cとから
構成される。例えば、図53(b)に示された命令ブロ
ック格納領域3952bは、実マシンコード領域860
7bにデコード命令列が存在しないので、その旨(空)
のフラグがフラグ領域8605bに格納され、一方、図
53(c)に示された命令ブロック格納領域3952c
は、実マシンコード領域8607cにデコード命令列が
存在するので、その旨(あり)のフラグがフラグ領域8
605cに格納されている。
デコード命令列は、例えば、実施形態5に係る仮想マシ
ン3800を用いることによって予め得ることができ
る。このデコード命令列は、各命令ブロックの仮想マシ
ンプログラムを実施形態5に係る仮想マシン3800が
実行した場合に、そのデコード部3802が実行部38
10に出力するデコードデータ列に等しいからである。
ンコード領域3954a〜3954d、3955a〜3
955dに置かれている個々の仮想マシン命令と、実マ
シンコード領域8607a〜8607dに置かれている
対応するデコードデータとは、一定のオフセットだけ離
れたアドレスの位置に配置されている。カレントフラグ
記憶部3907は、本仮想マシン3900の実行対象と
なっている命令格納部3901中の命令ブロックのフラ
グ領域に格納されているフラグをカレントフラグとして
保持するための一時的な記憶領域である。
記憶部3907に記憶されたフラグの値に基づいて、命
令格納部3901から仮想マシン命令又はデコードデー
タを読み出し、それぞれ、検索部4405又は実行部3
910に出力する。つまり、デコードデータを読み込ん
だ場合には、検索部4405をバイパスして直接実行部
3910にデコードデータを渡す。
コード部3902から送られてくるデコードデータが分
岐命令に相当するか監視し、分岐命令の場合には、その
分岐命令の実行直後に、デコード部3902を制御する
ことにより、その分岐先の命令ブロックのフラグ領域に
格納されたフラグを読み出してカレントフラグ記憶部3
907に格納させる。 (仮想マシンの動作)以上のように構成された仮想マシ
ン3900の動作について説明する。
すフローチャートである。デコード部3902の命令読
込み部3903は、信号線Rを介して実行部3910か
ら次の仮想マシン命令を読み込む旨の通知を受けると
(ステップ8702、8703)、カレントフラグ記憶
部3907に記憶されたフラグを読み出して、その内容
を判断する(ステップ8704)。
判断した場合には、命令読込み部3903は、実施形態
5の場合と同様の動作、即ち、PC3804に格納され
た仮想マシンコード領域上のアドレスに従って非分岐命
令格納領域又は分岐命令格納領域に格納された仮想マシ
ンコードを読み出し、検索部4405に渡す(ステップ
8705、8706)。そして、検索部4405は、デ
コードテーブル4406を検索することでジャンプアド
レスを特定し、デコードデータとして実行部3910に
出力した後に(ステップ8707)、その旨を信号線R
で通知する(ステップ8711)。
ド命令列が存在すると判断した場合には、命令読込み部
3903は、PC3804に格納された仮想マシンコー
ド領域上のアドレスに一定のオフセットを加算すること
で実マシンコード領域8607a〜8607d上のアド
レスを算出した後に(ステップ8708)、そのアドレ
スに従ってデコードデータを読み出し(ステップ870
9)、それを直接実行部3910に出力する(ステップ
8710)。
ローチャートである。本図と図79と比較して分かるよ
うに、基本的な流れは従来と同じである。つまり、PC
3804やSP4412を初期化した後に(ステップ8
802)、デコード部3902から送られてくるデコー
ドデータに基づいてマイクロプログラム記憶部4411
内のマイクロプログラムを実行する(ステップ8804
〜8808)。
7についての処理(ステップ8803)が追加されてい
ることである。つまり、実行部3910は、動作の開始
にあたって、デコード命令列が存在しない旨のフラグを
初期値としてカレントフラグ記憶部3907に格納して
おく(ステップ8803)。図56は、実行部3910
が分岐命令を実行した場合のデコード部3902に対す
る制御を示すフローチャートである。本図と図42とを
比較して分かるように、実行部3910が分岐命令を実
行する場合においては、分岐先変換部3811は、分岐
命令のオペランドを分岐先と命令ブロックの識別子セグ
メントとオフセットに変換し、それぞれPC3804の
識別子セグメントレジスタ3804aとオフセットカウ
ンタ3804bに格納するが(ステップ8902、89
04)、この処理は実施形態5の場合と同じである。
7についての処理(ステップ8904)が追加されてい
ることである。つまり、分岐先変換部3811によって
PC3804が更新された後に(ステップ8902、8
904)、カレントフラグ読出制御部3912は、命令
読込み部3903を制御することによって、識別子セグ
メントレジスタ3804aに格納された識別子セグメン
トが示す命令ブロックのフラグ領域の値を読み出し、カ
レントフラグ記憶部3907に格納させる(ステップ8
904)。これによって、新たな命令ブロックに分岐す
る度に、カレントフラグ記憶部3907の内容は更新さ
れ、これから実行する命令ブロックの実マシンコード領
域にデコード命令列が格納されているか否かを示すフラ
グがカレントフラグ記憶部3907にセットされる。
ン3900によれば、命令格納部3901には、実行対
象となる仮想マシンプログラムが基本ブロックを単位と
する命令ブロックに分割されて格納されており、さら
に、各命令ブロックには仮想マシン命令だけでなく、そ
れら仮想マシン命令に対応するデコードデータも配置さ
れる。そして、デコード部3902は、各命令ブロック
のフラグ領域を参照することで、デコードデータが置か
れた命令ブロックについては、単にそれらデコードデー
タを読み出して実行部3910に渡すだけで足り、検索
部4405によるデコードテーブル4406の検索処理
は省略される。これにより、実施形態5に係る仮想マシ
ン3800と同等の効果が得られることに加え、予めデ
コード命令列が配置された命令ブロックについての実行
時間は短縮される。
おける仮想マシンコード領域と実マシンコード領域と
は、そのアドレスが一定のオフセットだけ離れていると
いう位置関係にあったが、例えば、デコード命令列格納
領域の先頭位置を特定するオフセットアドレスを各命令
ブロック中に配置しておくことで、これら位置関係によ
る制約を不要とすることができる。その場合には、新た
な命令ブロックに分岐する度に、その命令ブロックのフ
ラグと共に、そのオフセットアドレスを読み出すこと
で、カレントフラグに応じた仮想マシンコード領域及び
実マシンコード領域それぞれに適したアドレスをPC3
804にセットすることができる。 (実施形態7)次に、上記実施形態6に係る仮想マシン
におけるデコード命令列を動的に生成する実施形態7に
係る仮想マシンについて説明する。 (仮想マシンの構成)図57は、本実施形態に係る仮想
マシン4000の構成を示す機能ブロック図である。本
仮想マシン4000は、命令格納部3901、デコード
部4002、実行部3910及びスタック4420から
構成される。
本仮想マシン4000は、実施形態6に係る仮想マシン
3900とほぼ同一の構成要素を備える。相違する点
は、デコード部4002にデコード命令列書込み部40
08が追加されていること、その追加に伴うデコード部
4002内部の接続変更である。以下、実施形態6に係
る仮想マシン3900と相違する点を中心に説明する。
想マシン4000による実行制御がデコード命令列を持
たない命令ブロックに分岐した場合に、その命令ブロッ
クに対する実行を中断させ、一旦、その命令ブロックに
置かれている仮想マシンプログラム全体を命令読込み部
3903及び検索部4405によってデコード命令列に
変換させた後に、そのデコード命令列を当該命令ブロッ
クのデコード命令列格納領域に書き込む。そして、書き
込まれたデコード命令列に対して、命令読込み部390
3による読込みと実行部3910による実行を再開させ
る。
ら命令読込み部3903によって読み出されたデコード
データだけがそのまま実行部3910に渡され、検索部
4405がデコードテーブル4406を検索することに
よって得たデコードデータは直接には実行部3910に
渡されない。このことは、実施形態6の場合と相違し、
検索部4405からのデコードデータは、実行部391
0ではなく、デコード命令列書込み部4008に送られ
ていることに対応する。 (仮想マシンの動作)以上のように構成された仮想マシ
ン4000の動作について説明する。
令を実行した場合の本仮想マシン4000における特徴
的な動作、即ち、デコード命令列書込み部4008、カ
レントフラグ読出制御部3912及び分岐先変換部38
11における動作を示すフローチャートである。新たな
命令ブロックへの分岐に際して、分岐先変換部3811
がPC3804の値を更新し(ステップ9102、91
03)、カレントフラグ読出制御部3912がカレント
フラグ記憶部3907の内容を更新する点は、図56に
示された実施形態6の手順と同じである。異なる点は、
その後に、必要に応じて、デコード命令列書込み部40
08によるデコード命令列の生成と命令格納部3901
への書き込みが行われることである(ステップ9105
〜9111)。
08は、命令読込み部3903によって読み出されたフ
ラグを受け取って参照することによって、その命令ブロ
ックには既にデコード命令列が格納されているか否か判
断する(ステップ9105)。その結果、デコード命令
列が格納されていると判断した場合には、デコード命令
列書込み部4008は、特になんの処理も行わない(ス
テップ9112)。このときには、その命令ブロックに
格納されているデコード命令列が順次読み出されて実行
部3910によって直接に実行されることになる。
と判断した場合には、デコード命令列書込み部4008
は、ポインタdPCをインクリメントしながら(ステップ
9106〜9111)、その命令ブロックに置かれてい
る仮想マシンコードを命令読込み部3903によって順
次読み出させ(ステップ9108、9109)、読み出
された仮想マシンコードを検索部4405によって必要
なジャンプアドレス等のデコードデータに変換させた後
に当該命令ブロックのデコード命令列格納領域に書き込
んでいく(ステップ9110)。
シンコードについてデコードデータへの変換と書き込み
を終えると(ステップ9107)、デコード命令列が存
在する旨のフラグをカレントフラグ記憶部3907及び
当該命令ブロックのフラグ領域に書き込むことで、処理
を終える(ステップ9112)。これによって、当該命
令ブロックのデコード命令列に対する命令読込み部39
03による読込みと実行部3910による実行が再開さ
れる。
0、即ち、仮想マシンコードからデコードデータへの変
換と命令格納部3901への格納処理の詳細を示すフロ
ーチャートである。本図と図77とを比較して分かるよ
うに、従来の検索部4405による処理に、デコード命
令列書込み部4008による処理、つまり、デコードテ
ーブル4406の検索によって得られたジャンプアドレ
スddや仮想マシン命令のオペランドをデコードデータと
して命令格納部3901のデコード命令列格納領域に書
き込む処理(ステップ9209、9213)が追加され
ていることがわかる。
ド部4002の動作を示すフローチャートである。命令
読込み部3903は、実行部3910との関係において
は、命令格納部3901の実マシンコード領域からデコ
ードデータを読み出した場合にだけ、そのデコードデー
タを実行部3910に渡すので、デコードデータ専用の
読み出し部として機能していると言える。
ン4000によれば、デコード命令列を持たない命令ブ
ロックに分岐した場合に、一旦、その命令ブロックの仮
想マシンプログラムはデコードデータに変換され、命令
格納部3901に書き戻された後に、そのデコードデー
タが直接に実行される。従って、再び、その命令ブロッ
クを実行する場合には、デコードデータを読み出して直
接に実行することができるので、解読のための時間、即
ち、検索部4405によるデコードテーブル4406の
検索に伴う時間が削減される。特に、ループ処理のよう
に、同一の命令ブロックを繰り返して実行する場合にお
ける実行速度は飛躍的に向上される。 (実施形態8)次に、上記実施形態7に係る仮想マシン
を圧縮符号化された仮想マシンプログラムに対応させた
実施形態8に係る仮想マシンについて説明する。 (仮想マシンの構成)図61は、本実施形態に係る仮想
マシン4100の構成を示す機能ブロック図である。本
仮想マシン4100は、命令格納部4101、デコード
部4102、実行部3910及びスタック4420から
構成される。
本仮想マシン4100は、実施形態7に係る仮想マシン
4000とほぼ同一の構成要素を備える。相違する点
は、命令格納部4101に格納されている仮想マシンプ
ログラムのコード形態、命令格納部4101に展開情報
格納領域4157a〜4157dが設けられているこ
と、デコード部4102の命令読込み部4103に仮想
マシン命令展開部4103aが追加されていることであ
る。以下、実施形態7に係る仮想マシン4000と相違
する点を中心に説明する。
4154a〜4154d及び分岐命令格納領域4155
a〜4155d(これら領域を併せて、本実施形態で
は、「圧縮仮想マシンコード領域」と呼ぶ。)は、圧縮
符号化された仮想マシン命令を予め保持している。ま
た、命令格納部4101の展開情報格納領域4157a
〜4157dは、その命令ブロックに格納された圧縮符
号化された仮想マシン命令を伸長復号化するための復号
化テーブルを予め保持している。
を示す。圧縮されたビット列と、対応する仮想マシン命
令との組が示されている。図62(b)は、図62
(a)に示された復号化テーブルにおける符号の規則性
を示す図である。ここでは、ハフマン符号化に準じたビ
ット圧縮方法で、オペランドを含む仮想マシン命令の単
位でビット列に圧縮していくものとする。例えば、ビッ
ト列"000"は仮想マシン命令"Push [0]"を意味し、ビッ
ト列"01010"は仮想マシン命令"Push 10"を意味する。
01に格納されている仮想マシンプログラムの格納状態
の例を示す図であり、図97に示されたサンプル仮想マ
シンプログラムが格納されている場合に相当する。各命
令ブロック格納領域4152a〜4152cにおいて、
非分岐命令格納領域4154a〜4154c及び分岐命
令格納領域4155a〜4155cからなる各圧縮仮想
マシンコード領域4164a〜4164cには、各命令
ブロックの仮想マシンプログラムを圧縮符号化して直列
に接続することによって得られるビット列(以下、「圧
縮ビット列」と呼ぶ。)が予め格納され、各展開情報格
納領域4157aには、当該ビット列を伸長復号化する
ための復号化テーブルが格納されている。なお、図63
(b)には、デコード命令列を持たない命令ブロック格
納領域4152bが示され、図63(c)には、デコー
ド命令列を持つ命令ブロック格納領域4152cが示さ
れている。 命令読込み部4103は、実施形態7の
命令読込み部3903が備える機能、即ち、命令格納部
4101の圧縮仮想マシンコード領域4164a〜41
64dから圧縮ビット列を読み出し、デコード命令列格
納領域4156a〜4156dからデコード命令列を読
み出すことに加え、さらに、仮想マシン命令展開部41
03aを備える。
読込み部4103が命令格納部4101の圧縮仮想マシ
ンコード領域4164aから圧縮ビット列を1ビットず
つ読み出す度にその命令ブロックの展開情報格納領域4
157a〜4157dに格納された復号化テーブルを参
照することで、対応する仮想マシン命令を特定し、特定
した仮想マシン命令を検索部4405に渡すという伸長
復号化を繰り返す。 (仮想マシンの動作)以上のように構成された仮想マシ
ン4100の動作について説明する。
は、実施形態7に係る仮想マシン4000が備える機能
を全て含むので、圧縮ビット列の復号処理を除く全体的
な処理は実施形態7と同じであり、図58に示されるフ
ローチャートの通りである。つまり、本仮想マシン41
00は、実施形態7に係る仮想マシン4000と同様
に、デコード命令列を持たない命令ブロックに分岐した
場合には、命令読込み部4103及び検索部4405に
よって、一旦、その命令ブロックの仮想マシンプログラ
ムをデコードデータに変換し、デコード命令列書込み部
4008によって命令格納部3901に書き戻した後
に、命令読込み部4103及び実行部3910によって
デコード命令列を直接に実行する。
0は、圧縮符号化された仮想マシン命令を読み出すの
で、図58におけるステップ9109とステップ911
0での詳細な処理が実施形態7と異なる。圧縮ビット列
に適した読み出しを行う必要があること、及び、その復
号化処理を追加する必要があるためである。図64は、
図58におけるステップ9109及びステップ9110
の詳細を示すフローチャートであり、本仮想マシン41
00のデコード部4102の動作を示す。ここで、図6
4におけるステップ9602、ステップ9603〜96
16は、それぞれ、図58におけるステップ9109、
ステップ9110に相当する。
して分かるように、相違する点は、本実施形態では、直
接に仮想マシンコードを読み出すことに替えて、圧縮ビ
ット列の読み出しと復号化を行っていることと(ステッ
プ9602)、その復号化において必要なオペランド
(配列op[i])が同時に得られるので、命令格納部41
01からオペランドだけを読み出すことなくそのオペラ
ンド(配列op[i])をデコード命令列格納領域4156
a〜4156dに書き込んでいること(ステップ961
3)である。
2の詳細を示すフローチャートである。命令読込み部4
103は、まず、圧縮ビット列の一時的な記憶域(変数
bits)を確保した後に(ステップ9702)、PC38
04の値に従って、デコード命令列を持たない命令ブロ
ック格納領域4152a〜4152dの圧縮仮想マシン
コード領域4164a〜4164dから1ビット分の圧
縮符号を読み出し(ステップ9803)、それと既に読
み出した圧縮符号(変数bits)とを連結する(ステップ
9704)。
は、PC3804の値に一定のオフセットを加算するこ
とによって得たアドレスから始まる展開情報格納領域4
157a〜4157dの復号化テーブル、即ち、読み出
された圧縮ビット列が置かれていた命令ブロックの復号
化テーブルに登録されている圧縮ビット列それぞれと上
記ステップ9704で得られた圧縮符号(変数bits)と
を順次に比較することで、一致する仮想マシン命令を特
定する(ステップ9705)。これら読み出し(ステッ
プ9703)と検索(ステップ9705)は、一致する
仮想マシン命令が見つかるまで繰り返す(ステップ97
06)。
想マシン命令展開部4103aは、その仮想マシン命令
を展開情報格納領域4157a〜4157dから読み出
し(ステップ9707)、その仮想マシン命令を、又
は、その仮想マシン命令にオペランドが含まれる場合に
はその仮想マシン命令中のオペコードとオペランド(配
列op[])とを分離した後に検索部4405に出力する
(ステップ9708、9709)。その後、図64のス
テップ9603〜9614に示されるように、検索部4
405によって対応するデコードデータに変換され、デ
コード命令列書込み部4008によって、必要なオペラ
ンド配列op[]と共に当該命令ブロックの実マシンコード
領域に書き込まれる。
ン4100によれば、命令格納部4101の各命令ブロ
ックには圧縮符号化された仮想マシンプログラムが置か
れ、本仮想マシン4100がデコード命令列を持たない
命令ブロックに分岐した場合には、一旦、その命令ブロ
ックに置かれた圧縮符号化された仮想マシンプログラム
が伸長復号化された後に、デコードデータに変換されて
命令格納部3901に書き戻され、そのデコードデータ
が直接に実行される。
圧縮ビット列は、常に命令ブロックの先頭、即ち、完全
な1個の仮想マシン命令の先頭から復号されることが保
証される。これによって、分岐命令の実行に伴って1個
の仮想マシン命令の圧縮ビット列の途中から誤って復号
化してしまうことが確実に回避され、圧縮符号化された
仮想マシンプログラムを正しく実行することが可能な仮
想マシンが実現される。
1の各命令ブロック格納領域4152a〜4152dに
はデコード命令列格納領域4156a〜4156dが設
けられていたが、圧縮ビット列の途中から誤って復号化
されるとい従来の問題点を回避するだけならば、これら
デコード命令列格納領域4156a〜4156dを設け
なくてもよい。
00は、デコード命令列格納領域4156a〜4156
dを備えた実施形態7に係る仮想マシン4000を、圧
縮符号化された仮想マシンプログラムを解読実行するよ
うに対応させたものに相当するが、デコード命令列格納
領域を備えない実施形態5に係る仮想マシン3800
を、圧縮符号化された仮想マシンプログラムを解読実行
するように対応させものであってもよい。いずれの場合
であっても、圧縮符号化された仮想マシンプログラムは
基本ブロックを単位として格納され、全ての分岐命令が
指定する分岐先は基本ブロックの先頭であることが保証
されているので、圧縮ビット列の途中から誤って復号さ
れてしまうことは回避されるからである。
としてハフマン符号化を用いたが、LZ法等の他の圧縮手
法を用いても、なんら問題がないのは言うまでもない。 (実施形態9)次に、対象とする実マシン固有のジャン
プ先についての境界制限を満足する実マシンコードを高
速に生成する実施形態9に係るその場式コンパイラにつ
いて説明する。 (コンパイラシステムの構成)図66は、本実施形態に
係るその場式コンパイラ4300を含むコンパイラシス
テム全体の構成を示す機能ブロック図である。つまり、
本図には、その場式コンパイラ4300だけでなく、そ
の場式コンパイラ4300への入力に必要な情報を生成
する仮想マシンコンパイラ4320も併せて示されてい
る。
等の高級言語で記述されたソースプログラム4310を
入力とし、特定の仮想マシンを対象とする仮想マシンコ
ードを生成して経路D1に出力する一般的なコンパイラが
備える言語変換機能に加えて、その場式コンパイラ43
00で必要とされる特有の情報(ブロック先頭情報)を
生成し経路D2に出力するブロック先頭情報生成部432
1aをも備える。
般的なコンパイラが備える出力部4321、つまり、構
文解析や中間コードへの変換等を経て得られた最終的な
仮想マシンコードを外部に順次出力する出力部4321
に付加された機能であり、出力部4321から経路D1に
出力される各仮想マシンコードごとに、その仮想マシン
コードが基本ブロックの先頭とすべきものか否か判断
し、その結果を示すブロック先頭情報を経路D2に出力す
る。
マシンコンパイラ4320が生成した仮想マシンコード
及びブロック先頭情報を入力とし、実マシン命令の分岐
先がアドレス空間の2ワード境界に制限された実マシン
を対象とする実マシン命令列4311に変換するコンパ
イラであり、実マシン命令変換部4301、分岐位置補
正部4302及び実マシンアドレス保持部4303とか
ら構成される。
ンコンパイラ4320から経路D1を経て出力された仮想
マシンコードがオペコードの場合には内部の変換テーブ
ルに基づいて対応する実マシンコードに変換し、一方、
その仮想マシンコードがオペランドの場合にはそのま
ま、分岐位置補正部4302に出力する。そのとき、実
マシン命令変換部4301は、実マシンアドレス保持部
4303が保持する実マシンアドレスPCを読み出して、
上記実マシンコードと共に分岐位置補正部4302に出
力した後に、その実マシンアドレスPCをインクリメント
しておく。
シン命令変換部4301が次に生成する実マシンコード
を配置すべき実マシン空間での相対アドレスPCを保持す
る。分岐位置補正部4302は、実マシン命令変換部4
301から送られてきた実マシンアドレスPCと仮想マシ
ンコンパイラ4320から経路D2を経て出力されたブロ
ック先頭情報とから、基本ブロックの先頭に位置する実
マシン命令が奇数番地、即ち、2ワード境界を違反する
位置に配置されることとなるか否かを判断し、違反する
こととなる場合には、1ワード分のダミー命令、即ち、
無動作の実マシン命令"Nop"を前置させた後に、実マシ
ン命令変換部4301から送られてきた実マシンコード
を実マシン命令列4311として外部に出力する。これ
は、処理内容を変更することなく、基本ブロックの実質
的な先頭を2ワード境界に配置させるためである。 (コンパイラシステムの動作)以上のように構成された
コンパイラシステムの動作について、一般的なコンパイ
ラと異なる点を中心に説明する。
のブロック先頭情報生成部4321aの動作を示すフロ
ーチャートである。図47に示された実施形態5に係る
仮想マシンコンパイラの動作と基本的な流れは同じであ
る。まず、ブロック先頭情報生成部4321aは、出力
部4321が出力しようとする仮想マシンコードVCそれ
ぞれについて、基本ブロックの先頭とすべきものかどう
かを判定する(ステップ10003、10004)。そ
の結果、基本ブロックの先頭とすべき仮想マシンコード
と判定した場合にはその旨を示すブロック先頭情報"T"
を(ステップ10006)、一方、先頭とすべきでない
と判定した場合にはその旨を示すブロック先頭情報"N"
を(ステップ10005)、その仮想マシンコードVCと
共に、それぞれ、経路D1及びD2に出力する(ステップ1
0007)。
分岐位置補正部4302及び実マシンアドレス保持部4
303の動作を示すフローチャートである。まず、実マ
シンアドレス保持部4303は、実マシンアドレスPCを
初期化しておく(ステップ10102)。実マシン命令
変換部4301は、ブロック先頭情報生成部4321a
から出力された仮想マシンコードVCを受け取ると(ステ
ップ10103、10104)、必要に応じて対応する
実マシンコードに変換し、それを実マシンアドレス保持
部4303から読み出した実マシンアドレスPCと共に分
岐位置補正部4302に渡した後に、実マシンアドレス
PCをインクリメントしておく(ステップ10105)。
想マシンコードVCに対応するブロック先頭情報BIをブロ
ック先頭情報生成部4321aから受け取ると(ステッ
プ10106)、実マシン命令変換部4301から送ら
れてきた実マシンコードを外部に出力するに際して、上
記境界違反を生じることとなるか否か判断する(ステッ
プ1017、10108)。具体的には、ブロック先頭
情報生成部4321aから受け取ったブロック先頭情報
BIが基本ブロックの先頭である旨"T"を示し、かつ、実
マシン命令変換部4301から受け取った実マシンアド
レスPCが2ワード境界にないか否かを判断する(ステッ
プ10107、10108)。
つ、2ワード境界にないと判断した場合には、上記境界
違反を回避するために、実マシン命令"Nop"を生成し出
力した後に上記実マシン命令を実マシン命令列4311
として出力し(ステップ10109、10110)、そ
うでない場合には、単に上記実マシン命令を実マシン命
令列4311として出力する(ステップ10110)。
なお、分岐位置補正部4302は、実マシン命令"Nop"
を生成した場合には(ステップ10110)、そのサイ
ズ分だけ実マシンアドレス保持部4303の実マシンア
ドレスPCを更新しておく。
10)は、ブロック先頭情報生成部4321aから仮想
マシンコードが送られてくる限り、繰り返す(ステップ
10103、10111)。図69は、図97に示され
たサンプル仮想マシン命令列が本その場式コンパイラ4
300に入力された場合において、ブロック先頭情報生
成部4321aによって生成されるブロック先頭情報、
分岐位置補正部4302によって生成される実マシン命
令"Nop"のタイミング、その他の関連情報を示すテーブ
ルである。本図から分かるように、仮想マシンアドレス
0番、アドレス8番、アドレス15番及びアドレス31
番の仮想マシン命令は、基本ブロックの先頭となるの
で、その旨のブロック先頭情報"T"が生成される。
は、分岐位置補正部4302は、ブロック先頭情報生成
部4321aからブロック先頭情報"T"を受け取り、実
マシン命令変換部4301から奇数(35)の実マシン
アドレスPCを受け取るので、仮想マシン命令"Push [1]"
に対応する実マシン命令を出力する前に、実マシン命
令"Nop"を出力する。これによって、ブロックの先頭命
令が奇数番地に置かれることが回避される。
コンパイラ4300は、従来において必要とされた分岐
命令の分岐先についての解析という複雑な処理を行うこ
となく、ジャンプ先についての境界違反を起こすことが
ない実マシンプログラムを生成することができた。これ
は、仮想マシンコンパイラ4320において、ブロック
先頭情報生成部4321aが基本ブロックの検出を行
い、その検出結果であるブロック先頭情報をその場式コ
ンパイラ4300に伝達しているからである。
4300は、従来のその場式コンパイラと比較し、ブロ
ック先頭情報に基づく実マシン命令"Nop"の追加挿入と
いう簡単な処理を追加するだけで、境界違反の問題を解
消している。これによって、ジャンプ命令のジャンプ先
についての境界制限を違反することがない適正な実マシ
ンコードが短時間で生成されるその場式コンパイラが実
現される。
生成部4321aは、仮想マシンコンパイラ4320の
出力部4321に付随して備えられたが、これに代え
て、一般的なコンパイラが備える基本ブロックへの分割
処理を利用してもよい。つまり、一般的なコンパイラ
は、通常、最適化等の過程において、基本ブロックへの
分割処理を行うので、その分割処理の過程で得られたブ
ロック先頭情報を外部(その場式コンパイラ4300)
に出力させることで、容易にブロック先頭情報生成部4
321aを実現することができる。
実マシン命令の配置についてのみアライメント処理が行
われたが、同様な方法によって、遅延分岐や打ち消し分
岐のための配置を行うことができるのは言うまでもな
い。以上、本発明に係る仮想マシン、仮想マシンコンパ
イラ及びその場式コンパイラについて、実施形態1〜9
に基づいて説明したが、本発明は、これら実施形態に限
定されるものではない。各実施形態に示された特徴的な
構成要素を組み合わせたり分離したりすることで、容易
に本発明のバリエーションを考案することができる。
合わせることで、仮想マシンプログラムが基本ブロック
単位で分割され、かつ、対応する先行命令情報と共に命
令格納部に格納しておくことができる。これによって、
真のデータ依存関係を解消し、かつ、その場式コンパイ
ラによるアドレス解決処理を単純化する高速な仮想マシ
ンが実現される。
わせることで、適度な頻度で割込み処理が行われ、か
つ、適正に復号されることが保証された圧縮ビット列を
実行する割込み機能付き仮想マシンが実現される。ま
た、実施形態1における先行命令情報と仮想マシン命
令、実施形態9におけるブロック先頭情報と仮想マシン
命令とは、それぞれ独立分離された構造であったが、例
えば、図70に示されるように、本発明に係る仮想マシ
ンが実行する仮想マシン命令として、これら先行命令情
報、ブロック先頭情報が埋め込まれた命令フォーマット
を有する拡張仮想マシン命令を定義してもよい。その場
合には、拡張仮想マシン命令を単位として命令格納部等
から読み込んだ後に、定型的に分割することで、先行命
令情報、ブロック先頭情報、仮想マシン命令のオペコー
ド及びオペランドを区別して得ることができる。
ク格納部はユニークな識別子を保持していたが、各命令
ブロックを一定のルールに従って命令格納部に配置する
等により、それらを個別に識別できるならば、各命令ブ
ロック格納部に識別子を保持させる必要はない。さら
に、本発明に係る仮想マシン、仮想マシンコンパイラ及
びその場式コンパイラは、いずれも、汎用のコンピュー
タによって実行されるプログラムとして実現することが
できるので、これら発明に係るプログラムをCD-ROM等の
記録媒体に収納したり、伝送路を介して通信したりする
ことによって、流通させることができるのは言うまでも
ない。
に係る仮想マシンは、実マシンによる制御の下で仮想マ
シン命令を実行するスタック型仮想マシンであって、デ
ータを後入れ先出し方式で一時的に記憶するためのスタ
ック手段と、実行対象となる仮想マシン命令列と、それ
ら仮想マシン命令それぞれに対応づけられた情報であっ
て、対応づけられた仮想マシン命令に後続する仮想マシ
ン命令が実行された場合の前記スタック手段でのデータ
の格納状態の変化を示す先行命令情報とを記憶する命令
記憶手段と、前記命令記憶手段から次に実行すべき仮想
マシン命令及び対応する先行命令情報を読み出す読み出
し手段と、読み出された仮想マシン命令と先行命令情報
との組み合わせに対応する演算処理を特定し実行する解
読実行手段とを備えることを特徴とする。
シン命令だけでなく先行命令情報をも格納されているの
で、解読実行部は、仮想マシン命令の演算処理と共に、
後続する仮想マシン命令のためのスタック操作を先行し
て処理しておくことができるので、例えば、スーパース
カラマシンにおいて特に生じ易いパイプラインハザード
のマシンサイクルにおいてその先行処理を実行しておく
ことにより、真のデータ依存関係の影響が吸収され、実
行速度が高速化されるという効果がある。
全ての種類の仮想マシン命令と全ての種類の先行命令情
報との組み合わせそれぞれに対応する実マシン命令列を
記憶する実マシン命令列記憶部と、前記読み出し手段に
よって読み出された仮想マシン命令と先行命令情報との
組み合わせに対応する実マシン命令列を前記実マシン命
令列記憶部に記憶された実マシン命令列から特定する特
定部と、特定された実マシン命令列を実行する実行部と
を有することとすることもできる。
ための上記先行処理を各仮想マシン命令に対応する実マ
シン命令列に組み入れておくことができる。また、前記
先行命令情報は、対応する仮想マシン命令に後続する仮
想マシン命令が実行された場合の前記スタック手段に格
納されるデータ数の増減を示し、前記実マシン命令列記
憶部に記憶された実マシン命令列には、対応する先行命
令情報に基づいて前記スタック手段を先行処理する実マ
シン命令が含まれていることとすることもできる。
に伴うスタック段数の増減と、後続する仮想マシン命令
の実行に伴うスタック段数の増減とが、それぞれ打ち消
し合う操作である場合においては、無駄なスタック操作
が回避され、実行速度が向上される。また、前記実マシ
ン命令列記憶部に記憶された実マシン命令列は、前記ス
タック手段において最後に格納されたデータと最後から
2番目に格納されたデータそれぞれを記憶する領域が前
記実マシンが備える2つのレジスタに割り当てられてい
ることを前提とする内容であるとすることもできる。
いて頻繁に行われるスタックへのデータの出し入れは、
実マシンの内部レジスタへの読み書き動作となるので、
パイプラインハザードを埋めるのに好適な先行処理とな
り、実行効率の向上に適したアーキテクチャとなる。ま
た、前記命令記憶手段は、前記仮想マシン命令列を記憶
する第1領域と、その第1領域における各仮想マシン命
令の記憶位置に関連付けられた記憶位置に前記先行命令
情報を記憶する第2領域とからなり、前記読み出し手段
は、前記第1領域と前記第2領域それぞれの対応する記
憶領域から前記仮想マシン命令と先行命令情報との組を
読み出すこととすることもできる。
命令情報と分離されて格納されるので、従来の仮想マシ
ン命令列と同一のフォーマットとあんり、従来の仮想マ
シンとの命令フォーマットの互換性が維持される。ま
た、前記命令記憶手段は、前記仮想マシン命令列と前記
先行命令情報とを、対応する1つの仮想マシン命令と1
つの先行命令情報との組を1つの拡張仮想マシン命令と
する拡張仮想マシン命令列として記憶し、前記読み出し
手段は、前記命令記憶手段から拡張仮想マシン命令を読
み出し、前記解読実行手段は、読み出された拡張仮想マ
シン命令に対応する演算処理を特定し実行することとす
ることもできる。
な1個の仮想マシン命令と扱うことで、先行命令情報だ
けを特別に処理したり記憶させたりする処理が不要とな
り、全体として、従来のコンピュータのアーキテクチャ
に近い仮想マシンが実現される。また、本発明に係るコ
ンパイラは、スタック型仮想マシンを対象とするコンパ
イラであって、ソースプログラムを前記仮想マシンが実
行する仮想マシン命令列に変換する命令列変換手段と、
変換によって得られた仮想マシン命令列を構成する仮想
マシン命令それぞれについて、後続する仮想マシン命令
が前記仮想マシンによって実行された場合の前記スタッ
ク手段でのデータの格納状態の変化を示す先行命令情報
を生成する先行命令情報生成手段と、生成された先行命
令情報と対応する仮想マシン命令とを関連付けて出力す
る関連付け手段とを備えることを特徴とする。
先行命令情報をも生成されるので、真のデータ依存関係
の影響を吸収することで高速実行が可能な仮想マシンを
対象とする仮想マシンコンパイラが実現される。また、
本発明に係る仮想マシンは、実マシンによる制御の下で
仮想マシン命令を実行する仮想マシンであって、実行対
象となる仮想マシン命令列を記憶する命令記憶手段と、
前記命令記憶手段から次に実行すべき仮想マシン命令を
読み出す読み出し手段と、読み出された仮想マシン命令
に対応する演算処理を特定し実行する解読実行手段とを
備え、前記解読実行手段は、読み出された仮想マシン命
令が実行制御の流れを分岐させる分岐命令であるか否か
を判定する分岐命令判定部と、分岐命令であると判定さ
れる度に、その分岐命令の実行に加えて、この仮想マシ
ンへの割込み要求の発生の有無の検出と、発生している
場合の割込み処理とを実行する割込み処理部とを有する
ことを特徴とする。
る度に、1回の割込み処理が実行されるので、多くの仮
想マシンプログラムにおいては適度な頻度で割込み処理
が繰り返されることとなり、頻繁な割込み処理が行われ
ることによる実行速度の低下が回避されるという効果が
ある。ここで、前記解読実行手段はさらに、対象とする
全ての種類の仮想マシン命令に対応する実マシン命令列
とこの仮想マシンへの割込み要求に対処するための実マ
シン命令列を記憶する実マシン命令列記憶部と、指定さ
れた実マシン命令列を実行する実行部とを備え、前記割
込み処理部は、前記分岐命令判定部によって分岐命令で
あると判定される度に、前記実行部に、前記割込み要求
に対処するための実マシン命令列を実行させた後に前記
分岐命令に対応する実マシン命令列を実行させるとする
こともできる。
デコードデータによって、追加処理すべき割込み処理を
指定することができるので、簡易な構成によって割込み
処理を行う仮想マシンが実現される。また、本発明に係
る仮想マシンは、実マシンによる制御の下で仮想マシン
命令を実行する仮想マシンであって、実行対象となる仮
想マシン命令列を記憶する命令記憶手段と、前記命令記
憶手段から次に実行すべき仮想マシン命令を読み出す読
み出し手段と、読み出された仮想マシン命令に対応する
演算処理を特定し実行する解読実行手段とを備え、前記
解読実行手段は、読み出された仮想マシン命令が一定個
数の仮想マシン命令の集まりをブロックとした場合の各
ブロックを代表する仮想マシン命令に相当するか否かを
判定するブロック判定部を備え、各ブロックを代表する
仮想マシン命令であると判定される度に、その仮想マシ
ン命令の実行に加えて、この仮想マシンへの割込み要求
の発生の有無の検出と、発生している場合の割込み処理
とを実行する割込み処理部とを有することを特徴とす
る。
実行される度に、1回の割込み処理が実行されるので、
割込み処理を発生させる頻度についての制御が可能とな
り、頻繁な割込み処理が行われることによる実行速度の
低下が回避される。ここで、前記解読実行手段はさら
に、対象とする全ての種類の仮想マシン命令に対応する
実マシン命令列とこの仮想マシンへの割込み要求に対処
するための実マシン命令列を記憶する実マシン命令列記
憶部と、指定された実マシン命令列を実行する実行部と
を備え、前記ブロック判定部は、仮想マシン命令が読み
出される度に、それまでに読み出された仮想マシン命令
の総数が一定値の倍数に一致するか否か比較し、一致す
る場合に、前記仮想マシン命令は各ブロックを代表する
仮想マシン命令に相当すると判定し、前記割込み処理部
は、前記分岐命令判定部によって各ブロックを代表する
仮想マシン命令であると判定される度に、前記実行部
に、前記割込み要求に対処するための実マシン命令列を
実行させた後に前記仮想マシン命令に対応する実マシン
命令列を実行させるとすることもできる。
デコードデータによって、追加処理すべき割込み処理を
指定することができるので、簡易な構成によって割込み
処理を行う仮想マシンが実現される。また、本発明に係
る仮想マシンは、実マシンによる制御の下で仮想マシン
命令を実行する仮想マシンであって、実マシン命令から
なる複数のサブプログラムを記憶する実マシンプログラ
ム記憶手段と、実行対象となる仮想マシン命令列を記憶
する第1領域と、前記実マシンプログラム記憶手段にお
ける各サブプログラムへのポインタを記憶する第2領域
とを含む命令記憶手段と、前記命令記憶手段の第1領域
から次に実行すべき仮想マシン命令を読み出す読み出し
手段と、読み出された仮想マシン命令に対応する演算処
理を特定し実行する解読実行手段とを備え、前記解読実
行手段は、読み出された仮想マシン命令が前記第2領域
に実行制御を移す命令であるか否かを判定する領域判定
部と、前記第2領域に実行制御を移す命令であると判定
された場合に、その移動先の第2領域の箇所に格納され
た前記ポインタが示す前記サブプログラムを実行するア
ドレス変換実行部とを有することを特徴とする。
マシン命令を実行させるか否かは、仮想マシンのメモリ
マップにおける領域によってのみ決定されるので、関数
ごとに仮想マシン関数として実行させたり実マシン関数
に置き換えて実行させたりする切り替え設定が容易とな
り、アーキテクチャの異なる複数の実マシンを対象とし
て容易にネイティブコード化をしておくことが可能な仮
想マシンが実現される。
域と第2領域とは、一定のアドレス値を境界とする隣接
した記憶位置に設けられ、前記領域判定部は、読み出さ
れた仮想マシン命令がサブプログラムを呼び出す命令で
ある場合に、その呼び出し先アドレスと前記境界との大
小関係を比較することによって前記判定を行うとするこ
ともできる。
だけで、仮想マシン関数への呼び出しをそのまま実行さ
せたり実マシン関数に置き換えて実行させたりする制御
が可能となるので、複数の異なるアーキテクチャの実マ
シンを対象とする場合であっても、そのために全体とし
ての実行速度を低下させることなく個々の実マシンの環
境に応じた実行速度の高速化が可能な仮想マシンが実現
される。
ンによる制御の下で仮想マシン命令を実行する仮想マシ
ンであって、実行対象となる仮想マシン命令列を記憶す
る命令記憶手段と、前記命令記憶手段から次に実行すべ
き仮想マシン命令を読み出す読み出し手段と、読み出さ
れた仮想マシン命令に対応する演算処理を特定し実行す
る解読実行手段とを備え、前記命令記憶手段は、前記仮
想マシン命令列を構成する基本ブロックそれぞれに対応
する命令ブロックの集まりからなり、各命令ブロック
は、その命令ブロックの前記命令記憶手段における先頭
位置を特定するための識別子を格納した識別子領域と、
対応する基本ブロックの非分岐命令だけを格納した非分
岐命令領域と、対応する基本ブロックの分岐命令を格納
した分岐命令領域とを含み、前記分岐命令領域に格納さ
れた分岐命令は、その分岐先が前記識別子によって指定
され、前記解読実行手段は、読み出された仮想マシン命
令が前記分岐命令である場合には、その分岐先として指
定されている識別子に対応する命令ブロックの非分岐命
令領域の先頭に実行制御を分岐させることを特徴とす
る。
先頭の1箇所だけとなることが保証されるので、その場
式コンパイラでの分岐先命令のアドレス解析処理は単純
化され、コンパイル時間が短縮される。また命令キャッ
シングを命令ブロック単位で行うことで、キャッシュ境
界に伴う判定処理も簡略化され、仮想マシンにキャッシ
ュを導入した場合の実行効率の低下が従来よりも抑えら
れるという効果がある。
すべき仮想マシン命令が属する命令ブロックの識別子を
格納する識別子レジスタと、その仮想マシン命令のその
命令ブロックにおける相対的な記憶位置を示すオフセッ
トを格納するオフセットカウンタとからなるプログラム
カウンタを備え、前記読み出し手段は、前記プログラム
カウンタに格納された識別子とオフセットに基づいて前
記仮想マシン命令を読み出し、前記解読実行手段は、読
み出された仮想マシン命令が前記分岐命令である場合に
は、その分岐先として指定されている識別子を前記識別
子レジスタに書き込むと共に前記オフセットカウンタを
初期値にリセットし、読み出された仮想マシン命令が前
記非分岐命令である場合には、前記オフセットカウンタ
を増加させ、前記読み出し手段は、前記解読実行手段に
よって更新されたプログラムカウンタの識別子とオフセ
ットに基づいて次に実行すべき仮想マシン命令を読み出
すこととすることもできる。
ジスタの値のみによって特定され、各仮想マシン命令の
相対位置はオフセットカウンタのみによって特定される
ので、従来のセグメント方式によるアドレス変換技術を
利用することができる。また、前記解読実行手段はさら
に、対象とする全ての種類の仮想マシン命令それぞれに
対応する実マシン命令列を記憶する実マシン命令列記憶
部を備え、前記命令記憶手段の各命令ブロックはさら
に、その命令ブロックの非分岐命令領域及び分岐命令領
域に格納された仮想マシン命令それぞれに対応する実マ
シン命令列を前記実マシン命令列記憶部に記憶された実
マシン命令列から特定するためのデコードデータを含む
デコードデータ列を格納したデコードデータ列領域を含
み、前記読み出し手段は、デコードデータ列が格納され
た命令ブロックについては前記仮想マシン命令に代えて
前記デコードデータを読み出し、デコードデータ列が格
納されていない命令ブロックについては仮想マシン命令
を読み出した後に、その仮想マシン命令に対応する実マ
シン命令列を前記実マシン命令列記憶部に記憶された実
マシン命令列から特定するためのデコードデータを生成
し、前記解読実行手段は、前記読み出し手段から読み出
し又は生成されたデコードデータによって特定される実
マシン命令列を前記実マシン命令列記憶部から読み出し
て実行するとすることもできる。
令ブロック単位に分割して得られる上記効果に加えて、
デコードデータ列が格納された命令ブロックについて
は、仮想マシン命令に代えてデコードデータが直接に実
行されるので、解読時間が不要となり、仮想マシンの実
行速度は向上されるという効果がある。また、前記命令
記憶手段の各命令ブロックはさらに、その命令ブロック
のデコードデータ列領域に前記デコードデータが格納さ
れているか否かを示すフラグを格納したフラグ領域を含
み、前記解読実行手段はさらに、分岐命令を実行した場
合には、その分岐先となる命令ブロックのフラグ領域に
格納されたフラグを読み出して保持するカレントフラグ
記憶部を備え、前記読み出し手段は、前記カレントフラ
グ記憶部に保持されたフラグに基づいて、デコードデー
タの読み出し又は仮想マシン命令の読み出しを行うとす
ることもできる。
ドデータ列が格納されているか否かのフラグは、その命
令ブロックから読み出されて仮想マシンに保持されるの
で、その命令ブロックの実行においては、仮想マシン命
令ごとに命令ブロック中のフラグを参照する必要はなく
なる。また、前記命令記憶手段の各命令ブロックはさら
に、その命令ブロックのデコードデータ列領域に前記デ
コードデータが格納されているか否かを示すフラグを格
納したフラグ領域を含み、前記解読実行手段はさらに、
分岐命令を実行した場合にその分岐先となる命令ブロッ
クのフラグ領域に格納されたフラグを参照することによ
り、その命令ブロックにはデコードデータが格納されて
いないと判定したときには、その命令ブロックに格納さ
れている仮想マシン命令列を読み出して対応するデコー
ドデータ列に変換し、その命令ブロックのデコードデー
タ列領域に書き込むデコードデータ列書込み部を備える
とすることもできる。
ていない命令ブロックであっても、初めての実行時にデ
コードデータ列が生成されて格納されるので、ループ処
理等のように繰り返して実行される場合には、2回目以
降の実行時における速度が向上される。また、本発明に
係る仮想マシンは、実マシンによる制御の下で仮想マシ
ン命令を実行する仮想マシンであって、実行対象となる
仮想マシン命令列を圧縮符号で記憶する命令記憶手段
と、前記命令記憶手段から次に実行すべき仮想マシン命
令の圧縮符号を読み出し、対応する仮想マシン命令に復
号する読み出し手段と、復号された仮想マシン命令に対
応する演算処理を特定し実行する解読実行手段とを備
え、前記命令記憶手段は、前記仮想マシン命令列を構成
する基本ブロックそれぞれに対応する命令ブロックの集
まりからなり、各命令ブロックは、その命令ブロックの
前記命令記憶手段における先頭位置を特定するための識
別子を格納した識別子領域と、対応する基本ブロックの
非分岐命令だけを格納した非分岐命令領域と、対応する
基本ブロックの分岐命令を格納した分岐命令領域とを含
み、前記分岐命令領域に格納された分岐命令は、その分
岐先が前記識別子によって指定され、前記解読実行手段
は、復号された仮想マシン命令が前記分岐命令である場
合には、その分岐先として指定されている識別子に対応
する命令ブロックの非分岐命令領域の先頭に実行制御を
分岐させることを特徴とする。
プログラムは、基本ブロックを単位とし、かつ、圧縮符
号化されて命令記憶手段に格納され、解読実行手段によ
って復号化され実行されるので、圧縮符号の途中に分岐
することに伴う不具合を生じることのない仮想マシンが
実現される。また、前記命令記憶手段の各命令ブロック
にはさらに、その命令ブロックに格納された仮想マシン
命令の圧縮符号を伸長復号するための情報テーブルであ
って、対応する圧縮符号と仮想マシン命令との組の集ま
りからなる復号テーブルを格納した復号テーブル領域を
含み、前記読み出し手段は、次に実行すべき仮想マシン
命令が属する命令ブロックの復号テーブルを参照しなが
ら、前記命令記憶手段から読み出した圧縮符号を対応す
る仮想マシン命令に復号するとすることもできる。
ーブルが格納され参照されるので、命令ブロックごとに
異なる種類の圧縮符号化を施した場合であっても、適正
に復号されて実行されることが保証される。また、本発
明に係るその場式コンパイラは、実マシンによる制御の
下で仮想マシン命令を実行する仮想マシンと共に用いら
れ、実行対象となる一部の仮想マシン命令列をその実行
に先立って実マシン命令列に変換するその場式コンパイ
ラであって、前記仮想マシン命令列を構成する仮想マシ
ン命令それぞれについて、前記仮想マシン命令列を基本
ブロックに分割した場合の各基本ブロックの先頭となる
仮想マシン命令であるか否かを示すブロック先頭情報の
入力を受け付けるブロック先頭情報獲得手段と、前記仮
想マシン命令列を構成する仮想マシン命令それぞれにつ
いて、対応する実マシン命令列に変換する変換手段と、
前記変換手段によって得られた実マシン命令列における
実マシン命令であって、前記ブロック先頭情報獲得手段
が受け付けたブロック先頭情報によって特定された基本
ブロックの先頭となる仮想マシン命令に対応する実マシ
ン命令が、前記実マシンによってアドレシングされ得な
い位置に配置される命令であるか否かを判定する分岐違
反判定手段と、前記分岐違反判定手段によって前記実マ
シン命令が前記位置に配置される命令であると判定され
た場合に、前記実マシン命令が前記位置に配置されない
よう1個以上の無動作命令を前記実マシン命令列に追加
挿入して出力する出力手段とを備えることを特徴とす
る。
分岐命令の分岐先についての解析という複雑な処理を行
うことなく、ジャンプ先についての境界違反を起こすこ
とがない実マシンプログラムを高速に生成するその場式
コンパイラが実現される。ここで、前記出力手段は、前
記実マシン命令が前記実マシンによってアドレシングさ
れ得る後続位置にずらせるために必要な個数の無動作命
令を前記実マシン命令列における基本ブロックの先頭位
置に追加挿入するとすることもできる。
ラムの実質的な内容を変化させることなく、ジャンプ命
令に伴う境界違反の発生を回避したその場式コンパイラ
が実現される。以上のように、本発明によって、仮想マ
シンの実行速度は高速化され、特に、異機種のコンピュ
ータ同士が接続されるネットワーク環境における共有資
源の迅速かつ円滑な利用を促進させる基盤技術として、
その実用的価値は極めて大きい。
作するコンピュータのハードウエア構成図である。
す機能ブロック図である。
報格納部101及び命令格納部102に格納されている
先行命令情報及び対応する仮想マシンコードの例を示す
図である。
る。
想マシン命令"Push"及び下向き仮想マシン命令"Push"に
対応するマイクロプログラムのリストを示す。
想マシン命令"Add"及び下向き仮想マシン命令"Add"に対
応するマイクロプログラムのリストを示す。
想マシン命令"Mult"及び下向き仮想マシン命令"Mult"に
対応するマイクロプログラムのリストを示す。
及び図7(a)に示された上向き仮想マシン命令のマイ
クロプログラムの後半に相当するマイクロプログラム、
図6(b)及び図7(b)に示された下向き仮想マシン
命令のマイクロプログラムの後半に相当するマイクロプ
ログラムのリストを示す。
シン命令が属する種別の変化を示す状態遷移図である。
トである。
907)の詳細を示すフローチャートの前半部である。
907)の詳細を示すフローチャートの後半部である。
するデコードデータ列の例を示す図である。
たデコードデータ列に従って実行部110が動作した場
合における本仮想マシン100の内部状態の変化を示す
図である。
参照を行ってから1クロック後にその参照値を使用する
ことができる場合におけるパイプラインの流れを示す図
である。、
ってメモリ参照を行ってから1クロック後にその参照値
を使用することができる場合におけるパイプラインの流
れを示す図である。、
参照を行ってから2クロック後にその参照値を使用する
ことができる場合におけるパイプラインの流れを示す図
である。、
ってメモリ参照を行ってから2クロック後にその参照値
を使用することができる場合におけるパイプラインの流
れを示す図である。
00の構成を示す機能ブロック図である。
ログラム3404のデータ構造を示す図である。
図である。
すフローチャートである。
すフローチャートである。
すフローチャートである。
ローチャートである。
ートである。
を示す機能ブロック図である。
検索とデコードデータの出力処理の詳細を示すフローチ
ャートである。
チャートである。
ーチャートである。
を示す機能ブロック図である。
ャートである。
を示す機能ブロック図である。
である。
02の構造を示す図である。
である。
を示す図である。
を示す機能ブロック図である。
グラムの格納状態の例を示す図である。
御フローを示す図である。
ットを示す図である。
1の動作を示すフローチャートである。
ける論理的なアドレスと識別子とを物理的なアドレスに
置き換えた図である。
60の構成示すブロック図である。
図である。
ャートである。
すフローチャートである。
すフローチャートである。
すフローチャートである。
PC3804、命令ブロック格納領域3852a〜38
52d及びキャッシュテーブル8404の関係を示す図
である。
実行部3810による分岐命令の実行処理を示すフロー
チャートである。
を示す機能ブロック図である。
シンプログラムの格納状態の例を示す図である。
ートである。
である。
デコード部3902に対する制御を示すフローチャート
である。
を示す機能ブロック図である。
場合におけるデコード命令列書込み部4008、カレン
トフラグ読出制御部3912及び分岐先変換部3811
における動作を示すフローチャートである。
すフローチャートである。
の動作を示すフローチャートである。
を示す機能ブロック図である。
a〜4157dに格納された復号化テーブルの例を示
し、図62(b)は、図62(a)に示された復号化テ
ーブルにおける符号の規則性を示す図である。
シンプログラムの格納状態の例を示す図である。
ートである。
すフローチャートである。
0を含むコンパイラシステム全体の構成を示す機能ブロ
ック図である。
示すフローチャートである。
部4302及び実マシンアドレス保持部4303の動作
を示すフローチャートである。
生成されるブロック先頭情報、分岐位置補正部4302
によって生成される実マシン命令"Nop"のタイミング、
その他の関連情報を示すテーブルである。
ン命令のフォーマットの変形例を示す図である。
を示す機能ブロック図である。
トを説明するための図である。
の内容を示す図である。
4411に格納されているマイクロプログラムのリスト
を示す図である。
示す図である。
を示すフローチャートである。
506の詳細を示すフローチャートである。
バッファを介して実行部4410に渡される場合におけ
るデコード部4402の動作を示すフローチャートであ
る。
すフローチャートである。
トを示し、図80(b)は、そのプログラムが指示する
演算式「2*(3+4)」を示し、図80(c)は、デコード
部4402から順次出力されるデコードデータを示す図
である。
従って実行部4410が動作した場合における従来の仮
想マシンの内部状態の変化を示す図である。
マイクロプログラムのリストを示す図である。
ログラムを備える従来の仮想マシンによって図80
(a)の仮想マシンプログラムが実行された場合の仮想
マシンの内部状態の変化を示す図である。
を説明する図である。
示す図である。
的な流れを示す図である。
ドが生じた場合のパイプラインの流れを示す図である。
ンにハザードが生じた場合のパイプラインの流れを示す
図である。
てからその値が次に使用されるまでに2クロックの時間
を必要とするときのパイプラインの流れを示す図であ
る。
てからその値が次に使用されるまでに2クロックの時間
を必要とするときのパイプラインの流れを示す図であ
る。
レジスタでジャンプ先を指定する命令である場合のパイ
プラインの流れを示す図である。
命令A2がレジスタでジャンプ先を指定する命令である
場合のパイプラインの流れを示す図である。
(a)に示された仮想マシンプログラムを実行した場合
であって、メモリ参照が行われてからその値が次に使用
されるまでに1クロックの時間で済む場合における通常
マシンのパイプラインの流れを示す。
ラマシンのパイプラインの流れを示す。
されるまでに2クロックの時間を必要とする場合におけ
る通常マシンのパイプラインの流れを示す。
ラマシンのパイプラインの流れを示す。
す図である。
ラムのフローチャートである。
る変換テーブルである。
97に示された仮想マシンプログラムをコンパイルした
場合に得られる実マシンプログラムのコード配置の様子
を図である。
図101(a)は、圧縮符号化テーブルの例を示し、図
101(b)は、誤って復号化される場合の例を示す図
である。
ンにおいて生じうる問題点を説明するための図である。
キャッシュメモリに置かれた場合における各キャッシュ
ブロックを区切る境界線A,B,Cを示す図である。
Claims (30)
- 【請求項1】実マシンによる制御の下で仮想マシン命令
を実行するスタック型仮想マシンであって、 データを後入れ先出し方式で一時的に記憶するためのス
タック手段と、 実行対象となる仮想マシン命令列と、それら仮想マシン
命令それぞれに対応づけられた情報であって、対応づけ
られた仮想マシン命令に後続する仮想マシン命令が実行
された場合の前記スタック手段でのデータの格納状態の
変化を示す先行命令情報とを記憶する命令記憶手段と、 前記命令記憶手段から次に実行すべき仮想マシン命令及
び対応する先行命令情報を読み出す読み出し手段と、 読み出された仮想マシン命令と先行命令情報との組み合
わせに対応する演算処理を特定し実行する解読実行手段
とを備えることを特徴とする仮想マシン。 - 【請求項2】前記解読実行手段は、 対象とする全ての種類の仮想マシン命令と全ての種類の
先行命令情報との組み合わせそれぞれに対応する実マシ
ン命令列を記憶する実マシン命令列記憶部と、 前記読み出し手段によって読み出された仮想マシン命令
と先行命令情報との組み合わせに対応する実マシン命令
列を前記実マシン命令列記憶部に記憶された実マシン命
令列から特定する特定部と、 特定された実マシン命令列を実行する実行部とを有する
ことを特徴とする請求項1記載の仮想マシン。 - 【請求項3】前記先行命令情報は、対応する仮想マシン
命令に後続する仮想マシン命令が実行された場合の前記
スタック手段に格納されるデータ数の増減を示し、 前記実マシン命令列記憶部に記憶された実マシン命令列
には、対応する先行命令情報に基づいて前記スタック手
段を先行処理する実マシン命令が含まれていることを特
徴とする請求項2記載の仮想マシン。 - 【請求項4】前記実マシン命令列記憶部に記憶された実
マシン命令列は、前記スタック手段において最後に格納
されたデータと最後から2番目に格納されたデータそれ
ぞれを記憶する領域が前記実マシンが備える2つのレジ
スタに割り当てられていることを前提とする内容である
ことを特徴とする請求項3記載の仮想マシン。 - 【請求項5】前記命令記憶手段は、前記仮想マシン命令
列を記憶する第1領域と、その第1領域における各仮想
マシン命令の記憶位置に関連付けられた記憶位置に前記
先行命令情報を記憶する第2領域とからなり、 前記読み出し手段は、前記第1領域と前記第2領域それ
ぞれの対応する記憶領域から前記仮想マシン命令と先行
命令情報との組を読み出すことを特徴とする請求項1記
載の仮想マシン。 - 【請求項6】前記命令記憶手段は、前記仮想マシン命令
列と前記先行命令情報とを、対応する1つの仮想マシン
命令と1つの先行命令情報との組を1つの拡張仮想マシ
ン命令とする拡張仮想マシン命令列として記憶し、 前記読み出し手段は、前記命令記憶手段から拡張仮想マ
シン命令を読み出し、 前記解読実行手段は、読み出された拡張仮想マシン命令
に対応する演算処理を特定し実行することを特徴とする
請求項1記載の仮想マシン。 - 【請求項7】スタック型仮想マシンを対象とするコンパ
イラであって、 ソースプログラムを前記仮想マシンが実行する仮想マシ
ン命令列に変換する命令列変換手段と、 変換によって得られた仮想マシン命令列を構成する仮想
マシン命令それぞれについて、後続する仮想マシン命令
が前記仮想マシンによって実行された場合の前記スタッ
ク手段でのデータの格納状態の変化を示す先行命令情報
を生成する先行命令情報生成手段と、 生成された先行命令情報と対応する仮想マシン命令とを
関連付けて出力する関連付け手段とを備えることを特徴
とする仮想マシンコンパイラ。 - 【請求項8】実マシンによる制御の下で仮想マシン命令
を実行する仮想マシンであって、 実行対象となる仮想マシン命令列を記憶する命令記憶手
段と、 前記命令記憶手段から次に実行すべき仮想マシン命令を
読み出す読み出し手段と、 読み出された仮想マシン命令に対応する演算処理を特定
し実行する解読実行手段とを備え、 前記解読実行手段は、 読み出された仮想マシン命令が実行制御の流れを分岐さ
せる分岐命令であるか否かを判定する分岐命令判定部
と、 分岐命令であると判定される度に、その分岐命令の実行
に加えて、この仮想マシンへの割込み要求の発生の有無
の検出と、発生している場合の割込み処理とを実行する
割込み処理部とを有することを特徴とする仮想マシン。 - 【請求項9】前記解読実行手段はさらに、 対象とする全ての種類の仮想マシン命令に対応する実マ
シン命令列とこの仮想マシンへの割込み要求に対処する
ための実マシン命令列を記憶する実マシン命令列記憶部
と、 指定された実マシン命令列を実行する実行部とを備え、 前記割込み処理部は、前記分岐命令判定部によって分岐
命令であると判定される度に、前記実行部に、前記割込
み要求に対処するための実マシン命令列を実行させた後
に前記分岐命令に対応する実マシン命令列を実行させる
ことを特徴とする請求項8記載の仮想マシン。 - 【請求項10】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンであって、 実行対象となる仮想マシン命令列を記憶する命令記憶手
段と、 前記命令記憶手段から次に実行すべき仮想マシン命令を
読み出す読み出し手段と、 読み出された仮想マシン命令に対応する演算処理を特定
し実行する解読実行手段とを備え、 前記解読実行手段は、 読み出された仮想マシン命令が一定個数の仮想マシン命
令の集まりをブロックとした場合の各ブロックを代表す
る仮想マシン命令に相当するか否かを判定するブロック
判定部を備え、 各ブロックを代表する仮想マシン命令であると判定され
る度に、その仮想マシン命令の実行に加えて、この仮想
マシンへの割込み要求の発生の有無の検出と、発生して
いる場合の割込み処理とを実行する割込み処理部とを有
することを特徴とする仮想マシン。 - 【請求項11】前記解読実行手段はさらに、 対象とする全ての種類の仮想マシン命令に対応する実マ
シン命令列とこの仮想マシンへの割込み要求に対処する
ための実マシン命令列を記憶する実マシン命令列記憶部
と、 指定された実マシン命令列を実行する実行部とを備え、 前記ブロック判定部は、仮想マシン命令が読み出される
度に、それまでに読み出された仮想マシン命令の総数が
一定値の倍数に一致するか否か比較し、一致する場合
に、前記仮想マシン命令は各ブロックを代表する仮想マ
シン命令に相当すると判定し、 前記割込み処理部は、前記分岐命令判定部によって各ブ
ロックを代表する仮想マシン命令であると判定される度
に、前記実行部に、前記割込み要求に対処するための実
マシン命令列を実行させた後に前記仮想マシン命令に対
応する実マシン命令列を実行させることを特徴とする請
求項10記載の仮想マシン。 - 【請求項12】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンであって、 実マシン命令からなる複数のサブプログラムを記憶する
実マシンプログラム記憶手段と、 実行対象となる仮想マシン命令列を記憶する第1領域
と、前記実マシンプログラム記憶手段における各サブプ
ログラムへのポインタを記憶する第2領域とを含む命令
記憶手段と、 前記命令記憶手段の第1領域から次に実行すべき仮想マ
シン命令を読み出す読み出し手段と、 読み出された仮想マシン命令に対応する演算処理を特定
し実行する解読実行手段とを備え、 前記解読実行手段は、 読み出された仮想マシン命令が前記第2領域に実行制御
を移す命令であるか否かを判定する領域判定部と、 前記第2領域に実行制御を移す命令であると判定された
場合に、その移動先の第2領域の箇所に格納された前記
ポインタが示す前記サブプログラムを実行するアドレス
変換実行部とを有することを特徴とする仮想マシン。 - 【請求項13】前記命令記憶手段における第1領域と第
2領域とは、一定のアドレス値を境界とする隣接した記
憶位置に設けられ、 前記領域判定部は、読み出された仮想マシン命令がサブ
プログラムを呼び出す命令である場合に、その呼び出し
先アドレスと前記境界との大小関係を比較することによ
って前記判定を行うことを特徴とする請求項12記載の
仮想マシン。 - 【請求項14】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンであって、 実行対象となる仮想マシン命令列を記憶する命令記憶手
段と、 前記命令記憶手段から次に実行すべき仮想マシン命令を
読み出す読み出し手段と、 読み出された仮想マシン命令に対応する演算処理を特定
し実行する解読実行手段とを備え、 前記命令記憶手段は、前記仮想マシン命令列を構成する
基本ブロックそれぞれに対応する命令ブロックの集まり
からなり、 各命令ブロックは、その命令ブロックの前記命令記憶手
段における先頭位置を特定するための識別子を格納した
識別子領域と、対応する基本ブロックの非分岐命令だけ
を格納した非分岐命令領域と、対応する基本ブロックの
分岐命令を格納した分岐命令領域とを含み、 前記分岐命令領域に格納された分岐命令は、その分岐先
が前記識別子によって指定され、 前記解読実行手段は、読み出された仮想マシン命令が前
記分岐命令である場合には、その分岐先として指定され
ている識別子に対応する命令ブロックの非分岐命令領域
の先頭に実行制御を分岐させることを特徴とする仮想マ
シン。 - 【請求項15】前記解読実行手段は、 次に読み出すべき仮想マシン命令が属する命令ブロック
の識別子を格納する識別子レジスタと、その仮想マシン
命令のその命令ブロックにおける相対的な記憶位置を示
すオフセットを格納するオフセットカウンタとからなる
プログラムカウンタを備え、 前記読み出し手段は、前記プログラムカウンタに格納さ
れた識別子とオフセットに基づいて前記仮想マシン命令
を読み出し、 前記解読実行手段は、読み出された仮想マシン命令が前
記分岐命令である場合には、その分岐先として指定され
ている識別子を前記識別子レジスタに書き込むと共に前
記オフセットカウンタを初期値にリセットし、読み出さ
れた仮想マシン命令が前記非分岐命令である場合には、
前記オフセットカウンタを増加させ、 前記読み出し手段は、前記解読実行手段によって更新さ
れたプログラムカウンタの識別子とオフセットに基づい
て次に実行すべき仮想マシン命令を読み出すことを特徴
とする請求項14記載の仮想マシン。 - 【請求項16】前記解読実行手段はさらに、対象とする
全ての種類の仮想マシン命令それぞれに対応する実マシ
ン命令列を記憶する実マシン命令列記憶部を備え、 前記命令記憶手段の各命令ブロックはさらに、その命令
ブロックの非分岐命令領域及び分岐命令領域に格納され
た仮想マシン命令それぞれに対応する実マシン命令列を
前記実マシン命令列記憶部に記憶された実マシン命令列
から特定するためのデコードデータを含むデコードデー
タ列を格納したデコードデータ列領域を含み、 前記読み出し手段は、デコードデータ列が格納された命
令ブロックについては前記仮想マシン命令に代えて前記
デコードデータを読み出し、デコードデータ列が格納さ
れていない命令ブロックについては仮想マシン命令を読
み出した後に、その仮想マシン命令に対応する実マシン
命令列を前記実マシン命令列記憶部に記憶された実マシ
ン命令列から特定するためのデコードデータを生成し、 前記解読実行手段は、前記読み出し手段から読み出し又
は生成されたデコードデータによって特定される実マシ
ン命令列を前記実マシン命令列記憶部から読み出して実
行することを特徴とする請求項15記載の仮想マシン。 - 【請求項17】前記命令記憶手段の各命令ブロックはさ
らに、その命令ブロックのデコードデータ列領域に前記
デコードデータが格納されているか否かを示すフラグを
格納したフラグ領域を含み、 前記解読実行手段はさらに、分岐命令を実行した場合に
は、その分岐先となる命令ブロックのフラグ領域に格納
されたフラグを読み出して保持するカレントフラグ記憶
部を備え、 前記読み出し手段は、前記カレントフラグ記憶部に保持
されたフラグに基づいて、デコードデータの読み出し又
は仮想マシン命令の読み出しを行うことを特徴とする請
求項16記載の仮想マシン。 - 【請求項18】前記命令記憶手段の各命令ブロックはさ
らに、その命令ブロックのデコードデータ列領域に前記
デコードデータが格納されているか否かを示すフラグを
格納したフラグ領域を含み、 前記解読実行手段はさらに、分岐命令を実行した場合に
その分岐先となる命令ブロックのフラグ領域に格納され
たフラグを参照することにより、その命令ブロックには
デコードデータが格納されていないと判定したときに
は、その命令ブロックに格納されている仮想マシン命令
列を読み出して対応するデコードデータ列に変換し、そ
の命令ブロックのデコードデータ列領域に書き込むデコ
ードデータ列書込み部を備えることを特徴とする請求項
16記載の仮想マシン。 - 【請求項19】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンであって、 実行対象となる仮想マシン命令列を圧縮符号で記憶する
命令記憶手段と、 前記命令記憶手段から次に実行すべき仮想マシン命令の
圧縮符号を読み出し、対応する仮想マシン命令に復号す
る読み出し手段と、 復号された仮想マシン命令に対応する演算処理を特定し
実行する解読実行手段とを備え、 前記命令記憶手段は、前記仮想マシン命令列を構成する
基本ブロックそれぞれに対応する命令ブロックの集まり
からなり、 各命令ブロックは、その命令ブロックの前記命令記憶手
段における先頭位置を特定するための識別子を格納した
識別子領域と、対応する基本ブロックの非分岐命令だけ
を格納した非分岐命令領域と、対応する基本ブロックの
分岐命令を格納した分岐命令領域とを含み、 前記分岐命令領域に格納された分岐命令は、その分岐先
が前記識別子によって指定され、 前記解読実行手段は、復号された仮想マシン命令が前記
分岐命令である場合には、その分岐先として指定されて
いる識別子に対応する命令ブロックの非分岐命令領域の
先頭に実行制御を分岐させることを特徴とする仮想マシ
ン。 - 【請求項20】前記命令記憶手段の各命令ブロックには
さらに、その命令ブロックに格納された仮想マシン命令
の圧縮符号を伸長復号するための情報テーブルであっ
て、対応する圧縮符号と仮想マシン命令との組の集まり
からなる復号テーブルを格納した復号テーブル領域を含
み、 前記読み出し手段は、次に実行すべき仮想マシン命令が
属する命令ブロックの復号テーブルを参照しながら、前
記命令記憶手段から読み出した圧縮符号を対応する仮想
マシン命令に復号することを特徴とする請求項19記載
の仮想マシン。 - 【請求項21】前記解読実行手段は、 次に読み出すべき仮想マシン命令が属する命令ブロック
の識別子を格納する識別子レジスタと、その仮想マシン
命令のその命令ブロックにおける相対的な記憶位置を示
すオフセットを格納するオフセットカウンタとからなる
プログラムカウンタを備え、 前記読み出し手段は、前記プログラムカウンタに格納さ
れた識別子とオフセットに基づいて前記仮想マシン命令
を読み出し、 前記解読実行手段は、読み出された仮想マシン命令が前
記分岐命令である場合には、その分岐先として指定され
ている識別子を前記識別子レジスタに書き込むと共に前
記オフセットカウンタを初期値にリセットし、読み出さ
れた仮想マシン命令が前記非分岐命令である場合には、
前記オフセットカウンタを増加させ、 前記読み出し手段は、前記解読実行手段によって更新さ
れたプログラムカウンタの識別子とオフセットに基づい
て次に実行すべき仮想マシン命令を読み出すことを特徴
とする請求項20記載の仮想マシン。 - 【請求項22】前記解読実行手段はさらに、対象とする
全ての種類の仮想マシン命令それぞれに対応する実マシ
ン命令列を記憶する実マシン命令列記憶部を備え、 前記命令記憶手段の各命令ブロックはさらに、その命令
ブロックの非分岐命令領域及び分岐命令領域に格納され
た仮想マシン命令それぞれに対応する実マシン命令列を
前記実マシン命令列記憶部に記憶された実マシン命令列
から特定するためのデコードデータを含むデコードデー
タ列を格納したデコードデータ列領域を含み、 前記読み出し手段は、デコードデータ列が格納された命
令ブロックについては前記仮想マシン命令に代えて前記
デコードデータを読み出し、デコードデータ列が格納さ
れていない命令ブロックについては仮想マシン命令の圧
縮符号を読み出して対応する仮想マシン命令に復号した
後に、その仮想マシン命令に対応する実マシン命令列を
前記実マシン命令列記憶部に記憶された実マシン命令列
から特定するためのデコードデータを生成し、 前記解読実行手段は、前記読み出し手段から読み出し又
は生成されたデコードデータによって特定される実マシ
ン命令列を前記実マシン命令列記憶部から読み出して実
行することを特徴とする請求項21記載の仮想マシン。 - 【請求項23】前記命令記憶手段の各命令ブロックはさ
らに、その命令ブロックのデコードデータ列領域に前記
デコードデータが格納されているか否かを示すフラグを
格納したフラグ領域を含み、 前記解読実行手段はさらに、分岐命令を実行した場合に
は、その分岐先となる命令ブロックのフラグ領域に格納
されたフラグを読み出して保持するカレントフラグ記憶
部を備え、 前記読み出し手段は、前記カレントフラグ記憶部に保持
されたフラグに基づいて、デコードデータの読み出し又
は仮想マシン命令の読み出しを行うことを特徴とする請
求項22記載の仮想マシン。 - 【請求項24】前記命令記憶手段の各命令ブロックはさ
らに、その命令ブロックのデコードデータ列領域に前記
デコードデータが格納されているか否かを示すフラグを
格納したフラグ領域を含み、 前記解読実行手段はさらに、分岐命令を実行した場合に
その分岐先となる命令ブロックのフラグ領域に格納され
たフラグを参照することにより、その命令ブロックには
デコードデータが格納されていないと判定したときに
は、その命令ブロックに格納されている仮想マシン命令
列の圧縮符号を読み出して対応する仮想マシン命令列に
復号した後に、対応するデコードデータ列に変換し、そ
の命令ブロックのデコードデータ列領域に書き込むデコ
ードデータ列書込み部を備えることを特徴とする請求項
22記載の仮想マシン。 - 【請求項25】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンと共に用いられ、実行対象とな
る一部の仮想マシン命令列をその実行に先立って実マシ
ン命令列に変換するその場式コンパイラであって、 前記仮想マシン命令列を構成する仮想マシン命令それぞ
れについて、前記仮想マシン命令列を基本ブロックに分
割した場合の各基本ブロックの先頭となる仮想マシン命
令であるか否かを示すブロック先頭情報の入力を受け付
けるブロック先頭情報獲得手段と、 前記仮想マシン命令列を構成する仮想マシン命令それぞ
れについて、対応する実マシン命令列に変換する変換手
段と、 前記変換手段によって得られた実マシン命令列における
実マシン命令であって、前記ブロック先頭情報獲得手段
が受け付けたブロック先頭情報によって特定された基本
ブロックの先頭となる仮想マシン命令に対応する実マシ
ン命令が、前記実マシンによってアドレシングされ得な
い位置に配置される命令であるか否かを判定する分岐違
反判定手段と、 前記分岐違反判定手段によって前記実マシン命令が前記
位置に配置される命令であると判定された場合に、前記
実マシン命令が前記位置に配置されないよう1個以上の
無動作命令を前記実マシン命令列に追加挿入して出力す
る出力手段とを備えることを特徴とするコンパイラ。 - 【請求項26】前記出力手段は、前記実マシン命令が前
記実マシンによってアドレシングされ得る後続位置にず
らせるために必要な個数の無動作命令を前記実マシン命
令列における基本ブロックの先頭位置に追加挿入するこ
とを特徴とする請求項25記載のコンパイラ。 - 【請求項27】実マシンによる制御の下で仮想マシン命
令を実行するスタック型仮想マシンにおいて、実行対象
となる仮想マシン命令列を格納しておくための命令記憶
手段における前記格納方法であって、 実行対象となる仮想マシン命令列と、それら仮想マシン
命令それぞれに対応づけられた情報であって、対応づけ
られた仮想マシン命令に後続する仮想マシン命令が実行
された場合の前記スタックでのデータの格納状態の変化
を示す先行命令情報とを関連付けて格納することを特徴
とする仮想マシン命令列の格納方法。 - 【請求項28】コンピュータをスタック型仮想マシンと
して機能させるためのプログラムを記録した記録媒体で
あって、 前記仮想マシンは、 データを後入れ先出し方式で一時的に記憶するためのス
タック手段と、 実行対象となる仮想マシン命令列と、それら仮想マシン
命令それぞれに対応づけられた情報であって、対応づけ
られた仮想マシン命令に後続する仮想マシン命令が実行
された場合の前記スタック手段でのデータの格納状態の
変化を示す先行命令情報とを記憶する命令記憶手段と、 前記命令記憶手段から次に実行すべき仮想マシン命令及
び対応する先行命令情報を読み出す読み出し手段と、 読み出された仮想マシン命令と先行命令情報との組み合
わせに対応する演算処理を特定し実行する解読実行手段
とを備えることを特徴とする記録媒体。 - 【請求項29】実マシンによる制御の下で仮想マシン命
令を実行する仮想マシンにおいて、実行対象となる仮想
マシン命令列を格納しておくための命令記憶手段におけ
る前記格納方法であって、 前記命令記憶手段は、前記仮想マシン命令列を構成する
基本ブロックそれぞれに対応する命令ブロックの集まり
からなり、 各命令ブロックは、その命令ブロックの前記命令記憶手
段における先頭位置を特定するための識別子を格納した
識別子領域と、対応する基本ブロックの非分岐命令だけ
を格納した非分岐命令領域と、対応する基本ブロックの
分岐命令を格納した分岐命令領域とを含み、 前記分岐命令領域に格納された分岐命令は、その分岐先
が前記識別子によって指定されていることを特徴とする
仮想マシン命令列の格納方法。 - 【請求項30】コンピュータを仮想マシンとして機能さ
せるためのプログラムを記録した記録媒体であって、 前記仮想マシンは、 実行対象となる仮想マシン命令列を記憶する命令記憶手
段と、 前記命令記憶手段から次に実行すべき仮想マシン命令を
読み出す読み出し手段と、 読み出された仮想マシン命令に対応する演算処理を特定
し実行する解読実行手段とを備え、 前記命令記憶手段は、前記仮想マシン命令列を構成する
基本ブロックそれぞれに対応する命令ブロックの集まり
からなり、 各命令ブロックは、その命令ブロックの前記命令記憶手
段における先頭位置を特定するための識別子を格納した
識別子領域と、対応する基本ブロックの非分岐命令だけ
を格納した非分岐命令領域と、対応する基本ブロックの
分岐命令を格納した分岐命令領域とを含み、 前記分岐命令領域に格納された分岐命令は、その分岐先
が前記識別子によって指定され、 前記解読実行手段は、読み出された仮想マシン命令が前
記分岐命令である場合には、その分岐先として指定され
ている識別子に対応する命令ブロックの非分岐命令領域
の先頭に実行制御を分岐させることを特徴とする記録媒
体。
Priority Applications (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10096204A JPH11296381A (ja) | 1998-04-08 | 1998-04-08 | 仮想マシン及びコンパイラ |
| EP99302715A EP0949564A3 (en) | 1998-04-08 | 1999-04-07 | High speed virtual machine and compiler |
| US10/403,600 US6799315B2 (en) | 1998-04-08 | 2003-03-31 | High speed virtual machine and compiler |
| US10/403,917 US20030233386A1 (en) | 1998-04-08 | 2003-03-31 | High speed virtual machine and compiler |
| US10/899,920 US20040268348A1 (en) | 1998-04-08 | 2004-07-27 | High speed virtual machine and compiler |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP10096204A JPH11296381A (ja) | 1998-04-08 | 1998-04-08 | 仮想マシン及びコンパイラ |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH11296381A true JPH11296381A (ja) | 1999-10-29 |
| JPH11296381A5 JPH11296381A5 (ja) | 2005-09-15 |
Family
ID=14158751
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP10096204A Pending JPH11296381A (ja) | 1998-04-08 | 1998-04-08 | 仮想マシン及びコンパイラ |
Country Status (3)
| Country | Link |
|---|---|
| US (3) | US20030233386A1 (ja) |
| EP (1) | EP0949564A3 (ja) |
| JP (1) | JPH11296381A (ja) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2013542500A (ja) * | 2010-09-24 | 2013-11-21 | アーム・リミテッド | 次命令タイプフィールド |
| JP2016103252A (ja) * | 2014-11-27 | 2016-06-02 | 正仁 櫨田 | コンピュ−タ−のcpuの高速化法 |
Families Citing this family (58)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2001009715A2 (en) * | 1999-07-28 | 2001-02-08 | Sun Microsystems, Inc. | A single-compiler architecture |
| GB2358261B (en) * | 2000-01-17 | 2004-06-09 | Advanced Risc Mach Ltd | Data processing with native and interpreted program instruction words |
| AU2001236976A1 (en) * | 2000-02-14 | 2001-08-27 | Chicory Systems, Inc. | Delayed update of a stack pointer and program counter |
| AU2001241487A1 (en) * | 2000-02-14 | 2001-08-27 | Chicory Systems, Inc. | Transforming a stack-based code sequence to a register based code sequence |
| WO2001061477A1 (en) * | 2000-02-14 | 2001-08-23 | Chicory Systems, Inc. | Predecoding instructions to determine stack change information |
| JP4558879B2 (ja) * | 2000-02-15 | 2010-10-06 | 富士通株式会社 | テーブルを用いたデータ処理装置および処理システム |
| AU2001245661A1 (en) * | 2000-03-13 | 2001-09-24 | Chicory Systems, Inc. | Device and method for eliminating redundant stack operations |
| DE10205523A1 (de) * | 2002-02-08 | 2003-08-28 | Systemonic Ag | Verfahren zum Bereitstellen einer Entwurfs-, Test- und Entwicklungsumgebung sowie ein System zur Ausführung des Verfahrens |
| US7577722B1 (en) | 2002-04-05 | 2009-08-18 | Vmware, Inc. | Provisioning of computer systems using virtual machines |
| US7039908B2 (en) * | 2002-06-26 | 2006-05-02 | Microsoft Corporation | Unification-based points-to-analysis using multilevel typing |
| US7065743B2 (en) * | 2002-07-11 | 2006-06-20 | International Business Machines Corporation | Apparatus and method for caching analyzed program information |
| GB0220282D0 (en) * | 2002-08-31 | 2002-10-09 | Ibm | Improved just in time compilation of java software methods |
| US7086038B2 (en) * | 2002-10-07 | 2006-08-01 | Hewlett-Packard Development Company, L.P. | System and method for creating systolic solvers |
| US7228543B2 (en) * | 2003-01-24 | 2007-06-05 | Arm Limited | Technique for reaching consistent state in a multi-threaded data processing system |
| US7140003B2 (en) * | 2003-02-14 | 2006-11-21 | International Business Machines Corporation | Method and system for specifying sets of instructions for selection by an instruction generator |
| CA2430763A1 (en) * | 2003-05-30 | 2004-11-30 | Ibm Canada Limited - Ibm Canada Limitee | Efficiently releasing locks when an exception occurs |
| US7890464B2 (en) * | 2003-06-20 | 2011-02-15 | Innopath Software, Inc. | Processing software images and generating difference files |
| CA2434280A1 (en) * | 2003-07-03 | 2005-01-03 | Zhong L. Wang | Method and apparatus to guarantee type and initialization safety in multihreaded programs |
| US7114153B2 (en) * | 2003-09-10 | 2006-09-26 | Qualcomm Inc. | Method and apparatus for continuation-passing in a virtual machine |
| TW200518070A (en) * | 2003-10-10 | 2005-06-01 | Matsushita Electric Industrial Co Ltd | Recording medium, reproduction device, program, and reproduction method |
| JP4328328B2 (ja) * | 2003-10-23 | 2009-09-09 | 富士通株式会社 | ソフトウエア開発ツールプログラム |
| US7689987B2 (en) * | 2004-06-30 | 2010-03-30 | Microsoft Corporation | Systems and methods for stack-jumping between a virtual machine and a host environment |
| JP4871598B2 (ja) * | 2006-01-19 | 2012-02-08 | キヤノン株式会社 | 画像処理装置および画像処理装置の起動方法およびプログラム |
| US20080077652A1 (en) * | 2006-09-06 | 2008-03-27 | Credit Suisse Securities (Usa) Llc One Madison Avenue | Method and system for providing an enhanced service-oriented architecture |
| US8068602B1 (en) * | 2006-09-29 | 2011-11-29 | Verint Americas, Inc. | Systems and methods for recording using virtual machines |
| EP2106584A1 (en) * | 2006-12-11 | 2009-10-07 | Nxp B.V. | Pipelined processor and compiler/scheduler for variable number branch delay slots |
| US8108845B2 (en) * | 2007-02-14 | 2012-01-31 | The Mathworks, Inc. | Parallel programming computing system to dynamically allocate program portions |
| JP4339371B2 (ja) * | 2007-03-22 | 2009-10-07 | 株式会社ソニー・コンピュータエンタテインメント | 情報処理装置および情報処理方法 |
| US8171485B2 (en) * | 2007-03-26 | 2012-05-01 | Credit Suisse Securities (Europe) Limited | Method and system for managing virtual and real machines |
| US20080244607A1 (en) * | 2007-03-27 | 2008-10-02 | Vladislav Rysin | Economic allocation and management of resources via a virtual resource market |
| US8767535B2 (en) * | 2007-07-11 | 2014-07-01 | Hewlett-Packard Development Company, L.P. | Dynamic feedback control of resources in computing environments |
| US7844954B2 (en) * | 2007-11-06 | 2010-11-30 | Vmware, Inc. | Using branch instruction counts to facilitate replay of virtual machine instruction execution |
| US7979685B1 (en) * | 2007-11-27 | 2011-07-12 | Oracle America, Inc. | Multiple instruction execution mode resource-constrained device |
| US9027003B2 (en) * | 2008-03-31 | 2015-05-05 | Vmware, Inc. | Precise branch counting in virtualization systems |
| US8424082B2 (en) * | 2008-05-08 | 2013-04-16 | Google Inc. | Safely executing an untrusted native code module on a computing device |
| US8219358B2 (en) | 2008-05-09 | 2012-07-10 | Credit Suisse Securities (Usa) Llc | Platform matching systems and methods |
| US20090313160A1 (en) * | 2008-06-11 | 2009-12-17 | Credit Suisse Securities (Usa) Llc | Hardware accelerated exchange order routing appliance |
| US8122441B2 (en) * | 2008-06-24 | 2012-02-21 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
| US8214814B2 (en) * | 2008-06-24 | 2012-07-03 | International Business Machines Corporation | Sharing compiler optimizations in a multi-node system |
| US20100017801A1 (en) * | 2008-07-18 | 2010-01-21 | Vmware, Inc. | Profile based creation of virtual machines in a virtualization environment |
| US9164749B2 (en) * | 2008-08-29 | 2015-10-20 | Red Hat, Inc. | Differential software provisioning on virtual machines having different configurations |
| US20100318977A1 (en) * | 2009-06-10 | 2010-12-16 | International Business Machines Corporation | Jit compilation with continous apu execution |
| US8468524B2 (en) * | 2010-10-13 | 2013-06-18 | Lsi Corporation | Inter-virtual machine time profiling of I/O transactions |
| WO2012103209A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor |
| WO2012103245A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines Inc. | Guest instruction block with near branching and far branching sequence construction to native instruction block |
| WO2012103359A2 (en) * | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Hardware acceleration components for translating guest instructions to native instructions |
| WO2012103373A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Variable caching structure for managing physical storage |
| WO2012103253A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Multilevel conversion table cache for translating guest instructions to native instructions |
| WO2012103367A2 (en) | 2011-01-27 | 2012-08-02 | Soft Machines, Inc. | Guest to native block address mappings and management of native code storage |
| US10042657B1 (en) * | 2011-06-30 | 2018-08-07 | Emc Corporation | Provisioning virtual applciations from virtual application templates |
| US10264058B1 (en) | 2011-06-30 | 2019-04-16 | Emc Corporation | Defining virtual application templates |
| US10686677B1 (en) | 2012-05-18 | 2020-06-16 | Amazon Technologies, Inc. | Flexible capacity reservations for network-accessible resources |
| JP5987501B2 (ja) * | 2012-06-29 | 2016-09-07 | 富士通株式会社 | 分岐アドレス管理プログラム、方法、及び装置 |
| WO2014151652A1 (en) | 2013-03-15 | 2014-09-25 | Soft Machines Inc | Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor |
| EP2972798B1 (en) | 2013-03-15 | 2020-06-17 | Intel Corporation | Method and apparatus for guest return address stack emulation supporting speculation |
| CN103763403B (zh) * | 2013-12-30 | 2017-03-15 | 华为技术有限公司 | 报文流量控制方法及相关装置和计算节点 |
| EP3021221A1 (en) * | 2014-11-13 | 2016-05-18 | Gemalto Sa | Method for optimizing the execution of a platform-independent method by means of a virtual machine of an integrated circuit card |
| US10802854B2 (en) * | 2019-08-30 | 2020-10-13 | Alibaba Group Holding Limited | Method and apparatus for interpreting bytecode instruction stream |
Family Cites Families (47)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4096568A (en) * | 1976-09-24 | 1978-06-20 | Sperry Rand Corporation | Virtual address translator |
| US4177514A (en) * | 1976-11-12 | 1979-12-04 | General Electric Company | Graph architecture information processing system |
| US4285040A (en) * | 1977-11-04 | 1981-08-18 | Sperry Corporation | Dual mode virtual-to-real address translation mechanism |
| JPS55112651A (en) * | 1979-02-21 | 1980-08-30 | Fujitsu Ltd | Virtual computer system |
| EP0124517A1 (en) * | 1982-10-22 | 1984-11-14 | International Business Machines Corporation | Accelerated instruction mapping external to source and target instruction streams for near realtime injection into the latter |
| US5428754A (en) * | 1988-03-23 | 1995-06-27 | 3Dlabs Ltd | Computer system with clock shared between processors executing separate instruction streams |
| CA2002201C (en) | 1988-12-06 | 1999-04-27 | John Charles Goettelmann | Translation technique |
| JP3039953B2 (ja) * | 1989-04-28 | 2000-05-08 | 株式会社日立製作所 | 並列化装置 |
| US5197130A (en) * | 1989-12-29 | 1993-03-23 | Supercomputer Systems Limited Partnership | Cluster architecture for a highly parallel scalar/vector multiprocessor system |
| US5381535A (en) * | 1990-10-24 | 1995-01-10 | International Business Machines Corporation | Data processing control of second-level quest virtual machines without host intervention |
| IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilanguage optimizing compiler using templates in multiple pass code generation |
| IL100987A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Method and apparatus for compiling code |
| JPH0512126A (ja) * | 1991-07-05 | 1993-01-22 | Hitachi Ltd | 仮想計算機のアドレス変換装置及びアドレス変換方法 |
| EP0619899B1 (en) * | 1992-01-02 | 2000-07-19 | Amdahl Corporation | Software control of hardware interruptions |
| US5659690A (en) | 1992-10-15 | 1997-08-19 | Adaptec, Inc. | Programmably configurable host adapter integrated circuit including a RISC processor |
| US5561785A (en) * | 1992-10-29 | 1996-10-01 | International Business Machines Corporation | System for allocating and returning storage and collecting garbage using subpool of available blocks |
| DE69505717T2 (de) * | 1994-03-08 | 1999-06-24 | Digital Equipment Corp., Maynard, Mass. | Verfahren und Vorrichtung zur Feststellung und Durchführung von kreuzweisen Unterprogrammanrufen |
| DE4435183C2 (de) * | 1994-09-30 | 2000-04-20 | Siemens Ag | Verfahren zum Betrieb eines Magnetresonanzgeräts |
| US5819057A (en) * | 1995-01-25 | 1998-10-06 | Advanced Micro Devices, Inc. | Superscalar microprocessor including an instruction alignment unit with limited dispatch to decode units |
| US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
| US5933104A (en) * | 1995-11-22 | 1999-08-03 | Microsoft Corporation | Method and system for compression and decompression using variable-sized offset and length fields |
| US6151618A (en) * | 1995-12-04 | 2000-11-21 | Microsoft Corporation | Safe general purpose virtual machine computing system |
| WO1997027536A1 (en) | 1996-01-24 | 1997-07-31 | Sun Microsystems, Inc. | Instruction folding for a stack-based machine |
| US6065108A (en) | 1996-01-24 | 2000-05-16 | Sun Microsystems Inc | Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same |
| US6301652B1 (en) * | 1996-01-31 | 2001-10-09 | International Business Machines Corporation | Instruction cache alignment mechanism for branch targets based on predicted execution frequencies |
| TW470915B (en) * | 1996-03-12 | 2002-01-01 | Matsushita Electric Industrial Co Ltd | Optimization apparatus which removes transfer instructions by a global analysis of equivalence relations |
| US6381739B1 (en) * | 1996-05-15 | 2002-04-30 | Motorola Inc. | Method and apparatus for hierarchical restructuring of computer code |
| US5859982A (en) * | 1996-06-05 | 1999-01-12 | Sun Microsystems, Inc. | Computer system and method for executing methods of downloaded programs with reduced run-time memory space requirements |
| EP0938703B1 (en) * | 1996-11-13 | 2003-07-02 | Paran, Arik | Real time program language accelerator |
| JPH10232788A (ja) * | 1996-12-17 | 1998-09-02 | Fujitsu Ltd | 信号処理装置及びソフトウェア |
| US5889986A (en) * | 1997-01-28 | 1999-03-30 | Samsung Electronics Co., Ltd. | Instruction fetch unit including instruction buffer and secondary or branch target buffer that transfers prefetched instructions to the instruction buffer |
| US6044222A (en) | 1997-06-23 | 2000-03-28 | International Business Machines Corporation | System, method, and program product for loop instruction scheduling hardware lookahead |
| US6035118A (en) * | 1997-06-23 | 2000-03-07 | Sun Microsystems, Inc. | Mechanism to eliminate the performance penalty of computed jump targets in a pipelined processor |
| US6088786A (en) * | 1997-06-27 | 2000-07-11 | Sun Microsystems, Inc. | Method and system for coupling a stack based processor to register based functional unit |
| US6513156B2 (en) | 1997-06-30 | 2003-01-28 | Sun Microsystems, Inc. | Interpreting functions utilizing a hybrid of virtual and native machine instructions |
| US6078744A (en) * | 1997-08-01 | 2000-06-20 | Sun Microsystems | Method and apparatus for improving compiler performance during subsequent compilations of a source program |
| US5923892A (en) * | 1997-10-27 | 1999-07-13 | Levy; Paul S. | Host processor and coprocessor arrangement for processing platform-independent code |
| US5903761A (en) | 1997-10-31 | 1999-05-11 | Preemptive Solutions, Inc. | Method of reducing the number of instructions in a program code sequence |
| US6170083B1 (en) | 1997-11-12 | 2001-01-02 | Intel Corporation | Method for performing dynamic optimization of computer code |
| US6075935A (en) | 1997-12-01 | 2000-06-13 | Improv Systems, Inc. | Method of generating application specific integrated circuits using a programmable hardware architecture |
| US6158048A (en) * | 1998-05-29 | 2000-12-05 | Intel Corporation | Method for eliminating common subexpressions from java byte codes |
| US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
| US6704925B1 (en) * | 1998-09-10 | 2004-03-09 | Vmware, Inc. | Dynamic binary translator with a system and method for updating and maintaining coherency of a translation cache |
| US6463582B1 (en) * | 1998-10-21 | 2002-10-08 | Fujitsu Limited | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
| GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
| US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
| US6336213B1 (en) * | 1998-12-03 | 2002-01-01 | International Business Machines Corporation | Method and apparatus for dynamic selection of which bytecodes should be just in time compiled |
-
1998
- 1998-04-08 JP JP10096204A patent/JPH11296381A/ja active Pending
-
1999
- 1999-04-07 EP EP99302715A patent/EP0949564A3/en not_active Withdrawn
-
2003
- 2003-03-31 US US10/403,917 patent/US20030233386A1/en not_active Abandoned
- 2003-03-31 US US10/403,600 patent/US6799315B2/en not_active Expired - Fee Related
-
2004
- 2004-07-27 US US10/899,920 patent/US20040268348A1/en not_active Abandoned
Cited By (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2013542500A (ja) * | 2010-09-24 | 2013-11-21 | アーム・リミテッド | 次命令タイプフィールド |
| TWI511077B (zh) * | 2010-09-24 | 2015-12-01 | Advanced Risc Mach Ltd | 下一指令類型欄位 |
| US9977675B2 (en) | 2010-09-24 | 2018-05-22 | Arm Limited | Next-instruction-type-field |
| JP2016103252A (ja) * | 2014-11-27 | 2016-06-02 | 正仁 櫨田 | コンピュ−タ−のcpuの高速化法 |
Also Published As
| Publication number | Publication date |
|---|---|
| US20040268348A1 (en) | 2004-12-30 |
| EP0949564A2 (en) | 1999-10-13 |
| EP0949564A3 (en) | 2006-11-08 |
| US6799315B2 (en) | 2004-09-28 |
| US20030233386A1 (en) | 2003-12-18 |
| US20030191792A1 (en) | 2003-10-09 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JPH11296381A (ja) | 仮想マシン及びコンパイラ | |
| US8893079B2 (en) | Methods for generating code for an architecture encoding an extended register specification | |
| EP0528028B1 (en) | Automatic flowgraph generation for program analysis and translation | |
| EP0529059B1 (en) | Branch resolution via backward symbolic execution | |
| US5317740A (en) | Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies | |
| US5287490A (en) | Identifying plausible variable length machine code of selecting address in numerical sequence, decoding code strings, and following execution transfer paths | |
| US5721854A (en) | Method and apparatus for dynamic conversion of computer instructions | |
| JP3847672B2 (ja) | コンパイラ装置及びコンパイル方法 | |
| US6988183B1 (en) | Methods for increasing instruction-level parallelism in microprocessors and digital system | |
| US8200987B2 (en) | Dynamic object-level code translation for improved performance of a computer processor | |
| TWI377502B (en) | Method and apparatus for performing interpreter optimizations during program code conversion | |
| US8578351B2 (en) | Hybrid mechanism for more efficient emulation and method therefor | |
| US20020056078A1 (en) | Program optimization | |
| US7849292B1 (en) | Flag optimization of a trace | |
| US6324639B1 (en) | Instruction converting apparatus using parallel execution code | |
| JP4841861B2 (ja) | 演算処理装置及びデータ転送処理の実行方法 | |
| US7937564B1 (en) | Emit vector optimization of a trace | |
| JP3915019B2 (ja) | Vliwプロセッサ、プログラム生成装置、および記録媒体 | |
| JPH10254712A (ja) | 多機種対応型情報処理システム、および、方法 | |
| JP4879589B2 (ja) | コンパイラ装置 | |
| JP2010186487A (ja) | コンパイラ装置及びそのシステム |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050401 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050401 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20071113 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071204 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080401 |