説明

メモリフラグメンテーションの低減

メモリフラグメンテーションを低減する。メモリは、複数のメモリ形式に基づいて、コンピュータシステムのプレブート段階中に割り当てられる。同じ形式のメモリの連続ブロックを有するメモリが決定され、フラグメントは同じ形式のメモリの連続ブロックを有する。フラグメンテーションが閾値より大きい場合に、少なくともファームウェアモジュールに割り当てられたメモリの部分は、複数のメモリ形式に基づいて併合される。オペレーティングシステムは、コンピュータシステムによりブートされる。


【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施例は、コンピュータシステムの分野に関し、排他的ではないが特にメモリフラグメンテーションを低減することに関する。
【背景技術】
【0002】
典型的なコンピュータアーキテクチャでは、BIOS(Basic Input/Output System)によるコンピュータシステムの初期化及び構成は、一般的にプレブート(preboot)段階と呼ばれている。プレブート段階は、一般的に、プロセッサのリセットとオペレーティングシステム(OS:Operating System)のローダとの間で動作するファームウェアとして定義される。プレブートの開始時に、ハードディスクのような媒体からロードしたオペレーティングシステムが引き継ぐことができる時点までにシステムを初期化することは、ファームウェアのコードの役目である。OSのロードの開始は、一般的にOSランタイムとして呼ばれる期間に始まる。OSランタイムの間に、ファームウェアは、コンピュータシステムのソフトウェア及びハードウェア構成要素との間のインタフェースとして動作すると共に、システム関連のタスクを処理し得る。コンピュータが高性能になってくるにつれて、OSレベルとハードウェアレベルとの間の動作環境は、一般的にファームウェア又はファームウェア環境と呼ばれている。
【0003】
プレブート中に、オペレーティングシステムに渡されるプレブート・メモリマップが形成される。プレブート・メモリマップは、システム使用に確保されたメモリアドレスと、OSに利用可能なメモリアドレスとを示す。OSは、このプレブート・メモリマップを使用し、自分のメモリ管理方式を形成する。プレブート段階の複雑性の増加のため、プレブート・メモリマップは、多数の断片化セクションをしばしば有する。今日のオペレーティングシステムの多くは、過度のフラグメンテーションを有するプレブート・メモリマップをサポートすることができない。
【発明を実施するための最良の形態】
【0004】
本発明の非限定的且つ非網羅的な実施例について、以下の図面を参照して説明する。図面において、特別の定めがない限り、同様の参照符号は様々な図面を通じて同様の部分を示す。
【0005】
以下の説明では、本発明の実施例の完全な理解を提供するために、複数の特定の詳細が示されている。しかし、特定の詳細のうち1つ以上がなくても、又は他の方法、構成要素、物質等を用いて、本発明の実施例が実施され得ることを、当業者は認識する。その他に、本発明の理解をあいまいにしないように、周知の構造、物質又は動作は図示又は記載していない。
【0006】
明細書を通じて“一実施例”又は“実施例”への言及は、実施例に関して説明する特定の機能、構造又は特徴が本発明の少なくとも1つの実施例に含まれることを意味する。従って、“一実施例では”又は“実施例では”という語句が明細書を通じて様々な位置に現れることは、必ずしも同じ実施例を示しているとは限らない。更に、特定の機能、構造又は特徴は、1つ以上の実施例で如何なる適切な方法で組み合わされてもよい。
【0007】
ここに記載するファームウェア環境の実施例は、実質的に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仕様に従った実装に限定されないことがわかる。
【0008】
図1を参照すると、メモリフラグメンテーションを低減する実施例が図示されている。プレブート・メモリマップ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に利用可能であるか、システムに確保されているか、又は存在しないかを記述する。
【0009】
プレブート中に、様々なメモリ形式がファームウェアモジュール130-134に割り当てられる。一実施例では、ファームウェアモジュールは、一式の関係する命令(一般的にコードと呼ばれる)及び/又はデータバッファを有してもよい。図1では、ファームウェアモジュール130は、命令130Aとデータバッファ130Bとを有する。データバッファ130Bは、様々な目的で様々なデータを保管して取り出すために、命令130Aにより使用されてもよい。命令及びデータバッファは、必ずしも連続メモリアドレスに割り当てられなくてもよいが、別々のメモリアドレスブロックに存在してもよい。ファームウェアモジュールは、EFIドライバのようなドライバ、関数呼び出し、プロトコル等を有してもよい。或る実施例のファームウェアモジュールはOSランタイムに存続しなくてもよく、或るファームウェアモジュールはプレブート及びOSランタイム中に利用可能になる。
【0010】
ファームウェアモジュールのロード処理中に、ファームウェアモジュールは、ファームウェアメモリマネージャ106から様々なサイズの1つ以上のメモリ形式のメモリ割り当てを要求してもよい。一実施例では、ファームウェアメモリマネージャ106は、OSランタイムに存続してもよい。ファームウェアメモリマネージャ106は、要求されたメモリ形式に対応するファームウェアモジュールのメモリアドレスを割り当ててもよい。
【0011】
このメモリの割り当ては、プレブート・メモリマップ102のフラグメンテーションを生じることがある。ここで使用されるフラグメントは、特定の形式のメモリの連続ブロックを有する。図1の実施例では、リブート・メモリマップ102は、4つの形式のメモリ(形式1-4)に断片化されている。例えば、フラグメント120はメモリ形式2で構成される。
【0012】
103に示す併合(coalescing)の後に、101に示すようにプレブート・メモリマップ102が併合される。併合は、同じメモリ形式が一緒に動かされ、連続ブロックを形成するように、メモリ形式に基づく。一実施例では、全てのメモリフラグメントが併合されてもよい。他の実施例では、メモリフラグメンテーションが所定の閾値レベルの下になるまで、プレブート・メモリマップが同時に1つのファームウェアモジュールに併合されてもよい(以下に説明する)。例えば図1では、形式2のメモリのフラグメント120及びフラグメント121は、形式2のメモリのフラグメント122に併合される。従って、2つのフラグメントが1つのフラグメントに併合される。
【0013】
一実施例では、メモリ形式は、ACPI仕様に記載の形式を有する。これらのACPIメモリ形式を以下の表1に示す。
【0014】
【表1】

