(57)【要約】  複数のブリッジ（７１）のそれぞれにブリッジアドレスを割り当てながらブリッジアドレスの管理用テーブル（２１）を作成し、プロセッサ（１０）から複数のデバイス（８１）のうちの一デバイスに対する一アクセスが検知されると、管理用テーブル（２１）を参照し、前記一アクセスを実行可能にするように複数のブリッジ（７１）に対するブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を管理用テーブル（２１）に対して行なう。これにより、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても規定数を超える数のブリッジを同時に使用することが可能になる。
2014020716.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行なう作成部と、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記管理用テーブルに対して行なう割当部と、を有することを特徴とする情報処理装置。
【請求項２】
前記作成部は、
前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定することを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記割当部は、
前記一デバイスの前記デバイスアドレスを含む第１レコードを、前記管理用テーブルから検索し、
前記第１レコードにおける前記割当情報が無効である場合、前記第１レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第２レコードを、前記管理用テーブルから検索し、
前記第２レコードにおける、前記第１レコードの第１ブリッジ識別情報とは異なる第２ブリッジ識別情報に対応する第２ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第２レコードにおける前記割当情報に無効を設定し、
前記第１レコードにおける前記第１ブリッジ識別情報に対応する第１ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第１レコードにおける前記割当情報に有効を設定することを特徴とする、請求項２記載の情報処理装置。
【請求項４】
前記作成部は、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項１〜請求項３のいずれか一項記載の情報処理装置。
【請求項５】
前記割当部は、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項１〜請求項６のいずれか一項記載の情報処理装置。
【請求項６】
前記プロセッサは、複数の仮想サーバを構築し、
前記割当部は、
前記複数の仮想サーバのうちの一の仮想サーバから前記一アクセスを検知してから前記一アクセスの実行を完了するまでの間に他の仮想サーバから他アクセスを検知した場合、前記一アクセスの実行を完了するまで、前記他アクセスについての処理を待機させることを特徴とする、請求項１〜請求項５のいずれか一項記載の情報処理装置。
【請求項７】
前記割当部としての機能は、
前記プロセッサにおけるＯＳ（Operating System）の、前記複数のデバイスのうちの一デバイスに対するアクセスの際に用いられるライブラリに含まれていることを特徴とする、請求項１〜請求項５のいずれか一項記載の情報処理装置。
【請求項８】
プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置を、前記プロセッサによって制御する方法であって、
前記プロセッサは、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なうことを特徴とする情報処理装置の制御方法。
【請求項９】
前記プロセッサは、
前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定することを特徴とする、請求項８記載の情報処理装置の制御方法。
【請求項１０】
前記プロセッサは、
前記一デバイスの前記デバイスアドレスを含む第１レコードを、前記管理用テーブルから検索し、
前記第１レコードにおける前記割当情報が無効である場合、前記第１レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第２レコードを、前記管理用テーブルから検索し、
前記第２レコードにおける、前記第１レコードの第１ブリッジ識別情報とは異なる第２ブリッジ識別情報に対応する第２ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第２レコードにおける前記割当情報に無効を設定し、
前記第１レコードにおける前記第１ブリッジ識別情報に対応する第１ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第１レコードにおける前記割当情報に有効を設定することを特徴とする、請求項９記載の情報処理装置の制御方法。
【請求項１１】
前記プロセッサは、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項８〜請求項１０のいずれか一項記載の情報処理装置の制御方法。
【請求項１２】
前記プロセッサは、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項８〜請求項１１のいずれか一項記載の情報処理装置の制御方法。
【請求項１３】
プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なう、
処理を、前記プロセッサに実行させることを特徴とする制御プログラム。
【請求項１４】
前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定する、
処理を、前記プロセッサに実行させることを特徴とする、請求項１３記載の制御プログラム。
【請求項１５】
前記一デバイスの前記デバイスアドレスを含む第１レコードを、前記管理用テーブルから検索し、
前記第１レコードにおける前記割当情報が無効である場合、前記第１レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第２レコードを、前記管理用テーブルから検索し、
前記第２レコードにおける、前記第１レコードの第１ブリッジ識別情報とは異なる第２ブリッジ識別情報に対応する第２ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第２レコードにおける前記割当情報に無効を設定し、
前記第１レコードにおける前記第１ブリッジ識別情報に対応する第１ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第１レコードにおける前記割当情報に有効を設定する、
処理を、前記プロセッサに実行させることを特徴とする、請求項１４記載の制御プログラム。
【請求項１６】
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除する、
処理を、前記プロセッサに実行させることを特徴とする、請求項１３〜請求項１５のいずれか一項記載の制御プログラム。
【請求項１７】
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除する、
処理を、前記プロセッサに実行させることを特徴とする、請求項１３〜請求項１６のいずれか一項記載の制御プログラム。
【請求項１８】
プロセッサと、
複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備え、
前記プロセッサは、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なうことを特徴とする情報処理装置。
【請求項１９】
プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させる制御プログラムを記録したコンピュータ読取可能な記録倍値であって、
前記制御プログラムは、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なう、処理を、前記プロセッサに実行させることを特徴とする、制御プログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御方法、制御プログラム、及び同プログラムを記録したコンピュータ読取可能な記録媒体に関する。
【背景技術】
【０００２】
一般的なアーキテクチャのコンピュータシステムにおいて、ＣＰＵ（Central Processing Unit）は、メモリおよびチップセットに接続され、ホストブリッジ経由で、ＰＣＩ（Peripheral Components Interconnect）Expressバスに接続されたＰＣＩデバイス（以下デバイス）にアクセスすることができる。ＰＣＩ Expressスロット（以下スロット）には、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）カードやＳＡＳ（Serial Attached SCSI (Small Computer System Interface)）カード等の拡張カードを追加することができる。拡張カードは、ＰＣＩ Expressバスを相互接続するスイッチ経由でチップセットのホストブリッジに接続される。スイッチは、ＰＣＩブリッジ（以下ブリッジ）を内蔵している。【０００３】
近年では、サーバ集約等のためにハイパーバイザという制御プログラムを動作させ、複数の仮想サーバを１つの物理計算機上で動作させる手法が普及している。仮想サーバ上のＯＳ（Operating System）で動作しているアプリケーションは、ドライバ等を含むＯＳのライブラリを経由してデバイスにアクセスする。デバイスは、メモリマップドＩ／Ｏ（ＭＭＩＯ）アクセスまたはＩ／Ｏアドレス（Ｉ／Ｏ空間アドレス）を用いてアクセスされる。近年では、Ｉ／Ｏアドレスを用いたアクセスはレガシー手法とされ、ＭＭＩＯアクセスが主流になっているが、依然としてＩ／Ｏアドレスを要求するデバイスがある。このようなデバイスは、Ｉ／Ｏアドレスを割り当てられていない場合、使用することができない。【０００４】
Ｉ／Ｏ空間のアドレスは、ＢＩＯＳ（Basic Input Output System）によってデバイスに割り当てられ、ＯＳのライブラリは、割り当てられたＩ／Ｏ空間アドレスを使ってアクセスする。コンピュータシステムは、起動時にＢＩＯＳが実行され、Ｉ／Ｏアドレスの割り当てや、デバイスの初期化が行なわれる。ＢＩＯＳは、既存技術であるＰＣＩバススキャンにより全てのデバイスを確認し、各デバイスに対してＩ／Ｏアドレスを割り振る。ブリッジには、当該ブリッジ配下のバスに接続されるデバイスのためにＩ／Ｏアドレスの範囲が割り振られ、ブリッジに割り振られた範囲のＩ／Ｏアドレスが、ブリッジ配下のバスに接続されるデバイスに割り当てられる。仮想サーバを動作させる場合は、ＢＩＯＳによる処理後にハイパーバイザが動作し、仮想サーバが作成され、どのデバイスがどの仮想サーバに割り当てられているかの情報、つまり各仮想サーバのＩ／ＯアドレスとハイパーバイザのＩ／Ｏアドレスとの対応情報等を含む仮想サーバ構成情報が作成され、ハイパーバイザは仮想サーバを起動する。【０００５】
図３２に示すように、各仮想サーバからのデバイスアクセス（Ｉ／Ｏアクセス）は、ハイパーバイザによってトラップされて順番に処理される（ステップＳ１，Ｓ２）。ハイパーバイザは、上記仮想サーバ構成情報から仮想サーバと実サーバのＩ／Ｏ空間との間の変換処理を行なう。仮想サーバにデバイスが割り当てられている場合、ハイパーバイザが、そのデバイスにアクセスし（ステップＳ３）、そのアクセス結果を仮想サーバに返す（ステップＳ４）。実際に存在するデバイス(以下実デバイス)でなく仮想デバイスが割り当てられている場合は仮想デバイスのアクセス処理を行ない、処理結果を仮想サーバに返す。【０００６】
特許文献１では、Ｉ／Ｏアドレスの効率的な割り当て技術が開示されている。当該技術では、２以上のＰＣＩブリッジに対し衝突が起こらないように同じ範囲のアドレスを割り当てることで、Ｉ／Ｏアドレスの効率的な利用が行なわれる。
また、特許文献２では、仮想サーバを扱った技術が開示されている。当該技術では、Ｉ／Ｏスイッチ内にある仮想ブリッジに対して一意に番号を割り当て、その番号を基にＩ／Ｏリソースを割り当てることで、デバイスのホットプラグや仮想サーバの動的再構成を行なった際のＩ／Ｏリソースのずれが防止される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−３３７７８８号公報
【特許文献２】特開２０１０−３９７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
PCI-to-PCI Bridge Architecture Specification（以下ＰＣＩ仕様）で定められた仕様により、ブリッジには４ＫＢ単位でアドレスが割り当てられる。一般的なＣＰＵでは、Ｉ／Ｏ空間は例えば６４ＫＢだけ用意され、先頭の４ＫＢはシステムに予約されている。したがって、図３３に示すように、Ｉ／Ｏ空間を要求するデバイス＃１〜＃３０に接続されている１５個のブリッジ＃１〜＃１５が割り当てられた時点で、Ｉ／Ｏ空間が枯渇してしまい、１６番目のブリッジ＃１６にＩ／Ｏアドレスを割り当てることができない。このため、１６個以上のブリッジを同時に使用することはできないことが課題になっている。スロットは、ブリッジに接続されるため、スロット経由のデバイスの追加は最大でも１５個までになる。【０００９】
また、近年では、上述した通り、１つの物理計算機上で複数の仮想サーバを稼働させ、コストを低減させるサーバの集約が行なわれている。仮想サーバは、物理計算機上のデバイスを割り当てられて使用されるが、１つの物理計算機が認識できるブリッジには前述の制約があるため、仮想サーバを複数稼働させている場合、１つの仮想サーバに対して十分なデバイスを割り当てることができなくなるという課題がある。【００１０】
特許文献１では、デバイスを多数割り当てることができるが、専用のホストバスブリッジが必要になる。また、ホストバスのＩ／Ｏ空間アドレス割当がＰＣＩ仕様を逸脱している。
特許文献２では、それぞれのブリッジに対しＩ／ＯリソースＩＤ（IDentification）が予め決まっており、規定数以降のブリッジに接続されたデバイスに対してＩ／ＯリソースＩＤ（Ｉ／Ｏアドレス）を割り当てるわけではない。【００１１】
一つの側面で、本発明は、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても規定数を超える数のブリッジを同時に使用可能にすることを目的とする。
【課題を解決するための手段】
【００１２】
一つの案では、情報処理装置は、プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、作成部と、割当部とを有する。前記作成部は、前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行なう。前記割当部は、前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記管理用テーブルに対して行なう。
【発明の効果】
【００１３】
一実施形態によれば、情報処理装置において規定数を超える数のブリッジを備えたためにブリッジアドレスが枯渇しても、規定数を超える数のブリッジを同時に使用することができる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態としての情報処理装置の構成を示すブロック図である。
【図２】ＰＣＩブリッジに備えられるコンフィグレーションレジスタの構成を示す図である。
【図３】図１に示す情報処理装置においてＩ／Ｏアドレス割当対象（ＰＣＩデバイスおよびＰＣＩブリッジ）を含む具体的な構成の一例を示すブロック図である。
【図４】図３に示す構成について作成される対応表（管理用テーブル）の一例を示す図である。
【図５】図１に示す情報処理装置（作成部）による対応表の作成処理を説明するフローチャートである。
【図６】図５に示す対応表の作成処理におけるバス設定処理を説明するフローチャートである。
【図７】図５に示す対応表の作成処理におけるＩ／Ｏ設定処理を説明するフローチャートである。
【図８】（Ａ）は図１に示す情報処理装置においてＩ／Ｏアドレス割当対象を含む具体的な構成の他例および当該構成のバス設定処理後の状態を示すブロック図、（Ｂ）は（Ａ）に示す構成について作成される対応表の初期状態を示す図である。
【図９】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１０】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１１】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１２】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１３】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１４】（Ａ）はＩ／Ｏ設定処理を説明するブロック図、（Ｂ）は（Ａ）に示す構成に対する対応表の作成状態を示す図である。
【図１５】図１に示す情報処理装置（割当部）によるＩ／Ｏアクセス処理を説明するフローチャートである。
【図１６】図１５に示すＩ／Ｏアクセス処理を説明すべく具体的な対応表を示す図である。
【図１７】図１５に示すＩ／Ｏアクセス処理を説明すべく具体的な対応表を示す図である。
【図１８】図１５に示すＩ／Ｏアクセス処理を説明すべく具体的な対応表を示す図である。
【図１９】図１５に示すＩ／Ｏアクセス処理を説明すべく具体的な対応表を示す図である。
【図２０】（Ａ）は、図１５に示すＩ／Ｏアクセス処理を説明するブロック図、（Ｂ）は（Ａ）に示す処理に対応する対応表の状態を示す図である。
【図２１】（Ａ）は、図１５に示すＩ／Ｏアクセス処理を説明するブロック図、（Ｂ）は（Ａ）に示す処理に対応する対応表の状態を示す図である。
【図２２】第２実施形態としての情報処理装置の構成を示すブロック図である。
【図２３】図２２に示す情報処理装置による処理を具体的に説明するシーケンス図である。
【図２４】図２２に示す情報処理装置による処理を説明するフローチャートである。
【図２５】図２２に示す情報処理装置（作成部）による対応表の作成処理を説明するフローチャートである。
【図２６】図２５に示す対応表の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。
【図２７】図２５に示す対応表の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。
【図２８】図２２に示す情報処理装置（割当部）によるアドレス割当処理を説明するフローチャートである。
【図２９】図２８に示すアドレス割当処理において、アクセス対象のデバイスがアドレス未割当のブリッジに属している場合の処理を説明する図である。
【図３０】第３実施形態としての情報処理装置の構成を示すブロック図である。
【図３１】図３０に示す情報処理装置による処理を具体的に説明するシーケンス図である。
【図３２】仮想サーバからのデバイスアクセスに対する処理の流れを説明するフローチャートである。
【図３３】ＰＣＩ仕様によるブリッジに対するアドレス割当（ブリッジアドレスが枯渇した状態）の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して実施の形態を説明する。
〔１〕第１実施形態の情報処理装置
〔１−１〕第１実施形態の構成
図１は、第１実施形態としての情報処理装置（コンピュータシステム）１の構成を示すブロック図である。図１に示すコンピュータシステム１は、ＣＰＵ（プロセッサ）１０，メモリ２０，ストレージ３０，ＮＶＲＡＭ（Non-Volatile Random Access Memory）４０，チップセット５０，ＰＣＩバス６０，スイッチ７０，スロット８０およびストレージ９０を有している。
【００１６】
ＮＶＲＡＭ４０は、ＣＰＵ１０でコンピュータシステム１を初期化させるＢＩＯＳ（Basic Input/Output System）プログラムを格納する。ＣＰＵ１０は、ＢＩＯＳプログラムを実行することによりＢＩＯＳ１１を起動する。また、ＮＶＲＡＭ４０には、ＣＰＵ１０を、後述するＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａおよびアドレス割当処理部１２Ｂとして機能させる制御プログラムが格納されている。
【００１７】
ストレージ３０には、ＣＰＵ１０用のＯＳおよびアプリケーションプログラムが格納されている。
メモリ２０は、ＣＰＵ１０によりＮＶＲＡＭ４０から読み出されたＢＩＯＳプログラムや、ストレージ３０から読み出されたＯＳおよびアプリケーションプログラムを展開されて保存する。また、メモリ２０は、後述するＰＣＩデバイス／ブリッジ対応表２１を保存する。
【００１８】
チップセット５０は、ＣＰＵ１０，ストレージ３０およびＮＶＲＡＭ４０に接続されるとともに、ＰＣＩバス６０およびスイッチ７０を介し複数のＰＣＩ−Ｅｘ（Express）スロット（以下、単にスロットという）８０に接続される。チップセット５０は、ホストブリッジ５１およびＳＡＴＡ（Serial Advanced Technology Attachment）コントローラ５２を有している。ＳＡＴＡコントローラ５２は、ＣＰＵ１０からの要求に従ってストレージ３０に対するアクセスを制御する。ホストブリッジ５１は、ＣＰＵ１０に対し、ストレージ３０，ＮＶＲＡＭ４０およびスロット８０を接続する。
【００１９】
スロット８０には、ＰＣＩデバイス（以下、単にデバイスという；拡張カード）８１としてのＳＡＳカード，ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）カード，ＬＡＮ（Local Area Network）カードなどが挿入される。デバイス８１としてＳＡＳカードを挿入することにより、ストレージ９０を増設することができる。スロット８０に挿入されたデバイス８１は、ＰＣＩバス６０を相互接続するスイッチ７０に内蔵されたＰＣＩブリッジ（以下、単にブリッジという）７１経由でホストブリッジ５１に接続される。
【００２０】
コンピュータシステム１では、複数のスイッチ７０がそなえられ、図１に示す各スイッチ７０には、４つのスロット８０が接続される。各スイッチ７０は、例えば５つのブリッジ７１を有する。５つのブリッジ７１のうちの一つのブリッジ７１の一端側には、ＰＣＩバス６０を介してホストブリッジ５１が接続される。上記一つのブリッジ７１の他端側には、ＰＣＩバス６０を介し残り４つのブリッジ７１の一端側が接続される。４つのブリッジ７１の他端側には、それぞれＰＣＩバス６０を介してスロット８０が接続される。なお、図１の左側のスイッチ７０における４つのブリッジ７１に接続されたスロット８０には、それぞれ、ＳＡＳカード，ＲＡＩＤカードおよび２つのＬＡＮカードがデバイス８１として挿入されている。図１の左側のスイッチ７０以外のスイッチ７０に接続されたスロット８０にも、デバイス８１（図示略）が挿入されている。
【００２１】
各ブリッジ７１には、ブリッジ７１の状態を設定するためのコンフィグレーションレジスタ（ブリッジ制御レジスタ）７２が備えられている。コンフィグレーションレジスタ７２には、図２に示すように、Ｉ／Ｏベースアドレスレジスタ（ベースアドレスレジスタ）７２ａおよびＩ／Ｏリミットアドレスレジスタ（リミットアドレスレジスタ）７２ｂが含まれている。なお、図２は、ブリッジ７１に備えられるコンフィグレーションレジスタ７２の構成を示す図である。
【００２２】
Ｉ／Ｏベースアドレスレジスタ７２ａには、後述するＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａまたはアドレス割当処理部１２Ｂにより、当該ブリッジ７１に割り当てられるＩ／Ｏアドレス範囲の下限値が設定される。Ｉ／Ｏリミットアドレスレジスタ７２ｂには、後述するＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａまたはアドレス割当処理部１２Ｂにより、当該ブリッジ７１に割り当てられるＩ／Ｏアドレス範囲の上限値が設定される。
【００２３】
つまり、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａまたはアドレス割当処理部１２Ｂは、Ｉ／Ｏベースアドレスレジスタ７２ａおよびＩ／Ｏリミットアドレスレジスタ７２ｂにそれぞれブリッジアドレスの範囲を指定するアドレス値（下限値および上限値）を設定することにより、ブリッジ７１にブリッジアドレス（図４等参照）を割り当てる。また、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａまたはアドレス割当処理部１２Ｂは、Ｉ／Ｏベースアドレスレジスタ７２ａおよびＩ／Ｏリミットアドレスレジスタ７２ｂにそれぞれ０を設定することにより、ブリッジ７１に対するブリッジアドレスの割当を解除する。割当を解除することで、ブリッジ７１は、Ｉ／Ｏアクセスを下位のバスに転送しなくなる。
【００２４】
ＣＰＵ１０は、コンピュータシステム１の起動後、ＮＶＲＡＭ４０から読み出された制御プログラムを実行することにより、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａおよびアドレス割当処理部１２Ｂとして機能する。なお、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａを単に作成部１２Ａといい、アドレス割当処理部１２Ｂを単に割当部１２Ｂという場合がある。
【００２５】
ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａは、コンピュータシステム１の起動時における初期化処理（ＰＣＩバススキャン）の中で呼び出され、全てのデバイス８１およびブリッジ７１についてのＰＣＩデバイス／ブリッジ対応表２１の作成処理を行なう。以下、ＰＣＩデバイス／ブリッジ対応表２１を単に対応表２１という場合がある。
【００２６】
作成部１２Ａは、複数のブリッジ７１のそれぞれにブリッジアドレスを割り当てながらブリッジアドレスの管理用テーブル２１を作成する。その際、作成部１２Ａは、複数のブリッジ７１のうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、複数のブリッジ７１のうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除する。そして、作成部１２Ａは、前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を対応表２１に対して行なう。
【００２７】
割当部１２Ｂは、ＣＰＵ１０から複数のデバイス８１のうちの一デバイスに対する一アクセスを検知した場合、対応表２１を参照する。そして、割当部１２Ｂは、前記一アクセスを実行可能にするように複数のブリッジ７１に対するブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を対応表２１に対して行なう。
【００２８】
ここで、本実施形態においても、ＰＣＩ仕様により、ブリッジには４ＫＢ単位でアドレスが割り当てられる。また、Ｉ／Ｏ空間は例えば６４ＫＢだけ用意され、先頭の４ＫＢはシステムに予約されている。したがって、１５個（規定数）のブリッジ＃１〜＃１５が割り当てられた時点でＩ／Ｏ空間におけるブリッジアドレスが枯渇する。本実施形態では、以下に詳述するごとく、割当部１２Ｂが、作成部１２Ａによって作成された対応表２１を使用してＩ／Ｏアクセス処理（アドレス割当処理）を行なう。これにより、規定数を超える数（１６個以上）のブリッジ７１が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ７１を同時に使用することが可能になる。なお、ＰＣＩデバイス／ブリッジ対応表作成部１２Ａによる対応表２１の作成処理については、図３〜図１４（Ｂ）を参照しながら具体的に説明する。また、アドレス割当処理部１２ＢによるＩ／Ｏアクセス処理（アドレス割当処理）については、図１５〜図２１（Ｂ）を参照しながら具体的に説明する。
【００２９】
〔１−２〕対応表の構成
図３および図４を参照しながら、ＰＣＩデバイス／ブリッジ対応表作成部１２Ａによって作成される対応表２１の構成について説明する。なお、図３は、図１に示す情報処理装置１においてＩ／Ｏアドレス割当対象（ＰＣＩデバイス８１およびＰＣＩブリッジ７１）を含む具体的な構成の一例を示すブロック図である。また、図４は、図３に示す構成について作成される対応表２１の一例を示す図である。
【００３０】
図３に示す具体的な構成の一例において、ＣＰＵ１０に接続されたホストブリッジ５１には、ＰＣＩバス６０（バス＃０）を介して１６個のＰＣＩブリッジ７１が接続されている。各ブリッジ７１には、コンフィグレーションレジスタ７２が備えられ、コンフィグレーションレジスタ７２におけるＩ／Ｏベースアドレスレジスタ７２ａおよびＩ／Ｏリミットアドレスレジスタ７２ｂを用いてブリッジ７１に対するＩ／Ｏアドレスの設定／解除が行なわれる。なお、ブリッジを示す符号としては、複数のブリッジのうちの一つを特定する際には、ブリッジ７１を識別するための識別情報（ＩＤ；ブリッジデバイスのデバイス番号）を示すＰＣＩブリッジ＃１〜＃１６が用いられ、任意のブリッジを指す際には符号７１が用いられる。
【００３１】
また、各ブリッジ７１には、ＰＣＩバス６０（バス＃１〜＃１６）を介して２個のＰＣＩデバイス８１が接続されている。つまり、ＰＣＩブリッジ＃ｉ（ｉ＝１〜１６）には、バス＃ｉを介して２つのＰＣＩデバイス＃２ｉ−１，＃２ｉが接続されている。したがって、図３に示す例では、３２個のＰＣＩデバイス＃１〜＃３２が備えられている。なお、デバイスを示す符号としては、複数のデバイスのうちの一つを特定する際には、デバイス８１を識別するための識別情報（ＩＤ）を示すＰＣＩデバイス＃１〜＃３２が用いられ、任意のデバイスを指す際には符号８１が用いられる。また、バス＃０〜＃１６は、ＰＣＩバス６０を特定するためのバス番号を示し、システム起動時の初期化処理でＰＣＩバススキャンを実行することにより付与される。
【００３２】
図３に示す構成について作成部１２Ａによって作成される対応表２１は、例えば図４に示す構成を有する。つまり、作成部１２Ａは、システム起動時の初期化処理に際して、複数のデバイス８１のそれぞれに異なるデバイスアドレスを割り当てるとともに複数のブリッジ７１のそれぞれにブリッジアドレスを割り当てながら、対応表２１を作成する。その際、作成部１２Ａは、図４に示すように、対応表２１において、各ＰＣＩデバイス８１に割り当てたＩ／Ｏアドレス空間毎に一行（一レコード）を作成する。各行は、下記項目(a1)〜(a4)に示す情報を有する。
【００３３】
(a1)各ＰＣＩデバイス８１に割り当てられたＩ／Ｏアドレス（ＰＣＩデバイスアドレス欄）
(a2)各デバイス８１が属するブリッジ（デバイスアクセス時に経由するブリッジ）７１を特定するＰＣＩブリッジの識別名（ブリッジ識別情報；ＰＣＩブリッジ欄）
(a3)項目(a2)の識別名によって特定されるブリッジ７１に割り当てられたＩ／Ｏアドレス空間（ブリッジアドレスの範囲；ブリッジアドレス欄）
(a4)項目(a3)のブリッジアドレスが項目(a2)の識別名によって特定されるブリッジ７１において有効であるか否かを示すアドレス割当フラグ（割当情報；アドレス割当欄）
【００３４】
なお、ブリッジ７１は、ホストブリッジ５１から見てブリッジデバイスのデバイス番号で識別可能なため、項目(a2)のブリッジ７１の識別名としては、デバイス番号を使用することができる。また、デバイスアクセス時に複数のブリッジ７１を経由する場合、ホストブリッジ５１直下のブリッジ７１が、対応表２１への登録対象となる。
【００３５】
項目(a3)における、ブリッジ７１に割り当てるＩ／Ｏアドレス空間は、ＰＣＩバス６０の初期化つまりＰＣＩバススキャン時にＰＣＩバスブリッジに設定したＩ／Ｏアドレス空間のことである。作成部１２Ａは、対応表２１の作成中にＩ／Ｏアドレス空間が枯渇した場合、複数のブリッジ７１に重複するＩ／Ｏアドレスを割り当てることになる。図３に示す例では、ＰＣＩブリッジ＃１とＰＣＩブリッジ＃１６とに対し、同じＩ／Ｏアドレス空間1000〜1FFFが重複して割り当てられている。この場合、作成部１２Ａは、これらのブリッジ＃１，＃１６の一つだけ有効化し、他のブリッジに対するＩ／Ｏアドレス空間の割当を解除する。
【００３６】
つまり、作成部１２Ａは、図３に示すように、ブリッジ＃１６（一ブリッジ）に割り当てる未割当ブリッジアドレスが枯渇した場合、ブリッジ＃１（他ブリッジ）に対する既割当ブリッジアドレス1000〜1FFFの割当を解除してブリッジ＃１６に割り当てる。そして、作成部１２Ａは、図４に示すように、対応表２１において、アドレス割当を解除されたブリッジ＃１に対応するアドレス割当欄に「なし（無効）」を設定するとともに、有効化されたブリッジ＃１６に対応するアドレス割当欄に「あり（有効）」を設定する。なお、Ｉ／Ｏアドレス空間が枯渇して全てのブリッジ７１にＩ／Ｏアドレスを割り当てられない場合の、より詳細な処理については、図７および図１２（Ａ）〜図１４（Ｂ）を参照しながら後述する。
【００３７】
ここで、ブリッジ７１へのＩ／Ｏアドレス空間の割当について説明する。ブリッジ７１は、上位のＰＣＩバス６０の一つと下位のＰＣＩバス群とをつなぐ働きをする。上位のＰＣＩバス６０からＩ／Ｏアクセスが要求された場合、その要求を下位のバス６０に転送するか否かは、ブリッジ７１に設定されたＩ／Ｏアドレス空間によって判定される。すなわち、アクセス対象のＩ／Ｏアドレスが、ブリッジ７１に設定されたＩ／Ｏアドレス空間に含まれる場合、ブリッジ７１は、上位のバス６０からのＩ／Ｏアクセスを下位のＰＣＩバス６０に転送する。そして、下位のバス６０に当該Ｉ／Ｏアドレスに対応するＰＣＩデバイス８１があれば、そのデバイス８１がＩ／Ｏアクセスを処理する。
【００３８】
ブリッジ７１は、図１〜図３に示すように、Ｉ／Ｏベースアドレスレジスタ７２ａおよびＩ／Ｏリミットアドレスレジスタ７２ｂを含むコンフィグレーションレジスタ７２を有している。そして、各ブリッジ７１に対するＩ／Ｏアドレス空間の割当は、前述したように、作成部１２Ａまたは割当部１２ＢがＩ／Ｏベースアドレスレジスタ７２ａとＩ／Ｏリミットアドレスレジスタ７２ｂとに設定範囲の下限値と上限値とをそれぞれ設定することによって行なわれる。また、作成部１２Ａまたは割当部１２Ｂがこれらのレジスタ７２ａ，７２ｂに０を設定することにより、ブリッジ７１に対するＩ／Ｏアドレス空間の割当が解除され、ブリッジ７１は、上位のバス６０からのＩ／Ｏアクセスを下位のバス６０に転送しなくなる。
【００３９】
〔１−３〕対応表の作成
ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａは、ＰＣＩデバイス８１にＩ／Ｏアドレスを割り当てながら対応表２１を作成する。以下に、対応表２１の作成処理の概要を説明する。
対応表２１の作成処理では、まず、全てのＰＣＩブリッジ７１のバス番号が初期化される。この時点で、対応表２１は空の状態に初期化される。
【００４０】
次に、ＰＣＩバス６０に対する深さ優先探索を行なうことでＰＣＩデバイス８１およびＰＣＩブリッジ７１が検索され、ＰＣＩデバイス８１およびＰＣＩブリッジ７１のＩ／Ｏアドレス空間が設定される。ＰＣＩデバイス８１が検出された場合、Ｉ／Ｏアドレス空間が設定されるとともに、対応表２１にデバイス８１を記述する行が追加される。ブリッジ７１のＩ／Ｏアドレス範囲には、ブリッジ７１配下の全デバイス８１のＩ／Ｏアドレス空間の和集合が設定される。
【００４１】
ブリッジ７１やデバイス８１に割り当てるＩ／Ｏ空間が不足した場合、作成部２１Ａは、Ｉ／Ｏ空間の割当アドレスを初期値（0x1000）に戻して処理を継続する。その際、0x1000番地は、他のデバイス８１に既に割り当て済みなので、作成部１２Ａは、0x1000番地の次に割り当て可能なＩ／Ｏアドレスを使用する。また、作成部１２Ａは、対応表２１の「ブリッジアドレス」欄と「アドレス割当」欄を参照して、当該Ｉ／Ｏアドレスを割り当てられているブリッジ７１を検索する。このブリッジ７１に対するＩ／Ｏアドレス空間の割当を初期値（未割当状態）に戻し、対応表２１の「アドレス割当」欄に「なし」を設定する。
【００４２】
例えば、前述した図３および図４において、作成部１２Ａは、ブリッジ＃１５にＩ／Ｏアドレス空間を割り当てた段階で、Ｉ／Ｏアドレスを使い切り、ブリッジ＃１６配下のデバイス＃３１，＃３２に割り当てるＩ／Ｏアドレスが不足する。このとき、次のＩ／Ｏアドレスは、0x1000以後において最初に未割り当てなアドレスである0x1020になる。作成部１２Ａは、対応表２１の「ブリッジアドレス」欄を参照することで、アドレス0x1020を割り当てられているブリッジ７１はブリッジ＃１であると判断する。そして、作成部１２Ａは、ブリッジ＃１に対するＩ／Ｏアドレス空間の割当をリセット（解除）し、対応表２１の「アドレス割当」欄も「なし」に設定する。次に、作成部１２Ａは、アドレス0x1020〜0x102FをＰＣＩデバイス＃３１に、アドレス0x1030〜0x103FをＰＣＩデバイス＃３２に割り当ててから、ブリッジ＃１６のレジスタ７２ａ，７２ｂに0x1000〜0x1FFFを割り当て、対応表２１の「アドレス割当」欄には「あり」を設定する。
【００４３】
ついで、図５〜図７に示すフローチャートに従って、図８〜図１４（Ｂ）を参照しながら、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａによる対応表２１の作成処理について詳細に説明する。ここで、図５は、図１に示す情報処理装置１の作成部１２Ａによる対応表２１の作成処理を説明するフローチャート（ステップＳ１０〜Ｓ４０）である。図６は、図５に示す対応表２１の作成処理におけるバス設定処理（ステップＳ２０）を説明するフローチャート（ステップＳ２１〜Ｓ２６）である。図７は、図５に示す対応表２１の作成処理におけるＩ／Ｏ設定処理（ステップＳ４０）を説明するフローチャート（ステップＳ４０１〜Ｓ４１６）である。
【００４４】
なお、図３および図４では、ブリッジ７１が一階層のみの構成を例示したが、図８（Ａ）〜図１４（Ｂ）では、ブリッジ＃１およびブリッジ＃２が階層的に備えられている構成についての対応表２１の作成処理について説明する。つまり、ブリッジ＃１には、バス＃１を介してデバイス＃１およびブリッジ＃２が接続され、ブリッジ＃２には、バス＃２を介して２つのデバイス＃２，＃３が接続されている。また、ブリッジ＃３には、バス＃３を介して２つのデバイス＃４，＃５が接続され、ブリッジ＃１５には、バス＃１５を介して２つのデバイス＃２９，＃３０が接続され、ブリッジ＃１６には、バス＃１６を介して２つのデバイス＃３１，＃３２が接続されている。
【００４５】
作成部１２Ａによる対応表作成処理では、次Ｉ／Ｏと次バスとの２つの変数が使用される。次Ｉ／Ｏは、次のデバイス８１に割り当てるＩ／Ｏアドレスを示し、次バスは、次のＰＣＩバス６０に割り当てるバス番号を示し、例えばメモリ２０に保持される。次Ｉ／Ｏの初期値は0x1000に設定され、次バスの初期値は１に設定される。初期値の設定は、対応表作成処理の開始時に行なわれる（図５のステップＳ１０）。
【００４６】
初期値の設定後、作成部１２Ａは、バス設定サブルーチン（図６のステップＳ２１〜Ｓ２６）を実行する（図５のステップＳ２０）。バス設定サブルーチンは、引数にバスブリッジ７１を指定する。具体的には、バスブリッジ７１のバス番号とデバイス番号とが指定されるが、バスブリッジ７１のバス番号とデバイス番号とは、図では、総称的にブリッジまたはルートバスブリッジと表記される。バスブリッジ７１は、上位のバス(primary_bus)６０と下位のバス(secondary_bus)６０とを結合する。バスブリッジ７１の下位のバス６０は、一般に、複数本存在するため、セカンダリバス番号“secondary_bus”に加えてサブオーディナリバス番号“subordinary_bus”が指定される。次の条件を満たすバス番号を付与されたバスが、下位のバスとなる。
“secondary_bus”≦ バス番号 ＜“subordinary_bus”
【００４７】
バス設定サブルーチンは、まず、指定されたブリッジ７１の“secondary_bus”に「次バス」の値（バス番号）を設定する（ステップＳ２１）。バス設定サブルーチンにおいて、作成部１２Ａは、ブリッジ配下の全バスにバス番号を割り当てた後（図６のステップＳ２２〜Ｓ２５）、ブリッジ７１の“subordinary_bus”に「次バス」を設定することで、下位バスのバス番号の範囲をブリッジ７１に設定する（図６のステップＳ２６）。作成部１２Ａは、ブリッジ７１の設定完了後、「次バス」の値を一つ増やすことで（図６のステップＳ２６）、次のバスブリッジ７１に割り当てるバス番号が重複しないようにする。バス設定サブルーチンは、指定ブリッジ７１の直下にある全デバイス８１を検索する（図６のステップＳ２２〜Ｓ２５）。つまり、ブリッジ７１の下位のバス（セカンダリバス）上のデバイス番号＃０から＃３１までのデバイスを検索する（ステップＳ２２〜Ｓ２５）。このようにして検索されたデバイスがブリッジである都度（ステップＳ２３のＹＥＳルート）、作成部１２Ａは、バス設定サブルーチンを再帰的に呼び出し、深さ優先でバス番号の設定を行なう（ステップＳ２４）。バス番号＃０〜＃１６の設定が完了した状態を、図８（Ａ）に示す。ここで、図８（Ａ）は、図１に示す情報処理装置１においてＩ／Ｏアドレス割当対象を含む具体的な構成の他例および当該構成のバス設定処理後の状態を示すブロック図である。図８（Ａ）に示す構成は、前述したように、図３に示した構成とは異なり、ブリッジ＃１およびブリッジ＃２を階層的に備えている。
【００４８】
続いて、作成部１２Ａは、図８（Ｂ）に示すように、空の対応表２１を作成する（図５のステップＳ３０）。図８（Ｂ）は、図８（Ａ）に示す構成について作成される対応表２１の初期状態を示す図である。図８（Ｂ）に示す対応表２１が、対応表２１の初期値になる。
【００４９】
次に、作成部１２Ａは、Ｉ／Ｏ設定サブルーチン（図７のステップＳ４０１〜Ｓ４１６）を実行する（図５のステップＳ４０）。Ｉ／Ｏ設定サブルーチンは、ブリッジ７１を指定して実行され、指定ブリッジ配下のＰＣＩブリッジ７１とＰＣＩデバイス８１にＩ／Ｏアドレス空間を割り当てると同時に、対応表２１を完成させる。Ｉ／Ｏ設定サブルーチンは、Ｉ／Ｏ範囲（Ｉ／Ｏアドレス範囲）を、ローカル変数（Ｉ／Ｏ範囲変数）として、例えばメモリ２０に保持する。このローカル変数は、指定ブリッジとその配下のデバイス群とに割り当てたＩ／Ｏ範囲を示す。作成部１２Ａは、まず、Ｉ／Ｏ範囲の初期値として空集合を設定する（ステップＳ４０１）。
【００５０】
作成部１２Ａは、指定ブリッジ直下の全デバイスを調べ（ステップＳ４０２〜Ｓ４１１）、デバイスがブリッジの場合（ステップＳ４０３のＹＥＳルート）、Ｉ／Ｏ設定サブルーチンを再帰的に呼び出し（ステップＳ４０４）、子ブリッジにＩ／Ｏアドレス空間を割り当てる。この後、作成部１２Ａは、Ｉ／Ｏ範囲変数に、今回、子ブリッジに割り当てたＩ／Ｏアドレス空間を加算する（ステップＳ４０５）。一方、作成部１２Ａは、デバイスがＰＣＩデバイスの場合（ステップＳ４０３のＮＯルート）、当該ＰＣＩデバイスにＩ／Ｏアドレス空間を割り当てると同時に、対応表２１に、当該ＰＣＩデバイスに対応した行を追加する（ステップＳ４０６〜Ｓ４１０）。ステップＳ４０６〜Ｓ４１０の処理の詳細については後述する。なお、デバイスがＰＣＩデバイスの場合も、作成部１２Ａは、ローカル変数であるＩ／Ｏ範囲変数に、今回、当該ＰＣＩデバイスに割り当てたＩ／Ｏアドレス空間を加算する（ステップＳ４０９）。
【００５１】
全デバイスの処理（ステップＳ４０２〜Ｓ４１１）が完了した後、作成部１２Ａは、Ｉ／Ｏ範囲変数を、指定ブリッジのＩ／Ｏ範囲（レジスタ７２ａ，７２ｂ）に設定する（ステップＳ４１２）。そして、作成部１２Ａは、対応表２１のＰＣＩブリッジ欄を調べ、指定ブリッジに対応する行のブリッジアドレス欄に「Ｉ／Ｏ範囲」を設定し、同行のアドレス割当欄に「あり」を設定して対応表２１を完成させる（ステップＳ４１３）。
【００５２】
本実施形態では、ブリッジ７１（レジスタ７２ａ，７２ｂ）に設定するＩ／Ｏアドレス空間は４ＫＢバウンダリであるので、次Ｉ／Ｏは、４ＫＢバウンダリまで切り上げて調整される（ステップＳ４１４）。このようにして、次Ｉ／Ｏが0x10000以上になることがあるが、その場合（ステップＳ４１５のＹＥＳルート）、次Ｉ／Ｏに、0x1000以降、最初の空きアドレスが設定される（ステップＳ４１６）。つまり、0x1000番地は既に他のＰＣＩデバイス８１に割当済みであるので、作成部１２Ａは、割当済みのＩ／Ｏアドレス空間を避け、その後の空きアドレスを次Ｉ／Ｏとする。なお、次Ｉ／Ｏが0x10000未満である場合（ステップＳ４１５のＮＯルート）、作成部１２Ａは、ステップＳ４１６の処理を行なうことなく、指定ブリッジに対するＩ／Ｏ設定処理を終了する。
【００５３】
Ｉ／Ｏ設定サブルーチンで、デバイス８１にＩ／Ｏアドレスを設定する処理は、三段階で実施される。まず、使用するＩ／Ｏアドレスが他のブリッジ７１に割当済みである場合（ステップＳ４０６のＹＥＳルート）、当該他のブリッジ７１に対する当該Ｉ／Ｏアドレスの割当を解除する処理（ステップＳ４０７）が実施される。ついで、デバイス８１にＩ／Ｏアドレス範囲が設定され（ステップＳ４０８）、最後に、対応表２１にデバイス８１が登録される（ステップＳ４１０）。
【００５４】
まず、作成部１２Ａは、次Ｉ／Ｏで示されるアドレスが対応表２１のブリッジアドレス欄に含まれ、かつ、アドレス割当欄が「あり」の行を検索する。このような行がある場合（ステップＳ４０６のＹＥＳルート）、当該行のＰＣＩブリッジ欄の識別名で特定されるブリッジ７１には、次Ｉ／Ｏのアドレスが割り当てられている。この場合、作成部１２Ａは、当該ブリッジ７１のＩ／Ｏアドレス空間割当を初期化し、割当を解除する。割当解除は、ブリッジ７１におけるコンフィグレーションレジスタ７２のレジスタ７２ａ，７２ｂに０を設定することで行なわれる。そして、作成部１２Ａは、検索結果の行のアドレス割当欄を「あり」から「なし」に書き換え、アドレス割当を解除したことを対応表２１に登録する（ステップＳ４０７）。
【００５５】
ついで、作成部１２Ａは、ＰＣＩデバイス８１のＩ／Ｏアドレス空間に次Ｉ／Ｏを設定する（ステップＳ４０８）。各デバイス８１は、デバイス固有のＩ／Ｏアドレス空間の長さを持つので、当該長さをＰＣＩデバイスから取得し、当該長さ分だけ、次Ｉ／Ｏを進める。そして、作成部１２Ａは、ＰＣＩデバイス８１に割り当てたＩ／Ｏアドレス空間をＩ／Ｏ範囲に追加する（ステップＳ４０９）。
【００５６】
最後に、作成部１２Ａは、処理したデバイス８１に対応する行を対応表２１に追加する（ステップＳ４１０）。追加する行は、以下の形式となる。
ＰＣＩデバイスアドレス＝ＰＣＩデバイスに設定したＩ／Ｏアドレス範囲
ＰＣＩブリッジ        ＝指定ブリッジのバス番号とデバイス番号
ブリッジアドレス      ＝空
アドレス割当          ＝空
この段階で、ブリッジアドレス欄とアドレス割当欄は、設定されず、全てのデバイスの処理が完了し、指定ブリッジのＩ／Ｏアドレス範囲が確定した段階で、まとめて設定される。
【００５７】
ここで、図９（Ａ）〜図１４（Ｂ）を参照しながら、図８（Ａ）に示す構成のうち、ブリッジ＃１，＃２，＃１６およびデバイス＃１〜＃３，＃３１，＃３２に対するＩ／Ｏ設定処理について具体的に説明する。なお、図９（Ａ）〜図１４（Ａ）は、それぞれ図８（Ａ）に示す構成に対するＩ／Ｏ設定処理を説明するブロック図である。また、図９（Ｂ）〜図１４（Ｂ）は、それぞれ図９（Ａ）〜図１４（Ａ）に示す構成に対する対応表２１の作成状態を示す図である。
【００５８】
まず、図９（Ａ）に示すように、作成部１２Ａは、バス＃０のバススキャン(a1)を行ない、ブリッジ＃１を確認すると（(1.1)参照）、ブリッジ＃１配下のバス＃１のバススキャン(a1.1)を行なう。作成部１２Ａは、バス＃１のバススキャン(a1.1)に伴い、デバイス＃１を確認すると（(1.1.1)参照）、デバイス＃１にＩ／Ｏ範囲1000〜100Fを割り当てる。そして、作成部１２Ａは、図９（Ｂ）に示すように、対応表２１におけるデバイス＃１の行(1.1.1)のＰＣＩデバイスアドレス欄に「1000〜100F」を設定し、同行(1.1.1)のＰＣＩブリッジ欄に「ＰＣＩブリッジ＃１」を設定する。
【００５９】
作成部１２Ａは、バス＃１のバススキャン(a1.1)に伴い、ブリッジ＃２を確認すると（(1.1.2)参照）、ブリッジ＃２配下のバス＃２のバススキャン(a1.1.2)を行なう。作成部１２Ａは、バス＃２のバススキャン(a1.1.2)に伴い、デバイス＃２を確認すると（(1.1.2.1)参照）、デバイス＃２にＩ／Ｏ範囲2000〜200Fを割り当てる。そして、作成部１２Ａは、図９（Ｂ）に示すように、対応表２１におけるデバイス＃２の行(1.1.2.1)のＰＣＩデバイスアドレス欄に「2000〜200F」を設定し、同行のＰＣＩブリッジ欄に「ＰＣＩブリッジ＃２」を設定する。
【００６０】
作成部１２Ａは、バス＃２のバススキャン(a1.1.2)に伴い、デバイス＃３を確認すると（(1.1.2.2)参照）、デバイス＃３にＩ／Ｏ範囲2010〜201Fを割り当てる。そして、作成部１２Ａは、図９（Ｂ）に示すように、対応表２１におけるデバイス＃３の行(1.1.2.2)のＰＣＩデバイスアドレス欄に「2010〜201F」を設定し、同行(1.1.2.2)のＰＣＩブリッジ欄に「ＰＣＩブリッジ＃２」を設定する。
【００６１】
この後、作成部１２Ａは、図１０（Ａ）に示すように、ブリッジ＃２配下のデバイス＃２，＃３に割り当てられたＩ／Ｏ範囲の総和を含む、４ＫＢのＩ／Ｏ範囲2000〜2FFFをブリッジ＃２（レジスタ７２ａ，７２ｂ）に割り当てる（図１０（Ａ）の矢印(a2),(a3)参照）。そして、作成部１２Ａは、図１０（Ｂ）に示すように、対応表２１におけるデバイス＃２，＃３の行のブリッジアドレス欄に「2000〜2FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
【００６２】
ついで、作成部１２Ａは、図１１（Ａ）に示すように、ブリッジ＃１配下のデバイス＃１およびブリッジ＃２に割り当てられたＩ／Ｏ範囲の総和を含む、８ＫＢのＩ／Ｏ範囲1000〜2FFFをブリッジ＃１（レジスタ７２ａ，７２ｂ）に割り当てる（図１１（Ａ）の矢印(a4),(a5)参照）。そして、作成部１２Ａは、図１１（Ｂ）に示すように、対応表２１におけるデバイス＃１の行のブリッジアドレス欄に「1000〜2FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
【００６３】
作成部１２Ａは、上述のようなＩ／Ｏ設定処理を繰り返し、例えば図１２（Ａ）および図１２（Ｂ）に示すように、ブリッジ＃１５に対するＩ／Ｏ範囲の割当を完了し、ブリッジ＃１６に割り当てるべき未割当ブリッジアドレスが枯渇した場合、以下のようなＩ／Ｏ設定処理を実行する。つまり、図１２（Ａ）に示すように、作成部１２Ａは、バス＃０のバススキャン(a1)に伴い、ブリッジ＃１６を確認すると（(1.N)参照）、ブリッジ＃１６配下のバス＃１６のバススキャン(a1.N)を行なう。
【００６４】
作成部１２Ａは、図１３（Ａ）に示すように、バス＃１６のバススキャン(a1.N)に伴い、デバイス＃３１を確認すると（(1.N.1)参照）、デバイス＃３１にＩ／Ｏ範囲1020〜102Fを割り当てる。そして、作成部１２Ａは、図１３（Ｂ）に示すように、対応表２１のブリッジアドレス欄を検索し、デバイス＃３１に割り当てたＩ／Ｏ範囲1020〜102Fを含む行（図１３（Ｂ）では最上位行）のアドレス割当欄を「あり」から「なし」に書き換える。
【００６５】
また、作成部１２Ａは、対応表２１におけるデバイス＃１６の行(1.N.1)のＰＣＩデバイスアドレス欄に「1020〜102F」を設定し、同行のＰＣＩブリッジ欄に「ＰＣＩブリッジ＃１６」を設定する。さらに、作成部１２Ａは、バス＃１６のバススキャン(a1.N)に伴い、デバイス＃３２を確認すると（(1.N.2)参照）、デバイス＃３２にＩ／Ｏ範囲1030〜103Fを割り当てる。そして、作成部１２Ａは、図１３（Ｂ）に示すように、対応表２１におけるデバイス＃３２の行(1.N.2)のＰＣＩデバイスアドレス欄に「1030〜103F」を設定し、同行(1.N.2)のＰＣＩブリッジ欄に「ＰＣＩブリッジ＃１６」を設定する。
【００６６】
この後、作成部１２Ａは、図１４（Ａ）に示すように、ブリッジ＃１６配下のデバイス＃３１，＃３２に割り当てられたＩ／Ｏ範囲の総和を含む、４ＫＢのＩ／Ｏ範囲1000〜1FFFをブリッジ＃１６（レジスタ７２ａ，７２ｂ）に割り当てる（図１４（Ａ）の矢印(a6),(a7)参照）。そして、作成部１２Ａは、図１４（Ｂ）に示すように、対応表２１におけるデバイス＃３１，＃３２の行のブリッジアドレス欄に「1000〜1FFF」を設定し、同行のアドレス割当欄に「あり」を設定する。
【００６７】
〔１−４〕Ｉ／Ｏアクセス処理（アドレス割当処理）
ついで、図１５に示すフローチャート（ステップＳ５１〜Ｓ５７）に従って、図１６〜図２１（Ｂ）を参照しながら、アドレス割当処理部１２ＢによるＰＣＩデバイスＩ／Ｏアクセス処理（ＰＣＩデバイス８１に対しＩ／Ｏアクセスが発生した場合の処理）について詳細に説明する。ここで、図１６〜図１９は、図１５に示すＩ／Ｏアクセス処理を説明すべく具体的な対応表を示す図である。また、図２０（Ａ）および図２１（Ａ）は、図１５に示すＩ／Ｏアクセス処理を説明するブロック図、図２０（Ｂ）および図２１（Ｂ）は、それぞれ図２０（Ａ）および図２１（Ａ）に示す処理に対応する対応表の状態を示す図である。なお、図１６〜図２１（Ｂ）では、図３および図４と同様の構成つまりブリッジ７１が一階層のみである構成に対する、Ｉ／Ｏアクセス処理が例示されている。
【００６８】
割当部１２ＢによるＩ／Ｏアクセス処理には、２種類の処理がある。一つの処理は、既にブリッジ７１にＩ／Ｏアドレス空間が割り当て済みの場合（ステップＳ５２のＹＥＳルート）の処理（ステップＳ５７）である。もう一つの処理は、ブリッジ７１にＩ／Ｏアドレス空間が割り当てられていない場合（ステップＳ５２のＮＯルート）の処理（ステップＳ５３〜Ｓ５７）である。割当部１２Ｂは、Ｉ／Ｏアクセス処理において、最初に、上記２種類の処理のいずれを実行するか判定し、判定結果に従って、Ｉ／Ｏアドレス空間が割当済みの場合の処理、または、Ｉ／Ｏアドレス空間が割り当てられていない場合の処理を実行する。各処理は、作成部１２Ａによって作成された対応表２１を参照、更新しながら実行される。以下に、ＣＰＵ１０が例えば1000番地に対するＩ／Ｏアクセスを行なった場合の、割当部１２ＢによるＩ／Ｏアクセス処理について、具体的に説明する。
【００６９】
〔１−４−１〕Ｉ／Ｏアクセス処理の判定（ステップＳ５１，Ｓ５２）
ＰＣＩデバイス８１へのＩ／Ｏアクセスが発生した場合、割当部１２Ｂは、対応表２１を参照し、ＰＣＩデバイス８１が接続されているブリッジ７１にＩ／Ｏアドレス空間が割り当てられているか否かを判定する（ステップＳ５１）。このとき、割当部１２Ｂは、Ｉ／Ｏアクセスの要求アドレスをキーとして、対応表２１のＰＣＩデバイスアドレスのカラムを確認する。ＰＣＩデバイスアドレス欄に登録されたＩ／Ｏ範囲が、要求アドレス（ここでは1000番地）を含む場合、発生したＩ／Ｏアクセスは、その行（第１レコード）のデバイス８１へのＩ／Ｏアクセスであると判定する（図１６および図１７参照）。つまり、ＰＣＩデバイスアドレス欄に要求アドレスを含む第１レコード（ここでは図１７の最上位行）が対応表２１から検索される。ここで、対応表２１の作成時に、全てのＰＣＩデバイス８１に異なるＩ／Ｏアドレス空間を割り当てているため、検索で見つかる行はたかだか一つである（図１７参照）。割当部１２Ｂは、検索した行のアドレス割当欄を確認しアドレス割当欄が「あり」であれば、ブリッジ７１にＩ／Ｏアドレスが割り当て済みであると判定する（ステップＳ５２のＹＥＳルート）。一方、割当部１２Ｂは、アドレス割当欄が「なし」であれば（第１レコードにおける割当情報が「無効」である場合）、ブリッジ７１にＩ／Ｏが割り当てられていないと判定する（ステップＳ５２のＮＯルート）。
【００７０】
〔１−４−２〕ブリッジにＩ／Ｏアドレス空間が割り当て済みの場合の処理
ブリッジ７１にＩ／Ｏアドレス空間が割り当て済みと判定した場合（ステップＳ５２のＹＥＳルート）、ＰＣＩデバイス８１が接続されているブリッジ７１に対し、適切にＩ／Ｏアドレス空間が割り当てられている。このため、ブリッジ７１に対する特別な処理は不要であり、通常のＩ／Ｏアクセスを行なうことで、ＰＣＩデバイス８１に対してＩ／Ｏアクセスが実行される（ステップＳ５７）。
【００７１】
〔１−４−３〕ブリッジにＩ／Ｏアドレス空間が割り当てられていない場合の処理
ブリッジ７１にＩ／Ｏアドレス空間が割り当てられていないと判定した場合（ステップＳ５２のＮＯルート）、ＰＣＩデバイス８１の接続されているブリッジ７１には、Ｉ／Ｏアドレス空間が割り当てられておらず、そのＩ／Ｏアドレス空間は別のブリッジ７１に割り当てられている状態である。目的のＰＣＩデバイス８１が接続されているブリッジ７１は、Ｉ／Ｏアクセスをデコードしないため、このままＩ／Ｏアクセスを実行しても、ＰＣＩデバイス８１までＩ／Ｏアクセスが転送されない。よって、Ｉ／Ｏアドレス空間が割り当てられているブリッジ７１の割当を解除し、ＰＣＩデバイス８１が接続されているブリッジ７１にＩ／Ｏアドレス空間を再割り当てすることで、目的のＰＣＩデバイス８１にＩ／Ｏアクセスが転送される状態にする必要がある。具体的に、割当部１２Ｂは、以下の５段階の処理(p1)〜(p5)を行なう。
【００７２】
(p1)割当Ｉ／Ｏアドレス空間の取得
割当部１２Ｂは、対応表２１を参照し、アクセス対象のＰＣＩデバイス８１が接続されているブリッジ７１のＩ／Ｏアドレス空間（ここでは1000〜1FFFF）を取得する。
(p2)解除対象ブリッジの取得
割当部１２Ｂは、処理(p1)で得られた割当Ｉ／Ｏアドレス空間をキーに対応表２１を検索し、割当Ｉ／Ｏアドレス空間が現在割り当てられているブリッジ７１（ここではブリッジ＃１６）を、解除対象ブリッジとして特定する。つまり、割当部１２Ｂは、上記第１レコード（図１７参照）におけるブリッジアドレスと同一のブリッジアドレスを含み且つアドレス割当欄に「あり（有効）」を設定された第２レコード（図１９参照）を、対応表２１から検索する。
【００７３】
(p3)解除対象ブリッジのＩ／Ｏアドレス空間割り当て解除
割当部１２Ｂは、処理(p2)で特定されたブリッジ７１のＩ／Ｏアドレス空間割当を解除する。つまり、割当部１２Ｂは、前記第２レコードにおける、前記第１レコードの第１ブリッジ識別情報（ブリッジ＃１）とは異なる第２ブリッジ識別情報（ブリッジ＃１６）に対応する第２ブリッジ（＃１６）に対する同一のブリッジアドレス（1000〜1FFF）の割当を解除する（図２０（Ａ）参照）。また、割当部１２Ｂは、前記第２レコードにおけるアドレス割当欄に「なし（無効）」を設定する（図２０（Ｂ）参照）。
【００７４】
(p4)設定対象ブリッジのＩ／Ｏアドレス割当
割当部１２Ｂは、アクセス対象のＰＣＩデバイス８１が接続されているブリッジ７１にＩ／Ｏアドレス空間を割り当てる。つまり、割当部１２Ｂは、前記第１レコードにおける第１ブリッジ識別情報に対応する第１ブリッジ（＃１）に対し同一のブリッジアドレス（1000〜1FFF）を割り当てる（図２１（Ａ）参照）。また、割当部１２Ｂは、前記第１レコードにおけるアドレス割当欄に「なし（無効）」を設定する（図２１（Ｂ）参照）。
(p5)ＰＣＩデバイスへのＩ／Ｏアクセス
【００７５】
〔１−４−３−１〕割当Ｉ／Ｏアドレス空間の取得（処理(p1)；ステップＳ５３）
割当部１２Ｂは、ステップＳ５１で検索・取得した対応表２１の行（第１レコード）におけるＰＣＩブリッジ欄およびブリッジアドレス欄の内容を確認する。これにより、割当部１２Ｂは、Ｉ／Ｏアドレス空間を割り当てるべき設定対象ブリッジのＩＤ（ここでは＃１）と、当該設定対象ブリッジに割り当てるべきＩ／Ｏアドレス空間とを取得する。図１７に示す例では、設定対象ブリッジとしてブリッジ＃１が取得され、割当Ｉ／Ｏアドレス空間として1000〜１FFFが取得される。
【００７６】
〔１−４−３−２〕解除対象ブリッジの取得（処理(p2)；ステップＳ５４）
割当部１２Ｂは、図１８に示すように、ステップＳ５３で取得した割当Ｉ／Ｏアドレス空間をキーとして対応表２１のブリッジアドレス欄を順番に確認していく。これにより、割当部１２Ｂは、図１９に示すように、ブリッジアドレス欄に設定されたブリッジアドレスが割当I/Oアドレス空間と重複しており、且つ、アドレス割当欄に「あり」を設定された行（第２レコード）を検索する。この検索処理によって発見されたブリッジが、Ｉ／Ｏアドレス空間の割当を解除すべき解除対象ブリッジとなる。
【００７７】
図１８および図１９に示す例では、割当Ｉ／Ｏアドレス空間1000〜１FFFをキーとして対応表２１の検索が行なわれ、解除対象ブリッジとして、ブリッジ＃１のブリッジアドレス1000〜１FFFと重複するブリッジ＃１６が取得される。図１８および図１９に示す例では、ブリッジ＃１のブリッジアドレス1000〜１FFFと重複するブリッジとして、一つのブリッジが取得されているが、２以上のブリッジが取得される場合もある。
【００７８】
〔１−４−３−３〕解除対象ブリッジのＩ／Ｏアドレス空間割り当て解除（処理(p3)；ステップＳ５５）
割当部１２Ｂは、ステップＳ５４で取得された解除対象ブリッジのＩ／ＯベースアドレスとＩ／Ｏリミットアドレスの両レジスタ７２ａ，７２ｂに０を設定することで、図２０（Ａ）に示すように、解除対象ブリッジに対するＩ／Ｏアドレス空間割当を解除する。
その後、割当部１２Ｂは、対応表２１のＰＣＩブリッジ欄の内容が解除対象ブリッジの識別名と一致する行（第２レコード）におけるアドレス割当欄を、図２０（Ｂ）に示すように、「なし」に更新する。ＰＣＩブリッジ欄の内容が解除対象ブリッジの識別名と一致する行が複数存在する場合、割当部１２Ｂは、その複数の行すべてにおけるアドレス割当欄を「なし」に更新する。
図２０（Ａ）および図２０（Ｂ）に示す例において、割当部１２Ｂは、解除対象ブリッジであるブリッジ＃１６のレジスタ７２ａ，７２ｂに０を設定してＩ／Ｏアドレス空間の割当を解除する。その後、割当部１２Ｂは、対応表２１のブリッジ＃１６に対応する全ての行のアドレス割当欄を「なし」に更新する。
【００７９】
〔１−４−３−４〕設定対象ブリッジのＩ／Ｏアドレス割当（処理(p4)；ステップＳ５６）
ここまでの処理で、図２０（Ａ）および図２０（Ｂ）に示すように、アクセス対象のＰＣＩデバイス８１が接続されている設定対象ブリッジに割り当てるべきＩ／Ｏアドレス空間は、解放され、どのブリッジ７１にも設定されていない状態になる。このような状態で、割当部１２Ｂは、図２１（Ａ）に示すように、設定対象ブリッジのＩ／ＯベースアドレスとＩ／Ｏリミットアドレスの両レジスタ７２ａ，７２ｂにＩ／Ｏ範囲を設定し、設定対象ブリッジにＩ／Ｏアドレス空間を割り当てる。レジスタ７２ａ，７２ｂに対する設定後、割当部１２Ｂは、図２１（Ｂ）に示すように、対応表２１のＰＣＩブリッジ欄の内容が設定対象ブリッジの識別名と一致する行のアドレス割当欄を「あり」に更新する。ＰＣＩブリッジ欄の内容が設定対象ブリッジの識別名と一致する行が複数存在する場合、割当部１２Ｂは、その複数の行すべてにおけるアドレス割当欄を「あり」に更新する。
【００８０】
図２１（Ａ）に示す例において、割当部１２Ｂは、設定対象ブリッジであるブリッジ＃１のレジスタ７２ａ，７２ｂに割当Ｉ／Ｏアドレス空間の下限値1000および上限値1FFFをそれぞれ設定する。また、図２１（Ｂ）に示す例において、割当部１２Ｂは、対応表２１のブリッジ＃１に対応する全ての行のアドレス割当欄を「あり」に更新する。この結果、Ｉ／Ｏアクセス対象のデバイス８１が接続されているブリッジ７１に対し、必要なＩ／Ｏアドレス空間が設定され、ブリッジ７１は、Ｉ／Ｏアドレスをデコードし、アクセス対象のＰＣＩデバイス８１に対してＩ／Ｏアクセスを転送し始める。
【００８１】
〔１−４−３−５〕ＰＣＩデバイスへのＩ／Ｏアクセス（処理(p5)；ステップＳ５７）
要求されたＩ／Ｏアクセスが実行される。Ｉ／Ｏアクセスは、ステップＳ５６で設定したブリッジ７１を経由して、アクセス対象のＰＣＩデバイス８１に転送され、ＰＣＩデバイス８１に対するＩ／Ｏアクセスが実行される。これにより、ＣＰＵ１０で動作するＯＳやアプリケーションは、所望の結果を得る。
【００８２】
〔１−５〕第１実施形態の効果
上述した第１実施形態のコンピュータシステム１によれば、割当部１２Ｂが、作成部１２ＡによってＰＣＩバスの初期化時に作成された対応表２１を参照、更新しながら、ブリッジ７１に対するＩ／Ｏアドレス空間の割当解除や再割当を行なうことで、デバイス８１に対するＩ／Ｏアクセス処理が実行される。これにより、コンピュータシステム１において、規定数を超える数（例えば１６個以上）のブリッジ７１が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ７１を同時に使用することが可能になる。
【００８３】
〔２〕第２実施形態の情報処理装置
〔２−１〕第２実施形態の構成
図２２は、第２実施形態としての情報処理装置（コンピュータシステム）１Ａの構成を示すブロック図である。なお、既述の符号と同一の符号は、同一もしくはほぼ同一の部分を示しているので、その説明は省略する。
図２２に示すコンピュータシステム１Ａも、第１実施形態のコンピュータシステム１と同様、ＣＰＵ１０，メモリ２０，ストレージ３０，ＮＶＲＡＭ４０，チップセット５０，ＰＣＩバス６０，スイッチ７０，スロット８０およびストレージ９０を有している。
【００８４】
ただし、図２２に示すコンピュータシステム１Ａは、複数（図中、４）の仮想サーバＶＳ１〜ＶＳ４を構築する一般的なアーキテクチャをもつ。また、ＢＩＯＳプログラムには、ＣＰＵ１０をハイパーバイザ１３として機能させるハイパーバイザプログラムが内蔵されている。ハイパーバイザプログラムには、ＣＰＵ１０を、上述したＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａおよびアドレス割当処理部１２Ｂとして機能させる制御プログラムが含まれている。なお、ハイパーバイザ１３による計算機の仮想化の実現の際には、インテルの各種仮想化支援機能であるＶＴ−ｄ，ＶＴ−ｘ等を用いて処理の高速化が図られる。
【００８５】
また、ストレージ３０には、仮想サーバＶＳ１〜ＶＳ４用のＯＳおよびアプリケーションプログラムを含む仮想ストレージ３１が構築される。
メモリ２０は、ＣＰＵ１０によりＮＶＲＡＭ４０から読み出されたＢＩＯＳプログラムや、仮想サーバＶＳ１〜ＶＳ４により仮想ストレージ３１から読み出されたＯＳおよびアプリケーションプログラムを展開されて保存する。また、メモリ２０は、上述した対応表２１のほか、ハイパーバイザ１３により作成され更新される仮想サーバ構成情報２２や、後述するミューテックス変数２３を保存する。
【００８６】
ＣＰＵ１０は、コンピュータシステム１Ａの起動後、ＮＶＲＡＭ４０から読み出されたハイパーバイザプログラムに含まれる制御プログラムを実行することにより、上述したＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａおよびアドレス割当処理部１２Ｂとして機能する。
ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａは、コンピュータシステム１Ａの起動時にハイパーバイザ１３の初期化処理の中で呼び出され、対応表２１の作成処理を行なう。第２実施形態におけるＰＣＩデバイス／ブリッジ対応表作成部１２Ａによる対応表２１の作成処理については、図２３〜図２７を参照しながら具体的に説明する。
【００８７】
また、アドレス割当処理部１２Ｂは、ハイパーバイザ１３が仮想サーバＶＳ１〜ＶＳ４のうちの一つからＰＣＩデバイス８１に対するＩ／Ｏアクセスを検知（トラップ）すると呼び出され、Ｉ／Ｏアドレス空間の割当処理を行なう。第２実施形態におけるアドレス割当処理部１２Ｂによるアドレス割当処理については、図２３，図２８，図２９を参照しながら具体的に説明する。
【００８８】
なお、アドレス割当処理部１２Ｂは、Ｉ／Ｏアクセスの検知に呼び出されてから同Ｉ／Ｏアクセスの実行を完了するまでの間に他の仮想サーバからＩ／Ｏアクセスをハイパーバイザ１３が検知した場合、先行するアクセスの実行を完了するまで、他のアクセスについての処理を待機させる。アドレス割当処理部１２Ｂによる待機処理は、メモリ２０のミューテックス（MUTual EXclusion(相互排他)）変数２３を用いて行なわれる。アドレス割当処理部１２Ｂは、ハイパーバイザ１３により一の仮想サーバからＩ／Ｏアクセスを検知して呼び出されると、ミューテックス変数２３に“１”を設定することによりロックを取得する。アドレス割当処理部１２Ｂは、当該アクセスの完了に伴い、ミューテックス変数２３を“０”に設定することによりロックを解放する。このように、アドレス割当処理部１２Ｂ（ハイパーバイザ１３）は、ミューテックス変数２３が“１”に設定されている間、後続のアクセスを待機させることで、仮想サーバＶＳ１〜ＶＳ４からデバイス８１に対するＩ／Ｏアクセスに際し、対応表２２を排他的に使用する。上述したアドレス割当処理部１２Ｂによる待機処理については、図２８を参照しながら後述する。
【００８９】
〔２−２〕第２実施形態による処理の流れ
以下では、第２実施形態のコンピュータシステム１Ａの動作について、図２３〜図２９を参照しながら、より詳細に説明する。
まず、図２３に示すシーケンス図（矢印Ａ１１〜Ａ４８）および図２４に示すフローチャート（ステップＳ６０〜Ｓ６９）に従って、第２実施形態のコンピュータシステム１Ａによる処理の流れについて説明する。
【００９０】
コンピュータシステム１Ａが起動されると、ＣＰＵ１０は、ハイパーバイザプログラムを内蔵されたＢＩＯＳプログラムをＮＶＲＡＭ４０から読み出してメモリ２０に展開し、ＢＩＯＳプログラムを実行することにより、ＢＩＯＳ１１を起動する（ステップＳ６０参照）。ＢＩＯＳ１１は、コンピュータシステム１Ａの初期化処理を実行した後、ハイパーバイザ１３を起動する（矢印Ａ１１；ステップＳ６１）。
【００９１】
ハイパーバイザ１３は、起動されると、ＰＣＩデバイス／ブリッジ対応表作成処理部（作成部）１２Ａとしての機能を呼び出し（矢印Ａ１２）、ＰＣＩバススキャンを行ないながら、メモリ２０上に、ＰＣＩデバイス／ブリッジ対応表２１を作成する（矢印Ａ１３〜Ａ３０；ステップＳ６２）。作成部１２Ａによる対応表２１の作成処理については、図２３の矢印Ａ１３〜Ａ３０および図２５〜図２７を参照しながら後述する。
【００９２】
ハイパーバイザ１３は、対応表２１の作成後、仮想サーバＶＳ１〜ＶＳ４の構築や構成変更を行ない、仮想サーバ構成情報２２を作成してメモリ２０に保存する（矢印Ａ３１；ステップＳ６３）。ハイパーバイザ１３は、仮想サーバン構成情報２２に基づき、仮想サーバＶＳ１〜ＶＳ４にデバイスを割り当てた後、仮想サーバＶＳ１〜ＶＳ４を起動する（矢印Ａ３２，Ａ３３；ステップＳ６４）。仮想サーバＶＳ１〜ＶＳ４は、自身に割り当てられたストレージ３０（仮想ストレージ３１）からＯＳを読み出してメモリ２０に展開し、ＯＳを起動し、ＯＳ上でアプリケーションを動作させる。なお、図２３では、２つの仮想サーバＶＳ１，ＶＳ２が図示されている。
【００９３】
仮想サーバＶＳ１〜ＶＳ４の起動後、各仮想サーバが自身に割り当てられたデバイス８１に対するＩ／Ｏアクセス要求を発行すると（ステップＳ６５）、ハイパーバイザ１３は、Ｉ／Ｏアクセス要求を検知してトラップする（矢印Ａ３４，Ａ４０；ステップＳ６６）。ハイパーバイザ１３は、Ｉ／Ｏアクセス要求をトラップすると、仮想サーバ構成情報２２に基づき、仮想サーバＶＳ１〜ＶＳ４から見たデバイス８１のＩ／Ｏアドレスを、ハイパーバイザ１３のＩ／Ｏアドレスに変換する。この後、ハイパーバイザ１３は、アドレス割当処理部（割当部）１２Ｂとしての機能を呼び出してアドレス割当処理を実行し、デバイス８１に対するＩ／Ｏアクセスを実行させる（矢印Ａ３５〜Ａ３８，Ａ４１〜Ａ４７；ステップＳ６７）。そして、ハイパーバイザ１３は、デバイス８１に対するアクセスの処理結果を仮想サーバに返すことで（矢印Ａ３９，Ａ４８）、仮想サーバは、デバイス８１に対するアクセス結果を取得し（ステップＳ６８）、他の処理へ移行する（ステップＳ６９）。割当部１２Ｂによるアドレス割当処理については、図２３の矢印Ａ３５〜Ａ３８およびＡ４１〜Ａ４７と、図２８，図２９とを参照しながら後述する。
【００９４】
〔２−２−１〕対応表の作成処理（ステップＳ６２）
次に、図２３に示す矢印Ａ１３〜Ａ３０および図２５に示すフローチャート（ステップＳ６２１〜Ｓ６２８）に従って、図２６および図２７を参照しながら、作成部１２Ａによる対応表２１の作成処理について説明する。なお、図２６および図２７は、図２５に示す対応表２１の作成処理においてブリッジアドレスが枯渇した場合の処理を説明する図である。なお、以下では、図３および図４と同様の構成つまりブリッジ７１が一階層のみである構成に対し、対応表２１の作成処理およびアドレス割当処理を行なう場合について説明する。
【００９５】
作成部１２Ａは、空の対応表２１を作成してから（矢印Ａ１３；ステップＳ６２１）、全てのＰＣＩブリッジ７１（＃１〜＃１６）に対し、以下の処理（矢印Ａ１４〜Ａ３０；ステップＳ６２２〜Ｓ６２８）を実行する。つまり、作成部１２Ａは、ＰＣＩバススキャンの実行（矢印Ａ１４，Ａ１５，Ａ２０，Ａ２５）に伴い、各ブリッジ７１および各デバイス８１に対しＩ／Ｏアドレスを割り当てながら、各デバイス８１にアクセスするためのブリッジ７１と、各デバイス８１および各ブリッジ７１に割り当てられたアドレスと、アドレス割当の有効／無効とを対応表２１に登録する。
【００９６】
この過程で、作成部１２Ａは、対応表２１を参照し、ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇しているか否かを判定する（重複判定；矢印Ａ１６，Ａ２１，Ａ２６；ステップＳ６２３）。ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇していない場合（矢印Ａ１６，Ａ２１；ステップＳ６２３のＮＯルート）、作成部１２Ａは、各ブリッジ７１および各デバイス８１に対し未割当のアドレスの割当を行なう（矢印Ａ１８，Ａ１７，Ａ２３，Ａ２２；ステップＳ６２５，Ｓ６２６）。そして、作成部１２Ａは、割当結果を対応表２１に登録更新する（矢印Ａ１９，Ａ２４；ステップＳ６２７）。
【００９７】
作成部１２Ａは、同様の処理をブリッジ＃１〜＃１５に対し繰り返し実行することにより、図２６に示すように、ブリッジ＃１〜＃１５に対し、Ｉ／Ｏアドレス空間が割り当てられる。この時点で、Ｉ／Ｏアドレス空間が枯渇し、作成部１２Ａは、１６番目のブリッジ＃１６に対して新たなＩ／Ｏアドレス空間を割り当てることができない状態になっている。
【００９８】
図２６に示すように、ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇しブリッジ７１に対し新たにＩ／Ｏアドレスを割り当てることができなくなった場合（矢印Ａ２６；ステップＳ６２３のＹＥＳルート）、作成部１２Ａは以下の処理を行なう。つまり、作成部１２Ａは、図２７に示すように、既に対応表２１に登録されているブリッジ＃１のアドレス割当を解除し（矢印Ａ２７；ステップＳ６２４）、そのアドレス1000〜1FFFを新たなブリッジ＃１６に対して割り当てる（矢印Ａ２９；ステップＳ６２５）。このとき、ブリッジ＃１のアドレス割当の解除は、上述したように、ブリッジ＃１のレジスタ７２ａ，７２ｂに０を設定することによって行なわれる。また、作成部１２Ａは、新しく割り当てられたブリッジ＃１６のバスに接続されたデバイス＃３１，＃３２に対してそれぞれＩ／Ｏアドレス1020〜102F，1030〜103Fを割り当てる（矢印Ａ２８；ステップＳ６２６）。このとき、作成部１２Ａは、アドレス割当を解除したブリッジ＃１に接続されているデバイス＃１，＃２のＩ／Ｏアドレス1000〜100F，1010〜101Fと重複しないように、デバイス＃３１，＃３２のＩ／Ｏアドレス1020〜102F，1030〜103Fを割り当てる。この後、作成部１２Ａは、ステップＳ６２４〜Ｓ６２６によって行なわれた割当解除や再割当の結果に従って、対応表２１の更新を行なう（矢印Ａ３０；ステップＳ６２７）。
【００９９】
なお、図２３では、デバイス８１にアドレスを割り当ててからブリッジ７１にアドレスを割り当てている。一方、図２５では、ブリッジ７１にアドレスを割り当ててからデバイス８１にアドレスを割り当てている。ブリッジ７１に対するアドレス割当とデバイス８１に対するアドレス割当との実行順序は限定されない。
【０１００】
〔２−２−２〕アドレス割当処理（ステップＳ６７）
次に、図２３に示す矢印Ａ３５〜Ａ３８およびＡ４１〜Ａ４７と図２８に示すフローチャート（ステップＳ６７１〜Ｓ６７８）に従って、図２９に参照しながら、割当部１２Ｂによるアドレス割当処理について説明する。なお、図２９は、図２８に示すアドレス割当処理において、アクセス対象のデバイス８１がアドレス未割当のブリッジ７１に属している場合の処理を説明する図である。
【０１０１】
割当部１２Ｂは、ハイパーバイザ１３によって呼び出されて起動されると（矢印Ａ３５，Ａ４１）、ミューテックスを取得してロックをかけた後（ステップＳ６７１）、仮想サーバＶＳ１からトラップしたＩ／Ｏアクセス要求の転送先デバイス８１のＩ／Ｏアドレスをキーにして対応表２１を検索参照する。これにより、割当部１２Ｂは、対応表２１における当該転送先デバイス８１についてのエントリ（行，レコード）を取得し、現在のＩ／Ｏアドレスの設定状態を確認する（矢印Ａ３６，Ａ４２；ステップＳ６７２）。
【０１０２】
ここで、第２実施形態では、仮想サーバＶＳ１〜ＶＳ４のうちの一つからデバイス８１へのＩ／Ｏアクセス要求が処理されている間に、別の仮想サーバから別のデバイス８１へのＩ／Ｏアクセス要求が発生する可能性がある。この場合、対応表２１の参照・更新処理が同時に行なわれると、対応表２１の整合が取れなくなる。このため、割当部１２Ｂによるアドレス割当処理に際しては、対応表２１の排他制御が必要になる。
【０１０３】
そこで、第２実施形態の割当部１２Ｂは、ミューテックス変数と呼ばれる“１”または“０”の値を採る共有記憶域（メモリ２０上のミューテックス変数２３参照）を用いて、対応表２１の排他制御を行なう。割当部１２Ｂは、各仮想サーバからデバイス８１へのＩ／Ｏアクセス要求をトラップすると、以下のようにして、ミューテックス変数２３にアクセスして排他処理を行なう。
【０１０４】
つまり、最初に、割当部１２Ｂは、メモリ２０上のミューテック変数２３の値を確認する。ミューテックス変数２３の値が“１”の場合、対応表２１は、今回のアクセスよりも先行する、別の仮想サーバからのアクセスに応じた処理に用いられている。このため、割当部１２Ｂは、ミューテックス変数２３の値が“０”になるまで、今回のアクセスを待機させる。
【０１０５】
一方、ミューテックス変数２３の値が“０”の場合、どの仮想サーバも対応表２１を使用していないことを示している。このとき、割当部１２Ｂは、ミューテックス変数２３の値を“０”から“１”に設定して、対応表２１を使用中であることを示す状態に切り換えることにより、ロックを取得する（ロックを掛ける；ステップＳ６７１）。この状態で、他の仮想サーバは、前述の通り、ミューテックス変数２３の値が“０”になるまで処理を待っている。このため、ミューテックスを取得した仮想サーバ、つまりミューテックス変数２１の値を“１”に切り換えた仮想サーバは、対応表２１を排他的に使用することができる。
【０１０６】
さて、割当部１２Ｂは、ステップＳ６７２で取得されたエントリを参照し、アクセス対象のデバイス８１までのブリッジ７１にＩ／Ｏアドレスが割り当てられているか否か、つまり、前記エントリのアドレス割当欄に「あり」が設定されているか否かを判定する（ステップＳ６７３）。Ｉ／Ｏアドレスが割り当てられている場合（ステップＳ６７３のＹＥＳルート）、ブリッジ７１に対し適切にＩ／Ｏアドレス空間が割り当てられている。このため、ブリッジ７１に対する特別な処理は不要であり、通常のＩ／Ｏアクセスを行なうことで、ＰＣＩデバイス８１に対してＩ／Ｏアクセスが実行される（矢印Ａ３７；ステップＳ６７７）。これにより、Ｉ／Ｏアクセス要求を発行した仮想サーバＶＳ１は、所望の結果を取得する（矢印Ａ３８，Ａ３９）。
【０１０７】
ＰＣＩデバイス８１に対するＩ／Ｏアクセスを完了すると、割当部１２Ｂはロックを解放する。つまり、割当部１２Ｂは、ミューテックス変数２３の値を“１”から“０”に戻してロックを解除する（ステップＳ６７８）。これにより、今まで待機していた別の仮想サーバがミューテックスを取得し、対応表２１を使用することが可能になる。
【０１０８】
これに対し、ステップＳ６７３でＩ／Ｏアドレスが割り当てられていないと判定した場合（ステップＳ６７３のＮＯルート）、割当部１２Ｂは、対応表２１を参照して、必要なＩ／Ｏアドレスを設定されているブリッジ７１（例えばブリッジ＃１６）を解除対象ブリッジとして取得する（矢印Ａ４２；ステップＳ６７４）。この後、割当部１２Ｂは、解除対象ブリッジ＃１６のＩ／Ｏアドレス1000〜1FFFを解除する（矢印Ａ４３；ステップＳ６７５；図２９の矢印(1)参照）。この後、割当部１２Ｂは、アクセス対象のデバイス８１が接続されているブリッジ７１（例えば＃１）にＩ／Ｏアドレス1000〜1FFFを割り当ててから（矢印Ａ４４；ステップＳ６７６；図２９の矢印(2)参照）、対応表２１を更新する（矢印Ａ４５；ステップＳ６７６）。
【０１０９】
ブリッジ＃１にＩ／Ｏアドレスが設定されると、ハイパーバイザ１３（割当部１２Ｂ）は、デバイス＃１または＃２にアクセスする（矢印Ａ４６；ステップＳ６７７）。これにより、Ｉ／Ｏアクセス要求を発行した仮想サーバＶＳ２は、所望の結果を取得する（矢印Ａ４７，Ａ４８）。この後、割当部１２Ｂは、上述したように、ミューテックス変数２３の値を“１”から“０”に戻してロックを解除する（ステップＳ６７８）。これにより、今まで待機していた別の仮想サーバがミューテックスを取得し、対応表２１を使用することが可能になる。
【０１１０】
〔２−３〕第２実施形態の効果
上述した第２実施形態のコンピュータシステム１Ａによれば、第１実施形態と同様、割当部１２Ｂが、作成部１２ＡによってＰＣＩバスの初期化時に作成された対応表２１を参照、更新しながら、ブリッジ７１に対するＩ／Ｏアドレス空間の割当解除や再割当を行なうことで、デバイス８１に対するＩ／Ｏアクセス処理が実行される。これにより、コンピュータシステム１Ａにおいて、規定数を超える数（例えば１６個以上）のブリッジ７１が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ７１を同時に使用することが可能になる。
【０１１１】
また、第２実施形態のコンピュータシステム１Ａでは、複数の仮想サーバから、各仮想サーバに割り当てられたデバイス８１へのＩ／Ｏアクセス要求が発行された場合、後からＩ／Ｏアクセス要求を発行した仮想サーバによる処理は、ミューテックスによるロックが解放されるまで待機する。つまり、一の仮想サーバからデバイス８１へのＩ／Ｏアクセス要求が処理されている間に、別の仮想サーバから別のデバイス８１へのＩ／Ｏアクセス要求が発生したとしても、先行するＩ／Ｏアクセス要求に係る処理が完了するまで、後続のＩ／Ｏアクセス要求に係る処理は待機することになる。したがって、後続のＩ／Ｏアクセス要求によって対応表２１の整合が取れなくなるのを確実に抑止することができる。例えば図２３では、仮想サーバＶＳ１からのＩ／Ｏアクセス要求に係る処理（矢印Ａ３４〜Ａ３９）が完了してから、仮想サーバＶＳ２からのＩ／Ｏアクセス要求に係る処理（矢印Ａ４０〜Ａ４８）が実行される。
【０１１２】
〔３〕第３実施形態の情報処理装置
〔３−１〕第３実施形態の構成
図３０は、第３実施形態としての情報処理装置（コンピュータシステム）１Ｂの構成を示すブロック図である。なお、既述の符号と同一の符号は、同一もしくはほぼ同一の部分を示しているので、その説明は省略する。
図３０に示すコンピュータシステム１Ｂも、第１実施形態のコンピュータシステム１と同様、ＣＰＵ１０，メモリ２０，ストレージ３０，ＮＶＲＡＭ４０，チップセット５０，ＰＣＩバス６０，スイッチ７０，スロット８０およびストレージ９０を有している。
【０１１３】
ただし、図３０に示すコンピュータシステム１Ｂにおいて、上述したＰＣＩデバイス／ブリッジ対応表作成処理部（作成部）１２Ａによる対応表２１の作成処理は、ＯＳの起動処理で行なわれる。また、上述したアドレス割当処理部（割当部）１２Ｂとしての機能は、ＣＰＵ１０におけるＯＳの、複数のデバイス８１のうちの一デバイスに対するアクセスの際に用いられるライブラリ１４の中に含まれている。
【０１１４】
〔３−２〕第３実施形態による処理の流れ
次に、図３１に示すシーケンス図（矢印Ａ５０〜Ａ８９）に従って、第３実施形態のコンピュータシステム１Ｂによる処理の流れについて説明する。
コンピュータシステム１Ｂが起動されると、ＣＰＵ１０は、ＢＩＯＳプログラムをＮＶＲＡＭ４０から読み出してメモリ２０に展開し、ＢＩＯＳプログラムを実行することにより、ＢＩＯＳ１１を起動する。ＢＩＯＳ１１は、コンピュータシステム１Ｂの初期化処理を実行した後、ストレージ３０からＯＳを読み出してメモリ２０に展開し、ＯＳを起動する（矢印Ａ５０）。
【０１１５】
ＯＳは、起動時に、ライブラリ１４経由で、ＰＣＩデバイス／ブリッジ対応表作成処理部（作成部）１２Ａとしての機能を呼び出す（矢印Ａ５１，Ａ５２）。作成部１２Ａは、ＢＩＯＳ１１とは別に、再度、ＰＣＩバススキャンを行ないながら、メモリ２０上に、ＰＣＩデバイス／ブリッジ対応表２１を作成する（矢印Ａ５３〜Ａ７０）。作成部１２Ａによる対応表２１の作成処理（矢印Ａ５３〜Ａ７０）は、第２実施形態で説明した作成処理（図２３の矢印Ａ１３〜Ａ３０）と同様である。
【０１１６】
作成部１２Ａによる対応表２１の作成処理では、各ブリッジ７１や各デバイス８１に対してＩ／Ｏアドレスを割り当てながら、対応表２１に、上述した情報(a1)〜(a4)を登録する。この過程で、作成部１２Ａは、対応表２１を参照し、ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇しているか否かを判定する（重複判定；矢印Ａ５６，Ａ６１，Ａ６６）。ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇していない場合（矢印Ａ５６，Ａ６１）、作成部１２Ａは、各ブリッジ７１および各デバイス８１に対し未割当のアドレスの割当を行なう（矢印Ａ５８，Ａ５７，Ａ６３，Ａ６２）。そして、作成部１２Ａは、割当結果を対応表２１に登録更新する（矢印Ａ５９，Ａ６４）。
【０１１７】
作成部１２Ａは、同様の処理をブリッジ＃１〜＃１５に対し繰り返し実行することにより、ブリッジ＃１〜＃１５に対し、Ｉ／Ｏアドレス空間が割り当てられる。この時点で、Ｉ／Ｏアドレス空間が枯渇し、作成部１２Ａは、１６番目のブリッジ＃１６に対して新たなＩ／Ｏアドレス空間を割り当てることができない状態になっている（図２６参照）。
【０１１８】
ブリッジ７１に割当可能な未割当のＩ／Ｏアドレスが枯渇しブリッジ７１に対し新たにＩ／Ｏアドレスを割り当てることができなくなった場合（矢印Ａ６６）、作成部１２Ａは以下の処理を行なう。つまり、作成部１２Ａは、既に対応表２１に登録されているブリッジ＃１のアドレス割当を解除し（矢印Ａ６７）、そのアドレス1000〜1FFFを新たなブリッジ＃１６に対して割り当てる（矢印Ａ６９）。また、作成部１２Ａは、新しく割り当てられたブリッジ＃１６のバスに接続されたデバイス＃３１，＃３２に対してそれぞれＩ／Ｏアドレス1020〜102F，1030〜103Fを割り当てる（矢印Ａ６８）。このとき、作成部１２Ａは、アドレス割当を解除したブリッジ＃１に接続されているデバイス＃１，＃２のＩ／Ｏアドレス1000〜100F，1010〜101Fと重複しないように、デバイス＃３１，＃３２のＩ／Ｏアドレス1020〜102F，1030〜103Fを割り当てる。この後、作成部１２Ａは、上述した割当解除や再割当の結果に従って、対応表２１の更新を行なう（矢印Ａ７０）。
【０１１９】
さて、ＯＳは、対応表２１の作成完了通知を作成部１２Ａから受けると（矢印Ａ７１，Ａ７２）、各種アプリケーション（図３１ではアプリケーション＃１，＃２）を起動する（矢印Ａ７３，Ａ７４）。各アプリケーションは、Ｉ／Ｏアクセス用のライブラリ１４を用いてＩ／Ｏアクセス要求を行なう。アプリケーション＃１または＃２がライブラリ１４を呼び出すと（矢印Ａ７５，Ａ８１）、アドレス割当処理部（割当部）１２Ｂが呼び出される（矢印Ａ７６，Ａ８２）。
【０１２０】
割当部１２Ｂは、ライブラリ１４によって呼び出されて起動されると、ミューテックスを取得してロックをかけた後、アプリケーションからのＩ／Ｏアクセス要求の転送先デバイス８１のＩ／Ｏアドレスをキーにして対応表２１を検索参照する。これにより、割当部１２Ｂは、対応表２１における当該転送先デバイス８１についてのエントリを取得し、現在のＩ／Ｏアドレスの設定状態を確認する（矢印Ａ７７，Ａ８３）。
【０１２１】
割当部１２Ｂは、取得したエントリを参照し、アクセス対象のデバイス８１までのブリッジ７１にＩ／Ｏアドレスが割り当てられているか否か、つまり、前記エントリのアドレス割当欄に「あり」が設定されているか否かを判定する。Ｉ／Ｏアドレスが割り当てられている場合、ブリッジ７１に対し適切にＩ／Ｏアドレス空間が割り当てられている。このため、ブリッジ７１に対する特別な処理は不要であり、通常のＩ／Ｏアクセスを行なうことで、ＰＣＩデバイス８１に対してＩ／Ｏアクセスが実行される（矢印Ａ７８）。これにより、Ｉ／Ｏアクセス要求を発行したアプリケーション＃１は、ライブラリ１４経由で、所望の結果を取得する（矢印Ａ７９，Ａ８０）。
【０１２２】
ＰＣＩデバイス８１に対するＩ／Ｏアクセスを完了すると、割当部１２Ｂはロックを解放する。これにより、今まで待機していた別のアプリケーションがミューテックスを取得し、対応表２１を使用することが可能になる。
これに対し、Ｉ／Ｏアドレスが割り当てられていない場合、割当部１２Ｂは、対応表２１を参照して、必要なＩ／Ｏアドレスを設定されているブリッジ７１（例えばブリッジ＃１６）を解除対象ブリッジとして取得する（矢印Ａ８３）。この後、割当部１２Ｂは、解除対象ブリッジ＃１６のＩ／Ｏアドレス1000〜1FFFを解除する（矢印Ａ８４）。この後、割当部１２Ｂは、アクセス対象のデバイス８１が接続されているブリッジ７１（例えば＃１）にＩ／Ｏアドレス1000〜1FFFを割り当ててから（矢印Ａ８５）、対応表２１を更新する（矢印Ａ８６）。
【０１２３】
ブリッジ＃１にＩ／Ｏアドレスが設定されると、割当部１２Ｂ（ライブラリ１４）は、デバイス＃１または＃２にアクセスする（矢印Ａ８７）。これにより、Ｉ／Ｏアクセス要求を発行したアプリケーション＃２は、ライブラリ１４経由で、所望の結果を取得する（矢印Ａ８８，Ａ８９）。この後、割当部１２Ｂは、ロックを解除する。これにより、今まで待機していた別のアプリケーションがミューテックスを取得し、対応表２１を使用することが可能になる。
【０１２４】
〔３−３〕第３実施形態の効果
上述した第３実施形態のコンピュータシステム１Ｂによれば、第１実施形態や第２実施形態と同様、割当部１２Ｂが、作成部１２ＡによってＰＣＩバスの初期化時に作成された対応表２１を参照、更新しながら、ブリッジ７１に対するＩ／Ｏアドレス空間の割当解除や再割当を行なうことで、デバイス８１に対するＩ／Ｏアクセス処理が実行される。これにより、コンピュータシステム１Ａにおいて、規定数を超える数（例えば１６個以上）のブリッジ７１が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ７１を同時に使用することが可能になる。
【０１２５】
また、第３実施形態のコンピュータシステム１Ｂでは、第２実施形態と同様、複数のアプリケーションからデバイス８１へのＩ／Ｏアクセス要求が発行された場合、後からＩ／Ｏアクセス要求を発行したアプリケーションによる処理は、ミューテックスによるロックが解放されるまで待機する。つまり、一のアプリケーションからデバイス８１へのＩ／Ｏアクセス要求が処理されている間に、別のアプリケーションから別のデバイス８１へのＩ／Ｏアクセス要求が発生したとしても、先行するＩ／Ｏアクセス要求に係る処理が完了するまで、後続のＩ／Ｏアクセス要求に係る処理は待機することになる。したがって、後続のＩ／Ｏアクセス要求によって対応表２１の整合が取れなくなるのを確実に抑止することができる。例えば図３１では、アプリケーション＃１からのＩ／Ｏアクセス要求に係る処理（矢印Ａ７５〜Ａ８０）が完了してから、アプリケーション＃２からのＩ／Ｏアクセス要求に係る処理（矢印Ａ８１〜Ａ８９）が実行される。
【０１２６】
〔４〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
【０１２７】
なお、上述した実施形態では、ブリッジには４ＫＢ単位でアドレスが割り当てられ、１５個のブリッジ＃１〜＃１５が割り当てられた時点でＩ／Ｏ空間におけるブリッジアドレスが枯渇する場合について説明したが、本発明は、これに限定されるものではない。また、具体例では、１６個のブリッジと３２個のデバイスとを備える場合について説明したが、本発明は、これに限定されるものではない。
【０１２８】
上述したＰＣＩデバイス／ブリッジ対応表作成処理部（作成部）１２Ａおよびアドレス割当処理部（割当部）１２Ｂを含む、第１〜第３実施形態の情報処理装置１，１Ａ，１Ｂの各種機能の全部もしくは一部は、コンピュータ（ＣＰＵ，情報処理装置，各種端末を含む）が所定のプログラムを実行することによって実現される。
【０１２９】
そのプログラムは、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷなど），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋Ｒ，ＤＶＤ＋ＲＷなど），ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供される。この場合、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。
【０１３０】
ここで、コンピュータとは、ハードウエアとＯＳ（オペレーティングシステム）とを含む概念であり、ＯＳの制御の下で動作するハードウエアを意味している。また、ＯＳが不要でアプリケーションプログラム単独でハードウェアを動作させるような場合には、そのハードウェア自体がコンピュータに相当する。ハードウエアは、少なくとも、ＣＰＵ等のマイクロプロセッサと、記録媒体に記録されたコンピュータプログラムを読み取る手段とをそなえている。上記プログラムは、上述のようなコンピュータに、第１〜第３実施形態の情報処理装置１，１Ａ，１Ｂの各種機能を実現させるプログラムコードを含んでいる。また、その機能の一部は、アプリケーションプログラムではなくＯＳによって実現されてもよい。
【符号の説明】
【０１３１】
１，１Ａ，１Ｂ    情報処理装置（コンピュータシステム）
１０    ＣＰＵ（プロセッサ）
１１    ＢＩＯＳ
１２Ａ    ＰＣＩデバイス／ブリッジ対応表作成処理部（作成部）
１２Ｂ    アドレス割当処理部（割当部）
１３    ハイパーバイザ
１４    ライブラリ
２０    メモリ
２１    ＰＣＩデバイス／ブリッジ対応表（管理用テーブル）
２２    仮想サーバ構成情報
２３    ミューテックス変数
３０    ストレージ
３１    仮想ストレージ
４０    ＮＶＲＡＭ
５０    チップセット
５１    ホストブリッジ
５２    ＳＡＴＡコントローラ
６０    ＰＣＩバス
７０    スイッチ
７１    ＰＣＩブリッジ（ブリッジ）
７２    コンフィグレーションレジスタ
７２ａ    Ｉ／Ｏベースアドレスレジスタ（ベースアドレスレジスタ）
７２ｂ    Ｉ／Ｏリミットアドレスレジスタ（リミットアドレスレジスタ）
８０    スロット
８１    ＰＣＩデバイス（デバイス）
９０    ストレージ
ＶＳ１〜ＶＳ４    仮想サーバ
【図１】
2014020716.tif 000003
【図２】
2014020716.tif 000004
【図３】
2014020716.tif 000005
【図４】
2014020716.tif 000006
【図５】
2014020716.tif 000007
【図６】
2014020716.tif 000008
【図７】
2014020716.tif 000009
【図８】
2014020716.tif 000010
【図９】
2014020716.tif 000011
【図１０】
2014020716.tif 000012
【図１１】
2014020716.tif 000013
【図１２】
2014020716.tif 000014
【図１３】
2014020716.tif 000015
【図１４】
2014020716.tif 000016
【図１５】
2014020716.tif 000017
【図１６】
2014020716.tif 000018
【図１７】
2014020716.tif 000019
【図１８】
2014020716.tif 000020
【図１９】
2014020716.tif 000021
【図２０】
2014020716.tif 000022
【図２１】
2014020716.tif 000023
【図２２】
2014020716.tif 000024
【図２３】
2014020716.tif 000025
【図２４】
2014020716.tif 000026
【図２５】
2014020716.tif 000027
【図２６】
2014020716.tif 000028
【図２７】
2014020716.tif 000029
【図２８】
2014020716.tif 000030
【図２９】
2014020716.tif 000031
【図３０】
2014020716.tif 000032
【図３１】
2014020716.tif 000033
【図３２】
2014020716.tif 000034
【図３３】
2014020716.tif 000035
【手続補正書】
【提出日】平成27年2月12日(2015.2.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサと、
複数のデバイスと、
前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行なう作成部と、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記管理用テーブルに対して行なう割当部と、を有することを特徴とする情報処理装置。
【請求項２】
前記作成部は、
前記複数のデバイスのそれぞれに異なるデバイスアドレスを割り当てるとともに前記複数のブリッジのそれぞれに前記ブリッジアドレスを割り当てながら、前記複数のデバイスのそれぞれに割り当てられた前記デバイスアドレスと、前記複数のデバイスのそれぞれが属するブリッジを特定するブリッジ識別情報と、当該ブリッジ識別情報によって特定される前記ブリッジに割り当てられた前記ブリッジアドレスと、当該ブリッジアドレスが当該ブリッジ識別情報によって特定される前記ブリッジにおいて有効であるか否かを示す割当情報とを対応付けて管理する前記管理用テーブルを作成し、
前記一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記他ブリッジに対する既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、
前記管理用テーブルにおいて、前記他ブリッジの前記割当情報に無効を設定するとともに、前記一ブリッジの前記割当情報に有効を設定することを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記割当部は、
前記一デバイスの前記デバイスアドレスを含む第１レコードを、前記管理用テーブルから検索し、
前記第１レコードにおける前記割当情報が無効である場合、前記第１レコードにおける前記ブリッジアドレスと同一のブリッジアドレスを含み且つ前記割当情報を有効に設定された第２レコードを、前記管理用テーブルから検索し、
前記第２レコードにおける、前記第１レコードの第１ブリッジ識別情報とは異なる第２ブリッジ識別情報に対応する第２ブリッジに対する前記同一のブリッジアドレスの割当を解除するとともに、前記第２レコードにおける前記割当情報に無効を設定し、
前記第１レコードにおける前記第１ブリッジ識別情報に対応する第１ブリッジに対し前記同一のブリッジアドレスを割り当てるとともに、前記第１レコードにおける前記割当情報に有効を設定することを特徴とする、請求項２記載の情報処理装置。
【請求項４】
前記作成部は、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項１〜請求項３のいずれか一項記載の情報処理装置。
【請求項５】
前記割当部は、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項１〜請求項６のいずれか一項記載の情報処理装置。
【請求項６】
前記プロセッサは、複数の仮想サーバを構築し、
前記割当部は、
前記複数の仮想サーバのうちの一の仮想サーバから前記一アクセスを検知してから前記一アクセスの実行を完了するまでの間に他の仮想サーバから他アクセスを検知した場合、前記一アクセスの実行を完了するまで、前記他アクセスについての処理を待機させることを特徴とする、請求項１〜請求項５のいずれか一項記載の情報処理装置。
【請求項７】
前記割当部としての機能は、
前記プロセッサにおけるＯＳ（Operating System）の、前記複数のデバイスのうちの一デバイスに対するアクセスの際に用いられるライブラリに含まれていることを特徴とする、請求項１〜請求項５のいずれか一項記載の情報処理装置。
【請求項８】
プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置を、前記プロセッサによって制御する方法であって、
前記プロセッサは、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なうことを特徴とする情報処理装置の制御方法。
【請求項９】
プロセッサと、複数のデバイスと、前記プロセッサと前記複数のデバイスとを接続する複数のブリッジと、を備えた、情報処理装置の制御を、前記プロセッサに実行させるプログラムであって、
前記複数のブリッジのそれぞれにブリッジアドレスを割り当てながら前記ブリッジアドレスの管理用テーブルを作成し、
前記複数のブリッジのうちの一ブリッジに割り当てる未割当ブリッジアドレスが枯渇した場合、前記複数のブリッジのうちの他ブリッジに割り当てた既割当ブリッジアドレスの割当を解除して前記一ブリッジに割り当て、当該既割当ブリッジアドレスの割当解除および再割当に応じた更新および登録を前記管理用テーブルに対して行ない、
前記プロセッサから前記複数のデバイスのうちの一デバイスに対する一アクセスを検知した場合、前記管理用テーブルを参照し、前記一アクセスを実行可能にするように前記複数のブリッジに対する前記ブリッジアドレスの割当解除および再割当を行なうとともに、当該ブリッジアドレスの割当解除および再割当に応じた更新を前記テーブルに対して行なう、
処理を、前記プロセッサに実行させることを特徴とする制御プログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、情報処理装置、制御方法、及び制御プログラムに関する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００２８
【補正方法】変更
【補正の内容】
【００２８】
ここで、本実施形態においても、ＰＣＩ仕様により、ブリッジには４ＫＢ単位でアドレスが割り当てられる。また、Ｉ／Ｏ空間は例えば６４ＫＢだけ用意され、先頭の４ＫＢはシステムに予約されている。したがって、１５個（規定数）のブリッジ＃１〜＃１５が割り当てられた時点でＩ／Ｏ空間におけるブリッジアドレスが枯渇する。本実施形態では、以下に詳述するごとく、割当部１２Ｂが、作成部１２Ａによって作成された対応表２１を使用してＩ／Ｏアクセス処理（アドレス割当処理）を行なう。これにより、規定数を超える数（１６個以上）のブリッジ７１が備えられてブリッジアドレスが枯渇しても、規定数を超える数のブリッジ７１を同時に使用することが可能になる。なお、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａによる対応表２１の作成処理については、図３〜図１４（Ｂ）を参照しながら具体的に説明する。また、アドレス割当処理部１２ＢによるＩ／Ｏアクセス処理（アドレス割当処理）については、図１５〜図２１（Ｂ）を参照しながら具体的に説明する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
〔１−２〕対応表の構成
図３および図４を参照しながら、ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａによって作成される対応表（管理用テーブル）２１の構成について説明する。なお、図３は、図１に示す情報処理装置１においてＩ／Ｏアドレス割当対象（ＰＣＩデバイス８１およびＰＣＩブリッジ７１）を含む具体的な構成の一例を示すブロック図である。また、図４は、図３に示す構成について作成される対応表２１の一例を示す図である。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００４１
【補正方法】変更
【補正の内容】
【００４１】
ブリッジ７１やデバイス８１に割り当てるＩ／Ｏ空間が不足した場合、作成部１２Ａは、Ｉ／Ｏ空間の割当アドレスを初期値（0x1000）に戻して処理を継続する。その際、0x1000番地は、他のデバイス８１に既に割り当て済みなので、作成部１２Ａは、0x1000番地の次に割り当て可能なＩ／Ｏアドレスを使用する。また、作成部１２Ａは、対応表２１の「ブリッジアドレス」欄と「アドレス割当」欄を参照して、当該Ｉ／Ｏアドレスを割り当てられているブリッジ７１を検索する。このブリッジ７１に対するＩ／Ｏアドレス空間の割当を初期値（未割当状態）に戻し、対応表２１の「アドレス割当」欄に「なし」を設定する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００７２
【補正方法】変更
【補正の内容】
【００７２】
(p1)割当Ｉ／Ｏアドレス空間の取得
割当部１２Ｂは、対応表２１を参照し、アクセス対象のＰＣＩデバイス８１が接続されているブリッジ７１のＩ／Ｏアドレス空間（ここでは1000〜1FFF）を取得する。
(p2)解除対象ブリッジの取得
割当部１２Ｂは、処理(p1)で得られた割当Ｉ／Ｏアドレス空間をキーに対応表２１を検索し、割当Ｉ／Ｏアドレス空間が現在割り当てられているブリッジ７１（ここではブリッジ＃１６）を、解除対象ブリッジとして特定する。つまり、割当部１２Ｂは、上記第１レコード（図１７参照）におけるブリッジアドレスと同一のブリッジアドレスを含み且つアドレス割当欄に「あり（有効）」を設定された第２レコード（図１９参照）を、対応表２１から検索する。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
(p4)設定対象ブリッジのＩ／Ｏアドレス割当
割当部１２Ｂは、アクセス対象のＰＣＩデバイス８１が接続されているブリッジ７１にＩ／Ｏアドレス空間を割り当てる。つまり、割当部１２Ｂは、前記第１レコードにおける第１ブリッジ識別情報に対応する第１ブリッジ（＃１）に対し同一のブリッジアドレス（1000〜1FFF）を割り当てる（図２１（Ａ）参照）。また、割当部１２Ｂは、前記第１レコードにおけるアドレス割当欄に「あり（有効）」を設定する（図２１（Ｂ）参照）。
(p5)ＰＣＩデバイスへのＩ／Ｏアクセス
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００８６
【補正方法】変更
【補正の内容】
【００８６】
ＣＰＵ１０は、コンピュータシステム１Ａの起動後、ＮＶＲＡＭ４０から読み出されたハイパーバイザプログラムに含まれる制御プログラムを実行することにより、上述したＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａおよびアドレス割当処理部１２Ｂとして機能する。
ＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａは、コンピュータシステム１Ａの起動時にハイパーバイザ１３の初期化処理の中で呼び出され、対応表２１の作成処理を行なう。第２実施形態におけるＰＣＩデバイス／ブリッジ対応表作成処理部１２Ａによる対応表２１の作成処理については、図２３〜図２７を参照しながら具体的に説明する。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００８８
【補正方法】変更
【補正の内容】
【００８８】
なお、アドレス割当処理部１２Ｂは、Ｉ／Ｏアクセスの検知に呼び出されてから同Ｉ／Ｏアクセスの実行を完了するまでの間に他の仮想サーバからＩ／Ｏアクセスをハイパーバイザ１３が検知した場合、先行するアクセスの実行を完了するまで、他のアクセスについての処理を待機させる。アドレス割当処理部１２Ｂによる待機処理は、メモリ２０のミューテックス（MUTual EXclusion(相互排他)）変数２３を用いて行なわれる。アドレス割当処理部１２Ｂは、ハイパーバイザ１３により一の仮想サーバからＩ／Ｏアクセスを検知して呼び出されると、ミューテックス変数２３に“１”を設定することによりロックを取得する。アドレス割当処理部１２Ｂは、当該アクセスの完了に伴い、ミューテックス変数２３を“０”に設定することによりロックを解放する。このように、アドレス割当処理部１２Ｂ（ハイパーバイザ１３）は、ミューテックス変数２３が“１”に設定されている間、後続のアクセスを待機させることで、仮想サーバＶＳ１〜ＶＳ４からデバイス８１に対するＩ／Ｏアクセスに際し、対応表２１を排他的に使用する。上述したアドレス割当処理部１２Ｂによる待機処理については、図２８を参照しながら後述する。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
ハイパーバイザ１３は、対応表２１の作成後、仮想サーバＶＳ１〜ＶＳ４の構築や構成変更を行ない、仮想サーバ構成情報２２を作成してメモリ２０に保存する（矢印Ａ３１；ステップＳ６３）。ハイパーバイザ１３は、仮想サーバ構成情報２２に基づき、仮想サーバＶＳ１〜ＶＳ４にデバイスを割り当てた後、仮想サーバＶＳ１〜ＶＳ４を起動する（矢印Ａ３２，Ａ３３；ステップＳ６４）。仮想サーバＶＳ１〜ＶＳ４は、自身に割り当てられたストレージ３０（仮想ストレージ３１）からＯＳを読み出してメモリ２０に展開し、ＯＳを起動し、ＯＳ上でアプリケーションを動作させる。なお、図２３では、２つの仮想サーバＶＳ１，ＶＳ２が図示されている。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０１０５
【補正方法】変更
【補正の内容】
【０１０５】
一方、ミューテックス変数２３の値が“０”の場合、どの仮想サーバも対応表２１を使用していないことを示している。このとき、割当部１２Ｂは、ミューテックス変数２３の値を“０”から“１”に設定して、対応表２１を使用中であることを示す状態に切り換えることにより、ロックを取得する（ロックを掛ける；ステップＳ６７１）。この状態で、他の仮想サーバは、前述の通り、ミューテックス変数２３の値が“０”になるまで処理を待っている。このため、ミューテックスを取得した仮想サーバ、つまりミューテックス変数２３の値を“１”に切り換えた仮想サーバは、対応表２１を排他的に使用することができる。
【手続補正１３】
【補正対象書類名】図面
【補正対象項目名】図２５
【補正方法】変更
【補正の内容】
【図２５】
2014020716.tif 000036
【手続補正書】
【提出日】平成28年3月10日(2016.3.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項５
【補正方法】変更
【補正の内容】
【請求項５】
前記割当部は、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに前記ブリッジアドレスの範囲を指定するアドレス値を設定することにより、前記ブリッジに前記ブリッジアドレスを割り当てる一方、
前記ブリッジのコンフィグレーションレジスタのベースアドレスレジスタおよびリミットアドレスレジスタに０を設定することにより、前記ブリッジに対する前記ブリッジアドレスの割当を解除することを特徴とする、請求項１〜請求項３のいずれか一項記載の情報処理装置。
【国際調査報告】
2014020716.tif 000037
2014020716.tif 000038