(57)【特許請求の範囲】
【請求項１】
仮想化機能と仮想記憶機能とを有し、仮想環境上で動作するオペレーティングシステムの仮想記憶をページ単位で処理する情報処理装置において、
前記仮想環境を制御する仮想マシンモニタによって、前記オペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定する手段と、
前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を、前記仮想マシンモニタによって実行する更新前データ保存手段と、
前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を、前記仮想マシンモニタによって実行する手段と、
定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記オペレーティングシステムの所定の仮想ページアドレスに対応したメモリ領域に保存するチェックポイント取得手段と、
前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する処理とを、前記仮想マシンモニタによって実行する手段とを具備することを特徴とする情報処理装置。
【請求項２】
前記オペレーティングシステムから発行されるＩ／Ｏ要求の実行を次のチェックポイント取得処理が実行されるまで遅延させるために、前記オペレーティングシステムから発行されるＩ／Ｏ要求を蓄積する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された時に前記蓄積されているＩ／Ｏ要求を実行する処理とを、前記仮想マシンモニタによって実行する手段とをさらに具備することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記オペレーティングシステムによるメモリアクセスによってＥＣＣエラーが発生した際に、前記ＥＣＣエラーが誤り訂正可能なエラーであるか否かを判別する処理を、前記仮想マシンモニタによって実行する手段と、
前記ＥＣＣエラーが誤り訂正可能なエラーでない場合、前記保存されているコンテキストを用いてプロセッサの状態を直前のチェックポイントに対応する状態に復元すると共に、前記保存されている更新前データを用いて前記オペレーティングシステムのメモリの状態を直前のチェックポイントに対応する時点に復元する処理と、前記誤り訂正可能ではないエラーが発生した仮想ページアドレス用に所定の物理ページを割り当て、前記誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応する前記ページテーブルのエントリに前記所定の物理ページの物理ページアドレスを設定する処理とを、前記仮想マシンモニタによって実行する手段とをさらに具備することを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記ページテーブルを、前記オペレーティングシステムのパニック関数を呼び出す仮想ページアドレスに対応したページが存在しない状態に設定する処理を前記仮想マシンモニタによって実行する手段と、
ページフォルトによる例外が発生した場合、前記ページフォルトによる例外が発生したページが前記パニック関数のコードを呼び出す仮想ページアドレスに対応するページであるか否かを判別する処理と、前記パニック関数のコードを呼び出す仮想ページアドレスに対応するページである場合、前記保存されているコンテキストを用いてプロセッサの状態を直前のチェックポイントに対応する状態に復元すると共に、前記保存されている更新前データを用いて前記オペレーティングシステムのメモリの状態を直前のチェックポイントに対応する時点に復元する処理とを、前記仮想マシンモニタによって実行する手段とをさらに具備することを特徴とする請求項２記載の情報処理装置。
【請求項５】
仮想化機能と仮想記憶機能とを有する情報処理装置を障害から回復するための障害回復処理方法であって、
仮想マシンモニタによって制御される仮想環境上で動作するオペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定処理を、前記仮想環境を制御する仮想マシンモニタによって実行するステップと、
前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を、前記仮想マシンモニタによって実行するステップと、
前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を、前記仮想マシンモニタによって実行するステップと、
定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記オペレーティングシステムの所定の仮想ページアドレスに対応したメモリ領域に保存するチェックポイント取得ステップと、
前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する処理とを、前記仮想マシンモニタによって実行するステップとを具備することを特徴とする障害回復処理方法。
【請求項６】
前記オペレーティングシステムから発行されるＩ／Ｏ要求の実行を次のチェックポイント取得処理が実行されるまで遅延させるために、前記オペレーティングシステムから発行されるＩ／Ｏ要求を蓄積する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された時に前記蓄積されているＩ／Ｏ要求を実行する処理とを、前記仮想マシンモニタによって実行するステップをさらに具備することを特徴とする請求項５記載の障害回復処理方法。
【請求項７】
仮想記憶機能を有するコンピュータのハードウェア資源を仮想化する仮想マシンモニタとして機能するプログラムであって、
前記仮想マシンモニタによって制御される仮想環境上で動作するオペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定する手順と、
前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を実行する更新前データ保存手順と、
前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を実行する手順と、
前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記オペレーティングシステムの所定の仮想ページアドレスに対応するページであるか否かを判別する判別手順であって、前記オペレーティングシステムは、定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記所定の仮想ページアドレスに対応したメモリ領域に保存するタスクを含んでいる、判別手順と、
前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する手順と、
前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する手順とを、前記コンピュータに実行させることを特徴とするプログラム。
【請求項８】
前記オペレーティングシステムから発行されるＩ／Ｏ要求の実行を次のチェックポイント取得処理が実行されるまで遅延させるために、前記オペレーティングシステムから発行されるＩ／Ｏ要求を蓄積する手順と、
前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された時に前記蓄積されているＩ／Ｏ要求を実行する手順とを、前記コンピュータにさらに実行させることを特徴とする請求項７記載のプログラム。
【請求項９】
前記オペレーティングシステムによるメモリアクセスによってＥＣＣエラーが発生した際に、前記ＥＣＣエラーが誤り訂正可能なエラーであるか否かを判別する手順と、
前記ＥＣＣエラーが誤り訂正可能なエラーでない場合、前記保存されているコンテキストを用いてプロセッサの状態を直前のチェックポイントに対応する状態に復元すると共に、前記保存されている更新前データを用いて前記オペレーティングシステムのメモリの状態を直前のチェックポイントに対応する時点に復元する手順と、
前記誤り訂正可能ではないエラーが発生した仮想ページアドレス用に所定の物理ページを割り当て、前記誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応する前記ページテーブルのエントリに前記所定の物理ページの物理ページアドレスを設定する手順とを、前記コンピュータにさらに実行させることを特徴とする請求項７記載のプログラム。
【請求項１０】
前記ページテーブルを、前記オペレーティングシステムのパニック関数を呼び出す仮想ページアドレスに対応したページが存在しない状態に設定する処理を前記仮想マシンモニタによって実行する手順と、
ページフォルトによる例外が発生した場合、前記ページフォルトによる例外が発生したページが前記パニック関数のコードを呼び出す仮想ページアドレスに対応するページであるか否かを判別する手順と、
前記パニック関数のコードを呼び出す仮想ページアドレスに対応するページである場合、前記保存されているコンテキストを用いてプロセッサの状態を直前のチェックポイントに対応する状態に復元すると共に、前記保存されている更新前データを用いて前記オペレーティングシステムのメモリの状態を直前のチェックポイントに対応する時点に復元する手順とを、前記コンピュータにさらに実行させることを特徴とする請求項７記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想記憶機能を有する情報処理装置および同装置に適用される障害回復方法に関する。
【背景技術】
【０００２】
近年の半導体技術の向上により、ＣＰＵ、Ｉ／Ｏ装置といったハードウェア資源の仮想化に対応したシステムが開発されている。このシステムは、仮想マシンモニタ（ハイパーバイザ）と呼ばれる仮想化ソフトウェアで制御されている。
【０００３】
仮想化ソフトウェアとしては、商用ソフトウェアのVMware（登録商標）や、オープンソースソフトウェアのXenがよく知られている。
【０００４】
これらの仮想化ソフトウェアを利用することで、パーソナルコンピュータのようなコンピュータ上で簡単に仮想化環境を構築できる。
【０００５】
この仮想化環境を利用することにより、ＣＰＵ、メモリ、Ｉ／Ｏ装置といったハードウェア資源を複数のオペレーティングシステムが同時に利用する事が可能になり、ハードウェア資源の有効利用が可能になる。
【０００６】
しかし、仮想化技術の分野においては、システムの可用性を高めるためのフォールトトレラント機能の実現方法についてはほとんど報告されていないのが現状である。
【０００７】
従来、高信頼性が要求されるサーバ等の計算機システムでは、メモリやＣＰＵ等のハードウェア故障や、ソフトウェアの不具合によるシステム停止を回避する方法として、ハードウェア装置を多重化したサーバ上でＯＳを稼動する方法や、クラスタリングソフトウェアを使用して、複数台のコンポピュータをクラスタリングしたシステムで運用する方法、等が用いられている。
【０００８】
しかし、ハードウェア装置を多重化する方法では、ハードウェアコストが増大し、またソフトウェアの不具合によるシステム停止には対応することが困難であった。また、ハードウェア装置を制御するためのデバイスドライバ等の特別なソフトウェアが必要とされる。
【０００９】
一方、クラスタリングソフトウェアを使用して、複数台のコンピュータをクラスタリングしたシステムで運用する方法の場合には、複数台のコンピュータとクラスタリングソフトウェアとを用意する必要があり、システム構築に関する時間とコストが増大するという問題がある。
【００１０】
ところで、特許文献１には、仮想記憶管理方式の計算機におけるデータ復旧方法が開示されている。この方法は、ページテーブルの書き込み可能ビットをオフしておき、プロセッサがページのデータを更新しようとした時にメモリ保護割り込みを発生させ、その割り込み処理ルーチンの中で、ページの内容をディスクに保存するというものである。
【特許文献１】特開平１０−７８８８４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、特許文献１の方法では、仮想化機能を有する計算機システムの高信頼化については考慮されていない。また、特許文献１の方法では、あるプログラムのデータの復旧しか考慮していないため、実際にハードウェア障害やソフトウェアの不具合が発生した場合には、システム停止を回避できない危険がある。
【００１２】
仮想化機能を有する計算機システムにおいては、ハードウェア資源は仮想化ソフトウェアによって管理されるため、高信頼化を図るためには、仮想環境上で動作するオペレーティングシステムと仮想化ソフトウェアとの間の新たなインタフェースを実現することが必要となる。
【００１３】
本発明は上述の事情を考慮してなされたものであり、ハードウェアの多重化やクラスタリングといった複雑な構成を用いることなく、ハードウェア故障やソフトウェアの不具合によるシステム停止を回避することが情報処理装置および障害回復方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述の課題を解決するため、本発明は、仮想化機能と仮想記憶機能とを有し、仮想環境上で動作するオペレーティングシステムの仮想記憶をページ単位で処理する情報処理装置において、前記仮想環境を制御する仮想マシンモニタによって、前記オペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定する手段と、前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を、前記仮想マシンモニタによって実行する更新前データ保存手段と、前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を、前記仮想マシンモニタによって実行する手段と、
定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記オペレーティングシステムの所定の仮想ページアドレスに対応したメモリ領域に保存するチェックポイント取得手段と、前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する処理とを、前記仮想マシンモニタによって実行する手段とを具備することを特徴とする。
【００１５】
また、本発明は、仮想化機能と仮想記憶機能とを有する情報処理装置を障害から回復するための障害回復処理方法であって、仮想マシンモニタによって制御される仮想環境上で動作するオペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定処理を、前記仮想環境を制御する仮想マシンモニタによって実行するステップと、前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を、前記仮想マシンモニタによって実行するステップと、前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を、前記仮想マシンモニタによって実行するステップと、定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記オペレーティングシステムの所定の仮想ページアドレスに対応したメモリ領域に保存するチェックポイント取得ステップと、前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する処理と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する処理とを、前記仮想マシンモニタによって実行するステップとを具備することを特徴とする。
【００１６】
また、本発明は、仮想記憶機能を有するコンピュータのハードウェア資源を仮想化する仮想マシンモニタとして機能するプログラムであって、前記仮想マシンモニタによって制御される仮想環境上で動作するオペレーティングシステムに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定する手順と、前記オペレーティングシステムが書き込み禁止のページへアクセスするために前記ページテーブルを参照した際に発生するページ書き込み違反の例外に応答して、前記ページ書き込み違反が発生したページの更新前データを前記オペレーティングシステムのメモリ領域から取得して前記仮想マシンモニタが管理するメモリ領域に保存する処理を実行する更新前データ保存手順と、前記更新前データを保存した後に前記ページ書き込み違反が発生したページの書き込み禁止を解除することによって前記オペレーティングシステムによる前記ページ書き込み違反が発生したページへの書き込みを継続させる処理を実行する手順と、前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記オペレーティングシステムの所定の仮想ページアドレスに対応するページであるか否かを判別する判別手順であって、前記オペレーティングシステムは、定期的にチェックポイント取得処理を実行して、前記情報処理装置のプロセッサの状態を含むコンテキストを、前記所定の仮想ページアドレスに対応したメモリ領域に保存するタスクを含んでいる、判別手順と、前記ページ書き込み違反による例外が発生した場合、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであるか否かを判別する手順と、前記ページ書き込み違反が発生したページが前記所定の仮想ページアドレスに対応するページであることが判別された場合、前記書き込み禁止を解除したページを再度書き込み禁止状態に設定して前記オペレーティングシステムに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する手順とを、前記コンピュータに実行させることを特徴とする。
【発明の効果】
【００１７】
本発明によれば、ハードウェアの多重化やクラスタリングといった複雑な構成を用いることなく、ハードウェア故障やソフトウェアの不具合によるシステム停止を回避することが可能となる。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して本発明の実施形態を説明する。
【００１９】
まず、図１を参照して、本発明の一実施形態に係る情報処理装置の構成を説明する。この情報処理装置はＩＡアーキテクチャのような既存のＰＣアーキテクチャを用いたコンピュータであり、例えば各種業務処理を実行するためのサーバコンピュータとして実現されている。
【００２０】
図１には、このコンピュータの構成が模式的に示されている。このコンピュータは、図示のように、１以上のＣＰＵ（プロセッサ）１１１と、メモリ管理ユニット（ＭＭＵ）１１２と、１以上のメモリモジュールから構成されるメモリ１１３と、ハードディスクドライブ（ＨＤＤ）のようなディスクドライブ装置１１４と、グラフィクスコントローラ、ＬＡＮコントローラ等の他の各種Ｉ／Ｏデバイス１１５等を備えている。メモリ管理ユニット（ＭＭＵ）１１２は、システムバス１００を介して、メモリ１１３、ディスクドライブ装置１１４、およびＩ／Ｏデバイス１１５それぞれに接続されている。
【００２１】
メモリ管理ユニット（ＭＭＵ）１１２は仮想記憶機能をサポートするための機構であり、ページングによって、仮想環境（仮想マシン）上で動作するオペレーティングシステムの仮想記憶アドレスを物理アドレスに変換する。なお、このメモリ管理ユニット（ＭＭＵ）１１２はＣＰＵ１１１内に実装する形式であってもよい。また、マルチプロセッサ構成の構成例としては、複数のコアを含む１つのＣＰＵ１１１を用いる構成や、複数のＣＰＵ１１１を用いる構成等が利用し得る。
【００２２】
本コンピュータにおいては、ＣＰＵおよびＩ／Ｏデバイス等のハードウェア資源を仮想化し、その仮想環境上で既存のオペレーティングシステムを動作させる仮想化ソフトウェアである仮想マシンモニタが実行される。この仮想マシンモニタは、仮想環境上で動作するオペレーティングシステムの仮想記憶をページ単位で処理して、実ハードウェア資源を制御する。
【００２３】
図２には、本コンピュータのハードウェアとソフトウェアとの関係が示されている。
【００２４】
ＣＰＵ１１１、メモリ１１３、ディスクドライブ装置１１４、他のＩ／Ｏデバイス１１５といったハードウェア資源（実ハードウェア）の制御は全て仮想マシンモニタ（ハイパーバイザ）２００によって実行される。この仮想マシンモニタ２００は各オペレーティングシステム（ゲストＯＳ）に対して仮想環境（仮想マシン）を提供する。つまり、仮想マシンモニタ２００は、ハードウェア資源を仮想化し、論理的なハードウェア資源を各ゲストＯＳに割り当てる。これにより、仮想マシンモニタ２００上によってゲストＯＳ毎に提供される仮想環境上で複数のゲストＯＳがそれぞれ独立して動作することができる。
【００２５】
図３は、本コンピュータの有する仮想記憶機能の例を示している。仮想記憶機能は、ページングを用いて、仮想アドレス空間（仮想記憶空間）を所定サイズのページ単位で物理アドレス空間（物理メモリ空間）にアドレス変換する機能である。このアドレス変換には、ページテーブルが用いられる。ＭＭＵ１１２にはトランスレーション・ルックアサイド・バッファ（ＴＬＢ）が設けられており、ページテーブルの内容がキャッシュされている。
【００２６】
図３では、x86 CPUにおけるページ単位でのメモリ管理の例がされている（３２ビットアドレッシングの場合）。ＣＰＵ１１１が仮想アドレス空間上のあるデータをアクセスする場合、そのデータの仮想アドレス（３２ビット）は、例えば、ページディレクトリインデックス、ページテーブルインデックス、およびページオフセットから構成される。ＣＰＵのＣＲ３レジスタによって指定されるページディレクトリ（ＰＤ）内のページディレクトリエントリ（ＰＤＥ）が仮想アドレス内のページディレクトリインデックスによって指定される。そして、指定されたページディレクトリエントリ（ＰＤＥ）の値は、複数のページテーブル（ＰＴ）の中から、仮想アドレスに対応するページテーブルを指定する。仮想アドレス内のページテーブルインデックスは、指定されたページテーブル内のページテーブルエントリ（ＰＴＥ）を指定する。このページテーブルエントリ（ＰＴＥ）の値は仮想アドレスに対応する物理メモリ上の物理ページのアドレスを示す。この物理ページの中で、仮想アドレス内のページオフセットで指定されるアドレスが、仮想アドレスに対応する物理アドレスとなる。ページテーブル（ＰＴ）内の各ページテーブルエントリ（ＰＴＥ）の有効／無効により、ＣＰＵがアクセスする仮想空間アドレスに対応する物理ページが物理メモリ１１３上に存在するか否かが識別される。
【００２７】
このように、ページテーブル（ＰＴ）は、仮想ページアドレスを物理ページアドレスに変換するために用いられる。
【００２８】
図４には、本実施形態で用いられるメモリ割り当ての例が示されている。
【００２９】
本実施形態においては、物理メモリ１１３のメモリ空間上には、ゲストＯＳ１用のメモリ領域３０１、ゲストＯＳ２用のメモリ領域３０２、ゲストＯＳ３用のメモリ領域３０３、仮想マシンモニタ（ハイパーバイザ）用のメモリ領域３０４、ゲストＯＳ１の更新履歴用メモリ領域３０５、ゲストＯＳ２の更新履歴用メモリ領域３０６、ゲストＯＳ３の更新履歴用メモリ領域３０７、ゲストＯＳ１〜ＯＳ３に対する障害時代替用メモリ領域３０８とが割り当てられている。
【００３０】
例えば、ゲストＯＳ１は、仮想アドレス空間（０〜２ＧＢ）を用いてゲストＯＳ１用のメモリ領域３０１をアクセスすることができ、またゲストＯＳ２は、仮想アドレス空間（０〜１ＧＢ）を用いてゲストＯＳ２用のメモリ領域３０２をアクセスすることができる。
【００３１】
ゲストＯＳ１の更新履歴用メモリ領域３０５はゲストＯＳ１によって行われたメモリ更新履歴を格納するための領域であり、ここには、ゲストＯＳ１によって更新されるメモリ領域３０１上のデータの更新前データが仮想マシンモニタ２００によって蓄積される。
【００３２】
ゲストＯＳ２の更新履歴用メモリ領域３０６はゲストＯＳ２によって行われたメモリ更新履歴を格納するための領域であり、ここには、ゲストＯＳ２によって更新されるメモリ領域３０２上のデータの更新前データが仮想マシンモニタ２００によって蓄積される。
【００３３】
ゲストＯＳ３の更新履歴用メモリ領域３０７はゲストＯＳ３によって行われたメモリ更新履歴を格納するための領域であり、ここには、ゲストＯＳ３によって更新されるメモリ領域３０３上のデータの更新前データが仮想マシンモニタ２００によって蓄積される。
【００３４】
これら更新履歴用メモリ領域３０５〜３０７は仮想マシンモニタ２００が管理するメモリ領域である。
【００３５】
障害時代替用メモリ領域３０８は、ゲストＯＳに割り当てられた物理メモリ領域内のある記憶位置にハードウェア障害が発生した場合に、その記憶位置の代替用に用いられる記憶領域である。この障害時代替用メモリ領域３０８も仮想マシンモニタ２００が管理するメモリ領域である。
【００３６】
ここで、仮想マシンモニタ２００によって実行される更新前データ蓄積処理の概要について説明する。ここでは、説明を簡単にするために、ゲストＯＳが１つである場合を例示する。
【００３７】
仮想マシンモニタ２００は、ゲストＯＳに割り当てるメモリ領域に対応するページテーブルの全ページを書き込み禁止状態に設定する。例えば、各ページテーブルエントリの書き込み可能属性を示すビットをオフに設定すればよい。ゲストＯＳが書き込み禁止のページへアクセスするためにページテーブルを参照すると、ページ書き込み違反の例外（または割り込み）がＣＰＵ内で発生し、これによって仮想マシンモニタ２００に制御が渡される。仮想マシンモニタ２００は、ページ書き込み違反の例外の発生に応答して、ページ書き込み違反が発生したページの更新前データをゲストＯＳのメモリ領域から取得して、そのゲストＯＳ用の更新履歴用メモリ領域に保存する。
【００３８】
更新前データを保存した後に、仮想マシンモニタ２００は、ページ書き込み違反が発生したページの書き込み禁止を解除することによってゲストＯＳによるページ書き込み違反が発生したページへの書き込みを継続させる。これにより、ゲストＯＳは、当該ページへの書き込みを正常に実行することが出来るようになる。
【００３９】
このように更新履歴用メモリ領域に更新前データを蓄積することにより、更新履歴用メモリ領域を用いてゲストＯＳのメモリ領域の内容を復元することができる。
【００４０】
更新前データ蓄積処理は、チェックポイント取得処理のタイミングと同期するように制御される。ここで、チェックポイント取得処理は、プロセスの実行の途中の状態からの再実行に必要な情報を定期的に保存する処理である。この情報を保存する時点をチェックポイントと呼び、その情報を保存することをチェックポイントの取得と呼ぶ。チェックポイント取得処理では、ＣＰＵの状態（プログラムカウンタ、レジスタ値等）を含むコンテキストを再実行に必要な情報として保存する。このチェックポイント取得処理はゲストＯＳのカーネルによって実行することが出来る。この場合、ゲストＯＳは、取得したコンテキストを、そのゲストＯＳの所定の仮想ページアドレスに対応したメモリ領域に保存する。仮想マシンモニタ２００は、チェックポイント取得に使用する仮想ページアドレスに対するライトをトリガに、更新前データ蓄積処理を制御することができる。
【００４１】
すなわち、ページ書き込み違反による例外が発生した場合、仮想マシンモニタ２００は、まず、ページ書き込み違反が発生したページがチェックポイント取得用の仮想ページアドレスに対応するページであるか否かを判別する。このチェックポイント取得用の仮想ページアドレスで指定されるページは、ゲストＯＳと仮想マシンモニタ２００との間のインタフェース用のページとして用いられる。
【００４２】
ページ書き込み違反が発生したページがチェックポイント取得用の仮想ページアドレスに対応するページであるならば、仮想マシンモニタ２００は、書き込み禁止を解除したページを再度書き込み禁止状態に設定し、これによってゲストＯＳに割り当てるページテーブルの全ページを書き込み禁止状態に再設定する。
【００４３】
このようにして、チェックポイントの度にページテーブルの全ページが書き込み禁止状態に初期設定され、あるチェックポイントから次のチェックポイントまでの期間においては、各ページ毎に、そのページに対する最初の更新に対応する更新前データのみが蓄積される。
【００４４】
また、仮想マシンモニタ２００は、チェックポイント取得処理のタイミングと同期するように、Ｉ／Ｏ装置に対するアクセスを実行する。
【００４５】
すなわち、仮想マシンモニタ２００は、ゲストＯＳから発行されるＩ／Ｏ要求の実行タイミングを次のチェックポイント取得処理が実行されるまで遅延させるために、ゲストＯＳから発行されるＩ／Ｏ要求を蓄積する。そして、仮想マシンモニタ２００は、ページ書き込み違反が発生したページがチェックポイント取得用の仮想ページアドレスに対応するページであることが判別された時、つまりチェックポイント取得処理が実行された時に、蓄積されているＩ／Ｏ要求を実行する。
【００４６】
このようにＩ／Ｏ要求の実行を遅らせることにより、障害が発生した場合には、ＣＰＵおよびメモリの状態のみならず、Ｉ／Ｏ装置の状態も、直前のチェックポイント時点の状態に復元することが出来る。
【００４７】
仮想マシンモニタ２００は全てのハードウェア資源を直接的に制御しているので、ゲストＯＳによるＩ／Ｏ要求が実際に実行されるタイミングを容易に制御することができる。
【００４８】
また、仮想マシンモニタ２００は、ハードウェア故障時に以下の処理を実行する。ここでは、メモリ１１２のＥＣＣエラーを例示して説明する。
【００４９】
ＥＣＣエラー発生時には、ＮＭＩ（割り込み）が発生し、仮想マシンモニタ２００に制御が渡される。
【００５０】
仮想マシンモニタ２００は、発生したＥＣＣエラーが誤り訂正可能なエラー（１ビットエラー）であるか否かを判別する。発生したＥＣＣエラーが誤り訂正可能なエラーでない場合（２ビットエラー）、仮想マシンモニタ２００は、保存されているコンテキスト（チェックポイント情報）を用いてＣＰＵの状態を直前のチェックポイントに対応する状態に復元すると共に、更新履歴用メモリ領域に保存されている更新前データを用いてゲストＯＳのメモリ領域の状態を直前のチェックポイントに対応する時点に復元する。
【００５１】
さらに、仮想マシンモニタ２００は、誤り訂正可能ではないエラーが発生した仮想ページアドレス用に、障害時代替用メモリ領域３０８の空き物理ページを割り当て、誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応するページテーブルのエントリに、空き物理ページのページアドレスを設定する。
【００５２】
また、仮想マシンモニタ２００は、ソフトウェアの不具合によるシステム停止を回避するために、以下の機能も有している。
【００５３】
仮想マシンモニタ２００は、まず、ゲストＯＳがパニック関数を呼び出す仮想ページアドレスに対応したページが存在しない状態にページテーブルを初期設定する。ゲストＯＳがパニック関数を呼び出すためにページテーブルを参照すると、ページフォルトによる例外が発生し、これによって仮想マシンモニタ２００に制御が移る。仮想マシンモニタ２００は、ページフォルトによる例外の発生に応答して、ページフォルトが発生したページがパニック関数のコードを呼び出す仮想ページアドレスに対応するページであるか否かを判別する。
【００５４】
パニック関数のコードを呼び出す仮想ページアドレスに対応するページであるならば、仮想マシンモニタ２００は、保存されているコンテキスト（チェックポイント情報）を用いてＣＰＵの状態を直前のチェックポイントに対応する状態に復元すると共に、更新履歴用メモリ領域に保存されている更新前データを用いてゲストＯＳのメモリ領域の状態を直前のチェックポイントに対応する時点に復元する。
【００５５】
次に、仮想マシンモニタ２００によって実行される具体的な処理について説明する。
【００５６】
まず、仮想マシンモニタによるページフォルト処理を説明する。ここでは、本実施形態の構成例を理解し易くするために、まず、一般的な仮想マシンモニタとしてＸｅｎを例として説明する。
【００５７】
仮想マシンミニタＸｅｎでは、ゲストＯＳの仮想空間アドレスのページング機能を管理するデータ構造であるページテーブル（ゲストページテーブル）とは別に、ゲストＯＳの仮想空間アドレスと物理メモリを変換するための、シャドウページテーブルを使用したアドレス変換方式が一般的である。ゲストＯＳによって管理されるゲストページテーブルはアドレス変換に関しては仮想的なものであり、ゲストページテーブルの各エントリにはゲストＯＳが物理ページアドレスであると思っているアドレスが格納される。シャドウページテーブルはＭＭＵ１１２に実際に設定される実ページテーブルであり、仮想マシンミニタＸｅｎによって管理される。シャドウページテーブルの各エントリには実際の物理ページアドレスが格納される。
【００５８】
図５は、仮想マシンモニタＸｅｎのシャドウページテーブルの概念図である。
【００５９】
説明を簡単にするため、ここでは、シングルシャドウページテーブルで説明する。また、ゲストＯＳと仮想マシンモニタを区別するため、シャドウ側の用語にはＳ（shadow)をつけた。これは、説明のためであり、ＸｅｎではＰＴはページ仮想モニタのページテーブルであり、ここで説明しているＳＰＴにあたる。マルチプルシャドウページテーブルは、個々のゲストＯＳのページテーブル（ゲストページテーブル）毎にシャドウページテーブルを持つ方式で、ゲストＯＳのページテーブルが切り替わるたびに、対応するシャドウページテーブルを切り返える方式である。
【００６０】
ゲストＯＳが実行されると、ＣＰＵ（本物、仮想でない）は、ゲストＯＳのページテーブルでなく、仮想マシンモニタのシャドウページテーブル（ＳＰＴ）を参照し、アドレス変換を行う。ＩＡ32の場合には、ＴＬＢをフラッシュするために、必ずinvlpg命令を実行する必要があり、仮想化が実装されたＣＰＵでは、一般保護例外となり、例外を処理する仮想マシンモニタに制御が渡たる。
【００６１】
仮想マシンモニタXenでは、ゲストＯＳのＰＴＥの操作が発生したことを、ページフォルトで管理している。そのため、ゲストＯＳのＰＴのＰＴＥがマップされる物理メモリの
ＳＰＴのＳＰＴＥは無効にしている。ゲストＯＳのＰＴＥの操作のページフォルトの例外が発生すると、そのページをout of sync list と呼ばれるリストにキューイングし、ゲストＯＳのＰＴＥにマップされる仮想マシンモニタのＳＰＴＥを有効にし（例外を回復）、ゲストＯＳのＰＴＥへの書き込みを許可し、ＰＴＥへ書き込み、ＰＴＥ更新時のinvlpg命令を実行する。
【００６２】
invlpg命令（特権命令）を実行すると、一般保護例外が発生し、仮想マシンモニタへ制御が渡り、out of sync list の内容をＳＰＴに反映し、ゲストＯＳのＰＴＥにマップされる仮想マシンモニタXenのＳＰＴＥを再び無効にする。
【００６３】
ゲストＯＳがページをアクセスするためにＰＴにＰＴＥを追加しようとすると、ＣＰＵは、ＳＰＤ経由でアクセスするため、ＳＰＴ内には、ＳＰＴＥが存在しないためアドレス変換できないため、ページフォルトが発生する。ページフォルトを処理する仮想マシンモニタでは、フォルトを処理する仮想空間アドレスがゲストＯＳのＰＴをout of sync list へ保存し、ページフォルトを解決する。ページフォルトが解決され、ゲストＯＳのＰＴのＰＴＥを更新し、ＴＬＢをフラッシュするために、invlpg命令を実行すると、一般保護例外が発生し、仮想マシンモニタへ制御が渡り、out of sync list に保存してあるＰＴのＰＴＥ状態と現在のゲストＯＳのＰＴのＰＴＥ状態をチェックし、現在のゲストＯＳのＰＴのＰＴＥがない場合で、out of sync list に保存してあるＰＴのＰＴＥがある場合には、ゲストＯＳのＰＴＥが無効になったと判断し、仮想マシンモニタのＰＴのＰＴＥを無効にする。現在のゲストＯＳのＰＴのＰＴＥがある場合で、out of sync list に保存してあるＰＴのＰＴＥがない場合には、ゲストＯＳがＰＴＥを設定したと判断し、ゲストＯＳのＰＴＥをＳＰＴＥへコピーする（図５）。
【００６４】
ここまでが、仮想マシンモニタＸｅｎでのページフォルトの実現例である。
【００６５】
さて、本実施形態では、例えば、従来の仮想マシンモニタのシャドウページテーブルに加え、ゲストＯＳの全ＰＴがマップされる物理メモリのＳＰＴのＳＰＴＥを書き込み禁止にする。Ｘｅｎでは、ゲストＯＳのＰＴのＰＴＥ操作をエミュレートするために、シャドウページテーブルとout of sync list とゲストＯＳが実行したinvlpg命令の一般保護例外による書き戻しを利用していたが、本実施形態では、ゲストＯＳの更新前のページ状態を保存するために、仮想マシンモニタのメモリ管理構造に、before page image listを追加する。
【００６６】
本実施形態では、ゲストＯＳがページを更新する際には、ＳＰＴＥを参照する。ＳＰＴＥでは、全てのＰＴＥに対応するページそれぞれが書き込み禁止に設定されているため、ページフォルトの例外（書き込み違反による例外）が発生し、仮想マシンモニタ２００へ制御が渡る。仮想マシンモニタ２００では、ＳＰＴＥが書き込み禁止になっていれば、
（チェックポイント間でのはじめての書き込み）、ゲストＯＳの更新したいページの内容（更新前データ）を図２に示す当該ゲストＯＳに対応する更新履歴用メモリ領域に格納すると共に、ゲストＯＳの更新したいページの仮想空間アドレス(ゲストＯＳの仮想アドレス)と更新履歴用メモリ領域のアドレス（仮想マシンモニタの物理アドレス）とをshadow page table entry listへ設定し、そして、書き込み違反が発生したページに対応するＳＰＴＥの書き込み禁止を解除する（図６）。
【００６７】
図２の各ゲストＯＳの更新履歴メモリ領域への保存の仕方は、ページフォルトが発生したゲストＯＳの仮想空間アドレス（仮想ページアドレス）でbefore page image entryを検索し、もし、ページフォルトが発生したゲストＯＳの仮想空間アドレスのエントリが有効であれば、過去にビフォアイメージを採取した事があるので、ゲストＯＳの仮想空間アドレスのデータで更新履歴の対応するエントリを上書きする。エントリが無効であれば、過去にビフォアイメージを採取した事がないので、更新履歴の対応するエントリにゲストＯＳの仮想空間アドレスのデータを書き込み、before page image entryの無効といなっているエントリを取り出し、ゲストＯＳの仮想空間アドレスを設定し、エントリを有効にする（図８）。
【００６８】
また、本実施形態では、図６に示すように、ECC error page listも用いられる。このECC error page listは、ECC２ビットエラーが発生したページをリンクするために用いられる。また、本実施形態では、図７に示すように、ゲストＯＳからのＩ／Ｏ要求を蓄積及び管理するためのＩ／Ｏ要求管理構造として、I/O request listも追加されている。
【００６９】
次に、図９および図１０のフローチャートを参照して、仮想マシンモニタ２００によって実行されるページフォルト処理の流れを説明する。
【００７０】
まず、ゲストＯＳによるページ書き込みがゲストＯＳが管理している仮想アドレスの範囲内であるかどうかがＣＰＵのＭＭＵ等によって判別され（ステップＳ１１）、範囲内でないならば、ページフォルトが発生し、通常の書き込み違反例外処理が仮想マシンモニタ２００によって実行される（ステップＳ１２）。
【００７１】
ページ書き込みがゲストＯＳが管理している仮想アドレスの範囲内であり、且つその書き込みページが書き込み禁止されているならば（ステップＳ１３のＹＥＳ）、ページ書き込み違反の例外が発生し、仮想マシンモニタ２００に制御が渡る。
【００７２】
仮想マシンモニタ２００は、ページ書き込み違反が発生したページが、上述したゲストＯＳと仮想マシンモニタ２００とのインタフェース用のページ（チェックポイント取得用ページ）ではないかどうか、つまり、ページ書き込み違反が発生したページがチェックポイント取得のためにコンテキストをライトすべきゲストＯＳの仮想ページアドレスに対応するページでないかどうかを判別する（ステップＳ１４）。
【００７３】
ページ書き込み違反が発生したページがインタフェース用のページ（チェックポイント取得用ページ）でないならば（ステップＳ１４のＹＥＳ）、仮想マシンモニタ２００は、ページ書き込み違反が発生したページの更新前の内容（データ）をゲストＯＳのメモリ領域からリードして、当該ゲストＯＳに対応する更新履歴用メモリ領域に保存する（ステップＳ１５）。この保存後、仮想マシンモニタ２００は、ページテーブルを更新して、そのページを書き込み可に設定する（ステップＳ１６）。これにより、ゲストＯＳはページ書き込み違反が発生したページへのデータの書き込みが可能となる（ステップＳ１７）。
【００７４】
ページ書き込み違反が発生したページがインタフェース用のページ（チェックポイント取得用ページ）であるならば（ステップＳ１４のＮＯ）、仮想マシンモニタ２００は、インタフェース用のページを書き込み可に設定した後、ステップＳ２１に進み、Ｉ／Ｏ管理構造に存在する発行していないＩ／Ｏ要求を実行する。そして、仮想マシンモニタ２００は、メモリ管理構造に存在するページフォルトがあったページを管理するデータを初期化した後（ステップＳ２２）、全てのページの書き込みを再び書き込み禁止に設定する（ステップＳ２３）。チェックポイント情報（コンテキスト）はゲストＯＳによりチェックポイント取得用ページに書き込まれる（ステップＳ１７）。
【００７５】
次に、図１１のフローチャートを参照して、invlpg命令での一般保護例外処理の流れを説明する。
【００７６】
invlpg命令が実行されると、仮想マシンモニタ２００は、ゲストＯＳと仮想マシンモニタ２００とのインタフェース用のページが書き込み可であるか否かを判別する（ステップＳ２１）。インタフェース用のページが書き込み可であれば（ステップＳ３１のＹＥＳ）、仮想マシンモニタ２００は、そのページを書き込み禁止にする（ステップＳ３２）。そして、仮想マシンモニタ２００は、out of sync listを用いて、ページテーブルとシャドウページテーブルとを同期させる（ステップＳ３３）。
【００７７】
次に、図１２、図１３のフローチャートを参照して、ＥＣＣエラー時のＮＭＩ処理の流れについて説明する。
【００７８】
ＥＣＣの２ビット誤り等の障害が発生した場合には、ＣＰＵへＮＭＩ（Non Maskable Interrupt）が入力される。ＣＰＵのＮＭＩハンドラ割り込みは、仮想マシンモニタ２００へ登録されているので、ＮＭＩは仮想マシンモニタ２００が処理する。仮想マシンモニタ２００には、従来のＮＭＩハンドラに加え、チェックポイントリスタートを実行する処理が追加されている。ＥＣＣエラー時のＮＭＩハンドラの処理は以下の通りである。
【００７９】
ゲストＯＳによるメモリアクセスによってＥＣＣエラーが発生した時、ＮＭＩによって仮想マシンモニタ２００に制御が渡る。仮想マシンモニタ２００は、発生したＥＣＣエラーが誤り訂正可能なＥＣＣエラーであるかどうかを判定する（ステップＳ４１）。
【００８０】
誤り訂正可能なＥＣＣエラーでない場合には（ステップＳ４１のＮＯ）、仮想マシンモニタ２００は、保存されている更新前データを用いてゲストＯＳのメモリの状態を直前のチェックポイントに対応する時点に復元する処理を実行する（ステップＳ４２）。ステップＳ４２では、例えば、更新履歴管理構造（before page image list）を使用して、誤り訂正可能でない仮想アドレスを除き、ゲストＯＳの仮想アドレスに対応するメモリの内容が物理アドレスに書き戻される。次いで、仮想マシンモニタ２００は、誤り訂正可能ではないエラーが発生した仮想ページアドレス用に、障害時代替用メモリ領域３０８の空き物理ページを用意する(ステップＳ４３)。そして、仮想マシンモニタ２００は、誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応するページテーブル(シャドウページテーブル)のエントリに、用意した空き物理ページのページアドレスを設定する（ステップＳ４４〜Ｓ４６）。この場合、誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応する更新前データは用意した空き物理ページに書き戻される（ステップＳ４４）。
【００８１】
この後、仮想マシンモニタ２００は、ＥＣＣエラーが発生したことを示すメッセージをコンソール等の表示画面上に表示する（ステップＳ４７）。
【００８２】
なお、発生したＥＣＣエラーが誤り訂正可能でないＥＣＣエラーである場合には、自動的にリスタート処理を開始してもよい。この場合、保存されている更新前データを用いてゲストＯＳのメモリの状態を直前のチェックポイントに対応する時点に復元する処理、および誤り訂正可能ではないエラーが発生した仮想ページアドレス用に空き物理ページを用意して、誤り訂正可能ではないエラーが発生した仮想ページアドレスに対応するページテーブルのエントリに用意した物理ページの物理ページアドレスを設定する処理等に加え、保存されているコンテキストを用いてＣＰＵの状態を直前のチェックポイントに対応する状態に復元する処理が仮想マシンモニタ２００によって実行される。
【００８３】
また、仮想マシンモニタ２００は、ＥＣＣエラー時と同様の処理をゲストＯＳのパニック関数についても行う。
【００８４】
パニックの発生の監視は、例えば、ゲストＯＳがパニック関数を呼び出す仮想ページアドレスに対応するページが存在しない状態にページテーブルを初期設定することによって容易に行うことができる。手順は以下の通りである。
【００８５】
１．  仮想マシンモニタ２００は、まず、ゲストＯＳがパニック関数を呼び出す仮想ページアドレスに対応したページが存在しない状態にページテーブルを初期設定する。ここでは、例えば、パニック関数を呼び出す仮想ページアドレスに対応したページテーブルエントリのプレゼントビットがＯＦＦに設定される。
【００８６】
２．  仮想マシンモニタ２００は、ページフォルトによる例外が発生すると、ページフォルトが発生したページがパニック関数のコードを呼び出す仮想ページアドレスに対応するページであるか否かを判別する。
【００８７】
３．  パニック関数のコードを呼び出す仮想ページアドレスに対応するページであれば、仮想マシンモニタ２００は、保存されているコンテキスト（チェックポイント情報）を用いてＣＰＵの状態を直前のチェックポイントに対応する状態に復元すると共に、更新履歴用メモリ領域に保存されている更新前データを用いてゲストＯＳのメモリ領域の状態を直前のチェックポイントに対応する時点に復元する。
【００８８】
なお、データベース等を使う場合には、ユーザ（アプリケーション）からの要求に従い、復旧できるようにする事も意義がある。この場合には、”リスタート用”インタフェースのページを設定すれば、ユーザ要求でリスタートを実現することができる。
【００８９】
次に、チェックポイントを取得する処理について説明する。
【００９０】
チェックポイント取得処理はゲストＯＳのカーネル内で実現することができる。Windows（登録商標）の場合には、カーネルドライバ、Ｌｉｎｕｘ（登録商標）の場合には、カーネルスレッドで実現することができる。カーネルスレッドは、ゲストＯＳの論理ＣＰＵにバインドし、ＣＰＵ個数分が同時に動作し、ＣＰＵ間通信を使用し代表者の一人がチェックポイントを取得する。
【００９１】
図１４のフローチャートはチェックポイント取得処理の流れを示している。
【００９２】
例えば複数のゲストＯＳがＣＰＵ間通信を使用して通信することにより、ゲストＯＳの内から代表を決定する（ステップＳ５１）。各ゲストＯＳはチェックポイントの時点毎に自身が代表であるか否かを判定し、代表でない場合にはチェックポイント取得処理の完了まで待機する（ステップＳ５２、Ｓ５３）。代表のゲストＯＳは、チェックポイント情報（コンテキスト）を仮想マシンモニタとのインタフェース用のページに書き込むことにより、チェックポイント取得処理を実行する（ステップＳ５３、Ｓ５４）。
【００９３】
以上のように、本実施形態によれば、更新履歴用メモリ領域に更新前データを蓄積することにより、更新履歴用メモリ領域を用いてゲストＯＳのメモリ領域の内容を復元することができる。また、更新前データ蓄積処理は、ゲストＯＳと仮想モニタとの間のインタフェース用のページを用いることにより、チェックポイント取得処理のタイミングと同期するように制御される。これにより、チェックポイント取得の度にページテーブルの全ページが書き込み禁止状態に初期設定することができ、あるチェックポイントから次のチェックポイントまでの期間においては、各ページ毎に、そのページに対する最初の更新に対応する更新前データのみを効率よく蓄積することができる。また、ゲストＯＳと仮想モニタとの間のインタフェース用のページを利用することにより、ゲストＯＳから発行されるＩ／Ｏ要求の実行タイミングを次のチェックポイント取得処理が実行されるまで遅延させる処理を効率よく実行することができるので、Ｉ／Ｏ装置をも含めてシステム全体の状態を正常に直前のチェックポイントの時点に戻してリスタートすることができる。
【００９４】
よって、ハードウェアの多重化やクラスタリングといった複雑な構成を用いることなく、仮想化機能を用いたコンピュータ上でのハードウェア故障やソフトウェアの不具合によるシステム停止を回避することが可能となる。
【００９５】
なお、本実施形態では、ゲストページテーブルの他に、仮想マシンモニタが管理する物理ページアドレスを保持するためのページテーブルをシャドウページテーブルとして実装する例を説明したが、これはあくまで一例であり、ゲストＯＳの仮想ページアドレスを仮想マシンモニタが管理する物理ページアドレスに変換するページテーブルのみを使用する構成であってもよい。
【００９６】
また、本実施形態の更新前データ保存処理および障害回復処理等は全て仮想マシンモニタによって実行されるので、この仮想マシンモニタをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【００９７】
また、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【図面の簡単な説明】
【００９８】
【図１】本発明の一実施形態に係る情報処理装置の構成を示すブロック図。
【図２】同実施形態の情報処理装置におけるハードウェアとソフトウェアとの関係を示すブロック図。
【図３】同実施形態の情報処理装置で用いられる仮想記憶機能の例を説明するための図。
【図４】同実施形態の情報処理装置におけるメモリ割り当ての例を示す図。
【図５】従来の仮想マシンモニタのシャドウページテーブルを模式的に示す図。
【図６】同実施形態の情報処理装置で用いられる仮想マシンモニタのメモリ管理構造を説明するための図。
【図７】同実施形態の情報処理装置で用いられる仮想マシンモニタのＩ／Ｏ要求管理構造を説明するための図。
【図８】同実施形態の情報処理装置で用いられる仮想マシンモニタの更新履歴管理構造を説明するための図。
【図９】同実施形態の情報処理装置によって実行されるページフォルト処理の流れの一部を説明するためのフローチャート。
【図１０】同実施形態の情報処理装置によって実行されるページフォルト処理の流れの残り部分を説明するためのフローチャート。
【図１１】同実施形態の情報処理装置によって実行される一般保護例外処理の流れを説明するフローチャート。
【図１２】同実施形態の情報処理装置によって実行されるＥＣＣエラー時のＮＭＩ処理の流れの一部を説明するためのフローチャート。
【図１３】同実施形態の情報処理装置によって実行されるＥＣＣエラー時のＮＭＩ処理の流れの残り部を説明するためのフローチャート。
【図１４】同実施形態の情報処理装置によって実行されるチェックポイント取得処理の流れを説明するためのフローチャート。
【符号の説明】
【００９９】
１１１…ＣＰＵ、１１２…メモリ管理ユニット、１１３…メモリ、１１４…ディスクドライブ装置、１１５…Ｉ／Ｏデバイス、２００…仮想マシンモニタ、３０１…ゲストＯＳ１用のメモリ領域、３０２…ゲストＯＳ２用のメモリ領域、３０３…ゲストＯＳ３用のメモリ領域、３０４…仮想マシンモニタ（ハイパーバイザ）用のメモリ領域、３０５…ゲストＯＳ１の更新履歴用メモリ領域、３０６…ゲストＯＳ２の更新履歴用メモリ領域、３０７…ゲストＯＳ３の更新履歴用メモリ領域、３０８…ゲストＯＳ１〜ＯＳ３に対する障害時代替用メモリ領域。
【図１】
0004783392.tif 000002
【図２】
0004783392.tif 000003
【図３】
0004783392.tif 000004
【図４】
0004783392.tif 000005
【図５】
0004783392.tif 000006
【図６】
0004783392.tif 000007
【図７】
0004783392.tif 000008
【図８】
0004783392.tif 000009
【図９】
0004783392.tif 000010
【図１０】
0004783392.tif 000011
【図１１】
0004783392.tif 000012
【図１２】
0004783392.tif 000013
【図１３】
0004783392.tif 000014
【図１４】
0004783392.tif 000015