JP2010140233A - エミュレーションシステム及びエミュレーション方法 - Google Patents
エミュレーションシステム及びエミュレーション方法 Download PDFInfo
- Publication number
- JP2010140233A JP2010140233A JP2008315507A JP2008315507A JP2010140233A JP 2010140233 A JP2010140233 A JP 2010140233A JP 2008315507 A JP2008315507 A JP 2008315507A JP 2008315507 A JP2008315507 A JP 2008315507A JP 2010140233 A JP2010140233 A JP 2010140233A
- Authority
- JP
- Japan
- Prior art keywords
- code
- host
- instruction
- processor
- emulation
- 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.)
- Pending
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
【課題】マルチプロセッサを効率よく活用して性能が向上するエミュレーションシステムを提供すること。
【解決手段】本発明のエミュレーションシステムは、コンパイルプロセッサと、エミュレーションプロセッサと、を具備している。コンパイルプロセッサは、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成する。エミュレーションプロセッサは、コンパイルプロセッサによりホストコードが生成されているコンパイルモードにおいて、ホストコードを実行し、コンパイルプロセッサによりホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行する。
【選択図】図1
【解決手段】本発明のエミュレーションシステムは、コンパイルプロセッサと、エミュレーションプロセッサと、を具備している。コンパイルプロセッサは、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成する。エミュレーションプロセッサは、コンパイルプロセッサによりホストコードが生成されているコンパイルモードにおいて、ホストコードを実行し、コンパイルプロセッサによりホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行する。
【選択図】図1
Description
本発明は、複数プロセッサが協働してエミュレーションを行うエミュレーションシステム及びエミュレーション方法に関する。
複数プロセッサが協働してエミュレーションを行う場合、第1のプロセッサがエミュレーション対象のターゲットコードを解析してエミュレーション用のホストコードを生成し、第2のプロセッサが、第1のプロセッサにより生成されたホストコードを実行するシステムが知られている。
しかし、第2のプロセッサは、ホストコードがまだ生成されていない場合、コードの生成を待ち合わせるため、エミュレーションを実行するためのエミュレーション処理が中断してしまう。このため、プロセッサの使用効率が悪くなる。例えば、特許文献1に記載された技術では、実行用プロセッサ(第1のプロセッサ)は、変換用プロセッサ(第2のプロセッサ)により命令コードが変換されるまで待機状態となる。
このように、ホストコードの生成が完了するまでは、第2のプロセッサは待ち合わせを行うのが一般的であり、マルチプロセッサ構成を効率よく活用できていない。
コンパイラやインタプリタに関する文献について紹介する。
特許文献1には、エミュレーション装置が記載されている。エミュレーション装置は、異種プロセッサのエミュレーションを行うものである。このエミュレーション装置は、第1のプロセッサと、第2のプロセッサと、第3のプロセッサと、を有することを特徴としている。第1のプロセッサは、少なくとも、異種プロセッサで使用される命令コードの解析を行う。第2のプロセッサは、第1のプロセッサによる命令コードの解析結果に基づいて、第3のプロセッサで実行可能な命令コードを生成する。第3のプロセッサは、第2のプロセッサにより生成された命令コードを実行する。
特許文献2には、動的コンパイル時期決定方法が記載されている。動的コンパイル時期決定方法は、インタプリタによるバイトコード実行時に、実行する命令が後方への条件分岐命令である場合、当該条件分岐命令がループのバックエッジであるか判断し、ループのバックエッジと判断された場合にはループの回数を予測し且つ予測したループ回数を記憶装置に格納し、予測したループ回数に応じてコンパイルのタイミングを決定する。
特許文献3には、プロセスマイグレーション方法が記載されている。プロセスマイグレーション方法は、ネットワークを介して接続された第1及び第2の計算機の間で行われるものである。このプロセスマイグレーション方法は、送信ステップと、記録開始ステップと、第1の復元ステップと、判断ステップと、移行ステップと、第2の復元ステップとを有している。送信ステップは、第1の計算機で実行中のプロセスを複製して第2の計算機へ送信する。記録開始ステップは、第1の計算機で実行中のプロセスの実行記録の生成を開始する。第1の復元ステップは、第2の計算機において、第1の計算機から送信された複製を受信し、これを用いてプロセスを復元した復元プロセスを生成する。判断ステップは、実行記録に基づいて、プロセスの実行を復元プロセスに移行させるか、あるいは、まだ移行させないかを判断する。移行ステップは、判断ステップにより移行させると判断された場合には、第1の計算機におけるプロセスの実行を終了させ、生成中の実行記録を第2の計算機へ送信するとともに、復元プロセスの上でプロセスの動作を再生し、再生終了後に復元プロセスの実行を開始する。第2の復元ステップは、判断ステップによりまだ移行させないと判断された場合には、第1の計算機は現在の実行記録の生成を終了して新たな実行記録の生成を開始するとともに、現在の実行記録を第2の計算機へ転送し、第2の計算機は復元プロセスの上でプロセスの動作を再生する。第2の復元ステップ終了後、判断ステップを再実行することを特徴としている。
特許文献4には、情報処理装置が記載されている。情報処理装置は、所定の命令を取り込む第1プロセッサと、第1プロセッサからの指示により所定の処理を実行する第2プロセッサと、を備えている。第1プロセッサは、所定の命令に応じて第2プロセッサに所定の処理の実行を指示するように構成されている。第2プロセッサは、判断手段と、第2処理手段と、を有している。判断手段は、第1プロセッサから指示された所定の処理が実行可能であるか否かを判断して、実行不可能である場合に、その旨を第1プロセッサに通知する。第2処理手段は、実行可能である場合に、所定の処理を実行する。第1プロセッサは、第2プロセッサから通知があると所定の処理を実行するように構成され、第1プロセッサと第2プロセッサとにより協働で所定の命令に応じた処理を実行するように構成されている。
特許文献5に記載された方法では、プログラムのバイトコードのシーケンスを動的にプロファリングするものである。この方法は、プログラム内のメソッドで実行されるブランチの数をランタイム時に決定するステップと、プログラムで実行されるブランチの総数をランタイム時に決定するステップと、メソッドで実行されるブランチ数と、プログラムで実行されるブランチの総数とをランタイム時に比較するステップと、メソッドで実行されるブランチの数とプログラム全体で実行されるブランチの総数との比較に基づき、よく実行されるメソッドを決定するステップと、を含んでいる。
本発明の課題は、マルチプロセッサを効率よく活用して性能が向上するエミュレーションシステム及びエミュレーション方法を提供することにある。
本発明のエミュレーションシステムは、コンパイルプロセッサと、エミュレーションプロセッサと、を具備している。コンパイルプロセッサは、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成する。エミュレーションプロセッサは、コンパイルプロセッサによりホストコードが生成されているコンパイルモードにおいて、ホストコードを実行し、コンパイルプロセッサによりホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行する。
以上の説明により、本発明のエミュレーションシステムによれば、コンパイルプロセッサがホストコードを生成している間、エミュレーションプロセッサはホストコードの生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。したがって、複数のプロセッサが協働してエミュレーションを行う場合、エミュレーションの動作が高速になる。これにより、マルチプロセッサを効率よく活用して性能が向上する。
以下に添付図面を参照して、本発明の実施形態によるエミュレーションシステムについて詳細に説明する。
[構成]
図1は、本発明の実施形態によるエミュレーションシステムの構成を示している。そのエミュレーションシステムは、コンパイルプロセッサ1と、エミュレーションプロセッサ2と、入出力インタフェース3と、記憶装置である主記憶メモリ4と、を具備している。コンパイルプロセッサ1とエミュレーションプロセッサ2と入出力インタフェース3と主記憶メモリ4は、バス5に接続され、一般的なマルチプロセッサ構成のコンピュータシステムとして使用される。
図1は、本発明の実施形態によるエミュレーションシステムの構成を示している。そのエミュレーションシステムは、コンパイルプロセッサ1と、エミュレーションプロセッサ2と、入出力インタフェース3と、記憶装置である主記憶メモリ4と、を具備している。コンパイルプロセッサ1とエミュレーションプロセッサ2と入出力インタフェース3と主記憶メモリ4は、バス5に接続され、一般的なマルチプロセッサ構成のコンピュータシステムとして使用される。
コンパイルプロセッサ1は、一般的なプロセッサであり、ターゲット命令カウンタ11と、ホスト命令カウンタ12と、HW命令カウンタ13と、を具備している。コンパイルプロセッサ1は、実行するプログラムのアドレスをHW命令カウンタ13に格納してプログラムを実行する。
エミュレーションプロセッサ2は、一般的なプロセッサであり、ターゲット命令カウンタ21と、ホスト命令カウンタ22と、HW命令カウンタ23と、を具備している。エミュレーションプロセッサ2は、実行するプログラムのアドレスをHW命令カウンタ23に格納してプログラムを実行する。
主記憶メモリ4は、その記憶領域(メモリ空間)として、ターゲットコード空間と、ターゲットデータ空間と、ホストコード空間と、ホストデータ空間と、を備えている。
ターゲットコード空間には、異種プロセッサ上で動作する異種プロセッサ用命令コード41(以下、ターゲットコード41と称する)が格納される。ターゲットコード41内の命令を指すアドレスは、ターゲット命令カウンタ11及び21によって管理される。
ターゲットデータ空間には、ターゲットコード41からアクセスされるデータ42が格納される。
ホストコード空間には、コンパイルプロセッサ1及びエミュレーションプロセッサ2上で実行可能な命令コードが格納される。ホストコード46内の命令を指すアドレスは、ホスト命令カウンタ12及び22で管理される。その命令コードは、コンパイルプロセッサ用ホストコード生成プログラム43(以下、ホストコード生成プログラム43と称する)と、エミュレート関数44と、エミュレーションプロセッサ用エミュレーションプログラム45(以下、エミュレーションプログラム45と称する)と、エミュレーション用エミュレーションプログラム(以下、ホストコード46と称する)と、を含んでいる。ホストコード生成プログラム43は、コンパイルプロセッサ1上で動作し、ターゲットコード41を解析してホストコード46を生成する処理を行う。エミュレート関数44は、ターゲット命令毎にエミュレート動作を行う。エミュレーションプログラム45は、エミュレーションプロセッサ2上で動作し、モードレジスタ24に応じたエミュレーションを行う。ホストコード46は、コンパイルプロセッサ1により生成されたエミュレーション用エミュレーションプログラムである。
ホストデータ空間は、コンパイルプロセッサ用データ領域47と、エミュレーションプロセッサ用データ領域48と、命令カウンタ管理テーブル49と、を備えている。コンパイルプロセッサ用データ領域47は、コンパイルプロセッサ1がプログラムを実行するときに必要なデータを保持する。エミュレーションプロセッサ用データ領域48は、エミュレーションプロセッサ2がプログラムを実行するときに必要なデータを保持する。命令カウンタ管理テーブル49は、ホストコード生成済みターゲット命令カウンタとホスト命令カウンタの対応を管理する。
コンパイルプロセッサ1は、ターゲットコード41を解析してエミュレーションを行うホストコード46を生成する。
エミュレーションプロセッサ2は、更に、モードレジスタ24を具備している。エミュレーションプロセッサ2は、コンパイルモードとインタプリタモードのどちらかのモードをモードレジスタ24に設定する。
コンパイルモードとは、コンパイルプロセッサ1によりホストコード46が準備(生成)されている状態である。この状態であるときに、エミュレーションプロセッサ2は、モードレジスタ24にコンパイルモードを設定する。この場合、エミュレーションプロセッサ2は、コンパイルプロセッサ1が生成したホストコード46を直接実行することでエミュレーションを実行する。
インタプリタモードとは、コンパイルプロセッサ1によりホストコード46が準備(生成)されていない状態である。この状態であるときに、エミュレーションプロセッサ2は、モードレジスタ24にインタプリタモードを設定する。この場合、エミュレーションプロセッサ2は、ターゲットコード41から1命令単位で命令を取り出して、その命令の解析を行い、命令に対応したエミュレーションを行う。
[動作]
図2は、本発明の実施形態によるエミュレーションシステムの動作を示すシーケンス図である。
図2は、本発明の実施形態によるエミュレーションシステムの動作を示すシーケンス図である。
コンパイルプロセッサ1は、ターゲットコード41を解析してホストコード46を生成するホストコード生成処理を実行する。
ホストコード生成処理において、コンパイルプロセッサ1は、ターゲットコード41から1命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコード46をホストコード空間に生成する。ここで、ホストコード46はブロック毎に生成される。このとき、ターゲットコード41の容量(サイズ)が、予め決められた設定容量(設定サイズ)以上である場合、コンパイルプロセッサ1は、そのターゲットコード41を指し示すターゲット命令カウンタ11と、ターゲットコード41に対してそれまでに生成されたブロックを含むホストコード46を指し示すホスト命令カウンタ12と、を1ホストコードブロックとして生成し、命令カウンタ管理テーブル49に登録する。前回生成したホストコード46と今回生成したホストコード46とがターゲットコード41上で連続している場合、コンパイルプロセッサ1は、前回生成したホストコード46の終端に分岐命令のコードをストアする。ホストコード46の終端とは、ホストコード46内のブロックの最後の命令を表している。分岐命令の分岐先アドレスは今回生成したホストコード46の先頭アドレスである。最後に、コンパイルプロセッサ1は、ホストコード生成完了通知をエミュレーションプロセッサ2に送信する。
その後、コンパイルプロセッサ1は、上述のホストコード生成処理を繰り返す。
エミュレーションプロセッサ2は、モードレジスタ24にインタプリタモードを設定している場合、それに従って、インタプリタモードを実行する。
インタプリタモードにおいて、エミュレーションプロセッサ2は、ターゲットコード41から1命令を読み出して解析し、その命令に対応したエミュレーションを行う。
インタプリタモードにおいて、エミュレーションプロセッサ2は、コンパイルプロセッサ1からのホストコード生成完了通知を受信したものとする。エミュレーションプロセッサ2は、ホストコード生成完了通知に応じて、次に実行するターゲットコード41を指し示すターゲット命令カウンタ21と、そのターゲットコード41に対するホストコード46を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されているか否かをチェックする。そこで、チェックの結果、そのターゲットコード41を指し示すターゲット命令カウンタ21と、そのターゲットコード41に対するホストコード46を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されているものとする。即ち、そのターゲットコード41に対するホストコード46が生成されているものとする。この場合、エミュレーションプロセッサ2は、モードレジスタ24にコンパイルモードを設定する。
エミュレーションプロセッサ2は、モードレジスタ24にコンパイルモードを設定した場合、それに従って、インタプリタモードからコンパイルモードに遷移する。即ち、コンパイルモードを実行する。
コンパイルモードにおいて、エミュレーションプロセッサ2は、ターゲット命令カウンタ21に対応したホスト命令カウンタ22を命令カウンタ管理テーブル49から取得し、HW命令カウンタ23に設定してホストコード46を実行する。
コンパイルモードにおいて、エミュレーションプロセッサ2は、HW命令カウンタ23がホストコード46の終端に到達したものとする。即ち、エミュレーションプロセッサ2がホストコード46の終端(最後の命令)まで実行したものとする。この場合、エミュレーションプロセッサ2は、現在のターゲット命令カウンタ21を含むホストコード生成要求を通信データとしてコンパイルプロセッサ1に送信し、モードレジスタ24にインタプリタモードを設定する。
又は、コンパイルモードにおいて、エミュレーションプロセッサ2は、次に実行するターゲットコード41(以下、次のターゲットコード41とも称する)を指し示すターゲット命令カウンタ21と、次のターゲットコード41に対するホストコード46(次のホストコード46)を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されているか否かをチェックする。そこで、チェックの結果、次のターゲットコード41を指し示すターゲット命令カウンタ21と、次のターゲットコード41に対する次のホストコード46を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されていないものとする。即ち、次のターゲットコード41に対するホストコード46(次のホストコード46)が生成されていない。例えば、ターゲット命令が分岐命令であり、エミュレーションプロセッサ2がその分岐命令をエミュレーションするときに、分岐先のターゲット命令カウンタ21(分岐先アドレス)に対応するホストコード46が存在しなかったものとする。この場合、エミュレーションプロセッサ2は、現在のターゲット命令カウンタ21を含むホストコード生成要求を通信データとしてコンパイルプロセッサ1に送信し、モードレジスタ24にインタプリタモードを設定する。
エミュレーションプロセッサ2は、モードレジスタ24にインタプリタモードを設定した場合、それに従って、コンパイルモードからエミュレーションモード(インタプリタモード)に遷移する。即ち、インタプリタモードを実行する。
インタプリタモードにおいて、エミュレーションプロセッサ2は、次のターゲットコード41から1命令を読み出して解析し、その命令に対応したエミュレーションを行う。
コンパイルプロセッサ1は、ホストコード生成要求を受信する。このときに、コンパイルプロセッサ1は、現在生成中のホストコードブロック(ターゲット命令カウンタ11、ホスト命令カウンタ12)内に、ホストコード生成要求に含まれるターゲット命令カウンタ21と一致するターゲット命令カウンタが存在しない場合、ホストコード生成処理の実行として、ホストコード生成要求に含まれるターゲット命令カウンタ21を開始点として次のターゲットコード41から命令を読み出して解析し、その命令に対応したホストコード46として、次のホストコード46を生成する。ここで、ホストコード46はブロック毎に生成される。このとき、ターゲットコード41の容量が、予め決められた設定容量以上である場合、コンパイルプロセッサ1は、次のターゲットコード41を指し示すターゲット命令カウンタ11と、次のターゲットコード41に対してそれまでに生成されたブロックを含む次のホストコード46を指し示すホスト命令カウンタ12と、を1ホストコードブロックとして生成し、命令カウンタ管理テーブル49に登録する。前回生成したホストコード46と今回生成したホストコード46とがターゲットコード41上で連続している場合、コンパイルプロセッサ1は、前回生成したホストコード46の終端に分岐命令のコードをストアする。最後に、コンパイルプロセッサ1は、ホストコード生成完了通知をエミュレーションプロセッサ2に送信する。
インタプリタモードにおいて、エミュレーションプロセッサ2は、コンパイルプロセッサ1からのホストコード生成完了通知を受信したものとする。エミュレーションプロセッサ2は、ホストコード生成完了通知に応じて、次に実行するターゲットコード41(次のターゲットコード41)を指し示すターゲット命令カウンタ21と、次のターゲットコード41に対するホストコード46を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されているか否かをチェックする。そこで、チェックの結果、次のターゲットコード41を指し示すターゲット命令カウンタ21と、次のターゲットコード41に対するホストコード46を指し示すホスト命令カウンタ22とが命令カウンタ管理テーブル49に登録されているものとする。即ち、次のターゲットコード41に対するホストコード46が生成されているものとする。この場合、エミュレーションプロセッサ2は、モードレジスタ24にコンパイルモードを設定する。
エミュレーションプロセッサ2は、モードレジスタ24にコンパイルモードを設定した場合、それに従って、インタプリタモードからコンパイルモードに遷移する。即ち、コンパイルモードを実行する。
本発明の実施形態によるエミュレーションシステムによれば、コンパイルプロセッサ1がホストコード46を生成している間、エミュレーションプロセッサ2はホストコード46の生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。
図3は、本発明の実施形態によるエミュレーションシステムの動作として、コンパイルプロセッサ1の動作を示すフローチャートである。
コンパイルプロセッサ1は主記憶メモリ4内のホストコード生成プログラム43を実行する。この場合、ホストコード生成プログラム43は、以下のように動作する。
まず、ターゲット命令カウンタ11が指すターゲット命令を取り出す(S101)。次にターゲット命令を解析し(S102)、ターゲット命令に対応したエミュレーションを行うホストコード46を、ホストコード空間内のホスト命令カウンタ12が指すエリアに生成する(S103)。ターゲット命令カウンタ11とホスト命令カウンタ12を更新する(S104)。
このとき、ターゲットコード41のサイズ[バイト]を判定し(S105)、設定サイズ(L)[バイト]未満であれば、上述のS101を実行する。
Lバイト以上であれば、ホストコードブロックの終端(最後の命令)として、後述のS204をエミュレーションプロセッサ2に実行させるための分岐命令のホストコードを生成する(S106)。
前回生成したホストコード46と今回生成したホストコード46がターゲットコード41上で連続している場合、前回生成したホストコード46の最後の命令を今回のホストコード46の先頭アドレスへの分岐命令に書き換える。(S107)
命令カウンタ管理テーブル49に今回生成したホストコード46の先頭アドレス(ホスト命令カウンタ)とそれに対応したターゲットコードアドレス(ターゲット命令カウンタ)を登録する(S108)。
エミュレーションプロセッサ2にホストコード生成完了通知を発行する(S109)。プロセッサ間の通知手段については、プロセッサ間通信機能を用いても良いし、メモリを介在したデータの送受信で実現しても良い。
エミュレーションプロセッサ2からホストコード生成要求が通知されかチェックし(S110)、通知がない場合(S110−No)は上述のS101を実行する。通知があった場合(S110−Yes)はホストコード生成要求で通知されたターゲット命令カウンタ21をターゲット命令カウンタ11に設定して(S111)、上述のS101を実行する。
図4は、本発明の実施形態によるエミュレーションシステムの動作として、エミュレーションプロセッサ2の動作を示すフローチャートである。
エミュレーションプロセッサ2は主記憶メモリ4内のエミュレーションプログラム45を実行する。この場合、エミュレーションプログラム45は、以下のように動作する。
まず、モードレジスタ24を判定し(S201)、コンパイルモードであれば後述のS202を実行し、インタプリタモードであれば後述のS207を実行する。
コンパイルモードでは、ターゲット命令カウンタ21に対応したホスト命令カウンタ22を、命令カウンタ管理テーブル49を参照して算出し、HW命令カウンタ23に設定する(S202)。
HW命令カウンタ23に設定されたアドレスから、コンパイルプロセッサ1により生成されたホストコード46を実行する(S203)。
ホストコード46の終端には後述のS204を実行させる分岐命令がコーディングされているため(S106)、ホストコード46の実行が終了するとS204を実行する。
あるいは、ターゲット命令が分岐命令の場合に、分岐先のターゲット命令カウンタ21に対応するホストコード46が存在しない場合もS204を実行する。
命令カウンタ管理テーブル49をチェックする(S204)。
その結果、ターゲット命令カウンタ21に対応するホスト命令カウンタが存在すれば(S204−Yes)、その値をホスト命令カウンタ22へ設定して、上述のS202を実行し、ホストコード46の実行を継続する。
一方、ターゲット命令カウンタ21に対応するホスト命令カウンタが存在しなければ(S204−No)、現在のターゲット命令カウンタ21を含むコード生成要求を通信データとしてコンパイルプロセッサ1に送信する(S205)。
モードレジスタ24をエミュレーションモード(インタプリタモード)に変更し(S206)、上述のS201を実行する。
インタプリタモードでは、ターゲット命令カウンタ21が指すターゲット命令を取り出し(S207)、ターゲット命令の解析(S208)を行い、ターゲット命令に対応したエミュレーションを実行する(S209)。
ターゲット命令カウンタ21を更新し(S210)、コンパイルプロセッサ1からホストコード完了通知が送信されたか否かをチェックし(S211)、通知がない場合(S211−No)は上述のS207を実行する。通知がある場合(S211−Yes)は命令カウンタ管理テーブル49に現在のターゲット命令カウンタ21が登録されているか否かをチェックし(S212)、登録されていない場合(S212−No)は上述のS207を実行する。登録されている場合(S212−Yes)はコンパイルモードに変更して(S213)、上述のS201を実行する。
[具体例]
本発明の実施形態によるエミュレーションシステムについて、具体例を用いて説明する。
本発明の実施形態によるエミュレーションシステムについて、具体例を用いて説明する。
図5は、ターゲットコード41とホストコード46の具体例である。
ターゲットコード41はアドレスT0以降、命令A・命令B・条件分岐C・・・と命令が連続している。
またターゲット命令毎のエミュレート関数44は予め用意されており、命令毎にエミュレーションを行うホストコードである。
コンパイルプロセッサ1はターゲットコード41から命令Aを取り出して解析し、命令Aであることを認識すると命令Aのエミュレート関数をサブルーチンコールする命令“Call 命令A処理”のバイナリコードを生成する。
これを繰り返すことで、ホストコード空間にホストコード46のブロックを生成する。
ターゲット命令が分岐命令の場合は分岐先ターゲット命令アドレスが明白な場合、あるいは算出できる場合は、該当するホストコードへの分岐命令を生成し、分岐先ターゲット命令アドレスが不明な場合はS204を実行させる分岐命令を生成する。
図6は、命令カウンタ管理テーブル49の具体例である。
命令カウンタ管理テーブル49は一対の命令カウンタ情報の有効(1)・無効(0)を示すフィールドと、ホストコード生成が完了したターゲットコードエリアの先頭アドレス(ターゲット命令カウンタ)と、ターゲットコードエリアのサイズと、対応するホストコード46のアドレス(ホスト命令カウンタ)を保持する。
コンパイルプロセッサ1がS108で更新し、エミュレーションプロセッサ2がS202、S204、S212で参照する。
図6は構成例でありこの限りではない。例えば命令カウンタ管理テーブル46の検索性能を向上させるためにハッシュによるポインタ索引機能を設けても良い。
コンパイルプロセッサ1がホストコード46を生成している間、エミュレーションプロセッサ2はインタプリタモードでエミュレーションを継続しているためターゲット命令カウンタ21は進んでおり、コンパイルモードに遷移したときにターゲット命令カウンタ21に対応したホスト命令カウンタ22を計算により算出する必要があるため、算出方法について図5と図6で詳細に説明する。
図5にはターゲットコード41のアドレスT1とそのコードサイズS_1、アドレスT1に対応したホストコード46のアドレスB1が登録されている。
エミュレーションプロセッサ2のターゲット命令カウンタ21が図6の“命令F”を指している時に、インタプリタモードからコンパイルモードに遷移する場合、命令カウンタ管理テーブル49からアドレスT1とアドレスB1を取得する。
次に、アドレスT1から“命令F”までの間には“命令E”と“条件分岐C”がそれぞれ1個ずつ存在するため、ホストコード46はアドレスB1からではなく“Call 命令F処理”の位置から開始する必要がある。
ホストコード46は、分岐命令は“Call+ジャンプ”
命令が生成され、分岐以外の命令は関数コールの “Call” 命令が生成されるため、“Call”命令のバイナリコードをnバイト、“Call+ジャンプ” 命令のバイナリコードをmバイトとすると、ホスト命令カウンタ22は次の式で算出する。
ホスト命令カウンタ22 = アドレスB1+(n×通常命令の個数)+(m×分岐命令の個数)
命令が生成され、分岐以外の命令は関数コールの “Call” 命令が生成されるため、“Call”命令のバイナリコードをnバイト、“Call+ジャンプ” 命令のバイナリコードをmバイトとすると、ホスト命令カウンタ22は次の式で算出する。
ホスト命令カウンタ22 = アドレスB1+(n×通常命令の個数)+(m×分岐命令の個数)
[効果]
以上の説明により、本発明の実施形態によるエミュレーションシステムによれば、コンパイルプロセッサ1がホストコード46を生成している間、エミュレーションプロセッサ2はホストコード46の生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。したがって、複数のプロセッサが協働してエミュレーションを行う場合、エミュレーションの動作が高速になる。これにより、マルチプロセッサを効率よく活用して性能が向上する。
以上の説明により、本発明の実施形態によるエミュレーションシステムによれば、コンパイルプロセッサ1がホストコード46を生成している間、エミュレーションプロセッサ2はホストコード46の生成完了を待ち合わせるのではなく、自力でエミュレーションを行うので、エミュレーションが中断されることがない。したがって、複数のプロセッサが協働してエミュレーションを行う場合、エミュレーションの動作が高速になる。これにより、マルチプロセッサを効率よく活用して性能が向上する。
なお、本発明の実施形態によるエミュレーションシステムの他の構成として、図7に示されるように、ターゲット命令カウンタ11とホスト命令カウンタ12をコンパイルプロセッサ用データ領域47内に配置し、ターゲット命令カウンタ21とホスト命令カウンタ22とモードレジスタ24をエミュレーションプロセッサ用データ領域48内に配置している。これらのカウンタ、レジスタはプロセッサ内のレジスタでなく主記憶メモリ4内に配置してもよい。この場合、動作は上述と同じである。
本発明によれば、アーキテクチャの異なるプロセッサ間のエミュレーションシステムといった用途に適用できる。特にメインフレームのソフトウェア資産は膨大であり、サーバー上でメインフレームをエミュレーションにより稼働することにより、過去のソフトウェア資産を有効活用できる。また、旧式のゲーム機を最新のパソコンやゲーム機でエミュレーションする、といった用途にも適用可能である。
1 コンパイルプロセッサ、
2 エミュレーションプロセッサ、
3 入出力インタフェース、
4 主記憶メモリ、
5 バス、
11 ターゲット命令カウンタ、
12 ホスト命令カウンタ、
13 HW命令カウンタ、
21 ターゲット命令カウンタ、
22 ホスト命令カウンタ、
23 HW命令カウンタ、
24 モードレジスタ、
41 異種プロセッサ用命令コード(ターゲットコード)、
42 データ、
43 コンパイルプロセッサ用ホストコード生成プログラム(ホストコード生成プログラム)、
44 エミュレート関数、
45 エミュレーションプロセッサ用エミュレーションプログラム(エミュレーションプログラム)、
46 エミュレーションプログラム(ホストコード)、
47 コンパイルプロセッサ用データ領域、
48 エミュレーションプロセッサ用データ領域、
49 命令カウンタ管理テーブル、
2 エミュレーションプロセッサ、
3 入出力インタフェース、
4 主記憶メモリ、
5 バス、
11 ターゲット命令カウンタ、
12 ホスト命令カウンタ、
13 HW命令カウンタ、
21 ターゲット命令カウンタ、
22 ホスト命令カウンタ、
23 HW命令カウンタ、
24 モードレジスタ、
41 異種プロセッサ用命令コード(ターゲットコード)、
42 データ、
43 コンパイルプロセッサ用ホストコード生成プログラム(ホストコード生成プログラム)、
44 エミュレート関数、
45 エミュレーションプロセッサ用エミュレーションプログラム(エミュレーションプログラム)、
46 エミュレーションプログラム(ホストコード)、
47 コンパイルプロセッサ用データ領域、
48 エミュレーションプロセッサ用データ領域、
49 命令カウンタ管理テーブル、
Claims (14)
- ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成するコンパイルプロセッサと、
前記コンパイルプロセッサにより前記ホストコードが生成されているコンパイルモードにおいて、前記ホストコードを実行し、前記コンパイルプロセッサにより前記ホストコードが生成されていないインタプリタモードにおいて、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するエミュレーションプロセッサと、
を具備するエミュレーションシステム。 - 前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記ホストコードを実行し、次のホストコードが生成されていない場合、ホストコード生成要求を前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移し、
前記インタプリタモードにおいて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行し、
前記コンパイルプロセッサは、
前記ホストコード生成要求に応じて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応した前記次のホストコードを生成し、
前記エミュレーションプロセッサは、
前記インタプリタモードにおいて、前記次のホストコードが生成された場合、前記インタプリタモードから前記コンパイルモードに遷移する、
請求項1に記載のエミュレーションシステム。 - 前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記ホストコードの終端まで実行した場合、又は、前記次のホストコードが生成されていない場合、前記ホストコード生成要求を前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移する、
請求項2に記載のエミュレーションシステム。 - 命令カウンタ管理テーブルを備えた記憶装置、
を更に具備し、
前記コンパイルプロセッサは、
前記ホストコードを生成したときに、前記ターゲットコードの容量が予め決められた設定容量以上である場合、前記ターゲットコードを指し示すターゲット命令カウンタと、前記ターゲットコードに対する前記ホストコードを指し示すホスト命令カウンタと、をホストコードブロックとして生成して前記命令カウンタ管理テーブルに登録し、
前記エミュレーションプロセッサは、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されているか否かをチェックし、チェックの結果に基づいて、前記インタプリタモードと前記コンパイルモードとの一方のモードから他方のモードに遷移する、
請求項2又は3に記載のエミュレーションシステム。 - 前記エミュレーションプロセッサは、
前記インタプリタモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されている場合、前記インタプリタモードから前記コンパイルモードに遷移する、
請求項4に記載のエミュレーションシステム。 - 前記エミュレーションプロセッサは、
前記コンパイルモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されていない場合、前記コンパイルプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移する、
請求項4に記載のエミュレーションシステム。 - 前記ホストコード生成要求は、現在のターゲット命令カウンタを含み、
前記コンパイルプロセッサは、
現在生成中のホストコードブロック内に、前記ホストコード生成要求に含まれるターゲット命令カウンタと一致するターゲット命令カウンタが存在しない場合、前記ホストコード生成要求に含まれるターゲット命令カウンタを開始点として前記次のターゲットコードを解析し、前記次のホストコードを生成する、
請求項6に記載のエミュレーションシステム。 - (a) 第1のプロセッサが、ターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを行うためのホストコードを生成するステップと、
(b) 前記第1のプロセッサにより前記ホストコードが生成されているコンパイルモードにおいて、第2のプロセッサが、前記ホストコードを実行するステップと、
(c) 前記第1のプロセッサにより前記ホストコードが生成されていないインタプリタモードにおいて、前記第2のプロセッサが、次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するステップと、
を具備するエミュレーション方法。 - 前記(b)のステップは、
(b1) 前記ホストコードを実行するステップと、
(b2) 次のホストコードが生成されていない場合、ホストコード生成要求を前記第1のプロセッサに送信するステップと、
(b3) 前記次のホストコードが生成されていない場合、前記コンパイルモードから前記インタプリタモードに遷移するステップと、
を含み、
前記(c)のステップは、
(c1) 前記次のターゲットコードから命令を読み出して解析し、その命令に対応したエミュレーションを実行するステップと、
(c2) 前記次のホストコードが生成された場合、前記インタプリタモードから前記コンパイルモードに遷移するステップと、
を含み、
前記(a)のステップは、
(a1) 前記ホストコード生成要求に応じて、前記次のターゲットコードから命令を読み出して解析し、その命令に対応した前記次のホストコードを生成するステップ、
を含む請求項8に記載のエミュレーション方法。 - 前記(b)のステップは、
(b4) 前記ホストコードの終端まで実行した場合、前記ホストコード生成要求を前記第1のプロセッサに送信するステップ、
を更に含む請求項9に記載のエミュレーション方法。 - 前記(a)のステップは、
(a2) 前記ホストコードを生成したときに、前記ターゲットコードの容量が予め決められた設定容量以上である場合、前記ターゲットコードを指し示すターゲット命令カウンタと、前記ターゲットコードに対する前記ホストコードを指し示すホスト命令カウンタと、をホストコードブロックとして生成して命令カウンタ管理テーブルに登録するステップ、
を更に含み、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されているか否かにより、前記インタプリタモードと前記コンパイルモードとの一方のモードから他方のモードに遷移される、
請求項9又は10に記載のエミュレーション方法。 - 前記(c2)のステップは、
前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されている場合、前記インタプリタモードから前記コンパイルモードに遷移するステップ、
を含む請求項11に記載のエミュレーション方法。 - 前記(b3)のステップは、
前記コンパイルモードにおいて、前記次のターゲットコードを指し示すターゲット命令カウンタと、前記次のターゲットコードに対する前記次のホストコードを指し示すホスト命令カウンタとが前記命令カウンタ管理テーブルに登録されていない場合、前記第1のプロセッサに送信し、前記コンパイルモードから前記インタプリタモードに遷移するステップ、
を含む請求項11に記載のエミュレーション方法。 - 前記ホストコード生成要求は、現在のターゲット命令カウンタを含み、
前記(a1)のステップは、
現在生成中のホストコードブロック内に、前記ホストコード生成要求に含まれるターゲット命令カウンタと一致するターゲット命令カウンタが存在しない場合、前記ホストコード生成要求に含まれるターゲット命令カウンタを開始点として前記次のターゲットコードを解析し、前記次のホストコードを生成するステップ、
を含む請求項13に記載のエミュレーション方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008315507A JP2010140233A (ja) | 2008-12-11 | 2008-12-11 | エミュレーションシステム及びエミュレーション方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008315507A JP2010140233A (ja) | 2008-12-11 | 2008-12-11 | エミュレーションシステム及びエミュレーション方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010140233A true JP2010140233A (ja) | 2010-06-24 |
Family
ID=42350332
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008315507A Pending JP2010140233A (ja) | 2008-12-11 | 2008-12-11 | エミュレーションシステム及びエミュレーション方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010140233A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013061810A (ja) * | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
WO2014155684A1 (ja) * | 2013-03-29 | 2014-10-02 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
JP2018028777A (ja) * | 2016-08-17 | 2018-02-22 | Necプラットフォームズ株式会社 | エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06202877A (ja) * | 1992-12-28 | 1994-07-22 | Fujitsu Ltd | エミュレーション装置 |
JP2000222220A (ja) * | 1999-01-28 | 2000-08-11 | Internatl Business Mach Corp <Ibm> | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
JP2000231440A (ja) * | 1998-11-30 | 2000-08-22 | Sun Microsyst Inc | グラフィカル・ユ―ザ・インタフェ―スにおける装置サポ―トを検出する方法および装置 |
JP2003140909A (ja) * | 2001-11-07 | 2003-05-16 | Fujitsu Ltd | Jitコンパイラを備えた仮想計算機 |
JP2004118367A (ja) * | 2002-09-25 | 2004-04-15 | Mitsubishi Electric Corp | コンピュータ装置及びプログラム実行方法 |
JP2004529413A (ja) * | 2001-02-12 | 2004-09-24 | トリメディア テクノロジーズ インコーポレイテッド | 最適化された動的バイトコードインタプリタ |
JP2004355277A (ja) * | 2003-05-28 | 2004-12-16 | Matsushita Electric Ind Co Ltd | プログラム実行制御装置、プログラム実行制御方法 |
-
2008
- 2008-12-11 JP JP2008315507A patent/JP2010140233A/ja active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06202877A (ja) * | 1992-12-28 | 1994-07-22 | Fujitsu Ltd | エミュレーション装置 |
JP2000231440A (ja) * | 1998-11-30 | 2000-08-22 | Sun Microsyst Inc | グラフィカル・ユ―ザ・インタフェ―スにおける装置サポ―トを検出する方法および装置 |
JP2000222220A (ja) * | 1999-01-28 | 2000-08-11 | Internatl Business Mach Corp <Ibm> | 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ |
JP2004529413A (ja) * | 2001-02-12 | 2004-09-24 | トリメディア テクノロジーズ インコーポレイテッド | 最適化された動的バイトコードインタプリタ |
JP2003140909A (ja) * | 2001-11-07 | 2003-05-16 | Fujitsu Ltd | Jitコンパイラを備えた仮想計算機 |
JP2004118367A (ja) * | 2002-09-25 | 2004-04-15 | Mitsubishi Electric Corp | コンピュータ装置及びプログラム実行方法 |
JP2004355277A (ja) * | 2003-05-28 | 2004-12-16 | Matsushita Electric Ind Co Ltd | プログラム実行制御装置、プログラム実行制御方法 |
Non-Patent Citations (4)
Title |
---|
CSND199800326001; 中村正弘: 'Javaの実用度を探る' 日経コンピュータ 第441号, 19980413, p.89, 日経BP社 * |
CSNG199700156006; 郡山 龍: 'インターネットとWWW技術(II)Javaと動的コンテンツ技術' 画像電子学会誌 第26巻,第2号, 19970425, pp.123〜124, 画像電子学会 * |
JPN6013058849; 中村正弘: 'Javaの実用度を探る' 日経コンピュータ 第441号, 19980413, p.89, 日経BP社 * |
JPN6013058851; 郡山 龍: 'インターネットとWWW技術(II)Javaと動的コンテンツ技術' 画像電子学会誌 第26巻,第2号, 19970425, pp.123〜124, 画像電子学会 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013061810A (ja) * | 2011-09-13 | 2013-04-04 | Fujitsu Ltd | 情報処理装置、情報処理装置制御方法及び中間コード命令実行プログラム |
WO2014155684A1 (ja) * | 2013-03-29 | 2014-10-02 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
JPWO2014155684A1 (ja) * | 2013-03-29 | 2017-02-16 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
US9733990B2 (en) | 2013-03-29 | 2017-08-15 | Fujitsu Limited | Information processing system and program migration method |
JP2018028777A (ja) * | 2016-08-17 | 2018-02-22 | Necプラットフォームズ株式会社 | エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム |
US10268462B2 (en) | 2016-08-17 | 2019-04-23 | Nec Platforms, Ltd. | Emulation device, emulation method, and recording medium storing emulation program |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Hong et al. | HQEMU: a multi-threaded and retargetable dynamic binary translator on multicores | |
US7596781B2 (en) | Register-based instruction optimization for facilitating efficient emulation of an instruction stream | |
CN101957773B (zh) | 用于多轮次动态概要分析的方法及其系统 | |
TWI406174B (zh) | 定義一用於一處理環境之一追蹤之控制碼的方法、系統及電腦程式製品 | |
EP2336882A1 (en) | Technique for run-time provision of executable code using off-device services | |
JP3900485B2 (ja) | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 | |
JP2015084251A (ja) | ソフトウェア・アプリケーションの性能向上 | |
Wang et al. | Enabling cross-isa offloading for cots binaries | |
US10268462B2 (en) | Emulation device, emulation method, and recording medium storing emulation program | |
Vouillon | Lwt: a cooperative thread library | |
US11599478B2 (en) | Reduced instructions to generate global variable addresses | |
JPH11327918A (ja) | 動的変換システム | |
Strumpen | Compiler technology for portable checkpoints | |
JP2010140233A (ja) | エミュレーションシステム及びエミュレーション方法 | |
JP2817786B2 (ja) | シミュレーション装置及びシミュレーション方法 | |
US20160011889A1 (en) | Simulation method and storage medium | |
JP2008250838A (ja) | ソフトウェア生成装置、方法、およびプログラム | |
Ottlik et al. | Context-sensitive timing automata for fast source level simulation | |
WO2022035476A1 (en) | Representing asynchronous state machine in intermediate code | |
US8762973B2 (en) | Information processing apparatus, method of controlling information processing apparatus, and program for executing intermediate code instructions | |
CN111324948A (zh) | 模拟方法及模拟系统 | |
CN112445587A (zh) | 一种任务处理的方法以及任务处理装置 | |
CN110928558B (zh) | 安装程序的方法、嵌入式系统,以及生成附加信息的方法 | |
Zhai et al. | Design and optimization of a big Data computing framework based on CPU/GPU cluster | |
Chen et al. | A Dynamic Instrumentation Technology for IoT Devices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111104 |
|
A977 | Report on retrieval |
Effective date: 20130321 Free format text: JAPANESE INTERMEDIATE CODE: A971007 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130419 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20131127 |