(57)【特許請求の範囲】
【請求項１】
周辺機器が接続される試験対象システムのプログラムを実行する試験対象実行部と、
前記周辺機器に障害が発生したときに所定の障害値記憶領域に設定される障害値を含んだ障害模擬定義情報を記憶する障害模擬定義情報記憶部と、
前記周辺機器に対応付けられた所定の機器対応記憶領域に対してアクセスが発生したときに前記試験対象システムのプログラムを中断させる障害模擬設定部と、
前記試験対象システムのプログラムが中断したときに前記障害模擬定義情報に含まれる障害値を前記障害値記憶領域に設定し、前記試験対象システムのプログラムを再開させる障害模擬実行部と
を備えたことを特徴とする周辺機器障害模擬システム。
【請求項２】
前記障害模擬定義情報は、障害を模擬する模擬回数を含み、
前記障害模擬実行部は、前記障害値を前記障害値記憶領域に設定した回数を模擬実行回数として記憶し、前記模擬実行回数と前記模擬回数とを大小比較し、前記模擬実行回数が前記模擬回数未満である場合に前記障害値を前記障害値記憶領域に設定し、前記模擬実行回数が前記模擬回数以上である場合に前記障害値を前記障害値記憶領域に設定しない
ことを特徴とする請求項１記載の周辺機器障害模擬システム。
【請求項３】
前記障害模擬定義情報は、複数の周辺機器のうち特定の周辺機器を対象機器として示す対象機器特定情報を含み、
前記障害模擬設定部は、複数の周辺機器に対応付けられた機器対応記憶領域に対してアクセスが発生したときに前記試験対象システムのプログラムを中断させ、
前記障害模擬実行部は、前記試験対象システムのプログラムが中断したときに前記機器対応記憶領域に対して発生したアクセスに対応する周辺機器をアクセス機器として特定し、特定したアクセス機器が前記対象機器特定情報に示される対象機器と同じ周辺機器である場合に前記障害値を前記障害値記憶領域に設定し、特定したアクセス機器が前記対象機器特定情報に示される対象機器と異なる周辺機器である場合に前記障害値を前記障害値記憶領域に設定しない
ことを特徴とする請求項１記載の周辺機器障害模擬システム。
【請求項４】
前記障害模擬設定部は、前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させ、
前記障害模擬実行部は、前記周辺機器の割込みが発生して前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、所定の遅延時間が経過したときに前記試験対象システムのプログラムを中断させる遅延タイマを起動し、前記試験対象システムのプログラムを再開させ、前記遅延タイマにより前記試験対象システムのプログラムが中断したときに前記割込み情報記憶領域に記憶されていた割込み情報を前記割込み情報記憶領域に設定し、前記試験対象システムのプログラムを再開させる
ことを特徴とする請求項１〜請求項３いずれかに記載の周辺機器障害模擬システム。
【請求項５】
前記障害模擬設定部は、前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させ、
前記障害模擬実行部は、前記周辺機器の割込みが発生して前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、前記試験対象システムのプログラムを再開させる
ことを特徴とする請求項１〜請求項３いずれかに記載の周辺機器障害模擬システム。
【請求項６】
前記障害模擬設定部は、所定の割込み設定により前記周辺機器の割込みを発生させ、前記試験対象システムのプログラムを中断させる
ことを特徴とする請求項４または請求項５記載の周辺機器障害模擬システム。
【請求項７】
試験対象実行部が、周辺機器が接続される試験対象システムのプログラムを実行し、
障害模擬定義情報記憶部が、前記周辺機器に障害が発生したときに所定の障害値記憶領域に設定される障害値を含んだ障害模擬定義情報を記憶し、
障害模擬設定部が、前記周辺機器に対応付けられた所定の機器対応記憶領域に対してアクセスが発生したときに前記試験対象システムのプログラムを中断させ、
障害模擬実行部が、前記試験対象システムのプログラムが中断したときに前記障害模擬定義情報に含まれる障害値を前記障害値記憶領域に設定し、前記試験対象システムのプログラムを再開させる
ことを特徴とする周辺機器障害模擬方法。
【請求項８】
周辺機器が接続される試験対象システムのプログラムを実行する試験対象実行部と、
前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させる障害模擬設定部と、
前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、所定の遅延時間が経過したときに前記試験対象システムのプログラムを中断させる遅延タイマを起動し、前記試験対象システムのプログラムを再開させ、前記遅延タイマにより前記試験対象システムのプログラムが中断したときに前記割込み情報記憶領域に記憶されていた割込み情報を前記割込み情報記憶領域に設定し、前記試験対象システムのプログラムを再開させる障害模擬実行部と
を備えたことを特徴とする周辺機器障害模擬システム。
【請求項９】
試験対象実行部が、周辺機器が接続される試験対象システムのプログラムを実行し、
障害模擬設定部が、前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させ、
障害模擬実行部が、前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、所定の遅延時間が経過したときに前記試験対象システムのプログラムを中断させる遅延タイマを起動し、前記試験対象システムのプログラムを再開させ、前記遅延タイマにより前記試験対象システムのプログラムが中断したときに前記割込み情報記憶領域に記憶されていた割込み情報を前記割込み情報記憶領域に設定し、前記試験対象システムのプログラムを再開させる
ことを特徴とする周辺機器障害模擬方法。
【請求項１０】
周辺機器が接続される試験対象システムのプログラムを実行する試験対象実行部と、
前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させる障害模擬設定部と、
前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、前記試験対象システムのプログラムを再開させる障害模擬実行部と
を備えたことを特徴とする周辺機器障害模擬システム。
【請求項１１】
試験対象実行部が、周辺機器が接続される試験対象システムのプログラムを実行し、
障害模擬設定部が、前記周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域に記憶されたときに前記試験対象システムのプログラムを中断させ、
障害模擬実行部が、前記試験対象システムのプログラムが中断した場合、前記割込み情報記憶領域に記憶された割込み情報を消去し、前記試験対象システムのプログラムを再開させる
ことを特徴とする周辺機器障害模擬方法。
【請求項１２】
請求項７と請求項９と請求項１１とのいずれかに記載の周辺機器障害模擬方法をコンピュータに実行させる周辺機器障害模擬プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、周辺機器に関する障害を模擬する周辺機器障害模擬システム、周辺機器障害模擬方法および周辺機器障害模擬プログラムに関するものである。
【背景技術】
【０００２】
制御システムやサーバシステムのような高い可用性と信頼性が求められるコンピュータシステムのソフトウェアは、ハードウェア故障などによる異常事態が発生した際にシステムを安全に停止させたり、待機系のシステムに切り替えたりする必要がある。
このようなシステムにおいては、試験の段階において、異常発生時に上記のような障害処理機能が正常に動作することを十分に確認しておく必要がある。
ところが、ハードウェア故障を発生させるには、ハードウェアを破壊したり、不正動作が起きるように設定を変更したりする必要がある。そのため、費用がかかり、またハードウェア故障の再現性にも問題がある。
そこで、仮想計算機（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を用いることにより、ソフトウェアのみでハードウェア故障を模擬する方法がある。
【０００３】
従来のＶＭを用いた障害模擬方法では、ＶＭモードで特定のプログラムアドレスが実行された際に内部マシンチェック割込みを発生させ、装置の障害処理機能の正常性を確認していた（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−３２４３８９号公報
【非特許文献】
【０００５】
【非特許文献１】Ｉｎｔｅｌ社、「Ｉｎｔｅｌ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ」、２００９年６月発行、Ｖｏｌｕｍｅ３Ｂ  ｐ．１９−１〜２５−２２
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のＶＭを用いた障害模擬方法では、特定のプログラムアドレスが実行された際に内部マシンチェック割込みを発生させることでしか疑似障害を起こせない。つまり、内部マシンチェック割込みを伴わない障害を模擬することができない。
例えば、ディスク装置やネットワーク機器などの周辺機器用のＩ／ＯポートやメモリマップトＩ／Ｏの操作に対して障害を模擬できない。また、障害発生時にはＩ／ＯポートやメモリマップトＩ／Ｏ内に存在するエラービットを参照して障害を起こした周辺機器を特定することができない。また、動作としては正常なもののリトライ等により完了割込みが遅延する障害、無用な完了割込みが起こる障害、逆に必要な完了割込みが起こらない障害を模擬できない。
【０００７】
本発明は、例えば、Ｉ／ＯポートやメモリマップトＩ／Ｏや割込みに関する障害を模擬し、システムの障害処理機能の正常性を確認できるようにすることを目的とする。
【課題を解決するための手段】
【０００８】
本発明の周辺機器障害模擬システムは、
周辺機器が接続される試験対象システムのプログラムを実行する試験対象実行部と、
前記周辺機器に障害が発生したときに所定の障害値記憶領域に設定される障害値を含んだ障害模擬定義情報を記憶する障害模擬定義情報記憶部と、
前記周辺機器に対応付けられた所定の機器対応記憶領域に対してアクセスが発生したときに前記試験対象システムのプログラムを中断させる障害模擬設定部と、
前記試験対象システムのプログラムが中断したときに前記障害模擬定義情報に含まれる障害値を前記障害値記憶領域に設定し、前記試験対象システムのプログラムを再開させる障害模擬実行部とを備える。
【発明の効果】
【０００９】
本発明によれば、例えば、Ｉ／ＯポートやメモリマップトＩ／Ｏ（機器対応記憶領域）へのアクセス時に障害を模擬することができる。これにより、システムの障害処理機能の正常性を確認できる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１におけるハードウェア障害模擬システム１００の構成図。
【図２】実施の形態１における障害模擬定義情報１２１を示す図。
【図３】実施の形態１におけるハードウェア障害模擬方法を示すフローチャート。
【図４】実施の形態１における障害模擬実行処理（Ｓ２００）を示すフローチャート。
【発明を実施するための形態】
【００１１】
実施の形態１．
仮想計算機によって試験対象システムの周辺機器の障害を模擬する形態について説明する。
【００１２】
図１は、実施の形態１におけるハードウェア障害模擬システム１００の構成図である。
実施の形態１におけるハードウェア障害模擬システム１００の構成について、図１に基づいて以下に説明する。
【００１３】
ハードウェア障害模擬システム１００（周辺機器障害模擬システムの一例）は、試験対象システム１１０に接続する周辺機器（例えば、ディスク装置、ネットワーク機器）の障害を模擬する計算機（コンピュータ、装置ともいう）である。
【００１４】
ハードウェア障害模擬システム１００は、ＣＰＵ１４１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、入出力メモリ（Ｉ／Ｏポート、メモリマップトＩ／Ｏともいう）、メインメモリなどをハードウェア１４０として備える。
入出力メモリは周辺機器（入出力機器）が使用するデータを記憶したり、ＣＰＵと周辺機器間でデータのやりとりをしたりするために使用する。メインメモリは周辺機器が使用するデータやその他のデータ（例えば、プログラムやプログラムで使用するデータ）を記憶する。
以下、入出力メモリを「Ｉ／Ｏ１４３」といい、メインメモリを「メモリ１４２」という。
【００１５】
ハードウェア障害模擬システム１００は、ＶＭＭ１３０（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）と試験対象システム１１０とを実行する。
【００１６】
実施の形態において「〜部」として説明するものは「〜処理」、「〜ステップ」、「〜手順」であってもよく、また「〜回路」、「〜装置」、「〜機器」であってもよい。すなわち、「〜部」として説明するものは、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせのいずれで実装されても構わない。
【００１７】
ＶＭＭ１３０は、仮想マシンモニタと呼ばれるソフトウェア（プログラム）を実行する実行部である。仮想マシンモニタは、一台の計算機のリソース（ＣＰＵ１４１、メモリ１４２、Ｉ／Ｏ１４３など）を複数台の計算機のリソースとして利用して計算機を仮想化し、仮想化した計算機を動作させる。
ＶＭＭ１３０は、ハードウェア障害模擬システム１００のリソースを利用して仮想計算機（ＶＭ）を実行し、仮想計算機で試験対象システム１１０を動作させる。仮想計算機で試験対象システム１１０を動作させることにより、試験対象システム１１０が動作する現実の計算機を準備しなくても、試験対象システム１１０の動作を検証することができる。
【００１８】
試験対象システム１１０（試験対象実行部の一例）は、障害を模擬する対象のシステムである。障害を模擬することにより、実際に障害を発生させなくても、障害が発生した時の試験対象システム１１０の動作を検証することができる。
試験対象システム１１０は、ＯＳ１１１（オペレーティングシステム）やアプリケーションプログラム１１２を有する。
【００１９】
仮想計算機では、試験対象システム１１０の他に障害模擬制御部１２０が動作する。
障害模擬制御部１２０は仮想計算機で動作するプログラムである。障害模擬制御部１２０は仮想計算機に記憶された障害模擬定義情報１２１をＶＭＭ１３０に出力する。
【００２０】
障害模擬定義情報１２１は、模擬する障害に関する情報を含んだデータである。
【００２１】
例えば、障害模擬定義情報１２１は、以下のような情報を含む。
障害模擬定義情報１２１は、周辺機器に障害が発生したときに所定の障害値記憶領域に設定される障害値を含む（後述する（１ｅ）「０」ビットセット、（１ｆ）「１」ビットセット）。例えば、障害値記憶領域はメモリ１４２内の特定領域、Ｉ／Ｏ１４３内の特定領域、ＣＰＵレジスタである。
障害模擬定義情報１２１は、障害を模擬する模擬回数を含む（後述する（１ｉ）模擬回数）。
障害模擬定義情報１２１は、複数の周辺機器のうち特定の周辺機器を障害を模擬する対象機器として示す対象機器特定情報を含む（後述する（１ｈ）模擬条件）。
障害模擬定義情報１２１は、模擬する周辺機器の割込みを識別する識別子を含む（後述する（２ａ）割込番号）。
障害模擬定義情報１２１は、周辺機器の割込みを遅延させる遅延時間を含む（後述する（３ｃ）遅延時間）。
障害模擬定義情報１２１は、破棄する周辺機器の割込みを識別する識別子を含む（後述する（３ａ）割込み番号）。
【００２２】
ＶＭＭ１３０は、障害模擬機能として障害模擬設定部１３１、障害模擬実行部１３２、アドレス補正処理部１３３および模擬実行判定部１３４を備える。
【００２３】
障害模擬設定部１３１（障害模擬定義情報記憶部の一例）は、障害模擬定義情報１２１を記憶する。
【００２４】
障害模擬設定部１３１（障害模擬設定部の一例）は、周辺機器に対応付けられた所定の機器対応記憶領域に対してアクセスが発生したときに、試験対象システム１１０のプログラム（ＯＳ１１１、アプリケーションプログラム１１２）を中断させる設定を行う。例えば、機器対応記憶領域はＩ／Ｏ１４３またはメモリ１４２内の特定領域である。
障害模擬設定部１３１は、周辺機器の割込みが発生して割込み情報が所定の割込み情報記憶領域（後述する割込み設定領域）に記憶されたときに、試験対象システム１１０のプログラムを中断させる。例えば、割込み情報記憶領域はＩ／Ｏ１４３またはメモリ１４２内の特定領域である。
障害模擬設定部１３１は、所定の割込み設定により周辺機器の割込みを発生させ、試験対象システム１１０のプログラムを中断させる設定を行う。
【００２５】
障害模擬実行部１３２（障害模擬実行部の一例）は、試験対象システム１１０のプログラムが中断したときに障害模擬定義情報１２１に含まれる障害値を障害値記憶領域に設定し、試験対象システム１１０のプログラムを再開させる。
【００２６】
障害模擬実行部１３２は、障害値を障害値記憶領域に設定した回数を模擬実行回数として記憶する。
障害模擬実行部１３２は、模擬実行回数と模擬回数とを大小比較し、模擬実行回数が模擬回数未満である場合に障害値を障害値記憶領域に設定し、模擬実行回数が模擬回数以上である場合に障害値を障害値記憶領域に設定しない。
【００２７】
障害模擬実行部１３２は、機器対応記憶領域に対して発生したアクセスに対応するアクセス機器（周辺機器）が対象機器特定情報に示される対象機器と同じ周辺機器である場合に障害値を障害値記憶領域に設定する。
障害模擬実行部１３２は、アクセス機器が対象機器特定情報に示される対象機器と異なる周辺機器である場合に障害値を障害値記憶領域に設定しない。
【００２８】
障害模擬実行部１３２は、周辺機器の割込みが発生して試験対象システム１１０のプログラムが中断した場合、割込み情報記憶領域に記憶された割込み情報を消去し、所定の遅延時間が経過したときに試験対象システム１１０のプログラムを中断させる遅延タイマを起動する。
障害模擬実行部１３２は、試験対象システム１１０のプログラムを再開させる。
障害模擬実行部１３２は、遅延タイマにより試験対象システム１１０のプログラムが中断したときに割込み情報記憶領域に記憶されていた割込み情報を割込み情報記憶領域に設定し、試験対象システム１１０のプログラムを再開させる。
【００２９】
障害模擬実行部１３２は、周辺機器の割込みが発生して試験対象システム１１０のプログラムが中断した場合、割込み情報記憶領域に記憶された割込み情報を消去し、試験対象システム１１０のプログラムを再開させる。
【００３０】
アドレス補正処理部１３３は、Ｉ／Ｏ１４３やメモリ１４２のアドレスを補正する。
例えば、アドレス補正処理部１３３は、物理アドレスを仮想アドレスに変換する。
【００３１】
模擬実行判定部１３４（障害模擬実行部の一例）は、障害模擬実行部１３２に障害を模擬させるか否かを判定する。
例えば、模擬実行判定部１３４は、模擬実行回数が模擬回数未満である場合に障害模擬実行部１３２に障害を模擬させ、模擬実行回数が模擬回数以上である場合に障害模擬実行部１３２に障害を模擬させない。
また、模擬実行判定部１３４は、試験対象システム１１０のプログラムが中断したときに機器対応記憶領域に対して発生したアクセスに対応する周辺機器をアクセス機器として特定する。模擬実行判定部１３４は、特定したアクセス機器が対象機器特定情報に示される対象機器と同じ周辺機器である場合に障害模擬実行部１３２に障害を模擬させ、特定したアクセス機器が対象機器特定情報に示される対象機器と異なる周辺機器である場合に障害模擬実行部１３２に障害を模擬させない。
【００３２】
図２は、実施の形態１における障害模擬定義情報１２１を示す図である。
実施の形態１における障害模擬定義情報１２１について、図２に基づいて以下に説明する。
【００３３】
障害模擬定義情報１２１は（１）アクセス障害情報、（２）割込み情報、（３）割込み障害情報を含む。
【００３４】
（１）アクセス障害情報は、周辺機器用のメモリ（Ｉ／Ｏ１４３、メモリ１４２）にアクセスが発生したときに模擬する障害を示す情報である。
（１）アクセス障害情報は（１ａ）アクセス対象、（１ｂ）アドレス、（１ｃ）サイズ、（１ｄ）アドレス補正情報、（１ｅ）「０」ビットセット、（１ｆ）「１」ビットセット、（１ｇ）ログ出力フラグ、（１ｈ）模擬条件、（１ｉ）模擬回数を含む。
【００３５】
（１ａ）アクセス対象は、アクセスを検出する対象のメモリ（Ｉ／Ｏ１４３、メモリ１４２）の種別を示す。
（１ｂ）アドレスは、アクセス領域のアドレスを示す。
（１ｃ）サイズは、アクセス領域のサイズを示す。
（１ｄ）アドレス補正情報は、（１ｂ）アドレスを補正するための情報を示す。例えば、（１ｂ）アドレスが物理アドレスと仮想アドレスとのいずれであるかを示す。また、（１ｂ）アドレスがオフセット値であるか否かを示す。
（１ｅ）「０」ビットセットは、「０」を設定する複数のビット位置を示す。
（１ｆ）「１」ビットセットは、「１」を設定する複数のビット位置を示す。
（１ｇ）ログ出力フラグは、模擬した障害の情報をログとして記録するか否かを示す。
（１ｈ）模擬条件は、障害を模擬する対象の周辺機器を特定する情報を示す。
（１ｉ）模擬回数は、障害を模擬する回数を示す。
【００３６】
（２）割込み情報は、模擬する割込みを示す情報である。
（２）割込み情報は（２ａ）割込番号、（２ｂ）ログ出力フラグを含む。
【００３７】
（２ａ）割込番号は、割込みを模擬する対象の周辺機器に割り当てられた番号を示す。
（２ｂ）ログ出力フラグは、模擬した割込みの情報をログとして記録するか否かを示す。
【００３８】
（３）割込み障害情報は、模擬する割込みの障害を示す情報である。
（３）割込み障害情報は（３ａ）割込番号、（３ｂ）処理内容、（３ｃ）遅延時間、（３ｄ）ログ出力フラグを含む。
【００３９】
（３ａ）割込番号は、障害を模擬する対象の割込みを識別する番号を示す。
（３ｂ）処理内容は、模擬する障害（遅延、破棄）の種別を示す。
（３ｃ）遅延時間は、割込みを遅延させる時間を示す。
（３ｄ）ログ出力フラグは、模擬した障害の情報をログとして記録するか否かを示す。
【００４０】
障害模擬定義情報１２１は模擬する障害毎に用意され、一つの障害模擬定義情報１２１には（１）アクセス障害情報（２）割込み情報（３）割込み障害情報のいずれか又は組み合わせが設定される。
例えば、一つの障害模擬定義情報１２１には（１）アクセス障害情報と（２）割込み情報とが設定され、別の障害模擬定義情報１２１には（３）割込み障害情報が設定される。
【００４１】
図３は、実施の形態１におけるハードウェア障害模擬方法を示すフローチャートである。
実施の形態１におけるハードウェア障害模擬方法について、図３に基づいて以下に説明する。
【００４２】
試験対象システム１１０、ＶＭＭ１３０はハードウェア障害模擬システム１００のメモリ１４２にロードされ、起動された状態である。
また、複数の障害模擬定義情報１２１（図２参照）がユーザにより生成され、試験対象システム１１０に割り当てられたメモリ１４２内の領域またはディスク装置（例えば、磁気ディスク装置）に予め記憶されているものとする。
【００４３】
ハードウェア障害模擬システム１００のＣＰＵ１４１は、試験対象システム１１０を動作させるモードとＶＭＭ１３０を動作させるモードとを切り替えながら試験対象システム１１０およびＶＭＭ１３０を動作させる。
試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わると試験対象システム１１０の処理は中断する。
中断した処理は試験対象システム１１０の動作モードに戻ったときに再開する。
【００４４】
例えば、Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｐｒｏｃｅｓｓｏｒ（ＩＡプロセッサ）は、仮想化支援機能としてＩｎｔｅｌ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ（ＶＴ）機能を有する。このＩｎｔｅｌ  ＶＴ機能を用いることによりＶＭＭ１３０を実装することができる。Ｉｎｔｅｌは登録商標である。
Ｉｎｔｅｌ  ＶＴ機能については非特許文献１に記載されている。
ＶＴ機能において、ＶＭＭ１３０はＶＭＸ  ｒｏｏｔ  ｏｐｅｒａｔｉｏｎモードで動作し、試験対象システム１１０はＶＭＸ  ｎｏｎ−ｒｏｏｔ  ｏｐｅｒａｔｉｏｎモードで動作する。
【００４５】
試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードに切り替わるとき（ＶＭ  ｅｘｉｔの発生時）、試験対象システム１１０のＯＳ１１１は処理を中断する。このとき、ＣＰＵ１４１に設定されている試験対象システム１１０のＯＳ１１１のコンテキストはＶＭＭ１３０が管理するメモリ１４２内の領域に退避される。
そして、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードに戻るときに退避しておいたコンテキストがＣＰＵ１４１に設定され、試験対象システム１１０のＯＳ１１１は中断されたときの状態から処理を再開する。
コンテキストとは、ＣＰＵ１４１の各レジスタに設定されているデータのことである。
【００４６】
Ｓ１０１において、ユーザは、入力装置（キーボード、マウスなど）を用いて障害模擬開始コマンドを試験対象システム１１０に入力する。このとき、ＣＰＵ１４１は試験対象システム１１０の動作モード状態である。
試験対象システム１１０のＯＳ１１１は障害模擬制御部１２０をアプリケーションプログラムの一つとして起動する。
Ｓ１０１の後、処理はＳ１１１に進む。
【００４７】
Ｓ１１１において、障害模擬制御部１２０は、複数の障害模擬定義情報１２１をＶＭＭ１３０の障害模擬設定部１３１に出力する。
例えば、障害模擬制御部１２０は、ＩＡプロセッサのＶＭＣＡＬＬ命令を用いて、障害模擬定義情報１２１のメモリアドレスを引数にして障害模擬設定部１３１を呼び出す。ＶＭＣＡＬＬ命令は、ＶＭＸ  ｎｏｎ−ｒｏｏｔ  ｏｐｅｒａｔｉｏｎモードからＶＭＸ  ｒｏｏｔ  ｏｐｅｒａｔｉｏｎモードを呼び出す命令である。障害模擬定義情報１２１のメモリアドレスとは、障害模擬定義情報１２１が記憶されたメモリ１４２内の領域を示すアドレスである。
Ｓ１１１の後、試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わり、処理はＳ１１２に進む。
【００４８】
Ｓ１１２において、障害模擬設定部１３１は障害模擬制御部１２０から出力された複数の障害模擬定義情報１２１をＶＭＭ１３０に割り当てられたメモリ１４２内の領域に記憶する。
Ｓ１１２の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ１１３に進む。
【００４９】
Ｓ１１３において、障害模擬制御部１２０は障害模擬開始要求をＶＭＭ１３０の障害模擬設定部１３１に出力する。
Ｓ１１３の後、試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わり、処理はＳ１２１に進む。
【００５０】
Ｓ１２１において、障害模擬設定部１３１は障害模擬定義情報１２１を一つ選択し、選択した障害模擬定義情報１２１に設定されている模擬内容を判定する。
模擬内容が（１）アクセス障害情報である場合、処理はＳ１２４に進む。
模擬内容が（２）割込み情報である場合、処理はＳ１２２に進む。
模擬内容が（３）割込み障害情報である場合、処理はＳ１２６に進む。
【００５１】
但し、障害模擬定義情報１２１に複数の模擬内容が設定されている場合、模擬内容毎に以下に説明する前処理が実行される。
例えば、障害模擬定義情報１２１に（１）アクセス障害情報と（２）割込み情報とが設定されている場合、（１）アクセス障害情報に対する前処理（Ｓ１２４、Ｓ１２５）を実行した後、（２）割込み情報に対する前処理（Ｓ１２２、Ｓ１２３）を実行する。
【００５２】
また、前処理（Ｓ１２１〜Ｓ１２６）は障害模擬定義情報１２１毎に実行される。つまり、前処理（Ｓ１２１〜Ｓ１２６）は障害模擬定義情報１２１の数と同じ回数繰り返される。
【００５３】
Ｓ１２２において、障害模擬設定部１３１は、障害模擬定義情報１２１の（２ａ）割込番号により特定される周辺機器の割込みを発生させるようにＣＰＵ１４１（例えば、ＣＰＵレジスタ）に対して割込み設定を行う。
例えば、割込み設定は、Ｉｎｔｅｌ  ＶＴ機能のＶＭ−ｅｎｔｒｙ  ｉｎｔｅｒｒｕｐｔｉｏｎ−ｉｎｆｏｒｍａｔｉｏｎ  ｆｉｅｌｄを利用して行う。
【００５４】
割込み設定を行うと、試験対象システム１１０の動作モードに切り替わったときに試験対象システム１１０に対して割込みが発生する。試験対象システム１１０に対して割込みが発生すると、試験対象システム１１０のＯＳ１１１が割込みハンドラ（プログラム）を起動する。
【００５５】
Ｓ１２２の後、処理はＳ１２３に進む。
【００５６】
Ｓ１２３において、障害模擬設定部１３１は、障害模擬定義情報１２１の（２ｂ）ログ出力フラグに基づいてログの出力要否を判定する。
ログの出力が必要な場合、障害模擬設定部１３１は割込み設定（Ｓ１２２）の内容をログとして記録する。ログは、ディスク装置に生成したログファイルに直接記録してもよいし、メモリ１４２に蓄積した後でまとめてログファイルに記録してもよい。
ログの出力が不要な場合、障害模擬設定部１３１はログを出力しない。
Ｓ１２３の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ１３１に進む。
【００５７】
Ｓ１３１において、Ｓ１２２で設定した割込み設定に従って試験対象システム１１０に割込みが発生する。
上記のように、割込み設定（Ｓ１２２）を行うことにより、障害模擬定義情報１２１の（２）割込み情報に指定された割込みを発生させることができる。
【００５８】
Ｓ１２４において、アドレス補正処理部１３３は、障害模擬定義情報１２１の（１ｄ）アドレス補正情報に基づいて（１ｂ）アドレスを補正する。
例えば、（１ｄ）アドレス補正情報に（１ｂ）アドレスが物理アドレスであることを示す値が設定されている場合、アドレス補正処理部１３３は、（１ｂ）アドレスを仮想アドレスに変換する。
また、（１ｄ）アドレス補正情報に（１ｂ）アドレスがオフセット値であることを示す値が設定されている場合、ハードウェア設定のアドレスに（１ｂ）アドレスをオフセット値として加算し、アドレスを特定する。ハードウェア設定のアドレスは予めメモリ１４２に記憶されているものとする。
Ｓ１２４の後、処理はＳ１２５に進む。
【００５９】
Ｓ１２５において、障害模擬設定部１３１は、Ｓ１２４で補正されたアドレスにアクセス（読み出し、書き込み）が行われる直前またはアクセスが行われた直後に障害模擬実行部１３２が呼び出されるように、ＣＰＵ１４１にアクセス呼出し設定を行う。
【００６０】
例えば、（１ａ）アクセス対象にＩ／Ｏ１４３が指定されている場合には以下のようにアクセス呼出し設定を行う。
障害模擬設定部１３１は、Ｉ／Ｏ１４３の（補正後の）アドレスにアクセスが発生したときにＶＭ  ｅｘｉｔが起動されるような設定をＩ／Ｏビットマップを利用して行う。さらに、障害模擬設定部１３１は、障害模擬実行部１３２のエントリアドレスをｈｏｓｔ  ＲＩＰに設定する。
このようなアクセス呼出し設定を行うことにより、Ｉ／Ｏ１４３の（補正後の）アドレスにアクセスが発生したときに、障害模擬実行部１３２を呼び出すことができる。
【００６１】
また、（１ａ）アクセス対象にメモリ１４２が指定されている場合には以下のようにアクセス呼出し設定を行う。
障害模擬設定部１３１は、メモリ１４２の（補正後の）アドレスにアクセスが発生したときにデバッグ例外が発生するような設定をデバッグレジスタを利用して行う。さらに、障害模擬設定部１３１は、Ｉｎｔｅｌ  ＶＴ機能のｅｘｃｅｐｔｉｏｎビットマップを利用して、デバッグ例外が発生したときに障害模擬実行部１３２を呼び出すような設定を行う。
このようなアクセス呼出し設定を行うことにより、メモリ１４２の（補正後の）アドレスにアクセスが発生したときに、障害模擬実行部１３２を呼び出すことができる。
【００６２】
障害模擬設定部１３１は、デバッグレジスタを利用してデバッグ例外を発生させる代わりに、メモリ管理ユニット（ＭＭＵ：Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）を利用してアクセス違反例外（メモリ保護例外ともいう）を発生させてもよい。メモリ管理ユニットを利用することにより、指定したプログラムアドレスやメモリアドレスを含むページ領域にアクセスがあったときにアクセス違反例外を発生させることができる。
例えば、障害模擬設定部１３１は、試験対象システム１１０のＯＳ１１１のページテーブルを書き換えてアクセス違反例外を発生させる。また、ハードウェア障害模擬システム１００はＯＳ１１１のページテーブルの全部もしくは一部のコピーをＶＭＭ１３０のメモリ領域に持ち、障害模擬設定部１３１はそのコピーを書き換えてアクセス違反例外を発生させる。
障害模擬設定部１３１は、Ｉｎｔｅｌ  ＶＴ機能のｅｘｃｅｐｔｉｏｎビットマップを利用して、アクセス違反例外が発生したときに障害模擬実行部１３２を呼び出すような設定を行う。
【００６３】
Ｉ／Ｏビットマップ、ＶＭ  ｅｘｉｔ、ｈｏｓｔ  ＲＩＰ、デバッグレジスタ、ｅｘｃｅｐｔｉｏｎビットマップなどについては、非特許文献１で説明されている。
【００６４】
Ｓ１２５の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ１３２に進む。
【００６５】
Ｓ１２６において、障害模擬設定部１３１は、障害模擬定義情報１２１の（３ａ）割込番号で特定される周辺機器の割込みが発生したときに障害模擬実行部１３２が呼び出されるように、ＣＰＵ１４１に割込み呼出し設定を行う。
【００６６】
例えば、障害模擬設定部１３１は、Ｉｎｔｅｌ  ＶＴ機能のｅｘｔｅｒｎａｌ−ｉｎｔｅｒｒｕｐｔ  ｅｘｉｔｉｎｇ（非特許文献１参照）を利用して、割込み呼出し設定を行う。
この機能を利用した場合、割込みを発生させた周辺機器が（３ａ）割込番号で特定される周辺機器であるか否かに関わらず、いずれかの周辺機器から割込みが発生したときには障害模擬実行部１３２が呼び出される。そこで、障害模擬設定部１３１は、呼び出されたときに、割込みを発生させた周辺機器が（３ａ）割込番号で特定される周辺機器であるか否かを判定する。
【００６７】
Ｓ１２６の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ１３２に進む。
【００６８】
Ｓ１３２において、試験対象システム１１０は動作を再開する。
上記のように、アクセス呼出し設定（Ｓ１２５）を行うことにより、障害模擬定義情報１２１の（１）アクセス障害情報に指定されたアクセスが発生したときに、障害模擬実行部１３２を呼び出すことができる。
また、割込み呼出し設定（Ｓ１２６）を行うことにより、障害模擬定義情報１２１の（３）割込み障害情報に指定された割込みが発生したときに、障害模擬実行部１３２を呼び出すことができる。
【００６９】
（１）アクセス障害情報に指定されたアクセスまたは（３）割込み障害情報に指定された割込みが発生した場合、障害模擬実行部１３２が呼び出される。
障害模擬実行部１３２は、（１）アクセス障害情報に指定された障害または（３）割込み障害情報に指定された障害を模擬する（Ｓ２００：障害模擬実行処理）。
障害模擬実行処理（Ｓ２００）については後述する。
【００７０】
Ｓ１４１において、ユーザは、入力装置を用いて障害模擬停止コマンドを試験対象システム１１０に入力する。このとき、ＣＰＵ１４１は試験対象システム１１０の動作モード状態である。
障害模擬制御部１２０は、障害模擬停止要求をＶＭＭ１３０の障害模擬設定部１３１に出力する。
Ｓ１４１の後、試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わり、処理はＳ１４２に進む。
【００７１】
Ｓ１４２において、障害模擬設定部１３１は、ＣＰＵ１４１の設定をクリアして割込み設定（Ｓ１２２）、アクセス呼出し設定（Ｓ１２５）および割込み呼出し設定（Ｓ１２６）を解除する。
Ｓ１４２の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ１４３に進む。
【００７２】
Ｓ１４３において、試験対象システム１１０は動作を再開され、障害は模擬されない。
【００７３】
図４は、実施の形態１における障害模擬実行処理（Ｓ２００）を示すフローチャートである。
実施の形態１における障害模擬実行処理（Ｓ２００）について、図４に基づいて以下に説明する。
【００７４】
Ｓ２０１において、障害模擬定義情報１２１の（１）アクセス障害情報に指定されたアクセスが発生すると、図３で説明したアクセス呼出し設定（Ｓ１２５）によりＶＭＭ１３０の障害模擬実行部１３２が呼び出される。
また、障害模擬定義情報１２１の（３）割込み障害情報に指定された割込みが発生すると、図３で説明した割込み呼出し設定（Ｓ１２６）によりＶＭＭ１３０の障害模擬実行部１３２が呼び出される。
このとき、ＣＰＵ１４１は試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わる。
【００７５】
Ｓ２０１の後、処理はＳ２１１に進む。
【００７６】
Ｓ２１１において、障害模擬実行部１３２は、（１）アクセス障害情報に指定されたアクセスと（３）割込み障害情報に指定された割込みとのいずれが要因であるかを判定する。
例えば、障害模擬実行部１３２は、Ｉｎｔｅｌ  ＶＴ機能で使用される所定のメモリ領域を参照して呼出し要因を判定する。
【００７７】
呼出し要因が（１）アクセス障害情報に指定されたアクセスである場合、処理はＳ２２１に進む。
呼出し要因が（３）割込み障害情報に指定された割込みである場合、処理は２３１に進む。但し、発生した割込みが（３）割込み障害情報に指定された割込みと異なる場合、以降の処理は行わず、障害模擬実行処理（Ｓ２００）は終了する。
【００７８】
Ｓ２２１において、障害模擬実行部１３２は、アクセス命令を解析してアクセス情報を取得する。
例えば、障害模擬実行部１３２は、どの周辺機器に割り当てられたメモリ（Ｉ／Ｏ１４３、メモリ１４２）に対するアクセスであるかを特定する。
また、障害模擬実行部１３２は、書き込まれる値が設定されている領域（ＣＰＵレジスタ、メモリ１４２）を特定する。
また、障害模擬実行部１３２は、書き込まれる値を特定する。
Ｓ２２１の後、処理はＳ２２２に進む。
【００７９】
Ｓ２２２において、障害模擬実行部１３２は、模擬実行判定部１３４を呼び出す。
模擬実行判定部１３４は、障害模擬定義情報１２１の（１ｈ）模擬条件と（１ｉ）模擬回数とに基づいて、障害を模擬するか否かを判定する。
【００８０】
例えば、（１ｈ）模擬条件として、Ｉ／Ｏ１４３またはメモリ１４２内の特定のアドレスと、特定の値とが指定されているものとする。
模擬実行判定部１３４は、指定されたアドレスに指定された値が設定されていれば障害を模擬すると判定し、指定されたアドレスに指定された値が設定されていなければ障害を模擬しないと判定する。
Ｉ／Ｏ１４３やメモリ１４２の第１の領域（例えば、２００番地）は複数の周辺機器に共有され、第１の領域に設定されているデータに対応する周辺機器の種別は第２の領域（例えば、１００番地）に設定される場合がある。この場合、障害模擬定義情報１２１の（１）アクセス障害情報に指定された第１の領域にアクセスが発生しても、発生したアクセスが障害を模擬したい周辺機器に対するアクセスであるとは限らない。
ユーザは、障害模擬定義情報１２１の（１ｈ）模擬条件に、周辺機器の種別が設定される第２の領域のアドレス（１００番地）と、障害を模擬したい周辺機器の種別とを指定するとよい。これにより、障害を模擬したい周辺機器に対するアクセスが発生した場合に障害を模擬することができる。
【００８１】
また、模擬実行判定部１３４は、障害を模擬した回数が（１ｉ）模擬回数に達していなければ障害を模擬すると判定し、障害を模擬した回数が（１ｉ）模擬回数に達していれば障害を模擬しないと判定する。
例えば、模擬実行判定部１３４は、後述するＳ２２４において障害を模擬する度に当該アクセス要因の模擬実行回数をカウント（インクリメント）する。そして、模擬実行判定部１３４は、模擬実行回数と（１ｉ）模擬回数とを大小比較して障害を模擬するか否かを判定する。
障害発生時に設定されるエラービットが障害処理の後にクリアされる障害がある。そのような障害を模擬する場合、エラービットを毎回設定したいとは限らない。
ユーザは、障害模擬定義情報１２１の（１ｉ）模擬回数を設定することにより、（１ｉ）模擬回数だけエラービットを設定することができる。
【００８２】
障害を模擬する場合（ＹＥＳ）、処理はＳ２２３に進む。
障害を模擬しない場合（ＮＯ）、処理はＳ２２５に進む。
【００８３】
Ｓ２２３において、障害模擬実行部１３２は、Ｓ２２１の解析結果に基づいてアクセス命令の内容を実行する。
但し、アクセス命令が実行された後に障害模擬実行部１３２が呼び出される場合、障害模擬実行部１３２はアクセス命令の内容を実行しない。
Ｓ２２３の後、処理はＳ２２４に進む。
【００８４】
Ｓ２２４において、障害模擬実行部１３２は、（１ｅ）「０」ビットセットに示されるビットセットにエラービット「０」を設定し、（１ｆ）「１」ビットセットに示されるビットセットにエラービット「１」を設定する。エラービット「０」「１」は当該周辺機器に対する特定の障害の発生を示す。
【００８５】
但し、ビットセットにエラービットを設定するとは、ビットセットに対応する特定の領域にエラービットを設定することである。ビットセットに対応する領域に設定されたエラービットは、試験対象システム１１０の動作モードに戻ったときに試験対象システム１１０用の所定のビットセットに設定される。例えば、ビットセットに対応する領域とは、ＶＭＭ１３０の動作モードに切り替わるときに退避された試験対象システム１１０のコンテキスト内の所定部分である。
障害模擬実行部１３２は、ビットセットに対応する領域をＳ２２１の解析結果に基づいて特定できるものとする。
【００８６】
Ｓ２２４の後、処理はＳ２２５に進む。
【００８７】
Ｓ２２５において、障害模擬実行部１３２は、障害模擬定義情報１２１の（１ｇ）ログ出力フラグに基づいてログの出力要否を判定する。
ログの出力が必要な場合、障害模擬実行部１３２は、模擬した障害の情報をログとして記憶する。障害模擬定義情報１２１の（１）アクセス障害情報、Ｓ２２４の障害模擬内容、Ｓ２２３のアクセス内容、Ｓ２２１の解析結果などはログとして記録される情報の一例である。
ログの出力が不要な場合、障害模擬実行部１３２はログを記録しない。
Ｓ２２５の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ２２６に進む。
【００８８】
Ｓ２２６において、試験対象システム１１０のＯＳ１１１は、Ｓ２２４で設定されたビットセットに基づいて障害を検出し、アプリケーションプログラム１１２は検出された障害に応じて所定の障害処理を実行する。
ユーザは、障害処理の結果（障害メッセージ、メモリ１４２の設定値など）を検証することにより、試験対象システム１１０の障害処理機能が正しく動作するか否かを確認することができる。
【００８９】
Ｓ２３１において、障害模擬実行部１３２は、障害模擬定義情報１２１の（３ｂ）処理内容に基づいて、割込みの遅延と割込みの破棄とのいずれの障害を模擬するか判定する。
割込みの遅延を模擬する場合、処理はＳ２３２に進む。
割込みの破棄を模擬する場合、処理はＳ２３３に進む。
【００９０】
Ｓ２３２において、障害模擬実行部１３２は、Ｉ／Ｏ１４３やメモリ１４２の割込み設定領域の設定値をメモリ１４２の別領域に退避し、割込み設定領域をクリアする。割込み設定領域とは、発生した割込みの内容を示す値が設定される所定の領域である。
障害模擬実行部１３２は、障害模擬定義情報１２１の（３ｃ）遅延時間を設定してハードウェア１４０のタイマ機能を起動する。
障害模擬実行部１３２は、ハードウェア１４０のタイマ割込みが発生したときに障害模擬実行部１３２が呼び出されるように、ＣＰＵ１４１に割込み呼出し設定を行う。例えば、障害模擬実行部１３２は、Ｓ１２６の障害模擬設定部１３１と同様に、Ｉｎｔｅｌ  ＶＴ機能のｅｘｔｅｒｎａｌ−ｉｎｔｅｒｒｕｐｔ  ｅｘｉｔｉｎｇ（非特許文献１参照）を利用して、割込み呼出し設定を行う。
【００９１】
Ｉ／Ｏ１４３やメモリ１４２の所定領域はクリアされているため、試験対象システム１１０の動作モードに戻ったときに試験対象システム１１０のＯＳ１１１は割込みを検知せず、割込みハンドラは起動されない。但し、障害模擬実行部１３２は、（３ｃ）遅延時間の経過時にタイマ割込みにより再び呼び出される。
【００９２】
Ｓ２３２の後、処理はＳ２３４に進む。
【００９３】
Ｓ２３３において、障害模擬実行部１３２は、Ｉ／Ｏ１４３やメモリ１４２の割込み設定領域をクリアする。
試験対象システム１１０の動作モードに戻ったときに試験対象システム１１０のＯＳ１１１は割込みを検知せず、割込みハンドラは起動されない。
Ｓ２３３の後、処理はＳ２３４に進む。
【００９４】
Ｓ２３４において、障害模擬実行部１３２は、障害模擬定義情報１２１の（３ｄ）ログ出力フラグに基づいてログの出力要否を判定する。
ログの出力が必要な場合、障害模擬実行部１３２は、模擬した障害の情報をログとして記憶する。障害模擬定義情報１２１の（３）割込み障害情報はログとして記録される情報の一例である。ユーザは、障害模擬定義情報１２１の（３ｃ）遅延時間に「０」秒を設定することにより、割込みを遅延させずに割込みのログを記録することもできる。
ログの出力が不要な場合、障害模擬実行部１３２はログを記録しない。
Ｓ２３４の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードへ戻り、処理はＳ２３５に進む。
【００９５】
Ｓ２３５において、試験対象システム１１０のＯＳ１１１は、Ｓ２３２またはＳ２３３で割込み設定領域がクリアされているため割込みを検知せず、割込みハンドラを起動しない。
【００９６】
割込みの破棄（Ｓ２３３）を模擬した場合、割込みが破棄されたことにより試験対象システム１１０に障害が発生し、試験対象システム１１０のＯＳ１１１やアプリケーションプログラム１１２は所定の障害処理を実行する。ユーザは、障害処理の結果を検証することにより、試験対象システム１１０の障害処理機能が正しく動作するか否かを確認することができる。
【００９７】
割込みの遅延（Ｓ２３２）を模擬した場合、（３ｃ）遅延時間の経過時にタイマ割込みが発生し、ＶＭＭ１３０の障害模擬実行部１３２が呼び出される。
このとき、試験対象システム１１０の動作モードからＶＭＭ１３０の動作モードへ切り替わり、処理はＳ２３６に進む。
【００９８】
Ｓ２３６において、障害模擬実行部１３２は、Ｓ２３２でＩ／Ｏ１４３やメモリ１４２の割込み設定領域から退避しておいた設置値を割込み設定領域に設定する。
Ｓ２３６の後、ＶＭＭ１３０の動作モードから試験対象システム１１０の動作モードに戻り、処理はＳ２３７に進む。
【００９９】
Ｓ２３７において、試験対象システム１１０のＯＳ１１１は、割込み設定領域の設定値に基づいて（３ｃ）遅延時間前に発生した割込みを検知し、検知した割込みに応じて割込みハンドラを起動する。割込みハンドラは（３ｃ）遅延時間前に発生した割込みに対して所定の割込み処理を実行する。
ユーザは、割込み処理の結果（エラーメッセージ、メモリ１４２の設定値など）を検証することにより、試験対象システム１１０の障害処理機能が正しく動作するか否かを確認することができる。
【０１００】
以上の障害模擬実行処理（Ｓ２０１〜Ｓ２３７）は、Ｓ１４１（図３参照）でユーザに障害模擬の停止を指定されるまで、障害模擬定義情報１２１の（１）アクセス障害情報に指定されたアクセスまたは（３）割込み障害情報に指定された割込みが発生する度に実行される。
【０１０１】
障害模擬定義情報１２１は、障害模擬開始要求（Ｓ１１３）と共に障害模擬制御部１２０から障害模擬設定部１３１に出力されても、ＶＭＭ１３０のメモリ領域に予め記憶してもよい。
【０１０２】
障害模擬定義情報１２１に障害模擬の開始条件を付加し、障害模擬定義情報１２１に指定された開始条件を満たしたときに障害を模擬してもよい。
例えば、ユーザは、（ａ）無条件（即時）、（ｂ）任意のＩ／Ｏ１４３、制御レジスタ、ＭＳＲ（Ｍｏｄｅｌ  Ｓｐｅｃｉｆｉｃ  Ｒｅｇｉｓｔｅｒ）などへのアクセスの発生、（ｃ）任意の割込みの発生、（ｄ）任意の時間の経過を開始条件として障害模擬定義情報１２１に設定する。
また、ユーザは、（ｅ）任意のプログラムアドレスの実行や任意のメモリアドレスへのアクセスの発生を開始条件として障害模擬定義情報１２１に設定してもよい。
障害模擬実行部１３２は、障害模擬定義情報１２１に指定された障害模擬の開始条件に基づいて障害を模擬するか否かを判定し、障害を模擬すると判定した場合に障害を模擬する（Ｓ２２１〜Ｓ２３４）。
障害模擬設定部１３１が開始条件を判定し、開始条件を満たしたときに割込み設定（Ｓ１２２）や割込み呼出し設定（Ｓ１２５、Ｓ１２６）を行ってもよい。
【０１０３】
障害模擬定義情報１２１に障害模擬の終了条件を付加し、障害模擬定義情報１２１に指定された終了条件を満たしたときに障害の模擬を終了してもよい。
例えば、ユーザは開始条件として説明した上記（ｂ）〜（ｅ）を終了条件として障害模擬定義情報１２１に設定する。
また、ユーザは、（ｆ）障害模擬の実行回数、（ｇ）障害模擬停止要求の発生を終了条件として障害模擬定義情報１２１に設定してもよい。
障害模擬実行部１３２は、障害模擬定義情報１２１に指定された障害模擬の終了条件に基づいて障害の模擬を終了するか否かを判定する。障害の模擬を終了する場合、障害模擬設定部１３１は障害模擬の設定を解除する（Ｓ１４２）。
【０１０４】
ユーザは、複数の障害模擬定義情報１２１それぞれにインデックス番号（識別情報の一例）を付与し、ハードウェア障害模擬システム１００に特定の障害模擬定義情報１２１のインデックス番号を指定してもよい。ハードウェア障害模擬システム１００は、ユーザに指定された障害模擬定義情報１２１だけを処理する。
これにより、ユーザは特定の障害だけをハードウェア障害模擬システム１００に模擬させることができる。
【０１０５】
ハードウェア障害模擬システム１００は、マルチＣＰＵもしくはマルチコアＣＰＵを用いて複数のＣＰＵ１４１で実行させても構わない。
この場合、一方のＣＰＵ１４１を用いて試験対象システム１１０とＶＭＭ１３０を実行し、他方のＣＰＵ１４１を用いて障害模擬制御部１２０を実行させる。
これにより、障害模擬制御部１２０の影響を試験対象システム１１０に与えずに、試験対象システム１１０の障害処理機能を試験することができる。
【０１０６】
実施の形態１において、例えば、以下のようなハードウェア障害模擬システム１００およびハードウェア障害模擬方法について説明した。
【０１０７】
ハードウェア障害模擬システム１００は障害模擬定義情報１２１、障害模擬制御部１２０、障害模擬設定部１３１、障害模擬実行部１３２、アドレス補正処理部１３３、模擬実行判定部１３４を備える。
障害模擬定義情報１２１は、障害の模擬内容を定義した情報である。
障害模擬制御部１２０は、障害模擬定義情報１２１を障害模擬設定部１３１へ送信する。
障害模擬設定部１３１は、障害模擬定義情報１２１に従って、障害を模擬すべきＩ／Ｏ１４３、メモリ１４２へのアクセスや割込みが発生した場合に障害模擬実行部１３２を呼び出すように設定を行う。
障害模擬実行部１３２は、障害模擬定義情報１２１に従って障害を模擬する。
アドレス補正処理部１３３は、障害模擬定義情報１２１に記載された（１ｂ）アドレスを補正する。
模擬実行判定部１３４は、障害模擬定義情報１２１に記載された（１ｉ）模擬回数や（１ｈ）模擬条件に従って、障害を模擬するか否かを判定する。
【０１０８】
ハードウェア障害模擬システム１００は、障害模擬定義情報１２１に格納された模擬内容に従ってＩ／Ｏ１４３、メモリ１４２の障害を模擬する。これにより、ユーザは、内部マシンチェック割込みの有無にかかわらず、Ｉ／Ｏ１４３やメモリ１４２の操作に対するシステムの障害処理機能の正常性を確認することができる。
【０１０９】
ハードウェア障害模擬システム１００は、障害発生時に各装置に関連するＩ／Ｏ１４３やメモリ１４２内に存在するエラービットを模擬しているので、どの装置が障害を起こしたかを特定するところまで障害を模擬できる。これにより、ユーザは、システムの障害処理機能の正常性を確認することができる。
【０１１０】
ハードウェア障害模擬システム１００は、動作としては正常なもののリトライ等により装置からのＩ／Ｏ完了割込みが遅延する他、無用な割込みが起こる、逆に必要なＩ／Ｏ完了割込みが起こらないといった障害の模擬もできる。
【０１１１】
ユーザは、障害模擬定義情報１２１の模擬内容を書き換えるだけで様々な種類の障害模擬を行うことができる。
【０１１２】
ユーザは、障害模擬開始要求を送信してから停止要求を送信するまで、同一の障害を繰り返し模擬できる。
【０１１３】
ハードウェア障害模擬システム１００は、実際には発生していない割込みをあたかも発生したかのように試験対象システム１１０に振る舞わせることができる。これにより、ユーザは、ハードウェア障害時にのみ発生するような割込みもハードウェアを改造することなく、ソフトウェアのみで発生させることができる。
【０１１４】
ハードウェア障害模擬システム１００は、実際に発生した割込みを遅延させて試験対象システム１１０に伝えること、実際に発生した割込みを発生しなかったことにして試験対象システム１１０に伝えないことができるようになる。
【０１１５】
ハードウェア障害模擬システム１００は、障害を模擬するか否かにかかわらず、Ｉ／Ｏ１４３、メモリ１４２へのアクセスログや割込みの発生ログを取得することができる。
【符号の説明】
【０１１６】
１００  ハードウェア障害模擬システム、１１０  試験対象システム、１１１  ＯＳ、１１２  アプリケーションプログラム、１２０  障害模擬制御部、１２１  障害模擬定義情報、１３０  ＶＭＭ、１３１  障害模擬設定部、１３２  障害模擬実行部、１３３  アドレス補正処理部、１３４  模擬実行判定部、１４０  ハードウェア、１４１  ＣＰＵ、１４２  メモリ、１４３  Ｉ／Ｏ。
【図１】
0005452336.tif 000002
【図２】
0005452336.tif 000003
【図３】
0005452336.tif 000004
【図４】
0005452336.tif 000005