JP2004127255A - 情報処理装置 - Google Patents
情報処理装置 Download PDFInfo
- Publication number
- JP2004127255A JP2004127255A JP2003198852A JP2003198852A JP2004127255A JP 2004127255 A JP2004127255 A JP 2004127255A JP 2003198852 A JP2003198852 A JP 2003198852A JP 2003198852 A JP2003198852 A JP 2003198852A JP 2004127255 A JP2004127255 A JP 2004127255A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- information processing
- version
- group
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】本発明の目的は、中間コード(Javaバイトコード)を命令実行部が解釈可能な命令列に変換する命令変換回路において、仮想計算機(VM)のバージョンに対応できる機構を提供することにある。
【解決手段】中間コードのうち第1命令群に属する命令はハードウェアにより解釈可能な命令に変換し、第2命令群に属する命令はソフトウェアによって変換する。命令変換回路は、中間コードが第1命令群と第2命令群のいずれに属するかを再定義可能に記憶するための記憶領域を有するよう情報処理装置を構成する。
【効果】バージョンの違うVMでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換を行うことができる。また、VMがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能になる。
【選択図】 図1
【解決手段】中間コードのうち第1命令群に属する命令はハードウェアにより解釈可能な命令に変換し、第2命令群に属する命令はソフトウェアによって変換する。命令変換回路は、中間コードが第1命令群と第2命令群のいずれに属するかを再定義可能に記憶するための記憶領域を有するよう情報処理装置を構成する。
【効果】バージョンの違うVMでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換を行うことができる。また、VMがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能になる。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は情報処理装置、特に中間言語を高速に実行するための情報処理装置における中間言語のバージョンの互換性に関する。
【0002】
【従来の技術】
近年、Java言語(Javaは登録商標である)で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Javaとはサン・マイクロシステムズ社により開発されたC++に類似したオブジェクト指向プログラミング言語である。なお、”Java”はサン・マイクロシステムズ社の登録商標である。Java言語が受けいれられる要因として、Java言語で記述されたプログラムは、中間言語の形式で配布され仮想マシンを用いてマシン固有のCPU命令(固有命令)に変換して実行される特徴が挙げられる。実行時において仮想マシンを備えるCPUであれば、CPUの種類に依存せずにJavaアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Javaの実行オブジェクトを生成するためのコンパイルの結果であり、Javaバイトコードまたは省略してバイトコードとも呼ばれる。
【0003】
仮想マシン(以下”VM”と呼ぶ)は、一般にソフトウェア(これを以下”ソフトVM”と呼ぶ)で提供されるが、各バイトコードをインタプリタで解釈実行するために一般には低速である。このため、使用頻度の高いバイトコードをハードウェア実行することで高速化を行うハードウェアアクセラレータが知られている。ハードウェアアクセラレータの例については非特許文献1及びその翻訳である非特許文献2に記載される。
【非特許文献1】
Java to go : Part 1; Microprocessor Report, vol. 15, no. 2, Feb. 2001
【非特許文献2】
「日経エレクトロニクス」, no. 797, pp. 168−176, 2001.6.4
【0004】
【発明が解決しようとする課題】
本願発明者等は、本願に先だってハードウェアアクセラレータでバイトコードを処理する際のVMのバージョンアップについて検討を行った。即ち、ハードウェアアクセラレータは一般には特定のバージョンのVMを前提としてそのVMで定義される全部又は一部の命令をハードウェアで実行することにより高速化を図るものである。従って、一つのハードウェアアクセラレータを作成した後、VMのバージョンが変更されるとハードウェアが正しく動作しなくなる場合が生ずる。これに対応するためにVMのバージョンアップに合わせてハードウェアを変更するとハードウェアの開発効率が良くない。
【0005】
VMの仕様はサン・マイクロシステムズ社により決定される。サン・マイクロシステムズ社はJava2として複数の仕様を公開しており、そのうち組み込み機器向けの仕様はJ2MEである。この仕様にはさらに、ネットワーク情報機器用のCDCと、CPUやメモリに制限のある携帯型ネットワーク情報機器用のCLDCの2つがある。両者の基本的なバイトコードのセットは同一である。
【0006】
基本バイトコードとは別に、JavaVMの実装依存の仕様として、拡張バイトコードがある。これは基本バイトコードの割り当てであまっているコード空間に新たに拡張バイトコードを割り当てて、Java実行中に、複雑なバイトコードを単純な拡張バイトコードに置き換えることが認められている。拡張バイトコードはVMの仕様として定められているのではなく、独自に処理内容を決められるが、Sunが示す参照実装が事実上の標準となっている。CDCとCLDCでは拡張バイトコードのセットが異なる。さらに、それぞれの参照実装のマイナーバージョンアップでも、拡張バイトコードの処理内容が変わったり、同じ処理をするバイトコードでもオペコードの割り当てが変わってしまう。これらのVMの差異はソフトウェアインタプリタでは容易に改造できるが、ハードウェアで拡張バイトコードの実行をサポートしようとすると、VMがバージョンアップする毎に新たなハードウェアを作らなければ対応できない。これではハードウェア開発の効率が良くないことに本願発明者等は気がついた。このほか、Javaの仕様にあるフィールド、配列の構造がVMのバージョンによって異なる場合があり、VMにあわせてハードウェアを作成するのも効率が悪い。
【0007】
本発明の目的は、VMによって定義される命令をハードウェアで実行する際にVMのバージョンに柔軟に対応することができる情報処理装置を提供することにある。
【0008】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、第1命令セットを固有命令として実行するための命令実行部と、第2命令セットのうち第1命令群に属する命令を前記第1命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、前記情報処理装置は、前記第2命令セットのうち前記命令変換回路で変換しない第2命令群に属する命令が入力された場合には、ソフトウェアによって前記第1命令セットに変換して前記命令実行部で実行し、前記命令変換回路は、前記第2命令セットのうち前記第1命令群と前記第2命令群の何れかに属するかを再定義可能に記憶するための第1記憶領域を有するよう情報処理装置を構成する。
【0009】
更に望ましくは、前記命令変換回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理を行うための制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第2記憶領域を第1記憶領域に追加して又は代替して設けるようすると良い。
【0010】
更に望ましくは、前記命令変換回路は、前記第2命令セットにおいて定義される定義される配列やフィールドをメモリ上に配置するための情報を再定義可能に記憶する第3記憶領域を第1記憶領域に追加して又は代替して設けるようすると良い。
【0011】
【発明の実施の形態】
以下、本発明に係る情報処理装置及びシステムの好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
(1)システムの構成
図1に、本発明の情報処理システムの実施例を示す。図1のプロセッサチップCPU4は、一般的なプロセッサと同様、Javaバイトコードとは異なるプロセッサ固有の命令セット(固有命令)を持っている。特に制限されないが、この実施例のCPU4には、フェッチ部(フェッチ回路)41、命令変換部(命令変換回路)2、デコード部(命令デコード回路)42、命令実行部(命令実行回路)43が、1個の半導体基板上に形成されている。メモリ装置3は、Javaバイトコード、ソフトVM、フレーム等Javaを実行するための情報を保持している。更に、メモリ装置3は、固有命令で記述されたアプリケーションソフトウェアやソフトウェアの実行のためのワーク領域なども含む。尚、メモリ装置3は、キャッシュメモリのようなSRAM、メインメモリとなるべきDRAM、又はそのキャッシュメモリとメインメモリの両方を持つものを想定しており、各々がCPU4と同一チップであっても別々のチップであっても構わない。
【0012】
メモリ装置3から通常のCPU4の固有命令が供給された場合は、命令変換部2を介さない経路(41→42→43)で実行される。一方、メモリ装置3からバイトコードが供給された場合は、フェッチ部41を通り、命令変換部2にバイトコードが入力され、入力されたバイトコードは固有命令列に変換され、デコード部42、実行部43に送られ実行される。
【0013】
CPU4に変換回路2が命令変換を行うサポートバイトコード(第1命令群)が入力された場合、バイトコード変換テーブル21で、Javaバイトコードから1の固有命令又は固有命令列に変換される。変換回路2が命令変換を行わずソフトVMで命令変換を行う非サポートコード(第2命令群)が入力された場合、制御回路22で検知し、バイトコード変換テーブル21からソフトVMへ切り替えるための命令列が出力され、この命令列が実行されてソフトVMへ処理が移る。
【0014】
以上のように、本願発明ではサポートバイトコードと非サポートバイトコードに応じて、命令変換回路とソフトVMが選択的に処理を行う。ここで、命令変換回路は、ハードウェアであるために、特定のバージョンのVMを前提として設計される。ところがVMのバージョンが変更されると、定義の変更のために変更されたバージョンのVMでコンパイルしたバイトコードは、古いバージョンのVMで作り込んでしまった命令変換回路では所望の動作をしない場合が生ずる。そこで、本願発明者等はVMのバージョン変更の内容について検討した結果、過去及び将来のVMの変更に対応するには以下詳述するパラメータを再定義可能に記憶する設定レジスタ1によって対応することを見いだした。
【0015】
即ち、この設定レジスタ1の値を再設定することによりVMのバージョン変更に柔軟に対応できることになる。典型的にはVMバージョン1を前提として命令変換回路を作成した場合には、そのバージョン1に対応するソフトVMと設定レジスタ1の第1パラメータテーブルをメモリ装置3に記憶する。ここでCPU2に電源が投入されて初期化を行う際に第1パラメータがメモリ装置から設定レジスタ1にロードされ命令変換回路の初期設定がなされる。このようして命令変換回路はバージョン1のソフトVMとセットになって動作する。 尚、第1パラメータは特別な変更を指示しなければ設定レジスタ1にデフォルト値として初期値で設定するようにしても良い。
【0016】
次にVMのバージョンが変更となりバージョン2になった場合には、バージョン1に代えてバージョン2のソフトVMとそれに対をなす第2パラメータテーブルをメモリ装置に記憶する。この場合は命令変換回路はバージョン2のソフトVMとセットになってバージョン2のVMでも動作させることができるようになる。
【0017】
更に本願発明では各々バージョン1とバージョン2の両者でコンパイルされた2つのバイトコードアプリケーションが存在している場合でも、各バージョンのソフトVMとパラメータテーブルを対として切り替えることで実行可能となる。
【0018】
ここで、設定レジスタ1は少なくとも実行バイトコード指定レジスタ(第1記憶領域)11を含み、更に拡張バイトコード指定レジスタ(第2記憶領域)12を含むと好ましく、更に配列/フィールドオフセットレジスタ(第3記憶領域)13を含むと好ましい。以下それぞれのレジスタの役わりを詳細に示す。
(2)サポートバイトコードの指定方法
レジスタが実行バイトコード指定レジスタ11は、ハードウェアで実行するバイトコードを指定するレジスタである。バイトコードごとに、全オペコード分のレジスタを用意する方法と、カテゴリ毎にレジスタを用意する方法が考えられる。ここでは、特に制限されないがレジスタサイズが小さくて済む後者の方式を好ましい実施例として示す。
【0019】
図2に実行バイトコード指定レジスタ11の詳細を示す。本願では約230のバイトコードをとくに制限されないがローカル変数アクセス命令群、配列アクセス命令群、32ビット演算命令群、64ビット演算命令群、浮動小数点命令群、スタック操作命令群、サブルーチンジャンプ/リターン命令群、フロー制御命令群などを含む14のカテゴリに分類した。それぞれのカテゴリに1つまたは複数のバイトコードが含まれる。カテゴリ1実行指定レジスタCAT1_REGは1番目のカテゴリのバイトコードをサポート命令として扱うか、非サポート命令として扱うかを”1”又は”0”で指定する1ビットのレジスタである。他のカテゴリについても同様にCAT2_REGからCAT14_REGで指定する。
【0020】
図3にバイトコード指定レジスタ11の設定と、バイトコードがハードウェアで実行されるかソフトVMで実行されるかの例を表で示す。バイトコードBCとしてBC1、BC2、...は、それぞれカテゴリ1CAT1、カテゴリ2CAT2...に分類されていたと考える。この場合第1パラメータテーブルPARA1を実行バイトコード指定レジスタ11に設定した場合(CAT1_REG=1, CAT2_REG=1, CAT3_REG=0,...)には、図3の例示範囲ではBC5がSの記号で示すようにソフトVMで実行される。一方、BC1からBC4は、Hの記号で示すようにハードウェアで実行されるように設定される。
【0021】
また、第2パラメータテーブルPARA2を実行バイトコード指定レジスタ11に設定した場合(CAT1_REG=1, CAT2_REG=0, CAT3_REG=1,...)には、図3の例示範囲ではBC2とBC4がソフトVMで実行され、BC1、BC3、BC5はハードウェアで実行されるように設定される。
【0022】
実行バイトコード指定レジスタ11に設定する典型例は以下の通りである。プロセッサがシステムに搭載後にVMのバージョンが変わり、例えば配列の構造が変わった場合、配列アクセスに関わるバイトコードが属するカテゴリのカテゴリ実行指定ビットを非サポート命令として扱うように設定する。このように設定すると、制御回路22が配列アクセスのバイトコードを非サポートバイトコードとして検知し、バイトコード変換テーブル21がソフトVMに切り替えるための命令列を発行し、ソフトVMへ操作が移ることで,このバイトコードはソフトVMで実行される。このように、VMのバージョンの差異により配列の構造が合わなくなった場合には、非サポート命令として扱うことで、配列構造の異なったVMにも対応することができる。その他,浮動小数の表現方法がVMのバージョンで異なったり、エンディアンの仕様で64ビット演算が行えなくなった場合なども、該当するカテゴリ実行指定ビットを非サポート命令として扱うように設定し、ソフトVMに処理を渡すことで対応することができる。
【0023】
本実施例ではカテゴリ毎にレジスタを用意する方法を実施例としてしめしたが、それに限定されることはない。即ち、Javaバイトコードはオペコードの数は約230程度であり、1つのオペコードについて1ビットのレジスタを割り当てても230ものラッチレジスタを要することとなるため命令変換回路の回路規模を増大してしまい、カテゴリ毎に記憶すると回路規模が低減できる。しかし、一般にオペコードの数が少ない命令セットを扱う場合には前オペコード分にレジスタを方法をとっても回路規模は大きな問題とはならない。
(3)拡張バイトコードの指定方法
図5に、拡張バイトコードの処理内容やオペコードの番号の割り当てがVMのバージョンによって異なる様子を示す。まず拡張バイトコードとは、Javaにおいてiloadやiadd等の基本命令の他に、基本命令を高速に実行するため、定義されているgetfield_quick等のVMに特有の拡張命令を指定するバイトコードある。図5において、まず処理内容が異なる例として、拡張バイトコードの一つEXBC5はバージョン1のVM1ではオペコード234に割り当てられていたとする。これに対して、バージョン2のVM2では拡張バイトコードEXBC5はサポートされないためNONで示している。次にオペコードの番号の割り当てがバージョンにより異なる例を示す。即ち拡張バイトコードEXBC1の処理は、VM1では230番に割り当てられるのに対して、VM2では235番に割り当てられている。このバージョンの差を解消するためのレジスタが、拡張バイトコードマップレジスタ12である。
【0024】
図4に拡張バイトコード指定レジスタ12の詳細を示す。このレジスタ12は、特定VMバージョン指定レジスタVM_VER_REG、オペコードオーバーライドイネーブル指定レジスタOVREN_REG、オペランドフォーマット指定レジスタOPFM_REG、拡張バイトコード指定レジスタEXBC1_REG, EXBC2_REG, EXBC3_REG, ...を含む。
【0025】
特定VMバージョン指定レジスタVM_VER_REGは、例えばバージョン1とバージョン2のVMが既に存在してる場合に”0”によりバージョン1を指定し、”1”によりバージョン2を指定するものである。更に多くのバージョンが存在する場合にはこのVM_VER_REGのビット幅を拡張することでバージョンの指定をすればよい。ここで、制御回路22は、製造時に確定しているバージョン1とバージョン2の両方のVMに対する拡張命令のオペコードと処理を予めが記憶してものとする。従って、特定VMバージョン指定レジスタVM_VER_REGは、制御回路22に対してバージョン1とバージョン2のいずれの対応関係の処理を行うかを指定するスイッチとして働く。
【0026】
これに対して、プロセッサがシステムに搭載後にVMのバージョンが変わり、想定していた拡張バイトコードのオペコードが合わなくなった場合、オペコードオーバーライドイネーブル指定レジスタOVREN_REGを、イネーブルに設定にし、拡張バイトコード指定レジスタEXBC1_REGには、拡張バイトコードEXBC1の処理に合ったオペコードを設定する。例えば図5の例で、EXBC1はバージョン1では230、バージョン2では235である。このバージョン1と2の切り替えは、上述の通りVMバージョン指定レジスタVM_VER_REGで変更できる。これに対して、バージョン3で更に変更されEXBC1に240が割り当てられた場合にOVREN_REGを”1”に設定し、EXBC1_REGに”240”を設定する。他の拡張バイトコード指定レジスタ EXBC2_REG, EXBC3_REG, ..も同様に指定する。命令変換部2に入力されたバイトコードが拡張バイトコード指定レジスタに設定されたオペコードと一致するかを制御回路22が検知し、一致すると対応する命令列をバイトコード変換テーブル21が出力し、一致しない場合は非サポート処理に移るための命令列を出力して、ソフトVMに処理を渡す。
【0027】
オペランドフォーマット指定レジスタOPFM_REGは、フィールド系拡張バイトコードのオペランドフォーマットの指定方法を変更するために使用する。フィールドにアクセスするバイトコードのオペランドは、バージョンに応じて変更になる場合があることに対応するためである。フィールド系拡張命令は、オペコードが1バイトとそれに連続する2バイトのオペランドの合計3バイトで指定される。しかし、後ろ2バイトのオペランドは(1)第1オペランド有効/第2オペランド有効、(2)第1オペランド有効/第2オペランド無効、(3)第1オペランド無効/第2オペランド有効となるような変更が想定される。オペランドフォーマット指定レジスタOPFM_REGに”00”、”01”、”10”のような値を指定することにより(1)〜(3)のようなオペランドフォーマットの変更が可能とされる。尚、OPFM_REGは、OVREN_REGの設定がイネーブルとされるときに設定を必要とし、デフォルト値を利用する場合には設定を必要としない。
【0028】
以上の通り、拡張バイトコードの詳細なバージョン変更に対応する手段を示したが、さらに拡張バイトコードがVMのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ11を非サポート命令に設定し、ソフトVMで対応する。従って、VMのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ11のほうがより本質的である。実行バイトコード指定レジスタ11の意義は、更に、ハードウェア性能の維持と言う点にある。
(4)配列/フィールドオフセットの指定方法
配列やフィールドの構造がVMのバージョンにより違う構造である場合がある。現状のVMは配列の先頭にヘッダ部分があり、ヘッダ部分のオフセットを足したアドレスでデータにアクセスする。今後、ヘッダ部分HEADERのオフセットがVMによって変更される事もあり得ると考え、配列/フィールドオフセットレジスタ13には図6に示すように、配列先頭オフセットレジスタATOP_REGを設けて、オフセットを変更できる仕様とした。また、配列長LENは配列のヘッダ部分の中にあり、配列長のフィールドまでのオフセットを配列長フィールドオフセットレジスタALEN_REGで設定する。これらの設定すると、バイトコード変換テーブル21が、その設定に対応した命令列を出力する。フィールドに対しても同様で、フィールド先頭オフセットレジスタFTOP_REGを設けて、特殊命令テーブル23から対応した命令列を発行する。なお,Javaにおける配列とフィールドの概念図を図7に示す。図において(A)が配列オフセット指定レジスタ、(B)が配列長フィールドオフセット指定レジスタ、(C)がフィールドオフセット指定レジスタのそれぞれの設定内容を示している。
【0029】
さらにVMのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ11を非サポート命令に設定し、ソフトVMで対応する。従って、VMのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ11のほうがより本質的である。配列/フィールドオフセットレジスタ13の意義は、更に、ハードウェア性能の維持と言う点にある。
【0030】
以上サポートバイトコードの指定方法、拡張バイトコードの指定方法、配列/フィールドオフセットの指定方法に分類し対応するレジスタ11〜13を例示して示した。レジスタ11〜13の分類及びその中の詳細なレジスタのまとまりは便宜上のものであり、結果的に本願のレジスタに対応する情報の記憶領域があれば本願の目的は達成できるのでそのような改変を行ってもよい。ここで示したレジスタは、揮発性の読み書き可能なラッチを想定しているが、一般には再定義可能な記憶領域があればよい。
(5)スタックトップ指定方法
Javaでは,変数をスタックに蓄えてから演算を行なう。レジスタ数の限られた一般の汎用CPUでスタック構造を実現する場合,メモリ内にデータ領域を割り当て,メモリとレジスタ間でデータを転送することで実現する。この場合、データをメモリ内に積み重ね、スタックトップポインタと呼ばれるメモリに積み重ねた複数のデータの先頭のアドレスを覚えることで効率を良く実現できる。Javaの変数でスタック構造が採用されたのは,スタック構造により汎用レジスタを1つ占有するだけで済み,汎用レジスタ数の異なるCPUに対して容易に対応可能なためである。ただし、VMのバージョンによって、スタックトップポインタの構造が異なる場合がある。即ち、バージョン1(VM1)では、スタックトップポインタが示すアドレスには無効なデータ(invalid)が格納されており、その次のアドレスから有効なデータが格納される。それに対し、バージョン2(VM2)では、スタックトップポインタが示すアドレスから有効なデータが保持される。
この相違は、同じバイトコードが入力された場合であってもVMのバージョンによってCPUの処理が異なってしまうことを意味することを本願発明者は見出した。即ち、汎用レジスタからデータをメモリに転送する際又はメモリから汎用レジスタにデータを転送する際に、転送先又は転送元のメモリのアドレスをバージョンにより変更しなければならない。そこで、本願発明者等は、命令変換部BTから出力される命令をVMのバージョンにより切り換える構成を採用した。具体的には、汎用レジスタR0からメモリに転送する際には、バージョン1(VM1)では、MOV R0,@R10+という『ポストインクリメント型データ転送命令』を出力し、バージョン2(VM2)では、MOV R0,@+R10という『プレインクリメント型データ転送命令』を出力するように構成した。ここで、@R10+、@+R10は、転送先のメモリのアドレスを示しているおり,符号はメモリの増加を,符号の位置はポスト/プレを示している。これによりスタックトップポインタの構造が異なるバージョンのVMに対応することを可能となる。
命令の切り換えの方法の1つの実施例について図10を用いて説明する。ここで、バージョン1に対応する命令MOV R0,@R10+とバージョン2に対応する命令MOV R0,@+R10とを比較すると、転送先のメモリのアドレスのみが相違する。従って、バイトコード変換テーブルTABLEにバージョン1又はバージョン2のどちらか一方の命令を格納し、置換部(置換回路)CONVにおいて、バイトコード変換テーブルTABELから読み出された情報を変換する構成とすることによりバージョン1及びバージョン2に対応することが可能となる。置換部CONVは、図4において示したバージョン情報を格納しているレジスタである特定バージョン指定レジスタVM−VER_REGの情報に従って命令を置換する。このように構成することにより、それぞれのバージョンに対応する命令をバイトコード変換テーブルに格納する場合と比較して、バイトコード変換テーブルを小さくすることが可能となる。なお、置換部(置換回路)CONVにおいて、変換するか否かは、制御信号CONTにより制御される。制御信号CONTは、汎用レジスタからメモリへの置換が必要な際に入力される。また、図10では、特定バージョン指定レジスタVM_VER_REGによりVMのバージョンに対応させたが、新たにスタックトップポインタレジスタを設けてもよい。この場合、VMのバージョンによらず、スタックトップポインタの構造のみに対応するのでシステムへの適用が容易となる。更には、バイトコード変換テーブルTABLEには、バージョン1とバージョン2の共通部分のみを格納し、相違部分を特定バージョン指定レジスタVM_VER_REGの情報によって置換部CONVで付加する構成でもよい。
【0031】
図8は本発明の第2の実施例である。本実施例はCPU4の外部に命令変換部2がありこの命令変換部が固有命令を実行するCPUとは独立の半導体チップに形成されている点が図1の実施例とは異なる。命令変換部が別チップなので既存のCPUチップに適用できる利点がある。設定レジスタ1は、第1の実施例と同様であり、図1の実施例と同様にVMのバージョンの違いに対応できる。
【0032】
図9に本発明の好適な応用例としての携帯情報システムの構成図を示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ(RF)部83、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ(BASEBAND)部81、主記憶(MEM)82である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ10を備えるCPU1を内蔵するマイクロプロセッサ(PROCESSOR)70において、インターフェース(I/F)73を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース(PERIPHERAL)74を介してカメラ(CMR)75、メモリカード(CARD)76、音源IC(SOD)77、キー(KEY)78が接続され、外部バスを介して液晶(LCD)79、主記憶(MEM)80が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【0033】
本システム構成例では、例えば、次のようにメモリが使用される。Javaアプリケーションは、外部サーバーよりアンテナ83を介して配給され、ベースバンドプロセッサ81を使用し、主記憶82に格納される。ソフトVMは主記憶80か主記憶82のどちらに配置してもよい。ソフトVMのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、バージョンの異なるVMでコンパイルされたJavaアプリケーションがダウンロードされた場合でもハードウェアアクセラレータを利用して高速に実行できるため、携帯情報システムの付加価値を高めることができる。
【0034】
以上の本願発明はJavaを例にして説明したが、それに限られることはなく、同様の中間言語及びVMを固有命令を命令セットで実行するプロセッサに対するハードウェアアクセラレータに適用できる。
【0035】
【発明の効果】
上記手法により、異なるVMでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換することができる。また、VMがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能である。
【図面の簡単な説明】
【図1】本発明によるプロセッサの概略ブロック図。
【図2】実行バイトコード指定レジスタのブロック図。
【図3】実行バイトコード指定レジスタの設定例。
【図4】拡張バイコードマップレジスタのブロック図。
【図5】VMバージョンの違いによる拡張バイトコードの割り当ての違いの例。
【図6】配列/フィールドオフセットレジスタのブロック図。
【図7】配列/フィールドの構造。
【図8】本発明によるアクセラレータの概略ブロック図。
【図9】本発明による携帯システムの概略ブロック図。
【図10】本発明による命令置換を実現する概略ブロック図。
【符号の説明】
1…設定レジスタ(RE)、2…命令変換部(BT)、3…メモリ装置(MEM)、4…プロセッサ(CPU)、11…実行バイトコード指定レジスタ(REG1)、12…拡張バイトコード指定レジスタ(REG2)、13…配列/フィールドオフセットレジスタ(REG3)、21…バイトコード変換テーブル(TABLE)、22…制御回路(CTRL)、41…フェッチ部(FE)、42…デコード部(DE)、43…実行部(EX)。
【発明の属する技術分野】
本発明は情報処理装置、特に中間言語を高速に実行するための情報処理装置における中間言語のバージョンの互換性に関する。
【0002】
【従来の技術】
近年、Java言語(Javaは登録商標である)で記述されたアプリケーションが携帯電話や携帯端末で急速に広がっている。Javaとはサン・マイクロシステムズ社により開発されたC++に類似したオブジェクト指向プログラミング言語である。なお、”Java”はサン・マイクロシステムズ社の登録商標である。Java言語が受けいれられる要因として、Java言語で記述されたプログラムは、中間言語の形式で配布され仮想マシンを用いてマシン固有のCPU命令(固有命令)に変換して実行される特徴が挙げられる。実行時において仮想マシンを備えるCPUであれば、CPUの種類に依存せずにJavaアプリケーションを実行することができるので移植性が高い。なお、中間言語とは、Javaの実行オブジェクトを生成するためのコンパイルの結果であり、Javaバイトコードまたは省略してバイトコードとも呼ばれる。
【0003】
仮想マシン(以下”VM”と呼ぶ)は、一般にソフトウェア(これを以下”ソフトVM”と呼ぶ)で提供されるが、各バイトコードをインタプリタで解釈実行するために一般には低速である。このため、使用頻度の高いバイトコードをハードウェア実行することで高速化を行うハードウェアアクセラレータが知られている。ハードウェアアクセラレータの例については非特許文献1及びその翻訳である非特許文献2に記載される。
【非特許文献1】
Java to go : Part 1; Microprocessor Report, vol. 15, no. 2, Feb. 2001
【非特許文献2】
「日経エレクトロニクス」, no. 797, pp. 168−176, 2001.6.4
【0004】
【発明が解決しようとする課題】
本願発明者等は、本願に先だってハードウェアアクセラレータでバイトコードを処理する際のVMのバージョンアップについて検討を行った。即ち、ハードウェアアクセラレータは一般には特定のバージョンのVMを前提としてそのVMで定義される全部又は一部の命令をハードウェアで実行することにより高速化を図るものである。従って、一つのハードウェアアクセラレータを作成した後、VMのバージョンが変更されるとハードウェアが正しく動作しなくなる場合が生ずる。これに対応するためにVMのバージョンアップに合わせてハードウェアを変更するとハードウェアの開発効率が良くない。
【0005】
VMの仕様はサン・マイクロシステムズ社により決定される。サン・マイクロシステムズ社はJava2として複数の仕様を公開しており、そのうち組み込み機器向けの仕様はJ2MEである。この仕様にはさらに、ネットワーク情報機器用のCDCと、CPUやメモリに制限のある携帯型ネットワーク情報機器用のCLDCの2つがある。両者の基本的なバイトコードのセットは同一である。
【0006】
基本バイトコードとは別に、JavaVMの実装依存の仕様として、拡張バイトコードがある。これは基本バイトコードの割り当てであまっているコード空間に新たに拡張バイトコードを割り当てて、Java実行中に、複雑なバイトコードを単純な拡張バイトコードに置き換えることが認められている。拡張バイトコードはVMの仕様として定められているのではなく、独自に処理内容を決められるが、Sunが示す参照実装が事実上の標準となっている。CDCとCLDCでは拡張バイトコードのセットが異なる。さらに、それぞれの参照実装のマイナーバージョンアップでも、拡張バイトコードの処理内容が変わったり、同じ処理をするバイトコードでもオペコードの割り当てが変わってしまう。これらのVMの差異はソフトウェアインタプリタでは容易に改造できるが、ハードウェアで拡張バイトコードの実行をサポートしようとすると、VMがバージョンアップする毎に新たなハードウェアを作らなければ対応できない。これではハードウェア開発の効率が良くないことに本願発明者等は気がついた。このほか、Javaの仕様にあるフィールド、配列の構造がVMのバージョンによって異なる場合があり、VMにあわせてハードウェアを作成するのも効率が悪い。
【0007】
本発明の目的は、VMによって定義される命令をハードウェアで実行する際にVMのバージョンに柔軟に対応することができる情報処理装置を提供することにある。
【0008】
【課題を解決するための手段】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば、下記の通りである。すなわち、第1命令セットを固有命令として実行するための命令実行部と、第2命令セットのうち第1命令群に属する命令を前記第1命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、前記情報処理装置は、前記第2命令セットのうち前記命令変換回路で変換しない第2命令群に属する命令が入力された場合には、ソフトウェアによって前記第1命令セットに変換して前記命令実行部で実行し、前記命令変換回路は、前記第2命令セットのうち前記第1命令群と前記第2命令群の何れかに属するかを再定義可能に記憶するための第1記憶領域を有するよう情報処理装置を構成する。
【0009】
更に望ましくは、前記命令変換回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理を行うための制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第2記憶領域を第1記憶領域に追加して又は代替して設けるようすると良い。
【0010】
更に望ましくは、前記命令変換回路は、前記第2命令セットにおいて定義される定義される配列やフィールドをメモリ上に配置するための情報を再定義可能に記憶する第3記憶領域を第1記憶領域に追加して又は代替して設けるようすると良い。
【0011】
【発明の実施の形態】
以下、本発明に係る情報処理装置及びシステムの好適な実施の形態について、添付図面を参照しながら説明する。特に制限されないが、実施例の各ブロックを構成する回路素子は、特に制限されないが、公知のCMOS(相補型MOSトランジスタ)やバイポーラトランジスタ等の半導体集積回路技術によって、単結晶シリコンのような1個の半導体基板上に形成される。
(1)システムの構成
図1に、本発明の情報処理システムの実施例を示す。図1のプロセッサチップCPU4は、一般的なプロセッサと同様、Javaバイトコードとは異なるプロセッサ固有の命令セット(固有命令)を持っている。特に制限されないが、この実施例のCPU4には、フェッチ部(フェッチ回路)41、命令変換部(命令変換回路)2、デコード部(命令デコード回路)42、命令実行部(命令実行回路)43が、1個の半導体基板上に形成されている。メモリ装置3は、Javaバイトコード、ソフトVM、フレーム等Javaを実行するための情報を保持している。更に、メモリ装置3は、固有命令で記述されたアプリケーションソフトウェアやソフトウェアの実行のためのワーク領域なども含む。尚、メモリ装置3は、キャッシュメモリのようなSRAM、メインメモリとなるべきDRAM、又はそのキャッシュメモリとメインメモリの両方を持つものを想定しており、各々がCPU4と同一チップであっても別々のチップであっても構わない。
【0012】
メモリ装置3から通常のCPU4の固有命令が供給された場合は、命令変換部2を介さない経路(41→42→43)で実行される。一方、メモリ装置3からバイトコードが供給された場合は、フェッチ部41を通り、命令変換部2にバイトコードが入力され、入力されたバイトコードは固有命令列に変換され、デコード部42、実行部43に送られ実行される。
【0013】
CPU4に変換回路2が命令変換を行うサポートバイトコード(第1命令群)が入力された場合、バイトコード変換テーブル21で、Javaバイトコードから1の固有命令又は固有命令列に変換される。変換回路2が命令変換を行わずソフトVMで命令変換を行う非サポートコード(第2命令群)が入力された場合、制御回路22で検知し、バイトコード変換テーブル21からソフトVMへ切り替えるための命令列が出力され、この命令列が実行されてソフトVMへ処理が移る。
【0014】
以上のように、本願発明ではサポートバイトコードと非サポートバイトコードに応じて、命令変換回路とソフトVMが選択的に処理を行う。ここで、命令変換回路は、ハードウェアであるために、特定のバージョンのVMを前提として設計される。ところがVMのバージョンが変更されると、定義の変更のために変更されたバージョンのVMでコンパイルしたバイトコードは、古いバージョンのVMで作り込んでしまった命令変換回路では所望の動作をしない場合が生ずる。そこで、本願発明者等はVMのバージョン変更の内容について検討した結果、過去及び将来のVMの変更に対応するには以下詳述するパラメータを再定義可能に記憶する設定レジスタ1によって対応することを見いだした。
【0015】
即ち、この設定レジスタ1の値を再設定することによりVMのバージョン変更に柔軟に対応できることになる。典型的にはVMバージョン1を前提として命令変換回路を作成した場合には、そのバージョン1に対応するソフトVMと設定レジスタ1の第1パラメータテーブルをメモリ装置3に記憶する。ここでCPU2に電源が投入されて初期化を行う際に第1パラメータがメモリ装置から設定レジスタ1にロードされ命令変換回路の初期設定がなされる。このようして命令変換回路はバージョン1のソフトVMとセットになって動作する。 尚、第1パラメータは特別な変更を指示しなければ設定レジスタ1にデフォルト値として初期値で設定するようにしても良い。
【0016】
次にVMのバージョンが変更となりバージョン2になった場合には、バージョン1に代えてバージョン2のソフトVMとそれに対をなす第2パラメータテーブルをメモリ装置に記憶する。この場合は命令変換回路はバージョン2のソフトVMとセットになってバージョン2のVMでも動作させることができるようになる。
【0017】
更に本願発明では各々バージョン1とバージョン2の両者でコンパイルされた2つのバイトコードアプリケーションが存在している場合でも、各バージョンのソフトVMとパラメータテーブルを対として切り替えることで実行可能となる。
【0018】
ここで、設定レジスタ1は少なくとも実行バイトコード指定レジスタ(第1記憶領域)11を含み、更に拡張バイトコード指定レジスタ(第2記憶領域)12を含むと好ましく、更に配列/フィールドオフセットレジスタ(第3記憶領域)13を含むと好ましい。以下それぞれのレジスタの役わりを詳細に示す。
(2)サポートバイトコードの指定方法
レジスタが実行バイトコード指定レジスタ11は、ハードウェアで実行するバイトコードを指定するレジスタである。バイトコードごとに、全オペコード分のレジスタを用意する方法と、カテゴリ毎にレジスタを用意する方法が考えられる。ここでは、特に制限されないがレジスタサイズが小さくて済む後者の方式を好ましい実施例として示す。
【0019】
図2に実行バイトコード指定レジスタ11の詳細を示す。本願では約230のバイトコードをとくに制限されないがローカル変数アクセス命令群、配列アクセス命令群、32ビット演算命令群、64ビット演算命令群、浮動小数点命令群、スタック操作命令群、サブルーチンジャンプ/リターン命令群、フロー制御命令群などを含む14のカテゴリに分類した。それぞれのカテゴリに1つまたは複数のバイトコードが含まれる。カテゴリ1実行指定レジスタCAT1_REGは1番目のカテゴリのバイトコードをサポート命令として扱うか、非サポート命令として扱うかを”1”又は”0”で指定する1ビットのレジスタである。他のカテゴリについても同様にCAT2_REGからCAT14_REGで指定する。
【0020】
図3にバイトコード指定レジスタ11の設定と、バイトコードがハードウェアで実行されるかソフトVMで実行されるかの例を表で示す。バイトコードBCとしてBC1、BC2、...は、それぞれカテゴリ1CAT1、カテゴリ2CAT2...に分類されていたと考える。この場合第1パラメータテーブルPARA1を実行バイトコード指定レジスタ11に設定した場合(CAT1_REG=1, CAT2_REG=1, CAT3_REG=0,...)には、図3の例示範囲ではBC5がSの記号で示すようにソフトVMで実行される。一方、BC1からBC4は、Hの記号で示すようにハードウェアで実行されるように設定される。
【0021】
また、第2パラメータテーブルPARA2を実行バイトコード指定レジスタ11に設定した場合(CAT1_REG=1, CAT2_REG=0, CAT3_REG=1,...)には、図3の例示範囲ではBC2とBC4がソフトVMで実行され、BC1、BC3、BC5はハードウェアで実行されるように設定される。
【0022】
実行バイトコード指定レジスタ11に設定する典型例は以下の通りである。プロセッサがシステムに搭載後にVMのバージョンが変わり、例えば配列の構造が変わった場合、配列アクセスに関わるバイトコードが属するカテゴリのカテゴリ実行指定ビットを非サポート命令として扱うように設定する。このように設定すると、制御回路22が配列アクセスのバイトコードを非サポートバイトコードとして検知し、バイトコード変換テーブル21がソフトVMに切り替えるための命令列を発行し、ソフトVMへ操作が移ることで,このバイトコードはソフトVMで実行される。このように、VMのバージョンの差異により配列の構造が合わなくなった場合には、非サポート命令として扱うことで、配列構造の異なったVMにも対応することができる。その他,浮動小数の表現方法がVMのバージョンで異なったり、エンディアンの仕様で64ビット演算が行えなくなった場合なども、該当するカテゴリ実行指定ビットを非サポート命令として扱うように設定し、ソフトVMに処理を渡すことで対応することができる。
【0023】
本実施例ではカテゴリ毎にレジスタを用意する方法を実施例としてしめしたが、それに限定されることはない。即ち、Javaバイトコードはオペコードの数は約230程度であり、1つのオペコードについて1ビットのレジスタを割り当てても230ものラッチレジスタを要することとなるため命令変換回路の回路規模を増大してしまい、カテゴリ毎に記憶すると回路規模が低減できる。しかし、一般にオペコードの数が少ない命令セットを扱う場合には前オペコード分にレジスタを方法をとっても回路規模は大きな問題とはならない。
(3)拡張バイトコードの指定方法
図5に、拡張バイトコードの処理内容やオペコードの番号の割り当てがVMのバージョンによって異なる様子を示す。まず拡張バイトコードとは、Javaにおいてiloadやiadd等の基本命令の他に、基本命令を高速に実行するため、定義されているgetfield_quick等のVMに特有の拡張命令を指定するバイトコードある。図5において、まず処理内容が異なる例として、拡張バイトコードの一つEXBC5はバージョン1のVM1ではオペコード234に割り当てられていたとする。これに対して、バージョン2のVM2では拡張バイトコードEXBC5はサポートされないためNONで示している。次にオペコードの番号の割り当てがバージョンにより異なる例を示す。即ち拡張バイトコードEXBC1の処理は、VM1では230番に割り当てられるのに対して、VM2では235番に割り当てられている。このバージョンの差を解消するためのレジスタが、拡張バイトコードマップレジスタ12である。
【0024】
図4に拡張バイトコード指定レジスタ12の詳細を示す。このレジスタ12は、特定VMバージョン指定レジスタVM_VER_REG、オペコードオーバーライドイネーブル指定レジスタOVREN_REG、オペランドフォーマット指定レジスタOPFM_REG、拡張バイトコード指定レジスタEXBC1_REG, EXBC2_REG, EXBC3_REG, ...を含む。
【0025】
特定VMバージョン指定レジスタVM_VER_REGは、例えばバージョン1とバージョン2のVMが既に存在してる場合に”0”によりバージョン1を指定し、”1”によりバージョン2を指定するものである。更に多くのバージョンが存在する場合にはこのVM_VER_REGのビット幅を拡張することでバージョンの指定をすればよい。ここで、制御回路22は、製造時に確定しているバージョン1とバージョン2の両方のVMに対する拡張命令のオペコードと処理を予めが記憶してものとする。従って、特定VMバージョン指定レジスタVM_VER_REGは、制御回路22に対してバージョン1とバージョン2のいずれの対応関係の処理を行うかを指定するスイッチとして働く。
【0026】
これに対して、プロセッサがシステムに搭載後にVMのバージョンが変わり、想定していた拡張バイトコードのオペコードが合わなくなった場合、オペコードオーバーライドイネーブル指定レジスタOVREN_REGを、イネーブルに設定にし、拡張バイトコード指定レジスタEXBC1_REGには、拡張バイトコードEXBC1の処理に合ったオペコードを設定する。例えば図5の例で、EXBC1はバージョン1では230、バージョン2では235である。このバージョン1と2の切り替えは、上述の通りVMバージョン指定レジスタVM_VER_REGで変更できる。これに対して、バージョン3で更に変更されEXBC1に240が割り当てられた場合にOVREN_REGを”1”に設定し、EXBC1_REGに”240”を設定する。他の拡張バイトコード指定レジスタ EXBC2_REG, EXBC3_REG, ..も同様に指定する。命令変換部2に入力されたバイトコードが拡張バイトコード指定レジスタに設定されたオペコードと一致するかを制御回路22が検知し、一致すると対応する命令列をバイトコード変換テーブル21が出力し、一致しない場合は非サポート処理に移るための命令列を出力して、ソフトVMに処理を渡す。
【0027】
オペランドフォーマット指定レジスタOPFM_REGは、フィールド系拡張バイトコードのオペランドフォーマットの指定方法を変更するために使用する。フィールドにアクセスするバイトコードのオペランドは、バージョンに応じて変更になる場合があることに対応するためである。フィールド系拡張命令は、オペコードが1バイトとそれに連続する2バイトのオペランドの合計3バイトで指定される。しかし、後ろ2バイトのオペランドは(1)第1オペランド有効/第2オペランド有効、(2)第1オペランド有効/第2オペランド無効、(3)第1オペランド無効/第2オペランド有効となるような変更が想定される。オペランドフォーマット指定レジスタOPFM_REGに”00”、”01”、”10”のような値を指定することにより(1)〜(3)のようなオペランドフォーマットの変更が可能とされる。尚、OPFM_REGは、OVREN_REGの設定がイネーブルとされるときに設定を必要とし、デフォルト値を利用する場合には設定を必要としない。
【0028】
以上の通り、拡張バイトコードの詳細なバージョン変更に対応する手段を示したが、さらに拡張バイトコードがVMのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ11を非サポート命令に設定し、ソフトVMで対応する。従って、VMのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ11のほうがより本質的である。実行バイトコード指定レジスタ11の意義は、更に、ハードウェア性能の維持と言う点にある。
(4)配列/フィールドオフセットの指定方法
配列やフィールドの構造がVMのバージョンにより違う構造である場合がある。現状のVMは配列の先頭にヘッダ部分があり、ヘッダ部分のオフセットを足したアドレスでデータにアクセスする。今後、ヘッダ部分HEADERのオフセットがVMによって変更される事もあり得ると考え、配列/フィールドオフセットレジスタ13には図6に示すように、配列先頭オフセットレジスタATOP_REGを設けて、オフセットを変更できる仕様とした。また、配列長LENは配列のヘッダ部分の中にあり、配列長のフィールドまでのオフセットを配列長フィールドオフセットレジスタALEN_REGで設定する。これらの設定すると、バイトコード変換テーブル21が、その設定に対応した命令列を出力する。フィールドに対しても同様で、フィールド先頭オフセットレジスタFTOP_REGを設けて、特殊命令テーブル23から対応した命令列を発行する。なお,Javaにおける配列とフィールドの概念図を図7に示す。図において(A)が配列オフセット指定レジスタ、(B)が配列長フィールドオフセット指定レジスタ、(C)がフィールドオフセット指定レジスタのそれぞれの設定内容を示している。
【0029】
さらにVMのバージョンアップにより上記の方法では対応できなくなった場合は、実行バイトコード指定レジスタ11を非サポート命令に設定し、ソフトVMで対応する。従って、VMのバージョン変更の吸収という点に着目すれば、実行バイトコード指定レジスタ11のほうがより本質的である。配列/フィールドオフセットレジスタ13の意義は、更に、ハードウェア性能の維持と言う点にある。
【0030】
以上サポートバイトコードの指定方法、拡張バイトコードの指定方法、配列/フィールドオフセットの指定方法に分類し対応するレジスタ11〜13を例示して示した。レジスタ11〜13の分類及びその中の詳細なレジスタのまとまりは便宜上のものであり、結果的に本願のレジスタに対応する情報の記憶領域があれば本願の目的は達成できるのでそのような改変を行ってもよい。ここで示したレジスタは、揮発性の読み書き可能なラッチを想定しているが、一般には再定義可能な記憶領域があればよい。
(5)スタックトップ指定方法
Javaでは,変数をスタックに蓄えてから演算を行なう。レジスタ数の限られた一般の汎用CPUでスタック構造を実現する場合,メモリ内にデータ領域を割り当て,メモリとレジスタ間でデータを転送することで実現する。この場合、データをメモリ内に積み重ね、スタックトップポインタと呼ばれるメモリに積み重ねた複数のデータの先頭のアドレスを覚えることで効率を良く実現できる。Javaの変数でスタック構造が採用されたのは,スタック構造により汎用レジスタを1つ占有するだけで済み,汎用レジスタ数の異なるCPUに対して容易に対応可能なためである。ただし、VMのバージョンによって、スタックトップポインタの構造が異なる場合がある。即ち、バージョン1(VM1)では、スタックトップポインタが示すアドレスには無効なデータ(invalid)が格納されており、その次のアドレスから有効なデータが格納される。それに対し、バージョン2(VM2)では、スタックトップポインタが示すアドレスから有効なデータが保持される。
この相違は、同じバイトコードが入力された場合であってもVMのバージョンによってCPUの処理が異なってしまうことを意味することを本願発明者は見出した。即ち、汎用レジスタからデータをメモリに転送する際又はメモリから汎用レジスタにデータを転送する際に、転送先又は転送元のメモリのアドレスをバージョンにより変更しなければならない。そこで、本願発明者等は、命令変換部BTから出力される命令をVMのバージョンにより切り換える構成を採用した。具体的には、汎用レジスタR0からメモリに転送する際には、バージョン1(VM1)では、MOV R0,@R10+という『ポストインクリメント型データ転送命令』を出力し、バージョン2(VM2)では、MOV R0,@+R10という『プレインクリメント型データ転送命令』を出力するように構成した。ここで、@R10+、@+R10は、転送先のメモリのアドレスを示しているおり,符号はメモリの増加を,符号の位置はポスト/プレを示している。これによりスタックトップポインタの構造が異なるバージョンのVMに対応することを可能となる。
命令の切り換えの方法の1つの実施例について図10を用いて説明する。ここで、バージョン1に対応する命令MOV R0,@R10+とバージョン2に対応する命令MOV R0,@+R10とを比較すると、転送先のメモリのアドレスのみが相違する。従って、バイトコード変換テーブルTABLEにバージョン1又はバージョン2のどちらか一方の命令を格納し、置換部(置換回路)CONVにおいて、バイトコード変換テーブルTABELから読み出された情報を変換する構成とすることによりバージョン1及びバージョン2に対応することが可能となる。置換部CONVは、図4において示したバージョン情報を格納しているレジスタである特定バージョン指定レジスタVM−VER_REGの情報に従って命令を置換する。このように構成することにより、それぞれのバージョンに対応する命令をバイトコード変換テーブルに格納する場合と比較して、バイトコード変換テーブルを小さくすることが可能となる。なお、置換部(置換回路)CONVにおいて、変換するか否かは、制御信号CONTにより制御される。制御信号CONTは、汎用レジスタからメモリへの置換が必要な際に入力される。また、図10では、特定バージョン指定レジスタVM_VER_REGによりVMのバージョンに対応させたが、新たにスタックトップポインタレジスタを設けてもよい。この場合、VMのバージョンによらず、スタックトップポインタの構造のみに対応するのでシステムへの適用が容易となる。更には、バイトコード変換テーブルTABLEには、バージョン1とバージョン2の共通部分のみを格納し、相違部分を特定バージョン指定レジスタVM_VER_REGの情報によって置換部CONVで付加する構成でもよい。
【0031】
図8は本発明の第2の実施例である。本実施例はCPU4の外部に命令変換部2がありこの命令変換部が固有命令を実行するCPUとは独立の半導体チップに形成されている点が図1の実施例とは異なる。命令変換部が別チップなので既存のCPUチップに適用できる利点がある。設定レジスタ1は、第1の実施例と同様であり、図1の実施例と同様にVMのバージョンの違いに対応できる。
【0032】
図9に本発明の好適な応用例としての携帯情報システムの構成図を示す。より具体的には携帯電話の構成の一例である。大きく分けて、通信部分とアプリケーション部分から構成される。通信部分は、電波を送受信するアンテナ(RF)部83、ベースバンドのモデム、コーデックを行うベースバンドプロセッサ(BASEBAND)部81、主記憶(MEM)82である。アプリケーション部分は、本発明の実施例のバイトコードアクセラレータ10を備えるCPU1を内蔵するマイクロプロセッサ(PROCESSOR)70において、インターフェース(I/F)73を介してアプリケーションプロセッサとベースバンドプロセッサが接続され、周辺インターフェース(PERIPHERAL)74を介してカメラ(CMR)75、メモリカード(CARD)76、音源IC(SOD)77、キー(KEY)78が接続され、外部バスを介して液晶(LCD)79、主記憶(MEM)80が接続される。本システム構成例は、携帯電話向けであったが、携帯情報端末やデジタルカメラなど多様なシステム構成例が考えられる。
【0033】
本システム構成例では、例えば、次のようにメモリが使用される。Javaアプリケーションは、外部サーバーよりアンテナ83を介して配給され、ベースバンドプロセッサ81を使用し、主記憶82に格納される。ソフトVMは主記憶80か主記憶82のどちらに配置してもよい。ソフトVMのインタプリタ部はアクセス頻度が高いため、内蔵メモリ上に配置されることが望ましい。この発明により、バージョンの異なるVMでコンパイルされたJavaアプリケーションがダウンロードされた場合でもハードウェアアクセラレータを利用して高速に実行できるため、携帯情報システムの付加価値を高めることができる。
【0034】
以上の本願発明はJavaを例にして説明したが、それに限られることはなく、同様の中間言語及びVMを固有命令を命令セットで実行するプロセッサに対するハードウェアアクセラレータに適用できる。
【0035】
【発明の効果】
上記手法により、異なるVMでも、設定レジスタの内容を設定することにより、同一ハードウェアで命令変換することができる。また、VMがバージョンアップされた場合でも、ハードウェアを作り直すことなく同一のハードウェアで命令変換を行うことが可能である。
【図面の簡単な説明】
【図1】本発明によるプロセッサの概略ブロック図。
【図2】実行バイトコード指定レジスタのブロック図。
【図3】実行バイトコード指定レジスタの設定例。
【図4】拡張バイコードマップレジスタのブロック図。
【図5】VMバージョンの違いによる拡張バイトコードの割り当ての違いの例。
【図6】配列/フィールドオフセットレジスタのブロック図。
【図7】配列/フィールドの構造。
【図8】本発明によるアクセラレータの概略ブロック図。
【図9】本発明による携帯システムの概略ブロック図。
【図10】本発明による命令置換を実現する概略ブロック図。
【符号の説明】
1…設定レジスタ(RE)、2…命令変換部(BT)、3…メモリ装置(MEM)、4…プロセッサ(CPU)、11…実行バイトコード指定レジスタ(REG1)、12…拡張バイトコード指定レジスタ(REG2)、13…配列/フィールドオフセットレジスタ(REG3)、21…バイトコード変換テーブル(TABLE)、22…制御回路(CTRL)、41…フェッチ部(FE)、42…デコード部(DE)、43…実行部(EX)。
Claims (15)
- 情報処理装置であって、
第1命令セットを固有命令として実行するための命令実行部と、
第2命令セットのうち第1命令群に属する命令を前記第1命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記第2命令セットのうち前記命令変換回路で変換しない第2命令群に属する命令が入力された場合には、ソフトウェアによって前記第1命令セットに変換して前記命令実行部で実行し、
前記命令変換回路は、前記第2命令セットのうち前記第1命令群と前記第2命令群の何れかに属するかを再定義可能に記憶するための第1記憶領域を有する情報処理装置。 - 請求項1において、
前記第2命令セットに属する命令群は、複数の命令カテゴリに分類され、
前記第1記憶領域は、前記複数の命令カテゴリ毎に、前記第1命令群と前記第2命令群の何れかに属するかを記憶する情報処理装置。 - 請求項2において、前記複数の命令カテゴリには、ローカル変数アクセス命令群、配列アクセス命令群、32ビット演算命令群、64ビット演算命令群、浮動小数点命令群、スタック操作命令群、サブルーチンジャンプ/リターン命令群、フロー制御命令群の何れか一つが含まれる情報処理装置。
- 請求項1において、前記命令変換回路は、前記第2命令セットが入力されると前記第1記憶領域の情報を参照して、前記第1命令群に該当する場合には当該命令変換回路に含まれる命令変換テーブルにより前記第1命令フォーマットに変換し、前記第2命令群にに属する場合には前記ソフトウェアに入力された命令の実行を委ねる情報処理装置。
- 請求項1において、前記ソフトウェアは前記第1命令セットで記述される情報処理装置。
- 請求項1において、
前記命令変換回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理を行うための制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第2記憶領域を有する情報処理装置。 - 請求項6において、
前記命令変換回路は、前記第2命令セットにおいて定義される定義される配列又はフィールドをメモリ上に配置するための情報を再定義可能に記憶する第3記憶領域を有する情報処理装置。 - 請求項7において、
前記第3記憶領域は、
前記第2命令セットにおいて定義される配列をメモリ上に配置する場合のメモリ上の先頭アドレスから前記配列の先頭エントリまでのオフセット値を記憶するための第1領域と、
前記配列をメモリ上に配置する場合のメモリ上の先頭アドレスから配列の配列長を格納するフィールドまでのオフセット値を記憶するための第2領域と、
前記第2命令セットにおいて定義されるフィールドをメモリ上に配置する場合のメモリ上の先頭アドレスから前記フィールドの先頭エントリまでのオフセット値を記憶するための第3領域を有する情報処理装置。 - 情報処理装置であって、
第1命令セットを固有命令として実行するための命令実行部と、
第2命令セットのうち第1命令群に属する命令を前記第1命令セットに変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記第2命令セットのうち前記命令変換回路で変換しない第2命令群に属する命令が入力された場合には、ソフトウェアによって前記第1命令セットに変換して前記命令実行部で実行され、
前記命令変換回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理を記憶する制御回路と、前記ソフトウェアがバージョン変更された際に前記制御回路におけるオペコードとその処理の対応関係を変更するための第2記憶領域を有する情報処理装置。 - 請求項9において、
前記制御回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理の対応関係の他に前記ソフトウェアの第2バージョンで定義されたオペコードとその処理の対応関係を記憶し、
前記第2記憶領域は、前記制御回路が前記第1バージョンまたは第2バージョンの何れかに対応するかを再定義可能に指定するための領域を有する情報処理装置。 - 請求項9において、
前記制御回路は、前記ソフトウェアの第1バージョンで定義されたオペコードとその処理対応関係を記憶し、
前記第2記憶領域は、前記前記制御回路に記憶されるオペコードとその処理の対応関係の一部を無効とすることを再定義可能に指定するための第1領域と、
前記第1領域によって無効とされた処理に対する新たなオペコードを再定義可能に記憶するための第2領域を有する情報処理装置。 - 請求項9において、
前記第2命令セットはJavaバイトコードであり、
前記ソフトウェアは前記Javaバイトコードを前記情報処理装置で実行するソフトウェア・バーチャル・マシンであり、
前記第2記憶領域は、前記Javaバイトコードのうち拡張バイトコードのオペコードとその処理内容の対応関係を再設定可能とする情報処理装置。 - 情報処理装置であって、
固有命令を実行するための命令実行部と、
Javaバイトコードのうちの第1命令群に属する命令を前記固有命令に変換して前記命令実行部に供給するための命令変換回路とを備え、
前記情報処理装置は、前記Javaバイトコードのうち前記命令変換回路で変換しない第2命令群に属する命令が入力された場合には、ソフトウェア・バーチャル・マシンによって前記固有命令に変換して前記命令実行部で実行され、
前記命令変換回路は、前記Javaバイトコードの前記第1命令群と前記第2命令群と区分を再定義するための第1記憶領域と、前記Javaバイトコードのオペコードとその処理の対応関係を再定義するための第2記憶領域と、前記Javaバイトコードにおいて定義される配列又はフィールドをメモリ上に配置するための情報を再定義するための第3記憶領域を有する情報処理装置。 - 請求項13において、
前記情報処理装置は、前記第1から第3記憶領域に所定の値を書き込むことにより前記ソフトウェア・バーチャル・マシンのバージョン変更に対応可能とされる情報処理装置。 - 請求項14において、
前記Javaバイトコードは、複数の命令カテゴリに分類され、
前記第1記憶領域は、前記複数の命令カテゴリ毎に、前記第1命令群と前記第2命令群の何れかに属するかを記憶する情報処理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003198852A JP2004127255A (ja) | 2002-08-02 | 2003-07-18 | 情報処理装置 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002225487 | 2002-08-02 | ||
JP2003198852A JP2004127255A (ja) | 2002-08-02 | 2003-07-18 | 情報処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004127255A true JP2004127255A (ja) | 2004-04-22 |
Family
ID=32300764
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003198852A Withdrawn JP2004127255A (ja) | 2002-08-02 | 2003-07-18 | 情報処理装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004127255A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006276939A (ja) * | 2005-03-28 | 2006-10-12 | Fujitsu Ltd | 仮想マシンのプログラム起動方法およびクライアントサーバシステム |
JP2012257260A (ja) * | 2009-10-02 | 2012-12-27 | Panasonic Corp | 立体視映像を再生することができる再生装置 |
JP2013535063A (ja) * | 2010-06-24 | 2013-09-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 特定の命令がプロセッサによって実行されないようにブロックするためのコンピュータで実装される方法、コンピュータ・システム、およびコンピュータ・プログラム |
US9851969B2 (en) | 2010-06-24 | 2017-12-26 | International Business Machines Corporation | Function virtualization facility for function query of a processor |
-
2003
- 2003-07-18 JP JP2003198852A patent/JP2004127255A/ja not_active Withdrawn
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006276939A (ja) * | 2005-03-28 | 2006-10-12 | Fujitsu Ltd | 仮想マシンのプログラム起動方法およびクライアントサーバシステム |
JP2012257260A (ja) * | 2009-10-02 | 2012-12-27 | Panasonic Corp | 立体視映像を再生することができる再生装置 |
JP2013535063A (ja) * | 2010-06-24 | 2013-09-09 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 特定の命令がプロセッサによって実行されないようにブロックするためのコンピュータで実装される方法、コンピュータ・システム、およびコンピュータ・プログラム |
US9851969B2 (en) | 2010-06-24 | 2017-12-26 | International Business Machines Corporation | Function virtualization facility for function query of a processor |
US10521231B2 (en) | 2010-06-24 | 2019-12-31 | International Business Machines Corporation | Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor |
US10664269B2 (en) | 2010-06-24 | 2020-05-26 | International Business Machines Corporation | Function virtualization facility for function query of a processor |
US11086624B2 (en) | 2010-06-24 | 2021-08-10 | International Business Machines Corporation | Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor |
US11188326B2 (en) | 2010-06-24 | 2021-11-30 | International Business Machines Corporation | Function virtualization facility for function query of a processor |
US11809870B2 (en) | 2010-06-24 | 2023-11-07 | International Business Machines Corporation | Function virtualization facility for blocking instruction function of a multi-function instruction of a virtual processor |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10514922B1 (en) | Transfer triggered microcontroller with orthogonal instruction set | |
US8046748B2 (en) | Method and system to emulate an M-bit instruction set | |
JP4171496B2 (ja) | スタックを用いる演算マシンのための命令フォールディング処理 | |
JP4485198B2 (ja) | Javaアクセラレータを備えたプロセッサシステム | |
US7124286B2 (en) | Establishing an operating mode in a processor | |
US6901505B2 (en) | Instruction causing swap of base address from segment register with address from another register | |
US6757771B2 (en) | Stack switching mechanism in a computer system | |
US7478224B2 (en) | Microprocessor access of operand stack as a register file using native instructions | |
US7284115B2 (en) | Processor which overrides default operand size for implicit stack pointer references and near branches | |
KR20010104687A (ko) | 축소 명령 세트 컴퓨터 및 복합 명령 세트 컴퓨터프로세서들을 위한 자바 가상 머신 하드웨어 | |
KR20040111163A (ko) | 명령의 시맨틱의 동적 변경 | |
JPH08339325A (ja) | 二つの別個の命令セット・アーキテクチャへの拡張をサポートすることができるアーキテクチャ・モード制御を備えたマイクロプロセッサ | |
JP2005514678A (ja) | 集中デバイス・アプリケーション用の効果的な処理を備えたマルチスレッド・プロセッサ | |
JP2001195250A (ja) | 命令トランスレータ、トランスレータ付命令メモリおよびそれらを用いたデータ処理装置 | |
JP4035004B2 (ja) | 情報処理装置 | |
JPH03216776A (ja) | 集積回路装置及びそれにより構成されたマイクロプロセッサ | |
EP1247171A1 (en) | Establishing an operating mode in a processor | |
JP2000357088A (ja) | マイクロプロセッサ及びデータ処理システム | |
US20040031022A1 (en) | Information processing device for multiple instruction sets with reconfigurable mechanism | |
JP2002215387A (ja) | 命令トランスレータを備えたデータ処理装置およびメモリインタフェース装置 | |
JP2004127255A (ja) | 情報処理装置 | |
JP2005267640A (ja) | 機能を呼び出す方法と装置 | |
JPH09505428A (ja) | ページアドレスモードを有するマイクロコントローラ | |
US20230305992A1 (en) | Processor using target instructions | |
JP4418509B2 (ja) | Javaアクセラレータを備えたプロセッサシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051004 |
|
RD02 | Notification of acceptance of power of attorney |
Effective date: 20051004 Free format text: JAPANESE INTERMEDIATE CODE: A7422 |
|
A761 | Written withdrawal of application |
Effective date: 20070323 Free format text: JAPANESE INTERMEDIATE CODE: A761 |