(57)【要約】【課題】マルチプロセッサを効率よく活用して性能が向上するエミュレーションシステムを提供すること。【解決手段】本発明のエミュレーションシステムは、コンパイルプロセッサと、エミュレーションプロセッサと、を具備している。コンパイルプロセッサは、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成する。エミュレーションプロセッサは、コンパイルプロセッサによりホストコードが生成されているコンパイルモードにおいて、ホストコードを実行し、コンパイルプロセッサによりホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行する。【選択図】図１
2010140233.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成するコンパイルプロセッサと、
前記コンパイルプロセッサにより前記ホストコードが生成されているコンパイルモードにおいて、前記ホストコードを実行し、前記コンパイルプロセッサにより前記ホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するエミュレーションプロセッサと、
を具備するエミュレーションシステム。
【請求項２】
前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記ホストコードを実行し、次のホストコードが生成されていない場合、ホストコード生成要求を前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移し、
前記インタプリタモードにおいて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行し、
前記コンパイルプロセッサは、
前記ホストコード生成要求に応じて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応した前記次のホストコードを生成し、
前記エミュレーションプロセッサは、
前記インタプリタモードにおいて、前記次のホストコードが生成された場合、前記インタプリタモードから前記コンパイルモードに遷移する、
請求項１に記載のエミュレーションシステム。
【請求項３】
前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記ホストコードの終端まで実行した場合、又は、前記次のホストコードが生成されていない場合、前記ホストコード生成要求を前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移する、
請求項２に記載のエミュレーションシステム。
【請求項４】
命令カウンタ管理テーブルを備えた記憶装置、
を更に具備し、
前記コンパイルプロセッサは、
前記ホストコードを生成したときに、前記ターゲットコードの容量が予め決められた設定容量以上である場合、前記ターゲットコードを指し示すターゲット命令カウンタと、前記ターゲットコードに対する前記ホストコードを指し示すホスト命令カウンタと、をホストコードブロックとして生成して前記命令カウンタ管理テーブルに登録し、
前記エミュレーションプロセッサは、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されているか否かをチェックし、チェックの結果に基づいて、前記インタプリタモードと前記コンパイルモードとの一方のモードから他方のモードに遷移する、
請求項２又は３に記載のエミュレーションシステム。
【請求項５】
前記エミュレーションプロセッサは、
前記インタプリタモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されている場合、前記インタプリタモードから前記コンパイルモードに遷移する、
請求項４に記載のエミュレーションシステム。
【請求項６】
前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されていない場合、前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移する、
請求項４に記載のエミュレーションシステム。
【請求項７】
前記ホストコード生成要求は、現在のターゲット命令カウンタを含み、
前記コンパイルプロセッサは、
現在生成中のホストコードブロック内に、前記ホストコード生成要求に含まれるターゲット命令カウンタと一致するターゲット命令カウンタが存在しない場合、前記ホストコード生成要求に含まれるターゲット命令カウンタを開始点として前記次のターゲットコードを解析し、前記次のホストコードを生成する、
請求項６に記載のエミュレーションシステム。
【請求項８】
（ａ）  第１のプロセッサが、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成するステップと、
（ｂ）  前記第１のプロセッサにより前記ホストコードが生成されているコンパイルモードにおいて、第２のプロセッサが、前記ホストコードを実行するステップと、
（ｃ）  前記第１のプロセッサにより前記ホストコードが生成されていないインタプリタモードにおいて、前記第２のプロセッサが、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するステップと、
を具備するエミュレーション方法。
【請求項９】
前記（ｂ）のステップは、
（ｂ１）  前記ホストコードを実行するステップと、
（ｂ２）  次のホストコードが生成されていない場合、ホストコード生成要求を前記第１のプロセッサに送信するステップと、
（ｂ３）  前記次のホストコードが生成されていない場合、前記コンパイルモードから前記インタプリタモードに遷移するステップと、
を含み、
前記（ｃ）のステップは、
（ｃ１）  前記次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するステップと、
（ｃ２）  前記次のホストコードが生成された場合、前記インタプリタモードから前記コンパイルモードに遷移するステップと、
を含み、
前記（ａ）のステップは、
（ａ１）  前記ホストコード生成要求に応じて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応した前記次のホストコードを生成するステップ、
を含む請求項８に記載のエミュレーション方法。
【請求項１０】
前記（ｂ）のステップは、
（ｂ４）  前記ホストコードの終端まで実行した場合、前記ホストコード生成要求を前記第１のプロセッサに送信するステップ、
を更に含む請求項９に記載のエミュレーション方法。
【請求項１１】
前記（ａ）のステップは、
（ａ２）  前記ホストコードを生成したときに、前記ターゲットコードの容量が予め決められた設定容量以上である場合、前記ターゲットコードを指し示すターゲット命令カウンタと、前記ターゲットコードに対する前記ホストコードを指し示すホスト命令カウンタと、をホストコードブロックとして生成して命令カウンタ管理テーブルに登録するステップ、
を更に含み、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されているか否かにより、前記インタプリタモードと前記コンパイルモードとの一方のモードから他方のモードに遷移される、
請求項９又は１０に記載のエミュレーション方法。
【請求項１２】
前記（ｃ２）のステップは、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されている場合、前記インタプリタモードから前記コンパイルモードに遷移するステップ、
を含む請求項１１に記載のエミュレーション方法。
【請求項１３】
前記（ｂ３）のステップは、
前記コンパイルモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されていない場合、前記第１のプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移するステップ、
を含む請求項１１に記載のエミュレーション方法。
【請求項１４】
前記ホストコード生成要求は、現在のターゲット命令カウンタを含み、
前記（ａ１）のステップは、
現在生成中のホストコードブロック内に、前記ホストコード生成要求に含まれるターゲット命令カウンタと一致するターゲット命令カウンタが存在しない場合、前記ホストコード生成要求に含まれるターゲット命令カウンタを開始点として前記次のターゲットコードを解析し、前記次のホストコードを生成するステップ、
を含む請求項１３に記載のエミュレーション方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数プロセッサが協働してエミュレーションを行うエミュレーションシステム及びエミュレーション方法に関する。
【背景技術】
【０００２】
複数プロセッサが協働してエミュレーションを行う場合、第１のプロセッサがエミュレーション対象のターゲットコードを解析してエミュレーション用のホストコードを生成し、第２のプロセッサが、第１のプロセッサにより生成されたホストコードを実行するシステムが知られている。
【０００３】
しかし、第２のプロセッサは、ホストコードがまだ生成されていない場合、コードの生成を待ち合わせるため、エミュレーションを実行するためのエミュレーション処理が中断してしまう。このため、プロセッサの使用効率が悪くなる。例えば、特許文献１に記載された技術では、実行用プロセッサ（第１のプロセッサ）は、変換用プロセッサ（第２のプロセッサ）により命令コードが変換されるまで待機状態となる。
【０００４】
このように、ホストコードの生成が完了するまでは、第２のプロセッサは待ち合わせを行うのが一般的であり、マルチプロセッサ構成を効率よく活用できていない。
【０００５】
コンパイラやインタプリタに関する文献について紹介する。
【０００６】
特許文献１には、エミュレーション装置が記載されている。エミュレーション装置は、異種プロセッサのエミュレーションを行うものである。このエミュレーション装置は、第１のプロセッサと、第２のプロセッサと、第３のプロセッサと、を有することを特徴としている。第１のプロセッサは、少なくとも、異種プロセッサで使用される命令コードの解析を行う。第２のプロセッサは、第１のプロセッサによる命令コードの解析結果に基づいて、第３のプロセッサで実行可能な命令コードを生成する。第３のプロセッサは、第２のプロセッサにより生成された命令コードを実行する。
【０００７】
特許文献２には、動的コンパイル時期決定方法が記載されている。動的コンパイル時期決定方法は、インタプリタによるバイトコード実行時に、実行する命令が後方への条件分岐命令である場合、当該条件分岐命令がループのバックエッジであるか判断し、ループのバックエッジと判断された場合にはループの回数を予測し且つ予測したループ回数を記憶装置に格納し、予測したループ回数に応じてコンパイルのタイミングを決定する。
【０００８】
特許文献３には、プロセスマイグレーション方法が記載されている。プロセスマイグレーション方法は、ネットワークを介して接続された第１及び第２の計算機の間で行われるものである。このプロセスマイグレーション方法は、送信ステップと、記録開始ステップと、第１の復元ステップと、判断ステップと、移行ステップと、第２の復元ステップとを有している。送信ステップは、第１の計算機で実行中のプロセスを複製して第２の計算機へ送信する。記録開始ステップは、第１の計算機で実行中のプロセスの実行記録の生成を開始する。第１の復元ステップは、第２の計算機において、第１の計算機から送信された複製を受信し、これを用いてプロセスを復元した復元プロセスを生成する。判断ステップは、実行記録に基づいて、プロセスの実行を復元プロセスに移行させるか、あるいは、まだ移行させないかを判断する。移行ステップは、判断ステップにより移行させると判断された場合には、第１の計算機におけるプロセスの実行を終了させ、生成中の実行記録を第２の計算機へ送信するとともに、復元プロセスの上でプロセスの動作を再生し、再生終了後に復元プロセスの実行を開始する。第２の復元ステップは、判断ステップによりまだ移行させないと判断された場合には、第１の計算機は現在の実行記録の生成を終了して新たな実行記録の生成を開始するとともに、現在の実行記録を第２の計算機へ転送し、第２の計算機は復元プロセスの上でプロセスの動作を再生する。第２の復元ステップ終了後、判断ステップを再実行することを特徴としている。
【０００９】
特許文献４には、情報処理装置が記載されている。情報処理装置は、所定の命令を取り込む第１プロセッサと、第１プロセッサからの指示により所定の処理を実行する第２プロセッサと、を備えている。第１プロセッサは、所定の命令に応じて第２プロセッサに所定の処理の実行を指示するように構成されている。第２プロセッサは、判断手段と、第２処理手段と、を有している。判断手段は、第１プロセッサから指示された所定の処理が実行可能であるか否かを判断して、実行不可能である場合に、その旨を第１プロセッサに通知する。第２処理手段は、実行可能である場合に、所定の処理を実行する。第１プロセッサは、第２プロセッサから通知があると所定の処理を実行するように構成され、第１プロセッサと第２プロセッサとにより協働で所定の命令に応じた処理を実行するように構成されている。
【００１０】
特許文献５に記載された方法では、プログラムのバイトコードのシーケンスを動的にプロファリングするものである。この方法は、プログラム内のメソッドで実行されるブランチの数をランタイム時に決定するステップと、プログラムで実行されるブランチの総数をランタイム時に決定するステップと、メソッドで実行されるブランチ数と、プログラムで実行されるブランチの総数とをランタイム時に比較するステップと、メソッドで実行されるブランチの数とプログラム全体で実行されるブランチの総数との比較に基づき、よく実行されるメソッドを決定するステップと、を含んでいる。
【００１１】
【特許文献１】特開平０６−２０２８７７号公報
【特許文献２】特開２０００−２２２２２０号公報
【特許文献３】特開２００４−０７８４６５号公報
【特許文献４】特開２００６−１７８６４６号公報
【特許文献５】特表２００４−５２９４１３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本発明の課題は、マルチプロセッサを効率よく活用して性能が向上するエミュレーションシステム及びエミュレーション方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明のエミュレーションシステムは、コンパイルプロセッサと、エミュレーションプロセッサと、を具備している。コンパイルプロセッサは、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成する。エミュレーションプロセッサは、コンパイルプロセッサによりホストコードが生成されているコンパイルモードにおいて、ホストコードを実行し、コンパイルプロセッサによりホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行する。
【発明の効果】
【００１４】
以上の説明により、本発明のエミュレーションシステムによれば、コンパイルプロセッサがホストコードを生成している間、エミュレーションプロセッサはホストコードの生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。したがって、複数のプロセッサが協働してエミュレーションを行う場合、エミュレーションの動作が高速になる。これにより、マルチプロセッサを効率よく活用して性能が向上する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、本発明の実施形態によるエミュレーションシステムについて詳細に説明する。
【００１６】
［構成］
図１は、本発明の実施形態によるエミュレーションシステムの構成を示している。そのエミュレーションシステムは、コンパイルプロセッサ１と、エミュレーションプロセッサ２と、入出力インタフェース３と、記憶装置である主記憶メモリ４と、を具備している。コンパイルプロセッサ１とエミュレーションプロセッサ２と入出力インタフェース３と主記憶メモリ４は、バス５に接続され、一般的なマルチプロセッサ構成のコンピュータシステムとして使用される。
【００１７】
コンパイルプロセッサ１は、一般的なプロセッサであり、ターゲット命令カウンタ１１と、ホスト命令カウンタ１２と、ＨＷ命令カウンタ１３と、を具備している。コンパイルプロセッサ１は、実行するプログラムのアドレスをＨＷ命令カウンタ１３に格納してプログラムを実行する。
【００１８】
エミュレーションプロセッサ２は、一般的なプロセッサであり、ターゲット命令カウンタ２１と、ホスト命令カウンタ２２と、ＨＷ命令カウンタ２３と、を具備している。エミュレーションプロセッサ２は、実行するプログラムのアドレスをＨＷ命令カウンタ２３に格納してプログラムを実行する。
【００１９】
主記憶メモリ４は、その記憶領域（メモリ空間）として、ターゲットコード空間と、ターゲットデータ空間と、ホストコード空間と、ホストデータ空間と、を備えている。
【００２０】
ターゲットコード空間には、異種プロセッサ上で動作する異種プロセッサ用命令コード４１（以下、ターゲットコード４１と称する）が格納される。ターゲットコード４１内の命令を指すアドレスは、ターゲット命令カウンタ１１及び２１によって管理される。
【００２１】
ターゲットデータ空間には、ターゲットコード４１からアクセスされるデータ４２が格納される。
【００２２】
ホストコード空間には、コンパイルプロセッサ１及びエミュレーションプロセッサ２上で実行可能な命令コードが格納される。ホストコード４６内の命令を指すアドレスは、ホスト命令カウンタ１２及び２２で管理される。その命令コードは、コンパイルプロセッサ用ホストコード生成プログラム４３（以下、ホストコード生成プログラム４３と称する）と、エミュレート関数４４と、エミュレーションプロセッサ用エミュレーションプログラム４５（以下、エミュレーションプログラム４５と称する）と、エミュレーション用エミュレーションプログラム（以下、ホストコード４６と称する）と、を含んでいる。ホストコード生成プログラム４３は、コンパイルプロセッサ１上で動作し、ターゲットコード４１を解析してホストコード４６を生成する処理を行う。エミュレート関数４４は、ターゲット命令毎にエミュレート動作を行う。エミュレーションプログラム４５は、エミュレーションプロセッサ２上で動作し、モードレジスタ２４に応じたエミュレーションを行う。ホストコード４６は、コンパイルプロセッサ１により生成されたエミュレーション用エミュレーションプログラムである。
【００２３】
ホストデータ空間は、コンパイルプロセッサ用データ領域４７と、エミュレーションプロセッサ用データ領域４８と、命令カウンタ管理テーブル４９と、を備えている。コンパイルプロセッサ用データ領域４７は、コンパイルプロセッサ１がプログラムを実行するときに必要なデータを保持する。エミュレーションプロセッサ用データ領域４８は、エミュレーションプロセッサ２がプログラムを実行するときに必要なデータを保持する。命令カウンタ管理テーブル４９は、ホストコード生成済みターゲット命令カウンタとホスト命令カウンタの対応を管理する。
【００２４】
コンパイルプロセッサ１は、ターゲットコード４１を解析してエミュレーションを行うホストコード４６を生成する。
【００２５】
エミュレーションプロセッサ２は、更に、モードレジスタ２４を具備している。エミュレーションプロセッサ２は、コンパイルモードとインタプリタモードのどちらかのモードをモードレジスタ２４に設定する。
【００２６】
コンパイルモードとは、コンパイルプロセッサ１によりホストコード４６が準備（生成）されている状態である。この状態であるときに、エミュレーションプロセッサ２は、モードレジスタ２４にコンパイルモードを設定する。この場合、エミュレーションプロセッサ２は、コンパイルプロセッサ１が生成したホストコード４６を直接実行することでエミュレーションを実行する。
【００２７】
インタプリタモードとは、コンパイルプロセッサ１によりホストコード４６が準備（生成）されていない状態である。この状態であるときに、エミュレーションプロセッサ２は、モードレジスタ２４にインタプリタモードを設定する。この場合、エミュレーションプロセッサ２は、ターゲットコード４１から１命令単位で命令を取り出して、その命令の解析を行い、命令に対応したエミュレーションを行う。
【００２８】
［動作］
図２は、本発明の実施形態によるエミュレーションシステムの動作を示すシーケンス図である。
【００２９】
コンパイルプロセッサ１は、ターゲットコード４１を解析してホストコード４６を生成するホストコード生成処理を実行する。
【００３０】
ホストコード生成処理において、コンパイルプロセッサ１は、ターゲットコード４１から１命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコード４６をホストコード空間に生成する。ここで、ホストコード４６はブロック毎に生成される。このとき、ターゲットコード４１の容量（サイズ）が、予め決められた設定容量（設定サイズ）以上である場合、コンパイルプロセッサ１は、そのターゲットコード４１を指し示すターゲット命令カウンタ１１と、ターゲットコード４１に対してそれまでに生成されたブロックを含むホストコード４６を指し示すホスト命令カウンタ１２と、を１ホストコードブロックとして生成し、命令カウンタ管理テーブル４９に登録する。前回生成したホストコード４６と今回生成したホストコード４６とがターゲットコード４１上で連続している場合、コンパイルプロセッサ１は、前回生成したホストコード４６の終端に分岐命令のコードをストアする。ホストコード４６の終端とは、ホストコード４６内のブロックの最後の命令を表している。分岐命令の分岐先アドレスは今回生成したホストコード４６の先頭アドレスである。最後に、コンパイルプロセッサ１は、ホストコード生成完了通知をエミュレーションプロセッサ２に送信する。
【００３１】
その後、コンパイルプロセッサ１は、上述のホストコード生成処理を繰り返す。
【００３２】
エミュレーションプロセッサ２は、モードレジスタ２４にインタプリタモードを設定している場合、それに従って、インタプリタモードを実行する。
【００３３】
インタプリタモードにおいて、エミュレーションプロセッサ２は、ターゲットコード４１から１命令を読み出して解析し、その命令に対応したエミュレーションを行う。
【００３４】
インタプリタモードにおいて、エミュレーションプロセッサ２は、コンパイルプロセッサ１からのホストコード生成完了通知を受信したものとする。エミュレーションプロセッサ２は、ホストコード生成完了通知に応じて、次に実行するターゲットコード４１を指し示すターゲット命令カウンタ２１と、そのターゲットコード４１に対するホストコード４６を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されているか否かをチェックする。そこで、チェックの結果、そのターゲットコード４１を指し示すターゲット命令カウンタ２１と、そのターゲットコード４１に対するホストコード４６を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されているものとする。即ち、そのターゲットコード４１に対するホストコード４６が生成されているものとする。この場合、エミュレーションプロセッサ２は、モードレジスタ２４にコンパイルモードを設定する。
【００３５】
エミュレーションプロセッサ２は、モードレジスタ２４にコンパイルモードを設定した場合、それに従って、インタプリタモードからコンパイルモードに遷移する。即ち、コンパイルモードを実行する。
【００３６】
コンパイルモードにおいて、エミュレーションプロセッサ２は、ターゲット命令カウンタ２１に対応したホスト命令カウンタ２２を命令カウンタ管理テーブル４９から取得し、ＨＷ命令カウンタ２３に設定してホストコード４６を実行する。
【００３７】
コンパイルモードにおいて、エミュレーションプロセッサ２は、ＨＷ命令カウンタ２３がホストコード４６の終端に到達したものとする。即ち、エミュレーションプロセッサ２がホストコード４６の終端（最後の命令）まで実行したものとする。この場合、エミュレーションプロセッサ２は、現在のターゲット命令カウンタ２１を含むホストコード生成要求を通信データとしてコンパイルプロセッサ１に送信し、モードレジスタ２４にインタプリタモードを設定する。
【００３８】
又は、コンパイルモードにおいて、エミュレーションプロセッサ２は、次に実行するターゲットコード４１（以下、次のターゲットコード４１とも称する）を指し示すターゲット命令カウンタ２１と、次のターゲットコード４１に対するホストコード４６（次のホストコード４６）を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されているか否かをチェックする。そこで、チェックの結果、次のターゲットコード４１を指し示すターゲット命令カウンタ２１と、次のターゲットコード４１に対する次のホストコード４６を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されていないものとする。即ち、次のターゲットコード４１に対するホストコード４６（次のホストコード４６）が生成されていない。例えば、ターゲット命令が分岐命令であり、エミュレーションプロセッサ２がその分岐命令をエミュレーションするときに、分岐先のターゲット命令カウンタ２１（分岐先アドレス）に対応するホストコード４６が存在しなかったものとする。この場合、エミュレーションプロセッサ２は、現在のターゲット命令カウンタ２１を含むホストコード生成要求を通信データとしてコンパイルプロセッサ１に送信し、モードレジスタ２４にインタプリタモードを設定する。
【００３９】
エミュレーションプロセッサ２は、モードレジスタ２４にインタプリタモードを設定した場合、それに従って、コンパイルモードからエミュレーションモード（インタプリタモード）に遷移する。即ち、インタプリタモードを実行する。
【００４０】
インタプリタモードにおいて、エミュレーションプロセッサ２は、次のターゲットコード４１から１命令を読み出して解析し、その命令に対応したエミュレーションを行う。
【００４１】
コンパイルプロセッサ１は、ホストコード生成要求を受信する。このときに、コンパイルプロセッサ１は、現在生成中のホストコードブロック（ターゲット命令カウンタ１１、ホスト命令カウンタ１２）内に、ホストコード生成要求に含まれるターゲット命令カウンタ２１と一致するターゲット命令カウンタが存在しない場合、ホストコード生成処理の実行として、ホストコード生成要求に含まれるターゲット命令カウンタ２１を開始点として次のターゲットコード４１から命令を読み出して解析し、その命令に対応したホストコード４６として、次のホストコード４６を生成する。ここで、ホストコード４６はブロック毎に生成される。このとき、ターゲットコード４１の容量が、予め決められた設定容量以上である場合、コンパイルプロセッサ１は、次のターゲットコード４１を指し示すターゲット命令カウンタ１１と、次のターゲットコード４１に対してそれまでに生成されたブロックを含む次のホストコード４６を指し示すホスト命令カウンタ１２と、を１ホストコードブロックとして生成し、命令カウンタ管理テーブル４９に登録する。前回生成したホストコード４６と今回生成したホストコード４６とがターゲットコード４１上で連続している場合、コンパイルプロセッサ１は、前回生成したホストコード４６の終端に分岐命令のコードをストアする。最後に、コンパイルプロセッサ１は、ホストコード生成完了通知をエミュレーションプロセッサ２に送信する。
【００４２】
インタプリタモードにおいて、エミュレーションプロセッサ２は、コンパイルプロセッサ１からのホストコード生成完了通知を受信したものとする。エミュレーションプロセッサ２は、ホストコード生成完了通知に応じて、次に実行するターゲットコード４１（次のターゲットコード４１）を指し示すターゲット命令カウンタ２１と、次のターゲットコード４１に対するホストコード４６を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されているか否かをチェックする。そこで、チェックの結果、次のターゲットコード４１を指し示すターゲット命令カウンタ２１と、次のターゲットコード４１に対するホストコード４６を指し示すホスト命令カウンタ２２とが命令カウンタ管理テーブル４９に登録されているものとする。即ち、次のターゲットコード４１に対するホストコード４６が生成されているものとする。この場合、エミュレーションプロセッサ２は、モードレジスタ２４にコンパイルモードを設定する。
【００４３】
エミュレーションプロセッサ２は、モードレジスタ２４にコンパイルモードを設定した場合、それに従って、インタプリタモードからコンパイルモードに遷移する。即ち、コンパイルモードを実行する。
【００４４】
本発明の実施形態によるエミュレーションシステムによれば、コンパイルプロセッサ１がホストコード４６を生成している間、エミュレーションプロセッサ２はホストコード４６の生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。
【００４５】
図３は、本発明の実施形態によるエミュレーションシステムの動作として、コンパイルプロセッサ１の動作を示すフローチャートである。
【００４６】
コンパイルプロセッサ１は主記憶メモリ４内のホストコード生成プログラム４３を実行する。この場合、ホストコード生成プログラム４３は、以下のように動作する。
【００４７】
まず、ターゲット命令カウンタ１１が指すターゲット命令を取り出す（Ｓ１０１）。次にターゲット命令を解析し（Ｓ１０２）、ターゲット命令に対応したエミュレーションを行うホストコード４６を、ホストコード空間内のホスト命令カウンタ１２が指すエリアに生成する（Ｓ１０３）。ターゲット命令カウンタ１１とホスト命令カウンタ１２を更新する（Ｓ１０４）。
【００４８】
このとき、ターゲットコード４１のサイズ［バイト］を判定し（Ｓ１０５）、設定サイズ（Ｌ）［バイト］未満であれば、上述のＳ１０１を実行する。
【００４９】
Ｌバイト以上であれば、ホストコードブロックの終端（最後の命令）として、後述のＳ２０４をエミュレーションプロセッサ２に実行させるための分岐命令のホストコードを生成する（Ｓ１０６）。
【００５０】
前回生成したホストコード４６と今回生成したホストコード４６がターゲットコード４１上で連続している場合、前回生成したホストコード４６の最後の命令を今回のホストコード４６の先頭アドレスへの分岐命令に書き換える。（Ｓ１０７）
【００５１】
命令カウンタ管理テーブル４９に今回生成したホストコード４６の先頭アドレス（ホスト命令カウンタ）とそれに対応したターゲットコードアドレス（ターゲット命令カウンタ）を登録する（Ｓ１０８）。
【００５２】
エミュレーションプロセッサ２にホストコード生成完了通知を発行する（Ｓ１０９）。プロセッサ間の通知手段については、プロセッサ間通信機能を用いても良いし、メモリを介在したデータの送受信で実現しても良い。
【００５３】
エミュレーションプロセッサ２からホストコード生成要求が通知されかチェックし（Ｓ１１０）、通知がない場合（Ｓ１１０−Ｎｏ）は上述のＳ１０１を実行する。通知があった場合（Ｓ１１０−Ｙｅｓ）はホストコード生成要求で通知されたターゲット命令カウンタ２１をターゲット命令カウンタ１１に設定して（Ｓ１１１）、上述のＳ１０１を実行する。
【００５４】
図４は、本発明の実施形態によるエミュレーションシステムの動作として、エミュレーションプロセッサ２の動作を示すフローチャートである。
【００５５】
エミュレーションプロセッサ２は主記憶メモリ４内のエミュレーションプログラム４５を実行する。この場合、エミュレーションプログラム４５は、以下のように動作する。
【００５６】
まず、モードレジスタ２４を判定し（Ｓ２０１）、コンパイルモードであれば後述のＳ２０２を実行し、インタプリタモードであれば後述のＳ２０７を実行する。
【００５７】
コンパイルモードでは、ターゲット命令カウンタ２１に対応したホスト命令カウンタ２２を、命令カウンタ管理テーブル４９を参照して算出し、ＨＷ命令カウンタ２３に設定する（Ｓ２０２）。
【００５８】
ＨＷ命令カウンタ２３に設定されたアドレスから、コンパイルプロセッサ１により生成されたホストコード４６を実行する（Ｓ２０３）。
【００５９】
ホストコード４６の終端には後述のＳ２０４を実行させる分岐命令がコーディングされているため（Ｓ１０６）、ホストコード４６の実行が終了するとＳ２０４を実行する。
【００６０】
あるいは、ターゲット命令が分岐命令の場合に、分岐先のターゲット命令カウンタ２１に対応するホストコード４６が存在しない場合もＳ２０４を実行する。
【００６１】
命令カウンタ管理テーブル４９をチェックする（Ｓ２０４）。
【００６２】
その結果、ターゲット命令カウンタ２１に対応するホスト命令カウンタが存在すれば（Ｓ２０４−Ｙｅｓ）、その値をホスト命令カウンタ２２へ設定して、上述のＳ２０２を実行し、ホストコード４６の実行を継続する。
【００６３】
一方、ターゲット命令カウンタ２１に対応するホスト命令カウンタが存在しなければ（Ｓ２０４−Ｎｏ）、現在のターゲット命令カウンタ２１を含むコード生成要求を通信データとしてコンパイルプロセッサ１に送信する（Ｓ２０５）。
【００６４】
モードレジスタ２４をエミュレーションモード（インタプリタモード）に変更し（Ｓ２０６）、上述のＳ２０１を実行する。
【００６５】
インタプリタモードでは、ターゲット命令カウンタ２１が指すターゲット命令を取り出し（Ｓ２０７）、ターゲット命令の解析（Ｓ２０８）を行い、ターゲット命令に対応したエミュレーションを実行する（Ｓ２０９）。
【００６６】
ターゲット命令カウンタ２１を更新し（Ｓ２１０）、コンパイルプロセッサ１からホストコード完了通知が送信されたか否かをチェックし（Ｓ２１１）、通知がない場合（Ｓ２１１−Ｎｏ）は上述のＳ２０７を実行する。通知がある場合（Ｓ２１１−Ｙｅｓ）は命令カウンタ管理テーブル４９に現在のターゲット命令カウンタ２１が登録されているか否かをチェックし（Ｓ２１２）、登録されていない場合（Ｓ２１２−Ｎｏ）は上述のＳ２０７を実行する。登録されている場合（Ｓ２１２−Ｙｅｓ）はコンパイルモードに変更して（Ｓ２１３）、上述のＳ２０１を実行する。
【００６７】
［具体例］
本発明の実施形態によるエミュレーションシステムについて、具体例を用いて説明する。
【００６８】
図５は、ターゲットコード４１とホストコード４６の具体例である。
【００６９】
ターゲットコード４１はアドレスＴ０以降、命令Ａ・命令Ｂ・条件分岐Ｃ・・・と命令が連続している。
【００７０】
またターゲット命令毎のエミュレート関数４４は予め用意されており、命令毎にエミュレーションを行うホストコードである。
【００７１】
コンパイルプロセッサ１はターゲットコード４１から命令Ａを取り出して解析し、命令Ａであることを認識すると命令Ａのエミュレート関数をサブルーチンコールする命令“Ｃａｌｌ  命令Ａ処理”のバイナリコードを生成する。
【００７２】
これを繰り返すことで、ホストコード空間にホストコード４６のブロックを生成する。
【００７３】
ターゲット命令が分岐命令の場合は分岐先ターゲット命令アドレスが明白な場合、あるいは算出できる場合は、該当するホストコードへの分岐命令を生成し、分岐先ターゲット命令アドレスが不明な場合はＳ２０４を実行させる分岐命令を生成する。
【００７４】
図６は、命令カウンタ管理テーブル４９の具体例である。
【００７５】
命令カウンタ管理テーブル４９は一対の命令カウンタ情報の有効（１）・無効（０）を示すフィールドと、ホストコード生成が完了したターゲットコードエリアの先頭アドレス（ターゲット命令カウンタ）と、ターゲットコードエリアのサイズと、対応するホストコード４６のアドレス（ホスト命令カウンタ）を保持する。
【００７６】
コンパイルプロセッサ１がＳ１０８で更新し、エミュレーションプロセッサ２がＳ２０２、Ｓ２０４、Ｓ２１２で参照する。
【００７７】
図６は構成例でありこの限りではない。例えば命令カウンタ管理テーブル４６の検索性能を向上させるためにハッシュによるポインタ索引機能を設けても良い。
【００７８】
コンパイルプロセッサ１がホストコード４６を生成している間、エミュレーションプロセッサ２はインタプリタモードでエミュレーションを継続しているためターゲット命令カウンタ２１は進んでおり、コンパイルモードに遷移したときにターゲット命令カウンタ２１に対応したホスト命令カウンタ２２を計算により算出する必要があるため、算出方法について図５と図６で詳細に説明する。
【００７９】
図５にはターゲットコード４１のアドレスＴ１とそのコードサイズＳ＿１、アドレスＴ１に対応したホストコード４６のアドレスＢ１が登録されている。
【００８０】
エミュレーションプロセッサ２のターゲット命令カウンタ２１が図６の“命令Ｆ”を指している時に、インタプリタモードからコンパイルモードに遷移する場合、命令カウンタ管理テーブル４９からアドレスＴ１とアドレスＢ１を取得する。
【００８１】
次に、アドレスＴ１から“命令Ｆ”までの間には“命令Ｅ”と“条件分岐Ｃ”がそれぞれ１個ずつ存在するため、ホストコード４６はアドレスＢ１からではなく“Ｃａｌｌ  命令Ｆ処理”の位置から開始する必要がある。
【００８２】
ホストコード４６は、分岐命令は“Ｃａｌｌ＋ジャンプ”
命令が生成され、分岐以外の命令は関数コールの “Ｃａｌｌ” 命令が生成されるため、“Ｃａｌｌ”命令のバイナリコードをｎバイト、“Ｃａｌｌ＋ジャンプ” 命令のバイナリコードをｍバイトとすると、ホスト命令カウンタ２２は次の式で算出する。
ホスト命令カウンタ２２  ＝  アドレスＢ１＋（ｎ×通常命令の個数）＋（ｍ×分岐命令の個数）
【００８３】
［効果］
以上の説明により、本発明の実施形態によるエミュレーションシステムによれば、コンパイルプロセッサ１がホストコード４６を生成している間、エミュレーションプロセッサ２はホストコード４６の生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。したがって、複数のプロセッサが協働してエミュレーションを行う場合、エミュレーションの動作が高速になる。これにより、マルチプロセッサを効率よく活用して性能が向上する。
【００８４】
なお、本発明の実施形態によるエミュレーションシステムの他の構成として、図７に示されるように、ターゲット命令カウンタ１１とホスト命令カウンタ１２をコンパイルプロセッサ用データ領域４７内に配置し、ターゲット命令カウンタ２１とホスト命令カウンタ２２とモードレジスタ２４をエミュレーションプロセッサ用データ領域４８内に配置している。これらのカウンタ、レジスタはプロセッサ内のレジスタでなく主記憶メモリ４内に配置してもよい。この場合、動作は上述と同じである。
【産業上の利用可能性】
【００８５】
本発明によれば、アーキテクチャの異なるプロセッサ間のエミュレーションシステムといった用途に適用できる。特にメインフレームのソフトウェア資産は膨大であり、サーバー上でメインフレームをエミュレーションにより稼働することにより、過去のソフトウェア資産を有効活用できる。また、旧式のゲーム機を最新のパソコンやゲーム機でエミュレーションする、といった用途にも適用可能である。
【図面の簡単な説明】
【００８６】
【図１】図１は、本発明の実施形態によるエミュレーションシステムの構成を示している。
【図２】図２は、本発明の実施形態によるエミュレーションシステムの動作を示すシーケンス図である。
【図３】図３は、本発明の実施形態によるエミュレーションシステムの動作として、コンパイルプロセッサ１の動作を示すフローチャートである。
【図４】図４は、本発明の実施形態によるエミュレーションシステムの動作として、エミュレーションプロセッサ２の動作を示すフローチャートである。
【図５】図５は、ターゲットコード４１とホストコード４６の具体例である。
【図６】図６は、命令カウンタ管理テーブル４９の具体例である。
【図７】図７は、本発明の実施形態によるエミュレーションシステムの他の構成を示している。
【符号の説明】
【００８７】
１    コンパイルプロセッサ、
２    エミュレーションプロセッサ、
３    入出力インタフェース、
４    主記憶メモリ、
５    バス、
１１    ターゲット命令カウンタ、
１２    ホスト命令カウンタ、
１３    ＨＷ命令カウンタ、
２１    ターゲット命令カウンタ、
２２    ホスト命令カウンタ、
２３    ＨＷ命令カウンタ、
２４    モードレジスタ、
４１    異種プロセッサ用命令コード（ターゲットコード）、
４２    データ、
４３    コンパイルプロセッサ用ホストコード生成プログラム（ホストコード生成プログラム）、
４４    エミュレート関数、
４５    エミュレーションプロセッサ用エミュレーションプログラム（エミュレーションプログラム）、
４６    エミュレーションプログラム（ホストコード）、
４７    コンパイルプロセッサ用データ領域、
４８    エミュレーションプロセッサ用データ領域、
４９    命令カウンタ管理テーブル、
【図１】
2010140233.tif 000003
【図２】
2010140233.tif 000004
【図３】
2010140233.tif 000005
【図４】
2010140233.tif 000006
【図５】
2010140233.tif 000007
【図６】
2010140233.tif 000008
【図７】
2010140233.tif 000009