(57)【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第１のソフトウェアと前記第１のソフトウェアの実行を監視する第２のソフトウェアとを実行し、
前記第２のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記障害情報に含まれる前記アクセス関連情報は、前記障害が発生したメモリのアドレスに対して書き込みがされたことを示す第１のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みがされていないことを示す第２のアクセス情報のいずれかを格納し、
前記方法は、
前記第２のソフトウェアが、前記メモリにおける障害の発生を検出する第１のステップと、
前記第２のソフトウェアが、前記障害が発生したメモリのアドレスとともに、前記第２のアクセス情報を前記障害情報に追加する第２のステップと、
前記第２のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第３のステップと、
前記第２のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第４のステップと、を含み、
前記第４のステップは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定する第５のステップを含み、
前記第５のステップは、
前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第２のアクセス情報から前記第１のアクセス情報に変更する第６のステップを含み、
また、前記第５のステップは、
前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に含まれる前記アクセス関連情報が前記第１のアクセス情報及び第２のアクセス情報のいずれであるかを判定することによって、前記第１のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する第７のステップと、
前記アクセス関連情報が前記第２のアクセス情報であると判定された場合に、前記障害処理を実行する第８のステップと、を含むことを特徴とする障害処理方法。
【請求項２】
前記第６のステップは、
前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持する第９のステップと、
前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第１のアクセス情報であるメモリのアドレスに対する前記第１のソフトウェアからのアクセスを許可する第１０のステップと、を更に含むことを特徴とする請求項１に記載の障害処理方法。
【請求項３】
前記メモリは、前記第１のソフトウェアによって使用される第１のメモリ領域と、前記障害処理を実行するときの使用される第２のメモリ領域とを含み、
前記第２のステップは、更に、前記第２のメモリ領域を前記第１のソフトウェアに割り当てる第１１のステップを含むことを特徴とする請求項１に記載の障害処理方法。
【請求項４】
前記第２のステップは、更に、前記第１のメモリ領域に格納されるデータを前記第２のメモリ領域に格納する第１２のステップを含むことを特徴とする請求項３に記載の障害処理方法。
【請求項５】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第１のソフトウェアと前記第１のソフトウェアの実行を監視する第２のソフトウェアとを実行し、
前記プロセッサは、前記第２のソフトウェアを実行することによって前記メモリにおける障害の発生を検出し、前記障害が発生したときに前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記障害情報に含まれる前記アクセス関連情報は、前記障害が発生したメモリのアドレスに対して書き込みがされたことを示す第１のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みがされていないことを示す第２のアクセス情報のいずれかを格納し、
前記プロセッサは、前記第２のソフトウェアを実行することによって前記障害が発生したメモリのアドレスとともに、前記アクセス関連情報として前記第２のアクセス情報を前記障害情報に追加し、
前記プロセッサは、前記第２のソフトウェアを実行することによって前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスを検出した場合に、障害処理を実行し、
前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスを検出した場合に、前記プロセッサは、当該アクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定し、
前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが書き込みであると判定された場合に、前記プロセッサは、前記アクセス関連情報を、前記第２のアクセス情報から前記第１のアクセス情報に変更し、
前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが読み出しであると判定された場合に、前記プロセッサは、前記障害情報に含まれる前記アクセス関連情報が前記第１のアクセス情報及び第２のアクセス情報のいずれであるかを判定することによって、前記第１のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定し、
前記障害情報に含まれるアクセス関連情報が前記第２のアクセス情報であると判定された場合に、前記プロセッサは、前記障害処理を実行することを特徴とする計算機。
【請求項６】
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが書き込みであると判定された場合に、前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持し、
前記プロセッサは、前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第１のアクセス情報であるメモリのアドレスに対する前記第１のソフトウェアからのアクセスを許可することを特徴とする請求項５に記載の計算機。
【請求項７】
前記メモリは、前記第１のソフトウェアによって使用される第１のメモリ領域と、前記障害処理を実行するときの使用される第２のメモリ領域とを含み、
前記プロセッサは、前記第２のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、前記第２のメモリ領域を前記第１のソフトウェアに割り当てることを特徴とする請求項５に記載の計算機。
【請求項８】
前記プロセッサは、前記第２のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、更に、前記第１のメモリ領域に格納されるデータを前記第２のメモリ領域に格納することを特徴とする請求項７に記載の計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機システムに関し、計算機上で稼動するＯＳおよびアプリケーションに対して、訂正不能障害を隠蔽する技術に関する。
【背景技術】
【０００２】
オープン系サーバの性能および機能拡充に伴い、企業のＩＴシステムでは比較的安価かつ高性能なＩｎｔｅｌ（登録商標、以下同じ）社のＸｅｏｎ（登録商標、以下同じ）  ＣＰＵを搭載したサーバ（Ｘｅｏｎサーバ）が主流となっている。Ｘｅｏｎ  ＣＰＵは内部的に多数のＣＰＵコアを搭載しサーバ全体としての処理性能を向上させており、２０１０年には１ＣＰＵパッケージ当り８コアが搭載される見込みである。
【０００３】
Ｘｅｏｎサーバに搭載されるＣＰＵコアを有効に活用する方法として、仮想サーバ技術が広く用いられている。仮想サーバ技術では、物理的には１台のＸｅｏｎサーバ上で複数の仮想的なサーバ環境（仮想計算機、ＶＭ）を生成し、ＶＭ単位でＯＳやアプリケーションを稼働させる。近年では標準的なＸｅｏｎサーバ上で１０〜数十のＶＭを稼働させるユーザも珍しくない。
【０００４】
しかし、１台の物理サーバ上で稼動するＶＭ数が増加するにつれ、サーバの部品故障に伴うＶＭの停止リスクが顕著となってきている。例えば、メモリではＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）による符号化が適用されているが、２ｂｉｔエラー等の訂正不能障害（ＵＥ：  Ｕｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）が発生した場合、従来のＸｅｏｎサーバでは致命的なエラー（Ｆａｔａｌ  ｅｒｒｏｒ）として扱われており、当該サーバ上の全てのＶＭを停止せざるを得なかった。
【０００５】
それに対して、２０１０年に出荷予定のＸｅｏｎ  ＣＰＵ（Ｎｅｈａｌｅｍ−ＥＸ）では、アーキテクチャレベルで障害処理が見直され（例えば、非特許文献１参照）、Ｐｏｉｓｏｎｉｎｇに基づく障害データの追跡とエラー処理メカニズムが追加される。Ｐｏｉｓｏｎｉｎｇとは、ハードウェアがＵＥ検出時に特定のフラグもしくはシンドロームパターン（復号符号誤りパターン）を付与した異常データ（Ｐｏｉｓｏｎ）を生成し、ソフトウェアがＰｏｉｓｏｎを読みたした時点で障害処理を行う機能である。Ｐｏｉｓｏｎが上書きされて消滅した場合は、ソフトウェアがＰｏｉｓｏｎを読みださないため、障害処理を行われない。
【０００６】
ＵＥの検出と障害処理に関して、Ｎｅｈａｌｅｍ−ＥＸでは命令実行を行うＣｏｒｅ部分と、メモリやＩ／Ｏとのデータ授受を行うＵｎｃｏｒｅ部分とではＵＥの深刻度が異なる。
（１）Ｃｏｒｅ部分では、命令実行に起因するメモリの読み出しに関してＵＥが検出される。本ケースではソフトウェアに致命的エラー（Ｆａｔａｌ  ｅｒｒｏｒ）が伝達され、当該サーバ上のソフトウェアが全て停止するシステム停止に至る。
（２）Ｕｎｃｏｒｅ部分では、メモリの周期的な読み出し／再書き込みを行うスクラビング（Ｓｃｒｕｂｂｉｎｇ）処理と、キャッシュからメモリへのデータ書き戻し（Ｗｒｉｔｅ  Ｂａｃｋ）処理に関してＵＥが検出される。本ケースではＰｏｉｓｏｎが生成された後、ソフトウェアに回復可能なエラー（Ｒｅｃｏｖｅｒａｂｌｅ  Ｅｒｒｏｒ）が伝達される。
【０００７】
従って、Ｎｅｈａｌｅｍ−ＥＸの場合、Ｃｏｒｅで検出されたＵＥに関しては従来通りのシステム停止等の障害処理になるが、Ｕｎｃｏｒｅで検出されたＵＥの場合、障害検出を契機に障害部品の部位情報をソフトウェアに伝達することによって、サーバ全体としての動作継続が可能となる。例えば、ＩＤＦ２００９では、回復可能なエラーの伝達を契機にＶＭを制御するハイパバイザが、障害部品を含むＶＭのみを停止させる応用が発表されている（例えば、非特許文献２参照）。また、本技術はＯＳにも適用可能であるため、同契機でＯＳが障害メモリを含むアプリケーションのみを停止させる応用も発表されている。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】IntelR 64 and IA-32 Architectures Software Developer's Manual 3A Chapter15.6 Recovery of Uncorrected Recoverable(UCR) Errors
【非特許文献２】Building IT Server Solutions on Intel Microarchitecture (Nehalem-EX)-based Platforms Featuring Windows Server 2008 R2 and Hyper-V.  Intel Developer Forum 2009
【発明の概要】
【発明が解決しようとする課題】
【０００９】
前述のスクラビング処理およびＷｒｉｔｅ  Ｂａｃｋ処理は、実装されている全てのメモリ領域を対象としている。そのためＸｅｏｎサーバでは、以下のメモリ領域（ａ）に対してＵＥを検出した場合でも関連するＶＭを停止させてしまう問題がある。
（ａ）ヒープ・スタック領域のうち、未初期化のメモリ領域。
【００１０】
メモリ領域（ａ）は、ＯＳもしくはアプリケーションが初期化を行った上で利用される。従って、スクラビング時およびＷｒｉｔｅ  Ｂａｃｋ時に検出されたＵＥは、Ｃｏｒｅ部分に読み出されることがないためＦａｔａｌ  ｅｒｒｏｒは生じない。よって、本来は当該領域を含むアプリケーションやＶＭをすぐに停止する必要はない。
【００１１】
しかし、ハイパバイザは一般に、ＯＳおよびアプリケーションのメモリが未初期化なのか初期化済みであるか判定できない。従って、Ｆａｔａｌ  ｅｒｒｏｒが発生するか否かは、ＯＳおよびアプリケーションがＰｏｉｓｏｎを読みだした時点で初めて確定する。そのため将来的なＦａｔａｌ  ｅｒｒｏｒを回避するためには、ＵＥ検出時点で、ＶＭを停止させる等の障害処理をせざるを得なかった。その結果、すぐに停止させる必要のないＶＭまでも停止させることとなり、障害範囲を限定できなかった。
【００１２】
またＯＳについても、アプリケーションのメモリが未初期化なのか初期化済みなのか判定できないため、同様の問題があった。
【００１３】
Ｘｅｏｎサーバにおいて、障害範囲を限定するためには、以下の３つの要件がある。
【００１４】
第１の要件：検出されたＵＥ（ＤＵＥ：  Ｄｅｔｅｃｔｅｄ  Ｕｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）がＰｏｉｓｏｎを読み出すＴＲＵＥ  ＤＵＥなのか、読み出さないＦＡＬＳＥ  ＤＵＥなのかを判別すること。
【００１５】
第２の要件：Ｐｏｉｓｏｎを読み出すとシステム停止を招くＸｅｏｎ  ＣＰＵを用いて、Ｐｏｉｓｏｎを読み出すＴＲＵＥ  ＤＵＥの確定後もシステム停止を回避すること。
【００１６】
第３の要件：Ｐｏｉｓｏｎを読み出さないＦＡＬＳＥ  ＤＵＥの場合に、ＶＭやアプリケーションの動作を継続させること。
【００１７】
これらの要件を全て充足させ、障害範囲を限定することが課題である。
【課題を解決するための手段】
【００１８】
本発明の代表的な一例を示せば、以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、前記プロセッサは、前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、前記メモリに格納される、第１のソフトウェアと前記第１のソフトウェアの実行を監視する第２のソフトウェアとを実行し、前記第２のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、前記障害情報に含まれる前記アクセス関連情報は、前記障害が発生したメモリのアドレスに対して書き込みされたことを示す第１のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みされていないことを示す第２のアクセス情報のいずれかを格納し、前記方法は、前記第２のソフトウェアが、前記メモリにおける障害の発生を検出する第１のステップと、前記第２のソフトウェアが、前記障害が発生したメモリのアドレスとともに、前記第２のアクセス情報を前記障害情報に追加する第２のステップと、前記第２のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第３のステップと、前記第２のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第４のステップと、を含み、前記第４のステップは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定する第５のステップを含み、前記第５のステップは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第２のアクセス情報から前記第１のアクセス情報に変更する第６のステップを含み、また、前記第５のステップは、前記障害が発生したメモリのアドレスに対する前記第１のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に含まれる前記アクセス関連情報が前記第１のアクセス情報及び第２のアクセス情報のいずれであるかを判定することによって、前記第１のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する第７のステップと、前記アクセス関連情報が前記第２のアクセス情報であると判定された場合に、前記障害処理を実行する第８のステップと、を含むことを特徴とする。
【発明の効果】
【００１９】
障害が発生したメモリのアドレスに対して読み出しを実行するとシステム停止をさせるプロセッサであっても、第１のソフトウェアのメモリへの読み書きの有無から障害の種別を判別し、第１のソフトウェアから書き込みがされていない場合には障害の影響を当該メモリを使用する第１のソフトウェアのみにとどめ、第１のソフトウェアから書き込みがされている場合には第１のソフトウェアの処理を継続できる。したがって、障害の影響範囲を限定することできる。
【図面の簡単な説明】
【００２０】
【図１】本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【図２】本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【図３】本発明の実施形態のＩ／Ｏ割り当て表の一例を示す説明図である。
【図４】本発明の実施形態のＰｏｉｓｏｎ表の一例を示す説明図である。
【図５Ａ】本発明の実施形態のＣＰＵ用メモリマップ・保護表の一例を示す説明図である。
【図５Ｂ】本発明の実施形態のＩ／Ｏ用メモリマップ・保護表の一例を示す説明図である。
【図６】本発明の実施形態のハイパバイザが管理するメモリの一例を示す説明図である。
【図７Ａ】発明の実施形態において、障害検出からＰｏｉｓｏｎが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図７Ｂ】発明の実施形態において、障害検出からＰｏｉｓｏｎが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図７Ｃ】発明の実施形態において、障害検出からＰｏｉｓｏｎが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図８Ａ】本発明の実施形態において、直接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図８Ｂ】本発明の実施形態において、直接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図８Ｃ】本発明の実施形態において、直接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図９Ａ】本発明の実施形態において、間接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図９Ｂ】本発明の実施形態において、間接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図９Ｃ】本発明の実施形態において、間接Ｉ／Ｏの仮想計算機で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図１０Ａ】本発明の実施形態において、キャッシュ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図１０Ｂ】本発明の実施形態において、キャッシュ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図１０Ｃ】本発明の実施形態において、キャッシュ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図１１】本発明の実施形態のハイパバイザが実行する障害処理の全体像を説明するフローチャートである。
【図１２】本発明の実施形態のＳ１０４０において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【図１３】本発明の実施形態のＳ１１１０において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【図１４】本発明の実施形態のＳ１０５０において実行されるメモリの保護領域の読み出しに対応する処理を説明するフローチャートである。
【図１５】本発明の実施形態のＳ１０７０において実行されるＩ／Ｏデバイス障害に対応する処理を説明するフローチャートである。
【図１６】本発明の実施形態のＳ１０６０において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【図１７】本発明の実施形態のＳ１５７０において実行される通常動作への復帰処理を説明するフローチャートである。
【発明を実施するための形態】
【００２１】
以下では、本発明の実施形態を添付図面に基づいて説明する。
【００２２】
本実施形態ではハイパバイザが本発明における処理を実行する。ハイパバイザがスーパバイザソフトウェアに該当し、ＯＳおよびアプリケーションがユーザソフトウェアに該当する。また、以下では訂正不能障害を、障害と記載する。
【００２３】
＜ハードウェア構成＞
図１は、本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【００２４】
物理計算機１０は、障害検出機能を有するＣＰＵ７０−１〜７０−ｎを１つ以上備え、これらのＣＰＵ７０−１〜７０−ｎはＱＰＩ（ＱＵＩＣＫ  Ｐａｔｈ  ＩｎｔｅｒＣｏｎｎｅｃｔ）またはＳＭＩ（Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  ＩｎｔｅｒＣｏｎｎｅｃｔ）等のチップ間インタフェース８２０を介してＩＯＨ（Ｉ／Ｏ  Ｈｕｂ）８００およびメモリ９０と接続される。
【００２５】
ＩＯＨ８００には、ＰＣＩｅｘｐｒｅｓｓ等のバス８４０を介してＩ／Ｏデバイス６０が接続される。Ｉ／Ｏデバイス６０は、ＬＡＮ８６０に接続されるネットワークアダプタ、ディスク装置８７０等に接続されるＳＣＳＩアダプタ、ＳＡＮ８９０（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に接続されるファイバーチャネルアダプタ、およびコンソール８０に接続されるグラフィックコントローラなどから構成される。なお、Ｉ／Ｏデバイス６０は、複数あってもよい。
【００２６】
ＣＰＵ７０はチップ間インタフェース８２０を介してメモリ９０にアクセスし、ＩＯＨ８００からＩ／Ｏデバイス６０にアクセスして所定の処理を実行する。
【００２７】
なお、図１に示す例では、物理計算機１０は、１つのＩ／Ｏデバイス６０のみを備えているが、複数備えてもよい。
【００２８】
メモリ９０は、ＣＰＵ７０によって実行されるプログラムおよび当該プログラムを実行するときに必要となる情報を格納する。図１に示すように、メモリ９０には、ハイパバイザ２０がロードされ、当該ハイパバイザ２０によって構築される各仮想計算機１（３０−１）〜仮想計算機ｎ（３０−ｎ）上に、ゲスト４０−１〜４０−ｎがそれぞれ実行される。ここで、ゲストとは、ＯＳとアプリケーションとの総称を表す。
【００２９】
以下、ＣＰＵ７０−１〜７０−ｎを区別しない場合、ＣＰＵ７０と記載する。仮想計算機１（３０−１）〜仮想計算機ｎ（３０−ｎ）を区別しない場合、仮想計算機３０と記載し、また、ゲスト４０−１〜４０−ｎを区別しない場合、ゲスト４０と記載する。
【００３０】
＜ソフトウェア構成＞
次に、物理計算機１０上で仮想計算機３０を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図２を参照しながら詳述する。
【００３１】
図２は、本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【００３２】
物理計算機１０上では、１つ以上の仮想計算機３０を制御するハイパバイザ２０が稼動する。
【００３３】
仮想計算機３０は、ＣＰＵ７０を用いて実現される仮想ＣＰＵ３００と、Ｉ／Ｏデバイス６０を用いて実現される仮想Ｉ／Ｏデバイス３１０と、メモリ９０を用いて実現されるゲストメモリ３２０とから構成される。仮想計算機３０上では、ゲスト４０が稼動する。
【００３４】
ハイパバイザ２０は、Ｉ／Ｏ割り当て表２００、エミュレータ２１０、障害処理部２２０、およびメモリ管理部２４０−１〜２４０−ｎを備える。
【００３５】
Ｉ／Ｏ割り当て表２００は、仮想計算機３０に対するＩ／Ｏデバイス６０の割り当て状態を格納する。Ｉ／Ｏ割り当て表２００の詳細は、図３を用いて後述する。
【００３６】
エミュレータ２１０は、仮想ＣＰＵ３００、仮想Ｉ／Ｏデバイス３１０およびゲストメモリ３２０を実現する。
【００３７】
障害処理部２２０は、発生した障害に対応する処理を実行する。障害処理部２２０は、Ｐｏｉｓｏｎ表２３０を含む。
【００３８】
Ｐｏｉｓｏｎ表２３０は、Ｐｏｉｓｏｎの位置とアクセス状況を格納する。Ｐｏｉｓｏｎ表２３０の詳細は、図４を用いて後述する。
【００３９】
メモリ管理部２４０−１は、仮想計算機１（３０−１）に対するメモリ９０の割り当てを管理する。メモリ管理部２４０−１は、ゲストメモリ３２０とメモリ９０との対応を定め、アクセス権を制定するメモリマップ・保護表を２種類格納する。具体的には、メモリ管理部２４０−１は、Ｉ／Ｏ用メモリマップ・保護表２６０−１およびＣＰＵ用メモリマップ・保護表２５０−１を含む。ＣＰＵ用メモリマップ・保護表２５０−１は、ＣＰＵ７０に適用される。Ｉ／Ｏ用メモリマップ・保護表２６０は、Ｉ／Ｏデバイス６０に適用される。
【００４０】
なお、メモリ管理部２４０−１は、ＣＰＵ用メモリマップ・保護表２５０−１とＩ／Ｏ用メモリマップ・保護表２６０−１とを一つの表として備えていてもよい。
【００４１】
なお、他のメモリ管理部２４０−２〜２４０−ｎも同様の構成である。
【００４２】
以下、メモリ管理部２４０−１〜２４０−ｎを区別しない場合、メモリ管理部２４０と記載する。また、Ｉ／Ｏ用メモリマップ・保護表２６０−１およびＣＰＵ用メモリマップ・保護表２５０−１についても、区別しない場合、Ｉ／Ｏ用メモリマップ・保護表２６０およびＣＰＵ用メモリマップ・保護表２５０と記載する。
【００４３】
物理計算機１０は、ＣＰＵ７０、Ｉ／Ｏデバイス６０およびメモリ９０を備える。
【００４４】
ＣＰＵ７０は、メモリ保護機能１０１、メモリコントローラ１００およびキャッシュ１０５を備える。
【００４５】
メモリ保護機能１０１は、ゲストメモリ３２０に対するアドレス変換とアクセス制御とを行う。メモリ保護機能１０１は、ＣＰＵ用メモリマップ・保護表２５０を参照し、ゲスト４０がゲストメモリ３２０にアクセス（読み出しまたは書き込み）する場合、アクセスの可否と対応するホストアドレスとを判定する。当該判定の結果、アクセスが禁止されていると判定された場合、メモリ保護機能１０１は、障害処理部２２０に不正アクセスを通知する。
【００４６】
すなわち、メモリ保護機能１０１は、メモリ９０の所定のアドレス範囲のアクセスを禁止するために当該範囲を保護するとともに、当該アドレス範囲に対するアクセスを監視するための機能である。
【００４７】
メモリコントローラ１００は、メモリ９０の読み書きを制御する。メモリコントローラ１００は、メモリ障害検出機能１０２およびスクラビング機能１０４を備える。
【００４８】
メモリ障害検出機能１０２は、メモリ９０からデータが読み出されときに、メモリコントローラ１００によって付与されたエラー検出用の符号の妥当性を検査する。ここで、エラー検出用の符号は、メモリコントローラ１００によってメモリ９０へ書き込まれるデータに付与される。
【００４９】
また、メモリ障害検出機能１０２は、訂正不能な障害が検出された場合に、メモリ９０にＰｏｉｓｏｎを格納し、更にＰｏｉｓｏｎの格納を障害処理部２２０に通知する。
【００５０】
スクラビング機能１０４は、ソフトウェアの動作と独立してメモリ９０に格納されるデータを検査する。
【００５１】
キャッシュ１０５は、メモリ９０上のデータの一部を格納する。キャッシュ１０５は、キャッシュ障害検出機能１０７およびライン無効化機能１０８を備える。
【００５２】
キャッシュ障害検出機能１０７、キャッシュ１０５によって付与されたエラー検出用の符号の妥当性を適宜検査する。なお。エラー検出用の符号は、キャッシュ１０５によって格納されるデータに付与される。キャッシュ障害検出機能１０７は、データがメモリ９０に書き戻されるタイミングで障害を見つけた場合にメモリ９０にＰｏｉｓｏｎを格納し、更にＰｏｉｓｏｎの格納を障害処理部２２０に通知する。
【００５３】
ライン無効化機能１０８は、キャッシュ障害が発生したキャッシュラインを無効化する。
【００５４】
Ｉ／Ｏデバイス６０は、アドレス変換機能１１５、Ｉ／Ｏ障害検出機能１１０およびＤＭＡ一時停止機能１１７を備える。
【００５５】
アドレス変換機能１１５は、ゲストメモリ３２０に対応するメモリ９０のアドレスを算出する。アドレス変換機能１１５は、Ｉ／Ｏ用メモリマップ・保護表２６０を参照し、Ｉ／Ｏデバイス６０がゲストメモリ３２０をアクセスする場合に、対応するホストアドレスを判定する。
【００５６】
Ｉ／Ｏ障害検出機能１１０は、メモリ９０からデータを読み出した結果がＰｏｉｓｏｎだった場合に、障害の発生をＩＯＨ８００経由でＣＰＵ７０に伝達する。
【００５７】
ＤＭＡ一時停止機能１１７は、ゲストメモリ３２０のアクセスを一時的に保留する。
【００５８】
メモリ９０は、通常割当用メモリ１３０と障害対応用メモリ１２０とに分けて管理される。
【００５９】
通常割当用メモリ１３０は、仮想計算機３０に割り当てられるメモリである。障害対応用メモリ１２０は、障害発生時に使用されるメモリである。
【００６０】
通常割当用メモリ１３０は、Ｐｏｉｓｏｎを含む障害ページ１６０と、Ｐｏｉｓｏｎを含まない通常ページ１７０とから構成される。
【００６１】
障害対応用メモリ１２０は、障害が発生したメモリの代わりに割り当てられる代替ページ１４０と、ゲスト４０がＰｏｉｓｏｎの上書きに用いる値を一時的に格納する仮置ページ１５０とから構成される。ここでページとはメモリ割り当ての最小単位を意味し、本実施形態ではページの大きさを「４Ｋバイト」と仮定する。また、Ｐｏｉｓｏｎの大きさは「８バイト」と仮定する。
【００６２】
図３は、本発明の実施形態のＩ／Ｏ割り当て表２００の一例を示す説明図である。
【００６３】
Ｉ／Ｏ割り当て表２００は、仮想計算機３０毎に各Ｉ／Ｏデバイス６０の割り当て状態を格納する。図３に示す例では、Ｉ／Ｏ割り当て表２００には、各仮想計算機１（３０−１）〜仮想計算機ｎ（３０−ｎ）に対する、Ｉ／Ｏデバイス１〜ｍの割り当て状態が格納される。
【００６４】
割り当て状態には、「直接Ｉ／Ｏ」、「間接Ｉ／Ｏ」および「なし」の３通りがある。
【００６５】
「直接Ｉ／Ｏ」は、Ｉ／Ｏデバイス６０がＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）等を用いてゲストメモリ３２０を直接操作できる割り当て形態である。
【００６６】
「間接Ｉ／Ｏ」は、Ｉ／Ｏデバイス６０にゲストメモリ３２０を直接操作させず、ハイパバイザ２０がゲストメモリ３２０の操作を代行する形態である。
【００６７】
「なし」は、Ｉ／Ｏデバイス６０が割り当てられていない事を意味する。
【００６８】
本実施形態では、直接Ｉ／Ｏとして割り当てられたＩ／Ｏデバイス６０を１つ以上含む仮想計算機３０を、直接Ｉ／Ｏの仮想計算機と記載する。また、間接Ｉ／Ｏとして割り当てられたＩ／Ｏデバイス６０のみから成る仮想計算機を、間接Ｉ／Ｏの仮想計算機と記載する。
【００６９】
なお、ハイパバイザ２０は、仮想計算機３０とＩ／Ｏデバイス６０との対応が分かるのであれば、Ｉ／Ｏ割り当て表２００以外の形式で情報を保持してもよい。
【００７０】
図４は、本発明の実施形態のＰｏｉｓｏｎ表２３０の一例を示す説明図である。
【００７１】
Ｐｏｉｓｏｎ表２３０は、障害タイプ４００、仮想計算機番号４１０、ゲストアドレス４２０、障害ページアドレス４３０、代替ページアドレス４４０、仮置ページアドレス４５０、Ｐｏｉｓｏｎビットマップ４６０および消滅ビットマップ４７０を含む。
【００７２】
障害タイプ４００は、検出された障害の種類と仮想計算機３０の構成とを格納する。障害タイプ４００には、「キャッシュ」、「メモリ（間接Ｉ／Ｏ）」、「メモリ（直接Ｉ／Ｏ）」および「正常」の４種がある。
【００７３】
「キャッシュ」は、キャッシュ障害検出機能１０７によって伝達される障害である。「メモリ（間接Ｉ／Ｏ）」は、メモリ障害検出機能１０２によって伝達される、間接Ｉ／Ｏの仮想計算機３０に割り当てられたメモリに対する障害である。「メモリ（直接Ｉ／Ｏ）」は、メモリ障害検出機能１０２によって伝達される直接Ｉ／Ｏの仮想計算機３０に割り当てられたメモリに対する障害である。「正常」は、障害が発生していない状態である。
【００７４】
仮想計算機番号４１０は、仮想計算機３０を識別するための識別子（通し番号）を格納する。
【００７５】
ゲストアドレス４２０は、ゲストメモリ３２０のアドレスを格納する。障害ページアドレス４３０は、障害ページ１６０のアドレスを格納する。代替ページアドレス４４０は、代替ページ１４０のアドレスを格納する。仮置ページアドレス４５０は、仮置ページ１５０のアドレスを格納する。
【００７６】
Ｐｏｉｓｏｎビットマップ４６０は、ページ内のＰｏｉｓｏｎの位置を格納する。Ｐｏｉｓｏｎビットマップ４６０は、障害ページ１６０の１バイト毎に１ビットが対応するビットマップであり、ページ内においてＰｏｉｓｏｎが格納されたアドレスに対応するビットを「１」とする。
【００７７】
消滅ビットマップ４７０は、ページ内の上書きされたＰｏｉｓｏｎの位置を格納する。消滅ビットマップ４７０は、障害ページ１６０の１バイト毎に１ビットが対応するビットマップであり、Ｐｏｉｓｏｎが格納されたアドレスに対して書き込みが検出された場合に当該アドレスに対応するビットを「１」とする。
【００７８】
Ｐｏｉｓｏｎ表２３０は、障害が障害処理部２２０に伝達された時と、Ｐｏｉｓｏｎがゲスト４０によって上書きされる時に更新される。また、Ｐｏｉｓｏｎ表２３０は、仮想計算機３０を追加する場合にも参照され、障害の起きていないメモリ９０を割り当てる目的で使用される。
【００７９】
ハイパバイザ２０は、Ｐｏｉｓｏｎビットマップ４６０および消滅ビットマップ４７０を用いて、Ｐｏｉｓｏｎが格納されたアドレスに対して、書き込みがあったか否か、すなわち、アクセスパターンを判定することができる。
【００８０】
なお、ハイパバイザ２０は、障害に関する情報が分かるのであれば、Ｐｏｉｓｏｎ表７０以外の形式で情報を保持してもよい。
【００８１】
図５Ａは、本発明の実施形態のＣＰＵ用メモリマップ・保護表２５０の一例を示す説明図である。図５Ｂは、本発明の実施形態のＩ／Ｏ用メモリマップ・保護表２６０の一例を示す説明図である。
【００８２】
図５Ａおよび図５Ｂに示すようにＣＰＵ用メモリマップ・保護表２５０およびＩ／Ｏ用メモリマップ・保護表２６０は同一の構成である。
【００８３】
ＣＰＵ用メモリマップ・保護表２５０およびＩ／Ｏ用メモリマップ・保護表２６０は、ページ毎に一つのエントリを保持する。
【００８４】
ＣＰＵ用メモリマップ・保護表２５０は、ゲストアドレス５００、ホストアドレス５１０およびアクセス権５２０を含む。Ｉ／Ｏ用メモリマップ・保護表２６０は、ゲストアドレス５３０、ホストアドレス５４０およびアクセス権５５０を含む。
【００８５】
ゲストアドレス５００、５３０は、ゲストメモリ３２０のアドレスを格納する。ゲストアドレス５００、５３０は、ゲストアドレス４２０と同一のものである。ホストアドレス５１０、５４０は、メモリ９０のアドレスを格納する。アクセス権５２０、５５０は、メモリのアクセス権を格納する。アクセス権５２０には、「許可」または「禁止」が格納される。
【００８６】
なお、ハイパバイザ２０は、ゲストアドレスとホストアドレスとの対応が分かるのであれば、ＣＰＵ用メモリマップ・保護表２５０およびＩ／Ｏ用メモリマップ・保護表２６０以外の形式で情報を保持してもよい。
【００８７】
図６は、本発明の実施形態のハイパバイザ２０が管理するメモリ９０の一例を示す説明図である。
【００８８】
ハイパバイザ２０は、メモリ９０の割り当てを管理しており、メモリ９０上に当該ハイパバイザ２０自身を配置する領域と、仮想計算機３０が使用する領域を割り当てる。例えば、図６に示すように、ハイパバイザ２０は、ハイパバイザ２０自身にアドレスＡＤ０〜ＡＤ１を、仮想計算機１（３０−１）にアドレスＡＤ１〜ＡＤ２を、仮想計算機ｎ（３０−ｎ）にアドレスＡＤ３〜ＡＤ４を割り当てる。
【００８９】
各仮想計算機３０に割り当てられた領域には、ゲスト（ＯＳ）４０が割り当てられる。
【００９０】
ハイパバイザ２０が使用する領域には、Ｉ／Ｏ割り当て表２００、エミュレータ２１０、障害処理部２２０およびメモリ管理部２４０が割り当てられる。
【００９１】
＜影響範囲を限定可能な障害の種類＞
本実施形態では障害部位として、スクラビングで検出されるメモリ素子の障害（以下、メモリ障害と記載する）と、キャッシュ１０５からメモリ９０へのＷｒｉｔｅ  Ｂａｃｋ時に検出されるキャッシュの障害（以下、キャッシュ障害と記載する）との両方に対して処理を実行する。本実施形態で対応する障害の条件を（表１）に記載する。
【００９２】
【表１】
0005574230.tif 000002
【００９３】
ここで、仮想計算機の構成とは、仮想計算機３０に対するＩ／Ｏデバイス６０の割り当て状態を示す。直接Ｉ／Ｏの仮想計算機３０は、１つ以上のＩ／Ｏデバイス６０からゲストメモリ３２０に対するＤＭＡが許可される仮想計算機３０である。間接Ｉ／Ｏの仮想計算機３０は、Ｉ／Ｏデバイス６０からゲストメモリ３２０に対して、一切のＤＭＡが許可されない仮想計算機３０である。間接Ｉ／Ｏの仮想計算機３０では、ハイパバイザ２０のみがゲストメモリ３２０を操作する。
【００９４】
本実施形態では、直接Ｉ／Ｏの仮想計算機３０においてメモリ障害が生じた場合、ページ毎のＰｏｉｓｏｎが１つ（８バイト）だけの簡単なケースのみに対応する。
【００９５】
また、簡単のために、以下に列挙する２重障害にも対応しない。すなわち、間接Ｉ／Ｏの仮想計算機３０においてメモリ障害が生じ、更に代替ページ１４０に障害が発生する場合は２重障害とみなして対応しない。また、キャッシュ障害についても仮置ページ１５０に障害が発生する場合は２重障害とみなして対応しない。また、同一ページに対してメモリ障害とキャッシュ障害との両方が発生する場合も２重障害とみなして対応しない。
【００９６】
本実施形態では、Ｉ／Ｏデバイス６０が、ゲストメモリ３２０に対するＤＭＡを一時的に停止させるＤＭＡ一時停止機能１１７を備えることを前提とする。また、ＣＰＵ７０が、故障したキャッシュラインの利用を自動的に停止させるライン無効化機能１０８を備えることを前提とする。
【００９７】
本実施形態では（表１）に示す３つのケースに対応するが、各ケースを区別するための条件判定を省略すれば、２つのケースまたは１つのケースに対応する実施形態も可能である。
【００９８】
＜障害過程におけるゲストメモリの実現方法＞
次に、障害検出からＰｏｉｓｏｎが消滅する各過程における、ゲストメモリ３２０の遷移について説明する。
【００９９】
図７Ａ、図７Ｂおよび図７Ｃは、本発明の実施形態において、障害検出からＰｏｉｓｏｎが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【０１００】
各図はゲストアドレス５００とホストアドレス５１０との対応関係を示している。図７Ａは、（１）ゲストアドレス５００の所定のページが障害ページ１６０にマップされた状態を表すメモリマップである。
【０１０１】
図７Ｂは、（２）ゲスト４０から障害ページ１６０へのアクセスが禁止された状態を示すメモリマップである。
【０１０２】
図７Ｃは、（３）ゲストアドレス５００の所定のページのマップ先が代替ページ１４０に変更された状態を示すメモリマップである。
【０１０３】
以下、図７Ａに示すメモリマップをメモリマップ（１）と記載し、図７Ｂに示すメモリマップをメモリマップ（２）と記載し、また、図７Ｃに示すメモリマップをメモリマップ（３）と記載する。
【０１０４】
図８Ａ、図８Ｂおよび図８Ｃは、本発明の実施形態において、直接Ｉ／Ｏの仮想計算機３０で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ９０内のページの状態を示す説明図である。
【０１０５】
各状態において、Ｐｏｉｓｏｎ７００を含む障害ページ１６０と、障害ページ１６０の代わりに割り当てられる代替ページ１４０との２つを１組として扱う。
【０１０６】
図８Ａは、（ａ）障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ１４０の全データは「０」となっている。
【０１０７】
図８Ｂは、（ｂ）８バイトからなるＰｏｉｓｏｎ７００の一部をゲスト４０がＣＰＵ７０を用いて上書きした場合の状態を表す。本ケースでは、Ｐｏｉｓｏｎ７００を上書きするデータ（更新データ７２０）が代替ページ１４０に格納される。一方、正常データ７１０を上書きする値は、障害ページ１６０に格納される。
【０１０８】
（ｂ）の状態で、ゲスト４０がＣＰＵ７０を用いて障害ページ１６０中の正常データ（Ｐｏｉｓｏｎ７００以外のデータ）７１０を読み出す場合には、ハイパバイザ２０が障害ページ１６０を読み出して応答する。また、（ｂ）の状態で、ゲスト４０がＣＰＵ７０を用いて代替ページ１４０の更新データ７２０を読み出す場合には、ハイパバイザ２０が代替ページ１４０を読み出して応答する。また、（ｂ）の状態で、Ｉ／Ｏデバイス６０が正常データ７１０またはＰｏｉｓｏｎ７００を読み出す場合には、障害ページ１６０のデータがそのまま読み出される。
【０１０９】
図８Ｃは、（ｃ）ゲスト４０がページ内のＰｏｉｓｏｎ７００を全て上書きした後の状態を表す。図８Ｃに示すように、障害ページ１６０に含まれていたＰｏｉｓｏｎ７００以外のデータ（正常データ７１０）が代替ページ１４０にマージされる。
【０１１０】
直接Ｉ／Ｏの仮想計算機３０で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは（表２）に示すような対応となる。
【０１１１】
【表２】
0005574230.tif 000003
【０１１２】
初期状態ではメモリマップ（１）が適用されており、Ｐｏｉｓｏｎ７００を含む障害ページ１６０がゲストアドレス５００からアクセス可能になっている。この状態でゲスト４０がＰｏｉｓｏｎ７００を読み出すと、致命的エラーが発生してシステムが停止する。
【０１１３】
システム停止を避けるために、ハイパバイザ２０は、ＣＰＵ７０に対してメモリマップ（２）を適用し、ゲスト４０が動作している間、ＣＰＵ７０による障害ページ１６０のアクセスを禁止する。これによって、ゲスト４０が読み書きを行う直前で、障害処理部２２０が実行されるようになる。なお、Ｉ／Ｏデバイス６０に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ（１）が適用され、回復後にメモリマップ（３）が適用される。
【０１１４】
ゲスト４０によるＰｏｉｓｏｎの上書きによってＰｏｉｓｏｎが消滅した場合には、ＣＰＵ７０に対するアクセス禁止設定が解除される。障害ページ１６０の利用を停止して代替ページ１４０を割り当てたメモリマップ（３）が適用される。
【０１１５】
回復後は、図７Ｃに示すようなメモリマップ（３）が適用されるため、Ｐｏｉｓｏｎ消滅後においてはゲスト４０によるメモリ操作が代替ページ１４０に対して行われる。
【０１１６】
図９Ａ、図９Ｂおよび図９Ｃは、本発明の実施形態において、間接Ｉ／Ｏの仮想計算機３０で生じたメモリ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ９０内のページの状態を示す説明図である。
【０１１７】
各状態において、Ｐｏｉｓｏｎ７００を含む障害ページ１６０と、障害ページ１６０の代わりに割り当てられる代替ページ１４０との２つを１組として扱う。
【０１１８】
図９Ａは、（ｄ）障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ１４０には、正常データ７１０がコピーされ、Ｐｏｉｓｏｎに対応する領域の全データは「０」となっている。
【０１１９】
図９Ｂは、（ｅ）８バイトからなるＰｏｉｓｏｎ７００の一部をゲスト４０がＣＰＵ７０を用いて上書きした場合の状態を表す。本ケースでは、更新データ７２０および正常データ７１０を上書きする値は、共に代替ページ１４０に格納される。
【０１２０】
（ｅ）の状態で、ゲスト４０がＣＰＵ７０を用いて障害ページ１６０中の正常データ（Ｐｏｉｓｏｎ７００で以外のデータ）７１０を読み出す場合には、ハイパバイザ２０が代替ページ１４０を読み出して応答する。また、（ｅ）の状態で、ゲスト４０がＣＰＵ７０を用いて代替ページ１４０中の更新データ７２０を読み出す場合には、ハイパバイザ２０が代替ページ１４０を読み出して応答する。
【０１２１】
図９Ｃは、（ｆ）ゲスト４０がページ内のＰｏｉｓｏｎ７００を全て上書きした後の状態を表す。
【０１２２】
間接Ｉ／Ｏの仮想計算機３０で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは（表３）に示すような対応となる。
【０１２３】
【表３】
0005574230.tif 000004
【０１２４】
Ｉ／Ｏデバイス６０に対しては、処理が実行されない。
【０１２５】
ＣＰＵ７０に対しては、初期状態ではメモリマップ（１）が適用されており、Ｐｏｉｓｏｎ７００を含む障害ページ１６０がゲストアドレス５００からアクセス可能になっている。この状態でゲスト４０がＰｏｉｓｏｎ７００を読み出すと、致命的エラーが発生してシステムが停止する。
【０１２６】
システム停止を避けるために、ハイパバイザ２０は、ＣＰＵ７０に対してメモリマップ（２）を適用し、ゲスト４０が動作している間、ＣＰＵ７０による障害ページ１６０のアクセスを禁止する。これによって、ゲスト４０が読み書きを行う直前で、障害処理部２２０が実行されるようになる。
【０１２７】
ゲスト４０によるＰｏｉｓｏｎの上書きによってＰｏｉｓｏｎが消滅した場合には、ＣＰＵ７０に対するアクセス禁止設定が解除される。障害ページ１６０の利用を停止して代替ページ１４０を割り当てたメモリマップ（３）が適用される。
【０１２８】
回復後は、図７Ｃに示すようなメモリマップ（３）が適用されるため、Ｐｏｉｓｏｎ消滅後においてはゲスト４０によるメモリ操作が代替ページ１４０に対して行われる。
【０１２９】
図１０Ａ、図１０Ｂおよび図１０Ｃは、本発明の実施形態において、キャッシュ障害の検出からＰｏｉｓｏｎの消滅の各段階におけるメモリ９０内のページの状態を示す説明図である。
【０１３０】
各状態において、Ｐｏｉｓｏｎ７００を含む障害ページ１６０と、更新データ７２０を一時的に保持する仮置ページ１５０との２つを１組として扱う。
【０１３１】
図１０Ａは、（ｇ）障害発生直後の状態を表す。割り当てられた直後の仮置ページ１５０のページ内の全データは「０」となっている。
【０１３２】
図１０Ｂは、（ｈ）８バイトからなるＰｏｉｓｏｎ７００の一部をゲスト４０がＣＰＵ７０を用いて上書きした場合の状態を表す。キャッシュ障害に対しては、更新データ７２０は仮置ページ１５０に格納される。これは、バイト単位の更新が許されないＰｏｉｓｏｎ７００を、ゲスト４０がバイト単位で更新する場合でも正しく上書きするための措置である。また、正常データ７１０を上書きする値は、障害ページ１６０に格納される。
【０１３３】
（ｈ）の状態で、ゲスト４０がＣＰＵ７０を用いて障害ページ１６０中の正常データ７１０を読み出す場合には、ハイパバイザ２０が障害ページ１６０を読み出して応答する。（ｈ）の状態で、一部だけ上書きされたＰｏｉｓｏｎに対応する更新データ７２０を読み出す場合には、ハイパバイザ２０が仮置ページ１５０を読み出して応答する。
【０１３４】
図１０Ｃは、（ｉ）ゲスト４０がＰｏｉｓｏｎ７００の８バイト全体を上書きした後の状態を表す。図１０Ｃに示すように障害ページ１６０に含まれるＰｏｉｓｏｎ７００が、仮置ページ１５０に格納した更新データ７２０で上書きされる。
【０１３５】
キャッシュ障害の場合、メモリマップの遷移とページの状態とは（表４）に示すような対応となる。
【０１３６】
【表４】
0005574230.tif 000005
【０１３７】
初期状態ではメモリマップ（１）が適用されており、Ｐｏｉｓｏｎ７００を含む障害ページ１６０がゲストアドレス５００からアクセス可能になっている。この状態でゲスト４０がＰｏｉｓｏｎ７００を読み出すと、致命的エラーが発生してシステムが停止する。
【０１３８】
システム停止を避けるために、ハイパバイザ２０は、ＣＰＵ７０に対してメモリマップ（２）を適用し、ゲスト４０が動作している間、ＣＰＵ７０による障害ページ１６０のアクセスを禁止する。これによって、ゲスト４０が読み書きを行う直前で、障害処理部２２０が実行されるようになる。なお、Ｉ／Ｏデバイス６０に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ（１）が適用される。
【０１３９】
次に、ハイパバイザ２０が実行する障害処理の一例について、以下、フローチャートを参照しながら説明する。
【０１４０】
＜障害処理の概要＞
図１１は、本発明の実施形態のハイパバイザ２０が実行する障害処理の全体像を説明するフローチャートである。
【０１４１】
本フローチャートでは、障害検出などを契機としてハイパバイザ２０が呼び出されてから、ゲスト４０の動作を再開するまでの間の処理を記載する。なお、障害処理に関係する部分だけを詳細化しており、他の処理は全てＳ１０８０の中で実行される。
【０１４２】
ハイパバイザ２０は、ハイパバイザ２０自身の呼び出された原因をＣＰＵ７０から受け取り、当該原因が訂正不能障害の検出であるか否かを判定する（Ｓ１０００）。具体的には、呼び出された原因が、スクラビング中のメモリ障害検出であるか、または、ＷｒｉｔｅＢａｃｋ中のキャッシュ障害検出であるかが判定される。
【０１４３】
なお、スクラビング中のメモリ障害は、メモリ障害検出機能１０２によって検出され、また、ＷｒｉｔｅＢａｃｋ中のキャッシュ障害は、キャッシュ障害検出機能１０７によって検出される。
【０１４４】
ハイパバイザ２０が呼び出された原因が訂正不要障害の検出であると判定された場合、ハイパバイザ２０は、代替ページ１４０の割り当て、または、メモリ保護設定の変更など、キャッシュ１０５およびメモリ９０の障害が検出された時に必要な処理を実行し（Ｓ１０４０）、Ｓ１０８０に進む。Ｓ１０４０において実行される処理については、図１２を用いて後述する。
【０１４５】
ハイパバイザ２０が呼び出された原因が訂正不要障害の検出でないと判定された場合、ハイパバイザ２０は、ハイパバイザ２０自身が呼び出された原因が保護領域の読み出しであるか否かを判定する（Ｓ１０１０）。具体的には、呼び出された原因が、ゲスト４０による保護されたゲストメモリ３２０（障害ページ１６０を含む）の読み出しであるか否かが判定される。
【０１４６】
ハイパバイザ２０が呼び出された原因が保護領域の読み出しであると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００が読み出されたか否かの判定、または、仮想計算機３０への障害反映など、保護領域の読み出しに対応する処理を実行し（Ｓ１０５０）、Ｓ１０８０に進む。Ｓ１０５０において実行される処理については、図１４を用いて後述する。
【０１４７】
ハイパバイザ２０が呼び出された原因が保護領域の読み出しでないと判定された場合、ハイパバイザ２０は、ハイパバイザ２０が呼び出された原因が、保護領域への書き込みであるか否かを判定する（Ｓ１０２０）。具体的には、ゲスト４０による保護されたゲストメモリ３２０（障害ページ１６０を含む）への書き込みであるか否かが判定される。
【０１４８】
保護領域への書き込みであると判定された場合、ハイパバイザ２０は、メモリ保護の解除など、保護領域の書き込みに対応する処理を実行し（Ｓ１０６０）、Ｓ１０８０に進む。Ｓ１０６０において実行される処理については、図１６を用いて後述する。
【０１４９】
保護領域への書き込みでないと判定された場合、ハイパバイザ２０は、ハイパバイザ２０が呼び出された原因がＩ／Ｏデバイス６０による訂正不能障害の検出であるか否かを判定する（Ｓ１０３０）。
【０１５０】
なお、Ｉ／Ｏデバイス６０による訂正不能障害は、Ｉ／Ｏ障害検出機能１１０によって検出される。
【０１５１】
ハイパバイザ２０が呼び出された原因がＩ／Ｏデバイス６０による訂正不能障害の検出でないと判定された場合、ハイパバイザ２０は、Ｓ１０８０に進む。
【０１５２】
ハイパバイザ２０が呼び出された原因がＩ／Ｏデバイス６０による訂正不能障害の検出であると判定された場合、ハイパバイザ２０は、障害を検出したＩ／Ｏデバイスを割り当てた仮想計算機３０の特定、および仮想計算機３０への障害反映など、Ｉ／Ｏデバイス障害に対応する処理を実行し（Ｓ１０７０）、Ｓ１０８０に進む。Ｓ１０７０において実行される処理については、図１５を用いて後述する。
【０１５３】
ハイパバイザ２０は、障害処理とは無関係な通常処理を実行し、ゲスト４０を再開し（Ｓ１０８０）、処理を終了する。
【０１５４】
＜キャッシュおよびメモリ障害を検出した場合の処理＞
図１２は、本発明の実施形態のＳ１０４０において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【０１５５】
ハイパバイザ２０は、メモリ管理部２４０を用いて、ＣＰＵ７０からＰｏｉｓｏｎが生成された領域のメモリアドレスを受け取り、当該メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域、または、ハイパバイザ２０の領域であるか否かを判定する（Ｓ１１００）。
【０１５６】
メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域であると判定された場合、当該未使用領域の本Ｐｏｉｓｏｎによる影響は生じないため、ハイパバイザ２０は、処理を終了する。また、メモリアドレスの割当先がハイパバイザ２０の領域であると判定された場合、ハイパバイザ２０は、当該Ｐｏｉｓｏｎが読み出される前に上書きされることを期待して処理を終了する。
【０１５７】
メモリアドレスの割当先が未使用領域、または、ハイパバイザ２０の領域のいずれでもないと判定された場合、ハイパバイザ２０は、発生した障害に対して障害影響範囲の限定可否を判定する（Ｓ１１１０）。Ｓ１１１０において実行される処理については、図１３を用いて後述する。
【０１５８】
ハイパバイザ２０は、Ｓ１１１０における判定の結果に基づいて、発生した障害に対して障害影響範囲の限定が可能か否かを判定する（Ｓ１１２０）。
【０１５９】
発生した障害に対して障害影響範囲の限定が可能でないと判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎが生成されたメモリアドレスが割り当てられた仮想計算機３０に、障害の影響を反映させ（Ｓ１２１０）、処理を終了する。反映手段は、仮想計算機３０のシャットダウンでもよいし、ゲスト４０に対する障害割り込みの伝達でもよい。
【０１６０】
発生した障害に対して障害影響範囲の限定が可能であると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０にＰｏｉｓｏｎの範囲を登録する（Ｓ１１３０）。
【０１６１】
具体的には、ハイパバイザ２０は、障害の種類と仮想計算機のＩ／Ｏ割り当て構成とを障害タイプ４００に格納し、また、仮想計算機番号４１０、障害ページアドレス４３０のそれぞれに情報を格納する。また、Ｐｏｉｓｏｎビットマップ４６０に、Ｐｏｉｓｏｎが生成されたメモリアドレスのページ内オフセットと、Ｐｏｉｓｏｎの範囲とを格納し、消滅ビットマップ４７０をゼロクリアする。さらに、ハイパバイザ２０は、ＣＰＵ用メモリマップ・保護表２５０を参照して、障害ページアドレス４３０に対応するゲストアドレスを特定し、当該ゲストアドレスをゲストアドレス４２０に格納する。
【０１６２】
ハイパバイザ２０は、メモリ保護機能１０１の設定を変更することによって、ＣＰＵ７０に対する障害ページのメモリ保護を開始する（Ｓ１１４０）。具体的には、ＣＰＵ用メモリマップ・保護表２５０の対応するエントリのアクセス権５２０を「許可」から「禁止」に変更される。
【０１６３】
ハイパバイザ２０は、発生した障害がメモリ障害であるか否かを判定する（Ｓ１１５０）。すなわち、障害の種類によって処理が分岐する。
【０１６４】
キャッシュ障害であると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎに対するバイト単位の書き込みを一時的に蓄える仮置ページ１５０を、障害対応用メモリ１２０上に確保し（Ｓ１２００）、処理を終了する。具体的には、ハイパバイザ２０は、確保された仮置ページ１５０のアドレスを、Ｐｏｉｓｏｎ表２３０の仮置ページアドレス４５０に格納する。なお、障害ページ１６０の状態は、図１０Ａ〜図１０Ｃに示すように変化する。
【０１６５】
メモリ障害であると判定された場合、ハイパバイザ２０は、障害の起きたメモリ９０の代わりに使用する代替ページ１４０を、障害対応用メモリ１２０上に確保する（Ｓ１１６０）。ハイパバイザ２０は、確保された代替ページ１４０のアドレスを、Ｐｏｉｓｏｎ表２３０の代替ページアドレス４４０に格納する。
【０１６６】
ハイパバイザ２０は、仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であるか否かを判定する（Ｓ１１７０）。すなわち、障害の起きたメモリ９０が割り当てられる仮想計算機３０の構成別に処理が分岐する。
【０１６７】
障害が起きたメモリが割り当てられる仮想計算機が直接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、処理を終了する。なお、障害ページ１６０の状態は、図８Ａ〜図８Ｃに示すように変化する。
【０１６８】
障害が起きたメモリが割り当てられる仮想計算機が間接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、図９Ａに示すように障害ページ１６０に含まれる正常データ７１０を代替ページ１５０にマージし（Ｓ１１８０）、処理を終了する。なお、障害ページ１６０は、図９Ａ〜図９Ｃに示すように変化する。
【０１６９】
図１３は、本発明の実施形態のＳ１１１０において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【０１７０】
本実施形態では実装を簡単にするため、二重障害に類する障害について、ＦＡＬＳＥ  ＤＵＥの検出をあきらめ、障害検出の時点で仮想計算機３０の通常稼動を断念する。すなわち、二重障害等が発生した仮想計算機３０を停止させる。
【０１７１】
ハイパバイザ２０は、発生した障害がメモリ障害であるか否かを判定する（Ｓ１２２０）。すなわち、発生した障害の種類によって処理が分岐する。
【０１７２】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ２０は、さらに、障害が発生したメモリ９０が割り当てられる仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であるか否かを判定する（Ｓ１２３５）。すなわち、障害が発生したメモリ９０が割り当てられる仮想計算機３０の種類によって処理が分岐する。
【０１７３】
障害が発生したメモリ９０が割り当てられる仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、メモリ９０に発生したＰｏｉｓｏｎの数を確認し、２つ以上のＰｏｉｓｏｎを含むメモリ障害であるか否かを判定する（Ｓ１２４０）。
【０１７４】
２つ以上のＰｏｉｓｏｎを含むメモリ障害であると判定された場合、本実施形態ではＦＡＬＳＥ  ＤＵＥが検出されないため、ハイパバイザ２０は、障害影響範囲の限定不可と判定し（Ｓ１２６０）、処理を終了する。
【０１７５】
１つのＰｏｉｓｏｎだけを含むメモリ障害であると判定された場合、つまり、Ｐｏｉｓｏｎの領域サイズが８バイトの場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、既に障害ページ１６０と判定されているページに２つ目の障害が発生したか否かを判定する（Ｓ１２４５）。
【０１７６】
既に障害ページ１６０と判定されているページに２つ目の障害が発生していると判定された場合、ハイパバイザ２０は、Ｓ１２６０に進み、障害影響範囲の限定不可と判定して処理を終了する。
【０１７７】
Ｓ１２３５において、間接Ｉ／Ｏの仮想計算機３０と判定された場合、または、Ｓ１２４５において、既に障害ページ１６０と判定されているページに２つ目の障害が発生していないと判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、既に代替ページ１４０として設定されたページに更に障害が発生したか否かを判定する（Ｓ１２５０）。
【０１７８】
既に代替ページ１４０と判定されているページに更に障害が発生していると判定された場合、ハイパバイザ２０は、Ｓ１２６０に進み、障害影響範囲の限定不可と判定して処理を終了する。
【０１７９】
既に代替ページ１４０と判定されているページに更に障害が発生していないと判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、Ｐｏｉｓｏｎが発生したページに、先行するキャッシュ障害があるか否かを判定する（Ｓ１２７０）。
【０１８０】
Ｐｏｉｓｏｎが発生したページに、先行するキャッシュ障害があると判定された場合、ハイパバイザ２０は、Ｓ１２６０に進み、障害影響範囲の限定不可と判定して処理を終了する。
【０１８１】
Ｐｏｉｓｏｎが発生したページに、先行するキャッシュ障害がないと判定された場合、ハイパバイザ２０は、障害影響範囲の限定が可能であると判定し（Ｓ１２５５）、処理を終了する。
【０１８２】
Ｓ１２２０において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、既に仮置ページ１５０として設定されたページに更に障害が発生したか否かを判定する（Ｓ１２２５）。
【０１８３】
仮置ページ１５０として設定されたページに更に障害が発生したと判定された場合、ハイパバイザは、障害影響範囲の限定不可と判定し（Ｓ１２３０）、処理を終了する。
【０１８４】
仮置ページ１５０として設定されたページに更に障害が発生していないと判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、Ｐｏｉｓｏｎが発生したページに、先行するメモリ障害があるか否かを判定する（Ｓ１２６５）。
【０１８５】
Ｐｏｉｓｏｎが発生したページに、先行するメモリ障害があると判定された場合は、ハイパバイザ２０は、Ｓ１２３０に進み、障害影響範囲の限定不可と判定して処理を終了する。
【０１８６】
Ｐｏｉｓｏｎが発生したページに、先行するメモリ障害がないと判定された場合は、ハイパバイザ２０は、Ｓ１２５５に進み、障害影響範囲の限定が可能であると判定して処理を終了する。
【０１８７】
＜障害ページの読み出しに対応する処理＞
図１４は、本発明の実施形態のＳ１０５０において実行されるメモリ９０の保護領域の読み出しに対応する処理を説明するフローチャートである。
【０１８８】
ハイパバイザ２０は、ゲスト４０が更新データ７２０が上書きされていないＰｏｉｓｏｎ７００を読み出そうとしているか否かを判定する（Ｓ１４００）。
【０１８９】
具体的には、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、ゲスト４０が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Ｐｏｉｓｏｎビットマップ４６０が「１」で、消滅ビットマップ４７０が「０」であるバイトが読み出そうとしたメモリアドレスに含まれる場合、ハイパバイザ２０は、ゲスト４０が更新データ７２０が上書きされていないＰｏｉｓｏｎ７００を読み出そうとしていると判定する。
【０１９０】
ゲスト４０が更新データ７２０が上書きされていないＰｏｉｓｏｎ７００を読み出そうとしていると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００を読み出そうとしているゲスト４０が稼働する仮想計算機３０に、障害の影響を反映させ（Ｓ１４１０）、処理を終了する。反映手段は、仮想計算機のシャットダウンでもよいし、ゲスト４０に対する障害割り込みの伝達でもよい。
【０１９１】
ゲスト４０がＰｏｉｓｏｎ７００以外のデータ（正常データ７１０または更新データ７２０）を読み出そうとしていると判定された場合、ハイパバイザ２０は、発生した障害がメモリ障害であるか否かを判定する（Ｓ１４２０）。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、Ｐｏｉｓｏｎ７００以外のデータが格納されるページが異なるためである（図８Ａ〜図８Ｃ、図９Ａ〜図９Ｃおよび図１０Ａ〜図１０Ｃ参照）。
【０１９２】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ２０は、仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であるか否かを判定する（Ｓ１４３０）。すなわち、障害が発生したメモリ９０が割り当てられる仮想計算機３０の種類によって処理が分岐する。これは、直接Ｉ／Ｏの仮想計算機３０と間接Ｉ／Ｏの仮想計算機３０とでは、Ｐｏｉｓｏｎ７００以外のデータが格納されるページが異なるためである（図８Ａ〜図８Ｃ、図９Ａ〜図９Ｃ参照）。
【０１９３】
仮想計算機３０が間接Ｉ／Ｏの仮想計算機３０であると判定された場合、正常データ７１０と更新データ７２０との両方が代替ページ１４０に存在するため（図９Ａ〜図９Ｃ参照）、ハイパバイザ２０は、代替ページ１４０を読み出して応答し（Ｓ１４６０）、処理を終了する。
【０１９４】
仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎのうち上書きされたデータ（更新データ７２０）の読み出しであるか否かを判定する（Ｓ１４４０）。これは、直接Ｉ／Ｏの仮想計算機３０では、正常データ７１０と更新データ７２０とが別々のページに格納されるためである（図８Ａ〜図８Ｃ参照）。
【０１９５】
具体的には、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、ゲスト４０が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Ｐｏｉｓｏｎビットマップ４６０が「１」で、消滅ビットマップ４７０が「１」であるバイトが読みだされる場合、更新データ７２０の読み出しを意味するため、ハイパバイザ２０は、Ｐｏｉｓｏｎのうち上書きされたデータ（更新データ７２０）の読み出しであると判定する。
【０１９６】
Ｐｏｉｓｏｎのうち上書きされたデータ（更新データ７２０）の読み出しであると判定された場合、ハイパバイザ２０は、更新データ７２０が格納される代替ページ１４０を読み出して応答し（Ｓ１４５０）、処理を終了する。
【０１９７】
Ｐｏｉｓｏｎのうち上書きされたデータ（更新データ７２０）以外のデータ、すなわち、Ｐｏｉｓｏｎビットマップ４６０が「０」であるバイトが読み出される場合、正常データ７１０の読み出しを意味するため、ハイパバイザ２０は、直接Ｉ／Ｏの仮想計算機３０に対して正常データ７１０が格納される障害ページ１６０を読み出して応答し（Ｓ１４６０）、処理を終了する。
【０１９８】
Ｓ１４２０において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ２０は、仮置ページ１５０に一時的に格納される更新データ７２０の読み出しであるか否かを判定する（Ｓ１４７０）。これは、キャッシュ障害の場合、正常データ７１０と更新データ７２０とが別々のページに格納されるためである（図１０Ａ〜図１０Ｃ参照）。
【０１９９】
具体的には、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、ゲスト４０が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Ｐｏｉｓｏｎビットマップ４６０が「１」で、消滅ビットマップ４７０が「１」であるバイトが読みだされる場合に限り、更に当該アドレスを含む整列された８バイト（アドレス８ｎ〜８ｎ＋７）において、消滅ビットマップ４７０に「０」であるバイトが含まれているか否かを検査する。
【０２００】
当該条件を満たす場合には、仮置ページ１５０に一時的に格納される更新データ７２０の読み出しであると判定される。
【０２０１】
仮置ページ１５０に一時的に格納される更新データ７２０の読み出しでないと判定された場合、ハイパバイザ２０は、Ｓ１４６０に進み、直接Ｉ／Ｏの仮想計算機３０に対して正常データ７１０が格納される障害ページ１６０を読み出して応答し、処理を終了する。
【０２０２】
仮置ページ１５０に一時的に格納される更新データ７２０の読み出しであると判定された場合、ハイパバイザ２０は、仮置ページ１５０を読み出して応答し（Ｓ１４８０）、処理を終了する。
【０２０３】
仮置ページ１５０に一時的に格納される更新データ７２０の読み出しは、障害ページ１６０に格納される正常データ７１０または更新データ７２０の読み出しと判定され、ハイパバイザ２０は、直接Ｉ／Ｏの仮想計算機３０に対して正常データ７１０が格納される障害ページ１６０を読み出して応答する。
【０２０４】
＜Ｉ／Ｏ障害を検出した場合の処理＞
図１５は、本発明の実施形態のＳ１０７０において実行されるＩ／Ｏデバイス障害に対応する処理を説明するフローチャートである。
【０２０５】
ハイパバイザ２０は、Ｉ／Ｏデバイス６０から取得した障害情報を解析し、障害を検出したＩ／Ｏデバイス６０を特定する（Ｓ１３００）。
【０２０６】
Ｓ１３２０からＳ１３５０では、各仮想計算機３０について処理が繰り返し実行される。
【０２０７】
ハイパバイザ２０は、Ｉ／Ｏ割り当て表２００を参照し、障害を検出したＩ／Ｏデバイス６０が割り当てられていた仮想計算機３０であるか否かを判定する（Ｓ１３３０）。
【０２０８】
障害を検出したＩ／Ｏデバイス６０が割り当てられていた仮想計算機３０であると判定された場合、ハイパバイザ２０は、仮想計算機３０に障害の影響を反映させる。反映手段は、仮想計算機のシャットダウンでもよいし、ゲストに対する障害割り込みの伝達でもよい。
【０２０９】
障害を検出したＩ／Ｏデバイス６０が割り当てられていた仮想計算機３０でないと判定された場合、ハイパバイザ２０は、全ての仮想計算機について処理が完了したか否かを判定し、全ての仮想計算機について処理が完了した場合には処理を終了する。
【０２１０】
＜障害ページの書き込みに対応する処理＞
図１６は、本発明の実施形態のＳ１０６０において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【０２１１】
ハイパバイザ２０は、ゲスト４０がＰｏｉｓｏｎ７００に対してデータを書き込もうとしているか否かを判定する（Ｓ１５００）。すなわち、更新データ７２０の書き込みであるか否かが判定される。
【０２１２】
具体的には、ハイパバイザ２０は、Ｐｏｉｓｏｎ表２３０を参照し、ゲスト４０が書き込もうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Ｐｏｉｓｏｎビットマップ４６０が「１」で、消滅ビットマップ４７０が「０」であるバイトに書きこまれる場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００に対する書き込みと判定する。
【０２１３】
ゲスト４０がＰｏｉｓｏｎ７００に対してデータを書き込もうとしていると判定された場合、ハイパバイザ２０は、発生した障害がメモリ障害であるか否かを判定する（Ｓ１５１０）。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、更新データ７２０が格納されるページが異なるためである（図８Ａ〜図８Ｃ、図９Ａ〜図９Ｃおよび図１０Ａ〜図１０Ｃ参照）。
【０２１４】
発生した障害がキャッシュ障害であると判定された場合（図１０Ａ〜図１０Ｃ参照）、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００に対するバイト単位の更新を許容するために、ゲスト４０が書き込もうとした更新データ７２０を仮置ページ１５０に格納する（Ｓ１５２０）。
【０２１５】
ハイパバイザ２０は、ゲスト４０が書き込んだメモリアドレスの範囲について、Ｐｏｉｓｏｎ表２３０の消滅ビットマップ４７０を「１」に変更する（Ｓ１５３０）。
【０２１６】
ハイパバイザ２０は、Ｐｏｉｓｏｎ７００が消滅したか否かを判定する（Ｓ１５４０）。すなわち、Ｐｏｉｓｏｎ７００全てについて上書きがされたか否かを判定する。
【０２１７】
なお、Ｓ１５４０では、ページ内に複数のＰｏｉｓｏｎ７００が含まれる場合、一つ目のＰｏｉｓｏｎ７００が消滅すると、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００が消滅したと判定する。
【０２１８】
具体的には、ハイパバイザ２０は、消滅ビットマップ４７０を参照し、上書きされたＰｏｉｓｏｎ７００を構成していた８バイトについて１バイトずつ検査する。ゲスト４０からの書き込みによって、初めて８バイト全てが消滅（消滅ビットマップ４７０の該当ビットが全て「１」）した場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００が消滅したと判定する。
【０２１９】
Ｐｏｉｓｏｎ７００が消滅していないと判定された場合、ハイパバイザ２０は、処理を終了する。
【０２２０】
Ｐｏｉｓｏｎ７００が消滅したと判定された場合、ハイパバイザ２０は、消滅したＰｏｉｓｏｎについて、仮置ページ１５０に格納された更新データ７２０を、障害ページ１６０にコピーする（Ｓ１５５０）。これは、図１０Ｃに対応する処理である。
【０２２１】
ハイパバイザ２０は、ページ内の全Ｐｏｉｓｏｎ７００が消滅したか否かを判定する（Ｓ１５６０）。
【０２２２】
具体的には、ハイパバイザ２０は、Ｐｏｉｓｏｎビットマップ４６０と消滅ビットマップ４７０とを参照し、ページ全体について検査する。Ｐｏｉｓｏｎビットマップ４６０と消滅ビットマップ４７０とが一致する場合には、ページ内の全Ｐｏｉｓｏｎ７００がゲスト４０からの書き込みによって消滅したと判定される。
【０２２３】
ページ内の全Ｐｏｉｓｏｎ７００が消滅していないと判定された場合、ハイパバイザ２０は、処理を終了する。
【０２２４】
ページ内の全Ｐｏｉｓｏｎ７００が消滅したと判定された場合、ハイパバイザ２０は、メモリマップの変更またはメモリ保護の解除といった、障害処理を完了させるための処理を実行し（Ｓ１５７０）、処理を終了する。
【０２２５】
Ｓ１５１０において、発生した障害がメモリ障害であると判定された場合、ハイパバイザ２０は、Ｐｏｉｓｏｎ７００が含まれる信頼できないページへの書き込みを避けるために、ゲスト４０が書き込もうとした更新データ７２０を、代替ページ１４０に書き込む（Ｓ１５８０）。すなわち、メモリ障害の場合、直接Ｉ／Ｏの仮想計算機３０および間接Ｉ／Ｏの仮想計算機３０においては、更新データ７２０は代替ページ１４０に格納される（図８Ｂおよび図９Ｂ参照）。
【０２２６】
ハイパバイザ２０は、ゲスト４０が書き込んだメモリアドレスの範囲について、Ｐｏｉｓｏｎ表２３０の消滅ビットマップ４７０を「１」に変更し（Ｓ１５９０）、Ｓ１５６０に進む。
【０２２７】
Ｓ１５００において、ゲスト４０が正常データ７１０を書き込もうとしていると判定された場合、ハイパバイザは、発生した障害がメモリ障害であるか否かを判定する（Ｓ１６００）。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、正常データ７１０が書き込まれるページが異なるためである。
【０２２８】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ２０は、仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であるか否かを判定する（Ｓ１６１０）。すなわち、仮想計算機３０の種類によって処理が分岐する。これは、直接Ｉ／Ｏの仮想計算機３０と間接Ｉ／Ｏの仮想計算機３０とでは、正常データ７１０が格納されるページが異なるためである（図８Ａ〜図８Ｃ、図９Ａ〜図９Ｃ参照）。
【０２２９】
仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、ゲスト４０が書き込もうとした正常データ７１０を格納される障害ページ１６０に書き込み（Ｓ１６２０）、処理を終了する（図８Ａ〜図８Ｃ参照）。
【０２３０】
仮想計算機３０が間接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、代替ページ１４０にゲスト４０が書き込もうとした正常データ７１０を書き込み（Ｓ１６３０）、処理を終了する（図９Ａ〜図９Ｃ参照）。
【０２３１】
Ｓ１６００において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ２０は、Ｓ１６２０に進み、ゲスト４０が書き込もうとした正常データ７１０を障害ページ１６０に書き込み、処理を終了する（図１０Ａ〜図１０Ｃ参照）。
【０２３２】
図１７は、本発明の実施形態のＳ１５７０において実行される通常動作への復帰処理を説明するフローチャートである。
【０２３３】
ハイパバイザ２０は、発生した障害がメモリ障害であるか否かを判定する（Ｓ１７００）。すなわち、発生した障害の種類によって処理が分岐する。
【０２３４】
発生した障害がメモリ障害であると判定された場合、ハイパバイザは、仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であるか否かを判定する（Ｓ１７１０）。すなわち、仮想計算機３０の種類によって処理が分岐する。これは、障害の回復後のメモリマップが異なるためである（表２〜表４、図８Ｃ、図９Ｃおよび図１０Ｃ参照）。
【０２３５】
仮想計算機３０が直接Ｉ／Ｏの仮想計算機３０であると判定された場合、ハイパバイザ２０は、Ｓ１７２０〜Ｓ１７６０において、ＤＭＡ一時停止機能１１７を用いて、Ｉ／Ｏデバイス６０によるゲストメモリ３２０へのアクセスを一時的に止め、その間にメモリ９０上のデータおよびメモリマップ・保護表を変更する。
【０２３６】
具体的には、ハイパバイザ２０は、ＤＭＡ一時停止機能１１７を用いて、Ｉ／Ｏデバイス６０によるゲストメモリ３２０へのＤＭＡを一時停止させる（Ｓ１７２０）。
【０２３７】
ハイパバイザ２０は、障害ページ１６０に含まれる正常データ７１０を、代替ページ１４０にコピーする（Ｓ１７３０）。
【０２３８】
ハイパバイザ２０は、ＣＰＵ用メモリマップ・保護表２５０およびＩ／Ｏ用メモリマップ・保護表２６０の設定を変更し、障害ページ１６０の代わりに代替ページ１４０を割り当てる（Ｓ１７４０）。
【０２３９】
ハイパバイザ２０は、ＣＰＵ用メモリマップ・保護表２５０の設定を変更し、障害ページ１６０に対して適用されていた、アクセス禁止設定によるメモリ保護を解除する（Ｓ１７５０）。
【０２４０】
その後、ハイパバイザ２０は、ＤＭＡの停止を解除することによってＤＭＡを再開させ（Ｓ１７６０）、処理を終了する。
【０２４１】
Ｓ１７００において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ２０は、全Ｐｏｉｓｏｎの消滅に伴って不要となった仮置ページ１５０を解放する（Ｓ１７９０）。
【０２４２】
ハイパバイザ２０は、ＣＰＵ用メモリマップ・保護表２５０およびＩ／Ｏ用メモリマップ・保護表２６０の設定を変更し、障害ページ１６０の代わりに代替ページ１４０を割り当てる（Ｓ１７７０）。
【０２４３】
ハイパバイザ２０は、ＣＰＵ用メモリマップ・保護表２５０の設定を変更し、障害ページ１６０に対して適用されていた、アクセス禁止設定によるメモリ保護を解除し（Ｓ１７８０）、処理を終了する。
【０２４４】
＜まとめ＞
本発明の一形態によれば、ハイパバイザ２０は、ゲスト４０によるメモリの読み出しおよび書き込みを監視して、ゲスト４０がＰｏｉｓｏｎを読み出すＴＲＵＥ  ＤＵＥとＰｏｉｓｏｎを読み出さないＦＡＬＳＥ  ＤＵＥとを判別できる。また、ハイパバイザ２０は、ゲスト４０の実行を読み出しの直前で停止させるため、ＴＲＵＥ  ＤＵＥが確定した後もシステム停止を回避できる。更に、ゲストの書き込みによってＦＡＬＳＥ  ＤＵＥが確定した場合には、監視を解除してゲストの実行を再開できるため、ＶＭやアプリケーションの動作を継続できる。これらの効果によって、Ｐｏｉｓｏｎを読み出すとシステム停止を招くＸｅｏｎを用いて、障害の影響範囲を限定できる。
【符号の説明】
【０２４５】
１０  物理計算機
２０  ハイパバイザ
３０  仮想計算機
４０  ゲスト
６０  Ｉ／Ｏデバイス
７０  ＣＰＵ
８０  コンソール
９０  メモリ
１４０  代替ページ
１５０  仮置ページ
１６０  障害ページ
２００  Ｉ／Ｏ割り当て表
２２０  障害処理部
２３０  Ｐｏｉｓｏｎ表
２５０  ＣＰＵ用メモリマップ・保護表
２６０  Ｉ／Ｏ用メモリマップ・保護表
３２０  ゲストメモリ
７００  Ｐｏｉｓｏｎ
７１０  正常データ
７２０  更新データ
【図１】
0005574230.tif 000006
【図２】
0005574230.tif 000007
【図３】
0005574230.tif 000008
【図４】
0005574230.tif 000009
【図５Ａ】
0005574230.tif 000010
【図５Ｂ】
0005574230.tif 000011
【図６】
0005574230.tif 000012
【図７Ａ】
0005574230.tif 000013
【図７Ｂ】
0005574230.tif 000014
【図７Ｃ】
0005574230.tif 000015
【図８Ａ】
0005574230.tif 000016
【図８Ｂ】
0005574230.tif 000017
【図８Ｃ】
0005574230.tif 000018
【図９Ａ】
0005574230.tif 000019
【図９Ｂ】
0005574230.tif 000020
【図９Ｃ】
0005574230.tif 000021
【図１０Ａ】
0005574230.tif 000022
【図１０Ｂ】
0005574230.tif 000023
【図１０Ｃ】
0005574230.tif 000024
【図１１】
0005574230.tif 000025
【図１２】
0005574230.tif 000026
【図１３】
0005574230.tif 000027
【図１４】
0005574230.tif 000028
【図１５】
0005574230.tif 000029
【図１６】
0005574230.tif 000030
【図１７】
0005574230.tif 000031