(57)【要約】  仮想マシンからＶＧＡ（８３）に対するアクセスが検知されると、ＣＰＵ（１０）から各ＶＧＡ（８３）までの各経路上におけるブリッジ（７１）の識別情報と各経路の通過の可否を示す通過設定情報とを管理するテーブル（２２）が参照され、ＣＰＵ（１０）から当該仮想マシンのアクセス対象のＳＶＧＡ（８３）までの経路の通過を許可するようにテーブル（２２）の情報と各ブリッジ（７１）の状態とが設定され、前記アクセスが実行される。これにより、複数の仮想マシンに対しＩ／Ｏアドレス固定の複数のＶＧＡ（８３）を接続した状態を保ちながらＩ／Ｏアドレスの衝突が回避される。
2013175570.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンを構築するプロセッサと、
同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備え、
前記プロセッサは、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置。
【請求項２】
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なうことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なうことを特徴とする、請求項１または請求項２記載の情報処理装置。
【請求項４】
前記プロセッサは、
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させることを特徴とする、請求項１〜請求項３のいずれか一項記載の情報処理装置。
【請求項５】
前記プロセッサは、
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信することを特徴とする、請求項１〜請求項４のいずれか一項記載の情報処理装置。
【請求項６】
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御方法であって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置の制御方法。
【請求項７】
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なうことを特徴とする、請求項６記載の情報処理装置の制御方法。
【請求項８】
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なうことを特徴とする、請求項６または請求項７記載の情報処理装置の制御方法。
【請求項９】
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させることを特徴とする、請求項６〜請求項８のいずれか一項記載の情報処理装置の制御方法。
【請求項１０】
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信することを特徴とする、請求項６〜請求項９のいずれか一項記載の情報処理装置の制御方法。
【請求項１１】
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、制御プログラム。
【請求項１２】
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、請求項１１記載の制御プログラム。
【請求項１３】
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、請求項１１または請求項１２記載の制御プログラム。
【請求項１４】
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させる、
処理を、前記プロセッサに実行させることを特徴とする、請求項１１〜請求項１３のいずれか一項記載の制御プログラム。
【請求項１５】
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信する、
処理を、前記プロセッサに実行させることを特徴とする、請求項１１〜請求項１４のいずれか一項記載の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法、及び制御プログラムに関する。
【背景技術】
【０００２】
一般に、コンピュータシステムにおいては、ハイパーバイザが起動され、ハイパーバイザにより複数の仮想マシンが起動される。各仮想マシンは、実デバイス，仮想デバイスなどを割り当てられ、ＯＳ（Operating System）上でアプリケーションを動作させ、実デバイス，仮想デバイスなどにアクセスしながら動作する。【０００３】
仮想マシンに割り当てられる実デバイスとしては、ＰＣＩ（Peripheral Componets Interconnect）デバイスがある。一般的なＰＣＩデバイスに割り当てられるＩ／Ｏ（Input/Output）アドレスは可変である。そのため、システム上に複数のＰＣＩデバイスが搭載されている場合、ＰＣＩデバイス毎に異なるＩ／Ｏアドレスを割り当てることにより、アドレスの衝突が回避され、複数の仮想マシンにより複数のＰＣＩデバイスを同時に扱うことが可能である。【０００４】
しかし、ビデオデバイス（以下、ＶＧＡ（Video Graphic Array）という）は一般のＰＣＩデバイスと異なり、ＶＧＡに割り当てられるＩ／Ｏアドレスは固定されている。Ｉ／Ｏアドレスを固定されたＶＧＡ等のデバイスは、レガシーデバイスと呼ばれる。通常、一つのコンピュータシステム（例えばパーソナルコンピュータ）にはディスプレイは一台だけそなえられるという前提に基づき、ＶＧＡに割り当てられるＩ／Ｏアドレスは固定されている。【０００５】
なお、一般的なＰＣＩデバイスは、メモリマップドＩ／Ｏ（ＭＭＩＯ）方式またはＩ／Ｏアドレス方式でアクセスされる。ＶＧＡの場合、フレームバッファやＶＧＡの設定のためのＭＭＩＯアドレス（非固定）が割り当てられる。さらに、ＶＧＡの場合、システム起動時等のＩ／ＯアクセスのためのＩ／Ｏアドレス（例えば3B0h〜3BBh, 3C0h〜3DFh）と、ＶＧＡの画面表示のフレームバッファのために用意されたメモリアドレス（例えば000A0000h〜000BFFFFh）とが固定的に割り当てられる。【０００６】
仮想マシンは、起動時にＩ／Ｏアドレスを用いてＶＧＡに対するＩ／Ｏアクセスを行なう。一つのコンピュータシステムに複数の実ＶＧＡを搭載し複数の仮想マシンのそれぞれに別個の実ＶＧＡを割り当てる場合、それぞれの実ＶＧＡに固有のＩ／Ｏアドレスを割り当てる必要がある。このとき、ＶＧＡに割り当てられるＩ／Ｏアドレスは、上述の通り同一の固定の値である。Ｉ／Ｏアドレスが固定の値であっても、各仮想マシン上でＩ／Ｏ空間は別々であるため、各ＶＧＡに対し同じ固定Ｉ／Ｏアドレスを割り当てることは可能である。【０００７】
しかしながら、ハイパーバイザは、複数の仮想マシンがそれぞれ使用する複数のＶＧＡのＩ／Ｏアドレスを、一つのＩ／Ｏ空間内で取り扱うため、複数のＶＧＡに同じ固定Ｉ／Ｏアドレスを割り当てると、アドレスの重複・衝突が起こる（図１３参照）。図１３では、２つの仮想マシンＶＭ１，ＶＭ２が、それぞれ、同一のＩ／Ｏアドレス（例えば3B0h-3BBh, 3C0h-3DFh）を割り当てられた異なる２つのＶＧＡ（ＶＧＡカード＃１，＃２）に対するレガシーアクセス要求を行なった状態が示されている。したがって、一つのコンピュータシステム上で複数の実ＶＧＡを同時に使うことはできない。【０００８】
このため、複数のＶＧＡを搭載した場合、複数のＶＧＡのうちのいずれか一つだけを有効にするとともに、それ以外のＶＧＡを無効に設定することが行なわれている。各ＶＧＡの有効／無効の切換は、ＰＣＩブリッジのＶＧＡ許可ビットを用いて行なわれる（図１４参照）。図１４では、４つの仮想マシンＶＭ１〜ＶＭ４を構築する一つのＣＰＵ（Central Processing Unit）が、チップセットおよび４つのＰＣＩブリッジを介し４つのＶＧＡカード＃１〜＃４に接続されている。そして、例えば仮想マシンＶＭ２に割り当てられたＶＧＡカード＃２のみを有効にすべく、仮想マシンＶＭ２とＶＧＡカード＃２とを接続するＰＣＩブリッジのＶＧＡ許可ビットに“１”が設定され、それ以外のＰＣＩブリッジのＶＧＡ許可ビットに“０”が設定されている。【０００９】
このように、一つのコンピュータシステムにおいて１台しか実ＶＧＡを用いることができないため、実ＶＧＡを割り当てて動作させる仮想マシンは、１つに抑えられる。したがって、仮想マシンに割り当てることのできる実ＶＧＡは、コンピュータシステム全体で高々一つであり、複数の仮想マシンにより複数の実ＶＧＡを扱うことができない。【００１０】
アドレスの重複・衝突を抑止する手法として、図１５に示す手法も考えられる。図１５に示す手法では、仮想マシンＶＭ１〜ＶＭ４のそれぞれに、仮想ＶＧＡカードが割り当てられ、ハイパーバイザが実ＶＧＡを制御し、ハイパーバイザの画面の中に各仮想マシンの画面出力が表示される。この手法において、仮想マシンＶＭ１〜ＶＭ４に割り当てられる仮想ＶＧＡカードは、ハイパーバイザによって作成される、仮想化されたＶＧＡであるため、実ＶＧＡの豊富な機能を全て用いることができない。【００１１】
特許文献１では、ＰＣＩデバイスと仮想マシンとの割り当て表を用いて仮想マシンからＰＣＩデバイスへのアクセスの制御を行なう技術が開示されている。当該技術では、同じ固定Ｉ／Ｏアドレスを割り当てられた複数のレガシーデバイス（例えばＶＧＡ）がＰＣＩデバイスとして搭載された場合、上述したようにＩ／Ｏアドレスの衝突を回避することができない。したがって、複数の仮想マシンのそれぞれに対し、実ＶＧＡを同時に割り当てることができない。【００１２】
特許文献２では、ＰＣＩスイッチにおけるレジスタの設定によりＩ／Ｏデバイスから仮想サーバへのアクセスを抑止し、ホットプラグの仕組みを用いて仮想サーバからＩ／Ｏデバイスへのアクセスを抑止する技術が開示されている。当該技術では、Ｉ／Ｏデバイス（ＶＧＡ）は、仮想サーバ（仮想マシン）から一時的に切り離された後、再接続される。再接続時にはデバイスのリセットが行なわれるため、デバイスを切り離し前の状態に戻すための再設定が必要となる。複数のＶＧＡを同時に扱うシステムでは、ＶＧＡに対するアクセスが頻繁に起きる。このため、当該技術を用いた場合、ＶＧＡの切り離しから再設定までの処理が頻発し、現実的な性能は望めない。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００４−２５２５９１号公報
【特許文献２】特開２００９−１８１４１８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
一つの側面で、本発明は、複数の仮想マシンに対しＩ／Ｏアドレス固定の複数のデバイスを接続した状態を保ちながらＩ／Ｏアドレスの衝突を回避することを目的とする。
【課題を解決するための手段】
【００１５】
一つの案では、情報処理装置は、複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備える。前記プロセッサは、前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成する。また、前記プロセッサは、前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう。【００１６】
一つの案では、制御方法は、複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御方法であって、前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう。【００１７】
一つの案では、制御プログラムは、複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう、処理を、前記プロセッサに実行させる。
【発明の効果】
【００１８】
一実施形態によれば、複数の仮想マシンに対しＩ／Ｏアドレス固定の複数のデバイスを接続した状態を保ちながらＩ／Ｏアドレスの衝突を回避することができる。
【図面の簡単な説明】
【００１９】
【図１】一実施形態としての情報処理装置の構成を示すブロック図である。
【図２】本実施形態のＰＣＩデバイス／ブリッジ対応表の一例を示す図である。
【図３】図２に示す対応表の一例に対応する構成と同構成におけるＶＧＡ許可ビットの状態とを示すブロック図である。
【図４】図１に示す情報処理装置による処理を説明するフローチャートである。
【図５】図１に示す情報処理装置によるＰＣＩバススキャン処理を説明するフローチャートである。
【図６】図１に示す情報処理装置によるＰＣＩバススキャンの処理を具体的に説明するシーケンス図である。
【図７】図１に示す情報処理装置によるＰＣＩデバイス／ブリッジ対応表作成処理を説明するフローチャートである。
【図８】図１に示す情報処理装置によるＰＣＩデバイス／ブリッジ対応表作成処理を具体的に説明するシーケンス図である。
【図９】図１に示す情報処理装置によるＰＣＩブリッジ設定処理を説明するフローチャートである。
【図１０】図１に示す情報処理装置によるＰＣＩブリッジ設定処理を具体的に説明するシーケンス図である。
【図１１】図１に示す情報処理装置の仮想マシンによる対応表の排他的使用を説明するフローチャートである。
【図１２】図１に示す情報処理装置の仮想マシンがＰＣＩブリッジのＶＧＡ許可ビットの参照要求を行なった際の処理を説明するフローチャートである。
【図１３】コンピュータシステムにおけるＶＧＡカードに対するアクセス要求によって生じるアドレスの重複・衝突を説明する図である。
【図１４】アドレスの重複・衝突を抑止するための手法の第１例を示すブロック図である。
【図１５】アドレスの重複・衝突を抑止するための手法の第２例を示すブロック図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照して実施の形態を説明する。
〔１〕本実施形態のコンピュータシステムの構成
図１は、一実施形態としての情報処理装置（コンピュータシステム）１の構成を示すブロック図である。
【００２１】
図１に示すコンピュータシステム１は、複数（図中、４）の仮想マシンＶＭ１〜ＶＭ４を構築する一般的なアーキテクチャをもつ。コンピュータシステム１は、ＣＰＵ（プロセッサ）１０，メモリ２０，ストレージ３０，ＮＶＲＡＭ（Non-Volatile Random Access Memory）４０，チップセット５０，ＰＣＩバス６０，スイッチ７０，スロット８０およびストレージ９０を有している。
【００２２】
ＮＶＲＡＭ４０は、ＣＰＵ１０でコンピュータシステム１を初期化させるＢＩＯＳ（Basic Input/Output System）プログラムを格納する。ＣＰＵ１０は、ＢＩＯＳプログラムを実行することによりＢＩＯＳ１１を起動する。ＢＩＯＳプログラムには、ＣＰＵ１０をハイパーバイザ１２として機能させるハイパーバイザプログラムが内蔵されている。さらに、ハイパーバイザプログラムには、ＣＰＵ１０を、後述するＰＣＩデバイス／ブリッジ対応表作成部１２ＡおよびＰＣＩブリッジ設定部１２Ｂとして機能させる制御プログラムが含まれている。
【００２３】
ストレージ３０には、仮想マシンＶＭ１〜ＶＭ４用のＯＳおよびアプリケーションプログラムを含む仮想ストレージ３１が構築される。
メモリ２０は、ＣＰＵ１０によりＮＶＲＡＭ４０から読み出されたＢＩＯＳプログラムや、仮想マシンＶＭ１〜ＶＭ４により仮想ストレージ３１から読み出されたＯＳおよびアプリケーションプログラムを展開されて保存する。また、メモリ２０は、ハイパーバイザ１２により作成され更新される仮想マシン構成情報２１を格納するほか、後述するＰＣＩデバイス／ブリッジ対応表２２やミューテックス変数２３を保存する。
【００２４】
チップセット５０は、ＣＰＵ１０，ストレージ３０およびＮＶＲＡＭ４０に接続されるとともに、ＰＣＩバス６０およびスイッチ７０を介し複数のＰＣＩ−Ｅｘ（Express）スロット（以下、単にスロットという）８０に接続される。チップセット５０は、ホストブリッジ５１およびＳＡＴＡ（Serial Advanced Technology Attachment）コントローラ５２を有している。ＳＡＴＡコントローラ５２は、ＣＰＵ１０からの要求に従ってストレージ３０に対するアクセスを制御する。ホストブリッジ５１は、ＣＰＵ１０に対し、ストレージ３０，ＮＶＲＡＭ４０およびスロット８０を接続する。
【００２５】
スロット８０には、拡張カード（ＰＣＩデバイス）としてのＳＡＳカード８１，ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）カード８２，ＶＧＡカード８３などが挿入される。ＳＡＳカード８１を挿入することにより、ストレージ９０を増設することができる。スロット８０に挿入されたデバイス８１〜８３は、ＰＣＩバス６０を相互接続するスイッチ７０に内蔵されたＰＣＩブリッジ（以下、単にブリッジという）７１経由で、ホストブリッジ５１に接続される。
【００２６】
コンピュータシステム１では、複数のスイッチ７０がそなえられ、図１に示す各スイッチ７０には、４つのスロット８０が接続される。図１の左側のスイッチ７０に接続された４つのスロット８０のうちの２つには、それぞれＳＡＳカード８１およびＲＡＩＤカード８２が挿入され、ＳＡＳカード８１には、２つのストレージ９０が接続されて増設されている。図１の右側のスイッチ７０に接続された４つのスロット８０には、それぞれＶＧＡカード（ビデオデバイス）８３−１〜８３−４が挿入されている。ＶＧＡカード８３−１〜８３−４は、レガシーデバイスであり、ＶＧＡカード８３−１〜８３−４には、前述した通り、同一のＩ／Ｏアドレスが固定的に割り当てられている。以下、ＶＧＡカードを示す符号としては、複数のＶＧＡカードのうち１つを特定する際には符号８３−１〜８３−４が用られ、任意のＶＧＡカードを指す際には符号８３が用いられる。また、ＶＧＡカード８３−１〜８３−４は、それぞれＶＧＡカード＃１〜＃４と表記する場合がある。ＶＧＡカード＃１〜＃４は、４つのＶＧＡカード８３を識別するための識別情報（ＩＤ）を示す（図２参照）。
【００２７】
各スイッチ７０は、５つのブリッジ７１−１〜７１−５を有する。ブリッジ７１−１の一端側には、ＰＣＩバス６０（バス＃０；図３参照）を介してホストブリッジ５１が接続される。ブリッジ７１−１の他端側には、ＰＣＩバス６０（バス＃１；図３参照）を介して４つのブリッジ７１−２〜７１−５の一端側が接続される。４つのブリッジ７１−２〜７１−５の他端側には、それぞれＰＣＩバス６０（バス＃２〜＃５；図３参照）を介してスロット８０が接続される。図１の右側のスイッチ７０における４つのブリッジ７１−２〜７１−５に接続されたスロット８０には、それぞれＶＧＡカード８３−１〜８３−４が挿入されている。以下、ブリッジを示す符号としては、複数のブリッジのうち１つを特定する際には符号７１−１〜７１−５が用られ、任意のブリッジを指す際には符号７１が用いられる。また、ブリッジ７１−１〜７１−５は、それぞれＰＣＩブリッジ＃１〜＃５と表記する場合がある。ＰＣＩブリッジ＃１〜＃５は、５つのブリッジ７１を識別するための識別情報（ＩＤ）を示す（図２参照）。バス＃０〜＃５は、ＰＣＩバス６０を特定するためのバス番号を示す。
【００２８】
各ブリッジ７１には、ブリッジ７１の状態を設定するためのコンフィグレーションレジスタ（ブリッジ制御レジスタ）７１Ａがそなえられている。コンフィグレーションレジスタ７１ＡにはＶＧＡ許可ビット７１Ｂが含まれている。ＶＧＡ許可ビット７１Ｂには、ハイパーバイザ１２により、ブリッジ７１に信号を通過させるか否かを指示する通過可否情報（０または１）が設定される。信号の通過を許可する場合、ＶＧＡ許可ビット７１Ｂには例えば“１”が設定される。一方、信号の通過を拒否する場合、ＶＧＡ許可ビット７１Ｂには例えば“０”が設定される。
【００２９】
これにより、ＶＧＡカード８３に固定的に割り当てられているＩ／Ｏアドレスとフレームバッファのメモリアドレスへのアクセス（レガシーアクセス）要求とは、ＶＧＡ許可ビット７１Ｂに“１”を設定されたブリッジ７１経由でＶＧＡカード８３へ転送される。一方、ＶＧＡ許可ビット７１Ｂに“０”を設定されたブリッジ７１に接続されたＶＧＡカード８３には、何も転送されない。例えば、後述する図３に示す構成では、ブリッジ＃１および＃２のＶＧＡ許可ビット７１Ｂに“１”が設定され、ブリッジ＃３〜＃５のＶＧＡ許可ビット７１Ｂに“０”が設定されている。したがって、Ｉ／Ｏアドレスおよびアクセス要求は、ＶＧＡカード＃１にのみ転送され、ＶＧＡカード＃２〜＃４には転送されない。
【００３０】
ＣＰＵ１０は、コンピュータシステム１の起動後、ＮＶＲＡＭ４０から読み出されたハイパーバイザプログラムに含まれる制御プログラムを実行することにより、ＰＣＩデバイス／ブリッジ対応表作成部１２ＡおよびＰＣＩブリッジ設定部１２Ｂとして機能する。
ＰＣＩデバイス／ブリッジ対応表作成部１２Ａは、コンピュータシステム起動時にハイパーバイザ１２の初期化処理の中で呼び出され、全てのＶＧＡカード８３についての対応表２２の作成／初期化処理を行なう。ＰＣＩデバイス／ブリッジ対応表作成部１２Ａによる対応表２２の作成処理については、図７および図８を参照しながら具体的に説明する。
【００３１】
ＰＣＩデバイス／ブリッジ対応表（テーブル）２２は、図２に示すように、ＣＰＵ１０から各ＶＧＡカード８３までの各経路上におけるブリッジ７１の識別情報（ＩＤ；ブリッジ＃１〜＃５）と各経路の通過の可否を示す通過設定情報（許可ビット）とを、ＶＧＡカード８３毎に管理する。なお、図２は、ＰＣＩデバイス／ブリッジ対応表２２の一例を示す図である。また、図３は、図２に示す対応表２２の一例に対応する構成と同構成における許可ビット７１Ｂの状態とを示すブロック図である。
【００３２】
より具体的に、対応表２２は、図２に示すように、ＶＧＡカード８３毎に１行ずつ作成される。対応表２２の各行には、ＶＧＡカード８３を特定するＰＣＩデバイスＩＤと、ＶＧＡカード８３が接続されているＰＣＩブリッジ７１のＩＤと、ＰＣＩブリッジ７１を接続された経路の通過の可否を示す許可ビットとが設定される。例えば図３に示す構成／状態の場合、ＶＧＡカード＃１の行には、ＣＰＵ１０とＶＧＡカード８３−１との間の経路上におけるＰＣＩブリッジ＃１，＃２が登録されるとともに、当該経路の通過が許可される旨を示す“１”が許可ビットに設定される。ＶＧＡカード＃２の行には、ＣＰＵ１０とＶＧＡカード８３−２との間の経路上におけるＰＣＩブリッジ＃１，＃３が登録されるとともに、当該経路の通過が拒否される旨を示す“０”が許可ビットに設定される。ＶＧＡカード＃３の行には、ＣＰＵ１０とＶＧＡカード８３−３との間の経路上におけるＰＣＩブリッジ＃１，＃４が登録されるとともに、当該経路の通過が拒否される旨を示す“０”が許可ビットに設定される。ＶＧＡカード＃４の行には、ＣＰＵ１０とＶＧＡカード８３−４との間の経路上におけるＰＣＩブリッジ＃１，＃５が登録されるとともに、当該経路の通過が拒否される旨を示す“０”が許可ビットに設定される。つまり、図２および図３に示す例では、ＣＰＵ１０（４つの仮想マシンＶＭ１〜ＶＭ４）とＶＧＡカード＃１〜＃４とを接続する経路のうち、ＣＰＵ１０（仮想マシンＶＭ１）とＶＧＡカード＃１とを接続する経路のみが、有効な状態つまり信号通過可能な状態に設定されている。
【００３３】
ＰＣＩブリッジ設定部１２Ｂは、仮想マシンＶＭ１〜ＶＭ４のうちの一つから当該仮想マシンに割り当てられたＶＧＡカード８３に対するアクセスを検知すると、対応表２２を参照し、当該アクセスを行なった仮想マシンに基づき、以下の設定処理を行なう。即ち、ＰＣＩブリッジ設定部１２Ｂは、ＣＰＵ１０から、当該アクセスを行なった仮想マシンに割り当てられたＶＧＡカード８３までの経路の通過を許可するように、対応表２２の許可ビットとブリッジ７１の状態（ＶＧＡ許可ビット７２Ｂの状態）とを設定する。なお、本実施形態において、仮想マシンＶＭ１〜ＶＭ４には、それぞれ、レガシーデバイスである実ＶＧＡカード８３−１〜８３−４が割り当てられている。
【００３４】
ＰＣＩブリッジ設定部１２Ｂは、対応表２２においてアクセス対象のＶＧＡカード８３の許可ビットに“０”が設定されている場合つまりＣＰＵ１０からアクセス対象のＶＧＡカード８３までの経路の通過を拒否する状態が設定されている場合、以下の設定処理を行なう。即ち、ＰＣＩブリッジ設定部１２Ｂは、当該経路以外の経路の許可ビットと当該経路以外の経路上のブリッジ７１の状態とを、通過を拒否する状態に設定するとともに、当該経路の許可ビットと当該経路上のブリッジ７１の状態とを、通過を許可する状態に設定する。
【００３５】
例えば、図２および図３に示す状態で、仮想マシンＶＭ２が自身に割り当てられたＶＧＡカード＃２に対するアクセスを行なった場合、対応表２２においてＶＧＡカード＃２の許可ビットには“０”が設定されている。ＰＣＩブリッジ設定部１２Ｂは、まず、対応表２２において許可ビットに“１”を設定されている、ＶＧＡカード＃１の行を認識し、当該行に登録されたブリッジ＃１，＃２を、解除対象ブリッジとして取得し、解除対象ブリッジ＃１，＃２のＶＧＡ許可ビット７１Ｂを“０”に設定する。また、ＰＣＩブリッジ設定部１２Ｂは、対応表２２のＶＧＡカード＃１の行における許可ビットに“０”を設定する。この時点で、ブリッジ＃１〜＃５のＶＧＡ許可ビット７１Ｂの値は全て“０”に設定される。この後、ＰＣＩブリッジ設定部１２Ｂは、ＶＧＡカード＃２に至る経路上の設定対象ブリッジ＃１，＃３のＶＧＡ許可ビット７１Ｂを“１”に設定するとともに、対応表２２のＶＧＡカード＃２の行における許可ビットに“１”を設定する。これにより、ＶＧＡカード＃２に至る経路（ブリッジ＃１→＃３）以外の経路は、信号通過を拒否する状態に設定されるとともに、ＶＧＡカード＃２に至る経路（ブリッジ＃１→＃３）は、信号通過を許可する状態に設定され、仮想マシンＶＭ２からアクセス対象のＶＧＡカード＃２に対するアクセスが実行される。以上の処理の詳細については、図２，図３および図１０を参照しながら後述する。
【００３６】
ＰＣＩブリッジ設定部１２Ｂは、対応表２２においてアクセス対象のＶＧＡカード８３の許可ビットに“１”が設定されている場合つまりＣＰＵ１０からアクセス対象のＶＧＡカード８３までの経路の通過を許可する状態が設定されている場合、以下の処理を行なう。即ち、ＰＣＩブリッジ設定部１２Ｂは、対応表２２の許可ビットや、各ブリッジ７１のＶＧＡ許可ビット７１Ｂの更新を行なうことなく、仮想マシンからアクセス対象のＶＧＡカード８３に対するアクセスを実行させる。
【００３７】
例えば、図２および図３に示す状態で、仮想マシンＶＭ１が自身に割り当てられたＶＧＡカード＃１に対するアクセスを行なった場合、対応表２２においてＶＧＡカード＃１の許可ビットには“１”が設定されている。このため、当該アクセスをトラップしたＰＣＩブリッジ設定部１２Ｂは、対応表２２の許可ビットや、各ブリッジ７１のＶＧＡ許可ビット７１Ｂの更新を行なうことなく、仮想マシンＶＭ１からアクセス対象のＶＧＡカード＃１に対するアクセスを実行させる。
【００３８】
ＰＣＩブリッジ設定部１２Ｂは、仮想マシンからＶＧＡカード８３に対するアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のＶＧＡカード８３に対するアクセスを検知した場合、先行するアクセスの実行を完了するまで、他のアクセスについての処理を待機させる。ＰＣＩブリッジ設定部１２Ｂによる待機処理は、メモリ２０のミューテックス（MUTual EXclusion(相互排他)）変数２３を用いて行なわれる。ＰＣＩブリッジ設定部１２Ｂは、一の仮想マシンからＶＧＡカード８３に対するアクセスを検知するとミューテックス変数２３に“１”を設定することによりロックを取得する。ＰＣＩブリッジ設定部１２Ｂは、当該アクセスの完了に伴い、ミューテックス変数２３を“０”に設定することによりロックを解放する。このように、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３が“１”に設定されている間、後続のアクセスを待機させることで、仮想マシンＶＭ１〜ＶＭ４からＶＧＡカード８３に対するアクセスに際し、対応表２２を排他的に使用する。
【００３９】
ＰＣＩブリッジ設定部１２Ｂによる設定処理については、図９〜図１１を参照しながら具体的に説明する。
なお、ＣＰＵ１０（ハイパーバイザ１２）は、仮想マシンＶＭ１〜ＶＭ４が自身に割り当てられたＶＧＡカード＃１〜＃４に接続されるブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの値）を参照した場合、以下の機能を果たす。つまり、ハイパーバイザ１２は、仮想マシンＶＭ１〜ＶＭ４のいずれか一つからブリッジ７１の状態の参照要求を受けると、ブリッジ７１の状態にかかわらず、信号通過を許可する状態を示す“１”、もしくは、予め設定された状態を、仮想マシンＶＭ１〜ＶＭ４に返信する機能を有している。当該機能については図１２を参照しながら後述する。
【００４０】
〔２〕本実施形態のコンピュータシステムによる処理の流れ
以下では、本実施形態のコンピュータシステム１の動作について、図４〜図１２を参照しながら、より詳細に説明する。
まず、図４に示すフローチャート（ステップＳ１０〜Ｓ２０）に従って、本実施形態のコンピュータシステム１による処理の流れについて説明する。
【００４１】
コンピュータシステム１が起動されると、ＣＰＵ１０は、ハイパーバイザプログラムを内蔵されたＢＩＯＳプログラムをＮＶＲＡＭ４０から読み出してメモリ２０に展開し、ＢＩＯＳプログラムを実行することにより、ＢＩＯＳ１１を起動する（ステップＳ１０）。ＢＩＯＳ１１は、ＰＣＩバススキャン処理（ステップＳ１１）を含む、コンピュータシステム１の初期化処理を実行した後、ハイパーバイザ１２を起動する（ステップＳ１２）。ＢＩＯＳ１１によるＰＣＩバススキャン処理については、図５および図６を参照しながら後述する。
【００４２】
ハイパーバイザ１２は、起動されると、ＰＣＩデバイス／ブリッジ対応表作成部１２Ａとしての機能を呼び出し、メモリ２０上に、ＰＣＩデバイス／ブリッジ対応表２２を作成する（ステップＳ１３）。ＰＣＩデバイス／ブリッジ対応表作成部１２Ａによる対応表２２の作成処理については、図７および図８を参照しながら後述る。
【００４３】
ハイパーバイザ１２は、対応表２２の作成後、仮想マシンＶＭ１〜ＶＭ４の構築や構成変更を行ない、仮想マシン構成情報２１を作成してメモリ２０に保存する（ステップＳ１４）。ハイパーバイザ１２は、仮想マシン構成情報２１に基づき、実デバイスや仮想的なデバイスを仮想マシンＶＭ１〜ＶＭ４に割り当て、アクセス制御を行ない、仮想マシンＶＭ１〜ＶＭ４を起動する（ステップＳ１５）。仮想マシンＶＭ１〜ＶＭ４は、自身に割り当てられたストレージ３０（仮想ストレージ３１）からＯＳを読み出してメモリ２０に展開し、ＯＳを起動し、ＯＳ上でアプリケーションを動作させる。なお、上述した通り、本実施形態において、仮想マシンＶＭ１〜ＶＭ４には、それぞれ、レガシーデバイスである実ＶＧＡカード８３−１〜８３−４が割り当てられている。
【００４４】
仮想マシンＶＭ１〜ＶＭ４の起動後、各仮想マシンが自身に割り当てられたＶＧＡカード８３に対するレガシーアクセス要求（Ｉ／Ｏアクセス要求）を発行すると（ステップＳ１６）、ハイパーバイザ１２は、レガシーアクセス要求を検知してトラップする（ステップＳ１７）。ハイパーバイザ１２は、レガシーアクセス要求をトラップすると、ＰＣＩブリッジ設定部１２Ｂとしての機能を呼び出し、レガシーアクセス要求の対象ＶＧＡカード８３および対応表２２に従って、対応表２２やＰＣＩブリッジ７１の状態を設定する。状態設定後、ハイパーバイザ１２は、対象ＶＧＡカード８３に対するレガシーアクセスを実行する（ステップＳ１８）。この後、ＶＧＡカード８３に対するアクセス要求を行なった仮想マシンは、ハイパーバイザ１２からアクセス結果を取得し（ステップＳ１９）、他の処理へ移行する（ステップＳ２０）。ＰＣＩブリッジ設定部１２Ｂによる設定処理については、図９〜図１１を参照しながら後述する。
【００４５】
〔３〕ＢＩＯＳによるＰＣＩバススキャン処理
図５に示すフローチャート（ステップＳ２１〜Ｓ２６）に従って、ＢＩＯＳ１１によるＰＣＩバススキャン処理について説明する。当該ＰＣＩバススキャン処理は、図４のステップＳ１１で実行される処理である。ここで、ＶＧＡカード８３を含むＰＣＩデバイスは、バス番号（バス＃０〜＃５），デバイス番号（ＶＧＡカード＃１〜＃４）およびファンクション番号により識別することができる。
【００４６】
ＢＩＯＳ１１は、ホストブリッジ５１に接続されたバス＃０から順番に、ＰＣＩバス６０上の全てのデバイス番号，ファンクション番号の組合せで、デバイスアクセスを試みる（ステップＳ２１〜Ｓ２５）。ＢＩＯＳ１１は、スキャン中のバス上にブリッジを発見した場合（ステップＳ２２のＹＥＳルート）、発見したブリッジ下流について再帰的にバススキャンを行なう（ステップＳ２３）。バススキャンによってアクセスしたデバイスがブリッジでない場合（ステップＳ２２のＮＯルート）、ＢＩＯＳ１１は、当該デバイスへのＰＣＩリソース設定処理を行なう（ステップＳ２４）。ＢＩＯＳ１１は、全ての組合せについてデバイスアクセスを行なうと（ステップＳ２１〜Ｓ２５）、ブリッジへのＰＣＩリソース設定処理を行ない（ステップＳ２６）、ＰＣＩバススキャン処理を終了する。このＰＣＩバススキャン処理によって、ＣＰＵ１０は、コンピュータシステム１上の全ＰＣＩデバイスを列挙し、アクセスすることができる。
【００４７】
次に、図６に示すシーケンス図（矢印Ａ１１〜Ａ１８）に従って、ＢＩＯＳ１１によるＰＣＩバススキャン処理について、より具体的に説明する。図６では、図５に示すフローチャートに従い、図３に示すバス＃０〜＃２に対するＰＣＩバススキャン処理を行なった際の具体的な動作が図示されている。
【００４８】
ＢＩＯＳ１１は、バス＃０に対するＰＣＩバススキャンを実行すると（矢印Ａ１１参照）、ＰＣＩブリッジ＃１を発見し（矢印Ａ１２参照）、ついで、ＰＣＩブリッジ＃１よりも下流のバス＃１に対するＰＣＩバススキャンを実行する（矢印Ａ１３参照）。ＢＩＯＳ１１は、バス＃１に対するＰＣＩバススキャンにより、ＰＣＩブリッジ＃２を発見し（矢印Ａ１４参照）、さらに、ＰＣＩブリッジ＃２よりも下流のバス＃２に対するＰＣＩバススキャンを実行する（矢印Ａ１５参照）。ＢＩＯＳ１１は、バス＃２に対するＰＣＩバススキャンにより、ＶＧＡカード＃１を発見し、当該ＶＧＡカード＃１へのＰＣＩリソース設定処理を行なう（矢印Ａ１６参照）。この後、ＢＩＯＳ１１は、ＰＣＩブリッジ＃２，＃１へのＰＣＩリソース設定処理を行なう（矢印Ａ１７，Ａ１８参照）。
【００４９】
〔４〕ＰＣＩデバイス／ブリッジ対応表作成処理
図７に示すフローチャート（ステップＳ３１〜Ｓ３７）に従って、ＰＣＩデバイス／ブリッジ対応表作成部１２ＡによるＰＣＩデバイス／ブリッジ対応表作成処理について説明する。当該対応表作成処理は、図４のステップＳ１３で実行される処理である。
【００５０】
ＰＣＩデバイス／ブリッジ対応表作成部１２Ａは、以下のように、ＢＩＯＳ１１によるＰＣＩバススキャンと同様のＰＣＩバススキャンを行なって対応表２２を作成する。つまり、対応表作成部１２Ａは、ホストブリッジ５１に接続されたバス＃０から順番に、ＰＣＩバス６０上の全てのデバイス番号，ファンクション番号の組合せで、デバイスアクセスを試みる（ステップＳ３１〜Ｓ３７）。対応表作成部１２Ａは、スキャン中のバス上にブリッジを発見した場合（ステップＳ３２のＹＥＳルート）、発見したブリッジ下流について再帰的に対応表作成処理を行なう（ステップＳ３３）。
【００５１】
バススキャンによってアクセスしたデバイスがブリッジでない場合（ステップＳ３２のＮＯルート）、対応表作成部１２Ａは、当該デバイスがＶＧＡカードであるか否かを判断する（ステップＳ３５）。当該デバイスがＶＧＡカードでない場合（ステップＳ３５のＮＯルート）、対応表作成部１２Ａは、次のバススキャン処理へ移行する。当該デバイスがＶＧＡカードである場合（ステップＳ３５のＹＥＳルート）、対応表作成部１２Ａは、当該ＶＧＡカードについての行を対応表２２に追加する（ステップＳ３６）。対応表２２に追加された行には、図２に示すように、当該ＶＧＡカードの識別情報に対応付けて、当該ＶＧＡカードに到るまでに存在するＰＣＩブリッジの識別情報と、当該ＶＧＡカードに到るまでの経路についての許可ビットの値（デフォルト値は例えば０）とが登録される。
【００５２】
あるバスについてのバススキャンが終わった段階、つまり再帰的に実行されたステップＳ３３の処理終了時点で、当該バスにブリッジが接続されており当該ブリッジの下流にＶＧＡカードが接続されている場合、対応表作成部１２Ａは、対応表２２へのブリッジの追加処理を行なう（ステップＳ３４）。つまり、対応表作成部１２Ａは、対応表２２における、該当するブリッジの項目に、上位ブリッジの識別情報を追加する。このように、再帰処理が終わるごとにステップＳ３４の追加処理を行なうことで、最終的に、ホストブリッジ５１から各ＶＧＡカード８３までの経路上に存在する全てのブリッジ７１の情報を１つの行に記録した、ＰＣＩデバイス／ブリッジ対応表２２が完成する。
【００５３】
次に、図８に示すシーケンス図（矢印Ａ２１〜Ａ２９）に従って、対応表作成部１２ＡによるＰＣＩデバイス／ブリッジ対応表作成処理について、より具体的に説明する。図８では、図７に示すフローチャートに従い、対応表２２において図３に示すＶＧＡカード＃１についての行を作成登録する際の具体的な動作が図示されている。
【００５４】
対応表作成部１２Ａは、バス＃０に対するＰＣＩバススキャンを実行すると（矢印Ａ２１参照）、ＰＣＩブリッジ＃１を発見し（矢印Ａ２２参照）、ついで、ＰＣＩブリッジ＃１よりも下流のバス＃１に対するＰＣＩバススキャンを実行する（矢印Ａ２３参照）。対応表作成部１２Ａは、バス＃１に対するＰＣＩバススキャンにより、ＰＣＩブリッジ＃２を発見し（矢印Ａ２４参照）、さらに、ＰＣＩブリッジ＃２よりも下流のバス＃２に対するＰＣＩバススキャンを実行する（矢印Ａ２５参照）。対応表作成部１２Ａは、バス＃２に対するＰＣＩバススキャンにより、ＶＧＡカード＃１を発見し（矢印Ａ２６参照）、ＶＧＡカード＃１についての行を対応表２２に追加してから（矢印Ａ２７参照）、当該行にＰＣＩブリッジ＃２，＃１を追加する（矢印Ａ２８，Ａ２９参照）。
【００５５】
〔５〕ＰＣＩブリッジ設定処理
図９に示すフローチャート（ステップＳ４１〜Ｓ５２）および図１０に示すシーケンス図（矢印Ａ３１〜Ａ４３）に従って、ＰＣＩブリッジ設定部１２ＢによるＰＣＩブリッジ設定処理について説明する。当該ＰＣＩブリッジ設定処理は、図４のステップＳ１８で実行される処理である。
【００５６】
〔５−１〕仮想マシンからＶＧＡカードへのＩ／Ｏアクセス
仮想マシンＶＭ１〜ＶＭ４のいずれか一つから、当該仮想マシンに割り当てられたＶＧＡカード８３へのＩ／Ｏアクセス要求が発行されると、当該Ｉ／Ｏアクセス要求は、ハイパーバイザ１２によってトラップされる（図４のステップＳ１７）。Ｉ／Ｏアクセス要求がトラップされると、ハイパーバイザ１２は、メモリ２０の仮想マシン構成情報２１を参照し、トラップされたＩ／Ｏアクセス要求の発行元である仮想マシンに割り当てられたＶＧＡカード８３のＩＤを取得する（図９のステップＳ４１；図１０の矢印Ａ３１参照）。この後、ハイパーバイザ１２によりＰＣＩブリッジ設定部１２Ｂが呼び出されて起動される（図１０の矢印Ａ３２参照）。
【００５７】
ＰＣＩブリッジ設定部１２Ｂは、起動されると、まず、取得されたＶＧＡカード８３のＩＤに基づき対応表２２の参照・更新を行なうとともにＰＣＩブリッジ７１への設定処理を行なう（図９のステップＳ４４〜Ｓ５０；図１０の矢印Ａ３５〜Ａ４１参照）。これにより、ＰＣＩブリッジ設定部１２Ｂは、ＰＣＩブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの状態）を、仮想マシン（ＣＰＵ１０）からアクセス対象のＶＧＡカード８３に対するＩ／Ｏアクセスのみが可能な状態に設定する。
【００５８】
〔５−２〕対応表の排他制御
仮想マシンＶＭ１〜ＶＭ４のうちの一つからＶＧＡカード８３へのＩ／Ｏアクセス要求に応じて対応表２２が参照・更新されている間に、別の仮想マシンからＶＧＡカード８３へのＩ／Ｏアクセス要求が発生する可能性がある。この場合、対応表２２の参照・更新処理が同時に行なわれると、対応表２２の整合が取れなくなる。このため、ＰＣＩブリッジ設定部１２Ｂによる設定処理に際しては、対応表２２の排他制御が必要になる。
【００５９】
そこで、本実施形態のＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数と呼ばれる“１”または“０”の値を採る共有記憶域（メモリ２０上のミューテックス変数２３参照）を用いて、対応表２２の排他制御を行なう。ＰＣＩブリッジ設定部１２Ｂは、各仮想マシンからＶＧＡカード８３へのＩ／Ｏアクセス要求をトラップすると、以下のようにして、ミューテックス変数２３にアクセスして排他処理を行なう。
【００６０】
〔５−２−１〕ロックの取得
最初に、ＰＣＩブリッジ設定部１２Ｂは、メモリ２０上のミューテック変数２３の値を確認する（図９のステップＳ４２）。ミューテックス変数２３の値が“１”の場合（図９のステップＳ４２のＹＥＳルート）、対応表２２は、今回のアクセスよりも先行する、別の仮想マシンからのアクセスに応じた処理に用いられている。このため、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３の値が“０”になるまで、今回のアクセスを待機させる。
【００６１】
ミューテックス変数２３の値が“０”の場合（図９のステップＳ４２のＮＯルート）、どの仮想マシンも対応表２２を使用していないことを示している。このとき、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３の値を“０”から“１”に設定して、対応表２２を使用中であることを示す状態に切り換えることにより、ロックを取得する（ロックを掛ける；図９のステップＳ４３；図１０の矢印Ａ３３参照）。この状態で、他の仮想マシンは、前述の通り、ミューテックス変数２３の値が“０”になるまで処理を待っている。このため、ミューテックスを取得した仮想マシン、つまりミューテックス変数２３の値を“１”に切り換えた仮想マシンは、対応表２２を排他的に使用することができる。
【００６２】
〔５−２−２〕ロックの解放
対応表２２に対する処理（図９のステップＳ４４〜Ｓ５０；図１０の矢印Ａ３５〜Ａ４１参照）を終え、さらにＶＧＡカード８３へのＩ／Ｏアクセスを完了すると（図９のステップＳ５１；図１０の矢印Ａ４２参照）、ＰＣＩブリッジ設定部１２Ｂはロックを解放する。つまり、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３の値を“１”から“０”に戻してロックを解除する（図９のステップＳ５２：図１０の矢印Ａ４３参照）。これにより、今まで待機していた別の仮想マシンがミューテックスを取得し、対応表２２を使用することが可能になる。
【００６３】
ここで、図１１に示すフローチャート（ステップＳ６１〜Ｓ７８）に従って、コンピュータシステム１の仮想マシンＶＭ１，ＶＭ２による対応表２２の排他的使用について説明する。
まず、仮想マシンＶＭ１がＶＧＡカード＃１に対するＩ／Ｏアクセス要求を行ない（ステップＳ６１）、当該Ｉ／Ｏアクセス要求がハイパーバイザ１２によりトラップされると（ステップＳ６２）、ＰＣＩブリッジ設定部１２Ｂは当該Ｉ／Ｏアクセスについてロックを取得する（ステップＳ６３；図９のステップＳ４２，Ｓ４３）。そして、ＰＣＩブリッジ設定部１２ＢによりＰＣＩブリッジ設定処理が行なわれ（ステップＳ６４；図９のステップＳ４４〜Ｓ５０）、ＶＧＡカード＃１に対するアクセスが行なわれると（ステップＳ６５；図９のステップＳ５１）、ＰＣＩブリッジ設定部１２Ｂはロックを解放する（ステップＳ６６；図９のステップＳ５２）。この後、ＶＧＡカード＃１に対するアクセス結果が仮想マシンＶＭ１によって取得される（ステップＳ６７；図４のステップＳ１９）。
【００６４】
このとき、仮想マシンＶＭ１がＶＧＡカード＃１に対するＩ／Ｏアクセス要求を行なうのとほぼ同時に、仮想マシンＶＭ２がＶＧＡカード＃２に対するＩ／Ｏアクセス要求を行なったとする（ステップＳ７１）。そして、ハイパーバイザ１２により、ＶＧＡカード＃１に対するＩ／Ｏアクセス要求よりも若干遅れてＶＧＡカード＃２に対するＩ／Ｏアクセス要求がトラップされたものとする（ステップＳ７２）。この場合、ＰＣＩブリッジ設定部１２Ｂは、仮想マシンＶＭ２によるＶＧＡカード＃２に対するＩ／Ｏアクセス要求については、ロックを直ちに取得することができず、先行アクセス要求についてのロックが解放されるのを待機させる（ステップＳ７３；図９のステップＳ４２のＹＥＳルート）。
【００６５】
この後、先行アクセス要求についてのロックが解放されると（ステップＳ６６）、ＰＣＩブリッジ設定部１２Ｂは、後続の、ＶＧＡカード＃２に対するＩ／Ｏアクセスについてロックを取得する（ステップＳ７４；図９のステップＳ４３）。そして、ＰＣＩブリッジ設定部１２ＢによりＰＣＩブリッジ設定処理が行なわれ（ステップＳ７５；図９のステップＳ４４〜Ｓ５０）、ＶＧＡカード＃２に対するアクセスが行なわれると（ステップＳ７６；図９のステップＳ５１）、ＰＣＩブリッジ設定部１２Ｂはロックを解放する（ステップＳ７７；図９のステップＳ５２）。この後、ＶＧＡカード＃２に対するアクセス結果が仮想マシンＶＭ２によって取得される（ステップＳ７８；図４のステップＳ１９）。
【００６６】
〔５−３〕設定対象ブリッジ情報の取得
さて、ＰＣＩブリッジ設定部１２Ｂは、対応表２２のＶＧＡカード８３のＩＤを順に確認し、対応表２２において、ステップＳ４１で取得されたアクセス対象のＶＧＡカード８３のＩＤと一致する行を特定する。ここで特定された行から、ＣＰＵ１０からアクセス対象のＶＧＡカード８３までの経路の通過の可否を示す許可ビットの値（通過設定情報）が取得されるとともに、当該行に登録されているブリッジが設定対象ブリッジとして取得される（図９のステップＳ４４；図１０の矢印Ａ３４参照）。
【００６７】
以下、図１０の矢印Ａ３５〜Ａ４２を参照しながら説明する具体的な処理は、図２および図３に示す状態で、仮想マシンＶＭ２が自身に割り当てられたＶＧＡカード＃２に対するアクセスを行なった場合の処理である。この場合、ＰＣＩブリッジ設定部１２Ｂは、対応表２２のＶＧＡカード８３のＩＤを順に確認し、対応表２２においてＶＧＡカード＃２と一致する行を特定する。図２に示す対応表２２においてＶＧＡカード＃２と一致する行の許可ビットの値“０”が取得される。また、当該行におけるＰＣＩブリッジ＃１，＃３が設定対象ブリッジとして取得される。
【００６８】
〔５−４〕許可ビットの判定および判定結果に応じた処理
ＰＣＩブリッジ設定部１２Ｂは、対応表２２から取得された、アクセス対象のＶＧＡカード８３のＩＤに対応する許可ビットの値が“１”であるか否かを判定する（図９のステップＳ４５）。
【００６９】
〔５−４−１〕許可ビットが“１”の場合
アクセス対象のＶＧＡカード８３のＩＤに対応する許可ビットが“１”の場合（ステップＳ４５のＹＥＳルート）、ＰＣＩブリッジ設定部１２Ｂは、対応表２２の許可ビットや各ブリッジ７１のＶＧＡ許可ビット７１Ｂの更新を行なうことなく、今回のアクセス対象のＶＧＡカード８３に対するＩ／Ｏアクセスを実行させる（図９のステップＳ５１）。
【００７０】
例えば、図２および図３に示す状態で、仮想マシンＶＭ１が自身に割り当てられたＶＧＡカード＃１に対するアクセスを行なった場合、ＶＧＡカード＃１に対応する許可ビットは“１”である。このため、ＰＣＩブリッジ設定部１２Ｂは、対応表２２の許可ビットや各ブリッジ７１のＶＧＡ許可ビット７１Ｂの更新を行なうことなく、今回のアクセス対象のＶＧＡカード＃１に対するＩ／Ｏアクセスを実行させる
【００７１】
以上のようにして、ＶＧＡカード８３（＃１）へのＩ／Ｏアクセスを完了すると、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３の値を“１”から“０”に戻してロックを解除する（図９のステップＳ５２：図１０の矢印Ａ４３参照）。そして、ハイパーバイザ１２は、アクセス対象のＶＧＡカード８３（＃１）に対するアクセス結果を、仮想マシンＶＭ１へ通知する。
【００７２】
〔５−４−２〕許可ビットが“０”の場合
アクセス対象のＶＧＡカード８３のＩＤに対応する許可ビットが“０”の場合（図９のステップＳ４５のＮＯルート）、ＣＰＵ１０からアクセス対象のＶＧＡカード８３に到る経路上のブリッジ７１は、Ｉ／Ｏアクセス要求を下流のバスに転送しない。このままでは、Ｉ／Ｏアクセス要求がアクセス対象のＶＧＡカード８３に届かない。このため、ＣＰＵ１０からアクセス対象のＶＧＡカード８３に到る経路上のブリッジ７１におけるＶＧＡ許可ビットには“１”を設定するとともに、それ以外のブリッジ７１におけるＶＧＡ許可ビットには“０”を設定する必要がある。そこで、ＰＣＩブリッジ設定部１２Ｂは、ブリッジ７１および対応表２２に対し、以下の処理を行なう。
【００７３】
まず、ＰＣＩブリッジ設定部１２Ｂは、対応表２２における許可ビットの値を順に確認し、許可ビットの値が“１”である行に登録されているブリッジを、解除対象ブリッジとして取得する（図９のステップＳ４６）。図２，図３および図１０に示す例では、許可ビットの値が“１”であるＶＧＡカード＃１の行が見出され、当該行におけるＰＣＩブリッジ＃１，＃２が解除対象ブリッジとして取得される（図１０の矢印Ａ３５参照）。
【００７４】
この後、ＰＣＩブリッジ設定部１２Ｂは、ステップＳ４６で特定された全ての解除対象ブリッジのＶＧＡ許可ビット７１Ｂの値を“１”から“０”に設定する（図９のステップＳ４７）。この時点で、ブリッジ＃１〜＃５のＶＧＡ許可ビット７１Ｂの値は全て“０”に設定される。図２，図３および図１０に示す例では、解除対象ブリッジとして取得されたＰＣＩブリッジ＃２，＃１におけるＶＧＡ許可ビット７１Ｂの値が“１”から“０”に設定される（図１０の矢印Ａ３６，Ａ３７参照）。
【００７５】
そして、ＰＣＩブリッジ設定部１２Ｂは、対応表２２における解除対象ブリッジの行の許可ビットの値を“１”から“０”に更新する（図９のステップＳ４８）。図２，図３および図１０に示す例では、対応表２２において解除対象ブリッジ＃１，＃２を登録された行の許可ビットの値が“１”から“０”に更新される（図１０の矢印Ａ３８参照）。
【００７６】
ついで、ＰＣＩブリッジ設定部１２Ｂは、ステップＳ４４で取得された全ての設定対象ブリッジのＶＧＡ許可ビット７１Ｂの値を“０”から“１”に設定する（図９のステップＳ４９）。この時点で、アクセス対象のＶＧＡカード８３に対しＩ／Ｏアクセス要求が転送可能になる。図２，図３および図１０に示す例では、設定対象ブリッジとして取得されたＰＣＩブリッジ＃１，＃３におけるＶＧＡ許可ビット７１Ｂの値が“０”から“１”に設定される（図１０の矢印Ａ３９，Ａ４０参照）。
【００７７】
そして、ＰＣＩブリッジ設定部１２Ｂは、対応表２２における設定対象ブリッジの行の許可ビットの値を“０”から“１”に更新する（図９のステップＳ４８）。図２，図３および図１０に示す例では、対応表２２において設定対象ブリッジ＃１，＃３を特録された行（ＶＧＡカード＃２の行）の許可ビットの値が“０”から“１”に更新される（図１０の矢印Ａ４１参照）。
【００７８】
上述したように、ステップＳ４９の設定処理により、アクセス対象のＶＧＡカード８３に対しＩ／Ｏアクセス要求が転送されるようになり、アクセス対象のＶＧＡカード８３に対するＩ／Ｏアクセスが実行される（図９のステップＳ５１）。図２，図３および図１０に示す例では、アクセス対象のＶＧＡカード＃２に対しＩ／Ｏアクセス要求が転送され、アクセス対象のＶＧＡカード＃２に対するＩ／Ｏアクセスが実行される（図１０の矢印Ａ４２参照）。
【００７９】
以上のようにして、対応表２２に対する処理を終え、さらにＶＧＡカード８３（＃２）へのＩ／Ｏアクセスを完了すると、ＰＣＩブリッジ設定部１２Ｂは、ミューテックス変数２３の値を“１”から“０”に戻してロックを解除する（図９のステップＳ５２：図１０の矢印Ａ４３参照）。そして、ハイパーバイザ１２は、アクセス対象のＶＧＡカード８３（＃２）に対するアクセス結果を、仮想マシンＶＭ２へ通知する。
【００８０】
〔６〕仮想マシンがＰＣＩブリッジのＶＧＡ許可ビットの参照要求を行なった際の処理
次に、図１２に示すフローチャート（ステップＳ８１〜Ｓ８４）に従って、コンピュータシステム１の仮想マシンＶＭ１〜ＶＭ４がＰＣＩブリッジ７１のＶＧＡ許可ビット７１Ｂの参照要求を行なった際の処理について説明する。
【００８１】
ハイパーバイザ１２は、仮想マシンＶＭ１〜ＶＭ４が自身に割り当てられたＶＧＡカード＃１〜＃４に接続されるブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの値）の参照要求を発行したか否かを監視する（ステップＳ８１）。ハイパーバイザ１２は、ブリッジ７１のＶＧＡ許可ビット７１Ｂの参照要求を受けると（ステップＳ８１のＹＥＳルート）、返信用の値（状態）が仮想マシンによって予め設定されているか否かを判定する（ステップＳ８２）。
【００８２】
返信用の値が設定されていない場合（ステップＳ８２のＮＯルート）、ハイパーバイザ１２は、ブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの値）にかかわらず、信号通過を許可する状態を示す“１”を、参照要求元の仮想マシンに返信する（ステップＳ８３）。一方、返信用の値が設定されている場合（ステップＳ８２のＹＥＳルート）、ハイパーバイザ１２は、ブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの値）にかかわらず、返信用の値“１”または“０”を、参照要求元の仮想マシンに返信する（ステップＳ８４）。
【００８３】
このように、仮想マシンから、自身に割り当てられたＶＧＡカード８３に接続されるブリッジ７１の状態（ＶＧＡ許可ビット７１Ｂの値）の参照要求を受けた場合、返信用の値が設定されていなければ、信号通過を許可する状態を示す“１”が仮想マシンに返信される。これにより、それぞれの仮想マシン側からは、自身に割り当てられたＶＧＡカード８３が常に接続されているように見える。
【００８４】
各仮想マシンが参照したブリッジ７１の状態が“０”であると、各仮想マシンは、自身に割り当てられたＶＧＡカード８３と通信できずブリッジ７１に故障が生じている等のエラーを通知してしまい、コンピュータシステム１の処理に支障を来たす可能性がある。しかし、本実施形態では、上述の通り、それぞれの仮想マシン側からは、自身に割り当てられたＶＧＡカード８３が常に接続されているように見えるので、上述のようなエラー通知は行なわれず、コンピュータシステム１の処理に支障を来たすこともない。
【００８５】
〔７〕本実施形態のコンピュータシステムの効果
上述した本実施形態のコンピュータシステム１によれば、ハイパーバイザ１２が、各仮想マシンからのＩ／Ｏアクセス要求をトラップし、対応表２２に基づきＰＣＩブリッジ７１のＶＧＡ許可ビット７１Ｂの設定を変更する。つまり、各仮想マシンからのＩ／Ｏアクセス要求時に各ブリッジ７１におけるＶＧＡ許可ビット７１Ｂの再設定を行なう。
【００８６】
これにより、本実施形態のコンピュータシステム１では、複数の仮想マシンに対しＩ／Ｏアドレス固定の複数のデバイス（レガシーデバイス）を接続した状態を保ちながらＩ／Ｏアドレスの衝突を回避することができる。つまり、ハイパーバイザ１２は、複数の実ＶＧＡを搭載している場合でも、Ｉ／Ｏアドレスの重複を避けながら、各仮想マシンに割り当てられたＶＧＡカード８３にアクセスすることができる。このとき、各仮想マシン側からは常にＶＧＡカード８３が存在しているように見える。
【００８７】
また、本実施形態によれば、仮想マシンによるＩ／Ｏアクセス要求時にハイパーバイザ１２がＰＣＩブリッジ７１のＶＧＡ許可ビット７１Ｂの状態を制御するので、各ＶＧＡカード８３が仮想マシンに接続された状態が保たれ、ＶＧＡ許可ビット７１Ｂの状態やＣＰＵ１０のアクセス先ＶＧＡカード８３の、高速な切り替えが可能である。
【００８８】
さらに、本実施形態のＰＣＩデバイス／ブリッジ対応表作成部１２ＡおよびＰＣＩブリッジ設定部１２Ｂとしての機能を実現するに際し、特殊なハードウェアを新たな追加する必要はないため、ハードウェア追加のコストが掛からない。
なお、仮想マシンのＯＳ起動後は、ＶＧＡのフレームバッファへのアクセスやデバイス設定等のアクセスは基本的にＭＭＩＯ方式でアクセスされる。ＭＭＩＯ方式でのアクセスではＶＧＡごとに別々のアドレスが用いられるため、ＶＧＡ許可ビット等の設定処理を行なう必要はなく、ＶＧＡ許可ビットの設定処理のオーバーヘッドはなくなる。
【００８９】
〔８〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
なお、上述した実施形態では、図２，図３，図６，図８および図１０に示す具体例に基づき詳細な説明を行なったが、本発明は、図２，図３，図６，図８および図１０に示す具体例に限定されるものではない。
【００９０】
また、上述した実施形態では、同一のＩ／Ｏアドレスを割り当てられた複数のデバイス（レガシーデバイス）がＶＧＡ（ビデオデバイス）である場合について説明したが、本発明はこれに限定されるものではない。本発明は、ＶＧＡ以外のレガシーデバイスに対しても上述した実施形態と同様に適用され、上述した実施形態と同様の作用効果を得ることができる。
【００９１】
上述したＰＣＩデバイス／ブリッジ対応表作成部１２ＡおよびＰＣＩブリッジ設定部１２Ｂを含む、本実施形態の情報処理装置１の各種機能の全部もしくは一部は、コンピュータ（ＣＰＵ，情報処理装置，各種端末を含む）が所定のプログラムを実行することによって実現される。
【００９２】
そのプログラムは、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷなど），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷなど），ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。
【００９３】
ここで、コンピュータとは、ハードウエアとＯＳ（オペレーティングシステム）とを含む概念であり、ＯＳの制御の下で動作するハードウエアを意味している。また、ＯＳが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウエアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取る手段とをそなえている。上記プログラムは、上述のようなコンピュータに、本実施形態の情報処理装置１の各種機能を実現させるプログラムコードを含んでいる。また、その機能の一部は、アプリケーションプログラムではなくＯＳによって実現されてもよい。
【符号の説明】
【００９４】
１    情報処理装置（コンピュータシステム）
１０    ＣＰＵ（プロセッサ）
１１    ＢＩＯＳ
１２    ハイパーバイザ
１２Ａ    ＰＣＩデバイス／ブリッジ対応表作成部
１２Ｂ    ＰＣＩブリッジ設定部
２０    メモリ
２１    仮想マシン構成情報
２２    ＰＣＩデバイス／ブリッジ対応表（テーブル）
２３    ミューテックス変数
３０    ストレージ
３１    仮想ストレージ
４０    ＮＶＲＡＭ
５０    チップセット
５１    ホストブリッジ
５２    ＳＡＴＡコントローラ
６０    ＰＣＩバス
７０    スイッチ
７１，７１−１〜７１−５    ＰＣＩブリッジ（ブリッジ）
７１Ａ    コンフィグレーションレジスタ
７１Ｂ    ＶＧＡ許可ビット
８０    スロット
８１    ＳＡＳカード（ＰＣＩデバイス）
８２    ＲＡＩＤカード（ＰＣＩデバイス）
８３，８３−１〜８３−４    ＶＧＡカード（デバイス，ＰＣＩデバイス）
９０    ストレージ
ＶＭ１〜ＶＭ４    仮想マシン
【図１】
2013175570.tif 000003
【図２】
2013175570.tif 000004
【図３】
2013175570.tif 000005
【図４】
2013175570.tif 000006
【図５】
2013175570.tif 000007
【図６】
2013175570.tif 000008
【図７】
2013175570.tif 000009
【図８】
2013175570.tif 000010
【図９】
2013175570.tif 000011
【図１０】
2013175570.tif 000012
【図１１】
2013175570.tif 000013
【図１２】
2013175570.tif 000014
【図１３】
2013175570.tif 000015
【図１４】
2013175570.tif 000016
【図１５】
2013175570.tif 000017
【手続補正書】
【提出日】平成26年11月18日(2014.11.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の仮想マシンを構築するプロセッサと、
同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備え、
前記プロセッサは、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置。
【請求項２】
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なうことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なうことを特徴とする、請求項１または請求項２記載の情報処理装置。
【請求項４】
前記プロセッサは、
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させることを特徴とする、請求項１〜請求項３のいずれか一項記載の情報処理装置。
【請求項５】
前記プロセッサは、
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信することを特徴とする、請求項１〜請求項４のいずれか一項記載の情報処理装置。
【請求項６】
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御方法であって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置の制御方法。
【請求項７】
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、制御プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
仮想マシンに割り当てられる実デバイスとしては、ＰＣＩ（Peripheral Components Interconnect）デバイスがある。一般的なＰＣＩデバイスに割り当てられるＩ／Ｏ（Input/Output）アドレスは可変である。そのため、システム上に複数のＰＣＩデバイスが搭載されている場合、ＰＣＩデバイス毎に異なるＩ／Ｏアドレスを割り当てることにより、アドレスの衝突が回避され、複数の仮想マシンにより複数のＰＣＩデバイスを同時に扱うことが可能である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００９３
【補正方法】変更
【補正の内容】
【００９３】
ここで、コンピュータとは、ハードウエアとＯＳ（オペレーティングシステム）とを含む概念であり、ＯＳの制御の下で動作するハードウエアを意味している。また、ＯＳが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウエアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取る手段とをそなえている。上記プログラムは、上述のようなコンピュータに、本実施形態の情報処理装置１の各種機能を実現させるプログラムコードを含んでいる。また、その機能の一部は、アプリケーションプログラムではなくＯＳによって実現されてもよい。
〔９〕付記
以上の各実施形態を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
複数の仮想マシンを構築するプロセッサと、
同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備え、
前記プロセッサは、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置。
（付記２）
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なうことを特徴とする、付記１記載の情報処理装置。
（付記３）
前記プロセッサは、
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なうことを特徴とする、付記１または付記２記載の情報処理装置。
（付記４）
前記プロセッサは、
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させることを特徴とする、付記１〜付記３のいずれか一項記載の情報処理装置。
（付記５）
前記プロセッサは、
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信することを特徴とする、付記１〜付記４のいずれか一項記載の情報処理装置。
（付記６）
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御方法であって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なうことを特徴とする情報処理装置の制御方法。
（付記７）
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なうことを特徴とする、付記６記載の情報処理装置の制御方法。
（付記８）
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なうことを特徴とする、付記６または付記７記載の情報処理装置の制御方法。
（付記９）
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させることを特徴とする、付記６〜付記８のいずれか一項記載の情報処理装置の制御方法。
（付記１０）
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信することを特徴とする、付記６〜付記９のいずれか一項記載の情報処理装置の制御方法。
（付記１１）
複数の仮想マシンを構築するプロセッサと、同一のＩ／Ｏアドレスを割り当てられた複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
前記プロセッサから各デバイスまでの各経路上における前記ブリッジの識別情報と前記各経路の通過の可否を示す通過設定情報とを管理するテーブルを作成し、
前記複数の仮想マシンのうちの一の仮想マシンから当該一の仮想マシンに割り当てられた前記複数のデバイスのうちの一のデバイスに対する一のアクセスを検知すると、前記テーブルを参照し、前記プロセッサから当該一のデバイスまでの前記経路の通過を許可するように前記テーブルの前記通過設定情報と前記経路上の前記ブリッジの状態とを設定し、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、制御プログラム。
（付記１２）
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を拒否する状態である場合、当該経路以外の経路の前記通過設定情報と当該経路以外の経路上の前記ブリッジの状態とを、通過を拒否する状態に設定するとともに、当該経路の前記通過設定情報と当該経路上の前記ブリッジの状態とを、通過を許可する状態に設定し、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、付記１１記載の制御プログラム。
（付記１３）
前記プロセッサから前記一のデバイスまでの前記経路の前記通過設定情報が当該経路の通過を許可する状態である場合、前記一のアクセスを行なう、
処理を、前記プロセッサに実行させることを特徴とする、付記１１または付記１２記載の制御プログラム。
（付記１４）
前記一のアクセスを検知してから同アクセスの実行を完了するまでの間に他の仮想マシンから他のデバイスに対する他のアクセスを検知した場合、前記一のアクセスの実行を完了するまで、前記他のアクセスについての処理を待機させる、
処理を、前記プロセッサに実行させることを特徴とする、付記１１〜付記１３のいずれか一項記載の制御プログラム。
（付記１５）
各仮想マシンが各ブリッジの状態を参照した場合、通過を許可する状態、もしくは、予め設定された状態を、各仮想マシンに返信する、
処理を、前記プロセッサに実行させることを特徴とする、付記項１１〜付記１４のいずれか一項記載の制御プログラム。
【国際調査報告】
2013175570.tif 000018
2013175570.tif 000019