(57)【要約】【課題】Ｉ／Ｏデバイスの障害やエラーの影響がユーザが利用する論理区画へ波及するのを抑制することを目的とする。【解決手段】計算機に接続されたＩ／Ｏデバイスを、ハイパバイザ１０で構築された複数の論理区画に割り当てるＩ／Ｏデバイスの制御方法において、ハイパバイザ１０が、前記論理区画をユーザに提供するユーザＬＰＡＲとして設定し、前記論理区画をＩ／Ｏデバイスを制御するためのＩ／ＯＬＰＡＲとして設定して、前記Ｉ／ＯＬＰＡＲにＩ／Ｏデバイスを割り当て、ユーザ用ＬＰＡＲとＩ／Ｏ用ＬＰＡＲとの対応関係をＩ／Ｏデバイステーブルで設定する。【選択図】図２
2006085543.tif 000002
【特許請求の範囲】
【請求項１】
計算機に接続されたＩ／Ｏデバイスを、計算機の制御プログラム上で構築された複数の論理区画に割り当てるＩ／Ｏデバイスの制御方法において、
前記制御プログラムが、前記論理区画をユーザに提供するユーザ用論理区画として設定する手順と、
前記論理区画をＩ／Ｏデバイスを制御するためのＩ／Ｏ用論理区画として設定する手順と、
前記Ｉ／Ｏ用論理区画に前記Ｉ／Ｏデバイスを割り当てる手順と、
前記ユーザ用論理区画とＩ／Ｏ用論理区画との対応関係を設定する手順と、
を含むことを特徴とするＩ／Ｏデバイスの制御方法。
【請求項２】
前記ユーザ用論理区画でユーザ用ＯＳを起動する手順と、
前記Ｉ／Ｏ用論理区画でＩ／ＯデバイスにアクセスするＩ／Ｏ用ＯＳを起動する手順と、
前記ユーザ用ＯＳとＩ／Ｏ用ＯＳとの間で、前記対応関係に基づいて通信を行う手順と、
を含むことを特徴とする請求項１に記載のＩ／Ｏデバイスの制御方法。
【請求項３】
前記ユーザ用論理区画とＩ／Ｏ用論理区画との対応関係を設定する手順は、
前記Ｉ／Ｏ用論理区画に割り当てられた物理的なＩ／Ｏデバイスと、前記ユーザ用論理区画に設定された仮想的なＩ／Ｏデバイスとの対応関係を設定する手順と、
を含むことを特徴とする請求項２に記載のＩ／Ｏデバイスの制御方法。
【請求項４】
前記ユーザ用論理区画とＩ／Ｏ用論理区画との対応関係に基づいて、前記ユーザ用ＯＳが属するユーザ用論理区画に対して仮想的なＩ／Ｏデバイスを提供する手順を有し、
前記ユーザ用ＯＳとＩ／Ｏ用ＯＳとの間で前記対応関係に基づいて通信を行う手順は、
前記ユーザ用ＯＳが前記仮想的なＩ／Ｏデバイスにアクセスする手順と、
前記仮想的なＩ／Ｏデバイスから前記Ｉ／Ｏ用ＯＳにアクセスを転送する手順と、
を含むことを特徴とする請求項３に記載のＩ／Ｏデバイスの制御方法。
【請求項５】
前記仮想的なＩ／Ｏデバイスは、仮想的なメモリマップドＩ／Ｏまたは仮想的なＩ／Ｏレジスタで提供されることを特徴とする請求項４に記載のＩ／Ｏデバイスの制御方法。
【請求項６】
前記Ｉ／Ｏ用ＯＳの動作を監視する手順と、
前記Ｉ／Ｏ用ＯＳの停止を検出した場合には、当該Ｉ／Ｏ用ＯＳを再起動する手順と、
を含むことを特徴とする請求項２に記載のＩ／Ｏデバイスの制御方法。
【請求項７】
前記Ｉ／Ｏ用ＯＳの停止を検出した場合には、当該Ｉ／Ｏ用ＯＳのログを取得する手順と、
を含むことを特徴とする請求項６に記載のＩ／Ｏデバイスの制御方法。
【請求項８】
前記Ｉ／Ｏデバイスのホットプラグを監視する手順と、
新たなＩ／Ｏデバイスを検出した場合には、当該Ｉ／Ｏデバイスを前記Ｉ／Ｏ用論理区画に割り当てる手順と、
当該Ｉ／Ｏ用論理区画をユーザ用論理区画に割り当てる手順と、
前記ユーザ用論理区画に新たなＩ／Ｏデバイスの仮想的なＩ／Ｏデバイスを提供する手順と、
前記ユーザ用論理区画のユーザ用ＯＳに、Ｉ／Ｏデバイスの追加を通知する手順と、
を含むことを特徴とする請求項３に記載のＩ／Ｏデバイスの制御方法。
【請求項９】
前記Ｉ／Ｏデバイスのホットリムーブを監視する手順と、
Ｉ／Ｏデバイスのホットリムーブを検出した場合には、当該Ｉ／Ｏデバイスを前記Ｉ／Ｏ用論理区画から削除する手順と、
前記ユーザ用論理区画とＩ／Ｏ用論理区画との対応関係から、前記Ｉ／Ｏデバイスを削除したＩ／Ｏ用論理区画を利用するユーザ用ＯＳを特定する手順と、
特定したユーザ用ＯＳのユーザ用論理区画で、前記削除したＩ／Ｏデバイスに対応する仮想的なＩ／Ｏデバイスを削除する手順と、
前記ユーザ用ＯＳに、前記対応する仮想的なＩ／Ｏデバイスの削除を通知する手順と、
を含むことを特徴とする請求項３に記載のＩ／Ｏデバイスの制御方法。
【請求項１０】
前記Ｉ／Ｏ用論理区画に前記Ｉ／Ｏデバイスを割り当てる手順は、
複数のＩ／Ｏデバイスをグループに分類する手順と、
前記グループ毎に独立した前記Ｉ／Ｏ用論理区画を生成する手順と、
を含むことを特徴とする請求項１に記載のＩ／Ｏデバイスの制御方法。
【請求項１１】
物理計算機を複数の論理区画に分割し、各論理区画上でそれぞれＯＳを動作させ、各論理区画に対する物理計算機の資源の割当を制御するハイパバイザとを備える仮想計算機システムにおいて、
前記ハイパバイザは、
ユーザに提供するユーザ用論理区画を設定するユーザ用論理区画設定部と、
前記物理計算機のＩ／Ｏデバイスを制御するためのＩ／Ｏ用論理区画を設定するＩ／Ｏ用論理区画設定部と、
前記Ｉ／Ｏ用論理区画に前記Ｉ／Ｏデバイスを割り当てるＩ／Ｏデバイス割り当て部と、
前記ユーザ用論理区画と前記Ｉ／Ｏ用論理区画の対応関係を設定するＩ／Ｏデバイステーブルと、
を備えたことを特徴とする仮想計算機システム。
【請求項１２】
前記ユーザ用論理区画設定部は、ユーザが利用するユーザ用ＯＳを制御し、
前記Ｉ／Ｏ用論理区画設定部は、割り当てられたＩ／ＯデバイスにアクセスするＩ／Ｏ用ＯＳを制御し、
前記ハイパバイザは、前記Ｉ／Ｏデバイステーブルの設定に基づいて前記ユーザ用ＯＳとＩ／Ｏ用ＯＳとの間で通信を行う内部通信部を備えたことを特徴とする請求項１１に記載の仮想計算機システム。
【請求項１３】
前記ユーザ用論理区画設定部は、前記Ｉ／Ｏデバイステーブルの設定に基づいて、ユーザ用論理区画に割り当てられたＩ／Ｏ用論理区画の物理的なＩ／Ｏデバイスに対応する仮想的なＩ／Ｏデバイスを提供する仮想デバイス提供部を有することを特徴とする請求項１２に記載の仮想計算機システム。
【請求項１４】
前記Ｉ／Ｏ用論理区画設定部は、Ｉ／Ｏ用ＯＳの動作状態を検出するＩ／Ｏ用ＯＳ監視部を有し、
前記Ｉ／Ｏ用ＯＳ監視部は、Ｉ／Ｏ用ＯＳの停止を検出したときには、当該Ｉ／Ｏ用ＯＳを再起動することを特徴とする請求項１２に記載の仮想計算機システム。
【請求項１５】
前記Ｉ／Ｏ用論理区画設定部は、Ｉ／Ｏデバイスのホットプラグまたはホットリムーブを検出するＩ／Ｏデバイス監視部を有し、
前記Ｉ／Ｏデバイス監視部は、Ｉ／Ｏデバイスのホットプラグまたはホットリムーブがあったときには、前記Ｉ／Ｏデバイステーブルの設定に基づいて、前記Ｉ／Ｏデバイステーブルの設定を更新することを特徴とする請求項１２に記載の仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、複数の論理区画にＩ／Ｏデバイスを割り当てる技術に関する。
【背景技術】
【０００２】
複数の論理区画上でＯＳを提供する仮想計算機システムでは、各論理区画のＯＳが物理的なＩ／ＯデバイスにそれぞれアクセスしてＩ／Ｏデバイスを利用または共有している。
【０００３】
このＩ／Ｏデバイスを複数の論理区画上のＯＳで利用する一例としては、第１の論理区画上のＯＳがＩ／Ｏデバイスにアクセスする場合、第２の論理区画上のＯＳにＩ／Ｏ要求を送り、第２の論理区画上のＯＳがＩ／Ｏデバイスにアクセスを行う。そして、アクセスの結果は、第１及び第２論理区画に共有された共有メモリを介して第１の論理区画のＯＳにＩ／Ｏアクセスの結果を伝えるものが知られている（例えば、特許文献１）。
【０００４】
また、ホストＯＳ上で複数のゲストＯＳを提供する仮想計算機システムでは、ゲストＯＳをホストＯＳのアプリケーションとして稼動させ、ゲストＯＳからのＩ／Ｏ要求はホストＯＳが一元的にＩ／Ｏ要求を処理することで、Ｉ／Ｏデバイスの共有を行っている（例えば、特許文献２）。
【特許文献１】米国特許出願公開第２００２／０１２９１７２号明細書
【特許文献２】米国特許第６，７２５、２８９号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献１のような従来例では、各論理区画のＯＳが共有メモリを仮想的なＩ／Ｏデバイスとして認識する必要があるため、ＯＳのＩ／Ｏ部分を変更するのに加え、このＯＳに応じた独自のＩ／Ｏデバイスドライバを用意する必要があるため、サポート可能なＩ／Ｏデバイスの種類が制限される。そして、上記特許文献１では、Ｉ／Ｏデバイスに障害やエラーが生じると、Ｉ／Ｏアクセスを第１の論理区画とＩ／Ｏデバイスの間で中継する第２の論理区画上のＯＳに影響が生じ、ＯＳの停止などが発生する恐れがある。
【０００６】
また、上記特許文献２のような従来例では、ゲストＯＳはホストＯＳのアプリケーションとして動作するので、各ゲストＯＳに用意されたＩ／Ｏデバイスドライバを利用することができるので、例えば、ゲストＯＳとしてＷｉｎｄｏｗｓ（登録商標）やＬＩＮＵＸを用いれば、幅広いＩ／Ｏデバイスに対応することができる。しかしながら、Ｉ／Ｏデバイスに障害やエラーが発生した場合、ホストＯＳがＩ／Ｏデバイスの障害やエラーの影響を受けて停止する恐れがあり、他のＩ／Ｏデバイスへのアクセスも停止する恐れがある。
【０００７】
そこで本発明は、上記問題点に鑑みてなされたもので、Ｉ／Ｏデバイスの障害やエラーの影響が、ユーザが利用する論理区画へ波及するのを抑制することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、計算機に接続されたＩ／Ｏデバイスを、計算機の制御プログラム上で構築された複数の論理区画に割り当てるＩ／Ｏデバイスの制御方法において、前記制御プログラムが、前記論理区画をユーザに提供するユーザ用論理区画として設定し、前記論理区画をＩ／Ｏデバイスを制御するためのＩ／Ｏ用論理区画として設定して、前記Ｉ／Ｏ用論理区画に前記Ｉ／Ｏデバイスを割り当て、前記ユーザ用論理区画とＩ／Ｏ用論理区画との対応関係を設定する。
【０００９】
そして、前記ユーザ用論理区画でユーザが利用するユーザ用ＯＳを起動し、前記Ｉ／Ｏ用論理区画でＩ／ＯデバイスにアクセスするＩ／Ｏ用ＯＳを起動して、前記ユーザ用ＯＳとＩ／Ｏ用ＯＳとの間で、前記対応関係に基づいて通信を行う。
【発明の効果】
【００１０】
したがって、本発明は、ユーザが利用するユーザ用論理区画と、Ｉ／Ｏデバイスを有するＩ／Ｏ用論理区画が独立して構成されるため、Ｉ／Ｏデバイスに故障やエラーなどが生じた場合であっても、ユーザ用論理区画に影響が波及するのを防止できる。
【００１１】
特に、ユーザ用論理区画ではユーザが利用するユーザ用ＯＳを実行し、Ｉ／Ｏ用論理区画ではＩ／ＯデバイスにアクセスするＩ／Ｏ用ＯＳが実行しており、Ｉ／Ｏデバイスに故障やエラーなどが生じてもＩ／Ｏ用ＯＳのみが影響を受け、ユーザ用ＯＳが停止するのを防止することができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１３】
図１は、本発明の第１実施形態を示し、仮想計算機システムを動作させる物理計算機２００の構成を示す。
【００１４】
物理計算機２００は、複数のＣＰＵ２０１−０〜２０１−３を有し、これらのＣＰＵはフロントサイドバス２を介してノースブリッジ（またはメモリコントローラ）２０３に接続される。
【００１５】
ノースブリッジ２０３には、メモリバス２０４を介してメモリ（主記憶）２０５が接続され、また、バス２０６を介してＩ／Ｏブリッジ２０７が接続される。Ｉ／Ｏブリッジ２０７にはＰＣＩバスやＰＣＩExpressなどで構成されるＩ／Ｏバス２０８を介してＩ／Ｏデバイス２０９に接続される。なお、Ｉ／Ｏバス２０８及びＩ／Ｏデバイス２０９はホットプラグ（ホットアド／ホットリムーブ）に対応したものである。
【００１６】
ＣＰＵ２０１−０〜２０１−３はノースブリッジ２０３を介してメモリ２０５にアクセスし、ノースブリッジ２０３からＩ／Ｏブリッジ２０７を介してＩ／Ｏデバイス２０９にアクセスを行って所定の処理を行う。
【００１７】
なお、ノースブリッジ２０３はメモリ５を制御するとともに、グラフィックコントローラを含んでコンソール２２０にも接続され、画像の表示を行うことができる。
【００１８】
Ｉ／Ｏデバイス２０９としては、例えば、ＬＡＮ２１３に接続されるネットワークアダプタ（以下、ＮＩＣ）２１０、ディスク装置２１４等に接続されるＳＣＳＩアダプタ（以下、ＳＣＳＩ）２１１、ＳＡＮ（Storage  Area  Network）に接続されるファイバーチャネルアダプタ（以下、ＦＣ）２１２からなり、ＮＩＣ２１０、ＳＣＳＩ２１１、ＦＣ２１２はＩ／Ｏブリッジ２０８を介してＣＰＵ２０１−０〜２０１−３にアクセスされる。
【００１９】
なお、物理計算機２００を構成するＣＰＵは１つでも良いし、２つ以上であっても良い。
【００２０】
次に、物理計算機２００上で仮想計算機を実現するソフトウェアについて、図２を参照しながら詳述する。
【００２１】
図２において、物理計算機２００上では、ハードウェアリソース（計算機資源）を論理的に分割して論理区画（ＬＰＡＲ：Logical PARtition）を管理するハイパバイザ（ファームウェアまたはミドルウェア）１０が稼動している。ハイパバイザ１０は、物理計算機２００を複数の論理区画（ＬＰＡＲ）に分割し、計算機資源の割り当てを管理する制御ソフトウェアである。
【００２２】
ハイパバイザ１０は、物理計算機２００の計算機資源を、ユーザに提供する論理区画であるユーザＬＰＡＲ＃０〜＃ｎ（図中１１−０〜１１−ｎ）と、物理的なＩ／Ｏデバイス２０９へアクセスするための論理区画であるＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍ（図中１２−０〜１２−ｍ）とに分割する。ユーザＬＰＡＲ＃０〜＃ｎは、管理者などが設定した任意の数であるのに対し、Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃ｍの数は、Ｉ／Ｏデバイス２０９の数に等しく設定される。すなわち、Ｉ／ＯデバイスとＩ／Ｏ＿ＬＰＡＲは１対１で対応し、図１のように、Ｉ／Ｏデバイス２０９が３つの場合、図３で示すように３つのＩ／Ｏ＿ＬＰＡＲ＃０〜＃２が構成され、ＮＩＣ２１０がＩ／Ｏ＿ＬＰＡＲ＃０に対応し、ＳＣＳＩ２１１がＩ／Ｏ＿ＬＰＡＲ＃１に対応し、ＦＣ２１２がＩ／Ｏ＿ＬＰＡＲ＃２に対応する。そして、各Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃２がＮＩＣ２１０、ＳＣＳＩ２１１、ＦＣ２１２のアクセスを独立して行う。
【００２３】
つまり、Ｉ／Ｏ＿ＬＰＡＲ＃０はＮＩＣ２１０のみのアクセスを行い、Ｉ／Ｏ＿ＬＰＡＲ＃１はＳＣＳＩ２１１のアクセスを行い、Ｉ／Ｏ＿ＬＰＡＲ＃２はＦＣ２１２のアクセスを行って、各Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃２は、単一のＩ／Ｏデバイスについてのみアクセスを行う。そして、各Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃２には、アクセスするＩ／Ｏデバイスが重複しないようにＩ／Ｏデバイスが割り当てられる。
【００２４】
ユーザＬＰＡＲ＃０〜＃ｎでは、それぞれユーザが利用するＯＳ（以下、ユーザＯＳ）２０−０〜２０−ｎが稼動し、各ユーザＯＳ上ではユーザアプリケーション２１が実行される。
【００２５】
Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃ｍでは、ユーザＯＳ２０−０〜ｎからのＩ／Ｏアクセスに応じてＩ／Ｏデバイスへアクセスを行うＩ／Ｏ＿ＯＳ（図中３０−０〜ｍ）が、各Ｉ／Ｏ＿ＬＰＡＲ＃０〜＃ｍで実行される。
【００２６】
ハイパバイザ１０は、後述するように割り当てられたユーザＯＳとＩ／Ｏ＿ＯＳの間で通信を行ってユーザＯＳからのＩ／Ｏアクセス要求をＩ／Ｏ＿ＯＳに伝え、Ｉ／Ｏ＿ＯＳがＩ／Ｏデバイス２０９のアクセスを行う。そして、一つのＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍに対して複数のユーザＬＰＡＲ＃０〜＃ｎを割り当てることで、複数のユーザＯＳ＃０〜＃ｎ間でＩ／Ｏデバイス２０９を共有することができる。
【００２７】
このため、ユーザＬＰＡＲ＃０〜＃ｎ上のユーザＯＳが利用するＩ／Ｏデバイスは、後述するＩ／Ｏデバイステーブル１０２によって設定され、Ｉ／Ｏデバイステーブル１０２に設定されたユーザＬＰＡＲ＃０〜＃ｎとＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍの関係に応じて、ユーザＯＳ＃０〜＃ｎとＩ／Ｏデバイス２０９の関係が決定される。
【００２８】
また、Ｉ／Ｏ＿ＯＳ３０−０〜３０−ｍでは、後述するようにＩ／Ｏ＿ＯＳの通信ドライバとデバイスドライバと間でアクセス要求を転送するＩ／Ｏアプリケーション３１が実行される。
【００２９】
次に、ハイパバイザ１０には、ユーザＬＰＡＲ＃０〜＃ｎとＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍとの間で通信を行う内部通信機構１０１と、ユーザＬＰＡＲ＃０〜＃ｎが使用するＩ／Ｏデバイスを設定するＩ／Ｏデバイステーブル１０２と、ユーザＬＰＡＲ＃０〜＃ｎがＩ／Ｏデバイスとしてアクセスを行う仮想デバイス１０３とが含まれている。
【００３０】
ユーザＬＰＡＲ＃０〜＃ｎとＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍは、内部通信機構１０１によって接続されて相互に通信を行うことができる。
【００３１】
また、仮想デバイス１０３は、ユーザＬＰＡＲ＃０〜＃ｎとＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍの間でコマンド及びデータの伝達を行うもので、ユーザＯＳ＃０〜＃ｎからは実際のＩ／Ｏデバイス２０９として見える。
【００３２】
このため、仮想デバイス１０３には、仮想メモリマップドＩ／Ｏ及び仮想割込インターフェースが実装されて、ユーザＯＳ＃０〜＃ｎからは実際のＩ／Ｏデバイス２０９として振る舞うことができる。なお、仮想割込インターフェースは、ユーザＯＳからのＩ／Ｏアクセス要求に応じた割り込みを受け付けて、ユーザＬＰＡＲ側に通知するものである。
【００３３】
ユーザＬＰＡＲ＃０〜＃ｎが使用するＩ／Ｏデバイスを設定したＩ／Ｏデバイステーブル１０２は、図３で示すように構成される。図３のＩ／Ｏデバイステーブル１０２では、一つのユーザＬＰＡＲの番号を設定するフィールド１０２１と、ユーザＬＰＡＲに割り当てられたＩ／ＯデバイスとしてＩ／Ｏ＿ＬＰＡＲの番号を設定するフィールド１０２３と、Ｉ／Ｏ＿ＬＰＡＲ番号に対応する実際のＩ／Ｏデバイスの名称（またはアドレス）を設定するフィールド１０２４と、実際のＩ／Ｏデバイスに対応する仮想デバイス１０３の名称（またはアドレス）を設定するフィールド１０２２とが一つの行に記載される。
【００３４】
図３では、後述の図５で示すユーザＬＰＡＲとＩ／Ｏ＿ＬＰＡＲの関係を示しており、ユーザＬＰＡＲ＃０がＮＩＣ２１０を使用する例であり、ＮＩＣ２１０に対応するＩ／Ｏ＿ＬＰＡＲの番号として＃が設定され、ＮＩＣ２１０に対応する仮想デバイスとして仮想ＮＩＣが設定された例を示している。
【００３５】
ユーザＬＰＡＲ＃０〜＃ｎ及びＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍは、Ｉ／Ｏデバイステーブル１０２を読み込んで、Ｉ／Ｏデバイス２０９をユーザＬＰＡＲ＃０〜＃ｎで共有し、ユーザＯＳ＃０〜＃ｎからのＩ／Ｏ要求を制御する。
【００３６】
次に、図４は、仮想デバイス１０３の一例として、仮想メモリマップドＩ／Ｏ（以下、ＭＭＩ／Ｏ）で仮想デバイス１０３を構成した場合を示す。
【００３７】
メモリ２０５上の所定の領域には、仮想デバイス１０３を構成する仮想ＭＭＩ／Ｏ１０３０が設定される。ユーザＯＳ＃０〜＃ｎ及びＩ／Ｏ＿ＬＰＡＲ＃０〜＃ｍは、仮想ＭＭＩ／Ｏ１０３０の所定の領域をコントロールブロック（コントロールレジスタ）１０３１とし、このコントロールブロック１０３１にコマンドやステータス、オーダーを書き込むことで、ユーザＯＳ＃０〜＃ｎからのＩ／Ｏアクセス要求と、実際のＩ／Ｏデバイス２０９からの応答を伝達する。
【００３８】
次に、ユーザＯＳ＃０〜＃ｎからのＩ／Ｏアクセス要求の概要を以下に説明する。
【００３９】
ユーザＬＰＡＲ上のユーザＯＳ＃０〜＃ｎは、アプリケーション２１などからＩ／Ｏアクセス要求があると各ユーザＯＳ＃０〜＃２が提供する仮想デバイス１０３（仮想ＭＭＩ／Ｏ）に対してアクセスを行い、ユーザＯＳ＃０〜＃ｎはＩ／Ｏデバイステーブル１０２を参照して、仮想デバイス１０３に対応するＩ／Ｏ＿ＬＰＡＲを特定し、仮想デバイス１０３へのアクセスをＩ／Ｏ＿ＯＳ＃０〜＃ｍに通知する。
【００４０】
通知を受けたＩ／Ｏ＿ＯＳ＃０〜＃ｍは、後述の通信ドライバ、Ｉ／Ｏアプリケーション３１、Ｉ／Ｏ＿ＯＳ＃０〜＃ｍのデバイスドライバを介して仮想デバイス１０３からユーザＯＳ＃０〜＃ｎの要求を読み込み、Ｉ／Ｏデバイス２０９に対してアクセスを行う。
【００４１】
そして、Ｉ／Ｏ＿ＯＳ＃０〜＃ｍは、Ｉ／Ｏデバイスに対するアクセスの結果を仮想デバイス１０３に通知して一連のＩ／Ｏアクセスを完了する。
【００４２】
したがって、後述のようにユーザＯＳは、直接物理的なＩ／Ｏデバイス２０９にアクセスするのではなく、ハイパバイザ１０上の仮想デバイス１０３にアクセスを行い、実際のＩ／Ｏデバイス２０９にはＩ／Ｏ＿ＯＳがアクセスを行うため、Ｉ／Ｏデバイスに障害やエラーが発生しても、Ｉ／Ｏ＿ＯＳがこの影響を受ける場合があるものの、ユーザＯＳはＩ／Ｏデバイスの影響を受けることがなく、ユーザＯＳが停止するのを確実に防止できる。
【００４３】
なお、上記では仮想デバイス１０３をＭＭＩ／Ｏで実現する例を示したが、仮想的なＩ／Ｏレジスタなどにより仮想デバイス１０３を実現しても良い。
【００４４】
図５は上記図１の構成で、３つのユーザＬＰＡＲ＃０〜＃２で３つのＩ／Ｏデバイスを利用する場合の仮想計算機の一例を示したものである。
【００４５】
ハイパバイザ１０は、Ｉ／Ｏデバイス２０９として３つのデバイスがあるので、３つのＩ／Ｏ＿ＬＰＡＲ＃０〜＃２を構成する。そして、ハイパバイザ１０はＩ／Ｏ＿ＬＰＡＲ＃０をＮＩＣ２１０に割り当て、Ｉ／Ｏ＿ＬＰＡＲ＃１をＳＣＳＩ２１１に割り当て、Ｉ／Ｏ＿ＬＰＡＲ＃２をＦＣ２１２に割り当てる。
【００４６】
また、ハイパバイザ１０は、管理者などからの指令に基づいて所定数のユーザＬＰＡＲを構成する。ここでは、３つのユーザＬＰＡＲ＃０〜＃２を構成するものとする。そして、ハイパバイザ１０は、管理者などからの指令に基づいて、各ユーザＬＰＡＲが使用するＩ／Ｏデバイスを決定し、上記図３のＩ／Ｏデバイステーブル１０２を作成または更新する。
【００４７】
ここで、各ユーザＬＰＡＲが利用するＩ／Ｏデバイスの設定は、コンソール２２０から管理者が図３に示したＩ／Ｏデバイステーブル１０２を管理インターフェースとしてディスプレイなどに表示し、各ユーザＬＰＡＲとＩ／Ｏ＿ＬＰＡＲの関係を設定する。
【００４８】
この例では、ユーザＯＳ＃０がＮＩＣ２１０を利用し、ユーザＯＳ＃１がＳＣＳＩ２１１を利用し、ユーザＯＳ＃２がＦＣ２１２を利用する例を示している。なお、各Ｉ／Ｏデバイスは、複数のユーザＯＳで共有することができる。なお、図中管理インターフェースは、図３に示したＩ／Ｏデバイステーブル１０２のイメージをＧＵＩにより操作する例を示す。この管理インターフェースは、ＧＵＩに限らずＣＵＩ（Character User Interface）などで構成することができる。
【００４９】
ユーザＯＳ＃０はアプリケーション２１などからＩ／Ｏアクセス要求があると、デバイスドライバ２２からユーザＬＰＡＲ＃０上の仮想ＮＩＣ２１０Ｖにアクセスを行う。なお、仮想ＮＩＣ２１０Ｖは実際のＮＩＣ２１０をユーザＬＰＡＲ＃０上に仮想化したもので、上述のＭＭＩ／Ｏ及び仮想割り込みインターフェースにより提供される。
【００５０】
ハイパバイザ１０は、仮想ＮＩＣ２１０Ｖの実体を管理するＩ／Ｏ＿ＬＰＡＲ＃０上のＩ／Ｏ＿ＯＳ＃０にＩ／Ｏアクセス要求を転送する。この転送は、Ｉ／Ｏ＿ＯＳ＃０の通信ドライバ３２で行われる。通信ドライバ３２はアクセス要求をＩ／Ｏアプリケーション３１に通知し、Ｉ／Ｏアプリケーション３１は、通信ドライバ３２が受信したアクセス要求をデバイスドライバ３３に転送し、デバイスドライバ３３が物理的なＩ／ＯデバイスであるＮＩＣ２１０にアクセスを行う。
【００５１】
Ｉ／Ｏアクセスの結果は、上記の逆であり、Ｉ／Ｏ＿ＯＳ＃０のデバイスドライバ３３から通信ドライバ３２を介してユーザＬＰＡＲ＃０上の仮想ＮＩＣ２１０Ｖに送られ、ユーザＯＳ＃０に送られる。
【００５２】
ユーザＯＳ＃１も上記ユーザＯＳ＃０と同様にして、ユーザＯＳ＃１のデバイスドライバ２２、実際のＳＣＳＩ２１１をユーザＬＰＡＲ＃１上に仮想化した仮想ＳＣＳＩ２１１Ｖ、Ｉ／Ｏ＿ＯＳの通信ドライバ３２、Ｉ／Ｏアプリケーション３１、デバイスドライバ３３を介して実際のＳＳＣＳＩ２１１へＩ／Ｏアクセスを行う。
【００５３】
ユーザＯＳ＃２も上記ユーザＯＳ＃０と同様にして、ユーザＯＳ＃２のデバイスドライバ２２、実際のＦＣ２１２をユーザＬＰＡＲ＃２上に仮想化した仮想ＦＣ２１２Ｖ、Ｉ／Ｏ＿ＯＳの通信ドライバ３２、Ｉ／Ｏアプリケーション３１、デバイスドライバ３３を介して実際のＦＣ２１２へＩ／Ｏアクセスを行う。
【００５４】
なお、ユーザＯＳ＃０〜＃２のデバイスドライバ２２及びＩ／Ｏ＿ＯＳ＃０〜＃２のデバイスドライバ３３は、各ユーザＯＳ＃０〜＃２及びＩ／Ｏ＿ＯＳ＃０〜＃２が提供するものを利用できるため、独自のドライバを作成する必要がなく、幅広いＩ／Ｏデバイス２０９に対応することができる。
【００５５】
図６は、Ｉ／Ｏデバイス２０９（ＮＩＣ２１０、ＳＣＳＩ２１１、ＦＣ２１２のいずれか）で障害が発生したときに物理計算機２００（仮想計算機システム）で行われる処理のフローチャートを示す。
【００５６】
Ｉ／Ｏデバイス２０９のいずれかで、Ｉ／Ｏアクセス要求に対する応答がタイムアウトした場合等は、ハイパバイザ１０はＩ／Ｏデバイス２０９の故障と判定して以下の処理を行う。
【００５７】
Ｓ１では、物理的なＩ／Ｏデバイス２０９が属するＩ／Ｏ＿ＬＰＡＲをＩ／Ｏデバイステーブル１０２から特定し、このＩ／Ｏ＿ＬＰＡＲ上のＩ／Ｏ＿ＯＳが動作を継続可能であるか否かを判定する。この判定は、例えばハイパバイザ１０からＩ／Ｏ＿ＯＳに問い合わせを行って、Ｉ／Ｏ＿ＯＳの応答の有無などに応じて判定する。
【００５８】
該当するＩ／Ｏ＿ＯＳが動作を継続できないと判定した場合にはＳ２へ進み、動作継続可能と判定した場合にはＳ７へ進む。
【００５９】
Ｓ２では、ハイパバイザ１０は該当するＩ／Ｏ＿ＯＳの停止を検出し、Ｓ３に進んでコンソール２２０などから所定の管理インターフェースを用いて、停止したＩ／Ｏ＿ＯＳが管理するＩ／Ｏデバイスに故障などの障害が発生したことを通知する。
【００６０】
次に、Ｓ４では、コンソール２２０などから管理者がＩ／Ｏ＿ＯＳのリセットを指令すると、Ｓ５に進んで、ハイパバイザ１０は障害のあったＩ／Ｏ＿ＬＰＡＲ上のＩ／Ｏ＿ＯＳをリセットする。
【００６１】
そして、Ｓ６ではリセットしたＩ／Ｏ＿ＯＳが正常に再起動したことを確認して処理を終了する。
【００６２】
一方、上記Ｓ１でＩ／Ｏ＿ＯＳが動作継続可能と判定した場合のＳ７では、障害のあったＩ／Ｏデバイス２０９を管理するＩ／Ｏ＿ＯＳが、Ｉ／Ｏデバイス２０９に関する障害のログを取得する。その後、Ｓ８でＩ／Ｏ＿ＯＳが予め設定した障害回復処理を行ってから、Ｓ９に進みＩ／Ｏ＿ＯＳは上記取得したＩ／Ｏデバイスの障害ログをハイパバイザ１０に対して送信する。
【００６３】
そしてハイパバイザ１０は、Ｉ／Ｏ＿ＯＳからの障害ログを、所定の管理インターフェースを用いてコンソール２２０などから管理者に通知し、障害の内容を伝える。
【００６４】
上記より、Ｉ／Ｏデバイス２０９に障害が発生しても、ユーザＯＳが稼動するＬＰＡＲとＩ／Ｏ＿ＯＳが稼動するＬＰＡＲは異なる論理区画であるため、ユーザＯＳにＩ／Ｏデバイス２０９の故障などの影響が波及するのを防止できる。
【００６５】
そして、Ｉ／Ｏ＿ＯＳが動作継続不能な場合には、該当するＩ／Ｏ＿ＯＳのみをリセットすることができるので、ユーザＯＳ上のアプリケーション２１が提供するサービスを停止することなく、Ｉ／Ｏ＿ＯＳの再起動を行って、Ｉ／Ｏデバイス２０９の回復を行うことができる。また、障害のあったＩ／Ｏ＿ＯＳが動作継続可能な場合には、ハイパバイザ１０が管理者に対してＩ／Ｏデバイス２０９の障害状況を自動的に通知できるので、仮想計算機の保守・管理を容易にすることができる。
【００６６】
なお、上記では障害により停止したＩ／Ｏ＿ＯＳのリセット指示を管理者が行う例を示したが、ハイパバイザ１０がリセットの指示を行うこともできる。
【００６７】
図７は、新たなＩ／Ｏデバイス２０９がＩ／Ｏバス２０８に挿入（ホットアド）されたときに物理計算機２００で行われる処理の一例を示すフローチャートである。
【００６８】
Ｓ２１では、ハイパバイザ１０はＩ／Ｏバス２０８を監視して、新たなＩ／Ｏデバイスの追加を検出し、Ｓ２２へ進む。
【００６９】
Ｓ２２では、所定の管理インターフェースを介してコンソール２２０などから管理者に新たなＩ／Ｏデバイスを検出したことを通知する。Ｓ２３では、管理者が新たなＩ／Ｏデバイスに対応するＩ／Ｏ＿ＬＰＡＲの作成の有無を指示し、Ｉ／Ｏ＿ＬＰＡＲの作成が必要な場合には、新たなＩ／Ｏデバイスに対応するＩ／Ｏ＿ＬＰＡＲの作成をハイパバイザ１０に指示し、そうでない場合には、Ｓ２５へ進む。
【００７０】
Ｓ２４では、ハイパバイザ１０が、新たなＩ／Ｏデバイスに対応するＩ／Ｏ＿ＬＰＡＲを作成する。
【００７１】
Ｓ２５では、管理者の指示に基づいて、新たなＩ／ＯデバイスをＩ／Ｏ＿ＬＰＡＲに割り当てる。すなわち、Ｉ／Ｏデバイステーブル１０２上では、フィールド１０２３にＩ／Ｏ＿ＬＰＡＲの番号が設定され、フィールド１０２４にＩ／Ｏデバイス名が設定されて、同一行のユーザＬＰＡＲのフィールド１０２１、１０２２が空欄の状態となる。
【００７２】
Ｓ２６では、管理者の指示に基づいて、新たなＩ／ＯデバイスとユーザＬＰＡＲの対応付けを設定する。すなわち、Ｉ／Ｏデバイステーブル１０２上では、ユーザＬＰＡＲに関して空欄となっていた新たなＩ／ＯデバイスのＩ／Ｏ＿ＬＰＡＲに対して、ユーザＬＰＡＲと仮想デバイス１０３の対応付けが行われる。
【００７３】
そして、Ｓ２７では、ハイパバイザ１０が物理的なＩ／Ｏデバイスに対応する仮想デバイス１０３を作成する。そしてＳ２８では、ハイパバイザ１０が、上記Ｓ２６で対応付けを行ったユーザＬＰＡＲに対して新たな仮想デバイス１０３が追加されたことを通知する。
【００７４】
そして、ハイパバイザ１０は、新たなＩ／Ｏデバイスが新たなＩ／Ｏ＿ＬＰＡＲに割り当てられた場合には、新たなＩ／Ｏ＿ＯＳを起動する。これにより、ユーザＯＳは、新たなＩ／Ｏデバイスを任意に追加した場合でも利用可能となる。
【００７５】
図８は、ユーザＬＰＡＲ側からＩ／Ｏアクセス要求を行った場合に物理計算機２００で行われる処理の一例を示すフローチャートである。
【００７６】
Ｓ３１では、Ｉ／Ｏアクセス要求があると、ユーザＬＰＡＲ上で稼動するユーザＯＳのデバイスドライバが、仮想デバイス１０３（仮想ＮＩＣ２１０Ｖなど）としての仮想ＭＭＩ／Ｏ１０３０のコントロールブロック１０３１にアクセスする。
【００７７】
Ｓ３２では、ハイパバイザ１０が、仮想デバイスと物理Ｉ／Ｏデバイスの対応関係を決定するＩ／Ｏデバイステーブル１０２を参照し、アクセスが行われた仮想デバイスに対応するＩ／Ｏ＿ＬＰＡＲを特定する。
【００７８】
Ｓ３３では、ハイパバイザ１０は、アクセスが行われた仮想ＭＭＩ／Ｏに対応するＩ／Ｏ＿ＬＰＡＲ上のＩ／Ｏ＿ＯＳにアクセスを転送する。
【００７９】
Ｓ３４では、Ｉ／Ｏ＿ＯＳの通信ドライバ３２が仮想ＭＭＩ／Ｏ１０３０へのアクセス要求を受信して、仮想ＭＭＩ／Ｏ１０３０の内容を取得する。
【００８０】
次に、Ｓ３５では通信ドライバ３２から受信通知を受けたＩ／Ｏ＿ＯＳ上のＩ／Ｏアプリケーション３１が、通信ドライバ３２からアクセス要求を読み込んで、Ｉ／Ｏデバイスを制御するデバイスドライバ３３にアクセス要求を転送する。
【００８１】
Ｓ３６では、Ｉ／Ｏ＿ＯＳのデバイスドライバ３３が、物理的なＩ／Ｏデバイスに対してアクセスを実行する。
【００８２】
以上の処理により、ユーザＯＳ側から仮想デバイス１０３、Ｉ／Ｏ＿ＬＰＡＲのＩ／Ｏ＿ＯＳに組み込まれた通信ドライバ３２、Ｉ／Ｏアプリケーション３１、デバイスドライバ３３を介して物理的なＩ／Ｏデバイス２０９にアクセスが行われる。
【００８３】
次に、図９は、Ｉ／Ｏデバイス２０９がＩ／Ｏバス２０８から取り外された（ホットリムーブ）ときに物理計算機２００で行われる処理の一例を示すフローチャートである。
【００８４】
Ｓ４１では、ハイパバイザ１０はＩ／Ｏバス２０８を監視して、Ｉ／Ｏデバイスの取り外しを検出し、Ｓ２２へ進む。
【００８５】
Ｓ４２では、ハイパバイザ１０が、取り外されたＩ／Ｏデバイスに対応するＩ／Ｏ＿ＬＰＡＲ、仮想デバイス１０３を特定し、このＩ／Ｏ＿ＬＰＡＲを利用するユーザＬＰＡＲを特定する。
【００８６】
Ｓ４３では、取り外されたＩ／Ｏデバイスを利用する全てのユーザＯＳに仮想デバイス１０３の取り外しを通知する。
【００８７】
Ｓ４４では、仮想デバイス１０３を取り外す全てのユーザＬＰＡＲ上のユーザＯＳから、仮想デバイス１０３の取り外しの処理が完了したか否かを判定し、全ユーザＯＳで取り外しの処理が完了するのを待つ。
【００８８】
全てのユーザＯＳで仮想デバイス１０３の取り外し処理が完了すると、Ｓ４５で取り外されたＩ／Ｏデバイスに対応する仮想デバイス１０３を削除して処理を終了する。
【００８９】
これにより、ユーザＬＰＡＲ上のユーザＯＳが取り外し処理を完了するのを待ってから、仮想デバイス１０３を削除するので、Ｉ／Ｏデバイスの取り外しを安全に行うことが可能となる。
【００９０】
＜第２実施形態＞
図１０は第２の実施形態を示し、前記第１実施形態の構成で、図５に示したＩ／Ｏ＿ＯＳ＃０〜＃２から、通信ドライバ３２とデバイスドライバ３３との間でＩ／Ｏアクセスを連携するＩ／Ｏアプリケーション３１の機能をＩ／Ｏ＿ＯＳ＃０〜＃２の内部に取り込んで、Ｉ／Ｏアプリケーション３１を不要としたものである。
【００９１】
ＮＩＣ２１０に対してアクセスを行うＩ／Ｏ＿ＬＰＡＲ＃０上のＩ／Ｏ＿ＯＳ＃０’（図中３００−０）は、ユーザＬＰＡＲ＃０上の仮想ＮＩＣ２１０Ｖと通信を行う通信ドライバ３２と、ＮＩＣ２１０に対して実際のＩ／Ｏアクセスを行うデバイスドライバ３３との間で、Ｉ／Ｏアクセスの伝達を行う機能を含む。
【００９２】
同様に、ＳＣＳＩ２１１に対してアクセスを行うＩ／Ｏ＿ＬＰＡＲ＃１上のＩ／Ｏ＿ＯＳ＃１’（図中３００−１）は、ユーザＬＰＡＲ＃１上の仮想ＳＣＳＩ２１１Ｖと通信を行う通信ドライバ３２と、ＳＣＳＩ２１１に対して実際のＩ／Ｏアクセスを行うデバイスドライバ３３との間で、Ｉ／Ｏアクセスの伝達を行う機能を含む。
【００９３】
また、ＦＣ２１２に対してアクセスを行うＩ／Ｏ＿ＬＰＡＲ＃２上のＩ／Ｏ＿ＯＳ＃２’（図中３００−２）は、ユーザＬＰＡＲ＃２上の仮想ＦＣ２１２Ｖと通信を行う通信ドライバ３２と、ＦＣ２１２に対して実際のＩ／Ｏアクセスを行うデバイスドライバ３３との間で、Ｉ／Ｏアクセスの伝達を行う機能を含む。
【００９４】
この場合も、前記第１実施形態と同様にして、Ｉ／Ｏデバイスに障害が生じた場合でも、ユーザＯＳ＃０〜＃２が停止するのを防ぐことが可能になり、信頼性の高い仮想計算機を提供することができる。
【００９５】
＜第３実施形態＞
図１１は第３の実施形態を示し、前記第１実施形態の構成でＮＩＣ２１０とＳＣＳＩ２１１を、３つのユーザＯＳ＃０〜＃２で共有する場合を示す。なお、図中前記第１実施形態と同様のものには、同一の符号を付して重複説明を省略する。
【００９６】
Ｉ／Ｏデバイステーブル１０２には、各ユーザＬＰＡＲ＃０〜＃２にＮＩＣ２１０を有するＩ／ＯＬＰＡＲ＃０と、ＳＣＳＩ２１１を有するＩ／ＯＬＰＡＲ＃１がそれぞれ割り当てられる。
【００９７】
このＩ／Ｏデバイステーブル１０２のＩ／ＯＬＰＡＲ＃０、１の割り当てに基づいて、ハイパバイザ１０は、各ユーザＬＰＡＲ＃０〜＃２に、仮想デバイス１０３として仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２と、仮想ＳＣＳＩ２１１Ｖ−０〜２１１Ｖ−２を作成する。
【００９８】
そして、各ユーザＯＳ＃０〜＃２には、仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２と、仮想ＳＣＳＩ２１１Ｖ−０〜２１１Ｖ−２に対応するデバイスドライバ２２Ａ、２２Ｂが組み込まれる。
【００９９】
ＮＩＣ２１０のＩ／Ｏアクセスを行うＩ／ＯＬＰＡＲ＃０上のＩ／Ｏ＿ＯＳ＃０では、ユーザＬＰＡＲ＃０〜＃２の仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２のいずれとＩ／Ｏアクセスを行うかを決定する調停部３４が機能している。
【０１００】
この調停部３４は、例えば、ユーザＬＰＡＲ＃０上の仮想ＮＩＣ２１０Ｖ−０を介して、ユーザＯＳ＃０がＩ／Ｏ＿ＯＳ＃０との間でＩ／Ｏアクセスを行っているときには、他のユーザＯＳ＃１、＃２（ユーザＬＰＡＲ＃１、＃２）からのアクセスを待機状態とする。そして、ユーザＯＳ＃０のＩ／Ｏアクセスが終了した後に、他のユーザＯＳ＃１、＃２からのＩ／Ｏアクセスを受け付ける。
【０１０１】
同様に、ＳＣＳＩ２１１のＩ／Ｏアクセスを行うＩ／ＯＬＰＡＲ＃１上のＩ／Ｏ＿ＯＳ＃１では、ユーザＬＰＡＲ＃０〜＃２の仮想ＳＣＳＩ２１１Ｖ−０〜２１１Ｖ−２のいずれとＩ／Ｏアクセスを行うかを決定する調停部３４が機能している。
【０１０２】
この調停部３４は、例えば、ユーザＬＰＡＲ＃１上の仮想ＳＣＳＩ２１１Ｖ−０を介して、ユーザＯＳ＃１がＩ／Ｏ＿ＯＳ＃１との間でＩ／Ｏアクセスを行っているときには、他のユーザＯＳ＃０、＃２（ユーザＬＰＡＲ＃０、＃２）からのアクセスを待機状態とする。そして、ユーザＯＳ＃１のＩ／Ｏアクセスが終了した後に、他のユーザＯＳ＃０、＃２からのＩ／Ｏアクセスを受け付ける。
【０１０３】
以上のように、一つのＩ／Ｏデバイス（Ｉ／ＯＬＰＡＲ）を複数のユーザＯＳ＃０〜＃２で共有する場合には、各Ｉ／Ｏ＿ＯＳに設けた調停部３４により、複数のユーザＯＳ＃０〜＃２からのＩ／Ｏアクセス要求を選択的に行うことで、複数のユーザＯＳ＃０〜＃２でひとつのＩ／Ｏデバイスを共有することを実現できる。
【０１０４】
＜第４実施形態＞
図１２は第４の実施形態を示し、前記第３実施形態の構成でＳＣＳＩ２１１に代わって、第２のネットワークアダプタＮＩＣ２２０を３つのユーザＯＳ＃０〜＃２で共有する場合を示し、同種のＩ／Ｏデバイスを複数のユーザＯＳで共有する例であり、前記第３実施形態と同様のものには、同一の符号を付して重複説明を省略する。
【０１０５】
本第４実施形態では、Ｉ／ＯＬＰＡＲ＃１は、ＮＩＣ２２０（図中ＮＩＣ＃Ｂ）を有し、Ｉ／Ｏ＿ＯＳ＃１はＮＩＣ２２０のＩ／Ｏアクセスを行う。
【０１０６】
Ｉ／Ｏデバイステーブル１０２には、各ユーザＬＰＡＲ＃０〜＃２にＮＩＣ２１０を有するＩ／ＯＬＰＡＲ＃０と、ＮＩＣ２２０を有するＩ／ＯＬＰＡＲ＃１がそれぞれ割り当てられる。
【０１０７】
このＩ／Ｏデバイステーブル１０２のＩ／ＯＬＰＡＲ＃０、１の割り当てに基づいて、ハイパバイザ１０は、各ユーザＬＰＡＲ＃０〜＃２に、仮想デバイス１０３としてＮＩＣ２１０（図中ＮＩＣ＃Ａ）に対応する仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２と、ＮＩＣ２２０（図中ＮＩＣ＃B）に対応する仮想ＮＩＣ２２０Ｖ−０〜２２０Ｖ−２を作成する。
【０１０８】
そして、各ユーザＯＳ＃０〜＃２には、仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２と、仮想ＮＩＣ２２０Ｖ−０〜２２０Ｖ−２に対応するデバイスドライバ２２Ａ、２２Ｂが組み込まれる。
【０１０９】
ＮＩＣ２１０のＩ／Ｏアクセスを行うＩ／ＯＬＰＡＲ＃０上のＩ／Ｏ＿ＯＳ＃０では、ユーザＬＰＡＲ＃０〜＃２の仮想ＮＩＣ２１０Ｖ−０〜２１０Ｖ−２のいずれとＩ／Ｏアクセスを行うかを決定する調停部３４が機能している。
【０１１０】
ＮＩＣ２２０のＩ／Ｏアクセスを行うＩ／ＯＬＰＡＲ＃１上のＩ／Ｏ＿ＯＳ＃１では、ユーザＬＰＡＲ＃０〜＃２の仮想ＮＩＣ２２０Ｖ−０〜２２０Ｖ−２のいずれとＩ／Ｏアクセスを行うかを決定する調停部３４が機能している。
【０１１１】
Ｉ／Ｏ＿ＯＳ＃０、＃１の調停部３４は、前記第３実施形態と同様であり、例えば、ユーザＬＰＡＲ＃０上の仮想ＮＩＣ２１０Ｖ−０を介して、ユーザＯＳ＃０がＩ／Ｏ＿ＯＳ＃０との間でＩ／Ｏアクセスを行っているときには、他のユーザＯＳ＃１、＃２（ユーザＬＰＡＲ＃１、＃２）からのアクセスを待機状態とする。そして、ユーザＯＳ＃０のＩ／Ｏアクセスが終了した後に、他のユーザＯＳ＃１、＃２からのＩ／Ｏアクセスを受け付ける。
【０１１２】
以上のように、同種の複数のＩ／Ｏデバイス（Ｉ／ＯＬＰＡＲ）を複数のユーザＯＳ＃０〜＃２で共有する場合には、各Ｉ／Ｏ＿ＯＳに設けた調停部３４により、複数のユーザＯＳ＃０〜＃２からのＩ／Ｏアクセス要求を選択的に行うことで、複数のユーザＯＳ＃０〜＃２で同種のＩ／Ｏデバイスを共有することを実現できる。
【０１１３】
なお、上記各実施形態では、Ｉ／ＯデバイスとＩ／ＯＬＰＡＲを１対１で対応させる場合を示したが、複数のＩ／ＯデバイスをＩ／Ｏグループとしてグループ化し、このＩ／ＯグループをひとつのＩ／ＯＬＰＡＲとしてユーザＬＰＡＲに提供することができる。例えば、ＮＩＣ２１０とＳＣＳＩ２１１を一つのユーザＬＰＡＲ＃０に含め、Ｉ／Ｏ＿ＯＳ＃０によってＩ／Ｏアクセスを行ってもよい。
【産業上の利用可能性】
【０１１４】
以上のように、本発明はＩ／Ｏデバイスの障害の影響をユーザＯＳへ波及するのを阻止できるため、信頼性の高い仮想計算機に適用することができる。
【図面の簡単な説明】
【０１１５】
【図１】本発明の仮想計算機を実現する物理計算機のハードウェア構成を示すブロック図である。
【図２】同じく仮想計算機システムのソフトウェア構成を示すブロック図である。
【図３】Ｉ／Ｏデバイステーブルの一例を示す説明図。
【図４】仮想デバイスの一例を示し、メモリマップドＩ／Ｏの説明図。
【図５】仮想計算機システムの全体的な機能を示すブロック図である。
【図６】障害が発生した場合の仮想計算機システムの処理の流れを示すフローチャート。
【図７】Ｉ／Ｏデバイスをホットプラグした場合の仮想計算機システムの処理の流れを示すフローチャート。
【図８】Ｉ／Ｏアクセスがあった場合の仮想計算機システムの処理の流れを示すフローチャート。
【図９】Ｉ／Ｏデバイスをホットリムーブした場合の仮想計算機システムの処理の流れを示すフローチャート。
【図１０】第２の実施形態を示し、仮想計算機システムの全体的な機能を示すブロック図である。
【図１１】第３の実施形態を示し、仮想計算機システムの全体的な機能を示すブロック図である。
【図１２】第４の実施形態を示し、仮想計算機システムの全体的な機能を示すブロック図である。
【符号の説明】
【０１１６】
１０  ハイパバイザ
１１−０〜１１−２  ユーザＬＰＡＲ
１２−０〜１２−２  Ｉ／ＯＬＰＡＲ
２０−０〜２０−２  ユーザＯＳ
２２  デバイスドライバ
３１  Ｉ／Ｏアプリケーション
１００  物理計算機
１０１  内部通信機構
１０２  Ｉ／Ｏデバイステーブル
１０３  仮想デバイス
２０９  Ｉ／Ｏデバイス
【図１】
2006085543.tif 000003
【図２】
2006085543.tif 000004
【図３】
2006085543.tif 000005
【図４】
2006085543.tif 000006
【図５】
2006085543.tif 000007
【図６】
2006085543.tif 000008
【図７】
2006085543.tif 000009
【図８】
2006085543.tif 000010
【図９】
2006085543.tif 000011
【図１０】
2006085543.tif 000012
【図１１】
2006085543.tif 000013
【図１２】
2006085543.tif 000014