(57)【特許請求の範囲】
【請求項１】
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、ともに実行される障害処理プログラムであって、
前記ＯＳとともに実行される処理により生じる障害を検出する手順と、
前記障害に関連するハードウェア資源を特定する手順と、
前記演算処理装置が前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する手順と、
を演算処理装置に実行させることを特徴とする障害処理プログラム。
【請求項２】
前記障害の重大度を判断する手順と、
前記重大度が所定の重大度より低い場合は、前記取得手順を行わないこと、を演算処理装置に実行させることを特徴とする請求項１に記載の障害処理プログラム。
【請求項３】
前記障害を生じたＯＳに対する、前記特定されたハードウェア資源の割り当ての変更を、前記管理プログラムを実行する演算処理装置に要求する手順、を演算処理装置に実行させることを特徴とする請求項１又は２に記載の障害処理プログラム。
【請求項４】
前記取得したハードウェア資源が、所定値以上である場合、前記要求手順を実行すること、を演算処理装置に実行させることを特徴とする請求項３に記載の障害処理プログラム。
【請求項５】
前記取得したハードウェア資源が、所定値未満の場合、前記特定したハードウェア資源と異なるハードウェア資源の状態を取得する手順と、を演算処理装置に実行させることを特徴とする請求項４に記載の障害処理プログラム。
【請求項６】
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、障害処理プログラムとを実行する情報処理装置を制御する方法であって、
前記情報処理装置の演算処理装置が、前記ＯＳとともに実行される処理により生じる障害を検出し、
前記演算処理装置が、前記障害に関連するハードウェア資源を特定し、
前記演算処理装置が、前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する、ことを特徴とする方法。
【請求項７】
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、障害処理プログラムとを実行する情報処理装置であって、
発生した障害と、取得すべきハードウェア資源の状態データとの対応関係を少なくとも記録したテーブル情報を記憶する主記憶装置と、
前記ＯＳとともに実行される処理により生じる障害を検出し、前記テーブル情報において前記障害に対応するハードウェア資源を特定し、前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する、演算処理装置と、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、障害処理プログラム、制御方法、及び情報処理装置に関する。
【背景技術】
【０００２】
コンピュータの仮想化が知られている。コンピュータの仮想化とは、コンピュータが仮想化ソフトウェアを実行することで、１台のコンピュータで複数のＯＳ（Ｏｐｅｒａｔｏｎｇ  Ｓｙｓｔｅｍ）の実行を可能にする技術である。
【０００３】
このような、コンピュータの仮想化は、仮想化ソフトウェアが、コンピュータのハードウェア資源であるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、ディスク装置への入出力をＯＳ毎に割り当てることによって実現される。例えば、仮想化ソフトウェアは、主記憶装置の記憶領域を割り当て、また、ＣＰＵの処理時間を各ＯＳに割り当てる。このように、仮想化ソフトウェアによって割り当てられたハードウェア資源を用いて動作するＯＳを「ゲストＯＳ」という。
【０００４】
また、仮想化ソフトウェアにより、１台のコンピュータで実行するゲストＯＳの数が増加しても、実際のコンピュータの台数は限定されている。そのため、仮想化ソフトウェアは、ゲストＯＳがハードウェア資源を直接制御することを許可しない。仮想化ソフトウェアは、ゲストＯＳからハードウェアに対するデータの入出力を受け取り、他のゲストＯＳとの競合を調停する処理を実行してから、受け取った情報を用いてハードウェアを制御する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−３１２１６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ゲストＯＳは、ハードウェア資源を制御することができないため、ゲストＯＳとともに実行される処理において障害が発生しても、障害発生時に生成される異常ログはハードウェア資源の状態を含まない。そのため、ゲストＯＳの障害原因を調べるために、ユーザが、仮想化ソフトウェアによりハードウェアに関する情報を取得して、取得したハードウェア情報と、異常ログとを用いてゲストＯＳの異常を分析していた。よって、障害発生から、障害原因の解明に時間がかかっていた。
【０００７】
１つの側面では、本発明は、ゲストＯＳ上の障害を分析するためのハードウェア資源の情報を取得することを目的とする。
【課題を解決するための手段】
【０００８】
情報処理装置のハードウェア資源を、ＯＳ毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、ともに実行される障害処理プログラムであって、ＯＳとともに実行される処理により生じる障害を検出する手順と、障害に関連するハードウェア資源を特定する手順と、演算処理装置が管理プログラムを実行して割り当てたハードウェア資源のうち、特定したハードウェア資源の状態を取得する手順と、を演算処理装置に実行させることを特徴とする障害処理プログラムが提供される。
【発明の効果】
【０００９】
１つの側面では、本発明は、ゲストＯＳ上の障害を分析するためのハードウェア資源の情報を取得するという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理装置の一例を示す図である。
【図２】図２は、演算処理部の一例を示す図である。
【図３】図３は、ゲストＯＳと仮想化ソフトウェアの機能構成の第１例を示す図である。
【図４】図４は、ゲストＯＳと仮想化ソフトウェアの機能構成の第２例を示す図である。
【図５】図５は、ゲストＯＳと仮想化ソフトウェアの機能構成の第３例を示す図である。
【図６】図６は、障害定義テーブルの一例を示す図である。
【図７】図７は、重大度定義テーブルの一例を示す図である。
【図８】図８は、参照テーブルの一例を示す図である。
【図９Ａ】図９Ａは、ハードウェアテーブルの一例を示す図である。
【図９Ｂ】図９Ｂは、ハードウェアテーブルの一例を示す図である。
【図９Ｃ】図９Ｃは、ハードウェアテーブルの一例を示す図である。
【図１０】図１０は、障害処理プログラムの処理の一例を示す図である。
【図１１】図１１は、エラー処理コードのソースプログラムの一例を示す図である。
【図１２】図１２は、ハードウェア資源の状態情報を取得する処理を規定するプログラムの一例を示す図である。
【図１３】図１３は、障害時アクションを要求する処理を規定するプログラムの一例を示す図である。
【図１４】図１４は、ホストＯＳが残すログ情報の一例を示す図である。
【図１５】図１５は、障害処理プログラムを実行する演算処理装置の処理の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、障害処理プログラム、制御方法、及び情報処理装置を説明する。
【００１２】
まず、情報処理装置を説明する。
【００１３】
［１  情報処理装置］
図１に示すように、情報処理装置５００は、演算処理装置５１０、主記憶装置５２０、通信部５３０、２次記憶装置５４０、ドライブ装置５５０、及びＩ／Ｏコントローラ５６０を有する。
【００１４】
図１に示すように、演算処理装置５１０は、演算処理部１０、Ｌ２（Ｌｅｖｅｌ  ２：２次）キャッシュコントローラ５１２、Ｌ２キャッシュメモリ（Ｌ２  Ｃａｃｈｅ  Ｍｅｍｏｒｙ）５１４、及びメモリアクセス制御部５１６を有する。また、演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介して、通信部５３０、２次記憶装置５４０、及びドライブ装置５５０に接続する。
【００１５】
［１．１  演算処理装置］
演算処理装置５１０は、主記憶装置５２０に記憶されたプログラムを実行することで、主記憶装置５２０からデータをロードし、ロードしたデータを演算して、主記憶装置５２０に演算結果をストアする。演算処理装置５１０は、例えば、ＣＰＵである。
【００１６】
メモリアクセス制御部５１６は、主記憶装置５２０からＬ２キャッシュメモリ５１４へのデータのロード、Ｌ２キャッシュコントローラ５１２から受け取ったデータの主記憶装置５２０へのストア動作等を行うユニットである。
【００１７】
Ｌ２キャッシュメモリ５１４は、主記憶装置５２０が記憶するデータの一部を保持する。また、Ｌ２キャッシュメモリ５１４は、演算処理部１０が有する後述の記憶部１１０が保持するデータを包含する。
【００１８】
Ｌ２キャッシュコントローラ５１２は、演算処理部１０からのアクセス頻度が高いデータをＬ２キャッシュメモリに格納し、アクセス頻度が低いデータをキャッシュメモリから主記憶装置５２０に追い出すように動作する。
【００１９】
［１．２  Ｉ／Ｏコントローラ］
Ｉ／Ｏコントローラ５６０は、演算処理装置５１０と、他の接続装置との接続を制御する装置である。Ｉ／Ｏコントローラ５６０は、例えば、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）又はＰＣＩ  Ｅｘｐｒｅｓｓ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などの規格に従って動作する。
【００２０】
［１．３  主記憶装置］
主記憶装置５２０は、データやプログラムを記憶する装置である。演算処理装置５１０は、Ｉ／Ｏコントローラ５６０を介することなく、主記憶装置５２０にアクセスすることができる。主記憶装置５２０は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００２１】
［１．４  ２次記憶装置］
２次記憶装置５４０は、電源供給が無くても情報を保持可能であり、主記憶装置５２０に格納されるプログラム及びデータを記憶する装置である。２次記憶装置５４０は、磁気ディスクを用いたディスクアレイ、又は、フラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。
【００２２】
［１．５  通信部］
通信部５３０は、通信経路としてのネットワーク１１００と接続し、ネットワーク１１００に接続された他の情報処理装置との間でデータを送受信する装置である。通信部５３０は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）である。
【００２３】
［１．６  ドライブ装置］
ドライブ装置５５０は、例えば、フロッピー（登録商標）ディスクやＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）などの記憶媒体５９０を読み書きする装置である。ドライブ装置５５０は、記憶媒体５９０を回転させるモータや記憶媒体５９０上でデータを読み書きするヘッド等を含む。なお、記憶媒体５９０は、プログラムを格納することができる。ドライブ装置５５０は、ドライブ装置５５０にセットされた記憶媒体５９０からプログラムを読み出す。演算処理装置５１０は、ドライブ装置５５０により読み出されたプログラムを、主記憶装置５２０又は２次記憶装置５４０に格納する。なお、記憶媒体５９０に記憶されるプログラム又はデータとは、例えば、図２を用いて後述するプログラム又はデータである。
【００２４】
入力部５７０は、入力信号を演算処理装置に出力する装置であり、例えば、キーボードやマウスである。出力部５８０は、演算処理装置から出力される出力信号を表示する装置であり、例えば、ディスプレイである。
【００２５】
次に、図２〜図１４を参照して、主記憶装置に記憶されるプログラム又はデータについて説明する。
【００２６】
［２  主記憶装置］
図２は、主記憶装置の一例を示す図である。主記憶装置５２０は、仮想化ソフトウェア９１０、ＯＳ９２０Ａ及び９２０Ｂ、障害定義テーブル９４０、重大度定義テーブル９５０、参照テーブル９６０、及びハードウェアテーブル９７０Ａ〜Ｃ、及びプログラム９９０Ａ及び９９０Ｂを記憶する。プログラム９９０Ａ及び９９０Ｂはそれぞれ、複数のエラー処理コード９３３ａ〜９３３ｎ、及び判断ロジック９３５を含む。
【００２７】
［３  プログラム］
図２に格納されるＯＳ９２０Ａ及び９２０Ｂ、及び、プログラム９９０Ａ及び９９０Ｂ等のプログラムは、演算処理装置５１０により実行されるプログラムである。そのため、これらのプログラム実行の主体は、演算処理装置５１０である。しかしながら、演算処理装置５１０が実行するプログラムを特定するために、「プログラムを実行する演算処理装置」と記載すると、説明が冗長になるため、以下の記載において、「プログラムを実行する演算処理装置」を、「プログラム」と略して説明する。例えば、「仮想化ソフトウェア９１０を実行する演算処理装置は、」と記載せず、「仮想化ソフトウェア９１０は、」と記載する。
【００２８】
仮想化ソフトウェア９１０は、１台の情報処理装置５００が複数のＯＳの実行を可能にするソフトウェアである。仮想化ソフトウェア９１０は、コンピュータのハードウェア資源であるＣＰＵ、メモリ、ディスク装置に対するＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）を、各ゲストＯＳに割り当てる。例えば、仮想化ソフトウェア９１０は、主記憶装置５２０の記憶領域を、各ゲストＯＳに割り当て、又は、演算処理装置５１０の処理時間を各ゲストＯＳに割り当て、又は、２次記憶装置５４０のＩ／Ｏを各ゲストＯＳに割り当てる。
【００２９】
また、仮想化ソフトウェア９１０は、ゲストＯＳからハードウェア資源に対するデータの入出力を受け取り、他のゲストＯＳとの競合を調停する処理を実行してから、受け取った情報を用いてハードウェア資源を使用する。仮想化ソフトウェア９１０は、後述する「ホストＯＳ」とともに、情報処理装置のハードウェア資源を、ＯＳ毎に割り当てる処理を、演算処理装置に実行させる管理プログラムである。
【００３０】
ＯＳ９２０Ａ及び９２０Ｂは、ゲストＯＳである。通常、ＯＳとは、キーボード入力や画面出力といった入出力機能やディスクやメモリの管理など、多くのアプリケーションから共通して利用される基本的な機能を提供し、ハードウェア資源全体を管理するソフトウェアである。しかしながら、上記のように、仮想化ソフトウェア９１０又は後述のホストＯＳが、情報処理装置５００のハードウェア資源に対する制御を管理し、ゲストＯＳであるＯＳ９２０Ａ及び９２０Ｂにハードウェア資源を割り当てる。よって、ＯＳ９２０Ａ及び９２０Ｂは、仮想化ソフトウェア９１０又は後述のホストＯＳによって割り当てられたハードウェア資源を管理するように動作する。なお、図２には、２つのＯＳ９２０Ａ及び９２０Ｂを示したが、ＯＳの数は「２」に限定されない。ＯＳ９２０Ａ及び９２０Ｂは、例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）  Ｓｅｒｖｅｒである。
【００３１】
障害定義テーブル９４０は、障害の種別を特定する障害種別と、障害種別と対応付けられた障害定義値とを含む情報である。なお、図６を用いて、障害定義テーブルの詳細例について後述する。
【００３２】
重大度定義テーブル９５０は、重大度と、重大度と対応付けられた、重大度定義値とを含む情報である。重大度とは、発生した障害の深刻さ（軽微、警告、致命的など）を示すための定義値である。なお、図７を用いて、重大度定義テーブルの詳細例について後述する。
【００３３】
障害定義テーブル９４０及び重大度定義テーブル９５０は、プログラム９９０の実行において呼び込まれる。そのため、エラー処理コード９３３ａ〜９３３ｎ、及び、判断ロジック９３５は、障害定義値及び重大度定義値を用いて、生じた障害の種別と重大度を認識する。
【００３４】
参照テーブル９６０は、障害種別と、障害発生時に、発生した障害に応じて参照すべきハードウェアテーブル９７０Ａ〜Ｃとの対応関係を示すテーブルである。なお、図８を用いて、参照テーブルの詳細例について後述する。
【００３５】
ハードウェアテーブル９７０Ａ〜Ｃは、障害発生時に、発生した障害に応じて取得すべきハードウェアの状態データと、状態データを呼び出す関数と、読み出した状態データと比較される状態データの正常値と、障害時アクションを特定する情報との対応関係を示す。ハードウェアテーブル９７０Ａ〜Ｃは、障害種別毎に用意される。図９Ａ〜図９Ｃを用いて、ハードウェアテーブルの詳細例について後述する。
【００３６】
プログラム９９０Ａ及び９９０Ｂは、ＯＳ９２０Ａ及び９２０Ｂとともにそれぞれ実行されるプログラムである。
【００３７】
プログラム９９０Ａ及び９９０Ｂは、文書の作成、数値計算など、ある特定の目的のために設計されたソフトウェアであるアプリケーションソフトウェア、又は、情報処理装置５００の各種ハードウェアとデータの入出力を行うプログラムであるデバイスドライバである。例えば、プログラム９９０Ａは、ドライブ装置５５０とデータの入出力を行うデバイスドライバであり、プログラム９９０Ｂは、通信部５３０とデータの入出力を行うデバイスドライバである。
【００３８】
プログラム９９０Ａ及び９９０Ｂは、ともに、同じ障害処理プログラム９３０を含む。障害処理プログラム９３０は、複数のエラー処理コード９３３ａ〜ｎ、及び、判断ロジック９３５を含む。なお、障害処理プログラム９３０の説明のために、プログラム９９０Ａを用いるが、障害処理プログラム９３０の説明は、プログラム９９０Ｂにも適用される。
【００３９】
エラー処理コード９３３ａ〜ｎは、プログラム９９０Ａにおいて、エラーが生じる可能性があるプログラムコードの演算結果を取得するように、当該プログラムコードの次に演算処理装置５１０に実行される位置に配置される。エラー処理コード９３３ａ〜ｎは、前に配置されるプログラムコードの演算結果が異常値である場合、異常値の演算結果を障害の発生と認識する。エラー処理コード９３３ａ〜ｎは、発生した障害に対応する障害定義値、及び、重大度定義値を、判断ロジック９３５に出力する。障害とは、例えば、ディスクＩ／Ｏエラー、メモリ不足などである。
【００４０】
なお、エラー処理コード９３３ａ〜ｎは、プログラム９９０内部で障害が発生するプログラムコードの全ての個所に配置してもよい。また、重大度定義値は、エラー処理コード９３３ａ〜ｎの前に配置されるプログラムコードの種別により実現される処理の内容や、プログラムコードのプログラム９９０内の配置位置により障害重大度を変わるように、障害重大度を生成する。そのため、プログラムコードが同じ種類であり同種の障害を発生する場合であっても、当該プログラムコードがプログラム９９０Ａにおいて異なる位置に配置される場合、エラー処理コードにより生成される障害重大度は異なる。
【００４１】
判断ロジック９３５は、障害定義値及び重大度定義値を受け取る。判断ロジック９３５は、重大度定義値が所定値より低い場合は、何も処理を行わない。重大度定義値が所定値より高い場合、判断ロジック９３５は、ハードウェアテーブル９７０Ａ〜９７０Ｃに定義された障害時アクションを実行することで、障害を分析する情報を取得する。なお、所定値とは、重大度のいずれかを示し、例えば、重大度が、「軽微」、「警告」、「重要」、「致命的」であり、この順番で障害の深刻さが増大する場合、例えば、所定値は、「警告」である。したがって、発生した障害の重大度が「警告」以上であれば、障害時アクションが実行され、発生した障害の重大度が「軽微」であれば、ハードウェア資源の状態情報の取得や、障害時アクションは実行されない。
【００４２】
このように、重大度が低いと、障害処理を行わないことで、判断ロジック９３５の実行による演算処理装置５１０の使用負荷を低下することができる。
【００４３】
［４  ゲストＯＳと仮想化ソフトウェアの機能構成］
図３は、ゲストＯＳと仮想化ソフトウェアの機能構成の第１例を示す図である。仮想化ソフトウェア９１０Ａは、ＯＳともに実行されるソフトウェアではなく、情報処理装置５００による通常のＯＳと異なる動作モードで実行されるソフトウェアである。特別な動作モードとは、例えば、Ｉｎｔｅｌ  ＶＴ（Ｉｎｔｅｌ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  Ｔｅｃｈｎｏｌｏｇｙ）や、ＡＭＤ−Ｖ（ＡＭＤ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）などにより実現される。
【００４４】
図４は、ゲストＯＳと仮想化ソフトウェアの機能構成の第２例を示す図である。ゲストＯＳ９２０Ａ及び９２０Ｂ、仮想化ソフトウェア９１０Ｂ、障害処理プログラム９３０Ａ及び９３０Ｂは、図３と同じように動作するので、説明を省略する。
【００４５】
ホストＯＳ９２０Ｃは、ゲストＯＳ９２０Ａ及び９２０Ｂを管理する特権を有する。なお、ホストＯＳ９２０Ｃは、情報処理装置５００のハードウェア資源にアクセスするためのデバイスドライバ等を有する。ゲストＯＳ９２０Ａ、９２０Ｂは、ホストＯＳ９２０Ｃが情報処理装置５００にアクセスするデバイスドライバに対してアクセスを依頼するデバイスドライバを有する。なお、図４に示す例では、仮想化ソフトウェア９１０Ｂ及びホストＯＳ９２０Ｃは、図２に図示した仮想化ソフトウェア９１０に相当する。
【００４６】
図５は、ゲストＯＳと仮想化ソフトウェアの機能構成の第３例を示す図である。ゲストＯＳ９２０Ａ、９２０Ｂ、９２０Ｄ、障害処理プログラム９３０Ａ及び９３０Ｂ及び９３０Ｃは、図３と同じように動作するので、説明を省略する。
【００４７】
ホストＯＳ９２０Ｅは、情報処理装置５００にインストールされるソフトウェアである。仮想化ソフトウェア９１０Ｃは、ホストＯＳ９２０Ｅのミドルウェアとして動作する。なお、図５に示す例では、仮想化ソフトウェア９１０Ｃ及びホストＯＳ９２０Ｅは、図２に図示した仮想化ソフトウェア９１０に相当する。
【００４８】
［５  テーブル］
図６は、障害定義テーブルの一例である。図６に示す障害定義テーブル９４０は、障害種別と、障害種別の定義値である障害定義値との対応関係を示すテーブルである。障害定義テーブル９４０は、障害種別列９４１と障害定義値列９４２とを有し、障害種別は障害種別列９４１に入力され、障害定義値は障害定義値列９４２に入力される。障害種別列９４１には、ディスクＩ／Ｏエラー（ＥＲＲＯＲ＿ＤＩＳＫ＿ＩＯ）、メモリエラー（ＥＲＲＯＲ＿ＮＯ＿ＭＥＭＯＲＹ）、処理時間タイムアウト（ＥＲＲＯＲ＿ＰＲＯＣＥＳＳ＿ＴＩＭＥＯＵＴ）、アクセス不可（ＥＲＲＯＲ＿ＡＣＣＥＳＳ＿ＤＥＮＹＥＤ）等の、障害種別を示す情報が入力される。障害定義値列９４２には、各障害種別に対応する障害定義値「１〜４」が、対応する障害種別と同じレコードに入力される。
【００４９】
なお、上記したように、演算処理装置５１０は、エラー処理コード９３３ａ〜ｎ、及び、判断ロジック９３５を実行時に、障害定義テーブル９４０を読み出している。そのため、判断ロジック９３５は、エラー処理コード９３３ａ〜ｎにより与えられた障害定義値により、障害種別を認識することができる。
【００５０】
図７は、重大度定義テーブルの一例を示す図である。図７に示す重大度定義テーブル９５０は、重大度と、重大度の定義値である重大度定義値との対応関係を示すテーブルである。重大度定義テーブル９５０は、重大度列９５１と重大度定義値列９５２とを有し、重大度は重大度列９５１に入力され、重大度定義値は重大度定義値列９５２に入力される。重大度列９５１には、軽微（ＳＥＶＥＲＩＴＹ＿  ＬＯＷ）、警告（ＳＥＶＥＲＩＴＹ＿ＷＡＲＮＩＮＧ）、重要（ＳＥＶＥＲＩＴＹ＿ＩＭＰＯＲＴＡＮＴ）、致命的（ＳＥＶＥＲＩＴＹ＿ＦＡＴＡＬ）等の、障害の重大度を示す情報が入力されている。重大度定義値列９５２には、重大度に対応する定義値「１０〜４０」が、対応する重大度と同じレコードに入力されている。
【００５１】
なお、上記したように、演算処理装置５１０は、エラー処理コード９３３ａ〜ｎ、及び、判断ロジック９３５を実行時に、重大度定義テーブル９５０を読み出している。そのため、判断ロジック９３５は、エラー処理コード９３３ａ〜ｎにより与えられた重大度定義値により、重大度を認識することができる。
【００５２】
図８は、参照テーブルの一例を示す図である。図８に示す参照テーブル９６０は、障害種別と、障害種別に応じて参照すべきハードウェアテーブルとの対応関係を示すテーブルである。参照テーブル９６０は、障害種別列９６１とハードウェアテーブル列９６２とを有し、障害種別列９６１には、障害種別が入力され、ハードウェアテーブル列９６２には、ハードウェアテーブル名称が入力される。障害種別列９６１には、ディスクＩ／Ｏエラー（ＥＲＲＯＲ＿ＤＩＳＫ＿ＩＯ）、メモリエラー（ＥＲＲＯＲ＿ＮＯ＿ＭＥＭＯＲＹ）、処理時間タイムアウト（ＥＲＲＯＲ＿ＰＲＯＣＥＳＳ＿ＴＩＭＥＯＵＴ）等の情報が入力される。ハードウェアテーブル列９６２には、障害種別に対応するハードウェアテーブル名「Ｄｉｓｋ  Ｉ／Ｏ  Ｅｒｒｏｒテーブル」、「Ｍｅｍｏｒｙテーブル」、「ＣＰＵテーブル」が、対応する障害種別と同じレコードに入力される。
【００５３】
判断ロジック９３５は、エラー処理コード９３３ａ〜ｎにより与えられた重大度が所定値以上の場合、参照テーブル９６０を参照して、エラー処理コード９３３ａ〜ｎにより与えられた障害種別に対応するハードウェアテーブルを取得することができる。
【００５４】
図９Ａ〜図９Ｃは、ハードウェアテーブルの一例を示す図である。図９Ａに示すハードウェアテーブルは、発生した障害を分析するために取得すべきハードウェアの状態データ、及び、障害時アクションを定義したテーブルである。判断ロジック９３５は、ハードウェアテーブル９７０Ａ〜９７０Ｃに定義されたデータを取得することで、障害を分析する情報を取得するとともに、障害時アクションを実行することで、障害の復旧を行うこともできる。
【００５５】
図９Ａに示すハードウェアテーブルは、２次記憶装置５４０のディスクＩ／Ｏエラーに関するハードウェアテーブル９７０Ａである。図９に示すハードウェアテーブル９７０Ａは、取得データと、取得データ用関数アドレスと、データ型と、正常値と、障害時アクションとの対応関係を示すテーブルである。
【００５６】
取得データとは、障害処理プログラム９３０が、障害を分析するために取得すべきデータである。取得データ用関数アドレスとは、取得データを取得するための関数が記憶される主記憶装置５２０のアドレスである。正常値は、取得データの正常値を示す。障害時アクションは、障害処理プログラム９３０がゲストＯＳ上の障害を分析するためのハードウェア資源の情報を取得する、または障害復旧するために実行するためのアクションである。なお、ハードウェアテーブル９７０Ａは、障害時アクションとして、関数の呼び出し等のアクション、又は、アクションを行うための指示情報として関数又はテーブルの位置を特定するアドレスを有する。
【００５７】
ハードウェアテーブル９７０Ａにおいて、取得データ、取得データ用関数アドレス、データ型、正常値、障害時アクションは、それぞれ、取得データ列９７１Ａ、取得データ用関数アドレス列９７２Ａ、データ型列９７３Ａ、正常値列９７４Ａ、障害時アクション列９７５Ａに入力される。
【００５８】
取得データ列９７１Ａには、障害処理プログラム９３０がゲストＯＳ又はホストＯＳから取得する情報が入力されている。例えば、取得データ列９７１Ａには、「データ転送量」、「書込バッファサイズ」等の、取得すべき情報種別が入力される。９７８Ａは、最終レコードである。
【００５９】
取得データ用関数アドレス列９７２Ａには、取得データ用関数アドレス「ＧｅｔＤｉｓｋＷｒｉｔｅＴｒａｎｓｆｅｒＳｉｚｅ関数のアドレス」、「ＡＡＡ関数のアドレス」・・・が、に入力される。
【００６０】
なお、関数アドレスとは、関数が格納されている主記憶装置５２０内のアドレスである。判断ロジック９３５は、関数アドレスにより特定される記憶領域から情報取得用関数を呼び出して、実行することで、取得データを取得する。
【００６１】
データ型列９７３Ａには、取得するデータに対応するデータ型「ＩＮＴ（整数）」、「ＵＬＯＮＧ（符号なし６４ｂｉｔ整数）」・・・が、入力される。正常値列９７４Ａには、取得データに対応する正常値「０」、「２５６バイト以上」・・・が、入力される。
【００６２】
データ型列９７３Ａには、関数アドレスから取得されるデータのデータ型が入力されている。正常値列９７４Ａには、取得した情報が正常値か否かを判断するための基準値／閾値が入力されている。
【００６３】
判断ロジック９３５は、収集した状態情報の値が正常値の範囲外である場合、障害時アクション列９７５Ａから関数アドレス及びテーブルアドレスの取得を実行する。障害時アクション列９７５Ａには、関数アドレス又はテーブルアドレスが登録されている。例えば、図９Ａに示される障害時アクション列９７５Ａには、「ＲｅｑｕｅｓｔＣｏｒｅＤｕｍｐ関数アドレス」、「Ｍｅｍｏｒｙテーブルアドレス」・・・が、当該関数で取得するデータと同じレコードに入力される。
【００６４】
障害時アクション列９７５Ａに格納されるデータが、関数アドレスの場合、判断ロジック９３５は、アクションリスト９３７（図１０で後述）に関数アドレスを登録する。また、判断ロジック９３５は、障害時アクション列９７５Ａに格納されるデータが、テーブルのアドレスの場合、変数９３８（図１０で後述）として保持する。
【００６５】
判断ロジック９３５は、あるレコードについて上記の処理を実行すると、次のレコードについて同様の処理を実行する。
【００６６】
例えば、取得した書き込みバッファサイズが２５６Ｂｙｔｅ未満の場合、判断ロジック９３５は、メモリテーブルアドレスを変数９３８として保持する。変数９３８として保持されたメモリテーブルアドレスは、ハードウェアテーブル９７０Ａの全レコードについて情報取得を終了すると、メモリテーブルとしてのハードウェアテーブル９７０Ｂを読み出す。
【００６７】
このようにして、最終レコードの処理を実行すると、判断ロジック９３５は、アクションリスト９３７又は変数９３８のアドレスを参照して、関数を実行、又はテーブルを読み出す。
【００６８】
レコード９７９Ａは、取得したデータの全てが、正常値範囲内であるか否かという条件に当てはらまない場合に参照されるレコードである。レコード９７９Ａに示すように、どの条件にも当てはまらない場合は、判断ロジック９３５は、ＣＰＵテーブルアドレスを、図１０において後述する変数９３８として保持し、ＣＰＵテーブルアドレスにより特定されるハードウェアテーブル９７０Ｃについて、ハードウェアテーブル９７０Ａについての同様の処理を行う。
【００６９】
このように、判断ロジック９３５は、取得データ列９７１Ａのデータを取得すると、取得データが、正常値列９７４Ａの正常値の範囲内か否かを判断し、取得データが正常値の範囲内で無い場合は、障害時アクション列９７５Ａの障害時アクションを保持する。判断ロジック９３５は、取得データが正常値の範囲内の場合は、障害時アクションは保持されないので、何も実行しない。取得データが正常値の範囲外のときのみ、保持した障害時アクションを実行することで、ハードウェア資源の割り当て変更が頻繁に生じる処理を回避することが出来る。
【００７０】
図９Ｂに示すメモリテーブルとしてのハードウェアテーブル９７０Ｂは、取得データ列９７１Ｂ、取得データ用関数アドレス列９７２Ｂ、データ型列９７３Ｂ、正常値列９７４Ｂ、及び障害時アクション９７５Ｂを有する。これらの列に入力されるデータは、これらの列と対応するハードウェアテーブル９７０Ａの列の説明と同様に取り扱われるので、これらの列についての説明は省略する。
【００７１】
取得データ列９７１Ｂには、「ゲストの物理メモリ量」、「ＮｏｎＰａｇｅｄＰｏｏｌの空きサイズ」等の情報種別が入力される。「ゲストの物理メモリ量」とは、ゲストＯＳに割り当てられる主記憶装置の記憶容量である。９７８Ｂは、最終レコードである。
【００７２】
なお、ＮｏｎＰａｇｅｄＰｏｏｌのとは、ゲストＯＳ９２０が管理しているメモリの記憶領域のうち、ハードディスクにスワップしない記憶領域をいい、ＣＰＵからのメモリアクセスの遅延が許されないデータが、ＮｏｎＰａｇｅｄＰｏｏｌに記憶される。「ＮｏｎＰａｇｅｄＰｏｏｌの空きサイズ」とは、ＮｏｎＰａｇｅｄＰｏｏｌにおいて空いている記憶領域をいう。
【００７３】
取得データ用関数アドレス列９７２Ｂには、取得データ用関数アドレス「ＧｅｔＶＭＰｈｙｓｉｃａｌＭｅｍｏｒｙＳｉｚｅ関数の戻り値」、「ＣＣＣ変数の参照」・・・が、当該関数で取得するデータと同じレコードに入力される。データ型列９７３Ａには、取得するデータに対応するデータ型「ＵＬＯＮＧＬＯＮＧ」・・・が、入力される。正常値列９７４Ａには、取得したデータに対応する正常値「ＸＭＢ（メガバイト）以上」、「ＹＭＢ（メガバイト）以上」・・・が、入力される。障害時アクション列９７５Ａには、「ＲｅｑｕｅｓｔＣｈａｎｇｅＭｅｍｏｒｙＳｉｚｅ呼び出し（次回起動時のみ一時的に物理メモリを増やす処理）」、「ＲｅｑｕｅｓｔＣｏｒｅＤｕｍｐ関数アドレス」・・・が、入力される。
【００７４】
「ＲｅｑｕｅｓｔＣｈａｎｇｅＭｅｍｏｒｙＳｉｚｅ呼び出し（次回起動時のみ一時的に物理メモリを増やす処理）」とは、例えば、ゲストＯＳが次回起動したときに割り当てられる物理メモリ量を１次的に増やすことである。例えば、物理メモリ１ＧＢ（ＧｉｇａＢｙｔｅ）でゲストＯＳが実行されている場合、障害が生じて、上記異常時アクションが実行されることで、次回のゲストＯＳ起動時には、１．５ＧＢの物理メモリがゲストＯＳに割り当てられる。当該割り当ての変更は、ログ９９４（図１０を用いて後述）に保存されて、障害原因判断に利用される。例えば、物理メモリの割り当てが１．５ＧＢになったことで、障害を生じたゲストＯＳに障害が生じない場合、情報処理装置５００の管理者は、当該ゲストＯＳの物理メモリの割り当てを１．５ＧＢに設定しなおすことで、障害の再発を回避できる。また、１次的に増やすことなので、ゲストＯＳが再度起動する時には、ゲストＯＳに割り当てられる物理メモリは、１．５ＧＢから１ＧＢに戻される。このようにすることで、障害が生じる度に、障害を生じたゲストＯＳへの物理メモリの割り当てが累積的に増加することを防ぐことが出来る。
【００７５】
レコード９７９Ｂは、取得したデータの全てが、正常値範囲内であるか否かという条件に当てはらまない場合に参照されるレコードである。図９Ｂには図示しないが、レコード９７９Ｂの障害時アクションとして参照される他のハードウェアテーブルのアドレスを入力してもよい。
【００７６】
図９Ｃに示すＣＰＵテーブルとしてのハードウェアテーブル９７０Ｃは、取得データ列９７１Ｃ、取得データ用関数アドレス列９７２Ｃ、データ型列９７３Ｃ、正常値列９７４Ｃ、及び障害時アクション列９７５Ｃを有する。これらの列に入力されるデータは、これらの列と対応するハードウェアテーブル９７０Ａの列と同じ理由により使用されるため、これらの列についての説明は省略する。９７８Ｃは、最終レコードである。
【００７７】
取得データ列９７１Ｃには、「仮想ＣＰＵ使用率」、「仮想ＣＰＵで実行されている命令のサンプリング」等の情報種別が入力される。なお、仮想ＣＰＵとは、ゲストＯＳを実行するＣＰＵをいう。取得データ用関数アドレス列９７２Ｃには、取得データ用関数アドレス「ＧｅｔＣｐｕＵｓａｇｅ関数の戻り値」、「ＦＦＦ関数の戻り値」・・・が、入力される。データ型列９７３Ｃには、取得するデータに対応するデータ型「ＦＬＯＡＴ（３２ビットの浮動小数）」、「ＵＬＯＮＧ」・・・が、入力される。正常値列９７４Ｃには、正常値「９０％以下」、「０」・・・が、入力される。障害時アクション列９７５Ｃには、「ＲｅｑｕｅｓｔＣｈａｎｇｅＣｐｕＲａｔｅの呼び出し（次回起動時のみ、一時的に仮想ＣＰＵの優先度を上げる）」、「ＩＩＩ関数のアドレス（仮想ＣＰＵ命令のサンプリング結果を保存する）」・・・が、入力される。
【００７８】
「ＲｅｑｕｅｓｔＣｈａｎｇｅＣｐｕＲａｔｅの呼び出し（次回起動時のみ、一時的に仮想ＣＰＵの優先度を上げる）」とは、例えば、ゲストＯＳが次回起動したときに割り当てられるＣＰＵの優先度を１次的に増やすことである。例えば、ＣＰＵの使用率１０％でゲストＯＳが実行されている場合、障害が生じて、上記異常時アクションが実行されることで、次回のゲストＯＳ起動時には、ＣＰＵの使用率２０％がゲストＯＳに割り当てられる。当該割り当ての変更は、ログ９９４に保存されて、障害原因判断に利用される。例えば、ＣＰＵ使用率が２０％になったことで、障害を生じたゲストＯＳに障害が生じない場合、情報処理装置５００の管理者は、当該ゲストＯＳのＣＰＵ使用率を２０％に設定しなおすことで、障害の再発を回避できる。また、当該異常時アクションは、ＣＰＵ使用率を１次的に増やすことなので、ゲストＯＳが再度起動する時には、ゲストＯＳに割り当てられるＣＰＵ使用率は、２０％から１０％に戻される。このようにすることで、障害が生じる度に、障害を生じたゲストＯＳへのＣＰＵ使用率の増加が累積的に生じることを防ぐことが出来る。
【００７９】
上記のように、障害処理プログラム９３０からの障害とハードウェア資源とを対応付けるハードウェアテーブルにより、人的な判断や、ソースコードにより記述することなく、障害に関連するハードウェア資源が特定される。
【００８０】
レコード９７９Ｃは、取得したデータの全てが、正常値範囲内であるか否かという条件に当てはらまない場合に参照されるレコードである。図９Ｃには図示しないが、レコード９７９Ｃの障害時アクションとして参照される他のハードウェアテーブルのアドレスを入力してもよい。
【００８１】
［６  障害処理プログラム］
図１０は、障害処理プログラムの処理の一例を示す図である。図１０に示すＳ１〜Ｓ８は、判断ロジック９３５と、ゲストＯＳ、仮想化ソフトウェア、各種テーブルとの間のデータの入出力を示す。
【００８２】
エラー処理コード９３３ａ〜ｎのうち、エラー処理コード９３３ａは、演算結果が異常値である場合、障害の発生を認識する。エラー処理コード９３３ａは、発生した障害に対応する障害定義値、及び、重大度定義値を、判断ロジック９３５に出力する（Ｓ１）。
【００８３】
判断ロジック９３５は、障害定義値及び重大度定義値を受け取ると、障害定義テーブル９４０、重大度定義テーブル９５０を参照して、障害定義値及び重大度定義値にそれぞれ対応する障害種別と、重大度とを認識する（Ｓ２）。判断ロジック９３５は、重大度定義値が所定値より低い場合は、何も処理を行わない。重大度定義値が所定値より高い場合、判断ロジック９３５は、参照テーブル９６０を参照して（Ｓ３）、障害種別に対応するハードウェアテーブル９７０Ａ〜Ｃの何れかを決定する（Ｓ４）。
【００８４】
判断ロジック９３５は、決定したハードウェアテーブル内のレコードを１つ読み込み（Ｓ５）、発生した障害に応じて取得すべきハードウェアの状態を呼び出す関数を取得して、関数によりハードウェアの状態データを取得する（Ｓ６）。なお、当該取得したデータを、ゲストＯＳ９２０Ａ上のログ９９４に記憶してもよい。
【００８５】
判断ロジック９３５は、取得したハードウェアの状態データが、ハードウェアテーブルのレコードで定義されている正常値の範囲内にあるかを確認し、正常値の範囲外である場合、レコードで定義されている異常時のアクションを確認する。
【００８６】
判断ロジック９３５は、異常時のアクションが仮想化ソフトウェア９１０への操作依頼であれば、アクションを保存するアクションリスト９３７にそのアクション（関数のアドレス）を追加する（Ｓ７）。判断ロジック９３５は、異常時のアクションが他のハードウェアテーブルの参照であれば、ハードウェアテーブルのアドレスを、変数９３８として保存する（Ｓ８）。
【００８７】
判断ロジック９３５は、ハードウェアテーブル内の他のレコードを読み込み、上記したようにハードウェア状態の収集や、障害時アクションの確認等を繰り返す。また、判断ロジック９３５は、他にハードウェアテーブルがあれば、他のハードウェアテーブルのレコードを読み込み、ハードウェア状態の収集や、障害時アクションの確認を繰り返す。
【００８８】
判断ロジック９３５は、アクションリスト９３７に追加されたアクション（例えば、関数呼び出し）を１つずつ実行して、仮想化ソフトウェア９１０へ作業依頼を行う（Ｓ９）。仮想化ソフトウェア９１０に依頼した操作が成功した場合、仮想化ソフトウェア９１０は、取得したハードウェアの状態データを２次記憶装置５４０に記録する（Ｓ１０）。また、仮想化ソフトウェア９１０に依頼した操作が失敗した場合、判断ロジック９３５は、取得したハードウェアの状態データをゲストＯＳ９２０Ａ上のログ９９５に記録する（Ｓ１１）。
【００８９】
情報処理装置５００の管理者が、２次記憶装置５４０に記録されたハードウェア状態データを分析することで、ゲストＯＳの異常を、ハードウェアの状態と関係付けて判断することができるため、ゲストＯＳの異常原因により、ゲストＯＳに対するハードウェア資源の割り当て設定を変更する等の対応をとることができる。例えば、障害時アクションがメモリの割り当てを変更した場合、その変更されたメモリ割り当てを、障害を発生したゲストＯＳのメモリ割り当て量とする対応をとることができる。
【００９０】
また、仮想化ソフトウェア９１０に依頼した操作が失敗する場合とは、例えば、メモリの割り当てを変更する異常時アクションが、割り当て可能な記憶容量が無いために実行できなかったような場合である。そのため、情報処理装置５００の管理者は、ログ９５５を分析することで、メモリを増設する等の対応を情報処理装置５００に対してとることができる。
【００９１】
図１１は、エラー処理コードのソースプログラムの一例である。図１１に示すプログラム９８２に示されるように、ゲストＯＳで実行されるエラー処理コード９３３ａ〜ｎは、判断ロジック９３５を呼び出すための関数「ＣｏｌｌｅｃｔＤｅｂｕｇＩｎｆｏ」に示されるように、障害定義情報であるメモリエラー（ＥＲＲＯＲ＿ＮＯ＿ＭＥＭＯＲＹ）と、重大度である重要（ＳＥＶＥＲＩＴＹ＿ＩＭＰＯＲＴＡＮＴ）を引数として、判断ロジック９３５を呼び出す。
【００９２】
図１２は、ハードウェア資源の状態情報を取得する処理を規定するプログラムの一例である。なお、図１２に示すプログラムは障害処理プログラム９３０の一部である。図１２に示すプログラムは、Ｈｙｐｅｒｃａｌｌを用いた例であるが、当該実施例は、Ｈｙｐｅｒｃａｌｌの使用に限定されない。９３１Ａは、ホストの情報（Ｄｉｓｋの書き込み転送量情報）を取得する関数である。９３１Ｂは、ホストの情報（ゲストの物理メモリ量）を取得する関数である。９３１Ｃは、ホストの情報（ゲストのＣＰＵ使用率）を取得する関数である。
【００９３】
９３１Ｄは、ゲスト上のハードディスクの数を取得する関数である。ゲスト上のハードディスクの数とは、仮想化ソフトウェアが、ゲストＯＳのために割り当てているハードディスクの数である。
【００９４】
図１２に示すように、障害処理プログラム９３０は、ゲストＯＳからハードウェア資源の状態情報を取得することができる。
【００９５】
図１３は、障害時アクションを要求する処理を規定するプログラムの一例である。なお、図１３に示すプログラムは障害処理プログラム９３０の一部である。図１３に示すプログラムは、Ｈｙｐｅｒｃａｌｌを用いた例であるが、当該実施例は、Ｈｙｐｅｒｃａｌｌの使用に限定されない。９３２Ａは、ゲストの物理メモリの中身をファイルに書き出させる関数である。
【００９６】
９３２Ｂは、ゲストのメモリ量を変更させる関数である。９３２Ｃは、ゲストＯＳのＣＰＵ優先度を上げる関数である。９３２Ｂの「ＣＨＡＮＧＥ＿ＣＰＵ＿ＲＡＴＥ」とは、ＣＰＵの使用率に対して、ゲストＯＳが割り当てられている使用率である。このように、ゲストＯＳに割り当てられているＣＰＵ使用率を変えることで、ＣＰＵの優先度を上げることが出来る。
【００９７】
図１３に示すように、障害処理プログラム９３０は、ゲストＯＳから障害時アクションを要求することができる。
【００９８】
図１４は、ホストＯＳが残すハードウェアの状態データの一例である。ホストＯＳは、障害時アクションを行うと、ハードウェアの状態データを報処理装置５００の２次記憶装置５４０にハードウェアの状態データを記録する。従来、ゲストＯＳに障害が生じた場合、ハードウェア資源とは関係付けられていないログ情報がゲストＯＳに記憶されていた。しかし、本実施形態では、ホストＯＳ側が、障害処理プログラム９３０の指示により障害対応をすることで、ゲストＯＳ側の障害とハードウェア資源との関係を明記したハードウェアの状態データが残される。このようなハードウェアの状態データは、ゲストＯＳの異常とハードウェアとの関係の理解ならびにゲストＯＳのリソース割り当ての適正化などに利用される。
【００９９】
次に、図１５を参照して、障害処理プログラムによる処理について説明する。
図１５は、障害処理プログラムを実行する演算処理装置の処理の一例を示す図である。以下に示す処理は、演算処理装置５１０が障害処理プログラム９３０としてのエラー処理コード９３３及び判断ロジック９３５を実行することで、行われる。なお、説明が冗長になるため、以下の記載において、「エラー処理コード９３３を実行する演算処理装置５１０」を、「エラー処理コード９３３」と、「判断ロジック９３５を実行する演算処理装置５１０」を、「判断ロジック」と略して説明する。
【０１００】
エラー処理コード９３３は、障害を検出すると、発生した障害に対応する障害定義値、及び、重大度定義値を、判断ロジック９３５に出力する（Ｓ１００１）。判断ロジック９３５は、重大度が所定値以上か否か判断する（Ｓ１００２）。所定値とは、例えば、図７に示す「警告（ＳＥＶＥＲＩＴＹ＿ＷＡＲＮＩＮＧ）」である。重大度が所定値以上である場合（Ｓ１００３  Ｙｅｓ）、判断ロジック９３５は、参照テーブル９６０を参照して、障害定義値に対応するハードウェアテーブル９７０Ａ〜９７０Ｃを取得する（Ｓ１００４）。重大度が所定値以上で無い場合（Ｓ１００３  Ｙｅｓ）、判断ロジック９３５は、処理を終了する。
【０１０１】
判断ロジック９３５は、ハードウェアテーブル内のレコードを取得する（Ｓ１００４）。判断ロジック９３５は、取得するデータを、取得データ用関数アドレスにより特定される関数により取得する（Ｓ１００５）。判断ロジック９３５は、データが取得できない場合は（Ｓ１００６  Ｎｏ）、ハードウェアテーブルの次のレコードについてステップＳ１００４を実行する。判断ロジック９３５は、データが取得できた場合は（Ｓ１００６  Ｙｅｓ）、取得したデータと同レコード内で定義された正常値を比較する（Ｓ１００７）。取得したデータが正常値である場合（Ｓ１００８  Ｙｅｓ）、判断ロジック９３５は、ハードウェアテーブルの次のレコードについてステップＳ１００４を実行する。
【０１０２】
取得したデータが正常値で無い場合（Ｓ１００８  Ｎｏ）、判断ロジック９３５は、ホストへのアクション依頼か否かを確認する（Ｓ１００９）。障害時アクションがホストへのアクションである場合（Ｓ１０１０  Ｙｅｓ）、判断ロジック９３５は、障害時アクションをアクションリストへ追加する（Ｓ１０１１）。障害時アクションがホストへのアクションで無い場合（Ｓ１０１０  Ｎｏ）、判断ロジック９３５は、参照するテーブルのアドレスを変数として保存する（Ｓ１０１２）。
【０１０３】
判断ロジック９３５は、ハードウェアテーブルにレコードが残っている場合（Ｓ１０１３  Ｙｅｓ）、次のレコードについて、ステップＳ１００４を実行する。判断ロジック９３５は、ハードウェアテーブルにレコードが残って無い場合（Ｓ１０１３  Ｎｏ）、保存したテーブルのアドレスを確認する（Ｓ１０１４）。
【０１０４】
判断ロジック９３５は、保存したテーブルがある場合（Ｓ１０１５  Ｙｅｓ）、ステップＳ１００３を実行する。判断ロジック９３５は、保存したテーブルが無い場合（Ｓ１０１５  Ｎｏ）、アクションのリストに追加されている障害時アクションを１つずつ実行する（Ｓ１０１６）。判断ロジック９３５は、障害時アクションの実行に成功した場合（Ｓ１０１７  Ｙｅｓ）、実行結果のログ９９４を、ゲストＯＳ９２０Ａ又は９２０Ｂに保存して、処理を終了する。判断ロジック９３５は、障害時アクションの実行に失敗した場合（Ｓ１０１７  Ｎｏ）、失敗した結果のログ９９５をゲストＯＳ９２０Ａ又は９２０Ｂのログに保存して、処理を終了する。
【０１０５】
以上の実施形態に関し、更に以下の付記を開示する。
［付記１］
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、ともに実行される障害処理プログラムであって、
前記ＯＳとともに実行される処理により生じる障害を検出する手順と、
前記障害に関連するハードウェア資源を特定する手順と、
前記演算処理装置が前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する手順と、
を演算処理装置に実行させることを特徴とする障害処理プログラム。
［付記２］
前記障害を生じたＯＳに対する、前記特定されたハードウェア資源の割り当ての変更を、前記管理プログラムを実行する演算処理装置に要求する手順、を演算処理装置に実行させることを特徴とする付記１に記載の障害処理プログラム。
［付記３］
前記障害の重大度を判断する手順と、
前記重大度が所定の重大度より低い場合は、前記取得手順を行わないこと、を演算処理装置に実行させることを特徴とする付記１又は２に記載の障害処理プログラム。
［付記４］
前記取得したハードウェア資源が、所定値以上である場合、前記要求手順を実行すること、を演算処理装置に実行させることを特徴とする付記３に記載の障害処理プログラム。
［付記５］
前記取得したハードウェア資源が、所定値未満の場合、前記特定したハードウェア資源と異なるハードウェア資源の状態を取得する手順と、を演算処理装置に実行させることを特徴とする付記４に記載の障害処理プログラム。
［付記６］
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、障害処理プログラムとを実行する情報処理装置を制御する方法であって、
前記情報処理装置の演算処理装置が、前記ＯＳとともに実行される処理により生じる障害を検出し、
前記演算処理装置が、前記障害に関連するハードウェア資源を特定し、
前記演算処理装置が、前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する、ことを特徴とする方法。
［付記７］
前記演算処理装置が、前記障害を生じたＯＳに対する、前記特定されたハードウェア資源の割り当ての変更を、前記管理プログラムを実行して要求することを特徴とする付記６に記載の方法。
［付記８］
前記演算処理装置が、前記障害の重大度を判断し、
前記重大度が所定の重大度より低い場合は、前記演算処理装置は、前記取得手順を行わないことを特徴とする付記６又は７に記載の方法。
［付記９］
前記演算処理装置が、前記取得したハードウェア資源が、所定値以上である場合、前記要求手順を実行することを特徴とする付記８に記載の方法。
［付記１０］
前記取得したハードウェア資源が、所定値未満の場合、前記演算処理装置が、前記特定したハードウェア資源と異なるハードウェア資源の状態を取得することを特徴とする付記８に記載の方法。
［付記１１］
情報処理装置のハードウェア資源を、オペレーティングシステム（ＯＳ）毎に割り当てる処理を、演算処理装置に実行させる管理プログラムと、前記割り当てられたハードウェア資源に処理を行わせる少なくとも１つのＯＳと、障害処理プログラムとを実行する情報処理装置であって、
発生した障害と、取得すべきハードウェア資源の状態データとの対応関係を少なくとも記録したテーブル情報を記憶する主記憶装置と、
前記ＯＳとともに実行される処理により生じる障害を検出し、前記テーブル情報において前記障害に対応するハードウェア資源を特定し、前記管理プログラムを実行して割り当てたハードウェア資源のうち、前記特定したハードウェア資源の状態を取得する、演算処理装置と、
を有することを特徴とする情報処理装置。
［付記１２］
前記演算処理装置は、前記障害を生じたＯＳに対する、前記特定されたハードウェア資源の割り当ての変更を、前記管理プログラムを実行する演算処理装置に要求することを特徴とする付記１１に記載の情報処理装置。
［付記１３］
前記演算処理装置は、前記障害の重大度を判断し、前記重大度が所定の重大度より低い場合は、前記取得手順を行わないことを特徴とする付記１１又は１２に記載の情報処理装置。
［付記１４］
前記取得したハードウェア資源が、所定値以上である場合、前記演算処理装置は、前記要求手順を実行することを特徴とする付記１３に記載の情報処理装置。
［付記１５］
前記取得したハードウェア資源が、所定値未満の場合、前記演算処理装置は、前記特定したハードウェア資源と異なるハードウェア資源の状態を取得することを特徴とする付記１４に記載の情報処理装置。
【符号の説明】
【０１０６】
１０    演算処理部
１１０    記憶部
５００    情報処理装置
５１０    演算処理装置
５１２    Ｌ２キャッシュコントローラ
５１４    Ｌ２キャッシュメモリ
５１６    メモリアクセス制御部
５２０    主記憶装置
５３０    通信部
５４０    ２次記憶装置
５５０    ドライブ装置
５６０    Ｉ／Ｏコントローラ
５７０    入力部
５８０    出力部
５９０    記憶媒体
９１０    仮想化ソフトウェア
９２０Ａ〜Ｃ    ＯＳ
９３０    障害処理プログラム
９４０    障害定義情報
９５０    重大度定義情報
９６０    参照テーブル
９７０Ａ〜Ｃ    ハードウェアテーブル
９８０    アプリケーションプログラム
９８１    エラーハンドラ
【図１】
0005540890.tif 000002
【図２】
0005540890.tif 000003
【図３】
0005540890.tif 000004
【図４】
0005540890.tif 000005
【図５】
0005540890.tif 000006
【図６】
0005540890.tif 000007
【図７】
0005540890.tif 000008
【図８】
0005540890.tif 000009
【図９Ａ】
0005540890.tif 000010
【図９Ｂ】
0005540890.tif 000011
【図９Ｃ】
0005540890.tif 000012
【図１０】
0005540890.tif 000013
【図１１】
0005540890.tif 000014
【図１２】
0005540890.tif 000015
【図１３】
0005540890.tif 000016
【図１４】
0005540890.tif 000017
【図１５】
0005540890.tif 000018