JP5208706B2 - コード実行システム、方法及びプログラム - Google Patents

コード実行システム、方法及びプログラム Download PDF

Info

Publication number
JP5208706B2
JP5208706B2 JP2008312345A JP2008312345A JP5208706B2 JP 5208706 B2 JP5208706 B2 JP 5208706B2 JP 2008312345 A JP2008312345 A JP 2008312345A JP 2008312345 A JP2008312345 A JP 2008312345A JP 5208706 B2 JP5208706 B2 JP 5208706B2
Authority
JP
Japan
Prior art keywords
code
configuration information
system configuration
entry
start address
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.)
Expired - Fee Related
Application number
JP2008312345A
Other languages
English (en)
Other versions
JP2010134847A (ja
Inventor
豪 近藤
秀昭 小松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008312345A priority Critical patent/JP5208706B2/ja
Publication of JP2010134847A publication Critical patent/JP2010134847A/ja
Application granted granted Critical
Publication of JP5208706B2 publication Critical patent/JP5208706B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Description

この発明は、コンピュータ実行可能コードを生成するための技術に関し、特に組込みシステムなどのシステムの上で動くプログラムをシミュレーションするためのコードを生成するシステム、方法及びプログラムに関するものである。
近年、携帯電話、デジカメ、エレベータ、自動車のECU、エンジン・シミュレータ、産業用ロボットなど、マイクロコンピュータによってハードウェアを直接制御する組込みシステムが日常的に使用される頻度が高まってきた。
一般的なコンピュータ・プログラムもそうあるが、特に組込みシステムでは、作成したプログラムが、正しく動作するかどうかを、さまさざまな状況毎にテストする必要がある。
このようなテストにために従来行われている技法として、HILS(Hardware In the Loop Simulation)がある。特に、自動車全体の電子制御システムをテストする環境は、フルビークルHILSと呼ばれる。フルビークルHILSにおいては、実験室内で、本物のECUが、エンジン、トランスミッション機構などをエミュレーションする専用のハードウェア装置に接続され、所定のシナリオに従って、テストが行われる。ECUからの出力は、監視用のコンピュータに入力され、さらにはディスプレイに表示されて、テスト担当者がディスプレイを眺めながら、異常動作がないかどうか、チェックする。
しかし、HILSは、専用のハードウェア装置を使い、それと本物のECUの間を物理的に配線しなくてはならないので、準備が大変である。また、別のECUに取り替えてのテストも、物理的に接続し直さなくてはならないので、手間がかかる。さらに、本物のECUを用いたテストであるため、テストに実時間を要する。従って、多くのシナリオをテストすると、膨大な時間がかかる。また、HILSのエミュレーション用のハードウェア装置は、一般に、非常に高価である。
そこで近年、高価なエミュレーション用ハードウェア装置を使うことなく、全てをソフトウェアで構成する手法が提案されている。この手法は、SILS(Software In the Loop Simulation)と呼ばれ、電子制御システムに使用されるマイクロコンピュータ、入出力回路、制御のシナリオなどを全て、ソフトウェア・シミュレータで構成する技法である。これによれば、組込みシステムのハードウェアが存在しなくても、テストを実行可能である。
SILSにおいては、ハードウェアの制御をエミュレートするプログラムや、ハードウェアの動作そのものの挙動をシミュレートするプログラムが、テスト用のコンピュータ・システム上で動作するように用意される。
特に、シミュレーションにかかる時間を短縮するために、テスト用のコンピュータ・システムとしては、近年、マルチプロセッサの高速なコンピュータ・システムが使用されるようになってきている。このようなシステムにおいては、シミュレーション・プログラムの動作を高速化するために、シミュレーションの複数の処理が、個別のプロセスや個別のスレッドとして、並列的に実行される。
ところで、実際の組込みシステムのプログラムは、データをロードしたり、ストアしたりするために、RAM、ROM、I/Oポートなどにアクセスするコードを有する。このようなプログラムを、別のコンピュータ(ホスト環境)の上でシミュレートしようとすると、RAM、ROM、I/Oポートのアドレスの割り振りなど、システム構成情報が全く異なるので、ロードやストアなどの命令を実行する際に、システム構成情報を参照しつつ、それがRAM、ROM、I/Oポートのどれなのかに応じて、異なるコードを実行する必要がある。
典型的には、そのようなシステム構成情報として、ビットマップ方式に関するものと、メモリ保護方式に関するものがある。
ビットマップ方式は、アドレス空間を、例えば、1Kバイトの区画に分けて、その区画が通常のRAMにマップされている場合には0を、そうでない場合には1をセットしたビットマップを用意し、メモリにアクセスする際は先ずビットマップを参照し、それが返す値に応じて、RAMへの直接アクセス、または別のI/Oライブラリ呼び出しのどちらかが行われる。
メモリ保護方式では、RAMにマップされている区画は読取/書込可とする。すると、RAMにマップされている区画へのアクセスは、ペナルティなしで実行できる。一方、それ以外のI/Oへマップされたアドレスへのアクセスは、読取/書込不可なので、例外が発生し、例外ハンドラによって、I/Oライブラリが呼び出される。
このような、メモリアクセスの度にシステム構成情報を確認する必要性は、プログラムの実行処理にとって大きいコストであって、また、実行コードを生成するコンパイラの最適化の効果をも、著しく低減してしまう。
特開2000−122877号公報は、実際に頻繁に使用する関数およびデータを高速内蔵RAMに配置することによりプログラムの実行速度を向上させることを目的とするものであって、ソースプログラムをコンパイルしてオブジェクトプログラムを生成し、オブジェクトプログラムを実行してプログラム実行時の動的な情報を記録したプロファイル情報を取得し、プロファイル情報を解析して高速化対象区間を決定し、高速化対象区間内で頻繁に参照される関数、データを選択し、高速化対象区間の先頭となる部分に、選択された関数、データを高速内蔵RAMに転送し高速内蔵RAMの内容を入れ替えるための入れ替えコードを挿入したソースプログラムを生成し、ソースプログラムをコンパイルしてオブジェクトプログラムを生成することを開示する。
特開2005−141435号公報は、PLC上で実行されるCプログラムを、コンフィグレーションファイルによりその振る舞いを変更することを容易に行えるツールを提供するようにするために、プログラムの実行順や、入出力パラメータとPLCの実メモリへの割り付け、PLCの実メモリを格納するメモリアドレス、入出力パラメータの初期値等からなるコンフィグレーションファイルを設定するデータ設定部と、データ設定部で設定されたPLCのメモリアドレスをCプログラムで扱う絶対アドレスに変換する絶対アドレス変換部と、CプログラムのシンボルファイルF3と絶対アドレス変換部で生成された中間ファイルから動作ファイルを作成する動作ファイル作成部と、中間ファイルからマップファイルを作成するマップファイル作成部と、中間ファイルから初期値ファイルを作成する初期値ファイル作成部と、それら作成されたファイルおよびオブジェクトファイルをPLCに転送するデータ転送部を備えた構成を開示する。
特開2000−122877号公報 特開2005−141435号公報
特開2000−122877号公報は、オブジェクトプログラムを事前実行させて、プロファイル情報を取得し、その取得したプロファイル情報に適合するようにソースプログラムをコンパイルしてオブジェクトプログラムを生成することを開示するが、ビットマップ方式あるいはメモリ保護方式でメモリが構成されている状況で、個々のロードやストア命令がプロファイル情報をチェックする必要性を解消するものではない。
特開2005−141435号公報は、入出力パラメータの初期値等からなるコンフィグレーションファイルを作成することを開示するが、それを具体的に、ロードやストア命令の最適化に適用することは開示するものではない。
従って、この発明の目的は、個々のロードやストア命令をプロファイル情報、すなわちシステム構成情報に対して最適化することを可能とするコード生成技法を提供することにある。
この発明の他の目的は、システム構成情報が変更されたことに応答して、動的に変更されたプロファイル情報に適合させるコード生成技法を提供することにある。
以下の説明の便宜上、システム構成情報を取得し、それに依存して行われるロード処理及びストア処理をそれぞれ、LoadX、StoreXと呼ぶことにする。そうでなく、通常のロード処理及びストア処理をそれぞれ、load、storeと呼ぶことにする。
すると、本発明によれば、コンパイル単位毎にシステム構成を仮定し、その仮定の下で通常のRAM/ROMにアクセスすることが分かるload/store命令は、LoadX/StoreXではなく、通常のload/store命令に変換される。それによって、コンパイル最適化の効果が得られる。
上記で得られた実行コードは、ゲストの開始アドレスとシステム構成情報のインデックスをキーとした2次元の表にシステム的に登録される。これによって、実行時にはその表から検索して得られた最適化コードを実行することができる。
本発明の好適な一側面として、頻繁に用いられるシステム構成情報に対しては、開始アドレスだけをキーにした専用テーブルを用意するようにしてもよい。そして、プログラムの制御フローの主要箇所でのみシステム構成情報のチェックを行い、以後のコード検索は、その専用テーブルを用いることによって更なる高速化を図るようにしてもよい。
この発明によれば、一旦取得したシステム構成情報を利用して、実行コードのロード処理及びストア処理を最適化できる、という効果が得られる。さらに最適化を阻害していたロード/ストア命令が置き換わっていくことによって,プログラム全体に対してコンパイル最適化の効果も得られる。
以下、図面を参照して、本発明の一実施例の構成及び処理を説明する。以下の記述では、特に断わらない限り、図面に亘って、同一の要素は同一の符号で参照されるものとする。なお、ここで説明する構成と処理は、一実施例として説明するものであり、本発明の技術的範囲をこの実施例に限定して解釈する意図はないことを理解されたい。
先ず、図1を参照して、本発明を実施するために使用されるコンピュータのハードウェアについて説明する。図1において、ホスト・バス102には、複数のCPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dが接続されている。ホスト・バス102にはさらに、CPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dがプログラムをロードしたり作業領域を確保したりするためのメイン・メモリ106が接続されている。
一方、I/Oバス108には、キーボード110、マウス112、ディスプレイ114及びハードティスク・ドライブ116が接続されている。I/Oバス108は、I/Oブリッジ118を介して、ホスト・バス102に接続されている。キーボード110及びマウス112は、オペレータが、コマンドを打ち込んだり、メニューをクリックするなどして、操作するために使用される。ディスプレイ114は、必要に応じて、後述する本発明に係るプログラムをGUIで操作するためのメニューを表示するために使用される。
この目的のために使用される好適なコンピュータ・システムのハードウェアとして、IBM(R)System Xがある。その際、CPU0 104a、CPU1 104b、CPU2 104c、CPU3 104dは、例えば、インテル(R)Core 2 DUOであり、オペレーティング・システムは、Windows(商標)Server 2003である。オペレーティング・システムは、ハードティスク・ドライブ116に格納され、コンピュータ・システムの起動時に、ハードティスク・ドライブ116からメイン・メモリ106に読み込まれる。
なお、本発明を実施するために使用可能なコンピュータ・システムのハードウェアは、IBM(R)System Xに限定されず、本発明のシミュレーション・プログラムを走らせることができるものであれば、任意のコンピュータ・システムを使用することができる。オペレーティング・システムも、Windows(R)に限定されず、Linux(R)、Mac OS(R)など、任意のオペレーティング・システムを使用することができる。POWER(商標)6ベースで、オペレーティング・システムがAIX(商標)のIBM(R)System Pなどのコンピュータ・システムを使用してもよい。
本発明の処理を実施するために、マルチプロセッサであることは必須ではなく、単一プロセッサのシステムであってもよい。
ハードディスク・ドライブ116にはさらに、特に図示しないが、コンパイラ・プログラム、及び後述する本発明に係る処理プログラム等が格納され、キーボード110及びマウス112によって起動操作可能である。
図2は、本発明の処理を実行するための機能のブロック図である。図2において、ゲストコード202は、実行すべきシミュレーション・プログラムのバイナリ・コードである。
コンパイラ204は、本発明特有の機能をもつものであり、システム構成情報206を参照し、その情報に依存した実行コード(ホストコード)208を生成する。コンパイラ204は、通常の、ソースコードを一括して読み込んで処理するタイプのものではなく、ゲストコード202のバイナリコードを順次読取って、やはりバイナリであるホストコードを生成する機能をもつタイプのものであることに留意されたい。すなわち、ゲストコード202は、ゲスト側のCPUに適合するバイナリコードであり、ホストコード208は、ゲストコード202をシミュレーションするためのホスト側のシステムのCPUに適合するバイナリコードである。
実行環境210は、実行コード208を、CPU0〜CPU3に割当てるなどして実行させる、オペレーティング・システムを含むシステム環境であり、実行コード208を実行しつつ、特にStoreXのコードに応じて、後述する変換表、及びシステム構成情報表を含む、テーブル情報212を、好適にはメイン・メモリ106に格納する。なお、テーブル情報212は、ハードディスク・ドライブ116に保存してもよい。
実行環境210はまた、必要に応じてコンパイラ204を起動させる機能ももつ。
図3は、図2のコンパイラ204の機能を示すフローチャートである。図3において、ステップ302では、コンパイラ204は、開始アドレスから始まるコンパイル単位を取得する。ここでいうコンパイル単位とは、バイナリコード処理における文脈に関するものである。すなわち、バイナリコード処理では、変換すべき部分を入力から取り出す前処理(例えば、code discoveryなどと呼ばれる)が行われる。この前処理によって取り出された機械語の命令列を、コンパイル単位と呼ぶことにする。
ステップ304では、現在のシステム構成情報が取得される。ここで、システム構成情報とは、RAMのアドレス範囲、ROMのアドレス範囲、I/Oデバイスのメモリ・マップされたアドレス範囲などである。
ステップ306では、コンパイル単位中の未変換の命令が選択される。
ステップ308では、命令の種類が問われる。命令がLoad/Store以外だと、ステップ310で、通常の変換が行われる。
命令がLoadであると、ステップ312で、その命令の対象アドレスが、ステップ304で取得された現在のシステム構成情報に基づき、チェックされる。
命令の対象アドレスがRAMのアドレス範囲にあると判別されると、ステップ314で、命令は、通常のload、すなわち、RAMからの読取りに変換される。
命令の対象アドレスがROMのアドレス範囲にあると判別されると、ステップ316で、命令は、定数への変換が行われる。すなわち、ROMに書かれている値は変更不可能なので、一旦その値が分かれば、ROMに改めてアクセスすることは不要である。
命令の対象アドレスが、RAMでもROMでもなく、あるいは不明である場合は、ステップ318で、LoadXへの変換が行われる。LoadXについては、図4のフローチャートに関連して、後で説明する。
命令がStoreであると、ステップ320で、その命令の対象アドレスが、ステップ304で取得された現在のシステム構成情報に基づき、チェックされる。
そして、ステップ320で、命令の対象アドレスがRAMのアドレス範囲にあると判別されると、ステップ322で、命令は、通常のstore、すなわちRAMへの書込みに変換される。
ステップ320で、命令の対象アドレスが、RAMでもROMでもなく、あるいは不明であると判別されると、ステップ324でプログラムカウンタ(PC)の更新命令が挿入され、ステップ326でStoreXへの変換が行われる。StoreXについては、図5のフローチャートに関連して、後で説明する。
ステップ328では、全ての命令を変換したかどうかが判断され、もしそうでないなら、ステップ306に戻る。ステップ328で、全ての命令を変換したと判断されると、ステップ330での最適化処理を経て、コンパイルは完了する。ここでの最適化処理とは、例えば、Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman, "Compilers Principles, Technologies, and Tools", Addison-Wesley Publishing Company, 1986のChapter 10に記述されているようなバイナリコード・レベルの最適化であるが、この発明の主要なフィーチャではないので、これ以上の説明は省略する。
図4は、この実施例に係るLoadX処理のフローチャートを示す図である。図4において、ステップ402では、現在のシステム構成情報に基づき実行時に判明した命令の対象アドレスが判別され、もし、命令の対象アドレスがROM/RAMであると判別されると、ステップ404で、通常のloadが実行される。
ステップ402で対象アドレスがI/Oであると判別されると、ステップ406で、I/Oライブラリが呼び出される。
図5は、この実施例に係るStoreX処理のフローチャートを示す図である。図5において、ステップ502では、現在のシステム構成情報に基づき実行時に判明した命令の対象アドレスが判別され、もし、命令の対象アドレスがRAMであると判別されると、ステップ504で、通常のstoreが実行される。
ステップ502で、対象アドレスがI/Oであると判別されると、ステップ506で、I/Oライブラリが呼び出される。
次に、ステップ508では、システム構成情報を変更するかどうかが、判断される。もしそうでなければ、処理はそのまま終了する。
ステップ508で、システム構成情報を変更すると判断されると、ステップ510で、新しいシステム構成情報が図7に示すシステム構成情報表に反映される。
なお、組込みプログラムでは、プログラムによって動的にシステム構成情報を変更することが可能である。例えば、RAMのデタッチ、デバイスのアタッチなど、動的に変更が可能であることを理解されたい。
ステップ512では、ステップ510で新しくできたシステム構成情報の構成IDを現在システム構成712に格納する。ステップ514では、新しい開始アドレスが設定される。この新しい開始アドレスとは、変換表に指定されているアドレスである。システム構成情報表と、変換表については、後で説明する。
なお、この実施例では、図5のStoreXでは、システム構成情報を変更するかどうかの判断が関与しているが、図4のLoadXでは、システム構成情報を変更するかどうかの判断が関与していない。これは、一般的に、メモリやデバイスに値を書き込むストア動作が、システム構成情報を変更することにつながることが多いという経験則に基づく。従って、この実施例では、LoadXでは、システム構成情報を変更するかどうかの判断は行わないが、場合により必要に応じて、そのような判断をともなうLoadXを実装してもよい。
図6は、実行環境210における実行時の動作のフローチャートを示す図である。図6において、ステップ602では、開始アドレスが取得される。これは、プログラム・カウンタを参照することによって取得される。
ステップ604では、実行環境210が現在のシステム構成情報を図7の現在システム構成712より取得する。
ステップ606では、実行環境210が、ホストコードを、変換表から検索する。図7に示すように、変換表702は、ゲストアドレスと、システム構成情報の構成IDと、ホストコードのアドレスからなるエントリをもち、ゲストアドレスとしての開始アドレスをキーとして、ホストコードを検索可能である。
ステップ608では、実行環境210が、変換表において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つけたかどうかが判断される。もしそうなら、ステップ610で実行環境210は、見つけたホストコードを実行する。
ステップ612では、実行環境210は、新しい開始アドレスへ到達するか、現在と異なるシステム構成情報の使用があるかどうか判断し、もしそうなら、再び開始アドレスを取得するステップ602に戻る。
ステップ608で、変換表において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つからない場合、ステップ614で、その開始アドレスとシステム構成情報に対して最適化して、コンパイルが行われる。
次にステップ616では、その開始アドレスと、構成情報をキーとして、図7に示す変換表702への登録が行われる。好適には、システム構成情報704には、構成IDとともに実際のシステム構成情報が格納され、変換表702には、構成IDが格納される。こうして処理は、ステップ610のホストコードの実行に進む。
図7は、変換表702、システム構成情報704と、実行環境210の間の関係を示す図である。前述のように、変換表702とは、ゲストコード202中の開始アドレスの出現に、システム構成情報表704は、StoreX命令によるシステム構成情報の出現に応答してそのエントリを作成される。
変換表702は、ゲストアドレス、構成ID、及びそのゲストアドレスに対応するホストコード706へのポインタからなるエントリを有する。ホストコード706は実際上、区画706a、706b、706c、706d、706e・・・のように、変換表702のエントリのホストアドレスのポインタに個別に対応して、区分けされている。
ホストコード706は実際上、ハードディスク・ドライブ115上に格納されていてよい。
実行環境210はさらに、LoadX/StoreXライブラリ708、I/Oライブラリ710を有する。これらは、実際上、ハードディスク・ドライブ115上に格納されており、必要に応じて、LoadX命令またはStoreX命令によって呼ばれる。
実行環境210はさらにまた、現在システム構成情報712も有する。
なお、変換表702のエントリに直接、対応するシステム構成情報を格納することも可能であるが、この実施例では、システム構成情報表704に、構成IDをつけてステム構成情報を含むエントリを格納し、変換表702では、構成IDによって、システム構成情報表704のエントリを参照するようにしている。
図8は、変換表に基づく動的コンパイルの例を示す図である。最初は、変換表802のエントリは空である。最初に、0x1000からゲストコードがコンパイルされる。そこで、コード804で示すように、最初にアドレス0x1000から実行される。この場合、まだ変換表802のエントリは空なので、図5のステップ510に示すステップにより、ゲストアドレス0x1000、構成ID = 0で変換表802に、エントリ802aが作成される。
実行がアドレス0x2000まで到達し、ここでStoreXによるシステム構成の変更が生じたとすると、最早エントリ802aには適合しなくなるので、その新しいシステム構成に関して、システム構成表(図8には図示しない)に、構成ID = 1で新しいエントリが作成され、以ってゲストアドレス0x2000、構成ID = 1で変換表802に、エントリ802bが作成される。また同時に、0x2000からゲストコードがコンパイルされ、実行される。
次に、コード806で示すように、実行がアドレス0x3000まで到達し、ここでさらにStoreXによるシステム構成の変更が生じたとすると、最早エントリ802bには適合しなくなるので、その新しいシステム構成に関して、システム構成表(図8には図示しない)に、構成ID = 2で新しいエントリが作成され、以ってゲストアドレス0x3000、構成ID = 2で変換表802に、エントリ802cが作成される。同時に、0x3000からゲストコードがコンパイルされ、実行される。
次に、コード808において、所定の箇所で0x1000へのジャンプのコマンドがあり、新しい開始アドレス0x1000を実行しようとする。このとき、変換表802には、802aで示した0x1000に対応するエントリが存在しているが、その構成IDは0であるので適合しない。
そのため実行環境210によって、ゲストコードのコンパイルが、アドレス0x1000から構成IDが2のシステム構成情報に基づいて行われ、コード810が作成される。コード810は、変換表802のアドレスが0x1000で構成IDが2のエントリとして登録されたのち実行される。
次に、図9を参照して、具体的なコードの例を用いて本発明の実施例の動作について説明する。
先ず、次のようなゲストコードを考慮する。
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
...
ここで、左側の4桁の数字は、ゲストコードのアドレスであり、loadは、変数に値をロードするコマンド、store r2, r3は、変数r2に、変数r3の値を格納するコマンド、load 10 (sp)は、スタックポインタの10番目の位置の値をロードするコマンドである。wordは、定数の配列である。
すると、システム構成が不明のときの、アドレス0x1000からの変換(コンパイル)結果は、下記のとおりである。このコンパイルに応答して、変換表902には、エントリ902aで示すように、アドレス0x1000で、構成IDが0のエントリが作成される。エントリ902aのホストアドレスは、下記のようなコードをポイントする。
...
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を実行するに当たって、プログラムの実行位置をきちんとセットしておくためである。
ここで、構成情報表904の、構成ID = 1で示すように、システム構成情報が判別すると、アドレス0x1000からの変換(コンパイル)結果は、下記のとおりである。このコンパイルに応答して、変換表902には、エントリ902bで示すように、アドレス0x1000で、構成IDが1のエントリが作成される。エントリ902bのホストアドレスは、下記のようなコードをポイントする。
...
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になったのは、構成ID = 1によって、アドレス500が、RAMであると分かったからである。また、前にr2 = loadX 1800であったのが、r2 = 123456になったのは、構成ID = 1によって、アドレス1800が、ROMであると分かったからである。すなわち、アドレス1800におけるROMの値が123456であることが利用された。前のstoreX r1, 100がstore r1, 100になったのは、アド
レス100がRAMであると分かったからである。
さらに、構成情報表904の、構成ID = 2で示すように、システム構成情報が判別すると、アドレス0x2000からの変換(コンパイル)結果は、下記のとおりである。このコンパイルに応答して、変換表902には、エントリ902cで示すように、アドレス0x2000で、構成IDが2のエントリが作成される。エントリ902cのホストアドレスは、下記のようなコードをポイントする。
PC = 0x2000
storeX r1, 100
...
r3 = load 10(sp)
...
r4 = loadX r5
...
構成ID = 2のシステム構成情報を使った、アドレス0x1000からの変換(コンパイル)結果は、下記のとおりである。このコンパイルに応答して、変換表902には、エントリ902dで示すように、アドレス0x1000で、構成IDが2のエントリが作成される。エントリ902cのホストアドレスは、下記のようなコードをポイントする。
...
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になったのは、構成ID = 2によって、アドレス500が、deviceあると分かったからである。また、前にstore r1, 100であったのが、storeX r1, 100になったのは、構成ID = 2によって、アドレス100が、deviceあると分かったからである。
次に、図9のフローチャートを参照して、専用変換表を作成して使用する処理について説明する。専用変換表とは、図11に示すように、変換表1102から、構成IDのカラムを省略した、簡易的な表1104である。
図10において、ステップ1002では、開始アドレスが取得される。これは、プログラム・カウンタを参照することによって取得される。
ステップ1004では、実行環境210が現在のシステム構成情報を図7の現在システム構成712より取得する。
ステップ1006では、専用変換表を用いるべきかどうかが判断される。この判断は、例えば、変換表のエントリのシステム構成の検索時に、N回連続で同一のシステム構成情報をキーとして用いたかどうか、ということで行う。このNは、例えば、10である。もし、専用変換表を用いるべきでないと判断されると、ステップ1008に進む。専用変換表を用いるべきという判断の場合の処理は、後述する。
ステップ1008では、実行環境210が、ホストコードを、変換表1102から検索する。図11に示すように、変換表1102は、ゲストアドレスと、システム構成情報の構成IDと、ホストコードのアドレスからなるエントリをもち、ゲストアドレスとしての開始アドレスをキーとして、ホストコードを検索可能である。
ステップ1010では、実行環境210が、変換表1102において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つけたかどうかが判断される。もしそうなら、ステップ1012で実行環境210は、見つけたホストコードを実行する。
ステップ1014では、実行環境210は、新しい開始アドレスへ到達するか、現在と異なるシステム構成情報の使用があるかどうか判断し、もしそうなら、再び開始アドレスを取得するステップ1002に戻る。
ステップ1010で、変換表1102において、開始アドレスとシステム構成情報をキーとして、ホストコードを見つからない場合、ステップ1016で、その開始アドレスとシステム構成情報に対して最適化して、コンパイルが行われる。
次にステップ1018では、その開始アドレスと、構成情報をキーとして、変換表1102への登録が行われる。好適には、システム構成情報には、構成IDとともに実際のシステム構成情報が格納され、変換表1102には、構成IDが格納される。こうして処理は、ステップ1012に進む。
ステップ1006に戻って、専用変換表を用いるべきと判断されると、ステップ1020に進み、そこで、図11に示すような専用変換表1104の作成が行われる。図示されているように、専用変換表1104は、最初は、現在のシステム構成情報が既知として、変換表1102に基づき、構成IDのカラムを省いて、変換表1102のエントリからコピーすることによって、ゲストアドレスが重ならないように作成される。
ステップ1022では、ホストコードが、専用変換表1104に基づき検索される。そして、ステップ1024で開始アドレスに対してホストコードが、専用変換表1104に存在したかどうかが判断される。
もしそうでないなら、ステップ1026で、開始アドレスと既存のシステム構成に対して最適化してコンパイルされ、以ってホストコードが得られる。
次にステップ1028では、開始アドレスとシステム構成情報をキーとして、専用変換表1104と、一般の変換表1102の両方に、コンパイルされたホストコードのアドレスが登録される。
次にステップ1030では、コンパイルされたホストコードが実行される。
ステップ1032では、新しい開始アドレスに到達したかまたは現在と異なるシステム構成情報が使用されるかが判断される。新しい開始アドレスに到達せず、且つ現在と異なるシステム構成情報が使用されるのでないなら、ステップ1030に戻って、続いてホストコードが実行される。新しい開始アドレスに到達し、且つ現在と異なるシステム構成情報が使用されるのでないなら、ステップ1022に戻り、更に専用変換表1104が検索される。他の条件がどうであっても、現在と異なるシステム構成情報が使用されるなら、最早専用変換表1104は有効でないので、ステップ1034に進んで専用変換表1104が破棄され、ステップ1002に戻る。
ステップ1024で開始アドレスに対してホストコードが、専用変換表1104に存在したと判断されたのなら、ステップ1030に進んで、見つかったホストコードが実行される。ステップ1030以下の処理は、ステップ1024で開始アドレスに対してホストコードが、専用変換表1104に存在しなかったと判断された場合と同様である。
変換表1102の代わりに、専用変換表1104を用いる意味は、システム構成が変わっていないだろうと想定して、ゲストアドレスを基に変換表をルックアップしてホストコードを検索する際の構成情報を確認するステップを省略することである。これによって明らかに、ルックアップのコストが減って、検索を高速化できる。
但し、システム構成が変更されたときは専用変換表1104が無効になり、破棄されるべきとなる。この場合に対応するために、ステップ1028で、システム構成情報を使って、通常の変換表1102も同時に作成しておく。これによって、専用変換表1104が破棄された場合に、通常どおり、変換表1102を参照することができる。
以上、本発明を、特定の実施例に従い説明してきたが、本発明はこの特定の実施例のみに限定されるものではなく、また特定のプログラミング言語や処理環境に拘わらず、ゲストコードをコンパイル単位でホストコードに変換するような任意のシステムに適用可能であることを、この分野の当業者なら理解するであろう。
本発明を実施するためのハードウェア構成の概要ブロック図である。 本発明の一実施例に係る機能ブロック図である。 コンパイル処理のフローチャートを示す図である。 LoadX処理のフローチャートを示す図である。 StoreX処理のフローチャートを示す図である。 実行環境の処理のフローチャートを示す図である。 変換表、システム構成情報表、及び実行環境の関係を示すフローチャートである。 開始アドレスからの順次コンパイル処理を説明するための図である。 ある特定のゲストコードに対する、変換表及びシステム構成情報表の一例を示す図である。 場合により専用変換表を作るようにした、実行環境の処理のフローチャートを示す図である。 変換表と専用変換表の対応を示す図である。
符号の説明
202・・・ゲストコード
204・・・コンパイラ(変換手段)
206・・・システム構成情報
208・・・ホストコード
210・・・実行環境
702、902、1102・・・変換表
704、904・・・システム構成情報表
1104・・・専用変換表

Claims (18)

  1. コンピュータの処理によって、ゲストコードをホストコードに変換して実行するためのシステムであって、
    ゲストコードを、読出し可能に保持する手段と、
    システム構成情報を取得する構成取得手段と、
    前記取得されたシステム構成情報に依存して、指定された開始アドレスから順次、前記ゲストコードの所定の単位のコードを、前記ホストコードに変換する変換手段と、
    ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表と、
    指定された開始アドレスからのゲストコードの変換開始動作に応答して、前記構成取得手段によりシステム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、前記変換手段により、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行手段を有する、
    コード実行システム。
  2. 前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項1のコード実行システム。
  3. 前記システム情報が、RAMのアドレス範囲、ROMのアドレス範囲、及びI/Oデバイスのアドレス範囲を含む、請求項1のコード実行システム。
  4. 前記実行手段が、該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成する、請求項1のコード実行システム。
  5. システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄する手段をさらに有する、請求項4のコード実行システム。
  6. 前記実行手段が、エントリを前記変換表に登録する際に、システム構成情報とその構成IDとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成IDが格納される、請求項1のコード実行システム。
  7. コンピュータの処理によって、ゲストコードをホストコードに変換して実行するための方法であって、
    ゲストコードを、読出し可能に前記コンピュータの記憶手段に保持するステップと、
    ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表を前記コンピュータの記憶手段に用意するステップと、
    指定された開始アドレスからのゲストコードの変換開始動作に応答して、システム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行ステップを有する、
    コード実行方法。
  8. 前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項7のコード実行方法。
  9. 前記システム情報が、RAMのアドレス範囲、ROMのアドレス範囲、及びI/Oデバイスのアドレス範囲を含む、請求項7のコード実行方法。
  10. 該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成するステップをさらに有する、請求項7のコード実行方法。
  11. システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄するステップをさらに有する、請求項10のコード実行方法。
  12. 前記実行ステップが、エントリを前記変換表に登録する際に、システム構成情報とその構成IDとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成IDが格納される、請求項7のコード実行方法。
  13. コンピュータの処理によって、ゲストコードをホストコードに変換して実行するためのプログラムであって、
    前記コンピュータに、
    ゲストコードを、読出し可能に前記コンピュータの記憶手段に保持するステップと、
    ゲストコードの開始アドレスと、システム構成情報と、ホストコードの開始アドレスとをもつエントリを有する変換表を前記コンピュータの記憶手段に用意するステップと、
    指定された開始アドレスからのゲストコードの変換開始動作に応答して、システム構成情報を取得し、該開始アドレスと該システム構成情報をキーとして前記変換表を検索し、エントリが見つかったことに応答して、該エントリが示すホストコードの開始アドレスから、ホストコードを実行し、エントリが見つからないことに応答して、該開始アドレスから前記ゲストコードをホストコードに変換して実行し且つ該開始アドレスと該システム構成情報と該変換したホストコードのアドレスをもつエントリを前記変換表に登録する実行ステップを実行させる、
    コード実行プログラム。
  14. 前記取得されたシステム情報に依存して前記ホストコードに変換されるコマンドが、ロード処理及びストア処理を含む、請求項13のコード実行プログラム。
  15. 前記システム情報が、RAMのアドレス範囲、ROMのアドレス範囲、及びI/Oデバイスのアドレス範囲を含む、請求項13のコード実行プログラム。
  16. 該開始アドレスと前記ホストコードの開始アドレスは含むが、前記システム構成情報は含まないエントリをもつ、専用変換表を作成するステップをさらに有する、請求項13のコード実行プログラム。
  17. システム構成情報の変更が検出されたことに応答して、前記専用変換表を破棄するステップをさらに有する、請求項16のコード実行プログラム。
  18. 前記実行ステップが、エントリを前記変換表に登録する際に、システム構成情報とその構成IDとをもつエントリを有するシステム構成情報表にエントリを格納し、前記変換表には、該構成IDが格納される、請求項13のコード実行プログラム。
JP2008312345A 2008-12-08 2008-12-08 コード実行システム、方法及びプログラム Expired - Fee Related JP5208706B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008312345A JP5208706B2 (ja) 2008-12-08 2008-12-08 コード実行システム、方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008312345A JP5208706B2 (ja) 2008-12-08 2008-12-08 コード実行システム、方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2010134847A JP2010134847A (ja) 2010-06-17
JP5208706B2 true JP5208706B2 (ja) 2013-06-12

Family

ID=42346060

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008312345A Expired - Fee Related JP5208706B2 (ja) 2008-12-08 2008-12-08 コード実行システム、方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5208706B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0816875B2 (ja) * 1992-07-27 1996-02-21 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・システムのエミュレーション方法
JP2003167758A (ja) * 2001-11-30 2003-06-13 Matsushita Electric Ind Co Ltd 仮想メモリマップドi/o装置およびこれを用いたシミュレーションシステム、並びに仮想メモリマップドi/oプログラム
JP2004185527A (ja) * 2002-12-06 2004-07-02 Mitsubishi Electric Corp シミュレーション装置及びシミュレーション方法及びプログラム及びプログラムを記録したコンピュータ読み取り可能な記録媒体

Also Published As

Publication number Publication date
JP2010134847A (ja) 2010-06-17

Similar Documents

Publication Publication Date Title
US8266608B2 (en) Post-compile instrumentation of object code for generating execution trace data
KR100518584B1 (ko) 공유 라이브러리 시스템 및 상기 시스템 구축 방법
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
JP6138142B2 (ja) 被管理ランタイムのためのハードウェア・ベース・ランタイム計装機構
US8887141B2 (en) Automatically modifying a native code module accessed from virtual machine bytecode to determine execution information
US8677322B2 (en) Debugging in a multiple address space environment
US8843920B2 (en) Systems and methods for deferring software implementation decisions until load time
JP2013542499A (ja) データ処理装置のデバッグ処理
US20020170034A1 (en) Method for debugging a dynamic program compiler, interpreter, or optimizer
US20080005727A1 (en) Methods, systems, and computer program products for enabling cross language access to an addressable entity
EP3895022B1 (en) Improving emulation and tracing performance using compiler-generated emulation optimization metadata
US20060277371A1 (en) System and method to instrument references to shared memory
JP5050019B2 (ja) ソースコード解析システム
TWI743698B (zh) 解譯執行位元組碼指令流的方法及裝置
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
JP5208706B2 (ja) コード実行システム、方法及びプログラム
KR101083271B1 (ko) 액티브엑스 컨트롤 변환 시스템 및 방법
US20130006397A1 (en) Programmable controller and programming tool for communication with legacy equipment
JP6812637B2 (ja) プログラマブルコントローラシステム、その開発支援装置、ターゲット装置
Nakamoto et al. Virtual software execution environments for distributed embedded control systems
KR101225577B1 (ko) 어셈블리 언어 코드의 분석 장치 및 방법
CN111045658B (zh) 访问类的静态成员的方法和装置
CN104166633B (zh) 用于存储器访问保护的方法和系统
CN115470151B (zh) 一种应用运行分析方法、计算设备及存储介质
JP5738065B2 (ja) 制御プログラム開発支援装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130108

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130122

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130220

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160301

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees