(57)【要約】【課題】独立した計算機上の仮想計算機を組み合わせて二重化し、メイン側とクローン側とが独立して持つ両ストレージの状態を一致させながら、両仮想計算機の実行状態を同期させる高可用システムを提供すること。【解決手段】メイン側ＨＶは、メイン側ＶＭに対するイベントに関する同期情報を収集し、クローン側ＨＶ２００へ伝える。中断状態比較部２０７と復帰状態設定部２０９とブレークポイント設定部２１０は、同期情報に従いＶＭ２５０の入力に係る実行状態をメイン側ＶＭと同一になるように制御する。その際、割り込み情報判定部２１２は、該同期情報に係るイベントが、メイン側仮想ストレージからのＩ／Ｏ完了割り込み（又はこれに対応する割り込みハンドラ呼び出し）である場合には、該同期情報が受信され且つ仮想ストレージ２４０からのＩ／Ｏ完了割り込みが捕捉されるまで、該同期情報に関係する制御を待ち合わせる。【選択図】      図１
2010026932.tif 000002
【特許請求の範囲】
【請求項１】
第１の仮想計算機並びに該第１の仮想計算機及び第１の仮想ストレージを管理する第１のハイパーバイザが稼働する第１の計算機と、該第1の仮想計算機が実行する処理と同一の処理を該第1の仮想計算機より遅延して実行する第２の仮想計算機並びに該第２の仮想計算機及び第２の仮想ストレージを管理する第２のハイパーバイザが稼働する第２の計算機とを含む高可用システムであって、
前記第１のハイパーバイザは、
前記第1の仮想計算機の処理の実行中に発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集する収集部と、
収集した前記同期情報を、前記第２のハイパーバイザへ送信する送信部とを備え、
前記第２のハイパーバイザは、
前記第１のハイパーバイザから、前記同期情報を受信する受信部と、
受信した前記同期情報に従って、前記第２の仮想計算機の入力に係る実行状態を、前記第１の仮想計算機の入力に係る実行状態と同一になるように、制御する制御部とを備え、
前記制御部は、前記同期情報に係るイベントが、前記第１の仮想ストレージからのＩ／Ｏ完了割り込みとこれに対応する割り込みハンドラ呼び出しとのうちで予め定められたものである場合には、該同期情報が受信され、且つ、該Ｉ／Ｏ完了割り込みに対応する前記第２の仮想ストレージからのＩ／Ｏ完了割り込みが捕捉された後に、該同期情報に関係する前記制御を行うことを特徴とする高可用システム。
【請求項２】
前記制御部は、捕捉すべき前記第２の仮想ストレージからのＩ／Ｏ完了割り込みが複数ある場合には、前記第２の仮想ストレージから各Ｉ／Ｏ完了割り込みを捕捉した順番にかかわらずに、前記第１の仮想計算機が受け付けた前記第１の仮想ストレージからのＩ／Ｏ完了割り込みの順番で、前記同期情報に関係する前記制御を行うことを特徴とする請求項１に記載の高可用システム。
【請求項３】
捕捉すべきＩ／Ｏ完了割り込みが複数ある場合で、前記第１のハイパーバイザにおいて第１のＩ／Ｏ完了割り込みの後に第２のＩ／Ｏ完了割り込みが捕捉され、前記第２のハイパーバイザにおいて前記第１のハイパーバイザとは逆の順番でＩ／Ｏ完了割り込みが捕捉されたときは、前記制御部は、少なくとも該第１のＩ／Ｏ完了割り込みが捕捉されるまで、該第２のＩ／Ｏ完了割り込みに関する情報を一時バッファに保留しておくことを特徴とする請求項２に記載の高可用システム。
【請求項４】
前記制御部は、
前記同期情報に係るイベントが、前記第１の仮想ストレージへの読み込み要求である場合には、該読み込み要求に対応する読み込み要求を前記第２の仮想ストレージへ発行しないものとし、
前記同期情報に係るイベントが、前記第１の仮想ストレージへの読み込み要求に対応する前記第１の仮想ストレージからのＩ／Ｏ完了割り込みである場合には、該同期情報が受信されれば、該第２の仮想ストレージからのＩ／Ｏ完了割り込みを待つことなく、該同期情報に関係する前記制御を行うものとすることを特徴とする請求項１に記載の高可用システム。
【請求項５】
前記収集部は、前記イベントが、前記第１の仮想ストレージへの読み込み要求に対応する前記第１の仮想ストレージからのＩ／Ｏ完了割り込みに対応する割り込みハンドラ呼び出しである場合に、前記同期情報に、読み込みデータを含ませ又はこれを省略し、
前記制御部は、前記第２の仮想ストレージへの読み込み要求に対応する前記第２の仮想ストレージからのＩ／Ｏ完了割り込みに対応する割り込みハンドラ呼び出しを前記第２の仮想計算機に対して実行するにあたって、前記同期情報に読み込みデータが含まれる場合には、読み込みデータとして、前記同期情報に含まれる読み込みデータ又は前記第２の仮想ストレージからの読み込みデータのいずれかを用い、前記同期情報に読み込みデータが含まれない場合には、読み込みデータとして、前記第２の仮想ストレージからの読み込みデータを用いることを特徴とする請求項１に記載の高可用システム。
【請求項６】
前記収集部は、前記イベントが、前記第１の仮想ストレージへの読み込み要求に対応する前記第１の仮想ストレージからのＩ／Ｏ完了割り込みに対応する割り込みハンドラ呼び出しである場合に、前記同期情報に、読み込みデータを含ませ、
前記制御部は、前記第２の仮想ストレージへの読み込み要求に対応する前記第２の仮想ストレージからのＩ／Ｏ完了割り込みに対応する割り込みハンドラ呼び出しを前記第２の仮想計算機に対して実行するにあたって、前記第１の仮想ストレージへの読み込み要求に対応する読み込み要求を前記第２の仮想ストレージへ発行した場合には、読み込みデータとして、前記同期情報に含まれる読み込みデータ又は前記第２の仮想ストレージからの読み込みデータのいずれかを用い、前記第１の仮想ストレージへの読み込み要求に対応する読み込み要求を前記第２の仮想ストレージへ発行しなかった場合には、読み込みデータとして、前記同期情報に含まれる読み込みデータを用いることを特徴とする請求項１に記載の高可用システム。
【請求項７】
前記収集部は、前記イベントが、前記第１の仮想ストレージへの書き込み要求である場合に、前記同期情報に、書き込みデータを含ませ又はこれを省略し、
前記制御部は、前記第１の仮想ストレージへの書き込み要求に対応する書き込み要求を前記第２の仮想ストレージに対して発行するにあたって、前記同期情報に書き込みデータが含まれる場合には、書き込みデータとして、前記同期情報に含まれる書き込みデータ又は前記第２の仮想計算機からの書き込みデータのいずれかを用い、前記同期情報に書き込みデータが含まれない場合には、書き込みデータとして、前記第２の仮想計算機からの書き込みデータを用いることを特徴とする請求項１に記載の高可用システム。
【請求項８】
前記送信部は、複数の前記同期情報を、当該同期情報に係るイベントが発生した順に、又は当該同期情報に係るイベントが発生した順を特定可能とする順序情報を当該同期情報に付加して、送信することを特徴とする請求項１に記載の高可用システム。
【請求項９】
前記制御部は、複数の前記同期情報を、当該同期情報が受信された順に又は当該同期情報に含まれる前記順序情報により特定される発生順に参照することによって、前記第１の仮想計算機について複数のイベントが発生した順番と同一の順番で、前記第２の仮想計算機について同一の複数のイベントが発生するように、制御することを特徴とする請求項８に記載の高可用システム。
【請求項１０】
前記収集部は、前記イベントの発生するタイミングが非決定的であるか、決定的であるかを判定し、非決定的であると判断した場合に、前記同期情報に、該イベントが発生したタイミングを特定するためのタイミング情報を含ませることを特徴とする請求項１に記載の高可用システム。
【請求項１１】
前記制御部は、前記同期情報に係るイベントの発生するタイミングが非決定的である場合に、前記同期情報に含まれるタイミング情報に従って、前記第１の仮想計算機について該イベントが発生したタイミングと同一のタイミングで、前記第２の仮想計算機について該イベントと同一のイベントが発生するように、制御することを特徴とする請求項１０に記載の高可用システム。
【請求項１２】
前記第１のハイパーバイザから前記第1の仮想計算機へ制御が移るに際して、実行された命令数を保持するカウンタをクリアして、それ以降で実行される命令数をカウントし、前記第1の仮想計算機から前記第１のハイパーバイザへ制御が移るに際して、該命令数のカウントを停止するカウンタ制御部を更に備え、
前記収集部は、前記第1の仮想計算機から前記第１のハイパーバイザへ制御が移るにあたって発生したイベントが、該第1の仮想計算機に関係する割り込みであった場合には、前記イベントの発生するタイミングが非決定的であると判定し、停止したときの前記カウンタが示す実行命令数を、前記タイミング情報とすることを特徴とする請求項１０に記載の高可用システム。
【請求項１３】
前記カウンタ制御部は、前記第１のハイパーバイザから前記第1の仮想計算機へ制御が移るに際して、前記第1の仮想計算機から前記第１のハイパーバイザへ制御が移るにあたって発生したイベントが、該第1の仮想計算機に関係しない割り込みである場合には、前記カウントをクリアする代わりに、前記カウントを再開することを特徴とする請求項１２に記載の高可用システム。
【請求項１４】
前記制御部は、前記同期情報に含まれる前記実行命令数に従って、前記第２の仮想計算機が実行している命令列の中に、前記同期情報に係るイベントと同一のイベントを発生させるためのブレークポイントを設定することを特徴とする請求項１２に記載の高可用システム。
【請求項１５】
前記収集部は、前記イベントについて、前記第1の仮想計算機の処理が中断して、制御が前記第１のハイパーバイザへ移る場合、及び前記第１のハイパーバイザから前記第1の仮想計算機へ制御が復帰する場合に、前記同期情報を収集することを特徴とする請求項１に記載の高可用システム。
【請求項１６】
前記収集部は、前記イベントがハイパーバイザ呼び出しである場合、前記第1の仮想計算機の処理の中断時に係る前記同期情報に、ハイパーバイザ呼び出しの種類及び引数の情報を含ませることを特徴とする請求項１に記載の高可用システム。
【請求項１７】
前記収集部は、前記イベントがハイパーバイザ呼び出しである場合、前記第1の仮想計算機の処理への復帰時に係る前記同期情報に、ハイパーバイザ呼び出しの応答情報及び応答経路の情報を含ませることを特徴とする請求項１６に記載の高可用システム。
【請求項１８】
前記収集部は、前記イベントが割り込みである場合、前記第1の仮想計算機の処理の中断時に係る前記同期情報に、割り込みハンドラが起動される仮想計算機の識別情報、例外の情報及び割り込み位置の情報を含ませることを特徴とする請求項１に記載の高可用システム。
【請求項１９】
前記収集部は、前記イベントが割り込みである場合、前記第1の仮想計算機の処理への復帰時に係る前記同期情報に、割り込みハンドラ呼び出しに関する情報を含ませることを特徴とする請求項１８に記載の高可用システム。
【請求項２０】
第１の仮想計算機並びに該第１の仮想計算機及び第１の仮想ストレージを管理する第１のハイパーバイザが稼働する第１の計算機と、該第1の仮想計算機が実行する処理と同一の処理を該第1の仮想計算機より遅延して実行する第２の仮想計算機並びに該第２の仮想計算機及び第２の仮想ストレージを管理する第２のハイパーバイザが稼働する第２の計算機とを含む高可用システムの実行状態制御方法であって、
前記第１のハイパーバイザの備える収集部が、前記第1の仮想計算機の処理の実行中に発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集するステップと、
前記第１のハイパーバイザの備える送信部が、収集した前記同期情報を、前記第２のハイパーバイザへ送信するステップと、
前記第２のハイパーバイザの備える受信部が、前記第１のハイパーバイザから、前記同期情報を受信するステップと、
前記第２のハイパーバイザの備える制御部が、受信した前記同期情報に従って、前記第２の仮想計算機の入力に係る実行状態を、前記第１の仮想計算機の入力に係る実行状態と同一になるように、制御するステップとを有し、
前記制御部は、前記同期情報に係るイベントが、前記第１の仮想ストレージからのＩ／Ｏ完了割り込みとこれに対応する割り込みハンドラ呼び出しとのうちで予め定められたものである場合には、該同期情報が受信され、且つ、該Ｉ／Ｏ完了割り込みに対応する前記第２の仮想ストレージからのＩ／Ｏ完了割り込みが捕捉された後に、該同期情報に関係する前記制御を行うことを特徴とする実行状態制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二重化技術を施した高可用システム及びその実行状態制御方法に関する。
【背景技術】
【０００２】
従来の高可用システム（フォールトトレラントシステム)は、専用のハードウェアを用いて構築されているため、ハードウェアのコストが高く、導入の障壁になっている。
【０００３】
仮想化技術により、仮想マシンモニタ（ハイパーバイザ）上で仮想マシン（仮想計算機）を動作させることが可能である。
【０００４】
仮想化技術を利用して、仮想計算機の実行状態を同期しながら動作させることにより、一般的なハードウェア上で高可用システムが構築できるため、導入のハードルを下げることができる。
【０００５】
特許文献１では、高可用システムにおけるメイン側とクローン側とがストレージを共有している。しかし、特許文献１では、故障耐性の高い共有ストレージを用いることを前提としていると考えられ、ストレージに不具合が生じると、システム全体として稼動不可能な状態になる。また、故障耐性の高い共有ストレージを用いた場合は、特に、共有ストレージや、共有ストレージに対応できる機器を使用する必要があるため、コストがかかる。
【特許文献１】米国特許第５４８８７１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来、メイン側とクローン側とがそれぞれ独立してストレージを持つ構成を取り、ストレージの状態を一致させながら、メイン側とクローン側の仮想計算機の実行状態を同期させることはできなかった。
【０００７】
本発明は、上記事情を考慮してなされたもので、独立した２台の計算機上でそれぞれ稼働する仮想計算機を組み合わせて二重化を実現するとともに、メイン側とクローン側とがそれぞれ独立してストレージを持つ構成を取り、ストレージの状態を一致させながら、メイン側とクローン側の仮想計算機の実行状態を同期させることを可能にした高可用システム及び実行状態制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、第１の仮想計算機並びに該第１の仮想計算機及び第１の仮想ストレージを管理する第１のハイパーバイザが稼働する第１の計算機と、該第1の仮想計算機が実行する処理と同一の処理を該第1の仮想計算機より遅延して実行する第２の仮想計算機並びに該第２の仮想計算機及び第２の仮想ストレージを管理する第２のハイパーバイザが稼働する第２の計算機とを含む高可用システムであって、前記第１のハイパーバイザは、前記第1の仮想計算機の処理の実行中に発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集する収集部と、収集した前記同期情報を、前記第２のハイパーバイザへ送信する送信部とを備え、前記第２のハイパーバイザは、前記第１のハイパーバイザから、前記同期情報を受信する受信部と、受信した前記同期情報に従って、前記第２の仮想計算機の入力に係る実行状態を、前記第１の仮想計算機の入力に係る実行状態と同一になるように、制御する制御部とを備え、前記制御部は、前記同期情報に係るイベントが、前記第１の仮想ストレージからのＩ／Ｏ完了割り込みとこれに対応する割り込みハンドラ呼び出しとのうちで予め定められたものである場合には、該同期情報が受信され、且つ、該Ｉ／Ｏ完了割り込みに対応する前記第２の仮想ストレージからのＩ／Ｏ完了割り込みが捕捉された後に、該同期情報に関係する前記制御を行うことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、独立した２台の計算機上でそれぞれ稼働する仮想計算機を組み合わせて二重化を実現するとともに、メイン側とクローン側とがそれぞれ独立してストレージを持つ構成を取り、ストレージの状態を一致させながら、メイン側とクローン側の仮想計算機の実行状態を同期させることが可能になる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照しながら本発明の実施形態について説明する。
【００１１】
図１に、本実施形態に係る高可用システムの概略構成例を示す。
【００１２】
図１に示されるように、本実施形態の高可用システムは、２台のサーバ計算機１，２を含む。
【００１３】
第１のサーバ計算機１は、プロセッサ１１、メモリ１２、物理デバイスである通信装置(NIC(Network Interface Card))１３、物理デバイスであるストレージ（Ｄｉｓｋ）１４、その他のデバイス（物理デバイス）１５，１６を備えている。なお、図１で示したデバイスは一例であり、デバイスの種類や数は任意である。プロセッサ１１内には、パフォーマンスカウンタとして使用可能なカウンタ１１１が存在する。
【００１４】
同様に、第２のサーバ計算機２は、プロセッサ２１、メモリ２２、物理デバイスである通信装置２３、物理デバイスであるストレージ（Ｄｉｓｋ）２４、その他のデバイス（物理デバイス）２５，２６を備えている。なお、図１で示した物理デバイスは一例であり、デバイスの種類や数は任意である。プロセッサ２１内には、パフォーマンスカウンタとして使用可能なカウンタ２１１が存在する。
【００１５】
サーバ計算機１とサーバ計算機２は、所定のネットワーク８を介して、通信可能である。
【００１６】
サーバ計算機１（２）において、メモリ１２（２２）には、仮想計算機（仮想マシン（ＶＭ）とも呼ばれる。）内で動作するプログラムのソフトウェアと、データが格納されるメモリ領域１５０（２５０）があり、また、ハイパーバイザ（ＨＶ）のプログラムと、データが格納されるメモリ領域１００（２００）がある。
【００１７】
なお、仮想計算機内では、オペレーティングシステム（ＯＳ）やアプリケーションプログラム（ＡＰ）を動作させることができる。ハイパーバイザ（ＨＶ）は、サーバ計算機への入力情報を、仮想計算機（ＶＭ）に対する入力に変換する、などの処理を行う。
【００１８】
プロセッサ１１は、ハイパーバイザに係るメモリ領域１００に格納されたプログラムを読み出して実行し、また、仮想計算機に係るメモリ領域１５０内のプログラムを読み出して実行する。同様に、プロセッサ２１は、ハイパーバイザに係るメモリ領域２００に格納されたプログラムを読み出して実行し、また、仮想計算機に係るメモリ領域２５０内のプログラムを読み出して実行する。
【００１９】
プロセッサ（１１，２１）は、複数の特権レベルを持つ。ハイパーバイザのプログラムは、該複数の特権レベルのうち最も高い特権レベルで動作し、仮想計算機のプログラムは、該ハイパーバイザの動作する特権レベルに比較して、より低い特権レベルで動作する。仮想計算機のプログラムには、ＯＳとアプリケーションプログラムとが含まれる。仮想計算機のＯＳは、アプリケーションプログラムに比較して、より高い特権レベルで動作する。
【００２０】
仮想計算機のプログラムが、その実行中に、最も高い特権レベルを必要とする処理を行う場合には、該仮想計算機からハイパーバイザを呼び出し、呼び出したハイパーバイザに、その処理を依頼する。なお、ハイパーバイザの呼び出し方は、プロセッサに仮想化支援機構が搭載されている場合と、それが搭載されていない場合とで、異なる。仮想計算機のＯＳの処理で特権命令違反を発生させることができる場合には、その特権命令違反をトリガとして、ハイパーバイザが呼び出される。仮想化支援機構が搭載されていない場合には、予め、仮想計算機のＯＳのコードに、ハイパーバイザ呼び出しのコードが挿入される。あるいは、プログラムがメモリに読み込まれてから実行されるまでの間の適当なタイミングで、コードが走査され、ハイパーバイザ呼び出しのコードが挿入される。本実施形態は、仮想化支援機構の有無を問わない。
【００２１】
以下では、図１の高可用システムにおいて、サーバ計算機１上で動作する仮想計算機をメインとし、サーバ計算機２上で動作する仮想計算機をクローンとして、説明する。
【００２２】
図２に、メイン側となるサーバ計算機１における、ハイパーバイザの機能ブロックの構成例を示す。
【００２３】
図２において、１はメイン側となるサーバ計算機、１３は物理デバイスであるＮＩＣ、１４は物理デバイスであるストレージ（Ｄｉｓｋ）、１５，１６は任意の物理デバイス、１００はメイン側のハイパーバイザ、１５０はメイン側の仮想計算機をそれぞれ表している。
【００２４】
なお、図２において、１５２は、高可用システムには関与しない、他の仮想計算機である。他の仮想計算機の数は、任意である（なお、他の仮想計算機が存在しない場合があっても構わない）。
【００２５】
また、メイン側ハイパーバイザ１００において、１０１は物理デバイス管理部、１０２は配送先決定部、１０３は仮想デバイス管理部、１０４は同期情報送信部、１０５はカウンタ制御部、１０６は仮想計算機（ＶＭ）実行状態保存部、１０７は中断情報収集部、１０８はハイパーバイザサービス実行部、１０９は復帰情報収集部をそれぞれ表している。
【００２６】
また、仮想デバイス管理部１０３中の１３３、１３７、１４０はそれぞれＮＩＣ、タイマー（Ｔｉｍｅｒ）、ストレージ（Ｄｉｓｋ）の仮想デバイスを表している。
【００２７】
なお、図２で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
【００２８】
メイン側ハイパーバイザ１００内の各部の概要は、次の通りである。
【００２９】
物理デバイス管理部１０１は、物理デバイスを管理する。
【００３０】
配送先決定部１０２は、物理デバイスの状態とその変化（イベント）の配送先を決定する。
【００３１】
仮想デバイス管理部１０３は、仮想デバイスを管理する。
【００３２】
同期情報送信部１０４は、同期情報を送信する。
【００３３】
カウンタ制御部１０５は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ１１内のカウンタ１１１を使用することができる。
【００３４】
ＶＭ実行状態保存部１０６は、仮想計算機（ＶＭ）の実行状態を保存する。
【００３５】
中断情報収集部１０７は、メイン側仮想計算機１５０の処理の中断時に、必要な処理を行う。
【００３６】
ハイパーバイザサービス実行部１０８は、本来のハイパーバイザサービスを実行する。
【００３７】
復帰情報収集部１０９は、メイン側仮想計算機１５０の処理の復帰時に、必要な処理を行う。
【００３８】
図３に、クローン側となるサーバ計算機２における、ハイパーバイザの機能ブロックの構成例を示す。
【００３９】
図３において、２はクローン側となる計算機、２３は物理デバイスであるＮＩＣ、２４は物理デバイスであるストレージ（Ｄｉｓｋ）、２５，２６は任意の物理デバイス、２００はクローン側のハイパーバイザ、２５０はクローン側の仮想計算機をそれぞれ表している。
【００４０】
なお、図３において、２５２は、高可用システムには関与しない、他の仮想計算機である。他の仮想計算機の数は、任意である（なお、他の仮想計算機が存在しない場合があっても構わない）。
【００４１】
また、クローン側ハイパーバイザ２００において、２０１は物理デバイス管理部、２０２は配送先決定部、２０３は仮想デバイス管理部、２０４は同期情報受信部、２０５はカウンタ制御部、２０６はＶＭ実行状態保存部、２０７は中断状態比較部、２０８はハイパーバイザサービス実行部、２０９は復帰状態設定部、２１０はブレークポイント設定部、２１２は割り込み情報判定部、２１３はＩ／Ｏバッファ保存部をそれぞれ表している。
【００４２】
また、仮想デバイス管理部２０３中の２３３、２３７、２４０はそれぞれＮＩＣ、タイマー（Ｔｉｍｅｒ）、ストレージ（Ｄｉｓｋ）の仮想デバイスを表している。
【００４３】
なお、図３で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
【００４４】
クローン側ハイパーバイザ２００内の各部の概要は、次の通りである。
【００４５】
物理デバイス管理部２０１は、物理デバイスを管理する。
【００４６】
配送先決定部２０２は、物理デバイスの状態とその変化（イベント）の配送先を決定する。
【００４７】
仮想デバイス管理部２０３は、仮想デバイスを管理する。
【００４８】
同期情報受信部２０４は、同期情報を受信する。
【００４９】
割り込み情報判定部２１２は、クローン側仮想計算機２５０の処理の中断時に発生した割り込みが、待ち合わせ対象のものであるかどうかを判定する。
【００５０】
Ｉ／Ｏバッファ保存部２１３は、待ち合わせまたは保留の割り込みの情報を、一時保存する。
【００５１】
カウンタ制御部２０５は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ２１内のカウンタ２１１を使用することができる。
【００５２】
ＶＭ実行状態保存部２０６は、仮想計算機（ＶＭ）の実行状態を保存する。
【００５３】
中断状態比較部２０７は、クローン側仮想計算機２５０の処理の中断時に、必要な処理を行う。
【００５４】
ハイパーバイザサービス実行部２０８は、本来のハイパーバイザサービスを実行する。
【００５５】
復帰状態設定部２０９は、クローン側仮想計算機２５０の処理への復帰時に、必要な処理を行う。
【００５６】
ブレークポイント設定部２１０は、ブレークポイントを設定する。
【００５７】
なお、サーバ計算機１とサーバ計算機２が、それぞれ、メイン側となる構成ための構成（図２）とクローン側となるための構成（図３）を兼ね備え、サーバ計算機１とサーバ計算機２とが、適宜、メインとクローンの役割を交替できるようにしても良い。
【００５８】
以下、図２と図３に示したハイパーバイザの構成・動作を中心に説明する。
【００５９】
メイン側となるサーバ計算機１において、メイン側ハイパーバイザ１００は、該サーバ計算機１に接続された物理デバイス（ＮＩＣ１３、Ｄｉｓｋ１４、その他の物理デバイス１５，１６等）を管理する。また、メイン側ハイパーバイザ１００は、仮想計算機（メイン側仮想計算機１５０、高可用システムには関与しない仮想計算機１５２）に対して、仮想デバイス（ＮＩＣ１３３，タイマー１３７，ストレージ１４０等）を提供する。これにより、メイン側仮想計算機１５０からは、それら仮想デバイスが、あたかも物理デバイスであるかのように、認識される。
【００６０】
クローン側となるサーバ計算機１において、クローン側ハイパーバイザ２００は、該サーバ計算機２に接続された物理デバイス（ＮＩＣ２３、Ｄｉｓｋ２４、その他の物理デバイス２５，２６等）を管理する。また、クローン側ハイパーバイザ２００は、仮想計算機（メイン側仮想計算機２５０、高可用システムには関与しない仮想計算機２５２）に対して、仮想デバイス（ＮＩＣ２３３，タイマー２３７，ストレージ２４０等）を提供する。これにより、クローン側仮想計算機２５０からは、それら仮想デバイスが、あたかも物理デバイスであるかのように、認識される。
【００６１】
なお、ハイパーバイザの実施形態の一つとして、ハイパーバイザの機能の一部を、管理ドメインと呼ばれる特別な仮想計算機に持たせてもよい。
【００６２】
メイン側ハイパーバイザ１００は、メイン側サーバ計算機１に接続された物理デバイスの状態に係る情報のうちで、メイン側サーバ計算機１におけるそれぞれの仮想計算機から読める情報と、それらから読めない情報とを、分別する。この分別は、配送先決定部１０２により行われる。そして、配送先決定部１０２は、それぞれの仮想計算機から読める情報のみを、それぞれの仮想計算機に対応した仮想デバイスの状態に反映（コピーなど）させる。例えば、メイン側サーバ計算機１のコンソールが、メイン側仮想計算機１５０に割り当てられている場合においては、キーボード入力の情報が、メイン側仮想計算機１５０に対応する仮想デバイスの状態に反映されが、一方、該コンソールが、メイン側仮想計算機１５０に割り当てられていない場合において、該キーボード入力の情報は、メイン側仮想計算機１５０に対応する仮想デバイスの状態には反映されない。
【００６３】
本実施形態では、メイン側となる計算機１上で稼働するメイン側仮想計算機１５０の入力のコピーを、クローン側計算機２に伝え、クローン側仮想計算機２５０に対しても、メイン側仮想計算機１５０と同一の入力を与えることにより、メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すよう制御する。その際、メイン側仮想ストレージデバイス１４０の状態と、クローン側仮想ストレージデバイス２４０の状態とを一致させながら、メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すように制御する。
【００６４】
ここで、本実施形態の制御の基本的な考え方について説明する。
【００６５】
図４〜図６は、仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図である。図４は、仮想計算機の処理の実行中に、割り込みが発生した場合について、ハイパーバイザ呼び出し又は例外が発生した場合と比較しつつ、説明するための図である。図５は、Ｉ／Ｏ完了割り込みの待ち合わせに関する制御について説明するための図である。図６は、Ｉ／Ｏ完了割り込みの保留・待ち合わせに関する制御について説明するための図である。
【００６６】
なお、図４〜図６において、上半部がメイン側サーバ計算機１に係るタイミングチャートを示し、下半分がクローン側サーバ計算機２に係るタイミングチャートを示す。また、図４中、ＨＶ１はメイン側ハイパーバイザ、ＨＶ２はクローン側ハイパーバイザ、ＶＭ１はメイン側仮想計算機、ＶＭ２はクローン側仮想計算機をそれぞれ表す。また、図４中、Ｄ１はメイン側デバイス（例えば、メイン側ストレージ）、Ｄ２はクローン側デバイス（例えば、クローン側ストレージ）をそれぞれ表す。また、図５，６中、Ｓ１はメイン側ストレージ、Ｓ２はクローン側ストレージをそれぞれ表す。
【００６７】
（Ａ）事象発生のタイミングの一致
一般的に、ハイパーバイザは、仮想計算機の処理の実行中に、「ハイパーバイザ呼び出し」、「例外」、「割り込み」などの事象（イベント）が発生して、該仮想計算機の処理が中断すると、その中断した要因に応じたサービスを実行した後、次に実行すべき仮想計算機を選定して、その仮想計算機に処理を渡す。なお、本実施形態では、ハイパーバイザサービス実行部１０８，２０８が、その役割を担当する。
【００６８】
メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すようにするためには、メイン側仮想計算機１５０に関して発生した、（１）ハイパーバイザ呼び出し、（２）例外発生、（３）割り込みの発生、などの事象について、（ａ）発生した順序、及び、（ｂ）発生したタイミングが、メイン側仮想計算機１５０と同一になるように、クローン側仮想計算機２５０に対して制御を施す必要がある。
【００６９】
特に、タイミングについては、メイン側仮想計算機１５０とクローン側仮想計算機２５０それぞれで実行中の命令列における同一の場所（プログラムカウンタ）で、当該事象が発生するように制御しないと、当該事象が発生した後の両仮想計算機の実行状態の一致が図れなくなる。
【００７０】
以下、各事象発生のタイミングについて説明する。
【００７１】
（１）ハイパーバイザ呼び出し
メイン側仮想計算機１５０とクローン側仮想計算機２５０の初期状態が同じであれば、プログラム中のハイパーバイザ呼び出しの発生位置は、決定的に確定している。よって、ハイパーバイザ呼び出しについては、図４のように、同じ遷移状態になる。
【００７２】
（２）例外
メイン側仮想計算機１５０とクローン側仮想計算機２５０の初期状態が同じであれば、仮想計算機の処理中に発生する例外（ページのアクセス権例外やゼロ除算例外など）の発生位置は、決定的に確定している。よって、例外については、図４のように、同じ遷移状態になる。
【００７３】
なお、ハイパーバイザの実行状態の違いにより発生する例外については、メイン側仮想計算機１５０またはクローン側仮想計算機２５０の実行状態には影響は与えないものと考え、ここでは対象外とする。具体的には、例えば、アクセスしようとしたメモリ領域（ページ）がハイパーバイザによって実ページに配置されていないために、ページ例外が発生したとしても、それは仮想計算機から見た場合は隠蔽されるものなので、仮想計算機の実行状態には影響を与えないと考えられる。
【００７４】
（３）割り込み
たとえメイン側仮想計算機１５０の初期状態とクローン側仮想計算機２５０の初期状態とが同じであっても、仮想計算機に対する割り込みに関しては、割り込みが起こるタイミングは決定的ではない。よって、割り込みについては、図４のように、異なる遷移状態になる。
【００７５】
なお、発生した割り込みが、ハイパーバイザに対するものである場合や、高可用システムに関与しない仮想計算機に対するものである場合には、その割り込みはメイン側仮想計算機１５０またはクローン側仮想計算機２５０に対して隠蔽されるものなので、メイン側仮想計算機１５０またはクローン側仮想計算機２５０の実行状態には影響は与えないものと考え、ここでは対象外とする。
【００７６】
上記から分かるように、事象発生のタイミングを明示的に制御する必要があるのは、割り込みである。以下、割り込み発生のタイミングを合わせる基本的な考え方について説明する。
【００７７】
かりに、メイン側仮想計算機１５０とクローン側仮想計算機２５０とを並行して同時に動作させた場合では、どのような方法を採っても割り込みのタイミングを合わせることは不可能である。
【００７８】
（１）メイン側で割り込みを検知し、それと同じ割り込みをクローン側で再現する方法を考える。この場合、メイン側で検知し、その情報をメイン側からクローン側に送り、クローン側でその割り込みを再現する処理を行っている間に、クローン側に再現すべきタイミングを過ぎてしまう。
【００７９】
（２）メイン側の仮想計算機に対する割り込み処理とクローン側の仮想計算機に対する割り込み処理をそれぞれ独立して行えば、上記（１）の遅延は発生しない。しかし、そもそも割り込みが起こるタイミングは決定的ではないため、メイン側で割り込みが発生したタイミングでクローン側に割り込みが発生する保証はない。
【００８０】
このように、メイン側仮想計算機１５０とクローン側仮想計算機２５０とを並行して同時に動作させた場合では、割り込みのタイミングを合わせることは不可能である。
【００８１】
そこで、本実施形態では、図５，６に示すように、メイン側仮想計算機１５０を先行して実行し、それより少し遅延してクローン側仮想計算機２５０を実行する。
【００８２】
（１）メイン側
メイン側仮想計算機１５０で、基準になる時点（例えば、前回の仮想計算機への復帰の時点）から割り込みが発生するまでに実行した命令数（実行命令数）を、計測する。
【００８３】
（２）クローン側
上記（１）で計測した実行命令数の箇所で、クローン側仮想計算機２５０にブレークポイントを設定する。
【００８４】
これにより、メイン側仮想計算機１５０で起きた割り込みのタイミングを、クローン側仮想計算機２５０に再現することができる。なお、ハイパーバイザ呼び出しや例外に関しては、プログラム中のハイパーバイザ呼び出しや例外の発生位置は決定的に確定しているため、前述したようなブレークポイントを設定しなくても問題ない。
【００８５】
（Ｂ）ストレージＩ／Ｏ完了割り込みの待ち合わせ処理と保留処理
ここで、メイン側ストレージデバイス（１４，１４０）の状態と、クローン側ストレージデバイス（２４，２４０）の状態とを一致させるためには、メイン側仮想計算機１５０がメイン側仮想ストレージデバイス１４０に対して発行したＩ／Ｏ要求と同じものを、クローン側仮想ストレージデバイス２４０に対してクローン側仮想計算機２５０に発行させる必要がある。なお、Ｉ／Ｏ要求が発行されるまでにメイン側仮想計算機１５０とクローン側仮想計算機２５０が同一の挙動を示していたのであれば、同じＩ／Ｏ要求が発行されるはずである。
【００８６】
さて、メイン側仮想ストレージデバイス１４０と、クローン側仮想ストレージデバイス２４０とに対してそれぞれＩ／Ｏ要求が発行されると、メイン側仮想ストレージデバイス１４０とクローン側仮想ストレージデバイス２４０との双方からそれぞれＩ／Ｏ完了割り込みが発生することになる。この割り込みが起こるタイミングは非決定的であるため、メイン側に発生したタイミングで、クローン側にＩ／Ｏ完了割り込みの情報を入力するためには、  
（１）メイン側仮想ストレージ１４０からＩ／Ｏ完了割り込み発生したという情報を、メイン側から受信する。  
（２）クローン側仮想ストレージ２４０から、Ｉ／Ｏ完了割り込みが発生する。  
の両方が揃うまで、待ち合わせをしなければ、クローン側に与える割り込みのタイミングを一致させるための条件を整えることができない。
【００８７】
また、ストレージに対して２つ連続でＩ／Ｏ要求を発行したとしても、発行した順番通りにＩ／Ｏ完了割り込みが発生するとは限らない。例えば、要求Ａ・要求Ｂの順番でＩ／Ｏ要求を発行しても、応答Ｂ・応答Ａの順番でＩ／Ｏ完了割り込みが発生する可能性がある。このため、上記（２）のクローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込み発生の待ち合わせの際、直近の待ち合わせ対象でなかったＩ／Ｏ完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく必要がある。
【００８８】
なお、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込みを捕捉するまで、Ｉ／Ｏ完了割り込みにより中断されるまでの処理（例えば図５の実効命令Ｎ１の部分の処理）を待たせる方法（第1の方法）と、（ストレージＩ／Ｏ完了割り込みに対応する）割り込みハンドラ呼び出しを待たせる方法（第２の方法）とが可能である。
【００８９】
具体的には、例えば、ストレージＩ／Ｏ完了割り込みに関しては、  
（１）メイン側ハイパーバイザ１００  
メイン側仮想計算機１５０に対する割り込み発生のタイミングを調べ、クローン側ハイパーバイザ２００にその情報を送信する。  
（２）クローン側ハイパーバイザ２００  
（ａ）上記（１）の情報と、上記（１）の情報（直近の待ち合わせ対象）に応じたクローン側ストレージ２４からのＩ／Ｏ完了割り込み発生を待ち合わせする。  
（ｂ）クローン側ストレージ２４から、上記（１）の情報（直近の待ち合わせ対象）でないＩ／Ｏ完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで、保留しておく。  
（ｃ）待ち合わせが完了したら、上記（１）の情報に従って、クローン側ハイパーバイザ２００において、クローン側仮想計算機２５０に対して同一のタイミングで割り込みが発生するように、ブレークポイントを設定して、クローン側仮想計算機２５０に実行制御を移す。  
ことにより、ストレージＩ／Ｏ完了割り込み入力の一致を図ることができる。
【００９０】
なお、ストレージＩ／Ｏ完了割り込みに対応する割り込みハンドラ呼び出しだけ待たせる場合には、ストレージＩ／Ｏ完了割り込みにより中断されるまでの処理（例えば図５の実効命令Ｎ１の部分の処理）については、待ち合わせをせずに、ブレークポイントを用いて同一のタイミングで発生させ、続く、割り込みハンドラ呼び出しについて、Ｉ／Ｏ完了割り込み発生を待ち合わせする。
【００９１】
上述した（Ａ）の制御と（Ｂ）の制御とを組み合わせることで、メイン側仮想ストレージデバイス１４０の状態と、クローン側仮想ストレージデバイス２４０の状態とを一致させながら、メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すように制御することができる。
【００９２】
図５は、メイン側仮想計算機１５０においてＩ／Ｏ要求が発生し、メイン側仮想ストレージ１４０からのＩ／Ｏ完了割り込みが発生し、また、クローン側仮想計算機２５０においてＩ／Ｏ要求が発生し、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込みが発生した場合を例示している。この場合、まず、メイン側ハイパーバイザ１００において、割り込みに対して実行命令数Ｎ１が計測され、メイン側ハイパーバイザ１００からクローン側ハイパーバイザ２００へ実行命令数Ｎ１が伝えられ、クローン側ハイパーバイザ２００は、ブレークポイントにより割り込みを再現する。メイン側ハイパーバイザ１００において、割り込みに対して実行命令数Ｎ２が計測され、メイン側ハイパーバイザ１００からクローン側ハイパーバイザ２００へ実行命令数Ｎ２が伝えられる。クローン側ハイパーバイザ２００は、実行命令数Ｎ２を受信し、かつ、クローン側仮想ストレージ２４０からの割り込み発生を待ち合わせて、次の実行を開始する。なお、図５では、実行命令数Ｎ１の実行を行った後に、クローン側仮想ストレージ２４０からの割り込み発生を待ち合わせ、仮想計算機に復帰して、実行命令数Ｎ２の実行を行うようにする方法（第２の方法）であったが、その代わりに、実行命令数Ｎ１の実行をせずに、クローン側仮想ストレージ２４０からの割り込み発生を待ち合わせ、仮想計算機に復帰して、実行命令数Ｎ１の実行を行うようにする方法（第1の方法）も可能である。
【００９３】
図６は、メイン側仮想計算機１５０においてＩ／Ｏ要求が、Ｉ／Ｏ要求Ａ・Ｉ／Ｏ要求Ｂの順番で発生し、メイン側仮想ストレージ１４０からのＩ／Ｏ完了割り込みが、割り込みＡ・割り込みＢの順で発生し、一方、クローン側仮想計算機２５０においてＩ／Ｏ要求が、メイン側と同じく、Ｉ／Ｏ要求Ａ・Ｉ／Ｏ要求Ｂの順番で発生し、メイン側仮想ストレージ１４０からのＩ／Ｏ完了割り込みが、メイン側とは逆に、割り込みＢ・割り込みＡの順で発生した場合を例示している。この場合、クローン側ハイパーバイザ２００は、先に発生した割り込みＢを一旦保留し、割り込みＡが発生した後に、割り込みＢが発生したものとして扱う。なお、図６では、実行命令数Ｎ２の実行を行った後に、クローン側仮想ストレージ２４０からの割り込みＡ発生を待ち合わせ、仮想計算機に復帰して、実行命令数Ｎ３の実行を行うようにする方法（第２の方法）であったが、その代わりに、実行命令数Ｎ２の実行をせずに、クローン側仮想ストレージ２４０からの割り込みＡ発生を待ち合わせ、仮想計算機に復帰して、実行命令数Ｎ２の実行を行うようにする方法（第1の方法）も可能である。
【００９４】
以下、前述した基本的な考え方に基づき、処理の概要をまとめる。
【００９５】
メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すようにするためには、メイン側仮想計算機１５０の実行から少し遅らせてクローン側仮想計算機２５０を実行し、メイン側サーバ計算機１上で稼動するメイン側仮想計算機１５０への入力情報のコピーを、クローン側サーバ計算機２に伝え、メイン側仮想計算機１５０への入力と同じタイミングで、クローン側仮想計算機２５０に対してメイン側仮想計算機１５０に対する入力情報と同一の入力情報を与えることにより実現できる。
【００９６】
さらに、メイン側仮想ストレージデバイス１４０の状態と、クローン側仮想ストレージデバイス２４０の状態を一致させるためには、メイン側仮想計算機１５０がメイン側仮想ストレージデバイス１４０に対して発行したＩ／Ｏ要求と同じものを、クローン側仮想ストレージデバイス２４０に対してクローン側仮想計算機２５０に発行させるように制御する。なお、Ｉ／Ｏ要求が発行されるまでにメイン側仮想計算機１５０とクローン側仮想計算機２５０が同一の挙動を示していたのであれば、同じＩ／Ｏ要求が発行されるはずである。
【００９７】
ここで、メイン側仮想ストレージデバイス１４０と、クローン側仮想ストレージデバイス２４０とに対してＩ／Ｏ要求を発行すると、メイン側仮想ストレージデバイス１４０とクローン側仮想ストレージデバイス２４０との双方からＩ／Ｏ完了割り込みが発生することになる。しかし、この割り込みのタイミングはメイン側とクローン側とで一致するとは限らず、また、Ｉ／Ｏ要求を発行した順番どおりにＩ／Ｏ完了割り込みが発生するとは限らない。
【００９８】
そこで、ストレージＩ／Ｏ完了割り込みに関しては、クローン側ハイパーバイザ２００において、  
（ａ）メイン側から送られてきた同期情報と、その情報（直近の待ち合わせ対象）に応じたクローン側ストレージからのＩ／Ｏ完了割り込み発生を待ち合わせする。  
（ｂ）クローン側ストレージから、メイン側から送られてきた同期情報（直近の待ち合わせ対象）でないＩ／Ｏ完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく。  
（ｃ）待ち合わせが完了したら、メイン側から送られてきた同期情報に従って、クローン側ハイパーバイザ２００において、クローン側仮想計算機２５０に対して同一のタイミングで割り込みが発生するように、ブレークポイントを設定して、クローン側仮想計算機２５０に実行制御を移すことにより、ストレージＩ／Ｏ完了割り込み入力の一致を図ることができる。
【００９９】
なお、Ｉ／Ｏ完了割り込みからの仮想計算機への復帰（割り込みのハンドラ呼び出し）だけ、上記待ち合わせを行う方法も可能である。
【０１００】
以下に、図２と図３で示した各機能ブロックの処理を中心にして、上述した処理の詳細を説明する。
【０１０１】
本実施形態では、図２のメイン側サーバ計算機１において、メイン側仮想計算機１５０を先に実行しておく。メイン側仮想計算機１５０からメイン側ハイパーバイザ１００に制御が移る際に、ＶＭ実行状態保存部１０６にてメイン側仮想計算機１５０の実行状態を保存した後に、中断情報収集部１０７が仮想計算機の処理の中断要因を調査し、中断要因に応じた同期情報（情報の内容については後述）を収集する。中断要因が割り込みだった場合は、カウンタ制御部１０５により、メイン側仮想計算機１５０における割り込み発生のタイミング（具体的には、基準になる時点（例えば、前回の仮想計算機への復帰の時点）からの実行命令数）を調べ、同期情報に加える。同期情報送信部１０４は、収集された同期情報をクローン側ハイパーバイザ２００へ送信する。なお、中断要因の特定が、後述するハイパーバイザサービス実行部１０８によるサービス実行や、メイン側仮想計算機１５０の復帰直前まで特定できない場合、復帰に関する同期情報を送信する直前までに、中断要因を特定して同期情報を送信しても良い。
【０１０２】
続いて、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０の実行中断要因に応じたサービスを実行し、次に実行すべき仮想計算機を選定して、処理を渡す。ここで、次に実行する仮想計算機としてメイン側仮想計算機１５０を選定した場合に、復帰情報収集部１０９が、メイン側仮想計算機１５０を復帰させる際の状態を調査し、復帰時の状態に応じた同期情報（情報の内容については後述）を収集する。同期情報送信部１０４は、収集された同期情報をクローン側ハイパーバイザ２００へ送信する。復帰要因が割り込み処理だった場合は、配送先決定部１０２がメイン側仮想計算機１５０の仮想デバイスの状態に入力情報を反映させるとともに、入力情報を同期情報送信部１０４がクローン側ハイパーバイザ２００へ送信する。
【０１０３】
一般的に、仮想計算機は複数の仮想デバイスを持っている。従って、入力情報には、反映すべき対象の仮想デバイスを特定するための識別情報と、その仮想デバイスに反映する情報とが含まれる。また、ストレージ読み込み要求に対する読み込みデータ入力などの、要求に応じた入力の場合は、どの要求に対応する入力かを識別する情報が含まれる。
【０１０４】
図３のクローン側サーバ計算機２では、同期情報受信部２０４が受信した前回のメイン側仮想計算機１５０の復帰の状態の情報を基に、復帰状態設定部２０９が、クローン側仮想計算機２５０の復帰状態の準備を行う（詳細な処理内容は後述）。また、次の中断要因が割り込みだった場合は、ブレークポイント設定部２１０が、メイン側仮想計算機１５０と同一のタイミングで割り込みが発生するようにブレークポイントを設定して、クローン側仮想計算機２５０に制御を移す。これにより、クローン側仮想計算機２５０の状態遷移がメイン側仮想計算機１５０の状態遷移と同じになる。なお、中断要因がハイパーバイザ呼び出しや例外の場合は、ブレークポイントの設定をせずとも、同じ状態遷移になる。
【０１０５】
なお、本実施形態では、メイン側仮想計算機１５０とクローン側仮想計算機２５０において、割り込みタイミングを合わせるためのカウンタの制御を、カウンタ制御部１０５とカウンタ制御部２０５のそれぞれにて行う。また、このカウンタの値に従って、ブレークポイント設定部２１０により、ブレークポイントの設定を行う。
【０１０６】
クローン側仮想計算機２５０に制御が移り、やがてクローン側仮想計算機２５０の処理が中断されると、中断状態比較部２０７は、クローン側仮想計算機２５０が指定された要因および位置で処理を中断されているかを判断する。ここで、中断要因がハイパーバイザ呼び出しであった場合で、仮想ストレージに対するＩ／Ｏ要求であった場合は、メイン側仮想ストレージデバイス１４０の状態と、クローン側仮想ストレージデバイス２４０の状態とを一致させるために、メイン側仮想計算機１５０がメイン側仮想ストレージデバイス１４０に対して発行したＩ／Ｏ要求と同じものを、ハイパーバイザサービス実行部２０８において、クローン側仮想ストレージデバイス２４０に対して発行させる。なお、Ｉ／Ｏ要求が発行されるまでにメイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示していたのであれば、同じＩ／Ｏ要求が発行されるはずである。
【０１０７】
ここで、クローン側仮想ストレージデバイス２４０に対してＩ／Ｏ要求を発行すると、クローン側仮想ストレージデバイス２４０からもＩ／Ｏ完了割り込みが発生することになる。しかし、クローン側に与える入力（ここでは割り込み）のタイミングは、メイン側から送られてきた同期情報に指定されたタイミングでなければ、メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すようにはならないため、メイン側からの同期（割り込み）情報と、その同期情報（直近の待ち合わせ対象）に応じたクローン側からの同期（割り込み）情報とが揃うまで、待ち合わせを行う必要がある。また、クローン側仮想ストレージデバイス２４０から、メイン側から送られてきた同期情報（直近の待ち合わせ対象）でないＩ／Ｏ完了割り込みが発生した場合は、その割り込みを、後に発生するであろう待ち合わせのときまで保留しておく必要がある。
【０１０８】
このため、割り込み情報判定部２１２は、クローン側仮想ストレージデバイス２４０からのＩ／Ｏ完了割り込みであった場合は、割り込み情報を同期情報受信部２０４に受け渡す。これにより、復帰状態設定部２０９において、クローン側仮想計算機２５０の復帰状態の準備を行う際には、復帰要因が仮想ストレージデバイスからのＩ／Ｏ完了割り込みであった場合は、メイン側からの同期情報とクローン側からの同期情報とが揃うまでの待ち合わせおよび保留が実現できる。
【０１０９】
また、メイン側仮想計算機１５０とクローン側仮想計算機２５０とが同一の挙動を示すように制御するためには、入力情報をクローン側仮想デバイスの状態に反映させるのは、メイン側からの割り込み同期情報とクローン側からの割り込み同期情報との２つの同期情報が揃ってから、復帰状態設定部２０９が行わなければでなければならないため、入力情報がクローン側仮想デバイスからのＩ／Ｏ完了割り込みにより上書きされるのを防がなければならない。このため、クローン側仮想ストレージデバイス２４０に対するＩ／Ｏ要求は、Ｉ／Ｏ要求対象のメモリ領域をＩ／Ｏバッファ保存部２１３に複製し、複製したメモリ領域に対して行う。
【０１１０】
なお、上述の同期情報や入力情報の実際のデータ伝達経路は、図１におけるサーバ計算機１が持つＮＩＣ１、サーバ計算機１と２をつなぐネットワーク、サーバ計算機２が持つＮＩＣ２を通ることになる。また、同期情報や入力情報をやり取りするために、同期情報送信部１０４と同期情報受信部２０４には、それぞれ、通信相手を特定するための情報（例えば、ＩＰアドレスやポート番号などの通信相手の計算機のネットワークアドレス）が管理されている。また、例えば、ハイパーバイザが複数の仮想計算機を管理している場合は、どの仮想計算機が該当するかを識別する情報（ＩＤ）も、通信相手を特定するための情報に含まれる。なお、通信相手を特定するための情報は、仮想計算機の起動前に手動で設定するようにしてもよいし、別のモジュールが自動的に設定するようにしてもよい。
【０１１１】
さて、同期情報送信部１０４と同期情報受信部２０４がやり取りする情報の詳細を説明する。同期情報送信部１０４は、メイン側サーバ計算機１において以下の事象が起きるたびに、その情報を同期情報受信部２０４に送信する。  
（Ａ）メイン側仮想計算機１５０が発行したハイパーバイザ呼び出し  
（Ｂ）上記（Ａ）に対応するメイン側ハイパーバイザ１００の応答  
（Ｃ）例外の捕捉  
（Ｄ）上記（Ｃ）に対応するメイン側仮想計算機１５０における例外ハンドラ呼び出し  
（Ｅ）割り込みの捕捉  
（Ｆ）上記（Ｆ）に対応するメイン側仮想計算機１５０における割り込みハンドラ呼び出し
これらのうち、（Ａ）（Ｃ）（Ｅ）が中断要因であり、（Ｂ）（Ｄ）（Ｆ）が復帰要因である。
【０１１２】
まず、メイン側となるサーバ計算機１におけるメイン側ハイパーバイザ１００の各事象に対する処理について説明する。
【０１１３】
（Ａ）ハイパーバイザ呼び出しは、メイン側仮想計算機１５０の実行中断要因であるが、メイン側仮想計算機１５０が決定的に起こす事象でるため、事象の発生のタイミングの情報は必要ではなく、事象の発生の情報のみをクローン側ハイパーバイザ２００に伝達すればよい。また、ハイパーバイザ呼び出しは仮想計算機が外部に対して起こす出力であるため、送信する同期情報には、「ハイパーバイザ呼び出しの種類」と「引数の情報」が含まれればよい。さらに、「退避されたレジスタの内容」等を送ってもよい。なお、ハイパーバイザが、メイン側仮想計算機１５０以外の仮想計算機を複数管理している場合には、メイン側仮想計算機１５０が起こすハイパーバイザ呼び出しのみが対象であり、その他の仮想計算機が起こすハイパーバイザ呼び出しは対象ではない。
【０１１４】
（Ｂ）ハイパーバイザ呼び出しに対するメイン側ハイパーバイザ１００の応答の場合には、応答の内容がメイン側仮想計算機１５０の入力となるため、応答の内容をクローン側ハイパーバイザ２００に伝達すればよい。送信する同期情報には、「ハイパーバイザ呼び出しの応答情報」と「応答経路の情報」が含まれればよい。応答の内容には、ハイパーバイザと仮想計算機の間のインタフェースの設計によりさまざまな情報（例えば、プロセッサのレジスタ、スタック、ハイパーバイザと仮想計算機が共有するメモリ空間、ハイパーバイザと仮想計算機の間でイベントを伝達する機構におけるイベント識別子など）が含まれる。
【０１１５】
（Ｃ）例外の発生は、メイン側仮想計算機１５０の実行中断要因であるが、メイン側仮想計算機１５０が決定的に起こす事象であるため、事象の発生のタイミングの情報は必要ではなく、事象の発生の情報のみをクローン側ハイパーバイザ２００に伝達すればよい。また、例外は仮想計算機が外部に対して起こす出力であるため、送信する同期情報には、「例外の内容」が含まれればよい。なお、メイン側仮想計算機１５０の実行中に発生する例外であっても、ハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機１５０の実行から隠蔽されるものについては、対象にならない。例えば、ハイパーバイザによってメモリ割り当てが解除されたメモリ領域に対するメモリアクセスによって起こるページ例外が、これに当たる。このような例外が発生するタイミングや、そもそも発生するか否かは、ハイパーバイザの実行状態によって決まるため、クローン側で発生する保証がない。従って、このような例外は対象外である。また、ハイパーバイザが、メイン側仮想計算機１５０以外の仮想計算機を複数管理している場合には、メイン側仮想計算機１５０が起こす例外のみが対象であり、その他の仮想計算機が起こす例外は、対象ではない。
【０１１６】
（Ｄ）例外に対応するメイン側仮想計算機１５０の例外ハンドラ呼び出しの場合には、ハイパーバイザとして、その例外に対する特別な処理が不要な場合と、特別な処理が必要な場合とがある。特別な処理が不要な場合は、例外ハンドラの呼び出しをクローン側ハイパーバイザ２００に伝えればよい。送信する同期情報には、「例外ハンドラ呼び出しの実行を示す情報」が含まれればよい。一方、特別な処理が必要な場合は、その処理内容をクローン側ハイパーバイザ２００に伝えればよい。
【０１１７】
（Ｅ）割り込みの発生は、メイン側仮想計算機１５０の実行中断要因であるが、非決定的な事象である。また、メイン側サーバ計算機１に発生する割り込みは、それに対応する処理の担い手が、メイン側ハイパーバイザ１００自身である場合と、メイン側仮想計算機１５０である場合と、メイン側仮想計算機１５０以外の仮想計算機の場合とがある。このうち、「メイン側仮想計算機１５０が処理する割り込み」以外の割り込みに関しては、メイン側仮想計算機１５０の実行から隠蔽されるため、クローン側ハイパーバイザ２００に伝達する必要はない。メイン側ハイパーバイザ１００は、「メイン側仮想計算機１５０が処理する割り込み（メイン側仮想計算機１５０の割り込みハンドラを呼ぶ必要のある事象）」の情報のみを、クローン側ハイパーバイザ２００に伝達すればよい。メイン側仮想計算機１５０が処理する割り込みには、Ｉ／Ｏ機器のハードウェアにより発生される割り込み以外にも、例えば、ハイパーバイザや他の仮想計算機が、メイン側仮想計算機１５０に事象を伝達するために発生させるソフトウェア割り込みがある。例えば、Ｘｅｎにおけるドメイン間割り込みなどがこれに該当する。
【０１１８】
さらに、クローン側仮想計算機２５０側で、同じ処理過程で割り込みによる処理の中断と割り込みハンドラ呼び出しを実現するために、割り込み位置の情報（つまり、メイン側仮想計算機１５０の割り込みが発生した場所を特定するための情報）として、プログラムカウンタの値や、パフォーマンスカウンタによる実行命令数の情報を収集し、クローン側ハイパーバイザ２００に伝達する。
【０１１９】
以上から、送信する同期情報には、「割り込みハンドラが起動されるメイン側仮想計算機１５０の識別情報（ＩＤ）」と「割り込み情報（ベクタ番号）」と「割り込み位置の情報」が含まれていればよい。
【０１２０】
（Ｆ）上記（Ｅ）で捕捉した、メイン側仮想計算機１５０が処理する割り込みのハンドラ呼び出しは、ハンドラ呼び出しの内容がメイン側仮想計算機１５０の入力となるため、ハンドラ呼び出しに関する情報（割り込み処理に係るデータ内容やベクタ番号、また、ストレージ読み込み要求に対する読み込みデータ入力などの、要求に応じた入力の場合は、どの要求に対応する入力かを識別する情報など）をクローン側ハイパーバイザ２００に伝達すればよい。
【０１２１】
次に、上記した情報を送られる、クローン側となる計算機２におけるクローン側ハイパーバイザ２００の各事象に対する処理について説明する。
【０１２２】
クローン側ハイパーバイザ２００は、メイン側ハイパーバイザ１００から送られてくる同期情報を待ち行列に格納し、待ち行列の先頭の同期情報から順次処理していく。以下に、待ち行列に格納された同期情報に対する処理について説明する。
【０１２３】
（Ａ）同期情報がハイパーバイザ呼び出しの場合は、クローン側仮想計算機２５０においても決定的に起こる事象である。従って、クローン側仮想計算機２５０に制御を移し、当該ハイパーバイザ呼び出しが発行されるのを待ち、ハイパーバイザ呼び出しが発行されたら、同期情報に記録されているハイパーバイザ呼び出しと同一のものであるかを確認するだけでよい。確認が取れたら、同期情報を待ち行列から削除する。
【０１２４】
なお、このハイパーバイザ呼び出しに対する応答は、同期情報に含まれる「（Ｂ）ハイパーバイザ呼び出しに対する応答」の内容でクローン側仮想計算機２５０に対して入力するので、クローン側ハイパーバイザ２００内での独自の対応は行わない。ただし、ハイパーバイザ呼び出しが仮想ストレージに対するＩ／Ｏ要求であった場合は、クローン側仮想ストレージ２４０の状態をメイン側仮想ストレージ１４０の状態と一致させるために、クローン側仮想ストレージ２４０に対してＩ／Ｏを発行する。この際、クローン側仮想ストレージデバイス２４０に対するＩ／Ｏ要求は、Ｉ／Ｏ要求対象のメモリ領域をＩ／Ｏバッファ保存部２１３に複製し、複製したメモリ領域に対して行う。また、Ｉ／Ｏを発行するのは、発行されたハイパーバイザ呼び出しが同期情報に記録されているハイパーバイザ呼び出しと同一のものであるかを確認した後の時点でも、下記（Ｂ）の時点でもどちらでもよい。
【０１２５】
（Ｂ）同期情報がハイパーバイザ呼び出しに対するメイン側ハイパーバイザ１００の応答の場合は、メイン側ハイパーバイザ１００の応答内容を、そのまま、クローン側仮想計算機２５０へ返す準備をする。具体的には、同期情報に含まれている応答経路に、応答内容を格納する。ハイパーバイザ呼び出しが仮想ストレージに対するＩ／Ｏ要求であった場合は、上記（Ａ）で発行したＩ／Ｏの応答内容と、同期情報に含まれている応答内容とが一致していることを確認し、応答内容を格納する。このとき、格納する応答内容は、上記（Ａ）で発行したＩ／Ｏの応答内容でも、同期情報に含まれている応答内容でもどちらでもよい。また、Ｉ／Ｏを発行するのは、上記（Ａ）の時点でも、応答内容をクローン側仮想計算機２５０へ返す準備をする時点でもどちらでもよい。
【０１２６】
なお、同期情報の「（Ｂ）ハイパーバイザ呼び出しに対する応答」だけでは、次のメイン側仮想計算機１５０の実行中断要因が判別できないため、ここでは、すぐにクローン側仮想計算機２５０には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
【０１２７】
（Ｃ）同期情報が例外の捕捉の場合は、クローン側仮想計算機２５０においても決定的に起こる事象である。従って、クローン側仮想計算機２５０に制御を移し、当該例外が発生するのを待ち、例外が発生したら、同期情報に記録されている例外と同一のものであるかを確認するだけでよい。確認が取れたら、同期情報を待ち行列から削除する。
【０１２８】
なお、この例外に対応する例外ハンドラ呼び出しは、同期情報に含まれる「（Ｄ）例外に対応する例外ハンドラ呼び出し」の内容でクローン側仮想計算機２５０に対して入力するので、クローン側ハイパーバイザ２００内での独自の対応は行わない。
【０１２９】
（Ｄ）同期情報が例外ハンドラ呼び出しの場合、例外ハンドラ呼び出しの準備をする。具体的には、ハイパーバイザとしてその例外に対する特別な処理が不要な場合は、次にクローン側仮想計算機２５０へ制御が移ったときに、例外ハンドラが呼び出されるように、同期情報に含まれる「例外ハンドラ呼び出しの実行を示す情報」に従って準備する。ハイパーバイザとしてその例外に対する特別な処理が必要な場合は、同期情報に含まれる処理内容に従って、クローン側ハイパーバイザ２００で処理を行い、次にクローン側仮想計算機２５０へ制御が移ったときの準備を整える。
【０１３０】
なお、同期情報の「（Ｄ）例外に対応する例外ハンドラ呼び出し」だけでは、次のメイン側仮想計算機１５０の実行中断要因が判別できないため、こでは、すぐにクローン側仮想計算機２５０には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
【０１３１】
（Ｅ）同期情報が割り込み発生の場合、同期情報に含まれる割り込み位置の情報を参照して、擬似割り込みを発生させる場所を決定する。次に、プロセッサの持つブレークポイント機能や、一定命令数実行後に割り込みを発生させるパフォーマンスカウンタ機能などの機能を用いて、擬似割り込みポイントまでの命令数を設定するなどの処置を講じてから、クローン側仮想計算機２５０に制御を渡し、擬似割り込み地点で発生する例外の発生などを待つ。割り込みの種類が、仮想ストレージからのＩ／Ｏ完了割り込みであった場合には、擬似割り込みを発生させる場所を決定する処理を、同期情報の「（Ｅ）割り込み発生」と「クローン側仮想ストレージからのＩ／Ｏ完了割り込み」の２つの同期情報とが揃うまで待ち合わせをする。
【０１３２】
（Ｆ）同期情報が割り込みハンドラ呼び出しの場合、割り込みハンドラ呼び出しの準備をする。具体的には、次にクローン側仮想計算機２５０へ制御が移ったときに、割り込みハンドラが呼び出されるように、同期情報に含まれる「割り込みハンドラ呼び出しに関する情報」に従って準備する。割り込みの種類が、仮想ストレージからのＩ／Ｏ完了割り込みであった場合には、割り込みハンドラ呼び出しの準備に必要な情報として、Ｉ／Ｏバッファのデータの内容をクローン側仮想ストレージ２４０に反映させる。
【０１３３】
なお、同期情報の「（Ｄ）割り込みハンドラ呼び出し」だけでは、次のメイン側仮想計算機１５０の実行中断要因が判別できないため、こでは、すぐにクローン側仮想計算機２５０には制御を渡さず、この同期情報を待ち行列から削除するだけで、次の同期情報の処理へ進む。
【０１３４】
以上の一連の処理をメイン側ハイパーバイザ１００とクローン側ハイパーバイザ２００がそれぞれ協調して行うことにより、メイン側仮想ストレージ１４０の内容とクローン側仮想ストレージ２４０の内容を一致させながら、メイン側仮想計算機１５０とクローン側仮想計算機２５０への入力が完全に一致し、実行状態の同期を実現できる。
【０１３５】
なお、本実施形態では、同期情報送信部１０４と同期情報受信部２０４をハイパーバイザ内にあるとしたが、ネットワーク通信に必要な通信プロトコル処理など、仮想計算機側が持つ機能を活用するために、メイン側仮想計算機１５０やクローン側仮想計算機２５０や高可用システムには関与しない仮想計算機とは異なる、特別な仮想計算機（管理ドメイン）を、メイン側サーバ計算機１とクローン側サーバ計算機２上にそれぞれ配備し、同期情報送信部１０４と同期情報受信部２０４の機能の一部をそれぞれ持たせる構成も可能である。
【０１３６】
次に、メイン側となるサーバ計算機１におけるハイパーバイザであるメイン側ハイパーバイザ１００の動作手順について説明する。
【０１３７】
図７に、メイン側ハイパーバイザ１００の動作手順の一例を示す。
【０１３８】
なお、図７において、ＨＶ２はクローン側ハイパーバイザ２００、ＶＭ１はメイン側仮想計算機１５０、ＶＭ２はクローン側仮想計算機２５０をそれぞれ表す。
【０１３９】
なお、図７中、点線で囲った部分は、ＶＭ１に関与しない割り込みや例外に対応する部分である。
【０１４０】
メイン側ハイパーバイザ１００において、管理プログラム等からのメイン側仮想計算機１５０生成要求を受けると、ハイパーバイザサービス実行部１０８は、メイン側仮想計算機１５０を生成する（ステップＳ１０１）。メイン側仮想計算機１５０の生成を、クローン側ハイパーバイザ２００に通知する（ステップＳ１０２）。
【０１４１】
カウンタ制御部１０５は、パフォーマンスカウンタ（以下、カウンタと呼ぶ）を初期化し、実行命令数のカウントを開始し、メイン側仮想計算機１５０を起動する（ステップＳ１０３）。ここで、一旦、メイン側仮想計算機１５０内の処理に移る（ステップＳ１０４）。そして、メイン側仮想計算機１５０内の処理中に、ハイパーバイザ呼び出し、例外、割り込みが発生すると、メイン側ハイパーバイザ１００に処理が戻る。
【０１４２】
ハイパーバイザ呼び出し、例外、割り込みが発生して、メイン側ハイパーバイザ１００に処理が戻ると、カウンタ制御部１０５は、カウンタを停止し、その値を退避する（ステップＳ１０５）。
【０１４３】
次に、中断情報収集部１０７は、メイン側仮想計算機１５０の処理が中断した要因を調査する（ステップＳ１０６）。
【０１４４】
遷移要因（中断要因）がハイパーバイザ呼び出しであった場合は、同期情報送信部１０４は、呼び出しに関する同期情報を、クローン側ハイパーバイザ２００の同期情報受信部２０４へ送信する（ステップＳ１０７）。そして、ハイパーバイザサービス実行部１０８がハイパーバイザ呼び出しに応じたハイパーバイザ内部の処理を行う（ステップＳ１０８）。
【０１４５】
遷移要因が例外である場合は、中断情報収集部１０７は、その例外がハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機１５０の実行から隠蔽されるものであるかを判断する（ステップＳ１０９）。例外がメイン側仮想計算機１５０の実行から隠蔽されるものの一例としては、例えば、ハイパーバイザによってメモリ割り当てが解除されたメモリ領域に対するメモリアクセスによって起こるページ例外が、これに当たる。その例外がメイン側仮想マシンに関与するものであった場合は、ハイパーバイザ呼び出しのときと同様に、例外に関する同期情報を、クローン側ハイパーバイザ２００の同期情報受信部２０４へ送信し（ステップＳ１１０）、ハイパーバイザサービス実行部１０８がその例外に応じたハイパーバイザ内部の処理を行う（ステップＳ１０８）。例外がメイン側仮想計算機１５０の実行から隠蔽されるものの場合は、同期情報は送信せずに、そのままハイパーバイザサービス実行部１０８が、その例外の処理を行う（ステップＳ１０８）。
【０１４６】
遷移要因が割り込みである場合は、例外のときと同様に、中断情報収集部１０７は、メイン側仮想計算機１５０に配送される割り込みであるかを判断する（ステップＳ１１１）。割り込みがメイン側仮想計算機１５０に配送される割り込みであるならば、割り込みに関する同期情報を、クローン側ハイパーバイザ２００の同期情報受信部２０４へ送信し（ステップＳ１１２）、ハイパーバイザサービス実行部１０８がその割り込みに応じたハイパーバイザ内部の処理を行う（ステップＳ１０８）。割り込みがメイン側仮想計算機１５０に配送されないものの場合は、同期情報は送信せずに、そのままハイパーバイザサービス実行部１０８が、その割り込みの処理を行う（ステップＳ１０８）。
【０１４７】
ステップＳ１０８の次に、ハイパーバイザサービス実行部１０８は、次に制御を移す仮想計算機を決定する（ステップＳ１１３）。起動する仮想計算機が、メイン側仮想計算機１５０かどうかを判断し（ステップＳ１１４）、他の仮想計算機であった場合は、一旦、その、他の仮想計算機内の処理を行い（ステップＳ１１５）、その後、ステップＳ１０８のハイパーバイザ内の処理に戻る。ステップＳ１１４にて、起動する仮想計算機がメイン側仮想計算機１５０であった場合は、ステップＳ１１６以降の処理を行う。
【０１４８】
ステップＳ１１４において、起動する仮想計算機が、メイン側仮想計算機１５０である場合に、メイン側ハイパーバイザ１００において、復帰情報収集部１０９が、メイン側仮想計算機１５０を復帰させる際の状態を調査する（ステップＳ１１６）。
【０１４９】
復帰時の状態が、ハイパーバイザ呼び出しからの復帰である場合は、同期情報送信部１０４は、クローン側ハイパーバイザ２００の同期情報受信部２０４へ、ハイパーバイザ呼び出しの応答内容を送信し（ステップＳ１１７）、ハイパーバイザ呼び出しの応答内容をメイン側仮想計算機１５０に返す準備を行い（ステップＳ１１８）、カウンタをクリアしてカウントを開始し（ステップＳ１１９）、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０を復帰する（ステップＳ１２０）。以降は、ステップＳ１０４からの繰り返しである。
【０１５０】
復帰時の状態が、例外である場合、復帰情報収集部１０９は、その例外がハイパーバイザによって仮想化されたことに起因するもので、例外がメイン側仮想計算機１５０の実行から隠蔽されるものであるかを判断する（ステップＳ１２１）。その例外がメイン側仮想マシンに関与するものであった場合は、ハイパーバイザ呼び出しからの復帰のときと同様に、例外ハンドラ呼び出しに関する同期情報を、クローン側ハイパーバイザ２００の同期情報受信部２０４へ送信し（ステップＳ１２２）、メイン側仮想計算機１５０の例外ハンドラ呼び出しの準備を整え（ステップＳ１２３）、カウンタをクリアしてカウントを開始し（ステップＳ１１９）、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０を復帰する（ステップＳ１２０）。以降は、ステップＳ１０４からの繰り返しである。例外がメイン側仮想計算機１５０の実行から隠蔽されるものの場合は、同期情報は送信せずに、カウンタ制御部１０５にて退避されていたカウンタを復帰し、カウントを開始し（ステップＳ１２４）、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０を復帰する（ステップＳ１２０）。以降は、ステップＳ１０４からの繰り返しである。
【０１５１】
復帰時の状態が、割り込みである場合、例外のときと同様に、復帰情報収集部１０９は、メイン側仮想計算機１５０に配送される割り込みであるかを判断する（ステップＳ１２５）。割り込みがメイン側仮想計算機１５０に配送される割り込みであるならば、割り込みハンドラ呼び出しに関する同期情報を、クローン側ハイパーバイザ２００の同期情報受信部２０４へ送信し（ステップＳ１２６）、メイン側仮想計算機１５０の割り込みハンドラ呼び出しの準備を整え（ステップＳ１２７）、カウンタをクリアしてカウントを開始し（ステップＳ１１９）、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０を復帰する（ステップＳ１２０）。以降は、ステップＳ１０４からの繰り返しである。割り込みがメイン側仮想計算機１５０に配送されないものの場合は、同期情報は送信せずに、カウンタ制御部１０５にて退避されていたカウンタを復帰し、カウントを開始し（ステップＳ１２４）、ハイパーバイザサービス実行部１０８が、メイン側仮想計算機１５０を復帰する（ステップＳ１２０）。以降は、ステップＳ１０４からの繰り返しである。
【０１５２】
次に、クローン側となるサーバ計算機２におけるハイパーバイザであるクローン側ハイパーバイザ２００の動作手順について説明する。
【０１５３】
図８Ａ及び図８Ｂに、クローン側ハイパーバイザ２００の動作手順の一例を示す。
【０１５４】
なお、図８Ａ及び図８Ｂにおいて、ＨＶ１はメイン側ハイパーバイザ１００、ＶＭ１はメイン側仮想計算機１５０、ＶＭ２はクローン側仮想計算機２５０をそれぞれ表す。
【０１５５】
また、メイン側ハイパーバイザ１００から受信した同期情報は、同期情報バッファ（待ち行列）に格納されるものとする。
【０１５６】
なお、図８Ａ及び図８Ｂは、クローン側仮想ストレージからのＩ／Ｏ完了割り込みを捕捉するまで、割り込みハンドラ呼び出しを待たせる第２の方法について例示しているが、第１の方法も可能である。
【０１５７】
クローン側ハイパーバイザ２００において、ハイパーバイザサービス実行部２０８は、メイン側ハイパーバイザ１００から、メイン側仮想計算機１５０の生成通知を受信すると（ステップＳ２０１）、クローン側仮想計算機２５０を生成する（ステップＳ２０２）。
【０１５８】
次に、復帰状態設定部２０９は、同期情報バッファの先頭の復帰状態を取り出して検査する（ステップＳ２０３，Ｓ２０４）。
【０１５９】
復帰時の状態が、ハイパーバイザ呼び出しからの復帰である場合、復帰状態設定部２０９は、ハイパーバイザ呼び出しの応答要求を準備し（ステップＳ２０５）、ステップＳ２０６に進む。
【０１６０】
復帰時の状態が、例外である場合、例外ハンドラ呼び出しを準備し（ステップＳ２０７）、ステップＳ２０６に進む。
【０１６１】
復帰時の状態が、割り込みからの復帰である場合、割り込みの種類がストレージからのＩ／Ｏ完了割り込みのときは（ステップＳ２０８）、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込みが揃うまで待ち合わせ（ステップＳ２０９）、読み込み要求であった場合は、Ｉ／Ｏバッファ保存部２１３に保存されている読み込みデータを準備し（ステップＳ２１０）、同期情報に含まれるベクタ情報を参照し、ステップＳ２１０で準備した読み込みデータを含め、割り込みハンドラ呼び出しを準備し（ステップＳ２１１）、ステップＳ２０６に進む。なお、ステップＳ２１０において、ストレージ書き込み要求に対するＩ／Ｏ完了割り込みの場合でも、Ｉ／Ｏバッファ保存部２１３に保存している書き込みデータを準備しても今後の動作には影響を与えないため、処理記述の簡便化のために書き込み要求に対するＩ／Ｏ完了割り込みの場合でも、ステップＳ２１０の処理を行ってもかまわない。割り込みの種類がストレージからのＩ／Ｏ完了割り込みでなかったときは（ステップＳ２０８）、待ち合わせは行わず、同期情報に含まれるベクタ情報を参照し、割り込みハンドラ呼び出しを準備し（ステップＳ２１１）、ステップＳ２０６に進む。
【０１６２】
次に、ステップＳ２０６で、中断状態比較部２０７は、同期情報バッファの先頭の中断状態を取り出して検査する（ステップＳ２０６，Ｓ２１２）。
【０１６３】
中断情報が割り込みである場合、ブレークポイント設定部２１０は、メイン側の割り込み発生位置で停止するようにブレークポイントを設定し（ステップＳ２１３）、カウントを開始して、クローン側仮想計算機２５０に制御を移す（ステップＳ２１４）。中断情報がハイパーバイザ呼び出しや例外である場合は、ブレークポイントは設定せずに、クローン側仮想計算機２５０に制御を移す（ステップＳ２１４）。
【０１６４】
ここで、一旦、クローン側仮想計算機２５０内の処理に移る（ステップＳ２１５）。そして、クローン側仮想計算機２５０の処理が中断されると、クローン側ハイパーバイザ２００に処理が戻る。
【０１６５】
クローン側ハイパーバイザ２００に処理が戻ると、カウンタを停止し（ステップＳ２１６）、中断状態比較部２０７にて、クローン側仮想計算機２５０の中断状態と、同期情報バッファの先頭の中断状態情報とを比較する（ステップＳ２１７，Ｓ２１８）。ここで、クローン側仮想計算機２５０に対するストレージＩ／Ｏ完了割り込み（ステップＳ２１９）と、クローン側仮想計算機２５０に関与しない割り込みや例外（ステップＳ２２１）が発生した場合も、その中断は所望の停止位置ではないといえる。
【０１６６】
比較の結果、所望の停止位置でない場合、カウンタを再開して（ステップＳ２２３）、クローン側仮想計算機２５０内の処理に戻る（ステップＳ２１５）。ここで、クローン側仮想計算機２５０に対するストレージＩ／Ｏ完了割り込み（ステップＳ２１９）だった場合は、割り込み情報を同期バッファに送る（ステップＳ２２０）。直近の待ち合わせ対象のＩ／Ｏ完了割り込みだったときは、ステップＳ２０９での待ち合わせを解除し、直近の待ち合わせ対象のＩ／Ｏ完了割り込みでなかったときは、Ｉ／Ｏバッファ保存部２１３に割り込み情報を保存し、割り込みを保留する。また、クローン側仮想計算機２５０に関与しない割り込みや例外（ステップＳ２２１）だった場合は、その割り込みや例外に応じたハイパーバイザサービス処理を行い（ステップＳ２２２）、クローン側仮想計算機２５０のカウンタを再開して（ステップＳ２２３）、クローン側仮想計算機２５０内の処理に戻る（ステップＳ２１５）。
【０１６７】
比較の結果、所望の停止位置である場合、クローン側ハイパーバイザ２００内部の処理に移る（ステップＳ２２６）。クローン側ハイパーバイザ２００内部の処理は、ハイパーバイザサービス実行部２０８が行う。ここで、中断状態がハイパーバイザ呼び出しで、かつ、ストレージＩ／Ｏ要求であった場合は（ステップＳ２２４）、Ｉ／Ｏ対象データをＩ／Ｏバッファ保存部２１３に複写し、Ｉ／Ｏ要求を発行する（ステップＳ２２５）。
【０１６８】
さて、ステップＳ２２６の次に、ハイパーバイザサービス実行部２０８は、制御を移す仮想計算機を決定する（ステップＳ２２７）。
【０１６９】
起動する仮想計算機が、クローン側仮想計算機２５０ではなく、他の仮想計算機であった場合（ステップＳ２２８）、一旦その仮想計算機内の処理を行い（２９）、やがてその仮想計算機内の処理が中断され、ステップＳ２２６のクローン側ハイパーバイザ２００内の処理に戻る。以降は、ステップＳ２２７からの繰り返しである。ここで、仮想計算機の中断要因が、クローン側仮想計算機２５０に対するストレージＩ／Ｏ完了割り込みだった場合は（ステップＳ２３０）、ステップＳ２２０と同様に、割り込み情報を同期バッファに送る（ステップＳ２３１）。直近の待ち合わせ対象のＩ／Ｏ完了割り込みだったときは、ステップＳ２０９での待ち合わせを解除し、直近の待ち合わせ対象のＩ／Ｏ完了割り込みでなかったときは、Ｉ／Ｏバッファ保存部２１３に割り込み情報を保存し、割り込みを保留する。そして、ステップＳ２２６のクローン側ハイパーバイザ２００内の処理に戻る。以降は、ステップＳ２２７からの繰り返しである。
【０１７０】
起動する仮想計算機が、クローン側仮想計算機２５０である場合（ステップＳ２２８）、ステップＳ２０３に戻り、これまでの処理を繰り返す。
【０１７１】
以下では、ストレージへの書き込みの処理とストレージからの読み込みの処理について、処理の流れに沿って説明する。
【０１７２】
最初に、ストレージへの書き込みＩ／Ｏ要求発行の処理について説明する。
【０１７３】
図９，１０に、ストレージへの書き込みＩ／Ｏ要求発行の処理の概要を示す。
【０１７４】
図９は、書き込み要求発行の場合を例示している。なお、図９において、メイン側ハイパーバイザ１００からクローン側ハイパーバイザ２００へ書き込みデータを送っても良いし、その代わりにデータのハッシュ値等を送っても良いし、それらを送らなくても良い。また、クローン側仮想ストレージ２４０へ書き込むデータとしては、クローン側仮想計算機２５０からのデータと、メイン側ハイパーバイザ１００からからのデータとのいずれも用いても良い（ただし、メイン側からクローン側へデータを送らない場合には、クローン側仮想計算機２５０からのデータを用いることになる）。
【０１７５】
図１０は、応答値入力の場合を例示している。なお、図１０において、クローン側仮想計算機２５０へのハイパーバイザ呼び出しの応答値入力には、クローン側ハイパーバイザ２００が得た応答値と、メイン側ハイパーバイザ１００からの応答値とのいずれを用いても良い。
【０１７６】
さて、まず、メイン側仮想計算機１５０から書き込み要求のハイパーバイザ呼び出しが行われる。メイン側ハイパーバイザ１００は、メイン側仮想ストレージ１４０に対して書き込みＩ／Ｏ要求を発行するとともに、同期情報として、書き込み要求情報をクローン側ハイパーバイザ２００に送信する。クローン側ハイパーバイザ２００は、クローン側仮想計算機２５０の処理が、書き込み要求ハイパーバイザ呼び出しで中断したことを確認し、クローン側仮想計算機２５０が発行した書き込み要求情報を基に、クローン側仮想ストレージ２４０に対して書き込みＩ／Ｏ要求を発行する。また、クローン側ハイパーバイザ２００は、メイン側ハイパーバイザ１００からハイパーバイザ呼び出しに対する応答値入力の同期情報を受け取り、クローン側仮想計算機２５０に、クローン側仮想ストレージ２４０に対して発行した書き込みＩ／Ｏ要求の応答値を入力する。
【０１７７】
ここで、クローン側仮想計算機２５０が発行した書き込み要求情報を基に、クローン側仮想ストレージ２４０に対して書き込みＩ／Ｏ要求を発行するため、メイン側ハイパーバイザ１００から送られてくる同期情報に書き込みデータ自体を含めなくてもよい。
【０１７８】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであれば、メイン側仮想計算機１５０からの書き込み要求ハイパーバイザ呼び出しの情報と、クローン側仮想計算機２５０からの書き込み要求ハイパーバイザ呼び出しの情報とは、同じになるはずである。したがって、クローン側ハイパーバイザ２００が発行する書き込みＩ／Ｏ要求の内容（書き込みデータ）は、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるものを使ってもよい。
【０１７９】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる書き込みデータの内容と、クローン側仮想計算機２５０から発行された書き込みＩ／Ｏ要求の情報に含まれる書き込みデータの内容とを、ハッシュ値等を計算することで照合してもよい。書き込みデータを照合する場合、書き込みデータ自体を同期情報に含めず、ハッシュ値等の計算をメイン側ハイパーバイザ１００で行い、ハッシュ値等のみを同期情報に含めてもよい。
【０１８０】
また、メイン側仮想計算機１５０の実行状態の遷移及びストレージの状態と、クローン側仮想計算機２５０の実行状態の遷移及びストレージの状態とが同じであれば、ハイパーバイザ呼び出しに対する応答値は、同じになるはずである。したがって、図８ＡのステップＳ２０５における、クローン側仮想計算機２５０に対するストレージＩ／Ｏ要求のハイパーバイザ呼び出しに対する応答には、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれる応答値を入力してもよい。
【０１８１】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるハイパーバイザ呼び出しに対する応答の情報と、クローン側仮想ストレージ２４０に書き込みＩ／Ｏを発行した際の応答の情報とを照合してもよい。
【０１８２】
次いで、ストレージからの書き込みＩ／Ｏ完了割り込みの処理について説明する。
【０１８３】
図１１に、ストレージからの書き込みＩ／Ｏ完了割り込みの処理の概要を示す。なお、図１１において、クローン側仮想計算機２５０への割り込みハンドラ呼び出しでは、クローン側ハイパーバイザ２００が得た割り込み情報と、メイン側ハイパーバイザ１００からの割り込み情報とのいずれを用いても良い。
【０１８４】
さて、メイン側仮想ストレージ１４０とクローン側仮想ストレージ２４０との双方に書き込みＩ／Ｏ要求を発行するため、メイン側仮想ストレージ１４０とクローン側仮想ストレージ２４０との双方からＩ／Ｏ完了割り込みが発生する。メイン側仮想計算機１５０への割り込みハンドラ呼び出しのタイミングで、クローン側仮想計算機２５０への割り込みハンドラを呼ぶためには、メイン側ハイパーバイザ１００から送られてくる同期情報（割り込み情報）と、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込み情報とが揃うまで待ち合わせをし、（同期情報に含まれる）メイン側仮想計算機１５０に起こった割り込みのタイミングで、クローン側仮想計算機２５０に対して割り込み情報を入力する必要がある。
【０１８５】
ここで、メイン側仮想計算機１５０の実行状態の遷移及びストレージの状態と、クローン側仮想計算機２５０の実行状態の遷移及びストレージの状態とが同じであれば、Ｉ／Ｏ完了割り込みの情報は、同じになるはずである。したがって、クローン側仮想計算機２５０に入力する割り込みハンドラ呼び出しに関する情報は、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるものを使ってもよい。
【０１８６】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる割り込み情報とクローン側仮想ストレージ２４０からの割り込み情報とを照合してもよい。
【０１８７】
次いで、ストレージからの読み込みＩ／Ｏ要求発行の処理について説明する。
【０１８８】
図１２，１３に、ストレージからの読み込みＩ／Ｏ要求発行の処理の概要を示す。
【０１８９】
図１２は、読み込み要求発行の場合を例示している。なお、図１２においては、クローン側仮想ストレージ２４０に対して、Ｉ／Ｏ要求を発行しても良いし、発行しなくても良い。
【０１９０】
図１３は、応答値入力の場合を例示している。なお、図１３においては、クローン側仮想計算機２５０へのハイパーバイザ呼び出しの応答値入力には、クローン側ハイパーバイザ２００が得た応答値と、メイン側ハイパーバイザ１００からの応答値とのいずれを用いても良い（ただし、図１２でＩ／Ｏ要求を発行しない場合には、メイン側ハイパーバイザ１００からの応答値を用いることになる）。
【０１９１】
さて、まず、メイン側仮想計算機１５０から読み込み要求のハイパーバイザ呼び出しが行われる。メイン側ハイパーバイザ１００はストレージに対して読み込みＩ／Ｏ要求を発行するとともに、同期情報として、読み込み要求情報をクローン側ハイパーバイザ２００に送信する。クローン側ハイパーバイザ２００は、クローン側仮想計算機２５０の処理が読み込み要求ハイパーバイザ呼び出しで中断したことを確認し、クローン側仮想計算機２５０が発行した読み込み要求情報を基に、クローン側仮想ストレージ２４０に対して読み込みＩ／Ｏ要求を発行する。また、クローン側ハイパーバイザ２００は、メイン側ハイパーバイザ１００からハイパーバイザ呼び出しに対する応答値入力の同期情報を受け取り、クローン側仮想計算機２５０に、クローン側仮想ストレージ２４０に対して発行した読み込みＩ／Ｏ要求の応答値を入力する。
【０１９２】
ここで、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる読み込み要求情報と、クローン側仮想計算機２５０から発行された読み込み要求の情報とを照合してもよい。
【０１９３】
また、読み込み要求は、クローン側仮想ストレージ２４０に対して発行しなくても、ストレージの内容に影響を与えない。したがって、クローン側仮想ストレージ２４０に対して読み込み要求を発行せず、図８ＡのステップＳ２０９とステップＳ２１０において、クローン側仮想計算機２５０に入力する割り込みハンドラ呼び出しに必要な情報は、同期情報に含まれる情報のものを使用してもよい。
【０１９４】
また、メイン側仮想計算機１５０の実行状態の遷移及びストレージの状態と、クローン側仮想計算機２５０の実行状態の遷移及びストレージの状態とが同じであれば、ハイパーバイザ呼び出しに対する応答値は、同じになるはずである。したがって、図８ＡのステップＳ２０５における、クローン側仮想計算機２５０に対するストレージＩ／Ｏ要求のハイパーバイザ呼び出しに対する応答には、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれる応答値を入力してもよい。
【０１９５】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるハイパーバイザ呼び出しに対する応答の情報と、クローン側仮想ストレージ２４０に読み込みＩ／Ｏを発行した際の応答の情報とを照合してもよい。
【０１９６】
次いで、ストレージからの読み込みＩ／Ｏ完了割り込みの処理について説明する。
【０１９７】
図１４，１５に、ストレージからの読み込みＩ／Ｏ完了割り込みの処理の概要を示す。
【０１９８】
図１４は、図１２においてクローン側仮想ストレージ２４０に読み込みＩ／Ｏ要求を発行する場合を例示している。なお、図１４において、メイン側ハイパーバイザ１００からクローン側ハイパーバイザ２００へ読み込みデータを送っても良いし、その代わりにデータのハッシュ値等を送っても良いし、それらを送らなくても良い。また、クローン側仮想計算機２５０への割り込みハンドラ呼び出しでは、クローン側ハイパーバイザ２００が得た割り込み情報と、メイン側ハイパーバイザ１００からの割り込み情報とのいずれを用いても良く、また、クローン側ハイパーバイザ２００が得た読み込みデータと、メイン側ハイパーバイザ１００からの読み込みデータとのいずれを用いても良い（ただし、メイン側からクローン側へデータを送らない場合には、クローン側ハイパーバイザ２００が得た割り込み情報を用いることになる）。
【０１９９】
図１５は、図１２においてクローン側仮想ストレージ２４０に読み込みＩ／Ｏ要求を発行しない場合を例示している。なお、図１５では、メイン側ハイパーバイザ１００からクローン側ハイパーバイザ２００へ読み込みデータを送る必要がある。また、クローン側仮想計算機２５０への割り込みハンドラ呼び出しでは、メイン側ハイパーバイザ１００からの割り込み情報・読み込みデータを用いる。なお、Ｉ／Ｏ完了割り込みは起こらないので、Ｉ／Ｏ完了割り込み発生の待ち合わせは不要である。
【０２００】
さて、メイン側仮想ストレージ１４０とクローン側仮想ストレージ２４０との双方に読み込みＩ／Ｏ要求を発行するため、メイン側仮想ストレージ１４０とクローン側仮想ストレージ２４０との双方からＩ／Ｏ完了割り込みが発生する。メイン側仮想計算機１５０への割り込みハンドラ呼び出しのタイミングで、クローン側仮想計算機２５０への割り込みハンドラを呼ぶためには、メイン側ハイパーバイザ１００から送られてくる同期情報（割り込み情報）と、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込み情報とが揃うまで待ち合わせをし、（同期情報に含まれる）メイン側仮想計算機１５０に起こった割り込みのタイミングでクローン側仮想計算機２５０に対して割り込み情報を入力する必要がある。
【０２０１】
ここで、メイン側仮想計算機１５０の実行状態の遷移及びストレージの状態と、クローン側仮想計算機２５０の実行状態の遷移及びストレージの状態とが同じであれば、ストレージからの読み込みデータは、同じになるはずである。したがって、クローン側仮想計算機２５０に入力する読み込みデータは、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるものを使ってもよい。
【０２０２】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる読み込みデータの内容と、クローン側仮想ストレージ２４０から発生した読み込みＩ／Ｏ完了割り込み情報に含まれる読み込みデータの内容とを、ハッシュ値等を計算することで照合してもよい。照合する場合、読み込みデータ自体を同期情報に含めず、ハッシュ値等の計算をメイン側ハイパーバイザ１００で行い、ハッシュ値等のみを同期情報に含めてもよい。
【０２０３】
また、読み込み要求は、クローン側仮想ストレージ２４０に対して発行しなくても、ストレージの内容に影響を与えない。したがって、クローン側仮想計算機２５０に入力する割り込みハンドラ呼び出しに必要な情報は同期情報に含まれる情報のものを使用し、図８ＢのステップＳ２２５において、クローン側仮想ストレージ２４０に対して読み込み要求を発行しなくてもよい。この場合、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込みは発生しないので、クローン側仮想ストレージ２４０からのＩ／Ｏ完了割り込みの待ち合わせ処理は行う必要はない。
【０２０４】
また、メイン側仮想計算機１５０の実行状態の遷移及びストレージの状態と、クローン側仮想計算機２５０の実行状態の遷移及びストレージの状態とが同じであれば、Ｉ／Ｏ完了割り込みの情報は、同じになるはずである。したがって、クローン側仮想計算機２５０に入力する割り込みハンドラ呼び出しに関する情報は、メイン側ハイパーバイザ１００から送られてくる同期情報に含まれるものを使ってもよい。
【０２０５】
また、メイン側仮想計算機１５０の実行状態の遷移と、クローン側仮想計算機２５０の実行状態の遷移とが同じであることを検証するために、同期情報に含まれる割り込み情報とクローン側仮想ストレージ２４０からの割り込み情報とを照合してもよい。
【０２０６】
以上のように本実施形態によれば、独立した２台の計算機上で稼動する仮想計算機の実行状態が同一になるとともに、ストレージの内容が同一になり、二重化が達成される。このため、メイン側仮想計算機の稼動する計算機またはストレージが、故障等により停止した場合でも、クローン側仮想計算機が同じ処理を継続でき、これによって、故障を隠蔽することができる。このように、本実施形態により、仮想計算機とストレージの可用性を向上させることができる。
【０２０７】
なお、以上の各機能は、ソフトウェアとして記述し適当な機構をもったコンピュータに処理させても実現可能である。  
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
【０２０８】
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【０２０９】
【図１】本発明の一実施形態に係る高可用システムの概略構成例を示す図
【図２】メイン側となるサーバ計算機におけるハイパーバイザの機能ブロックの構成例を示す図
【図３】クローン側となるサーバ計算機におけるハイパーバイザの機能ブロックの構成例を示す図
【図４】仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図
【図５】仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図
【図６】仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図
【図７】メイン側となるサーバ計算機におけるハイパーバイザの動作手順の一例を示すフローチャート
【図８Ａ】クローン側となるサーバ計算機におけるハイパーバイザの動作手順の一例を示すフローチャート
【図８Ｂ】クローン側となるサーバ計算機におけるハイパーバイザの動作手順の一例を示すフローチャート
【図９】ストレージへの書き込みＩ／Ｏ要求発行の処理について説明するための図
【図１０】ストレージへの書き込みＩ／Ｏ要求発行の処理について説明するための図
【図１１】ストレージからの書き込みＩ／Ｏ完了割り込みの処理について説明するための図
【図１２】ストレージからの読み込みＩ／Ｏ要求発行の処理について説明するための図
【図１３】ストレージからの読み込みＩ／Ｏ要求発行の処理について説明するための図
【図１４】ストレージからの読み込みＩ／Ｏ完了割り込みの処理について説明するための図
【図１５】ストレージからの読み込みＩ／Ｏ完了割り込みの処理について説明するための図
【符号の説明】
【０２１０】
１，２…サーバ計算機、１１，２１…プロセッサ、１２，２２…メモリ、１３，２３…通信装置、１４，２４…ストレージ、１５，１６，２５，２６…デバイス、１００…メイン側ハイパーバイザ、１０１，２０１…物理デバイス管理部、１０２，２０２…配送先決定部、１０３，２０３…仮想デバイス管理部、１０４…同期情報送信部、１０５，２０５…カウンタ制御部、１０６，２０６…仮想計算機実行状態保存部、１０７…中断情報収集部、１０８，２０８…ハイパーバイザサービス実行部、１０９…復帰情報収集部、１１１，２１１…カウンタ、１３３，２３３…仮想デバイス（ＮＩＣ）、１３７，２３７…仮想デバイス（タイマー）、１４０，２４０…仮想デバイス（ストレージ）、１５０…メイン側仮想計算機、１５２，２５２…他の仮想計算機、２００…クローン側ハイパーバイザ、２０４…同期情報受信部、２０７…中断状態比較部、２０９…復帰状態設定部、２１０…ブレークポイント設定部、２１２…割り込み情報判定部、２１３…Ｉ／Ｏバッファ保存部、２５０…クローン側仮想計算機
【図１】
2010026932.tif 000003
【図２】
2010026932.tif 000004
【図３】
2010026932.tif 000005
【図４】
2010026932.tif 000006
【図５】
2010026932.tif 000007
【図６】
2010026932.tif 000008
【図７】
2010026932.tif 000009
【図８Ａ】
2010026932.tif 000010
【図８Ｂ】
2010026932.tif 000011
【図９】
2010026932.tif 000012
【図１０】
2010026932.tif 000013
【図１１】
2010026932.tif 000014
【図１２】
2010026932.tif 000015
【図１３】
2010026932.tif 000016
【図１４】
2010026932.tif 000017
【図１５】
2010026932.tif 000018