(57)【要約】【課題】コンピュータの装置起動時間を削減し、コンピュータの利用効率を向上させる。【解決手段】複数の演算処理部のうちの少なくともいずれかの演算処理部がオペレーティングシステムの入出力部からのローディングに使用される主記憶部の第１の領域に対して初期化および診断処理の少なくとも一方を含む初期処理を実行する。さらに、第１の領域に対する初期処理が完了すると、複数の演算処理部のうちの一方の演算処理部が入出力部からオペレーティングシステムを第１の領域にローディングする。そして、複数の演算処理部のうちの他方の演算処理部は、一方の演算処理部の処理中に主記憶部のうち初期処理がなされていない残り領域の初期処理を開始する。さらにまた、ローディングが完了すると、一方の演算処理部は、オペレーティングシステムの起動を開始する。【選択図】図３
2016181106.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算処理部と、
前記複数の演算処理部のそれぞれからアクセス可能な主記憶部と、
前記複数の演算処理部のそれぞれからアクセス可能な入出力部と、を備え、
前記複数の演算処理部のうちの少なくともいずれかの演算処理部がオペレーティングシステムの前記入出力部からのローディングに使用される前記主記憶部の第１の領域に対して初期化および診断処理の少なくとも一方を含む初期処理を実行し、
前記第１の領域に対する初期処理が完了すると、前記複数の演算処理部のうちの一方の演算処理部が前記入出力部から前記オペレーティングシステムを前記第１の領域にローディングし、
前記複数の演算処理部のうちの他方の演算処理部は、前記一方の演算処理部の処理中に、前記主記憶部のうち初期処理がなされていない残り領域の前記初期処理を開始し、
前記ローディングが完了すると、前記一方の演算処理部は、前記オペレーティングシステムの起動を開始する情報処理装置。
【請求項２】
前記複数の演算処理部は、前記残り領域の前記初期処理が終了していない場合に、並行して前記残り領域の初期処理を実行する請求項１に記載の情報処理装置。
【請求項３】
前記複数の演算処理部の間で前記主記憶部の初期化処理の完了範囲をさらに通知するためのインターフェース部をさらに備える請求項１または２に記載の情報処理装置。
【請求項４】
前記一方の演算処理部は、前記オペレーティングシステムの少なくとも一部の起動が可能な第２の領域に対する初期処理が完了すると、前記オペレーティングシステムを起動し、
前記他方の演算処理部は、前記オペレーティングシステムの少なくとも一部の起動が可能な領域に対する初期処理が完了すると、前記初期処理を終了し、前記一方の演算処理部による前記オペレーティングシステムの起動時に、前記主記憶部の残りの領域の初期処理が終了していない場合に、前記残りの領域の初期処理を実行する請求項１から３のいずれか１項に記載の情報処理装置。
【請求項５】
前記一方の演算処理部は、前記オペレーティングシステムの一部を起動し、前記第２の領域のうち初期処理がなされていない領域の初期処理を行い、さらに、前記オペレーティングシステムを起動する請求項４に記載の情報処理装置。
【請求項６】
複数の演算処理部を有するコンピュータで実行可能なプログラムであって、
前記複数の演算処理部のうちの少なくともいずれかの演算処理部に、オペレーティングシステムの前記入出力部からのローディングに使用される前記主記憶部の第１の領域に対して初期化および診断処理の少なくとも一方を含む初期処理を実行させ、
前記第１の領域に対する初期処理が完了すると、前記複数の演算処理部のうちの一方の演算処理部に、前記入出力部から前記オペレーティングシステムを前記第１の領域にローディングさせ、
前記複数の演算処理部のうちの他方の演算処理部に、前記一方の演算処理部の処理中に、前記主記憶部のうち初期処理がなされていない残り領域の前記初期処理を開始させ、
前記ローディングが完了すると、前記一方の演算処理部に前記オペレーティングシステムの起動を開始させるプログラム。
【請求項７】
前記残り領域の前記初期処理が終了していない場合に、前記複数の演算処理部に、並行して前記残り領域の初期処理を実行させる請求項６に記載のプログラム
【請求項８】
前記複数の演算処理部に、前記複数の演算処理部の間のインターフェース部を介して、前記主記憶部の初期化処理の完了範囲を通知させる請求項６または７に記載のプログラム。
【請求項９】
前記一方の演算処理部に、前記オペレーティングシステムの少なくとも一部の起動が可能な第２の領域に対する初期処理が完了すると、オペレーティングシステムを起動させ、
前記他方の演算処理部に、前記オペレーティングシステムの少なくとも一部の起動が可能な領域に対する初期処理が完了すると前記初期処理を終了させ、前記一方の演算処理部による前記オペレーティングシステムの起動時に、前記主記憶部の残りの領域の初期処理が終了していない場合に、前記残りの領域の初期処理を実行させる請求項６から８のいずれか１項に記載のプログラム。
【請求項１０】
前記一方の演算処理部に、前記オペレーティングシステムの一部を起動させ、前記第２の領域のうち初期処理がなされていない領域の初期処理を行わせ、さらに、前記オペレーティングシステムを起動させる請求項９に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、およびプログラムに関する。
【背景技術】
【０００２】
コンピュータの装置起動時の処理は、例えば、ハードウェア初期化・診断処理（一般にPower On Self Test（ＰＯＳＴ）と呼ばれる処理）を行った後、入出力部（以下、Ｉ／Ｏ）を介した外部記憶媒体等からのOperating System（ＯＳ）のイメージロード処理、及び、その後のＯＳ起動処理を含む。ここで、外部記憶媒体等としては、たとえば、ディスクやネットワーク上の記憶装置が例示される。
【０００３】
初期化・診断処理においては、Central Processing Unit（ＣＰＵ）、メモリ、Ｉ／Ｏ
等を対象に処理が行われる。ところで、近年、コンピュータは、メモリ容量の増加に伴い、初期化・診断時間を要するようになってきている。又、ＯＳイメージのロード処理及びＯＳ起動処理においても、Ｉ／Ｏ性能あるいはＯＳ起動時処理量に依存して起動待ち時間に多くの時間を要することがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開２０１０／０５８４４０号公報
【特許文献２】特開２０１０−１４６１４２号公報
【特許文献３】国際公開２００８／００１６７１号公報
【特許文献４】特開２００７−９４５２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記従来の技術では、コンピュータ起動時には、ハードウェアの初期化・診断を行った後、ＯＳブート処理が開始される。ここで、ＯＳブート処理には、ＯＳイメージのロード処理およびＯＳ起動処理が含まれる。また、上記ハードウェアの初期化・診断には、すべてのメモリ領域の診断等が含まれる。ただし、ＯＳブート処理は、必ずしもすべてのメモリ領域を用いる訳ではなく、一部のメモリ領域を用いる場合が多い。以上のようにハードウェアの初期化・診断と、ＯＳブート処理とが分離して行われる第１の理由は、分離した実装の方が容易だからである。逆に、ハードウェアの初期化・診断と、ＯＳブート処理とが分離されない実装では、ＯＳブート処理のためのメモリ容量の把握が困難となることも予想される。第２の理由は、従来、メモリ診断時間の待ち時間は多少時間がかかってもやむを得ない待ち時間とし、その観点での起動時間短縮の積極的改善はなされていないからである。
【０００６】
ところで、ＯＳイメージは、上述のようにＩ／Ｏを介して外部記憶媒体等からメモリにロードされる。通常、ＯＳイメージをロードするためのＩ／Ｏ性能は、メモリへのアクセス性能と比較して低い場合が一般的である。また、ＯＳ起動処理も、起動待ち時間のうちの一定割合を占めている。しかし、ＯＳ起動処理がメモリへのアクセス性能、すなわち、メモリバンド幅を十分に活用している訳ではない。したがって、従来の技術では、Ｉ／Ｏ性能と比較して高いメモリへのアクセス性能が十分に活用されていない。開示の実施形態の課題は、コンピュータの装置起動時間を従来よりも削減し、コンピュータの利用効率を向上させることにある。
【課題を解決するための手段】
【０００７】
開示の技術の一側面は、複数の演算処理部と、複数の演算処理部のそれぞれからアクセス可能な主記憶部と、複数の演算処理部のそれぞれからアクセス可能な入出力部と、を備える情報処理装置によって例示される。本情報処理装置においては、複数の演算処理部のうちの少なくともいずれかの演算処理部がオペレーティングシステムの入出力部からのローディングに使用される主記憶部の第１の領域に対して初期化および診断処理の少なくとも一方を含む初期処理を実行する。さらに、第１の領域に対する初期処理が完了すると、複数の演算処理部のうちの一方の演算処理部が入出力部からオペレーティングシステムを第１の領域にローディングする。そして、複数の演算処理部のうちの他方の演算処理部は、一方の演算処理部の処理中に、主記憶部のうち初期処理がなされていない残り領域の初期処理を開始する。さらにまた、ローディングが完了すると、一方の演算処理部は、オペレーティングシステムの起動を開始する。
【発明の効果】
【０００８】
本情報処理装置によれば、コンピュータの装置起動時間を従来よりも削減し、コンピュータの利用効率を向上させることができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る情報処理装置の構成を例示する図である。
【図２】一実施形態に係る情報処理装置の起動時の処理を例示する図である。
【図３】比較例の情報処理装置の起動時間と本情報処理装置の起動時間を対比して例示する図である。
【図４】比較例の情報処理装置と、本情報処理装置とにおいて、起動時間を見積もった計算例である。
【図５】一実施形態に係る情報処理装置起動時の処理を例示するフローチャートである。
【図６】実施形態１における情報処理装置のファームウェアの処理を例示するフローチャートである。
【図７】実施形態１におけるＯＳ起動処理の詳細を例示するフローチャートである。
【図８】実施形態２におけるファームウェアの処理を例示するフローチャートである。
【図９】実施形態２におけるＯＳ起動処理の詳細を例示するフローチャートである。
【図１０】実施形態３の情報処理装置起動時のブート手順を例示する図である。
【図１１】実施形態３に係る情報処理装置の処理を例示するフローチャートである。
【図１２】実施形態４の情報処理装置起動時のブート手順を例示する図である。
【図１３】実施形態４に係る情報処理装置の処理を例示するフローチャートである。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施形態の構成は例示であり、本情報処理装置は実施形態の構成には限定されない。
【００１１】
図１に、本情報処理装置の構成を例示する。図１の情報処理装置は、ＣＰＵ１と、ＣＰＵ１に内部バス７を通じて接続されるメモリコントローラ２およびＩ／Ｏコントローラ４と、メモリコントローラ２がアクセスするメモリ３と、Ｉ／Ｏコントローラ４がアクセスする入出力装置（以下、Ｉ／Ｏ６）と、Read Only Memory（以下、ＲＯＭ８）とを有する。
【００１２】
ＣＰＵ１は、コアＡとコアＢを有する。ただし、ＣＰＵ１のコア数が２に限定される訳ではない。コアＡとコアＢとは、内部バス７への調停処理を実行しつつ、メモリコントローラ２およびＩ／Ｏコントローラ４に要求を発行するととともに、要求結果を取得する。また、コアＡ、コアＢ等のコア間には、非同期割り込み部が設けられる。コアＡ、コアＢ
等は、非同期割り込み部を介して相互に非同期に通信可能である。非同期割り込み部がインターフェース部の一例である。コアＡ、コアＢが複数の演算処理部の一例である。メモリ３が主記憶部の一例である。Ｉ／Ｏコントローラ４とＩ／Ｏ６とが入出力部の一例である。
【００１３】
メモリコントローラ２は、コアＡ、コアＢからの要求あるいはＩ／Ｏコントローラ４からの要求にしたがって、メモリ３にアクセスする。図１の例では、メモリ３の記憶領域は、Ｘ、Ｙ、およびＺに分かれている。なお、メモリ３は、主記憶装置とも呼ばれる。
【００１４】
Ｉ／Ｏコントローラ４は、コアＡ、コアＢ等の要求にしたがって、Ｉ／Ｏ６にアクセスし、データの入出力処理を実行する。Ｉ／Ｏ６は、例えば、周辺装置へのインターフェースである。図１では、省略されているが、Ｉ／Ｏ６には、例えば、ハードディスク装置、Solid State Drive（ＳＳＤ）、Network Interface Card（ＮＩＣ）等が接続される。
【００１５】
図１では、Ｉ／Ｏコントローラ４内に、Static Random Access Memory（以下、ＳＲＡ
Ｍ５）が例示されている。本実施形態では、主記憶装置２、ＳＲＡＭ５およびＩ／Ｏ６は、内部バス７の物理アドレス空間上のアドレスに割り当てられる。したがって、コアＡ、コアＢは、内部バス７の物理アドレス空間上のアドレスにアクセスすることで、メモリコントローラ２を介して、メモリ３にアクセスすることができる。また、コアＡ、コアＢは、内部バス７の物理アドレス空間上のアドレスにアクセスすることで、Ｉ／Ｏコントローラ４を介して、Ｉ／Ｏ６に接続される周辺装置等、あるいはＳＲＡＭ５にアクセスできる。なお、ＳＲＡＭ５は、Ｉ／Ｏコントローラ４の外部で、内部バス７に接続されていてもよい。ＳＲＡＭ５は、ファームウェア、ＯＳのシステムパラメータ等を格納する。
【００１６】
Ｉ／Ｏコントローラ４は、コアＡ、コアＢ等の要求にしたがって、Ｉ／Ｏ６からデータを取得し、メモリコントローラ２に引き渡す。また、Ｉ／Ｏコントローラ４は、コアＡ、コアＢ等の要求にしたがって、メモリコントローラ２に引き渡されるデータをＩ／Ｏ６に転送する。
【００１７】
ＲＯＭ８には、例えば、ＢＩＯＳ等のファームウェアが格納されている。ファームウェアは、情報処理装置への電源投入あるいはリセットスイッチによるリセット時にコアＡあるいはコアＢにより起動され、ハードウェアの初期化・診断、ＯＳイメージのロード、起動等を制御する。例えば、電源投入あるいはリセットスイッチによるリセットによって、コアＡ、コアＢ等の複数のコアが起動される場合に、Boot Strap Processor(BSP)と、Application Processor(AP)が選定される。BSPは、初期化・診断を含めたファームウェア処
理全体の管理を行い、他のコアであるＡＰと処理を分担して、 ファームウェアの処理を
実行する。
【００１８】
ただし、例えば、一方のコア（例えば、コアＢ）が初期化・診断を実行し、初期化・診断の完了後に、コア間非同期割り込みでコアＡを起動してもよい。また、例えば、ファームウェアによって両方のコアＡ、Ｂが起動し、一方のコア（例えば、コアＢ）が初期化・診断を行ってもよい。そして、他方のコア（例えば、コアＡ）は、共有資源を監視し、領域Ｘの初期化・診断が完了するまで待ち状態となってもよい。
【００１９】
図２に、本情報処理装置の起動時の処理を例示する。本情報処理装置は、起動前、例えば、ＢＩＯＳ等を介して、メモリ３の領域Ｘ、Ｙの容量が初期設定されている（Ｇ１）。その結果として、領域Ｘ、Ｙ以外の残り領域Ｚも初期設定される。メモリ３の領域Ｘ、Ｙ等の容量は、例えば、ＯＳのパラメータとしてＳＲＡＭ５等に保持される。
【００２０】
ここで、領域Ｘは、ＯＳイメージのロードのための領域である。ここで、領域Ｘが第１
の領域の一例である。ＯＳイメージは、実行形式とも呼ばれ、コアＡ、コアＢ等で実行されるバイナリ形式のデータである。ただし、ＯＳイメージは、例えば、自己解凍型で圧縮されたデータであってもよい。
【００２１】
また、領域Ｙは、ＯＳの起動処理のための領域である。領域Ｙは、ＯＳのシステムパラメータ、情報処理装置の管理情報等を格納する。また、ＯＳのイメージが自己解凍型で圧縮されたデータの場合には、領域Ｙは、ＯＳの実行形式を展開するための領域を含む。領域Ｙが第２の領域の一例である。なお、ファームウェア、ブートプログラム等は、例えば、領域Ｙの診断と初期化が完了すると、ＯＳの起動を開始する。ただし、領域Ｙの一部の診断と初期化が完了し、ＯＳの一部が起動可能となったときに、ＯＳの起動が開始されてもよい。本実施の形態では、ファームウェアとＯＳのプロセスとは、共有資源領域、例えば、ＳＲＡＭ５内に相互に通知できるインターフェースを有する。ただし、ファームウェアとＯＳのプロセスとの間で通知できるインターフェースとしては、ＳＲＡＭ５の代わりに、コアＡとコアＢとの間での非同期割り込み部等が用いられてもよい。
【００２２】
さらに、領域Ｚは、領域Ｘ、領域Ｙ以外の領域である。ファームウェアあるいはＯＳは、領域Ｘ、領域Ｙの容量を示すパラメータ、割り付けのアドレス情報等から、残り部分である領域Ｚの容量および割り付けのアドレス情報を認識できる。
【００２３】
情報処理装置が起動されると、ＣＰＵ１の少なくともいずれかのコアがＢＩＯＳ等のファームウェアを起動する。ＣＰＵ１のいずれかのコアあるいは、連携動作する複数のコアは、ファームウェアにより、ハードウェアの初期化・診断を行い、さらに、メモリ３の領域Ｘを初期化する（矢印Ｇ２）。例えば、コアＡがファームウェアを実行し、ＯＳイメージのロードのための領域Ｘを初期化し、診断する。コアＡは、メモリ３にアクセスするメモリバンド幅をほぼ最大限に使用して、領域Ｘを初期化し、診断すればよい。ただし、コアＡの管理下で、コアＡとコアＢが連携して、領域Ｘを初期化し、診断してもよい。
【００２４】
次に、ＣＰＵ１の一方のコア（例えば、コアＡ）がＯＳイメージのロードを実行し、他方のコア（例えば、コアＢ）が領域Ｘに続くメモリ３の領域Ｙを初期化および診断する。ＯＳイメージのロードと、領域Ｙの初期化および診断とは、コアＡ、コアＢによって並列実行される。ＯＳイメージのロードは、ＩＯ６の転送性能をほぼ最大限に使用して実行される。一方、ＩＯ６からのＯＳイメージのメモリ３への転送に伴い、領域Ｙの初期化および診断でのメモリアクセス性能は、メモリバンド幅の最大限の値から低下する。
【００２５】
例えば、コアＡは、領域Ｘの初期化・診断終了後、ＯＳイメージのローディングを開始する（矢印Ｇ３）。一方、コアＢは、コアＡによる領域Ｘの初期化・診断終了後、メモリ３の領域ＹおよびＺの初期化・診断を開始する（矢印Ｇ４）。そして、コアＡはＯＳイメージのローディングを完了する。したがって、コアＡによるＯＳイメージのローディングとコアＢによる領域ＹおよびＺの初期化・診断とは並列で実行される。
【００２６】
次に、コアＡは、ＯＳイメージのロードを完了し、共有資源であるＳＲＡＭ５に設けられたコアＢとのインターフェースから領域Ｙの初期化・診断の完了を認識すると、ＯＳの起動処理を開始する（Ｇ５）。共有資源であるＳＲＡＭ５がインターフェース部の一例である。一方、コアＢは領域Ｙの初期化・診断の完了後、さらに、領域Ｚの初期化・診断を継続する（矢印Ｇ６）。したがって、コアＡによるＯＳの起動処理とコアＢによる領域Ｚの初期化・診断とは並列で実行される。そして、コアＢは、領域Ｚの初期化・診断を完了する。
【００２７】
その後、ＯＳが起動されたコア（例えば、コアＡ）は、メモリ３の領域Ｚに関するＯＳの設定を行う。例えば、コアＡは、領域Ｚの初期化・診断完了に伴い増加した領域を管理
するためのページテーブル等のＯＳ制御データを設定する。ページテーブル等の設定により、ＯＳの記憶管理、例えば、仮想アドレス空間と物理アドレス空間の対応付け等がなされる。
【００２８】
図３に、比較例の情報処理装置の起動時間と本情報処理装置の起動時間を対比して例示する。図３の上段は、比較例の情報処理装置の起動時の処理を例示する。また、図３の下段は、本情報処理装置の起動時の処理を例示する。上段、下段ともに、横軸は時間軸であり、縦軸は、各処理でのメモリ３アクセス時の使用帯域を示す。
【００２９】
比較例の情報処理装置は、メモリ３の全領域（Ｘ、Ｙ、Ｚ）の初期化・診断を実行し、次にＯＳイメージのロードを実行し、さらに、ＯＳを起動する。比較例の処理では、メモリ３の初期化・診断は、メモリ３への使用帯域の最大限に近い帯域を使用して実行できる。しかし、ＯＳイメージのロードおよびＯＳ起動では、Ｉ／Ｏ６でのアクセス速度がボトルネックとなり、メモリ３へのアクセス速度は、使用可能帯域（メモリバンド幅，メモリ帯域とも呼ぶ）の最大値から大きく低下することになる。
【００３０】
一方、本情報処理装置は、まず、ＯＳイメージのローディングのための領域Ｘの初期化・診断を実行する。次に、本情報処理装置は、ＯＳイメージのローディングと、ＯＳの起動のための領域Ｙの初期化・診断とを並列に実行する。ＯＳイメージのローディングと、ＯＳの起動のための領域Ｙの初期化・診断とを並列に実行すると、ＯＳイメージのローディングに伴い、領域Ｙの初期化・診断でのメモリ３へのアクセス速度は低下する。しかしながら、ＯＳイメージのローディングだけを実行する比較例の場合のように、Ｉ／Ｏ６の性能がボトルネックになることによるメモリ３へのアクセス速度の低下は抑制できる。さらに、本情報処理装置は、ＯＳの起動と、メモリ３の残り領域Ｚの初期化・診断とを並列に実行する。ＯＳの起動と、メモリ３の残り領域Ｚの初期化・診断とを並列に実行すると、残り領域Ｚの初期化・診断でのメモリ３へのアクセス速度は低下する。しかしながら、起動処理全体としてのアクセス効率の低下が抑制できる。以上のような並列処理の結果、図３に矢印で示す期間に相当する時間が短縮され、本情報処理装置の起動が速くなる。
【００３１】
図４は、比較例の情報処理装置と、本情報処理装置とにおいて、起動時間を見積もった計算例である。図４では、領域Ｘが全体の１％であり、領域Ｙが１９％であり、領域Ｚが８０％であると仮定する。また、Ｉ／Ｏ６の性能（帯域幅）がメモリアクセス時の使用可能帯域（メモリバンド幅）の１０％であると仮定する。さらに、ＯＳ起動時のメモリ使用帯域をメモリバンド幅の４０％であると仮定する。また、メモリへのアクセス速度（メモリバンド幅）は１（無次元）であると仮定する。さらに、ＯＳ起動時間を１５０であると仮定する。なお、図４では、メモリの初期化・診断を単に、「メモリ診断」と表している。
【００３２】
比較例の場合、メモリ３の初期化・診断時間は、１００％の容量をメモリ帯域の１００％を利用して実行するので、１００／１＝１００（無次元）となる。また、ＯＳイメージのロード時間は、１％の容量をメモリ帯域の１０％のＩＯ性能でロードすることになるので、１／０．１＝１０となる。なお、ＯＳ起動時間は、仮定により１５０である。したがって、比較例では、メモリ３の初期化・診断、ＯＳイメージのロード、およびＯＳ起動に要する時間は１００＋１０＋１５０＝２６０となる。
【００３３】
一方、本情報処理装置では、領域Ｘの初期化・診断時間は、１％の領域をメモリ帯域の１００％を使用して実行するので、１／１＝１である。ここで、領域Ｘの初期化・診断は、コアＡ、コアＢのいずれが行ってもよい。
【００３４】
また、ＯＳイメージのロード時間１０に対して、領域Ｙの初期化・診断時間は、１９％
の容量をメモリ帯域の９０％を利用して実行するので、１９／０．９＝２１となる。したがって、並列実行されるＯＳイメージのロードと領域Ｙの初期化・診断とでは、領域Ｙの初期化・診断時間が長くなる。図４では、ＯＳイメージのロードは、コアＡによって行われ、領域Ｙの初期化・診断時間は、コアＢにより行われる。ただし、コアＡが初期化・診断を行い、コアＢがＯＳイメージのロードを行ってもよい。
【００３５】
さらに、残り領域Ｚの初期化・診断時間は、８０％の容量をメモリ帯域の６０％を利用して行うので、８０／０．６＝１３３（＜１５０）となる。したがって、本情報処理装置によるメモリの初期化・診断開始からＯＳ起動完了までの時間は、１＋２１＋１５０＝１７２となり、比較例に対して、時間８８だけ削減される。
【００３６】
図５に、本情報処理装置起動時の処理を例示する。本情報処理装置は、電源投入あるいはリセット等により、図５の処理を開始する。まず、本情報処理装置のＣＰＵ１（コアＡまたはコアＢ）は、メモリ３の領域Ｘの初期化・診断を実行する（Ｓ１）。ただし、図５では、初期化・診断を単に「診断」と表している。なお、本実施形態の図６以下の図面でも同様に、初期化・診断を単に「診断」と表す。ここで、初期化・診断が初期処理の一例である。Ｓ１の処理が、オペレーティングシステムの前記入出力部からのローディングに使用される前記主記憶部の第１の領域に対して初期化および診断処理の少なくとも一方を含む初期処理を実行することの一例である。
【００３７】
そして、ＣＰＵ１（コアＡまたはコアＢ）がメモリ３の領域Ｘの初期化を完了すると、例えば、コアＢは、例えば、メモリ３の領域Ｙの初期化・診断を実行する（Ｓ３）。Ｓ３の処理が、一方の演算処理部の処理中に、前記主記憶部のうち初期処理がなされていない残り領域の前記初期処理を開始することの一例である。また、Ｓ３の処理を実行するコアＢが他方の演算処理部の一例である。このとき、例えば、コアＡは、ＯＳイメージをロードする（Ｓ８）。ＯＳイメージをロードするＳ８の処理がローディングの一例である。Ｓ８の処理を実行するコアＡが一方の演算処理部の一例である。
【００３８】
そして、コアＢがメモリ３の領域Ｙの初期化・診断を完了すると（Ｓ４でＹｅｓ）、例えば、コアＢは、さらにメモリ領域Ｚの初期化・診断を実行する（Ｓ５）。Ｓ４でＹｅｓの場合が、オペレーティングシステムの少なくとも一部の起動が可能な第２の領域に対する初期処理が完了することの一例である。このとき、例えば、コアＡは、ＯＳ起動処理を開始する（Ｓ９）。Ｓ９の処理が、ローディングが完了すると、前記一方の演算処理部は、前記オペレーティングシステムの起動を開始することの一例である。
そして、コアＢは、さらにメモリ領域Ｚの初期化・診断を完了すると、ＣＰＵ１（コアＡまたはコアＢ）がメモリＺに関係するＯＳ起動処理を実行する（Ｓ７）。
【００３９】
＜実施形態１＞
以下、図６および図７により、実施形態１に係る情報処理装置の処理を説明する。実施形態１は、上記図１から図５に示した情報処理装置の処理をさらに具体化する。したがって、情報処理装置の構成は、図１、図２に例示したものと同一である。図６は、情報処理装置のファームウェアの処理を例示するフローチャートである。情報処理装置への電源投入、あるいは、リセットによって、ＣＰＵ１（例えば、コアＡ）は、図６の処理を開始する。なお、電源投入、あるいは、リセット後にファームウェアの実行するコアは、コアＡ、コアＢのいずれか、または両方であってもよい。
【００４０】
ＣＰＵ１は、まず、情報処理装置のハードウェアの診断を開始する（Ｆ１）。ハードウェアの診断には、メモリ３以外の周辺装置、例えば、Ｉ／Ｏコントローラ４等の設定、メモリ３の初期化・診断が含まれる。Ｆ１の処理が、オペレーティングシステムの前記入出力部からのローディングに使用される前記主記憶部の第１の領域に対して初期化および診
断処理の少なくとも一方を含む初期処理を実行することの一例である。ＣＰＵ１がメモリ３の領域Ｘの初期化・診断を完了すると（Ｆ２）、例えば、コアＡは、メモリ３の領域ＸにＯＳイメージのロードを開始する（Ｆ３）。Ｆ３の処理が、第１の領域に対する初期処理が完了すると、前記複数の演算処理部のうちの一方の演算処理部が前記入出力部から前記オペレーティングシステムを前記第１の領域にローディングすることの一例である。
【００４１】
コアＡは、ＯＳイメージのローディングを完了すると（Ｆ４）、コアＢによるメモリ３の領域Ｙの診断完了を確認する（Ｆ５）。コアＢによるメモリ３の領域Ｙの診断完了は、例えば、図１に例示したＳＲＡＭ５等のコア間の共有資源上のインターフェース、あるいはコア間非同期割り込み等を通じて、コアＢからコアＡに通知される。メモリ３の領域Ｙの診断が未完了のとき、コアＡは、制御をＦ５に戻す。一方、メモリ３の領域Ｙの診断が完了すると、コアＡは、ＯＳ起動処理を開始する。すなわち、領域ＸにロードされたＯＳに制御を移行する（Ｆ７）。Ｆ７の処理が、ローディングが完了すると、前記一方の演算処理部（コアＡ）が、前記オペレーティングシステムの起動を開始することの一例である。
【００４２】
一方、ＣＰＵ１がメモリ３の領域Ｘの初期化・診断を完了すると（Ｆ２）、例えば、コアＢは、メモリ３の領域Ｙの診断を開始する（Ｆ８）。そして、コアＢは、メモリ３の領域Ｙの診断が完了すると、コア間の共有資源上のインターフェースに完了を記録する（Ｆ９）。
【００４３】
次に、コアＢは、メモリ３の残り領域Ｚの初期化・診断を開始する（ＦＡ）。そして、コアＢがメモリ３の領域Ｚの初期化・診断を完了すると、コア間の共有資源上のインターフェースに完了を記録する（ＦＢ）。なお、コアＢは、コア間非同期割り込み等を通じて、コアＡに完了を通知してもよい。
【００４４】
図７は、ＯＳ起動処理（図６のＦ７）の詳細を例示するフローチャートである。この処理では、コアＡは、例えば、メモリ３の領域Ｘ＋Ｙの範囲でのＯＳ起動処理を実行する（Ｋ１）。ここで、領域Ｘ＋Ｙの範囲でのＯＳ起動処理は、例えば、ページテーブルをメモリ３の領域Ｘ＋Ｙの範囲で設定する処理、領域Ｘ＋Ｙの範囲にＯＳのプロセスの管理情報を設定する処理等である。
【００４５】
次に、コアＡは、メモリ３の領域Ｚの診断が完了したか否かを判定する（Ｋ３）。Ｋ３の判定方法は、図６のＦ５と同様である。領域Ｚの診断が完了していない場合、コアＡは、制御をＫ２に戻す。一方、領域Ｚの診断が完了した場合には、コアＡは、メモリ３の領域Ｚに関するＯＳ起動処理を実行する（Ｋ４）。領域Ｚに関するＯＳ起動処理は、例えば、領域Ｚについてのページテーブルの設定等である。
【００４６】
以上述べたように、実施形態１では、ＣＰＵ１（例えば、コアＡ）がＯＳイメージのローディングのための領域Ｘの診断が完了すると、ＯＳイメージを領域Ｘにローディングする。また、コアＡがＯＳイメージを領域Ｘにローディングする間、コアＢが領域Ｙと領域Ｚの初期化・診断を実行する。したがって、実施形態１の情報処理装置では、ＯＳイメージのローディングのための領域Ｘだけの初期化・診断だけ実行すれば、従来よりも早期にＯＳイメージを領域Ｘにローディングする処理と領域Ｙと領域Ｚの初期化・診断との並列処理を実行できる。コアＡとコアＢとは、非同期割り込み部あるいはＳＲＡＭ５等の共有資源を用いて、主記憶部の初期化処理の完了範囲を授受できる。
【００４７】
さらに実施形態１によれば、コアＢによる領域Ｙの初期化・診断が完了すると、コアＡはコアＢの処理と並列して、ＯＳの起動処理を開始できる。したがって、実施形態１の情報処理装置は、さらに、コアＡとコアＢとの並列処理で、ＯＳを起動できる。以上のよう
に、実施形態１によれば、情報処理装置は、従来よりも早期にコアＡとコアＢの並列処理を開始できる。
【００４８】
また、情報処理装置は、ＯＳイメージを領域Ｘにローディングする処理と領域Ｙと領域Ｚの初期化・診断との並列処理により、メモリ３へのアクセス効率を改善できる。つまり、ＯＳイメージを領域Ｘにロードする処理において、Ｉ／Ｏ６へのアクセス速度に起因してメモリ３へのメモリ帯域を効率的に使用できないことにより起動時間が全体として長くなる場合がある。しかし、実施形態１の処理では、領域Ｙと領域Ｚの初期化・診断により、ＯＳイメージロード時に、メモリ３へのアクセスの帯域を従来よりも効率よく使用できることにより起動時間が全体として短縮できる。
【００４９】
また、情報処理装置は、ＯＳ起動処理と領域Ｚの初期化・診断との並列処理により、メモリ３へのアクセス効率を改善できる。つまり、ＯＳ起動処理において、Ｉ／Ｏ６へのアクセス速度に起因して、メモリ３へのアクセスにおいて、メモリ３へのアクセスの帯域が十分に使用できない場合がある。しかし、実施形態１の処理では、領域Ｚの初期化・診断により、ＯＳ起動時に、メモリ３へのアクセスの帯域が従来よりも効率よく使用でき、起動時間が全体として短縮することが可能となる。
【００５０】
＜実施形態２＞
図８、図９により、本情報処理装置による実施形態２の処理を説明する。実施形態２の場合においても、情報処理装置の構成は、図１、図２に例示したものと同一である。実施形態１では、コアＢが領域Ｙの初期化・診断を完了すると、残り領域Ｚの初期化・診断を継続した。一方、実施形態２では、コアＢが共有資源を通じて時々刻々、例えば、所定間隔で初期化・診断完了済みの領域の情報をコアＡに通知し、コアＡは、ＯＳの一部起動が可能となると、ＯＳを起動する。さらに、ＯＳの起動開始後、メモリ３に初期化・診断が未完了の領域があると、コアＡ、コアＢは、初期化・診断が未完了の領域の初期化・診断を実行する。実施形態２の他の手順は、図６および図７の処理と同様である。そこで、実施形態２の処理のうち、実施形態１と同一の処理については、図６および図７と同一の符合を付して説明を省略する。
【００５１】
図８は、実施形態２におけるファームウェアの処理を例示するフローチャートである。図８において、上述のようにＦ１からＦ４は、図６と同様であるので説明が省略される。例えば、コアＡは、ＯＳイメージのロードを完了すると、ＯＳの一部起動が可能であるか否かを判定する（Ｆ１５）。ＯＳの一部起動が可能であるか否かは、共有資源を通じて、コアＢから通知される初期化・診断完了済みの領域の情報から判定する。例えば、図２から図４および実施形態１で説明したメモリ３の領域のうち、ＯＳの起動のための領域Ｙにおいて初期化・診断が完了すれば、コアＡは、ＯＳの一部起動が可能と判断できる。ただし、コアＡは、ＯＳの起動のための領域Ｙよりも狭い領域の初期化・診断が完了しても、ＯＳの一部が起動可能と判断してもよい。例えば、ＯＳの起動時の少なくとも１つのプロセスが実行可能な領域の初期化・診断が完了すれば、コアＡは、ＯＳの一部起動が可能と判断できる。したがって、図８では省略しているが、コアＢによるメモリ３の領域の初期化・診断が時々刻々進行するに伴い、コアＡは、ＯＳの一部起動が可能と判断できる範囲を時々刻々拡げていってもよい。そして、コアＡは、ＯＳの一部起動が可能と判断すると、ＯＳ起動処理を開始する（Ｆ１６）。Ｆ１５−Ｆ１６の処理が、オペレーティングシステムの少なくとも一部の起動が可能な第２の領域に対する初期処理が完了すると、前記オペレーティングシステムを起動することの一例である。Ｆ１５−Ｆ１６の処理を実行するコアＡが一方の演算処理部の一例である。
【００５２】
一方、コアＡによるメモリ３の領域ＸにＯＳのイメージをロードする処理（Ｆ３）と並列に、コアＢは、メモリ３の領域ＹとＺの初期化・診断を開始する（Ｆ１８）。そして、
コアＢは、メモリ３の初期化・診断時、診断完了済み領域の途中情報を所定の時間間隔で、あるいは所定のメモリ領域粒度の完了ごとに共有資源に記録する（Ｆ１９）。以下、所定の時間間隔、所定のメモリ領域粒度の完了ごとのタイミング等を含めて、所定間隔という。
【００５３】
図９は、ＯＳ起動処理（図８のＦ１６）の詳細を例示するフローチャートである。この処理では、ＣＰＵ１の例えば、コアＡは、共有資源から診断完了済みのメモリ３の領域情報を取得する（Ｋ１１）。そして、例えば、コアＡは、メモリ３の領域Ｙの初期化・診断が完了したか否かを判定する（Ｋ１２）。そして、領域Ｙの初期化・診断が完了していない場合、コアＡは、領域Ｙの診断未完了領域の初期化・診断を開始する（Ｋ１３）。そして、コアＡは、領域Ａの診断未完領域の初期化・診断を完了する（Ｋ１４）。
【００５４】
次にコアＡは、ＯＳの起動処理を実行する（Ｋ１５）。そして、ＯＳの起動処理が完了すると、コアＡは、メモリ３の領域Ｚの診断完了を共有資源のフラグで確認する（Ｋ１６）。そして、メモリ３の領域Ｚの診断が完了していない場合、コアＡは制御をＫ１６に戻す。一方、メモリ３の領域Ｚの診断が完了した場合、コアＡはメモリＺに関するＯＳ起動処理を実行する（Ｋ１８）。Ｋ１２からＫ１５の処理が、オペレーティングシステムの一部を起動し、前記第２の領域のうち初期処理がなされていない領域の初期処理を行い、さらに、前記オペレーティングシステムを起動することの一例である。
【００５５】
一方、コアＡによるメモリ３の領域Ｙの診断の完了判定（Ｋ１２）からＯＳ起動処理（Ｋ１５）までの処理と並列に、コアＢは、メモリ３の残り領域Ｚの初期化・診断が完了したか否かを判定する（Ｋ１９）。そして、領域Ｚの初期化・診断が完了していない場合には、コアＢは、領域Ｚの診断未完了領域の初期化・診断を開始する（Ｋ２０）。そして、コアＢは、領域Ｚの診断未完領域の初期化・診断を完了する（Ｋ２１）。次にコアＢは、メモリ３の領域Ｚの診断完了を共有資源のフラグに記録する（Ｋ２２）。Ｋ１２からＫ１４の処理、Ｋ１９からＫ２１の処理は、前記残り領域の前記初期処理が終了していない場合に、並行して前記残り領域の初期処理を実行することの一例である。また、Ｋ１９からＫ２１の処理は、一方の演算処理部による前記オペレーティングシステムの起動時に、前記主記憶部の残りの領域の初期処理が終了していない場合に、前記残りの領域の初期処理を実行することの一例である。このような図８、図９の処理によれば、例えば、コアＡ、コアＢは、Ｆ１、Ｆ１８等の処理によって、残り領域（Ｙ、あるいＺ）の初期化・診断が完了していない場合に、相手コアの処理と並行して残り領域の初期化・診断を行う（Ｋ１３、Ｋ１４、Ｋ２０、Ｋ２１）。したがって、複数コアがメモリ帯域を効率的に利用しつつ、起動処理を並列に実行することにより、早期にＯＳを起動できる。
【００５６】
以上述べたように、実施形態２によれば、コアＢは、ファームウェアの実行により、領域Ｙと領域Ｚの初期化・診断を実行しつつ、所定間隔ごとに診断完了済み領域の途中情報を共有資源に記録する。そして、ＯＳの起動が可能となったときに、コアＢはファームウェアの処理を終了し、ＯＳによる制御へ移行する。したがって、ＯＳを起動するコアＡは、領域Ｙの初期化・診断が完了する前、つまり実施形態１よりも早期に、少なくともＯＳの一部を起動できる。このような状態でＯＳを起動するコアＡ、コアＢは、ＯＳ起動中に、ＯＳの処理にしたがって、メモリ３の残り領域の初期化・診断が完了しているか否かを判定する。
【００５７】
例えば、図９では、コアＡは、ＯＳに制御が移行後、領域Ｙの初期化・診断が完了していないと判断した場合には、領域Ｙの初期化・診断を行って、ＯＳ起動処理を実行する。また、コアＢは、制御をＯＳに移行した後、領域Ｚの診断が完了していない場合には、領域Ｚの初期化・診断を行う。したがって、実施形態２の処理では、ＣＰＵ１（コアＡ、コアＢ）は、実施形態１よりも少なくともＯＳの一部を早期に起動できるとともに、ＯＳの
起動中に、あるいはＯＳの起動後に、初期化・診断未完了の領域を初期化・診断できる。
【００５８】
また、実施形態２によれば、コアＡとコアＢとは、残り領域（Ｙ、Ｚ）の初期化・診断が完了していない場合に、それぞれ互いに相手の処理と並行して残り領域の初期化・診断を実行できる。例えば、コアＡによるＫ１３、Ｋ１４、Ｋ１５の処理は、コアＢによるＫ２０、Ｋ２１の処理と並行して実行される。
【００５９】
＜実施形態３＞
図１０および図１１を参照して、実施形態３に係る情報処理装置の処理を説明する。実施形態３では、パーソナルコンピュータ、サーバ等に搭載されるＯＳ起動時の処理を説明する。図１０は、実施形態３の情報処理装置起動時のブート手順を例示する図である。実施形態３では、電源投入、あるいはリセット等の操作により、例えば、ＣＰＵ１（例えば、コアＢ）は、Read Only Memory(ＲＯＭ)に格納されたファームウェア（例えば、ＢＩＯＳ）を起動する。コアＢは、ファームウェアを実行することにより、ＣＰＵ１自身および内部バス７を通じて接続されるメモリコントローラ２、Ｉ／Ｏコントローラ４等にアクセスして、様々な確認処理、情報の取得等を実行する。さらに、コアＡは、ファームウェアによりＰＯＳＴ処理を実行し、メモリおよび周辺機器の検出、初期化、および設定等を行う。
【００６０】
実施形態３では、メモリ３の初期化・診断処理において、まず、メモリ３の一部、すなわち、ブートストラップローダの起動のための領域Ｘ１の初期化・診断が完了する。すると、ファームウェアを実行するコアＢは共有資源上のフラグ、あるいは、コア間非同期割り込み等の手段により、コアＡからブートストラップローダをロードし、起動する。なお、コアＢは、そのまま全メモリの初期化・診断を続行するとともに、共有資源に所定間隔ごとに初期化・診断が完了した完了済領域の途中情報を記録して行く。
【００６１】
そして、コアＡは、領域Ｘ２の初期化・診断が完了したと判断すると、ハードディスクのブートセクタのＩＰＬを領域Ｘ２にロードし、領域Ｘ２上のＩＰＬのエントリポイントにジャンプする。さらに、コアＡは、ＩＰＬを起動すると、共有資源への記録から、カーネルローダ起動のための領域Ｘ３の初期化・診断が完了したか否かを判定する。そして、コアＡは、共有資源への記録からカーネルロード起動のための領域Ｘ３の初期化・診断が完了したか否かを判定する。
【００６２】
そして、コアＡは、領域Ｘ３の初期化・診断が完了したと判断すると、ハードディスクのハードディスク上の所定領域（例えば、ルートディレクトリ中）のカーネルローダを領域Ｘ３にロードし、領域Ｘ３上のカーネルローダのエントリポイントにジャンプする。さらに、コアＡは、カーネルローダを起動すると、共有資源への記録から、カーネルイメージロードのための領域Ｘ４の初期化・診断が完了したか否かを判定する。
【００６３】
そして、コアＡは、領域Ｘ４の初期化・診断が完了したと判断すると、ハードディスク上の所定領域（例えば、ルートディレクトリ中）のカーネルイメージを領域Ｘ４にロードし、領域Ｘ４上のカーネルのエントリポイントにジャンプする。さらに、コアＡは、カーネルをロードし、エントリポイントにジャンプすると、共有資源への記録から、カーネル起動のための領域Ｘ５の初期化・診断が完了したか否かを判定する。
【００６４】
そして、コアＡは、領域Ｘ５の初期化・診断が完了したと判断すると、カーネルの起動を開始する。すなわち、コアＡは、例えば、領域Ｘ５についてのページテーブルを設定する。また、コアＡは、様々なＯＳのプロセス、例えば、記憶管理、デバイスの管理等を起動する。
【００６５】
図１１は実施形態３に係る情報処理装置の処理を例示するフローチャートである。この処理では、例えば、電源投入、あるいはリセット等の操作により起動される。例えば、ＣＰＵ１のコアＢは、ハードウェアの診断を開始する（Ｆ１）。そして、コアＢは、メモリ３の領域Ｘ１の診断を完了する（Ｆ３２）。領域Ｘ１は、例えば、ブートストラップローダを起動可能な容量のメモリ３の領域である。
【００６６】
すると、コアＢは、例えば、コア間非同期割り込み等の手段により、コアＡがブートストラップローダを起動するように指示する。すると、コアＡは、ブートストラップローダを領域Ｘ１にロードし、領域Ｘ１上のブートストラップローダのエントリポイントにジャンプする。この処理で、コアＡはブートストラップローダを起動する（Ｆ３３）。
【００６７】
次に、コアＡは、ＩＰＬを起動するためのメモリ３の領域Ｘ２の初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ３４）。そして、ＩＰＬの起動が可能である場合、コアＡは、ＩＰＬを領域Ｘ２にロードし、そのエントリポイントにジャンプすることで、ＩＰＬを起動する（Ｆ３５）。
【００６８】
次に、コアＡは、カーネルローダを起動するためのメモリ３の領域Ｘ３の初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ３６）。そして、カーネルローダの起動が可能である場合、コアＡは、カーネルローダを領域Ｘ３にロードし、そのエントリポイントにジャンプすることで、カーネルローダを起動する（Ｆ３７）。
【００６９】
次に、コアＡは、カーネルイメージをロードするためのメモリ３の領域Ｘ４の初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ３８）。そして、カーネルイメージのロードが可能である場合、コアＡは、カーネルイメージを領域Ｘ４にロードする（Ｆ３９）。
【００７０】
次に、コアＡは、カーネルを起動するためのメモリ３の領域Ｙの初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ４０）。そして、カーネルの起動が可能である場合、コアＡは、カーネルのエントリポイントにジャンプすることで、カーネルを起動する（Ｆ４１）。
【００７１】
一方、コアＡによるブートストラップローダの起動（Ｆ３３）からカーネル起動処理（Ｆ４１）までの処理と並列に、コアＢは、メモリ３の残り領域の診断を開始する（Ｆ４２）。次にコアＢは、メモリ３の残り領域の診断完了の途中情報を所定間隔で共有資源に記録する（Ｆ４３）。そして、コアＢは、残り領域の初期化・診断が終了したか否かを判定する。残り領域の初期化・診断が終了していない場合、コアＢは制御をＦ４２に戻す。また、残り領域の初期化・診断が終了した場合、コアＢは処理を終了する。
【００７２】
以上述べたように、実施形態３の情報処理装置のＣＰＵ１、例えば、コアＢは、メモリ３の領域の初期化・診断に伴い、診断完了の途中情報を所定間隔で共有資源に記録する。一方、コアＡは、共有資源に記録された診断完了の途中情報から、ブートストラップローダ、ＩＰＬ、カーネルローダ等の起動の可否を判断し、メモリ３の初期化・診断と並列に、ブートストラップローダ、ＩＰＬ、カーネルローダ等を起動する。さらに、コアＡは、カーネルイメージロードの可否、カーネルの起動の可否を判定し、カーネルイメージのロード、カーネルの起動を実行する。したがって、実施形態３の情報処理装置は、実施形態１、２よりもさらに細かく、ファームウェア、複数段階のブートプログラムの起動の可否を判定し、メモリ３の初期化・診断と並列するファームウェア、複数段階のブートプログラムを起動する処理を早期に開始できる。
【００７３】
なお、実施形態３では、ハードウェアの初期化・診断、メモリ３の領域Ｘ１の初期化・診断と、初期化・診断完了による相手コアへの通知をコアＢが行った。しかし、これらの処理をコアＡが行ってもよいし、コアＡとコアＢが連携して行ってもよい。
【００７４】
＜実施形態４＞
図１２、および図１３を参照して、実施形態４に係る情報処理装置の処理を説明する。実施形態４では、パーソナルコンピュータ、サーバ等に搭載される他のＯＳ起動時の処理を説明する。図１２は、実施形態４の情報処理装置起動時のブート手順を例示する図である。実施形態４の情報処理装置でも、電源投入、あるいはリセット等の操作により、例えば、ＣＰＵ１（例えば、コアＢ）は、ＲＯＭ８に格納されたファームウェア（例えば、ＢＩＯＳ）を起動する。これらの処理は、実施形態３と同様である。
【００７５】
実施形態４では、ブートプログラムは、例えば、STAGE 1、STAGE ２の２段階に分かれ
ている。ただし、実施形態４において、ブートプログラムの段階が２段階に限定される訳ではない。また、実施形態４でも実施形態３と同様、情報処理装置のＣＰＵ１、例えば、コアＢは、メモリ３の領域の初期化・診断に伴い、診断完了の途中情報を所定間隔で共有資源に記録する。一方、コアＡは、共有資源に記録された診断完了の途中情報から、STAGE 1、STAGE 2の起動可否を判断し、順次STAGE 1、STAGE 2を起動する。さらに、コアＡは、カーネルイメージロードの可否、カーネルの起動の可否を判定し、カーネルイメージのロード、カーネルの起動を実行する。
【００７６】
図１３は実施形態４に係る情報処理装置の処理を例示するフローチャートである。例えば、電源投入、あるいはリセット等の操作により、ＣＰＵ１のコアＢは、ハードウェアの診断を開始する（Ｆ１）。そして、コアＢは、メモリ３の領域Ｘ１１の診断を完了する（Ｆ５２）。領域Ｘ１１は、例えば、STAGE 1を起動可能な容量のメモリ３の領域である。
【００７７】
すると、コアＢは、例えば、コア間非同期割り込み等の手段により、コアＡがSTAGE 1
を起動するように指示する。すると、コアＡは、STAGE 1を領域Ｘ１１にロードし、領域
Ｘ１１上のSTAGE 1のエントリポイントにジャンプする。この処理によって、コアＡはSTAGE 1を起動する（Ｆ５３）。
【００７８】
次に、コアＡは、STAGE 2の先頭セグメントを起動するためのメモリ３の領域Ｘ１２の
初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ５４）。そして、STAGE 2の先頭セグメントの起動が可能である場合、コアＡは、STAGE 2の先頭セグメントを領域Ｘ１２にロードし、そのエントリポイントにジャンプすることで、STAGE 2の先頭セグメントを起動する（Ｆ５５）。
【００７９】
次に、コアＡは、STAGE 2の後続セグメントを起動するためのメモリ３の領域Ｘ１３の
初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ５６）。そして、STAGE 2の後続セグメントの起動が可能である場合、コアＡは、STAGE 2の後続セグメントを領域Ｘ１３にロードし、そのエントリポイントにジャンプすることで、STAGE 2の後続セグメントを起動する（Ｆ５７）。なお、図１３では、STAGE 2の後続セグメントをＦ５６、Ｆ５７の判定と処理で起動している。しかし、後続セグメントは、複数に分離され、複数回に分けてロード、および起動されてもよい。後続セグメントが複数に分離される場合には、Ｆ５６、Ｆ５７に相当する処理が複数回繰り返されることになる。
【００８０】
次に、コアＡは、STAGE 2により以下の処理を実行する。すなわち、コアＡは、カーネ
ルイメージをロードするためのメモリ３の領域Ｘ１４の初期化・診断が完了したか否かを
共有資源に記録されたコアＢからの通知により判定する（Ｆ５８）。そして、カーネルイメージのロードが可能である場合、コアＡは、カーネルを領域Ｘ４にロードする（Ｆ５９）。なお、実施形態４では、カーネルイメージは、例えば、自己解凍形式で圧縮されてイメージロードされる。そして、次の起動処理では、カーネル自身が自己解凍しつつ、自身のイメージをメモリ３に展開する。
【００８１】
すなわち、コアＡは、カーネルを起動するためのメモリ３の領域Ｙの初期化・診断が完了したか否かを共有資源に記録されたコアＢからの通知により判定する（Ｆ６０）。そして、カーネルの起動が可能である場合、コアＡは、カーネルのエントリポイントにジャンプすることで、カーネルを起動する（Ｆ６１）。そして、コアＡは、カーネル自身によって自己解凍しつつ、カーネルイメージをメモリ３に展開する。
【００８２】
一方、コアＡによるSTAGE 1のロードおよび起動（Ｋ５３）からカーネル起動処理（Ｆ
６１）までの処理と並列に、コアＢは、メモリ３の残り領域の診断を開始する（Ｆ４２〜Ｆ４４）。Ｆ４２からＦ４４の処理は図１１と同様であるので、その説明を省略する。
【００８３】
以上述べたように、実施形態４の情報処理装置のＣＰＵ１、例えば、コアＢは、メモリ３の領域の初期化・診断に伴い、診断完了の途中情報を所定間隔で共有資源に記録する。一方、コアＡは、共有資源に記録された診断完了の途中情報から、STAGE 1、STAGE 2の起動の可否を判断し、メモリ３の初期化・診断と並列に、STAGE 1、STAGE 2をロードし、起動する。さらに、コアＡは、カーネルイメージロードの可否、カーネルの起動の可否を判定し、カーネルイメージのロード、カーネルの起動を実行する。
【００８４】
なお、実施形態４でも実施形態３と同様、ハードウェアの初期化・診断、メモリ３の初期化・診断と、初期化・診断完了による相手コアへの通知をコアＢが行った。しかし、これらの処理をコアＡが行ってもよいし、コアＡとコアＢが連携して行ってもよい。
【００８５】
以上述べたように、実施形態４の情報処理装置は、実施形態３と同様、実施形態１、２よりもさらに細かく、ファームウェア処理指示、複数段階のブートプログラムの起動可否判定を行う。これにより、メモリ３の初期化・診断処理と複数段階のブートプログラムを起動する処理をさらに細かく並列に行うことができ、ブートプログラムを早期に開始し、システム全体として起動時間を短縮することができる。
【００８６】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラム、ファームウェア等をコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００８７】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、Compact Disk（ＣＤ）−ＲＯＭ、ＣＤ−Ｒ／Ｗ、(ＤＶＤ)、ブルーレイディスク、Digital Audio Tape（ＤＡＴ）、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、Solid State Drive (ＳＳＤ）は、コンピュータ等から取り
外し可能な記録媒体としても、コンピュータ等に固定された記録媒体としても利用可能である。
【符号の説明】
【００８８】
１    ＣＰＵ 
２    メモリコントローラ
３    メモリ
４    Ｉ／Ｏコントローラ
５    ＳＲＡＭ
６    Ｉ／Ｏ
７    内部バス
８    ＲＯＭ
【図１】
2016181106.tif 000003
【図２】
2016181106.tif 000004
【図３】
2016181106.tif 000005
【図４】
2016181106.tif 000006
【図５】
2016181106.tif 000007
【図６】
2016181106.tif 000008
【図７】
2016181106.tif 000009
【図８】
2016181106.tif 000010
【図９】
2016181106.tif 000011
【図１０】
2016181106.tif 000012
【図１１】
2016181106.tif 000013
【図１２】
2016181106.tif 000014
【図１３】
2016181106.tif 000015