プロセッサとメモリと仮想I/Oアダプタを仮想機能として生成する物理機能を有するI/Oアダプタを備えた物理計算機と、前記物理計算機の計算機資源を仮想計算機に提供する仮想化部と、前記仮想計算機で実行されるOSと、を備えて、前記仮想化部が前記仮想機能を割り当てた1つ以上の仮想計算機を生成し、前記仮想計算機でOSを稼働させる仮想計算機の制御方法であって、前記仮想化部が、前記I/Oアダプタの状態変化を検出する第1のステップと、前記仮想化部は、前記I/Oアダプタの状態が所定の状態になったときに、当該物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を特定する第2のステップと、前記仮想化部が、前記特定された仮想計算機上で稼働する前記OSに前記I/Oアダプタの状態を通知する第3のステップと、を含むことを特徴とする仮想計算機の制御方法。請求項1に記載の仮想計算機の制御方法であって、前記I/Oアダプタは、障害情報を格納する障害情報レジスタを有し、前記第1のステップは、前記仮想化部が、I/Oアダプタで発生した障害を示す信号を受信する第4のステップと、前記仮想化部が、前記障害を示す信号を受信したときに前記障害情報レジスタを参照する第5のステップと、を含んで前記障害情報から前記I/Oアダプタの状態変化を検出し、前記OSが前記仮想機能の利用を中止する第6のステップと、をさらに含むことを更に含むことを特徴とする仮想計算機の制御方法。請求項2に記載の仮想計算機の制御方法であって、前記仮想計算機は、前記I/Oアダプタの挿抜要求と通知を格納するホットプラグレジスタをさらに有し、前記第2のステップは、全ての前記仮想機能について前記特定を行い、前記第6のステップは、前記仮想化部が、前記ホットプラグレジスタに前記仮想機能の取り外し要求を設定する第7のステップと、前記OSが、前記ホットプラグレジスタを読み込む第8のステップと、前記特定された仮想計算機上で稼働する全ての前記OSが、前記ホットプラグレジスタに前記仮想機能の取り外し要求に対して応答するまで待機する第9のステップと、をさらに含むことを特徴とする仮想計算機の制御方法。請求項3に記載の仮想計算機の制御方法であって、前記仮想化部は、前記OSが前記仮想機能の利用を中止した後に、前記I/Oアダプタを再初期化する第10のステップと、前記I/Oアダプタが、前記仮想機能を再度生成する第11のステップと、前記仮想化部が、前記ホットプラグレジスタにI/Oアダプタの取り付け通知を設定する第12のステップと、前記OSが、前記ホットプラグレジスタを読み込んで前記I/Oアダプタの取り付けを検知する第13のステップと、前記OSが、前記仮想機能の利用を再開する第14のステップと、をさらに含むことを特徴とする仮想計算機の制御方法。請求項2に記載の仮想計算機の制御方法であって、前記仮想化部は、前記I/Oアダプタを操作するドライバを有し、当該ドライバには予め障害発生時の処理の方針が設定され、前記第5のステップは、前記仮想化部が、前記障害発生時には前記ドライバに対して、障害対処の方針を問い合わせる第15のステップと、前記ドライバに設定された前記方針がリセット試行である場合に、前記仮想計算機で稼働する前記OSに前記仮想機能の状態を伝達する第16のステップと、をさらに含むことを特徴とする仮想計算機の制御方法。請求項3に記載の仮想計算機の制御方法であって、前記仮想化部は、前記I/Oアダプタを操作するドライバを有し、当該ドライバには予め障害発生時の処理の方針が設定され、前記仮想化部は、前記OSが前記仮想機能の利用を中止した後に、前記I/Oアダプタを再初期化する第10のステップと、前記I/Oアダプタが、前記仮想機能を再度生成し、前記仮想化部が、再度生成された仮想機能を前記仮想計算機に再度割り当てる第11のステップと、前記仮想化部が、前記ホットプラグレジスタにI/Oアダプタの取り付け通知を設定する第12のステップと、前記OSが、前記ホットプラグレジスタを読み込んで前記I/Oアダプタの取り付けを検知する第13のステップと、前記OSが、前記仮想機能の利用を再開する第14のステップと、をさらに含み、前記第5のステップは、前記仮想化部が、前記障害発生時には前記ドライバに対して、障害対処の方針を問い合わせる第15のステップと、前記ドライバに設定された前記方針がリセット試行である場合に、前記仮想計算機で稼働する前記OSに前記仮想機能の状態を伝達する第16のステップと、をさらに含むことを特徴とする仮想計算機の制御方法。請求項1に記載の仮想計算機の制御方法であって、前記第1のステップは、前記仮想化部が、前記I/Oアダプタの仮想機能の状態変化を検出し、前記第2のステップは、前記仮想化部は、前記仮想機能の状態が所定の状態になったときに、当該物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を特定し、前記第3のステップは、前記仮想化部が、前記特定された仮想計算機上で稼働する前記OSに前記仮想機能の状態を通知することを特徴とする仮想計算機の制御方法。プロセッサとメモリと仮想I/Oアダプタを仮想機能として生成する物理機能を有するI/Oアダプタを備えた物理計算機と、前記物理計算機の計算機資源を仮想計算機に提供する仮想化部と、前記仮想計算機で実行されるOSと、を備えて、前記仮想化部が、前記仮想機能を割り当てた1つ以上の仮想計算機を生成する計算機であって、前記仮想化部は、前記I/Oアダプタの状態変化を検出する障害処理部と、前記物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を管理する割り当て情報と、を備え、前記障害処理部は、前記I/Oアダプタの状態が所定の状態になったときに前記割り当て情報を参照し、当該物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を特定し、前記特定された仮想計算機上で稼働する前記OSに前記I/Oアダプタの状態を通知することを特徴とする計算機。請求項8に記載の計算機であって、前記I/Oアダプタは、障害情報を格納する障害情報レジスタを有し、前記障害処理部は、前記I/Oアダプタで発生した障害を示す信号を受信したときに前記障害情報レジスタを参照して前記障害情報から前記I/Oアダプタの状態変化を検出し、前記特定されたOSに前記仮想機能の利用を中止させることを特徴とする計算機。請求項9に記載の計算機であって、前記仮想計算機は、前記I/Oアダプタの挿抜要求と通知を格納するホットプラグレジスタをさらに有し、前記障害処理部は、全ての前記仮想機能について前記特定を行い、前記障害処理部は、前記ホットプラグレジスタに前記仮想機能の取り外し要求を設定し、前記特定された仮想計算機上で稼働する全ての前記OSが、前記ホットプラグレジスタに前記仮想機能の取り外し要求に対して応答するまで待機することを特徴とする計算機。請求項10に記載の計算機であって、前記障害処理部は、前記OSが前記仮想機能の利用を中止した後に、前記I/Oアダプタを再初期化し、前記ホットプラグレジスタにI/Oアダプタの取り付け通知を設定し前記I/Oアダプタは、前記再初期化の後に前記仮想機能を再度生成し、前記仮想化部が、再度生成された前記仮想機能を前記仮想計算機に再度割り当てて、前記OSが、前記ホットプラグレジスタを読み込んで前記I/Oアダプタの取り付けを検知した後に、前記仮想機能の利用を再開することを特徴とする計算機。請求項9に記載の計算機であって、前記仮想化部は、前記I/Oアダプタを操作するドライバを有し、当該ドライバには予め障害発生時の処理の方針が設定され、前記障害処理部が、前記障害発生時には前記ドライバに対して、障害対処の方針を問い合わせ、前記ドライバに設定された前記方針がリセット試行である場合に、前記仮想計算機で稼働する前記OSに前記仮想機能の状態を伝達することを特徴とする計算機。請求項10に記載の計算機であって、前記仮想化部は、前記I/Oアダプタを操作するドライバを有し、当該ドライバには予め障害発生時の処理の方針が設定され、前記障害処理部は、前記OSが前記仮想機能の利用を中止した後に、前記I/Oアダプタを再初期化し、前記I/Oアダプタが、前記仮想機能を再度生成し、前記仮想化部が、前記再度生成した仮想機能を前記仮想計算機に再度割り当てて、前記障害処理部が、前記ホットプラグレジスタにI/Oアダプタの取り付け通知を設定し、前記OSが、前記ホットプラグレジスタを読み込んで前記I/Oアダプタの取り付けを検知して、前記仮想機能の利用を再開し、前記障害処理部が、前記障害発生時には前記ドライバに対して、障害対処の方針を問い合わせ、前記ドライバに設定された前記方針がリセット試行である場合に、前記仮想計算機で稼働する前記OSに前記仮想機能の状態を伝達することを特徴とする計算機。請求項8に記載の計算機であって、前記障害処理部は、前記仮想機能の状態が所定の状態になったときに前記割り当て情報を参照し、当該物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を特定し、前記特定された仮想計算機上で稼働する前記OSに前記仮想機能の状態を通知することを特徴とする計算機。しかしながら、上記特許文献1には軽度な障害への対処方法が言及されていない。I/Oアダプタの電源投入直後、及びリセット直後は、従来との互換性の観点からIOV機能が無効化される。このため、IOVに対応したI/Oアダプタは、HotPlugの直後ではI/O共有の為の仮想I/Oアダプタ機能以下、VF:VirtualFunctionとするが無効化されているため、特許文献1の技術を用いると以下の問題が生じる。軽度な障害に対して、AERの仕組みに則ってI/OアダプタPFをリセットすると、IOV機能が無効化されるため、仮想計算機からIOVによって生成されていた仮想I/Oアダプタ機能VFが消失する。仮想計算機上で動くOS以下、ゲストOSは、一般に物理I/OアダプタPF向けに設計されているため、I/Oアダプタが突然消失する事態を想定していない。そのためVFが突然消失するとゲストOSがクラッシュするケースがある。また、上記特許文献1では、軽度な障害に対してもPFをリセットしなければならず、障害から回復するために保守員による交換作業が発生し、保守の手間がかかる、と言う問題があった。そこで本発明は、上記問題点に鑑みてなされたもので、IOVに対応するI/Oアダプタの高性能、高信頼性、保守容易性を充足することを目的とする。特に、I/OアダプタのPFリセットが引き起こすVFの無断消失に起因するゲストOSのクラッシュを回避し、I/Oアダプタの軽度な障害から自動的に回復させることを目的とする。本発明は、プロセッサとメモリと仮想I/Oアダプタを仮想機能として生成する物理機能を有するI/Oアダプタを備えた物理計算機と、前記物理計算機の計算機資源を仮想計算機に提供する仮想化部と、前記仮想計算機で実行されるOSと、を備えて、前記仮想化部が前記仮想機能を割り当てた1つ以上の仮想計算機を生成し、前記仮想計算機でOSを稼働させる仮想計算機の制御方法であって、前記仮想化部が、前記I/Oアダプタの状態変化を検出する第1のステップと、前記仮想化部は、前記I/Oアダプタの状態が所定の状態になったときに、当該物理機能が生成した前記仮想機能について、当該仮想機能を割り当てた前記仮想計算機を特定する第2のステップと、前記仮想化部が、前記特定された仮想計算機上で稼働する前記OSに前記I/Oアダプタの状態を通知する第3のステップと、を含む。したがって、本発明は、I/O共有機能を有する物理I/Oアダプタを備えて、仮想化部は、仮想I/OアダプタVFを仮想計算機に割り当てる。障害発生時などの特定のケースを除けば仮想化部の動作頻度が低いため、高性能を実現できる。次に、VF消失の契機となる物理I/Oアダプタの機能PFのリセットに先だって、仮想計算機のOSからVFの取り外し許可を受ける。これにより、VF消失によるOSクラッシュを回避できる。従って高信頼である。PFドライバが軽度な障害と判断した場合に、保守要員の手を借りずにPFをリセットし、物理I/Oアダプタの回復を試みる。物理I/Oアダプタの回復に成功した場合は仮想計算機にVFを割り当て直し、仮想計算機を障害発生前の状態に戻す。従って保守が容易である。以上より、高性能、高信頼、保守容易性が充足される。以下、本発明の一実施形態を添付図面に基づいて説明する。図1は、本発明の第1の実施形態を示し、IOVIOVirtualizationとAERAdvancedErrorReportingに対応するI/Oアダプタを用いた仮想計算機システムの一例を示すブロック図である。本実施形態のI/Oアダプタ60は、物理的なI/Oアダプタの物理機能以下、PF:PhysicalFunctionと、I/O共有を実現する仮想I/Oアダプタ以下、VF:VirtualFunctionを生成する機能を有し、VFを仮想計算機に割り当てる場合の構成及び動作を説明する。<1.ハードウェア構成>図1は、本発明の第1の実施形態となる仮想計算機システムを動作させる物理計算機の構成例を示す。物理計算機は、障害検出機能を有するCPU70またはプロセッサコアを1つ以上有し、これらのCPU70はQPIQuickPathInterconnectやSMIScalableMemoryInterconnect等のインターコネクト110を介してChipSet100やメモリ90に接続される。ChipSet100には、PCIexpress等のバス120を介してI/Oアダプタ60が接続される。I/Oアダプタ60はLAN130に接続されるネットワークアダプタ、ディスク装置140等に接続されるSCSIアダプタ、SAN150StorageAreaNetworkに接続されるファイバーチャネルアダプタ、コンソール80に接続されるグラフィックコントローラなどで構成される。CPU70はインターコネクト110を介してメモリ90にアクセスし、ChipSet100からI/Oアダプタ60にアクセスして所定の処理を行う。メモリ90には、仮想化部としてハイパバイザ20がロードされ、ハイパバイザ20が制御する仮想計算機30-1~30-nが、ゲストOS40-1~40-nを実行する。ハイパバイザ20は、物理計算機10の計算器資源を分割または仮想化して仮想計算機に割り当てる。なお、以下では仮想計算機30-1~3-nの総称を符号30で示し、ゲストOS40-1~40-nの総称を符号40で示す。<2.ソフトウェア構成>次に、物理計算機10上で仮想計算機30を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図2を参照しながら詳述する。図2は、物理計算機及びソフトウェアの関係を示すブロック図である。物理計算機10上では、1つ以上の仮想計算機30を制御するハイパバイザ20が稼動する。物理計算機10は、ChipSet100と、1つ以上のI/Oアダプタ60を含む。ChipSet100は、I/Oアダプタ60の取り外し挿抜要求HotRemoveの要求を保持するレジスタと、取り付け告知HotAddの通知を保持するレジスタから成るHotPlugレジスタ以下、HPレジスタ185を含む。またChipSet100は、I/Oアダプタ60の取り外し要求または取り付け告知あるいは障害を認識すると割り込みを発生して、物理計算機10上で稼働するハイパバイザ20に要求や障害の発生を通知する機能を有する。1つ以上のI/Oアダプタ60はIOV機能を有しており、物理的な機能PF:PhysicalFunction160160-1~160-mと仮想的な機能VF:VirtualFunction190190-1-1~190-m-kから成る。PF160はいつでも利用できる機能だが、VF190はIOV機能が有効な場合のみ利用できる機能である。なお、仮想計算機10は、IOVに非対応のI/Oアダプタ60を含んでも構わない。PF160は、物理計算機10の外部とデータを送受信する機能を有し、IOV機能を制御するIOVレジスタ170と、PFに関する障害の有無や種類といった障害情報を保持するAERレジスタ180を含む。VF190は、IOV機能が有効な場合のみ、物理計算機10の外部とデータを送受信する機能を有し、VFに関する障害の有無や種類といった障害情報を保持するAERレジスタ180を含む。ここで、AERレジスタ180は、2種類存在し、PF160のAERレジスタ180とVF190のAERレジスタ180が存在する。PF160のAERレジスタ180は物理機能、つまり物理I/Oアダプタ60の障害に関する情報を保持し、VF190のAERレジスタ180は仮想機能、つまり仮想I/Oアダプタの障害に関する情報を保持する。なお、I/Oアダプタ60は、障害発生時にAERレジスタ180に障害情報を設定するコントローラ図示省略を有する。ハイパバイザ20は、仮想計算機30を生成し、仮想計算機30上に対してChipSet100に相当する機能仮想ChipSet300を提供する。またハイパバイザ20は、任意のVF190を任意の仮想計算機30に占有的に割り当て、当該仮想計算機30上で稼働するゲストOS40に当該VF190の直接操作を許す機能パススルー機能を備える。このパススルー機能によって、複数の仮想計算機30でひとつのI/Oアダプタ60をVF190から共有することができる。ハイパバイザ20は、仮想計算機30に対するVF190の割り当て関係を保持するアダプタ割り当て表200と、物理計算機10または物理計算機資源を監視して障害発生時に呼び出される障害処理部210と、仮想計算機30の状態を保持する仮想計算機のエミュレーションデータと、PF160の種類に応じた制御手順を備えたPFドライバ250250-1~250-mを含む。障害処理部210は、IOV機能に対応したI/Oアダプタ60の障害を受け持つIOV障害処理部212を含み、IOV障害処理部212はPF160の障害処理状況を保持するPF状態表214と、VF190の障害処理状況を保持するVF状態表216を含む。仮想計算機のエミュレーションデータ220は、仮想計算機30に提供する仮想ChipSet300などの仮想的な部品またはデバイスに関する状態を保持するために、仮想ChipSetデータ222を含む。仮想ChipSetデータ222は、仮想ChipSet300が保持すべきHPレジスタ185などの状態を保持する。PFドライバ250は、IOVレジスタ170を操作する機能と、PF160で障害が発生した場合に軽度障害か重度障害かを判断する機能、及びPFリセット後に障害回復の成否を判断する機能を有する。仮想計算機30は、ハイパバイザ20によって提供される仮想ChipSet300等の仮想的な部品と、占有的に割り当てられたVF190を含む。仮想計算機30の上ではゲストOS40が動作する。ゲストOS40は、VF190の種類に応じたVFドライバ260を用いてVF190を操作する。VFドライバ260は、VF190で障害が発生した場合に軽度障害か重度障害かを判断する障害の程度を判定する機能、及びVFリセット後に障害回復の成否を判定する機能を有する。図3はハイパバイザ20が管理するメモリ90のアドレスマップの一例を示す。ハイパバイザ20は、メモリ90上に自身を配置する領域と、仮想計算機30が使用する領域を割り当てる。例えば図3のように、ハイパバイザ20は、自身にアドレスAD0~AD1を割り当て、仮想計算機30-1にアドレスAD11~AD2を、仮想計算機30-nにアドレスAD3~AD4を割り当てる。各仮想計算機30の領域には、ゲストOS40とVFドライバ260260-1~260-nが格納される。ハイパバイザ20が使用する領域には、アダプタ割り当て表200、障害処理部210、仮想計算機のエミュレーションデータ220と、PFドライバ250が格納される。図4は、アダプタ割り当て表200の構成例である。アダプタ割り当て表200は、VF190と仮想計算機30の割り当て関係を保持する表である。本表ではVF190を識別する手段として、VF190を生成したPF160の通し番号PF400と、VF190の通し番号VF410を用い、当該VF190を割り当てた仮想計算機30の通し番号仮想計算機番号420を格納する。未割り当ての場合は仮想計算機番号420を未割り当てとする。図5は、PF状態表214の構成例である。PF状態表214は、PF160の通し番号PF400と、PF160の障害処理状況として、PF160の状態510と、当該PF160から生成された各VF190の取り外し許可の有無を格納する待ち合わせbitmap520からひとつのエントリが構成される。PF160の識別にはPF400を使用する。状態510は、障害処理が不要な状態正常、軽度障害に伴ってPF160のリセットが必要となった状態リセット保留、重度障害に伴ってPF160の交換が必要となった状態交換保留のいずれかを保持する。待ち合わせbitmap520は、各bitが当該PF160の生成した各VF190に対応しており、VF190の取り外し許可をゲストOS40に要求中の場合に1、未要求または許可済みの場合に0が格納される。待ち合わせbitmap520の全bitが0になるとPFのリセットが可能になる。図6は、VF状態表216の構成例である。VF状態表216は、PF160の通し番号PF400と、VF190の通し番号VF410と、VF190の障害処理状況として、VF190の状態620を保持する。VF190の識別には、PF400と、VF410を使用する。状態620は、障害処理が不要な状態正常、軽度障害に伴ってVF190のリセットが必要となった状態リセット保留、重度障害に伴ってVF190の交換が必要となった状態交換保留のいずれかを保持する。<3.ハイパバイザによる処理>次に、ハイパバイザ20が行う処理の一例について、以下、フローチャートを参照しながら説明する。<3.1.ハイパバイザによる処理の概要>図7は、ハイパバイザ20が行う処理の全体像を示すフローチャートの例である。物理計算機10の電源を投入するとハイパバイザ20がメモリ90にロードされ、ハイパバイザ20自身と物理計算機10を初期化し、I/Oアダプタ60のIOV機能を有効化する700。ステップ700では、PF状態表214は全PFが正常状態に初期化され、VF状態表216は全VFが正常状態に初期化され、アダプタ割り当て表200は全VFが未割り当てに初期化される。続いてハイパバイザ20は、コンソール80からの入力、或いは前回起動時の割り当て指示に基づいて、VF190を割り当てた仮想計算機30を生成する710。ステップ710では、アダプタ割り当て表200の、VF190の行に割り当てられた仮想計算機30の通し番号識別子を登録する。続いてハイパバイザ20は、仮想計算機30の稼働を開始し、仮想計算機30上でゲストOS40及びアプリケーション以下、両者を総称してゲストと記載を実行する720。ステップ720ではゲストが任意の命令コードを実行できるが、1命令を実行する毎にCPU70がハイパバイザ20の介入が必要なイベントが発生しているかをチェックする730。ハイパバイザ20の介入が必要なイベントが発生していれば、CPU70がハイパバイザ20を呼び出してステップ740に進む。ハイパバイザ20の介入が必要なイベントが発生していなければ、ゲストの次の命令を実行するためにステップ720に進む。ハイパバイザ20が呼び出されると、CPU70から発生したイベントの情報を受け取って解析し、ハイパバイザ20はイベントの内容を取得する740。続いてハイパバイザ20は、I/Oアダプタ60に障害が発生したか否かを判定し750、I/Oアダプタ60に障害が発生していればステップ790に進んでI/O障害処理を行う。本実施形態のI/Oアダプタ60は、障害発生時に割込信号を発生する。ハイパバイザ20は、この割込信号を障害発生のイベントとして受信する。一方、ハイパバイザ20は、I/Oアダプタ60に障害が発生していなければ、ステップ760に進んでゲストが仮想チップセット300等に対してI/O操作を行ったか否かを判定する。ゲストがI/O操作を行っていれば、ステップ780に進んでI/O仮想化処理を行う。ゲストがI/O操作を行っていなければステップ770に進み、ハイパバイザ20の従来の処理解析したイベントに応じた処理を行う。ハイパバイザ20の従来の処理については、公知または周知の処理を実施すればよいので、説明を省略する。ステップ770、780、790の何れかで発生したイベントに対する処理が完了すると、ハイパバイザ20はゲストの実行を再開させる795。<3.2.I/O障害処理>図8は、図7のステップ790で行われるI/O障害処理のフローチャートの例である。I/Oアダプタ60に障害の発生を検出したハイパバイザ20は、PF160又はVF190が備えるAERレジスタ180を参照し、どのI/Oアダプタ60で障害が発生したのかを特定する800。続いてハイパバイザ20は、障害が発生したI/Oアダプタ60の種類によって処理を分岐させる810。ハイパバイザ20は発生した障害が、IOVに非対応のI/Oアダプタ従来アダプタ60で発生した場合は、ステップ820に進んで従来の障害処理を行う。従来の障害処理については、公知または周知の処理を実施すればよいので、説明を省略する。ハイパバイザ20は発生した障害が、IOV機能を有するI/OアダプタのPF160部分で発生した場合は、ステップ830に進んでPF障害処理を後述のように行う。一方、ハイパバイザ20は発生した障害が、IOV機能を有するI/OアダプタのVF190部分で発生した場合は、ステップ840に進んでVF障害処理を後述のように行う。<3.2.1.PF障害処理>図9は、図8のステップ830で行われるPF障害処理のフローチャートの例である。障害が発生したPF160を特定したハイパバイザ20は、当該PF160の種類に応じたPFドライバ250に、障害からの回復が可能か否かを問い合わせ、障害の重度を取得する900。I/Oアダプタ60の障害の程度には3通りの重度があり、重い障害から順に、1回復不能でI/Oアダプタ60の交換が必要となる重度障害PCIERSRESULTDISCONNECT、2PF160をリセットすれば回復できる可能性のある軽度障害PCIERSRESULTNEEDRESET、3PF160のレジスタの一部を再設定する等の処理で回復が完了する障害PCIERSRESULTRECOVERED、に分類される。ハイパバイザ20は、障害の重度に応じて処理を分岐させる910。1回復不能な重度障害であれば、PF状態表214の該当するPF160のエントリの状態510を、交換保留に変更する930。2リセットで回復できる可能性がある軽度障害であれば、ハイパバイザ20はPF状態表214の該当するPF160のエントリの状態510を、リセット保留に変更する960。3回復完了した障害であれば、ハイパバイザ20の回復処理は省略する。上記1及び2のケースでは更に、ハイパバイザ20がアダプタ割り当て表200を参照し、障害が起きたPF160から生成された全てのVF190と、各VF190を割り当てた仮想計算機30を特定する940。続いてハイパバイザ20は、各仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にVF190の稼働時取り外しHotRemove要求を設定する。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にVF190の利用中止と安全な取り外しSafelyRemoveを指令する950。最後にハイパバイザ20は、障害内容と対処結果をコンソール80に出力する920。コンソール80への出力により保守要員にI/Oアダプタ60の保守を促す。I/Oアダプタ60の障害の種類が2または3の場合は、直ちにI/Oアダプタ60の交換を行う必要は無いが、I/Oアダプタ60が経年劣化している可能性を考慮し、予防保守の観点から保守員に通報する。一方、障害の種類が1の場合は、直ちにI/Oアダプタ60の交換を行う必要がある旨をコンソール80に通知する。<3.2.2.VF障害処理>図10は、図8の840で行われるVF障害処理のフローチャートの例である。障害が発生したVF190を特定したハイパバイザ20は、VF状態表216の、当該VF190のエントリを交換保留に変更する1060。更に、ハイパバイザ20がアダプタ割り当て表200を参照し、障害が起きたVF190を割り当てた仮想計算機30を特定する1040。続いてハイパバイザ20は、当該仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にVF190の稼働時取り外しHotRemove要求を設定する。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にVF190の利用中止と安全な取り外しSafelyRemoveを指令する1050。最後にハイパバイザ20は、障害内容と対処結果をコンソール80に出力通報し、I/Oアダプタ60の交換を促す1020。VF障害に対しては直ちに交換を行う必要は無いが、I/Oアダプタ60が経年劣化している可能性を考慮し、予防保守の観点から保守員に通報する。<3.3.I/O仮想化処理>図11は、図7のステップ780で行われるI/O仮想化処理のフローチャートの例である。ゲストによるI/O操作を検出したハイパバイザ20は、操作対象仮想ChipSet300等のレジスタ及び操作内容読み出し、書き込みに応じて従来のI/Oエミュレーション処理を行う1100。従来のI/Oエミュレーション処理については、公知または周知の処理を実施すればよいので、説明を省略する。続いてハイパバイザ20は、ゲストによるI/O操作の内容がVF190の取り外しHotRemove許可であったか否かを判定する1110。つまり、ハイパバイザ20は、ゲストがVF190の取り外しを許可するまで待機する。なお、VF190の取り外し許可の通知は、ゲストが仮想ChipSet300のホットプラグレジスタ185に許可の応答を書き込むことで行う。ハイパバイザ20はホットプラグレジスタ185の値が所定の許可応答であれば、ゲストによるI/O操作の内容がVF190の取り外し許可であった場合となる。この場合のみ、ハイパバイザ20は、PF状態表214を参照し、当該VF190を生成したPF160がリセット保留中であるかを判定する1120。ステップ1120に於いてPF160がリセット保留中だった場合、ハイパバイザ20は、PF状態表214の当該PF160のエントリについて、待ち合わせbitmap520の取り外し許可が得られたVF190に対応するbitを0に変更する1130。続いてハイパバイザ20は、PF状態表214の当該PF160の待ち合わせbitmap520で全bitが0に揃ったか否かを判定する1140。全bitが0に揃った場合のみ、1150に進んでPF回復処理を行う。ステップ1120に於いてPF160がリセット保留中でなかった場合は、ハイパバイザ20がVF状態表216を参照し、取り外し許可が得られたVF190が交換保留中であるか否かを判定する1180。ハイパバイザ20は、VF190が交換保留中であった場合のみ、ステップ1190に進んでVF交換処理を行う。<3.3.1.PF回復処理>図12は、図11のステップ1150で行われるPF回復処理のフローチャートの例である。リセット保留中のPF160から生成された全てのVF190について、ゲストOS40からの取り外し許可を検出したハイパバイザ20は、当該PF160をリセットする1200。これによって、当該PF160=I/Oアダプタ60はリセットされ再起動する。続いてハイパバイザ20は、リセットしたPF160の種類に応じたPFドライバ250を呼び出し、PF160の回復に成功したか否かをI/Oアダプタ60に問い合わせる1210。ハイパバイザ20は、PF160の回復の成否に応じて処理を分岐する1220。PF160の回復に成功した場合は、ハイパバイザ20がPFドライバ250にPF160の再初期化を依頼し、IOV機能を再度有効化してPF160にVF190を再生成させる1230。続いてハイパバイザ20は、アダプタ割り当て表200を参照して、当該PF160から生成されていた全てのVF190について、障害発生前にどの仮想計算機30に割り当てられていたかを取得し、当該仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にVF190の稼働時取り付けHotAdd告知または通知を設定する。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にVF190の増設認識再認識と初期化及び利用開始を促す1240。これにより、HotPlug割り込みを受信したゲストOS40は、仮想ChipSet300のHPレジスタ185を読み込んで、HotAddが発生したことを取得し、PF160が再生成したVF190の再検知を行う。ゲストOS40は既にロードしていたVFドライバ260で再検知したVF190の利用を再開する。続いてハイパバイザ20は、PF状態表214の当該PF160に対応するエントリの状態510を正常状態に戻す1250。一方、ステップ1220でPF160の回復に失敗した場合は、ハイパバイザ20がPF状態表214の障害PFのエントリの状態510を交換保留に変更する1270。ハイパバイザ20によるPF回復処理の最後に、当該処理の結果をコンソール80に出力して保守要員によるI/Oアダプタ60の交換を促す1260。回復に成功した場合は直ちに交換を行う必要は無いが、I/Oアダプタ60が経年劣化している可能性を考慮し、予防保守の観点から保守要員に通報する。<3.3.2.VF交換処理>図13は、図11のステップ1190で行うVF回復処理のフローチャートの例である。交換保留中のVF190について、ゲストOS40からの取り外し許可を検出したハイパバイザ20は、アダプタ割り当て表200を参照し、当該VF190と同じPF160から生成された別のVF190を代替VFとして割り当て可能かを判断する1400。代替VFを割り当て可能な場合のみ、ハイパバイザ20はアダプタ割り当て表200を更新して、代替VFを当該ゲストOS40が動いている仮想計算機30に割り当て直す1420。続いてハイパバイザ20は、当該仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185に代替VFの稼働時取り付けHotAddの告知を設定させる。そして、ハイパバイザ20は仮想計算機30にHotPlug割り込みを通知して、ゲストOS40に代替VFの増設認識と初期化及び利用開始を促す1430。これにより、HotPlug割り込みを受信したゲストOS40は、仮想ChipSet300のHPレジスタ185を読み込んで、HotAddが発生したことを取得し、PF160が再生成した他のVF190の追加を行う。ゲストOS40は追加したVF190の種類に応じたVFドライバ260で代替のVF190の利用を開始する。ハイパバイザ20によるVF交換処理の最後に、当該処理の結果をコンソール80に出力し、保守要員によるI/Oアダプタ60の交換を促す1410。交換に成功した場合は直ちに交換を行う必要は無いが、I/Oアダプタ60が経年劣化している可能性を考慮し、予防保守の観点から保守員に通報する。<4.まとめ>以上の構成及び処理により、障害発生時を除いてVF190をゲストOS40に直接操作させるため、高い性能を実現できる。PF160で軽度な障害が発生した場合は、当該PF160のリセットによって消失する全てのVF190を予め仮想計算機30からHotRemoveして、ゲストOS40のクラッシュを回避できるため高信頼を実現できる。また、保守要員の手を借りずにPF160を回復させ、再生成されたVF190を自動的に仮想計算機30にHotAddするため、I/Oアダプタ60の保守を容易にすることができる。また、VF190で軽度及び重度な障害が発生した場合についても、保守要員の手を借りずにハイパバイザ20が当該VF190を仮想計算機30からHotRemoveする。そして、ハイパバイザ20は、代替VF190を割り当て直して仮想計算機30にHotAddする。これにより仮想計算機30は代替VF190で回復することができるため、VF190の障害に対しても高信頼と保守容易性を実現できる。<第2実施形態>本発明の第2実施形態では、ハイパバイザ20がVF190を利用してVF190の機能を提供するEmulatedFunction310以下、EFとするを生成し、仮想計算機30にEF310を割り当てる場合の構成及び動作を説明する。本第2実施形態では、ゲストOS40では無くハイパバイザ20がVF190を直接操作するため、VF障害に対してより適切な処理が可能となる。なお、EF310は、VF190と同様にゲストに対して仮想I/Oアダプタとして振る舞う。<5.ハードウェア構成>本第2の実施形態の計算機システムのハードウェア構成は、前記第1実施形態の図1と同様であるため説明を省略する。<6.ソフトウェア構成>次に、物理計算機10上で仮想計算機30を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図14を参照しながら詳述する。実施形態1に於ける図2と同一の符号の同一構成要素については説明を省略する。物理計算機10は、前記第1の実施形態と同一である。ハイパバイザ20は、任意のVF190を用いてEF310を生成し、任意の仮想計算機30にEF310を割り当てる。EF310はVF190と1対1に対応し、VF190と同じ機能を提供する。EF310は機能を提供するインタフェースがVF190と違っていても構わない。ハイパバイザ20は、VF190を使用するためにVF190の種類に応じたVFドライバ260VF260-1~260-mを保持する。またハイパバイザ20は、EF310を実現するために、仮想計算機30のエミュレーションデータ220の内部にEFデータ224を保持する。仮想計算機30は、ハイパバイザ20によって提供される仮想ChipSet300等の仮想的な部品と、EF310を含む。仮想計算機30の上ではゲストOS40が動作する。ゲストOS40は、EF310に対応する仮想アダプタドライバ270を用いてEF310を操作する。図15はハイパバイザ20が管理するメモリ90の一例を示す。前記第1実施形態に於ける図3と同一の構成については説明を省略する。各仮想計算機30の領域には、ゲストOS40と仮想アダプタドライバ270が格納される。ハイパバイザ20が使用する領域には、アダプタ割り当て表200、障害処理部210、仮想計算機のエミュレーションデータ220と、PFドライバ250に加えて、VFドライバ260が格納される。アダプタ割り当て表200の構成は、前記第1実施形態の図4と同一であるため説明を省略する。また、PF状態表214の構成は、前記第1実施形態の図5と同一であるため説明を省略する。VF状態表216の構成は、VF190とEF310は1対1で対応するため、EF310にはVF190と同じ通し番号を付与する。よって本第2実施形態では、前記第1実施形態の図6に示したVF410は仮想アダプタの意味を兼ねる。<7.ハイパバイザによる処理>次に、ハイパバイザ20が行う処理の一例について、以下、フローチャートを参照しながら説明する。<7.1.ハイパバイザによる処理の概要>ハイパバイザ20が行う処理の全体像を示すフローチャートは、前記第1実施形態の図7と同一であるため説明を省略する。<7.2.I/O障害処理>図7のステップ790で行われるI/O障害処理は、前記第1実施形態の図8の処理と同一であるため説明を省略する。<7.2.1.PF障害処理>図16は、図8のステップ830で行われるPF障害処理のフローチャートの例である。前記第1実施形態の図9と同一符号の同一処理については説明を省略する。本第2の実施形態では前記第1実施形態で示した1重度障害及び2軽度障害のケースで更に、ハイパバイザ20がアダプタ割り当て表200を参照し、障害が起きたPF160から生成された全てのVF190と、各VF190と1対1に対応するEF310を割り当てた仮想計算機30を特定する1740。続いてハイパバイザ20は、各仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にEF310の稼働時取り外しHotRemove要求を設定させる。ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にEF310の安全な取り外しSafelyRemoveを指令する1750。<7.2.2.VF障害処理>図17は、図8のステップ840で行われるVF障害処理のフローチャートの例である。なお、以下では前記第1実施形態の図10と同一符号の同一処理については説明を省略する。障害が発生したVF190を特定したハイパバイザ20は、当該VF190の種類に応じたVFドライバ260に、障害からの回復が可能か否かを問い合わせ、障害の重度を取得する1800。I/Oアダプタ60の障害の程度には前記第1実施形態で述べたとおり3通りの重度があり、重い障害から順に、1回復不能でVF190の交換が必要となる重度障害、2VF190をリセットすれば回復できる可能性のある軽度障害、3VF190のレジスタの一部を再設定する等の手段で回復を完了した障害に分類される。ハイパバイザ20は、I/Oアダプタ60の障害の重度に応じて処理を分岐させる1810。1回復不能な重度障害であれば、VF状態表216の該当するVF190のエントリの状態620を、交換保留に変更する1830。2リセットで回復できる可能性がある軽度障害であれば、VF状態表216の該当するVF190のエントリの状態620を、リセット保留に変更する1860。3回復完了した障害であれば、ハイパバイザ20に回復処理は省略する。上記障害の程度が1及び2のケースでは更に、ハイパバイザ20がアダプタ割り当て表200を参照し、障害が起きたVF190と1対1に対応するEF310と、当該EF310を割り当てた仮想計算機30を特定する1840。続いてハイパバイザ20は、各仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にEF310の稼働時取り外しHotRemove要求を設定させる。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にEF310の利用中止と安全な取り外しSafelyRemoveを指令する1850。<7.3.I/O仮想化処理>図18は、前記第1実施形態の図7のステップ780で行われるI/O仮想化処理のフローチャートの例である。以下では、前記第1実施形態の図11と同一符号の同一処理については説明を省略する。ゲストによるI/O操作を検出したハイパバイザ20は、操作対象仮想ChipSet300等のレジスタ及び操作内容読み出し、書き込みに応じて従来のI/Oエミュレーション処理を行う1900。この際、EF310のインタフェースが操作された場合は、ハイパバイザ20が、VF190の同一機能のインタフェースを代行操作する。続いてハイパバイザ20は、ゲストによるI/O操作の内容がEF310の取り外しHotRemove許可であったか否かを判定する1910。ゲストによるI/O操作の内容がVF190の取り外し許可であった場合のみ、ハイパバイザ20は、PF状態表214を参照し、当該VF190を生成したPF160がリセット保留中であるか否かを判断する1120。ステップ1120に於いてPF160がリセット保留中でなかった場合は、ハイパバイザ20がVF状態表216を参照し、取り外し許可が得られたEF310と1対1で対応するVF190がリセット保留中であるか否かを判定する1960。当該VF190がリセット保留中であった場合のみ、1970に進んでVF回復処理を行う。<7.3.1.PF回復処理>図19は、図18のステップ1150で行われるPF回復処理のフローチャートの例である。以下では、前記第1実施形態の図12と同一符号、同一処理については説明を省略する。PF160の回復に成功した場合は、ハイパバイザ20がPFドライバ250にPF160の再初期化を依頼し、IOV機能を再度有効化してVF190を再生成させる1230。続いてハイパバイザ20は、アダプタ割り当て表200を参照して、当該PF160から生成されていた全てのVF190について、各VF190と1対1に対応するEF310が障害発生前にどの仮想計算機30に割り当てられていたかを取得する。そして、ハイパバイザ20は、EF310に対応する仮想計算機30にEF310を再初期化させる2035。更にハイパバイザ20は、当該仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にEF310の稼働時取り付けHotAdd告知を設定する。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にEF310の増設認識と初期化及び利用開始を促す2040。<7.3.2.VF回復処理>図20は、図18のステップ1970で行われるVF回復処理のフローチャートの例である。リセット保留中のVF190と1対1に対応するEF310について、ゲストOS40からの取り外し許可を検出したハイパバイザ20は、当該VF190をリセットする2100。続いてハイパバイザ20は、VF190の種類に応じたVFドライバ260を呼び出し、VF190の回復に成功したか否かをVFドライバ260に問い合わせる2110。ハイパバイザ20は、VF190の回復の成否に応じて処理を分岐する2120。VF190の回復に成功した場合は、ハイパバイザ20が当該EF310を再初期化するよう仮想計算機30に指令する2130。続いてハイパバイザ20は、当該EF310を有する仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185にEF310の稼働時取り付けHotAdd告知を設定する。そして、ハイパバイザ20は仮想計算機30にHotPlug割り込みを通知して、ゲストOS40にEF310の増設認識と初期化及び利用開始を促す2140。これにより、HotPlug割り込みを受信したゲストOS40は、仮想ChipSet300のHPレジスタ185を読み込んで、HotAddが発生したことを取得し、初期化されたEF310を加え、仮想アダプタドライバ270でEF310の利用を再開する。続いてハイパバイザ20は、VF状態表216の当該VF190に対応するエントリの状態620を正常状態に戻す2150。最後にハイパバイザ20は、当該処理の結果をコンソール80に出力し、保守要員によるI/Oアダプタ60の交換を促す2160。回復に成功した場合は直ちに交換を行う必要は無いが、I/Oアダプタ60が経年劣化している可能性を考慮し、予防保守の観点から保守員に通報する。一方、ステップ2120でVF190の回復に失敗した場合は、ハイパバイザ20がVF状態表216の障害VFのエントリの状態620を交換保留に変更する2170。続いてハイパバイザはVF交換処理を行う2180。<7.3.3.VF交換処理>図21は、図18のステップ1190及び図20のステップ2180で行うVF回復処理のフローチャートの例である。以下では、前記第1実施形態の図13と同一符号、同一処理については説明を省略する。ステップ1420で代替VFを仮想計算機30に割り当て直したのち、ハイパバイザ20は、代替VFと1対1に対応する代替EF310を初期化する2225。更にハイパバイザは、当該仮想計算機30に含まれる仮想ChipSet300のHPレジスタ185に代替EF310の稼働時取り付けHotAdd告知を設定する。そして、ハイパバイザ20は、仮想計算機30にHotPlug割り込みを通知して、ゲストOS40に代替EF310の増設認識と初期化及び利用開始を促す1430。<8.まとめ>以上の構成及び処理により、ハイパバイザ20の処理がEF310とVF190のインタフェース変換のみとなるため、前記第1実施形態には劣るが、比較的高い性能を実現できる。PF160で軽度な障害が発生した場合は、当該PF160のリセットによって消失する全てのVF190を予め仮想計算機30からHotRemoveしておき、ゲストOS40のクラッシュを回避できるため高信頼を実現できる。また、保守要員の手を借りずにPF160を回復させ、再生成されたVF190を自動的に仮想計算機30へHotAddするため、保守容易性を実現できる。また、VF190で軽度及び重度な障害が発生した場合についても、保守要員の手を借りずに当該VF190を仮想計算機30からHotRemoveし、障害の重度に応じてVF190をリセットまたは交換する対応をとることができる。そして、EF310を仮想計算機30にHotAddして仮想計算機を回復させるため、VF190の障害に対しても高信頼性と保守容易性を実現できる。なお、上記各実施形態では、物理計算機10上に仮想計算機を生成する仮想化部としてハイパバイザを適用した例を示したが、VMMVirtualMachineMonitorを用いることができる。また、上記各実施形態では、物理計算機10にチップセット100がCPU70から独立して存在する例を示したが、CPU70内にチップセット100の機能を含めるようにしてもよい。