(57)【要約】【課題】高速ブートを有するコンピュータシステムを提供する。【解決手段】本発明にかかるコンピュータシステムは、高速ブートを有するコンピュータシステムであって、複数のＯＳインタフェースを有するファームウェアコア（３３０）と、ファームウェアコアに組み込まれて、ブートシーケンスを実施するブートシーケンサ（３４０）と、高速ブートオプションが選択された場合にブートシーケンサによってコールされる高速ブートプロシージャであって、ＰＭＩを起動して、ファームウェアコアをリセットすることなくＯＳインタフェースをソフトリセットする、高速ブートプロシージャとを備える高速ブートを有する。【選択図】図３
2007004787.tif 000002
【特許請求の範囲】
【請求項１】
高速ブートを有するコンピュータシステム（１００）であって、
複数のオペレーティングシステム（ＯＳ）インタフェースを有するファームウェアコア（３３０）と、
前記ファームウェアコアに組み込まれて、ブートシーケンスを実施するブートシーケンサ（３４０）と、
高速ブートオプションが選択された場合に前記ブートシーケンサによってコールされる高速ブートプロシージャ（５００）であって、プラットフォーム管理割り込み（ＰＭＩ）（４５４）を起動して、前記ファームウェアコアをリセットすることなく前記オペレーティングシステムインタフェースをソフトリセットする、高速ブートプロシージャと
を備える高速ブートを有するコンピュータシステム。
【請求項２】
前記高速ブートプロシージャ（５００）は、プロセッサハードウェアをリセットすることなく、前記コンピュータシステム（１００）を使用可能な状態に復帰させる
請求項１に記載のコンピュータシステム。
【請求項３】
前記高速ブートプロシージャ（５００）は、ハードウェアセットアップ及びＰＯＳＴテストを迂回する
請求項１に記載のコンピュータシステム。
【請求項４】
前記高速ブートプロシージャ（５００）は、キャッシュデータをリセットする
請求項１に記載のコンピュータシステム。
【請求項５】
前記高速ブートプロシージャ（５００）は、前記オペレーティングシステムインタフェースのシステムメモリ（１１４）を再割り当てする
請求項１に記載のコンピュータシステム。
【請求項６】
前記高速ブートプロシージャ（５００）は、システムメモリ（１１４）をクリアすることなく、新たなメモリマップを生成する
請求項１に記載のコンピュータシステム。
【請求項７】
前記高速ブートプロシージャ（５００）は、Ｉ／Ｏハードウェアをリセットする
請求項１に記載のコンピュータシステム。
【請求項８】
前記高速ブートプロシージャ（５００）は、前記ファームウェアコア（３３０）の前記リセットされたＩ／Ｏハードウェアを識別する
請求項７に記載のコンピュータシステム。
【請求項９】
コンピュータシステム（１００）の高速ブート（５００）の方法であって、
プラットフォーム管理割り込み（ＰＭＩ）を起動すること（５３０）であって、それによって、プロセッサのハードウェアをリセットすることなく前記プロセッサをソフトリセットすることと、
少なくともいくつかの初期化プロシージャ及びテストを迂回することであって、それによって、前記コンピュータシステムの使用可能な状態への復旧を高速化することと、
オペレーティングシステムインタフェースをリセットすること（５６０）、及び、前記オペレーティングシステムをロードすること（５７０）と
を含む
コンピュータシステムの高速ブートの方法。
【請求項１０】
前記ＰＭＩは、前記プロセッサのファームウェアコア（３３０）をリセットすることなく、前記オペレーティングシステムインタフェースをリセットする
請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
説明する主題は、コンピュータシステムに関し、より詳細には、コンピュータシステムの高速ブートに関する。
【背景技術】
【０００２】
コンピュータシステムが起動される毎に、コンピュータシステムがオペレーティングシステム及びアプリケーションソフトウェアを実行する準備ができる前に、種々の初期化プロシージャ及びテストが行われる。これらの初期化プロシージャ及びテストは、通常、ブートシーケンスと呼ばれる。一つの例示的なブートシーケンスは、パワーオンセルフテストプログラム（ＰＯＳＴ）を実行し、その後に、基本入出力システム（ＢＩＯＳ）を実行することを含むことができる。ＢＩＯＳは、ディスク上のブートセクタを指し示し、マスタブートレコードを読み出してオペレーティングシステム（ＯＳ）をロードするためのコードを初期化する。ＯＳが初期化された後、アプリケーションがコンピュータシステム上で実行可能となる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
コンピュータシステムが再起動又はリセットされると、コンピュータシステムは、再び、初期化プロシージャのすべてを実行し、テストのすべてを行わなければならず、ユーザが待っている間、生産性が低減する。コンピュータシステムがネットワークサーバである場合、サーバへのアクセスを必要とするネットワーク上のすべてのユーザは、コンピュータシステムが再ブートするのを待たなければならない。
【発明を実施するための最良の形態】
【０００４】
簡潔に説明すると、本明細書で説明するシステム及び方法は、コンピュータシステムで高速ブートを実施するのに使用することができる。コンピュータシステムをリセットする前に、ファームウェアコアのブートシーケンサは、全システムリセット又は高速ブートプロシージャのいずれかを行う判定を実行することができる。
【０００５】
たとえば、高速ブートプロシージャは、ユーザが選択することもできるし、デフォルトによって選択することもできるし、コンピュータシステム上で実行されているソフトウェアによって選択することもできる。いずれの場合も、高速ブートプロシージャを有効にすることによって、オペレーティングシステムインタフェース及びブートシーケンス中のあらゆるキャッシュデータはリセットされ、ファームウェアコアはリセットされない。ＰＯＳＴプログラムを迂回して、コンピュータシステムを使用可能な状態へ復旧することをさらに高速化することができる。
【０００６】
本明細書で説明するオペレーションは、コンピュータ可読媒体上の論理命令として実施できることに留意されたい。これらの論理命令は、実行されると、説明するオペレーションを実施する。
【０００７】
例示的なシステム
図１は、高速ブート用に実施することができる一つの例示的なコンピュータシステムの高レベルの概略図である。例示の目的で、コンピュータシステム１００は、Ｉｎｔｅｌプロセッサファミリー（ＩＰＦ）に基づく対称型マルチプロセシング（ＳＭＰ）サーバコンピュータである。しかしながら、例示的なコンピュータシステム１００は、例示の目的で示されており、限定することを目的とするものではないことに留意されたい。他の適切なコンピュータシステムとしては、パーソナルコンピュータ（ＰＣ）又はラップトップコンピュータ、ネットワークワークステーション、アプライアンス（appliances）、若しくは他のコンピューティングデバイスが挙げられる。
【０００８】
例示的なコンピュータシステム１００は、１つ又は２つ以上のプロセッサ又は処理ユニット１１２、システムメモリ１１４、及びバス１１６を含む。バス１１６は、システムメモリ１１４を含む種々のシステムコンポーネントをプロセッサ１１２に接続する。処理ユニット１１２（複数可）は、例示的な実施の形態では、パーティションで区画することができる。
【０００９】
ヒューレット・パッカード社（Hewlett-Packard Company;「ＨＰ」）によって開発されたＰＡ−ＲＩＳＣファミリーのプロセッサ、インテル社（Intel Corporation;「Ｉｎｔｅｌ」）のアーキテクチャ（「ＩＡ」）プロセッサ（たとえば、既知のＩＡ−３２プロセッサ及びＩＡ−６４プロセッサ）等、種々のプロセッサアーキテクチャが当該技術分野において既知である。ＩＡ−６４は、ＨＰ及びＩｎｔｅｌによって共同開発された６４ビットプロセッサアーキテクチャである。このＩＡ−６４は、明示的並列命令コンピューティング（ＥＰＩＣ）に基づいている。
【００１０】
バス１１６は、メモリバス又はメモリコントローラ、周辺バス、加速式グラフィックスポート、及び種々のバスアーキテクチャのいずれかを使用するプロセッサバス又はローカルバスを含む、いくつかのタイプのバス構造のいずれかの１つ又は２つ以上を表す。システムメモリ１１４は、読み出し専用メモリ（ＲＯＭ）１１８及びランダムアクセスメモリ（ＲＡＭ）１２０を含む。基本入出力システム（ＢＩＯＳ）１２２は、スタートアップ中や再ブート中等に、コンピュータシステム１００内の要素間で情報を転送するのを援助する基本ルーチンを含み、ＲＯＭ１１８に格納される。
【００１１】
コンピュータシステム１００は、ハードディスク（図示せず）からの読み出し及びハードディスクへの書き込みを行うための１つ又は２つ以上のハードディスクドライブ１３０をさらに含む。このハードディスクドライブ１３０は、ＳＣＳＩインタフェース１３５又は他の或る適切なインタフェースによってバス１１６に接続される。ハードディスクドライブ１３０及び関連するコンピュータ可読媒体は、コンピュータシステム１００のコンピュータ可読命令、データ構造体、プログラムモジュール、及び他のデータの不揮発性記憶を提供する。オペレーティングシステム１４０、１つ又は２つ以上のアプリケーションプログラム１４２、他のプログラムモジュール１４４、及びプログラムデータ１４６を含む、多数のプログラムモジュールをハードディスクドライブ１３０に格納することができる。
【００１２】
本明細書で説明する例示的な環境は、ハードディスクドライブ１３０のみを示しているが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク（ＤＶＤ）、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）等の他のタイプのコンピュータ可読媒体も、例示的なコンピュータシステム１００で使用することができる。
【００１３】
ユーザは、キーボード１０２やポインティングデバイス１０４等の入力デバイスを通じて、コマンド及び情報をコンピュータシステム１００に入力することができる。たとえば、ユーザは、これらの入力デバイスを使用して、ユーザインタフェース（図示せず）から高速ブートオプションを選択することができる。これらの入力デバイス及び他の入力デバイス（図示せず）は、バス１１６に接続されたインタフェース１０５を通じて処理ユニット１１２（複数可）に接続される。モニタ１０８又は他のタイプの表示デバイスも、ビデオアダプタ１０９等のインタフェースを介してバス１１６に接続することができる。
【００１４】
コンピュータシステム１００は、リモートコンピュータ１５０等の１つ又は２つ以上のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作することができる。リモートコンピュータ１５０は、パーソナルコンピュータ、別のサーバコンピュータ、ルータ、ネットワークＰＣ、ピアデバイス、又は他の共通ネットワークノードとすることができ、通常、コンピュータシステム１００について説明した要素の多く又はすべてを含む。図示した論理接続は、ネットワークインタフェース１５５を介してコンピュータシステム１００に接続されたローカルエリアネットワーク（ＬＡＮ）１５２及びワイドエリアネットワーク（ＷＡＮ）１５４を含む。
【００１５】
一般に、コンピュータシステム１００のデータプロセッサは、コンピュータの種々のコンピュータ可読記憶媒体に異なる時刻に記憶された命令によってプログラミングされる。プログラム及びオペレーティングシステムは、たとえば、フロッピーディスク（登録商標）、ＣＤ−ＲＯＭ、又は電子的に配布される（distributed）ことができ、コンピュータの２次メモリにインストール又はロードされる。実行時に、これらのプログラムは、少なくとも一部が、コンピュータの１次電子メモリ１１４にロードされる。
【００１６】
一方、プログラムを実行することに先立って、ブートシーケンスとして既知である種々の初期化プロシージャ及びテストが、コンピュータシステム１００について実行される。例示的な実施の形態によれば、コンピュータシステム１００は、高速ブートプロシージャ１６０（たとえば、ＲＯＭ１１８に常駐するファームウェア）を実施することができる。この高速ブートプロシージャ１６０は、初期化プロシージャ及びテストの少なくともいくつかを迂回して、これらのプロシージャ及びテストの各々が実行された場合よりも高速にオペレーティングシステムをロードする。一方、高速ブートプロシージャをより詳細に説明する前に、高速ブートのためにコンピュータシステムが実施できるファームウェアインタフェース及びソフトウェアスタックを理解することが役立つ。
【００１７】
図２は、高速ブートを実施するコンピュータシステムの例示的なファームウェアインタフェースの高レベルの概略図である。例示的なコンピュータシステム２００（図１のコンピュータシステム１００に対応する）は、通常のＩＰＦに基づくシステムであり、ハードウェアプラットフォーム２１０、プロセッサ（複数可）又は処理ユニット（複数可）２２０、オペレーティングシステム（ＯＳ）２３０、及びシステムファームウェア２４０を含む。この例では、システムファームウェア２４０は、プロセッサ抽象レイヤ（ＰＡＬ）２４２、システム抽象レイヤ（ＳＡＬ）２４４、及び拡張ファームウェアインタフェース（ＥＦＩ）２４６を含む。
【００１８】
例示的なコンピュータシステム２００は、インテル社から市販されているＩＴＡＮＩＵＭ（登録商標）ファミリーのプロセッサ用に実施されたように、ＩＡ−６４アーキテクチャに従う。しかしながら、他の実施の形態は、他のプロセッサアーキテクチャで実施することができ、図２に示すＩＡ−６４アーキテクチャに限定されないことに留意されたい。
【００１９】
ＩＡ−６４プロセッサアーキテクチャの定義は、ＩＡ−６４プロセッサを利用するシステムのファームウェアアーキテクチャ要素の要件を特定する。このプロセッサアーキテクチャの一例示のモデルは、Intel IA-64 Architecture Software Developer's Manual, Volume 2: IA-64 System Architecture, in section 11.1 Firmware Modelに与えられている。この文献は、ＩＡ−６４ファームウェアが、３つの主要なコンポーネント：ＰＡＬ２４２、ＳＡＬ２４４、及びＥＦＩ２４６から成ることを説明している。これらの主要なコンポーネントは、共に、ＯＳブート用のプロセッサ初期化及びシステム初期化を提供する。これら３つのコンポーネント（ＰＡＬ２４２、ＳＡＬ２４４、及びＥＦＩ２４６）は、一定のＩＡ−６４コンピュータシステムの必要なシステムファームウェア機能のすべてを表すことができない。追加ファームウェアも含めることができる。
【００２０】
ハードウェアプラットフォーム２１０は、システムのプロセッサ２２０以外のシステム２００のハードウェアコンポーネントのすべての集まりを表している。これら種々のコンポーネント間の矢印は、コンピュータシステム２００の振る舞いの許可された相互作用のタイプを示している。コンピュータシステム２００が最初に電源投入されると、いくつかの健全性チェック（たとえば、ＰＯＳＴ）が、プラットフォーム２１０に含まれるマイクロプロセッサによって行われる。それらのチェックを通過した後、電力及びクロックがプロセッサ２２０に供給される。プロセッサ２２０は、システムのＲＯＭ（たとえば、図１のＲＯＭ１１８）からのＰＡＬ２４２の実行を開始する。ＰＡＬ２４２は、システム２００の制御を取得して、他のファームウェアの実行を開始する。
【００２１】
ＰＡＬ２４２は、プロセッサ２２０（複数可）を初期化した後、システム２００の制御をＳＡＬ２４４に渡す。ＳＡＬ２４４は、プラットフォーム２１０に存在するハードウェアを発見し、そのハードウェアをＯＳ２３０用に初期化する。ハードウェアが初期化され、機能すると、ファームウェア２４０（すなわち、ＰＡＬ２４２、ＳＡＬ２４４、及びＥＦＩ２４６）が、メインメモリ（たとえば、図１のＲＡＭ１２０）にコピーされる。制御は、ＥＦＩ２４６に渡され、ブートデバイス（たとえば、ハードディスクドライブ）がアクティブにされる。ＥＦＩ２４６は、ブートデバイスを読み出し、プログラム（たとえば、ＯＳローダ）をメモリにロードし、次いで、プロセッサ２２０の１つ（通常、ブートスタートアッププロセッサと呼ばれる）をこのようなＯＳローダプログラムのエントリーポイントに分岐させることによって、そのプログラムにコンピュータシステム２００の制御を渡す。
【００２２】
ＯＳローダプログラムは、標準ファームウェアインタフェース２４０を使用して、コンピュータシステム２００を発見し、さらに初期化する。アドバンストコンフィギュレーションアンドパワーマネージメントインタフェース（「ＡＣＰＩ」）互換システムでは、ＯＳ２３０は、ＡＣＰＩ静的テーブルをパースして、マルチプロセッサシステムにおける他のプロセッサを発見し、テーブルのＡＣＰＩ分散データベース（ＤＤＢ）をＡＣＰＩ「名前空間」にコンパイルする。次に、ＯＳ２３０は、ファームウェアインタフェース２４０を使用して、それら発見されたプロセッサをオペレーティングシステムコードへ分岐させる。
【００２３】
初期化に続いて、ＯＳ２３０及びアプリケーションソフトウェアは、１つ又は２つ以上のプロセッサのすべてを制御し、ファームウェア２４０は、もはやコンピュータシステム２００の制御を行わない。システムがリセットされた場合、ブートシーケンサは、全システムブート用にブートシーケンス全体を行うことができる。或いは、以下でより詳細に説明するように、高速ブートプロシージャを実施して、種々の初期化プロシージャ及びテストを迂回することもできる。
【００２４】
図３は、高速ブートを実施するコンピュータシステム（たとえば、図１のコンピュータシステム１００及び図２のコンピュータシステム２００）の一例示のソフトウェアスタック３００の高レベルの概略図である。例示の目的で、このソフトウェアスタック３００は、フレームワークにコンポーネントを加えたモデルである。一般に、フレームワークは、システム機能の主要な本体を含む特定ドメイン向けのソフトウェア機能セットである。コンポーネントは、明確に定義されたインタフェースを介してフレームワーク及び相互と協力的に相互作用して、全体的なシステム機能を達成する。しかしながら、ソフトウェアスタック３００は、どの特定のアーキテクチャにも限定されるものではないことに留意されたい。
【００２５】
ソフトウェアスタック３００は、管理プロセッサ（ＭＰ）及びユーティリティマイクロコントローラとは対照的に、ＩＰＦ計算プロセッサ上で実行される、特定ＣＰＵ向けではないシステムファームウェア（たとえば、ＰＡＬ）のすべてを表す。ソフトウェアスタック３００は、イベントの際のリセット及び電源、ハードウェアの発見及び初期化、ハードウェア記述、システムソフトウェアのロード及び始動、並びに、ハードウェア再構成及びエラーハンドリングを含めて、通常のシステムオペレーション中のハードウェアに依存した機能をハンドリングすることを担当する。
【００２６】
例示的なソフトウェアスタック３００は、ＯＳ３１０（図２のＯＳ２３０に対応する）及びアプリケーション３２０（複数可）を含む。たとえば、ＯＳ３１０は、ＩＰＦ  ＨＰ−ＵＸ  ＯＳとすることができ、アプリケーション３２０は、ＨＰ−ＵＸアプリケーション（複数可）とすることができる。ファームウェアコア３３０は、標準的なＩＰＦファームウェアインタフェース（ＡＣＰＩエージェント３３２、ＥＦＩアダプタ３３４、及びＳＡＬアダプタ３３６）を提供する。ＥＦＩアダプタ３３４、ＳＡＬアダプタ３３６、及びＰＡＬ３３８は、図２のＥＦＩ２４６、ＳＡＬ２４４、及びＰＡＬ２４２にそれぞれ対応することに留意されたい。
【００２７】
ＡＣＰＩエージェント３３２は、ＡＣＰＩ（標準）ファームウェア機能をエクスポートすることを担当する。例示的な一実施の形態では、コア３３０がブートシーケンス中に初期化された後、ＡＣＰＩエージェント３３２は制御を与えられて、システムの内部表現を、外部標準規格によって必要とされる表現に変換する。これは、ＡＣＰＩエージェント３３２が、ＡＣＰＩインタフェースの展開（evolution）を、内部で使用されるものから分離して、システムを記述し、且つ、いくつかのハードウェア機能を制御する点で、プロキシ設計パターンと類似している。
【００２８】
ＥＦＩアダプタ３３４は、ブートサービスをＯＳローダ及び初期のＯＳ初期化コードに提供する外部インタフェース（プロシージャコールに基づく）のＩＡ−６４標準セットである。また、ＥＦＩアダプタ３３４は、ＯＳに全制御が与えられた後に、ブートタイムサービスが利用不能になった時であっても利用可能であるまさに最小限のランタイムサービスセットも含む。また、ＥＦＩパッケージは、標準的なＥＦＩブートドライバをサポートするＥＦＩブートドライバランタイムインフラストラクチャも含むことができる。
【００２９】
ＳＡＬアダプタ３３６は、ＩＡ−６４アーキテクチャによって必要とされる標準的なＩＡ−６４ファームウェアプロシージャインタフェースを実施する。また、ＳＡＬアダプタ３３６は、製品差別化機能用の特定ＯＥＭ向けプロシージャも実施する。内部では、特定ＯＥＭ向け機能が、サブパッケージ又はセパレートコンポーネント（複数可）へ分離されている。
【００３０】
ＳＡＬアダプタ３３６は、オペレーティングシステムのサポートも新しいファームウェアインタフェースも必要としない機能的拡張を可能にする。通常、このような機能は、専用ハードウェアをファームウェアの援助と組み合わせたもので実施される。ＳＡＬアダプタは、そのプログラムイメージが、ブートシーケンサ３４０によって、メインメモリに個別のプログラムエンティティとしてインスタンス化されるという点で、ＡＣＰＩエージェント３３２、ＥＦＩアダプタ３３４、及びＳＡＬアダプタ３３６と類似している。しかしながら、ＳＡＬアダプタは、オペレーティングシステムソフトウェアとファームウェアとの間のインタフェースを提供するこれら他のものとは異なる。その代わり、ＳＡＬアダプタ３３６は、ＰＡＬ３３８とのインタフェースを提供する。
【００３１】
ブートシーケンサ３４０は、ファームウェアコア３３０において実施することができる。コンピュータシステムをリセットする前に、ブートシーケンサ３４０は、全システムリセット又は高速ブートプロシージャのいずれかを行う決定を実行することができる。全システムリセットでは、ブートシーケンサ３４０は、ファームウェアコア３３０及びＯＳインタフェースのすべてをリセットするようにブートシーケンスを実施する。高速ブートプロシージャが有効にされた場合、ブートシーケンサ３４０は、ファームウェアコア３３０を迂回するようにブートシーケンスを実施し、ＯＳインタフェース及びあらゆるキャッシュデータのみをリセットする。コンピュータシステムを使用可能な状態へ復旧することをさらに高速化するために、種々のＰＯＳＴテストを迂回することができる。
【００３２】
上記で解説した例示的な実施態様は、例示の目的で提供されたものであることに留意されたい。さらに他の実施態様も考慮することができる。
【００３３】
例示的なオペレーション
図４及び図５は、コンピュータシステムの高速ブートを実施するための例示的なオペレーションを示すフローチャートである。これらのオペレーションは、１つ又は２つ以上のコンピュータ可読媒体上の論理命令として実施することができる。これらの論理命令は、プロセッサで実行されると、汎用コンピューティングデバイスを、説明したオペレーションを実施する専用マシンとしてプログラミングする。例示的な一実施態様では、図に示すコンポーネント及び接続を、コンピュータシステムの高速ブートを実施するのに使用することができる。
【００３４】
図４は、コンピュータシステムの高速ブートオプションを有する一つの例示的な全システムブートシーケンス４００を示している。オペレーションブロック４１０は、電源投入／リセット、及び、Ｉｎｔｅｌのプロセッサ抽象レイヤ（ＰＡＬ）ファームウェアの実行を表している。ＰＡＬを終了して、オペレーションブロック４２０に入ることによって、システム抽象レイヤ（ＳＡＬ）ファームウェアが初めて実行される。オペレーション４２１は、設計されたＳＡＬからＰＡＬへのハンドオフを表している。オペレーション４２２は、健全性チェック（ＰＡＬからのステータス）を行うファームウェアを表している。不健全なプロセッサ（ＰＡＬセルフテストに合格しないプロセッサ）は、実行の継続が阻止される。
【００３５】
健全なプロセッサは、オペレーション４２３の期間中、処理を続ける。オペレーション４２３では、各プロセッサは、ＰＡＬサービスをコールして、自身の内部キャッシュメモリを初期化する。各ＣＰＵは、次に、判定４２５を実行し、オペレーションブロック４３０に入るか、又は、オペレーションブロック４４０に入る。
【００３６】
ＣＰＵがスレーブである場合、ＣＰＵは、マスタからの指令の監視４３１を開始して、ブロック４３２において指令を実行する。指令の例には、調整されたセルフテストオペレーション、及び、オペレーション４６０においてアプリケーションプロセッサ（ＡＰ）になるために継続するコマンドが含まれる。また、スレーブは、マスタのフォワード／プログレス（forward/progress）及び健全性も監視する。（処理ステップ４４１〜４４８を通じたフォワードプログレスの欠如を観察することによって）マスタの故障を検出すると、セルスレーブは、自身をマスタに昇格させて、そのマスタを構成解除し、エラーイベントをログ記録し、次いで、サーバをリセットする。再ブートすると、異なるマスタが選択されて、ブートが進行する。
【００３７】
判定ポイント４２５を通過する際に、ＣＰＵは、スタックなしで、レジスタ及びＲＯＭのみを使用して実行している。スタックが、そのセルの各ＣＰＵについてマスタにより作成されると、指令は、監視スレーブ（たとえば、オペレーション４３１のスレーブ）に送信され、それらスレーブの内部レジスタが初期化されて、新たなスタック及び割り込みテーブルが使用される。その後、スレーブには、高級言語で記述された指令も実行するように命令することができる。
【００３８】
セルマスタの最初の重要なタスク（オペレーションブロック４４１）は、ＳＲＡＭ及びＣランタイム（ＣＲＴ）環境を初期化することであり、したがって、処理ステップの残りは、スタックを必要とする高級言語で記述することができ、ヒープや割り込みテーブル等のソフトウェア資源を使用することができる。セルマスタは、次に、オペレーションブロック４４２に示すように、セルブートストラップの残りのシーケンスを組織化するのに使用されるデータ構造体を初期化する。オペレーションブロック４４３は、不揮発性ＲＡＭ（ＮＶＲＡＭ）構成オプションが事前に真に設定されていた場合に、内部デバッグモジュールを有効にする判定ポイントである。この変数が真である場合、オペレーションブロック４４４が実行される。このデバッガは、対話型デバッグ又はリモートデバッグ用の簡単なＵＡＲＴ及び／又はＬＡＮデバイスを含む。この変数が偽である場合、セルマスタは、ブロック４４４をスキップし、ブロック４４５において、自身のセル毎の初期化を継続する。
【００３９】
オペレーションブロック４４５は、ファームウェアアーキテクチャによって使用される、ツリーに基づく（階層的な）データベースのルートを作成し、データベースの枝及びノードの成長を可能にする最低限のコンポーネント／フレームワークデータ構造体を初期化する。オペレーションブロック４４６は、種々のハードウェア要素（たとえば、メモリ、ＩＯ）の発見及び初期化を表している。要素が発見されて初期化されるにつれて、ツリーデータベースは、新しい枝及びノードを「成長」させる。
【００４０】
オペレーションブロック４４６に続いて、セルは、互いに通信して、どのセルが実際にブートしていて健全であるかを判断する。目的とする一組のセルは、電力コントローラサブシステムによるリセットからのその解放に先立って、各セル内に記憶されるＮＶＲＡＭデータベースに記述される。ブロック４４７におけるこのセルのランデブーは、機能しているメインメモリにまだ依存していないハードウェアを使用して、セル間の相互作用を通じて行われる。
【００４１】
ブロック４４８において、ランデブーセルオペレーションに参加するセルマスタ（たとえば、オペレーション４４７におけるセルマスタ）は、それらセルマスタの１つを選んで、パーティションモナークにする。このプロセスの結果に従って、判定４４９が、各セルマスタによって実行される。パーティションモナークとなったＣＰＵは、オペレーションブロック４５０においてサーバの初期化を続け、昇格していないセルマスタプロセッサは、パーティションスレーブとなって待機ループ４６０に入る。この待機ループから、それらパーティションスレーブは、後に、オペレーティングシステムによって始動される。
【００４２】
オペレーションブロック４５１において、パーティションモナークは、各セル内のハードウェアを初期化し、それらセルを「接続」して単一の大規模対称型マルチプロセシング（ＳＭＰ）サーバにする。これが行われると、その後、各セル内のメモリコントローラを再初期化して、複数のセルにわたってメモリをインタリーブすることが可能である。また、各セルのローカルデバイスツリーのルートを、パーティションツリーと呼ばれる単一ルートツリーのグラフにすることも可能である。さらに、オペレーション４５２の期間中に、ＥＦＩ変数のＮＶＲＡＭマネージャ等のパーティションレベルのファームウェアデータベース構造体が初期化されて準備される。
【００４３】
この時点で、メインメモリは、オペレーション４５３において、ＰＡＬ及びＯＳインタフェースアダプタ（たとえば、図３に示すもの）のロードに使用する準備ができている。ＰＭＩ（プラットフォーム管理割り込み）アダプタは、オペレーションブロック４５４において最初に初期化される。メモリは、ＡＣＰＩテーブル用に選択され、それらＡＣＰＩテーブルは、オペレーション４５５において、ＡＣＰＩエージェント内にコールされることによって構築される。次に、ＳＡＬアダプタは、オペレーション４５６において初期化される。このプログラムレイヤは、コアファームウェア内にコールされて、オペレーティングシステム用のメモリ及びＩ／Ｏ資源の記述を得る。ＥＦＩアダプタ用のメモリのマップ、及び、ＳＡＬへのその後のコールの同期ロックを保持するのに使用される、存在するＰＣＩデバイスのマップを含めて、種々のテーブルが構築される。
【００４４】
次に、ＥＦＩアダプタは、オペレーション４５７においてＳＡＬアダプタからコールされ、ＥＦＩが初期化される。オペレーション４５８において、システムが自動ブートに設定されていない場合には、ＥＦＩシェルに入り、システムが自動ブートに設定されている場合には、ブートマネージャがブート変数を使用して、ブートデバイスを選択し、ブートデバイスは、通常はＯＳローダであるＥＦＩプログラムをロードする。
【００４５】
オペレーションブロック４７０は、ＥＦＩプログラムの始動を表している。この始動時に、ＯＳ及び他のシステムソフトウェアは、マシンの制御を開始する。このハンドオフは、ブートスタートアッププロセッサ（ＢＳＰ）のファームウェア制御の担当の終了を表す。ＢＳＰは、通常、ＥＦＩ、ＳＡＬ、及びＰＡＬにプロシージャコールを行い、ハードウェアに関する情報を収集して、システムの初期化を継続する。
【００４６】
オペレーション中、コンピュータシステムをリセットする４８０ことが必要な場合がある。例示的な一実施の形態では、全システム開始又は高速ブートプロシージャの判断が行われる（たとえば、判定ブロック４８５）。全システム開始（又はリセット）では、ファームウェアコア（たとえば、図３のファームウェアコア３３０）及びすべてのＯＳインタフェースがリセットされる。高速ブートプロシージャが有効にされる場合、オペレーションは、ロードアダプタ４４０に戻り、ファームウェアコアはリセットされず、ＯＳインタフェース及びあらゆるキャッシュデータのみがリセットされる。これに加えて、種々のＰＯＳＴテストを迂回して、コンピュータシステムを使用可能な状態へ復旧することをさらに高速化することができる。
【００４７】
図５は、コンピュータシステムの高速ブートを実施する例示的なオペレーション５００を示すフローチャートである。オペレーション５１０において、コンピュータシステムは、（たとえば、ユーザ又はコンピュータシステム上で実行されるソフトウェアによって選択された）リセットを開始する。オペレーション５２０において、高速ブートオプションが有効にされているかどうかの判断が行われる。高速ブートオプションが有効にされていない場合、コンピュータシステムは、（たとえば、図４を参照して上述したように）オペレーション５２５において全システムブートを実行することができる。
【００４８】
或いは、高速ブートオプションが、オペレーション５２０において有効にされている場合、コンピュータシステムは、オペレーション５３０〜５７０に示す高速ブートプロシージャを実行する。オペレーション５３０において、ＰＡＬは、プラットフォーム管理割り込み（ＰＭＩ）を開始して、プロセッサを「ソフト」リセットする。ＰＭＩは、ファームウェアに直接向かう低レベルの帯域外割り込みであり、プロセッサのハードウェアのいずれも実際にリセットすることなく、プロセッサをリセットに近い状態にする。
【００４９】
オペレーション５４０において、メモリは、解放されて、メモリ割り当てはクリアされ、Ｉ／Ｏハードウェアはリセットされる。オペレーション５５０において、メモリは、ファームウェアアダプタ（たとえば、図３のＡＣＰＩエージェント３３２、ＥＦＩアダプタ３３４、ＳＡＬアダプタ３３６、及びＰＡＬ３３８）用に割り当てられ、新たなメモリマップが生成される。例示的な一実施の形態では、メモリは、リセットされず、新たなメモリマップのみが生成されて、リセット中の復旧がさらに高速化される。
【００５０】
オペレーション５６０において、ファームウェアアダプタ（たとえば、図３のＡＣＰＩエージェント３３２、ＥＦＩアダプタ３３４、ＳＡＬアダプタ３３６、及びＰＡＬ３３８）がリセットされる。オペレーション５７０において、ＯＳがメモリにロードされる。全システムリセットと同様に、ＯＳ及び対応するアプリケーションソフトウェアは、１つ又は２つ以上のプロセッサのすべてを制御し、ファームウェアは、この時点では、もはやコンピュータシステムを制御しない。
【００５１】
本明細書で図示して説明したオペレーションは、コンピュータシステムの高速ブートの例示的な実施態様を示すために提供されたものであり、限定を目的とするものではない。たとえば、異なるブートシーケンスを実施することができ、対応する高速ブートオペレーションも、したがって、設計の考慮事項に少なくとも部分的に基づいて変化する場合がある。
【００５２】
本明細書で明示的に述べた特定の実施態様に加えて、他の態様及び実施態様が、本明細書に開示した詳述を考慮することにより当業者には明らかである。この詳述及び示した実施態様は、添付の特許請求の範囲の真の範囲及び精神により、単なる例とみなされる。
【図面の簡単な説明】
【００５３】
【図１】高速ブート用に実施することができる一つの例示的なコンピュータシステムの高レベルの概略図である。
【図２】高速ブートを実施するコンピュータシステムの例示的なファームウェアインタフェースの高レベルの概略図である。
【図３】高速ブートを実施するコンピュータシステムの一つの例示的なソフトウェアスタックの高レベルの概略図である。
【図４】コンピュータシステムの高速ブートオプションを有する一つの例示的な全システムブートシーケンスを示すフローチャートである。
【図５】コンピュータシステムの高速ブートプロシージャを実施するための例示的なオペレーションを示すフローチャートである。
【符号の説明】
【００５４】
１００・・・コンピュータシステム
１０２・・・キーボード
１０４・・・ポインティングデバイス
１０５・・・キーボード／マウスインタフェース
１０９・・・ビデオアダプタ
１１２・・・処理ユニット
１１４・・・システムメモリ
１１６・・・バス
１１８・・・ＲＯＭ
１２０・・・ＲＡＭ
１３０・・・ハードディスクドライブ
１３５・・・ＳＣＳＩインタフェース
１４０・・・オペレーティングシステム
１４２・・・アプリケーションプログラム
１４６・・・他のモジュール
１４８・・・プログラムデータ
１５０・・・リモートコンピュータ
１５２・・・ＬＡＮ
１５４・・・ＷＡＮ
１５５・・・ネットワークインタフェース
１６０・・・高速ブート
２００・・・コンピュータシステム
２１０・・・プラットフォーム（ハードウェア）
２２０・・・プロセッサ（ハードウェア）
２３０・・・オペレーティングシステムソフトウェア
２４０・・・システムファームウェア
２４２・・・プロセッサ抽象レイヤ（ＰＡＬ）
２４４・・・システム抽象レイヤ（ＳＡＬ）
２４６・・・拡張ファームウェアインタフェース（ＥＦＩ）
３００・・・ソフトウェアスタック
３１０・・・ＩＰＦオペレーティングシステム
３２０・・・アプリケーション
３３０・・・ＦＷコア
３３２・・・ＡＣＰＩエージェント
３３４・・・ＥＦＩアダプタ
３３６・・・ＳＡＬアダプタ
３３８・・・ＰＡＬ
３４０・・・ブートシーケンサ
【図１】
2007004787.tif 000003
【図２】
2007004787.tif 000004
【図３】
2007004787.tif 000005
【図４】
2007004787.tif 000006
【図５】
2007004787.tif 000007