(57)【要約】【課題】アドレス計算例外の発生の有無を検出する例外チェックに要する処理を削減し、高速にアドレス計算を行う。【解決手段】プログラム制御部は、エミュレーション対象アーキテクチャのアドレスを、上位アドレスと下位アドレスとの間に１ビットのＣビットを配置したアドレスに変換した上でアドレス計算を行い、アドレス計算後のアドレスがＴＬＢにエントリされているか判定する。アドレス計算後のアドレスがＴＬＢにエントリされていない場合はＴＬＢフォルトハンドラに移行し、ＴＬＢ制御部が、Ｃビットの値に基づいてアドレス計算において上位アドレスからの桁下がりまたは上位アドレスへの桁上がりが発生したか否かを検出する。桁下がりまたは桁上がりが発生していれば、アドレス計算例外処理ルーチンに移行し、発生していなければ、アドレス計算後のアドレスについてＴＬＢ登録を行う。【選択図】図２
2006252343.tif 000002
【特許請求の範囲】
【請求項１】
実アーキテクチャ上でエミュレーション対象アーキテクチャのエミュレーションを行うエミュレータであって、
エミュレーション対象アーキテクチャアドレス形式のアドレスを、当該アドレスの上位アドレスが格納されたビット列と下位アドレスが格納されたビット列との間に１ビットの第１ビットを配置した実アーキテクチャアドレス形式に変換し、実アーキテクチャアドレス形式のアドレスに所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスがＴＬＢにエントリされているか判定するプログラム制御部と、
アドレス計算後のアドレスがＴＬＢにエントリされていない場合、前記第１ビットの値に基づいて、アドレス計算において上位アドレスから下位アドレスへの桁下がりまたは下位アドレスから上位アドレスへの桁上がりが発生したか否かを検出するＴＬＢ制御部とを有する、エミュレータ。
【請求項２】
前記ＴＬＢ制御部は、アドレス計算において桁下がりまたは桁上がりが発生していない場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスと、当該アドレスを変換した実アーキテクチャ物理アドレス形式のアドレスとを、両者のアドレスの下位アドレスを０にリセットした上でアドレス変換情報としてＴＬＢに登録し、
前記プログラム制御部は、アドレス計算後のアドレスがＴＬＢにエントリされている場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスを、ＴＬＢのアドレス変換情報に基づいて実アーキテクチャ物理アドレス形式に変換する、請求項１に記載のエミュレータ。
【請求項３】
前記プログラム制御部は、実アーキテクチャアドレス形式への変換に際して、当該実アーキテクチャアドレス形式のアドレスに、上位アドレスが格納されたビット列のさらに上位にエミュレーション対象アーキテクチャアドレス形式の種別を識別する識別子が格納されるビット列をさらに配置するとともに、識別子が格納されるビット列と上位アドレスが格納されるビット列との間に１ビットの第２ビットをさらに配置し、
前記ＴＬＢ制御部は、前記識別子に基づいてエミュレーション対象アーキテクチャアドレス形式の種別を判定し、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出するために前記第１ビットの値をチェックするか否かを判定し、チェックすると判定した場合に前記第１ビットの値に基づいてアドレス計算において桁下がりまたは桁上がりが発生したか否かを検出する、請求項１または２に記載のエミュレータ。
【請求項４】
実アーキテクチャ上でエミュレーション対象アーキテクチャのエミュレーションを行うエミュレータにおいて、エミュレーション時のアドレス計算で上位アドレスから下位アドレスへの桁下がりまたは下位アドレスから上位アドレスへの桁上がりを示すアドレス計算例外が発生したことを検出するアドレス計算例外検出方法であって、
エミュレーション対象アーキテクチャアドレス形式のアドレスを、当該アドレスの上位アドレスが格納されたビット列と下位アドレスが格納されたビット列との間に１ビットの第１ビットを配置した実アーキテクチャアドレス形式に変換し、実アーキテクチャアドレス形式のアドレスに所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスがＴＬＢにエントリされているか判定する第１のステップと、
アドレス計算後のアドレスがＴＬＢにエントリされていない場合、前記第１ビットの値に基づいて、アドレス計算において前記アドレス計算例外が発生したか否かを検出する第２のステップとを有する、アドレス計算例外検出方法。
【請求項５】
前記第２のステップでは、アドレス計算において桁下がりまたは桁上がりが発生していない場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスと、当該アドレスを変換した実アーキテクチャ物理アドレス形式のアドレスとを、両者のアドレスの下位アドレスを０にリセットした上でアドレス変換情報としてＴＬＢに登録し、
前記第１のステップでは、アドレス計算後のアドレスがＴＬＢにエントリされている場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスを、ＴＬＢのアドレス変換情報に基づいて実アーキテクチャ物理アドレス形式に変換する、請求項４に記載のアドレス計算例外検出方法。
【請求項６】
前記第１のステップでは、実アーキテクチャアドレス形式への変換に際して、当該実アーキテクチャアドレス形式のアドレスに、上位アドレスが格納されたビット列のさらに上位にエミュレーション対象アーキテクチャアドレス形式の種別を識別する識別子が格納されるビット列をさらに配置するとともに、識別子が格納されるビット列と上位アドレスが格納されるビット列との間に１ビットの第２ビットをさらに配置し、
前記第２のステップでは、前記識別子に基づいてエミュレーション対象アーキテクチャアドレス形式の種別を判定し、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出するために前記第１ビットの値をチェックするか否かを判定し、チェックすると判定した場合に前記第１ビットの値に基づいてアドレス計算において前記アドレス計算例外が発生したか否かを検出する、請求項４または５に記載のアドレス計算例外検出方法。
【請求項７】
実アーキテクチャ上でエミュレーション対象アーキテクチャのエミュレーションを行うエミュレータに、
エミュレーション対象アーキテクチャアドレス形式のアドレスを、当該アドレスの上位アドレスが格納されたビット列と下位アドレスが格納されたビット列との間に１ビットの第１ビットを配置した実アーキテクチャアドレス形式に変換し、実アーキテクチャアドレス形式のアドレスに所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスがＴＬＢにエントリされているか判定する第１のステップと、
アドレス計算後のアドレスがＴＬＢにエントリされていない場合、前記第１ビットの値に基づいて、アドレス計算において上位アドレスから下位アドレスへの桁下がりまたは下位アドレスから上位アドレスへの桁上がりが発生したか否かを検出する第１のステップとを実行させる、プログラム。
【請求項８】
前記第２のステップでは、アドレス計算において桁下がりまたは桁上がりが発生していない場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスと、当該アドレスを変換した実アーキテクチャ物理アドレス形式のアドレスとを、両者のアドレスの下位アドレスを０にリセットした上でアドレス変換情報としてＴＬＢに登録し、
前記第１のステップでは、アドレス計算後のアドレスがＴＬＢにエントリされている場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスを、ＴＬＢのアドレス変換情報に基づいて実アーキテクチャ物理アドレス形式に変換する、請求項７に記載のプログラム。
【請求項９】
前記第１のステップでは、実アーキテクチャアドレス形式への変換に際して、当該実アーキテクチャアドレス形式のアドレスに、上位アドレスが格納されたビット列のさらに上位にエミュレーション対象アーキテクチャアドレス形式の種別を識別する識別子が格納されるビット列をさらに配置するとともに、識別子が格納されるビット列と上位アドレスが格納されるビット列との間に１ビットの第２ビットをさらに配置し、
前記第２のステップでは、前記識別子に基づいてエミュレーション対象アーキテクチャアドレス形式の種別を判定し、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出するために前記第１ビットの値をチェックするか否かを判定し、チェックすると判定した場合に前記第１ビットの値に基づいてアドレス計算において桁下がりまたは桁上がりが発生したか否かを検出する、請求項７または８に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エミュレータ、エミュレータにおけるアドレス計算例外検出方法、プログラムに関する。
【背景技術】
【０００２】
エミュレーションでは、あるアーキテクチャ（以下、エミュレーション対象アーキテクチャと称する）上で動作していたソフトウェアを、異なるアーキテクチャ（以下、実アーキテクチャと称する）上で動作させる。
【０００３】
実アーキテクチャにおいては、エミュレーションを行う場合、エミュレーション対象アーキテクチャのアドレスを実アーキテクチャの物理アドレスへ変換するアドレス計算を行う。そして、アドレス計算後の実アーキテクチャの物理アドレスに相当する主記憶装置の物理アドレスにアクセスし、上記ソフトウェアを実アーキテクチャ上で動作させるための各種データの読み書きを行う。
【０００４】
ところで、エミュレーション対象アーキテクチャのアドレスは、上位アドレスと下位アドレスとで構成されている。実アーキテクチャにおいては、上記のアドレス計算において、エミュレーション対象アーキテクチャのアドレスに所定のアドレス値を加算または減算する。その結果、下位アドレスから上位アドレスへの桁上がりが発生する場合があるが、この場合をアドレス計算例外が発生したと定義する。同様に、上位アドレスから下位アドレスへの桁下がりが発生した場合もアドレス計算例外が発生したと定義する。
【０００５】
また、実アーキテクチャにおいては、上記のアドレス計算の過程でアドレス計算例外の発生の有無を検出する例外チェックを行う必要があり、例えば、実アーキテクチャにおける例外チェックは、エミュレーション制御プログラムに従って行われる。この種のアドレス例外検出方法の一例は、特許文献１に開示されている。
【特許文献１】特開平７−６０９５号公報（第２頁、段落［０００７］）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のアドレス例外検出方法においては、アドレス計算を行う毎に、アドレス計算前後のアドレスを比較し、アドレス例外が発生したか否かの例外チェックを行っていた。そのため、アドレス計算を行ってから主記憶装置にアクセスするまでのステップ数が多くなることによりオーバーヘッドがきわめて大きくなり、エミュレーション制御プログラムの実行速度を低下させるため、実用的な方法ではなかった。
【０００７】
本発明の目的は、アドレス計算例外の発生の有無を検出する例外チェックに要する処理を削減し、高速にアドレス計算を行うことができるエミュレータ、エミュレータにおけるアドレス計算例外検出方法、プログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本発明は、
実アーキテクチャ上でエミュレーション対象アーキテクチャのエミュレーションを行うエミュレータであって、
エミュレーション対象アーキテクチャアドレス形式のアドレスを、当該アドレスの上位アドレスが格納されたビット列と下位アドレスが格納されたビット列との間に１ビットの第１ビットを配置した実アーキテクチャアドレス形式に変換し、実アーキテクチャアドレス形式のアドレスに所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスがＴＬＢにエントリされているか判定するプログラム制御部と、
アドレス計算後のアドレスがＴＬＢにエントリされていない場合、前記第１ビットの値に基づいて、アドレス計算において上位アドレスから下位アドレスへの桁下がりまたは下位アドレスから上位アドレスへの桁上がりが発生したか否かを検出するＴＬＢ制御部とを有することを特徴とするものである。
【０００９】
この構成によれば、アドレス計算毎に、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出する例外チェックを行わずに、アドレス計算後のアドレスによるＴＬＢフォルトが発生した時点で例外チェックを行うため、ＴＬＢヒットした場合には例外チェック処理を行う必要がなくなる。それにより、例外チェックにかかる処理を削減することができ、高速にアドレス計算ができる。また、ＴＬＢフォルトが発生した時点で例外チェックを行うため、例外チェックのためのコーディング量を削減することもできる。
【００１０】
また、前記ＴＬＢ制御部は、アドレス計算において桁下がりまたは桁上がりが発生していない場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスと、当該アドレスを変換した実アーキテクチャ物理アドレス形式のアドレスとを、両者のアドレスの下位アドレスを０にリセットした上でアドレス変換情報としてＴＬＢに登録し、
前記プログラム制御部は、アドレス計算後のアドレスがＴＬＢにエントリされている場合、アドレス計算後の実アーキテクチャアドレス形式のアドレスを、ＴＬＢのアドレス変換情報に基づいて実アーキテクチャ物理アドレス形式に変換することとしても良い。
【００１１】
この構成によれば、上位アドレスが共通する同一ページ内のアドレス毎にＴＬＢへのアドレス変換情報の登録を行わなくても、同一ページ内のアドレスについてＴＬＢへの登録を１回だけ行えば、以降、同一ページ内の他アドレスについてもＴＬＢヒットになるため、例外チェックが不要となる。
【００１２】
また、前記プログラム制御部は、実アーキテクチャアドレス形式への変換に際して、当該実アーキテクチャアドレス形式のアドレスに、上位アドレスが格納されたビット列のさらに上位にエミュレーション対象アーキテクチャアドレス形式の種別を識別する識別子が格納されるビット列をさらに配置するとともに、識別子が格納されるビット列と上位アドレスが格納されるビット列との間に１ビットの第２ビットをさらに配置し、
前記ＴＬＢ制御部は、前記識別子に基づいてエミュレーション対象アーキテクチャアドレス形式の種別を判定し、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出するために前記第１ビットの値をチェックするか否かを判定し、チェックすると判定した場合に前記第１ビットの値に基づいてアドレス計算において桁下がりまたは桁上がりが発生したか否かを検出することとしても良い。
【００１３】
この構成によれば、アドレス計算を行っても、エミュレーション対象アーキテクチャアドレス形式の種別を識別するための識別子の値が第２ビットの存在により変更されないアドレス形式になっている。つまり、例えば、アドレス計算時に減算を行った結果がマイナス値になったとしても、その影響を受けて変更されるのは第２ビットのみで、識別子の値は変更されない。よって、エミュレーション対象アーキテクチャアドレス形式の種別の判定およびアドレス計算による桁上がり、桁下がりの発生の検出を正しく行うことが可能となる。
【発明の効果】
【００１４】
上記のように構成された本発明によれば、アドレス計算毎に、アドレス計算において桁下がりまたは桁上がりが発生したか否かを検出する例外チェックを行わずに、アドレス計算後のアドレスでのＴＬＢフォルトが発生した時点で例外チェックを行うため、アドレス計算例外の発生の有無を検出する処理を削減することができ、それにより高速にアドレス計算を行うことができるという効果が得られる。
【発明を実施するための最良の形態】
【００１５】
以下に、本発明を実施するための最良の形態について図面を参照して説明する。
【００１６】
（第１の実施の形態）
図１を参照すると、本発明のエミュレータは、実アーキテクチャ上で、エミュレーション対象アーキテクチャのエミュレーションを行うものであり、実アーキテクチャ側に設けられている。このエミュレータは、中央演算処理装置（プロセッサ）１０と、主記憶制御装置１１と、主記憶装置１２とから構成される。
【００１７】
主記憶装置１２は、エミュレーション対象アーキテクチャ上で動作していたソフトウェアを実アーキテクチャ上で動作させるための各種データが読み書きされるエミュレーション対象アーキテクチャ用主記憶エリア１５と、エミュレーション制御プログラムが格納されるエミュレーション制御プログラム格納エリア１４と、中央演算処理装置１０によるエミュレーション処理用のプロセッサ制御エリア１３とに分割されている。なお、エミュレーション対象アーキテクチャ用主記憶エリア１５は、ベースアドレス１を下限アドレスとしている。
【００１８】
中央演算処理装置１０は、プログラム制御部１０１と、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ−ａｓｉｄｅ  Ｂｕｆｆｅｒ）制御部１０２とから構成される。この中央演算処理装置１０は、主記憶制御装置１１を介して主記憶装置１２内のプロセッサ制御エリア１３およびエミュレーション制御プログラム格納エリア１４にアクセスし、プロセッサ制御エリア１３上でエミュレーション制御プログラムを実行し、エミュレーション対象アーキテクチャのエミュレーションを行う。
【００１９】
なお、ＴＬＢ制御部１０２は、ＴＬＢ１０３を備えており、エミュレーションの過程でＴＬＢフォルトが発生した場合に、割り込みハンドラである後述のＴＬＢフォルトハンドラを実行する。これ以外の処理はプログラム制御部１０１にて実行される。
【００２０】
以下、本実施形態のアドレス計算例外検出方法について、図２および図３を参照して説明する。なお、図２および図３の各ステップの処理は、中央演算処理装置１０内のプログラム制御部１０１およびＴＬＢ制御部１０２が、主記憶制御装置１１を介して主記憶装置１２にアクセスし、エミュレーション制御プログラム格納エリア１４に格納されたエミュレーション制御プログラムにしたがって実行される処理である。
【００２１】
図２を参照すると、まず、プログラム制御部１０１は、エミュレーション対象アーキテクチャのアドレスＡを取得する（ステップ２０１）。ここで取得されたアドレスＡの形式は、エミュレーション対象アーキテクチャアドレス形式２１１で示されるように、上位アドレスのビット列と下位アドレスのビット列とから構成されている。
【００２２】
次に、プログラム制御部１０１は、アドレスＡを実アーキテクチャアドレス形式のアドレスに変換する（ステップ２０２）。ここで変換されたアドレスＡの実アーキテクチャアドレス形式は、実アーキテクチャアドレス形式２１２で示されるように、上位アドレスのビット列と下位アドレスのビット列との間に、第１ビットである１ビットのＣビットを配置した構成になっている。なお、ステップ２０２では、Ｃビットには０を設定する。
【００２３】
次に、プログラム制御部１０１は、アドレスＡに対して所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスをアドレスＢとする（ステップ２０３）。なお、アドレス計算において加算または減算のどちらを実行するかはエミュレーション制御プログラムの内容に依存する。ここでのアドレス計算の前提条件としては、アドレスＡに対して加算または減算するアドレス値が、アドレスＡの下位アドレスのビット幅以内の値である必要がある。アドレスＡに対する加算の結果、上位アドレスへの桁上がりが発生した場合、Ｃビットは１となり、アドレスＡに対する減算の結果、上位アドレスからの桁下がりが発生した場合も、Ｃビットが１となる。桁上がり、桁下がりが発生しない場合は、Ｃビットは０のままである。
【００２４】
次に、プログラム制御部１０１は、アドレスＢでエミュレーション対象アーキテクチャ用主記憶エリア１５にアクセスするために、アドレスＢでＴＬＢ１０３を索引し、アドレスＢがエントリされていなければ、ＴＬＢフォルトが発生し（ステップ２０４）、ステップ２０５に移行してＴＬＢフォルトハンドラが実行される（ステップ２０５）。ここでは、ＴＬＢ１０３にアドレスＢがエントリされていないため、ＴＬＢフォルトとなる。
【００２５】
図３を参照すると、ＴＬＢフォルトハンドラにおいては、まず、ＴＬＢ制御部１０２は、アドレスＢのＣビットをチェックする（ステップ３０１）。Ｃビットが１であれば、アドレス計算例外が発生したと判断して例外処理ルーチンへ移行する（ステップ３０２）。一方、Ｃビットが０であれば、アドレス計算例外の発生なしと判断し、アドレスＢを実アーキテクチャ物理アドレス形式２１３に変換して実アーキテクチャ物理アドレスを生成し（ステップ３０３）、ＴＬＢ１０３にアドレスＢのアドレス変換情報を登録し（ステップ３０４）、ＴＬＢフォルトハンドラからステップ２０４の処理へ戻る。
【００２６】
なお、ステップ３０３でＴＬＢ１０３に登録されるアドレス変換情報は、アドレスＢのアドレス変換前のアドレス（実アーキテクチャアドレス形式２１２）とアドレスＢのアドレス変換後のアドレス（実アーキテクチャ物理アドレス形式２１３）とである。ただし、アドレスＢのアドレス変換前後のいずれのアドレスも、下位アドレスを０にリセットした上で登録を行う。すなわち、ＴＬＢ１０３には、上位アドレスが共通するページ単位でアドレス変換情報を登録するため、以降、同一ページ内のアドレスでＴＬＢ１０３を索引した場合にはＴＬＢヒットとなる。
【００２７】
再度図２を参照すると、プログラム制御部１０１は、ステップ２０４において、アドレスＢでＴＬＢ１０３を再度索引する。ここでは、ステップ３０４でＴＬＢ１０３にアドレスＢのアドレス変換情報が登録されているため、ＴＬＢヒットとなる。そのため、ＴＬＢ１０３のアドレス変換情報に従って、アドレスＢから実アーキテクチャ物理アドレス形式２１３の実アーキテクチャ物理アドレスを生成し、エミュレーション対象アーキテクチャ用主記憶エリア１５の該当する物理アドレス部分にアクセスする（ステップ２０６）。
【００２８】
ここで、エミュレーション制御プログラム格納エリア１４に記憶されたエミュレーション制御プログラムには、以降も、ステップ２０３〜２０６と同様の処理を繰り返し行うことがプログラミングされているものとする。
【００２９】
そのため、プログラム制御部１０１は、続いて、アドレスＢに対して加算または減算によるアドレス計算を行って、アドレス計算後のアドレスをアドレスＣとし（ステップ２０７）、アドレスＣでＴＬＢ１０３を索引し、ＴＬＢフォルトが発生したか判定する（ステップ２０８）。ここで、アドレスＣは、アドレスＢと上位アドレスが共通する同一ページ内のアドレスであるが、アドレスＢのアドレス変換情報はステップ３０４でＴＬＢ１０３に登録されているため、ステップ２０８ではＴＬＢヒットになる。よって、ここでは、ＴＬＢフォルトハンドラ（ステップ２０９）には移行せずに、エミュレーション対象アーキテクチャ用主記憶エリア１５におけるアドレスＣに基づく実アーキテクチャ物理アドレスの該当部分へのアクセスが行われる（ステップ２１０）。
【００３０】
従って、同一ページ内のアドレスでエミュレーション対象アーキテクチャ用主記憶エリア１５へのアクセスを行う場合、同一ページ内のアドレス毎にＴＬＢ１０３への登録を行う必要はなく、同一ページ内のアドレスについてＴＬＢ１０３への登録を１回だけ行えば、以降、アドレス計算を行ってからＴＬＢ１０３を索引すると、ＴＬＢヒットになるため、アドレス計算例外の発生の有無を検出する例外チェックが不要となる。
【００３１】
上述したように本実施形態においては、ステップ２０３，２０７でアドレス計算を行う時には例外チェックを行わず、ＴＬＢフォルトが発生した時点でＴＬＢフォルトハンドラ内にて例外チェックを行うため、例外チェックによる性能低下を削減でき、高速にアドレス計算を行うことができるという効果が得られる。
【００３２】
また、ＴＬＢフォルトハンドラのみでチェックを行うため、コーディング量を削減できるという効果も得られる。
【００３３】
（第２の実施形態）
本実施形態は、エミュレータの構成自体は図１に示した第１の実施形態と同様であるが、実アーキテクチャアドレス形式が第１の実施形態とは異なる。
【００３４】
以下、本実施形態のアドレス計算例外検出方法について、図４および図５を参照して説明する。なお、図４および図５の各ステップの処理は、中央演算処理装置１０内のプログラム制御部１０１およびＴＬＢ制御部１０２が、主記憶制御装置１１を介して主記憶装置１２にアクセスし、エミュレーション制御プログラム格納エリア１４に格納されたエミュレーション制御プログラムにしたがって実行される処理である。
【００３５】
図４を参照すると、まず、図２に示したステップ２０１と同様のステップ４０１において、エミュレーション対象アーキテクチャのアドレスＡが取得される。ここで取得されたアドレスＡの形式は、エミュレーション対象アーキテクチャアドレス形式４１１で示されるように、図２に示したエミュレーション対象アーキテクチャアドレス形式２１１と同様である。
【００３６】
次に、プログラム制御部１０１は、アドレスＡを実アーキテクチャアドレス形式のアドレスに変換する（ステップ４０２）。ここで変換されたアドレスＡの実アーキテクチャアドレス形式は、実アーキテクチャアドレス形式４１２で示されるように、図２と同様の上位アドレス、Ｃビット、および下位アドレスに加えて、上位アドレスが格納されたビット列の上位に識別子が格納されるビット列である識別子フィールドを追加して配置するとともに、識別子フィールドと上位アドレスが格納されるビット列との間に第２ビットである１ビットのＧビットを追加して配置している。識別子は、エミュレーション対象アーキテクチャの主記憶アクセス種別が複数存在する場合において、主記憶アクセス種別を識別するための識別子である。主記憶アクセス種別とは、言い換えれば、エミュレーション対象アーキテクチャアドレス形式の種別のことである。図４では、エミュレーション対象アーキテクチャアドレス形式を、エミュレーション対象アーキテクチャアドレス形式４１１で示されるような絶対アドレス形式としているが、これ以外にも、実効アドレス形式、システム名アクセスアドレス形式などがある。Ｇビットは、次段のステップ４０３のアドレス計算において識別子の内容が変更されないために設けたものである。なお、ステップ４０２では、Ｃビットには０を設定し、Ｇビットには１を設定する。
【００３７】
次に、プログラム制御部１０１は、アドレスＡに対して所定のアドレス値を加算または減算するアドレス計算を行い、アドレス計算後のアドレスをアドレスＢとする（ステップ４０３）。ここでのアドレス計算において加算または減算するアドレス値の前提条件は、図２のステップ２０３と同様であり、アドレス計算において桁上がりまたは桁下がりが発生すると、Ｃビットが１となる。ここで、アドレスＡからアドレス値を減算した場合に、アドレス計算結果はマイナス値となることがある（例えば、アドレスＡの上位アドレスおよび下位アドレスが共に０で、減算するアドレス値が１である場合）。アドレス計算結果がマイナス値になった場合、Ｇビットが存在しなければ、識別子フィールドの内容が変更されてしまう。しかし、Ｇビットに１が設定されているため、アドレス計算結果がマイナス値となってもＧビットが０になるだけで、識別子フィールドの内容は変更されない。
【００３８】
次に、図２に示したステップ２０４と同様のステップ４０４において、アドレスＢでＴＬＢ１０３が索引され、ＴＬＢフォルトが発生したか判定される（ステップ４０４）。ここでは、ＴＬＢ１０３にアドレスＢがエントリされていないため、ＴＬＢフォルトとなり、ステップ４０５のＴＬＢフォルトハンドラに移行する。
【００３９】
図５を参照すると、ＴＬＢフォルトハンドラにおいては、まず、ＴＬＢ制御部１０２は、識別子に基づいて主記憶アクセス種別を判定し、アドレス計算例外が発生したか否かを検出するためにＣビットをチェックするか否かを判定する（ステップ５０１）。ここでは、主記憶アクセスの種別、すなわちエミュレーション対象アーキテクチャアドレス形式の種別が、変換後に実アーキテクチャアドレス形式４１２の形式になる種別であるため、アドレスＢのＣビットをチェックする（ステップ５０２）。そして、Ｃビットが１であれば、アドレス計算例外が発生したと判断して例外処理ルーチンへ移行する（ステップ５０３）。本実施形態においては、上述したように、アドレス計算によっても識別子フィールドの内容はＧビットの存在により変更されないため、ステップ５０１で識別子を正しく判定することができる。さらに、Ｃビットが１となるため、ステップ５０２でアドレス計算例外の発生を正しく検出することができる。一方、Ｃビットが０であれば、図３に示したステップ３０３，３０４と同様のステップ５０４，５０５の処理が行われた後、ＴＬＢフォルトハンドラからステップ４０４の処理へ戻る。
【００４０】
再度図４を参照すると、以降は、図２に示したステップ２０４〜２１０と同様のステップ４０４〜４１０の処理が行われる。
【００４１】
上述したように本実施形態においては、アドレス計算を行っても、主記憶アクセス種別を識別するための識別子の値がＧビットの存在により変更されないアドレス形式になっているため、エミュレーション対象アーキテクチャの主記憶アクセス種別が複数存在していても、主記憶アクセス種別の判定およびアドレス計算例外の発生の検出を正しく行うことが可能となる。
【００４２】
なお、Ｃビットの位置は、上位アドレスと下位アドレスとの間にあることが必須である。ただし、下位アドレスのビット幅は、主記憶アクセスの種別、すなわちエミュレーション対象アドレスに応じて異なるため、Ｃビットの位置は、エミュレーション対象アドレスの下位アドレスのビット幅に応じて変更することが可能である。それにより、サイズの異なるセグメントへのセグメント境界外が発生した時のアクセス計算例外の発生検出にも適用可能である。ただし、アドレス計算時に加算または減算するアドレス値は、上述したように、Ｃビット位置を越えた値、すなわち下位アドレスのビット幅を超える値を使用できない。これは、アドレス計算例外の発生を検出しなければならないケースにおいて、Ｃビットが０という状態が発生してしまうことを防止するためである。
【図面の簡単な説明】
【００４３】
【図１】本発明のエミュレータの構成を示す図である。
【図２】本発明の第１の実施形態によるアドレス計算例外検出方法を説明する図である。
【図３】本発明の第１の実施形態によるアドレス計算例外検出方法において、ＴＬＢフォルト発生時に割り込まれるＴＬＢフォルトハンドラを説明する図である。
【図４】本発明の第２の実施形態によるアドレス計算例外検出方法を説明する図である。
【図５】本発明の第２の実施形態によるアドレス計算例外検出方法において、ＴＬＢフォルト発生時に割り込まれるＴＬＢフォルトハンドラを説明する図である。
【符号の説明】
【００４４】
１０    中央演算処理装置（プロセッサ）
１１    主記憶制御装置
１２    主記憶装置
１３    プロセッサ制御エリア
１４    エミュレーション制御プログラム格納エリア
１５    エミュレーション対象アーキテクチャ用主記憶エリア
１０１    プログラム制御部
１０２    ＴＬＢ制御部
１０３    ＴＬＢ
【図１】
2006252343.tif 000003
【図２】
2006252343.tif 000004
【図３】
2006252343.tif 000005
【図４】
2006252343.tif 000006
【図５】
2006252343.tif 000007