(57)【要約】【課題】複数のＩ／Ｏデバイスが接続される複合Ｉ／Ｏコントローラを有する計算機システムにおいて、個々の仮想計算機が別々にＩ／Ｏデバイスを利用することができなくなることを防ぐ。【解決手段】ハイパバイザが、仮想計算機から発行されたＩ／Ｏ命令を捕捉する。そして、ハイパバイザは、そのＩ／Ｏ命令に従うＩ／Ｏのターゲットが、そのＩ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する。その判断の結果が肯定的であれば、ハイパバイザは、非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果をＩ／Ｏ命令の発行元の仮想計算機に返す。【選択図】図１
2010218478.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの仮想計算機を管理するハイパバイザと、
Ｉ／Ｏ（Input/Output）コントローラユニットと
を備え、
前記複合Ｉ／Ｏコントローラは、複数のＩ／Ｏコントローラと、各Ｉ／Ｏコントローラが共有可能な複数のＩ／Ｏポートとを有し、
前記複数のＩ／Ｏコントローラのうちの少なくとも１つのＩ／Ｏコントローラが、いずれかの仮想計算機に割り当てられ、
各Ｉ／Ｏポートに、いずれかのＩ／Ｏデバイスと、いずれかのＩ／Ｏコントローラとが接続され、
前記ハイパバイザは、以下の（ａ）乃至（ｃ）の処理：
（ａ）仮想計算機から発行されたＩ／Ｏ命令を捕捉する；
（ｂ）前記Ｉ／Ｏ命令に従うＩ／Ｏのターゲットが、前記Ｉ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する；
（ｃ）前記（ｂ）の判断の結果が肯定的であれば、前記非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果を前記Ｉ／Ｏ命令の発行元の仮想計算機に返す；
を行う、
計算機システム。
【請求項２】
前記少なくとも１つの仮想計算機は、第一の仮想計算機と第二の仮想計算機を含み、
前記複数のＩ／Ｏコントローラは、
前記第一の仮想計算機に割り当てられる第一のＩ／Ｏコントローラと、
前記第二の仮想計算機に割り当てられる第二のＩ／Ｏコントローラと
を含み、
前記第一のＩ／Ｏコントローラは、第一及び第二のポートスイッチレジスタと、第一及び第二のポートデバイスとを有し、
前記第二のＩ／Ｏコントローラは、第一及び第二のポートデバイスを有し、
前記第一のポートスイッチレジスタは、前記第一のＩ／Ｏポートと、前記第一のＩ／Ｏコントローラの前記第一のポートデバイスと、前記第二のＩ／Ｏコントローラの前記第一のポートデバイスとに接続されており、前記第一のＩ／Ｏポートを前記第一のＩ／Ｏコントローラと第二のＩ／Ｏコントローラのどちらに接続するかを表す値を記憶し、
前記第二のポートスイッチレジスタは、前記第二のＩ／Ｏポートと、前記第一のＩ／Ｏコントローラの前記第二のポートデバイスと、前記第二のＩ／Ｏコントローラの前記第二のポートデバイスとに接続されており、前記第二のＩ／Ｏポートを前記第一のＩ／Ｏコントローラと第二のＩ／Ｏコントローラのどちらに接続するかを表す値を記憶し、
各第一のポートデバイスは、前記第一のＩ／Ｏポートに対応しており、
各第二のポートデバイスは、前記第二のＩ／Ｏポートに対応しており、
前記第一のＩ／Ｏコントローラの前記第一のポート状態レジスタは、前記第一のポートスイッチレジスタが前記第一の値を記憶しているため、デバイスが接続されていることを意味する値である接続値を記憶し、一方、前記第二のＩ／Ｏコントローラの前記第一のポート状態レジスタは、前記第一のＩ／Ｏコントローラの前記第一のポート状態レジスタが前記接続値を記憶しているため、デバイスが接続されていないことを意味する値である非接続値を記憶し、
前記第二のＩ／Ｏコントローラの前記第二のポート状態レジスタは、前記第二のポートスイッチレジスタが前記第二の値を記憶しているため、デバイスが接続されていることを意味する値である接続値を記憶し、一方、前記第一のＩ／Ｏコントローラの前記第二のポート状態レジスタは、前記第二のＩ／Ｏコントローラの前記第二のポート状態レジスタが前記接続値を記憶しているため、デバイスが接続されていないことを意味する値である非接続値を記憶し、
前記第一の仮想計算機が、割り当てられている前記第一のＩ／Ｏコントローラに対応した論理的な第一のＩ／Ｏコントローラを有し、前記論理的な第一のＩ／Ｏコントローラは、論理的な第一のポート状態レジスタと、論理的な第二のポート状態レジスタと、論理的な第一のポートスイッチレジスタと、論理的な第二のポートスイッチレジスタとを有し、
前記第二の仮想計算機が、割り当てられている前記第二のＩ／Ｏコントローラに対応した論理的な第二のＩ／Ｏコントローラを有し、前記論理的な第二のＩ／Ｏコントローラは、論理的な第一のポート状態レジスタと、論理的な第二のポート状態レジスタとを有し、
前記ハイパバイザが、前記論理的な第二のポートスイッチレジスタに記憶される値を記憶するための領域であるレジスタ領域を管理しており、起動したときに、前記複合Ｉ／Ｏコントローラをリセットし、前記第一のポートスイッチレジスタに、前記第一のＩ／Ｏポートが前記第一のＩ／Ｏコントローラに接続されており前記第二のＩ／Ｏコントローラに接続されていないことを意味する第一の値を書き込み、前記第二のポートスイッチレジスタに、前記第二のＩ／Ｏポートが前記第二のＩ／Ｏコントローラに接続されており前記第一のＩ／Ｏコントローラに接続されていないことを意味する第二の値を書き込み、
（Ａ）前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記論理的な第二のポートスイッチレジスタを指定した、前記第一の仮想計算機からのライト命令であり、前記（ｂ）において、前記非割当ポート関連デバイスが、前記第二のポートスイッチレジスタである場合、前記ハイパバイザが、前記（ｃ）において、ライト対象の値を前記第二のポートスイッチレジスタに書き込まず、前記レジスタ領域に前記ライト対象の値を書き込み、
（Ｂ）前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記論理的な第二のポートスイッチレジスタを指定した、前記第一の仮想計算機からのリード命令であり、前記（ｂ）において、前記非割当ポート関連デバイスが、前記第二のポートスイッチレジスタである場合、前記ハイパバイザが、前記（ｃ）において、前記第二のポートスイッチレジスタに記憶されている値を読み出さず、前記レジスタ領域に現在記憶されている値を読み出し、読み出した値を前記第一の仮想計算機に返し、
（Ｃ）前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記論理的な第二又は第一のポート状態レジスタを指定した、前記第一又は第二の仮想計算機からのライト命令であり、前記（ｂ）において、前記非割当ポート関連デバイスが、ライト元の仮想計算機に割り当てられていないＩ／Ｏコントローラのポート状態レジスタである場合、前記ハイパバイザが、前記（ｃ）において、そのポート状態レジスタに対するライトを行わず、ライト元の仮想計算機からのライト命令に従う書き込みを非実行とし、
（Ｄ）前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記論理的な第二又は第一のポート状態レジスタを指定した、前記第一又は第二の仮想計算機からのリード命令であり、前記（ｂ）において、前記非割当ポート関連デバイスが、そのリード元の仮想計算機に割り当てられていないＩ／Ｏコントローラのポート状態レジスタである場合、前記ハイパバイザが、前記（ｃ）において、そのポート状態レジスタからの読み出しを行わず、デバイスが接続されていないことを意味する値である非接続値をリード元の仮想計算機に返す、
請求項１記載の計算機システム。
【請求項３】
前記第一のＩ／Ｏコントローラは、ＥＨＣＩ（Enhanced Host Controller Interface）コントローラであり、
前記第二のＩ／Ｏコントローラは、ＵＨＣＩ（Universal Host Controller Interface）コントローラであり、
前記複数のＩ／Ｏポートは、第一のＵＳＢ（Universal Serial Bus）ポートと、第二のＵＳＢポートとを含み、
前記第一のＵＳＢポートに第一のＵＳＢインタフェースで接続されるＩ／Ｏデバイスは、仮想的なストレージ装置であり、
前記第二のＵＳＢポートに第二のＵＳＢインタフェースで接続されるＩ／Ｏデバイスは、仮想的な入力装置である、
請求項２記載の計算機システム。
【請求項４】
前記複数のＩ／Ｏコントローラは、
第一の対象に割り当てられる第一のＩ／Ｏコントローラと、
第二の対象に割り当てられる第二のＩ／Ｏコントローラと
を含み、
前記第一の対象と前記第二の対象の少なくとも一方が仮想計算機であり、
前記第一のＩ／Ｏコントローラは、第一及び第二のポートスイッチを有し、
前記第一のポートスイッチは、前記第一のＩ／Ｏポートを前記第一のＩ／Ｏコントローラと第二のＩ／Ｏコントローラのどちらかに選択的に接続するためのデバイスであり、
前記第二のポートスイッチは、前記第二のＩ／Ｏポートを前記第一のＩ／Ｏコントローラと第二のＩ／Ｏコントローラのどちらかに選択的に接続するためのデバイスであり、
前記ハイパバイザが、起動したときに、前記第一のポートスイッチを制御することにより前記第一のＩ／Ｏポートを前記第一のＩ／Ｏコントローラに接続することと、前記第二のポートスイッチを制御することにより前記第二のＩ／Ｏポートを前記第二のＩ／Ｏコントローラに接続することとを実行し、
前記（ｂ）において、前記非割当ポート関連デバイスが、前記第二のポートスイッチである、
請求項１記載の計算機システム。
【請求項５】
前記ハイパバイザが、前記第二のポートスイッチに対するリードで返す値であるスイッチ値を管理しており、
前記（ａ）において、捕捉されたＩ／Ｏ命令が、前記第二のポートスイッチに対する、前記第一の対象からのライト命令である場合、前記ハイパバイザが、前記（ｃ）において、現在の前記スイッチ値をライト対象の値に更新し、
前記（ａ）において、捕捉されたＩ／Ｏ命令が、前記第二のポートスイッチに対する、前記第一の対象からのリード命令である場合、前記ハイパバイザが、前記（ｃ）において、現在の前記スイッチ値を前記第一の対象に返す、
請求項４記載の計算機システム。
【請求項６】
前記第一及び第二のＩ／Ｏコントローラは、それぞれ、前記第一及び第二のＩ／Ｏポートにそれぞれ対応する第一及び第二のポート状態記憶領域を有し、
各ポート状態記憶領域は、そのポート状態レジスタに対応するＩ／ＯポートにＩ／Ｏデバイスが接続されているか否かに関する値を記憶し、
前記（ｂ）において、前記Ｉ／Ｏ命令の発行元が前記第一の対象である場合、前記非割当ポート関連デバイスは、前記第一のＩ／Ｏコントローラの前記第二のポート状態記憶領域であり、
前記（ｂ）において、前記Ｉ／Ｏ命令の発行元が前記第二の対象である場合、前記非割当ポート関連デバイスは、前記第二のＩ／Ｏコントローラの前記第一のポート状態記憶領域である、
請求項４記載の計算機システム。
【請求項７】
前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記第一又は第二の対象からのライト命令である場合、前記ハイパバイザが、前記（ｃ）において、前記非割当ポート関連デバイスであるポート状態レジスタに対するライトを行わず、前記第一又は第二の対象からのライト命令に従うライトを非実行とし、
前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記第一又は第二の対象からのリード命令である場合、前記ハイパバイザが、前記（ｃ）において、前記非割当ポート関連デバイスであるポート状態レジスタからの読み出しを行わず、デバイスが接続されていないことを意味する値である非接続値を前記第一又は第二の対象に返す、
請求項６記載の計算機システム。
【請求項８】
前記複数のＩ／Ｏコントローラは、
第一の対象に割り当てられる第一のＩ／Ｏコントローラと、
第二の対象に割り当てられる第二のＩ／Ｏコントローラと
を含み、
前記第一の対象と前記第二の対象の少なくとも一方が仮想計算機であり、
前記第一のＩ／Ｏコントローラは、前記第一及び第二のＩ／Ｏポートと、前記第一及び第二のＩ／Ｏポートにそれぞれ対応する第一及び第二のポート状態記憶領域とを有し、
前記第二のＩ／Ｏコントローラは、前記第一及び第二のＩ／Ｏポートにそれぞれ対応する第一及び第二のポート状態記憶領域を有し、
各ポート状態記憶領域は、そのポート状態レジスタに対応するＩ／ＯポートにＩ／Ｏデバイスが接続されているか否かに関する値を記憶し、
前記（ｂ）において、前記Ｉ／Ｏ命令の発行元が前記第一の対象である場合、前記非割当ポート関連デバイスは、前記第一のＩ／Ｏコントローラの前記第二のポート状態記憶領域であり、
前記（ｂ）において、前記Ｉ／Ｏ命令の発行元が前記第二の対象である場合、前記非割当ポート関連デバイスは、前記第二のＩ／Ｏコントローラの前記第一のポート状態記憶領域である、
請求項１記載の計算機システム。
【請求項９】
前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記第一又は第二の対象からのライト命令である場合、前記ハイパバイザが、前記（ｃ）において、前記非割当ポート関連デバイスであるポート状態レジスタに対するライトを行わず、前記第一又は第二の対象からのライト命令に従うライトを非実行とし、
前記（ａ）において、捕捉されたＩ／Ｏ命令は、前記第一又は第二の対象からのリード命令である場合、前記ハイパバイザが、前記（ｃ）において、前記非割当ポート関連デバイスであるポート状態レジスタからの読み出しを行わず、デバイスが接続されていないことを意味する値である非接続値を前記第一又は第二の対象に返す、
請求項８記載の計算機システム。
【請求項１０】
複合Ｉ／Ｏコントローラ内のＩ／Ｏコントローラに割り当てられた仮想計算機を管理するハイパバイザであって、
仮想計算機から発行されたＩ／Ｏ（Input/Output）命令を捕捉する捕捉部と、
前記Ｉ／Ｏ命令に従うＩ／Ｏのターゲットが、前記Ｉ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する判断部と、
前記判断の結果が肯定的であれば、前記非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果を前記Ｉ／Ｏ命令の発行元の仮想計算機に返す命令処理部と
を備え、
前記複合Ｉ／Ｏコントローラは、複数のＩ／Ｏコントローラと、各Ｉ／Ｏコントローラが共有可能な複数のＩ／Ｏポートとを有し、
前記複数のＩ／Ｏコントローラのうちの少なくとも１つのＩ／Ｏコントローラが、いずれかの仮想計算機に割り当てられ、
各Ｉ／Ｏポートに、いずれかのＩ／Ｏデバイスと、いずれかのＩ／Ｏコントローラとが接続されている、
ハイパバイザ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハイパバイザを有する計算機システムに関する。
【背景技術】
【０００２】
計算機システムとして、ハイパバイザを有した計算機システムが知られている（例えば特許文献１）。この種の計算機システムでは、一般に、物理的な計算機システム上で、ハイパバイザや、仮想計算機が起動する。物理的な計算機システムは、物理的なハードウェア資源（例えばプロセッサやメモリ）を有する。
【０００３】
また、この種の計算機システムでは、通常、仮想計算機の論理的なアドレスと実際の物理的なアドレスとの関係を管理するためのアドレス変換技術が採用される。アドレス変換技術としては、例えば、特許文献２に開示の技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−２０２９９９号公報
【特許文献２】特開２００４−２２０２１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
物理的な計算機システムに、Ｉ／Ｏ（Input/Output）デバイスのコントローラ（Ｉ／Ｏコントローラ）が備えられる。Ｉ／Ｏコントローラとしては、個々に独立したコントローラもあれば、複数のＩ／Ｏコントローラを有する複合Ｉ／Ｏコントローラもある。
【０００６】
複合Ｉ／Ｏコントローラは、複数のＩ／Ｏポートを有する。複合Ｉ／Ｏコントローラ内の各Ｉ／Ｏコントローラが、それら複数のＩ／Ｏポートを共有できる。複数のＩ／Ｏコントローラのうちの一つのＩ／Ｏコントローラが、どのＩ／ＯポートをどのＩ／Ｏコントローラに接続するかの接続制御を行う機能を有する。各Ｉ／Ｏコントローラは、そのＩ／Ｏコントローラに接続されているＩ／Ｏポートを介して、そのＩ／Ｏポートに接続されているＩ／Ｏデバイスを制御する。
【０００７】
アドレス変換技術を利用することにより、個々の仮想計算機に別々のＩ／Ｏコントローラを割り当てることができる。これにより、例えば、或る仮想計算機が或るＩ／Ｏデバイスを利用している間に、別の仮想計算機が別のＩ／Ｏデバイスを利用することができる。
【０００８】
しかし、個々の仮想計算機が別々にＩ／Ｏデバイスを利用することができないケースが生じ得る。具体的には、仮想計算機から発行されたＩ／Ｏ命令のターゲットが、その仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである場合に、そのようなケースが生じ得る。
【０００９】
そこで、本発明の目的は、複数のＩ／Ｏデバイスが接続される複合Ｉ／Ｏコントローラを有する計算機システムにおいて、個々の仮想計算機が別々にＩ／Ｏデバイスを利用することができなくなることを防ぐことにある。
【課題を解決するための手段】
【００１０】
ハイパバイザが、仮想計算機から発行されたＩ／Ｏ命令を捕捉する。そして、ハイパバイザは、そのＩ／Ｏ命令に従うＩ／Ｏのターゲットが、そのＩ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する。その判断の結果が肯定的であれば、ハイパバイザは、非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果をＩ／Ｏ命令の発行元の仮想計算機に返す。
【００１１】
ここで言う「仮想的な実行結果」とは、例えば、Ｉ／Ｏのターゲットに関わるポートに仮想計算機から見てあたかもＩ／Ｏデバイスが何も接続されていないように見える実行結果である。
【００１２】
なお、その判断の結果が否定的であれば、ハイパバイザは、Ｉ／Ｏ命令に従うＩ／Ｏ、すなわち、Ｉ／Ｏのターゲットであるデバイスに対してのＩ／Ｏを実行して良い。
【発明の効果】
【００１３】
ハイパバイザが、Ｉ／Ｏのターゲットが、そのＩ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する。その判断の結果が肯定的であれば、ハイパバイザは、非割当ポート関連デバイスに対するＩ／Ｏを行わない。これにより、複数のＩ／Ｏデバイスが接続される複合Ｉ／Ｏコントローラを有する計算機システムにおいて、個々の仮想計算機が別々にＩ／Ｏデバイスを利用することができなくなることを防ぐことができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、本発明の実施例１に係る計算機システム１００の概要を示す。
【図２】図２は、計算機システム１００における物理計算機システム５１を示す。
【図３】図３は、計算機システム１００における仮想計算機１（１１）及び２（３１）の構成とハイパバイザ５０の構成とを示す。
【図４】図４は、仮想計算機１からライト命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【図５】図５は、仮想計算機２からライト命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【図６】図６は、仮想計算機１からリード命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【図７】図７は、仮想計算機２からリード命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【図８】図８は、本発明の実施例２に係る計算機システムにおける仮想計算機１及びハイパバイザ７１を示す。
【図９】図９は、本発明の実施例３に係る計算機システムにおける物理計算機システム９１の構成を示す。
【図１０】図１０は、本発明の実施例３に係る計算機システムにおけるハイパバイザ５０及び仮想計算機の構成を示す。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照して、本発明の幾つかの実施例を説明する。
【実施例１】
【００１６】
図１は、本発明の実施例１に係る計算機システム１００の概要を示す。
【００１７】
物理的な計算機システム５１上で、ハイパバイザ５０及び複数の仮想計算機が実行される。仮想計算機としては、例えば、後述の上位コントローラ２０ＰＡが割り当てられる仮想計算機１（１１）と、下位コントローラ２０ＰＢが割り当てられる仮想計算機２（３１）とがある（以下、便宜上、「仮想計算機１」、「仮想計算機２」と略す）。
【００１８】
物理的な計算機システム５１が複合Ｉ／Ｏコントローラ６１を有する。複合Ｉ／Ｏコントローラ６１は、複数のＩ／Ｏポートとして、例えば、Ｉ／Ｏポート０（６２）とＩ／Ｏポート１（６３）とを有する（以下、便宜上、「ポート０」、「ポート１」と略す）。ポート０には、Ｉ／Ｏデバイス０（６４）が接続され、ポート１には、Ｉ／Ｏデバイス１（６５）が接続される（以下、便宜上、「Ｉ／Ｏデバイス０」、「Ｉ／Ｏデバイス１」と略す）。Ｉ／Ｏデバイス０は、仮想計算機１に利用されるＩ／Ｏデバイスであり、Ｉ／Ｏデバイス１は、仮想計算機２に利用されるＩ／Ｏデバイスである。
【００１９】
複合Ｉ／Ｏコントローラ６１は、１つの上位コントローラ２０ＰＡと、１つの下位コントローラ２０ＰＢとを有する（下位コントローラ２０ＰＢの数は、実施例３で説明するように２以上であっても良い）。図１に示すように、上位コントローラと下位コントローラの共通の要素について、参照符号の末尾が「Ａ」である要素は、上位コントローラが有する要素であり、参照符号の末尾が「Ｂ」である要素は、下位コントローラが有する要素である。
【００２０】
上位コントローラ２０ＰＡ及び下位コントローラ２０ＰＢが有する共通の要素として、コントローラ共通デバイス２１ＰＡ（２１ＰＢ）と、ポート０デバイス２２ＰＡ（２２ＰＢ）と、ポート１デバイス２３ＰＡ（２３ＰＢ）とがある。コントローラ共通デバイス２１ＰＡ（２１ＰＢ）は、割当先の仮想計算機１（仮想計算機２）で指定された命令を実行する。ポート０デバイス２２ＰＡ（２２ＰＢ）は、ポート０に接続され得るデバイスであり、ポート０にＩ／Ｏデバイスが接続されているか否かを表す値が記憶されるレジスタを有する。ポート１デバイス２３ＰＡ（２３ＰＢ）は、ポート１に接続され得るデバイスであり、ポート１にＩ／Ｏデバイスが接続されているか否かを表す値が記憶されるレジスタを有する。
【００２１】
上位コントローラ２０ＰＡは、ポートの接続の切り替えをできるＩ／Ｏコントローラであり、下位コントローラ２０ＰＢは、ポートの接続の切り替えを制御できないＩ／Ｏコントローラである。
【００２２】
そのため、上位コントローラ２０ＰＡが有し下位コントローラ２０ＰＢが有しない要素として、ポート０スイッチレジスタ２７Ｐと、ポート１スイッチレジスタ２８Ｐと、ポート０と、ポート１とがある。レジスタ２７Ｐ（２８Ｐ）は、ポート０（ポート１）をどちらのコントローラ２０ＰＡ又は２０ＰＢに接続するかのスイッチとしての役割を有するレジスタである。具体的には、レジスタ２７Ｐは、ポート０とデバイス２２ＰＡ及び２２ＰＢとに接続されており、ポート０をどちらのコントローラ２０ＰＡ又は２０ＰＢに接続するかを表す値を記憶する。一方、レジスタ２８Ｐは、ポート１とデバイス２３ＰＡ及び２３ＰＢとに接続されており、ポート１をどちらのコントローラ２０ＰＡ又は２０ＰＢに接続するかを表す値を記憶する。
【００２３】
ハイパバイザ５０は、起動したときに、レジスタ２７Ｐに、ポート０を上位コントローラ２０ＰＡに接続することを表す第一の値を設定し、レジスタ２８Ｐに、ポート１を下位コントローラ２０ＰＢに接続することを表す第二の値を設定する。
【００２４】
その後、例えば、仮想計算機１から、或るアドレス範囲を指定したＩ／Ｏ命令が発行されたとする。この場合、ハイパバイザ５０は、そのＩ／Ｏ命令を捕捉する。そして、ハイパバイザ５０は、そのＩ／Ｏ命令に従うＩ／Ｏのターゲットが、仮想計算機１に割り当てられていない下位コントローラ２０ＰＢに接続されたポート１に関わるデバイスである非割当ポート関連デバイスであるか否かを判断する。その判断の結果が否定的であれば、ハイパバイザ５０は、補足したＩ／Ｏ命令に応答して、Ｉ／Ｏのターゲットのデバイス（例えばポート０に関わるデバイス）に対するＩ／Ｏを行う。一方、その判断の結果が肯定的であれば、ハイパバイザ５０は、非割当ポート関連デバイスに対するＩ／Ｏを行わず、仮想的な実行結果をＩ／Ｏ命令の発行元の仮想計算機に返す。
【００２５】
ここで、ポートに関わるデバイスとしては、例えば、ポート０デバイス２２ＰＡ（２２ＰＢ）内のレジスタ、ポート１デバイス２３ＰＡ（２３ＰＢ）内のレジスタ、スイッチレジスタ２７Ｐ及び２８Ｐがある。従って、非割当ポート関連デバイスとしては、Ｉ／Ｏ命令の発行元が仮想計算機１であれば、ポート１デバイス２３ＰＡ内のレジスタ、及び／又は、ポート１スイッチレジスタ２８Ｐであり、Ｉ／Ｏ命令の発行元が仮想計算機２であれば、ポート０デバイス２２ＰＢ内のレジスタである。
【００２６】
ハイパバイザ５０による上記の制御により、ポート１デバイス２３ＰＡ内のレジスタに記憶されている値やポート１スイッチレジスタ２８Ｐに記憶されている値が仮想計算機１から更新されることを防ぐことができる。また、上位コントローラ２０ＰＡは仮想計算機２に割り当てられていないため、仮想計算機２からそれらの値が更新されることは無い。これらの理由から、仮想計算機２がＩ／Ｏデバイス１を利用している最中にポート１と下位コントローラ２０ＰＢとが切断されてしまうことを防ぐことができる。その結果、仮想計算機２がＩ／Ｏデバイス１を利用している最中にＩ／Ｏデバイス１を認識できなくなってしまうということを防ぐことができる。
【００２７】
以下、本実施例を詳細に説明する。
【００２８】
図２は、計算機システム１００における物理計算機システム５１を示す。図３は、計算機システム１００における仮想計算機１（１１）及び２（３１）の構成とハイパバイザ５０の構成とを示す。
【００２９】
物理計算機システム５１では、Ｉ／Ｏバス５６に、パス制御装置５２と、複合Ｉ／Ｏコントローラ５６とが接続されている。バス制御装置５２に、ＣＰＵ（Central Processing Unit）５４及びメモリ５５が接続されている。
【００３０】
バス制御装置５２は、この装置５２に接続されている要素間の通信を制御する装置（例えば回路基板）である。バス制御装置５２は、ＤＭＡ（Direct Memory Access）アドレス変換回路５３を有する。ＤＭＡアドレス変換回路５３は、ＤＭＡでのアクセスの際に指定されたアドレスを別のアドレスに変換するアドレス変換処理を行うハードウェア回路である。
【００３１】
デバイス２１ＰＡ（２１ＰＢ）は、コマンドレジスタ（図では「C-REG.」と略記）２４ＰＡ（２４ＰＢ）を有する。コマンドレジスタ２４ＰＡ（２４ＰＢ）は、コントローラ毎に一つ存在する。コマンドレジスタ２４ＰＡ（２４ＰＢ）に値が書き込まれることで、そのレジスタ２４ＰＡ（２４ＰＢ）を有するコントローラ２０ＰＡ（２０ＰＢ）のリセットや、後述のデバイスドライバ１３（３３）がメモリ５５（フレーム１２（３２））上に作成した命令の処理の開始及び終了を行うことができる。
【００３２】
ポート０デバイス２２ＰＡ（２２ＰＢ）は、ポート状態レジスタ（図では「PS-REG.」と略記）２５ＰＡ（２５ＰＢ）を有する。同様に、ポート１デバイス２３ＰＡ（２３ＰＢ）も、ポート状態レジスタ２６ＰＡ（２６ＰＢ）を有する。各レジスタ２５ＰＡ、２６ＰＡ、２５ＰＢ及び２６ＰＢが、対応するポート０又は１にＩ／Ｏデバイス０又は１が接続されているか否かを表す値を記憶する。
【００３３】
前述したレジスタ２４ＰＡ、２５ＰＡ、２６ＰＡ、２４ＰＢ、２５ＰＢ及び２６ＰＢは、仮想計算機１，２が指定可能なアドレス空間（例えば、ＭＭＩＯ（Memory Mapped I/O）空間、及び／又は、Ｉ／Ｏポート空間）にマッピングされる。例えば、上位コントローラ２０ＰＡにあるレジスタ２４ＰＡ、２５ＰＡ及び２６ＰＡは、ＭＭＩＯ空間にマッピングされ、下位コントローラ２０ＰＢにある２４ＰＢ、２５ＰＢ及び２６ＰＢは、Ｉ／Ｏポート空間にマッピングされる。
【００３４】
前述したように、上位コントローラ２０ＰＡは、ポートスイッチレジスタ２７Ｐ、２８Ｐを有する。このレジスタは、Ｉ／Ｏポート毎に用意される。
【００３５】
以上のような複合Ｉ／Ｏコントローラ６１は、例えばＵＳＢ（Universal Serial Bus）コントローラである。具体的には、例えば、上位コントローラ２０ＰＡは、ＥＨＣＩ（Enhanced Host Controller Interface）コントローラ（ＵＳＢ２．０コントローラ）であり、下位コントローラ２０ＰＢは、ＵＨＣＩ（Universal Host Controller Interface）コントローラ（ＵＳＢ１．１コントローラ）である。ポート０及び１は、ＵＳＢポートである。
【００３６】
ポート０及び１とＩ／Ｏデバイス０及び１の接続は、例えば固定的である。このため、途中でＩ／Ｏデバイス０及び１が外される（例えば交換される）ことはない。この種のＩ／Ｏデバイスとしては、例えば、リモートＫＶＭ（Keyboard, Video, Mouse）コンソールに含まれているＩ／Ｏデバイスが考えられる。リモートＫＶＭコンソールは、複合Ｉ／Ｏコントローラ６１に基板上の配線で固定的に接続されている。また、一般に、リモートＫＶＭコンソールでは、一方のＩ／Ｏデバイス１が、ＵＳＢ１．１で接続される仮想的なインプットデバイス（典型的にはキーボード／マウス）であり、他方のＩ／Ｏデバイス０が、ＵＳＢ２．０で接続される仮想的なストレージデバイスである。このような構成が採用された場合、本実施例では、例えば、仮想計算機１から仮想的なストレージデバイスからソフトウェアをインストールしている最中に、仮想計算機２が、仮想的なインプットデバイスを利用することができる。そして、仮想計算機２が仮想的なインプットデバイスを利用している最中に、仮想計算機２がそのインプットデバイスを認識できなくなることが防止される。
【００３７】
以上のような物理計算機システム５１上でハイパバイザ５０が起動する。
【００３８】
ハイパバイザ５０は、例えば、管理メモリ領域６６を管理する。この領域６６に保持される値は、後述の論理的なポート１スイッチレジスタ２８Ｌに格納される値である。
【００３９】
また、ハイパバイザ５０は、捕捉部４０１、判断部４０２、命令処理部４０３、ルール設定部４０４及び初期設定部４０５等の機能を有する。これらの機能は、例えばＣＰＵ５４でハイパバイザ５０が実行されることにより実現される。捕捉部４０１は、仮想計算機１及び２から発行されたＩ／Ｏ命令、特に、物理的なレジスタがマッピングされたアドレス空間を指定したＩ／Ｏ命令を捕捉する。判断部４０２は、Ｉ／Ｏ命令に従うＩ／Ｏのターゲットが、そのＩ／Ｏ命令の発行元の仮想計算機に割り当てられていないＩ／Ｏコントローラに接続されたＩ／Ｏポートに関わるデバイスである非割当ポート関連デバイスであるか否かを判断する。命令処理部４０３は、Ｉ／Ｏ命令に従うＩ／Ｏや、Ｉ／Ｏを行わず仮想的な実行結果をＩ／Ｏ命令の発行元の仮想計算機に返すことを行う。ルール設定部４０４は、アドレス変換ルールをメモリ空間に設定する。初期設定部４０５は、ハイパバイザが起動したときにポートスイッチレジスタ２７Ｐ及び２８Ｐ等のレジスタに値を設定する。
【００４０】
起動したハイパバイザ５０は、例えば、複合Ｉ／Ｏコントローラ６１をリセットする。そして、ハイパバイザ５０（初期設定部４０５）は、上位コントローラ２０ＰＡ内のポート０スイッチレジスタ２７Ｐに、ポート０を上位コントローラ２０ＰＡに接続することを表す第一の値を設定し、ポート１スイッチレジスタ２８Ｐに、ポート１を下位コントローラ２０ＰＢに接続することを表す第二の値を設定する。
【００４１】
ハイパバイザ５０が、仮想計算機１と仮想計算機２を定義する。ハイパバイザ５０（ルール設定部４０４）は、上位コントローラ２０ＰＡについてのアドレス変換ルールを、メモリ５５における、仮想計算機１のメモリ空間に設定する。同様に、ハイパバイザ５０は、下位コントローラ２０ＰＢについてのアドレス変換ルールを、メモリ５５における、仮想計算機２のメモリ空間に設定する。これにより、上位コントローラ２０ＰＡは仮想計算機１のメモリ領域、下位コントローラ２０ＰＢは仮想計算機２のメモリ領域に対して、それぞれＤＭＡを行うことが可能となる。上位コントローラ２０ＰＡ、下位コントローラ２０ＰＢともに自らが割当てられた仮想計算機のメモリ領域以外に対してＤＭＡを行うことはできない。
【００４２】
具体的には、仮想計算機１には、論理的な上位コントローラ２０ＬＡが設定される。図２及び図３に示すように、参照符号の末尾が「Ｐ」である要素は、物理的なＩ／Ｏコントローラにある要素であり、参照符号の末尾が「Ｌ」である要素は、論理的なＩ／Ｏコントローラにある要素である。つまり、論理的な上位コントローラ２０ＬＡは、論理的なコントローラ共通デバイス２１ＬＡと、論理的なポート０デバイス２２ＬＡと、論理的なポート１デバイス２３ＬＡと、論理的なポートスイッチレジスタ２７Ｌ（２８Ｌ）とを有する。デバイス２１ＬＡは、論理的なコマンドレジスタ２４ＬＡを有し、デバイス２２ＬＡ（２３ＬＡ）は、論理的なポート状態レジスタ２５ＬＡ（２６ＬＡ）を有する。論理的なレジスタ２４ＬＡ、２５ＬＡ、２６ＬＡ、２７Ｌ及び２８Ｌは、物理的なレジスタ２４ＰＡ、２５ＰＡ、２６ＰＡ、２７Ｐ及び２８Ｐがマッピングされたアドレス空間（例えばＭＭＩＯ空間）である。例えば、論理的なレジスタ２８Ｌに対するＩ／Ｏは、物理的なレジスタ２８Ｐに対するＩ／Ｏということになる。
【００４３】
同様に、仮想計算機２には、論理的な下位コントローラ２０ＬＢが設定される。論理的な下位コントローラ２０ＬＢは、上述のコントローラ２０ＬＡと同様に、物理的な下位コントローラ２０ＰＢが有する物理的な要素２１ＰＢ、２２ＰＢ、２３ＰＢ、２４ＰＢ、２５ＰＢ及び２６ＰＢに対応した論理的な要素２１ＬＢ、２２ＬＢ、２３ＬＢ、２４ＬＢ、２５ＬＢ及び２６ＬＢを有する。
【００４４】
仮想計算機１（及び仮想計算機２）において、それぞれ、オペレーティングシステム（ＯＳ）１４（３４）が起動する。
【００４５】
仮想計算機１のＯＳ１４上のデバイスドライバ１３は、上位コントローラ２０ＰＡの存在を認識し、上位コントローラ２０ＰＡのいずれかのレジスタに対応するアドレス空間（いずれかの論理的なレジスタ）を指定したＩ／Ｏ命令を発行する。そのＩ／Ｏ命令は、ハイパバイザ５０によって捕捉される。ハイパバイザ５０は、ターゲットが、仮想計算機１に割り当てられた上位コントローラ２０ＰＡに接続されているポート０に対応した物理的なレジスタであれば（指定されたアドレス空間が、そのレジスタに対応した論理的なレジスタであれば）、ポート０に対応した物理的なレジスタに対するＩ／Ｏを行う。一方、ターゲットが、仮想計算機１に割り当てられていない下位コントローラ２０ＰＢに接続されているポート１に対応した物理的なレジスタであれば、ハイパバイザ５０は、下記（Ａ）乃至（Ｄ）のいずれかの処理；
（Ａ）Ｉ／Ｏ命令が、リード命令であり、ターゲットが、ポート１の物理的な状態レジスタ２６ＰＡであれば、ポート１の物理的な状態レジスタ２６ＰＡにアクセスせず、Ｉ／Ｏデバイスが未接続であることを意味する値（未接続値）を、ポート１の論理的な状態レジスタ２６ＬＡに書き込む；
（Ｂ）Ｉ／Ｏ命令が、ライト命令であり、ターゲットが、ポート１の物理的な状態レジスタ２６ＰＡであれば、ポート１の物理的な状態レジスタ２６ＰＡにライト対象の値を書き込まず、そのライト命令を無視する；
（Ｃ）Ｉ／Ｏ命令が、ライト命令であり、ターゲットが、物理的なポート１スイッチレジスタ２８Ｐであれば、そのレジスタ２８Ｐにライト対象の値を書き込まず、管理メモリ領域６６に記憶されている値に、そのライト対象の値を上書きする；
（Ｄ）Ｉ／Ｏ命令が、リード命令であり、ターゲットが、物理的なポート１スイッチレジスタ２８Ｐであれば、そのレジスタ２８Ｐにアクセスせず、管理メモリ領域６６に記憶されている値を取得し、その値を、論理的なポート１スイッチレジスタ２８Ｌに書き込む；
を行う。これにより、仮想計算機１のデバイスドライバ１３は、仮想計算機１に割り当てられている上位コントローラ２０ＰＡに接続されているポート０に接続されているＩ／Ｏデバイス０を認識し、仮想計算機１に割り当てられていない下位コントローラ２０ＰＢに接続されているポート１に接続されているＩ／Ｏデバイス１を認識しない。
【００４６】
仮想計算機２のＯＳ３４上のデバイスドライバ３３は、下位コントローラ２０ＰＢの存在を認識し、下位コントローラ２０ＰＢのいずれかのレジスタに対応するアドレス空間（いずれかの論理的なレジスタ）を指定したＩ／Ｏ命令を発行する。そのＩ／Ｏ命令は、ハイパバイザ５０によって捕捉される。ハイパバイザ５０は、ターゲットが、仮想計算機２に割り当てられた下位コントローラ２０ＰＡに接続されているポート１に対応した物理的なレジスタであれば、ポート１に対応した物理的なレジスタに対するＩ／Ｏを行う。一方、ターゲットが、仮想計算機２に割り当てられていない上位コントローラ２０ＰＡに接続されているポート０に対応した物理的なレジスタであれば、ハイパバイザ５０は、下記（Ａ）及び（Ｂ）のいずれかの処理；
（Ａ）Ｉ／Ｏ命令が、リード命令であり、ターゲットが、ポート０の物理的な状態レジスタ２５ＰＢであれば、ポート１の物理的な状態レジスタ２５ＰＢにアクセスせず、Ｉ／Ｏデバイスが未接続であることを意味する値（未接続値）を、ポート０の論理的な状態レジスタ２５ＬＢに書き込む；
（Ｂ）Ｉ／Ｏ命令が、ライト命令であり、ターゲットが、ポート０の物理的な状態レジスタ２５ＰＢであれば、ポート１の物理的な状態レジスタ２５ＰＢにライト対象の値を書き込まず、そのライト命令を無視する；
を行う。これにより、仮想計算機２のデバイスドライバ３３は、仮想計算機２に割り当てられている下位コントローラ２０ＰＢに接続されているポート１に接続されているＩ／Ｏデバイス１を認識し、仮想計算機２に割り当てられていない上位コントローラ２０ＰＡに接続されているポート０に接続されているＩ／Ｏデバイス０を認識しない。
【００４７】
なお、仮想計算機１（２）上のデバイスドライバ１３（３３）は、認識したＩ／Ｏデバイス０（１）を操作するフレーム１２（３２）と呼ばれるデータ構造を作成する。フレーム１２（３２）は、メモリ５５における、仮想計算機１（２）に対応したメモリ空間に設定される。コマンドレジスタ２４ＰＡ（２４ＰＢ）に対する値として、例えば、処理開始を表す値と、フレーム１２（３２）に関する論理アドレス（例えば先頭論理アドレス））の値とがある。これらの値の書き込みは、ハイパバイザ５０に捕捉され、ハイパバイザ５０によって、それらの値がコマンドレジスタ２４ＰＡ（２４ＰＢ）に書き込まれる。それを契機に、コントローラ２０ＰＡ（２０ＰＢ）がフレーム処理を開始する。フレーム処理では、コントローラ２０ＰＡ（２０ＰＢ）が、フレーム１２（３２）に関する論理アドレスを基に、フレーム１２（３２）から命令を読んだり、フレーム１２（３２）に命令の実行結果を書いたりする。フレーム１２（３２）へのアクセスは、ＤＭＡで行われる。そのアクセスでは、フレーム１２（３２）に関する論理アドレスが指定されるが、その論理アドレスは、ＤＭＡアドレス変換回路５３により、アクセス元のコントローラ２０ＰＡ（２０ＰＢ）に対応したアドレス変換ルールに従い、物理アドレス（メモリ５５の物理的なアドレス）に変換される。その変換後の物理アドレスに従って、フレーム１２（３２）へのアクセスが行われる。従って、上位コントローラ２０ＰＡのアクセス先は、矢印Ａで示すように、仮想計算機１でのフレーム１２となり、下位コントローラ２０ＰＢのアクセス先は、矢印Ｂで示すように、仮想計算機２でのフレーム３２となる。
【００４８】
以下、ハイパバイザ５０が行う処理を詳細に説明する。
【００４９】
図４は、仮想計算機１からライト命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【００５０】
或るアドレス空間を指定したライト命令が仮想計算機１から発行され（Ｓ４０１）、ハイパバイザ５０が、そのライト命令を捕捉する（Ｓ４０２）。ハイパバイザ５０は、ライトのターゲットが上位コントローラ２０ＰＡ内のデバイスか否か（例えば特定のＭＭＩＯ空間又はＩ／Ｏポート空間か否か）を判断する（Ｓ４０３）。
【００５１】
Ｓ４０３の判断の結果が肯定的であれば（Ｓ４０３：ＹＥＳ）、ハイパバイザ５０は、ライトのターゲットがポート１スイッチレジスタ２８Ｐか否かを判断する（Ｓ４０４）。
【００５２】
Ｓ４０４の判断の結果が肯定的であれば（Ｓ４０４：ＹＥＳ）、ハイパバイザ５０は、ポート１スイッチレジスタ２８Ｐに対する書き込みをせず、管理メモリ領域６６に保持されている値に、ライト対象の値を上書きする（Ｓ４０５）。その後、仮想計算機１の次命令に制御が移動する（Ｓ４１０）。仮想計算機１は、次命令の処理を実行する（Ｓ４１１）。
【００５３】
Ｓ４０４の判断の結果が否定的であれば（Ｓ４０４：ＮＯ）、ハイパバイザ５０は、ライトのターゲットがポート１状態レジスタ２６ＰＡか否かを判断する（Ｓ４０６）。
【００５４】
Ｓ４０６の判断の結果が肯定的であれば（Ｓ４０６：ＹＥＳ）、ハイパバイザ５０は、ポート１状態レジスタ２６ＰＡに対する書き込みをせず、書込みを無視する（Ｓ４０７）。その後、Ｓ４１０が行われる。
【００５５】
Ｓ４０６の判断の結果が否定的であれば（Ｓ４０６：ＮＯ）、ハイパバイザ５０は、ターゲットのデバイスにライト対象のデータを書き込む（Ｓ４０８）。その後、Ｓ４１０が行われる。
【００５６】
Ｓ４０３の判断の結果が否定的であれば（Ｓ４０３：ＮＯ）、ハイパバイザ５０は、ライト命令に従う書き込みエミュレーション処理を行う。その後、Ｓ４１０が行われる。
【００５７】
図５は、仮想計算機２からライト命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【００５８】
或るアドレス空間を指定したライト命令が仮想計算機２から発行され（Ｓ５０１）、ハイパバイザ５０が、そのライト命令を捕捉する（Ｓ５０２）。ハイパバイザ５０は、ライトのターゲットが下位コントローラ２０ＰＢ内のデバイスか否か（例えば特定のＭＭＩＯ空間又はＩ／Ｏポート空間か否か）を判断する（Ｓ５０３）。
【００５９】
Ｓ５０３の判断の結果が肯定的であれば（Ｓ５０３：ＹＥＳ）、ハイパバイザ５０は、ライトのターゲットがポート０状態レジスタ２５ＰＢか否かを判断する（Ｓ５０４）。
【００６０】
Ｓ５０４の判断の結果が肯定的であれば（Ｓ５０４：ＹＥＳ）、ハイパバイザ５０は、ポート０状態レジスタ２５ＰＢに対する書き込みをせず、書込みを無視する（Ｓ５０５）。その後、仮想計算機２の次命令に制御が移動する（Ｓ５０８）。仮想計算機２は、次命令の処理を実行する（Ｓ５０９）。
【００６１】
Ｓ５０４の判断の結果が否定的であれば（Ｓ５０４：ＮＯ）、ハイパバイザ５０は、ターゲットのデバイスにライト対象のデータを書き込む（Ｓ５０６）。その後、Ｓ５０８が行われる。
【００６２】
Ｓ５０３の判断の結果が否定的であれば（Ｓ５０３：ＮＯ）、ハイパバイザ５０は、ライト命令に従う書き込みエミュレーション処理を行う。その後、Ｓ５０８が行われる。
【００６３】
図６は、仮想計算機１からリード命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【００６４】
或るアドレス空間を指定したリード命令が仮想計算機２から発行され（Ｓ７０１）、ハイパバイザ５０が、そのリード命令を捕捉する（Ｓ７０２）。ハイパバイザ５０は、リードトのターゲットが上位コントローラ２０ＰＡ内のデバイスか否かを判断する（Ｓ７０３）。
【００６５】
Ｓ７０３の判断の結果が肯定的であれば（Ｓ７０３：ＹＥＳ）、ハイパバイザ５０は、リードのターゲットがポート１スイッチレジスタ２８Ｐか否かを判断する（Ｓ７０４）。
【００６６】
Ｓ７０４の判断の結果が肯定的であれば（Ｓ７０４：ＹＥＳ）、ハイパバイザ５０は、ポート１スイッチレジスタ２８Ｐからの読み出しをせず、管理メモリ領域６６に保持されている値を読み出す（Ｓ７０５）。その後、ハイパバイザ５０は、読み出したデータを捕捉した命令の格納先に設定し、仮想計算機１の次命令に制御が移動するようにする（Ｓ７１０）。ここでのデータは、管理メモリ領域６６から読み出された値であり、格納先は、論理的なポート１スイッチレジスタ２８Ｌである。Ｓ７１０の後、仮想計算機１が、次命令の処理を実行する（Ｓ７１１）。
【００６７】
Ｓ７０４の判断の結果が否定的であれば（Ｓ７０４：ＮＯ）、ハイパバイザ５０は、リードのターゲットがポート１状態レジスタ２６ＰＡか否かを判断する（Ｓ７０６）。
【００６８】
Ｓ７０６の判断の結果が肯定的であれば（Ｓ７０６：ＹＥＳ）、ハイパバイザ５０は、ポート１状態レジスタ２６ＰＡからの読出しを行わず、Ｉ／Ｏデバイスが未接続であることを表す値（未接続値）を読み出しデータとして設定する（Ｓ７０７）。その後、Ｓ７１０が行われる。そのＳ７１０では、未接続値が論理的なポート１状態レジスタ２６ＬＡに格納される。
【００６９】
Ｓ７０６の判断の結果が否定的であれば（Ｓ７０６：ＮＯ）、ハイパバイザ５０は、ターゲットのデバイスからデータを読み出す（Ｓ７０８）。その後、Ｓ７１０が行われる。
【００７０】
Ｓ７０３の判断の結果が否定的であれば（Ｓ７０３：ＮＯ）、ハイパバイザ５０は、リード命令に従う読み出しエミュレーション処理を行う。その後、Ｓ７１０が行われる。
【００７１】
図７は、仮想計算機２からリード命令が発行された場合にハイパバイザ５０が行う処理のフローチャートである。
【００７２】
或るアドレス空間を指定したリード命令が仮想計算機２から発行され（Ｓ６０１）、ハイパバイザ５０が、そのリード命令を捕捉する（Ｓ６０２）。ハイパバイザ５０は、リードのターゲットが下位コントローラ２０ＰＢ内のデバイスか否かを判断する（Ｓ６０３）。
【００７３】
Ｓ６０３の判断の結果が肯定的であれば（Ｓ６０３：ＹＥＳ）、ハイパバイザ５０は、リードのターゲットがポート０状態レジスタ２５ＰＢか否かを判断する（Ｓ６０４）。
【００７４】
Ｓ６０４の判断の結果が肯定的であれば（Ｓ６０４：ＹＥＳ）、ハイパバイザ５０は、ポート０状態レジスタ２５ＰＢからの読み出しを行わず、Ｉ／Ｏデバイスが未接続であることを表す値（未接続値）を読み出しデータとして設定する（Ｓ６０５）。その後、Ｓ６０８が行われる。そのＳ６０８では、未接続値が論理的なポート１状態レジスタ２６ＬＡに格納される。Ｓ６０８の後、仮想計算機１が、次命令の処理を実行する（Ｓ６０９）。
【００７５】
Ｓ６０４の判断の結果が否定的であれば（Ｓ６０４：ＮＯ）、ハイパバイザ５０は、ターゲットのデバイスからデータを読み出す（Ｓ６０６）。その後、Ｓ６０８が行われる。
【００７６】
Ｓ６０３の判断の結果が否定的であれば（Ｓ６０３：ＮＯ）、ハイパバイザ５０は、リード命令に従う読み出しエミュレーション処理を行う。その後、Ｓ６０８が行われる。
【００７７】
以上が、実施例１の説明である。
【実施例２】
【００７８】
以下、本発明の実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する（これは、後述の実施例３についても同様である）。
【００７９】
図８は、本発明の実施例２に係る計算機システムにおける仮想計算機１及びハイパバイザ７１を示す。なお、物理計算機システムの構成は、実施例１と同じため図示を省略する。
【００８０】
実施例２では、下位コントローラ２０ＰＢが、仮想計算機に代えてハイパバイザ７１に割り当てられる。これにより、ハイパバイザ７１と仮想計算機１間で接続先のＩ／Ｏデバイス０及び１を別々に利用できる。
【００８１】
ハイパバイザ７１がデバイス制御部７３を有する。デバイス制御部７３は、ハイパバイザ７１がどちらのポート０又は１を使えないのかを知っている。このため、下位コントローラ２０ＰＢについてのポート状態レジスタ２５ＰＢ、２６ＰＢを化かす必要はない。ハイパバイザ７１は、自分に割り当てられていない上位コントローラ２０ＰＡを使用する仮想計算機１に影響が出ないように、自分が使用しないポート０に関する、下位コントローラ２０ＰＢ内のレジスタ２５ＰＢにアクセスしなければ良い。
【００８２】
以上が、実施例２の説明である。なお、ハイパバイザ７１には、下位コントローラ２０ＰＢに代えて上位コントローラ２０ＰＡが割り当てられ、下位コントローラ２０ＰＢに仮想計算機が割り当てられても良い。この場合、ハイパバイザ７１は、自分が使用しないポート１に関する、上位コントローラ２０ＰＡ内のレジスタ２３ＰＡ及び２８Ｐにアクセスしなければ良い。
【実施例３】
【００８３】
図９は、本発明の実施例３に係る計算機システムにおける物理計算機システム９１の構成を示す。図１０は、本発明の実施例３に係る計算機システムにおけるハイパバイザ５０及び仮想計算機の構成を示す。
【００８４】
図９に示すように、複合Ｉ／Ｏコントローラ９２が、Ｎ個の下位コントローラ２０ＰＢを有する（Ｎは２以上の整数）。１つの上位コントローラ２０ＰＡ及びＮ個の下位コントローラ２０ＰＢが、（Ｎ＋１）個の仮想計算機に１対１で割り当てられる。なお、実施例２のように、いずれか１つのＩ／Ｏコントローラがハイパバイザに割り当てられても良い。
【００８５】
各下位コントローラ２０ＰＢの構成は、２つのＩ／Ｏポートを共有可能な構成である。このため、１つの下位コントローラ２０ＰＢにつき２つのＩ／Ｏポートが備えられる。それ故、Ｎ個の下位コントローラ２０ＰＢがある場合には、ポート０からポート（２Ｎ−１）の２Ｎ個のポートが備えられることになる。
【００８６】
複合Ｉ／Ｏコントローラ９２が複数の下位コントローラ２０ＰＢを備えていても、個々の仮想計算機が別々にＩ／Ｏデバイスを利用することを保証することができる。なぜなら、上位コントローラ２０ＰＡが割り当てられている仮想計算機（又はハイパバイザ）から、その仮想計算機（又はハイパバイザ）に割り当てられていない下位コントローラ２０ＰＢに接続されているポートに関するレジスタにアクセスがされないようになっているからである。
【００８７】
以上、本発明の好適な幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【００８８】
１００…計算機システム
【図１】
2010218478.tif 000003
【図２】
2010218478.tif 000004
【図３】
2010218478.tif 000005
【図４】
2010218478.tif 000006
【図５】
2010218478.tif 000007
【図６】
2010218478.tif 000008
【図７】
2010218478.tif 000009
【図８】
2010218478.tif 000010
【図９】
2010218478.tif 000011
【図１０】
2010218478.tif 000012