(57)【要約】【課題】本発明は、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートするために、コンピュータ上で実行可能なシミュレーションプログラムを生成する方法に関し、上記方法は、  ａ）前記プログラムのソースコードを提供するステップと、  ｂ）前記プログラムの最適化されたソースコードの中間表現を生成するステップと、  ｃ）前記プログラムの最適化されたソースコードの中間表現に基づいて、ランタイムを決定するステップと、  ｄ）前記最適化されたソースコードの中間表現に基づいて、ホストコンピュータ上で実行可能なオブジェクトコードを生成するステップと、  ｅ）ホストコンピュータ上で実行可能なシミュレーションプログラムが生成されるように、前記ランタイムと、前記オブジェクトコードと、規定のシミュレーションライブラリとをリンカを用いて結合するステップとを備える。【選択図】図２
2009515243.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートするために、コンピュータ上で実行可能なシミュレーションプログラムを生成する方法であって、
ａ）前記プログラムのソースコードを提供するステップと、
ｂ）前記プログラムの最適化されたソースコードの中間表現を生成するステップと、
ｃ）前記プログラムの最適化されたソースコードの中間表現に基づいて、ランタイムを決定するステップと、
ｄ）前記最適化されたソースコードの中間表現に基づいて、ホストコンピュータ上で実行可能なオブジェクトコードを生成するステップと、
ｅ）ホストコンピュータ上で実行可能なシミュレーションプログラムが生成されるように、前記ランタイムと、前記オブジェクトコードと、規定のシミュレーションライブラリとをリンカを用いて結合するステップとを備える、方法。
【請求項２】
前記シミュレーションプログラムは、規定の協調シミュレーションプログラムを用いて、前記ホストコンピュータ上で実行される、請求項１に記載の方法。
【請求項３】
前記プログラムは、その実行中に複数のターゲットコンピュータ上で実行されるプログラム部品を備える、請求項１および２のいずれか一項に記載の方法。
【請求項４】
複数のターゲットコンピュータ上で実行されるために提供される前記プログラム部品の機能およびランタイムをシミュレートするために、前記シミュレーションプログラムが生成される、請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記最適化されたソースコードの中間表現は、すでに生成されたソースコードの中間表現から規定の最適化プログラムを用いて生成される、請求項１乃至４のいずれか一項に記載の方法。
【請求項６】
中間表現を生成するために、前記ソースコードは、構文および意味解析が施され、前記ソースコードに含まれる関数要素がホストコンピュータの対応する関数要素に変換されるように変更される、請求項５に記載の方法。
【請求項７】
ランタイムを一意に識別するために、ステップｃ）で生成されたランタイムのうち、一つの時間、複数の時間、あるいは全ての時間に、識別文字をそれぞれ割り当てる、請求項１乃至６のいずれか一項に記載の方法。
【請求項８】
ステップｄ）あるいはｅ）にて、前記識別文字に対応する相互参照を前記オブジェクトコードに挿入する、請求項７に記載の方法。
【請求項９】
ステップｅ）にて、前記相互参照に対応する関数コールを前記シミュレーションプログラムに挿入する、請求項８に記載の方法。
【請求項１０】
特に数字や番号で示され、前記相互参照それぞれに一意に割り当てられる機械可読な文字が、実行される対応関数に転送されるように、前記関数コールを構成する、請求項９に記載の方法。
【請求項１１】
前記相互参照それぞれに一意に割り当てられるランタイムが、実行される対応関数に転送されるように、前記関数コールを構成する、請求項９に記載の方法。
【請求項１２】
ランタイムは機械可読な形式でテーブルに記憶される、請求項１乃至１１のいずれか一項に記載の方法。
【請求項１３】
ランタイムは前記プログラムの部品毎に決定され、前記テーブルは、前記ターゲットコンピュータ上で前記プログラムの各部品が実行される際、操作手段の使用および／または割り当てに関する情報をさらに記憶する、請求項１２に記載の方法。
【請求項１４】
操作手段の使用および／または割り当てに関する情報は、実行される対応関数に転送される、請求項１３に記載の方法。
【請求項１５】
前記シミュレーションプログラムを生成する少なくとも１つ、好ましくは全てのステップの実行は、追加のプログラムを用いて制御される、請求項１乃至１４のいずれか一項に記載の方法。
【請求項１６】
ターゲットコンピュータに実装される少なくとも１つのオペレーティングシステムの動作が、前記シミュレーションプログラムで考慮される、請求項１乃至１５のいずれか一項に記載の方法。
【請求項１７】
少なくとも１つのターゲットコンピュータの環境が前記シミュレーションプログラムで考慮される、請求項１乃至１６のいずれか一項に記載の方法。
【請求項１８】
前記シミュレーションプログラムは、分散プログラムの形式で、複数のホストコンピュータ上で実行可能である、請求項１乃至１７のいずれか一項に記載の方法。
【請求項１９】
複数のホストコンピュータ間で分散した協調シミュレーションプログラムは、複数のホストコンピュータ間で分散した前記シミュレーションプログラムを実行するのに使用される、請求項１８に記載の方法。
【請求項２０】
請求項１乃至１９のいずれか一項に記載の方法を実行するコンピュータプログラム。
【請求項２１】
ターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートする方法であって、
ａ）請求項１乃至１９のいずれか一項に記載のシミュレーションプログラムを生成するステップと、
ｂ）少なくとも１つのホストコンピュータ上でシミュレーションプログラムを実行するステップとを有する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法、及びターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートする方法に関する。
【背景技術】
【０００２】
従来技術では、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能をシミュレートするシミュレーションプログラムが知られている。このようなシミュレーションプログラムにおいては、例えばプログラムのランタイムなどの時間的な動作をシミュレートすることはできない。特に、リアルタイムシステムの時間的な動作をシミュレートすることは不可能である。
【０００３】
図１は、従来技術による実行可能なタイムドシミュレーションプログラムを示す。このプログラムでは、ホストコンピュータにおけるシミュレーション中に、ターゲットコンピュータ上で実行されるために提供されるプログラムのランタイムが考慮される。このためには、プログラムのソースコード１．１から、ステップ１．２、１．４、１．６および１．８を実行することで得られるランタイム（ステップ１．９参照）まで、複数のステップを必要とする。これは、例えばコンピュータプログラムによって自動的に実行されてもよい。ステップ１．２から１．９を省くこともできるし、ステップ１．９でランタイムを手動で入力することもできる。
【０００４】
ステップ１．９の後、ステップ１．１０の「結合」でソースコード１．１が修正されることにより、ステップ１．１１で「修正済ソースコード」が生成される。修正済ソースコードは相互参照を含むソースコードのバージョンであり、これによりシミュレーション中にランタイムを考慮できるようになる。
【０００５】
修正済ソースコード１．１１を生成するステップ１．１０が手動で実行される例としては、英国、ヨークのＲａｐｉｔａ社が開発したシミュレーションプログラム「ＲａｐｉＴｉｍｅ」、あるいはシミレーション・モデリング言語「ＳｙｓｔｅｍＣ」が挙げられる。この場合、ソースコードに対する各命令、あるいは、各命令グループにおいては、これらの命令が時間的な動作や操作手段の割り当てに及ぼす影響を考慮した詳細の仕様が規定されねばならない。上述の例では、その名前および意味が現用のシミュレーションプログラムで定義される関数コールの形式で、追加のプログラムコードを用いて実行される。
【０００６】
ステップ１．１０が自動的に実行される例としては、米国、サニーベールのＶａｓｔ  Ｓｙｓｔｅｍ  Ｔｅｃｈｎｏｌｏｇｙ  Ｃｏｏｐｅｒａｔｉｏｎ社が開発したシミュレーションプログラムである「Ｍｅｔｒｉｘ」および「Ｍｅｔｅｏｒ」が挙げられる。このプログラムは米国特許出願Ｎｏ．６，２３０，１１４  Ｂ１にも記載されている。この場合、実行時間は各ステップ１．２、１．４、１．６および１．８にて同様に決定される。ソースコードに対して構文および意味解析が施された後、ステップ１．３にて、ソースコードの中間表現が生成される。ステップ１．４にて、上述の中間表現を最適化したソースコードの中間表現１．５が、オプティマイザ、あるいは、規定の最適化プログラムにより生成される。そして、ステップ１．６のターゲットコード生成機によって、これはターゲットコード（ステップ１．７参照）に変換される。従来技術によれば、これはターゲットオブジェクトコード、あるいは、ターゲットアセンブラコードである。そして、基本ブロックのランタイム（ステップ１．９参照）がステップ１．８の「解析」で決定される。ステップ１．１０にて、ステップ１．８で決定された基本ブロックのランタイムに関する相互参照を挿入することにより、ステップ１．１１にて、修正済ソースコードが元のソースコードから生成される。
【０００７】
さらに、ステップ１．１２、１．１４および１．１６にて、修正済ソースコードは、ホストコンピュータ上で実行可能な一連の機械コマンド、いわゆるホストオブジェクトコード（ステップ１．１７参照）に変換される。ステップ１．１２、１．１４および１．１６はコンパイラで実行される。ステップ１．１２にて、コンパイラは修正済ソースコードに構文および意味分析を施し、修正済ソースコードの中間表現を生成する（ステップ１．１３参照）。次のステップにて、オプティマイザ（ステップ１．１４参照）を用いて、最適化されたソースコードの中間表現（ステップ１．１５参照）を生成する。
【０００８】
オプティマイザにより、最適化された修正済ソースコードの中間表現が生成されたら、ステップ１．１６にて、ホストオブジェクトコード（ステップ１．１７参照）がホストコード生成機を用いて生成される。ステップ１．１９ではリンカを使用して、シミュレータのオブジェクトコードを含むシミュレーションライブラリ（ステップ１．１８参照）を用いた実行可能なタイムドシミュレーションモデル（ステップ１．２０参照）にホストオブジェクトコードを転送する。
【０００９】
従来技術において、オプティマイザが行う修正済ソースコードの最適化は、未修正のソースコードの最適化とは異なる結果となる。その結果、シミュレーション中、ターゲットコンピュータとは異なる順番で、関数、関数部品、基本ブロックおよび個々の命令を実行することができる。シミュレーション中、基本ブロックを解析するための上記ブロック内の一連のコマンド、およびコマンドの数は、リアルシステムと異なっていてもよい。また、ターゲットコンピュータ上で全く実行されていない関数、関数部品、基本ブロックおよび個々の命令を実行することも可能である。したがって、シミュレーションはターゲットコンピュータ上で実行されるプログラムとは大幅に異なってしまうこともある。
【００１０】
これとは別に、マイクロプロセッサにおけるレジスタの使用および割り当てもあまり効率的とはいえない。ターゲットコンピュータ上におけるプログラム実行時よりも、ホストコンピュータ上におけるシミュレーション時のほうが、より多くのメモリアクセスを必要とするからである。
【００１１】
ホストコンピュータ向けにコンパイラを用いて最適化を行った結果と、ターゲットコンピュータ向けにコンパイラを用いて最適化を行った結果とが異なるため、ホストコンピュータ上のシミュレーションは、ターゲットコンピュータ上で実際に実行されるプログラムとは異なるものとなる。シミュレーションの目的がターゲットコンピュータ上のプログラムの時間的な動作、あるいはターゲットコンピュータの操作手段の割り当てを決定し、かつ解析することであれば、最適化の結果が異なることからシミュレーションの結果に歪みが生じ、そのシミュレーション結果を使用できない恐れもある。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従来技術による上述の方法では、ソースコードは大幅に修正されている。ソースコードをホストコンピュータの機械語に変換する代わりに、ソースコードをターゲットコンピュータの機械語に変換し、解釈・シミュレートを施してから実行していれば、従来技術のようにソースコードを大幅に修正する必要はなかったかもしれない。各コマンドの解釈にシミュレーションプログラムを使用する場合、例えば正確な実行時間および機能的な実行といった、ユーザに関連する事項が決定され表示される。この原則に従って動作するシミュレーションプログラムは、命令セットシミュレータとも呼ばれる。これらのプログラムはマイクロプロセッサのタイプ毎に特化しており、ソースコードのレベルではなく機械コマンドのレベルでプログラムをシミュレートするため、使用範囲が限られてしまう。ホストコンピュータ上では、シミュレートされたターゲットコンピュータのコマンド毎に多くのステップを必要とする。その結果、この方法では演算にとてつもない時間を要するため、動作が遅くなる。特に、複雑なリアルタイムシステムやマイクロプロセッサシステムをシミュレートするのには適していない。
【００１３】
本発明の目的は、従来技術による問題点を回避することである。特に、本発明では歪んだシミュレーションの実行を防ぐ方法が特定されている。本発明の他の目的は、シミュレーション時間を短縮することである。
【課題を解決するための手段】
【００１４】
この目的は、クレーム１、２０および２１の特徴により達成される。適切な実施形態はクレーム２から１９より得られる。
【００１５】
本発明では、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートするために、コンピュータ上で実行可能なシミュレーションプログラムを生成する方法が提供され、上記方法は、
ａ）前記プログラムのソースコードを提供するステップと、
ｂ）前記プログラムの最適化されたソースコードの中間表現を生成するステップと、
ｃ）前記プログラムの最適化されたソースコードの中間表現に基づいて、ランタイムを決定するステップと、
ｄ）前記最適化されたソースコードの中間表現に基づいて、ホストコンピュータ上で実行可能なオブジェクトコードを生成するステップと、
ｅ）ホストコンピュータ上で実行可能なシミュレーションプログラムが生成されるように、前記ランタイムと、前記オブジェクトコードと、規定のシミュレーションライブラリとをリンカを用いて結合するステップとを備える。
【００１６】
本発明による方法では、プログラムの最適化されたソースコードの中間表現はターゲットコンピュータ向けに生成される。このため、ターゲットコンピュータ向けの機械コード（ターゲットコード）を生成するコンパイラと同じもしくはそれに相当する方法でソースコードの最適化が行われる。
【００１７】
従来技術による修正済ソースコードは不要である。実行可能なタイムドシミュレーションプログラムを生成するためのランタイムは、最適化されたソースコードの中間表現が生成されてからしか考慮されない。上記ランタイムが考慮されてからは、さらなる最適化は行われないため、歪んだシミュレーションの実行を防ぐことができる。また、シミュレーション時間も大幅に短縮することができる。従って、本発明による方法は、リアルタイムシステムあるいはマルチプロセッサシステムのためのシミュレーションプログラムを生成するのに特に適している。
【００１８】
一般に、リアルタイムシステムとは、予め、あるいは、ある特定の時点で明確に定義された時間間隔内に結果を提供することが保証されたシステムを意味する。このようなリアルタイムシステムは広く普及している。リアルタイムシステムは、例えば、携帯電話、アンチロックシステム、エンジンや洗濯機のコントローラに使われている。
【００１９】
プログラム、特にリアルタイムシステムのプログラム、を調べるため、シミュレーションプログラムは、シミュレーション中、ターゲットコンピュータ上で実行されているときのプログラムの時間的な動作に関する情報を必要とする。この情報は、プログラム部品のランタイム（実行時間とも称する）を規定するために使われる。このプログラム部品は関数、関数部品、基本ブロック、命令列または個々の命令であってもよい。
【００２０】
プログラミングにおける関数やメソッドとは、再利用可能な方法で、特定のタスクを実行させることができるソースコードの連結した部分を意味する。関数は関数コールを用いてプログラムの実行に組み込まれる。命令は、プログラミング言語においてコマンド、あるいは、一連のコマンドである。基本ブロックは命令列を示し、その先頭の命令は、その命令列のエントリポイントのみを表している。基本ブロックの他の命令が正確に実行されるのは、エントリポイントが実行された時のみである。イグジットポイントはその命令列の終端にしかない。イグジットポイントは、条件付き、あるいは、条件のないプログラム分岐であってもよい。
【００２１】
リンケージローダとも呼ばれるリンカとは、実行可能なプログラムを形成するために、個々のプログラムモジュールをコンパイルしてリンクするプログラムを意味する。
【００２２】
シミュレーションにおいては、シミュレーションモデル上で実験を行うことができる。リアルシステム上で実行されるために提供されるプログラムの機能およびランタイムに関する情報はそこから得られる。
【００２３】
リアルシステムは１つ以上のプロセッサを有する１つ以上のターゲットコンピュータであってもよい。複数のターゲットコンピュータを使用して１つのタスクが実行されている場合、そのシステムはいわゆるマルチプロセッサシステム、あるいは、分散システムである。
【００２４】
また、本出願を簡素化する目的で、「ターゲットコンピュータ」とも表記されるリアルシステム（ターゲットシステムとも称する）は、ハードウェア、操作手段、周辺装置、環境とそれらの相互作用などを含んでいてもよい。環境とは、プログラムの実行中、そのプログラムのフローに影響を与えうる条件、影響、相互作用を示す。
【００２５】
シミュレーションは、ターゲットコンピュータとは異なるホストコンピュータ上で実行されるのが好ましい。言うまでもなく、ホストコンピュータとターゲットコンピュータは同一であってもよい。シミュレーションはホストシステム上で実行されてもよい。ホストシステムは複数のホストコンピュータを含んでいてもよい。また、ホストシステムは、ハードウェア、操作手段、周辺装置、環境とそれらの相互作用などを含んでいてもよい。さらに、明示されていなければ、「ホストコンピュータ」は、本出願における「ホストシステム」を意味する。シミュレーションプログラムは、分散プログラムの形式で、ホストシステム上で実行されてもよい。
【００２６】
シミュレーションプログラムとは、その主題、内容および表現がシミュレーション用に構成されているコンピュータプログラムを意味する。プログラム（コンピュータプログラムとも称する）とは、特定の目的を達成するために使用されるコンピュータ上で定義されたワークフローを意味する。ワークフローはコンピュータで処理される一連の個々のコマンドを備える。プログラムは一般に、例えばＣ、Ｃ＋＋、Ｊａｖａ（登録商標）、Ａｄａなど、人が解読可能なプログラミング言語でテキストとして書かれる。また、それは、ソースコード、ソーステキスト、あるいはプログラムコードとも呼ばれる。コンピュータによって実行されるまでに、プログラムは機械語に、さらには機械語から一連のビットに変換されていなければならない。これはコンパイラを用いて、あるいは、ランタイムに、必要であればインタープリタを用いて実行されてもよいし、また例えばＪａｖａ（登録商標）プログラミング言語の場合であればバイトコードを用いて実行されてもよい。
【００２７】
トランスレータとも呼ばれるコンパイラは、ソースプログラミング言語で書かれたプログラムのソースコードを、ターゲットプログラミング言語で意味的に同等なプログラムに変換するコンピュータプログラムである。通常、プログラマがプログラミング言語で書いたソースコードがアセンブリ言語、バイトコード、あるいは機械語に変換される。機械語に変換されたソースコードはオブジェクトコードと呼ばれる。コンパイラを使用して行われる工程をコンパイルと呼ぶ。
【００２８】
プログラムがホストコンピュータにも実装されているプログラミング言語で書かれていれば、ホストコンピュータ上でターゲットコンピュータのプログラムをシミュレーションすることができる。これは、例えばＣ、Ｃ＋＋、Ｊａｖａ（登録商標）などの高級言語の場合である。ターゲットコンピュータの環境およびオペレーティングシステムはシミュレーション環境によりホストコンピュータ上で再現される。
【００２９】
オペレーティングシステムとは、例えばメモリ、入力・出力デバイスなど、コンピュータの操作手段を使うことを可能にし、プログラムの実行を制御するプログラムを意味する。
【００３０】
ターゲットコンピュータ用のプログラムをホストコンピュータ上でシミュレートするために、ソースコードは実行可能なシミュレーションプログラムに変換される。実行可能なシミュレーションプログラムとは、プログラム単体で直接、もしくは、協調シミュレーションを用いて、ホストコンピュータ上で実行可能なシミュレーションプログラムを意味する。協調シミュレーションプログラムはシミュレーション環境を提供する。シミュレーション環境とは、シミュレートされるリアルシステムのリアル環境の再現であり、これにより、シミュレートされるプログラムの実行中、同一の条件、影響および相互作用がそのシミュレートされるプログラムのフローに従って動作する。協調シミュレーションプログラムでは、ユーザとの必要な対話を実行できる。ユーザとの対話、あるいは、ターゲットコンピュータ環境との相互作用もまた、実行可能なシミレーションプログラムを用いてシミュレートされる。
【００３１】
本発明に係る方法の一実施形態によれば、シミュレーションプログラムは規定の協調シミュレーションプログラムを用いたホストコンピュータ上で実行することができる。もちろん、シミュレーションプログラムは、ホストコンピュータ上において直接実行されてもよい。
【００３２】
プログラムは、その実行中に複数のターゲットコンピュータ上で実行されるプログラム部品を備えてもよい。複数のターゲットコンピュータ上で実行されるために提供されるプログラム部品の機能およびランタイムをシミュレートするために、シミュレーションプログラムを生成することもできる。
【００３３】
本発明に係る方法の有利な実施形態によると、最適化されたソースコードの中間表現は、すでに生成されたソースコードの中間表現から、規定の最適化プログラムを用いて生成される。中間表現を生成するために、ソースコードは、構文および意味解析が施され、そのソースコードに含まれる関数要素がホストコンピュータの対応する関数要素に変換されるように変更されるのが好ましい。最適化プログラムを使用してワークフローを再構築し、ワークフローの効率性の向上が計られる。この場合の目的とは、最適な実行速度およびプログラムサイズを実現することである。一般に、例えば、未使用の基本ブロックを除去する、などプロセッサに依存しない規則を使用して最適化されたり、あるいは、レジスタ数や特殊な機械コマンドなど、各マイクロプロセッサ独自の特性に適合するように最適化されたりする。
【００３４】
本発明に係る特に有利な実施形態によると、ランタイムを一意に識別するために、ステップｃ）で生成されたランタイムのうち、一つの時間、複数の時間、あるいは全ての時間に、識別文字をそれぞれ割り当てる。ステップｄ）もしくはｅ）にて、識別文字に対応する相互参照をオブジェクトコードに挿入するのが好ましい。また、ステップｅ）にて、相互参照に対応する関数コールも、シミュレーションプログラムに挿入されるのが好ましい。実行可能なタイムドシミュレーションプログラムとターゲットコンピュータに関する時間情報との相互参照は非常に簡単に生成することができる。超高速のシミュレーションがホストコンピュータ上で実現可能となる。
【００３５】
本発明に係る方法の実施形態においては、相互参照それぞれに一意に割り当てられる機械可読な文字が、実行される関数に転送されるように関数コールが構成される。機械可読な文字は数字、番号、ビット列などであってもよい。他の有利な実施形態によれば、相互参照それぞれに一意に割り当てられるランタイムが、実行される対応関数に転送されるように関数コールが構成されてもよい。この場合、ステップｅ）でリンカを使用して、すでにランタイムを含むオブジェクトコードとシミュレーションライブラリとを結合し、ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する。
【００３６】
また、本発明の一実施形態においては、ターゲットコンピュータ上のソースコードのランタイムに加えて、操作手段の割り当て、および／または、ターゲットコンピュータに含まれる操作手段の使用も、解析中に決定される。したがって、現時点での操作手段の使用、および／または、操作手段の使用限度も、シミュレーションプログラムの実行時に決定される。
【００３７】
本発明に係る方法の特に好ましい他の実施形態においては、ランタイムは機械可読な形式でテーブルに記憶される。ランタイムはプログラムの部品毎に決定されてもよい。またテーブルは、ターゲットコンピュータ上でプログラムの各部品が実行される際、操作手段の使用および／または割り当てに関する情報をさらに記憶するのが好ましい。相互参照はテーブルを用いて非常に簡単に管理することができる。テーブルの使用により、ランタイムおよび情報にすばやくアクセスすることができる。このランタイムおよび情報は一意に割り当てられてもよい。その結果、シミュレーションの精度や速度を改善することができる。テーブルに追加された情報を用いれば、シミュレーションの精度のさらなる改善が可能である。
【００３８】
また、本発明に係る方法の他の実施形態によれば、操作手段の使用および／または割り当てに関する情報も、実行される対応関数に転送することができる。これは特に、相互参照それぞれに一意に割り当てられるランタイムが、実行される対応関数に転送されるように関数コールが構成されている場合である。
【００３９】
本発明に係る方法の一実施形態によれば、シミュレーションプログラムを生成する少なくとも１つの、好ましくは全てのステップの実行は、追加のプログラムを用いて制御される。これにより方法の実行工程をさらに速めることが可能となる。
【００４０】
本発明に係る方法では、シミュレーションプログラムにおいて、少なくとも１つのターゲットコンピュータの環境が考慮される。シミュレーションプログラムにおいて、少なくとも１つのターゲットコンピュータの環境が考慮されることもできる。シミュレーション中、操作手段、環境などの影響や相互作用を考慮すれば、ターゲットコンピュータの機能的・時間的な動作をさらにより正確にシミュレートすることができる。
【００４１】
本発明の他の実施形態においては、テーブルは、時間情報に加えて、プログラム部品毎の操作手段の割り当てに関するデータを含んでいてもよい。これにより、操作手段の割り当ての時間的なプロファイルを決定することができる。さらに、別の方法で割り当てられた操作手段にすぐにアクセスできなければ、ランタイムを修正することができる。
【００４２】
本発明に係る方法の他の実施形態においては、分散プログラムの形式で複数のホストコンピュータ上で実行可能なシミュレーションプログラムが提供される。複数のホストコンピュータはホストシステムであってもよい。分散シミュレーションモデルは、ホストコンピュータ上において直接実行されてもよい。複数のホストコンピュータ間で分散した協調シミュレーションプログラムを使用して、複数のホストコンピュータ間で分散したシミュレーションプログラムを実行することもできる。
【００４３】
本発明によれば、本発明に係る方法を実行するためのコンピュータプログラムが提供されてもよい。つまり、対応するコンピュータプログラムを用いて、シミュレーションプログラムの生成に必要な本発明に係る方法ステップを自動的に実行させることができる。
【００４４】
また、本発明によれば、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能およびランタイムをシミュレートする方法も提供され、前記方法は、
ａ）本発明によるシミュレーションプログラムを生成するステップと、
ｂ）少なくとも１つのホストコンピュータ上でシミュレーションプログラムを実行するステップとを備える。
【００４５】
このシミュレーション方法により、非常に高速かつ正確にプログラムをシミュレートすることが可能となる。本発明によって生成されたシミュレーションプログラムのさらなる利点について述べる。
【発明を実施するための最良の形態】
【００４６】
以下に、図２を参照して、本発明の実施例を詳細に説明する。図２は、本発明に係る方法のフローチャートを示す。
【００４７】
シミュレーションプログラムを生成するために、以下のステップが実行される。
【００４８】
ステップ２．２における構文および意味解析に続いて、ソースコード（ステップ２．１参照）は、ソースコードの中間表現（ステップ２．３参照）に変換される。図１に示される従来技術の方法と違って、最適化はソースコード２．３の中間表現に対してのみ行われる。従来技術の方法におけるステップ１．１３のような、修正済ソースコードの中間表現の最適化は行われない。ステップ２．４において、ターゲットコンピュータ向けの機械コードを生成するコンパイラと同じもしくはそれに相当する方法で、変更のないソースコード（ステップ２．１）の最適化が行われる。
【００４９】
修正済ソースコードは不要である。ランタイムに対する相互参照が生成されるのは、オブジェクトコード（ステップ２．９参照）が、最適化されたソースコードの中間表現からホストコード生成機２．７を用いて生成される時のみである。これらの相互参照はステップ２．１１で実行可能なタイムドシミュレーションプログラム２．１２を生成する際、リンカにより決定される。これにより、歪んだシミュレーションの実行を防ぐことができる。
【００５０】
シミュレーション中、実行可能なタイムドシミュレーションプログラムと時間情報との相互参照を生成するには、シミュレーションの間どのプログラム部品が現在実行中なのかを認識する必要がある。このため、ランタイムはテーブルに記憶されてもよい。相互参照は、テーブル中の位置を示す固有の識別番号を受け取った各プログラム部品により生成されてもよい。シミュレーションプログラムは、シミュレーション中、例えば関数コールを使用して、現在実行中のプログラム部品の識別子または識別文字をシミュレータに転送してもよい。
【００５１】
例えば、シミュレーションプログラム２．１２とテーブルに記憶された時間情報との相互参照を生成するために、ステップ２．７にてホストコード生成機を用いてオブジェクトコード（ステップ２．９参照）を生成する際、関数コールを各プログラム部品に挿入するのが好ましい。相互参照は固有の識別番号を受け取った各プログラム部品により生成される。関数コールはこのプログラム部品の番号をパラメータとして転送してもよい。機械可読の形式で記憶されるプログラム部品のランタイム２．８を識別するには、同一の番号が使用される。ランタイム２．８はステップ２．６の「解析」で入力されてもよいし、追加のプログラムを用いて自動的に決定されてもよい。
【００５２】
テーブルにランタイム２．８を記憶することにより、プログラム部品の番号を用いて、そのプログラム部品のランタイムが記憶されたテーブルエントリを明確に推定することができる。これは、例えば、テーブルの位置を示すプログラム部品の番号により実現されてもよい。
【００５３】
テーブルは、時間情報に加えて、例えば、ランタイム２．８、プログラム部品毎の操作手段の割り当てに関するデータおよび情報を含んでいてもよい。これにより、操作手段の割り当ての時間的なプロファイルを決定でき、また、別の方法で割り当てられた操作手段にすぐにアクセスできなければ、ランタイムを修正することができる。
【００５４】
本発明に係る方法により、ソースコードで現用されるプログラムをシミュレーションプログラムに変換することができる。ターゲットコンピュータ上でプログラムを実行することにより、機能的および時間的にターゲットコンピュータ上のプログラムと同じ動作をするように、ホストコンピュータ上でシミュレートすることができる。これにより、シミュレーションモデルを使って、プログラムの機能的および時間的な動作を、非常に正確にかつ高速にシミュレートすることができる。従って、本発明に係る方法を用いて生成されたシミュレーションプログラムは、リアルタイムシステムをシミュレートするのに用いられる。
【図面の簡単な説明】
【００５５】
【図１】従来技術による実行可能なタイムドシミュレーションプログラム
【図２】本発明に係る方法のフローチャート
【図１】
2009515243.tif 000003
【図２】
2009515243.tif 000004
【手続補正書】
【提出日】平成20年7月7日(2008.7.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ターゲットコンピュータ上で実行されるために提供されるプログラムの機能および実行時間をシミュレートするために、コンピュータ上で実行可能なシミュレーションプログラムを生成する方法であって、
ａ）前記プログラムのソースコードを提供するステップと、
ｂ）前記プログラムの最適化されたソースコードの中間表現を生成するステップと、
ｃ）前記プログラムの最適化されたソースコードの中間表現に基づいて、実行時間を決定するステップと、
ｄ）前記最適化されたソースコードの中間表現に基づいて、ホストコンピュータ上で実行可能なオブジェクトコードを生成するステップと、
ｅ）ホストコンピュータ上で実行可能なシミュレーションプログラムが生成されるように、前記実行時間と、前記オブジェクトコードと、規定のシミュレーションライブラリとをリンカを用いて結合するステップとを備える、方法。
【請求項２】
前記シミュレーションプログラムは、規定の協調シミュレーションプログラムを用いて、前記ホストコンピュータ上で実行される、請求項１に記載の方法。
【請求項３】
前記プログラムは、その実行中に複数のターゲットコンピュータ上で実行されるプログラム部品を備える、請求項１および２のいずれか一項に記載の方法。
【請求項４】
複数のターゲットコンピュータ上で実行されるために提供される前記プログラム部品の機能および実行時間をシミュレートするために、前記シミュレーションプログラムが生成される、請求項１乃至３のいずれか一項に記載の方法。
【請求項５】
前記最適化されたソースコードの中間表現は、すでに生成されたソースコードの中間表現から規定の最適化プログラムを用いて生成される、請求項１乃至４のいずれか一項に記載の方法。
【請求項６】
中間表現を生成するために、前記ソースコードは、構文および意味解析が施され、前記ソースコードに含まれる関数要素がホストコンピュータの対応する関数要素に変換されるように変更される、請求項５に記載の方法。
【請求項７】
実行時間を一意に識別するために、ステップｃ）で生成された実行時間のうち、一つの時間、複数の時間、あるいは全ての時間に、識別文字をそれぞれ割り当てる、請求項１乃至６のいずれか一項に記載の方法。
【請求項８】
ステップｄ）あるいはｅ）にて、前記識別文字に対応する相互参照を前記オブジェクトコードに挿入する、請求項７に記載の方法。
【請求項９】
ステップｅ）にて、前記相互参照に対応する関数コールを前記シミュレーションプログラムに挿入する、請求項８に記載の方法。
【請求項１０】
特に数字や番号で示され、前記相互参照それぞれに一意に割り当てられる機械可読な文字が、実行される対応関数に転送されるように、前記関数コールを構成する、請求項９に記載の方法。
【請求項１１】
前記相互参照それぞれに一意に割り当てられる実行時間が、実行される対応関数に転送されるように、前記関数コールを構成する、請求項９に記載の方法。
【請求項１２】
実行時間は機械可読な形式でテーブルに記憶される、請求項１乃至１１のいずれか一項に記載の方法。
【請求項１３】
実行時間は前記プログラムの部品毎に決定され、前記テーブルは、前記ターゲットコンピュータ上で前記プログラムの各部品が実行される際、操作手段の使用および／または割り当てに関する情報をさらに記憶する、請求項１２に記載の方法。
【請求項１４】
操作手段の使用および／または割り当てに関する情報は、実行される対応関数に転送される、請求項１３に記載の方法。
【請求項１５】
前記シミュレーションプログラムを生成する少なくとも１つ、好ましくは全てのステップの実行は、追加のプログラムを用いて制御される、請求項１乃至１４のいずれか一項に記載の方法。
【請求項１６】
ターゲットコンピュータに実装される少なくとも１つのオペレーティングシステムの動作が、前記シミュレーションプログラムで考慮される、請求項１乃至１５のいずれか一項に記載の方法。
【請求項１７】
少なくとも１つのターゲットコンピュータの環境が前記シミュレーションプログラムで考慮される、請求項１乃至１６のいずれか一項に記載の方法。
【請求項１８】
前記シミュレーションプログラムは、分散プログラムの形式で、複数のホストコンピュータ上で実行可能である、請求項１乃至１７のいずれか一項に記載の方法。
【請求項１９】
複数のホストコンピュータ間で分散した協調シミュレーションプログラムは、複数のホストコンピュータ間で分散した前記シミュレーションプログラムを実行するのに使用される、請求項１８に記載の方法。
【請求項２０】
請求項１乃至１９のいずれか一項に記載の方法を実行するコンピュータプログラム。
【請求項２１】
ターゲットコンピュータ上で実行されるために提供されるプログラムの機能および実行時間をシミュレートする方法であって、
ａ）請求項１乃至１９のいずれか一項に記載のシミュレーションプログラムを生成するステップと、
ｂ）少なくとも１つのホストコンピュータ上でシミュレーションプログラムを実行するステップとを有する、方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【書類名】明細書
【０００１】
本発明は、ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法、及びターゲットコンピュータ上で実行されるために提供されるプログラムの機能および実行時間をシミュレートする方法に関する。
【背景技術】
【０００２】
従来技術では、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能をシミュレートするシミュレーションプログラムが知られている。このようなシミュレーションプログラムにおいては、例えばプログラムの実行時間などの時間的な動作をシミュレートすることはできない。特に、リアルタイムシステムの時間的な動作をシミュレートすることは不可能である。
【０００３】
図１は、従来技術による実行可能なタイムドシミュレーションプログラムを示す。このプログラムでは、ホストコンピュータにおけるシミュレーション中に、ターゲットコンピュータ上で実行されるために提供されるプログラムの実行時間が考慮される。このためには、プログラムのソースコード１．１から、ステップ１．２、１．４、１．６および１．８を実行することで得られる実行時間（ステップ１．９参照）まで、複数のステップを必要とする。これは、例えばコンピュータプログラムによって自動的に実行されてもよい。ステップ１．２から１．９を省くこともできるし、ステップ１．９で実行時間を手動で入力することもできる。
【０００４】
ステップ１．９の後、ステップ１．１０の「結合」でソースコード１．１が修正されることにより、ステップ１．１１で「修正済ソースコード」が生成される。修正済ソースコードは相互参照を含むソースコードのバージョンであり、これによりシミュレーション中に実行時間を考慮できるようになる。
【０００５】
修正済ソースコード１．１１を生成するステップ１．１０が手動で実行される例としては、英国、ヨークのＲａｐｉｔａ社が開発したシミュレーションプログラム「ＲａｐｉＴｉｍｅ」、あるいはシミレーション・モデリング言語「ＳｙｓｔｅｍＣ」が挙げられる。この場合、ソースコードに対する各命令、あるいは、各命令グループにおいては、これらの命令が時間的な動作や操作手段の割り当てに及ぼす影響を考慮した詳細の仕様が規定されねばならない。上述の例では、その名前および意味が現用のシミュレーションプログラムで定義される関数コールの形式で、追加のプログラムコードを用いて実行される。
【０００６】
ステップ１．１０が自動的に実行される例としては、米国、サニーベールのＶａｓｔ  Ｓｙｓｔｅｍ  Ｔｅｃｈｎｏｌｏｇｙ  Ｃｏｏｐｅｒａｔｉｏｎ社が開発したシミュレーションプログラムである「Ｍｅｔｒｉｘ」および「Ｍｅｔｅｏｒ」が挙げられる。このプログラムは米国特許出願Ｎｏ．６，２３０，１１４  Ｂ１にも記載されている。この場合、実行時間は各ステップ１．２、１．４、１．６および１．８にて同様に決定される。ソースコードに対して構文および意味解析が施された後、ステップ１．３にて、ソースコードの中間表現が生成される。ステップ１．４にて、上述の中間表現を最適化したソースコードの中間表現１．５が、オプティマイザ、あるいは、規定の最適化プログラムにより生成される。そして、ステップ１．６のターゲットコード生成機によって、これはターゲットコード（ステップ１．７参照）に変換される。従来技術によれば、これはターゲットオブジェクトコード、あるいは、ターゲットアセンブラコードである。そして、基本ブロックの実行時間（ステップ１．９参照）がステップ１．８の「解析」で決定される。ステップ１．１０にて、ステップ１．８で決定された基本ブロックの実行時間に関する相互参照を挿入することにより、ステップ１．１１にて、修正済ソースコードが元のソースコードから生成される。
【０００７】
さらに、ステップ１．１２、１．１４および１．１６にて、修正済ソースコードは、ホストコンピュータ上で実行可能な一連の機械コマンド、いわゆるホストオブジェクトコード（ステップ１．１７参照）に変換される。ステップ１．１２、１．１４および１．１６はコンパイラで実行される。ステップ１．１２にて、コンパイラは修正済ソースコードに構文および意味分析を施し、修正済ソースコードの中間表現を生成する（ステップ１．１３参照）。次のステップにて、オプティマイザ（ステップ１．１４参照）を用いて、最適化されたソースコードの中間表現（ステップ１．１５参照）を生成する。
【０００８】
オプティマイザにより、最適化された修正済ソースコードの中間表現が生成されたら、ステップ１．１６にて、ホストオブジェクトコード（ステップ１．１７参照）がホストコード生成機を用いて生成される。ステップ１．１９ではリンカを使用して、シミュレータのオブジェクトコードを含むシミュレーションライブラリ（ステップ１．１８参照）を用いた実行可能なタイムドシミュレーションモデル（ステップ１．２０参照）にホストオブジェクトコードを転送する。
【０００９】
従来技術において、オプティマイザが行う修正済ソースコードの最適化は、未修正のソースコードの最適化とは異なる結果となる。その結果、シミュレーション中、ターゲットコンピュータとは異なる順番で、関数、関数部品、基本ブロックおよび個々の命令を実行することができる。シミュレーション中、基本ブロックを解析するための上記ブロック内の一連のコマンド、およびコマンドの数は、リアルシステムと異なっていてもよい。また、ターゲットコンピュータ上で全く実行されていない関数、関数部品、基本ブロックおよび個々の命令を実行することも可能である。したがって、シミュレーションはターゲットコンピュータ上で実行されるプログラムとは大幅に異なってしまうこともある。
【００１０】
これとは別に、マイクロプロセッサにおけるレジスタの使用および割り当てもあまり効率的とはいえない。ターゲットコンピュータ上におけるプログラム実行時よりも、ホストコンピュータ上におけるシミュレーション時のほうが、より多くのメモリアクセスを必要とするからである。
【００１１】
ホストコンピュータ向けにコンパイラを用いて最適化を行った結果と、ターゲットコンピュータ向けにコンパイラを用いて最適化を行った結果とが異なるため、ホストコンピュータ上のシミュレーションは、ターゲットコンピュータ上で実際に実行されるプログラムとは異なるものとなる。シミュレーションの目的がターゲットコンピュータ上のプログラムの時間的な動作、あるいはターゲットコンピュータの操作手段の割り当てを決定し、かつ解析することであれば、最適化の結果が異なることからシミュレーションの結果に歪みが生じ、そのシミュレーション結果を使用できない恐れもある。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従来技術による上述の方法では、ソースコードは大幅に修正されている。ソースコードをホストコンピュータの機械語に変換する代わりに、ソースコードをターゲットコンピュータの機械語に変換し、解釈・シミュレートを施してから実行していれば、従来技術のようにソースコードを大幅に修正する必要はなかったかもしれない。各コマンドの解釈にシミュレーションプログラムを使用する場合、例えば正確な実行時間および機能的な実行といった、ユーザに関連する事項が決定され表示される。この原則に従って動作するシミュレーションプログラムは、命令セットシミュレータとも呼ばれる。これらのプログラムはマイクロプロセッサのタイプ毎に特化しており、ソースコードのレベルではなく機械コマンドのレベルでプログラムをシミュレートするため、使用範囲が限られてしまう。ホストコンピュータ上では、シミュレートされたターゲットコンピュータのコマンド毎に多くのステップを必要とする。その結果、この方法では演算にとてつもない時間を要するため、動作が遅くなる。特に、複雑なリアルタイムシステムやマイクロプロセッサシステムをシミュレートするのには適していない。
【００１３】
本発明の目的は、従来技術による問題点を回避することである。特に、本発明では歪んだシミュレーションの実行を防ぐ方法が特定されている。本発明の他の目的は、シミュレーション時間を短縮することである。
【課題を解決するための手段】
【００１４】
この目的は、クレーム１、２０および２１の特徴により達成される。適切な実施形態はクレーム２から１９より得られる。
【００１５】
本発明では、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能および実行時間をシミュレートするために、コンピュータ上で実行可能なシミュレーションプログラムを生成する方法が提供され、上記方法は、
ａ）前記プログラムのソースコードを提供するステップと、
ｂ）前記プログラムの最適化されたソースコードの中間表現を生成するステップと、
ｃ）前記プログラムの最適化されたソースコードの中間表現に基づいて、実行時間を決定するステップと、
ｄ）前記最適化されたソースコードの中間表現に基づいて、ホストコンピュータ上で実行可能なオブジェクトコードを生成するステップと、
ｅ）ホストコンピュータ上で実行可能なシミュレーションプログラムが生成されるように、前記実行時間と、前記オブジェクトコードと、規定のシミュレーションライブラリとをリンカを用いて結合するステップとを備える。
【００１６】
本発明による方法では、プログラムの最適化されたソースコードの中間表現はターゲットコンピュータ向けに生成される。このため、ターゲットコンピュータ向けの機械コード（ターゲットコード）を生成するコンパイラと同じもしくはそれに相当する方法でソースコードの最適化が行われる。
【００１７】
従来技術による修正済ソースコードは不要である。実行可能なタイムドシミュレーションプログラムを生成するための実行時間は、最適化されたソースコードの中間表現が生成されてからしか考慮されない。上記実行時間が考慮されてからは、さらなる最適化は行われないため、歪んだシミュレーションの実行を防ぐことができる。また、シミュレーション時間も大幅に短縮することができる。従って、本発明による方法は、リアルタイムシステムあるいはマルチプロセッサシステムのためのシミュレーションプログラムを生成するのに特に適している。
【００１８】
一般に、リアルタイムシステムとは、予め、あるいは、ある特定の時点で明確に定義された時間間隔内に結果を提供することが保証されたシステムを意味する。このようなリアルタイムシステムは広く普及している。リアルタイムシステムは、例えば、携帯電話、アンチロックシステム、エンジンや洗濯機のコントローラに使われている。
【００１９】
プログラム、特にリアルタイムシステムのプログラム、を調べるため、シミュレーションプログラムは、シミュレーション中、ターゲットコンピュータ上で実行されているときのプログラムの時間的な動作に関する情報を必要とする。この情報は、プログラム部品の実行時間を規定するために使われる。このプログラム部品は関数、関数部品、基本ブロック、命令列または個々の命令であってもよい。
【００２０】
プログラミングにおける関数やメソッドとは、再利用可能な方法で、特定のタスクを実行させることができるソースコードの連結した部分を意味する。関数は関数コールを用いてプログラムの実行に組み込まれる。命令は、プログラミング言語においてコマンド、あるいは、一連のコマンドである。基本ブロックは命令列を示し、その先頭の命令は、その命令列のエントリポイントのみを表している。基本ブロックの他の命令が正確に実行されるのは、エントリポイントが実行された時のみである。イグジットポイントはその命令列の終端にしかない。イグジットポイントは、条件付き、あるいは、条件のないプログラム分岐であってもよい。
【００２１】
リンケージローダとも呼ばれるリンカとは、実行可能なプログラムを形成するために、個々のプログラムモジュールをコンパイルしてリンクするプログラムを意味する。
【００２２】
シミュレーションにおいては、シミュレーションモデル上で実験を行うことができる。リアルシステム上で実行されるために提供されるプログラムの機能および実行時間に関する情報はそこから得られる。
【００２３】
リアルシステムは１つ以上のプロセッサを有する１つ以上のターゲットコンピュータであってもよい。複数のターゲットコンピュータを使用して１つのタスクが実行されている場合、そのシステムはいわゆるマルチプロセッサシステム、あるいは、分散システムである。
【００２４】
また、本出願を簡素化する目的で、「ターゲットコンピュータ」とも表記されるリアルシステム（ターゲットシステムとも称する）は、ハードウェア、操作手段、周辺装置、環境とそれらの相互作用などを含んでいてもよい。環境とは、プログラムの実行中、そのプログラムのフローに影響を与えうる条件、影響、相互作用を示す。
【００２５】
シミュレーションは、ターゲットコンピュータとは異なるホストコンピュータ上で実行されるのが好ましい。言うまでもなく、ホストコンピュータとターゲットコンピュータは同一であってもよい。シミュレーションはホストシステム上で実行されてもよい。ホストシステムは複数のホストコンピュータを含んでいてもよい。また、ホストシステムは、ハードウェア、操作手段、周辺装置、環境とそれらの相互作用などを含んでいてもよい。さらに、明示されていなければ、「ホストコンピュータ」は、本出願における「ホストシステム」を意味する。シミュレーションプログラムは、分散プログラムの形式で、ホストシステム上で実行されてもよい。
【００２６】
シミュレーションプログラムとは、その主題、内容および表現がシミュレーション用に構成されているコンピュータプログラムを意味する。プログラム（コンピュータプログラムとも称する）とは、特定の目的を達成するために使用されるコンピュータ上で定義されたワークフローを意味する。ワークフローはコンピュータで処理される一連の個々のコマンドを備える。プログラムは一般に、例えばＣ、Ｃ＋＋、Ｊａｖａ（登録商標）、Ａｄａなど、人が解読可能なプログラミング言語でテキストとして書かれる。また、それは、ソースコード、ソーステキスト、あるいはプログラムコードとも呼ばれる。コンピュータによって実行されるまでに、プログラムは機械語に、さらには機械語から一連のビットに変換されていなければならない。これはコンパイラを用いて、あるいは、実行時に、必要であればインタープリタを用いて実行されてもよいし、また例えばＪａｖａ（登録商標）プログラミング言語の場合であればバイトコードを用いて実行されてもよい。
【００２７】
トランスレータとも呼ばれるコンパイラは、ソースプログラミング言語で書かれたプログラムのソースコードを、ターゲットプログラミング言語で意味的に同等なプログラムに変換するコンピュータプログラムである。通常、プログラマがプログラミング言語で書いたソースコードがアセンブリ言語、バイトコード、あるいは機械語に変換される。機械語に変換されたソースコードはオブジェクトコードと呼ばれる。コンパイラを使用して行われる工程をコンパイルと呼ぶ。
【００２８】
プログラムがホストコンピュータにも実装されているプログラミング言語で書かれていれば、ホストコンピュータ上でターゲットコンピュータのプログラムをシミュレーションすることができる。これは、例えばＣ、Ｃ＋＋、Ｊａｖａ（登録商標）などの高級言語の場合である。ターゲットコンピュータの環境およびオペレーティングシステムはシミュレーション環境によりホストコンピュータ上で再現される。
【００２９】
オペレーティングシステムとは、例えばメモリ、入力・出力デバイスなど、コンピュータの操作手段を使うことを可能にし、プログラムの実行を制御するプログラムを意味する。
【００３０】
ターゲットコンピュータ用のプログラムをホストコンピュータ上でシミュレートするために、ソースコードは実行可能なシミュレーションプログラムに変換される。実行可能なシミュレーションプログラムとは、プログラム単体で直接、もしくは、協調シミュレーションを用いて、ホストコンピュータ上で実行可能なシミュレーションプログラムを意味する。協調シミュレーションプログラムはシミュレーション環境を提供する。シミュレーション環境とは、シミュレートされるリアルシステムのリアル環境の再現であり、これにより、シミュレートされるプログラムの実行中、同一の条件、影響および相互作用がそのシミュレートされるプログラムのフローに従って動作する。協調シミュレーションプログラムでは、ユーザとの必要な対話を実行できる。ユーザとの対話、あるいは、ターゲットコンピュータ環境との相互作用もまた、実行可能なシミレーションプログラムを用いてシミュレートされる。
【００３１】
本発明に係る方法の一実施形態によれば、シミュレーションプログラムは規定の協調シミュレーションプログラムを用いたホストコンピュータ上で実行することができる。もちろん、シミュレーションプログラムは、ホストコンピュータ上において直接実行されてもよい。
【００３２】
プログラムは、その実行中に複数のターゲットコンピュータ上で実行されるプログラム部品を備えてもよい。複数のターゲットコンピュータ上で実行されるために提供されるプログラム部品の機能および実行時間をシミュレートするために、シミュレーションプログラムを生成することもできる。
【００３３】
本発明に係る方法の有利な実施形態によると、最適化されたソースコードの中間表現は、すでに生成されたソースコードの中間表現から、規定の最適化プログラムを用いて生成される。中間表現を生成するために、ソースコードは、構文および意味解析が施され、そのソースコードに含まれる関数要素がホストコンピュータの対応する関数要素に変換されるように変更されるのが好ましい。最適化プログラムを使用してワークフローを再構築し、ワークフローの効率性の向上が計られる。この場合の目的とは、最適な実行速度およびプログラムサイズを実現することである。一般に、例えば、未使用の基本ブロックを除去する、などプロセッサに依存しない規則を使用して最適化されたり、あるいは、レジスタ数や特殊な機械コマンドなど、各マイクロプロセッサ独自の特性に適合するように最適化されたりする。
【００３４】
本発明に係る特に有利な実施形態によると、実行時間を一意に識別するために、ステップｃ）で生成された実行時間のうち、一つの時間、複数の時間、あるいは全ての時間に、識別文字をそれぞれ割り当てる。ステップｄ）もしくはｅ）にて、識別文字に対応する相互参照をオブジェクトコードに挿入するのが好ましい。また、ステップｅ）にて、相互参照に対応する関数コールも、シミュレーションプログラムに挿入されるのが好ましい。実行可能なタイムドシミュレーションプログラムとターゲットコンピュータに関する時間情報との相互参照は非常に簡単に生成することができる。超高速のシミュレーションがホストコンピュータ上で実現可能となる。
【００３５】
本発明に係る方法の実施形態においては、相互参照それぞれに一意に割り当てられる機械可読な文字が、実行される関数に転送されるように関数コールが構成される。機械可読な文字は数字、番号、ビット列などであってもよい。他の有利な実施形態によれば、相互参照それぞれに一意に割り当てられる実行時間が、実行される対応関数に転送されるように関数コールが構成されてもよい。この場合、ステップｅ）でリンカを使用して、すでに実行時間を含むオブジェクトコードとシミュレーションライブラリとを結合し、ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する。
【００３６】
また、本発明の一実施形態においては、ターゲットコンピュータ上のソースコードの実行時間に加えて、操作手段の割り当て、および／または、ターゲットコンピュータに含まれる操作手段の使用も、解析中に決定される。したがって、現時点での操作手段の使用、および／または、操作手段の使用限度も、シミュレーションプログラムの実行時に決定される。
【００３７】
本発明に係る方法の特に好ましい他の実施形態においては、実行時間は機械可読な形式でテーブルに記憶される。実行時間はプログラムの部品毎に決定されてもよい。またテーブルは、ターゲットコンピュータ上でプログラムの各部品が実行される際、操作手段の使用および／または割り当てに関する情報をさらに記憶するのが好ましい。相互参照はテーブルを用いて非常に簡単に管理することができる。テーブルの使用により、実行時間および情報にすばやくアクセスすることができる。この実行時間および情報は一意に割り当てられてもよい。その結果、シミュレーションの精度や速度を改善することができる。テーブルに追加された情報を用いれば、シミュレーションの精度のさらなる改善が可能である。
【００３８】
また、本発明に係る方法の他の実施形態によれば、操作手段の使用および／または割り当てに関する情報も、実行される対応関数に転送することができる。これは特に、相互参照それぞれに一意に割り当てられる実行時間が、実行される対応関数に転送されるように関数コールが構成されている場合である。
【００３９】
本発明に係る方法の一実施形態によれば、シミュレーションプログラムを生成する少なくとも１つの、好ましくは全てのステップの実行は、追加のプログラムを用いて制御される。これにより方法の実行工程をさらに速めることが可能となる。
【００４０】
本発明に係る方法では、シミュレーションプログラムにおいて、少なくとも１つのターゲットコンピュータの環境が考慮される。シミュレーションプログラムにおいて、少なくとも１つのターゲットコンピュータの環境が考慮されることもできる。シミュレーション中、操作手段、環境などの影響や相互作用を考慮すれば、ターゲットコンピュータの機能的・時間的な動作をさらにより正確にシミュレートすることができる。
【００４１】
本発明の他の実施形態においては、テーブルは、時間情報に加えて、プログラム部品毎の操作手段の割り当てに関するデータを含んでいてもよい。これにより、操作手段の割り当ての時間的なプロファイルを決定することができる。さらに、別の方法で割り当てられた操作手段にすぐにアクセスできなければ、実行時間を修正することができる。
【００４２】
本発明に係る方法の他の実施形態においては、分散プログラムの形式で複数のホストコンピュータ上で実行可能なシミュレーションプログラムが提供される。複数のホストコンピュータはホストシステムであってもよい。分散シミュレーションモデルは、ホストコンピュータ上において直接実行されてもよい。複数のホストコンピュータ間で分散した協調シミュレーションプログラムを使用して、複数のホストコンピュータ間で分散したシミュレーションプログラムを実行することもできる。
【００４３】
本発明によれば、本発明に係る方法を実行するためのコンピュータプログラムが提供されてもよい。つまり、対応するコンピュータプログラムを用いて、シミュレーションプログラムの生成に必要な本発明に係る方法ステップを自動的に実行させることができる。
【００４４】
また、本発明によれば、ターゲットコンピュータ上で実行されるために提供されるプログラムの機能および実行時間をシミュレートする方法も提供され、前記方法は、
ａ）本発明によるシミュレーションプログラムを生成するステップと、
ｂ）少なくとも１つのホストコンピュータ上でシミュレーションプログラムを実行するステップとを備える。
【００４５】
このシミュレーション方法により、非常に高速かつ正確にプログラムをシミュレートすることが可能となる。本発明によって生成されたシミュレーションプログラムのさらなる利点について述べる。
【発明を実施するための最良の形態】
【００４６】
以下に、図２を参照して、本発明の実施例を詳細に説明する。図２は、本発明に係る方法のフローチャートを示す。
【００４７】
シミュレーションプログラムを生成するために、以下のステップが実行される。
【００４８】
ステップ２．２における構文および意味解析に続いて、ソースコード（ステップ２．１参照）は、ソースコードの中間表現（ステップ２．３参照）に変換される。図１に示される従来技術の方法と違って、最適化はソースコード２．３の中間表現に対してのみ行われる。従来技術の方法におけるステップ１．１３のような、修正済ソースコードの中間表現の最適化は行われない。ステップ２．４において、ターゲットコンピュータ向けの機械コードを生成するコンパイラと同じもしくはそれに相当する方法で、変更のないソースコード（ステップ２．１）の最適化が行われる。
【００４９】
修正済ソースコードは不要である。実行時間に対する相互参照が生成されるのは、オブジェクトコード（ステップ２．９参照）が、最適化されたソースコードの中間表現からホストコード生成機２．７を用いて生成される時のみである。これらの相互参照はステップ２．１１で実行可能なタイムドシミュレーションプログラム２．１２を生成する際、リンカにより決定される。これにより、歪んだシミュレーションの実行を防ぐことができる。
【００５０】
シミュレーション中、実行可能なタイムドシミュレーションプログラムと時間情報との相互参照を生成するには、シミュレーションの間どのプログラム部品が現在実行中なのかを認識する必要がある。このため、実行時間はテーブルに記憶されてもよい。相互参照は、テーブル中の位置を示す固有の識別番号を受け取った各プログラム部品により生成されてもよい。シミュレーションプログラムは、シミュレーション中、例えば関数コールを使用して、現在実行中のプログラム部品の識別子または識別文字をシミュレータに転送してもよい。
【００５１】
例えば、シミュレーションプログラム２．１２とテーブルに記憶された時間情報との相互参照を生成するために、ステップ２．７にてホストコード生成機を用いてオブジェクトコード（ステップ２．９参照）を生成する際、関数コールを各プログラム部品に挿入するのが好ましい。相互参照は固有の識別番号を受け取った各プログラム部品により生成される。関数コールはこのプログラム部品の番号をパラメータとして転送してもよい。機械可読の形式で記憶されるプログラム部品の実行時間２．８を識別するには、同一の番号が使用される。実行時間２．８はステップ２．６の「解析」で入力されてもよいし、追加のプログラムを用いて自動的に決定されてもよい。
【００５２】
テーブルに実行時間２．８を記憶することにより、プログラム部品の番号を用いて、そのプログラム部品の実行時間が記憶されたテーブルエントリを明確に推定することができる。これは、例えば、テーブルの位置を示すプログラム部品の番号により実現されてもよい。
【００５３】
テーブルは、時間情報に加えて、例えば、実行時間２．８、プログラム部品毎の操作手段の割り当てに関するデータおよび情報を含んでいてもよい。これにより、操作手段の割り当ての時間的なプロファイルを決定でき、また、別の方法で割り当てられた操作手段にすぐにアクセスできなければ、実行時間を修正することができる。
【００５４】
本発明に係る方法により、ソースコードで現用されるプログラムをシミュレーションプログラムに変換することができる。ターゲットコンピュータ上でプログラムを実行することにより、機能的および時間的にターゲットコンピュータ上のプログラムと同じ動作をするように、ホストコンピュータ上でシミュレートすることができる。これにより、シミュレーションモデルを使って、プログラムの機能的および時間的な動作を、非常に正確にかつ高速にシミュレートすることができる。従って、本発明に係る方法を用いて生成されたシミュレーションプログラムは、リアルタイムシステムをシミュレートするのに用いられる。
【図面の簡単な説明】
【００５５】
【図１】従来技術による実行可能なタイムドシミュレーションプログラム
【図２】本発明に係る方法のフローチャート
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009515243.tif 000005
【図２】
2009515243.tif 000006
【国際調査報告】
2009515243.tif 000007
2009515243.tif 000008
2009515243.tif 000009