(57)【要約】【課題】エミュレーション実行中にプラットフォームマシン上で復旧不能なデータ破壊を伴う障害が発生した場合に、エミュレート側でデータの復旧を行い、システムダウンやリブートに至らずにエミュレーション処理の実行を継続することができるようにする。【解決手段】プラットフォームマシンの主記憶５０にターゲットマシンの主記憶に使うターゲットアドレス空間６２とそのコピーであるターゲットアドレス空間（コピー）６３とをマッピングする。ターゲットマシンのストア命令をエミュレートする際、双方のアドレス空間６２、６３に対して同じデータをストアする。そして、ターゲットアドレス空間６２で訂正不能障害が発生した際、コピー領域であるアドレス空間６３からアドレス空間６２にデータを書き戻してデータの復旧を行い、エミュレーション処理の実行を継続する。【選択図】  図１
2004252525.tif 000002
【特許請求の範囲】
【請求項１】
ターゲットマシンと異なるアーキテクチャのプラットフォームマシン上で動作し、前記プラットフォームマシンの主記憶の一部に確保された前記ターゲットマシンの主記憶に記憶された前記ターゲットマシンのプログラムをエミュレートするエミュレータにおいて、前記プラットフォームマシンの主記憶の他の部分に前記ターゲットマシンの主記憶のコピーである主記憶コピー領域を備え、前記ターゲットマシンのストア命令をエミュレートする際に前記ターゲットマシンの主記憶と前記主記憶コピー領域の両方に対して同じデータをストアすることを特徴とするエミュレータ。
【請求項２】
前記ターゲットマシンのロード命令をエミュレートする際には前記ターゲットマシンの主記憶と前記主記憶コピー領域のうち前記ターゲットマシンの主記憶からのみデータをロードすることを特徴とする請求項１記載のエミュレータ。
【請求項３】
前記ターゲットマシンのプログラムをエミュレートしている際、前記ターゲットマシンの主記憶のリード及びライト時に前記プラットフォームマシンでデータの訂正不能障害が検出された場合、前記主記憶コピー領域の対応するデータを、前記ターゲットマシンの主記憶における前記訂正不能障害が検出されたデータにかかるメモリアドレスに書き戻した後、前記訂正不能障害が検出された時点の命令から実行を再開することを特徴とする請求項２記載のエミュレータ。
【請求項４】
前記ターゲットマシンのロード命令をエミュレートする際には前記ターゲットマシンの主記憶と前記主記憶コピー領域の両方からデータをロードして両者を比較し、不一致を検出した場合にソフトウェアの処理を中断することを特徴とする請求項１記載のエミュレータ。
【請求項５】
ターゲットマシンと異なるアーキテクチャのプラットフォームマシンを構成するコンピュータを、前記プラットフォームマシンの主記憶の一部に確保された前記ターゲットマシンの主記憶に記憶された前記ターゲットマシンのプログラムをエミュレートするエミュレータとして機能させるプログラムであって、前記コンピュータを、前記ターゲットマシンのストア命令をエミュレートする際に、前記ターゲットマシンの主記憶と、前記プラットフォームマシンの主記憶の他の部分に設けられた前記ターゲットマシンの主記憶のコピー領域である主記憶コピー領域の両方に対して同じデータをストアする手段、前記ターゲットマシンのロード命令をエミュレートする際に、前記ターゲットマシンの主記憶と前記主記憶コピー領域のうち前記ターゲットマシンの主記憶からのみデータをロードする手段、前記ターゲットマシンのプログラムをエミュレートしている際、前記ターゲットマシンの主記憶のリード及びライト時に前記プラットフォームマシンでデータの訂正不能障害が検出された場合、前記主記憶コピー領域の対応するデータを、前記ターゲットマシンの主記憶における前記訂正不能障害が検出されたデータにかかるメモリアドレスに書き戻した後、前記訂正不能障害が検出された時点の命令から実行を再開させる手段、として機能させるプログラム。
【請求項６】
ターゲットマシンと異なるアーキテクチャのプラットフォームマシンを構成するコンピュータを、前記プラットフォームマシンの主記憶の一部に確保された前記ターゲットマシンの主記憶に記憶された前記ターゲットマシンのプログラムをエミュレートするエミュレータとして機能させるプログラムであって、前記コンピュータを、前記ターゲットマシンのストア命令をエミュレートする際に、前記ターゲットマシンの主記憶と、前記プラットフォームマシンの主記憶の他の部分に設けられた前記ターゲットマシンの主記憶のコピー領域である主記憶コピー領域の両方に対して同じデータをストアする手段、前記ターゲットマシンのロード命令をエミュレートする際に、前記ターゲットマシンの主記憶と前記主記憶コピー領域の両方からデータをロードして両者を比較し、不一致を検出した場合にソフトウェアの処理を中断する手段、として機能させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はエミュレータに関し、特にターゲットマシンと異なるアーキテクチャのプラットフォームマシン上で動作し、ターゲットマシンのプログラムをエミュレートするエミュレータに関する。
【０００２】
【従来の技術】
ターゲットマシンのプログラムをエミュレートするエミュレータには、特許文献１に記載されるようにハードウェアで実現するものと、ソフトウェアで実現するものとが存在するが、本発明は後者のソフトウェアで実現されるエミュレータに関する。この種のエミュレータの実装環境を図５に示す。エミュレータ１４は、プラットフォームマシンのプロセッサで実行されるソフトウェアであり、このエミュレータ１４によりターゲットマシンのオペレーティングシステム（ターゲットＯＳ）１３が実行され、このターゲットＯＳ１３上でさらにターゲットマシンのミドルウェア１２やアプリケーションプログラム１１が稼働する。ここで、ターゲットＯＳ１３、ミドルウェア１２およびアプリケーションプログラム１１は、プラットフォームマシンの主記憶上の一部に確保したターゲットマシンの主記憶領域に置かれる。
【０００３】
プラットフォームマシンのプロセッサは、プラットフォーム（ハードウェア）１８およびプロセッサ（ハードウェア）１７から構成されるハードウェアと、プロセッサファームウェア１６およびプラットフォームファームウェア１５から構成されるファームウェアとを含む。プラットフォーム（ハードウェア）１８は、メモリ、メモリコントローラ等のチップセット、ＰＣＩバスなどを含んで構成され、プロセッサ（ハードウェア）１７は、プラットフォーム（ハードウェア）１８に接続されるプロセッサＬＳＩに相当する。プロセッサファームウェア１６は、プロセッサＬＳＩに内蔵されるプロセッサ（ハードウェア）１７固有のファームウェア、プラットフォームファームウェア１５は、メモリの初期化などプラットフォーム（ハードウェア）１８全体の制御を行うファームウェアである。なお、プロセッサ（ハードウェア）１７としては任意のプロセッサＬＳＩを使用することができるが、例えば一例を挙げれば、インテル社のＩＰＦ（Ｉｔａｎｉｕｍ（登録商標）Ｐｒｏｃｅｓｓｏｒ  Ｆａｍｉｌｙ）を使用することができる。
【０００４】
図６は、エミュレータ１４がターゲットマシンの命令語をエミュレートする際の動作説明図である。図の上部から下に向かって順に参照して、まずターゲットマシンの命令語の取り出しを、命令カウンタ２１に格納されたアドレスから開始する。命令カウンタ２１は、プラットフォームのプロセッサのレジスタにマッピングされる。
【０００５】
ターゲットマシンのメモリ空間（論理アドレス）は、プラットフォームマシン上で独立したアドレス空間にマッピングされており、メモリ空間（絶対アドレス）は、プラットフォームマシンのメモリ空間（絶対アドレス）の一部分にマッピングされている。命令カウンタ２１で示されるターゲットマシンの命令語アドレス（論理アドレス）は、ＴＬＢ２２でプラットフォーム上の絶対アドレスへ変換された後、オペランドキャッシュ（Ｏ−Ｃａｃｈｅ）２３から命令語の取り出しに使われるが、ターゲットマシンの絶対アドレスは、プラットフォーム上にマッピングされたメモリ空間の先頭アドレスからのオフセットとなる。
【０００６】
このようにして取り出された命令語２４は、一例としてストア命令を挙げると図示したように先頭から命令コード（ＯＰ）、汎用レジスタ番号（ＧＲ）、ベースレジスタ番号（ＢＲ）、インデックスレジスタ番号（ＸＲ）、オフセットアドレス（Ｄ）が格納されている。取り出されたベースレジスタ番号（ＢＲ）とインデックスレジスタ番号（ＸＲ）から、レジスタの値を格納したテーブル２５、２６をそれぞれ参照し、演算器２７においてテーブル２５、２６から取り出された値とオフセットアドレス（Ｄ）との加算を行って、実効論理アドレスを得る。
【０００７】
続いて、得られた実効論理アドレスからＴＬＢ２２を参照してプラットフォーム上にマッピングされた絶対アドレスを求め、汎用レジスタ番号（ＧＲ）からレジスタの値を格納したテーブル２８を参照して得られたストアデータを、オペランドキャッシュ２３へ書き込む。
【０００８】
なお、ここで説明したＴＬＢ２２とオペランドキャッシュ２３は、命令実行中に命令取り出し時とストア時の２回使用されるため、図中には処理の流れに従って各々２個記載している。
【０００９】
図７は上記で一例として説明したストア命令のエミュレート時の処理フローの例である。ここでは、エミュレータのコードをターゲットマシンの命令語毎のモジュールに分割して実装する場合を想定している。つまり、ターゲットマシンの例えばストア命令に対応して、ストア命令をエミュレートするために必要なエミュレータの一連のコードが一つのモジュールとして予め用意されており、図７はそのモジュールによる処理例を示している。また、命令語の取り出しは前半の命令コード（つまりＯＰコード）の取り出し（ステップ３９）と後半の残り部分の取り出し（ステップ３１）に分けて実行するが、処理速度を上げるために、モジュールの最後で次の命令の前半の命令コードを取り出すようにしている。従って、図７の処理フローでは、命令語の後半部分の取り出しから処理が始まっている。
【００１０】
図７を参照すると、まず、命令語の後半を取り出し（ステップ３１）、その命令語からベースレジスタ番号（ＢＲ）、インデックスレジスタ番号（ＸＲ）を取り出し、それぞれＢＲ・ＸＲの値が格納されたテーブル２５、２６を参照して値を取り出し（ステップ３２）、オフセット値（Ｄ）を加算して論理アドレスを求める（ステップ３３）。
【００１１】
この後、論理アドレス生成時の例外チェックを行う（ステップ３４）。ここで検出される例外は、ターゲットマシンのアーキテクチャによって相違するが、例えばアドレス加算時の回り込みなどである。例外が検出された場合は、例外処理を行う例外ハンドラへ移入して例外動作に入る（ステップ４０）。
【００１２】
一方で例外が検出されなければ、続いて論理アドレスから絶対アドレスへの変換を行う（ステップ３５）。プロセッサハードウェアでは、この処理はＴＬＢを用いて行われる部分だが、エミュレーションでは通常この変換もソフトウェアで行うことになる。
【００１３】
続くステップでは、アドレス変換時の例外チェックを行う（ステップ３６）。ハードウェアのＴＬＢではアドレス変換と同時にリングによるメモリ保護のチェックや、ページの読み出し、書き込み保護のチェックを行うが、これに相当するチェックである。例外が検出された場合は、例外ハンドラへ処理が移り（ステップ４０）、例外が検出されなければ続くステップ３７へ進む。
【００１４】
次のステップ３７では、汎用レジスタ番号（ＧＲ）によるテーブル２８の参照によりＧＲの値を取得し、この値をストアデータとして先に変換した絶対アドレスの番地へストアする。
【００１５】
ストアが終わると、次の命令の実行に移るため、命令カウンタを更新し（ステップ３８）、次命令の命令コード部分の取り出しを行う（ステップ３９）。次命令を実行するためのエミュレーションコード（モジュール）への分岐は、ここで取り出した命令コードの値によって分岐先が決定される。
【００１６】
【特許文献１】
特開２００１−３４４９８号公報
【００１７】
【発明が解決しようとする課題】
次にプラットフォームのハードウェアに障害が発生した際の従来における動作を図５を参照して説明する。
【００１８】
プラットフォームハードウェア１８で例えば、主記憶上や主記憶とプロセッサとをつなぐバス上でＥＣＣ等のハードウェアによる自動訂正が不可能な障害を検出した場合、プラットフォームハードウェア１８は、プロセッサハードウェア１７に割り込み等の手段を用いて障害の通知を行う。通知を受けたプロセッサは、実行中のプログラムを一時中断し、プロセッサファームウェア１６の実行を開始する。また、プロセッサハードウェア１７の内部で障害を検出した場合でも同様に当該プロセッサはプロセッサファームウェア１６に割り込む。
【００１９】
プロセッサファームウェア１６は、検出された障害がプロセッサ内で訂正可能であれば訂正を試みる。訂正が可能なケースとしては、例えばプロセッサに内蔵されたストアスルーキャッシュの障害などが該当し、このケースでは障害を検出したデータブロックをキャッシュ上から破棄し、主記憶からデータを再取得する。訂正が成功すればプロセッサファームウェア１６の処理は終了し、中断していたプログラムの実行が再開される。
【００２０】
プロセッサファームウェア１６で訂正ができなかった場合または障害がプロセッサの外のプラットフォームハードウェア１８で検出されたものであれば、さらにプラットフォームファームウェア１５へ処理が渡される。プラットフォームファームウェア１５では、検出された障害が訂正可能であれば訂正を試みる。ファームウェアによる訂正が成功すればプラットフォームファームウェア１５の処理は終了し、一旦プロセッサファームウェア１６へ制御を経由した後、中断していたプログラムの実行が再開される。
【００２１】
ここで、プラットフォームファームウェア１５で訂正が出来ない障害の場合はさらにプラットフォームファームウェア１５からエミュレータ１４（一般にはオペレーティングシステム）へ制御を移し、障害からの復旧を試みる。しかしながら、このようなケースは例えば主記憶の読み出し時に主記憶上でＥＣＣ（エラー訂正コード）での自動訂正が不可能な障害が発生してデータが破壊された場合や、バスを通じてプロセッサから主記憶へデータを書き込んだり、読み出したりした際にバス上でＥＣＣでの自動訂正が不可能な障害が発生してデータが破壊された場合などが該当するため、このようなケースを救済するには当該のメモリ領域を使用しているプロセスを特定した上で破壊されたデータ領域を破棄できるかどうかを判断する、あるいはプロセスの再実行によりデータが復旧できるかを判断する等の複雑な処理が必要となる。このようなリカバリを行うことは、エミュレータには一般に非常に困難であり、特にエミュレータの場合はその上で稼働するオペレーティングシステムのプロセスの状態を把握することが出来ないため、バスやメモリの訂正不能障害が発生した場合は復旧が不可能である。このため、必ずシステムダウンに至ってしまい、可用性の点で問題があった。
【００２２】
また、高いデータインテグリティを要求されるミッションクリティカル領域のコンピュータシステムにおいては、メモリやＩ／Ｏデバイスからプロセッサまでのデータ転送路の中で障害が検出されない箇所が存在してはならないが、エミュレータがサポートするプラットフォームの各々の機種についてこれを検証することは現実的に不可能であるという問題もある。
【００２３】
本発明の第１の目的は、ターゲットマシンと異なるアーキテクチャのプラットフォームマシン上でターゲットマシンのプログラムをエミュレートするエミュレータにおいて、エミュレーション実行中にプラットフォームマシン上で復旧不能なデータ破壊を伴う障害が発生した場合に、エミュレート側でデータの復旧を行い、システムダウンやリブートに至らずにエミュレーション処理の実行を継続することができるようにすることにある。
【００２４】
本発明の第２の目的は、ターゲットマシンと異なるアーキテクチャのプラットフォームマシン上でターゲットマシンのプログラムをエミュレートするエミュレータにおいて、プラットフォームハードウェアの障害検出回路で検出できない障害をエミュレート側で検出して不正なエミュレーション処理が継続されることを防止することにある。
【００２５】
【課題を解決するための手段】
本発明のエミュレータは、ターゲットマシンと異なるアーキテクチャのプラットフォームマシン上で動作し、前記プラットフォームマシンの主記憶の一部に確保された前記ターゲットマシンの主記憶に記憶された前記ターゲットマシンのプログラムをエミュレートするエミュレータであり、前記プラットフォームマシンの主記憶の他の部分に前記ターゲットマシンの主記憶のコピーである主記憶コピー領域を備え、前記ターゲットマシンのストア命令をエミュレートする際に前記ターゲットマシンの主記憶と前記主記憶コピー領域の両方に対して同じデータをストアすることを基本とする。
【００２６】
そして、第１の発明にかかるエミュレータにあっては、前記ターゲットマシンのロード命令をエミュレートする際には前記ターゲットマシンの主記憶と前記主記憶コピー領域のうち前記ターゲットマシンの主記憶からのみデータをロードし、前記ターゲットマシンのプログラムをエミュレートしている際、前記ターゲットマシンの主記憶のリード及びライト時に前記プラットフォームマシンでデータの訂正不能障害が検出された場合、前記主記憶コピー領域の対応するデータを、前記ターゲットマシンの主記憶における前記訂正不能障害が検出されたデータにかかるメモリアドレスに書き戻した後、前記訂正不能障害が検出された時点の命令から実行を再開することを特徴とする。
【００２７】
また、第２の発明にかかるエミュレータにあっては、前記ターゲットマシンのロード命令をエミュレートする際には前記ターゲットマシンの主記憶と前記主記憶コピー領域の両方からデータをロードして両者を比較し、不一致を検出した場合にソフトウェアの処理を中断することを特徴とする。
【００２８】
【作用】
プラットフォームマシンの主記憶にターゲットマシンの主記憶とそのコピーである主記憶コピー領域を設け、ターゲットマシンのストア命令をエミュレートする際にターゲットマシンの主記憶と主記憶コピー領域の両方に対して同じデータをストアすることにより、訂正不能障害が発生した際にコピー領域からデータを書き戻すことができる。このため、エミュレート側でデータの復旧を行い、エミュレーション処理の実行を継続することができる。
【００２９】
また、ターゲットマシンのロード命令をエミュレートする際にターゲットマシンの主記憶と主記憶コピー領域の両方からデータをロードして両者を比較することにより、プラットフォームハードウェアの障害検出回路で検出できないような障害によるリードデータの破壊を検出することができる。このため、プラットフォームハードウェアの障害検出回路で検出できない障害を看過して、不正なエミュレーション処理が継続されるのが防止される。
【００３０】
【発明の第１の実施の形態】
次に本発明の第１の実施の形態にかかるエミュレータについて図面を参照して詳細に説明する。
【００３１】
本実施の形態にかかるエミュレータは、図５に示したエミュレータ１４と同じく、プラットフォームマシンのプロセッサで実行されるソフトウェアであり、プラットフォームマシンの主記憶上の一部に確保したターゲットマシンの主記憶領域に記憶されたターゲットマシンのオペレーティングシステムおよびミドルウェアやアプリケーションプログラムをエミュレートする。但し、従来のエミュレータと異なり、プラットフォームマシンの主記憶上にターゲットマシンの主記憶領域とは別にそのターゲットマシンの主記憶のコピーを記録する記憶領域を置き、ターゲットマシンのストア命令をエミュレートする際に主記憶領域と主記憶のコピー領域の両方に対し同じデータをストアし、ロード命令をエミュレートする際には主記憶領域のみからデータをロードする。
【００３２】
図１にプラットフォームマシンの主記憶上にターゲットマシン用の２つの領域を設定する例と本実施の形態にかかるエミュレータのストア命令のエミュレート時の処理フローを示す。
【００３３】
ターゲットマシンの絶対アドレス空間は、プラットフォームマシンの主記憶５０上の一部分にターゲットアドレス空間６２としてマッピングされ、この領域６２にターゲットマシンのオペレーティングシステムやアプリケーションプログラムを構成する命令コードやデータが格納される。また、この領域６２とは別に、この領域６２のコピーを格納する領域がターゲットアドレス空間（コピー）６３としてマッピングされている。ここで、ターゲットアドレス空間（コピー）６３の先頭アドレスは、ターゲットアドレス空間６２の先頭アドレス＋オフセットｄの位置に設定されている。
【００３４】
続いて本実施の形態の動作について説明する。以下では、基本的な命令としてストア命令とロード命令のみ説明するが、他の複雑な命令、例えばメモリアクセスを伴う演算命令やメモリ間のコピー命令なども同様に実現可能である。
【００３５】
まず図１を参照して、ターゲットマシンのストア命令をエミュレートする際の動作を説明する。
【００３６】
ストア命令の実行が開始されると、先に図７で説明した従来の技術と同様に、命令語の取り出しからオペランド書き込みまでが実行される（ステップ５１〜５７）。この間で例外が検出された場合に例外ハンドラへ移入して例外処理が行われる点も同様である（ステップ６１）。
【００３７】
ここで続くステップ５８において、ステップ５７でストアを実行したアドレスに対してオフセット値ｄを加算し、ターゲットアドレス空間（コピー）６３内のストアアドレスを求め、ステップ５７でストアしたものと同じデータをターゲットアドレス空間（コピー）に対してストアすることにより、ターゲットアドレス空間６２と同じ状態をターゲットアドレス空間（コピー）６３側にも生成する。
【００３８】
この後、続く命令カウンタの更新、次命令語の取り出し（ステップ５９〜６０）に関しては従来技術と同様である。
【００３９】
ここで、プラットフォームマシンのプロセッサとして、例えば前述したインテル社のＩＰＦのように複数の命令を同時に実行可能なプロセッサを使用する場合、図１におけるターゲットアドレス空間６２へのデータの書き込み（ステップ５７）と、ターゲットアドレス空間６３へのデータの書き込み（ステップ５８）とを同時に実行することにより、２度の書き込みよる処理速度の低下を防止することができる。
【００４０】
次に図２を参照して、ターゲットマシンのロード命令をエミュレートする際の動作について説明する。本実施の形態においては、ロード命令のエミュレート動作は従来技術によるロード命令のエミュレートと変わりがなく、以下のように進められる。
【００４１】
ロード命令の実行が開始されると、やはりストア命令の場合と同様に命令語の取り出しからメモリアクセス時の例外チェックまでのステップが実行される（ステップ７１〜７６）。この間で例外が検出された場合に例外ハンドラへ移入して例外処理が行われる点も同様である（ステップ６１）。
【００４２】
ここで続くステップ７７では、ステップ７５で得たターゲットアドレス空間６２中の絶対アドレスからデータをロードし、汎用レジスタＧＲへ格納する。
【００４３】
続く命令カウンタの更新、次命令の取り出し操作（ステップ７８、７９）はストア命令の場合と同様である。
【００４４】
続いて、エミュレーション実行中にプラットフォームハードウェアで障害が発生した場合の動作について、図３を参照しながら説明する。
【００４５】
まず、プラットフォームのハードウェアで障害が検出された場合（ステップ８１）を考えると、障害はＥＣＣなどのハードウェアによる自動訂正が可能な場合と、訂正不可能な場合に分類される（ステップ８２）。ハードウェアによる訂正が可能な障害であれば、障害が発生したデータは自動訂正されてソフトウェアの処理はそのまま継続される（ステップ８３）。
【００４６】
一方で自動訂正が不可能な障害であった場合、ハードウェアは割り込み等の手段を用いてプロセッサへ障害を通知し、プロセッサは実行中のソフトウェアからプロセッサファームウェアを起動する。プロセッサファームウェアはプロセッサ内に閉じた操作で障害が復旧可能であるかどうかを判定し、復旧可能であれば復旧処理を行い（ステップ８６）、その後ハードウェアに対してソフトウェア処理への復帰指示を与えて（ステップ８９）、障害が発生した命令からの実行を再開する（ステップ８５）。
【００４７】
ステップ８６にてプロセッサ内に閉じた復旧ができない障害だった場合は、障害処理はプラットフォームファームウェアに渡され、プラットフォームによる障害復旧が可能か否かを判断した後、復旧が可能であれば復旧処理を行い（ステップ８７）、その後同様にハードウェアに対してソフトウェア処理への復帰指示を与えて（ステップ８９）、障害が発生した命令からの実行を再開する（ステップ８５）。
【００４８】
ステップ８７にてプラットフォームでの障害の復旧ができない障害だった場合は、ファームウェアからエミュレータへ制御が移り、障害処理がエミュレータに委ねられる。このような障害のケースとしては、例えばメモリ読み出し時の多ビットエラーによる訂正不能障害や、バスエラーによる訂正不能障害などが挙げられる。
【００４９】
ステップ９０にて、障害からの復旧を委ねられたエミュレータは、まず障害が復旧可能な種類の障害かどうかを判定する。もしエミュレータでも復旧ができない種類の致命的な障害だった場合は、エミュレータはファームウェアに制御を戻し、ファームウェア制御によりシステムリブートに移行する（ステップ８８、８４）。
【００５０】
エミュレータで復旧可能な障害だった場合は、続くステップ９１へ進み、エミュレータは、ターゲットアドレス空間（コピー）６３から障害アドレスのデータのコピーを取り出して、ターゲットアドレス空間６２における障害アドレスへデータを書き戻す。そして、ファームウェアへ障害処理からの復旧指示を出してエミュレータは障害処理を終了する（ステップ９２）。続くステップは上記のファームウェアによる訂正が成功した場合と同様に、ハードウェアに対してソフトウェア処理への復帰指示を与えて障害が発生した命令からの実行を再開する（ステップ８９、８５）。
【００５１】
発生した訂正不能障害が、ターゲットアドレス空間６２のリード時に主記憶５０上で検出されたものである場合、障害の原因が間欠故障によるものであれば、ターゲットアドレス空間（コピー）６３の正常なデータをターゲットアドレス空間６２における障害発生メモリアドレス部分に書き戻すことで復旧でき、障害が発生した命令からソフトウェア処理を再開することで、エミュレート処理を正常に継続することができる。また、発生した訂正不能障害が、ターゲットアドレス空間６２のリード時に主記憶５０とプロセッサとをつなぐバス上で検出されたものである場合、ターゲットアドレス空間６２上のデータは正常である可能性はあるが、リードした誤ったデータがプロセッサのキャッシュに蓄積されてしまっている可能性があるため、ターゲットアドレス空間（コピー）６３の正常なデータをターゲットアドレス空間６２における障害発生メモリアドレス部分に書き戻し、障害が発生した命令からソフトウェア処理を再開することで、再度リード動作を行わせることができ、間欠障害であれば、エミュレート処理を正常に継続することができる。さらに、発生した訂正不能障害が、ターゲットアドレス空間６２のライト時に主記憶５０とプロセッサとをつなぐバス上で検出されたものである場合、ターゲットアドレス空間６２のデータが破壊されている可能性があるため、ターゲットアドレス空間（コピー）６３の正常なデータをターゲットアドレス空間６２における障害発生メモリアドレス部分に書き戻すことで復旧でき、障害が発生した命令からソフトウェア処理を再開することで、間欠障害であればエミュレート処理を正常に継続することができる。
【００５２】
以上説明したように、本実施の形態によれば、メモリ読み出し時の多ビットエラーによる訂正不能障害や、バスエラーによる訂正不能障害のような復旧不能なデータ破壊を伴う障害が発生した場合に、データの復旧を行い、システムダウンやリブートに至らずソフトウェアの実行、つまりターゲットマシンのプログラムのエミュレーションを継続することができる。
【００５３】
【発明の第２の実施の形態】
次に本発明の第２の実施の形態にかかるエミュレータについて図面を参照して詳細に説明する。
【００５４】
本実施の形態にかかるエミュレータは、図５に示したエミュレータ１４と同じく、プラットフォームマシンのプロセッサで実行されるソフトウェアであり、プラットフォームマシンの主記憶上の一部に確保したターゲットマシンの主記憶領域に記憶されたターゲットマシンのオペレーティングシステムおよびミドルウェアやアプリケーションプログラムをエミュレートする。但し、従来のエミュレータと異なり、プラットフォームマシンの主記憶上にターゲットマシンの主記憶領域とは別にそのターゲットマシンの主記憶のコピーを記録する記憶領域を置き、ターゲットマシンのストア命令をエミュレートする際に主記憶領域と主記憶のコピー領域の両方に対し同じデータをストアし、ロード命令をエミュレートする際には主記憶領域とコピー領域の両方からデータをロードした後、双方のデータを比較することによって、プラットフォームマシンのハードウェアの障害検出回路で検出されなかったデータ破壊を検出する。
【００５５】
図４にプラットフォームマシンの主記憶上にターゲットマシン用の２つの領域を設定する例と本実施の形態にかかるエミュレータのロード命令のエミュレート時の処理フローを示す。
【００５６】
ターゲットマシンの絶対アドレス空間は、プラットフォームマシンの主記憶５０上の一部分にターゲットアドレス空間６２としてマッピングされ、この領域６２にターゲットマシンのオペレーティングシステムやアプリケーションプログラムを構成する命令コードやデータが格納される。また、この領域６２とは別に、この領域６２のコピーを格納する領域がターゲットアドレス空間（コピー）６３としてマッピングされている。ここで、ターゲットアドレス空間（コピー）６３の先頭アドレスは、ターゲットアドレス空間６２の先頭アドレス＋オフセットｄの位置に設定されている。
【００５７】
続いて本実施の形態の動作について説明する。以下では、基本的な命令としてストア命令とロード命令のみ説明するが、他の複雑な命令、例えばメモリアクセスを伴う演算命令やメモリ間のコピー命令なども同様に実現可能である。
【００５８】
本実施の形態において、ターゲットマシンのストア命令をエミュレートする動作は、第１の実施の形態と同様に図１に示した処理フローに沿って行われる。すなわち、ターゲットアドレス空間６２とターゲットアドレス空間（コピー）６３の両方に対して同じデータがストアされる。
【００５９】
次に図４を参照して本実施の形態にかかるエミュレータがターゲットマシンのロード命令をエミュレートする手順について説明する。
【００６０】
ロード命令の実行が開始されると、図２で説明した第１の実施の形態におけるロード命令の実行手順と同様に命令語の取り出しからオペランド読み出しまでのステップが実行される（ステップ１０１〜１０７）。この間で例外が検出された場合に例外ハンドラへ移入して例外処理が行われる点も同様である（ステップ１２０）。
【００６１】
続くステップ１０８において、エミュレータはステップ１０７で読み出したオペランドのアドレスに対してオフセット値ｄを加算し、ターゲットアドレス空間（コピー）６３内のロードアドレスを求め、ステップ１０７でロードしたものと同じデータであるはずのデータをロードし、ワークレジスタに格納する（ステップ１０８）。
【００６２】
さらにステップ１０７でロードしたデータとステップ１０８でロードしたデータの比較を行い（ステップ１０９）、もし不一致が検出された場合は、以降のエミュレーションにかかるソフトウェアの実行を中断する。不一致を検出したケースでは、いずれかのリードデータが破壊されていることが想定されるが、二値の比較チェックではどちらが不正であるか判定できないため、ここではログ採取を行った後、リブート処理を開始する（ステップ１２１）。ログ採取では、ソフトウェア的に採取可能な情報、例えばレジスタの内容や命令カウンタの内容などが採取される。
【００６３】
比較チェックの結果、不一致が検出されなかった場合は続くステップに進むが、ここからの手順は図２等で説明したものと同様である（ステップ１１０、１１１）。
【００６４】
このように本実施の形態によれば、プラットフォームハードウェアの障害検出回路で検出できない障害があった場合に、リードデータが破壊されたことを検出し、不正なエミュレーション処理が継続されることを止めることができ、データインテグリティを保証したエミュレートが可能となる。
【００６５】
【発明の効果】
以上説明したように、本発明によれば、以下のような効果が得られる。
【００６６】
第１の発明によれば、メモリ読み出し時の多ビットエラーによる訂正不能障害や、バスエラーによる訂正不能障害のような復旧不能なデータ破壊を伴う障害がプラットフォームハードウェアで発生した場合に、エミュレータ側でデータの復旧を行い、システムダウンやリブートに至らずにターゲットマシンのエミュレーションの実行を継続することができる。その理由は、エミュレータによりターゲットマシンのメモリ空間のコピーを生成することにより、訂正不能障害が発生した際にコピー領域からデータを書き戻すことができるからである。
【００６７】
第２の発明によれば、プラットフォームハードウェアの障害検出回路で検出できないような障害によってリードデータが破壊された場合、そのことを検出し、不正なエミュレーション処理が継続されるのを防止することができる。その理由は、エミュレータによりターゲットマシンのメモリ空間のコピー（コピー空間）を生成し、ターゲットマシンのメモリリードをエミュレートする際にターゲットマシンのメモリ空間とコピー空間の両方からデータをリードして値の比較チェックを行い、万一不一致を検出した場合にソフトウェアの実行を中断するからである。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態におけるプラットフォームマシンの主記憶上にターゲットマシン用の２つの領域を設定する例とエミュレータのストア命令のエミュレート時の処理フローを示す図である。
【図２】本発明の第１の実施の形態におけるエミュレータのロード命令のエミュレート時の処理フローを示す図である。
【図３】本発明の第１の実施の形態におけるエミュレーション実行中にプラットフォームハードウェアで障害が発生した場合の動作説明図である。
【図４】本発明の第２の実施の形態におけるプラットフォームマシンの主記憶上にターゲットマシン用の２つの領域を設定する例とエミュレータのロード命令のエミュレート時の処理フローを示す図である。
【図５】エミュレータの実装環境を示すブロック図である。
【図６】エミュレータがターゲットマシンの命令語をエミュレートする際の動作説明図である。
【図７】従来のエミュレータにおけるストア命令のエミュレート時の処理フローを示す図である。
【符号の説明】
１１…アプリケーションプログラム
１２…ミドルウェア
１３…ターゲットＯＳ
１４…エミュレータ
１５…プラットフォームファームウェア
１６…プロセッサファームウェア
１７…プロセッサ（ハードウェア）
１８…プラットフォーム（ハードウェア）
５０…プラットフォームマシンの主記憶
６２…ターゲットマシンの主記憶としての割り当てられたターゲットアドレス空間
６３…ターゲットアドレス空間６２のコピー領域となるターゲットアドレス空間（コピー）
【図１】
2004252525.tif 000003
【図２】
2004252525.tif 000004
【図３】
2004252525.tif 000005
【図４】
2004252525.tif 000006
【図５】
2004252525.tif 000007
【図６】
2004252525.tif 000008
【図７】
2004252525.tif 000009