(57)【要約】  【課題】  プロファイル情報が変更されたことに応答して、動的に変更されたプロファイル情報に適合させるコード生成技法を提供すること。  【解決手段】  システム構成情報を取得し、それに依存して行われるロード処理及びストア処理をそれぞれ、LoadX、StoreXと呼ぶことにする。そうでなく、通常のロード処理及びストア処理をそれぞれ、load、storeと呼ぶことにする。すると、本発明によれば、コンパイル単位毎にシステム構成を仮定し、その仮定の下で通常のＲＡＭ／ＲＯＭにアクセスすることが分かるload/store命令は、LoadX/StoreXではなく、通常のload/store命令に変換される。それによって、コンパイル最適化の効果が得られる。上記で得られた実行コードは、ゲストの開始アドレスとシステム構成情報のインデックスをキーとした２次元の表にシステム的に登録される。これによって、実行時にはその表から検索して得られた最適化コードを実行することができる。【選択図】  図８
2010134847.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータの処理によって、ゲストコードをホストコードに変換して実行するためのシステムであって、
ゲストコードを、読出し可能に保持する手段と、
システム構成情報を取得する構成取得手段と、
前記取得されたシステム構成情報に依存して、指定された開始アドレスから順次、前記ゲストコードの所定の単位のコードを、前記ホストコードに変換する変換手段と、
ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表と、
指定された開始アドレスからのゲストコードの変換開始動作に応答して、前記構成取得手段によりシステム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、前記変換手段により、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行手段を有する、
コード実行システム。
【請求項２】
前記前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項１のコード実行システム。
【請求項３】
前記システム情報が、ＲＡＭのアドレス範囲、ＲＯＭのアドレス範囲、及びＩ／Ｏデバイスのアドレス範囲を含む、請求項１のコード実行システム。
【請求項４】
前記実行手段が、該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成する、請求項１のコード実行システム。
【請求項５】
システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄する手段をさらに有する、請求項４のコード実行システム。
【請求項６】
前記実行手段が、エントリを前記変換表に登録する際に、システム構成情報とその構成ＩＤとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成ＩＤが格納される、請求項１のコード実行システム。
【請求項７】
コンピュータの処理によって、ゲストコードをホストコードに変換して実行するための方法であって、
ゲストコードを、読出し可能に前記コンピュータの記憶手段に保持するステップと、
ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表を前記コンピュータの記憶手段に用意するステップと、
指定された開始アドレスからのゲストコードの変換開始動作に応答して、システム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、前記変換手段により、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行ステップを有する、
コード実行方法。
【請求項８】
前記前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項７のコード実行方法。
【請求項９】
前記システム情報が、ＲＡＭのアドレス範囲、ＲＯＭのアドレス範囲、及びＩ／Ｏデバイスのアドレス範囲を含む、請求項７のコード実行方法。
【請求項１０】
該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成するステップをさらに有する、請求項７のコード実行方法。
【請求項１１】
システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄するステップをさらに有する、請求項１０のコード実行方法。
【請求項１２】
前記実行ステップが、エントリを前記変換表に登録する際に、システム構成情報とその構成ＩＤとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成ＩＤが格納される、請求項７のコード実行方法。
【請求項１３】
コンピュータの処理によって、ゲストコードをホストコードに変換して実行するためのプログラムであって、
前記コンピュータに、
ゲストコードを、読出し可能に前記コンピュータの記憶手段に保持するステップと、
ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表を前記コンピュータの記憶手段に用意するステップと、
指定された開始アドレスからのゲストコードの変換開始動作に応答して、システム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、前記変換手段により、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行ステップを実行させる、
コード実行プログラム。
【請求項１４】
前記前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項１３のコード実行プログラム。
【請求項１５】
前記システム情報が、ＲＡＭのアドレス範囲、ＲＯＭのアドレス範囲、及びＩ／Ｏデバイスのアドレス範囲を含む、請求項１３のコード実行プログラム。
【請求項１６】
該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成するステップをさらに有する、請求項１３のコード実行プログラム。
【請求項１７】
システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄するステップをさらに有する、請求項１６のコード実行プログラム。
【請求項１８】
前記実行ステップが、エントリを前記変換表に登録する際に、システム構成情報とその構成ＩＤとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成ＩＤが格納される、請求項１３のコード実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータ実行可能コードを生成するための技術に関し、特に組込みシステムなどのシステムの上で動くプログラムをシミュレーションするためのコードを生成するシステム、方法及びプログラムに関するものである。
【背景技術】
【０００２】
近年、携帯電話、デジカメ、エレベータ、自動車のＥＣＵ、エンジン・シミュレータ、産業用ロボットなど、マイクロコンピュータによってハードウェアを直接制御する組込みシステムが日常的に使用される頻度が高まってきた。
【０００３】
一般的なコンピュータ・プログラムもそうあるが、特に組込みシステムでは、作成したプログラムが、正しく動作するかどうかを、さまさざまな状況毎にテストする必要がある。
【０００４】
このようなテストにために従来行われている技法として、ＨＩＬＳ(Hardware In the Loop Simulation)がある。特に、自動車全体の電子制御システムをテストする環境は、フルビークルＨＩＬＳと呼ばれる。フルビークルＨＩＬＳにおいては、実験室内で、本物のＥＣＵが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ＥＣＵからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
【０００５】
しかし、ＨＩＬＳは、専用のハードウェア装置を使い、それと本物のＥＣＵの間を物理的に配線しなくてはならないので、準備が大変である。また、別のＥＣＵに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のＥＣＵを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、ＨＩＬＳのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
【０００６】
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、全てをソフトウェアで構成する手法が提案されている。この手法は、ＳＩＬＳ(Software In the Loop Simulation)と呼ばれ、電子制御システムに使用されるマイクロコンピュータ、入出力回路、制御のシナリオなどを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、組込みシステムのハードウェアが存在しなくても、テストを実行可能である。
【０００７】
ＳＩＬＳにおいては、ハードウェアの制御をエミュレートするプログラムや、ハードウェアの動作そのものの挙動をシミュレートするプログラムが、テスト用のコンピュータ・システム上で動作するように用意される。
【０００８】
特に、シミュレーションにかかる時間を短縮するために、テスト用のコンピュータ・システムとしては、近年、マルチプロセッサの高速なコンピュータ・システムが使用されるようになってきている。このようなシステムにおいては、シミュレーション・プログラムの動作を高速化するために、シミュレーションの複数の処理が、個別のプロセスや個別のスレッドとして、並列的に実行される。
【０００９】
ところで、実際の組込みシステムのプログラムは、データをロードしたり、ストアしたりするために、ＲＡＭ、ＲＯＭ、Ｉ／Ｏポートなどにアクセスするコードを有する。このようなプログラムを、別のコンピュータ（ホスト環境）の上でシミュレートしようとすると、ＲＡＭ、ＲＯＭ、Ｉ／Ｏポートのアドレスの割り振りなど、システム構成情報が全く異なるので、ロードやストアなどの命令を実行する際に、システム構成情報を参照しつつ、それがＲＡＭ、ＲＯＭ、Ｉ／Ｏポートのどれなのかに応じて、異なるコードを実行する必要がある。
【００１０】
典型的には、そのようなシステム構成情報として、ビットマップ方式に関するものと、メモリ保護方式に関するものがある。
【００１１】
ビットマップ方式は、アドレス空間を、例えば、１Ｋバイトの区画に分けて、その区画が通常のＲＡＭにマップされている場合には0を、そうでない場合には1をセットしたビットマップを用意し、メモリにアクセスする際は先ずビットマップを参照し、それが返す値に応じて、ＲＡＭへの直接アクセス、または別のＩ／Ｏライブラリ呼び出しのどちらかが行われる。
【００１２】
メモリ保護方式では、ＲＡＭにマップされている区画は読取／書込可とする。すると、ＲＡＭにマップされている区画へのアクセスは、ペナルティなしで実行できる。一方、それ以外のＩ／Ｏへマップされたアドレスへのアクセスは、読取／書込不可なので、例外が発生し、例外ハンドラによって、Ｉ／Ｏライブラリが呼び出される。
【００１３】
このような、メモリアクセスの度にシステム構成情報を確認する必要性は、プログラムの実行処理にとって大きいコストであって、また、実行コードを生成するコンパイラの最適化の効果をも、著しく低減してしまう。
【００１４】
特開２０００−１２２８７７号公報は、実際に頻繁に使用する関数およびデータを高速内蔵ＲＡＭに配置することによりプログラムの実行速度を向上させることを目的とするものであって、ソースプログラムをコンパイルしてオブジェクトプログラムを生成し、オブジェクトプログラムを実行してプログラム実行時の動的な情報を記録したプロファイル情報を取得し、プロファイル情報を解析して高速化対象区間を決定し、高速化対象区間内で頻繁に参照される関数、データを選択し、高速化対象区間の先頭となる部分に、選択された関数、データを高速内蔵ＲＡＭに転送し高速内蔵ＲＡＭの内容を入れ替えるための入れ替えコードを挿入したソースプログラムを生成し、ソースプログラムをコンパイルしてオブジェクトプログラムを生成することを開示する。
【００１５】
特開２００５−１４１４３５号公報は、ＰＬＣ上で実行されるＣプログラムを、コンフィグレーションファイルによりその振る舞いを変更することを容易に行えるツールを提供するようにするために、プログラムの実行順や、入出力パラメータとＰＬＣの実メモリへの割り付け、ＰＬＣの実メモリを格納するメモリアドレス、入出力パラメータの初期値等からなるコンフィグレーションファイルを設定するデータ設定部と、データ設定部で設定されたＰＬＣのメモリアドレスをＣプログラムで扱う絶対アドレスに変換する絶対アドレス変換部と、ＣプログラムのシンボルファイルＦ３と絶対アドレス変換部で生成された中間ファイルから動作ファイルを作成する動作ファイル作成部と、中間ファイルからマップファイルを作成するマップファイル作成部と、中間ファイルから初期値ファイルを作成する初期値ファイル作成部と、それら作成されたファイルおよびオブジェクトファイルをＰＬＣに転送するデータ転送部を備えた構成を開示する。
【００１６】
【特許文献１】特開２０００−１２２８７７号公報
【特許文献２】特開２００５−１４１４３５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
特開２０００−１２２８７７号公報は、オブジェクトプログラムを事前実行させて、プロファイル情報を取得し、その取得したプロファイル情報に適合するようにソースプログラムをコンパイルしてオブジェクトプログラムを生成することを開示するが、ビットマップ方式あるいはメモリ保護方式でメモリが構成されている状況で、個々のロードやストア命令がプロファイル情報をチェックする必要性を解消するものではない。
【００１８】
特開２００５−１４１４３５号公報は、入出力パラメータの初期値等からなるコンフィグレーションファイルを作成することを開示するが、それを具体的に、ロードやストア命令の最適化に適用することは開示するものではない。
【００１９】
従って、この発明の目的は、個々のロードやストア命令をプロファイル情報、すなわちシステム構成情報に対して最適化することを可能とするコード生成技法を提供することにある。
【００２０】
この発明の他の目的は、システム構成情報が変更されたことに応答して、動的に変更されたプロファイル情報に適合させるコード生成技法を提供することにある。
【課題を解決するための手段】
【００２１】
以下の説明の便宜上、システム構成情報を取得し、それに依存して行われるロード処理及びストア処理をそれぞれ、LoadX、StoreXと呼ぶことにする。そうでなく、通常のロード処理及びストア処理をそれぞれ、load、storeと呼ぶことにする。
【００２２】
すると、本発明によれば、コンパイル単位毎にシステム構成を仮定し、その仮定の下で通常のＲＡＭ／ＲＯＭにアクセスすることが分かるload/store命令は、LoadX/StoreXではなく、通常のload/store命令に変換される。それによって、コンパイル最適化の効果が得られる。
【００２３】
上記で得られた実行コードは、ゲストの開始アドレスとシステム構成情報のインデックスをキーとした２次元の表にシステム的に登録される。これによって、実行時にはその表から検索して得られた最適化コードを実行することができる。
【００２４】
本発明の好適な一側面として、頻繁に用いられるシステム構成情報に対しては、開始アドレスだけをキーにした専用テーブルを用意するようにしてもよい。そして、プログラムの制御フローの主要箇所でのみシステム構成情報のチェックを行い、以後のコード検索は、その専用テーブルを用いることによって更なる高速化を図るようにしてもよい。
【発明の効果】
【００２５】
この発明によれば、一旦取得したシステム構成情報を利用して、実行コードのロード処理及びストア処理を最適化できる、という効果が得られる。さらに最適化を阻害していたロード/ストア命令が置き換わっていくことによって，プログラム全体に対してコンパイル最適化の効果も得られる。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
【００２７】
先ず、図１を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図１において、ホスト・バス１０２には、複数のＣＰＵ０  １０４ａ、ＣＰＵ１  １０４ｂ、ＣＰＵ２  １０４ｃ、ＣＰＵ３  １０４ｄが接続されている。ホスト・バス１０２にはさらに、ＣＰＵ０  １０４ａ、ＣＰＵ１  １０４ｂ、ＣＰＵ２  １０４ｃ、ＣＰＵ３  １０４ｄがプログラムをロードしたり作業領域を確保したりするためのメイン・メモリ１０６が接続されている。
【００２８】
一方、Ｉ／Ｏバス１０８には、キーボード１１０、マウス１１２、ディスプレイ１１４及びハードティスク・ドライブ１１６が接続されている。Ｉ／Ｏバス１０８は、Ｉ／Ｏブリッジ１１８を介して、ホスト・バス１０２に接続されている。キーボード１１０及びマウス１１２は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ１１４は、必要に応じて、後述する本発明に係るプログラムをＧＵＩで操作するためのメニューを表示するために使用される。
【００２９】
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘがある。その際、ＣＰＵ０  １０４ａ、ＣＰＵ１  １０４ｂ、ＣＰＵ２  １０４ｃ、ＣＰＵ３  １０４ｄは、例えば、インテル（Ｒ）Ｃｏｒｅ  ２  ＤＵＯであり、オペレーティング・システムは、Ｗｉｎｄｏｗｓ（商標）Ｓｅｒｖｅｒ  ２００３である。オペレーティング・システムは、ハードティスク・ドライブ１１６に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ１１６からメイン・メモリ１０６に読み込まれる。
【００３０】
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、ＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｘに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Ｗｉｎｄｏｗｓ（Ｒ）に限定されず、Ｌｉｎｕｘ（Ｒ）、Ｍａｃ  ＯＳ（Ｒ）など、任意のオペレーティング・システムを使用することができる。ＰＯＷＥＲ（商標）６ベースで、オペレーティング・システムがＡＩＸ（商標）のＩＢＭ（Ｒ）Ｓｙｓｔｅｍ  Ｐなどのコンピュータ・システムを使用してもよい。
【００３１】
本発明の処理を実施するために、マルチプロセッサであることは必須ではなく、単一プロセッサのシステムであってもよい。
【００３２】
ハードディスク・ドライブ１１６にはさらに、特に図示しないが、コンパイラ・プログラム、及び後述する本発明に係る処理プログラム等が格納され、キーボード１１０及びマウス１１２によって起動操作可能である。
【００３３】
図２は、本発明の処理を実行するための機能のブロック図である。図２において、ゲストコード２０２は、実行すべきシミュレーション・プログラムのバイナリ・コードである。
【００３４】
コンパイラ２０４は、本発明特有の機能をもつものであり、システム構成情報２０６を参照し、その情報に依存した実行コード（ホストコード）２０８を生成する。コンパイラ２０４は、通常の、ソースコードを一括して読み込んで処理するタイプのものではなく、ゲストコード２０２のバイナリコードを順次読取って、やはりバイナリであるホストコードを生成する機能をもつタイプのものであることに留意されたい。すなわち、ゲストコード２０２は、ゲスト側のＣＰＵに適合するバイナリコードであり、ホストコード２０８は、ゲストコード２０２をシミュレーションするためのホスト側のシステムのＣＰＵに適合するバイナリコードである。
【００３５】
実行環境２１０は、実行コード２０８を、ＣＰＵ０〜ＣＰＵ３に割当てるなどして実行させる、オペレーティング・システムを含むシステム環境であり、実行コード２０８を実行しつつ、特にStoreXのコードに応じて、後述する変換表、及びシステム構成情報表を含む、テーブル情報２１２を、好適にはメイン・メモリ１０６に格納する。なお、テーブル情報２１２は、ハードディスク・ドライブ１１６に保存してもよい。
【００３６】
実行環境２１０はまた、必要に応じてコンパイラ２０４を起動させる機能ももつ。
【００３７】
図３は、図２のコンパイラ２０４の機能を示すフローチャートである。図３において、ステップ３０２では、コンパイラ２０４は、開始アドレスから始まるコンパイル単位を取得する。ここでいうコンパイル単位とは、バイナリコード処理における文脈に関するものである。すなわち、バイナリコード処理では、変換すべき部分を入力から取り出す前処理(例えば、code discoveryなどと呼ばれる)が行われる。この前処理によって取り出された機械語の命令列を、コンパイル単位と呼ぶことにする。
【００３８】
ステップ３０４では、現在のシステム構成情報が取得される。ここで、システム構成情報とは、ＲＡＭのアドレス範囲、ＲＯＭのアドレス範囲、Ｉ／Ｏデバイスのメモリ・マップされたアドレス範囲などである。
【００３９】
ステップ３０６では、コンパイル単位中の未変換の命令が選択される。
【００４０】
ステップ３０８では、命令の種類が問われる。命令がLoad/Store以外だと、ステップ３１０で、通常の変換が行われる。
【００４１】
命令がLoadであると、ステップ３１２で、その命令の対象アドレスが、ステップ３０４で取得された現在のシステム構成情報に基づき、チェックされる。
【００４２】
命令の対象アドレスがＲＡＭのアドレス範囲にあると判別されると、ステップ３１４で、命令は、通常のload、すなわち、ＲＡＭからの読取りに変換される。
【００４３】
命令の対象アドレスがＲＯＭのアドレス範囲にあると判別されると、ステップ３１６で、命令は、定数への変換が行われる。すなわち、ＲＯＭに書かれている値は変更不可能なので、一旦その値が分かれば、ＲＯＭに改めてアクセスすることは不要である。
【００４４】
命令の対象アドレスが、ＲＡＭでもＲＯＭでもなく、あるいは不明である場合は、ステップ３１８で、LoadXへの変換が行われる。LoadXについては、図４のフローチャートに関連して、後で説明する。
【００４５】
命令がStoreであると、ステップ３２０で、その命令の対象アドレスが、ステップ３０４で取得された現在のシステム構成情報に基づき、チェックされる。
【００４６】
そして、ステップ３２０で、命令の対象アドレスがＲＡＭのアドレス範囲にあると判別されると、ステップ３２２で、命令は、通常のstore、すなわちＲＡＭへの書込みに変換される。
【００４７】
ステップ３２０で、命令の対象アドレスが、ＲＡＭでもＲＯＭでもなく、あるいは不明であると判別されると、ステップ３２４でプログラムカウンタ（ＰＣ）の更新命令が挿入され、ステップ３２６でStoreXへの変換が行われる。StoreXについては、図５のフローチャートに関連して、後で説明する。
【００４８】
ステップ３２８では、全ての命令を変換したかどうかが判断され、もしそうでないなら、ステップ３０６に戻る。ステップ３２８で、全ての命令を変換したと判断されると、ステップ３３０での最適化処理を経て、コンパイルは完了する。ここでの最適化処理とは、例えば、Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, "Compilers Principles, Technologies, and Tools", Addison-Wesley Publishing Company, 1986のChapter 10に記述されているようなバイナリコード・レベルの最適化であるが、この発明の主要なフィーチャではないので、これ以上の説明は省略する。
【００４９】
図４は、この実施例に係るLoadX処理のフローチャートを示す図である。図４において、ステップ４０２では、現在のシステム構成情報に基づき実行時に判明した命令の対象アドレスが判別され、もし、命令の対象アドレスがＲＯＭ／ＲＡＭであると判別されると、ステップ４０４で、通常のloadが実行される。
【００５０】
ステップ４０２で対象アドレスがＩ／Ｏであると判別されると、ステップ４０６で、Ｉ／Ｏライブラリが呼び出される。
【００５１】
図５は、この実施例に係るStoreX処理のフローチャートを示す図である。図５において、ステップ５０２では、現在のシステム構成情報に基づき実行時に判明した命令の対象アドレスが判別され、もし、命令の対象アドレスがＲＡＭであると判別されると、ステップ５０４で、通常のstoreが実行される。
【００５２】
ステップ５０２で、対象アドレスがＩ／Ｏであると判別されると、ステップ５０６で、Ｉ／Ｏライブラリが呼び出される。
【００５３】
次に、ステップ５０８では、システム構成情報を変更するかどうかが、判断される。もしそうでなければ、処理はそのまま終了する。
【００５４】
ステップ５０８で、システム構成情報を変更すると判断されると、ステップ５１０で、新しいシステム構成情報が図７に示すシステム構成情報表に反映される。
【００５５】
なお、組込みプログラムでは、プログラムによって動的にシステム構成情報を変更することが可能である。例えば、ＲＡＭのデタッチ、デバイスのアタッチなど、動的に変更が可能であることを理解されたい。
【００５６】
ステップ５１２では、ステップ５１０で新しくできたシステム構成情報の構成ＩＤを現在システム構成７１２に格納する。ステップ５１４では、新しい開始アドレスが設定される。この新しい開始アドレスとは、変換表に指定されているアドレスである。システム構成情報表と、変換表については、後で説明する。
【００５７】
なお、この実施例では、図５のStoreXでは、システム構成情報を変更するかどうかの判断が関与しているが、図４のLoadXでは、システム構成情報を変更するかどうかの判断が関与していない。これは、一般的に、メモリやデバイスに値を書き込むストア動作が、システム構成情報を変更することにつながることが多いという経験則に基づく。従って、この実施例では、LoadXでは、システム構成情報を変更するかどうかの判断は行わないが、場合により必要に応じて、そのような判断をともなうLoadXを実装してもよい。
【００５８】
図６は、実行環境２１０における実行時の動作のフローチャートを示す図である。図６において、ステップ６０２では、開始アドレスが取得される。これは、プログラム・カウンタを参照することによって取得される。
【００５９】
ステップ６０４では、実行環境２１０が現在のシステム構成情報を図７の現在システム構成７１２より取得する。
【００６０】
ステップ６０６では、実行環境２１０が、ホストコードを、変換表から検索する。図７に示すように、変換表７０２は、ゲストアドレスと、システム構成情報の構成ＩＤと、ホストコードのアドレスからなるエントリをもち、ゲストアドレスとしての開始アドレスをキーとして、ホストコードを検索可能である。
【００６１】
ステップ６０８では、実行環境２１０が、変換表において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つけたかどうかが判断される。もしそうなら、ステップ６１０で実行環境２１０は、見つけたホストコードを実行する。
【００６２】
ステップ６１２では、実行環境２１０は、新しい開始アドレスへ到達するか、現在と異なるシステム構成情報の使用があるかどうか判断し、もしそうなら、再び開始アドレスを取得するステップ６０２に戻る。
【００６３】
ステップ６０８で、変換表において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つからない場合、ステップ６１４で、その開始アドレスとシステム構成情報に対して最適化して、コンパイルが行われる。
【００６４】
次にステップ６１６では、その開始アドレスと、構成情報をキーとして、図７に示す変換表７０２への登録が行われる。好適には、システム構成情報７０４には、構成ＩＤとともに実際のシステム構成情報が格納され、変換表７０２には、構成ＩＤが格納される。こうして処理は、ステップ６１０のホストコードの実行に進む。
【００６５】
図７は、変換表７０２、システム構成情報７０４と、実行環境２１０の間の関係を示す図である。前述のように、変換表７０２とは、ゲストコード２０２中の開始アドレスの出現に、システム構成情報表７０４は、StoreX命令によるシステム構成情報の出現に応答してそのエントリを作成される。
【００６６】
変換表７０２は、ゲストアドレス、構成ＩＤ、及びそのゲストアドレスに対応するホストコード７０６へのポインタからなるエントリを有する。ホストコード７０６は実際上、区画７０６ａ、７０６ｂ、７０６ｃ、７０６ｄ、７０６ｅ・・・のように、変換表７０２のエントリのホストアドレスのポインタに個別に対応して、区分けされている。
【００６７】
ホストコード７０６は実際上、ハードディスク・ドライブ１１５上に格納されていてよい。
【００６８】
実行環境２１０はさらに、LoadX/StoreXライブラリ７０８、Ｉ／Ｏライブラリ７１０を有する。これらは、実際上、ハードディスク・ドライブ１１５上に格納されており、必要に応じて、LoadX命令またはStoreX命令によって呼ばれる。
【００６９】
実行環境２１０はさらにまた、現在システム構成情報７１２も有する。
【００７０】
なお、変換表７０２のエントリに直接、対応するシステム構成情報を格納することも可能であるが、この実施例では、システム構成情報表７０４に、構成ＩＤをつけてステム構成情報を含むエントリを格納し、変換表７０２では、構成ＩＤによって、システム構成情報表７０４のエントリを参照するようにしている。
【００７１】
図８は、変換表に基づく動的コンパイルの例を示す図である。最初は、変換表８０２のエントリは空である。最初に、0x1000からゲストコードがコンパイルされる。そこで、コード８０４で示すように、最初にアドレス0x1000から実行される。この場合、まだ変換表８０２のエントリは空なので、図５のステップ５１０に示すステップにより、ゲストアドレス0x1000、構成ＩＤ = 0で変換表８０２に、エントリ８０２ａが作成される。
【００７２】
実行がアドレス0x2000まで到達し、ここでStoreXによるシステム構成の変更が生じたとすると、最早エントリ８０２ａには適合しなくなるので、その新しいシステム構成に関して、システム構成表（図８には図示しない）に、構成ＩＤ = 1で新しいエントリが作成され、以ってゲストアドレス0x2000、構成ＩＤ = 1で変換表８０２に、エントリ８０２ｂが作成される。また同時に、0x2000からゲストコードがコンパイルされ、実行される。
【００７３】
次に、コード８０６で示すように、実行がアドレス0x3000まで到達し、ここでさらにStoreXによるシステム構成の変更が生じたとすると、最早エントリ８０２ｂには適合しなくなるので、その新しいシステム構成に関して、システム構成表（図８には図示しない）に、構成ＩＤ = 2で新しいエントリが作成され、以ってゲストアドレス0x3000、構成ＩＤ = 2で変換表８０２に、エントリ８０２ｃが作成される。同時に、0x3000からゲストコードがコンパイルされ、実行される。
【００７４】
次に、コード８０８において、所定の箇所で0x1000へのジャンプのコマンドがあり、新しい開始アドレス0x1000を実行しようとする。このとき、変換表８０２には、８０２ａで示した0x1000に対応するエントリが存在しているが、その構成ＩＤは0であるので適合しない。
【００７５】
そのため実行環境２１０によって、ゲストコードのコンパイルが、アドレス0x1000から構成ＩＤが2のシステム構成情報に基づいて行われ、コード８１０が作成される。コード８１０は、変換表８０２のアドレスが0x1000で構成ＩＤが2のエントリとして登録されたのち実行される。
【００７６】
次に、図９を参照して、具体的なコードの例を用いて本発明の実施例の動作について説明する。
先ず、次のようなゲストコードを考慮する。
1000: ...
r1 = load 500
...
r2 = load 1800
...
1800: .word 123456
...
1FFC: store r2, r3
2000: store r1, 100
...
r3 = load 10(sp)
...
r4 = load r5
...
【００７７】
ここで、左側の４桁の数字は、ゲストコードのアドレスであり、loadは、変数に値をロードするコマンド、store r2, r3は、変数r2に、変数r3の値を格納するコマンド、load 10 (sp)は、スタックポインタの10番目の位置の値をロードするコマンドである。wordは、定数の配列である。
【００７８】
すると、システム構成が不明のときの、アドレス0x1000からの変換（コンパイル）結果は、下記のとおりである。このコンパイルに応答して、変換表９０２には、エントリ９０２ａで示すように、アドレス0x1000で、構成ＩＤが0のエントリが作成される。エントリ９０２ａのホストアドレスは、下記のようなコードをポイントする。
...
r1 = loadX 500
...
r2 = loadX 1800
...
PC = 0x1FFC
storeX r2, r3
PC = 0x2000
storeX r1, 100
...
r3 = load 10(sp)
...
r4 = loadX r5
...
【００７９】
loadX 500は、アドレス500にあるメモリの値をロードすることを意味する。システム構成が不明なので、スタック領域からのロードである、r3 = load 10(sp)以外は、storeとloadがそれぞれ、storeXとloadXに置き換えられ、storeXの直前で、プログラム・カウンタ(PC)のアドレスがセットされている。これは、storeXを実行するに当たって、プログラムの実行位置をきちんとセットしておくためである。
【００８０】
ここで、構成情報表９０４の、構成ＩＤ = 1で示すように、システム構成情報が判別すると、アドレス0x1000からの変換（コンパイル）結果は、下記のとおりである。このコンパイルに応答して、変換表９０２には、エントリ９０２ｂで示すように、アドレス0x1000で、構成ＩＤが1のエントリが作成される。エントリ９０２ｂのホストアドレスは、下記のようなコードをポイントする。
...
r1 = load 500
...
r2 = 123456
...
PC = 0x1FFC
storeX r2, r3
store r1, 100
...
r3 = load 10(sp)
...
r4 = loadX r5
...
【００８１】
ここで、前にr1 = loadX 500であったのが、r1 = load 500になったのは、構成ＩＤ = 1によって、アドレス500が、ＲＡＭであると分かったからである。また、前にr2 = loadX 1800であったのが、r2 = 123456になったのは、構成ＩＤ = 1によって、アドレス1800が、ＲＯＭであると分かったからである。すなわち、アドレス1800におけるＲＯＭの値が123456であることが利用された。前のstoreX r1, 100がstore r1, 100になったのは、アド
レス100がＲＡＭであると分かったからである。
【００８２】
さらに、構成情報表９０４の、構成ＩＤ = 2で示すように、システム構成情報が判別すると、アドレス0x2000からの変換（コンパイル）結果は、下記のとおりである。このコンパイルに応答して、変換表９０２には、エントリ９０２ｃで示すように、アドレス0x2000で、構成ＩＤが2のエントリが作成される。エントリ９０２ｃのホストアドレスは、下記のようなコードをポイントする。
PC = 0x2000
storeX r1, 100
...
r3 = load 10(sp)
...
r4 = loadX r5
...
【００８３】
構成ＩＤ = 2のシステム構成情報を使った、アドレス0x1000からの変換（コンパイル）結果は、下記のとおりである。このコンパイルに応答して、変換表９０２には、エントリ９０２ｄで示すように、アドレス0x1000で、構成ＩＤが2のエントリが作成される。エントリ９０２ｃのホストアドレスは、下記のようなコードをポイントする。
...
r1 = loadX 500
...
r2 = 123456
...
PC = 0x1FFC
storeX r2, r3
PC = 0x2000
storeX r1, 100
...
r3 = load 10(sp)
...
r4 = loadX r5
...
【００８４】
ここで、前にr1 = load 500であったのが、r1 = loadX 500になったのは、構成ＩＤ = 2によって、アドレス500が、deviceあると分かったからである。また、前にstore r1, 100であったのが、storeX r1, 100になったのは、構成ＩＤ = 2によって、アドレス100が、deviceあると分かったからである。
【００８５】
次に、図９のフローチャートを参照して、専用変換表を作成して使用する処理について説明する。専用変換表とは、図１１に示すように、変換表１１０２から、構成ＩＤのカラムを省略した、簡易的な表１１０４である。
【００８６】
図１０において、ステップ１００２では、開始アドレスが取得される。これは、プログラム・カウンタを参照することによって取得される。
【００８７】
ステップ１００４では、実行環境２１０が現在のシステム構成情報を図７の現在システム構成７１２より取得する。
【００８８】
ステップ１００６では、専用変換表を用いるべきかどうかが判断される。この判断は、例えば、変換表のエントリのシステム構成の検索時に、Ｎ回連続で同一のシステム構成情報をキーとして用いたかどうか、ということで行う。このＮは、例えば、10である。もし、専用変換表を用いるべきでないと判断されると、ステップ１００８に進む。専用変換表を用いるべきという判断の場合の処理は、後述する。
【００８９】
ステップ１００８では、実行環境２１０が、ホストコードを、変換表１１０２から検索する。図１１に示すように、変換表１１０２は、ゲストアドレスと、システム構成情報の構成ＩＤと、ホストコードのアドレスからなるエントリをもち、ゲストアドレスとしての開始アドレスをキーとして、ホストコードを検索可能である。
【００９０】
ステップ１０１０では、実行環境２１０が、変換表１１０２において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つけたかどうかが判断される。もしそうなら、ステップ１０１２で実行環境２１０は、見つけたホストコードを実行する。
【００９１】
ステップ１０１４では、実行環境２１０は、新しい開始アドレスへ到達するか、現在と異なるシステム構成情報の使用があるかどうか判断し、もしそうなら、再び開始アドレスを取得するステップ１００２に戻る。
【００９２】
ステップ１０１０で、変換表１１０２において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つからない場合、ステップ１０１６で、その開始アドレスとシステム構成情報に対して最適化して、コンパイルが行われる。
【００９３】
次にステップ１０１８では、その開始アドレスと、構成情報をキーとして、変換表１１０２への登録が行われる。好適には、システム構成情報には、構成ＩＤとともに実際のシステム構成情報が格納され、変換表１１０２には、構成ＩＤが格納される。こうして処理は、ステップ１０１２に進む。
【００９４】
ステップ１００６に戻って、専用変換表を用いるべきと判断されると、ステップ１０２０に進み、そこで、図１１に示すような専用変換表１１０４の作成が行われる。図示されているように、専用変換表１１０４は、最初は、現在のシステム構成情報が既知として、変換表１１０２に基づき、構成ＩＤのカラムを省いて、変換表１１０２のエントリからコピーすることによって、ゲストアドレスが重ならないように作成される。
【００９５】
ステップ１０２２では、ホストコードが、専用変換表１１０４に基づき検索される。そして、ステップ１０２４で開始アドレスに対してホストコードが、専用変換表１１０４に存在したかどうかが判断される。
【００９６】
もしそうでないなら、ステップ１０２６で、開始アドレスと既存のシステム構成に対して最適化してコンパイルされ、以ってホストコードが得られる。
【００９７】
次にステップ１０２８では、開始アドレスとシステム構成情報をキーとして、専用変換表１１０４と、一般の変換表１１０２の両方に、コンパイルされたホストコードのアドレスが登録される。
【００９８】
次にステップ１０３０では、コンパイルされたホストコードが実行される。
【００９９】
ステップ１０３２では、新しい開始アドレスに到達したかまたは現在と異なるシステム構成情報が使用されるかが判断される。新しい開始アドレスに到達せず、且つ現在と異なるシステム構成情報が使用されるのでないなら、ステップ１０３０に戻って、続いてホストコードが実行される。新しい開始アドレスに到達し、且つ現在と異なるシステム構成情報が使用されるのでないなら、ステップ１０２２に戻り、更に専用変換表１１０４が検索される。他の条件がどうであっても、現在と異なるシステム構成情報が使用されるなら、最早専用変換表１１０４は有効でないので、ステップ１０３４に進んで専用変換表１１０４が破棄され、ステップ１００２に戻る。
【０１００】
ステップ１０２４で開始アドレスに対してホストコードが、専用変換表１１０４に存在したと判断されたのなら、ステップ１０３０に進んで、見つかったホストコードが実行される。ステップ１０３０以下の処理は、ステップ１０２４で開始アドレスに対してホストコードが、専用変換表１１０４に存在しなかったと判断された場合と同様である。
【０１０１】
変換表１１０２の代わりに、専用変換表１１０４を用いる意味は、システム構成が変わっていないだろうと想定して、ゲストアドレスを基に変換表をルックアップしてホストコードを検索する際の構成情報を確認するステップを省略することである。これによって明らかに、ルックアップのコストが減って、検索を高速化できる。
【０１０２】
但し、システム構成が変更されたときは専用変換表１１０４が無効になり、破棄されるべきとなる。この場合に対応するために、ステップ１０２８で、システム構成情報を使って、通常の変換表１１０２も同時に作成しておく。これによって、専用変換表１１０４が破棄された場合に、通常どおり、変換表１１０２を参照することができる。
【０１０３】
以上、本発明を、特定の実施例に従い説明してきたが、本発明はこの特定の実施例のみに限定されるものではなく、また特定のプログラミング言語や処理環境に拘わらず、ゲストコードをコンパイル単位でホストコードに変換するような任意のシステムに適用可能であることを、この分野の当業者なら理解するであろう。
【図面の簡単な説明】
【０１０４】
【図１】本発明を実施するためのハードウェア構成の概要ブロック図である。
【図２】本発明の一実施例に係る機能ブロック図である。
【図３】コンパイル処理のフローチャートを示す図である。
【図４】LoadX処理のフローチャートを示す図である。
【図５】StoreX処理のフローチャートを示す図である。
【図６】実行環境の処理のフローチャートを示す図である。
【図７】変換表、システム構成情報表、及び実行環境の関係を示すフローチャートである。
【図８】開始アドレスからの順次コンパイル処理を説明するための図である。
【図９】ある特定のゲストコードに対する、変換表及びシステム構成情報表の一例を示す図である。
【図１０】場合により専用変換表を作るようにした、実行環境の処理のフローチャートを示す図である。
【図１１】変換表と専用変換表の対応を示す図である。
【符号の説明】
【０１０５】
２０２・・・ゲストコード
２０４・・・コンパイラ（変換手段）
２０６・・・システム構成情報
２０８・・・ホストコード
２１０・・・実行環境
７０２、９０２、１１０２・・・変換表
７０４、９０４・・・システム構成情報表
１１０４・・・専用変換表
【図１】
2010134847.tif 000003
【図２】
2010134847.tif 000004
【図３】
2010134847.tif 000005
【図４】
2010134847.tif 000006
【図５】
2010134847.tif 000007
【図６】
2010134847.tif 000008
【図７】
2010134847.tif 000009
【図８】
2010134847.tif 000010
【図９】
2010134847.tif 000011
【図１０】
2010134847.tif 000012
【図１１】
2010134847.tif 000013