(57)【要約】【課題】  複数のプロセッサを備えたコンピュータシステムまたは組み込み機器において、仮想機械の構築されていないプロセッサ上で、中間コードで表現されたプログラムを実行することができる中間コード実行システムを提供すること。【解決手段】  第１および第２のプロセッサを含み、オブジェクトコードよりも抽象度の高い中間コードで表現されたプログラムを実行する中間コード実行システムでにおいて、第１のプロセッサにて中間コードで表現されたプログラムを第２のプロセッサのネィティブコードにコンパイルする処理を行い、得られたネィティブコードのプログラムを第２のプロセッサにて実行する。【選択図】      図１
2005108126.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１および第２のプロセッサとを含み、オブジェクトコードよりも抽象度の高い中間コードで表現されたプログラムを実行する中間コード実行システムであって、
第１のプロセッサにて中間コードで表現されたプログラムを第２のプロセッサのネィティブコードにコンパイルする処理を行い、得られたネィティブコードのプログラムを第２のプロセッサにて実行することを特徴とする中間コード実行システム。
【請求項２】
第１のプロセッサにて中間コードで表現されたプログラムを実行する機能をさらに有することを特徴とする請求項１に記載の中間コード実行システム。
【請求項３】
前記第１のプロセッサにて中間コードで表現されたプログラムを実行する機能は、中間コードで表現されたプログラムの少なくとも一部を第１のプロセッサのネィティブコードにコンパイルすることを特徴とする請求項２に記載の中間コード実行システム。
【請求項４】
前記第２のプロセッサは、表示装置コントローラ若しくはＩｒＤＡコントローラの内蔵マイコン、ＤＳＰ、または、ＧＰＵであることを特徴とする請求項１から請求項３のいずれか１項に記載の中間コード実行システム。
【請求項５】
前記中間コードで表現されたプログラムは、Ｊａｖａ（登録商標）クラスファイルであることを特徴とする請求項１から請求項４のいずれか１項に記載の中間コード実行システム。
【請求項６】
請求項１から請求項５のいずれか１項に記載の中間コード実行システムを搭載した中間コード実行システム搭載機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネィティブコードよりも抽象度の高い中間コード形式のプログラムを実行する中間コード実行システム、および、当該中間コード実行システムを搭載した中間コード実行システム搭載機器に関する。より詳細には、Ｊａｖａ（登録商標）クラスファイルを実行する中間コード実行システムおよび中間コード実行システム搭載機器に関する。
【背景技術】
【０００２】
ハードウェアやＯＳといった、コンピュータのプラットフォームに依存しないプログラムを提供することを目的として、各プラットフォーム上にソフトウェア的な手法ないしハードウェア的な手法により仮想機械（ＶＭ；  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を構築し、この仮想機械上でネイティブコードよりも抽象度の高い中間コード形式のプログラムを実行する方法が提案されている。このような方法を採用したプログラム言語の一つとして、クラスファイルと呼ばれる中間コード形式を採用したＪａｖａ（登録商標）を挙げることができる。なお、以下ではハードウェアと当該ハードウェア上に構築された仮想機械とを一体的に、中間コード実行システムと呼称する。
【０００３】
上記の方法によれば、単一のプログラムコードを種々のプラットフォームに供給して実行させることが可能となるため、オブジェクトコードをプラットフォームの数だけ準備する必要がなくなる。これにより、プログラムの配信を簡潔化することができるばかりでなく、ソフトウェア開発を効率化することも可能である。特にＪａｖａ（登録商標）は、プラットフォーム非依存であることに加えて、オブジェクト指向に基づくプログラミング言語であることから理解しやすく構造的なプログラムを容易に作成することができることや、ポインタによる明示的なメモリ操作をサポートしないのでポインタを原因としたメモリ破壊が生じ得ないこと、クラスファイルのサイズがコンパクトでネットワーク上の伝送に適していること等の利点をさらに有している。
【０００４】
上述した理由から、種々のコンピュータのプラットフォームにおいて仮想機械を構築することが行われている。さらに、近時ではプロセッサを搭載した種々の電子機器（以下、組込み機器という）において、プロセッサ上に仮想機械を構築することが行われており、これにより組み込み機器向けのプログラミングにおいてもＪａｖａ（登録商標）を利用することが可能となってきている。
【０００５】
ここで、サーバ、ワークステーション、パーソナルコンピュータ等のコンピュータシステムと組み込み機器とのいずれにおいても、プロセッサは１つだけではなく、複数のＣＰＵにより並列処理を実現する場合もあれば、アプリケーションプロセッサのようなサブＣＰＵや、特定の処理が強化されたＤＳＰ（Ｄｅｓｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）を搭載している場合もある。また、これらに限らず、コンピュータシステムと組み込み機器とのいずれにおいても、主プロセッサ以外に、プロセッサを内蔵した種々のマイクロコントローラが搭載されることが通常である。
【０００６】
ところが、上述したプロセッサの全てに仮想機械を構築することは、各プロセッサにて利用可能なメモリサイズやコストの問題から困難である。このため一部のプロセッサ上に仮想機械を搭載した場合にも、仮想機械の構築されていないプロセッサで実行するプログラムは従来通りに他の言語（Ｃ言語やアセンブラ言語）でプログラムを作成しなければならないという問題があった。また、プロセッサの構成によっては仮想機械を構築することが技術的に困難な場合があり、そのようなプロセッサでは仮想機械を採用したプログラミング言語を利用することができないという問題があった。
【特許文献１】特開２０００−１７２５１２
【特許文献２】特開２０００−０３５８９０
【特許文献３】特開２０００−０５７１１３
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は上記事情に鑑みてなされたものであって、複数のプロセッサを備えたコンピュータシステムまたは組み込み機器において、仮想機械の構築されていないプロセッサ上で、中間コードで表現されたプログラムを実行することができる中間コード実行システムを提供することを目的とする。また、そのような中間コード実行システムを搭載した中間コード実行システム搭載機器を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の第１の観点は、少なくとも第１および第２のプロセッサを含み、オブジェクトコードよりも抽象度の高い中間コードで表現されたプログラムを実行する中間コード実行システムであって、
第１のプロセッサにて中間コードで表現されたプログラムを第２のプロセッサのネィティブコードにコンパイルする処理を行い、得られたネィティブコードのプログラムを第２のプロセッサにて実行することを特徴とする中間コード実行システムを提供する。
【０００９】
本発明によれば、第１のプロセッサにて中間コードで表現されたプログラムを第２のプロセッサのネィティブコードにコンパイルする処理を行い、得られたネィティブコードのプログラムを第２のプロセッサにて実行するので、第２のプロセッサ上に仮想機械を構築することなく、中間コードで表現されたプログラムを第２のプロセッサにて実行することができる。
【００１０】
また、本発明においては、第１のプロセッサにて中間コードで表現されたプログラムを実行する機能をさらに有する構成も可能である。このようにすることで、第１のプロセッサと第２のプロセッサとの双方で中間コードのプログラムを実行することが可能となる。この場合、第１のプロセッサで中間コードのプログラムを実行するにあたり、中間コードで表現されたプログラムの少なくとも一部を第１のプロセッサのネィティブコードに変換する構成とすることにより、第１のプロセッサのネィティブコードにコンパイルする処理と、第２のプロセッサのネィティブコードにコンパイルする処理とで共通する処理を共用モジュール化することもできる。
【００１１】
前記第２のプロセッサとしては、性能の制約された表示装置コントローラ若しくはＩｒＤＡコントローラの内蔵マイコンや、特殊なアーキテクチャを有するＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が好適である。また、前記中間コードで表現されたプログラムとしては、Ｊａｖａ（登録商標）クラスファイルを挙げることができる。さらに、本発明は、以上のような中間コード実行システムを搭載した中間コード実行システム搭載機器として表現することも可能である。
【発明の効果】
【００１２】
本発明によれば、第１のプロセッサにて中間コードで表現されたプログラムを第２のプロセッサのネィティブコードにコンパイルする処理を行い、得られたネィティブコードのプログラムを第２のプロセッサにて実行するので、第２のプロセッサ上に仮想機械を構築することなく、中間コードで表現されたプログラムを第２のプロセッサにて実行することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態について、図面を参照しながら説明する。
［第１実施形態］
まず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態にかかる中間コード実行システムの概略図である。
この中間コード実行システム５０は、Ｊａｖａ（登録商標）クラスファイルを実行可能に構成されたものであり、その主なハードウェア構成は、メインＣＰＵ１（第１のプロセッサ）と、このメインＣＰＵ１にそれぞれバス２を介して接続されたＲＡＭおよびＲＯＭからなるメインメモリ３、液晶コントローラ４、および、所定のネットワークに接続するためのネットワークＩＦ（ＩｎｔｅｒＦａｃｅ）６と、液晶コントローラ４に接続されたＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）５とからなっている。これらの構成は、その一部を１チップ化したマイクロプロセッサやマイクロコントローラにより実現していても構わない。また、図示しないが、音声出力装置、キー入力装置等の入出力装置、カードリーダライタ等の補助記憶装置をさらに具備してもよいし、この中間コード実行システム５０を組み込み機器上に構成する場合には各機器に固有のハードウェアがさらに接続されていても構わない。
【００１４】
例えば、中間コード実行システム５０は、ＰＤＡやモバイル機器、ゲーム機、携帯電話等の情報処理端末、情報処理能力の強化された情報家電やネットワーク接続機能を追加されたネット家電を含む白物家電、種々の媒体を利用したプレーヤないしレコーダを含むオーディオビジュアル機器、ホームサーバやルータ、モデム等のネットワーク機器、各種工業用電子機器といったプロセッサを内蔵した組み込み機器上に構成することができる。また、サーバ、ワークステーション、パーソナルコンピュータ上に構成することも可能である。
【００１５】
液晶コントローラ４は、ＣＰＵ３１（第２のプロセッサ）およびＣＰＵ３１に接続されたＲＡＭおよびＲＯＭからなるメモリ３２を有しており、ＣＰＵ３１上でメモリ３２に格納されたプログラムを実行することにより、ＬＣＤ５に表示するテキスト・グラフィックス等の画面データについて、デコード処理や３Ｄ処理等を施すものである。したがって、この中間コード実行システム５０は、メインＣＰＵ１と液晶コントローラ４に内蔵されたＣＰＵ３１との、２つのＣＰＵを備えていることになる。
【００１６】
本実施形態では、メインＣＰＵ１が３２ｂｉｔの演算能力を有しており、ネットワークＩＦ６を利用して外部とネットワーク接続することができるのに対して、ＣＰＵ３１の演算能力は１６ｂｉｔでネットワークＩＦ６を直接的に利用することができない構成となっている。また、液晶コントローラ４が有するメモリ３２のＲＯＭには、少なくとも一部にＦｌａｓｈＲＯＭのような書き込み可能なものが採用されている。
【００１７】
次に、中間コード実行システム５０の主なソフトウェア的な構成について説明する。この中間コード実行システム５０は、いずれもメモリ３に格納されたソフトウェアＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）１０と、クラスライブラリ２０と、クラスファイル２１，２２とを備えている。
【００１８】
ソフトウェアＶＭ１０は、ＶＭ基本プログラム群１１と、インタプリタプログラム１２と、コンパイラプログラム１３とを含んでおり、後述するようにＪａｖａ（登録商標）言語で作成されたソースコードをコンパイルして得られるクラスファイルをメインＣＰＵ１およびＣＰＵ３１との双方で実行するための機能を有している。以下、ソフトウェアＶＭ１０について詳細に説明する。
【００１９】
インタプリタプログラム１２は、メインＣＰＵ１上で実行することにより、クラスファイルからバイトコード命令をフェッチして逐次的に解釈実行するプログラムである。このインタプリタプログラム１２は、後述するコンパイラプログラム１３と協働して、メインＣＰＵ１上でクラスファイルを実行する。
【００２０】
コンパイラプログラム１２は、メインＣＰＵ１上で実行することにより、クラスファイルに含まれるバイトコード命令を、メインＣＰＵ１のネィティブコードとＣＰＵ３１のネィティブコードとのいずれか一方にコンパイルする機能を有している。より具体的には、コンパイラプログラム１２には第１および第２の動作モードが設けられており、第１の動作モードではバイトコード命令をメインＣＰＵ１のネィティブコードにコンパイルし、第２の動作モードではＣＰＵ３１のネィティブコードにコンパイルするように構成されている。本実施形態のコンパイラプログラム１２は、クラスファイルを２種類のネィティブコードにコンパイルする機能を有しているが、ネィティブコードを生成する部分以外の共通的な処理は共用モジュールにより実行するように構成されており、これによりコードサイズおよび開発工数の低減が図られている。
【００２１】
ＶＭ基本プログラム群１１は、ＶＭを初期化および終了する機構、クラスファイルをヒープに展開するクラスローダ、展開されたクラスファイルの検証を行うベリファイヤ、クラスファイル実行中にヒープ２３に配置されたオブジェクトにガベージコレクションを施すガベージコレクタを含むヒープ管理モジュール、処理の流れをコントロールするスレッド管理モジュール、クラスファイルのアーカイブであるＪＡＲファイルリーダといった種々のプログラムを通常のソフトウェアＶＭと同様に含んでいる。さらに、本実施形態におけるＶＭ基本プログラム群１１には、メインＣＰＵ１側で実行するクラスファイルについてインタープリタプログラム１２による実行とコンパイラプログラム１３を利用した実行とのスケジューリング機能と、クラスファイルをメインＣＰＵ１およびメインＣＰＵ１６のいずれで実行するべきものかを判断するための判断機構とを実現するプログラムを含んでいる。
【００２２】
上記のスケジューリング機能は、クラスファイルに含まれるバイトコード命令列を実行時に調査し、ブロック単位（例えばメソッド単位）でコンパイルするべきか否かを動的に判定し、コンパイルするべきと判定された場合には当該ブロックをコンパイラプログラム１３でコンパイルしてから実行し、コンパイルするべきでないと判定された場合には当該ブロックをインタープリタプログラム１２により実行するように、ソフトウェアＶＭ１０の動作を制御する。コンパイラプログラム１３を利用するとクラスファイルの実行速度が飛躍的に向上するものの、コンパイル作業にはコンパイル時間やワークエリア等のコストを要するため、このようなスケジューリング機能によって効果が高い部分だけをコンパイルすることが適切である。
【００２３】
上記判断機構は、ユーザの明示的な入力に応じてどちらのＣＰＵで実行するべきものかを判断するようにしても構わないが、例えば、クラスファイルにいずれのＣＰＵで実行することを目的としたプログラムであるかを記述した情報ファイルを添付して配信するようにし、ソフトウェアＶＭ１０が当該情報ファイルからその記述を読み出して、いずれのＣＰＵで実行するべきプログラムであるかを自動的に判断するようにしてもよい。
【００２４】
また、図示しないが、メモリ３には、メインＣＰＵ１で実行することにより、液晶コントローラ４のメモリ３２に含まれるフラッシュメモリの所定領域を書き換えるフラッシュメモリ書き換えプログラムが格納されている。ただし、ＣＰＵ３１上で実行することを目的として配信されるクラスファイルに、このフラッシュメモリ書き換えプログラムと同等の機能を包含させることができる場合には、中間コード実行システム５０にフラッシュメモリ書き換えプログラムを準備する必要はない。
【００２５】
さらに、メモリ３には、これらの他にソフトウェアプログラムが存在してもよく、オペレーティングシステム（ＯＳ）、種々のアプリケーション、サービスプログラム、プロトコルスタック、デバイスドライバ等を含んだソフトウェア構成であって構わない。また、中間コード実行システム１を組み込み機器上に構成する場合には、各機器に固有の機能を実現するためのソフトウェアプログラムを備えていてもよい。
【００２６】
次に、以上のような構成の中間コード実行システム５０において、クラスファイルを実行するための動作の一例について、図２のフローチャートを参照しながら説明する。
まず、ネットワークＩＦ６を所定のネットワーク（不図示）に接続した状態にて、クラスファイルを中間コード実行システム５０にダウンロードし、クラスファイルの配信を受ける（ＳＴＥＰ１０１）。
【００２７】
次いで、配信されたクラスファイルを実行するために、中間コード実行システム５０のメインＣＰＵ１でソフトウェアＶＭ１０のプログラムを実行し、ソフトウェアＶＭ１０を起動する（ＳＴＥＰ１０２）。
【００２８】
起動されたソフトウェアＶＭ１０は、実行するプログラムがＣＰＵ３１用のプログラムであるかを判断する（ＳＴＥＰ１０３）。ここでの判断は、例えば、前述したようにユーザの明示的な入力に応じて行ってもよいし、クラスファイルに添付して配信された情報ファイルの内容に応じてソフトウェアＶＭ１１が自動的に判断しても構わない。
【００２９】
ＳＴＥＰ１０３にて、ＣＰＵ３１用のプログラムと判断された場合には、メインＣＰＵ１上でコンパイラプログラム１３を上述した第１のモードで実行し、クラスライブラリ２０を利用しつつ、クラスファイルをＣＰＵ３１のネィティブコードにコンパイルする（ＳＴＥＰ１０４）。この際、コンパイルに伴ってクラスファイルを検証する処理や、コンパイル後に得られたネィティブコードをリンクする処理、リンクされたネィティブコードをＣＰＵ３１での実行に合わせて初期化する処理等を、必要に応じて施すことができる。また、クラスファイルがＪＡＲファイルなどの圧縮された形態で配信される場合には、これらの処理よりも前に、圧縮された状態からクラスファイルをロードする処理を行うようにしてもよい。
【００３０】
その後、ソフトウェアＶＭ１０を終了し（ＳＴＥＰ１０５）、コンパイル結果を液晶コントローラ４のメモリ３２に含まれるＦｌａｓｈＲＯＭに書き込むことにより（ＳＴＥＰ１０６）、クラスファイルで配信されたプログラムが液晶コントローラ４のＣＰＵ３１で実行可能な状態となる。以降、メインＣＰＵ１等からのデータに対し、液晶コントローラ４のＣＰＵ３１でＦｌａｓｈＲＯＭに書き込まれた内容を実行することにより、クラスファイルで配信されたプログラムの処理を施し、その結果をＬＣＤ５に表示することが可能となる。
【００３１】
一方、ＳＴＥＰ１０３においてＣＰＵ３１用のプログラムではないと判断された場合には、クラスライブラリ２０を利用して、インタープリタプログラム１２およびコンパイラプログラム１３の協働によりクラスファイルをメインＣＰＵ１上で実行する（ＳＴＥＰ１０６）。
【００３２】
このような動作によれば、ソフトウェアＶＭ１０によりＪａｖａ（登録商標）仮想機械の構築されたメインＣＰＵ１上でクラスファイルを実行することができるばかりでなく、液晶コントローラ４に内蔵されたＣＰＵ３１のように、仮想計機械の構築されていないＣＰＵにおいてもクラスファイルで作成されたプログラムを実行することが可能となる。したがって、本実施形態によれば、仮想機械の構築されていないプロセッサ上でも、中間コードで表現されたプログラムを実行することができる中間コード実行システム５０が提供される。このような中間コード実行システム５０を適用することにより、複数のプロセッサを搭載した機器の仮想機械の構築されていないプロセッサ上で、Ｊａｖａ（登録商標）のように仮想機械の存在を前提としたプログラムを実行することが可能となる。
【００３３】
また、本実施形態のようにＪａｖａ（登録商標）クラスファイルを実行するように中間コード実行システム５０を構成した場合には、液晶コントローラ４に搭載した各種デコーダや３Ｄ処理等のプログラムをアップデートしたり、液晶コントローラ４に新規機能を追加するプログラムをＪａｖａ（登録商標）で作成することができる。これにより、液晶コントローラ４に搭載されたＣＰＵ３１のプログラミングを、構造的なオブジェクト指向の言語で行うことが可能となる。
【００３４】
また、本実施形態においては、ソフトウェアＶＭ１０のコンパイラプログラム１３が、クラスファイルをメインＣＰＵ１のネィティブコードにコンパイルする動作モードと、ＣＰＵ３１のネィティブコードにコンパイルする動作モードとを有しているが、両動作モードはコンパイラプログラム１３を部分的に共用する構成となっている。したがって、本実施形態のコンパイラプログラム１３は、クラスファイルをメインＣＰＵ１のネィティブコードにコンパイルするコンパイラプログラムをベースにすることで、比較的少ない作業工数で開発ないしメンテナンスを行うことが可能である。
【００３５】
さらに、中間コード実行システム５０は、メインＣＰＵ１上ではインタープリタプログラム１２とコンパイラプログラム１３との協働によりクラスファイルを実行し、かつ、ＣＰＵ３１上ではコンパイラプログラム１３によりコンパイルされたネィティブコードを実行するので、メインＣＰＵ１とＣＰＵ３１とのいずれにおいてもクラスファイルを高いパフォーマンスで実行することができる。
【００３６】
［第２実施形態］
次に、本発明の第２の実施形態について説明する。図３は、本発明の第２の実施形態にかかる中間コード実行システム５０′の概略図である。この中間コード実行システム５０′の基本構成は第１の実施形態に係る中間コード実行システム５０とほぼ同様であるので、以下では第１の実施形態と同様の点については説明を省略し、第１の実施形態と相違する点を中心に説明する。
【００３７】
まず、ハードウェア的には、本実施形態の中間コード実行システム５０′は、第１実施形態における液晶コントローラ４およびＬＣＤ５に代えて、バス２に接続されたＩｒＤＡコントローラ７と、このＩｒＤＡコントローラ７に接続されたＩｒＤＡ受光部８とを備えている。
【００３８】
ＩｒＤＡコントローラ７は、ＣＰＵ４１およびＣＰＵ４１に接続されたＲＡＭおよびＲＯＭからなるメモリ４２を有しており、ＣＰＵ４１上でメモリ４２に格納されたプログラムを実行することにより、ＩｒＤＡ受光部８が赤外線の入光を検出して出力した信号に応じた処理を行い、バス２に出力するものである。したがって、この中間コード実行システム５０′は、メインＣＰＵ１とＩｒＤＡコントローラ７に内蔵されたＣＰＵ４１との、２つのＣＰＵを備えていることになる。メインＣＰＵが３２ｂｉｔ演算能力を有し、ネットワークＩＦ６を利用して外部とネットワーク接続機能を有しているのに対し、ＣＰＵ３１の演算能力が１６ｂｉｔでネットワークＩＦ６を利用できない場合等のように、メインＣＰＵ１においてＣＰＵ４１よりも複雑な処理を行うことは第１実施形態と同様である。また、ＩｒＤＡコントローラ７に搭載されたメモリ４２のＲＯＭの少なくとも一部にＦｌａｓｈＲＯＭが採用されていることも第１実施形態における液晶コントローラ４と同様である。
【００３９】
一方、ソフトウェア的には、本実施形態の中間コード実行システム５０′は、第１実施形態におけるインタープリタプログラム１２およびコンパイラプログラム１３の組み合わせに代えて、コンパイラプログラム１３′のみを含んだソフトウェアＶＭ１０を有している。このコンパイラプログラム１３′は、メインＣＰＵ１上で実行することにより、クラスファイルをＩｒＤＡコントローラ７に内蔵されたＣＰＵ４１のネィティブコードにコンパイルする処理を行うものである。
【００４０】
次に、以上のような構成の中間コード実行システム５０′において、クラスファイルを実行するための動作の一例について、図４のフローチャートを参照しながら説明する。
まず、第１実施形態における動作と同様に、クラスファイルをダウンロードし（ＳＴＥＰ２０１）、配信されたクラスファイルを実行するために、中間コード実行システム５０′のメインＣＰＵ１でソフトウェアＶＭ１０′のプログラムを実行し、ソフトウェアＶＭ１０′を起動する（ＳＴＥＰ２０２）。
【００４１】
次に、メインＣＰＵ１上でコンパイラプログラム１３′を実行し、クラスライブラリ２０を利用しつつ、クラスファイルをＣＰＵ４１のネィティブコードにコンパイルする（ＳＴＥＰ２０３）。この際、第１実施形態と同様に、コンパイル前にクラスファイルをロードする処理や、クラスファイルを検証する処理、コンパイル後に得られたネィティブコードをリンクする処理、リンクされたネィティブコードをＣＰＵ４１での実行に合わせて初期化する処理等を、必要に応じて施すことができる。
【００４２】
その後、ソフトウェアＶＭ１０を終了し（ＳＴＥＰ２０４）、コンパイル結果をＩｒＤＡコントローラ７のメモリ４２に含まれるＦｌａｓｈＲＯＭに書き込むことにより（ＳＴＥＰ２０５）、クラスファイルで配信されたプログラムがＩｒＤＡコントローラ７のＣＰＵ４１で実行可能な状態となる。以降、ＩｒＤＡ受光部８が赤外線の入射に応じて出力する信号データに対し、ＩｒＤＡコントローラ７のＣＰＵ４１でＦｌａｓｈＲＯＭに書き込まれた内容を実行することにより、クラスファイルで配信されたプログラムの処理を施し、処理した結果をバス２に出力することが可能となる。
【００４３】
このような動作によれば、ＩｒＤＡコントローラ７に内蔵されたＣＰＵ４１のように、仮想計機械の構築されていないＣＰＵにおいてもクラスファイルで作成されたプログラムを実行することが可能となる。したがって、本実施形態によれば、仮想機械の構築されていないプロセッサ上で、中間コードで表現されたプログラムを実行することができる中間コード実行システム５０が提供される。このような中間コード実行システム５０を適用することにより、演算能力が低く仮想機械を構築することが困難なプロセッサ上で、Ｊａｖａ（登録商標）のように仮想機械の存在を前提としたプログラムを実行することが可能となる。
【００４４】
また、本実施形態のようにＪａｖａ（登録商標）クラスファイルを実行するように中間コード実行システム５０′を構成した場合には、ＩｒＤＡコントローラ７に搭載したプログラムを修正したり、ＩｒＤＡコントローラ７をＩｒＤＡ受光部８が出力する新たな信号パターンに対応させるプログラムをＪａｖａ（登録商標）で作成することができる。これにより、ＩｒＤＡコントローラ７に搭載されたＣＰＵ４１のプログラミングを、構造的なオブジェクト指向の言語で行うことが可能となる。
【００４５】
なお、本発明は上記第１および第２実施形態に限られるものではなく、種々変形が可能である。例えば、本発明はメインＣＰＵと液晶コントローラやＩｒＤＡコントローラに内蔵されたＣＰＵとの組み合わせに限られるものではなく、プログラム可能なプロセッサのあらゆる組み合わせに適用することが可能である。
【００４６】
例えば、近時における携帯電話等の組み込み機器では表示画面の大型化・高精細化が進んでおり、２Ｄ／３Ｄの画像処理を行うグラフィックアクセラレータやＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が使用される場合がある。本発明は、メインＣＰＵと、このようなグラフィックアクセラレータに搭載されるプロセッサやＧＰＵとの組み合わせにも適用することができる。この場合には、メインＣＰＵ上で例えばＪａｖａ（登録商標）アプリケーションを実行する際に、アプリケーションのコードに内蔵または添付されたＪａｖａ（登録商標）で書かれたＧＰＵ用プログラムをＧＰＵのネィティブコードにコンパイルしてＧＰＵに渡すことにより、アプリケーション実行中に２Ｄ／３Ｄ描画等の処理をＧＰＵに実行させることが可能となる。このように本発明を動的に適用する場合には、得られたネィティブコードはＧＰＵ側の揮発性メモリであるＲＡＭに格納することが好適である。
【００４７】
さらに、メインＣＰＵとＤＳＰ（Ｄｅｓｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）との組み合わせであってもよいし、メインＣＰＵと複数のコントローラ内蔵ＣＰＵとの組み合わせであっても構わないし、同等の機能を備えた複数のＣＰＵに適用することも可能である。
【００４８】
また、上記実施形態では、互いに独立したメモリ空間を有する複数のプロセッサがバスを介して接続されている場合を示したが、本発明は複数のプロセッサがメモリ空間を共有している場合にも適用することができる。すなわち、本発明は、粗結合マルチプロセッサシステムと密結合マルチプロセッサシステムとのいずれにおいても適用することが可能である。さらに、第１実施形態において、メインＣＰＵ上でインタプリタプログラムとコンパイラプログラムとが協働してクラスファイルを実行する場合を示したが、インタプリタプログラムだけで実行してもよいし、コンパイラプログラムで全クラスファイルをコンパイルしてから実行することも可能である。
【００４９】
さらにまた、中間コード実行システムは、Ｊａｖａ（登録商標）クラスファイルを実行するものに限らず、例えば、Ｊａｖａ（登録商標）の特徴を継承した新たなプログラミング言語や、Ｊａｖａ（登録商標）以前のプログラミング言語であって、オブジェクトコードよりも抽象度の高い中間コードで表現された他のプログラミング言語における実行モジュールを実行するものであってよい。
【産業上の利用可能性】
【００５０】
コンピューターや携帯電話等の組み込み機器において、強力なプロセッサと非力なプロセッサとを組み合わせて処理を行う場合に、非力なプロセッサのプログラミングをＪａｖａ（登録商標）のように中間コード形式を採用したプログラミング言語で行うこと、中間コード実行システムを経由して非力なプロセッサにプログラムを配信すること、さらには、中間コード実行システムでアプリケーションを実行中に非力なプロセッサにプログラムを配信することが可能となるので、本発明の産業上の利用可能性は極めて高い。
【図面の簡単な説明】
【００５１】
【図１】本発明の第１実施形態に係る中間コード実行システムの概略図
【図２】第１実施形態における中間コード実行システムの動作を示すフローチャート
【図３】本発明の第２実施形態に係る中間コード実行システムの概略図
【図４】第２実施形態における中間コード実行システムの動作を示すフローチャート
【符号の説明】
【００５２】
１  メインＣＰＵ
２  バス
３  メモリ
４  液晶コントローラ
５  ＬＣＤ
６  ネットワークＩＦ
７  ＩｒＤＡコントローラ
８  ＩｒＤＡ受光部
１０，１０′  ソフトウェアＶＭ
１１，１１′  ＶＭ基本プログラム群
１２  インタープリタプログラム
１３，１３′  コンパイラプログラム
２０  クラスライブラリ
２１，２２，２３  クラスファイル
【図１】
2005108126.tif 000003
【図２】
2005108126.tif 000004
【図３】
2005108126.tif 000005
【図４】
2005108126.tif 000006