【0015】
ACPI準拠のシステムでは、プレブート中に、ファームウェアはE820テーブルをOSPM(Operating System-directed configuration and Power Management)に報告する。要するに、OSPMはオペレーティングシステムとACPI機能との間のインタフェースである。OSが制御を受け持つと、OSは自分のメモリマッピングを構築するためにE820テーブルを使用する。
【0016】
ACPI準拠のシステムでは、ファームウェアがメモリマッピングをOSPMに伝達する様々な方法が存在する。或る方法では、プレブート・メモリマップをOSに伝達するために、IA(Intel Architecture)システムでINT 15 BIOSインタフェースが使用される。他の方法では、メモリリソースが動的に追加又は削除され得る場合に、メモリ装置は、メモリリソースにより記述されたリソース情報を伝達するACPI Namespaceに規定される。
【0017】
EFI準拠のシステムでは、プレブート・メモリマップをOSローダに伝達するために、EFI Boot Services関数(GetMemoryMap())が使用されてもよい。このマッピングは、OSローダによりOSPMに伝達される。GetMemoryMap()は、様々なEFIメモリ記述子を戻す。これらのEFIメモリ記述子は、全ての設置されているRAM(Random Access Memory)及びファームウェアにより確保されている物理メモリ範囲のシステムメモリマッピングを規定する。以下の表2は、EFIメモリ形式及び対応するACPIアドレス範囲形式とのサンプリングを示している。
【0018】
【表2】

