(57)【要約】【課題】レガシーブートにおいてＭＭＩＯ−Ｌが割り当てられるＰＣＩデバイスの数を減らし、ＭＭＩＯ−Ｌ不足の発生を抑えること。【解決手段】前処理部４７が、ＭＭＩＯ−Ｌを割り当てるルートポートを特定し、特定したルートポートの配下のＰＣＩデバイスにＭＭＩＯ−Ｌを割り当てる設定を行う。そして、ＰＣＩ初期化部４３が、前処理部４７により特定されたルートポートの配下のＰＣＩデバイスへＭＭＩＯ−Ｌを割り当て、他のルートポートの配下のＰＣＩデバイスへＭＭＩＯ−Ｈを割り当てる。そして、中間処理部４８が、ＭＭＩＯ−Ｌ不足か否かを判定し、ＭＭＩＯ−Ｌ不足でない場合には、ブート処理部４５にブート処理を依頼する。そして、ブート処理部４５がＯＳブートを行う。【選択図】図５
2020024557.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステム(ＯＳ)がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置において、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定する特定部と、
メモリマップ入出力に用いられるメモリアドレスとして、前記特定部が特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当てる割当部と、
前記特定部が特定したルートポートに接続する全デバイスに前記割当部によりメモリアドレスが割り当てられたか否かを判定する第１判定部と、
前記第１判定部が前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、前記特定部が特定したブートデバイスからＯＳをレガシーブートするブート部と
を有することを特徴とする情報処理装置。
【請求項２】
前記ブート部がＯＳのレガシーブートに失敗した場合に、前記複数のブートデバイスの中の他のブートデバイスについて、前記特定部、前記割当部、前記第１判定部及び前記ブート部の処理を行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
当該情報処理装置の電源が投入された場合に当該情報処理装置が有する全てのデバイスに前記ビット幅のメモリアドレスが割り当てられたか否かを判定する第２判定部をさらに有し、
前記特定部は、前記第２判定部が前記ビット幅のメモリアドレスが割り当てられなかったデバイスがあると判定した場合に、前記１つのルートポートを特定することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
ルートポートの情報を含めてブートデバイスを定義する情報及びブートデバイスの優先順位を示す情報を含むブート管理情報を記憶する記憶部をさらに有し、
前記特定部は、前記ブート管理情報に基づいて前記１つのルートポートを特定することを特徴とする請求項１、２又は３に記載の情報処理装置。
【請求項５】
前記デバイスは、ＰＣＩデバイスであることを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
オペレーティングシステム(ＯＳ)がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置によるブート方法において、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定し、
メモリマップ入出力に用いられるメモリアドレスとして、特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当て、
特定したルートポートに接続する全デバイスにメモリアドレスが割り当てられたか否かを判定し、
前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、特定したブートデバイスからＯＳをレガシーブートする
ことを特徴とするブート方法。
【請求項７】
オペレーティングシステム(ＯＳ)がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置で実行されるブートプログラムにおいて、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定し、
メモリマップ入出力に用いられるメモリアドレスとして、特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当て、
特定したルートポートに接続する全デバイスにメモリアドレスが割り当てられたか否かを判定し、
前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、特定したブートデバイスからＯＳをレガシーブートする
処理を前記情報処理装置に実行させることを特徴とするブートプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ブート方法及びブートプログラムに関する。
【背景技術】
【０００２】
近年、ＵＥＦＩ（Unified  Extensible  Firmware  Interface）モードでのＯＳ（Operating  System）起動であるＵＥＦＩブート（UEFI  Boot）への移行が進みつつある。ただし、旧ソフトウェア資産等の要件で、現在も旧ＢＩＯＳ（Basic  Input/Output  System）モードでのＯＳ起動であるレガシーブート（Legacy  Boot）が用いられることがある。
【０００３】
ＢＩＯＳはレガシーブートとＵＥＦＩブートの２つの起動モードを持つが、通常はＵＥＦＩブートが有効であり、設定によってレガシーブートが有効になる。レガシーブートでは、過去のハードウェアとの互換性から、ＢＩＯＳは３２ビットのアドレス空間（０番地〜０ｘＦＦＦＦＦＦＦＦ番地の４ＧＢ（ギガバイト））しかアクセスできない。ただし、ＯＳ起動後は６４ビットのアドレス空間へのアクセスが可能となる。
【０００４】
レガシーブートでＰＣＩ（Peripheral  Component  Interconnect）デバイスからＯＳを起動するためには、ＢＩＯＳは、
（１）ＰＣＩデバイスが要求するＭＭＩＯ（Memory  Mapped  IO）をアドレス空間に割り当て、
（２）ＰＣＩデバイス内に格納されているレガシーブート用のオプションＲＯＭ（Read  Only  Memory）プログラムを実行する
ことが必要である。ここで、ＭＭＩＯは、デバイスのＩＯをデバイスに割り当てられたメモリアドレスを用いて行うことである。また、オプションＲＯＭプログラムは、ＯＳをデバイスから読み込むドライバである。
【０００５】
ＢＩＯＳが管理するアドレス空間のうち、ＭＭＩＯを３２ビットのアドレス空間に割り当てるための領域はＭＭＩＯ−Ｌ（Low）と表される。また、ＭＭＩＯを６４ビットのアドレス空間に割り当てるための領域はＭＭＩＯ−Ｈ（High）と表される。ＢＩＯＳはＰＣＩデバイスが要求するＭＭＩＯをＭＭＩＯ−Ｌ又はＭＭＩＯ−Ｈに割り当てなければならないが、レガシーブート用のオプションＲＯＭプログラムの実行はＯＳ起動前であるため、ＢＩＯＳは３２ビットのアドレス空間までしかアクセスできない。したがって、ＢＩＯＳは、レガシーブート用のＰＣＩデバイスが要求するＭＭＩＯをＭＭＩＯ−Ｌに割り当てる必要がある。
【０００６】
図１２は、ＢＩＯＳが管理するアドレス空間を示す図である。図１２に示すように、３２ビットのアドレス空間は、ＤＲＡＭ（Dynamic  Random  Access  Memory）−Ｌ、コンフィグレーション空間、ＭＭＩＯ−Ｌ、ＢＩＯＳ  ＲＯＭ  イメージ、チップセット領域、ＳＭＭ（System  Management  Mode）領域として使われる。このため、ＭＭＩＯ−Ｌとして使用できるサイズは１．５ＧＢ程度である。
【０００７】
一方、近年のＰＣＩデバイスには、３２ＭＢ（メガバイト）、６４ＭＢ等のＭＭＩＯを要求するものがあり、ＭＭＩＯ−Ｌが不足する場合がある。ＭＭＩＯ−Ｌが割り当てられなかったＰＣＩデバイスは、ＯＳ起動後も使用不可となる。レガシーブート用のＰＣＩデバイスにはＭＭＩＯ−Ｌを割り当て、レガシーブート用でないＰＣＩデバイスにはＭＭＩＯ−Ｈを割り当てることが可能であるが、ＰＣＩでは、ルートポート（Root  Port）単位でＭＭＩＯ−ＬかＭＭＩＯ−Ｈが割り当てられる必要がある。ここで、ルートポートとは、ＰＣＩバスによる複数のデバイのス接続においてルートとなるポートである。サーバシステムは、複数のルートポートを有する。１つのルートポートにＭＭＩＯ−ＬのＰＣＩデバイスとＭＭＩＯ−ＨのＰＣＩデバイスを混在させることはできない。
【０００８】
なお、ＢＩＯＳに関する従来技術として、従来の２倍のプログラムサイズを持つシステムＢＩＯＳを利用できるようにする技術がある。この技術では、システムＢＩＯＳを構成するＩＲＴルーチンとＢＩＯＳドライバ群はＢＩＯＳ  ＲＯＭの異なる６４Ｋバイトのブロックに別個に格納される。そして、ＯＳの起動前はＩＲＴルーチンがメモリアドレス空間のＦ００００〜ＦＦＦＦＦに割り当てられ、ＯＳの起動後はそこにＢＩＯＳドライバ群が割り当てられる。
【０００９】
また、３つのスロットに装着される拡張基板が占有するアドレス空間の大きさを認識し、認識結果に基づいて、コンピュータのアドレスと、３つのスロットのいずれかを選択するためのスロット選択信号との対応関係をマッピングテーブルに設定する技術がある。この技術によれば、拡張基板が占有するアドレス空間を適応的に割り当てることができる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平９−１１４７６８号公報
【特許文献２】特開平６−１３９１８２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＰＣＩでは、ルートポート単位でＭＭＩＯ−ＬかＭＭＩＯ−Ｈが割り当てられる。したがって、レガシーブート用のＰＣＩデバイスを含むルートポートの配下の全ＰＣＩデバイスにＭＭＩＯ−Ｌを割り当て、残りのルートポートの配下の全ＰＣＩデバイスにＭＭＩＯ−Ｈを割り当てることが考えられる。このような割り当てを行うことで、ＭＭＩＯ−Ｌが割り当てられるＰＣＩデバイスの数を減らすことができる。
【００１２】
しかしながら、冗長構成のサーバシステムでは、ＰＣＩデバイスからＯＳを起動できなくなることを防ぐために、各ルートポートにレガシーブート用のＰＣＩデバイスが配置される。各ルートポートにレガシーブート用のＰＣＩデバイスを配置することで、いずれか１つのルートポートが利用可能であれば、ＰＣＩデバイスからのＯＳの起動が可能になる。このため、いずれのルートポートもレガシーブート用のＰＣＩデバイスを含み、全ＰＣＩデバイスにＭＭＩＯ−Ｌが割り当てられる。したがって、冗長構成のサーバシステムでは、ＭＭＩＯ−Ｌが割り当てられるＰＣＩデバイスの数を減らすことができず、ＭＭＩＯ−Ｌ不足が発生するという問題がある。
【００１３】
本発明は、１つの側面では、各ルートポートにレガシーブート用のデバイスが配置される冗長構成のサーバシステムにおいて、ＭＭＩＯ−Ｌ不足の発生を抑えることを目的とする。
【課題を解決するための手段】
【００１４】
１つの態様では、情報処理装置は、ＯＳがレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する。そして、前記情報処理装置は、複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定する特定部を有する。また、前記情報処理装置は、メモリマップ入出力に用いられるメモリアドレスとして、前記特定部が特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当てる割当部を有する。また、前記情報処理装置は、前記特定部が特定したルートポートに接続する全デバイスに前記割当部によりメモリアドレスが割り当てられたか否かを判定する第１判定部を有する。また、前記情報処理装置は、前記第１判定部が前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、前記特定部が特定したブートデバイスからＯＳをレガシーブートするブート部を有する。
【発明の効果】
【００１５】
１つの側面では、本発明は、ＭＭＩＯ−Ｌ不足の発生を抑えることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施例に係るサーバシステムの構成を示す図である。
【図２】図２は、ＭＭＩＯ要求サイズの一例を示す図である。
【図３】図３は、ＭＭＩＯ−Ｌの不足を説明するための図である。
【図４】図４は、ブート管理テーブルの一例を示す図である。
【図５】図５は、サーバシステムのＢＩＯＳの機能構成を示す図である。
【図６】図６は、ＭＭＩＯ順次割り当て起動ドライバを説明するための図である。
【図７】図７は、ＢＩＯＳの処理フローを示すフローチャートである。
【図８】図８は、初期化処理部による初期化処理のフローを示すフローチャートである。
【図９】図９は、前処理部による前処理のフローを示すフローチャートである。
【図１０】図１０は、中間処理部による中間処理のフローを示すフローチャートである。
【図１１】図１１は、後処理部による後処理のフローを示すフローチャートである。
【図１２】図１２は、ＢＩＯＳが管理するアドレス空間を示す図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する情報処理装置、ブート方法及びブートプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１８】
まず、実施例に係るサーバシステムの構成について説明する。図１は、実施例に係るサーバシステムの構成を示す図である。図１に示すように、実施例に係るサーバシステム１は、システムボード２と、４つの拡張ＰＣＩボックス３を有する。なお、ここでは説明の便宜上、４つの拡張ＰＣＩボックス３を示したが、拡張ＰＣＩボックス３の数は２以上であれば４より少なくても多くてもよい。
【００１９】
システムボード２は、メインメモリ２０と、ＣＰＵ（Central  Processing  Unit）＃１及びＣＰＵ＃２で表される２つのＣＰＵ２１と、４つのＰＣＩエクスプレススイッチ２２と、ＮＶＲＡＭ（Non-Volatile  RAM）２３と、ＲＯＭ２４とを有する。サーバシステム１はルートポート＃１〜ルートポート＃４で表される４つのルートポート２１ａを有し、４つのＰＣＩエクスプレススイッチ２２と４つのルートポート２１ａと４つの拡張ＰＣＩボックス３はそれぞれ対応付けられる。各ＣＰＵ２１には２つのルートポート２１ａが対応付けられる。
【００２０】
なお、システムボード２は、３つ以上のＣＰＵ２１を有してもよい。また、システムボード２は、２以上であれば４つ以外のＰＣＩエクスプレススイッチ２２を有してもよい。また、各ＣＰＵ２１には２つ以外の数のルートポート２１ａが対応付けられてもよい。
【００２１】
メインメモリ２０は、ＣＰＵ２１で実行されるプログラムや実行の途中結果等を記憶する。ＣＰＵ２１は、メインメモリ２０からプログラムを読み出して実行する中央処理装置である。ＰＣＩエクスプレススイッチ２２は、拡張ＰＣＩボックス３とＣＰＵ２１を接続する。ＮＶＲＡＭ２３は、ブート管理テーブルに登録されるブート管理情報を記憶する。なお、ブート管理テーブルについては後述する。
【００２２】
ＲＯＭ２４は、ＢＩＯＳを記憶する。サーバシステム１の電源が投入されると、ＣＰＵ２１は、ＲＯＭ２４からＢＩＯＳを読み出し、メインメモリ２０に格納する。そして、ＣＰＵ２１は、メインメモリ２０からＢＩＯＳを読み出して実行する。
【００２３】
なお、ＢＩＯＳは、ＣＰＵ２１により読み出し可能な記録媒体の一例であるＣＤ−Ｒに記憶され、ＣＤ−Ｒから読み出されてメインメモリ２０に格納されてもい。あるいは、ＢＩＯＳは、ＬＡＮ（Local  Area  Network）インタフェースを介して接続された他のサーバシステムのデータベース等に記憶され、これらのデータベースから読み出されてメインメモリ２０に格納されてもい。
【００２４】
拡張ＰＣＩボックス３は、ＰＣＩエクスプレススイッチ３１と、１２個のスロット３２を有する。拡張ＰＣＩボックス３は、１２個以外の個数のスロット３２を有してもよい。ＰＣＩエクスプレススイッチ３１は、対応するＰＣＩエクスプレススイッチ２２と接続する。各スロット３２には、ＰＣＩデバイス３３が装着される。
【００２５】
ＰＣＩデバイス３３には、ＦＣ（Fiber  Channel）カード、ＬＡＮカード、Ｒａｉｄ（Redundant  arrays  of  inexpensive  disks）カード、ＩＢ（InfiniBand）カードがある。２つの拡張ＰＣＩボックス３は、１枚のＦＣカードと１１枚のＬＡＮカードを搭載し、残りの２つの拡張ＰＣＩボックス３は、１枚のＲａｉｄカードと１０枚のＩＢカードと、１枚のＬＡＮカードを搭載する。
【００２６】
ＬＡＮカードは、ＬＡＮを用いて通信を行う。ＩＢカードは、ＩＢを用いて通信を行う。ＦＣカード及びＲａｉｄカードは、レガシーブートに用いられ、オプションＲＯＭプログラム及びＯＳを記憶する。ＦＣカードの１枚は通常時に第１優先でレガシーブートに用いられ、ＦＣカードの他の１枚は通常時に第２優先でレガシーブートに用いられる。Ｒａｉｄカードの１枚は予備のレガシーブート用カードとして用いられ、Ｒａｉｄカードの他の１枚は災害対策時のレガシーブート用カードとして用いられる。
【００２７】
図２は、ＭＭＩＯ要求サイズの一例を示す図である。図２に示すように、ＦＣカードとＲａｉｄカードのＭＭＩＯ要求サイズは１６ＭＢである。ＩＢカードのＭＭＩＯ要求サイズは６４ＭＢである。ＬＡＮカードのＭＭＩＯ要求サイズは８ＭＢである。
【００２８】
ＰＣＩデバイス３３全体のＭＭＩＯ要求サイズは、１６ＭＢ×４＋６４ＭＢ×２０＋８ＭＢ×２４＝６４ＭＢ＋１２８０ＭＢ＋１９２ＭＢ＝１５３６ＭＢである。この他に、オンボードＶＧＡ（Video  Graphics  Array）のＭＭＩＯ要求サイズとして３２ＭＢ、オンボードＬＡＮのＭＭＩＯ要求サイズとして１ＭＢ、チップセットデバイスのＭＭＩＯ要求サイズとして１６ＭＢが必要である。したがって、サーバシステム１のＭＭＩＯ要求サイズは１５３６ＭＢ＋３２ＭＢ＋１ＭＢ＋１６ＭＢ＝１５８５ＭＢである。
【００２９】
ＭＭＩＯ−Ｌとして割り当て可能なアドレス空間を１５３６ＭＢとすると、１５８５ＭＢ−１５３６ＭＢ＝４９ＭＢのアドレス空間が不足する。アドレス空間の割り当ては、チップセットデバイス→オンボードデバイス→ＰＣＩデバイス３３の順であるため、ＰＣＩデバイス３３へ割り当てられるＭＭＩＯ−Ｌが不足する。図３は、ＭＭＩＯ−Ｌの不足を説明するための図である。図３に示すように、１枚のＩＢカードと１枚のＬＡＮカードに対してＭＭＩＯ−Ｌが不足する。
【００３０】
そこで、サーバシステム１のＢＩＯＳは、レガシーブート用のＰＣＩデバイス３３及びルートポート２１ａをブート管理テーブルを用いて特定し、特定したルートポート２１ａだけにＭＭＩＯ−Ｌを割り当て、他のルートポート２１ａにはＭＭＩＯ−Ｈを割り当てる。
【００３１】
図４は、ブート管理テーブルの一例を示す図である。図４に示すように、ブート管理テーブル２３ａには、Ｂｏｏｔ００００〜Ｂｏｏｔ０００３で表される４つのブートデバイス定義２３ｂと、ＢｏｏｔＯｒｄｅｒで表されるブートオーダー２３ｃと、ＣｕｒｒｅｎｔＮｕｍｂｅｒで表される現在番号２３ｄが含まれる。
【００３２】
ブートデバイス定義２３ｂは、レガシーブート用のＰＣＩデバイス３３をＵＥＦＩのデバイスパスにより定義する。ブートデバイス定義２３ｂには、レガシーブート用のＰＣＩデバイス３３が接続するルートポート２１ａの番号が含まれる。例えば、Ｂｏｏｔ００００のデバイスパス「ＲｏｏｔＰｏｒｔ３／Ｓｌｏｔ１／ＦＣ」は、ルートポート＃３のスロット＃１に装着されたＦＣカードがレガシーブート用のＰＣＩデバイス３３であることを定義する。ＢｏｏｔＸＸＸＸ（Ｘは０〜９の数字）のＸＸＸＸは、ブートデバイス定義番号であり、ブートデバイス定義２３ｂを識別する番号である。
【００３３】
ブートオーダー２３ｃは、レガシーブート用のＰＣＩデバイス３３の優先順位を定義する。ブートオーダー２３ｃの「０００１  ００００  ０００２  ０００３」は、Ｂｏｏｔ０００１、Ｂｏｏｔ００００、Ｂｏｏｔ０００２、Ｂｏｏｔ０００３の順番でＰＣＩデバイス３３が起動用に用いられることを定義する。ブートオーダー２３ｃのサイズは８バイトである。ブートデバイス定義２３ｂ及びブートオーダー２３ｃは、サーバシステム１の管理者による設定により定義される。
【００３４】
現在番号２３ｄは、レガシーブートに用いられるブートデバイス定義番号を示す。現在番号２３ｄの「０００１」は、レガシーブートに用いられるブートデバイス定義２３ｂがＢｏｏｔ０００１であることを示す。現在番号２３ｄのサイズは２バイトである。
【００３５】
このように、サーバシステム１のＢＩＯＳは、レガシーブート用のＰＣＩデバイス３３及びルートポート２１ａをブート管理テーブル２３ａの現在番号２３ｄとブートデバイス定義２３ｂを用いて特定することができる。また、サーバシステム１のＢＩＯＳは、レガシーブート用のＰＣＩデバイス３３の優先順位をブートオーダー２３ｃを用いて特定することができる。
【００３６】
次に、サーバシステム１のＢＩＯＳの機能構成について説明する。図５は、サーバシステム１のＢＩＯＳの機能構成を示す図である。図５に示すように、サーバシステム１のＢＩＯＳ４は、ＭＣ初期化部４１と、ＭＭＩＯ管理部４２と、ＰＣＩ初期化部４３と、不足判定部４４と、ブート処理部４５と、初期化処理部４６と、前処理部４７と、中間処理部４８と、後処理部４９とを有する。
【００３７】
なお、ＭＣ初期化部４１、ＭＭＩＯ管理部４２、ＰＣＩ初期化部４３及びブート処理部４５は、従来のＢＩＯＳが有する機能である。不足判定部４４、初期化処理部４６、前処理部４７、中間処理部４８及び後処理部４９は、実施例に係るＢＩＯＳ４に追加された機能である。
【００３８】
ＭＣ初期化部４１は、メインメモリ２０とチップセットを初期化する。ＭＭＩＯ管理部４２は、各ルートポート２１ａのデータを管理する。また、ＭＭＩＯ管理部４２は、ルートポート２１ａ毎にＭＭＩＯ−ＬとＭＭＩＯ−Ｈのいずれを割り当てるかを管理する。ＭＭＩＯ管理部４２は、レガシーブートの場合には、全てのＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てるように設定する。
【００３９】
ＰＣＩ初期化部４３は、ＭＭＩＯ管理部４２又は前処理部４７の設定に基づいて、ＭＭＩＯ割り当てを行い、オプションＲＯＭプログラムの初期化処理機能を実行する。なお、ＰＣＩ初期化部４３によるＭＭＩＯ割り当てにおいて、ＭＭＩＯ−Ｌが不足し、ＭＭＩＯ−Ｌが割り当てられないＰＣＩデバイス３３が発生する場合がある。
【００４０】
ブート処理部４５は、ＯＳのブートを行う。具体的には、ブート処理部４５は、レガシーブート用のＰＣＩデバイス３３からオプションＲＯＭプログラムをメインメモリ２０に読み出して実行する。オプションＲＯＭプログラムは、ＰＣＩデバイス３３からＯＳをメインメモリ２０に読み出して実行する。
【００４１】
不足判定部４４は、ＭＭＩＯ−Ｌが不足することなく、全てのＰＣＩデバイス３３へＭＭＩＯ−Ｌを割り当てることができたか否かを判定する。全てのＰＣＩデバイス３３へＭＭＩＯ−Ｌを割り当てることができたと不足判定部４４が判定すると、ブート処理部４５は、ＯＳのブートを行う。一方、ＭＭＩＯ−Ｌが不足する場合には、ＢＩＯＳ４は、レガシーブート用のＰＣＩデバイス３３及びルートポート２１ａを特定し、特定したルートポート２１ａの配下のＰＣＩデバイス３３にだけＭＭＩＯ−Ｌを割り当てる処理を行う。
【００４２】
初期化処理部４６は、現在番号２３ｄを初期設定する。具体的には、初期化処理部４６は、ブートオーダー２３ｃから最優先のブートデバイス定義番号を取得し、取得した番号を現在番号２３ｄに設定する。
【００４３】
前処理部４７は、現在番号２３ｄのブートデバイス定義２３ｂからルートポート２１ａを特定する。そして、前処理部４７は、特定したルートポート２１ａに割り当てられるＭＭＩＯ−Ｌのサイズを計算する。具体的には、前処理部４７は、ＭＭＩＯ−Ｌとして割り当て可能なアドレス空間１５３６ＭＢ−チップセット及びオンボードデバイス用のＭＭＩＯ−Ｌ空間４９ＭＢ＝１４８７ＭＢを計算する。そして、前処理部４７は、特定したルートポート２１ａの配下のＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てる設定と、他のルートポート２１ａの配下のＰＣＩデバイス３３にＭＭＩＯ−Ｈを割り当てる設定を行う。
【００４４】
そして、前処理部４７は、以下の２つの処理を行うことで、全ＰＣＩデバイス３３の設定をリセットする。１つ目の処理として、前処理部４７は、既に割り当て済みのＭＭＩＯリソースの消去とＰＣＩデバイス３３への設定をクリアするため、ＰＣＩ  Ｓｅｃｏｎｄａｒｙ  Ｂｕｓ  Ｒｅｓｅｔを実施する。そして、２つ目の処理として、前処理部４７は、オプションＲＯＭプログラムの初期化処理機能を再実行できるように、オプションＲＯＭプログラムをロードしたメモリ領域、オプションＲＯＭプログラム用設定メモリ領域、ＢＩＯＳ４の各データを初期化する。例えば、前処理部４７は、ＢＤＡ（BIOS  Data  Area）、ＩＶＴ（Interrupt  Vector  Table）を初期化する。
【００４５】
なお、後述する図７に示すように、前処理部４７が前処理を実行する前に、ＰＣＩ初期化部４３によりＭＭＩＯ割り当てとオプションＲＯＭプログラムの実行が行われているため、前処理部４７は、全ＰＣＩデバイス３３の設定をリセットする必要がある。
【００４６】
中間処理部４８は、前処理部４７による設定に基づいてＰＣＩ初期化部４３により行われたＭＭＩＯ割り当てにおいてＭＭＩＯ−Ｌの不足が発生したか否かをＰＣＩ初期化部４３に問合せて判定する。そして、ＭＭＩＯ−Ｌの不足が発生した場合は、中間処理部４８は、異常処理を行う。具体的には、中間処理部４８は、異常処理として、サーバシステム１の管理者に例えばイベントログを用いて通知する。サーバシステム１の管理者は、ＰＣＩデバイス３３の移設や取り外し等の構成変更あるいは設定変更を行い、ＭＭＩＯ−Ｌの不足が発生しないような処置を行う。一方、ＭＭＩＯ−Ｌの不足が発生しなかった場合は、中間処理部４８は、ブート処理部４５にＯＳのブートを依頼する。
【００４７】
後処理部４９は、ブート処理部４５によるＯＳのブートが失敗した場合に機能する。後処理部４９は、ブート管理テーブル２３ａのブートオーダー２３ｃを現在番号２３ｄで検索し、現在番号２３ｄの次のブートデバイス定義番号を取得し、現在番号２３ｄを更新する。そして、後処理部４９は、前処理部４７に制御を移す。
【００４８】
現在番号２３ｄの次のブートデバイス定義番号を取得できない場合には、レガシーブート用のＰＣＩデバイス３３を全て試みた場合であるので、後処理部４９は、ＢＩＯＳセットアップメニューを起動し、サーバシステム１の管理者に処置をゆだねる。サーバシステム１の管理者は、例えばレガシーブート用のＰＣＩデバイス３３の再設定を行う。
【００４９】
なお、前処理部４７、中間処理部４８及び後処理部４９の機能は、ＭＭＩＯ順次割り当て起動ドライバにより実現される。図６は、ＭＭＩＯ順次割り当て起動ドライバを説明するための図である。図６に示すように、ＢＩＯＳ４には、ＭＭＩＯ順次割り当て起動ドライバ４０ａと、ＰＣＩ初期化部４３の機能を実現するＰＣＩバスドライバ４３ａと、ブート処理部４５の機能を実現するレガシードライバ４５ａが含まれる。なお、図６に示す前処理は前処理部４７による処理に対応し、中間処理は中間処理部４８による処理に対応し、後処理は後処理部４９による処理に対応する。
【００５０】
ＭＭＩＯ順次割り当て起動ドライバ４０ａは、前処理として、ブートデバイスのルートポート２１ａをブート管理テーブル２３ａのＣｕｒｒｅｎｔＮｕｍｂｅｒ、ＢｏｏｔＯｒｄｅｒ、ＢｏｏｔＸＸＸＸから特定する。ここで、ブートデバイスとは、レガシーブート用のＰＣＩデバイス３３である。そして、ＭＭＩＯ順次割り当て起動ドライバ４０ａは、前処理として、特定したルートポート２１ａにＭＭＩＯ−Ｌ空間を割り当てる設定、他のルートポート２１ａにＭＭＩＯ−Ｈを割り当てる設定を行う。
【００５１】
そして、ＰＣＩバスドライバ４３ａは、設定に基づいて、各ＰＣＩデバイス３３へＭＭＩＯを割り当て、ブートデバイスに含まれるオプションＲＯＭプログラムの初期化処理機能を実行する。
【００５２】
そして、ＭＭＩＯ順次割り当て起動ドライバ４０ａは、中間処理として、ＣｕｒｒｅｎｔＮｕｍｂｅｒのＰＣＩデバイス３３からＯＳ起動をトライする。そして、レガシードライバ４５ａがＯＳをブートする。また、ブートが失敗した場合には、ＭＭＩＯ順次割り当て起動ドライバ４０ａは、後処理として、ＢｏｏｔＯｒｄｅｒから次のブートデバイス定義番号を取得し、ＣｕｒｒｅｎｔＮｕｍｂｅｒを更新する。そして、ＭＭＩＯ順次割り当て起動ドライバ４０ａは、前処理に戻る。
【００５３】
次に、ＢＩＯＳ４の処理フローについて説明する。図７は、ＢＩＯＳ４の処理フローを示すフローチャートである。図７に示すように、ＢＩＯＳ４は、サーバシステム１の電源がＯＮされると、ＭＣ初期化部４１によりメインメモリ２０とチップセットを初期化し（ステップＳ１）、ＭＭＩＯ管理部４２によりＭＭＩＯ管理処理を行う（ステップＳ２）。ＭＭＩＯ管理部４２は、レガシーブートの場合には、ＭＭＩＯ管理処理において、全てのＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てるように設定する。
【００５４】
そして、ＢＩＯＳ４は、ＰＣＩ初期化部４３によりＰＣＩ初期化処理を行う（ステップＳ３）。ＰＣＩ初期化部４３は、レガシーブートでＭＭＩＯ管理部４２による設定に基づく場合には、ＰＣＩ初期化処理において、全ＰＣＩデバイス３３へのＭＭＩＯ−Ｌ割り当てを行う。
【００５５】
そして、ＢＩＯＳ４は、不足判定部４４によりＭＭＩＯ−Ｌ不足であるか否かを判定し（ステップＳ４）、ＭＭＩＯ−Ｌ不足でない場合には、ブート処理部４５によりブート処理を行う（ステップＳ５）。ブート処理部４５は、ブート処理において、ＯＳブートを行う。
【００５６】
一方、ＭＭＩＯ−Ｌ不足の場合には、ＢＩＯＳ４は、初期化処理部４６により初期化処理を行う（ステップＳ６）。初期化処理部４６は、初期化処理において、最優先のブートデバイス定義番号を現在番号２３ｄに設定する。そして、ＢＩＯＳ４は、前処理部４７により前処理を行う（ステップＳ７）。前処理部４７は、前処理において、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定し、特定したルートポート２１ａの配下のＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てる設定を行う。
【００５７】
そして、ＢＩＯＳ４は、ＰＣＩ初期化部４３によりＰＣＩ初期化処理を行う（ステップＳ８）。ＰＣＩ初期化部４３は、前処理部４７による設定に基づく場合には、ＰＣＩ初期化処理において、前処理により特定されたルートポート２１ａの配下のＰＣＩデバイス３３だけにＭＭＩＯ−Ｌを割り当てる。
【００５８】
そして、ＢＩＯＳ４は、中間処理部４８により中間処理を行う（ステップＳ９）。中間処理部４８は、中間処理において、ＭＭＩＯ−Ｌ不足か否かを判定し、ＭＭＩＯ−Ｌ不足でない場合には、ブート処理部４５にブート処理を依頼する。そして、ＢＩＯＳ４は、ブート処理部４５によりブート処理を行う（ステップＳ１０）。
【００５９】
そして、ＢＩＯＳ４は、ＯＳブートに失敗すると、後処理部４９により後処理を行う（ステップＳ１１）。後処理部４９は、後処理において、次の優先順位のブートデバイス定義番号を現在番号２３ｄに設定し、前処理部４７に制御を移す。
【００６０】
このように、ＢＩＯＳ４は、まず全ＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てる。そして、ＭＭＩＯ−Ｌ不足が発生すると、ＢＩＯＳ４は、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定し、特定したルートポート２１ａの配下のＰＣＩデバイス３３だけにＭＭＩＯ−Ｌを割り当てる。したがって、ＢＩＯＳ４は、ＭＭＩＯ−Ｌを割り当てるＰＣＩデバイス３３の数を減らすことができる。
【００６１】
次に、初期化処理部４６による初期化処理のフローについて説明する。図８は、初期化処理部４６による初期化処理のフローを示すフローチャートである。図８に示すように、初期化処理部４６は、ブート管理テーブル２３ａから最優先のブートデバイス定義番号を取得し（ステップＳ２１）、取得したブートデバイス定義番号をブート管理テーブル２３ａの現在番号２３ｄに設定する（ステップＳ２２）。
【００６２】
このように、初期化処理部４６が最優先のブートデバイス定義番号を現在番号２３ｄに設定するので、前処理部４７はＭＭＩＯ−Ｌが割り当てられるルートポート２１ａを現在番号２３ｄに基づいて特定することができる。
【００６３】
次に、前処理部４７による前処理のフローについて説明する。図９は、前処理部４７による前処理のフローを示すフローチャートである。図９に示すように、前処理部４７は、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定し（ステップＳ３１）、特定したルートポート２１ａにＭＭＩＯ−Ｌを割り当てるように再設定する（ステップＳ３２）。そして、前処理部４７は、全ＰＣＩデバイス３３の設定をリセットする（ステップＳ３３）。その後、前処理部４７の設定に基づいてＭＭＩＯの割り当てが行われる。
【００６４】
このように、前処理部４７が、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定し、特定したルートポート２１ａにＭＭＩＯ−Ｌを割り当てるように再設定する。したがって、ＰＣＩ初期化部４３は、特定のルートポート２１ａの配下のＰＣＩデバイス３３だけにＭＭＩＯ−Ｌを割り当てることができる。
【００６５】
次に、中間処理部４８による中間処理のフローについて説明する。図１０は、中間処理部４８による中間処理のフローを示すフローチャートである。図１０に示すように、中間処理部４８は、ＭＭＩＯ−Ｌ不足であるか否かを判定し（ステップＳ４１）、ＭＭＩＯ−Ｌ不足でない場合には、ブート処理部４５にＯＳブートを依頼する（ステップＳ４２）。一方、ＭＭＩＯ−Ｌ不足である場合には、中間処理部４８は、異常処理を行う（ステップＳ４３）。
【００６６】
このように、中間処理部４８がＭＭＩＯ−Ｌ不足でない場合にブート処理部４５にＯＳブートを依頼するので、サーバシステム１はレガシーブートを行うことができる。
【００６７】
次に、後処理部４９による後処理のフローについて説明する。図１１は、後処理部４９による後処理のフローを示すフローチャートである。図１１に示すように、後処理部４９は、次のブートデバイスを取り出し（ステップＳ５１）、次のブートデバイスがないか否かを判定する（ステップＳ５２）。そして、後処理部４９は、次のブートデバイスがない場合には、処理を終了し、次のブートデバイスがある場合には、ブート管理テーブル２３ａの現在番号２３ｄを更新し（ステップＳ５３）、前処理へ制御を移す。
【００６８】
このように、後処理部４９が現在番号２３ｄを更新するので、ＢＩＯＳ４は次の優先順位のブートデバイスを用いてＯＳブートを行うことができる。
【００６９】
上述してきたように、実施例では、前処理部４７が、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定し、特定したルートポート２１ａの配下のＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てる設定を行う。そして、ＰＣＩ初期化部４３が、前処理部４７により特定されたルートポート２１ａの配下のＰＣＩデバイス３３へＭＭＩＯ−Ｌを割り当て、他のルートポート２１ａの配下のＰＣＩデバイス３３へＭＭＩＯ−Ｈを割り当てる。そして、中間処理部４８が、ＭＭＩＯ−Ｌ不足か否かを判定し、ＭＭＩＯ−Ｌ不足でない場合には、ブート処理部４５にブート処理を依頼する。そして、ブート処理部４５がＯＳブートを行う。したがって、ＢＩＯＳ４は、ＭＭＩＯ−Ｌが割り当てられるＰＣＩデバイス３３の数を減らし、ＭＭＩＯ−Ｌ不足の発生を抑えることができる。
【００７０】
また、実施例では、ブート処理部４５がＯＳブートに失敗すると、後処理部４９が、ブート管理テーブル２３ａの現在番号２３ｄに次の優先順位のブートデバイス定義番号を設定し、前処理部４７に制御を移す。そして、前処理部４７、ＰＣＩ初期化部４３、中間処理部４８、ブート処理部４５及び後処理部４９による処理が繰り返される。したがって、サーバシステム１は、ＯＳブートに失敗する可能性を低減することができる。
【００７１】
また、実施例では、レガシーブートの場合に、まず、ＭＭＩＯ管理部４２が、全てのＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てるように設定し、ＰＣＩ初期化部４３が、全てのＰＣＩデバイス３３にＭＭＩＯ−Ｌを割り当てる。そして、不足判定部４４が、ＭＭＩＯ−Ｌ不足であるか否かを判定し、ＭＭＩＯ−Ｌ不足である場合に、ＢＩＯＳ４は、特定のルートポート２１ａの配下のＰＣＩデバイス３３だけにＭＭＩＯ−Ｌを割り当てる処理を行う。一方、ＭＭＩＯ−Ｌ不足でない場合には、ＢＩＯＳ４は、直ちにＯＳブートを行う。したがって、ＢＩＯＳ４は、ＭＭＩＯ−Ｌの不足が発生するような数のＰＣＩデバイス３３がないサーバシステム１については、高速にＯＳブートを行うことができる。
【００７２】
また、実施例では、ブート管理テーブル２３ａは、ブートデバイス定義２３ｂ、ブートオーダー２３ｃ及び現在番号２３ｄを含み、前処理部４７は、ブート管理テーブル２３ａを用いて、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを特定する。したがって、前処理部４７は、ＭＭＩＯ−Ｌを割り当てるルートポート２１ａを簡単に特定することができる。
【００７３】
なお、実施例では、ブートデバイスがＰＣＩデバイス３３である場合について説明したが、ＰＣＩバス以外のバスに接続するデバイスをブートデバイスとしてもよい。
【００７４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７５】
（付記１）オペレーティングシステム（ＯＳ）がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置において、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定する特定部と、
メモリマップ入出力に用いられるメモリアドレスとして、前記特定部が特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当てる割当部と、
前記特定部が特定したルートポートに接続する全デバイスに前記割当部によりメモリアドレスが割り当てられたか否かを判定する第１判定部と、
前記第１判定部が前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、前記特定部が特定したブートデバイスからＯＳをレガシーブートするブート部と
を有することを特徴とする情報処理装置。
【００７６】
（付記２）前記ブート部がＯＳのレガシーブートに失敗した場合に、前記複数のブートデバイスの中の他のブートデバイスについて、前記特定部、前記割当部、前記第１判定部及び前記ブート部の処理を行うことを特徴とする付記１に記載の情報処理装置。
【００７７】
（付記３）当該情報処理装置の電源が投入された場合に当該情報処理装置が有する全てのデバイスに前記ビット幅のメモリアドレスが割り当てられたか否かを判定する第２判定部をさらに有し、
前記特定部は、前記第２判定部が前記ビット幅のメモリアドレスが割り当てられなかったデバイスがあると判定した場合に、前記１つのルートポートを特定することを特徴とする付記１又は２に記載の情報処理装置。
【００７８】
（付記４）ルートポートの情報を含めてブートデバイスを定義する情報及びブートデバイスの優先順位を示す情報を含むブート管理情報を記憶する記憶部をさらに有し、
前記特定部は、前記ブート管理情報に基づいて前記１つのルートポートを特定することを特徴とする付記１、２又は３に記載の情報処理装置。
【００７９】
（付記５）前記デバイスは、ＰＣＩデバイスであることを特徴とする付記１〜４のいずれか１つに記載の情報処理装置。
【００８０】
（付記６）オペレーティングシステム（ＯＳ）がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置によるブート方法において、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定し、
メモリマップ入出力に用いられるメモリアドレスとして、特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当て、
特定したルートポートに接続する全デバイスにメモリアドレスが割り当てられたか否かを判定し、
前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、特定したブートデバイスからＯＳをレガシーブートする
ことを特徴とするブート方法。
【００８１】
（付記７）ＯＳのレガシーブートに失敗した場合に、前記複数のブートデバイスの中の他のブートデバイスについて、前記特定する処理、前記割り当てる処理、前記判定する処理及び前記レガシーブートする処理を行うことを特徴とする付記６に記載のブート方法。
【００８２】
（付記８）前記情報処理装置の電源が投入された場合に該情報処理装置が有する全てのデバイスに前記ビット幅のメモリアドレスが割り当てられたか否かをさらに判定し、
前記特定する処理は、前記ビット幅のメモリアドレスが割り当てられなかったデバイスがあると判定した場合に、前記１つのルートポートを特定することを特徴とする付記６又は７に記載のブート方法。
【００８３】
（付記９）オペレーティングシステム（ＯＳ）がレガシーブートされるブートデバイスを含む複数のデバイスのバス接続のルートであるルートポートを複数有する情報処理装置で実行されるブートプログラムにおいて、
複数のブートデバイスの中の１つのブートデバイス及び該１つのブートデバイスが接続された１つのルートポートを特定し、
メモリマップ入出力に用いられるメモリアドレスとして、特定した１つのルートポートに接続するデバイスにレガシーブート中に使用可能なビット幅のメモリアドレスを割り当て、
特定したルートポートに接続する全デバイスにメモリアドレスが割り当てられたか否かを判定し、
前記全デバイスにメモリアドレスが割り当てられたと判定した場合に、特定したブートデバイスからＯＳをレガシーブートする
処理を前記情報処理装置に実行させることを特徴とするブートプログラム。
【００８４】
（付記１０）ＯＳのレガシーブートに失敗した場合に、前記複数のブートデバイスの中の他のブートデバイスについて、前記特定する処理、前記割り当てる処理、前記判定する処理及び前記レガシーブートする処理を前記情報処理装置に実行させることを特徴とする付記９に記載のブートプログラム。
【００８５】
（付記１１）前記情報処理装置の電源が投入された場合に該情報処理装置が有する全てのデバイスに前記ビット幅のメモリアドレスが割り当てられたか否かを判定する処理を前記情報処理装置にさらに実行させ、
前記特定する処理は、前記ビット幅のメモリアドレスが割り当てられなかったデバイスがあると判定した場合に、前記１つのルートポートを特定することを特徴とする付記９又は１０に記載のブートプログラム。
【符号の説明】
【００８６】
１    サーバシステム
２    システムボード
３    拡張ＰＣＩボックス
４    ＢＩＯＳ
２０    メインメモリ
２１    ＣＰＵ
２１ａ    ルートポート
２２    ＰＣＩエクスプレススイッチ
２３    ＮＶＲＡＭ
２３ａ    ブート管理テーブル
２３ｂ    ブートデバイス定義
２３ｃ    ブートオーダー
２３ｄ    現在番号
２４    ＲＯＭ
３１    ＰＣＩエクスプレススイッチ
３２    スロット
３３    ＰＣＩデバイス
４０ａ    ＭＭＩＯ順次割り当て起動ドライバ
４１    ＭＣ初期化部
４２    ＭＭＩＯ管理部
４３    ＰＣＩ初期化部
４３ａ    ＰＣＩバスドライバ
４４    不足判定部
４５    ブート処理部
４５ａ    レガシードライバ
４６    初期化処理部
４７    前処理部
４８    中間処理部
４９    後処理部
【図１】
2020024557.tif 000003
【図２】
2020024557.tif 000004
【図３】
2020024557.tif 000005
【図４】
2020024557.tif 000006
【図５】
2020024557.tif 000007
【図６】
2020024557.tif 000008
【図７】
2020024557.tif 000009
【図８】
2020024557.tif 000010
【図９】
2020024557.tif 000011
【図１０】
2020024557.tif 000012
【図１１】
2020024557.tif 000013
【図１２】
2020024557.tif 000014