(57)【要約】【課題】アクセラレータを有するハードウェア構成において、中間コード実行時に極めて優れたパフォーマンスを達成することができる中間コード実行システムを提供すること。【解決手段】中間コード実行システム１は、プロセッサ１０と、メインメモリ１２と、メインメモリ１２よりも高速な内蔵メモリ１５と、中間コードの実行を高速化するコプロセッサ１６とを備え、コプロセッサ１６を利用することができない命令を内蔵メモリ１５に格納されたコアモジュール２１およびサブモジュール２１ｂを利用して実行する。【選択図】  図１
2004280766.tif 000002
【特許請求の範囲】
【請求項１】
ネィティブコードよりも抽象度の高い中間コード形式のプログラムを実行する中間コード実行システムにおいて、
プロセッサと、前記プロセッサに接続されたメインメモリおよび前記メインメモリよりも高速な補助メモリと、中間コード形式のプログラムに含まれる命令の一部について実行を高速化するアクセラレータとを備え、
中間コード形式のプログラムに含まれる命令のうち、アクセラレータを利用することができない命令を実行するためのプログラムコードが前記補助メモリに格納されており、
中間コード形式のプログラムを実行するにあたり、アクセラレータを利用することができる命令はアクセラレータを利用して実行し、アクセラレータを利用することができない命令は前記プログラムコードを利用してソフトウェア的に実行することを特徴とする中間コード実行システム。
【請求項２】
前記アクセラレータは、前記プロセッサと一体的に構成されているか、または、前記プロセッサに接続されたコプロセッサであることを特徴とする請求項１に記載の中間コード実行システム。
【請求項３】
前記アクセラレータは、中間コード形式に含まれる一部の命令を前記プロセッサのネィティブコードないしマイクロコードに変換することを特徴とする請求項１または請求項２に記載の中間コード実行システム。
【請求項４】
前記中間コード形式のプログラムはＪａｖａ（登録商標）クラスファイルであり、少なくともメソッドを呼び出す命令は前記プログラムコードにより実行されることを特徴とする請求項１から請求項３のいずれか１項に記載の中間コード実行システム。
【請求項５】
前記プログラムコードは、アクセラレータを利用することができない命令の実行にあたり、実行する命令に対応したソフトウェアモジュールを呼び出すことを特徴とする請求項１から請求項４のいずれか１項に記載の中間コード実行システム。
【請求項６】
さらに、メソッドを呼び出す命令を実行する際に呼び出されるソフトウェアモジュールが、前記補助メモリに格納されていることを特徴とする請求項５に記載の中間コード実行システム。
【請求項７】
前記メソッドを呼び出す命令を実行する際に呼び出されるソフトウェアモジュールは、頻繁に呼び出される形式のメソッド呼び出しに最適化されていることを特徴とする請求項６に記載の中間コード実行システム。
【請求項８】
前記メソッドを呼び出す命令を実行する際に呼び出されるソフトウェアモジュールは、バイトコード命令からなり、かつ、スタックフレームを追加する必要のないメソッドを呼び出す場合に最適化されていることを特徴とする請求項６に記載の中間コード実行システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネィティブコードよりも抽象度の高い中間コード形式のプログラムを実行する中間コード実行システムに関する。より詳細には、Ｊａｖａ（登録商標）クラスファイルを実行する中間コード実行システムに関する。
【０００２】
【従来の技術】
ハードウェアやＯＳといった、コンピュータのプラットフォームに依存しないプログラムを提供することを目的として、各プラットフォーム上にソフトウェア的な手法またはハードウェア的な手法により仮想機械（ＶＭ；Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を構築し、この仮想機械上でネイティブコードよりも抽象度の高い中間コード形式のプログラムを実行する方法が提案されている。このような方法を採用したプログラム言語の一つとして、クラスファイルと呼ばれる中間コード形式を採用したＪａｖａ（登録商標）を挙げることができる。なお、以下ではハードウェアと当該ハードウェア上に構築された仮想機械とを一体的に、中間コード実行システムと呼称する場合がある。
【０００３】
上記の方法によれば、単一のプログラムコードを種々のプラットフォームに供給して実行させることが可能となるため、オブジェクトコードをプラットフォームの数だけ準備する必要がなくなる。これにより、プログラムの配信を簡潔化することができるばかりでなく、ソフトウェア開発を効率化することも可能である。このため、種々のコンピュータのプラットフォームにおいて仮想機械を構築することが行われている。さらに、近時ではプロセッサを搭載した種々の電子機器（以下、組込み機器という）においても、プロセッサ上に仮想計算機を構築することが行われはじめている。
【０００４】
ここで、仮想計算機としては、プラットフォーム上にソフトウェア的に構築され、クラスファイルに含まれるバイトコード命令を逐次的に解釈して実行するインタープリター方式のものが知られている。
【０００５】
しかしながら、インタープリター方式の仮想計算機は、クラスファイルから一つ一つバイトコード命令を取り出してはその内容を解釈するというプロセスが必要であり、このプロセスがシステムのオーバーヘッドとなる場合がある。このようなオーバーヘッドを軽減してパフォーマンスを向上するために、クラスファイルを各ハードウェアに固有のネイティブコードにコンパイルしてから実行するＪＩＴコンパイラ（Ｊｕｓｔ  Ｉｎ  Ｔｉｍｅ  Ｃｏｍｐｉｌｅｒ）方式や、ＡＯＴコンパイラ（Ａｈｅａｄ  Ｏｆ  Ｔｉｍｅ  Ｃｏｍｐｉｌｅｒ）方式等が提案されている。さらに、バイトコード命令を直接実行することができるように特別に設計されたＪａｖａ（登録商標）チップのように、仮想計算機をハードウェア的に構築することも試みられている。
【０００６】
上記のＪＩＴやＡＯＴ等のコンパイラ方式ではプロセッサのネイティブコードを実行することになるので、命令実行の速度だけを見ればインタープリター方式よりも高いパフォーマンスを得ることができる。しかしながら、コンパイラ方式では、コンパイルの作業自体に必要なワークメモリや、クラスファイルに比べてサイズが４〜１０倍と大きいネイティブコードを保存する領域も必要となるため、インタープリター方式よりも大量のメモリが必要となるという問題があり、特に通常のコンピュータよりもハードウェア資源の制約が厳しい組み込み機器において適用することは容易ではない。さらに、クラスファイルの実行を指示してからコンパイルを開始する場合には、コンパイルの作業がオーバーヘッドとなって十分なパフォーマンスが得られないおそれもある。
【０００７】
また、上記のＪａｖａ（登録商標）チップによれば、コンパイルすることもなく高いパフォーマンスでクラスファイルを実行することが可能であるが、Ｊａｖａ（登録商標）で規定されるスタックマシンを完全にハードウェアで実現することは技術的に難しく、実現したとしても高コスト化を免れることはできない。また、Ｊａｖａ（登録商標）チップを採用した場合には、他プログラミング言語でのソフトウェア開発は原則的に不可能となり、過去のプログラム資産を利用することができないという問題もある。
【０００８】
このようなコンパイル方式やＪａｖａ（登録商標）チップを組み込み機器における問題を回避しつつクラスファイル実行時のパフォーマンスを向上するために、クラスファイルの実行をハードウェア的に補助するハードウェア・アクセラレータ（以下、アクセラレータという）技術が提案されている。このようなアクセラレータとしては、クラスファイルに含まれるバイトコード命令の実行を高速化するために、クラスファイルに含まれるバイトコード命令の実行をプロセッサとは独立して行うものと、バイトコード命令をプロセッサのネィティブコードやマイクロコードに変換してプロセッサに引き渡す機能を有するものとを挙げることができる。これらは通常のプロセッサに併設されるコプロセッサや、通常のプロセッサアーキテクチャに追加されるハードウェアアーキテクチャとして実装される。
【０００９】
しかし、アクセラレータで全てのバイトコード命令に対応するとゲート数が増えてコスト高となる等の不具合があるため、アクセラレータを利用して高速化することができるのは全バイトコード命令ではなく、一部のバイトコード命令についてはソフトウェア的な手法により実行しなければならないことが通常である。特に、メソッド呼び出しのように粒度が大きいバイトコード命令はアクセラレータで対応しないことが多い。このため、殆どのバイトコード命令がアクセラレータにより高速化されるにも関わらず、アクセラレータの対応していない一部のバイトコード命令が要因となって、クラスファイル実行時に所望のパフォーマンスが得られないことがある。
【００１０】
【特許文献】
特開２００２−１６３１１６
米国特許第６，３３２，２１５号
米国特許第６，３３８，１６０号
【００１１】
【発明が解決しようとする課題】
本発明は、上述したアクセラレータの技術的な特徴を鑑みてなされたものであって、アクセラレータを有するハードウェア構成において、中間コード実行時に極めて優れたパフォーマンスを達成することができる中間コード実行システムを提供することを目的とする。
【００１２】
【課題を解決するための手段】
上記課題を解決するために、本発明は、ネィティブコードよりも抽象度の高い中間コード形式のプログラムを実行する中間コード実行システムにおいて、
プロセッサと、前記プロセッサに接続されたメインメモリおよび前記メインメモリよりも高速な補助メモリと、中間コード形式のプログラムに含まれる命令の一部について実行を高速化するアクセラレータとを備え、
中間コード形式のプログラムに含まれる命令のうち、アクセラレータを利用することができない命令を実行するためのプログラムコードが前記補助メモリに格納されており、
中間コード形式のプログラムを実行するにあたり、アクセラレータを利用することができる命令はアクセラレータを利用して実行し、アクセラレータを利用することができない命令は前記プログラムコードを利用してソフトウェア的に実行することを特徴とする中間コード実行システムを提供する。
【００１３】
上記構成によれば、アクセラレータを利用することができない命令を高速な補助メモリに格納されたプログラムコードを利用してソフトウェア的に実行するので、アクセラレータを利用することができない命令をより高速に実行することができ、これによりアクセラレータを備えた中間コード実行システムのパフォーマンスを向上することができる。
【００１４】
本発明において、前記アクセラレータは、例えば、前記プロセッサと一体的に構成されているか、または、前記プロセッサに接続されたコプロセッサとする形態が可能であり、中間コード形式のプログラムをプロセッサとは独立して実行するものや、中間コード形式に含まれる一部の命令を前記プロセッサのネィティブコードないしマイクロコードに変換するものを用いることができる。
【００１５】
また、前記中間コード形式のプログラムをＪａｖａ（登録商標）クラスファイルとした場合には、少なくともメソッドを呼び出す命令は前記補助メモリに格納されたプログラムコードを利用して実行されることが好適である。このようにすることで、アクセラレータの利用が難しく、パフォーマンス低下の要因となりやすいメソッド呼び出し命令を高速化することができ、より優れたパフォーマンスの中間コード実行システムを提供することが可能となる。
【００１６】
さらに、補助メモリに格納されるプログラムコードは、アクセラレータを利用することができない命令の実行にあたり、実行する命令に対応したソフトウェアモジュールを呼び出す機能を有するものとすることができる。
【００１７】
上記の場合には、さらにまた、メソッドを呼び出す命令を実行する際に呼び出されるソフトウェアモジュールが前記補助メモリに格納されていることが好ましい。このようにすることで、アクセラレータで対応することが困難なメソッドを呼び出す命令を高速化することができる。このようなソフトウェアモジュールを、頻繁に呼び出されるメソッドの形式に応じて最適化すればさらに好ましい。例えば、一般には、バイトコード命令からなり、かつ、スタックフレームを追加する必要のないメソッドを呼び出す場合に最適化した構成とすることができる。
【００１８】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら説明する。
図１は、本実施形態にかかる中間コード実行システムの概略図である。
この中間コード実行システム１は、Ｊａｖａ（登録商標）クラスファイルを実行可能に構成されたものであり、その主なハードウェア構成は、ＣＰＵ１０と、このＣＰＵ１０に外部バス１１（Ｅｘｔｅｒｎａｌ  Ｂｕｓ）を介して接続されたメインメモリ１２とを具備している。また、図示しないが、ＬＣＤや音声出力装置、キー入力装置等の入出力装置、カードリーダライタ等の補助記憶装置、所定の通信網に接続するためのネットワークインターフェイスをさらに具備してもよいし、この中間コード実行システム１を組み込み機器上に構成する場合には各機器に固有のハードウェアがさらに接続されていても構わない。
【００１９】
ＣＰＵ１０は、ＣＰＵ１０の制御機能および演算機能を実装したプロセッサコア１３と、このプロセッサコア１３に内部バス１４（Ｉｎｔｅｒｎａｌ  Ｂｕｓ）を介して接続された内蔵メモリ１５（補助メモリ）とを有し、Ｊａｖａ（登録商標）アクセラレータとしての機能を有するコプロセッサ１６とメインメモリ１２が接続されている。メインメモリ１２はＣＰＵ１０と外部バス１７（ｅｘｔｅｒｎａｌ  ｂｕｓ）を介して接続されており、ワークエリアとして使用される揮発性領域をなすＲＡＭ（例えばＳＲＡＭ、ＤＲＡＭ、ＳＤＲＡＭ等）と、プログラムが格納される不揮発性領域をなすＲＯＭ（例えばＦｌａｓｈＲＯＭ等）とからなっている（不図示）。また、内蔵メモリ１５は揮発性のＲＡＭ（例えばＳＲＡＭ等）からなっている。ここで、ＣＰＵ１０内に設けられた内部バス１２は外部バス１７よりもバス幅が広く、このためＣＰＵ１０において内蔵メモリ１５はメインメモリ１２よりも高速にアクセスして読み書きすることが可能となっている。しかし、内蔵メモリ１５はＣＰＵ１０内に構成されている関係上、メインメモリ１２よりもコストが高く、その容量は制限されたものとなっている。
【００２０】
コプロセッサ１６は、メインメモリ１２とプロセッサコア１３との間に設けられており、中間コード実行システム１におけるＪａｖａ（登録商標）クラスファイルの実行を高速化する機能を有している。例えば、コプロセッサ１６は、中間コード実行システム１がメインメモリ１２からバイトコード命令をフェッチして実行するにあたり、メインメモリ１２からフェッチされたバイトコード命令をＣＰＵ１０固有のネィティブコード（マシン語）ないしマイクロコードに変換してＣＰＵ１０に引き渡す処理を行う構成とすることができる。この場合、ＣＰＵ１０はプロセッサコア１３にて直接実行することができるネィティブコードやマイクロコードを実行すればよいので、極めて高速にバイトコード命令を実行することが可能となる。本実施形態では、コプロセッサ１６が、このようにバイトコード命令をＣＰＵ１０のマイクロコードに変換する場合について説明する。
【００２１】
ただし、ゲート数増大による高シリコンコストを回避するため、コプロセッサ１６のアクセラレータ機能は全てのバイトコード命令に対応してはおらず、一部のバイトコード命令は、後述するコアモジュール２１がサブモジュール２２ａ，２２ｂから所定のコードを呼び出すことにより実行される。本実施形態では、コプロセッサ１６のアクセラレータ機能が、粒度の大きいｉｎｖｏｋｅｖｉｒｔｕａｌ，ｉｎｖｏｋｅｓｐｅｃｉａｌ，ｉｎｖｏｋｅｓｔａｔｉｃ，ｉｎｖｏｋｅｉｎｔｅｆａｃｅといったメソッド呼び出し命令を含むいくつかのバイトコード命令に対応していない場合について示す。
【００２２】
次に、中間コード実行システム１のソフトウェア構成について説明する。中間コード実行システム１は、内蔵メモリ１５に格納されたコアモジュール２１と、このコアモジュール２１から呼び出されるサブモジュール２２ａ，２２ｂとを有している。このうちサブモジュール２２ａは内蔵メモリ１５に格納されており、サブモジュール２２ｂはメインメモリ１２に格納されている。コアモジュール２１は、中間コード実行システム１でＪａｖａ（登録商標）クラスファイルを実行中にコプロセッサ１６の対応していないバイトコード命令が出現し、制御がコプロセッサ１６からＣＰＵ１０に移動した場合に実行され、サブモジュール２２ａ，２２ｂから出現したバイトコード命令に対応した処理を行うコードを選択して呼び出す機能を有している。
【００２３】
コアモジュール２１およびサブモジュール２２ａ，２２ｂは、いずれも独立したプログラムコードとしての体裁を取る必要はなく、ＣＰＵ１０で実行することにより上述の内容を含む種々の機能を奏するコードの集合であればよい。このような集合は、例えば、関数、手続き、サブルーチン等の概念を含んだ機能単位をなすコードの集合として解釈されることが相当である。
【００２４】
サブモジュール２２ａ，２２ｂのうち、サブモジュール２２ａはｉｎｖｏｋｅｖｉｒｔｕａｌ，ｉｎｖｏｋｅｓｐｅｃｉａｌ，ｉｎｖｏｋｅｓｔａｔｉｃ，ｉｎｖｏｋｅｉｎｔｅｆａｃｅといったメソッドを呼び出すバイトコード命令を実行する際に、コアモジュール２１から呼び出されるものである。本実施形態では、コアモジュール２１に加えて、このサブモジュール２２ａを内蔵メモリ１５に格納しているので、コプロセッサ１６が対応していない、メソッド呼び出しに関するバイトコード命令の実行を、内蔵メモリ１５に格納されたコードを利用して高速に行うことができる。
【００２５】
このようにメソッド呼び出しを実行するためのサブモジュール２２ａだけを内蔵メモリ１５に格納し、サブモジュール２２ｂをメインメモリ１２に格納するのは、容量の限られた内蔵メモリ１５を有効に活用して、中間コード実行システム１のパフォーマンスに大きな影響を与えるメソッド呼び出しを効率的に高速化するためである。ただし、内蔵メモリ１５の容量に余裕がある場合には、サブモジュール２２ａとサブモジュール２２ｂとの双方を内蔵メモリ１５に格納しても構わない。
【００２６】
また、図示しないが、中間コード実行システム１はこれらの他に、クラスファイルをヒープに展開するクラスローダ、展開されたクラスファイルの検証を行うベリファイヤ、メインメモリ１２に配置されたオブジェクトにガベージコレクションを施すガベージコレクタを含むヒープ管理モジュール、処理の流れをコントロールするスレッド管理モジュール、クラスファイル実行時に必要に応じて参照されるクラスライブラリ、ＪＡＲファイルリーダ等をメインメモリに有している。これらについては、通常のソフトウェアＪａｖａ（登録商標）ＶＭにおける対応したモジュールを利用してもよい。
【００２７】
本発明はこれらの他にソフトウェアが存在することを妨げるものではなく、オペレーティングシステム（ＯＳ）、種々のアプリケーション、サービスプログラム、プロトコルスタック、デバイスドライバ等を含んだソフトウェア構成であって構わない。また、中間コード実行システム１を組み込み機器上に構成する場合には、各機器に固有の機能を実現するためのソフトウェアを有することもできる。
【００２８】
次に、以上のような構成の中間コード実行システム１において、メインメモリ１２に格納されたクラスファイル１０３を実行する動作の概要について、図２を参照しながら説明する。クラスファイル１０３は、例えばクラスローダにより不図示のＪＡＲファイルから取り出されたものでもよいし、中間コード実行システム１外からロードされたもの等であっても構わない。また、以下の動作に先だっては、クラスファイル１０３が妥当なものであるかの検証と、ｓｔａｔｉｃフィールドの生成およびコンスタントプールの決定を含むリンクと、クラスの初期化とが行われているものとする。
【００２９】
中間コード実行システム１におけるクラスファイル１０３の実行にあたっては、まず、中間コード実行システム１の初期化が行われる（ＳＴＥＰ１０１）。これによりコプロセッサ１６はクラスファイル１０３からバイトコード命令をフェッチしてマイクロコードに変換する処理が可能な状態となり、コプロセッサ１６の制御により以降の動作が行われる。また、コアモジュール２１およびサブモジュール２２ａは、このＳＴＥＰ１０１において内蔵メモリに配置するようにしてもよいが、これに先だって配置するようにしても構わない。
【００３０】
次に、コプロセッサ１６がクラスファイル１０３からバイトコード命令をフェッチし（ＳＴＥＰ１０２）、フェッチされたバイトコード命令にコプロセッサ１６のアクセラレータ機能が対応しているかを判断する（ＳＴＥＰ１０３）。ここでアクセラレータ機能の対応したバイトコード命令であると判断された場合には、バイトコード命令がＣＰＵ１０の対応するマイクロコードに変換され（ＳＴＥＰ１０４）、当該マイクロコードがＣＰＵ１０のプロセッサコアに渡されて実行される（ＳＴＥＰ１０５）。なお、ＳＴＥＰ１０３とＳＴＥＰ１０４とは厳密に区別されている必要はなく、コプロセッサ１６によりフェッチされたバイトコード命令の変換を試行して、変換できる場合にはそのまま変換し、変換できない場合には変換できないという結果やフラグを出力して下記ＳＴＥＰ１０８以降の処理に移るようにしてもよい。
【００３１】
ＳＴＥＰ１０３において、アクセラレータ機能の対応したバイトコード命令ではないと判断された場合には、制御がコプロセッサ１６からＣＰＵ１０に移動し、ＣＰＵ１０上で各々のコードを実行することににより以降の動作が行われる。まず、ＣＰＵ１０上でコアモジュール２１が実行され、サブモジュール２２ａ，２２ｂからフェッチされたバイトコード命令に対応した処理を行うコードが呼び出される（ＳＴＥＰ１０８）。ここで、コアモジュール２１は高速な内蔵メモリ１５に格納されているので、ＣＰＵ１０はＳＴＥＰ１０８の処理を高速に行うことができる。
【００３２】
次に、ＳＴＥＰ１０８で呼び出されたコードがＣＰＵ１０により実行され（ＳＴＥＰ１０９）、これによりフェッチされたバイトコード命令に応じた処理が行われる。ここで、フェッチされたバイトコード命令がメソッドを呼び出す命令であった場合には、これらの命令に対応したサブモジュール２２ａは高速な内蔵メモリ１５に格納されているので、ＣＰＵ１０はＳＴＥＰ１０９の処理を高速に行うことができる。
【００３３】
バイトコード命令の実行が終わった後は、いずれの場合も実行されたバイトコード命令が最後のものであったかが判断され（ＳＴＥＰ１０６）、最後であると判断された場合にはクラスファイル１０３の実行は終了し、最後であると判断されなかった場合には対象を次のバイトコード命令に移動して（ＳＴＥＰ１０７）、ＳＴＥＰ１０２以降の処理を繰り返す。中間コード実行システム１は、以上のような概略で示される動作により、クラスファイル１０３を実行する。
【００３４】
このような動作によれば、コプロセッサ１６のアクセラレータ機能が対応したバイトコード命令を高速に実行することができるばかりでなく、コプロセッサ１６のアクセラレータ機能が対応していないバイトコード命令を実行するためのＳＴＥＰ１０８がＣＰＵ１０により高速で実行され、さらに、メソッド呼び出し命令の場合にはＳＴＥＰ１０９も同様に高速で実行されるので、コプロセッサ１６のアクセラレータ機能が対応していないバイトコード命令（特にメソッド呼び出し命令）の実行速度を向上することができる。これにより本実施形態の中間コード実行システム１では、アクセラレータを有するハードウェア構成において、容量の限られた高速な内蔵メモリ１５を有効に活用して、極めて優れたパフォーマンスを達成するこができる。
【００３５】
以上のような構成の本実施形態においては、頻繁に呼び出される形式のメソッド呼び出しに応じてサブモジュール２１ａを最適化することによって、メソッド呼び出しの平均的な実行速度をさらに向上することができる。本発明者らが種々のクラスファイルを調査したところ、一般的に、呼び出される頻度が高いメソッドは、ネィティブメソッドではなくＪａｖａ（登録商標）のメソッドであって、スタックフレームを追加しなくてもよいものであることが判明した。したがって、サブモジュール２２ａ内に、そのようなメソッドを呼び出す場合の処理をインライン展開して条件分岐や関数呼び出しを行うことなく実行できる最適化コードを準備し、サブモジュール２２ａが呼び出された際に頻出パターンに該当するか否かを判断し、頻出パターンのメソッドであれば最適化コードを利用して実行し、頻出パターンのメソッドでなければ所定の条件分岐や関数呼び出しを含む通常の処理で実行するように、サブモジュール２２ａを構成することにより、中間コード実行システム１のパフォーマンスをさらに向上することが可能である。また、別パターンのメソッドが高頻度で呼び出される場合には、当該別パターンのメソッドを呼び出す処理をインライン展開したコードを準備し、同様にサブモジュール２２ａを構成すればよい。
【００３６】
以上、本発明の実施形態に係る中間コード実行システムについて説明したが、本発明はこれに限定されることなく、その趣旨を逸脱しない範囲で種々の改良・変更が可能である。例えば、上記の実施形態では、補助メモリとして内蔵メモリ１５を使用した場合を示したが、キャッシュメモリを補助メモリとしても構わないし、メインメモリをＤＲＡＭとして補助メモリをＳＲＡＭとする等の構成も可能である。
【００３７】
また、本実施形態では、アクセラレータ機能を有するコプロセッサ１６を使用した場合を示したが、プロセッサコアと一体的に構成されたアクセラレータを使用した場合にも上記実施形態と略同様に本発明を適用することによって、極めて高いパフォーマンスの中間コード実行システムを得ることができる。
【００３８】
さらに、Ｊａｖａ（登録商標）クラスファイルを実行する中間コード実行システムを構成する場合には、Ｊａｖａ（登録商標）仮想マシン仕様（原題”ＴｈｅＪａｖａ（登録商標，原題ではＴＭ）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ”）に基づいてハードウェアおよび／またはソフトウェアを設計すればよく、クラスファイルを実行可能なこと以外に制限はない。したがって、仕様と本発明の趣旨とを逸脱しない範囲において、自由に設計を行うことが可能である。さらにまた、本発明はＪａｖａ（登録商標）クラスファイルを実行する中間コード実行システムに限られるものではない。
【００３９】
【発明の効果】
本発明によれば、アクセラレータを利用することができない命令を高速な補助メモリに格納されたプログラムコードを利用してソフトウェア的に実行するので、アクセラレータを利用することができない命令をより高速に実行することができ、これによりアクセラレータを備えた中間コード実行システムのパフォーマンスを向上することができる。
【図面の簡単な説明】
【図１】本実施形態にかかる中間コード実行システムの概略図
【図２】中間コード実行システムでクラスファイルを実行する動作の概略図
【符号の説明】
１  中間コード実行システム
１０  ＣＰＵ
１２  メインメモリ
１３  プロセッサコア
１４  内部バス
１５  内蔵メモリ
１６  コプロセッサ
１７  外部バス
２１  コアモジュール
２２ａ，２２ｂ  サブモジュール
２３  クラスファイル
【図１】
2004280766.tif 000003
【図２】
2004280766.tif 000004