【0019】
ここでの実施例は、メモリフラグメンテーションを低減することを提供する。例えば、Red Hat Linux及びSuse Linuxは、32フラグメントを超えるプレブート・メモリマップをサポートしないことがある。ACPIシステムでは、これは32のE820テーブルエントリに相当する。他の例では、Windows(登録商標)サーバ・オペレーティングシステムは、64のフラグメントより大きいプレブート・メモリマップをサポートしないことがある。プラットフォームの複雑性が増加し、ファームウェア環境がロバストになってくると、フラグメンテーションは32のフラグメントを超過することがある。
【0020】
ここでの実施例は、動的なプレブート・メモリマップのデフラグを提供する。静的な方式では、様々なメモリ形式の“バケツ(bucket)”が予め割り当てられ得る。プレブート中に、メモリ形式毎の使用プロファイルが、初期ブートに基づいて不揮発性記憶装置に保存されてもよい。次に、システムがリブートされ、“バケツ”が使用プロファイルに基づいて再分配される。
【0021】
しかし、このような静的な方式は実用的ではない。まず、このような静的な方式は、プレブート・メモリマップのフラグメンテーションを変更し得るシステム構成の変更を提供しない。
【0022】
更に、サーバのような或るプラットフォームは、5-9の“作動”要件を満たさなければならない。5-9は、サーバが99.999%の時間に利用可能でなければならないという標準的な顧客の要件である。この5-9の可用性は、1年に1分のみの許容停止時間に等しい。このような要件は、静的な方式のように、プレブート・メモリマップを併合する長いブート処理を容認することができない。ここでの実施例は、コンピュータシステムのリブートを必要とせずに、プレブート・メモリマップのデフラグを可能にする。
【0023】
図2を参照すると、メモリフラグメンテーションの低減をサポートするコンピュータシステム200の実施例が図示されている。ファームウェア204はハードウェア202の上のレイヤにある。オペレーティングシステム206はファームウェア204の上のレイヤにある。
【0024】
ハードウェア202は、プロセッサ210と、フラッシュメモリ212と、メモリ208とを有する。一実施例では、ここに記載するメモリフラグメンテーションを低減する機械アクセス可能命令がフラッシュメモリ212に格納される。他の実施例では、EFI仕様に実質的に準拠するメモリフラグメンテーションを低減する命令がフラッシュメモリ212に格納される。代替実施例では、フラッシュメモリ212の代わりに、又はフラッシュメモリ212に加えて、ROM(Read-Only Memory)のような他の形式の不揮発性記憶装置が使用されてもよい。
【0025】
ファームウェアレイヤ204は、プレブート・メモリマップ102と、ファームウェアメモリマネージャ106と、ファームウェアモジュール130-134と、ディスパッチャ220と、閾値240とをサポートする。図2の実施例では、ファームウェアメモリマネージャ106は、併合プロトコル(coalesce protocol)216と、フラグメンテーション検索プロトコル(retrieve fragmentation protocol)218とを提供する。一実施例では、ファームウェアメモリマネージャ106と併合プロトコル216とフラグメンテーション検索プロトコル218とをサポートする命令がフラッシュメモリ212に格納される。ファームウェアメモリマネージャ106と併合プロトコル216とフラグメンテーション検索プロトコル218とについて、以下に更に説明する。
【0026】
一実施例では、プレブート・メモリマップ102により記述されたメモリが併合される必要があるか否かを決定する際に、閾値240が使用される。一実施例では、閾値240は32のフラグメントに相当する。他の実施例では、閾値240は64のフラグメントに相当する。更に他の実施例では、閾値240はコンピュータシステム200の不揮発性記憶装置に他のシステム構成情報と共に格納される。このような不揮発性記憶装置は、フラッシュメモリ212、又はEFI変数を格納しているNVRAM(Non-Volatile Random Access Memory)を有してもよい。
【0027】
一実施例では、ディスパッチャ220は、図4と共に以下に説明するフラグメンテーションを低減する“選択(opt-in)”の実装で使用されてもよい。フレームワークの一実施例では、ディスパッチャ220は、BDS(Boot Device Selection)プロトコルを有する。
【0028】
一般的に、ディスパッチャ220は、併合プロトコルに選択を報告するファームウェアモジュールから“ハンドル(handle)”を受信する。ハンドルは、ディスパッチャ220によりファームウェアモジュールを特定して連絡する手段を提供する。ディスパッチャ220は、併合をサポートするファームウェアモジュールを登録する。
【0029】
図3を参照すると、メモリフラグメンテーションを低減するフローチャート300の実施例が図示されている。ブロック302で始まり、コンピュータシステムが起動又はリセットされる。ブロック304に進み、プレブート中に、ファームウェアメモリマネージャによりメモリがファームウェア(F/W)モジュールに割り当てられる。ファームウェアモジュールが起動されると、ファームウェアモジュールは、ファームウェアメモリマネージャからメモリ形式の割り当てを要求する。ファームウェアメモリマネージャは、要求された形式のメモリアドレス範囲をファームウェアモジュールに割り当てる。
【0030】
判定ブロック306に進み、ファームウェアがオペレーティングシステムをブートする準備ができているか否かをロジックが決定する。EFI準拠の環境では、ReadyToBootイベントがシステムに発行される。EFIシステムでは、ファームウェアモジュールのようなファームウェアエンティティは、所定のセットのイベントに注意するように登録する。ReadyToBootイベントのようなイベントの起動時に、エンティティが通知され、エンティティはそれに応じて様々なタスク(クリーンアップ等)を実行する。一実施例では、これらのタスクはここに記載する併合を有してもよい。
【0031】
判定ブロック306への回答がNOである場合、ロジックはブロック304に戻り、ファームウェアモジュールにメモリを割り当て続ける。判定ブロック306への回答がYESである場合、ロジックはブロック308に進む。
【0032】
ブロック308において、メモリのフラグメンテーションが検索される。一実施例では、フラグメンテーション検索プロトコルが呼び出され、フラグメンテーション検索プロトコルは、プレブート・メモリマップのフラグメントの数を戻す。
【0033】
ブロック310に進み、プレブート・メモリマップのフラグメンテーションが閾値の上であるか否かをロジックが決定する。回答がNOである場合、ロジックはブロック312に進み、オペレーティングシステムをブートする。回答がYESである場合、ロジックはブロック314に進み、ファームウェアモジュールに割り当てられたメモリを併合する。
【0034】
一実施例では、併合は、ファームウェアモジュールのデータバッファのようなファームウェアモジュールの一部を同様のメモリ形式の連続ブロックにマッピングする。これによって、メモリのフラグメンテーションを低減する。例えば、この特定の実施例では、ファームウェアモジュールの命令部分は、もともと割り当てられているメモリ位置に留まってもよいが、データバッファ部分は併合の一部として新しい位置に動かされてもよい。他の実施例では、全体のファームウェアモジュールが併合される。
【0035】
一実施例では、併合プロトコルは、ファームウェアモジュールを併合するために呼び出される。併合プロトコルは、ファームウェアモジュールの新しいメモリ位置へのポインタを戻してもよい。メモリ又はハードディスクのような記憶媒体をデフラグする方法は当業者に周知であることがわかる。
【0036】
判定ブロック316に進み、併合する更なるファームウェアモジュールが存在するか否かをロジックが決定する。回答がYESである場合、ロジックはブロック308に戻る。拝呈ブロック316への回答がNOである場合、ロジックはブロック312に進み、OSをブートする。
【0037】
図4を参照すると、フローチャート400は、メモリフラグメンテーションを低減する一実施例を示している。フローチャート400は、ファームウェアモジュールが併合をサポートするようにコード化されているか否かを登録するファームウェアモジュール選択方式を示している。
【0038】
ブロック402で始まり、コンピュータシステムが起動又はリセットされる。ブロック404に進み、ファームウェアメモリマネージャにより併合プロトコルがファームウェアモジュールに広告される。一実施例では、併合プロトコルを広告するために、ファームウェアメモリマネージャは、併合プロトコルのメモリアドレスを示すポインタをファームウェアモジュールに渡す。
【0039】
ブロック405に進み、ファームウェアメモリマネージャによりメモリがプレブート中にロードしたファームウェアモジュールに割り当てられる。ブロック406に進み、ファームウェアモジュールが併合をサポートする場合、この情報がディスパッチャに登録される。
【0040】
判定ブロック408に進み、システムがオペレーティングシステムをブートする準備ができているか否かをロジックが決定する。判定ブロック408への回答がNOである場合、ロジックはブロック405に戻る。判定ブロック408への回答がYESである場合、ロジックはブロック410に進む。
【0041】
ブロック410において、フラグメンテーション検索プロトコルを使用してメモリのフラグメンテーションが検索される。判定ブロック412に進み、フラグメンテーションが閾値の上であるか否かをロジックが決定する。回答がNOである場合、ロジックはブロック414に進み、OSをブートする。判定ブロック412への回答がYESである場合、ロジックはブロック416に進み、ファームウェアモジュールの併合プロトコルを起動する。一実施例では、ファームウェアモジュールが併合プロトコルを呼び出す。他の実施例では、ディスパッチャが併合プロトコルを呼び出す。
【0042】
判定ブロック418に進み、併合プロトコルをサポートする更なるファームウェアモジュールが存在するか否かをロジックが決定する。一実施例では、ディスパッチャにより維持されている併合をサポートする登録済のファームウェアモジュールのリストが調べられる。
【0043】
判定ブロック418への回答がNOである場合、ロジックはブロック414に進み、OSをブートする。判定ブロック418への回答がYESである場合、ロジックはブロック410に進み、メモリのフラグメンテーションを検索する。
【0044】
図4の実施例では、ファームウェアモジュールは、ここに記載する併合を利用するようにコード化されることがわかる。ここでの実施例は、併合の関与と非関与との混合であるファームウェアモジュールのセットで動作してもよい。フローチャート400の選択方式は、ファームウェアモジュールのプロバイダが要望通りに併合を利用することを可能にする。
【0045】
図5を参照すると、フローチャート500は、メモリフラグメンテーションを低減する一実施例を示している。フローチャート500は、ファームウェアメモリマネージャにより併合が指示される実施例を示している。この実施例では、ファームウェアメモリマネージャは、メモリ割り当ての全能の知識を利用する。
【0046】
ブロック502で始まり、コンピュータシステムが起動/リセットされる。ブロック504に進み、ファームウェアメモリマネージャは、メモリをファームウェアモジュールに割り当てる。ブロック505に進み、ファームウェアメモリマネージャは、ファームウェアメモリマネージャがファームウェアモジュールに併合の後の新しいメモリ位置を通知することを可能にするファームウェアモジュールインタフェースを、ファームウェアモジュールから受信する。
【0047】
判定ブロック506に進み、システムがOSをブートする準備ができているか否かをロジックが決定する。判定ブロック506への回答がNOである場合、ロジックはブロック504に戻る。判定ブロック506への回答がYESである場合、ロジックはブロック508に進む。
【0048】
ブロック508において、ファームウェアメモリマネージャによりフラグメンテーション検索プロトコルを使用して、メモリのフラグメンテーションが検索される。判定ブロック510に進み、フラグメンテーションが閾値より大きいか否かをロジックが決定する。回答がNOである場合、ブロック512に示すようにOSがブートされる。回答がYESである場合、ロジックはブロック514に進む。
【0049】
ブロック514において、ファームウェアメモリマネージャは、ファームウェアモジュールの併合プロトコルを起動する。判定ブロック516に進み、併合処理を終えていない更なるファームウェアモジュールが存在するか否かをロジックが決定する。判定ブロック516への回答がYESである場合、ロジックはブロック508に戻る。
【0050】
判定ブロック516への回答がNOである場合、ロジックはブロック518に進み、ファームウェアメモリマネージャは、併合されているファームウェアモジュールに新しいメモリ位置を通知する。一実施例では、ファームウェアメモリマネージャは、ファームウェアモジュールにそのデータバッファの新しい位置へのポインタを渡す。一実施例では、ファームウェアメモリマネージャは、ブロック505でファームウェアメモリマネージャに渡されたファームウェアモジュールインタフェースを使用して、ファームウェアモジュールに通知してもよい。
【0051】
ここでの実施例は、動的に、コンピュータシステムのリブートを必要とせずに、メモリフラグメンテーションを低減することを提供する。いくつかのIA32及びEM64T Extended Memory 64 Technology)オペレーティングシステムは、32より多くのE820テーブルエントリをサポートしない。要するに、EM64Tは、32ビットシステムが4ギガバイトラインより上のメモリを指定することを可能にする。EFI準拠のシステムでは、E820テーブルは、基本的にはEFIメモリマップの変換であるため、E820エントリの数は、EFIファームウェアモジュールのフラグメンテーションの程度に比例する。
【0052】
図6は、本発明の実施例が実装され得る例示的なコンピュータシステム600の一実施例の図である。コンピュータシステム600は、チップセット606に結合されたプロセッサ602及びメモリ604を有する。記憶装置612、不揮発性記憶装置(NVS)605、ネットワークインタフェース614及び入出力(I/O)装置618もまたチップセット606に結合されてもよい。コンピュータシステム600の実施例は、デスクトップコンピュータ、ノートブックコンピュータ、サーバ、携帯情報端末、ネットワークワークステーション等を含み、これらに限定されない。一実施例では、コンピュータシステム600は、メモリ604に結合されたプロセッサ602を少なくとも有し、プロセッサ602はメモリ604に格納された命令を実行する。
【0053】
プロセッサ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)等を有してもよいが、これらに限定されない。
【0054】
チップセット606は、MCH(Memory Controller Hub)、ICH(Input/Output Controller Hub)等を有してもよい。チップセット606はまた、システムクロックのサポート、電力管理のサポート、オーディオのサポート、グラフィックのサポート等を有してもよい。一実施例では、チップセット606は、プロセッサ602及びメモリ604用のソケットを有する基板に結合される。
【0055】
コンピュータシステム600の構成要素は、PCI(Peripheral Component Interconnect)バス、SMBUS(System Management bus)、LPC(Low Pin Count)バス、SPI(Serial Peripheral Interface)バス、AGP(Accelerated Graphics Port)インタフェース等を含み、様々なバスにより接続されてもよい。I/O装置618は、キーボード、マウス、ディスプレイ、プリンタ、スキャナ等を有してもよい。
【0056】
コンピュータシステム600は、ネットワークインタフェース614を通じて外部ネットワークにインタフェース接続してもよい。ネットワークインタフェース614は、モデム、NIC(network interface card)又はコンピュータシステムを他のコンピュータシステムに結合する他のインタフェースを有してもよいが、これらに限定されない。搬送波信号623は、ネットワークインタフェース614により受信/送信される。図6に示す実施例では、搬送波信号623は、コンピュータシステム600をネットワーク624(LAN(Local Area Network)、WAN(Wide Area Network)、インターネット又はこれらの何らかの組み合わせ等)にインタフェース接続するために使用される。一実施例では、コンピュータシステム600及びコンピュータシステム625がネットワーク624で通信し得るように、ネットワーク624はコンピュータシステム625に更に結合される。
【0057】
コンピュータシステム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を介して送信又は受信されてもよいことがわかる。
【0058】
一実施例では、コンピュータシステム600は、OS(Operating System)ソフトウェアを実行してもよいことがわかる。例えば、本発明の一実施例は、コンピュータシステム600のオペレーティングシステムとして、Microsoft Windows(登録商標)を利用する。コンピュータシステム600で使用され得る他のオペレーティングシステムは、Apple Macintoshオペレーティングシステム、Linuxオペレーティングシステム、Unix(登録商標)オペレーティングシステム等を有するが、これらに限定されない。
【0059】
明細書上で、機械アクセス可能媒体は、機械(例えば、コンピュータ、ネットワーク装置、携帯情報端末、製造ツール、1つ以上のプロセッサのセットを備えた何らかの装置等)により読み取り可能又はアクセス可能な形式で情報を提供(すなわち、格納及び/又は送信)する何らかの機構を有する。例えば、機械アクセス可能媒体は、記録可能/記録不可能媒体(例えば、ROM(Read-Only Memory)、RAM(Random Access Memory)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置等)を有するが、これらに限定されない。更に、機械アクセス可能媒体は、電気信号、光信号、音響信号又は他の形式の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)のような伝搬信号を有してもよい。
【0060】
本発明の様々な動作の実施例について説明した。これらの動作は、プロセッサ、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)等を使用した機械により実装され得る。一実施例では、記載の動作のうち1つ以上は、機械アクセス可能媒体に格納された命令を構成してもよい。機械アクセス可能媒体に格納された命令は、機械により実行されると、機械に記載の動作を実行させる。動作の一部又は全部が記載される順序は、これらの動作が必ずしも順序に依存することを示すように解釈されるべきではない。代替の順序も、この説明の利益を享受した当業者にわかる。更に、全ての動作が本発明の各実施例に必ずしも存在するとは限らないことがわかる。
【0061】
要約書に記載したものを含み、本発明の図示の実施例の前記の説明は、網羅的でなく、開示された正確な形式に実施例を限定することを意図するものではない。本発明の特定の実施例及び例が説明の目的でここに記載されているが、当業者にわかるように、様々な変更も可能である。これらの変更は、前記の詳細な説明を鑑みて、本発明の実施例に行われ得る。特許請求の範囲で使用される用語は、本発明を限定するものとして解釈されるべきではない。むしろ、特許請求の範囲は、請求項の解釈の確立した原則に従って解釈されるべきである
【図面の簡単な説明】
【0062】
【図1】本発明の教示に従ってメモリフラグメンテーションを低減する一実施例を示すブロック図
【図2】本発明の教示に従ってメモリフラグメンテーションの低減をサポートする環境の一実施例を示すブロック図
【図3】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図4】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図5】本発明の教示に従ってメモリフラグメンテーションを低減するロジック及び動作の一実施例を示すフローチャート
【図6】本発明の実施例を実装するコンピュータシステムの一実施例を示すブロック図

