(57)【要約】【課題】有限な資源であるバス番号をより活用し、活性増設への対応をより高い確率で行えるようにするための技術を提供する。【解決手段】配分部５３は、構成検出部５１が検出した通信デバイス、ＰＣＩデバイス、及び接続関係（トポロジ）を参照し、各空きＰＣＩスロットに均等配分すべきバス番号数を各エントリに格納した予約テーブル５６ａを作成する。再配分部５４は、ＰＣＩスロット毎に、配分すべきバス番号数を指定する希望テーブル１９ａ、及び予約テーブル５６ａのうちの一方をコピー元として決定テーブル５６ｃを作成する。再配分部５４は、配分可能なバス番号が残っている場合、決定テーブル５６ｃのエントリのなかから選択したエントリのバス番号数をより大きい値に更新することで、バス番号の再配分を行う。【選択図】図５
2015197740.tif 000002
【特許請求の範囲】
【請求項１】
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出する検出部と、
前記検出部が検出したバスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定する第１の決定部と、
前記第１の決定部が決定した前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分する第２の決定部と、
前記第２の決定部によって確定されるバス番号数を用いて、前記空きスロットを含む各バスにバス番号を割り当てる割当部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記第２の決定部は、前記設定情報、及び前記第１のバスの数を用いた計算により前記空きスロットに割り当てるべきバス番号数を決定する場合、前記設定情報が前記バス番号数を指定する空きスロットに優先的に前記余りを再配分する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出する検出部と、
前記検出部が検出したバスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定する第１の決定部と、
前記第１の決定部が決定した前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分する第２の決定部と、
を有することを特徴とする資源割り当て装置。
【請求項４】
情報処理装置に、
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出させ、
検出された前記バスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定させ、
それぞれ決定された前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分させる、
処理を実行させるバス番号割り当てプログラム。
【請求項５】
情報処理装置に、
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出させ、
検出された前記バスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定させ、
それぞれ決定された前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分させる、
ことを特徴とするバス番号割り当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、搭載されたデバイスが接続されるバスに有限の資源であるバス番号が割り当てられる情報処理装置に関する。
【背景技術】
【０００２】
ＰＣ（Personal Computer）、或いはサーバ等に代表される情報処理装置には、１台以上のＩＯ（Input/Output）装置が搭載され、１台以上の別のＩＯ装置が接続可能となっているのが普通である。ＩＯ装置とは、例えばハードディスク装置、若しくはＳＳＤ（Solid State Drive）等の記憶装置、或いはネットワークを介した通信用のインターフェースである。
【０００３】
情報処理装置に搭載された演算処理装置（例えばＣＰＵ（Central Processing Unit）。以降「ＣＰＵ」と表記）は、ＩＯ装置からデータを取得して処理を行うようになっている。情報処理装置では、ＣＰＵとＩＯ装置間の通信は、その通信用のデバイス（以降「通信デバイス」と表記）を介して行わせるのが普通である。その通信デバイスとは、具体的には、ブリッジ、或いはスイッチ等である。
【０００４】
情報処理装置には、通常、通信デバイスは複数、設けられている。通信デバイス、及びＩＯ装置がＰＣＩ（Peripheral Components Interconnect）規格に対応している場合、通信デバイス間、及び通信デバイスとＩＯ装置間はＰＣＩバスにより接続される。複数台のＩＯ装置が接続可能な情報処理装置では、トポロジがツリー構造となるように、各通信デバイスが接続されるのが普通である。
【０００５】
ＰＣＩ規格では、各ＰＣＩバスにはバス番号と呼ばれる識別情報が割り当てられる。このバス番号は、データ（パケット）転送の制御に用いられ、ＰＣＩバスに接続されている通信デバイスのコンフィグレーションレジスタ内に格納される。通信デバイスが備えるコンフィグレーションレジスタには、バス番号として、プライマリバス番号、セカンダリバス番号、及びサブオーディネートバス番号が格納される。
【０００６】
プライマリバス番号は、接続上、ＣＰＵに近い側である上流側に接続されているバスに割り当てられたバス番号である。セカンダリバス番号は、接続上、ＣＰＵから離れた側である下流側に接続されているバスに割り当てられたバス番号である。サブオーディネートバス番号は、セカンダリバス番号が割り当てられたバスの下流側に位置するバスに割り当てられたバス番号のなかで最大のバス番号である。
【０００７】
最上流側に位置する通信デバイスであるホストブリッジが接続されたＰＣＩバスには、バス番号として０が割り当てられる。そのＰＣＩバスの１つ下流側に位置するＰＣＩバスにはバス番号として１が割り当てられる。そのようにして、各ＰＣＩバスには、位置関係により、連続した値のバス番号が割り当てられる。
【０００８】
セカンダリバス番号、及びサブオーディネートバス番号は、受信したデータ（パケット）を転送すべきＰＣＩバスを指定することから、セカンダリパス番号とサブオーディネートバス番号の間は連続した値でなければならない。このため、ＰＣＩ規格では、情報処理装置の動作中に、ＰＣＩバスに割り当てたバス番号の変更を行うのは極めて困難となっている。ＰＣＩバスに割り当てたバス番号を変更するには、事実上、各ＰＣＩバスにバス番号を割り当てる初期化（システムリセット）を行う必要がある。
【０００９】
ＰＣＩ規格では、情報処理装置の電源を入れたまま、入出力装置（ＰＣＩデバイス）を装着する活性増設（ホットプラグ）が可能となっている。活性増設を可能にするためには、活性増設によって必要となる数のバス番号を事前に確保しなければならない。
【００１０】
情報処理装置の殆どには、入出力装置を接続するためにスロットと呼ばれる差込口、或いは枠が設けられている。このスロットにはＰＣＩバスが接続される。情報処理装置は、入出力装置が接続されていないスロット（ＰＣＩバス）に、活性増設により入出力装置が接続されるか否かさえ事前に特定することはできない。ＰＣＩ規格では、情報処理装置の動作中に、ＰＣＩバスに割り当てたバス番号の変更は困難である。このことから、従来、入出力装置が接続されていないスロット（空きスロット）への活性増設を想定し、バス番号を事前に確保することが行われている。この事前のバス番号数の確保は、通常、情報処理装置の電源がオンされた場合の初期化時に行われる。事前のバス番号数の確保自体は、サブオーディネートバス番号の割り当てによって実現される。
【００１１】
事前にバス番号を確保する従来の方法としては、予め定められた設定情報に従って行う第１の方法、及び空きスロットに割り当てるべきバス番号数を算出し、算出したバス番号を各空きスロットに割り当てる第２の方法がある。第１の方法と第２の方法を組み合わせた方法も従来、行われている。
【００１２】
第１の方法で用いられる設定情報とは、例えばスロット毎に、確保すべきバス番号数を定めた情報である。そのため、この第１の方法では、バス番号数を確保すべきスロットに任意のバス番号数を事前に確保させることができる。
【００１３】
割り当て可能なバス番号数は有限である。割り当て可能な最大バス番号数は２５６であり、最大バス番号は２５５である。入出力装置が接続されたスロット（ＰＣＩバス）には、その入出力装置の接続によって必要となるバス番号数が割り当てられる。このことから、第２の方法では、以下の式を用いて、各空きスロットに割り当てるべきバス番号数（以降「予約数」と表記）を算出し、算出した予約数を各空きスロットに事前に割り当てるようにしている。
【００１４】
予約数＝ＩＮＴ（（最大バス番号数−消費バス番号数）／総空きスロット数）
・・・  （１）
ここで、ＩＮＴは小数点以下を切り捨てる関数である。
【００１５】
上記消費バス番号数は、通信デバイス間、或いは通信デバイスと入出力装置間を接続するＰＣＩバスへのバス番号の割り当てによって消費される総バス番号数である。第１の方法と第２の方法を組み合わせた場合、消費バス番号数は、その総バス番号数に、設定情報に従って割り当てられる総バス番号数を加算した値となる。その場合、総空きスロット数は、バス番号数が決まっていない空きスロットの総数となる。
【００１６】
第１の方法では、適切な設定情報を用意することにより、全ての活性増設に対応することができる。しかし、適切な設定情報を用意するためには、空きスロット毎に、活性増設によって必要となるバス番号数を適切、且つ事前に特定できていることが必要である。そのため、活性増設する入出力装置の変更、活性増設する空きスロット数の変更、等の状況の変化への対応が困難である。活性増設に必要なバス番号数が増える、或いは活性増設の対象となる空きスロットが増えるような場合、事前に割り当てたバス番号数では少ない空きスロット、つまり、活性増設が行えない空きスロットが発生する可能性が高くなる。
【００１７】
第２の方法では、消費バス番号数が大きい、或いは総空きスロット数が大きいような場合、予約数の値は小さくなり易い。各空きスロットに事前に割り当てられる予約数が小さくなるほど、活性増設に対応できない可能性は高くなる。
【００１８】
割り当て可能なバス番号数が有限であることから、設定情報によって空きスロットに指定するバス番号数、及び予約数も共に制限される。しかし、第１の方法、第２の方法、及びそれら第１の方法と第２の方法を組み合わせた方法の何れも、全てのバス番号数を消費するとは限らない。
【００１９】
例えば第２の方法では、消費バス番号数を８７、総空きスロット数を４４と想定した場合、予約数は３となり、３７のバス番号が余る。そのような余りが発生する可能性があることから、有限な資源であるバス番号をより活用し、活性増設により高い確率で対応可能にするのが望ましいと思われる。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開２００２−２８８１０４号公報
【特許文献２】特開２００８−４６７２２号公報
【特許文献３】特表２０１１−５１６９６４号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
１側面では、本発明は、有限な資源であるバス番号をより活用し、活性増設への対応をより高い確率で行えるようにするための技術を提供することを目的とする。
【課題を解決するための手段】
【００２２】
本発明を適用した１システムは、識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出する検出部と、検出部が検出したバスのなかで通信デバイスを他の通信デバイス、及び入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び空きスロットの数を用いた計算のうちの少なくとも一方により決定する第１の決定部と、第１の決定部が決定したバス番号数を空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを空きスロットに再配分する第２の決定部と、第２の決定部によって確定されるバス番号数を用いて、空きスロットを含む各バスにバス番号を割り当てる割当部と、を有する。
【発明の効果】
【００２３】
本発明を適用した場合には、有限な資源であるバス番号をより活用し、活性増設への対応をより高い確率で行えるようにすることができる。
【図面の簡単な説明】
【００２４】
【図１】本実施形態による情報処理装置の構成例を説明する図である。
【図２】本実施形態による情報処理装置であるサーバ上に構築されたＰＣＩバスシステムの構成例、及びバス番号の割り当て例を説明する図である。
【図３】複数の下流側ＰＣＩバスが接続されるスイッチの構成例を説明する図である。
【図４】３つのバス番号を必要とするＰＣＩデバイス例を説明する図である。
【図５】本実施形態による情報処理装置であるサーバ上に実現されるバス番号割り当て装置の機能構成例を説明する図である。
【図６】希望テーブルの構成例を説明する図である。
【図７】予約テーブルの構成例を説明する図である。
【図８】差分テーブルの構成例を説明する図である。
【図９】決定テーブルの構成例を説明する図である。
【図１０】ＣＰＵの電源をオンさせる場合に、ＣＰＵ、及びＳＰが実行する処理の流れを表すフローチャートである。
【図１１】再配分決定処理のフローチャートである。
【図１２】再配分決定処理の変形例を説明するフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
図１は、本実施形態による情報処理装置の構成例を説明する図である。本実施形態による情報処理装置１は、例えばサーバとして用いられるコンピュータである。このことから以降、情報処理装置１はサーバ１と表記する。
【００２６】
そのサーバ１は、図１に表すように、サーバ本体１０、及び複数の拡張外部装置２０を備えている。
【００２７】
サーバ本体１０は、１台のサーバとして動作するうえで必要な構成要素がまとめられたコンピュータである。そのサーバ本体１０は、複数のＣＰＵ（Central Processing Unit）１１、ＦＷＨ（Firm-Ware Hub）１２、複数のメモリ（メモリモジュール）１３、２つのハードディスク装置１４、複数のＰＣＩスロット１５（１５−０〜１５−３）、及びＳＰ（Service Processor）１６を備えている。
【００２８】
ＦＷＨ１２は、各ＣＰＵ１１が実行するファームウェアが格納されたメモリである。各ハードディスク装置１４には、例えばＯＳ（Operating System）、各種アプリケーション・プログラム、及び各種データ等が格納されている。各ＣＰＵ１１は、ファームウェアを起動させた後、ＯＳを起動させる。
【００２９】
ＳＰ１６は、サーバ１全体を管理するための管理装置であり、ＣＰＵ１７、メモリ（メモリモジュール）１８、及びフラッシュメモリ１９を備えた構成となっている。
【００３０】
フラッシュメモリ１９には、ＣＰＵ１７が実行するファームウェアが格納されている。ＳＰ１６によるサーバ１全体の管理は、ＣＰＵ１７がファームウェアを実行することで実現される。
【００３１】
ＣＰＵ１７は、管理用のネットワーク２を介した通信を行うためのインターフェースを備えている。それにより、サーバ１は、ネットワーク２に接続された端末装置３からＳＰ１６を通した各種制御を行えるようになっている。また、ＣＰＵ１７は、例えばメンテナンス用のメンテナンスバスを介して、サーバ本体１０に搭載された各ＣＰＵ１１と通信を行うための別のインターフェースを備えている。
【００３２】
拡張外部装置２０は、サーバ本体１０に設けられたＰＣＩスロット１５を拡張するための装置であり、ＰＳＵ（Power Supply Unit）２１、ファン２２、リンクカード２３、及び複数個（ここでは１１個）のＰＣＩスロット２４（２４−１〜２４−１１）を備えている。
【００３３】
リンクカード２３は、サーバ本体１０に設けられたＰＣＩスロット１５を介し、サーバ本体１０との通信を可能にするデバイスである。ＰＳＵ２１は、拡張外部装置２０に搭載されたファン２２等のデバイス、及びＰＣＩスロット２４に接続されるＰＣＩデバイス（入出力装置）への電力を供給する。
【００３４】
図２は、本実施形態による情報処理装置であるサーバ上に構築されたＰＣＩバスシステムの構成例、及びバス番号の割り当て例を説明する図である。ここでは、４つの同じ構成の拡張外部装置２０（２０−０〜２０−３）がサーバ本体１０に接続された場合を想定している。図２中、引出線を付していない「０」〜「２４２」の数値は、何れも近傍のＰＣＩバスに割り当てられたバス番号を表している。
【００３５】
図２に表すように、サーバ本体１０側のＰＣＩバスシステムは、ＰＣＩ規格に対応した通信デバイスとして、ホストブリッジ１０１、ブリッジ１０２、及びスイッチ１０３を備えている。ホストブリッジ１０１とブリッジ１０２と接続され、ブリッジ１０２はスイッチ１０３と接続されている。スイッチ１０３の下流側には４つのＰＣＩバスが接続され、各ＰＣＩバスにＰＣＩスロット１５が１つ接続されている。
【００３６】
ホストブリッジ１０１は、各ＣＰＵ１１とＰＣＩバスを接続するチップであり、ＰＣＩ規格に沿って通信を行う通信デバイスのなかで最上流側に位置する。そのため、ホストブリッジ１０１とブリッジ１０２を接続するＰＣＩバスにはバス番号として「０」が割り当てられる。ブリッジ１０２とスイッチ１０３を接続するＰＣＩバスにはバス番号として「１」が割り当てられる。バス番号として「２」が割り当てられたＰＣＩバスは、スイッチ１０３内部に設けられたＰＣＩバスである。
【００３７】
ホストブリッジ１０１と各ＣＰＵ１１間は、ＰＣＩ規格とは異なる内部バスによって接続されている。ＳＰ１６と各ＣＰＵ１１は、例えばメンテナンス用のメンテナンスバスによって接続されている。
【００３８】
各拡張外部装置２０のＰＣＩバスシステムは、図２に表すように、５つのスイッチ２０１（２０１−０〜２０１−４）を備える。
【００３９】
スイッチ２０１−０は、上流側ＰＣＩバスによりスイッチ１０３と接続され、下流側ＰＣＩバスによりスイッチ２０１−１と接続されている。スイッチ２０１−１は、下流側ＰＣＩバスによりスイッチ２０１−２と接続されている。スイッチ２０１−２は、２つの下流側ＰＣＩバスにより、スイッチ２０１−３、及び２０１−４と接続されている。
【００４０】
各拡張外部装置２０には、１１個のＰＣＩスロット２４−１〜２４−１１が設けられている。３個のＰＣＩスロット２４−１〜２４−３は、スイッチ２０１−２の各下流側ＰＣＩバスにそれぞれ接続されている４個のＰＣＩスロット２４−４〜２４−７は、スイッチ２０１−３の各下流側ＰＣＩバスにそれぞれ接続されている。４個のＰＣＩスロット２４−８〜２４−１１は、スイッチ２０１−４の各下流側ＰＣＩバスにそれぞれ接続されている。
【００４１】
図３は、複数の下流側ＰＣＩバスが接続されるスイッチの構成例を説明する図である。ここでは、複数の下流側ＰＣＩバスが接続されるスイッチとして、スイッチ２０１−３を例にとっている。引出線を付していない「２１」〜「２３」、「２７」「３１」「３５」は、近傍にＰＣＩバスに割り当てられたバス番号を表している。
【００４２】
スイッチ２０１−３は、図３に表すように、５個のブリッジ３１（３１−１〜３１−５）を内蔵したスイッチである。各ブリッジ３１は、バス番号として２２が割り当てられたＰＣＩバスにより接続され、４個のブリッジ３１−２〜３１−５にはそれぞれ下流側ＰＣＩバスが接続されている。
【００４３】
各ブリッジ３１は、コンフィグレーションレジスタ３５を備えている。プライマリバス番号、セカンダリバス番号、及びサブオーディネートバス番号は、このコンフィグレーションレジスタ３５に格納される。
【００４４】
このコンフィグレーションレジスタ３５は、ＰＣＩ規格に対応した通信デバイス、及びＰＣＩデバイスに備えられている。それにより、スイッチ２０１−３に内蔵された各ブリッジ３１は１つの通信デバイスである。
【００４５】
ブリッジ３１−２、及び３１−３の下流側ＰＣＩバスにそれぞれ割り当てられたバス番号は２３、及び２７である。ブリッジ３１−２の下流側ＰＣＩバスにはＰＣＩスロット２４−４が接続されている。このことは、ＰＣＩスロット２４−４に接続されたＰＣＩデバイスによって３つのバス番号が消費されることを意味している。
【００４６】
図４は、３つのバス番号を必要とするＰＣＩデバイス例を説明する図である。
このＰＣＩデバイス４０は、図４中「ＧｂＥ」と表記のギガビット・イーサネット（登録商標）規格でデータ通信を行うためのデバイスであり、スイッチ４１、及び３つのネットワーク・インターフェース４２を備えている。スイッチ４１と各ネットワーク・インターフェース４２は、それぞれＰＣＩバスによって接続されている。そのため、ＰＣＩデバイス４０は、３つのバス番号が必要となっている。
【００４７】
この３つのネットワーク・インターフェース４２は全て、１つのＰＣＩデバイスである。それにより、ＰＣＩデバイス４０は、複数のＰＣＩデバイスを内蔵した構成となっている。しかし、１つのＰＣＩデバイスが複数のＰＣＩデバイスを内蔵しているとは限らない。このことから、ＰＣＩデバイスを限定する必要のない場合、符号は付さないこととする。
【００４８】
各ＰＣＩバスへのバス番号の割り当ては、ファームウェアを起動させたＣＰＵ１１が行う。空いているＰＣＩスロット２４への活性増設に対応するために、ファームウェアは、ＣＰＵ１１に実行されることによって、図５に機能構成例を表すバス番号割り当て装置５０をサーバ本体１０上に実現させる。ここでは、説明上、便宜的に、活性増設の対象となるＰＣＩスロットは拡張外部装置２０に設けられたＰＣＩスロット２４のみと想定する。
【００４９】
このバス番号割り当て装置５０は、構成検出部５１、テーブル取得部５２、配分部５３、再配分部５４、設定部５５、及び記憶部５６を備える。
【００５０】
構成検出部５１は、サーバ１が備える全てのＰＣＩバスをスキャンして、サーバ１が備える全ての通信デバイス（ホストブリッジ１０１、ブリッジ１０２、３１、スイッチ１０３、２０１、４１、等）、及びＰＣＩデバイスを特定する。本実施形態では、通信デバイスは、ホストブリッジ１０１、ブリッジ１０２、３１、スイッチ１０３、２０１、４１、等である。図４に表すようなＰＣＩデバイス４０では、各ネットワーク・インターフェース４２がそれぞれＰＣＩデバイスとして扱われる。
【００５１】
実際のスキャンは、上流側から下流側のＰＣＩバスに、コンフィグレーションレジスタに格納されている情報の送信を要求する問い合わせを転送させることで行われる。その情報とは、ベンダＩＤ、デバイスＩＤ、及びクラスコード等である。その情報は、下流側から上流側に転送される。構成検出部５１は、そのようにして得られる情報から、サーバ１が備える全ての通信デバイス、及びＰＣＩデバイスを認識すると共に、接続関係（トポロジ）を特定する。
【００５２】
下流側ＰＣＩバスに別の通信デバイス、及びＰＣＩデバイスの何れも接続されていない通信デバイスは、その旨を表すメッセージを送信する。そのメッセージが送信されるＰＣＩバスが、空いているＰＣＩスロット２４と認識される。以降、スキャンによる認識結果、つまり認識された通信デバイス、ＰＣＩデバイス、及び接続関係を表す情報は「バスシステム構成情報」と表記する。
【００５３】
本実施形態では、空いているＰＣＩスロット２４に任意のバス番号数を確保できるようにしている。そのために、ＳＰ１６は、例えばオペレータの端末装置４への操作により、図６に構成例を表すテーブル（以降「希望テーブル」と表記）１９ａを作成する。作成された希望テーブル１９ａは、フラッシュメモリ１９に保存される。テーブル取得部５２は、ＳＰ１６から希望テーブル１９ａを取得し、取得した希望テーブル１９ａを記憶部５６に保存する。この希望テーブル１９ａは、端末装置４のオペレータが必要に応じて作成させるテーブルであることから、テーブル取得部５１が必ず希望テーブル１９ａを取得できるとは限らない。
【００５４】
希望テーブル１９ａの各エントリ（レコード）には、図６に表すように、エントリ番号（図６中「Ｎｏ」と表記）、ＰＣＩスロット２４の識別情報であるＰＣＩスロット番号、及び活性増設されるＰＣＩデバイス（図６中「ＰＣＩカード」と表記）用にオペレータが指定したバス番号数（図６中「ＰＣＩバス希望数」と表記）が格納される。実際に検出されたＰＣＩスロット２４へのＰＣＩスロット番号の割り当ては、構成検出部５１によって行われる。
【００５５】
配分部５３は、バス番号の割り当てが必要な各ＰＣＩバスにバス番号数を配分する。具体的には、配分部５３は、先ず、例えば式（１）を用いて、空きＰＣＩスロット２４に確保すべき予約数を算出する。この予約数の算出結果は、図７に構成例を表すような予約テーブル５６ａの形で記憶部５６に保存される。図７では、予約数は「ＰＣＩスロットのＰＣＩバス予約数」と表記している。以降、図７に表すように各空きＰＣＩスロット２４に予約数のバス番号を確保した場合の余りは「余りＲ」或いは「Ｒ」と表記する。
【００５６】
再配分部５４は、配分部５３によって各空きＰＣＩスロット２４にバス番号数を配分した場合の余りＲを更に再配分するための機能である。各空きＰＣＩスロット２４に確保されるバス番号数は、再配分部５４によって決定される。この結果は、図９に構成例を表すような決定テーブル５６ｃの形で記憶部５６に保存される。各空きＰＣＩスロット２４に最終的に確保されたバス番号数は、図９中「ＰＣＩスロットのＰＣＩバス決定数」と表記している。
【００５７】
希望テーブル１９ａが記憶部５６に保存されている場合、再配分部５４は、ＰＣＩスロット番号を用いて、希望テーブル１９ａと予約テーブル５６ａのエントリを対応付け、エントリ毎に、予約数から希望数を引いて得られた差分（＝予約数−希望数）を算出する。各エントリの算出結果は、図８に構成例を表すような差分テーブル５６ｂに格納される。差分テーブル５６ｂ自体は、記憶部５６に保存される。
【００５８】
再配分部５４は、差分テーブル５６ｂを作成した後、各エントリの差分の合計値を算出する。また、必要に応じて、再配分部５４は、差分テーブル５６ｂのエントリのなかで差分が負となっているエントリを抽出し、抽出したエントリに格納されている負の差分の合計値を算出する。以降、差分の合計値を「差分合計値Ｓ」、負の差分の合計値を「負の差分合計値Ｔ」と表記する。
【００５９】
再配分部５４は、差分合計値Ｓ、余りＲ、更には負の差分合計値Ｔを用いて、決定テーブル５６ｃの各エントリへのコピーを行うテーブルを希望テーブル１９ａ、及び予約テーブル５６ａのなかから選択する。希望テーブル１９ａをコピー元に選択した場合、再配分部５４は、希望テーブル１９ａのエントリなかで希望数が予約数よりも小さいエントリでは決定数を予約数とする。そのようにして、再配分部５４は、空きＰＣＩスロット２４に対し、配分部５３より大きい数のバス番号を確保させ、バス番号をより多く活用する。
【００６０】
予約テーブル５６ａをコピー元に選択した場合、余りＲの数分、バス番号が再配分可能である。このことから、再配分部５６は、決定数（予約数）に上乗せするバス番号数の増分数、及びその増分数を加えるエントリ（空きＰＣＩスロット）を決定し、決定したエントリの決定数を更新する。そのようにして、再配分部５４は、コピー元として予約テーブル５６ａを選択した場合でも、より多くのバス番号数を確保する。
【００６１】
再配分（確保）可能なバス番号が残っている場合、再配分部５４は、残っているバス番号を、空きＰＣＩスロット２４のなかの１つ以上の空きＰＣＩスロット２４に再配分する。その再配分によってバス番号数が増える空きＰＣＩスロット２４では、必要なバス番号数がより多いＰＣＩデバイスの活性増設が可能となる。このため、活性増設がより高い確率で行えるようになる。活性増設するＰＣＩデバイスの変更にも、より高い確率で対応できるようになる。
【００６２】
設定部５５は、決定テーブル５６ｃを参照し、各空きＰＣＩスロット２４、及び既に確認されているＰＣＩバスにバス番号を割り当てる。その割り当てにより、各通信デバイスがそれぞれ備えるコンフィグレーションレジスタ３５に格納すべきプライマリバス番号、セカンダリバス番号、及びサブオーディネートバス番号が決定され、それらバス番号がコンフィグレーションレジスタ３５に格納される。
【００６３】
図１に表す構成例では、上記記憶部５６は、例えばメモリ１３、或いはメモリ１３とハードディスク装置１４が相当する。他の構成検出部５１、テーブル取得部５２、配分部５３、再配分部５４、及び設定部５５は、ＣＰＵ１１が、ＦＷＨ１２上のファームウェアをメモリ１３に読み出して実行することで実現される。このことから、構成検出部５１、テーブル取得部５２、配分部５３、再配分部５４、及び設定部５５は、ＣＰＵ１１、ＦＷＨ１２、及びメモリ１３によって実現される。
【００６４】
図１０は、ＣＰＵの電源をオンさせる場合に、ＣＰＵ、及びＳＰが実行する処理の流れを表すフローチャートである。次に図１０を参照し、ＣＰＵ１１の電源をオンさせる場合のそのＣＰＵ１１、及びＳＰ１６の動作について詳細に説明する。図１０に表すフローチャートでは、ＣＰＵ１１はＦＷＨ１２に格納されているファームウェア、ＳＰ１６はＣＰＵ１７がフラッシュメモリ１８に格納されているファームウェア（或いはＯＳ）を実行することで実現される。図１０では、ＣＰＵ１１が実行する処理として、バス番号の割り当てに係わる処理のみを表している。
【００６５】
ＳＰ１６のＣＰＵ１７は、何らかの理由がない限り、ファームウェアを実行している状態となっている。希望テーブル１９ａを作成、或いは更新すべきサーバ１が発生した場合、端末装置４のオペレータは、端末装置４をサーバ１のＳＰ１６に接続させ、希望テーブル１９ａの作成を指示し、希望テーブル１９ａの作成に必要なデータ入力を行う。ＳＰ１６のＣＰＵ１７は、必要なデータの端末装置４への送信、及び端末装置４から送信されたデータの受信を行い、希望テーブル１９ａの作成に必要なデータ入力を行える環境をオペレータに提供する（ＳＡ１）。例えば端末装置４のオペレータが必要なデータ入力の終了を指示した場合、ＳＰ１６のＣＰＵ１７は、その指示により、希望テーブル１９ａを作成し、作成した希望テーブル１９ａをフラッシュメモリ１９に保存する（ＳＡ２）。
【００６６】
その後、端末装置４のオペレータが電源オン（ＰＯＮ：Power ON）を指示するか、或いは定められた起動開始時刻となったような場合、ＳＰ１６のＣＰＵ１７は、サーバ本体１０の電源をオンさせる（ＳＡ３）。その結果、サーバ本体１０の各ＣＰＵ１１は、ＦＷＨ１２上のファームウェアを起動させる。
【００６７】
ファームウェアを起動させたＣＰＵ１１は、サーバ１が備える全てのＰＣＩバスをスキャンして、サーバ１が備える全ての通信デバイス、及びＰＣＩデバイスを確認する（ＳＢ１）。その確認により、バスシステム構成情報が作成される。構成検出部５１は、ＣＰＵ１１がこのＳＢ１の処理を実行することで実現される。
【００６８】
スキャンを行ったＣＰＵ１１は、次に、ＳＰ１６に希望テーブル１９ａの送信を要求する（ＳＢ２）。
【００６９】
ＳＰ１６のＣＰＵ１１は、希望テーブル１９ａの送信を要求するメッセージがＣＰＵ１１から送信された場合、そのメッセージを受信する（ＳＡ４）。次に、ＳＰ１６のＣＰＵ１７は、希望テーブル１９ｓがフラッシュメモリ１９に保存されているか否か確認し、その確認結果をＣＰＵ１１に通知する（ＳＡ５）。それにより、希望テーブル１９ａがフラッシュメモリ１９に保存されていた場合、ＳＰ１６のＣＰＵ１７は、希望テーブル１９ａをＣＰＵ１１に送信する。
【００７０】
ＳＰ１６に希望テーブル１９ａの送信を要求したＣＰＵ１１は、ＳＰ１６からの応答を待って、必要な処理を実行する（ＳＢ３）。その応答として、希望テーブル１９ａを受信した場合、ＣＰＵ１１は、受信した希望テーブル１９ａをメモリ１３に保存する。テーブル取得部５２は、ＣＰＵ１１が、ＳＢ２、及びＳＢ３の処理を実行することで実現される。
【００７１】
次に、ＣＰＵ１１は、バスシステム構成情報を参照して、式（１）中の消費バス番号数の算出、並びに空きＰＣＩスロット２４の確認、及び空きＰＣＩスロット数の計数を行う。その後、ＣＰＵ１１は、算出した消費バス番号数、及び計数した空きＰＣＩスロット数を用いて、式（１）により予約数、及び余りＲを算出し、予約テーブル５６ａを作成する（以上ＳＢ４）。このとき、算出される予約数は、各空きＰＣＩスロット２４に均等に割り当てると仮定するバス番号数である。配分部５３は、ＣＰＵ１１が、このＳＢ４の処理を実行することで実現される。
【００７２】
続いて、ＣＰＵ１１は、各空きＰＣＩスロット２４に確保するバス番号数を決定する配分決定処理を実行する（ＳＢ５）。決定テーブル５６ｃは、この配分決定処理の実行により作成される。再配分部５４は、ＣＰＵ１１が、この配分決定処理を実行することで実現される。
【００７３】
決定テーブル５６ｃの作成により、各空きＰＣＩスロット２４に配分すべきバス番号数が決定数として確定する。このことから、次にＣＰＵ１１は、バスシステム構成情報、及び決定テーブル５６ｃを参照し、各通信デバイス、及び各ＰＣＩデバイスがそれぞれ備えるコンフィグレーションレジスタに必要なデータを設定するコンフィグレーション処理を実行する（ＳＢ６）。そのようにして初期化が終了した後、ＣＰＵ１１は、ハードディスク装置１４上のＯＳをブートする（ＳＢ７）。設定部５５は、ＣＰＵ１１が、コンフィグレーション処理を実行することで実現される。
【００７４】
図１１は、上記ＳＢ５として実行される配分決定処理のフローチャートである。次に図１１を参照し、ファームウェアの実行により初期化を行うＣＰＵ１１の動作について、更に詳細に説明する。
【００７５】
先ず、ＣＰＵ１１は、希望テーブル１９ａが取得できたか否か判定する（Ｓ２１）。ＳＰ１６から希望テーブル１９ａを受信した場合、Ｓ２１の判定はＹｅｓとなってＳ２２に移行する。希望テーブル１９ａを受信しなかった場合、Ｓ２１の判定はＮｏとなってＳ３２に移行する。
【００７６】
Ｓ２２では、ＣＰＵ１１は、作成されている予約テーブル５６ａ、及び受信した希望テーブル１９ａを用いて、図８に表すような差分テーブル５６ｂを作成する。差分テーブル５６ｂの作成後、ＣＰＵ１１は、差分テーブル５６ｂを参照し、差分合計値Ｓを算出する（Ｓ２３）。
【００７７】
次に、ＣＰＵ１１は、差分合計値Ｓと余りＲの加算結果（＝Ｓ＋Ｒ）が０以上か否か判定する（Ｓ２４）。その加算結果が０以上であった場合、Ｓ２４の判定はＹｅｓとなってＳ２５に移行する。その加算結果が０未満であった場合、Ｓ２４の判定はＮｏとなってＳ３０に移行する。Ｓ２４でのＹｅｓの判定は、決定テーブル５６ｃの各エントリへのデータのコピー元として、希望テーブル１９ａが選択可能であることを意味する。
【００７８】
Ｓ２５では、ＣＰＵ１１は、差分テーブル５６ｂを参照し、負の差分合計値Ｔ（Ｔ≦０）を算出する。次にＣＰＵ１１は、余りＲと負の差分合計値Ｔの加算結果（＝Ｒ＋Ｔ）が０以上か否か判定する。その加算結果が０以上であった場合、Ｓ２６の判定はＹｅｓとなってＳ２７に移行する。その加算結果が０未満であった場合、Ｓ２６の判定はＮｏとなってＳ２９に移行する。Ｓ２６でのＹｅｓの判定は、予約テーブル５６ａ、希望テーブル１９ａの同じＰＣＩスロット番号が格納されているエントリで希望数が予約数より小さい全てのエントリを対象に、決定数として予約数を設定できることを意味する。
【００７９】
Ｓ２７では、ＣＰＵ１１は、決定テーブル５６ｃを作成し、各エントリにデータをコピーするコピー元として希望テーブル１９ａを選択して、希望テーブル１９ａの各エントリのデータを決定テーブル５６ｃの各エントリにコピーする。次にＣＰＵ１１は、決定テーブル５６ｃの各エントリに決定数としてコピーした希望数のなかで、予約テーブル５６ａの対応するエントリに格納されている予約数より小さい希望数を、その予約数に変更する（Ｓ２８）。そのようにして、決定テーブル５６ｃの作成を完了させた後、配分決定処理が終了する。
【００８０】
このようにして、本実施形態では、希望数が指定されたＰＣＩスロット２４を対象に、決定数をより大きい値に更新するようにしている。これは、希望数が指定されたＰＣＩスロット２４は、希望数が指定されていないＰＣＩスロット２４と比較して、活性増設が行われる可能性が高いからである。決定数を更新させたＰＣＩスロット２４に活性増設が行われる可能性がより高いと推定されるＰＣＩスロット２４の決定数をより大きい値に更新することにより、活性増設に対応できる可能性はより高くなる。
【００８１】
希望テーブル１９ａは、全ての空きＰＣＩスロット２４に希望数を指定しているとは限らない。そのため、Ｓ２６でのＮｏの判定は、空きＰＣＩスロット２４のなかでバス番号数が確保されない可能性が存在することを意味する。このことから、Ｓ２９では、ＣＰＵ１１は、決定テーブル５６ｃを作成し、各エントリにデータをコピーするコピー元として予約テーブル５６ａを選択して、予約テーブル５６ａの各エントリのデータを決定テーブル５６ｃの各エントリにコピーする。そのようにして、決定テーブル５６ｃの作成を完了させた後、配分決定処理が終了する。
【００８２】
上記Ｓ２４の判定がＮｏとなって移行するＳ３０では、ＣＰＵ１１は、決定テーブル５６ｃを作成し、各エントリにデータをコピーするコピー元として予約テーブル５６ａを選択して、エントリ間のコピーを行う。次に、ＣＰＵ１１は、決定テーブル５６ｃのなかで決定数が希望数より小さいエントリを抽出し、抽出したエントリのなかで希望数を決定数に変更可能なエントリ分、希望数を決定数に変更する（Ｓ３１）。その後、配分決定処理が終了する。
【００８３】
上記Ｓ２１の判定がＮｏとなって移行するＳ３２では、ＣＰＵ１１は、決定テーブル５６ｃを作成し、各エントリにデータをコピーするコピー元として予約テーブル５６ａを選択して、エントリ間のコピーを行う。次に、ＣＰＵ１１は、余りＲ、決定数、及び総空きＰＣＩスロット数を用いて、決定数（予約数）の増分数、及びその増分数を決定数に加えるべき対象エントリを決定する。その後、ＣＰＵ１１は、決定した対象エントリの決定数を、その決定数に増分数を加算した結果に更新する。配分決定処理は、その後に終了する。
【００８４】
増分数、及び対象エントリの決定方法としては、例えば活性増設で必要となるバス番号数の平均値以上の決定値とする空きＰＣＩスロット２４の確保を優先させることが考えられる。これは、活性増設を行える可能性の高い空きＰＣＩスロット２４をより確実に確保するためである。増分数を複数、決定し、活性増設を行える可能性が異なる空きＰＣＩスロットを複数、確保するようにしても良い。
【００８５】
上記のようにして、配分決定処理では、配分可能なバス番号が残っている場合、残っているバス番号を空きＰＣＩスロット２４に再配分する。その再配分により、より多くのバス番号が確保された空きＰＣＩスロット２４が得られる。より多くのバス番号が確保された空きＰＣＩスロット２４では、より多くの種類のＰＣＩデバイスの活性増設を行うことが可能になる。このようなことから、有限な資源であるバス番号はより有用に活用され、その有効活用により、活性増設が可能な空きＰＣＩスロット２４の数はより増えることになる。
【００８６】
なお、本実施形態では、決定テーブル５６ｃのエントリのなかで決定数を更新するエントリ、及び更新後の決定数を決定して、決定したエントリの決定数を更新するようにしている。しかし、エントリ、及び更新後の決定数の決定内容によっては、段階的に、余っているバス番号を再配分するようにしても良い。
【００８７】
例えば図１１に表す配分決定処理では、Ｓ２８の処理の終了時点でバス番号が余っている可能性がある。このことから、Ｓ２８の処理を実行した後、図１２に表すような処理を実行させるようにしても良い。
【００８８】
この図１２に表す処理では、ＣＰＵ１１は、余っているバス番号数Ｎを算出し（Ｓ４１）、バス番号数Ｎが０を超えている場合（Ｓ４２のＹｅｓ）、増分数、及び決定数を更新する対象エントリを決定し（Ｓ４３）、対象エントリの決定数を更新する（Ｓ４４）。バス番号数Ｎが０であった場合（Ｓ４２のＮｏ）、再配分可能なバス番号は残っていないことから、決定数の更なる更新は行われない。対象エントリとする条件、或いは／及び、増分数の決定方法が予め定めている場合には、活性増設が行える空きＰＣＩスロット数をより増やすために、多段階のバス番号の再配分を行うのが望ましい。
【００８９】
また、各空きＰＣＩスロット２４へのバス番号数の配分は、バスシステム構成情報、或いはバスシステム構成情報と希望テーブル１９ａが参照可能であれば決定することができる。このことから、本実施形態によるバス番号割り当て装置５０のような資源割り当て装置は、資源の割り当てが行われる情報処理装置に搭載させなくとも良い。例えば１台のお資源割り当て装置に、複数台の情報処理装置の資源の割り当てを行わせるようにしても良い。
【００９０】
上記以外にも、様々な変形を行うことができる。
以上の変形例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出する検出部と、
前記検出部が検出したバスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定する第１の決定部と、
前記第１の決定部が決定した前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分する第２の決定部と、
前記第２の決定部によって確定されるバス番号数を用いて、前記空きスロットを含む各バスにバス番号を割り当てる割当部と、
を有することを特徴とする情報処理装置。
（付記２）
前記設定情報は、前記空きスロット毎に、当該空きスロットに割り当てるべきバス番号数を表す情報であり、
前記空きスロットの数を用いた計算は、対象とする空きスロットに均等に割り当てるべきバス番号数を算出するための計算であり、
前記第１の決定部は、前記設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により、前記バス番号数を割り当てるべき空きスロットを全て対象にして、前記バス番号数を決定する、
ことを特徴とする付記１記載の情報処理装置。
（付記３）
前記第２の決定部は、前記設定情報、及び前記第１のバスの数を用いた計算により前記空きスロットに割り当てるべきバス番号数を決定する場合、前記設定情報が前記バス番号数を指定する空きスロットに優先的に前記余りを再配分する、
ことを特徴とする付記１、または２記載の情報処理装置。
（付記４）
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出する検出部と、
前記検出部が検出したバスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定する第１の決定部と、
前記第１の決定部が決定した前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分する第２の決定部と、
を有することを特徴とする資源割り当て装置。
（付記５）
情報処理装置に、
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出させ、
検出された前記バスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定させ、
それぞれ決定された前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分させる、
処理を実行させるバス番号割り当てプログラム。
（付記６）
情報処理装置に、
識別情報であるバス番号の設定対象であり、通信用の通信デバイス、或いは入出力装置の接続に用いられるバスを検出させ、
検出された前記バスのなかで前記通信デバイスを他の通信デバイス、及び前記入出力装置の何れにも接続させていないバスである空きスロットにそれぞれ割り当てるべきバス番号数を、前記空きスロット毎に割り当てるべきバス番号数を指定する設定情報、及び前記空きスロットの数を用いた計算のうちの少なくとも一方により決定させ、
それぞれ決定された前記バス番号数を前記空きスロットに割り当てる場合に、割り当て可能な全バス番号数のなかで割り当てられないバス番号数である余りを前記空きスロットに再配分させる、
ことを特徴とするバス番号割り当て方法。
【符号の説明】
【００９１】
１    サーバ
１０    サーバ本体
１１、１７    ＣＰＵ
１２    ＦＷＨ
１３、１８    メモリ
１５、１５−０〜１５−３、２４、２４−１〜２４−１１    ＰＣＩスロット
１９    フラッシュメモリ
１９ａ    希望テーブル
２０、２０−０〜２０−３    拡張外部装置
２３    リンクカード
３１、３１−１〜３１−５、１０２    ブリッジ
４０    ＰＣＩデバイス
４１、１０３、２０１、２０１−０〜２０１−４    スイッチ
４２    ネットワーク・インターフェース
５１    構成検出部
５２    テーブル取得部
５３    配分部
５４    再配分部
５５    設定部
５６    記憶部
５６ａ    予約テーブル
５６ｂ    差分テーブル
５６ｃ    決定テーブル
【図１】
2015197740.tif 000003
【図２】
2015197740.tif 000004
【図３】
2015197740.tif 000005
【図４】
2015197740.tif 000006
【図５】
2015197740.tif 000007
【図６】
2015197740.tif 000008
【図７】
2015197740.tif 000009
【図８】
2015197740.tif 000010
【図９】
2015197740.tif 000011
【図１０】
2015197740.tif 000012
【図１１】
2015197740.tif 000013
【図１２】
2015197740.tif 000014