Warning: copy(htaccessbak): failed to open stream: No such file or directory in /home/jtokkyo/public_html/header.php on line 10
中間コード実行システム、中間コード実行方法および中間コード実行プログラム - 特開2003−202993 | j-tokkyo
トップ :: G 物理学 :: G06 計算;計数

【発明の名称】 中間コード実行システム、中間コード実行方法および中間コード実行プログラム
【発明者】 【氏名】小林 哲之
【住所又は居所】東京都新宿区西早稲田2−18−18 株式会社アプリックス内

【要約】 【課題】中間コード実行時のパフォーマンスが高い中間コード実行システム、中間コード実行方法および中間コード実行プログラムを提供する。

【解決手段】所定の命令体系に含まれる命令のそれぞれを実行する処理モジュール11,12を有し、命令体系に従って作成された中間コードを逐次的に解釈して実行する中間コード実行システム10において、中間コードから取り出された命令が、命令体系から選択されたサブセットのそれぞれに該当するかを判断し、該当する場合にはその命令に対応した処理モジュール11を実行する第1の処理命令実行部15と、第1の処理命令実行部15で実行されなかった処理命令についてその処理命令の種類を特定し、それに対応した処理モジュール12を実行する第2の処理命令実行部17と、を設ける。
【特許請求の範囲】
【請求項1】 所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行するシステムであって、第1の記憶手段と、前記第1の記憶手段に比して低速な第2の記憶手段と、前記第1の記憶手段に記憶され、前記プログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールと、前記第2の記憶手段に記憶され、前記命令セットの残りの命令に対応した第2のインタープリターモジュールと、前記第1のインタープリターモジュールにより、中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行し、該当するものが前記サブセットにない場合には、前記第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行する制御手段と、を具備することを特徴とする中間コード実行システム。
【請求項2】 前記所定のプログラム言語はJava(R)言語であり、前記中間コードはJava(R)クラスファイルであって、前記命令はJava(R)バイトコード命令であることを特徴とする請求項1に記載の中間コード実行システム。
【請求項3】 前記サブセットは中間コードに所定の頻度以上で含まれる命令を選択した集合であり、中間コード実行システムが使用される環境に応じて予め設定されていることを特徴とする請求項1または請求項2に記載の中間コード実行方法。
【請求項4】 少なくとも第1の記憶手段および前記第1の記憶手段に比して低速な第2の記憶手段が接続された制御手段により、所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行する中間コード実行方法であって、上記制御手段により、前記プログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールにより中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行するステップと、上記制御手段により、該当するものが前記サブセットにない場合には、前記命令セットの残りの命令に対応した第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行するステップと、を有することを特徴とする中間コード実行方法。
【請求項5】 前記所定のプログラム言語はJava(R)言語であり、前記中間コードはJava(R)クラスファイルであって、前記命令はJava(R)バイトコード命令であることを特徴とする請求項4に記載の中間コード実行方法。
【請求項6】 前記サブセットは中間コードに所定の頻度以上で含まれる命令を選択した集合であり、中間コード実行方法の適用される環境に応じて予め設定されていることを特徴とする請求項4または請求項5に記載の中間コード実行方法。
【請求項7】 少なくとも第1の記憶手段および前記第1の記憶手段に比して低速な第2の記憶手段が接続された制御手段により、所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行するプログラムであって、前記プログラム言語の命令セットのサブセットに対応し、前記第1の記憶手段に格納される第1のインタープリターモジュールと、前記命令セットの残りの命令に対応し、前記第2の記憶手段に格納される第2のインタープリターモジュールとを含み、前記制御手段は、前記第1のインタープリターモジュールにより、中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行し、該当するものが前記サブセットにない場合には、前記第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行することを特徴とする中間コード実行プログラム。
【請求項8】 前記サブセットは中間コードに所定の頻度以上で含まれる命令を選択した集合であり、中間コード実行プログラムの使用される環境に応じて予め設定されていることを特徴とする請求項7に記載の中間コード実行プログラム。
【発明の詳細な説明】【0001】
【発明の属する技術分野】本発明は、中間コードを実行する中間コード実行システム、中間コード実行方法および中間コード実行プログラムに関する。
【0002】
【従来の技術】ハードウェアやOSといった、コンピュータのプラットフォームに依存しないプログラムを提供することを目的として、各プラットフォーム上にソフトウェア的な手法またはハードウェア的な手法により仮想機械(VM; Virtual Machine)を構築し、この仮想機械上でソースコードとオブジェクトコードとの間の中間的なコード(以下、中間コードという)を実行する方法が提案されている。このような方法を採用したプログラム言語の一つとしては、クラスファイルと呼ばれる中間コードの形式を採用したJava(R)が挙げられる。なお、以下ではハードウェアと当該ハードウェア上に構築された仮想機械とを一体的に、中間コード実行システムと呼称する場合がある。
【0003】上記の方法によれば、単一のプログラムコードを種々のプラットフォームに供給して実行することが可能となるため、個々のプラットフォームでしか実行できないオブジェクトコードを準備する必要がなくなる。これにより、プログラムの配信を簡潔化することができるばかりでなく、ソフトウェア開発を効率化することも可能である。このため、種々のコンピュータのプラットフォームにおいて仮想機械を構築することが行われている。さらに、近時ではプロセッサを搭載した種々の電子機器(以下、組込み機器という)においても、プロセッサ上に仮想計算機を構築することが行われはじめている。
【0004】ここで、仮想計算機としては、プラットフォーム上にソフトウェア的に構築され、クラスファイルに含まれるバイトコード命令を逐次的に解釈して実行するインタープリター方式のものが知られている。
【0005】しかしながら、インタープリター方式の仮想計算機は、クラスファイルから一つ一つバイトコード命令を取り出してはその内容を解釈するというプロセスが必要であり、このプロセスがシステムのオーバーヘッドとなる場合がある。このようなオーバーヘッドを軽減してパフォーマンスを向上するために、クラスファイルを各ハードウェアに固有のネイティブコードにコンパイルしてから実行するJITコンパイラ(Just In Time Compiler)方式や、AOTコンパイラ(Ahead Of Time Compiler)方式等が提案されている。さらに、バイトコード命令を直接実行することができるように特別に設計されたJava(R)チップのように、仮想計算機をハードウェア的に構築することも試みられている。
【0006】上記のJITやAOT等のコンパイラ方式ではプロセッサのネイティブコードを実行することになるので、命令実行の速度だけを見ればインタープリター方式よりも優れている。しかしながら、コンパイラ方式では、コンパイルの作業自体に必要なワークメモリや、クラスファイルに比べてサイズが4〜10倍と大きいネイティブコードを保存する領域も必要となるため、インタープリター方式よりも大量のメモリが必要となるという問題がある。
【0007】このような問題は、特に通常のコンピュータよりもハードウェア資源の制約が厳しい組み込み機器において顕著となる。また、クラスファイルの実行を指示してからコンパイルを開始する場合には、コンパイルの作業がオーバーヘッドとなって十分なパフォーマンスが得られないという可能性もある。
【0008】また、上記のJava(R)チップによれば、コンパイルすることもなく高パフォーマンスでクラスファイルを実行することが可能であるが、このような専用チップの開発には高額の開発費を要し、チップ自体の高コスト化を免れることはできない。また、技術の進歩や市場のニーズに応じた言語仕様のバージョンアップや修正が適宜行われることを鑑みると、仮想機械をハードウェア的に構成することは必ずしも好適ではないという一面もある。特に、組み込み機器における仮想機械には、低コスト化に対する強い要請と短サイクルで仕様がバージョンアップされることとが相俟って、Java(R)チップの採用は現実的ではない。
【0009】以上説明したように、コンパイラ方式やJava(R)チップ等の技術は、コストおよび要求ハードウェア資源等の点で問題があり、特に、これらの制限が厳しい組み込み機器に適用することは難しい。このため、組み込み機器に適用することを視野に入れて、別の方法により仮想機械ないし中間コード実行システムのパフォーマンスを向上することが望まれている。
【0010】
【発明が解決しようとする課題】本発明は、上記事情に鑑みてなされたものであって、低コストでありながら、制限されたハードウェア環境において中間コード実行時のパフォーマンス向上が可能な中間コード実行システム、中間コード実行方法、および中間コード実行プログラムを提供することを目的とする。
【0011】
【課題を解決するための手段】上記課題を解決するために、本発明の第1の観点では、所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行するシステムであって、第1の記憶手段と、前記第1の記憶手段に比して低速な第2の記憶手段と、前記第1の記憶手段に記憶され、前記プログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールと、前記第2の記憶手段に記憶され、前記命令セットの残りの命令に対応した第2のインタープリターモジュールと、前記第1のインタープリターモジュールにより、中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行し、一方、該当するものが前記サブセットにない場合には、前記第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行する制御手段と、を具備することを特徴とする中間コード実行システムが提供される。
【0012】また、本発明の第2の観点では、少なくとも第1の記憶手段および前記第1の記憶手段に比して低速な第2の記憶手段が接続された制御手段により、所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行する中間コード実行方法であって、上記制御手段により、前記プログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールにより中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行するステップと、上記制御手段により、該当するものが前記サブセットにない場合には、前記命令セットの残りの命令に対応した第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行するステップと、を有することを特徴とする中間コード実行方法が提供される。
【0013】さらに、本発明の第3の観点では、少なくとも第1の記憶手段および前記第1の記憶手段に比して低速な第2の記憶手段が接続された制御手段により、所定のプログラム言語で作成されたソースコードを変換して得られた中間コードを実行するプログラムであって、前記プログラム言語の命令セットのサブセットに対応し、前記第1の記憶手段に格納される第1のインタープリターモジュールと、前記命令セットの残りの命令に対応し、前記第2の記憶手段に格納される第2のインタープリターモジュールとを含み、前記制御手段は、前記第1のインタープリターモジュールにより、中間コードから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行し、該当するものが前記サブセットにない場合には、前記第2のインタープリターモジュールにより、当該命令が残りの命令のいずれに該当するかを特定して実行することを特徴とする中間コード実行プログラムが提供される。
【0014】以上のような構成の本発明によれば、所定のプログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールと、命令セットの残りの命令に対応した第2のインタープリターモジュールとを用いて、サブセットに含まれる命令は高速な第1の記憶手段に格納された第1のインタープリターモジュールにより実行し、それ以外の命令は低速な第2のインタープリターモジュールに格納された第2のインタープリターモジュールにより実行するので、サブセットに含まれる命令の実行を高速化することができる。本発明において、サブセットに含まれない命令の実行速度は高速化されないが、サブセットに含まれる命令の実行を高速化する効果は顕著であることから、所定の中間コードを実行する中間コード実行システムのパフォーマンス向上が可能である。そして、本発明は、特殊なハードウェアを必要としないので低コストで実装可能であり、かつ、消費メモリを大幅に増大させることもなく中間コード実行のパフォーマンスを向上させることができるので、組み込み機器に好適に適用することができる。
【0015】本発明において、前記所定のプログラム言語はJava(R)言語、前記中間コードはJava(R)バイトコード命令を含むクラスファイル、前記命令はJava(R)バイトコード命令とすることができる。
【0016】また、前記サブセットは、中間コードに含まれる命令のうち所定の頻度以上で含まれる命令を選択した集合とし、本発明が適用される環境に応じて予め設定されていることが好ましい。これにより、環境に応じて設定された高頻度の命令を第1のインタープリターモジュールで高速に実行することができるので、中間コードを実行する際のパフォーマンスを一層向上することが可能である。
【0017】
【発明の実施の形態】以下、図面を参照して、本発明の実施の形態について説明する。
[第1実施形態]まず、図1から3に基づいて、本発明の第1実施形態を説明する。図1は本発明の第1実施形態に係る中間コード実行システムのハードウェア構成を概略的に示す図面であり、図2は本発明の第1実施形態に係る中間コード実行システムの機能ブロック図である。
【0018】図1に示したように、中間コード実行システムのハードウェア構成は、プロセッサ(プロセッサコア)2および高速メモリ3を有し、処理装置をなすチップ1と、RAM7およびROM8を有する記憶部6とを備えている。これらの他、入力装置、表示装置、外部インターフェイス等を備えてもよいが、これらは本発明の構成および作用効果と直接的な関係を有していないので、ここでは省略する。
【0019】なお、請求項に記載の要素と図2に示した構成とを対比すると、請求項に記載の制御手段とは上記プロセッサ2に相当し、第1の記憶手段とは上記高速メモリ3に相当し、第2の記憶手段とは上記記憶部6に相当する。
【0020】ここで、プロセッサ2と記憶部6とは外部バス5を介して接続されているのに対して、プロセッサ2と高速メモリ3とは外部バス4よりもバス幅が広く高速な内部バス4を介して接続されており、高速メモリ3は記憶装置5よりもプロセッサ2に高速でデータ転送することが可能となっている。このような高速メモリ3は揮発性メモリで構成されているが、記憶部6をなすROMやRAMに比べてコストが高いため通常は小容量が実装される。高速メモリ3としては、内蔵メモリやキャッシュメモリを用いることができるが、本実施形態では、一例として内蔵メモリを用いる場合を示している。
【0021】以上のようなハードウェア構成において、記憶部6に格納された種々のソフトウェアをプロセッサ2で実行することにより、図2に示したような機能ブロック図をなす中間コード実行システム10が実現される。
【0022】この中間コード実行システム10は、プラットフォームに依存しない中間コードを実行するものであり、第1実施形態ではJava(R)言語で作成されたソースコードをコンパイルして得られたクラスファイルを実行する場合について示す。
【0023】以下、各機能ブロックについて説明する。この中間コード実行システム10は、処理命令取得部13、第1の処理命令実行部15、第2の処理命令実行部17とを具備している。命令取得部13は、クラスファイルから次に実行する命令コードを逐次的に取り出すものであり、当該命令取得部13により取り出された命令コードは第1の処理命令実行部15に渡される。
【0024】第1の処理命令実行部15は、選択命令判断部14と処理モジュールと11とを備えており、Java(R)言語の命令体系に含まれる全バイトコード命令から選択されたバイトコード命令のサブセットについて、逐次的に解釈して実行する機能を有している。より具体的には、選択命令判断部14において、処理命令取得部13により取り出された命令コードと、前述のサブセットに含まれるバイトコード命令のそれぞれとを比較し、同一であった場合には当該バイトコード命令に対応した処理モジュール11を実行する。
【0025】処理モジュール11は、前述のサブセットに含まれる個々のバイトコード命令に対応して設けられ、各バイトコード命令の定義内容に応じた処理をプロセッサ2に実行させるソフトウェアプログラムである。サブセットに含まれるバイトコード命令に同一のものがなかった場合には、取り出された命令コードは第2の処理命令実行部17に渡される。
【0026】第2の処理命令実行部17は、非選択命令特定部16と処理モジュールと12とを備えており、前述のサブセットに含まれないバイトコード命令について逐次的に解釈して実行する機能を有している。より具体的には、非選択命令特定部16において、取り出された命令コードと、前述のサブセットに含まれないバイトコード命令のそれぞれとを比較し、同一であった場合には当該バイトコード命令に対応した処理モジュール12を実行する。
【0027】以上のような第1の処理命令実行部15および第2の処理命令実行部17の組み合わせにより、取り出された命令コードに対応した処理モジュール11または12において所定の処理が実行される。
【0028】以上説明したように、第1実施形態では、バイトコード命令を第1の処理命令実行部15で実行されるものと、第2の処理命令実行部17で実行されるものとに2分割する。ここで、Java(R)言語におけるバイトコード命令は、粒度が小さい四則演算系命令(iadd,isub,imul,idiv,・・・)やビット演算系命令(ior,iand,ishl,・・・)、粒度が中程度のメモリ操作系命令(iload,istore,iaload,・・・)、粒度が大きくJava(R)に特異な命令(new,invokespecial,・・)に大別することができる。そして、クラスファイル中に出現する頻度は、粒度が小さい命令では高く、粒度が大きい命令では低いという傾向を一般的に持っている。
【0029】そこで、第1実施形態では、予め全バイトコード命令のうち粒度が小さく出現頻度の高いものを選択しておき、当該選択されたバイトコード命令については第1の処理命令実行部15で実行し、残りのバイトコード命令を第2の処理命令実行部17で実行する構成とする。すなわち、第1の処理命令実行部15は、前記選択されたバイトコード命令のそれぞれに対応した処理モジュール11を有している。そして、選択命令判断部14は、与えられた命令コードのオペコードと選択されたバイトコード命令のオペコードとを一つずつ比較し、同一だった場合に対応する処理モジュール11を実行する。また、第2の処理命令実行部17は、残りのバイトコード命令のそれぞれに対応した処理モジュール12を有している。そして、非選択命令特定部16は、与えられた命令コードのオペコードと残りのバイトコード命令のオペコードを一つずつ比較し、同一だった場合に対応する処理モジュール12を実行する。
【0030】ただし、バイトコード命令のうちいずれが高頻度であるかは、中間コード実行システム10が搭載される環境に左右され得る。例えば、携帯電話に搭載した場合と、カーナビゲーションシステムに搭載した場合と、PDAに搭載した場合とでは、いずれも使用目的や使用状況が異なるので、ある環境では高頻度であった命令が他のシステムで高頻度になるとは限らない。
【0031】従って、中間コード実行システム10が搭載される環境に応じてバイトコード命令の出現頻度を調査し、その調査結果に基づいて第1の処理命令実行部15で実行するバイトコード命令を選択することがより好ましい。
【0032】さらに、第1実施形態では、以上のように構成された第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)が高速メモリ3に格納された状態でクラスファイルを実行する。例えば、中間コード実行システム10が、クラスファイルの実行前に記憶部6から高速メモリ3に第1の処理命令実行部15をなすソフトウェアプログラムのコードをコピーするようにしてもよい。このように第1の処理命令実行部15をなすソフトウェアプログラムを高速メモリ3に格納するためには、第1の処理命令実行部15で実行するバイトコード命令の数を調節して、第1の処理命令実行部15をなすソフトウェアプログラムが高速メモリ3に格納可能なサイズとなるようにしておくことが好適である。
【0033】これに対して、第2の処理命令実行部17をなすソフトウェアプログラムのコード(第2のインタープリターモジュール)は、記憶部6に格納された状態のままでよい。
【0034】次に、図3を参照して、第1実施形態にかかる中間コード実行システム10の動作を説明する。この動作は、記憶部6に格納された一連のソフトウェアプログラムをプロセッサ2上で順次実行することにより構成されるものである。
【0035】例えば、中間コード実行システム10は、不図示の情報入側からJava(R)アプリケーションのクラスファイルを受け付け、受け付けたクラスファイルを記憶部6のRAM7に格納する(S1)。次に中間コード実行システム10は、以下に示す一連の動作によりクラスファイルを実行する。この際、第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)は、予め高速メモリ3に格納された状態としておく。以下の動作は、第1実施形態における中間コード実行方法にも相当する。
【0036】まず、プロセッサ2で所定のソフトウェアプログラムを実行することにより処理命令取得部13が構成され、クラスファイルから命令コードが一つ取り出される(S2)。続いて、高速メモリ3に格納された第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)が実行され、S2で取り出された命令コードが選択されたバイトコード命令のいずれかに特定可能か判断され(S3)、可能な場合には当該命令コードに対応した処理モジュール11が実行される(S4)。ここでの処理は、より具体的には、第1の処理命令実行部15の選択命令判断部14において取り出された命令コードのオペコードと選択されたバイトコード命令のオペコードとを一つずつ比較し、同一だった場合に対応する処理モジュール11を実行するものである。
【0037】上記S3において可能と判断されなかった場合、つまり、選択命令判断部14において取り出された命令コードのオペコードが選択されたバイトコード命令のオペコードのいずれとも同一と判断されなかった場合には、第2の処理命令実行部17をなすソフトウェアプログラム(第2のインタープリターモジュール)が実行され、命令コードが残りのバイトコード命令のいずれであるかを特定し(S5)、特定された命令コードに対応した処理モジュール12を実行する(S6)。
【0038】このS6での処理は、より具体的には、第2の処理命令実行部17の非選択命令特定部16において与えられた命令コードのオペコードと残りのバイトコード命令のオペコードを一つずつ比較し、同一だった場合に対応する処理モジュール12を実行するものである。
【0039】以下、クラスファイルに含まれる次の命令コードについて上記と同様の手順を行い、これを繰り返すことによりクラスファイルは実行される。
【0040】以上のような動作によれば、全バイトコード命令のうち選択されたバイトコード命令についてはL1で示した内側ループ(inner loup)をなす処理により実行され、残りのバイトコード命令についてはL2で示した外側ループ(outer loup)をなす処理により実行される。
【0041】以上説明したように、第1実施形態では、予め全バイトコード命令のうち粒度が小さく出現頻度が高いものを選択し、まず選択されたバイトコード命令に対応した第1の処理命令実行部15において命令コードの解釈および実行を行い、実行できなかった命令コードを第2の処理命令実行部17で解釈および実行する構成としたので、出現頻度の高いバイトコード命令についての解釈および実行を優先的に行うことができる。さらに、第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)は高速メモリ3に格納されているので、第1の処理命令実行部15は出現頻度の高いバイトコード命令についての解釈および実行を高速で行うことができる。
【0042】したがって、第1実施形態によれば、出現頻度が高いバイトコード命令の実行を優先的かつ高速に行うことができる。一方、出現頻度の低いバイトコード命令については第2の処理命令実行部17により解釈および実行されるので、バイトコード命令の実行を高速化することはできない。しかし、第1の処理命令実行部15により出現頻度が高いバイトコード命令を優先的に高速で実行することによる効果は極めて高く、クラスファイルを実行する処理全体でとらえると、中間コード実行システム10のパフォーマンスは向上する。
【0043】また、第1実施形態においては、第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)を、選択された命令コードの実行に最適化した構造としてもよく、このようにした場合には中間コード実行システム10のパフォーマンスをさらに向上することが可能である。
【0044】例えば、第1の処理命令実行部15をなすソフトウェアプログラム(第1のインタープリターモジュール)および第2の処理命令実行部17をなすソフトウェアプログラム(第2のインタープリターモジュール)は、いずれもCやC++といった高級言語で作成するようにしてもよいが、このうち特に前者をアセンブリ言語で最適化した構造に作り込むことにより中間コード実行システム10のパフォーマンスを一層向上させることができる。
【0045】さらに、選択命令判断部14において、取り出された命令コードのオペコードと、選択されたバイトコード命令のオペコードとを比較して同一か否かを判断するにあたり、頻度がより高いバイトコード命令から順に比較することが一層好ましい。これは、非選択命令特定部16においても同様である。
【0046】ここで、第1実施形態を、中間コードを実行するためのコンピュータプログラムプロダクトという観点からとられると、以下のようになる。すなわち、少なくとも高速メモリ3および高速メモリ3に比して低速な記憶部6が接続されたプロセッサ2により、Java(R)言語で作成されたソースコードを変換して得られたクラスファイルを実行するプログラムであって、Java(R)言語の命令セットのサブセットに対応し、高速メモリ3に格納される第1のインタープリターモジュールと、前記命令セットの残りの命令に対応し、記憶部6に格納される第2のインタープリターモジュールとを含み、プロセッサ2は、第1のインタープリターモジュールにより、クラスファイルから取り出された命令が前記サブセットのいずれに該当するかを判断し、該当するものが前記サブセットにある場合にはそれを実行し、該当するものが前記サブセットにない場合には、第2のインタープリターモジュールにより、その命令が残りの命令のいずれに該当するかを特定して実行する中間コード実行プログラムである。
【0047】[第2実施形態]次に、図4および図5に基づいて、本発明の第2実施形態を説明する。図4は、本発明の第2実施形態の中間コード実行システム20の機能ブロック図である。図4において、上記第1実施形態と同一の構成部分については、同一の符号を付している。第2実施形態に係る中間コード実行システム20は、その基本構成は上記第1実施形態と同様であるが、上記第1実施形態における第1の処理命令実行部15に替えて、第1の選択命令実行部24および第2の選択命令実行部26を有している点で相違する。以下、この相違点を中心に説明する。
【0048】第1の選択命令実行部24は、第1の選択命令判断部23と処理モジュールと21とを備え、全バイトコード命令から選択されたバイトコード命令の第1のサブセットについて、逐次的に解釈して実行する機能を有している。
【0049】第2の選択命令実行部26は、第2の選択命令判断部25と処理モジュールと22とを備えており、上記第1のサブセットを除いた残りのバイトコード命令から選択されたバイトコード命令の第2のサブセットについて、逐次的に解釈して実行する機能を有している。
【0050】処理モジュール21は第1のサブセットに属する各バイトコード命令の定義内容に応じた処理をプロセッサ2に実行させるソフトウェアプログラムであり、処理モジュール22は第2のサブセットに属する各バイトコード命令の定義内容に応じた処理をプロセッサ2に実行させるソフトウェアプログラムである。
【0051】また、第1の選択命令実行部24および第2の選択命令実行部26の具体的な機能は、第1実施形態における処理命令実行部15と略同様にして、取り出された命令コードが第1のサブセット若しくは第2のサブセットに属するバイトコード命令のいずれかと同一である場合に、当該バイトコード命令を実行するものである。
【0052】ここで、第1のサブセットにはクラスファイル中に出現する頻度が最も高い水準のバイトコード命令が含まれており、第2のサブセットにはクラスファイル中に出現する頻度が次に高い水準のバイトコード命令が含まれている。
【0053】そして、第2実施形態では、第1の選択命令実行部24をなすソフトウェアプログラムのコードを高速メモリ3に格納する。第2の選択命令実行部26をなすソフトウェアプログラムのコードについては、空き容量に余裕がある場合には高速メモリ3に格納することが好ましいが、高速メモリ3に空き容量が不足している場合には記憶部6に格納しても構わない。
【0054】次に、図5を参照して、中間コード実行システム20の動作を説明する。まず、第1実施形態と同様に、中間コード実行システム10は、不図示の情報入側からJava(R)アプリケーションのクラスファイルを受け付け、受け付けたクラスファイルを記憶部6のRAM7に格納し(S11)、第1の選択命令実行部24をなすソフトウェアプログラムを高速メモリ3に格納した状態で、以下の手順によりクラスファイルを実行する。
【0055】即ち、まず第1実施形態と同様にクラスファイルから命令コードが一つ取り出される(S12)。続いて、高速メモリ3に格納された第1の選択命令実行部24をなすソフトウェアプログラムが実行され、取り出された命令コードが第1のサブセットのいずれかのバイトコード命令に特定可能か判断され(S13)、可能な場合には当該命令コードに対応した処理モジュール21が実行される(S14)。S13において可能と判断されなかった場合には、第2の選択命令実行部17をなすソフトウェアプログラムが実行され、命令コードが第2のサブセットのいずれかのバイトコード命令に特定可能か判断され(S15)、可能な場合には当該命令コードに対応した処理モジュール22が実行される(S16)。
【0056】さらに、上記S15においても可能と判断されなかった場合には、第2の処理命令実行部17をなすソフトウェアプログラムが実行され、命令コードが残りのバイトコード命令のいずれであるかを特定し(S17)、特定された命令コードに対応した処理モジュール12を実行する(S18)。
【0057】以下、クラスファイルに含まれる次の命令コードについて上記と同様の手順を行い、これを繰り返すことによりクラスファイルは実行される。
【0058】以上のような動作でクラスファイルを実行する第2実施形態によれば、クラスファイル中に出現する頻度が最も高い水準のバイトコード命令の実行を第1実施形態と同様に優先的かつ高速に行うことができ、さらにクラスファイル中に出現する頻度が次に高い水準のバイトコード命令について残りのバイトコード命令よりも優先して実行することができる。
【0059】また、上記の動作では、予め第1の選択命令実行部24をなすソフトウェアプログラムのコードを高速メモリ3に格納することとしているが、クラスファイルの実行時に高速メモリ3の空き容量を検出し、空き容量に余裕がある場合には第2の選択命令実行部26をなすソフトウェアプログラムのコードも高速メモリ3に格納するようにしてもよい。
【0060】以上、本発明の第1および第2実施形態に係る中間コード実行システムについて説明したが、本発明はこれらに限定されることなく、その趣旨を逸脱しない範囲で種々の改良・変更が可能であることは勿論である。例えば、上記の実施形態では、高速メモリ3として内蔵メモリを使用した場合を示したがこれに限られるものではなく、高速メモリ3はキャッシュメモリであってもよい。また、本発明は、図1に示したハードウェア構成の例に限らず、相対的に高速なメモリと相対的に低速なメモリとが混在したハードウェア構成であれば、いずれにおいても適用することが可能である。チップ1は例えばMPU、CPU単体でもよいし、さらに周辺I/Oやバスインターフェイス等を含むマイクロコントローラとしてもよく、特定目的のために特化したASICや、システムの主要機能を搭載したSoCとしても構わない。また、プロセッサ2を複数含む形態としてもよい。
【0061】第1実施形態において高速メモリ3としてキャッシュメモリを用いる場合には、第1のインタープリターモジュールのコードは記憶部6に格納されたままでクラスファイルの実行を開始してもよい。このようにした場合も、当該コードが所定のキャッシュ管理機構により高速メモリ3であるキャッシュメモリ内に格納された状態となれば、上記実施形態と同様に中間コード実行システム10のパフォーマンスを向上することができる。第2実施形態においてキャッシュメモリを用いる場合も同様である。
【0062】ただし、高速メモリ3としてキャッシュメモリを使用する場合、キャッシュメモリの中身はキャッシュ管理機構により管理され、明示的に操作することはできない。したがって、この場合には、第1のインタープリターモジュールのコードがキャッシュ管理機構によって効率よくキャッシュされるようにすることが望ましい。また、第1のインタープリターモジュールのコードがキャッシュされた状態になっても、キャッシュミスが生じるとキャッシュ管理機構がキャッシュメモリの一部を解放して新たな内容を書き込んでしまい、第1のインタープリターモジュールのコードが一部失われ、本発明の作用効果が得られなくなる場合がある。この観点からは、キャッシュメモリよりも、明示的に操作可能な内蔵メモリを高速メモリ3として用いることが好ましい。
【0063】また、上記の実施形態ではいずれも中間コードとしてJava(R)のクラスファイルを実行する場合について示したが、これに限られるものではない。
【0064】さらに、中間コード実行システムをなすソフトウェアプログラムは、記憶部6に予め格納しておいてもよいし、中間コード実行システムの外部から必要に応じて提供を受けるようにしてもよい。このとき、中間コード実行システムの外部から提供を受ける形態は、ネットワークを介したサーバからのダウンロードに限られるものではなく、CD−ROMや可搬性メモリなどの記憶媒体による提供であってもよい。
【0065】さらにまた、処理モジュールについて、少なくともその一部をハードウェアロジックとする構成を採用することで、パフォーマンスのさらなる向上を図ることも可能である。例えば、上記第1実施形態における第1の処理命令実行部15の処理モジュール11をハードウェアロジックとすれば、高頻度のバイトコード命令についての実行をさらに高速化することができる。このような場合には、選択するバイトコード命令の数を調節することにより、ハードウェアロジック化に要するゲート数を許容範囲に収めることができる。
【0066】
【発明の効果】本発明によれば、所定のプログラム言語の命令セットのサブセットに対応した第1のインタープリターモジュールと、命令セットの残りの命令に対応した第2のインタープリターモジュールとを用いて、サブセットに含まれる命令は高速な第1の記憶手段に格納された第1のインタープリターモジュールにより実行し、それ以外の命令は低速な第2のインタープリターモジュールに格納された第2のインタープリターモジュールにより実行するので、サブセットに含まれる命令の実行を高速化することができる。本発明において、サブセットに含まれない命令の実行速度は高速化されないが、サブセットに含まれる命令の実行を高速化する効果は顕著であることから、所定の中間コードを実行する中間コード実行システムのパフォーマンス向上が可能である。そして、本発明は、特殊なハードウェアを必要としないので低コストで実装可能であり、かつ、消費メモリを大幅に増大させることもなく中間コード実行のパフォーマンスを向上させることができるので、組み込み機器に好適に適用することができる。
【出願人】 【識別番号】394020376
【氏名又は名称】株式会社アプリックス
【住所又は居所】東京都新宿区西早稲田2−18−18
【出願日】 平成14年10月29日(2002.10.29)
【代理人】 【識別番号】100058479
【弁理士】
【氏名又は名称】鈴江 武彦 (外5名)
【公開番号】 特開2003−202993(P2003−202993A)
【公開日】 平成15年7月18日(2003.7.18)
【出願番号】 特願2002−314985(P2002−314985)