(57)【要約】【課題】メモリフラグメンテーションの低減を目的とする。【解決手段】メモリフラグメンテーションを低減する。メモリは、複数のメモリ形式に基づいて、コンピュータシステムのプレブート段階中に割り当てられる。同じ形式のメモリの連続ブロックを有するメモリが決定され、フラグメントは同じ形式のメモリの連続ブロックを有する。フラグメンテーションが閾値より大きい場合に、少なくともファームウェアモジュールに割り当てられたメモリの部分は、複数のメモリ形式に基づいて併合される。オペレーティングシステムは、コンピュータシステムによりブートされる。【選択図】図１
2011238265.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムで用いられる方法であって、
前記コンピュータシステムのプロセッサにより、前記コンピュータシステムのプレブート段階中にファームウェアモジュールにメモリを割り当て、前記メモリはACPI（Advanced  Configuration  and  Power  Interface）又はEFI（Extensible  Firmware  Interface）に準拠した複数のメモリ形式に基づいて割り当てられ、
前記プロセッサにより、複数のフラグメントを含むメモリのフラグメンテーションを決定し、各フラグメントは同じメモリ形式の連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、前記プロセッサにより、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記プロセッサにより、前記コンピュータシステムのオペレーティングシステムをブートすることを有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施例は、コンピュータシステムの分野に関し、排他的ではないが特にメモリフラグメンテーションを低減することに関する。
【背景技術】
【０００２】
典型的なコンピュータアーキテクチャでは、BIOS（Basic  Input/Output  System）によるコンピュータシステムの初期化及び構成は、一般的にプレブート（preboot）段階と呼ばれている。プレブート段階は、一般的に、プロセッサのリセットとオペレーティングシステム（OS：Operating  System）のローダとの間で動作するファームウェアとして定義される。プレブートの開始時に、ハードディスクのような媒体からロードしたオペレーティングシステムが引き継ぐことができる時点までにシステムを初期化することは、ファームウェアのコードの役目である。OSのロードの開始は、一般的にOSランタイムとして呼ばれる期間に始まる。OSランタイムの間に、ファームウェアは、コンピュータシステムのソフトウェア及びハードウェア構成要素との間のインタフェースとして動作すると共に、システム関連のタスクを処理し得る。コンピュータが高性能になってくるにつれて、OSレベルとハードウェアレベルとの間の動作環境は、一般的にファームウェア又はファームウェア環境と呼ばれている。
【０００３】
プレブート中に、オペレーティングシステムに渡されるプレブート・メモリマップが形成される。プレブート・メモリマップは、システム使用に確保されたメモリアドレスと、OSに利用可能なメモリアドレスとを示す。OSは、このプレブート・メモリマップを使用し、自分のメモリ管理方式を形成する。プレブート段階の複雑性の増加のため、プレブート・メモリマップは、多数の断片化セクションをしばしば有する。今日のオペレーティングシステムの多くは、過度のフラグメンテーションを有するプレブート・メモリマップをサポートすることができない。
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明は、コンピュータシステムで用いられる方法であって、
前記コンピュータシステムのプロセッサにより、前記コンピュータシステムのプレブート段階中にファームウェアモジュールにメモリを割り当て、前記メモリはACPI（Advanced  Configuration  and  Power  Interface）又はEFI（Extensible  Firmware  Interface）に準拠した複数のメモリ形式に基づいて割り当てられ、
前記プロセッサにより、複数のフラグメントを含むメモリのフラグメンテーションを決定し、各フラグメントは同じメモリ形式の連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、前記プロセッサにより、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記プロセッサにより、前記コンピュータシステムのオペレーティングシステムをブートすることを有する方法を特徴とする。
【図面の簡単な説明】
【０００５】
【図１】本発明の教示に従ってメモリフラグメンテーションを低減する一実施例を示すブロック図
【図２】本発明の教示に従ってメモリフラグメンテーションの低減をサポートする環境の一実施例を示すブロック図
【図３】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図４】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図５】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図６】本発明の実施例を実装するコンピュータシステムの一実施例を示すブロック図
【発明を実施するための形態】
【０００６】
本発明の非限定的且つ非網羅的な実施例について、以下の図面を参照して説明する。図面において、特別の定めがない限り、同様の参照符号は様々な図面を通じて同様の部分を示す。
【０００７】
以下の説明では、本発明の実施例の完全な理解を提供するために、複数の特定の詳細が示されている。しかし、特定の詳細のうち１つ以上がなくても、又は他の方法、構成要素、物質等を用いて、本発明の実施例が実施され得ることを、当業者は認識する。その他に、本発明の理解をあいまいにしないように、周知の構造、物質又は動作は図示又は記載していない。
【０００８】
明細書を通じて“一実施例”又は“実施例”への言及は、実施例に関して説明する特定の機能、構造又は特徴が本発明の少なくとも1つの実施例に含まれることを意味する。従って、“一実施例では”又は“実施例では”という語句が明細書を通じて様々な位置に現れることは、必ずしも同じ実施例を示しているとは限らない。更に、特定の機能、構造又は特徴は、1つ以上の実施例で如何なる適切な方法で組み合わされてもよい。
【０００９】
ここに記載するファームウェア環境の実施例は、実質的にEFI（Extensible  Firmware  Interface）（http://developer.intel.com/technology/efiで入手可能なExtensible  Firmware  Interface  Specification,  Version  1.10,  December  1,  2002）に従って実装されてもよい。EFIは、ドライバのようなファームウェアモジュールの形式のファームウェアが、様々な異なるリソース（フラッシュメモリ装置、オプションのROM（Read-Only  Memory）、ハードディスクのような他の記憶装置、CD-ROM（Compact  Disk-Read  Only  Memory）を含む）から又はコンピュータネットワーク上の1つ以上のコンピュータシステムからロードされることを可能にする。EFI仕様の実装の一実施例は、以下で“フレームワーク”と呼ばれるIntel(R)  Platform  Innovation  Framework  for  EFI  Architecture  Specification  −  Draft  for  Review,  Version  0.9,  September  16,  2003（www.intel.com/technology/frameworkで入手可能）に記載されている。本発明の実施例は、“フレームワーク”又はEFI仕様に従った実装に限定されないことがわかる。
【００１０】
図１を参照すると、メモリフラグメンテーションを低減する実施例が図示されている。プレブート・メモリマップ102は、プレブート段階中の物理メモリのメモリアドレス0〜Xの割り当て（110で示す）を記述している。一実施例では、プレブート・メモリマップ102は、ACPI（Advanced  Configuration  and  Power  Interface）E820テーブル（Advanced  Configuration  and  Power  Interface  Specification,  version  2.0b,  October
11,  2002）を有する。一般的に、E820テーブルは、何の物理メモリがOSに利用可能であるか、システムに確保されているか、又は存在しないかを記述する。
【００１１】
プレブート中に、様々なメモリ形式がファームウェアモジュール130-134に割り当てられる。一実施例では、ファームウェアモジュールは、一式の関係する命令（一般的にコードと呼ばれる）及び／又はデータバッファを有してもよい。図１では、ファームウェアモジュール130は、命令130Aとデータバッファ130Bとを有する。データバッファ130Bは、様々な目的で様々なデータを保管して取り出すために、命令130Aにより使用されてもよい。命令及びデータバッファは、必ずしも連続メモリアドレスに割り当てられなくてもよいが、別々のメモリアドレスブロックに存在してもよい。ファームウェアモジュールは、EFIドライバのようなドライバ、関数呼び出し、プロトコル等を有してもよい。或る実施例のファームウェアモジュールはOSランタイムに存続しなくてもよく、或るファームウェアモジュールはプレブート及びOSランタイム中に利用可能になる。
【００１２】
ファームウェアモジュールのロード処理中に、ファームウェアモジュールは、ファームウェアメモリマネージャ106から様々なサイズの１つ以上のメモリ形式のメモリ割り当てを要求してもよい。一実施例では、ファームウェアメモリマネージャ106は、OSランタイムに存続してもよい。ファームウェアメモリマネージャ106は、要求されたメモリ形式に対応するファームウェアモジュールのメモリアドレスを割り当ててもよい。
【００１３】
このメモリの割り当ては、プレブート・メモリマップ102のフラグメンテーションを生じることがある。ここで使用されるフラグメントは、特定の形式のメモリの連続ブロックを有する。図１の実施例では、リブート・メモリマップ102は、４つの形式のメモリ（形式1-4）に断片化されている。例えば、フラグメント120はメモリ形式2で構成される。
【００１４】
103に示す併合（coalescing）の後に、101に示すようにプレブート・メモリマップ102が併合される。併合は、同じメモリ形式が一緒に動かされ、連続ブロックを形成するように、メモリ形式に基づく。一実施例では、全てのメモリフラグメントが併合されてもよい。他の実施例では、メモリフラグメンテーションが所定の閾値レベルの下になるまで、プレブート・メモリマップが同時に１つのファームウェアモジュールに併合されてもよい（以下に説明する）。例えば図１では、形式2のメモリのフラグメント120及びフラグメント121は、形式2のメモリのフラグメント122に併合される。従って、２つのフラグメントが１つのフラグメントに併合される。
【００１５】
一実施例では、メモリ形式は、ACPI仕様に記載の形式を有する。これらのACPIメモリ形式を以下の表１に示す。
【００１６】
【表１】
2011238265.tif 000003
ACPI準拠のシステムでは、プレブート中に、ファームウェアはE820テーブルをOSPM（Operating  System-directed  configuration  and  Power  Management）に報告する。要するに、OSPMはオペレーティングシステムとACPI機能との間のインタフェースである。OSが制御を受け持つと、OSは自分のメモリマッピングを構築するためにE820テーブルを使用する。
【００１７】
ACPI準拠のシステムでは、ファームウェアがメモリマッピングをOSPMに伝達する様々な方法が存在する。或る方法では、プレブート・メモリマップをOSに伝達するために、IA（Intel  Architecture）システムでINT  15  BIOSインタフェースが使用される。他の方法では、メモリリソースが動的に追加又は削除され得る場合に、メモリ装置は、メモリリソースにより記述されたリソース情報を伝達するACPI  Namespaceに規定される。
【００１８】
EFI準拠のシステムでは、プレブート・メモリマップをOSローダに伝達するために、EFI  Boot  Services関数（GetMemoryMap()）が使用されてもよい。このマッピングは、OSローダによりOSPMに伝達される。GetMemoryMap()は、様々なEFIメモリ記述子を戻す。これらのEFIメモリ記述子は、全ての設置されているRAM（Random  Access  Memory）及びファームウェアにより確保されている物理メモリ範囲のシステムメモリマッピングを規定する。以下の表２は、EFIメモリ形式及び対応するACPIアドレス範囲形式とのサンプリングを示している。
【００１９】
【表２】
2011238265.tif 000004
ここでの実施例は、メモリフラグメンテーションを低減することを提供する。例えば、Red  Hat  Linux及びSuse  Linuxは、32フラグメントを超えるプレブート・メモリマップをサポートしないことがある。ACPIシステムでは、これは32のE820テーブルエントリに相当する。他の例では、Windows（登録商標）サーバ・オペレーティングシステムは、64のフラグメントより大きいプレブート・メモリマップをサポートしないことがある。プラットフォームの複雑性が増加し、ファームウェア環境がロバストになってくると、フラグメンテーションは32のフラグメントを超過することがある。
【００２０】
ここでの実施例は、動的なプレブート・メモリマップのデフラグを提供する。静的な方式では、様々なメモリ形式の“バケツ（bucket）”が予め割り当てられ得る。プレブート中に、メモリ形式毎の使用プロファイルが、初期ブートに基づいて不揮発性記憶装置に保存されてもよい。次に、システムがリブートされ、“バケツ”が使用プロファイルに基づいて再分配される。
【００２１】
しかし、このような静的な方式は実用的ではない。まず、このような静的な方式は、プレブート・メモリマップのフラグメンテーションを変更し得るシステム構成の変更を提供しない。
【００２２】
更に、サーバのような或るプラットフォームは、5-9の“作動”要件を満たさなければならない。5-9は、サーバが99.999%の時間に利用可能でなければならないという標準的な顧客の要件である。この5-9の可用性は、１年に１分のみの許容停止時間に等しい。このような要件は、静的な方式のように、プレブート・メモリマップを併合する長いブート処理を容認することができない。ここでの実施例は、コンピュータシステムのリブートを必要とせずに、プレブート・メモリマップのデフラグを可能にする。
【００２３】
図２を参照すると、メモリフラグメンテーションの低減をサポートするコンピュータシステム200の実施例が図示されている。ファームウェア204はハードウェア202の上のレイヤにある。オペレーティングシステム206はファームウェア204の上のレイヤにある。
【００２４】
ハードウェア202は、プロセッサ210と、フラッシュメモリ212と、メモリ208とを有する。一実施例では、ここに記載するメモリフラグメンテーションを低減する機械アクセス可能命令がフラッシュメモリ212に格納される。他の実施例では、EFI仕様に実質的に準拠するメモリフラグメンテーションを低減する命令がフラッシュメモリ212に格納される。代替実施例では、フラッシュメモリ212の代わりに、又はフラッシュメモリ212に加えて、ROM（Read-Only  Memory）のような他の形式の不揮発性記憶装置が使用されてもよい。
【００２５】
ファームウェアレイヤ204は、プレブート・メモリマップ102と、ファームウェアメモリマネージャ106と、ファームウェアモジュール130-134と、ディスパッチャ220と、閾値240とをサポートする。図２の実施例では、ファームウェアメモリマネージャ106は、併合プロトコル（coalesce  protocol）216と、フラグメンテーション検索プロトコル（retrieve  fragmentation  protocol）218とを提供する。一実施例では、ファームウェアメモリマネージャ106と併合プロトコル216とフラグメンテーション検索プロトコル218とをサポートする命令がフラッシュメモリ212に格納される。ファームウェアメモリマネージャ106と併合プロトコル216とフラグメンテーション検索プロトコル218とについて、以下に更に説明する。
【００２６】
一実施例では、プレブート・メモリマップ102により記述されたメモリが併合される必要があるか否かを決定する際に、閾値240が使用される。一実施例では、閾値240は32のフラグメントに相当する。他の実施例では、閾値240は64のフラグメントに相当する。更に他の実施例では、閾値240はコンピュータシステム200の不揮発性記憶装置に他のシステム構成情報と共に格納される。このような不揮発性記憶装置は、フラッシュメモリ212、又はEFI変数を格納しているNVRAM（Non-Volatile  Random  Access  Memory）を有してもよい。
【００２７】
一実施例では、ディスパッチャ220は、図４と共に以下に説明するフラグメンテーションを低減する“選択（opt-in）”の実装で使用されてもよい。フレームワークの一実施例では、ディスパッチャ220は、BDS（Boot  Device  Selection）プロトコルを有する。
【００２８】
一般的に、ディスパッチャ220は、併合プロトコルに選択を報告するファームウェアモジュールから“ハンドル（handle）”を受信する。ハンドルは、ディスパッチャ220によりファームウェアモジュールを特定して連絡する手段を提供する。ディスパッチャ220は、併合をサポートするファームウェアモジュールを登録する。
【００２９】
図３を参照すると、メモリフラグメンテーションを低減するフローチャート300の実施例が図示されている。ブロック302で始まり、コンピュータシステムが起動又はリセットされる。ブロック304に進み、プレブート中に、ファームウェアメモリマネージャによりメモリがファームウェア（F/W）モジュールに割り当てられる。ファームウェアモジュールが起動されると、ファームウェアモジュールは、ファームウェアメモリマネージャからメモリ形式の割り当てを要求する。ファームウェアメモリマネージャは、要求された形式のメモリアドレス範囲をファームウェアモジュールに割り当てる。
【００３０】
判定ブロック306に進み、ファームウェアがオペレーティングシステムをブートする準備ができているか否かをロジックが決定する。EFI準拠の環境では、ReadyToBootイベントがシステムに発行される。EFIシステムでは、ファームウェアモジュールのようなファームウェアエンティティは、所定のセットのイベントに注意するように登録する。ReadyToBootイベントのようなイベントの起動時に、エンティティが通知され、エンティティはそれに応じて様々なタスク（クリーンアップ等）を実行する。一実施例では、これらのタスクはここに記載する併合を有してもよい。
【００３１】
判定ブロック306への回答がNOである場合、ロジックはブロック304に戻り、ファームウェアモジュールにメモリを割り当て続ける。判定ブロック306への回答がYESである場合、ロジックはブロック308に進む。
【００３２】
ブロック308において、メモリのフラグメンテーションが検索される。一実施例では、フラグメンテーション検索プロトコルが呼び出され、フラグメンテーション検索プロトコルは、プレブート・メモリマップのフラグメントの数を戻す。
【００３３】
ブロック310に進み、プレブート・メモリマップのフラグメンテーションが閾値の上であるか否かをロジックが決定する。回答がNOである場合、ロジックはブロック312に進み、オペレーティングシステムをブートする。回答がYESである場合、ロジックはブロック314に進み、ファームウェアモジュールに割り当てられたメモリを併合する。
【００３４】
一実施例では、併合は、ファームウェアモジュールのデータバッファのようなファームウェアモジュールの一部を同様のメモリ形式の連続ブロックにマッピングする。これによって、メモリのフラグメンテーションを低減する。例えば、この特定の実施例では、ファームウェアモジュールの命令部分は、もともと割り当てられているメモリ位置に留まってもよいが、データバッファ部分は併合の一部として新しい位置に動かされてもよい。他の実施例では、全体のファームウェアモジュールが併合される。
【００３５】
一実施例では、併合プロトコルは、ファームウェアモジュールを併合するために呼び出される。併合プロトコルは、ファームウェアモジュールの新しいメモリ位置へのポインタを戻してもよい。メモリ又はハードディスクのような記憶媒体をデフラグする方法は当業者に周知であることがわかる。
【００３６】
判定ブロック316に進み、併合する更なるファームウェアモジュールが存在するか否かをロジックが決定する。回答がYESである場合、ロジックはブロック308に戻る。拝呈ブロック316への回答がNOである場合、ロジックはブロック312に進み、OSをブートする。
【００３７】
図４を参照すると、フローチャート400は、メモリフラグメンテーションを低減する一実施例を示している。フローチャート400は、ファームウェアモジュールが併合をサポートするようにコード化されているか否かを登録するファームウェアモジュール選択方式を示している。
【００３８】
ブロック402で始まり、コンピュータシステムが起動又はリセットされる。ブロック404に進み、ファームウェアメモリマネージャにより併合プロトコルがファームウェアモジュールに広告される。一実施例では、併合プロトコルを広告するために、ファームウェアメモリマネージャは、併合プロトコルのメモリアドレスを示すポインタをファームウェアモジュールに渡す。
【００３９】
ブロック405に進み、ファームウェアメモリマネージャによりメモリがプレブート中にロードしたファームウェアモジュールに割り当てられる。ブロック406に進み、ファームウェアモジュールが併合をサポートする場合、この情報がディスパッチャに登録される。
【００４０】
判定ブロック408に進み、システムがオペレーティングシステムをブートする準備ができているか否かをロジックが決定する。判定ブロック408への回答がNOである場合、ロジックはブロック405に戻る。判定ブロック408への回答がYESである場合、ロジックはブロック410に進む。
【００４１】
ブロック410において、フラグメンテーション検索プロトコルを使用してメモリのフラグメンテーションが検索される。判定ブロック412に進み、フラグメンテーションが閾値の上であるか否かをロジックが決定する。回答がNOである場合、ロジックはブロック414に進み、OSをブートする。判定ブロック412への回答がYESである場合、ロジックはブロック416に進み、ファームウェアモジュールの併合プロトコルを起動する。一実施例では、ファームウェアモジュールが併合プロトコルを呼び出す。他の実施例では、ディスパッチャが併合プロトコルを呼び出す。
【００４２】
判定ブロック418に進み、併合プロトコルをサポートする更なるファームウェアモジュールが存在するか否かをロジックが決定する。一実施例では、ディスパッチャにより維持されている併合をサポートする登録済のファームウェアモジュールのリストが調べられる。
【００４３】
判定ブロック418への回答がNOである場合、ロジックはブロック414に進み、OSをブートする。判定ブロック418への回答がYESである場合、ロジックはブロック410に進み、メモリのフラグメンテーションを検索する。
【００４４】
図４の実施例では、ファームウェアモジュールは、ここに記載する併合を利用するようにコード化されることがわかる。ここでの実施例は、併合の関与と非関与との混合であるファームウェアモジュールのセットで動作してもよい。フローチャート400の選択方式は、ファームウェアモジュールのプロバイダが要望通りに併合を利用することを可能にする。
【００４５】
図５を参照すると、フローチャート500は、メモリフラグメンテーションを低減する一実施例を示している。フローチャート500は、ファームウェアメモリマネージャにより併合が指示される実施例を示している。この実施例では、ファームウェアメモリマネージャは、メモリ割り当ての全能の知識を利用する。
【００４６】
ブロック502で始まり、コンピュータシステムが起動／リセットされる。ブロック504に進み、ファームウェアメモリマネージャは、メモリをファームウェアモジュールに割り当てる。ブロック505に進み、ファームウェアメモリマネージャは、ファームウェアメモリマネージャがファームウェアモジュールに併合の後の新しいメモリ位置を通知することを可能にするファームウェアモジュールインタフェースを、ファームウェアモジュールから受信する。
【００４７】
判定ブロック506に進み、システムがOSをブートする準備ができているか否かをロジックが決定する。判定ブロック506への回答がNOである場合、ロジックはブロック504に戻る。判定ブロック506への回答がYESである場合、ロジックはブロック508に進む。
【００４８】
ブロック508において、ファームウェアメモリマネージャによりフラグメンテーション検索プロトコルを使用して、メモリのフラグメンテーションが検索される。判定ブロック510に進み、フラグメンテーションが閾値より大きいか否かをロジックが決定する。回答がNOである場合、ブロック512に示すようにOSがブートされる。回答がYESである場合、ロジックはブロック514に進む。
【００４９】
ブロック514において、ファームウェアメモリマネージャは、ファームウェアモジュールの併合プロトコルを起動する。判定ブロック516に進み、併合処理を終えていない更なるファームウェアモジュールが存在するか否かをロジックが決定する。判定ブロック516への回答がYESである場合、ロジックはブロック508に戻る。
【００５０】
判定ブロック516への回答がNOである場合、ロジックはブロック518に進み、ファームウェアメモリマネージャは、併合されているファームウェアモジュールに新しいメモリ位置を通知する。一実施例では、ファームウェアメモリマネージャは、ファームウェアモジュールにそのデータバッファの新しい位置へのポインタを渡す。一実施例では、ファームウェアメモリマネージャは、ブロック505でファームウェアメモリマネージャに渡されたファームウェアモジュールインタフェースを使用して、ファームウェアモジュールに通知してもよい。
【００５１】
ここでの実施例は、動的に、コンピュータシステムのリブートを必要とせずに、メモリフラグメンテーションを低減することを提供する。いくつかのIA32及びEM64T  Extended  Memory  64  Technology）オペレーティングシステムは、32より多くのE820テーブルエントリをサポートしない。要するに、EM64Tは、32ビットシステムが4ギガバイトラインより上のメモリを指定することを可能にする。EFI準拠のシステムでは、E820テーブルは、基本的にはEFIメモリマップの変換であるため、E820エントリの数は、EFIファームウェアモジュールのフラグメンテーションの程度に比例する。
【００５２】
図６は、本発明の実施例が実装され得る例示的なコンピュータシステム600の一実施例の図である。コンピュータシステム600は、チップセット606に結合されたプロセッサ602及びメモリ604を有する。記憶装置612、不揮発性記憶装置（NVS）605、ネットワークインタフェース614及び入出力（I/O）装置618もまたチップセット606に結合されてもよい。コンピュータシステム600の実施例は、デスクトップコンピュータ、ノートブックコンピュータ、サーバ、携帯情報端末、ネットワークワークステーション等を含み、これらに限定されない。一実施例では、コンピュータシステム600は、メモリ604に結合されたプロセッサ602を少なくとも有し、プロセッサ602はメモリ604に格納された命令を実行する。
【００５３】
プロセッサ602は、Intel  Corporationのx86、Pentium（登録商標）、Xeon(R)又はItanium(R)ファミリのプロセッサ等を有してもよいが、これらに限定されない。一実施例では、コンピュータシステム600は、複数のプロセッサを有してもよい。メモリ604は、DRAM（Dynamic  Random  Access  Memory）、SRAM（Static  Random  Access  Memory）、SDRAM（Synchronized  Dynamic  Random  Access  Memory）、RDRAM（Rambus  Dynamic  Random  Access  Memory）等を有してもよいが、これらに限定されない。
【００５４】
チップセット606は、MCH（Memory  Controller  Hub）、ICH（Input/Output  Controller  Hub）等を有してもよい。チップセット606はまた、システムクロックのサポート、電力管理のサポート、オーディオのサポート、グラフィックのサポート等を有してもよい。一実施例では、チップセット606は、プロセッサ602及びメモリ604用のソケットを有する基板に結合される。
【００５５】
コンピュータシステム600の構成要素は、PCI（Peripheral  Component  Interconnect）バス、SMBUS（System  Management  bus）、LPC（Low  Pin  Count）バス、SPI（Serial  Peripheral  Interface）バス、AGP（Accelerated  Graphics  Port）インタフェース等を含み、様々なバスにより接続されてもよい。I/O装置618は、キーボード、マウス、ディスプレイ、プリンタ、スキャナ等を有してもよい。
【００５６】
コンピュータシステム600は、ネットワークインタフェース614を通じて外部ネットワークにインタフェース接続してもよい。ネットワークインタフェース614は、モデム、NIC（network  interface  card）又はコンピュータシステムを他のコンピュータシステムに結合する他のインタフェースを有してもよいが、これらに限定されない。搬送波信号623は、ネットワークインタフェース614により受信／送信される。図６に示す実施例では、搬送波信号623は、コンピュータシステム600をネットワーク624（LAN（Local  Area  Network）、WAN（Wide  Area  Network）、インターネット又はこれらの何らかの組み合わせ等）にインタフェース接続するために使用される。一実施例では、コンピュータシステム600及びコンピュータシステム625がネットワーク624で通信し得るように、ネットワーク624はコンピュータシステム625に更に結合される。
【００５７】
コンピュータシステム600はまた、ファームウェア及び／又はデータが格納され得る不揮発性記憶装置605を有する。不揮発性記憶装置は、ROM（Read-Only  Memory）、フラッシュメモリ、EPROM（Erasable  Programmable  Read  Only  Memory）、EEPROM（Electronically  Erasable  Programmable  Read  Only  Memory）、NVRAM（Non-Volatile  Random  Access  Memory）等を有してもよいが、これらに限定されない。記憶装置612は、磁気ハードディスク、磁気テープ、光ディスク等を有するが、これらに限定されない。プロセッサ602により実行可能な命令は、記憶装置612、メモリ604、不揮発性記憶装置605に存在してもよく、ネットワークインタフェース614を介して送信又は受信されてもよいことがわかる。
【００５８】
一実施例では、コンピュータシステム600は、OS（Operating  System）ソフトウェアを実行してもよいことがわかる。例えば、本発明の一実施例は、コンピュータシステム600のオペレーティングシステムとして、Microsoft  Windows（登録商標）を利用する。コンピュータシステム600で使用され得る他のオペレーティングシステムは、Apple  Macintoshオペレーティングシステム、Linuxオペレーティングシステム、Unix（登録商標）オペレーティングシステム等を有するが、これらに限定されない。
【００５９】
明細書上で、機械アクセス可能媒体は、機械（例えば、コンピュータ、ネットワーク装置、携帯情報端末、製造ツール、１つ以上のプロセッサのセットを備えた何らかの装置等）により読み取り可能又はアクセス可能な形式で情報を提供（すなわち、格納及び／又は送信）する何らかの機構を有する。例えば、機械アクセス可能媒体は、記録可能／記録不可能媒体（例えば、ROM（Read-Only  Memory）、RAM（Random  Access  Memory）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置等）を有するが、これらに限定されない。更に、機械アクセス可能媒体は、電気信号、光信号、音響信号又は他の形式の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）のような伝搬信号を有してもよい。
【００６０】
本発明の様々な動作の実施例について説明した。これらの動作は、プロセッサ、ASIC（Application  Specific  Integrated  Circuit）、FPGA（Field  Programmable  Gate  Array）等を使用した機械により実装され得る。一実施例では、記載の動作のうち１つ以上は、機械アクセス可能媒体に格納された命令を構成してもよい。機械アクセス可能媒体に格納された命令は、機械により実行されると、機械に記載の動作を実行させる。動作の一部又は全部が記載される順序は、これらの動作が必ずしも順序に依存することを示すように解釈されるべきではない。代替の順序も、この説明の利益を享受した当業者にわかる。更に、全ての動作が本発明の各実施例に必ずしも存在するとは限らないことがわかる。
【００６１】
要約書に記載したものを含み、本発明の図示の実施例の前記の説明は、網羅的でなく、開示された正確な形式に実施例を限定することを意図するものではない。本発明の特定の実施例及び例が説明の目的でここに記載されているが、当業者にわかるように、様々な変更も可能である。これらの変更は、前記の詳細な説明を鑑みて、本発明の実施例に行われ得る。特許請求の範囲で使用される用語は、本発明を限定するものとして解釈されるべきではない。むしろ、特許請求の範囲は、請求項の解釈の確立した原則に従って解釈されるべきである。
【００６２】
以上の実施例に関し、更に、以下の項目を開示する。
【００６３】
（１）コンピュータシステムのプレブート段階中にファームウェアモジュールにメモリを割り当て、前記メモリは複数のメモリ形式に基づいて割り当てられ、
メモリのフラグメンテーションを決定し、フラグメントは同じ形式のメモリの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記コンピュータシステムによりオペレーティングシステムをブートすることを有する方法。
【００６４】
（２）前記ファームウェアモジュールに割り当てられたメモリを併合することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない（１）に記載の方法。
【００６５】
（３）前記ファームウェアモジュールに割り当てられたメモリは、前記ファームウェアモジュールが併合をサポートする場合に併合される（１）に記載の方法。
【００６６】
（４）前記ファームウェアモジュールが併合をサポートする場合に、前記ファームウェアモジュールをディスパッチャに登録することを更に有し、前記ディスパッチャは、併合をサポートするファームウェアモジュールを追跡する（３）に記載の方法。
【００６７】
（５）前記併合は、前記ファームウェアモジュールと前記ディスパッチャとのうち１つにより起動される（３）に記載の方法。
【００６８】
（６）前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合することは、
ファームウェアメモリマネージャにより前記併合を起動し、
前記併合の結果として、前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を、前記メモリマネージャにより前記ファームウェアモジュールに通知する（１）に記載の方法。
【００６９】
（７）前記複数のメモリ形式は、ACPI（Advanced  Configuration  and  Power  Interface）メモリ形式を有する（１）に記載の方法。
【００７０】
（８）前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合することは、前記ファームウェアモジュールによりデータバッファとして使用されるメモリを併合することを有する（１）に記載の方法。
【００７１】
（９）実行されたときに、
コンピュータシステムのプレブート段階中にファームウェアメモリマネージャによりファームウェアモジュールにメモリを割り当て、前記メモリは複数のメモリ形式に基づいて割り当てられ、
フラグメンテーション検索プロトコルを起動し、プレブート・メモリマップにより記述されるメモリのフラグメンテーションを決定し、フラグメントは同じ形式のメモリの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、併合プロトコルを起動し、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記コンピュータシステムでオペレーティングシステムをブートすることを有する動作を実行する複数の命令を有する機械アクセス可能媒体を有する製造物。
【００７２】
（１０）前記併合プロトコルを起動することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない（９）に記載の製造物。
【００７３】
（１１）前記ファームウェアモジュールは、命令部分とデータバッファ部分とを有し、
前記併合プロトコルは、前記データバッファ部分を併合する（９）に記載の製造物。
【００７４】
（１２）前記ファームウェアモジュールが前記併合プロトコルをサポートするようにコード化される場合に、前記ファームウェアモジュールに割り当てられたメモリは併合される（９）に記載の製造物。
【００７５】
（１３）前記複数の命令の実行は、前記ファームウェアモジュールが前記併合プロトコルをサポートするようにコード化されている場合に、前記ファームウェアモジュールをディスパッチャに登録することを有する動作を更に実行する（１２）に記載の製造物。
【００７６】
（１４）前記併合プロトコルを起動することは、
前記ファームウェアメモリマネージャにより前記併合プロトコルを起動し、
併合の結果としての前記ファームウェアメモリマネージャによる前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を、前記ファームウェアモジュールに通知することを有し、
前記ファームウェアメモリマネージャは、前記ファームウェアモジュールから受信したファームウェアモジュールインタフェースを使用して、前記新しいメモリ位置を前記ファームウェアモジュールに通知する（９）に記載の製造物。
【００７７】
（１５）前記複数のメモリ形式は、ACPI（Advanced  Configuration  and  Power  Interface）メモリ形式を有する（９）に記載の製造物。
【００７８】
（１６）前記複数の命令は、実質的にEFI（Extensible  Firmware  Interface）仕様に準拠する（９）に記載の製造物。
【００７９】
（１７）プロセッサと、
前記プロセッサに結合されたSDRAM（Synchronized  Dynamic  Random  Access  Memory）ユニットと、
前記プロセッサに結合された記憶ユニットと
を有するコンピュータシステムであって、
前記記憶ユニットは、前記プロセッサにより実行されたときに、
前記コンピュータシステムのプレブート段階中にファームウェアモジュールにSDRAMを割り当て、前記SDRAMは複数のACPI（Advanced  Configuration  and  Power  Interface）メモリ形式に基づいて割り当てられ、
フラグメンテーション検索プロトコルを起動し、プレブート・メモリマップにより記述された前記SDRAMのフラグメンテーションを決定し、フラグメントは、同じACPIメモリ形式のSDRAMの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、併合プロトコルを起動し、前記複数のACPIメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたSDRAMの少なくとも一部を併合し、
前記コンピュータシステムでオペレーティングシステムをブートすることを有する動作を前記プロセッサが実行する複数の命令を有するコンピュータシステム。
【００８０】
（１８）前記併合プロトコルを起動することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない（１７）に記載のシステム。
【００８１】
（１９）前記ファームウェアモジュールが前記併合プロトコルをサポートする場合に、前記ファームウェアモジュールに割り当てられたSDRAMは併合される（１７）に記載のシステム。
【００８２】
（２０）前記併合プロトコルを起動することは、
前記ファームウェアメモリマネージャにより前記併合プロトコルを起動し、
前記併合プロトコルによる前記併合の結果としての前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を前記ファームウェアモジュールに通知することを有する（１７）に記載のシステム。
【図１】
2011238265.tif 000005
【図２】
2011238265.tif 000006
【図３】
2011238265.tif 000007
【図４】
2011238265.tif 000008
【図５】
2011238265.tif 000009
【図６】
2011238265.tif 000010
【手続補正書】
【提出日】平成23年8月30日(2011.8.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムで用いられる方法であって、
前記コンピュータシステムのプロセッサにより、前記コンピュータシステムのプレブート段階中にファームウェアモジュールにメモリを割り当て、
前記プロセッサにより、複数のフラグメントを含むメモリのフラグメンテーションを決定し、各フラグメントは同じメモリ形式の連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、前記プロセッサにより、複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記プロセッサにより、前記コンピュータシステムのオペレーティングシステムをブートすることを有する方法。