(57)【要約】一実施形態において、コンピュータブート方法は、複数のクロスプロセッサ相互関係を有するキャッシュに所定のデータブロックアライメントを選択させる。RAMシステムとしてのキャッシュのキャッシュRAMカラムは、意図しないキャッシュラインエビクションを防止するためにタグを用いてロードされる。ブートコードが実行されプリロードされたキャッシュRAMはメモリ記憶として実行中のブートコードストリームに表れる。【特許請求の範囲】
【請求項１】
コンピュータブート方法であって、
キャッシュがサイズNでセットアソシアティビティがX通りの相互関係までを有するとき、データブロックアライメントとしてN/Xバイトであるキャッシュを選択するステップと、
意図しないキャッシュラインエビクションを防止するためタグを用いて、キャッシュの少なくとも１つのキャッシュRAMカラムをRAMシステムとしてプリロードするステップと、
プリロードされたキャッシュRAMがメモリ記憶として実行中のブートコードストリームに表れるブートコードを実行するステップとを有することを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、
RAMソフトウェアとしてのキャッシュは事前に決められたプラットフォームアドレス範囲のいずれともコンフリクトしないデータアドレス範囲を選択することを特徴とする方法。
【請求項３】
請求項１に記載の方法であって、
プロセッサアブストラクションレイヤーにインプリメンテーションキャッシュサイズNとセットアソシアティビティXを通知するために、ハンドオフレジスタを用いてデータブロックアライメントを選択するステップをさらに有することを特徴とする方法。
【請求項４】
請求項１に記載の方法であって、
インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いてデータブロックアライメントを選択するステップをさらに有することを特徴とする方法。
【請求項５】
請求項１に記載の方法であって、
インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いてデータブロックアライメントを選択するステップをさらに有し、
RAMデータとしてキャッシュのサイズおよびアドレス範囲、およびRAMコードとしてキャッシュの最大サイズが入力されることを特徴とする方法。
【請求項６】
請求項１に記載の方法であって、
フロントサイドバスサイクルの生成を制限するためにすべてのデータロードをキャッシュから読み出すことを特徴とする方法。
【請求項７】
請求項１に記載の方法であって、
フロントサイドバスサイクルの生成を制限するために実行中のブートコードにより生成されるすべてのデータロードはキャッシュから読み出すことを特徴とする方法。
【請求項８】
請求項１に記載の方法であって、
実行中のブートコードにより生成されたキャッシュライトヒットは常に前記キャッシュを更新することを特徴とする方法。
【請求項９】
請求項１に記載の方法であって、
実行中のブートコードは、早期の初期化と、プロセッサの状態の分析と、ブートストラッププロセッサの選択を行うことを特徴とする方法。
【請求項１０】
請求項１に記載の方法であって、
キャッシュをRAMデータ空間としてパーティショニングして各プロセッサが自分のキャッシュエリアに制限されることにより、複数プロセッサがブートコードを実行するステップを有することを特徴とする方法。
【請求項１１】
命令を記憶した記憶媒体を有する物品であって、前記命令はマシンにより実行されると前記マシンに、
キャッシュがサイズNでセットアソシアティビティがX通りの相互関係までを有するとき、データブロックアライメントとしてN/Xバイトであるキャッシュを選択するステップと、
意図しないキャッシュラインエビクションを防止するためタグを用いて、キャッシュの少なくとも１つのキャッシュRAMカラムをRAMシステムとしてプリロードするステップと、
プリロードされたキャッシュRAMがメモリ記憶として実行中のブートコードストリームに表れるブートコードを実行するステップとを実行させることを特徴とする物品。
【請求項１２】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
RAMソフトウェアとしてのキャッシュは事前に決められたプラットフォームアドレス範囲のいずれともコンフリクトしないデータアドレス範囲を選択することを特徴とする物品。
【請求項１３】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
前記命令はマシンにより実行されると前記マシンに、プロセッサアブストラクションレイヤーにインプリメンテーションキャッシュサイズNとセットアソシアティビティXを通知するために、ハンドオフレジスタを用いてデータブロックアライメントを選択するステップをさらに実行させることを特徴とする物品。
【請求項１４】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
前記命令はマシンにより実行されると前記マシンに、インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いてデータブロックアライメントを選択するステップをさらに実行させることを特徴とする物品。
【請求項１５】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いてデータブロックアライメントを選択するステップをさらに有し、
RAMデータとしてキャッシュのサイズおよびアドレス範囲、およびRAMコードとしてキャッシュの最大サイズが入力されることを特徴とする物品。
【請求項１６】
請求項１に記載の、命令を記憶した記憶媒体を有する物品であって、
フロントサイドバスサイクルの生成を制限するためにすべてのデータロードをキャッシュから読み出すことを特徴とする物品。
【請求項１７】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
フロントサイドバスサイクルの生成を制限するために実行中のブートコードにより生成されるすべてのデータロードはキャッシュから読み出すことを特徴とする物品。
【請求項１８】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
実行中のブートコードにより生成されたキャッシュライトヒットは常に前記キャッシュを更新することを特徴とする物品。
【請求項１９】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
実行中のブートコードは、早期の初期化と、プロセッサの状態の分析と、ブートストラッププロセッサの選択を行うことを特徴とする物品。
【請求項２０】
請求項１１に記載の、命令を記憶した記憶媒体を有する物品であって、
キャッシュをRAMデータ空間としてパーティショニングすることにより、複数プロセッサがブートコードを実行し、各プロセッサは自分のキャッシュエリアに制限されることを特徴とする物品。
【請求項２１】
ブートシステムであって、
キャッシュのサイズがNで、セットアソシアティビティがX通りまでの相互関係を有するときに、前記キャッシュのデータブロックアライメントをN/Xバイトとし、意図しないキャッシュラインエビクションを防止するためにタグを用いて、キャッシュの少なくとも１つのキャッシュRAMカラムをプリロードする、RAMソフトウェアモジュールとしてのキャッシュと、
ブートコードを実行するプロセッサおよび接続されたキャッシュRAMとを有し、
プリロードされたキャッシュRAMはメモリ記憶として実行中のブートコードストリームに表れることを特徴とするブートシステム。
【請求項２２】
請求項２１に記載のシステムであって、
RAMソフトウェアとしてのキャッシュは事前に決められたプラットフォームアドレス範囲のいずれともコンフリクトしないデータアドレス範囲を選択することを特徴とするシステム。
【請求項２３】
請求項２１に記載のシステムであって、
データブロックアライメントの選択に、プロセッサアブストラクションレイヤーにインプリメンテーションキャッシュサイズNとセットアソシアティビティXを通知するために、ハンドオフレジスタを用いることを特徴とするシステム。
【請求項２４】
請求項２１に記載のシステムであって、
データブロックアライメントの選択に、インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いることを特徴とするシステム。
【請求項２５】
請求項２１に記載のシステムであって、
インプリメンテーションキャッシュサイズNとセットアソシアティビティを決定するために、プロセッサアブストラクションレイヤーによるプロシージャコールを用いてデータブロックアライメントを選択し、RAMデータとしてキャッシュのサイズおよびアドレス範囲、およびRAMコードとしてキャッシュの最大サイズが入力されることを特徴とするシステム。
【請求項２６】
請求項２１に記載のシステムであって、
フロントサイドバスサイクルの生成を制限するためにすべてのデータロードをキャッシュから読み出すことを特徴とするシステム。
【請求項２７】
請求項２１に記載のシステムであって、
フロントサイドバスサイクルの生成を制限するために実行中のブートコードにより生成されるすべてのデータロードはキャッシュから読み出すことを特徴とするシステム。
【請求項２８】
請求項２１に記載のシステムであって、
実行中のブートコードにより生成されたキャッシュライトヒットは常に前記キャッシュを更新することを特徴とするシステム。
【請求項２９】
請求項２１に記載のシステムであって、
実行中のブートコードは、早期の初期化と、プロセッサの状態の分析と、ブートストラッププロセッサの選択を行うことを特徴とするシステム。
【請求項３０】
請求項２１に記載のシステムであって、
キャッシュをRAMデータ空間としてパーティショニングすることにより、複数プロセッサがブートコードを実行し、各プロセッサは自分のキャッシュエリアに制限されることを特徴とするシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピューティングシステムに関する。特に、本発明はブートコードの実行に関する。
【背景技術】
【０００２】
オペレーティングシステムの読み込みには、従来からブートまたは「イニシァルプログラムロード」コードが必要である。歴史的には、このようなコードの少なくとも一部は恒久的なメモリ初期化以前に実行され、それゆえメモリがない環境で動作するように書かなければならない。今日の典型的なコンピューティングプラットフォームにおいて、BIOSやファームウェアは、コールスタックを初期化できるメモリ記憶がない、「スタックレスアセンブリ」と呼ばれるモードで実行されることが多い。残念ながら、このようなスタックレスアセンブリ言語のスタートアップコードは、ポータブルではなくメンテナンスと機能拡張に関して非常に脆弱である。また、利用可能な状態が限定されプログラミング環境が整っていないため、例えばファームウェアコンポーネントを認証する暗号計算等、機能を追加したり便利なアルゴリズムを実装することは困難である。
【０００３】
最新の６４ビットプロセッサ（Itaniumプロセッサファミリを含む）を使用したコンピューティングシステムでは、複雑で機能不足のブートコードに関連する問題が特に深刻である。アセンブリ言語で手作りしなければならないコードの量は膨大である。また、エクステンシブルファームウェアインターフェイス（例えばTianoファームウェアベースのEFI）のような最新のBIOSアーキテクチャのコンテクストにおいて、この初期コードは、例えばプラグイン環境初期化モジュール（PEIM）を見つけ、リーガルモジュールディスパッチのために依存関係を評価するための構文解析等、複雑な動作を完了しなければならない。この後者のタスクは従来のBIOSスタックレス環境では決して要求されず、レジスタのみの環境に実装することは困難である。
【発明を実施するための最良の形態】
【０００４】
図１に示したように、コンピュータをブートするシステム１０は複数のプロセッサ１２、１３、１４、１５を含む。これれらのプロセッサは、（ベーシック入出力システム（BIOS）命令、オペレーティングシステム命令、アプリケーションコードを含む）プログラミングコードの実行に好適であり、ベースボードマネージメントコントローラ２２に相互接続され部分的に制御されている。プロセッサはさらに高速ローカルキャッシュメモリ１６とそれより少し遅いメインメモリ１８に接続されている。システムBIOSは接続された更新可能ファームウェアメモリ２０からロードされる。
【０００５】
リンク結合は、一般情報入出力ライン、従来のアドレサブルバス、専用シリアルまたはパラレルデータトレースである。ベースボードマネージメントコントローラ２２は、一般にシステムマネージメントソフトウェアとプラットフォームマネージメントハードウェア間のインターフェイスを管理し、自律的モニタリング、イベントロギング、回復制御を提供し、システムマネージメントソフトウェアとプラットフォームコンポーネントを相互接続するサポートされたバスシステム間のゲートウェイとして機能する。ベースボードマネージメントコントローラは、異なるマネージメント機能を有する様々な計算プラットフォームに組み込むことができ、マザーボードに単一の集積されたコンポーネントを含むことができる。あるいは、複数のディスクリートのコントローラにより集合的に構成された分散システムであってもよい。例えば、エンタープライズクラスのサーバの複雑なマルチボードセットは、例えばリダンダントパワーサプライ監視および制御、RAID、拡張I/O等、異なるサブシステムをモニターするのに複数のマネージメントコントローラを使用することができる。動作において、ベースボードマネージメントコントローラ２２は、どのプロセッサにパワーオンリセットを適用するか、いつINITとNMIを主張するか、いつブートプロセスを開始または終了するか等を決定するポリシーエージェンシーとして機能する。
【０００６】
システム１０の例としては、コンピュータ（例えば、デスクトップ、ラップトップ、サーバ、ブレードサーバ、ワークステーション、パーソナルデジタルアシスタント等）やそれに関連する周辺装置、通信装置（電話ハンドセット、ページャー等）、テレビジョンセットトップボックスなどがある。「結合」や「リンク」は、例えば、電子配線、光ファイバー、ケーブル、バストレースや赤外線、ラジオ周波数（RF）、その他のワイヤレス信号メカニズムを用いたワイヤレスチャンネル等の論理的または物理的通信経路等、広く定義される。また、「情報」という用語もデータ、アドレス、および／または制御の１以上のビットとして定義される。「コード」は、実行されたときにある機能を実行するソフトウェアやファームウェアを含む。コードの例としては、アプリケーション、アプレット、ブートコード、その他の一連の命令を含む。
【０００７】
マルチプロセッサシステムにおけるアドレス移動を示す線画３０に関して図２に示したように、サイズ「N」バイトのユニファイドキャッシュは「X」通りのアソシアティビティを有するように設計され、各々「N/X」バイトのサイズを有する「X」個のカラムのアレイを有するものとして視覚化できる。キャッシュメモリからこのようなコンピュータをブートするために、キャッシュのためのデータブロックアライメントは、N/Xであるように選択される。キャッシュの少なくとも１つのキャッシュRAMカラムが、意図しないキャッシュラインエビクションを防止するためにタグを用いて、RAMシステムとしてプリロードされる。ブートコードが実行される。プリロードされたキャッシュRAMは、メモリ記憶３２、３３、３４、３５として実行中のブートコードストリームにそれぞれ表されている。
【０００８】
RAM（CAR）ソフトウェアとしてのキャッシュは、事前に決められたプラットフォームアドレス範囲のいずれともコンフリクトしないように、データアドレス範囲を選択できる。データブロックアライメントは、実装キャッシュサイズNとセットアソシアティビティXを通知するためにハンドオフレジスタを用いて決定される。あるいは、データブロックアライメントは、実装キャッシュサイズNとセットアソシアティビティを決定するプロシージャコールを用いてすることができる。
【０００９】
実施形態において、このような高性能プロセッサのキャッシュメモリを初期ブートコードがRAMとして使用するために、すべてのデータメモリアクセスがヒットし、キャッシュエビクションが起こらないように、キャッシュRAMが実行中のコードストリームにメモリ記憶として表れなければならない。「エビクションが起こらない」ことは、エビクションが起こるとメモリコントローラとシステムファブリックが初期化される前にメインメモリへの書き戻しが必然的に伴う点で重要である。最善の場合、上記のアクションは副作用を伴わない。しかし、最悪の場合、システムはロックアップしたり、マシンチェック中断等の故障状態を生じたりする。そのため、CARモード中のプロセッサからのサポートメカニズムは、データアドレス空間にフロントサイドバス（FSB）サイクルが無いようにしなければならない。
【００１０】
例えば図３に示した実施形態において、CARソフトウェアはプロセッサアブストラクションレイヤー（PAL）が提供するメソッドを用いて、FSBサイクルが開始されず、インプリメンテーションキャッシュサイズNとセットアソシアティビティXを通知するためにハンドオフレジスタを用いてデータブロックアライメントがされることを保証する。このPALコードレイヤーはプロセッサベンダーにより作られ、プロセッサ初期化コードと、プロセッサキャッシュを含むプロセッサハードウェアを抽象化するコールインターフェイスを含んでいる。PALソフトウェアは、適当なタグを用いて１または２（必要に応じて多数）のキャッシュRAMカラムをプリロードできる。これを行うと、CARソフトウェアが最大サイズ制限を超えない限り、意図しないキャッシュラインエビクションは無くなり、よってフロントサイドバスサイクルも無くなる。プロセッサインプリメンテーションに応じて、データ使用のためにタグを用いてキャッシュをプリロードするPALベースメソッドが、所与の最大CARコードサイズのために明け渡されないキャッシュエリア（カラム）を選択し、コードストリームキャッシュを走らせることができるようにする。
【００１１】
PALベースメソッドはプロセッサからのハードウェアサポートを多少必要とするかも知れないし、PALコードに直接実装されてもよい。実施形態において、新しいPALコールと、PALコードのハンドオフステート拡張を使用できる。ハンドオフステート拡張は、PALコードとインターフェースするファームウェアコードの一部であるCARセットアップコードに、キャッシュの実装トポロジー（上で説明したパラメータNとX）を通知する新しいハンドオフレジスタを追加する。あるいは、PALコードは、ハンドオフステートを修正するのではなく、インプリメンテーションキャッシュサイズNとセットアソシアティビティを直接提供するデータブロックアライメントのプロシージャコールをサポートすることもできる。この実施形態において、CARセットアップコードは、CARデータブロック位置とアライメントを選択するために上記情報を使用する。
【００１２】
実施形態において、新しいPALコールを用いて、適当なタグビットを用いて必要なサイズのキャッシュエリアを選択しロードするために示すことができる。この新しいPALコールへの入力は、CARデータのサイズおよびアドレス範囲とCARコードの最大サイズとである。PALベースメソッドの使用により、CARセットアップコードをプロセッサキャッシュアーキテクチャの今後の発展から切り離すことができる。PALベースメソッドはプロセッサキャッシュのインプリメンテーションの詳細をすべて抽象化するからである。
【００１３】
CARの使用により、MESI（Modified/Exclusive/Shared/Invalid）キャッシュコヒーレントプロトコルとこのCAR能力をレバレッジするのに要する計算のモデルを使用しながら、コンカレント実行モードにおける複数プロセッサのサポートが可能となる。これは、すべてのプロセッサが同時にリセットされ、SMP（対象マルチプロセッシング）トポロジーがすべてソフトウェアでビジブルでなければならない場合に特に便利である。SMPにおいて、MESIプロトコルは、プロセッシングエージェントがすべて同じキャッシュラインにアクセスしなければならないとき、キャッシュコヒーレンスを維持するように努める。MESIは、より新しいプロトコルであるMOESI（Modified  /Owned  /Exclusive  /Shared  /Invalid）等と異なり、後者は１つのプロセッサから他のプロセッサにキャッシュラインを転送することができる。MESIの場合、書き戻しは常に代替プロセッサがラインを更新する前に行われる。
【００１４】
従って、CARは、CARデータ領域に使用されるアドレス範囲の必要なパーティショニングをサポートする。特に、このノーエビクションモードでは使用できない256KCARデータエリアを各プロセッサがサポートする必要があり、ローカルSMPコンプレックスに最大４つのプロセッサがあるとき、CARデータアドレススペースは各プロセッサが自分の256kbエリアだけを見ることができるようにパーティションされる。言い換えると、PAL／プロセッサによるメソッドは、各々が自分の256Kエリアで動作するように、各プロセッサキャッシュにユニークなタグビットを満たす。各プロセッサのスタックに対するビューはユニークなアドレスであり、アドレス＋256kbの範囲は他の３つのプロセッサの範囲のいずれともオーバーラップしない。よって、他のプロセッサデータスペースに属するデータレコードを更新するおそれはなく、これは各プロセッサは自分のペースで動作するがインタープロセッサ同期の問題は起こらないことを意味する。キャッシュはすべてのプロセッサの同一のデータアドレススペースで修正されない記録を含むので、何も問題は生じない。
【００１５】
図３のフローチャート５０に一部示された一般的な実施形態において、CARセットアップコードは、ハンドオフステートの一部としてPAL-AレイヤーからCARのサイズと組織（何通りか）に関する情報を受信する。L2キャッシュサイズをキャッシュが構成されている方法の数により割ることで、データの最小アライメント基準を計算する。プラットフォームサービスモジュールからデータの最大サイズおよびCARコードの長さも知っている。そして、PAL-A  CARサービスコールPAL_CAR_INITIALIZEを呼び出し、PAL-AにCARソフトウェアがデータエリアとして使用するキャッシュエリアをRAMとして選択し初期化する。CARモードは、恒久的メモリが見つかり初期化されるまで、ブートコードにより一時的に使用される。その段階を過ぎると、必要なデータはすべてCARから実メモリにコピーされ、CARモードが起動される。CARモードから出るため、入力引数Data_Address、Data_Size、Code_SizeをすべてNULLに設定してコールを行う。この時、コールによりハードウェア回避策が除去され、CARモードが起動されるとプロセッサキャッシュが完全に特徴づけられる。それゆえ、オペレーティングシステム（OS）の制御下において通常のプロセッサの動作モードでも本発明は不利益な効果は持たない。
【００１６】
より具体的に、上記の方法は、拡張ファームウェアインターフェイス（EFI）のTianoまたはTianoライクなインプリメンテーションにおいて、キャッシュをRAMとして使用するように修正可能なインテルItaniumプロセッサファミリ（IPF）プロセッサで使用することができる。ソフトウェアの見地からは、RAMとして利用できるキャッシュ（CAR）は以下の３つの目的に使用される。第１のチャンクはローカルスタックレジスタに64KBのバッキングストアポインタ（BSP）を提供するものである。第２のチャンクはＣコンパイラがスタックベースアクティベーションフレームデータ使用を生成するために128KBのスタック（データスタックポインタとしてのR12）を構成するものである。グローバルヒープとしてアドレス可能な第３のリニアマップRAMの64kBチャンクは、システムRAMのモジュラーコンフィグレーションを可能とする。
【００１７】
動作中に、CARとして使用されているキャッシュの部分は、ソフトウェアにより明示的に命令されるまで、ソフトウェアにより書き込まれたデータを置き換えたり無効としたりしないように構成でき使用できなければならない。換言すると、CARとして使用されているキャッシュは以下のことを保証する。
１．データロードはすべて常にキャッシュから読み出され、フロントサイドバス（FSB）サイクルを生成しない。
２．キャッシュデータ読み出しミスはキャッシュを更新する。
３．キャッシュ書き込みヒットは、FSBサイクルを生成するかも知れないが、常にキャッシュを更新する。
４．キャッシュ書き込みミスはキャッシュを更新し、キャッシュ書き込みミスが生じないように保証するためメモリにアクセスしてもよい。
５．キャッシュラインは置き換えられたり無効にされたりしない。コードキャッシュラインは置き換えられてもよい。
図４のブートプロセスフローチャート６０に関して一般的に示したように、一般的なIPFアーキテクチャにおいて、ファームウェアコードがブートストラッププロセッサ（BSP）を選択するまで、すべてのプロセッサはファームウェアコードを実行している。そのため、すべてのプロセッサがファームウェアコードを実行している期間では、プロセッサ間のCARがインコヒーレントになる可能性がある。すべてのプロセッサにわたってCARをコヒーレントにしておく必要はない。ファームウェアコードは、各プロセッサに異なるCARアドレスを適当に選択することによりノンコヒーレントモデルで動作することを選択してもよいことを注意しておく。
【００１８】
キャッシュおよびメモリコントローラは、メモリ初期化前または初期化中にメモリインターフェイス上に不要なメモリサイクルを生じないように構成され使用されなければならない。初期化されていないチップセットの境界条件により、メモリインターフェイスに向けられたFSBからのメモリサイクルが、メモリコントローラをハングさせたり、その状態を変更したりして、うまく動作できなくすることがある。スタートアップ時のキャッシュ中の「ガーベージ」データは、チップセットメモリインターフェイスにメモリサイクルを生じること無しに、早期PAL-Aコードにより無効とされなければならない。何らかの理由でPAL-Aコードが転送前にキャッシュを無効としない場合、PAL-Aレイヤー中のPAL_CACHE_INITコールをサポートしなければならない。
【００１９】
多くのIPFプロセッサにおいて、キャッシュ書き込みヒットはフロントバスサイクルを生成する。FSBサイクルの生成を防止するため、CARを用いるソフトウェアは、キャッシュを無効とした後、キャッシュに適当なタグ値をプリロードする。PAL_Aレイヤーはキャッシュ情報ビットをパスするだけでなく、FSBサイクルが完全に防止できるように、キャッシュに必要なデータをロードするメソッドを提供する。これは、「バックスヌープミー(back-snoop-me)」条件に従うプロセッサについて特に重要である。「バックスヌープミー」条件では、L1で犠牲となったキャッシュラインがL2にあり、L2に書き戻されていなければならないが、FSBに乗せられる。このL1犠牲書き戻しの予期しないFSBトランザクションは、間違ったCAR動作を起こすことがある。この条件は、PALコールを用いてL1キャッシュを順序正しく一度に１アクセスするようにL1キャッシュを設計することにより回避することができる。
【００２０】
システムメモリ初期化中に一時的データ記憶としてプロセッサのキャッシュの一貫した信頼性の高い動作を保証するため、初期化アルゴリズムは以下の要件と制限を監視しなければならない。ファームウェアはこのメカニズムを変化させ、変化させたときにはすべてのシナリオを処理できなければならない。初期化を実行するファームウェアは、図１に示した別途更新可能なモジュールである。
【００２１】
PAL-Aは、EFIコード（SALE_ENTRY）に渡す前にキャッシュ中の早期ガーベージデータを無効にすることにより、CARソフトウェアにより必要とされるL2キャッシュを初期化しなければならない。または、CARセットアップモジュールがキャッシュを無効にできるように、キャッシュを無効にするメソッドをサポートしなければならない。PAL-Aコードは、CARモジュールが最適なCARデータアドレスを選択し、それをPALメソッドに提供できるようにして、PALがキャッシュに対応するタグ情報をロードできるように、CARコードモジュールにL2キャッシュサイズとL2キャッシュの複数の方法（アソシアティビティ）を提供しなければならない。これは、PAL-AをSALE_ENTRYにハンドオフするときにCARコードにハンドオフ情報として実現することも、CARコードがキャッシュにCARデータの正しいタグをロードできるようにするプロシージャコールをサポートすることにより実現することもできる。
【００２２】
すべてのプロセッサはPAL-Aを出て、システムのリカバリチェックを行う。このサイクルでコードフローはメモリを見つけ、PAL-Bまたはシステムソフトウェアのリカバリが必要かどうか判断する。リカバリアクションが必要なければ、すべてのプロセッサはPALコードに戻りテストと初期化を行う。これがPAL-Bにより完了すると、すべてのプロセッサはSAKE_ENTRYに戻り通常のブートを行う。このコードがPAL-Bに行って戻ってくる間、キャッシュはコヒーレントに保たれている必要はない。言い換えると、PALコードが制御を握っているとき、PALコードは初期化とテストのためにキャッシュを保有する。Tiaoディスパッチャコードは常に新たにスタートし、スタートアップするたびに変数を構築する。
【００２３】
マルチスレッドでマルチコアのパッケージ中の複数の論理CPUは、CARベースファームウェアによって別々のプロセッサとして取り扱われ、オーバーラップしないCARデータエリアに割り当てられる。そのような場合、CPUパッケージのCARデータエリアは、全部で個々のCARデータエリアのサイズの和を必要とする。この必要性は、マルチコアCPUは一般により大きなL2キャッシュを有するので、容易に満たされることに注意しておく。
【００２４】
CARベースソフトウェアが必要とするすべてのデータは、プラットフォームに割り当てられた連続したCARアドレス空間内になければならない。スタックベースデータ、バッキングストアポインタにアドレスされたエリア、いかなるグローバルエリアもこのパラダイムにフィットしなければならない。このデータブロックアドレスの開始は、別のプロセッサとは異なるアライメント制限を有する。CARベースのソフトウェアとデータのバイト単位の全長さは、IPFプロセッサはユニファイドキャッシュアーキテクチャを有しているので、利用可能なCARキャッシュ長さを超えてはいけない。MPシステムにおいて、CARソフトウェアは、ノード中のプロセッサにわたってデータがコヒーレントであることを前提とはしていない。これは、CARソフトウェアがCARデータエリアのMPセマフォを実施しないことを意味する。しかし、CARソフトウェアは、チップセットとその他ハードウェアリソースを用いて、セマフォや他のMPコード実行制御メカニズムを実装してもよい。CARベースソフトウェアが、何らかの目的（例えばメモリのサイズ決定やチューニング）でノードメモリコントローラに制御されている実メモリに書き込む必要があるときは、キャッシュされていないアクセスとして書き込まねばならない。これは、コードが物理モードで動作しているときはビット６３を反転し、仮想アドレスモードの場合は適当なTCエントリを設定することを意味する。
【００２５】
すでに注意したように、CARソフトウェアは、データブロックアライメントを「N/X」バイトと選択することができる。CARソフトウェアは、CAR  DATAのデータアドレスを選択して、１または２（必要に応じて多数）のデータコラムに適当なタグを（PAL-Aにより提供されたメソッドを用いて）プリロードする。IPFプロセッサにおいて、残りのキャッシュカラムはコード実行には使用できない。L2キャッシュラインのアクセスを制御するために用いられる疑似LRUアルゴリズムの動作の性質によるものである。CARコードの開始がデータカラムのように「N/X」バイトに一致していないときは、実行コードサイズは、最大
（コードカラムのサイズ）−（キャッシュラインサイズ）
だけ減少する。これが許容できるときは、CARコードを一致させる必要はない。CAR_DATAは常に要求限度と一致している。また、アドレス範囲は、プラットフォームが消費する最大のアドレス範囲とコンフリクトしないように設定しなければならない。この最大範囲は、一般に最も高いアドレス可能メモリであり、システムのPCI範囲に割り当てられる。そのアドレス範囲は、IPFベースのプロセッサの他のアドレス範囲とコンフリクトしないように選択される。この範囲には、IOブロック、IPIアドレスブロック、ROMおよびチップセット予約アドレス範囲のために選択されたアドレス範囲を含む。
【００２６】
PAL-AコードとCARセットアップモジュールが通信する必要がある場合が２つある。PAL-Aは、CARセットアップコードにL2キャッシュサイズと方法（キャッシュトポロジ）の数に関する情報を渡す必要がある。その後、CARコードは、キャッシュを無効とし、タグビットを満たすためにPAL-Aと通信しなければならない。また、PAL-Aソフトウェアレイヤーは、SALE_ENTRYポイントにあるOEMコードモジュールに、セルフテストステート等の多数のパラメータ、PALプロシージャコールをするための物理アドレスポインタ、その他を渡す。CARセットアップコードはこのエントリーポイントに位置し、PAL-Aから制御を受け取る。必要なキャッシュパラメータをCARセットアップコード環境に説明するため、追加のパラメータをPAL_RESETエグジットステートに付加することができる。IPF（Itanium  Processor  Family）環境において、システム中のプロセッサはすべて同時に実行を開始し、早期ブートコードの設計要求をMPセーフであるように変換する。IPFプラットフォームの伝統的複雑さに加えられた要求を満足するのは極めて困難である。
【００２７】
上記の方法とプロシージャの実施により、今日のコンピューティングプラットフォームにおいて共通に実施されているセキュアブートメソッドを含むがこれに限らず、様々なプロセッサセキュリティに関する要求が高まる。後で説明するように、このようなブート方法は、プログラミングをメモリレス環境では処理できない複雑なものとする。SHA等のほとんどのセキュリティアルゴリズムは、セキュリティ鍵を操作するために数キロバイトのメモリを必要とする。これは、上で説明したようにRAMとしてのキャッシュを用いても可能である。
【００２８】
また、今日のコンピューティングプラットフォームでは、バストポロジーも非常に複雑であり、メモリが見つかる前の非常に早い時期に初期化する必要がある。USB（ユニバーサルシリアルバス）等のバス構造の初期化には、バスコントローラデバイスとの間でストリームするコマンドおよびステータスバイトが必要である。同様に、高密度メモリ技術も、非常に複雑な初期化およびサイズスキャニングアルゴリズムを要求する。これらの動作は、スタックと少なくとも限定されたメモリをサポートしている環境では簡単になる。また、ISA（インストラクションセットアーキテクチャ）に依存しないＣ（またはそれと同等な）コード等の高水準言語コードを使用することができることによる付加的利益もある。これにより、例えば、３２ビットインテルアーキテクチャプロセッサシステムデザインとIPF（IA-64）ベースシステム間の共通なハードウェアブロックに適用できるソフトウェアの再利用が可能となる。
【００２９】
上記の方法とシステムを実施するソフトウェアは、一組の実行命令としてコンピュータシステムのメモリに記憶することができる。また、上記の方法およびシステムを実行する命令は、磁気ディスクおよび光ディスクを含むマシン読み取り可能媒体の形式で記憶することも可能である。例えば、本発明の方法は、ディスクドライブ（またはコンピュータ読み取り可能媒体ドライブ）を介してアクセス可能な、フラッシュメモリ、磁気ディスク、光ディスク等のマシン読み込み可能媒体に記憶することができる。さらに、上記命令は、データネットワークを介して計算機器に、セルフインストレーション用の実行バージョンの形式でダウンロードすることも可能である。
【００３０】
あるいは、上で説明した方法およびシステムを実行するロジックは、付加的コンピュータおよび／またはマシン読み取り可能媒体に実装することもできる。例えば、大規模集積回路（LSI）、特定用途用集積回路（ASIC）、電気的消去可能プログラマブルリードオンリメモリ（EEPROM）等のファームウェア等のディスクリートハードウェア部品；または電気的、光、音響、その他の形式の伝搬信号（例えば、ラジオ波や赤外線信号）を介して情報を運ぶ空間的に離れたコンピュータである。
【００３１】
本明細書中で「一実施形態」、「いくつかの実施形態」、「他の実施形態」とは、実施形態に関連して説明した特定の機能、構成、特性が本発明の少なくともいくつかの実施形態に含まれているが、必ずしもすべての実施形態に含まれてはいないことを意味する。「一実施形態」、「いくつかの実施形態」、「他の実施形態」という様々な言い方は必ずしも同じ実施形態を指すものではない。
【００３２】
明細書中で、構成要素、機能、構造、特性が含まれて「いてもよい」というときは、その特定の構成要素、機能、構造、特性が必ずしも含まれている必要はないことを意味する。明細書または請求項中で、「１つの」構成要素というときは、その構成要素が１つだけしかないという意味ではない。明細書または請求項中で、「付加的な」構成要素というときは、１つ以上の付加的な構成要素を排除するものではない。
【００３３】
この開示の利益を享受する当業者は、本発明の範囲内で、前述の説明と図面から多数の他の変形例を考えることができるであろう。したがって、本発明の範囲を決めるのは、補正も含めた請求項である。
【図面の簡単な説明】
【００３４】
本発明は詳細な説明と実施形態を示した添付した図面からよりよく理解できるであろう。本発明の実施形態は、本発明をその実施形態に限定するものではなく、本発明を説明し理解してもらうためのものである。
【図１】複数プロセッサシステムを示す概略図である。
【図２】複数プロセッサのブート中のメモリの移動を示す概略図である。
【図３】RAM（CAR）ソフトウェアとしてのキャッシュとプロセッサアブストラクションレイヤー（PAL）間の相互関係を示す概略図である。
【図４】Itaniumファミリプロセッサ（IPF）に好適なRAM（CAR）ソフトウェアとしてのキャッシュとプロセッサアブストラクションレイヤー（PAL）間の相互関係の一実施形態を示す概略図である。
【図１】
2006515940.tif 000002
【図２】
2006515940.tif 000003
【図３】
2006515940.tif 000004
【図４】
2006515940.tif 000005