(57)【特許請求の範囲】
【請求項１】
プロセッサとメモリとＩ／Ｏデバイスとを備えた、複数の物理計算機と，前記物理計算機の計算機資源を仮想化して，複数の仮想計算機を実行する仮想化制御部と，複数の前記仮想計算機中の、第一の物理計算機上の第一の仮想計算機と、第二の物理計算機上の第二の仮想計算機が，同一のアプリケーションプログラムを実行するコンピュータシステムであって，
前記仮想化制御部は，
前記第一の仮想計算機と前記第二の仮想計算機上のアプリケーションプログラムを同時に実行する同期制御部と，
前記第一の仮想計算機と前記第二の仮想計算機が発行したＩ／Ｏイベントを検出し，種類を特定するＩ／Ｏイベント検出部と，
前記第一の仮想計算機が発行したＩ／Ｏイベントと，前記第二の仮想計算機が発行したＩ／Ｏイベントを比較し，前記Ｉ／Ｏデバイスに対して出力を生成するＩ／Ｏイベント処理部と，を備え，
前記Ｉ／Ｏイベント処理部は，
前記第一の仮想計算機と前記第二の仮想計算機が発行した前記Ｉ／Ｏイベントが，Ｉ／Ｏコマンドである場合に，前記Ｉ／Ｏコマンドを比較するＩ／Ｏコマンド比較部と，
前記Ｉ／Ｏコマンド比較部の比較結果が不一致である場合には，前記Ｉ／Ｏコマンドの出力を抑止する抑止部と，
を備えることを特徴とするコンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムであって，
前記Ｉ／Ｏイベント処理部は，
前記第一の仮想計算機と前記第二の仮想計算機が発行した前記Ｉ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，前記第一の仮想計算機のメモリ領域と，前記第二の仮想計算機のメモリ領域から当該Ｉ／Ｏデータを読み出し，比較するＩ／Ｏデータ比較部を更に備え，
前記抑止部は，前記Ｉ／Ｏデータ比較部の比較結果が不一致である場合には，前記Ｉ／Ｏデータを前記メモリ領域から前記Ｉ／Ｏデバイスに読み出すのを抑止する，
ことを特徴とするコンピュータシステム。
【請求項３】
請求項２に記載のコンピュータシステムであって，
前記Ｉ／ＯデバイスはＤＭＡコントローラを備え，
前記抑止部は，前記Ｉ／Ｏデータ比較部の比較結果が不一致である場合に，前記ＤＭＡコントローラが前記メモリ領域から前記Ｉ／Ｏデータを読み出すのを抑止する，
ことを特徴とするコンピュータシステム。
【請求項４】
請求項２に記載のコンピュータシステムであって，
前記仮想化制御部は，
前記第一の仮想計算機と前記第二の仮想計算機それぞれが管理する仮想アドレスと，前記第一の物理計算機と前記第二の物理計算機それぞれが管理する物理アドレスの対応を管理するアドレス変換部を更に有し，
前記Ｉ／Ｏデータ比較部は，
前記第一の仮想計算機および前記第二の仮想計算機が発行した前記Ｉ／Ｏイベントから，前記第一の仮想計算機および前記第二の仮想計算機のＩ／Ｏデータ出力の対象データが保持されるメモリ領域の，仮想アドレスを特定する仮想アドレス特定部と，
前記アドレス変換部を用いて，特定された前記仮想アドレスに対応する物理アドレスを特定する物理アドレス特定部と，
特定された前記物理アドレスが示すメモリ領域から前記対象データを読み出すデータ読み出し部を備え，
読み出した前記対象データの比較結果を前記抑止部に出力する、
ことを特徴とするコンピュータシステム。
【請求項５】
請求項４に記載のコンピュータシステムであって，
前記アドレス変換部は，
前記仮想アドレスと前記物理アドレスの対応をページ単位で管理するページテーブルを備え，
前記仮想アドレス特定部は，
前記第一の仮想計算機および前記第二の仮想計算機のＩ／Ｏデータ出力の対象データが保持される前記メモリ領域を，前記仮想アドレスの開始アドレスとサイズにより特定し，
前記物理アドレス特定部は，
前記仮想アドレス特定部で特定された，前記仮想アドレスの開始アドレスとサイズからなる仮想アドレス情報を，前記ページテーブルを用いて，一つ以上の開始アドレスとサイズの組み合わせからなる物理アドレス情報に変換する，  
ことを特徴とするコンピュータシステム。
【請求項６】
請求項２に記載のコンピュータシステムであって，
前記物理計算機は，前記プロセッサと前記Ｉ／Ｏデバイスを接続するＩ／Ｏスイッチを更に有し，
前記Ｉ／Ｏスイッチは，
前記仮想化制御部から，Ｉ／Ｏデータ出力通知と，前記第一の仮想計算機及び前記第二の仮想計算機のＩ／Ｏデータ出力の対象データが保持される前記メモリ領域の複数の物理アドレスを受け取る要求受信インターフェース部と，
前記要求受信インターフェース部が前記Ｉ／Ｏデータ出力通知を受けると，受け取った複数の前記物理アドレスが示すメモリ領域から，対象データをそれぞれ読み出すメモリデータ読み出し部と，
読み出した前記対象データを比較するメモリデータ比較部と，
比較結果を前記仮想化制御部に受け渡す応答送信インターフェース部と，
を備える，
ことを特徴とするコンピュータシステム。
【請求項７】
請求項６に記載のコンピュータシステムであって，
前記仮想化制御部は，
前記第一の仮想計算機と前記第二の仮想計算機それぞれが管理する仮想アドレスと，前記第一の物理計算機と前記第二の物理計算機それぞれが管理する物理アドレスの対応を管理するアドレス変換部を更に有し，
前記Ｉ／Ｏデータ比較部は，
前記第一の仮想計算機および前記第二の仮想計算機が発行した前記Ｉ／Ｏイベントから，前記第一の仮想計算機および前記第二の仮想計算機のＩ／Ｏデータ出力の対象データが保持される前記メモリ領域の，複数の仮想アドレスを特定する仮想アドレス特定部と，
前記アドレス変換部を用いて，特定された複数の前記仮想アドレスに対応する複数の前記物理アドレスを特定する物理アドレス特定部と，
前記Ｉ／Ｏスイッチの前記要求受信インターフェース部に対して，前記Ｉ／Ｏデータ出力通知と，複数の前記物理アドレスを受け渡す要求送信インターフェース部と，
前記Ｉ／Ｏスイッチの前記応答送信インターフェース部から，比較結果を受け取る応答受信インターフェース部を備える，
ことを特徴とするコンピュータシステム。
【請求項８】
複数の仮想計算機が，アプリケーションプログラムを実行するコンピュータシステムであって，
プロセッサとメモリとＩ／Ｏデバイスを備えた、複数の物理計算機と，
前記物理計算機の計算機資源を仮想化して，第一の物理計算機上の第一の仮想計算機と、第二の物理計算機上の第二の仮想計算機と、第三の物理計算機上の第三の仮想計算機を実行する仮想化制御部とを備え，
前記仮想化制御部は，
前記第一，第二，第三の仮想計算機上の同一のアプリケーションプログラムを同時に実行する同期制御部と，
前記第一，第二，第三の仮想計算機が発行したＩ／Ｏイベントを検出し，種類を特定するＩ／Ｏイベント検出部と，
前記第一，第二，第三の仮想計算機がそれぞれ発行したＩ／Ｏイベントを比較し，前記Ｉ／Ｏデバイスに対して出力を生成するＩ／Ｏイベント処理部と，を備え，
前記Ｉ／Ｏイベント処理部は，
前記第一，第二，第三の仮想計算機が発行した前記Ｉ／Ｏイベントが，Ｉ／Ｏコマンドである場合に，前記Ｉ／Ｏコマンドを比較するＩ／Ｏコマンド比較部と，
前記Ｉ／Ｏコマンド比較部の比較の結果，２つが一致している場合は，一致している前記Ｉ／Ｏコマンドの出力を行い，全て不一致である場合には，前記Ｉ／Ｏコマンドの出力を抑止する抑止部と，
を備えることを特徴とするコンピュータシステム。
【請求項９】
請求項８に記載のコンピュータシステムであって，
前記Ｉ／Ｏイベント処理部は，
前記第一，第二，第三の仮想計算機が発行した前記Ｉ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，前記第一、第二、第三の仮想計算機それぞれのメモリ領域からＩ／Ｏデータを読み出し，比較するＩ／Ｏデータ比較部を備え，
前記抑止部は、前記Ｉ／Ｏデータ比較部の比較の結果，２つが一致している場合は，一致している前記Ｉ／Ｏデータ出力に対応する読み出しコマンドを出力し，全てが不一致である場合には，前記Ｉ／Ｏデータを前記メモリ領域から読み出すのを抑止する，
ことを特徴とするコンピュータシステム。
【請求項１０】
プロセッサとメモリとＩ／Ｏデバイスを備えた複数の物理計算機と，前記物理計算機それぞれの計算機資源を仮想化して，複数の仮想計算機を実行する仮想化制御部と有するコンピュータシステムの制御方法であって，
前記仮想化制御部は，
複数の前記仮想計算機上の同一のアプリケーションプログラムを同時に実行し，
複数の前記仮想計算機が発行したＩ／Ｏイベントを検出し，Ｉ／Ｏイベントの種類を特定し，
複数の前記仮想計算機が発行した前記Ｉ／Ｏイベントが，Ｉ／Ｏコマンドである場合，前記Ｉ／Ｏコマンドを比較し，前記Ｉ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，複数の前記仮想計算機のメモリ領域からＩ／Ｏデータを読み出して比較し，
前記Ｉ／Ｏコマンドを比較した結果が不一致である場合には，前記Ｉ／Ｏコマンドの出力を抑止し，
前記Ｉ／Ｏデータを比較した結果が不一致である場合には，前記Ｉ／Ｏデータを前記メモリ領域から読み出すことを抑止する，
ことを特徴とするコンピュータシステムの制御方法。
【請求項１１】
請求項１０に記載のコンピュータシステムの制御方法であって，
前記仮想化制御部は，
前記Ｉ／Ｏデータを読み出して比較する場合，
複数の前記仮想計算機が発行した前記Ｉ／Ｏイベントから，複数の前記仮想計算機の前記Ｉ／Ｏデータ出力の対象データが保持される前記メモリ領域の仮想アドレスを特定し，
特定した前記仮想アドレスを対応する前記物理計算機が管理する物理アドレスにアドレス変換し，
変換された前記物理アドレスが示す前記メモリ領域から対象データを読み出す，
ことを特徴とするコンピュータシステムの制御方法。
【請求項１２】
請求項１１に記載のコンピュータシステムの制御方法であって，
複数の前記仮想計算機は，第一の物理計算機上の第一の仮想計算機と、第二の物理計算機上の第二の仮想計算機を含み，
前記仮想化制御部は，
前記仮想アドレスと前記物理アドレスの対応をページ単位で管理するページテーブルを備え，
前記仮想アドレスを特定する場合，前記第一および第二の仮想計算機のＩ／Ｏデータ出力の対象データが保持される前記メモリ領域を，仮想アドレスの開始アドレスとサイズからなる仮想アドレス情報により特定し，
前記仮想アドレス情報を，前記ページテーブルを用いて，一つ以上の開始アドレスとサイズの組み合わせからなる物理アドレス情報に変換する，
ことを特徴とするコンピュータシステムの制御方法。
【請求項１３】
請求項１０に記載のコンピュータシステムの制御方法であって，
前記物理計算機は，前記プロセッサと前記Ｉ／Ｏデバイスを接続するＩ／Ｏスイッチを更に有し，
前記Ｉ／Ｏスイッチは，
前記仮想化制御部から，Ｉ／Ｏデータ出力通知と，複数の前記仮想計算機のＩ／Ｏデータ出力の対象データが保持されるメモリ領域の物理アドレスを受け取り，  
前記Ｉ／Ｏデータ出力通知を受けると，受け取った複数の前記物理アドレスが示す前記メモリ領域から，対象データをそれぞれ読み出し，
読み出した対象データを比較し，比較結果を前記仮想化制御部に受け渡す，
ことを特徴とするコンピュータシステムの制御方法。
【請求項１４】
請求項１０記載のコンピュータシステムの制御方法であって，
複数の前記仮想計算機は，第一の物理計算機上の第一の仮想計算機と、第二の物理計算機上の第二の仮想計算機と、第三の物理計算機上の第三の仮想計算機を含み，
前記仮想制御部は，
前記Ｉ／Ｏコマンドを比較の結果，前記第一，第二，第三の仮想計算機が発行した前記Ｉ／Ｏコマンドの内，一つが不一致である場合には，一致する二つを正しいＩ／Ｏコマンドとして出力し，全てが不一致である場合には，前記Ｉ／Ｏコマンドの出力を抑止する，
ことを特徴とするコンピュータシステムの制御方法。
【請求項１５】
請求項１０記載のコンピュータシステムの制御方法であって，
複数の前記仮想計算機は，第一の物理計算機上の第一の仮想計算機と、第二の物理計算機上の第二の仮想計算機と、第三の物理計算機上の第三の仮想計算機を含み，
前記仮想制御部は，
前記Ｉ／Ｏデータを読み出し，比較した結果，前記第一，第二，第三の仮想計算機のメモリ領域から読み出した前記Ｉ／Ｏデータの内，一つが不一致である場合には，一致する二つを正しいデータとして読み出し，全てが不一致である場合には，前記Ｉ／Ｏデータを前記メモリ領域から読み出すことを抑止する，
ことを特徴とするコンピュータシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，コンピュータシステムの構成技術に関わり，特に，搭載するプロセッサを多重化し，発生する故障を検出，隠蔽することで高信頼を実現する構成技術に関する。
【背景技術】
【０００２】
コンピュータシステムでの障害の抑止，あるいは影響最小化を可能とする高信頼なコンピュータシステムの構成技術の一つとして，プロセッサの耐故障（Ｆａｕｌｔ  Ｔｏｌｅｒａｎｔ，以下ＦＴと略記）技術がある。
【０００３】
プロセッサＦＴ技術にも種類があるが，コンピュータシステム障害抑止について，高い効果を得るために，ロックステッピングと呼ばれる手法で，複数のプロセッサをハードウェアレベルで同一動作させることで，プロセッサを多重化し，さらに，多重化されたプロセッサ間で出力信号を比較することで，プロセッサに発生する故障を検出，隠蔽することが行われていた。
【０００４】
しかし，近年，プロセッサの高性能化を目的とした，プロセッサの動作周波数の向上，プロセッサ内部への非同期動作する回路の導入により，ハードウェアレベルでの同一動作が不可能になりつつあり，ひいては，ロックステッピングによるプロセッサＦＴが困難になりつつある。
【０００５】
一方，近年のコンピュータシステムでの仮想化技術の発展により，特許文献１で開示される技術のように，ハイパバイザによって，複数のプロセッサにおいて，ハイパバイザ上で動作するプログラムの動作をソフトウェアレベルで同一動作させて多重化する手法が用いられつつある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−８０６９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述の，ソフトウェアレベルで同一動作を行う手法では，同一動作による多重化は可能なものの，プロセッサ故障の検出，隠蔽が不完全，あるいは著しく性能が低下する，という問題があった。
【０００８】
プロセッサ故障の検出，隠蔽は，基本的には，プロセッサの内部状態や出力を，多重化したプロセッサ間において比較することによって実現される。
【０００９】
プロセッサ故障の検出，隠蔽を完全にするためには，プロセッサから出力される全てのＩ／Ｏイベントを比較するなど，相当量の比較処理が必要となるが，比較処理はソフトウェアのハイパバイザによって行うことになるため，性能低下が著しい。
【００１０】
逆に，プロセッサから出力される全てのＩ／Ｏイベントを比較せず，例えば，メモリを経由せずに直接Ｉ／Ｏにアクセスを出力する，Ｉ／Ｏコマンド出力のみを比較する場合，性能低下は抑えられるが，プロセッサ故障の検出，隠蔽は不完全となる。
【００１１】
本発明の目的は，ソフトウェアレベルでのプロセッサ多重化において，性能低下を抑えつつ，プロセッサ故障の完全な検出，隠蔽を実現するコンピュータシステム及びその制御方法を提供する。
【課題を解決するための手段】
【００１２】
上記の目的を達成するため，本発明においては，複数の仮想計算機が同一のアプリケーションプログラムを実行するコンピュータシステムであって，プロセッサとメモリとＩ／Ｏデバイスを備えた物理計算機と，物理計算機の計算機資源を仮想化して，第一の仮想計算機と第二の仮想計算機を実行する仮想化制御部とを備え，仮想化制御部は，第一の仮想計算機と第二の仮想計算機上のアプリケーションプログラムを同時に実行する同期制御部と，第一の仮想計算機と第二の仮想計算機が発行したＩ／Ｏイベントを検出し，種類を特定するＩ／Ｏイベント検出部と，第一の仮想計算機が発行したＩ／Ｏイベントと，第二の仮想計算機が発行したＩ／Ｏイベントを比較し，Ｉ／Ｏデバイスに対して出力を生成するＩ／Ｏイベント処理部とを備え，Ｉ／Ｏイベント処理部は，第一の仮想計算機と第二の仮想計算機が発行したＩ／Ｏイベントが，Ｉ／Ｏコマンドである場合に，これらＩ／Ｏコマンドを比較するＩ／Ｏコマンド比較部と，Ｉ／Ｏコマンド比較部の比較結果が不一致である場合には，Ｉ／Ｏコマンドの出力を抑止する抑止部と，を備えた構成のコンピュータシステムを提供する。
【００１３】
また，上記の目的を達成するため，本発明において,上述のＩ／Ｏイベント処理部は，第一の仮想計算機と第二の仮想計算機が発行したＩ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，第一の仮想計算機のメモリ領域と，第二の仮想計算機のメモリ領域から読み出されたＩ／Ｏデータを比較するＩ／Ｏデータ比較部を更に備え，抑止部は，Ｉ／Ｏデータ比較部の比較結果が不一致である場合には，当該Ｉ／Ｏデータをメモリ領域からの読み出しを抑止するコンピュータシステムを提供する。
【００１４】
更に，上記の目的を達成するため，本発明においては，複数の仮想計算機が，同一のアプリケーションプログラムを実行するコンピュータシステムであって，
プロセッサとメモリとＩ／Ｏデバイスを備えた物理計算機と，物理計算機の計算機資源を仮想化して，第一の仮想計算機と第二の仮想計算機と第三の仮想計算機を実行する仮想化制御部とを備え，仮想化制御部は，第一，第二，第三の仮想計算機上のアプリケーションプログラムを同時に実行する同期制御部と，第一，第二，第三の仮想計算機が発行したＩ／Ｏイベントを検出し，種類を特定するＩ／Ｏイベント検出部と，第一，第二，第三の仮想計算機がそれぞれ発行したＩ／Ｏイベントを比較し，Ｉ／Ｏデバイスに対して出力を生成するＩ／Ｏイベント処理部を備え，Ｉ／Ｏイベント処理部は，第一，第二，第三の仮想計算機が発行したＩ／Ｏイベントが，Ｉ／Ｏコマンドである場合に，これらＩ／Ｏコマンドを比較するＩ／Ｏコマンド比較部と，比較の結果，２つが一致している場合は，一致しているＩ／Ｏコマンドを出力し，全て不一致の場合には，Ｉ／Ｏコマンドの出力を抑止する抑止部とを備えた構成のコンピュータシステムを提供する。
【００１５】
また更に，上記の目的を達成するため，本発明において,上述のＩ／Ｏイベント処理部は，第一，第二，第三の仮想計算機が発行したＩ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，第一，第二，第三の仮想計算機のメモリ領域から読み出されたＩ／Ｏデータを比較するＩ／Ｏデータ比較部を更に有し，抑止部は，Ｉ／Ｏデータ比較部の比較の結果，２つが一致している場合は，一致しているＩ／Ｏデータ出力に対応するデータ読み出しコマンドの出力を行い，全て不一致の場合には，Ｉ／Ｏデータをメモリ領域から読み出すのを抑止するコンピュータシステムを提供する。
【００１６】
更にまた，上記の目的を達成するため，本発明においては，プロセッサとメモリとＩ／Ｏデバイスを備えた物理計算機と，物理計算機の計算機資源を仮想化して，複数の仮想計算機を実行する仮想化制御部と有するコンピュータシステムの制御方法であって，仮想化制御部は，複数の仮想計算機上の同一のアプリケーションプログラムを同時に実行し，複数の仮想計算機が発行したＩ／Ｏイベントを検出し，Ｉ／Ｏイベントの種類を特定し，複数の仮想計算機が発行したＩ／ＯイベントがＩ／Ｏコマンドである場合，Ｉ／Ｏコマンドを比較し，Ｉ／Ｏイベントが，Ｉ／Ｏデータ出力である場合に，複数の仮想計算機のメモリ領域から当該Ｉ／Ｏデータを読み出して比較し，Ｉ／Ｏコマンドの比較結果が不一致である場合には，Ｉ／ＯコマンドのＩ／Ｏデバイスへの出力を抑止し，Ｉ／Ｏデータの比較結果が不一致である場合には，Ｉ／Ｏデータをメモリ領域からＩ／Ｏデバイスに読み出すことを抑止するコンピュータシステムの制御方法を提供する。
【００１７】
すなわち,本発明においては，メモリを経由して間接的にＩ／Ｏイベントを出力する，Ｉ／Ｏデータ出力を含め，プロセッサから出力される全てのＩ／Ｏイベント比較を行うが，比較処理を効率化することにより性能低下を抑える，という方針を採る。比較処理の効率化は，（１）Ｉ／Ｏデータ出力メモリアクセスに伴うハイパバイザ遷移オーバーヘッド削減と，（２）Ｉ／Ｏデータ出力メモリ読み出し，比較オーバーヘッド削減の２点により行う。
【００１８】
（１）Ｉ／Ｏデータ出力メモリアクセスに伴うハイパバイザ遷移オーバーヘッド削減は，Ｉ／Ｏデータ出力に用いられるメモリ領域が，特定のＩ／Ｏコマンド出力を契機として，その後Ｉ／Ｏから読み出されることに着目し，プロセッサが，Ｉ／Ｏデータ出力メモリ領域にアクセスを行うたびに，ハイパバイザ遷移を行って比較するのではなく，特定のＩ／Ｏコマンド出力を捕捉してハイパバイザ遷移を行い，まとめて比較を行うことによって，ハイパバイザへの遷移回数を減らして実現する。
【００１９】
（２）Ｉ／Ｏデータ出力メモリ読み出し，比較オーバーヘッド削減は，Ｉ／Ｏデータ出力のメモリ領域の読み出しが，アドレスさえ与えられれば，Ｉ／Ｏからでも可能であることに着目し，Ｉ／Ｏデータ比較部をＩ／Ｏスイッチに追加し，ハイパバイザがＩ／Ｏデータ出力メモリ読み出しを捕捉した後，ハイパバイザはメモリ領域のアドレスをＩ／Ｏデータ比較部に与え，比較処理はＩ／Ｏデータ比較部で行うことによって実現する。
【発明の効果】
【００２０】
本発明により，近年の高性能なプロセッサを搭載したコンピュータシステムにおいても，高い障害抑止効果を有するプロセッサＦＴが実現でき，ひいては高性能，かつ高信頼なコンピュータシステムを実現することが可能になる。
【図面の簡単な説明】
【００２１】
【図１】第一の実施例の仮想計算機システムの全体構成を示す図である。
【図２】第一の実施例の仮想計算機システムのハイパバイザＢの詳細構成を示す図である。
【図３】第一の実施例の仮想計算機システムのＩ／Ｏスイッチの詳細構成を示す図である。
【図４】仮想計算機システムにおける、ハイパバイザによるＶＭ同期処理の流れを説明する図である。
【図５】第一の実施例の，プロセッサ故障が発生していない場合の，ハイパバイザによるＶＭ同期，Ｉ／Ｏイベント出力比較処理の流れを示す図である。
【図６】第一の実施例の，プロセッサ故障が発生しＩ／Ｏコマンドが変化した場合の，ハイパバイザによるＶＭ同期，Ｉ／Ｏイベント出力比較処理の流れを示す図である。
【図７】第一の実施例の，プロセッサ故障が発生しＩ／Ｏデータが変化した場合の，ハイパバイザによるＶＭ同期，Ｉ／Ｏイベント出力比較処理の流れを示す図である。
【図８】第一の実施例の，ハイパバイザＢの物理アドレス変換部の処理フローを示す図である。
【図９】第二の実施例の仮想計算機システムの全体構成を示す図である。
【図１０】第二の実施例の仮想計算機システムのハイパバイザＣの詳細構成図である。
【図１１】第二の実施例の仮想計算機システムのＩ／Ｏスイッチの詳細構成図である。
【発明を実施するための形態】
【００２２】
以下、本発明の好適な実施例を図面に従い説明する。なお、本明細書において、各計算機上で実行される各種のプログラムの機能ブロックを「部」として表現する場合があるが、図面上ではこの「部」の表示は省略される。例えば、「Ｉ／Ｏイベント処理部」は、「Ｉ／Ｏ  Ｅｖｅｎｔ  Ｐｒｏｃｅｓｓｉｎｇ（Ｉ／Ｏイベント処理）」と表記され、”Ｕｎｉｔ”は省略されている。
【実施例１】
【００２３】
図１は，第一の実施例の全体構成を示す図である。同図においては、左側が系Ａを構成する物理計算機Ａ、右側が系Ｂを構成する物理計算機Ｂを示しているが、図面より明らかなため、以後の説明において、系Ａ，Ｂ表記は省略する。
【００２４】
１００，１０１はＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であるプロセッサ，１０２，１０３はメモリ，１０５，１０６はＩ／ＯデバイスＸ，Ｙであり，１２０，１２１は，プロセッサ，メモリ，Ｉ／Ｏデバイスによって構成される物理計算機である。
【００２５】
プロセッサとＩ／ＯデバイスがＩ／Ｏスイッチ１０４を介して接続されることにより，物理計算機とＩ／Ｏデバイスの間は接続が共有されており，プロセッサ１００，メモリ１０２，Ｉ／Ｏスイッチ１０４により，物理計算機１２０が，プロセッサ１０１，メモリ１０３，Ｉ／Ｏスイッチ１０４により，物理計算機１２１がそれぞれ構成され，ＤＭＡコントローラ(Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ：ＤＭＡ）を備えたＩ／Ｏデバイス１０５，１０６は物理計算機１２０，１２１と接続される。
【００２６】
ここで，１０７，１０８，１０９はＰｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）  Ｅｘｐｒｅｓｓ  Ｂｕｓによる物理的な接続であり，プロセッサ１００，１０１，メモリ１０２，１０３とＩ／Ｏスイッチ１０４が，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７によって，また，Ｉ／Ｏスイッチ１０４とＩ／Ｏデバイス１０５がＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０８によって，さらに，Ｉ／Ｏスイッチ１０４とＩ／Ｏデバイス１０６がＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０９によって，それぞれ接続されている。
【００２７】
１３２，１３３は仮想化制御部として機能するハイパバイザのプログラムである。この仮想化制御部を構成するハイパバイザ１３２，１３３が，物理計算機１２０，１２１でそれぞれ動作することにより，仮想的なコンピュータに対応するソフトウェア実行環境である，仮想計算機（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ，以下ＶＭと略記）１２２と１２３が生成される。
【００２８】
メモリ１０２は，ハイパバイザ１３２の働きにより，ＶＭ１２２が利用するメモリ領域１１０と，ハイパバイザ１３２が利用するメモリ領域１１２に分割される。このとき，ＶＭ１２２での仮想アドレス空間と，物理計算機１２０での物理アドレス空間の対応は，ハイパバイザ１３２内の，特にページテーブルを備えたアドレス変換部１４１よって管理される。
【００２９】
また，同様に，メモリ１０３は，ハイパバイザ１３３の働きにより，ＶＭ１２３が利用するメモリ領域１１１と，ハイパバイザ１３３が利用するメモリ領域１１３に分割され，ＶＭ１２３での仮想アドレス空間と，物理計算機１２１での物理アドレス空間の対応は，ハイパバイザ１３３内のアドレス変換部１４３によって管理される。
【００３０】
ＶＭ１２２と１２３内においては，それぞれ，ソフトウェア１３０と１３１が動作するが，ハイパバイザ１３２の同期処理部１４０から，ハイパバイザ１３３の同期処理部１４２に，イベント送信チャネル１６０を通じて情報が送信されることにより，ソフトウェア１３０と１３１の動作は，ソフトウェアレベルで同一である。
【００３１】
ここで，イベント送信チャネル１６０は，物理計算機１２０と１２１間でのデータの送受信を論理的に示したものであり，物理的には，Ｉ／Ｏスイッチ１０４を介した通信である。
【００３２】
また，ソフトウェアの動作がソフトウェアレベルで同一，とは，ソフトウェアのプログラム実行フローが，割り込みなどの非同期事象の影響も含めた上で，同一であるということである。割り込みなどの非同期事象は，実行したプログラムの内容だけでは，発生の仕方が一意に定まらないため，プログラム実行フローを同一とするためには，非同期事象の発生の仕方を同一にする必要があり，ハイパバイザ１３２の同期処理部１４０と，ハイパバイザ１３３の同期処理部１４２は，この処理を行うものである。処理の内容については，後述する。
【００３３】
ソフトウェア１３０が実行されると，Ｉ／Ｏイベント１７０が発生するが，プロセッサ１００が有する機構の働きにより，Ｉ／Ｏイベント１７０はハイパバイザ１３２にトラップされ，同期処理部１４０に入力される。同期処理部１４０は，発生したＩ／Ｏイベント１７０の情報を，イベント送信チャネル１６０を通じて，ハイパバイザ１３３の同期処理部１４２に送信する。
【００３４】
同期処理部１４２は，受信したＩ／Ｏイベント１７０の情報を，ソフトウェア１３０と１３１の動作をソフトウェアレベルで同一にする処理に用いる他に，Ｉ／Ｏイベント１７２として，同じくハイパバイザ１３３内のＩ／Ｏイベント検出部１４４に出力する。
【００３５】
また，ソフトウェア１３１の実行により発生するＩ／Ｏイベント１７１は，プロセッサ１０１が有する機構の働きにより，ハイパバイザ１３３にトラップされ，Ｉ／Ｏイベント検出部１４４に入力される。
【００３６】
Ｉ／Ｏイベント検出部１４４では，ＶＭ１２２側のＩ／Ｏイベント１７２の種類を解析し，特に，Ｉ／Ｏコマンドを出力するイベントと，Ｉ／Ｏデータを出力するイベントについて，それぞれＩ／Ｏコマンド出力イベント１７３と，Ｉ／Ｏデータ出力イベント１７４として，Ｉ／Ｏイベント処理部１４５に出力する。また，Ｉ／Ｏイベント検出部１４４は，ＶＭ１２３側のＩ／Ｏイベント１７１の種類を解析し，Ｉ／Ｏコマンド出力イベント１７５と，Ｉ／Ｏデータ出力イベント１７６を，Ｉ／Ｏイベント処理部１４５に出力する。
【００３７】
Ｉ／Ｏイベント処理部１４５は，Ｉ／Ｏコマンド出力イベント１７３，１７５について，Ｉ／Ｏコマンドの内容を比較し，一致していれば，Ｉ／Ｏスイッチ１０４との間で，Ｉ／ＯのＩ／Ｏコマンド１９０として送受信を行う。
【００３８】
Ｉ／Ｏスイッチ１０４は，Ｉ／Ｏコマンド１９０を，その送受信先に応じて，Ｉ／Ｏデバイス１０５，あるいはＩ／Ｏデバイス１０６に，それぞれＩ／Ｏコマンド１８１，１８２として送受信することにより，Ｉ／Ｏコマンド出力イベント１７３，および１７５は，Ｉ／Ｏデバイス１０５，あるいは１０６に出力される。
【００３９】
また，Ｉ／Ｏイベント処理部１４５は，Ｉ／Ｏデータ出力イベント１７４，１７６について，Ｉ／Ｏデータの内容を比較し，一致していれば，Ｉ／Ｏコマンド１９０として，Ｉ／Ｏデバイス１０５，あるいは１０６のＤＭＡに読み出しコマンドを送信する。
【００４０】
Ｉ／Ｏデータ出力イベント１７４でのＩ／Ｏデータは，ソフトウェア１３０のＩ／Ｏデータ書き込み１７７によって，Ｉ／Ｏデータ出力イベント１７４に先立って，ＶＭ１２２が利用するメモリ領域１１０内の，Ｉ／Ｏデータバッファ１１４に書き込まれている。
【００４１】
また，Ｉ／Ｏデータ出力イベント１７６でのＩ／Ｏデータは，ソフトウェア１３１のＩ／Ｏデータ書き込み１７８によって，Ｉ／Ｏデータ出力イベント１７６に先立って，ＶＭ１２３が利用するメモリ領域１１１内の，Ｉ／Ｏデータバッファ１１５に書き込まれている。
【００４２】
Ｉ／Ｏイベント処理部１４５には，特に，Ｉ／Ｏデータ出力比較部１４６があり，Ｉ／Ｏデータ出力イベント１７４の情報から，Ｉ／Ｏデータバッファ１１４のＶＭ１２２のアドレス空間でのアドレスを特定し，さらに，ＶＭ１２２のアドレス空間でのアドレスから，物理計算機１２０のアドレス空間でのアドレスに変換する。
【００４３】
同様に，Ｉ／Ｏデータ出力比較部１４６では，Ｉ／Ｏデータ出力イベント１７６の情報から，Ｉ／Ｏデータバッファ１１５のＶＭ１２３のアドレス空間でのアドレスを特定し，さらに，ＶＭ１２３のアドレス空間でのアドレスから，物理計算機１２１のアドレス空間でのアドレスに変換する。
【００４４】
続いてＩ／Ｏデータ出力比較部１４６は，Ｉ／Ｏデータ出力イベント通知１９１と，Ｉ／Ｏデータ出力イベント１７４に対応するＩ／Ｏデータバッファ１１４の物理計算機１２０のアドレス空間でのアドレス情報である，物理アドレス情報１９２と，Ｉ／Ｏデータ出力イベント１７５に対応するＩ／Ｏデータバッファ１１５の物理計算機１２１のアドレス空間でのアドレス情報である，物理アドレス情報１９３を，Ｉ／Ｏスイッチ１０４に対する要求送信部１４７を通じて，Ｉ／Ｏスイッチ１０４の要求受信部１１６に，それぞれ送信する。
【００４５】
Ｉ／Ｏスイッチ１０４の要求受信部１１６が，Ｉ／Ｏデータ出力イベント通知１９１，物理アドレス情報１９２，１９３を受信すると，Ｉ／Ｏスイッチ１０４は，Ｉ／Ｏデータバッファ１１４と１１５の内容を，それぞれＤＭＡデータ読み出し１８６，１８７として，それぞれメモリ１０２，１０３から直接読み出して比較し，比較結果１９４を，Ｉ／Ｏデータ出力比較部１４６への応答送信部１１７を通じて，Ｉ／Ｏデータ出力比較部１４６の応答受信部１４８に送信する。
【００４６】
ここで，Ｉ／Ｏコマンド１９０，およびＩ／Ｏデータ出力イベント通知１９１，物理アドレス情報１９２，１９３，比較結果１９４は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７上での，Ｉ／Ｏコマンド１８０の送受信として，同様のバスシーケンスにて実行されるものである。
【００４７】
また，ＤＭＡデータ読み出し１８６，１８７は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７上での，ＤＭＡデータ読み出し１８５として，同様のバスシーケンスで実行されるものである。
【００４８】
Ｉ／Ｏデータ出力比較部１４６は，Ｉ／Ｏデータバッファ１１４と１１５の比較結果を，応答受信部１４８を通じて受信し，その結果が一致であることを示していれば，Ｉ／Ｏコマンド１９０として，Ｉ／Ｏデバイス１０５，あるいは１０６に，ＤＭＡ読み出しコマンドを送信する。
【００４９】
Ｉ／Ｏデバイス１０５，あるいは１０６が，ＤＭＡ読み出しコマンドを受信すると，ＤＭＡデータ読み出し１８８，あるいは１８９として，Ｉ／Ｏスイッチ１０４に対して読み出しを行う。Ｉ／Ｏスイッチ１０４は，ＤＭＡデータ読み出し１８８，１８９を，その読み出し先に応じて，ＤＭＡデータ読み出し１８６，１８７として，それぞれメモリ１０２，１０３から読み出して，ＤＭＡデータ読み出し１８８，１８９の読み出し結果を返すことにより，結果としてＩ／Ｏデータ出力イベント１７４，および１７６は，Ｉ／Ｏデバイス１０５，あるいは１０６に出力される。
【００５０】
図２は，図１に示した実施例１のシステムの物理計算機１２１上で動作する仮想化制御部を構成するハイパバイザ１３３の一構成例の詳細を示す図である。
【００５１】
ハイパバイザ１３３には，同期処理部１４２，アドレス変換部１４３，Ｉ／Ｏイベント検出部１４４，Ｉ／Ｏイベント処理部１４５があり，Ｉ／Ｏイベント処理部１４５には，Ｉ／Ｏデータ出力比較部１４６があり，Ｉ／Ｏデータ出力比較部１４６には，Ｉ／Ｏスイッチ１０４に対する要求送信部１４７，応答受信部１４８があることは先に述べた通りであり，更に，仮想アドレス特定部１５１と，物理アドレス変換部１５２等がある。
【００５２】
加えて，ハイパバイザ１３３のＩ／Ｏイベント処理部１４５には，Ｉ／Ｏコマンド出力比較部１４９，Ｉ／Ｏコマンド出力抑止部１５０，ＤＭＡ抑止部１５３がある。なお，このＩ／Ｏコマンド出力抑止部１５０とＤＭＡ抑止部１５３は総称して抑止部と呼ばれることがある。
【００５３】
Ｉ／Ｏコマンド出力比較部１４９は，Ｉ／Ｏイベント検出部１４４からのＩ／Ｏコマンド出力イベント１７３，１７５のＩ／Ｏコマンドの内容を比較し，その結果をＩ／Ｏコマンド比較結果２０１として，Ｉ／Ｏコマンド出力抑止部１５０に出力する。
【００５４】
Ｉ／Ｏコマンド出力抑止部１５０は，Ｉ／Ｏイベント検出部１４４からのＩ／Ｏコマンド出力イベント１７３，１７５のＩ／Ｏコマンドの内容をＩ／Ｏコマンド１９０として送受信するが，Ｉ／Ｏコマンド比較結果２０１が不一致を示している場合，対応するＩ／Ｏコマンド出力イベント１７３，１７５のＩ／Ｏコマンド送受信を抑止する。
【００５５】
Ｉ／Ｏデータ出力比較部１４６の仮想アドレス特定部１５１は，Ｉ／Ｏイベント検出部１４４からのＩ／Ｏデータ出力イベント１７４，１７６の情報から，Ｉ／Ｏデータバッファ１１４のＶＭ１２２のアドレス空間での仮想アドレスと，Ｉ／Ｏデータバッファ１１６のＶＭ１２３のアドレス空間での仮想アドレスを特定し，その結果をＩ／Ｏデータ出力イベント仮想アドレス情報２１１，２１２として，物理アドレス変換部１５２に出力する。
【００５６】
物理アドレス変換部１５２は，Ｉ／Ｏデータ出力イベント仮想アドレス情報２１１に基づいて，一般的なページテーブルを有するアドレス変換部１４３のページテーブルサイズ毎に，仮想ページ番号２２１をアドレス変換部１４３に入力し，アドレス変換部１４３から，対応する物理ページ番号２２２を入力することによって，Ｉ／Ｏデータバッファ１１４の物理計算機１２０のアドレス空間でのアドレスに変換し，その結果を，Ｉ／Ｏデータ出力イベント物理アドレス情報２３１として，要求送信部１４７に出力する。
【００５７】
また，物理アドレス変換部１５２は，同様にして，Ｉ／Ｏデータバッファ１１６の物理計算機１２１のアドレス空間でのアドレスを，Ｉ／Ｏデータ出力イベント物理アドレス情報２３２として，要求送信部１４７に出力する。
【００５８】
要求送信部１４７は，Ｉ／Ｏイベント検出部１４４からのＩ／Ｏデータ出力イベント１７４，１７６の入力と，物理アドレス変換部１５２からのＩ／Ｏデータ出力イベント物理アドレス情報２３１，２３２の入力から，Ｉ／Ｏデータ出力イベント通知１９１，物理アドレス情報１９２，１９３をＩ／Ｏスイッチ１０４の要求受信部１１６に送信する。
【００５９】
応答受信部１４８は，比較結果１９４をＩ／Ｏスイッチ１０４の応答送信部１１７から受信し，その結果をＩ／Ｏデータ比較結果２４１として，ＤＭＡ抑止部１５３に出力する。
【００６０】
ＤＭＡ抑止部１５３は，Ｉ／Ｏイベント検出部１４４からのＩ／Ｏデータ出力イベント１７４，１７６に含まれるＩ／Ｏデバイス１０５，あるいは１０６へのＤＭＡ読み出しコマンドをＩ／Ｏコマンド１９０として送信するが，Ｉ／Ｏデータ比較結果２４１が不一致を示している場合，対応するＩ／Ｏデータ出力イベント１７４，１７６のＤＭＡ読み出しコマンド送信を抑止する。
【００６１】
図３は，図１に示した実施例１のシステムのＩ／Ｏスイッチ１０４の一構成例の詳細を示す図である。
【００６２】
Ｉ／Ｏスイッチ１０４は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７によってプロセッサ１００，１０１と，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０８によってＩ／Ｏデバイス１０５と，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０９によってＩ／Ｏデバイス１０６と，それぞれ接続され，Ｉ／Ｏコマンド１８０の送受信を，Ｉ／Ｏデバイス１０５にＩ／Ｏコマンド１８１として送受信し，あるいは，Ｉ／Ｏデバイス１０６にＩ／Ｏコマンド１８２として送受信し，また，Ｉ／Ｏデバイス１０５からのＤＭＡ読み出し１８８，あるいはＩ／Ｏデバイス１０６からのＤＭＡ読み出し１８９を，ＤＭＡ読み出し１８５として読み出すが，これは，Ｉ／Ｏスイッチ１０４内のスイッチ回路３００の動作による。
【００６３】
また，Ｉ／Ｏスイッチ１０４には，Ｉ／Ｏデータ出力比較部１４６に対する要求受信部１１６，応答送信部１１７があることは先に述べたが，好適には加えて，ＤＭＡデータ読み出し部３０１と，Ｉ／Ｏデータ比較部として機能するＩ／Ｏデータバッファ比較部３０２が付加される。このＩ／Ｏデータバッファ比較部３０２が付加されることにより，Ｉ／Ｏスイッチ１０４はハイパバイザ１３２，１３３の仮想化制御部のデータ比較機能を分担し,その比較オーバーヘッド削減を図る。
【００６４】
要求受信部１１６は，Ｉ／Ｏスイッチ１０４内で，スイッチ回路３００を通じてＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７と接続されており，Ｉ／Ｏデータ出力イベント通知１９１，物理アドレス情報１９２，１９３を，Ｉ／Ｏコマンド１８０として，Ｉ／Ｏデータ出力比較部１４６の要求送信部１４７から受信し，受信した内容をＩ／Ｏデータ出力イベント通知３１１，Ｉ／Ｏデータバッファ１１４の物理アドレス情報３１２，Ｉ／Ｏデータバッファ１１５の物理アドレス３１３として，ＤＭＡデータ読み出し部３０１に出力する。
【００６５】
ＤＭＡデータ読み出し部３０１は，Ｉ／Ｏデータ出力イベント通知３１１，物理アドレス情報３１２，３１３を受け取ると，Ｉ／Ｏデータバッファ１１４，１１５の物理アドレス情報３１２，３１３をもとに，Ｉ／Ｏデータバッファ１１４，１１５へのＤＭＡデータ読み出し１８６，１８７をそれぞれ行い，ＤＭＡ読み出し結果３２６，３２７を，Ｉ／Ｏデータバッファ比較部３０２にそれぞれ出力する。
【００６６】
Ｉ／Ｏデータバッファ比較部３０２は，ＤＭＡデータ読み出し部３０１から入力されるＤＭＡ読み出し結果３２６，３２７を順次比較し，比較結果３１４を応答送信部１１７に出力する。
【００６７】
応答送信部１１７は，Ｉ／Ｏデータバッファ比較部３０２からの比較結果３１４を入力し，Ｉ／Ｏスイッチ１０４内で，スイッチ回路３００を通じてＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ１０７と接続されており，比較結果１９４を，Ｉ／Ｏコマンド１８０として，Ｉ／Ｏデータ出力比較部１４６の応答受信部１４８に送信する。それを受けた応答受信部１４８は，Ｉ／Ｏデータ比較結果２４１として，ＤＭＡ抑止部１５３に出力することは上述の通りである。
【００６８】
図４は，本実施例の上述したシステム構成において、ハイパバイザによるＶＭの同期処理のみを行う場合についての流れを説明するための図である。
【００６９】
物理計算機１２０でハイパバイザ１３２が動作することによりＶＭ１２２が生成され，ＶＭ１２２内でソフトウェア１３０が動作し，物理計算機１２１でハイパバイザ１３３が動作することによりＶＭ１２３が生成され，ＶＭ１２３内でソフトウェア１３１が動作することは先に述べた。
【００７０】
また，Ｉ／Ｏスイッチ１０４を介して接続されたＩ／Ｏデバイス１０５がＤＭＡを備え，Ｉ／Ｏコマンド１８０を通じてＤＭＡデータ読み出しが起動されることも先に述べた。
【００７１】
その上で，ソフトウェア１３０，１３１の処理に応じた，仮想計算機システム全体での処理の流れを説明する。
【００７２】
この例では，ソフトウェア１３０は，非同期事象，具体的には割り込みであるが，４８１が物理計算機１２０に入力されて処理４０１でそれを受理し，その後，処理４０２でＩ／Ｏコマンド１を出力し，非同期事象４８２が入力されると，処理４０３でそれを受理し，その後，処理４０４でＩ／Ｏデータ１をメモリに書き込み，処理４０５でＩ／Ｏデータ２をメモリに書き込み，処理４０６でＤＭＡ読み出し起動のＩ／Ｏコマンド２を出力し，非同期事象４８３が入力されると，処理４０７でそれを受理する動作を行っている。
【００７３】
また，Ｉ／Ｏデバイス１０５のＤＭＡは，ソフトウェア１３０の処理４０６で出力されるＤＭＡ読み出し起動のＩ／Ｏコマンド２を受理し，処理４７１にてＤＭＡ転送を開始し，処理４７２でソフトウェア１３０が処理４０４でメモリに書き込んだＩ／Ｏデータ１を読み出し，処理４７３でソフトウェア１３０が処理４０５でメモリに書き込んだＩ／Ｏデータ２を読み出し，処理４７４でＤＭＡ転送を終了する。
【００７４】
図４に示すように，ソフトウェア１３０の動作のうち，非同期事象の受理である処理４０１，４０３，４０７については，ハイパバイザ１３２の働きにより，ソフトウェア１３０内での遷移ではなく，ハイパバイザ１３２への遷移が発生する。
【００７５】
物理計算機１２０に非同期事象４８１が入力されると，処理４０１でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理４５１で，受理した非同期事象４８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【００７６】
物理計算機１２０に非同期事象４８２が入力されると，処理４０３でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理４５３で，受理した非同期事象４８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【００７７】
ハイパバイザ１３３は，ハイパバイザ１３２が処理４５１で送信した，非同期事象４８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理４５２において受信する。
【００７８】
同様に，ハイパバイザ１３３は，ハイパバイザ１３２が処理４５３で送信した，非同期事象４８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理４５４において受信する。
【００７９】
ハイパバイザ１３３は，処理４５５で，処理４５４にて受信した，非同期事象４８２を受理した際のソフトウェア１３０の実行位置の情報から，その位置でソフトウェア１３１の実行が停止し，ハイパバイザ１３３への遷移が発生するように，物理計算機１２１を設定する。
【００８０】
次に，処理４５６で，処理４５２にて受信した非同期事象４８１の情報から，仮想的な非同期事象４９１を設定し，あたかも仮想計算機１２３に非同期事象４８１が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【００８１】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象４８１が入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理４１２において，ソフトウェア１３０が処理４０２において出力したＩ／Ｏコマンド１と同一のＩ／Ｏコマンドを出力しようとするが，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【００８２】
ハイパバイザ１３３では，ソフトウェア１３１が処理４１２において出力しようとしたＩ／Ｏコマンド１を，処理４５７において破棄する。破棄する理由は，Ｉ／Ｏコマンド１は，ソフトウェア１３０が処理４０２において既に出力しているからである。破棄の後に，再度ソフトウェア１３１に遷移する。
【００８３】
ソフトウェア１３１に再度遷移した後に，ソフトウェア１３１は，ソフトウェア１３０と同一の動作を行い，やがて，ハイパバイザ１３３が，処理４５５において物理計算機１２１に設定した停止位置に到達し，処理４１３において，ハイパバイザ１３３への遷移が発生する。
【００８４】
ここまでのソフトウェア１３１の動作，具体的には，処理４５６の直後から開始され，処理４１２にて中断，処理４５７の後に再開され，処理４１３で中断されるまでの間の動作は，ソフトウェア１３０の，処理４５１の後から開始され，処理４０２を実行，処理４０３で中断されるまでの間の動作と同一である。
【００８５】
物理計算機１２０に非同期事象４８３が入力されると，同様に，処理４０７でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理４５８で，受理した非同期事象４８３の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【００８６】
ハイパバイザ１３３は，ハイパバイザ１３２が処理４５８で送信した，非同期事象４８３の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理４５９において受信する。
【００８７】
ハイパバイザ１３３は，処理４６０で，処理４５９にて受信した，非同期事象４８３を受理した際のソフトウェア１３０の実行位置の情報から，その位置でソフトウェア１３１の実行が停止し，ハイパバイザ１３３への遷移が発生するように，物理計算機１２１を設定する。
【００８８】
次に，処理４６１で，処理４５４にて受信した非同期事象４８２の情報から，仮想的な非同期事象４９２を設定し，あたかも仮想計算機１２３に非同期事象４８２が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【００８９】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象４８２入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理４１４と４１５において，ソフトウェア１３０が処理４０４と４０５においてメモリに書き込むＩ／Ｏデータ１，２と同一のＩ／Ｏデータをメモリに書き込む。
【００９０】
その後に，ソフトウェア１３１は，処理４１６において，ソフトウェア１３０が処理４０６において出力した，ＤＭＡ読み出し起動のＩ／Ｏコマンド２と同一のＩ／Ｏコマンドを出力しようとするが，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【００９１】
ハイパバイザ１３３では，ソフトウェア１３１が処理４１６において出力しようとしたＩ／Ｏコマンド２を，処理４６２において破棄し，再度ソフトウェア１３１に遷移する。
【００９２】
ソフトウェア１３１に再度遷移した後に，ソフトウェア１３１は，ソフトウェア１３０と同一の動作を行い，やがて，ハイパバイザ１３３が，処理４６０において物理計算機１２１に設定した停止位置に到達し，処理４１７において，ハイパバイザ１３３への遷移が発生する。
【００９３】
ここまでのソフトウェア１３１の動作，具体的には，処理４６１の直後から開始され，処理４１４，４１５を実行し，処理４１６にて中断，処理４６２の後に再開され，処理４１７で中断されるまでの間の動作は，ソフトウェア１３０の，処理４５３の後から開始され，処理４０４，４０５，４０６を実行，処理４０７で中断されるまでの間の動作と同一である。
【００９４】
このように，ハイパバイザ１３２が，物理計算機１２０に入力される非同期事象について，その事象の情報と，それによって引き起こされたソフトウェア１３０の遷移の情報をハイパバイザ１３３に送信し，ハイパバイザ１３３が，その情報を元に，ソフトウェア１３１にもその非同期事象を再現することによって，ＶＭの同期処理が可能である。
【００９５】
図５は，本実施例における，ハイパバイザによるＶＭの同期，およびＩ／Ｏイベント出力比較処理の流れ，特にプロセッサ故障が発生していない場合の流れを示す図である。
【００９６】
この例では，ソフトウェア１３０は，非同期事象５８１が物理計算機１２０に入力されて処理５０１でそれを受理し，その後，処理５０２でＩ／Ｏコマンド１を出力し，非同期事象５８２が入力されると，処理５０３でそれを受理し，その後，処理５０４でＩ／Ｏデータ１をメモリに書き込み，処理５０５でＩ／Ｏデータ２をメモリに書き込み，処理５０６でＤＭＡ読み出し起動のＩ／Ｏコマンド２を出力する動作を行っている。
【００９７】
ソフトウェア１３０の動作のうち，非同期事象の受理である処理５０１，５０３，およびＩ／Ｏコマンドの出力である処理５０２，５０６については，ハイパバイザ１３２の働きにより，ソフトウェア１３０内での遷移ではなく，ハイパバイザ１３２への遷移が発生する。
【００９８】
物理計算機１２０に非同期事象５８１が入力されると，処理５０１でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理５５１で，受理した非同期事象５８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【００９９】
ソフトウェア１３０の処理５０２で，Ｉ／Ｏコマンド１出力が実行されようとすると，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理５５３で，ソフトウェア１３０が実行しようとしたＩ／Ｏコマンド１の内容と，その際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１００】
ハイパバイザ１３３は，ハイパバイザ１３２が処理５５１で送信した，非同期事象５８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理５５２において受信する。
【０１０１】
また，ハイパバイザ１３３は，ハイパバイザ１３２が処理５５３で送信した，ソフトウェア１３０の処理５０２で実行されようとしたＩ／Ｏコマンド１の内容と，その際のソフトウェア１３０の実行位置の情報を，処理５５４において受信する。
【０１０２】
ハイパバイザ１３３は，処理５５５で，処理５５２にて受信した非同期事象５８１の情報から，仮想的な非同期事象５９１を設定し，あたかも仮想計算機１２３に非同期事象５９１が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【０１０３】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象５８１が入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理５１２において，ソフトウェア１３０が処理５０２において出力しようとしたＩ／Ｏコマンド１と同一のＩ／Ｏコマンド１を出力しようとするが，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【０１０４】
ハイパバイザ１３３では，処理５５６において，ソフトウェア１３０が処理５０２において出力しようとしたＩ／Ｏコマンド１の内容と，ソフトウェア１３１が処理５１２において出力しようとしたＩ／Ｏコマンド１の内容を比較し，一致していれば，処理５５７において，Ｉ／Ｏコマンド１を出力する。
【０１０５】
ここで，図４で説明したＶＭの同期処理のみの場合では，仮想計算機１２２での処理４０２において，Ｉ／Ｏコマンド１は即座に出力されるが，図５に示した本実施例の処理では，仮想計算機１２２での処理５０２，仮想計算機１２３での処理５１２を契機として，ハイパバイザ１３２，１３３によって比較され，処理５５７でＩ／Ｏコマンド１が出力されることに注目されたい。
【０１０６】
また，ここまでのソフトウェア１３１の動作，具体的には，処理５５５の直後から開始され，処理５１２で中断されるまでの間の動作は，ソフトウェア１３０の，処理５５１の直後から開始され，処理５０２で中断されるまでの間の動作と同一である。
【０１０７】
物理計算機１２０に非同期事象５８２が入力されると，同様に，処理５０３でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理５５８で，受理した非同期事象５８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１０８】
ハイパバイザ１３３は，ハイパバイザ１３２が処理５５８で送信した，非同期事象５８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理５５９において受信する。
【０１０９】
ハイパバイザ１３３は，処理５６０で，処理５５９にて受信した，非同期事象５８２を受理した際のソフトウェア１３０の実行位置の情報から，その位置でソフトウェア１３１の実行が停止し，ハイパバイザ１３３への遷移が発生するように物理計算機１２１を設定して，ソフトウェア１３１に遷移する。
【０１１０】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，Ｉ／Ｏコマンド１を出力しようとした後のソフトウェア１３０の動作と同一の動作を行い，やがて，ハイパバイザ１３３が，処理５６０において物理計算機１２１に設定した停止位置に到達し，処理５１３において，ハイパバイザ１３３への遷移が発生する。
【０１１１】
ここまでのソフトウェア１３１の動作，具体的には，処理５６０の直後から開始され，処理５１３にて中断されるまでの間の動作は，ソフトウェア１３０の，処理５５３の後から開始され，処理５０３で中断されるまでの間の動作と同一である。
【０１１２】
一方，ソフトウェア１３０は，ハイパバイザ１３２の処理５５８の後に処理を継続しており，処理５０４でＩ／Ｏデータ１をメモリに書き込み，処理５０５でＩ／Ｏデータ２をメモリに書き込み，処理５０６において，ＤＭＡ読み出し起動のＩ／Ｏコマンド２の出力が実行されようとすると，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理５６１で，ソフトウェア１３０が実行しようとしたＩ／Ｏコマンド２の内容と，その際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１１３】
ハイパバイザ１３３は，ハイパバイザ１３２が処理５６１で送信した，ソフトウェア１３０の処理５０６で実行されようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容と，その際のソフトウェア１３０の実行位置の情報を，処理５６２において受信する。
【０１１４】
ハイパバイザ１３３は，処理５６３で，処理５５９にて受信した非同期事象５８２の情報から，仮想的な非同期事象５９２を設定し，あたかも仮想計算機１２３に非同期事象５９２が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【０１１５】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象５８２が入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理５１４と５１５において，ソフトウェア１３０が処理５０４と５０５においてメモリに書き込むＩ／Ｏデータ１，２と同一のＩ／Ｏデータをメモリに書き込む。
【０１１６】
その後に，ソフトウェア１３１は，処理５１６において，ソフトウェア１３０が処理５０６において出力しようとした，ＤＭＡ読み出し起動のＩ／Ｏコマンド２と同一のＩ／Ｏコマンド２を出力しようとするが，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【０１１７】
ハイパバイザ１３３では，処理５６４において，ソフトウェア１３０が処理５０６において出力しようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容と，ソフトウェア１３１が処理５１６において出力しようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容を比較する。
【０１１８】
次に，処理５６５において，Ｉ／Ｏデータ比較部１４６の要求送信部１４７を通じて，Ｉ／Ｏスイッチ１０４の要求受信部１１６に対して，Ｉ／Ｏデータ出力イベント通知１９１と，Ｉ／Ｏデータバッファ１１４の物理アドレス情報１９２，Ｉ／Ｏデータバッファ１１５の物理アドレス情報１９３を送信する。
【０１１９】
Ｉ／Ｏスイッチ１０４のＤＭＡ読み出し部３０１と，Ｉ／Ｏデータバッファ比較部３０２は，ハイパバイザ１３３の処理５６５を契機として，動作５７１でＩ／Ｏデータ比較を開始し，動作５７２で，ソフトウェア１３０が処理５０４，５０５でＩ／Ｏデータバッファ１１４に書き込んだＩ／Ｏデータ１，２と，ソフトウェア１３１が処理５１４，５１５でＩ／Ｏデータバッファ１１５に書き込んだＩ／Ｏ１，２を読み込んで比較し，動作５７３のＩ／Ｏデータ比較終了する。
【０１２０】
ハイパバイザ１３３は，処理５６６において，Ｉ／Ｏデータ比較部１４６の応答受信部１４８を通じて，Ｉ／Ｏスイッチ１０４の応答送信部１１７から，比較結果１９４を受信し，一致していれば，処理５６７において，ＤＭＡ読み出し起動のＩ／Ｏコマンド２を出力する。
【０１２１】
ここでも，図４で説明したＶＭの同期処理のみでは，仮想計算機１２２の処理４０６において即座に出力されていた，ＤＭＡ読み出し起動のＩ／Ｏコマンド２が，図５に示した本実施例の処理では，仮想計算機１２２での処理５０６，仮想計算機１２３での処理５１６を契機として，ハイパバイザ１３２，１３３，およびＩ／Ｏスイッチ１０４のＤＭＡ読み出し部３０１と，Ｉ／Ｏデータバッファ比較部３０２によって比較され，処理５６７でＩ／Ｏコマンド２が出力されることに注目されたい。
【０１２２】
また，ここまでのソフトウェア１３１の動作，具体的には，処理５６３の直後から開始され，処理５１４，５１５を実行し，処理５１６で中断されるまでの間の動作は，ソフトウェア１３０の，処理５５８の後から開始され，処理５０４，５０５を実行し，処理５０６で中断されるまでの間の動作と同一である。
【０１２３】
図６は，本実施例における、ハイパバイザによるＶＭの同期，およびＩ／Ｏイベント出力比較処理の流れのうち，特に，プロセッサ故障が発生して，図５に示したプロセッサ故障発生しないケースでの処理５０２において出力されようとするＩ／Ｏコマンド１が，変化した場合の流れを示す図である。
【０１２４】
この例では，ソフトウェア１３０は，非同期事象６８１が物理計算機１２０に入力されて処理６０１でそれを受理し，その後，処理６０２でＩ／Ｏコマンド１を出力するが，プロセッサ故障６２１が発生し，処理６０２で出力されるＩ／Ｏコマンド１が誤ったコマンドに変化する。
【０１２５】
ソフトウェア１３０の動作のうち，非同期事象の受理である処理６０１，およびＩ／Ｏコマンドの出力である処理６０２については，前述と同様，ハイパバイザ１３２への遷移が発生する。
【０１２６】
物理計算機１２０に非同期事象６８１が入力されると，処理６０１でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理６５１で，受理した非同期事象６８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１２７】
ソフトウェア１３０の処理６０２で，Ｉ／Ｏコマンド１出力が実行されようとすると，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理６５３で，ソフトウェア１３０が実行しようとしたＩ／Ｏコマンド１の内容と，その際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１２８】
ここで，処理６５３において送信されるＩ／Ｏコマンド１の内容は，プロセッサ故障６２１の影響によって，本来出力されるべきＩ／Ｏコマンド１の内容とは異なっていることに留意されたい。
【０１２９】
ハイパバイザ１３３は，ハイパバイザ１３２が処理６５１で送信した，非同期事象６８１の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理６５２において受信する。
【０１３０】
また，ハイパバイザ１３３は，ハイパバイザ１３２が処理６５３で送信した，ソフトウェア１３０の処理６０２で実行されようとした，本来の内容とは異なるＩ／Ｏコマンド１の内容と，その際のソフトウェア１３０の実行位置の情報を，処理６５４において受信する。
【０１３１】
ハイパバイザ１３３は，処理６５５で，処理６５２にて受信した非同期事象６８１の情報から，仮想的な非同期事象６９１を設定し，あたかも仮想計算機１２３に非同期事象６９１が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【０１３２】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象６８１が入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理６１２において，プロセッサ故障６２１が発生しなかった場合に，ソフトウェア１３０が処理６０２において出力しようとしたＩ／Ｏコマンド１と同一のＩ／Ｏコマンドを出力しようとし，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【０１３３】
ここで，処理６１２においてソフトウェア１３１が出力しようとするＩ／Ｏコマンド１の内容は，本来出力されるべきＩ／Ｏコマンド１の内容であることに留意されたい。
【０１３４】
ハイパバイザ１３３では，処理６５６において，ソフトウェア１３０が処理６０２において出力しようとした，本来の内容とは異なるＩ／Ｏコマンド１と，ソフトウェア１３１が処理６１２において出力しようとした本来のＩ／Ｏコマンド１の内容を比較し，不一致を発見する。
【０１３５】
その後，ハイパバイザ１３３は，処理６５７において，イベント送信チャネル１６０を通じて，ハイパバイザ１３２にＶＭ停止通知を送信し，処理６５９においてＩ／Ｏコマンド１の出力を抑止し，以後，仮想計算機１２３の回復処理に入る。また，ハイパバイザ１３２は，処理６５８において，イベント送信チャネル１６０を通じて，ハイパバイザ１３３からＶＭ停止通知を受信し，以後，仮想計算機１２２の回復処理に入る。なお、この回復処理としては、例えば自己診断等の処理が挙げられる。
【０１３６】
図７は，本実施例における、ハイパバイザによるＶＭの同期，およびＩ／Ｏイベント出力比較処理の流れのうち，特に，プロセッサ故障が発生して，図５に示したプロセッサ故障が発生しないケースでの処理５０５において出力されようとするＩ／Ｏデータ２が，変化した場合の流れを示す図である。
【０１３７】
この例では，ソフトウェア１３０は，非同期事象７８２が物理計算機１２０に入力されて処理７０３でそれを受理し，その後，処理７０４でＩ／Ｏデータ１をメモリに書き込み，処理７０５でＩ／Ｏデータ２をメモリに書き込むが，プロセッサ故障７２１が発生し，処理７０５で書き込まれるＩ／Ｏデータ２は誤ったデータに変化しており，その後に，処理７０６でＤＭＡ読み出し起動のＩ／Ｏコマンド２を出力する動作を行っている。
【０１３８】
ソフトウェア１３０の動作のうち，非同期事象の受理である処理７０３，およびＩ／Ｏコマンドの出力である処理７０６については，前述と同様，ハイパバイザ１３２への遷移が発生する。
【０１３９】
物理計算機１２０に非同期事象７８２が入力されると，処理７０３でそれを受理して，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理７５８で，受理した非同期事象７８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１４０】
ハイパバイザ１３３は，ハイパバイザ１３２が処理７５８で送信した，非同期事象７８２の情報と，それを受理した際のソフトウェア１３０の実行位置の情報を，処理７５９において受信する。
【０１４１】
ハイパバイザ１３３は，処理７６０で，処理７５９にて受信した，非同期事象７８２を受理した際のソフトウェア１３０の実行位置の情報から，その位置でソフトウェア１３１の実行が停止し，ハイパバイザ１３３への遷移が発生するように物理計算機１２１を設定して，ソフトウェア１３１に遷移する。
【０１４２】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，ソフトウェア１３０の処理７０３までの動作と同一の動作を行い，やがて，ハイパバイザ１３３が，処理７６０において物理計算機１２１に設定した停止位置に到達し，処理７１３において，ハイパバイザ１３３への遷移が発生する。
【０１４３】
一方，ソフトウェア１３０は，ハイパバイザ１３２の処理７５８の後に処理を継続しており，処理７０４でＩ／Ｏデータ１をメモリに書き込み，処理７０５でＩ／Ｏデータ２をメモリに書き込み，処理７０６において，ＤＭＡ読み出し起動のＩ／Ｏコマンド２の出力が実行されようとすると，ハイパバイザ１３２に遷移し，ハイパバイザ１３２が，処理７６１で，ソフトウェア１３０が実行しようとしたＩ／Ｏコマンド２の内容と，その際のソフトウェア１３０の実行位置の情報を，イベント送信チャネル１６０を通じてハイパバイザ１３３に送信し，ソフトウェア１３０に遷移する。
【０１４４】
ここで，処理７０５によってメモリに書き込まれるＩ／Ｏデータ２の内容は，プロセッサ故障７２１の影響によって，本来書き込まれるべきＩ／Ｏデータ２の内容とは異なっていることに留意されたい。
【０１４５】
ハイパバイザ１３３は，ハイパバイザ１３２が処理７６１で送信した，ソフトウェア１３０の処理７０６で実行されようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容と，その際のソフトウェア１３０の実行位置の情報を，処理７６２において受信する。
【０１４６】
ハイパバイザ１３３は，処理７６３で，処理７５９にて受信した非同期事象７８２の情報から，仮想的な非同期事象７９２を設定し，あたかも仮想計算機１２３に非同期事象７９２が入力され，それを受理し，ソフトウェア１３１内の遷移が発生したかのように，ソフトウェア１３１に遷移する。
【０１４７】
ソフトウェア１３１に遷移すると，ソフトウェア１３１は，非同期事象７８２が入力された後のソフトウェア１３０の動作と同一の動作を行うため，処理７１４と７１５において，プロセッサ故障７２１が発生しなかった場合に，ソフトウェア１３０が処理７０４と７０５においてメモリに書き込むＩ／Ｏデータ１，２と同一のＩ／Ｏデータをメモリに書き込む。
【０１４８】
ここで，処理７１５においてソフトウェア１３１がメモリに書き込むＩ／Ｏデータ２の内容は，本来書き込まれるべきＩ／Ｏデータ２の内容であることに留意されたい。
【０１４９】
その後に，ソフトウェア１３１は，処理７１６において，ソフトウェア１３０が処理７０６において出力しようとした，ＤＭＡ読み出し起動のＩ／Ｏコマンド２と同一のＩ／Ｏコマンドを出力しようとするが，ハイパバイザ１３３の働きにより，実際には出力されず，ハイパバイザ１３３への遷移が発生する。
【０１５０】
ハイパバイザ１３３では，処理７６４において，ソフトウェア１３０が処理７０６において出力しようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容と，ソフトウェア１３１が処理７１６において出力しようとしたＤＭＡ読み出し起動のＩ／Ｏコマンド２の内容を比較する。
【０１５１】
次に，処理７６５において，Ｉ／Ｏデータ比較部１４６の要求送信部１４７を通じて，Ｉ／Ｏスイッチ１０４の要求受信部１１６に対して，Ｉ／Ｏデータ出力イベント通知１９１と，Ｉ／Ｏデータバッファ１１４の物理アドレス情報１９２，Ｉ／Ｏデータバッファ１１５の物理アドレス情報１９３を送信する。
【０１５２】
Ｉ／Ｏスイッチ１０４のＤＭＡ読み出し部３０１と，Ｉ／Ｏデータバッファ比較部３０２は，ハイパバイザ１３３の処理７６５を契機として，動作７７１でＩ／Ｏデータ比較を開始し，動作７７２で，ソフトウェア１３０が処理７０４，７０５でＩ／Ｏデータバッファ１１４に書き込んだＩ／Ｏデータ１，２と，ソフトウェア１３１が処理７１４，７１５でＩ／Ｏデータバッファ１１５に書き込んだＩ／Ｏ１，２を読み込んで比較し，不一致を発見して，動作７７３でＩ／Ｏデータ比較終了し，結果を送信する。
【０１５３】
ハイパバイザ１３３は，処理７６６において，Ｉ／Ｏデータ比較部１４６の応答受信部１４８を通じて，Ｉ／Ｏスイッチ１０４の応答送信部１１７から，比較結果１９４を受信し，不一致であるため，処理７６７において，イベント送信チャネル１６０を通じて，ハイパバイザ１３２にＶＭ停止通知を送信し，以後，仮想計算機１２３の上述した回復処理に入る。
【０１５４】
また，ハイパバイザ１３２は，処理７６８において，イベント送信チャネル１６０を通じて，ハイパバイザ１３３からＶＭ停止通知を受信し，以後，仮想計算機１２２の上述した回復処理に入る。
図８は，本実施例における、仮想化制御部であるハイパバイザ１３３内の物理アドレス変換部１５２の処理フローである。
【０１５５】
物理アドレス変換部１５２は，前述の通り，Ｉ／Ｏデータ出力イベント仮想アドレス情報２１１，２１２を入力として受け取り，Ｉ／Ｏデータ出力イベント物理アドレス情報２３１，２３２を出力する。
【０１５６】
ここで，ステップ８０１に始まり，ステップ８２０で終わる一連の処理は，１回の処理実行で，１個のＩ／Ｏデータ出力イベント仮想アドレス情報の入力に対して，１個のＩ／Ｏデータ出力イベント物理アドレス情報の出力を得るものであり，２１１，２１２の２個のＩ／Ｏデータ出力イベント仮想アドレス情報の入力に対しては，２回処理が実行されることに注意されたい。
【０１５７】
入力であるＩ／Ｏデータ出力イベント仮想アドレス情報は，具体的には，複数の，仮想アドレスでの開始アドレスとサイズの対で表現されるが，ここでは，対の個数をＶｂｌｋｍａｘ，ｉを０からＶｂｌｋｍａｘ−１までの間の値として，ｉ番目の開始アドレスとサイズを，それぞれ，Ｖｂｌｋｓｔａｒｔ［ｉ］，Ｖｂｌｋｓｉｚｅ［ｉ］と表記する。
【０１５８】
また，出力であるＩ／Ｏデータ出力イベント物理アドレス情報は，複数の，物理アドレスでの開始アドレスとサイズの対で表現されるが，ここでは，対の個数をＰｂｌｋｍａｘ，ｉを０からＰｂｌｋｍａｘ−１までの間の値として，ｉ番目の開始アドレスとサイズを，それぞれ，Ｐｂｌｋｓｔａｒｔ［ｉ］，Ｐｂｌｋｓｉｚｅ［ｉ］と表記する。
【０１５９】
ステップ８０１，８０２は初期設定であり，Ｖｂｌｋ，Ｐｂｌｋは，それぞれ，現在，何番目のＩ／Ｏデータ出力イベント仮想アドレス情報対，物理アドレス情報対の処理を進めているかを表す変数であり，ｔｍｐＰｂｌｋｓｔとｔｍｐＰｂｌｋｓｚは，現在処理を進めている物理アドレス情報対のテンポラリ変数である。
【０１６０】
ステップ８０３は，新しいＩ／Ｏデータ出力イベント仮想アドレス情報対に処理を進める度に行われる初期設定で，Ｖｂｌｋｓｔａｒｔ［Ｖｂｌｋ］とＶｂｌｋｓｉｚｅ［Ｖｂｌｋ］を，テンポラリ変数であるｔｍｐＶｂｌｋｓｔとｔｍｐＶｂｌｋｓｚに，それぞれ格納している。
【０１６１】
ステップ８０４からは，１個のＩ／Ｏデータ出力イベント仮想アドレス情報対の範囲の処理が終わるまで繰り返される処理である。ステップ８０４では，ｔｍｐＶｂｌｋｓｔの仮想アドレスに対応する仮想ページ番号（Ｖｐｎｕｍ），ページ先頭からのオフセット（ｏｆｆｓｅｔ），ページサイズ（ｐａｇｅｓｉｚｅ）を求めている。
【０１６２】
ステップ８０５，８０６，８０７では，今回のＶｐｎｕｍに対応する物理ページ番号（Ｐｐｎｕｍ）への変換処理で，ｔｍｐＶｂｌｋｓｔとｔｍｐＶｂｌｋｓｚの仮想アドレス情報対が表す領域のうち，変換対象となった部分のサイズ（ｓｉｚｅ）を算出している。ｐａｇｅｓｉｚｅからｏｆｆｓｅｔを引いた分が変換対象となり得る部分のサイズだが，ステップ８０５にて比較処理を行い，ｔｍｐＶｂｌｋｓｚが小さいならば，ステップ８０７に分岐し，ｓｉｚｅをｔｍｐＶｂｌｋｓｚとする。等しいか大きいならば，ｓｉｚｅはｐａｇｅｓｉｚｅ−ｏｆｆｓｅｔとする。
【０１６３】
ステップ８０８では，Ｖｐｎｕｍに対応するＰｐｎｕｍを求めているが，この処理は，アドレス変換部１４３を呼び出すことで行っている。
【０１６４】
ステップ８０９では，Ｐｐｎｕｍの物理ページの先頭アドレスにｏｆｆｓｅｔを加算して，変換対象となった物理アドレスの領域の先頭アドレス（Ｐｓｔａｒｔ）を求めている。
【０１６５】
ステップ８１０から８１５では，今回変換対象となった物理アドレスの領域から，前回までの変換処理の結果が反映されているｔｍｐＰｂｌｋｓｔ，ｔｍｐＰｂｌｋｓｚを更新する処理を行っている。
【０１６６】
ステップ８１１への分岐のケースは，初回の処理の場合で，Ｐｂｌｋに1を加算し，ｔｍｐＰｂｌｋｓｔ，ｔｍｐＰｂｌｋｓｚにはそれぞれ，Ｐｓｔａｒｔ，ｓｉｚｅをそのまま格納している。
ステップ８１３への分岐のケースは，前回までの変換処理の物理アドレスの領域の末尾と，今回変換対象となった物理アドレス領域の先頭が一致している場合で，この場合はｔｍｐＰｂｌｋｓｚにｓｉｚｅを加算している。
【０１６７】
ステップ８１４，８１５への分岐のケースは，前回までの変換処理の物理アドレスの領域の末尾と，今回変換対象となった物理アドレス領域の先頭が一致していない場合で，この場合は，ステップ８１４で前回までの変換結果を，Ｐｂｌｋ番目のＩ／Ｏデータ出力イベント物理アドレス情報対に格納し，ステップ８１５でＰｂｌｋに１を加算した上で，ｔｍｐＰｂｌｋｓｔ，ｔｍｐＰｂｌｋｓｚにはそれぞれ，Ｐｓｔａｒｔ，ｓｉｚｅをそのまま格納している。
【０１６８】
ステップ８１６では，今回変換対象となった部分をｔｍｐＶｂｌｋｓｔとｔｍｐＶｂｌｋｓｚの仮想アドレス情報対が表す領域から除く処理を行っている。具体的には，ｔｍｐＶｂｌｋｓｔにｓｉｚｅを加算し，ｔｍｐＶｂｌｋｓｚからｓｉｚｅを減算している。
【０１６９】
ステップ８１７では，ｔｍｐＶｂｌｋｓｔとｔｍｐＶｂｌｋｓｚの仮想アドレス情報対が表す領域が全て変換されたかを判定している。ｔｍｐＶｂｌｋｓｚが０より大きい場合は，まだ変換する部分が残っているため，ステップ８０４に戻る。
【０１７０】
ステップ８１８では，次のＩ／Ｏデータ出力イベント仮想アドレス情報対に処理を進めている。Ｖｂｌｋに１を加算している。
【０１７１】
ステップ８１９では，全てのＩ／Ｏデータ出力イベント仮想アドレス情報対が処理されたかを判定しており，ＶｂｌｋがＶｂｌｋｍａｘと等しいか大きい場合は，まだ変換する仮想アドレス情報対が残っているため，ステップ８０３に戻る。
【０１７２】
ステップ８２０では，最後の変換結果をＰｂｌｋ番目のＩ／Ｏデータ出力イベント物理アドレス情報対に格納し，Ｐｂｌｋの値をＰｂｌｋｍａｘに格納している。
【０１７３】
以上のように，ハイパバイザ１３２が，物理計算機１２０に入力される非同期事象について，その事象の情報と，それによって引き起こされたソフトウェア１３０の遷移の情報をハイパバイザ１３３に送信し，ハイパバイザ１３３が，その情報をもとに，ソフトウェア１３１にもその非同期事象を再現することに加えて，さらに，ハイパバイザ１３２が，ソフトウェア１３０のＩ／Ｏイベントの情報をハイパバイザ１３３に送信し，ハイパバイザ１３３が，その情報と，ソフトウェア１３１のＩ／Ｏイベントの情報を比較することによって，ＶＭを同期実行しつつ，Ｉ／Ｏイベント出力比較処理を行い，プロセッサ故障を検出することが可能となる。
【実施例２】
【０１７４】
図９は，第二の実施例の全体構成を示す図である。実施例１においては、系Ａ，Ｂからなるコンピュータシステムについて説明したが、本実施例は系Ａ，Ｂ，Ｃからなるコンピュータシステムの実施例である。左側が系Ａを構成する物理計算機Ａ、中央が系Ｂを構成する物理計算機Ｂ、右側が系Ｃを構成する物理計算機Ｃを示しているが、図面より明らかなため、以後の説明において、系Ａ，Ｂ，Ｃの表記は省略する。
【０１７５】
同図において、９００，９０１，９０２はプロセッサ，９０３，９０４，９０５はメモリ，９０８，９０９はＩ／Ｏデバイスであり，９１５，９１６，９１７は，プロセッサ，メモリ，Ｉ／Ｏデバイスによって構成される物理計算機である。
【０１７６】
プロセッサ９００，９０１，９０２とＩ／Ｏデバイス９０８，９０９がＩ／Ｏスイッチ９０７を介して接続されることにより，物理計算機とＩ／Ｏデバイスの間は接続が共有されており，プロセッサ９００，メモリ９０３，Ｉ／Ｏスイッチ９０７により，物理計算機９１５が，プロセッサ９０１，メモリ９０４，Ｉ／Ｏスイッチ９０７により，物理計算機９１６が，プロセッサ９０２，メモリ９０５，Ｉ／Ｏスイッチ９０７により，物理計算機９１７がそれぞれ構成され，Ｉ／Ｏデバイス９０８，９０９は物理計算機９１５，９１６，９１７と接続される。
【０１７７】
９１０，９１１，９１２はＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓによる物理的な接続であり，プロセッサ９００，９０１，９０２，メモリ９０３，９０４，９０５とＩ／Ｏスイッチ９０７が，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０によって，また，Ｉ／Ｏスイッチ９０７とＩ／Ｏデバイス９０８がＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１１によって，さらに，Ｉ／Ｏスイッチ９０７とＩ／Ｏデバイス９０９がＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１２によって，それぞれ接続されている。
【０１７８】
９３６，９３７，９３８はハイパバイザのプログラムであり，物理計算機９１５，９１６，９１７でそれぞれ動作することにより，ＶＭ９３０，９３１，９３２が生成される。
【０１７９】
メモリ９０３は，ハイパバイザ９３６の働きにより，ＶＭ９３０が利用するメモリ領域９２０と，ハイパバイザ９３６が利用するメモリ領域９２３に分割される。このとき，ＶＭ９３０でのアドレス空間と，物理計算機９１５でのアドレス空間の対応は，ハイパバイザ９３６内の，特にアドレス変換部９４１よって管理される。
【０１８０】
同様に，メモリ９０４は，ハイパバイザ９３７の働きにより，ＶＭ９３１が利用するメモリ領域９２１と，ハイパバイザ９３７が利用するメモリ領域９２４に分割され，ＶＭ９３１でのアドレス空間と，物理計算機９１６でのアドレス空間の対応は，ハイパバイザ９３７内のアドレス変換部９４３によって管理され，メモリ９０５は，ハイパバイザ９３８の働きにより，ＶＭ９３２が利用するメモリ領域９２２と，ハイパバイザ９３８が利用するメモリ領域９２５に分割され，ＶＭ９３２でのアドレス空間と，物理計算機９１７でのアドレス空間の対応は，ハイパバイザ９３８内のアドレス変換部９４５によって管理される。
【０１８１】
ＶＭ９３０，９３１，９３２内においては，それぞれ，ソフトウェア９３３，９３４，９３５が動作するが，ハイパバイザ９３６の同期処理部９４０から，ハイパバイザ９３７の同期処理部９４２に，イベント送信チャネル９５７を通じて情報が送信され，また，ハイパバイザ９３６の同期処理部９４０から，ハイパバイザ９３８の同期処理部９４４に，イベント送信チャネル９５８を通じて情報が送信されることにより，ソフトウェア９３３，９３４，９３５の動作は，ソフトウェアレベルで同一である。
【０１８２】
イベント送信チャネル９５７は，物理計算機９１５と９１６間でのデータの送受信を論理的に示したものであり，物理的には，Ｉ／Ｏスイッチ９０７を介した通信である。また，イベント送信チャネル９５８，９５９も，同様に，物理計算機９１５，９１７間，および物理計算機９１６，９１７間でのデータの送受信を論理的に示したものであり，物理的には，Ｉ／Ｏスイッチ９０７を介した通信である。
【０１８３】
ソフトウェア９３３が実行されると，Ｉ／Ｏイベント９６０が発生するが，プロセッサ９００が有する機構の働きにより，Ｉ／Ｏイベント９６０はハイパバイザ９３６にトラップされ，同期処理部９４０に入力される。
【０１８４】
同期処理部９４０は，発生したＩ／Ｏイベント９６０の情報を，イベント送信チャネル９５８を通じて，ハイパバイザ９３８の同期処理部９４４に送信する。
【０１８５】
また，ソフトウェア９３４が実行されると，Ｉ／Ｏイベント９６１が発生するが，プロセッサ９０１が有する機構の働きにより，Ｉ／Ｏイベント９６１はハイパバイザ９３７にトラップされ，同期処理部９４２に入力され，同期処理部９４２は，発生したＩ／Ｏイベント９６１の情報を，イベント送信チャネル９５９を通じて，ハイパバイザ９３８の同期処理部９４４に送信する。
【０１８６】
同期処理部９４４は，受信したＩ／Ｏイベント９６０，９６１の情報を，ソフトウェア９３３，９３４，９３５の動作をソフトウェアレベルで同一にする処理に用いる他に，Ｉ／Ｏイベント９６３，９６４として，同じくハイパバイザ９３８内のＩ／Ｏイベント検出部９４６に出力する。
【０１８７】
また，ソフトウェア９３５の実行により発生するＩ／Ｏイベント９６２は，プロセッサ９０２が有する機構の働きにより，ハイパバイザ９３８にトラップされ，Ｉ／Ｏイベント検出部９４６に入力される。
【０１８８】
Ｉ／Ｏイベント検出部９４６では，ＶＭ９３０側のＩ／Ｏイベント９６３の種類を解析し，特に，Ｉ／Ｏコマンドを出力するイベントと，Ｉ／Ｏデータを出力するイベントについて，それぞれＩ／Ｏコマンド出力イベント９６５と，Ｉ／Ｏデータ出力イベント９６６として，Ｉ／Ｏイベント処理部９４７に出力する。
【０１８９】
また，Ｉ／Ｏイベント検出部９４６は，ＶＭ９３１側のＩ／Ｏイベント９６４の種類を解析し，Ｉ／Ｏコマンド出力イベント９６７と，Ｉ／Ｏデータ出力イベント９６８を，Ｉ／Ｏイベント処理部９４７に出力し，ＶＭ９３２側のＩ／Ｏイベント９６２の種類を解析し，Ｉ／Ｏコマンド出力イベント９６９と，Ｉ／Ｏデータ出力イベント９７０を，Ｉ／Ｏイベント処理部９４７に出力する。
【０１９０】
Ｉ／Ｏイベント処理部９４７は，Ｉ／Ｏコマンド出力イベント９６５，９６７，９６９について，Ｉ／Ｏコマンドの内容を比較し，一致していれば，Ｉ／Ｏスイッチ９０７との間で，Ｉ／Ｏコマンド９９０として送受信を行う。
【０１９１】
Ｉ／Ｏスイッチ９０７は，Ｉ／Ｏコマンド９９０を，その送受信先に応じて，Ｉ／Ｏデバイス９０８，あるいはＩ／Ｏデバイス９０９に，それぞれＩ／Ｏコマンド９８１，９８２として送受信することにより，Ｉ／Ｏコマンド出力イベント９６５，９６７，９６９は，Ｉ／Ｏデバイス９０８，あるいは９０９に出力される。
【０１９２】
また，Ｉ／Ｏイベント処理部９４７は，Ｉ／Ｏデータ出力イベント９６６，９６８，９７０について，Ｉ／Ｏデータの内容を比較し，その結果に基づいて，Ｉ／Ｏコマンド９９０として，Ｉ／Ｏデバイス９０８，あるいは９０９のＤＭＡに読み出しコマンドを送信する。
【０１９３】
Ｉ／Ｏデータ出力イベント９６６でのＩ／Ｏデータは，ソフトウェア９３３のＩ／Ｏデータ書き込み９７１によって，Ｉ／Ｏデータ出力イベント９６６に先立って，ＶＭ９３０が利用するメモリ領域９２０内の，Ｉ／Ｏデータバッファ９２６に書き込まれている。
【０１９４】
また，Ｉ／Ｏデータ出力イベント９６８でのＩ／Ｏデータは，ソフトウェア９３４のＩ／Ｏデータ書き込み９７２によって，Ｉ／Ｏデータ出力イベント９６８に先立って，ＶＭ９３１が利用するメモリ領域９２１内の，Ｉ／Ｏデータバッファ９２７に，Ｉ／Ｏデータ出力イベント９７０でのＩ／Ｏデータは，ソフトウェア９３５のＩ／Ｏデータ書き込み９７３によって，Ｉ／Ｏデータ出力イベント９７０に先立って，ＶＭ９３２が利用するメモリ領域９２２内の，Ｉ／Ｏデータバッファ９２８に，それぞれ書き込まれている。
【０１９５】
Ｉ／Ｏイベント処理部９４７には，特に，Ｉ／Ｏデータ出力比較部９４８があり，Ｉ／Ｏデータ出力イベント９６６の情報から，Ｉ／Ｏデータバッファ９２６のＶＭ９３０のアドレス空間でのアドレスを特定し，さらに，ＶＭ９３０のアドレス空間でのアドレスから，物理計算機９１５のアドレス空間でのアドレスに変換する。
【０１９６】
同様に，Ｉ／Ｏデータ出力比較部９４８では，Ｉ／Ｏデータ出力イベント９６８の情報から，Ｉ／Ｏデータバッファ９２７のＶＭ９３１のアドレス空間でのアドレスを特定し，さらに，ＶＭ９３１のアドレス空間でのアドレスから，物理計算機９１６のアドレス空間でのアドレスに変換する。
【０１９７】
同様に，Ｉ／Ｏデータ出力比較部９４８では，Ｉ／Ｏデータ出力イベント９７０の情報から，Ｉ／Ｏデータバッファ９２８のＶＭ９３２のアドレス空間でのアドレスを特定し，さらに，ＶＭ９３２のアドレス空間でのアドレスから，物理計算機９１７のアドレス空間でのアドレスに変換する。
【０１９８】
続いてＩ／Ｏデータ出力比較部９４８は，Ｉ／Ｏデータ出力イベント通知９９１と，Ｉ／Ｏデータ出力イベント９６６に対応するＩ／Ｏデータバッファ９２６の物理計算機９１５のアドレス空間でのアドレス情報である，物理アドレス情報９９２と，Ｉ／Ｏデータ出力イベント９６８に対応するＩ／Ｏデータバッファ９２７の物理計算機９１６のアドレス空間でのアドレス情報である，物理アドレス情報９９３と，Ｉ／Ｏデータ出力イベント９７０に対応するＩ／Ｏデータバッファ９２８の物理計算機９１７のアドレス空間でのアドレス情報である，物理アドレス情報９９４を，Ｉ／Ｏスイッチ９０７に対する要求送信部９４９を通じて，Ｉ／Ｏスイッチ９０７の要求受信部９１３に，それぞれ送信する。
【０１９９】
Ｉ／Ｏスイッチ９０７の要求受信部９１３が，Ｉ／Ｏデータ出力イベント通知９９１，物理アドレス情報９９２，９９３，９９４を受信すると，Ｉ／Ｏスイッチ９０７は，Ｉ／Ｏデータバッファ９２６，９２７，９２８の内容を，それぞれＤＭＡデータ読み出し９８５，９８６，９８７として，それぞれメモリ９０３，９０４，９０５から直接読み出して比較し，比較結果９９５を，Ｉ／Ｏデータ出力イベント比較部９４８への応答送信部９１４を通じて，Ｉ／Ｏデータ出力比較部９４８の応答受信部９５０に送信する。
【０２００】
ここで，Ｉ／Ｏコマンド９９０，およびＩ／Ｏデータ出力イベント通知９９１，物理アドレス情報９９２，９９３，９９４，比較結果９９５は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０上での，Ｉ／Ｏコマンド９８０の送受信として，同様のバスシーケンスにて実行されるものである。
【０２０１】
また，ＤＭＡデータ読み出し９８５，９８６，９８７は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０上での，ＤＭＡデータ読み出し９８４として，同様のバスシーケンスで実行されるものである。
【０２０２】
Ｉ／Ｏデータ出力比較部９４８は，Ｉ／Ｏデータバッファ９２６，９２７，９２８の比較結果を，応答受信部９５０を通じて受信し，その結果に基づいて，Ｉ／Ｏコマンド９９０として，Ｉ／Ｏデバイス９０８，あるいは９０９に，ＤＭＡ読み出しコマンドを送信する。
【０２０３】
Ｉ／Ｏデバイス９０８，あるいは９０９が，ＤＭＡ読み出しコマンドを受信すると，ＤＭＡデータ読み出し９８８，あるいは９８９として，Ｉ／Ｏスイッチ９０７に対して読み出しを行う。Ｉ／Ｏスイッチ９０７は，ＤＭＡデータ読み出し９８８，９８９を，その読み出し先に応じて，ＤＭＡデータ読み出し９８５，９８６，９８７として，それぞれメモリ９０３，９０４，９０５から読み出して，ＤＭＡデータ読み出し９８８，９８９の読み出し結果を返すことにより，結果としてＩ／Ｏデータ出力イベント９６６，９６８，９７０は，Ｉ／Ｏデバイス９０８，あるいは９０９に出力される。
【０２０４】
図１０は，図９に示した実施例２のシステムの物理計算機９１７上で動作するハイパバイザ９３８の構成の詳細を示す図である。
【０２０５】
ハイパバイザ９３８には，同期処理部９４４，アドレス変換部９４５，Ｉ／Ｏイベント検出部９４６，Ｉ／Ｏイベント処理部９４７があり，Ｉ／Ｏイベント処理部９４７には，Ｉ／Ｏデータ出力比較部９４８があり，Ｉ／Ｏデータ出力比較部９４８には，Ｉ／Ｏスイッチ９０７に対する要求送信部９４９，応答受信部９５０があることは先に述べたが，加えて，ハイパバイザ９３８のＩ／Ｏイベント処理部９４７には，Ｉ／Ｏコマンド出力比較部９５１，Ｉ／Ｏコマンド出力訂正部９５２，ＤＭＡ訂正部９５５があり，Ｉ／Ｏデータ出力比較部９４８には，仮想アドレス特定部９５３と，物理アドレス変換部９５４がある。なお、本実施例においても，先の実施例同様，Ｉ／Ｏコマンド出力訂正部９５２とＤＭＡ訂正部９５５とを総称して抑止部と呼ぶ場合がある。以下に説明するように，実施例１と同様に訂正機能に加え，抑止機能を有するからである。
【０２０６】
Ｉ／Ｏコマンド出力比較部９５１は，Ｉ／Ｏイベント検出部９４６からのＩ／Ｏコマンド出力イベント９６５，９６７，９６９のＩ／Ｏコマンドの内容を比較し，その結果をＩ／Ｏコマンド比較結果１００１として，Ｉ／Ｏコマンド出力訂正部９５２に出力する。
【０２０７】
Ｉ／Ｏコマンド出力訂正部９５２は，Ｉ／Ｏイベント検出部９４６からのＩ／Ｏコマンド出力イベント９６５，９６７，９６９をＩ／Ｏコマンド９９０として送受信するが，Ｉ／Ｏコマンド比較結果１００１が不一致を示している場合，特に，Ｉ／Ｏコマンド出力イベント９６５，９６７，９６９の３つのＩ／Ｏコマンドの内容のうち，２つが一致している場合は，一致している２つのＩ／Ｏコマンド出力イベントに対応するＩ／Ｏコマンド送受信を行い，３つとも一致しない場合は，Ｉ／Ｏコマンド送受信を抑止する。
【０２０８】
Ｉ／Ｏデータ出力比較部９４８の仮想アドレス特定部９５３は，Ｉ／Ｏイベント検出部９４６からのＩ／Ｏデータ出力イベント９６６，９６８，９７０の情報から，Ｉ／Ｏデータバッファ９２６のＶＭ９３０のアドレス空間でのアドレスと，Ｉ／Ｏデータバッファ９２７のＶＭ９３１のアドレス空間でのアドレス，Ｉ／Ｏデータバッファ９２８のＶＭ９３２のアドレス空間でのアドレスを特定し，その結果をＩ／Ｏデータ出力イベント仮想アドレス情報１０１１，１０１２，１０１３として，物理アドレス変換部９５４に出力する。
【０２０９】
物理アドレス変換部９５４は，Ｉ／Ｏデータ出力イベント仮想アドレス情報１０１１に基づいて，アドレス変換部９４５のページテーブルサイズ毎に，仮想ページ番号１０２１をアドレス変換部９４５に入力し，アドレス変換部９４５から，対応する物理ページ番号１０２２を入力することによって，Ｉ／Ｏデータバッファ９２６の物理計算機９１５のアドレス空間でのアドレスに変換し，その結果を，Ｉ／Ｏデータ出力イベント物理アドレス情報１０３１として，要求送信部９４９に出力する。
【０２１０】
また，物理アドレス変換部９５４は，同様にして，Ｉ／Ｏデータバッファ９２７の物理計算機９１６のアドレス空間でのアドレスを，Ｉ／Ｏデータ出力イベント物理アドレス情報１０３２として，また，Ｉ／Ｏデータバッファ９２８の物理計算機９１７のアドレス空間でのアドレスを，Ｉ／Ｏデータ出力イベント物理アドレス情報１０３３として，要求送信部９４９に出力する。
【０２１１】
要求送信部９４９は，Ｉ／Ｏイベント検出部９４６からのＩ／Ｏデータ出力イベント９６６，９６８，９７０の入力と，物理アドレス変換部９５４からのＩ／Ｏデータ出力イベント物理アドレス情報１０３１，１０３２，１０３３の入力から，Ｉ／Ｏデータ出力イベント通知９９１，物理アドレス情報９９２，９９３，９９４をＩ／Ｏスイッチ９０７の要求受信部９１３に送信する。
【０２１２】
応答受信部９５０は，比較結果９９５をＩ／Ｏスイッチ９０７の応答送信部９１４から受信し，その結果をＩ／Ｏデータ比較結果１０４１として，ＤＭＡ訂正部９５５に出力する。
【０２１３】
ＤＭＡ訂正部９５５は，Ｉ／Ｏイベント検出部９４６からのＩ／Ｏデータ出力イベント９６６，９６８，９７０に含まれるＩ／Ｏデバイス９０８，あるいは９０９へのＤＭＡ読み出しコマンドをＩ／Ｏコマンド９９０として送信するが，Ｉ／Ｏデータ比較結果１０４１が不一致を示している場合，特に，Ｉ／Ｏデータ出力イベント９６６，９６８，９７０の３つのＩ／Ｏデータの内容のうち，２つが一致している場合は，一致している２つのＩ／Ｏデータ出力イベントに対応するＤＭＡ読み出しコマンドを送信し，３つとも一致しない場合は，対応するＩ／Ｏデータ出力イベント９６６，９６８，９７０のＤＭＡ読み出しコマンド送信を抑止する。
【０２１４】
図１１は，図９に示した実施例２のシステムのＩ／Ｏスイッチ９０７の構成の詳細を示す図である。
【０２１５】
Ｉ／Ｏスイッチ９０７は，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０によってプロセッサ９００，９０１，９０２と，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１１によってＩ／Ｏデバイス９０８と，ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１２によってＩ／Ｏデバイス９０９と，それぞれ接続され，Ｉ／Ｏコマンド９８０の送受信を，Ｉ／Ｏデバイス９０８にＩ／Ｏコマンド９８１として送受信し，あるいは，Ｉ／Ｏデバイス９０９にＩ／Ｏコマンド９８２として送受信し，また，Ｉ／Ｏデバイス９０８からのＤＭＡ読み出し９８８，あるいはＩ／Ｏデバイス９０９からのＤＭＡ読み出し９８９を，ＤＭＡ読み出し９８４として読み出すが，これは，Ｉ／Ｏスイッチ９０７内のスイッチ回路１１００の動作による。
【０２１６】
また，Ｉ／Ｏスイッチ９０７には，Ｉ／Ｏデータ出力比較部９４８に対する要求受信部９１３，応答送信部９１４があることは先に述べたが，加えて，ＤＭＡデータ読み出し部１１０１と，Ｉ／Ｏデータバッファ比較部１１０２がある。
【０２１７】
要求受信部９１３は，Ｉ／Ｏスイッチ９０７内で，スイッチ回路１１００を通じてＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０と接続されており，Ｉ／Ｏデータ出力イベント通知９９１，物理アドレス情報９９２，９９３，９９４を，Ｉ／Ｏコマンド９８０として，Ｉ／Ｏデータ出力比較部９４８の要求送信部９４９から受信し，受信した内容をＩ／Ｏデータ出力イベント通知１１１１，Ｉ／Ｏデータバッファ９２６の物理アドレス情報１１１２，Ｉ／Ｏデータバッファ９２７の物理アドレス１１１３，Ｉ／Ｏデータバッファ９２８の物理アドレス１１１４として，ＤＭＡデータ読み出し部１１０１に出力する。
【０２１８】
ＤＭＡデータ読み出し部１１０１は，Ｉ／Ｏデータ出力イベント通知１１１１，物理アドレス情報１１１２，１１１３，１１１４を受け取ると，Ｉ／Ｏデータバッファ９２６，９２７，９２８の物理アドレス情報１１１２，１１１３，１１１４をもとに，Ｉ／Ｏデータバッファ９２６，９２７，９２８へのＤＭＡデータ読み出し９８５，９８６，９８７をそれぞれ行い，ＤＭＡ読み出し結果１１２６，１１２７，１１２８を，Ｉ／Ｏデータバッファ比較部１１０２にそれぞれ出力する。
【０２１９】
Ｉ／Ｏデータバッファ比較部１１０２は，ＤＭＡデータ読み出し部１１０１から入力されるＤＭＡ読み出し結果１１２６，１１２７，１１２８を順次比較し，比較結果１１１５を応答送信部９１４に出力する。
【０２２０】
応答送信部９１４は，Ｉ／Ｏデータバッファ比較部１１０２からの比較結果１１１５を入力し，Ｉ／Ｏスイッチ９０７内で，スイッチ回路１１００を通じてＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ９１０と接続されており，比較結果９９５を，Ｉ／Ｏコマンド９８０として，Ｉ／Ｏデータ出力比較部の応答受信部９５０に送信する。
【０２２１】
以上のように，ハイパバイザ９３６が，物理計算機９１５に入力される非同期事象について，その事象の情報と，それによって引き起こされたソフトウェア９３３の遷移の情報をハイパバイザ９３７，９３８に送信し，ハイパバイザ９３７，９３８が，その情報をもとに，ソフトウェア９３４，９３５にもその非同期事象を再現することに加えて，さらに，ハイパバイザ９３６，９３７が，ソフトウェア９３３，９３４のＩ／Ｏイベントの情報をハイパバイザ９３８に送信し，ハイパバイザ９３８が，その情報と，ソフトウェア９３５のＩ／Ｏイベントの情報を比較することによって，ＶＭを同期実行しつつ，Ｉ／Ｏイベント比較処理を行い，プロセッサ故障を隠蔽することが可能となる。
【０２２２】
以上，好適な実施例を示したが，本発明は，その技術的思想を逸脱しない範囲において，種々の変形が可能である。例えば，上述の実施例では，Ｉ／Ｏデータバッファの物理アドレス情報を，Ｉ／Ｏデータ出力比較部の要求送信インターフェースから，Ｉ／Ｏスイッチの要求受信インターフェースに対して直接受け渡ししているが，Ｉ／Ｏデータバッファの物理アドレス情報をハイパバイザのメモリ領域に格納し，その情報を格納したメモリアドレスを，Ｉ／Ｏスイッチの要求受信インターフェースに対して受け渡す，などである。
【符号の説明】
【０２２３】
１００，１０１…プロセッサ，
１０２，１０３…メモリ，
１０４−Ｉ／Ｏスイッチ，
１０５，１０６…Ｉ／Ｏデバイス，
１０７，１０８，１０９…ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ，
１１０，１１１，１１２，１１３…メモリ領域，
１１４，１１５…メモリ領域中のＩ／Ｏデータバッファ，
１１６…要求受信インターフェース部，
１１７…応答送信インターフェース部，
１２０，１２１…物理計算機，
１２２，１２３…仮想計算機，
１３０，１３１…ゲストソフトウェア，
１３２，１３３…ハイパバイザ，
１４０，１４２…同期処理部，
１４１，１４３…アドレス変換部，
１４４…Ｉ／Ｏイベント検出部，
１４５…Ｉ／Ｏイベント処理部，
１４６…Ｉ／Ｏデータ出力比較部，
１４７…要求送信インターフェース部，
１４８…応答受信インターフェース部，
１４９…Ｉ／Ｏコマンド出力比較部，
１５０…Ｉ／Ｏコマンド出力抑止部，
１５１…仮想アドレス特定部，
１５２…物理アドレス変換部，
１５３…ＤＭＡ抑止部，
１６０…イベント送信チャネル，
１７０，１７１，１７２，１７３，１７４，１７５，１７６…Ｉ／Ｏイベント出力，
１７７，１７８…Ｉ／Ｏデータ書き込み，
１８０，１８１，１８２…Ｉ／Ｏコマンド送受信，
１８５，１８６，１８７，１８８，１８９…ＤＭＡ読み出し，
１９０…Ｉ／Ｏイベント出力に対応するＩ／Ｏコマンド送受信，
１９１…データ出力イベント通知に対応するＩ／Ｏコマンド送信，
１９２，１９３…物理アドレス情報に対応するＩ／Ｏコマンド送信，
１９４…比較結果に対応するＩ／Ｏコマンド受信，
２０１…Ｉ／Ｏコマンド比較結果に対応するハイパバイザ内でのデータ出力，
２１１，２１２…Ｉ／Ｏデータ出力イベント仮想アドレス情報に対応するハイパバイザ内でのデータ出力，
２２１…仮想ページ番号に対応するハイパバイザ内でのデータ出力，
２２２…物理ページ番号に対応するハイパバイザ内でのデータ出力，
２３１，２３２…Ｉ／Ｏデータ出力イベント物理アドレス情報に対応するハイパバイザ内でのデータ出力，
２４１…Ｉ／Ｏデータ比較結果に対応するハイパバイザ内でのデータ出力，
３００…スイッチ回路，
３０１…ＤＭＡデータ読み出し部，
３０２…Ｉ／Ｏデータバッファ比較部，
３１１…データ出力イベント通知に対応する信号，
３１２，３１３…物理アドレス情報に対応する信号，
３１４…比較結果に対応する信号，
３２６，３２７…ＤＭＡ読み出し結果，
４０１，４０２，４０３，４０４，４０５，４０６，４０７，４１２，４１３，４１４，４１５，４１６，４１７…ゲストソフトウェアの処理ステップ，
４５１，４５２，４５３，４５４，４５５，４５６，４５７，４５８，４５９，４６０，４６１，４６２…ハイパバイザの処理ステップ，
４７１，４７２，４７３，４７４…ＤＭＡの動作ステップ，
４８１，４８２，４８３…Ｉ／Ｏからの非同期事象（割り込み），
４９１，４９２…ハイパバイザからの仮想的な非同期事象（割り込み），
５０１，５０２，５０３，５０４，５０５，５０６，５１２，５１３，５１４，５１５，５１６…ゲストソフトウェアの処理ステップ，
５５１，５５２，５５３，５５４，５５５，５５６，５５７，５５８，５５９，５６０，５６１，５６２，５６３，５６４，５６５，５６６，５６７…ハイパバイザの処理ステップ，
５７１，５７２，５７３…ＤＭＡ読み出し部とＩ／Ｏデータバッファ比較部の動作ステップ，
５８１，５８２…Ｉ／Ｏからの非同期事象（割り込み），
５９１，５９２…ハイパバイザからの仮想的な非同期事象（割り込み），
６０１，６０２，６１２…ゲストソフトウェアの処理ステップ，
６２１…プロセッサ故障の発生タイミング，
６５１，６５２，６５３，６５４，６５５，６５６，６５７，６５８，６５９…ハイパバイザの処理ステップ，
６８１…Ｉ／Ｏからの非同期事象（割り込み），
６９１…ハイパバイザからの仮想的な非同期事象（割り込み），
７０３，７０４，７０５，７０６，７１３，７１４，７１５，７１６…ゲストソフトウェアの処理ステップ，
７２１…プロセッサ故障の発生タイミング，
７５８，７５９，７６０，７６１，７６２，７６３，７６４，７６５，７６６，７６７，７６８…ハイパバイザの処理ステップ，
７７１，７７２，７７３−ＤＭＡ読み出し部とＩ／Ｏデータバッファ比較部の動作ステップ，
７８２…Ｉ／Ｏからの非同期事象（割り込み），
７９２…ハイパバイザからの仮想的な非同期事象（割り込み）
８０１，８０２，８０３，８０４，８０５，８０６，８０７，８０８，８０９，８１０，８１１，８１２，８１３，８１４，８１５，８１６，８１７，８１８，８１９，８２０…ハイパバイザの処理フローのステップ
９００，９０１，９０２…プロセッサ，
９０３，９０４，９０５…メモリ，
９０７…Ｉ／Ｏスイッチ，
９０８，９０９…Ｉ／Ｏデバイス，
９１０，９１１，９１２…ＰＣＩ  Ｅｘｐｒｅｓｓ  Ｂｕｓ，
９２０，９２１，９２２，９２３，９２４，９２５…メモリ領域，
９２６，９２７，９２８…メモリ領域中のＩ／Ｏデータバッファ，
９１３…要求受信インターフェース部，
９１４…応答送信インターフェース部，
９１５，９１６，９１７…物理計算機，
９３０，９３１，９３２…仮想計算機，
９３３，９３４，９３５…ゲストソフトウェア，
９３６，９３７，９３８…ハイパバイザ，
９４０，９４２，９４４…同期処理部，
９４１，９４３，９４５…アドレス変換部，
９４６…Ｉ／Ｏイベント検出部，
９４７…Ｉ／Ｏイベント処理部，
９４８…Ｉ／Ｏデータ出力比較部，
９４９…要求送信インターフェース部，
９５０…応答受信インターフェース部，
９５１…Ｉ／Ｏコマンド出力比較部，
９５２…Ｉ／Ｏコマンド出力訂正部，
９５３…仮想アドレス特定部，
９５４…物理アドレス変換部，
９５５…ＤＭＡ訂正部，
９５７，９５８，９５９…イベント送信チャネル，
９６０，９６１，９６２，９６３，９６４，９６５，９６６，９６７，９６８，９６９，９７０…Ｉ／Ｏイベント出力，
９７１，９７２，９７３…Ｉ／Ｏデータ書き込み，
９８０，９８１，９８２…Ｉ／Ｏコマンド送受信，
９８４，９８５，９８６，９８７，９８８，９８９…ＤＭＡ読み出し，
９９０…Ｉ／Ｏイベント出力に対応するＩ／Ｏコマンド送受信，
９９１…データ出力イベント通知に対応するＩ／Ｏコマンド送信，
９９２，９９３，９９４…物理アドレス情報に対応するＩ／Ｏコマンド送信，
９９５…比較結果に対応するＩ／Ｏコマンド受信，
１００１…Ｉ／Ｏコマンド比較結果に対応するハイパバイザ内でのデータ出力，
１０１１，１０１２，１０１３…Ｉ／Ｏデータ出力イベント仮想アドレス情報に対応するハイパバイザ内でのデータ出力，
１０２１…仮想ページ番号に対応するハイパバイザ内でのデータ出力，
１０２２…物理ページ番号に対応するハイパバイザ内でのデータ出力，
１０３１，１０３２，１０３３…Ｉ／Ｏデータ出力イベント物理アドレス情報に対応するハイパバイザ内でのデータ出力，
１０４１…Ｉ／Ｏデータ比較結果に対応するハイパバイザ内でのデータ出力，
１１００…スイッチ回路，
１１０１…ＤＭＡデータ読み出し部，
１１０２…Ｉ／Ｏデータバッファ比較部，
１１１１…データ出力イベント通知に対応する信号，
１１１２，１１１３，１１１４…物理アドレス情報に対応する信号，
１１１５…比較結果に対応する信号，
１１２６，１１２７，１１２８…ＤＭＡ読み出し結果。
【図１】
0005635815.tif 000002
【図２】
0005635815.tif 000003
【図３】
0005635815.tif 000004
【図４】
0005635815.tif 000005
【図５】
0005635815.tif 000006
【図６】
0005635815.tif 000007
【図７】
0005635815.tif 000008
【図８】
0005635815.tif 000009
【図９】
0005635815.tif 000010
【図１０】
0005635815.tif 000011
【図１１】
0005635815.tif 000012