【特許請求の範囲】
【請求項1】
コンピュータシステムのプレブート段階中にファームウェアモジュールにメモリを割り当て、前記メモリは複数のメモリ形式に基づいて割り当てられ、
メモリのフラグメンテーションを決定し、フラグメントは同じ形式のメモリの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記コンピュータシステムによりオペレーティングシステムをブートすることを有する方法。
【請求項2】
前記ファームウェアモジュールに割り当てられたメモリを併合することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない請求項1に記載の方法。
【請求項3】
前記ファームウェアモジュールに割り当てられたメモリは、前記ファームウェアモジュールが併合をサポートする場合に併合される請求項1に記載の方法。
【請求項4】
前記ファームウェアモジュールが併合をサポートする場合に、前記ファームウェアモジュールをディスパッチャに登録することを更に有し、前記ディスパッチャは、併合をサポートするファームウェアモジュールを追跡する請求項3に記載の方法。
【請求項5】
前記併合は、前記ファームウェアモジュールと前記ディスパッチャとのうち1つにより起動される請求項3に記載の方法。
【請求項6】
前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合することは、
ファームウェアメモリマネージャにより前記併合を起動し、
前記併合の結果として、前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を、前記メモリマネージャにより前記ファームウェアモジュールに通知する請求項1に記載の方法。
【請求項7】
前記複数のメモリ形式は、ACPI(Advanced Configuration and Power Interface)メモリ形式を有する請求項1に記載の方法。
【請求項8】
前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合することは、前記ファームウェアモジュールによりデータバッファとして使用されるメモリを併合することを有する請求項1に記載の方法。
【請求項9】
実行されたときに、
コンピュータシステムのプレブート段階中にファームウェアメモリマネージャによりファームウェアモジュールにメモリを割り当て、前記メモリは複数のメモリ形式に基づいて割り当てられ、
フラグメンテーション検索プロトコルを起動し、プレブート・メモリマップにより記述されるメモリのフラグメンテーションを決定し、フラグメントは同じ形式のメモリの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、併合プロトコルを起動し、前記複数のメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたメモリの少なくとも一部を併合し、
前記コンピュータシステムでオペレーティングシステムをブートすることを有する動作を実行する複数の命令を有する機械アクセス可能媒体を有する製造物。
【請求項10】
前記併合プロトコルを起動することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない請求項9に記載の製造物。
【請求項11】
前記ファームウェアモジュールは、命令部分とデータバッファ部分とを有し、
前記併合プロトコルは、前記データバッファ部分を併合する請求項9に記載の製造物。
【請求項12】
前記ファームウェアモジュールが前記併合プロトコルをサポートするようにコード化される場合に、前記ファームウェアモジュールに割り当てられたメモリは併合される請求項9に記載の製造物。
【請求項13】
前記複数の命令の実行は、前記ファームウェアモジュールが前記併合プロトコルをサポートするようにコード化されている場合に、前記ファームウェアモジュールをディスパッチャに登録することを有する動作を更に実行する請求項12に記載の製造物。
【請求項14】
前記併合プロトコルを起動することは、
前記ファームウェアメモリマネージャにより前記併合プロトコルを起動し、
併合の結果としての前記ファームウェアメモリマネージャによる前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を、前記ファームウェアモジュールに通知することを有し、
前記ファームウェアメモリマネージャは、前記ファームウェアモジュールから受信したファームウェアモジュールインタフェースを使用して、前記新しいメモリ位置を前記ファームウェアモジュールに通知する請求項9に記載の製造物。
【請求項15】
前記複数のメモリ形式は、ACPI(Advanced Configuration and Power Interface)メモリ形式を有する請求項9に記載の製造物。
【請求項16】
前記複数の命令は、実質的にEFI(Extensible Firmware Interface)仕様に準拠する請求項9に記載の製造物。
【請求項17】
プロセッサと、
前記プロセッサに結合されたSDRAM(Synchronized Dynamic Random Access Memory)ユニットと、
前記プロセッサに結合された記憶ユニットと
を有するコンピュータシステムであって、
前記記憶ユニットは、前記プロセッサにより実行されたときに、
前記コンピュータシステムのプレブート段階中にファームウェアモジュールにSDRAMを割り当て、前記SDRAMは複数のACPI(Advanced Configuration and Power Interface)メモリ形式に基づいて割り当てられ、
フラグメンテーション検索プロトコルを起動し、プレブート・メモリマップにより記述された前記SDRAMのフラグメンテーションを決定し、フラグメントは、同じACPIメモリ形式のSDRAMの連続ブロックを有し、
前記フラグメンテーションが閾値より大きい場合に、併合プロトコルを起動し、前記複数のACPIメモリ形式に基づいて前記ファームウェアモジュールに割り当てられたSDRAMの少なくとも一部を併合し、
前記コンピュータシステムでオペレーティングシステムをブートすることを有する動作を前記プロセッサが実行する複数の命令を有するコンピュータシステム。
【請求項18】
前記併合プロトコルを起動することと、前記オペレーティングシステムをブートすることとの間に、前記コンピュータシステムはリセットされない請求項17に記載のシステム。
【請求項19】
前記ファームウェアモジュールが前記併合プロトコルをサポートする場合に、前記ファームウェアモジュールに割り当てられたSDRAMは併合される請求項17に記載のシステム。
【請求項20】
前記併合プロトコルを起動することは、
前記ファームウェアメモリマネージャにより前記併合プロトコルを起動し、
前記併合プロトコルによる前記併合の結果としての前記ファームウェアモジュールの少なくとも一部の新しいメモリ位置を前記ファームウェアモジュールに通知することを有する請求項17に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公表番号】特表2008−525915(P2008−525915A)
【公表日】平成20年7月17日(2008.7.17)
【国際特許分類】
【出願番号】特願2007−549494(P2007−549494)
【出願日】平成17年12月21日(2005.12.21)
【国際出願番号】PCT/US2005/046576
【国際公開番号】WO2006/073864
【国際公開日】平成18年7月13日(2006.7.13)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】