(57)【要約】データ処理装置（１）は、ＣＰＵ（２）のネイティブ命令で規定される実行ルーチンにより仮想マシン命令の実行を実現可能にするものであり、規定の条件成立に応答して、ＣＰＵが出力するアドレスを、用意された実行ルーチンのアドレスを利用してネイティブ命令のアドレスに順次変換可能なアドレス変換部（３）を有する。アドレス変換部は、順次変換したネイティブ命令のアドレスに基づいてＣＰＵが実行ルーチンを実行するのに並行して、次に実行すべき仮想マシン命令を読み込んでこれに対応する実行ルーチンのアドレスを用意する。したがって、仮想マシン命令のロード処理及びそれに基づくアドレス計算処理に起因する実行ルーチンによる命令実行処理のオーバーヘッドを低減することができる。これにより、仮想マシン命令で記述された仮想マシンプログラムによるデータ処理を高速化することができる。
2004027600.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵのネイティブ命令で規定される実行ルーチンにより仮想マシン命令の実行を実現可能にするデータ処理装置であって、
規定の条件成立に応答して、前記ＣＰＵが出力するアドレスを、用意された実行ルーチンのアドレスを利用してネイティブ命令のアドレスに順次変換可能なアドレス変換部を有し、
前記アドレス変換部は、順次変換したネイティブ命令のアドレスに基づいてＣＰＵが実行ルーチンを実行するのに並行して、次に実行すべき仮想マシン命令を読み込んでこれに対応する実行ルーチンのアドレスを用意することを特徴とするデータ処理装置。
【請求項２】
前記アドレス変換部は前記規定の条件不成立に応答してＣＰＵからの入力アドレスをそのまま出力することを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項３】
前記規定の条件は、前記ＣＰＵによる所定アドレスの出力であることを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項４】
前記所定アドレスは、前記仮想マシン命令の実行に割り当てられた所定のアドレス空間の先頭アドレスであることを特徴とする請求の範囲第３項記載のデータ処理装置。
【請求項５】
前記実行ルーチンは、その最後にＣＰＵのプログラムカウンタを仮想マシン命令の実行に割当てられた所定のアドレス空間の先頭に戻すリターン処理のネイティブ命令を含むことを特徴とする請求に範囲第４項記載のデータ処理装置。
【請求項６】
前記仮想マシン命令毎にその命令長と実行ルーチンのアドレスとの対応を定義した変換テーブルを有することを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項７】
前記変換テーブルから仮想マシン命令に対応して取得した命令長を保持する第１レジスタと、同じく取得した実行ルーチンのアドレスを保持する第２レジスタとを有することを特徴とする請求の範囲第６項記載のデータ処理装置。
【請求項８】
前記アドレス変換部は、仮想マシン命令をメモリから読み込むためのアドレスを出力する仮想マシンプログラムカウンタを有し、当該仮想マシンプログラムカウンタのインクリメント量は前記第１レジスタの値によって制御可能にされることを特徴とする請求の範囲第７項記載のデータ処理装置。
【請求項９】
前記仮想マシンプログラムカウンタのインクリメントは、実行ルーチンの実行終了タイミングに同期して行われることを特徴とする請求の範囲第８項記載のデータ処理装置。
【請求項１０】
前記アドレス変換部は、実行ルーチンのネイティブ命令をメモリから読み込むための実行ルーチンアドレス生成回路を有し、
前記実行ルーチンアドレス生成回路は、前記第２レジスタが保持する実行ルーチンのアドレスを入力する第３レジスタと、第３レジスタの値とＣＰＵから出力されるアドレスの下位側複数ビットとを加算する加算器を有し、加算器の出力が実行ルーチンのネイティブ命令のアドレスとされることを特徴とする請求の範囲第７項記載のデータ処理装置。
【請求項１１】
前記アドレス変換部は、読み込んだ仮想マシン命令が分岐命令の場合に、分岐先の仮想マシン命令を読み込んでこれに対する実行ルーチンのアドレスを用意することが可能なことを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項１２】
前記アドレス変換部は、読み込んだ仮想マシン命令が条件分岐命令の場合に、分岐先の仮想マシン命令を更に読み込んでこれに対する実行ルーチンのアドレスを別に用意し、分岐の有無に応じて、アドレス変換に利用する実行ルーチンのアドレスを選択することを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項１３】
仮想マシン命令によって構成される仮想マシンプログラムを格納する第１メモリと、仮想マシン命令毎にその実行ルーチンを格納する第２メモリとを含み、１個の半導体チップに形成されたことを特徴とする請求の範囲第１項記載のデータ処理装置。
【請求項１４】
前記第２メモリは、更に仮想マシン命令の命令長を有することを特徴とする請求の範囲第１３項記載のデータ処理装置。
【請求項１５】
前記第１メモリは書換え可能な不揮発性メモリであることを特徴とする請求の範囲第１３項記載のデータ処理装置。
【請求項１６】
入出力回路と、入出力回路に接続されたデータ処理装置とをカード基板に有するＩＣカードであって、
前記データ処理装置は、ＣＰＵのネイティブ命令で規定される実行ルーチンにより仮想マシン命令の実行を実現可能にし、前記ＣＰＵが出力する所定のアドレスを、用意された実行ルーチンのアドレスを利用してネイティブ命令のアドレスに順次変換するアドレス変換部を有し、
前記アドレス変換部は、順次変換したネイティブ命令のアドレスに基づいてＣＰＵが実行ルーチンを実行するのに並行して、次に実行すべき仮想マシン命令を読み込んでこれに対応する実行ルーチンのアドレスを用意することを特徴とするＩＣカード。
【発明の詳細な説明】
【技術分野】  本発明は、仮想マシン命令をＣＰＵのネイティブ命令を用いて実行可能にするデータ処理装置に関し、例えばＩＣカード用のマイクロコンピュータに適用して有効な技術に関する。
【背景技術】  仮想マシン命令をＣＰＵのネイティブ命令を用いて実行可能にする技術、即ち、仮想マシン命令を固有の命令セットをもつＣＰＵ上で実行する技術として、インタプリタソフトウェアによる実現技術がある。インタプリタソフトウェアによる実行方法は、ＣＰＵに仮想命令をロードし、ロードした仮想命令を認識し、それに対応する実行ルーチンの関数をコールすることにより、その実行ルーチンを実行して当該仮想命令で指示される処理を実現する。実行ルーチンには対応する仮想マシン命令の動作がＣＰＵ固有の命令セットに含まれる命令（ＣＰＵのネイティブ命令）で記述してある。一つの実行ルーチンの処理が終了すると、仮想マシン命令をロードする処理にジャンプする。これを繰り返すことにより、仮想マシン命令で記述された仮想マシンプログラムをＣＰＵのネイティブ命令を用いて実行することが可能になる。この技術は、仮想マシン命令のロード、ロードした仮想マシン命令の判定、判定された仮想マシンに応ずる実行ルーチンの関数コールの処理がオーバヘッドとなる。
特開２００１−５０８９０７号及び特開２００１−５０８９０８号公報には、そのような実行ルーチンコールのオーバーヘッドを削減する技術が記載される。即ち、ＣＰＵの命令フェッチ用アドレスの一部を仮想マシン命令ロード用のプログラムカウンタに利用し、ＣＰＵの命令フェッチ用アドレスが出力されると、そのプログラムカウンタを用いて仮想マシン命令をロードし、ロードした仮想マシン命令から実行ルーチンアドレスを計算するハードウェアを採用する。
しかしながら、そのようなハードウェアを用いても、仮想マシン命令のロード処理及び実行ルーチンアドレスの計算処理は、実行ルーチンによる命令実行処理とは直列的に行われる結果、実行ルーチンによる命令実行処理に対して前記ロード処理及びアドレス計算処理は依然としてオーバーヘッドになることに変わり無いことが本発明者によって明らかにされた。
本発明の目的は、仮想マシン命令のロード処理及びそれに基づくアドレス計算処理に起因する実行ルーチンによる命令実行処理のオーバーヘッドを低減することにある。
本発明の別の目的は、仮想マシン命令で記述された仮想マシンプログラムによるデータ処理を高速化することにある。
本発明の上記並びにその他の目的と新規な特徴は本明細書の以下の記述と添付図面から明らかにされるであろう。
【発明の開示】
本発明に係るデータ処理装置は、ＣＰＵのネイティブ命令で規定される実行ルーチンにより仮想マシン命令の実行を実現可能にするものであり、規定の条件成立に応答して、前記ＣＰＵが出力するアドレスを、用意された実行ルーチンのアドレスを利用してネイティブ命令のアドレスに順次変換可能なアドレス変換部を有する。前記アドレス変換部は、順次変換したネイティブ命令のアドレスに基づいてＣＰＵが実行ルーチンを実行するのに並行して、次に実行すべき仮想マシン命令を読み込んでこれに対応する実行ルーチンのアドレスを用意する。要するに、本発明に係るデータ処理装置は、仮想マシン命令に応ずるＣＰＵ命令セットによる実行ルーチンの実行処理に並行して、次の仮想マシン命令のロード処理及びロードされた仮想マシン命令に対応する実行ルーチンのアドレスを用意する処理を行う。したがって、仮想マシン命令のロード処理及びそれに基づくアドレス計算処理に起因する実行ルーチンによる命令実行処理のオーバーヘッドを低減することができる。これにより、仮想マシン命令で記述された仮想マシンプログラムによるデータ処理を高速化することができる。
前記アドレス変換部は前記規定の条件不成立に応答してＣＰＵからの入力アドレスをそのまま出力する。即ち、前記規定の条件が不成立のときＣＰＵは前記実行ルーチン以外のネイティブ命令で記述されたプログラムから命令をフェッチして実行する。
前記規定の条件は、例えば前記ＣＰＵによる所定アドレスの出力である。前記所定アドレスは、例えば前記仮想マシン命令の実行に割り当てられた所定のアドレス空間の先頭アドレスである。このとき、前記実行ルーチンは、例えばその最後にＣＰＵのプログラムカウンタを仮想マシン命令の実行に割り当てられた所定のアドレス空間の先頭に戻すリターン処理のネイティブ命令を含む。実行ルーチンの最後に前記所定のアドレス空間の先頭にリターンしたとき、次に実行すべき仮想マシン命令に対応する実行ルーチンのアドレスが既に用意されており、ＣＰＵが再び前記所定のアドレス空間の先頭アドレスをアクセスする処理を行うことにより、前記用意されている当該アドレスの実行ルーチンの実行に移ることができる。
望ましい形態として、前記仮想マシン命令毎にその命令長と実行ルーチンのアドレスとの対応を定義した変換テーブルを有する。アドレス変換部は読み込んだ仮想マシン命令を検索キーとして変換テーブルから対応する仮想マシン命令の前記命令長と実行ルーチンのアドレスを取得する。前記命令長は次に読み込む仮想マシン命令のアドレス生成に利用する。これは仮想マシン命令の命令語長が命令毎に異なる場合に対応するためである。検索された実行ルーチンのアドレスは当該実行ルーチンの記憶エリアを特定する上位側アドレス等とされ、次の実行ルーチンのネイティブ命令をフェッチするためのアドレス生成に利用される。それらを利用する場合には、検索された命令長を保持する第１レジスタと、同じく検索された実行ルーチンのアドレスを保持する第２レジスタとを有するのが望ましい。例えば、前記アドレス変換部は、仮想マシン命令をメモリから読み込むためのアドレスを出力する仮想マシンプログラムカウンタを有し、当該仮想マシンプログラムカウンタのインクリメント量を前記第１レジスタの値によって制御可能にされる。前記仮想マシンプログラムカウンタのインクリメントは、現在の実行ルーチンの実行終了タイミングに同期して行えば充分である。また、前記アドレス変換部は、実行ルーチンのネイティブ命令をメモリから読み込むための実行ルーチンアドレス生成回路を有し、前記実行ルーチンアドレス生成回路は、前記第２レジスタが保持する実行ルーチンのアドレスを入力する第３レジスタと、第３レジスタの値とＣＰＵから出力されるアドレスの下位側複数ビットとを加算する加算器を有し、加算器の出力を実行ルーチンのネイティブ命令のアドレスとして利用すればよい。
前記アドレス変換部は、読み込んだ仮想マシン命令が分岐命令の場合に、分岐先の仮想マシン命令を読み込んでこれに対する実行ルーチンのアドレスを用意することが可能である。条件分岐の場合には、前記アドレス変換部は、読み込んだ仮想マシン命令が条件分岐命令の場合に、分岐先の仮想マシン命令を読み込んでこれに対する実行ルーチンのアドレスを別に用意し、分岐の有無に応じて、アドレス演算に利用する実行ルーチンのアドレスを選択すればよい。条件成立、不成立の何れに対しても即座に次の実行ルーチンへ移行することができる。
前記データ処理装置は、仮想マシン命令によって構成される仮想マシンプログラムを格納する第１メモリと、仮想マシン命令毎にその実行ルーチンを格納する第２メモリとを含み、それらを１個の半導体チップに形成してよい。また、第１メモリ及び第２メモリはＣＰＵやアドレス変換部とは別チップであってもよい。
前記第１メモリは書換え可能な不揮発性メモリであることが望ましい。仮想マシン命令を用いる主な理由は異なるアーキテクチャのデータ処理装置（プラットフォーム）へのプログラムの移植性である。仮想マシン命令で表現されたプログラムは、仮想マシン命令をデータ処理装置固有の命令セットによる実行ルーチンで代替させることにより、複数種類のデータ処理装置上で容易に実行することができる。同一アーキテクチャを有するデータ処理装置上ではそのような実行ルーチンは仮想マシンプログラムによらず一定とすることが容易であるから、仮想マシンプログラムを格納する第１メモリを書き換え可能にすれば、第２メモリを書き換え可能にしなくてもよい。
上記データ処理装置は、カード基板に入出力回路と共に搭載したＩＣカード等に適用することができる。入出力回路は接触インタフェース形式又は電波を用いる非接触インタフェース形式の何れを採用してもよい。このＩＣカードにおいて、仮想マシンプログラムが外部から暗号化されて供給され、内部で復号されてメモリに格納される場合、前記第１メモリは書換え可能な不揮発性メモリであることが望ましい。
【図面の簡単な説明】  第１図は本発明が適用されたマイクロコンピュータの一例を示すブロック図である。
第２図はＶＩＰＣ部の詳細を例示するブロック図である。
第３図は実行アドレス生成部の詳細を例示するブロック図である。
第４図は初期状態から仮想マシン命令の実行状態に遷移するためのＣＰＵの処理プログラムを例示する説明図である。
第５図は分岐命令以外の実行ルーチンを例示する説明図である。
第６図は可変長命令分の実行ルーチンを例示する説明図である。
第７図はアドレス変換部によるアドレス変換機能を全体的に示す説明図である。
第８図はアドレス変換部によるアドレス変換機能を用いた仮想マシン命令の実行機能を模式的に示す説明図である。
第９図はアドレス変換部を用いたアドレス変換のイメージを示す説明図である。
第１０図は実行ルーチン内に仮想マシン命令をロードする機能を持たせた比較例における仮想マシン命令の実行機能を模式的に示す説明図である。
第１１図は仮想マシン命令の条件分岐命令による処理の高速化を実現するためのＶＩＰＣ部及びＤＩＳＰ部を例示するブロック図である。
第１２図は仮想マシン条件分岐命令による処理の高速化を実現するためのＶＰＣ部を例示するブロック図である。
第１３図は仮想マシン命令が条件分岐命令の場合の実行ルーチンを例示する説明図である。
第１４図は仮想マシン条件分岐命令の分岐処理高速化の方式を採用したマイクロコンピュータを全体的に示すブロック図である。
第１５図は第１図又は第１４図のマイクロコンピュータによる仮想マシン命令の連続実行動作状態を例示するタイミングチャートである。
第１６図は第１５図のタイミングの基になるＣＰＵ、アドレス変換部、及び変換テーブルの接続形態を示すブロック図である。
第１７図はマイクロコンピュータの全体を概略的に示すブロック図である。
第１８図は第１７図のマイクロコンピュータのアドレスマップである。
第１９図にはマイクロコンピュータを適用した接触インタフェース型ＩＣカードの外観図である。
第２０図にはマイクロコンピュータを適用した非接触インタフェース型ＩＣカードの外観図である。
第２１図は実行ルーチンアドレスとＣＰＵのアドレスオフセットから実行ルーチン命令アドレスを生成する手法を例示する説明図である。
【発明を実施するための最良の形態】  第１図には本発明が適用されたマイクロコンピュータの一例が示される。マイクロコンピュータ１は、同図に代表的に示されたＣＰＵ（中央処理装置）２、アドレス変換部（ＶＥＭ）３、仮想マシン命令格納メモリ４、実行ルーチン格納メモリ５、アドレスバスｉａｂ、及びデータバスｉｄｂによって構成される。
前記ＣＰＵ２は所定の命令セットを持ち、命令セットには規定の複数のネイティブ命令が含まれる。ＣＰＵ２は命令制御部ＣＮＴと実行部ＥＸＣを有する。命令制御部ＣＮＴは命令の実行順序を制御すると共に、プログラムカウンタＰＣなどによって指示される命令アドレスから命令レジスタＩＲに命令をフェッチし、フェッチした命令をデコーダＤＥＣで解読して制御信号などを生成する。実行部ＥＸＣは、前記プログラムカウンタＰＣ、汎用レジスタＲＥＧ及び演算器ＡＬＵ等を有し、命令制御部ＣＮＴで生成された制御信号に基づいて汎用レジスタＲＥＧや演算器ＡＬＵ等を動作して、命令を実行する。
マイクロコンピュータ１は、ＣＰＵ２のネイティブ命令で規定される実行ルーチンにより仮想マシン命令の実行を実現可能にするものである。前記仮想マシン命令は、例えばＭＵＬＴＯＳ（登録商標）と称されるＩＣカードオペレーティングシステム上でのアプリケーション実行形式の言語を構成する命令等である。仮想マシン命令による仮想マシンプログラムは前記仮想マシン命令格納メモリ４が保持する。前記実行ルーチンは実行ルーチン格納メモリ５が保持する。特に制限されないが、仮想マシン命令の実行にはＣＰＵ２のアドレス空間の一部が割り当てられる。この空間を仮想マシン命令実行空間と称する。前記アドレス変換部３は、ＣＰＵ２が出力する命令アドレスが仮想マシン命令実行空間の所定アドレス、例えばその先頭アドレスを指すとき、規定の条件成立と判定する。
アドレス変換部３は、前記規定の条件成立の有無を判定すると共に、アドレス変換部３全体の制御を行うコントロール部１０と実行アドレス生成部（実行ルーチンアドレス生成部の一例）１５を有する。前記実行アドレス生成部（ＶＰＣ部）１５は前記規定の条件成立に応答して、前記ＣＰＵ２がバスｃｐ＿ｉａｂに出力する命令アドレスを、実行ルーチン先頭アドレスレジスタＶＰＣに予め用意された実行ルーチンのアドレスを利用してネイティブ命令のアドレスに順次変換してバスｉａｂに出力する。規定の条件不成立のとき、前記実行アドレス生成部１５は、前記ＣＰＵ２がバスｃｐ＿ｉａｂに出力する命令アドレスをそのままバスｉａｂに出力する。ＣＰＵ２は順次変換されたネイティブ命令のアドレスにより実行ルーチン格納メモリ５から読み出されたネイティブ命令をデータバスｉｄｂ、ｃｐ＿ｉｄｂから入力して実行する。アドレス変換部３は、ＣＰＵ２が前記規定の条件成立に応答して仮想マシン命令の実行ルーチンを実行するとき、これに並行して、次に実行すべき仮想マシン命令を仮想マシン命令格納メモリ４から読み込み、これに対応する実行ルーチンのアドレスをレジスタＶＰＣ０（第２レジスタの一例）に用意する。仮想マシン命令格納メモリ４をアクセスするためのアドレスは仮想マシンプログラムカウンタ部（ＶＩＰＣ部）１１が生成して、前記ＶＰＣ部１５経由でアドレスバスｉａｂに出力する。
前記仮想マシンプログラムカウンタ部１１におけるアドレスインクリメント量はインクリメント制御部（ＤＩＳＰ部）１４のレジスタＤＩＳＰ０（第１レジスタの一例）の設定値によって決定される。
仮想マシン命令格納メモリ４からバスｉｄｂに読み出された仮想マシン命令はデータアクセス部１２が入力する。アドレス変換部３は、仮想マシン命令毎に、その命令コード（バイトコード）、命令長（ｄｉｓｐ）、実行ルーチンアドレスの対応を定義した変換テーブル１３を有する。データアクセス部１２は入力した仮想マシン命令の命令コードを検索キーとして、其れに対する命令長と実行ルーチンアドレスを検索する。検索された命令長はレジスタＤＩＳＰ０にセットされ、検索された実行ルーチンアドレスはレジスタＶＰＣ０にセットされる。レジスタＶＰＣ０にセットされた実行ルーチンアドレスは、現在実行されている実行ルーチンの実行終了に続いて、前記規定の条件成立に応答してレジスタＶＰＣに転送され、その実行ルーチンアドレスで規定される実行ルーチンの実行空間のアクセスアドレス（実行ルーチン命令アドレス）の生成に利用される。
特に制限されないが、前記実行ルーチンは、例えばその最後にＣＰＵ２のプログラムカウンタＰＣを仮想マシン命令の実行に割り当てられた所定のアドレス空間（仮想マシン命令実行空間）の先頭に戻すリターン処理のネイティブ命令を含む。実行ルーチンの最後に前記仮想マシン命令実行空間の先頭にリターンしたとき、次に実行すべき仮想マシン命令に対応する実行ルーチンのアドレスが既にレジスタＶＰＣ０用意されており、ＣＰＵ２が再び前記仮想マシン命令実行空間の先頭アドレスをアクセスする処理を行うとき、レジスタＶＰＣにレジスタＶＰＣ０のアドレスが転送され、このレジスタＶＰＣ０が示す実行ルーチンの実行に移ることができる。
第２図にはＶＩＰＣ部１１の詳細が例示される。レジスタＶＩＰＣ０は現在実行している仮想マシン命令のアドレスを示す。レジスタＤＩＳＰ０は現在実行している仮想マシン命令と次の仮想マシン命令までの相対位置を示している。仮想マシン命令と次の仮想マシン命令までの相対位置は、分岐命令以外では現在の実行中の仮想マシン命令の命令長であるため、ＤＩＳＰ０は分岐命令以外では仮想マシン命令の命令長となる。前述のように、ＣＰＵ２による実行ルーチンの実行に並行して、次の命令をＶＩＰＣ０＋ＤＩＳＰ０をアドレスとして仮想マシン命令格納メモリ４をアクセスする。１８で示されるものは加算器である。その次は、ＶＩＰＣ０＋ＤＩＳＰ０→ＶＩＰＣ０としてＶＩＰＣ０を更新することで、次の仮想マシン命令を指定することが可能になる。仮想マシン命令は命令長が命令毎に異なるため、それを実行するときまでＤＩＳＰ０の値が決定しない。そこで前述のように実行ルーチンアドレスと同様にテーブル１３を参照することでＤＩＳＰ０の設定値を決定する。
第３図には実行アドレス生成部（ＶＰＣ部）１５の詳細が例示される。実行アドレス生成部１５は、前記レジスタＶＰＣ０，ＶＰＣ、加算器２０、及びセレクタ２１から成る。前記レジスタＶＰＣ０は次に処理すべき仮想マシン命令の実行ルーチンアドレスを保有する。前記レジスタＶＰＣは現在処理されている仮想マシン命令の実行ルーチンアドレスを保有する。レジスタＶＰＣ０，ＶＰＣが保有する実行ルーチンアドレスは実行ルーチンの先頭アドレスであり、通常、実行ルーチンは複数のネイティブ命令によって構成される。ＣＰＵ２が実行ルーチンを構成するネイティブ命令を順次フェッチできるように、ＣＰＵ２が順次出力する命令フェッチアドレスの下位側複数ビット（アドレスオフセット）ＡｏｆｓをレジスタＶＰＣの値に加算器２０で加算する。前記アドレスオフセットＡｏｆｓのビット数は個々の実行ルーチンのメモリ容量の最大値に応ずるアドレスビット数であればよい。例えば８ビットである。この例に従えば、変換テーブルに格納された実行ルーチンアドレスと仮想マシン命令実行空間における先頭アドレスのアドレスオフセットＡｏｆｓとの和が、実行ルーチンの先頭命令アドレスとなる。例えばこれは仮想マシン命令実行空間の先頭アドレスとなる。斯かる実行ルーチンアドレスとＣＰＵのアドレスオフセットＡｏｆｓから実行ルーチン命令アドレスを生成する手法を整理すると第２１図のようになる。
セレクタ２１は加算器２０から出力される実行ルーチンのネイティブ命令アドレス、ＶＩＰＣ部１１から出力される仮想マシン命令アドレス（ＶＩＰＣ０＋ＤＩＳＰ０）、又はアドレスバスｃｐ＿ｉａｂのアドレスを選択してバスｉａｂに出力する。セレクタ２１の選択動作は前記コントロール部１０で制御される。コントロール部１０は、ＣＰＵ２の条件分岐用フラグ、バスレディ信号、バスアクノリッジ信号、ＣＰＵ２からのアドレス信号を入力している。コントロール部１０は、ＣＰＵ２が出力する命令フェッチアドレスが前記仮想マシン命令実行空間を指定していない場合にはセレクタ２１にアドレスバスｃｐ＿ｉａｂのアドレスを選択させ、前記仮想マシン命令実行空間を指定しているときはセレクタ２１に前記加算器２０の出力アドレスを選択させる。コントロール部１０は、セレクタ２１に加算器２０の出力アドレスを選択させているとき、途中の所定タイミングで、セレクタ２１に、次に処理すべき仮想マシン命令アドレスを選択させる。前記所定のタイミングは、特に制限されないが、実行ルーチンの先頭命令フェッチの次、というような一律のタイミングであってよい。前述の如く、レジスタＶＰＣ０の値の取得は、現在のＣＰＵ２による仮想マシン命令の実行ルーチンの処理と並列に行なわれるため、現在の仮想マシン命令の処理が終了した時点で、次の仮想マシン命令に応ずる実行ルーチンの処理に即座に遷移することができる。
第４図には初期状態から仮想マシン命令の実行状態に遷移するためのＣＰＵ２の処理プログラムが例示される。前述のように仮想マシン命令の実行状態へは仮想マシン命令実行空間へジャンプすることで実現される。初期状態から遷移する場合にはＣＰＵ２がアドレス変換部３のレジスタＶＩＰＣ０、ＤＩＳＰ０，ＶＰＣを先ず初期設定する。第４図の処理プログラムによれば、ＣＰＵ２がレジスタＶＩＰＣ０とレジスタＤＩＳＰ０を初期設定した後、レジスタＶＰＣ０の設定値を求めるコマンドを実行している。ＶＩＰＣ０の値は最初に実行する仮想マシン命令のアドレス、ＤＩＳＰ０は０が設定される。ＶＰＣ０の設定値を求めるコマンドＶＰＣ０ｃｈｇは、ＶＩＰＣ０＋ＤＩＳＰ０のアドレスを出力させ、ＶＩＰＣ０＋ＤＩＳＰ０の位置にある仮想マシン命令をロードし、それに対応する実行ルーチンアドレスの取得しＶＰＣ０に設定し、次の命令までの相対位置を求めＤＩＳＰ０に設定する。その次に、仮想マシン命令実行空間にジャンプし、仮想マシン命令の実行状態に遷移する。
第５図には分岐命令以外の実行ルーチンの例が示される。次の仮想マシン命令のロード及びそれに応ずる実行ルーチンアドレスの取得はアドレス変換部３が行うため、実行ルーチンは実行処理部と仮想マシン命令実行空間の先頭アドレスへのジャンプのみとなる。
第６図には可変長命令及び分岐命令の実行ルーチンの例が示される。可変長命令及び分岐命令の場合、実行時まで命令長が解らないため、アドレス変換部３による仮想マシン命令のロードが不可能になる。アドレス変換部３は次の命令長も変換テーブル１３を参照して得るからである。このため、コマンドにより次の仮想マシン命令までの位置を実行ルーチン内で指定して、処理する。第６図に例示されるように、ＤＩＳＰ０を次の仮想マシン命令もしくは分岐先への相対位置に更新し、ＶＰＣ０の更新コマンドを実行することで、可変長命令及び分岐命令の仮想マシン命令の実行が可能である。仮想マシン命令の分岐命令及び可変長命令の実行ルーチン内でＶＰＣ０の更新コマンドを実行する場合、ＶＩＰＣ０は既にアドレス変換部３により現在の仮想マシン命令の位置に第１図の変換テーブルに定義されている命令長の値が加算されるため、ＶＩＰＣ０は現在の仮想マシン命令の位置を示していない。ＶＰＣ０更新コマンドではＶＩＰＣ０は現在の仮想マシン命令のアドレスを知る必要があるため、アドレス変換部３によってＶＩＰＣ０を更新させないために、当該仮想マシン命令の変換テーブルの命令長を０として変換テーブルに定義する。第７図には前述のアドレス変換部３によるアドレス変換機能が全体的に示される。ＣＰＵ２から出力される命令フェッチアドレスが前記仮想マシン命令実行空間を指定しているとき、アドレス変換部３はアドレスバスｃｐ＿ｉａｂのアドレスを現在処理すべき仮想マシン命令の実行ルーチンを構成するネイティブ命令のアドレスに変換して出力する。これに並行してＤＩＳＰ部１４及びＶＩＰＣ部１１で生成した次の仮想マシン命令アドレスによって仮想マシン命令格納メモリ４をリードし、リードされた仮想マシン命令に基づいてアドレス計算を行って次に実行する実行ルーチンアドレスを予め取得しておく。
第８図には上記アドレス変換部３によるアドレス変換機能を用いた仮想マシン命令の実行機能が模式的に示される。アドレス変換部３を用いた場合には実行ルーチンは実行処理部と仮想マシン命令実行空間の先頭へのジャンプ命令（ｂｒａ  ｎｅｘｔ）のみとされる。次の仮想マシン命令のロードと対応する実行ルーチンアドレスの参照は、アドレス変換部３がＣＰＵ２の命令実行動作と並行して行う。次の実行ルーチンによる処理への遷移は、仮想マシン命令実行空間の先頭にジャンプした時点でＣＰＵ２の出力アドレスを次の実行ルーチンアドレスに変換することで実現する。
第９図にはアドレス変換部３を用いたアドレス変換のイメージが示される。例えば、ＣＰＵ２が仮想マシン命令実行空間（Ｈ’００２１＿００００〜Ｈ’００２１＿０１００）を指していると、そのアドレスは、ロードした仮想マシン命令に対応する実行ルーチンアドレスに変換されてレジスタＶＰＣ０に保持される。実行ルーチンアドレスが仮想マシン命令実行空間の先頭（Ｈ’００２１＿００００）にジャンプすることで、レジスタＶＰＣ０の値がレジスタＶＰＣに転送されて更新される。よって、現在の実行ルーチンの実行処理が終了した時点で、仮想マシン命令実行空間の先頭アドレスにジャンプする操作が行なわれれば、次の実行ルーチンの実行状態に遷移することができる。
第１０図には実行ルーチン内に仮想マシン命令をロードする機能を持たせた比較例における仮想マシン命令の実行機能が模式的に示される。比較例の場合には、実行ルーチン内で仮想マシン命令をロードする。次に、ロードした仮想マシン命令に対応する実行ルーチンのアドレスを、実行ルーチンアドレスが格納されているメモリを参照して求める。次に、現在の仮想マシン命令の実行処理部分を実行し、終了した時点で次の実行ルーチンアドレスへジャンプする。これを繰り返して仮想マシン命令を連続的に実行することができる。但し、仮想マシン命令のロードと其れに対応する実行ルーチンアドレスの取得は、実行ルーチンにおける実行処理部の処理に対して直列的である。したがって、比較例の場合は、上記アドレス変換部３を用いる並列処理に比べて仮想マシン命令の実行効率は低い。
第１１図には仮想マシン命令の条件分岐命令（仮想マシン条件分岐命令）による処理の高速化を実現するためのＶＩＰＣ部１１及びＤＩＳＰ部１４の一例が示される。第１２図には同じ仮想マシン条件分岐命令による処理の高速化を実現するためのＶＰＣ部１５の一例が示される。
仮想マシン命令の条件分岐命令は、条件分岐命令コードの次に分岐先の相対位置（ｔａｒｇｅｔ）が書き込まれている。ＶＩＰＣ部１１は３個のレジスタＶＩＰＣ，ＶＩＰＣ０，ＶＩＰＣ１とそのセレクタ２０を有する。レジスタＶＩＰＣは現在実行中の仮想マシン命令中のオペランド部分のデータをロードするためのアドレスレジスタである。このレジスタＶＩＰＣは、プログラムカウンタＰＣへの動作には影響しないが、仮想マシン命令の実行ルーチンを先頭から実行開始するとき、ＶＩＰＣ０に＋１したオペランドの位置を示す値に更新される。仮想マシン命令の条件分岐命令は、現在の仮想マシン命令のアドレス位置を基準に分岐先を求めるという相対分岐の手法を採用するため、現在の仮想マシン命令のアドレス位置の情報が必要である。条件分岐命令を高速化するために分岐先と次命令の仮想マシン命令を２つロードするため、レジスタＶＩＰＣ０は次の仮想マシン命令コードをロードした時点で、現在の仮想マシン命令のアドレス値が次の仮想マシン命令のアドレス値に更新される。この場合、分岐先仮想マシン命令ロードにおいて、分岐先アドレス計算時に現在の仮想マシン命令のアドレス値を知る必要があるため、現在の仮想マシン命令のアドレス値を保存するレジスタＶＩＰＣ１が追加されている。
前記ＶＩＰＣが保持するアドレスを出力することにより、仮想マシン命令の条件分岐命令中のオペランドデータである分岐のための相対位置（分岐先ｔａｒｇｅｔ）を求めることができ、その値を格納するレジスタＤＩＳＰ１が設けられている。レジスタＤＩＳＰ０，ＤＩＳＰ１はセレクタ２１で選択される。ＶＩＰＣ１＋ＤＩＳＰ１は分岐先の仮想マシン命令のアドレス位置を示しており、この値をアドレスとして出力することで、分岐先の仮想マシン命令をロードすることができる。この際にＶＩＰＣ１を分岐先アドレスで更新する。
これによってロードされた分岐先の仮想マシン命令を検索キーとして前記検索テーブル１３をアクセスし、分岐先の命令長と実行ルーチンアドレスを求め、第１１図のレジスタＤＩＳＰ１と第１２図のレジスタＶＰＣ１に格納される。尚、条件分岐でない場合、例えばジャンプのような無条件分岐の場合には、分岐先の命令長と実行ルーチンアドレスによってレジスタＤＩＳＰ０とレジスタＶＰＣ０を更新すればよい。
分岐の条件が判定された結果、分岐しない場合（分岐フラグＢｆｌｇのディスエーブル状態）は、レジスタＶＩＰＣ０、ＤＩＳＰ０、ＶＰＣ０が選択される。分岐する場合（分岐フラグＢｆｌｇのイネーブル状態）は、レジスタＶＩＰＣ１、ＤＩＳＰ１、ＶＰＣ１が選択されることで、条件分岐による分岐先仮想マシン命令の実行ルーチンの処理に遷移可能にされる。２２で示されるものはＶＰＣ１又はＶＰＣ０のセレクタである。コントロール部１０は、仮想マシン命令の条件分岐命令においての分岐の有無を決定する分岐フラグＢｆｌｇを有している。
上記より、分岐条件が確定する前に、分岐先をロードし、分岐先の命令長と実行ルーチンのアドレスを、ＣＰＵ２の現在の仮想マシン命令の実行処理と並列に取得することができる。
第１３図には仮想マシン命令が条件分岐命令の場合の実行ルーチンが例示される。先ずＶＩＰＣ＋＋→ＤＩＳＰ１の動作を指示するコマンドで相対位置（Ｔａｒｇｅｔ）の値をレジスタＤＩＳＰ１に格納する。次に、ＶＰＣ１の値の更新コマンドを実行し、ＶＩＰＣ１＋ＤＩＳＰ１の値で示されるアドレスにある仮想マシン命令をロードし、命令長をＤＩＳＰ１に、実行ルーチンのアドレスをレジスタＶＰＣ１に格納する。同時に、レジスタＶＰＣ１の値の更新コマンドで分岐条件を設定する。実行処理の後の仮想マシン命令実行空間の先頭番地へのジャンプ時に、ＣＰＵ２の条件フラグ（コンディションコードレジスタの所定ビットの値）によってアドレス変換部３が分岐を判定し、次の処理へ移る。ＣＰＵ２側は分岐条件決定のためのフラグを設定するだけで、実際の分岐の処理はアドレス変換部３によってＣＰＵ２の処理と並行に行うことができるため、その処理を高速化することができる。
第１４図には仮想マシン条件分岐命令の分岐処理高速化の上記方式を採用したマイクロコンピュータを全体的に示す。コントロール部１０の前段に分岐判定部２４が設けられ、ＣＰＵ２から供給されるコンディションコードレジスタ値などを参照して、分岐条件の成立の有無を判定する。前記分岐フラグＢｆｌｇは分岐判定部２４による判定結果にしたがってコントロール部１０が所定のタイミングで変化させる。
第１５図には第１図又は第１４図のマイクロコンピュータ１による仮想マシン命令の連続実行動作状態が例示される。第１５図のタイミングは第１６図に示される接続関係の基で、ＣＰＵ２が仮想マシン命令（Ｖコードとも記す）▲１▼、▲２▼、▲３▼の実行ルーチンを処理する。Ｖ＿０〜Ｖ＿３は仮想マシン命令実行空間のアドレスであり、Ｖ＿０はその先頭アドレスである。
タイミングＴＡに例示されるように、初期状態においてレジスタＶＩＰＣ０にはＶコード▲１▼のメモリアドレスが、ＤＩＳＰ０には次のＶコード▲２▼への相対位置が、ＶＰＣ０にはＶコード▲１▼の実行ルーチンアドレスが、それぞれＣＰＵ２により初期設定されている。
ＣＰＵ２からアドレスバスｃｐ＿ｉａｂに仮想マシン命令実行空間の先頭アドレスＶ＿０が出力されると（タイミングＴＢ）、アドレス変換部３は、それを検出してレジスタＶＰＣ０の値をレジスタＶＰＣに転送し、アドレスバスｉａｂに、レジスタＶＰＣのＶコード▲１▼の実行ルーチンアドレスにアドレスＶ＿０の下位側オフセットを加算した、当該Ｖコード▲１▼の実行ルーチンを構成するネイティブ命令アドレス▲１▼＿０をアドレスバスｉａｂに出力される。データバスｉｄｂにはそのアドレスによって実行ルーチン格納メモリ５からネイティブ命令［▲１▼＿０］が出力される（タイミングＴＣ）。これがバスｃｐ＿ｉｄｂを介してＣＰＵ２にフェッチされ、実行される。以下、ＣＰＵ２からアドレスバスｃｐ＿ｉａｂに仮想マシン命令実行空間のアドレスＶ＿１〜Ｖ＿３が順次出力される毎に、そのＶコードに対応する実行ルーチンの後続のネイティブ命令［▲１▼＿１］〜［▲１▼＿３］が順次ＣＰＵ２に供給される。
第１５図の例では、アドレス変換部３は、実行ルーチンの先頭命令をリードした次に、タイミングＴＣに示されるように、Ｖコード▲１▼のメモリアドレスにレジスタＤＩＳＰ０の相対値を加算してＶコード▲２▼のアドレス（ＶＩＰＣ０＋ＤＩＳＰ０）をバスｉａｂに出力して、次のＶコード▲２▼を仮想マシン命令格納メモリ４から読み込む（タイミングＴＤ）。この間、アドレス▲１▼＿１によるネイティブ命令［▲１▼＿１］のリードは待たされるが、それ以降、ネイティブ命令のリードは順次行なわれていく。ＣＰＵ２がリードしたネイティブ命令を実行するのに並行して、アドレス変換部３は前記リードしたＶコード▲２▼をアドレスとして変換テーブル１３をアクセスし、それによって読み出した命令長によってレジスタＤＩＳＰ０のＶコード▲３▼への相対位置を設定し、実行ルーチンアドレスによってＶＰＣ０にＶコード▲２▼の実行ルーチンアドレスを設定する（タイミング（ＴＥ）。
第１５図ではＶコード▲１▼の実行ルーチンの最後はジャンプ命令［▲１▼＿３］とされ、この最後のジャンプ命令によってＣＰＵ２のプログラムカウンタＰＣが仮想マシン命令実行空間の先頭アドレスＶ＿０に分岐されたとき、既にレジスタＶＰＣ０に取得されているＶコード▲２▼の実行ルーチンのアドレスがレジスタＶＰＣに転送され、今度は▲２▼＿０を先頭とする実行ルーチンを順次ＣＰＵ２が実行可能にされる。
したがって、ＣＰＵ２がＶコードの実行ルーチンを処理しているとき、アドレス変換部３はこれに並行して次のＶコードをメモリ４からフェッチし、フェッチしたＶコードをアドレスとして変換テーブル１３から実行ルーチンの先頭アドレス及び命令長を取得する。したがって、実行ルーチンの最後で仮想マシン命令実行空間の先頭に戻るジャンプ命令を実行することにより、ＣＰＵは必要な実行ルーチンを順次連続的に実行することができる。
第１７図にはマイクロコンピュータ１の全体が概略的に示される。同図に示されるマイクロコンピュータ１は、特に制限されないが、所謂ＩＣカードマイコンと称されるマイクロコンピュータである。同図に示されるマイクロコンピュータ１は、単結晶シリコンなどの１個の半導体基板若しくは半導体チップにＣＭＯＳなどの半導体集積回路製造技術によって形成される。
マイクロコンピュータ１は、前記ＣＰＵ２、前記アドレス変換部３（ＶＥＭ３）、電気的に書換え可能なＥＥＰＲＯＭ３０、マスクＲＯＭ３１、ＲＡＭ（ランダム・アクセス・メモリ）３２、入出力回路（Ｉ／Ｏ）３３、暗号処理回路３４、及び内部バス３５を有する。入出力回路３３はアドレス、データ、コマンドなどのＩ／Ｏ信号、リセット信号、及びクロック信号のインタフェース等に利用される。
第１８図のアドレスマップに例示されるように、ＥＥＰＲＯＭ３０は前記仮想マシン命令メモリ４等に用いられる。マスクＲＯＭ３１は前記実行ルーチン格納メモリ５などに用いられる。アプリケーションプログラムである仮想マシンプログラムは入出力回路３３から入力される。通常入力時には仮想マシンプログラムは暗号化されているので、暗号処理回路で復号され、復号結果がＥＥＰＲＯＭ３０に格納される。マスクＲＯＭ３１には前記実行ルーチンが格納され、仮想マシン命令に応ずる実行ルーチンをＣＰＵ２が実行することによって仮想マシンプログラムの実行が実現される。
第１９図にはマイクロコンピュータ１を適用した接触インタフェース型のＩＣカードが例示される。ＩＣカード４０はカード基板にマイクロコンピュータ１が実装され、樹脂もしくはケーシングで封止されている。表面には外部端子４１が露出される。外部端子４１はマイクロコンピュータ１の入出力回路３３にカード基板上の配線で接続される。
第２０図にはマイクロコンピュータ１を適用した非接触インタフェース型のＩＣカードが例示される。ＩＣカード４１はカード基板にマイクロコンピュータ１と高周波部（ＲＦ部）４２及びアンテナ４３が実装され、樹脂もしくはケーシングで封止されている。アンテナ４３は高周波部４２に接続され、マイクロコンピュータ１の入出力回路３３は高周波部４２とカード基板上の配線で接続される。高周波部４２はマイクロコンピュータ１にオンチップで構成することも可能である。高周波部４２は前記アンテナ４３が所定の電波（例えばマイクロ波）を横切ることによって生ずる誘導電流を動作電源として電源電圧Ｖｃｃを出力し、リセット信号及びクロック信号を生成し、アンテナ４３から非接触で情報の入出力を行う。入出力回路３３は外部と入出力すべき情報をＲＦ部４２とやり取りする。
以上本発明者によってなされた発明を実施例に基づいて具体的に説明したが本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。
前記アドレス変換部でアドレス変換を行う規定の条件は仮想マシン命令実行空間の先頭アドレスの出力に限定されない。例えば先頭アドレスでなくてもよい。また、特定のアドレスで無くてもよく、ＣＰＵのその他特定の出力状態等であってもよい。また、仮想マシン命令格納メモリ及び実行ルーチン格納メモリは不揮発性メモリに限定されることなく、内蔵されたデータを保持可能な状態であれば揮発性メモリで構成されていても良い。また、仮想マシン命令格納メモリは実行ルーチン格納メモリとは別のバス、例えば変換テーブルと同じく専用バスに接続してもよい。実行ルーチンのアクセスが仮想マシン命令のアクセスによって一時的に断たれることを抑制することができる。また、アドレス変換部はメモリマネージメントユニット等と同じくＣＰＵを構成する命令制御部及び実行部と同じユニット内に構成してもよい。また、マイクロコンピュータはＩＣカードだけでなく、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）や携帯電話機等にも適用することができる。
【産業上の利用可能性】  本発明は、仮想マシン命令から成る仮想マシンプログラムのプラットフォームとなるマイクロコンピュータ、データプロセッサ、マイクロプロセッサ、シングルチップデータプロセッサ等と称されるデータ処理装置、更にはそのようなデータ処理装置を搭載したＩＣカード等の電子機器に広く適用することができる。
【図１】
2004027600.tif 000003
【図２】
2004027600.tif 000004
【図３】
2004027600.tif 000005
【図４】
2004027600.tif 000006
【図５】
2004027600.tif 000007
【図６】
2004027600.tif 000008
【図７】
2004027600.tif 000009
【図８】
2004027600.tif 000010
【図９】
2004027600.tif 000011
【図１０】
2004027600.tif 000012
【図１１】
2004027600.tif 000013
【図１２】
2004027600.tif 000014
【図１３】
2004027600.tif 000015
【図１６】
2004027600.tif 000016
【図１４】
2004027600.tif 000017
【図１５】
2004027600.tif 000018
【図１７】
2004027600.tif 000019
【図１８】
2004027600.tif 000020
【図１９】
2004027600.tif 000021
【図２０】
2004027600.tif 000022
【図２１】
2004027600.tif 000023
【国際調査報告】
2004027600.tif 000024
2004027600.tif 000025
2004027600.tif 000026
2004027600.tif 000027