(57)【特許請求の範囲】
【請求項１】
システムであって、
複数のメモリ領域を含み、個々のメモリ領域が複数のセグメントを含む、ハードウェア・メモリ・モジュールと、
前記複数のメモリ領域の内のメモリ領域において不良セグメントを検出する不良検出モジュールと、
前記不良セグメントを、前記メモリ領域のエッジに位置する有効セグメントにリマッピングすることによって、前記不良セグメントを論理的にクラスタリングするクラスタリング・モジュールであって、前記有効セグメントが前記メモリ領域内の連続メモリ空間を最大化するように選択される、クラスタリング・モジュールと、
を含み、
前記クラスタリング・モジュールが、更に、前記メモリ領域についてのリマッピング・メタデータを作成し、前記メモリ領域の前記リマッピング・メタデータを前記メモリ領域内に格納し、前記リマッピング・メタデータが、前記メモリ領域における前記複数のセグメントの各々についてのエントリを含む、システム。
【請求項２】
請求項１記載のシステムにおいて、前記クラスタリング・モジュールが、前記リマッピング・メタデータを、前記メモリ領域の最上位における最初のセグメント、または前記メモリ領域の最下位における最後のセグメントに格納する、システム。
【請求項３】
請求項１記載のシステムにおいて、前記クラスタリング・モジュールが、前記リマッピング・メタデータにおいて、不良セグメントに関連付けられた第１エントリを、前記有効セグメントに関連付けられた第２エントリと交換する、システム。
【請求項４】
請求項１記載のシステムにおいて、
前記クラスタリング・モジュールが、更に、前記複数のメモリ領域における前記メモリ領域および追加のメモリ領域を含むメモリ・リマッピング領域についてのリマッピング・メタデータを作成し、前記メモリ・リマッピング領域の最上位、または前記メモリ・リマッピング領域の最下位において前記メモリ・リマッピング領域の前記リマッピング・メタデータを格納し、
前記リマッピング・メタデータが、前記メモリ領域および前記追加のメモリ領域における前記セグメントの各々についてのエントリを含み、前記連続メモリ空間が、前記メモリ領域および前記追加のメモリ領域に広がる、システム。
【請求項５】
請求項１記載のシステムにおいて、前記メモリ領域の前記エッジに位置する前記有効セグメントが、前記メモリ領域において最上位で最も利用可能な有効セグメント、または前記メモリ領域において最下位で最も利用可能な有効セグメントの少なくとも一方を含む、システム。
【請求項６】
請求項１記載のシステムにおいて、前記ハードウェア・メモリ・モジュールが相変化メモリを含む、システム。
【請求項７】
請求項１記載のシステムであって、更に、前記複数のメモリ領域に記憶空間を割り当てるメモリ割り当てモジュールを備え、前記メモリ割り当てモジュールが、オペレーティング・システムの一部である、システム。
【請求項８】
請求項１記載のシステムにおいて、前記不良検出モジュールまたは前記クラスタリング・モジュールの少なくとも一方がメモリ・コントローラの一部である、システム。
【請求項９】
請求項８記載のシステムにおいて、前記メモリ・コントローラが前記ハードウェア・メモリ・モジュール上に位置される、システム。
【請求項１０】
請求項１記載のシステムにおいて、前記複数のメモリ領域の各々がメモリのページを含み、各セグメントがメモリのラインを含む、システム。
【請求項１１】
請求項１記載のシステムにおいて、前記クラスタリング・モジュールが境界ポインタを使用して、前記有効セグメントを、前記メモリ領域の前記エッジにおいてクラスタリングされた最後の論理不良セグメントに連続する次の論理有効セグメントとして識別する、システム。
【請求項１２】
請求項１記載のシステムにおいて、前記クラスタリングが、前記複数のメモリ領域内において、より多量の連続メモリ空間を生成する、システム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  スケーリングという課題のために、最近のメモリ技術は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）のような電荷に基づくメモリの使用から、相変化メモリ（ＰＣＭ）のような抵抗変化型メモリおよび磁気抵抗メモリに移行する場合がある。しかしながら、多くのこのようなメモリは、消磨する(wear out)する傾向がある。
【０００２】
[0002]  メモリは、システムがメモリに書き込むときに摩耗する可能性がある。何故なら、書き込みはメモリ内部において材料の物理構成を変化させるか、または他の何らかの態様でそれを劣化させ得るからである。この問題が発生し易いメモリを、摩耗性メモリ(wearable memory)と呼ぶ。徐々に進む劣化のために、摩耗性メモリはメモリ不良を生じやすく、システムによる大量の書き込みの後、メモリがこのシステムのために信頼性高くデータを格納することを妨げるおそれがある。例えば、ＰＣＭセルは消磨する（即ち、不良になる）前に通例１０８回の書き込みに耐えることができ、一方ＤＲＡＭセルは不良になる前に通例１０１５回の書き込みに耐えることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0003]  システム用のメモリは、複数の領域に分割されることがあり、各領域は多数のセグメントを有する。システムは、これらのメモリ領域を、メモリ割り当て（例えば、ランタイム中）、および／または主メモリと、ハード・ディスク・ドライブのような補助ストアとの間におけるデータの転送のための単位として使用することができる。メモリ領域における個々のセグメントが、多数回の書き込みのために不良になり始めると、メモリ断片化が発生する。多くの断片化が発生するのは、メモリ領域が、更に小さい使用可能なメモリの部分（例えば、１つ以上の連続「作業」セグメント）に分割されるときであり、これらの部分は、使用できない不良セグメントまたは消磨したセグメントによって分離される。不良セグメント間にある使用可能メモリの小さな部分は、メモリ割り当てに対しては信頼性があることに変わりはないが、これらは事実上システムには使用できない。何故なら、これらの小さい部分は、１つ１つが、格納に連続メモリ（例えば、多数の連続するセグメント）を必要とするもっと大きなオブジェクト（例えば、データ）を格納するためには小さすぎるからである。言い換えると、システムは、断片化のために、２つの不良メモリ・セグメント間に、もっと大きなオブジェクトをはめ込むことができない。
【課題を解決するための手段】
【０００４】
[0004]  本明細書において論ぜられる技法は、断片化に取り組むことによって、摩耗性メモリの寿命を延長させる。本技術は、メモリ領域において不良メモリ・セグメントを識別する、協働ハードウェアおよびソフトウェア・システムにおいて実現される。次いで、本技術は、リマッピング・プロセスを使用して、メモリ領域の周辺部分において不良メモリ・セグメントを論理的にクラスタリングすることによって、不良メモリ・セグメントを管理することができる。リマッピング・プロセスは、メモリ域についてセグメント・リマッピング・エントリを定めるリマッピング・メタデータを作成し、格納するステップを含むことができる。したがって、不良クラスタリング(failure clustering)は論理的にメモリ断片化を解消または低減するので、システムはより大きな連続メモリ部分をオブジェクトの格納のために割り当てることができる。
【０００５】
[0005]  少なくとも１つの実施形態では、次に、システム・ソフトウェア（例えば、オペレーティング・システム）および／またはメモリ・コントローラが、メモリ割り当て、メモリ読み出し、メモリ書き込み、またはこれらの組み合わせの間に、リマッピング・メタデータにアクセスし、これを使用し更新することができる。例えば、システム・ソフトウェアおよび／またはメモリ・コントローラは、メモリ不良を伝え、メモリ不良がリマッピングおよびクラスタリングされた後におけるメモリ領域内にある連続記憶空間の量を示すことによって、ランタイム実行中にメモリを割り当てることができる。
【０００６】
[0006]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられる。この摘要は、特許請求する主題の主要な特徴や必須の特徴を識別することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として使用されることを意図するのでもない。例えば、「技法」という用語は、以上のコンテキストによってそして本文書全体にわたって許される限りにおいて、システム（１つまたは複数）、ハードウェア、方法（１つまたは複数）、コンピュータ読み取り可能命令、モジュール（１つまたは複数）、および／またはアルゴリズムを指す。
【図面の簡単な説明】
【０００７】
[0007]
添付図面を参照しながら、詳細な説明を提示する。図面では、参照番号の内最も左側の桁（１つまたは複数）は、その参照番号が最初に現れる図を識別する。異なる図における同じ参照番号の使用は、同様または同一の項目を示す。
【図１】図１は、本明細書において説明する種々の実施形態にしたがってクラスタリングおよびリマッピング技法を実現するシステム・アーキテクチャ例を示す。
【図２】図２は、本明細書において説明する種々の実施形態にしたがって、システム・アーキテクチャ例がクラスタリングおよびリマッピングを実現するときの、異なる段階におけるメモリ領域例を示す。
【図３】図３は、本明細書において説明する種々実施形態による、２つの連続メモリ領域例を示す。
【図４】図４は、本明細書において説明する種々の実施形態にしたがって、リマッピング・メタデータを作成および／または更新するメモリ割り当てプロセス例を示す。
【図５】図５は、本明細書において説明する種々の実施形態にしたがって、リマッピング・メタデータを使用してメモリ領域からデータを読み出すメモリ割り当てプロセス例を示す。
【発明を実施するための形態】
【０００８】
全体像
[0013]  以下の説明は、不良セグメントによって生じた、メモリ領域内部における断片化を論理的に低減および／または解消する技法について明記する。システムが、メモリ領域内部でセグメントの不良を検出したとき、本技術は論理的にこの不良をメモリ領域の周辺部分にリマッピングする（例えば、メモリ領域の最上位または最下位）。また、本技術は、リマッピング・メタデータを作成することもできる。リマッピング・メタデータは、不良セグメントをメモリ領域の周辺部分にリマッピングしたことによって得られた、より大きな連続メモリ部分をシステムが割り当てることができるように、セグメント位置スイッチおよびセグメント・オフセットを示す。少なくとも１つの実施形態では、リマッピング・メタデータは、メモリ領域に対して一意であり、本技術はリマッピング・メタデータをメモリ領域内に格納する。次いで、システムは、メモリ割り当てプロセスの間に、このリマッピング・メタデータを使用することができる。
【０００９】
[0014]  先に論じたように、摩耗性メモリにはメモリ不良が生じ易く、大量の書き込みの後、メモリが信頼性高くデータを格納するのを妨げるおそれがある。メモリ不良は、予め存在する不良または固定不良(static failure)であるかもしれず、あるいはメモリ不良は動的不良であるかもしれない。種々の実施形態において、このメモリは、大きな摩耗性メモリの部分（通例、より密度が濃く、より価格効率的なメモリであることが期待される）と、データおよび失敗することを許されない動作（例えば、オペレーティング・システムに肝要であり得る動作）を格納する、もっと小さなＤＲＡＭ部分とを含むことができる主メモリである。摩耗性メモリは、安定的な記憶セグメントを設けることができ、これよりも大きな主メモリの領域と比較して、更に細かい粒度で不良になる。この文書のコンテキストでは、前述した大きい方のメモリ領域をメモリ・ページと記述し、メモリ・ページのセグメントをラインと呼ぶ。しかしながら、本文書のコンテキストでは、メモリ領域は、摩耗性メモリまたは他のメモリ技術におけるメモリ割り当てに使用される、任意のメモリ単位またはブロックでもよい。更に、メモリ領域およびラインは、オブジェクトの記憶のために、サイズまたは容量が可変であることもできる（例えば、領域および／またはラインは、もっと粒度が高くてもまたは低くてもよい）。
【００１０】
[0015]  ＤＲＡＭを主メモリとして使用するシステムにおいてメモリ不良(failure)が発生したとき、メモリ領域（例えば、ページ）全体が無効にされる。しかしながら、ＤＲＡＭを使用する場合、永続的なメモリ不良は非常に希である。対照的に、摩耗性メモリにおける永続的メモリ不良の方が一般的である。摩耗性メモリに対してメモリ領域全体と同じまたは同様の無効化が採用されるとすると、各メモリ領域が１つを除いて全ての機能セグメントを有するままであっても、メモリ容量は直ちに使い果たされるであろう。この理由のために、領域粒度でメモリを無効にする代わりに、摩耗性メモリを採用するシステムは、もっと細かいセグメント粒度（例えば、ライン粒度）でメモリを無効にすることができる。しかしながら、仮想アドレスから物理アドレスへのメモリ変換は、摩耗性メモリを有するシステムにおいても、相変わらず領域粒度で行われる可能性があるので（そして、性能オーバーヘッドの理由により、通常は領域粒度で行われる）、仮想アドレス空間を完全に連続的にすることができず、その結果断片化が発生する可能性がある。
【００１１】
[0016]  このように、本明細書において論ずる技法は、前述したメモリ断片化問題に取り組むに当たって、不良メモリ・ラインを個々のメモリ・ページの周辺部分（例えば、メモリ・ページの最上位または最下位）においてクラスタリングする。不良メモリ・ラインをクラスタリングするために、本技法は、各メモリ・ページ内にリマッピング・プロセスを実施する。その結果、本技法は、セグメント不良が発生し始めたときに、任意の２つの不良セグメント間にある作業メモリよりも大きなオブジェクトであっても、ページに格納することができるように、より大きな連続メモリ部分を論理的に作成する。これによって、メモリ領域の寿命を延ばす。
【００１２】
[0017]  ある実施形態では、本技法は、不良メモリ・ラインを、もっと大きなメモリ・リマッピング領域の周辺部分においてクラスタリングすることができる。例えば、本技法は、個々のメモリ・ページ毎の代わりに、各２番目、４番目、８番目等のメモリ・ページの最上位または最下位に、不良メモリ・ラインを置くように構成することができる。したがって、本技法は、ハードウェア・メモリ・モジュール領域のサイズの倍数（例えば、２つのメモリ・ページ、４つのメモリ・ページ、８つのメモリ・ページ等）である、「リマッピング」メモリ領域上で、リマッピングおよびクラスタリング・プロセスを実現するように構成することができる。これによって、更に断片化を解消し、より大きな連続記憶ブロック部分を作成することができる。
【００１３】
[0018]  種々の実施形態において、本明細書において説明する不良クラスタリングおよびリマッピング・プロセスは、システムが他のメモリ・誤り補正リソースを使用し、それらが尽きた後に実施することができる。例えば、他のメモリ・誤り補正リソースは、誤り訂正コードＥＣＣ（通例今日ではＤＲＡＭに使用される）および誤り補正ポインタ・エントリのような、標準的な誤り補正技法を含むことができる。
例示アーキテクチャ
[0019]  図１は、本明細書において論ずる技法を実現するシステム・アーキテクチャ例１００を示す。システム・アーキテクチャ１００は、断片化が生じ易いメモリ技術を使用する任意の適した計算デバイスとして構成することができる。一例としてそして限定ではなく、システム・アーキテクチャ１００は、パーソナル計算デバイス、ラップトップ計算デバイス、スマート・フォン、サーバ計算デバイス、サーバ・ファーム、データセンタ、あるいはメモリを使用するおよび／または割り当てる任意の他のデバイスを含むことができる。したがって、システム・アーキテクチャ１００は、システム・ソフトウェア１０２、コントローラ１０４、およびメモリ・モジュール１０６を含むことができる。システム・ソフトウェア１０２、メモリ・コントローラ１０４、および／またはメモリ・モジュール１０６は、種々の異なる構成で接続することができ、そして通信することができる（例えば、システム・バス、ネットワーク等）。
【００１４】
[0020]  種々の実施形態において、システム・ソフトウェア１０２は、Microsoft Windows（登録商標）オペレーティング・システム、スマート・フォン・オペレーティング・システム、リアル・タイム・オペレーティング・システム、またはメモリ・モジュール１０６に結合される任意の他のタイプのオペレーティング・システムを含むことができる。更に、システム・ソフトウェア１０２は、任意のタイムのランタイム実行可能環境（例えば、バーチャル・マシン、マネージド・コード(managed code)等）も含むことができる。少なくとも１つの実施形態では、オペレーティング・システムは、ランタイム実行可能環境がメモリ不良周囲のメモリを割り当てることができるように、メモリ不良をランタイム実行可能環境に伝えることができる。
【００１５】
[0021]  種々の実施形態において、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４は、メモリ・モジュール１０６（例えば、物理モジュール）へのデータの流れおよびメモリ・モジュール１０６からのデータの流れを管理するように構成される。メモリ・モジュール１０６は、複数のページ１０８（１）．．．１０８（Ｎ）を含むハードウェア・メモリ・モジュールとすることもでき、各ページ１０８（１）．．．１０８（Ｎ）は、先に論じたメモリの大きい方の領域を表す。この目的のために、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４は、システム・ソフトウェア１０２によって管理されている１つ以上の処理コア１１０（１）．．．１１０（Ｍ）上で実行するプログラムまたはアプリケーションに関連付けられたオブジェクトのために、ページ１０８（１）．．．１０８（Ｎ）内のメモリ空間を割り当てるように構成することができる。したがって、システム・ソフトウェア１０２は、サービスを１つ以上の処理コア１１０（１）．．．１１０（Ｍ）に提供するように構成することができ、各処理コア１１０（１）．．．１１０（Ｍ）は、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４によって現在アクセスされているページ１０８（１）．．．１０８（Ｎ）の内１つ以上をキャッシュするキャッシュ１  １１２（１）．．．１１２（Ｌ）を有することができる。更に、キャッシュ１１２（１）．．．１１２（Ｌ）は、システム・ソフトウェア１０２によって伝えられるメモリ不良または誤り情報もキャッシュすることができる。少なくとも１つの実施形態では、キャッシュ１１２（１）．．．１１２（Ｌ）は、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）とすることができる。
【００１６】
[0022]  種々の実施形態において、メモリ・モジュール１０６は、システム・アーキテクチャ１００およびシステム・ソフトウェア１０２の主メモリである。システム・ソフトウェア１０２は、メモリ・モジュール１０６に格納することができ、またはメモリ・モジュール１０６以外のシステム・アーキテクチャ１００内にある別のメモリに格納されてもよい。メモリ・コントローラ１０４は、メモリ・モジュール１０６と共にプリント回路ボード上に配置されるコンピュータ・ハードウェアの一部とすることができ、またはメモリ・コントローラ１０４は、メモリ・モジュール１０６と同じ基板上に配置することができ、またはメモリ・コントローラ１０４は、処理コア１１０（１）．．．１１０（Ｍ）と共にチップ基板上に配置されてもよい。少なくとも１つの実施形態では、メモリ・コントローラ１０４は、ファームウェア内またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）内に埋め込まれる。他の実施形態では、メモリ・コントローラ１０４は、メモリ・モジュール１０６に関連付けられた特定用途集積回路（ＡＳＩＣ）、またはメモリ・モジュール１０６に関連付けられたデバイス・ドライバであってもよい。このように、メモリ・コントローラ１０４は、システム・アーキテクチャ１００の処理側に配置することができ、またはメモリ・コントローラ１０４は、メモリ・モジュール１０６上にローカルに配置されてもよい。
【００１７】
[0023]  先に論じたように、ページ１０８（１）．．．１０８（Ｎ）は、各々、多数のラインを含み、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４はこのラインをメモリ割り当てのために使用することができる。メモリ・ページのサイズ、およびメモリ・モジュール内におけるメモリ・ページの数は、システム・アーキテクチャにしたがって異なってもよい。例えば、メモリ・ページのサイズは、ほぼ１キロバイトから２メガバイトの範囲に収まればよい。更に、少なくとも一例では、メモリ・ページにおける各ラインは５１２ビットとするとよい。しかしながら、他の例では、ページおよびラインは、これらよりも小さくても、または大きくてもよい。
【００１８】
[0024]  種々の実施形態では、処理コア１１０（１）．．．１１０（Ｍ）の各々は、１つ以上のプロセッサを含むことができる。プロセッサは、１つの処理ユニットでも、または多数の２つ以上のユニットでもよく、そのいずれもまたは全てが多数の計算ユニットを含むことも可能である。プロセッサは、１つ以上のマイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、ディジタル信号プロセッサ、中央処理ユニット、状態機械、論理回路、メモリ共有プロセッサ、および／または動作命令に基づいて信号を操作する任意のデバイスとして実現することができる。能力の中でもとりわけ、プロセッサは、システム・ソフトウェア１０２、メモリ・コントローラ１０４、あるいはシステム・アーキテクチャ１００にアクセス可能な任意の他のアプリケーションまたはプログラムに格納されたコンピュータ実行可能命令を取りだして実行するように構成することができる。
【００１９】
[0025]  更に本明細書において論ずるように、メモリ・モジュール１０６におけるメモリ１０８（１）．．．１０８（Ｎ）のページは、ＰＣＭのような摩耗性メモリのページとすることができる。しかしながら、本明細書において説明する技法は、他のタイプのハードウェア・メモリ技術を採用するシステムにも広く応用可能である。他のタイプのハードウェア・メモリ技術には、フラッシュ・メモリ、ＲＡＭサブシステム、スピン−トルク・トランスファ磁気抵抗ＲＡＭ（ＳＴＴ−ＭＲＡＭ）、強誘電体ＲＡＭ（ＦＲＡＭ（登録商標））、抵抗ＲＡＭ（ＲＲＡＭ（登録商標））、または任意の他の磁気抵抗メモリが含まれる。更に、本明細書において論ずる技法は、ＤＲＡＭのような電荷に基づくメモリにも応用可能であると考えられる。
【００２０】
[0026]  種々の実施形態において、システム・ソフトウェア１０２は、メモリ割り当てモジュール１１４を含むことができ、メモリ・コントローラ１０４は、不良検出モジュール１１６、クラスタリング・モジュール１１８、および不良情報キャッシュ１２０を含むことができる。メモリ割り当てモジュール１１４は、メモリ・モジュール１０６内においてページ１０８（１）．．．１０８（Ｎ）へ行くデータ（例えば、オブジェクト）およびページ１０８（１）．．．１０８（Ｎ）から来るデータ（例えば、オブジェクト）の流れを管理するように構成することができる。不良検出モジュール１１６は、ページ１０８（１）．．．１０８（Ｎ）の各々内において不良ラインを検出するように構成することができる。例えば、メモリ・コントローラ１０４が、現在アクセスされているページ１０８（Ｎ）におけるラインにデータを書き込みながら、このデータの他のバージョンを一時的にバッファに格納しているとき、不良検出モジュール１１６は、あるラインが不良になりもはや信頼性がないことを検出し確認する。次いで、メモリ・コントローラ１０４は、現在アクセスされているページ１０８（Ｎ）からデータを読み出し（例えば、直ちにデータを読み出す）、不良検出モジュール１１６は、読み出されたデータを、バッファに一時的に格納されているこのデータの他のバージョンと比較する。現在アクセスされているページ１０８（Ｎ）から読み出されたデータが、バッファに一時的に格納されているデータと同じでない場合、不良検出モジュール１１６は、現在アクセスされているページ１０８（Ｎ）内にあるこのラインを、不良ラインとして識別する。
【００２１】
[0027]  種々の実施形態において、不良検出モジュール１１６は、不良情報キャッシュ１２０に領域不良情報を格納するように構成することができる。領域不良情報は、個々のページ１０８（１）．．．１０８（Ｎ）の各々が永続的ライン不良を有するか否かを含む。ページ１０８（Ｎ）が永続的なライン不良を有する場合、メモリ・コントローラ１０４は、ページ１０８（Ｎ）のアドレスだけでなく、ページ１０８（Ｎ）についてのリマッピング・メタデータ１２２も不良情報キャッシュ１２０にキャッシュすることができる。したがって、メモリ割り当てモジュール１１４は、不良情報キャッシュ１２０に格納されたリマッピング・メタデータ１２２を使用して、少なくとも１つの永続的ライン不良を有するページ１０８（１）．．．１０８（Ｎ）への読み出しおよび／または書き込み要求を管理することができる。
【００２２】
[0028]  更に本明細書において論ずるように、種々の実施形態において、クラスタリング・モジュール１１８は、リマッピング・メタデータ１２２を作成するように構成される。リマッピング・メタデータ１２２は、不良ラインを個々のページ１０８（１）．．．１０８（Ｎ）（例えば、ページの最上位またはページの最下位）またはもっと大きなメモリ・リマッピング領域（例えば、４つのページまたは８つのページ）の終端にあるページ１０８（１）．．．１０８（Ｎ）のエッジにリマッピングする。ある実施形態では、不良検出モジュール１１６が最初に永続的ライン不良（即ち、不良ライン）を個々のページ１０８（Ｎ）において識別したとき、クラスタリング・モジュール１１８は、個々のページ１０８（Ｎ）またはもっと大きなメモリ・リマッピング領域についてリマッピング・メタデータ１２２を作成することもできる。
【００２３】
[0029]  種々の実施形態において、ページ１０８（Ｎ）が現在使用されているとき、使用されることが予期されるとき、または処理コア１１０（１）．．．１１０（Ｍ）の内１つ以上と共にシステム・ソフトウェア１０２によって最近使用されたとき、メモリ割り当てモジュール１１４は、現在のページ１０８（Ｎ）についてのリマッピング・メタデータ１２２を一時的に不良情報キャッシュ１２０に格納することができる。これについては、本明細書において更に論ずる。代替実施形態では、リマッピング・メタデータ１２２は、キャッシュ１１２（１）．．．１１２（Ｌ）の内１つ以上にも格納される。
【００２４】
[0030]  不良検出モジュール１１６およびクラスタリング・モジュール１１８はメモリ・コントローラ１０４上に図示されるが、この文書のコンテキストでは、これら個々のモジュールによって実行される機能の一部または全部は、加えてまたは代わりに、他の場所に格納されてもよく、あるいはシステム・ソフトウェア１０２上に配置されても、またはシステム・ソフトウェア１０２にわたって分散されてもよいことは理解されよう（例えば、ある機能がオペレーティング・システムによって実行されてもよい）。更に、種々の実施形態において、システム・ソフトウェア１０２は、メモリ不良についての情報を格納する、別の不良マップ・キャッシュも維持することができ、この不良マップ・キャッシュは、メモリ不良を回避できるように、この情報をメモリ割り当て時点においてランタイム実行可能環境に受け渡す。その結果、少なくともある実施形態では、システム・ソフトウェア１０２およびメモリ・コントローラ１０４は、互いに通信し、本明細書において論ずる技術を実行するための情報を交換することができる。
【００２５】
[0031]  図２は、メモリ・ページが消摩し、オペレーティング・システム０２および／またはメモリ・コントローラ１０４がリマッピング・プロセス例を経時的に実施するときの、個々のメモリ・ページ１０８（Ｎ）についての異なる段階を示す。先に論じたように、個々のメモリ・ページ１０８（Ｎ）は多数の異なるラインを含むことができる。各ラインの記憶容量、および各ページにおけるラインの数は、使用されるメモリのタイプに依存することができる。少なくとも１つの実施形態では、ラインは５１２ビットとすることができ、ページ１０８（Ｎ）は４キロバイト・ページとすることができる。
【００２６】
[0032]  しかしながら、例示の目的および理解を容易にするために、図２に示すように、ページ１０８（Ｎ）は０、１、２、３、４、５、６、および７の番号が付けられた８つのラインを含む。図２におけるラインには、数値０から７までを使用して、連続的に番号が付けられるが、この文書のコンテキストでは、もっと大きなメモリ領域には、任意のラインまたはセグメント・アドレシング方式を使用してもよいことは理解されよう。更に、図２に示すように、各ラインは、データ格納部と誤り訂正部とに分割することができる。データ格納部は、メモリ・モジュール１０６に割り当てられたオブジェクトまたはオブジェクトの一部を格納し、誤り訂正部は、個々のライン毎に、利用可能な誤り訂正のために保存される。誤り訂正が完全に使い果たされたとき（例えば、誤り訂正部が図２において完全に満たされる）、先に論じたように、不良検出モジュール１１６は、そのラインを不良ラインとして識別する。代替実施形態では、個々のラインが誤り訂正部を含まなくてもよい。
【００２７】
[0033]  段階２００（Ａ）に示すように、ページ１０８（Ｎ）は、未だ全く不良ラインを含まず、各ラインが利用可能な完全な１組の誤り訂正リソースを有するので、これは完全なページである。しかしながら、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４が、ときの経過と共に行われるメモリ割り当てプロセスの間にページ１０８（Ｎ）に書き込み始めると、更には摩耗性メモリを構成する個々のセル内部のばらつきのために、ページ１０８（Ｎ）内の個々のラインが異なるレベルで摩耗する可能性がある。
【００２８】
[0034]  段階２００（Ｂ）に示すように、ライン１およびライン３にはそれぞれ「不良１」および「不良２」と記され、各々全ての利用可能な誤り訂正リソースを使い果たした。このように、不良検出モジュール１１６は、これらのラインが不良になったことを検出し、この論述に限って言えば、ライン１が最初に不良になり、ライン１が不良になった後に、ライン３が２番目に不良になったと仮定する。
【００２９】
[0035]  種々の実施形態において、不良検出モジュール１１６が、個々のメモリ・ページ１０８（Ｎ）内における第１ライン（例えば、ライン１）が不良になったことを検出したとき、クラスタリング・モジュール１１８は、段階２００（Ｃ）において、リマッピング・メタデータ１２２を作成し、ページ１０８（Ｎ）内にあるメモリのライン（例えば、ライン７）を、リマッピング・メタデータ１２２に割り当てる。このように、ページ１０８（Ｎ）の第１ラインが消磨したために不良になったとき（例えば、ライン１）、クラスタリング・モジュール１１８は同時に第２の「偽の」不良も作ることができる。第２の偽の不良ラインは、リマッピング・メタデータ１２２を格納し、ページ１０８（Ｎ）の周辺部分に配置することができる（例えば、ライン７）。クラスタリング・モジュール１１８は、連続格納空間を中断しないように、リマッピング・メタデータ１２２をページ１０８（Ｎ）の最上位または最下位にインストールする。
【００３０】
[0036]  種々の実施形態において、リマッピング・メタデータ１２２は、ページ１０８（Ｎ）におけるライン数を反映する数のエントリを含む。例えば、リマッピング・メタデータ１２２は、ライン０に対応するエントリ０、ライン１に対応するエントリ１、ライン２に対応するエントリ２等を有する。リマッピング・メタデータ１２２は、エントリを交換するまたはずらすことによって、ページ１０８（Ｎ）内部でラインを論理的に再編成するように構成され、信頼性のあるラインまたは有効な(working)ラインがページ１０８（Ｎ）内部に論理的な連続空間を生み出し、信頼性のないラインまたは不良ラインが、リマッピング・メタデータ１２２もインストールされた、ページ１０８（Ｎ）の周辺部分に論理的にリディレクトされるようになっている。リマッピング・メタデータ１２２におけるエントリ毎に必要とされる記憶空間の量は、ページ１０８（Ｎ）におけるライン数の対数に基づくビット数とすることができる。リマッピング・メタデータ１２２はページ１０８（Ｎ）のために記憶空間を管理しリディレクトするので、リマッピング・メタデータ１２２が格納されたビットの一部が不良になったかまたは変転した場合に備えて、リマッピング・メタデータ１２２は冗長に格納されてもよい。更に、クラスタリング・モジュール１１８は、書き込みによってハードウェアを検査することによってリマッピング・メタデータ１２２が変転した場合、リマッピング・メタデータ１２２を再生成するように構成することもできる。
【００３１】
[0037]  段階２００（Ｄ）に示すように、クラスタリング・モジュール１１８は、ライン１のエントリ（例えば、段階２００（Ｃ）における実際の不良）を、ページの最下位にあるライン６のエントリと交換する。このように、リマッピング・メタデータ１２２およびエントリ交換にしたがって、ライン６が論理不良ラインとなり、ライン１は論理有効ラインとなる。メモリ・コントローラ１０４は、データを実際のライン６に格納する。ライン６は、連続記憶空間を生み出すために、論理的にライン１と交換されている。
【００３２】
[0038]  更に進んで、実際のライン３が不良になった場合、クラスタリング・モジュール１１８は、不良ライン３のエントリを、有効ライン５のエントリと交換する。有効ライン５は、リマッピング・プロセス中に交換するために利用可能な次の有効ラインである。この場合も、エントリを交換することによって、クラスタリング・モジュール１１８は、不良メモリ・ラインによって中断も分割もされない、連続メモリ空間の論理部分を生み出す。
【００３３】
[0039]  種々の実施形態において、リマッピング・メタデータ１２２における各エントリには、物理アドレス・オフセット（例えば、そのエントリに関連付けられた元のラインの物理位置）および論理ライン・オフセット（例えば、元のラインが不良になったときにリマッピングされたラインの物理位置）を反映するために、インデックス化することができる。つまり、種々の実施形態において、リマッピング・メタデータ１２２は、段階２００（Ｄ）におけるリマッピング・メタデータ１２２のエントリの再編成（例えば、再順序付け）に示すように、不良ライン１が論理的に有効ライン６と交換され、不良ライン３が論理的に有効ライン５と交換されたことを示すことによって、アドレス変換または位置変換を生じさせる。リマッピング・メタデータ１２２はライン７に対して作成され、ここにインストールされたので、ライン７のエントリはヌル（「・」）とすることができ、リディレクトするエントリを全く含まなくてもよい。種々の実施形態において、ライン７のエントリは、前述のように、冗長なリマッピング・メタデータを格納することもできる。
【００３４】
[0040]  その結果、ページ１０８（Ｎ）における有効ラインに対応するリマッピング・メタデータ１２２における初期のエントリの内、論理的に不良ラインと交換されなかったものは、同じままである。例えば、段階２００（Ｄ）において、リマッピング・メタデータ１２２におけるライン０、２、および４のエントリは、不良ラインのエントリと交換されなかったので、変更も変化もさせられていない。
【００３５】
[0041]  種々の実施形態において、リマッピング・メタデータ１２２は、クラスタリング・モジュール１１８が不良ラインと論理的に交換するために次に利用可能な有効ラインを識別できるように、境界ポインタ２０２を使用する。クラスタリング・モジュール１１８は、不良ラインを纏めてページ１０８（Ｎ）の周辺部分において論理的にクラスタリングするので、境界ポインタ２０２は、論理連続空間を論理不良空間から分ける次の有効ラインを指し示す。例えば、段階２００（Ｄ）において、境界ポインタ２０２は、実際のライン４を、ページ１０８（Ｎ）の最下位においてクラスタリングされた論理不良（例えば、ライン５、７、および７）と境界を接しこれらを分ける次の有効ラインとして、指し示す。したがって、不良検出モジュール１１６が他のラインの不良を検出したとき、クラスタリング・モジュール１１８は、リマッピング・メタデータ１２２において、不良ラインのアドレスまたはインデックスを、境界ポインタ２０２によって識別されたラインに論理的にリディレクトすることによって、メモリ・ページ１０８（Ｎ）を再編成する。クラスタリング・モジュール１１８は、次に、境界ポインタ２０２を次の有効ラインに進め、リマッピング・メタデータ１２２を更新することができる。
【００３６】
[0042]  種々の実施形態において、ページ１０８（Ｎ）における各ラインにはインディケータが設定され、初期アクセス中に、ラインがクラスタリング・プロセスによって論理的にリマッピングされたか否か、メモリ割り当てモジュール１１４が識別することができる。例えば、このインディケータは、誤り訂正部に保存される１つのビットであり、ラインが不良になってリマッピングされたときは「ｙｅｓ」で示し、ラインが不良になっておらずアクセスされたデータがそのラインに格納されるときは「ｎｏ」で示す。ラインが不良になったとき、クラスタリング・モジュール１１８は、そのラインがリディレクトまたはリマッピングされたことを示すために、このインディケータを設定することができる。少なくとも１つの実施形態では、メモリ割り当てモジュール１１４および／またはメモリ・コントローラ１０４は、リマッピング・メタデータ１２２がページ１０８（Ｎ）の最上位にある第１ラインまたはページ１０８（Ｎ）の最下位にある最後のラインに配置されることを知っているので、メモリ割り当てモジュール１１４および／またはメモリ・コントローラ１０４は、リマッピング・メタデータ１２２を突き止めることができる。他の実施形態では、ライン毎のインディケータが、更に、ページ１０８（Ｎ）内においてリマッピング・メタデータ１２２を指し示すために追加の容量を有するように構成されてもよい。
【００３７】
[0043]  段階２００（Ｂ）および段階２００（Ｄ）間の差に見られるように、本明細書において論じられるクラスタリングおよびリマッピングは、論理的に、より大きなオブジェクト割り当てのために、より大きな連続空間量を生み出す。例えば、段階２００（Ｂ）において、メモリ割り当てモジュール１１４が不良ライン１および３の周囲にメモリを割り当てなければならない場合、メモリ割り当てモジュール１１４は、データをｉ）ライン０、ｉｉ）ライン２、またはｉｉｉ）ライン４〜７（例えば、４つの連続ライン）に格納することができる。クラスタリングおよびリマッピング・プロセスを実施した後、メモリ割り当てモジュール１１４は、論理的に有効なライン０〜４（例えば、５つの連続ライン）にデータを格納することができる。前述のように、図２におけるページ１０８（Ｎ）は、例示の目的でそして理解を容易にするために、８つのラインを含む。したがって、クラスタリングおよびリマッピング・プロセスの利益および利点は、もっと多くのラインがある例（例えば、１ページ内に６４ラインある）、ページ内にもっとも多くの不良ラインが散乱する例等を使用すると、より明白になるであろう。
【００３８】
[0044]  図３は、メモリ・モジュール１０６に格納された２つの連続ページ２Ｎおよび２Ｎ＋１  ３００を示す。連続メモリ空間の量を更に最大化するために、クラスタリング・モジュール１１８は、不良ラインおよびリマッピング・メタデータ１２２を、メモリ・モジュール１０６における偶数ページ（例えば、ページ２Ｎ）の最上位、およびメモリ・モジュール１０６における奇数ページ（例えば、ページ２Ｎ＋１）の最下位に、またはその逆にクラスタリングするように構成することができる。このように、連続メモリ空間の量は、図３に示すように、２つの連続ページ、即ち、ページ２Ｎの最下位およびページ２Ｎ＋１の最上位にわたって広がることができる。
【００３９】
[0045]  種々の実施形態において、クラスタリング・モジュール１１８は、クラスタリングがページの最上位で行われるのか（例えば、リマッピング・メタデータ１２２がライン０に格納される）またはページの最下位で行われるのか（例えば、リマッピング・メタデータ１２２が、図２の例では、ページの最終ライン、即ち、ライン７に格納される）に応じて、境界ポインタ２０４を増加および減少させて、ページ１０８（Ｎ）毎にリマッピング・メタデータ１２２におけるエントリを編成することができる。
【００４０】
[0046]  図２および図３に関して以上で提示した例は、メモリ・リマッピング領域を、メモリ・システム領域（例えば、ページ１０８（１）．．．１０８（Ｎ））に対応する個々のページとして記述した。しかしながら、メモリ・リマッピングおよびクラスタリング・プロセスの他の実施態様では、メモリ・システム領域と同じ粒度を有するメモリ・リマッピング領域を使用しなくてもよい。例えば、クラスタリング・モジュール１１８が、ハードウェア・メモリ・モジュール１０６において使用されるメモリ領域の倍数であるメモリ・リマッピング領域を実現するのでもよい。つまり、クラスタリング・モジュール１１８は、例えば、２ページ毎、４ページ毎、８ページ毎の最上位または最下位にリマッピング・メタデータ１２２を置くこともできる。更に、リマッピング・メタデータ１２２および境界ポインタ１０２は、特定のページおよび交換されていないラインを参照するように構成することもできる。これは更に断片化を解消し、より大きな連続メモリ部分を生み出すことができる。
【００４１】
[0047]  少なくとも１つの実施形態では、クラスタリング・モジュール１１８は、１つのメモリ・リマッピング領域サイズ（例えば、１ページ）から他のメモリ・リマッピング領域サイズ（例えば、８ページ）に移るように構成することもできる。例えば、クラスタリング・モジュール１１８は、最初に個々のページ粒度にしたがって不良ラインをクラスタリングすることができるが、あるグループのページの各々に不良ラインが発生した後、クラスタリング・モジュール１１８は、更に断片化を解消するために、代わりに、８ページの粒度（例えば、８ページ・メモリ・リマッピング領域）にしたがって、不良ラインをクラスタリングすることもできる。ここで、システム・ソフトウェア１０２およびメモリ・コントローラ１０４は、次に、しかるべくシステムを再構成し、リマッピング・メタデータ１２２を更新して、１ページのリマッピング領域サイズから他のメモリ・リマッピング領域サイズへの移行を反映することができる。
例示的プロセス
[0048]  ここで、図４および図５を参照して、動作例について説明する。ハードウェア、ソフトウェア、またはその組み合わせで実現することができる動作のシーケンスを表すプロセスを、論理フロー・グラフとして示す。ソフトウェアのコンテキストでは、動作は、コンピュータ実行可能命令を表し、１つ以上のプロセッサによって実行されると、説明した動作(recited operations)を行う。一般に、コンピュータ実行可能命令は、ルーチン、プログラム、オブジェクト、コンポーネント、モジュール、データ構造等を含み、特定の機能を実行するか、または特定の抽象データ型を実装する。動作が説明される順序は、限定として解釈されることを意図しておらず、任意の数の説明する動作を任意の順序でおよび／または並列に組み合わせて本プロセスを実現することができる。
【００４２】
[0049]  図４は、メモリ・モジュール１０６における個々のページ１０８（Ｎ）についてリマッピング・メタデータ１２２を作成および／または更新することを目的とするプロセス例４００を示す。例えば、プロセス例４００は、システム・ソフトウェア１０２、メモリ・コントローラ１０４、またはその組み合わせに配置されたメモリ割り当てモジュール１１４によって行われる書き込み動作に関連付けることもできる。更に、メモリ・コントローラ１０４は、メモリ・モジュール１０６上に配置されても、またはメモリ・モジュール１０６から分離されて、システム・メモリ１０２と共にシステムの処理側にあってもよい。
【００４３】
[0050]  動作４０２において、メモリ・コントローラ１０４は、発行された書き込み命令を受け、メモリ・コントローラ１０４はページ１０８（Ｎ）におけるラインにデータを書き込もうとする。例えば、メモリ・コントローラ１０４は、キャッシュ階層がダーティ・ラインを排除することを望み、したがって、書き戻し(writeback)を要求するときに発行された命令を受けることができる。次いで、メモリ・コントローラ１０４は、書き戻しのためのページ１０８（Ｎ）およびラインを識別するように構成することができる。
【００４４】
[0051]  動作４０４において、不良検出モジュール１１６は、そのラインが不良ラインであると検出する。例えば、不良検出モジュール１１６は、そのラインが不良ラインであることを検出し、メモリ・コントローラ１０４が実際にデータをそのラインに書き込み、更にそのデータの別のバージョンをバッファに一時的に格納するときにはもはや格納の目的にはそのラインには信頼性がないことを確認する。メモリ・コントローラ１０４がデータをラインから読み戻すとき、不良検出モジュール１１６は、読み取られたデータを、バッファに一時的に格納されているこのデータの他のバージョンと比較する。ラインから読み戻されたデータが、バッファに一時的に格納されたデータと同じでない場合、不良検出モジュール１１６は、そのラインが不良ラインであると判定する。
【００４５】
[0052]  動作４０６において、メモリ・コントローラ１０４はライン不良および書き込みできないデータをシステム・ソフトウェア１０２に渡すことができる。例えば、メモリ・コントローラ１４０は、不良書き込みバッファおよび生成された割り込みを使用して、不良情報をオペレーティング・システムに伝えることができる。ページ１０８（Ｎ）における不良ラインが、マネージド・ランタイムまたは他のシステム・コンポーネントによって使用されている１つ以上のオブジェクトを収容しているかもしれないので、メモリ・コントローラ１０４はこの情報を渡す。
【００４６】
[0053]  動作５０８において、システム・ソフトウェア１０２のメモリ割り当てモジュール１１４は、次に、例えばマネージド・ランタイムのために、ページ１０８（Ｎ）における１つ以上のオブジェクトを、メモリ・モジュール１０６における異なるメモリ位置（例えば、他のページ）に割り当てしなおす、または移動させることができる。この再割り当てにより、ページ１０８（Ｎ）全体を解放する。種々の実施形態においてメモリ割り当てモジュール１１４は、次に、リマッピング・プロセスをトリガし、不良ラインをページ１０８（Ｎ）の周辺部分において論理的にクラスタリングすることにより、ページ１０８（Ｎ）を再編成するように、メモリ・コントローラ１０４に命令することができる。
【００４７】
[0054]  したがって、動作４１０において、メモリ・コントローラ１０４のクラスタリング・モジュール１１８は、ページ１０８（Ｎ）についてのリマッピング・メタデータ１２２を作成または更新し、図２および図３に関して先に論じたように、不良ラインをページ１０８（Ｎ）の周辺部分においてクラスタリングする。例えば、クラスタリング・モジュール１１８は、不良ラインが個々のページ１０８（Ｎ）の最初の不良ラインか否か判定することができる。不良ラインが最初の不良ラインであるとクラスタリング・モジュール１１８が判定した場合、クラスタリング・モジュール１１８は、図２および図３に関して先に行った論述にしたがって、ページ１０８（Ｎ）についてリマッピング・メタデータ１２２を作成する。したがって、クラスタリング・モジュール１１８は、ページ１０８（Ｎ）におけるラインの各々にエントリを作成し、リマッピング・メタデータ１２２をページ１０８内に格納できるようにページ１０８（Ｎ）の最上位または最下位に「偽の」不良を実施し(implement)、不良ラインのエントリを、リマッピング・メタデータ１２２の次のページの最上位または最下位上の有効ラインのエントリと交換し、不良ラインがリマッピングされたことを示すインディケータを、この不良ライン上に設定することができる。このように、クラスタリング・モジュール１１８は、不良ラインをページの周辺部分（例えば、ページがメモリ・モジュール１０６における偶数ページかまたは奇数ページかに応じて、最上位または最下位）において論理的にクラスタリングし始め、これによって、ページ１０８（Ｎ）内に更に大量な連続空間を生み出す。
【００４８】
[0055]  種々の実施形態において、クラスタリング・モジュール１１８が、不良ラインが最初の不良ラインであると判定した場合、クラスタリング・モジュール１１８は、境界ポインタ２０２にアクセスして、不良ラインのクラスタ(failed cluster of lines)を論理連続メモリ空間から分離する次の利用可能な有効ラインを判定する。クラスタリング・モジュール１１８は、次に、後続の（例えば、最初の不良ラインおよび「偽の」不良ラインの後）不良ラインのエントリを、境界ポインタ２０２によって識別された、次に利用可能な有効ラインのエントリと交換し、不良ラインがリマッピングされたことを示すインディケータを、後続の不良ライン上に設定することができる。
【００４９】
[0056]  種々の実施形態において、プロセス例４００は、個々のページ１０８（Ｎ）内におけるラインが不良を発生する毎に繰り返すことができる。更に、種々の実施形態において、このプロセス例４００は、メモリ・モジュール１０６内に維持された多数の異なるページ１０８（１）．．．１０８（Ｎ）の各々に対して実行される。
【００５０】
[0057]  図５は、メモリ読み取り動作の間にリマッピング・メタデータ１２２を使用することを目的としたプロセス例５００を示す。例えば、プロセス例５００は、処理コア１１０（１）．．．１１０（Ｍ）の１つ（またはプリフェッチャー）によって発行された読み取り動作が、キャッシュ階層を失い(miss)、したがってメモリ・モジュール１０６から読み取るために、メモリ・コントローラ１０４に送られるときに、この読み取り動作と関連付けることができる。メモリ・コントローラ１０４は、メモリ・モジュール１０６上に配置されても、メモリ・モジュール１０６から分離されてシステム・メモリ１０２と共にシステムの処理側にあってもよい。
【００５１】
[0058]  動作５０２において、メモリ・コントローラ１０４はページ１０８（Ｎ）におけるあるラインからデータを読み取ろうとする。例えば、メモリ・コントローラ１０４は、処理コア１１０（１）．．．１１０（Ｍ）の１つから発行され、メモリ・モジュール１０６に格納されたオブジェクトまたはオブジェクトの一部にアクセスすることを求める要求を受けたのでもよい。
【００５２】
[0059]  動作５０４において、メモリ・コントローラ１０４はこのラインをリマッピングされたライン（例えば、不良ライン）として識別する。少なくとも１つの実施形態では、メモリ・コントローラ１０４は、物理アドレスを使用して実際のラインにアクセスし、インディケータ（例えば、誤り訂正部に保存された１ビット）を調べて、そのラインが消磨して不良になっており、既にリマッピングされたことを判定することによって、ラインがリマッピングされたラインであると判定することができる。
【００５３】
[0060]  他の実施形態では、メモリ・コントローラ１０４は、不良情報キャッシュ１２０内にローカルに１つ以上のページ１０８（１）．．．１０８（Ｎ）についてのリマッピング・メタデータ１２２（現在アクセスされているページ、最近アクセスされたページ、および／または今後アクセスされることが予期されるページについてのリマッピング・メタデータ１２２）を維持し、メモリ・コントローラおよび／またはメモリ割り当てモジュール１１４は、不良情報キャッシュ１２０内に維持されたリマッピング・メタデータ１２２をチェックして、当該ラインがリマッピングされたか否か判定し、アドレスのリディレクトを決定することができる。
【００５４】
[0061]  動作５０６において、メモリ・コントローラ１０４は、リマッピング・メタデータ１２２にアクセスし、リマッピング・メタデータ１２２を使用して、リディレクトされた新たなラインが、論理的に不良ラインと交換され、実際にデータまたはオブジェクトの一部を格納している（例えば、図２におけるライン５および６）ことを判定する。
【００５５】
[0062]  動作５０８において、メモリ・コントローラ１０４は、データを新たなラインから読み取る。
[0063]  図５のプロセス例５００も、個々のページ１０８（Ｎ）内のラインが読み取りアクセスまたは読み取り要求と関連付けられる毎に、繰り返すことができる。
【００５６】
[0064]  種々の実施形態において、リマッピング・メタデータ１２２が、メモリ・コントローラ１０４に維持することができる不良情報キャッシュ１２０にキャッシュされる場合、システム・アーキテクチャは、読み取りアクセスを実行するときに時間およびエネルギを保存することもできる。例えば、リマッピング・メタデータ１２２が不良情報キャッシュ１２０に格納されないとき、メモリ・コントローラ１０４が新たなラインを突き止めてそこからデータを読み取るためには、メモリ・コントローラ１０４は３つの異なる動作(instance)でメモリ・モジュール１０６にアクセスしなければならない場合がある。即ち、（１）元のラインがリマッピングされたことを識別する第１アクセス、（２）ページの最上位または最下位においてリマッピング・メタデータ１２２の位置への第２アクセス、および（３）リマッピング・メタデータ１２２によって指し示される、リディレクトされたラインへの第３アクセスである。これは、システムの読み取りレイテンシを増大させる可能性がある。対照的に、リマッピング・メタデータ１２２が不良情報キャッシュ１２０にキャッシュされると、メモリ・コントローラ１０４は、リディレクトをローカルに判定し、次いで新たなラインからデータを読み取るためにメモリ・モジュール１０６に対して１回のアクセスを行うことができる。
【００５７】
[0065]  図４および図５に示したプロセス例は、システム・ソフトウェア１０２、メモリ・コントローラ１０４、または双方の組み合わせによって、マネージド・ランタイムと共に実現することができる。更に、断片化を低減または解消するクラスタリングおよびリマッピング・プロセスに加えて、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４は、個々のページ１０８（１）．．．１０８（Ｎ）におけるライン不良を追跡し、不良マップを維持する（例えば、不良情報キャッシュ１２０に）ように構成することもできる。種々の実施形態において、メモリを割り当てるときにライン不良を回避できるように、ライン不良をランタイム・システムに伝えることもできる。
【００５８】
[0066]  ある実施形態では、本明細書において論じたクラスタリングおよびリマッピング・プロセスは、メモリ・システムのために構成された他の不良処理技法と併せて動作することができる。例えば、メモリ・コントローラ１０４は、個々のページ内の不良ラインがリマッピングおよびクラスタリングされた後に、１つ以上のページ１０８（１）．．．１０８（Ｎ）についてのリマッピング・メタデータ１２２にアクセスすることもできる。ページ１０８（１）．．．１０８（Ｎ）の少なくとも一部はもはや完全ではなく、これらは不良ラインを有するのでむしろ不完全であるので、システム・ソフトウェア１０２および／またはメモリ・コントローラ１０４は、ページが完全かまたは不完全かに基づいて、ページをプールする(pool)または分けることができ、不完全なページが提供することができる連続空間の量を、例えば、マネージド・ランタイムに伝えることができる。他の例では、メモリ・コントローラ１０４は、ラインが不良になったとき、ページ１０８（１）．．．１０８（Ｎ）に格納されたデータを再配置することができる。
【００５９】
[0067]  種々の実施形態において、本明細書において説明したリマッピングおよびクラスタリング・プロセスは、メモーのラインを取り戻し、メモリ・モジュール１０６のあちらこちらでデータおよびオブジェクトを移動させるガベージ・コレクション・プロセスにも使用することができる。例えば、ガベージ・コレクションは、メモリを割り当てるときにシステム・ソフトウェア１０２から得られる不良マップを使用することができる。その結果、ガベージ・コレクタ(garbage collector)は、ガベージ・コレクション・プロセスにおいてメモリを割り当てるときに、不良ラインを回避することができればよい。
【００６０】
[0068]  本明細書において論じたメモリ・モジュール１０６におけるページ１０８（１）．．．１０８（Ｎ）はＰＣＭとして説明することができるが、本明細書において説明した技法は、他のタイプの摩耗性メモリにも適用可能であること、そしてメモリの領域およびメモリのセグメントは、システム・アーキテクチャに基づいて異なってもよいことは理解されよう（例えば、セグメントが、ラインと比較して、粒度が高くても低くてもよく、領域が、ページと比較して、粒度が高くても低くてもよい）。更に、メモリ・モジュール１０６、ならびにシステム・ソフトウェア１０２および／またはメモリ・コントローラ１０４を格納することができる任意の他のメモリは、少なくとも２つのタイプのコンピュータ読み取り可能媒体、即ち、コンピュータ記憶媒体および通信媒体を含む、コンピュータ読み取り可能媒体を含んでもよい。
【００６１】
[0069]  コンピュータ記憶媒体は、揮発性および不揮発性のリムーバブルおよび非リムーバブル媒体を含み、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、または他のデータというような情報の格納のための任意の方法または技術で実現される。コンピュータ記憶媒体は、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、電気的消去可能プログラマブル・リード・オンリ・メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリまたは他のメモリ技術、コンパクト・ディスクＲＯＭ（ＣＤ−ＲＯＭ）、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは計算デバイスまたはサーバー・デバイスによるアクセスのために情報を格納するために使用することができる任意の他の非伝送媒体(non-transmission medium)を含むが、これらに限定されるのではない。
【００６２】
[0070]  対照的に、通信媒体は、コンピュータ読み取り可能命令、データ構造、プログラム・モジュール、または他のデータを、搬送波のような変調データ信号、または他の伝送メカニズムに具体化することができる。本明細書において定めたように、コンピュータ記憶媒体は通信媒体を含まない。
結論
[0071]  以上、構造的特徴および／または方法論的アクトに特定的な文言で本主題について説明したが、添付した特許請求の範囲において定められる主題は、必ずしも、以上で説明した特定的な特徴や動作には限定されないことは理解されてしかるべきである。逆に、以上で説明した具体的な特徴および動作は、特許請求の範囲を実現するための例として説明したまでである。
【図１】
0006518191.tif 000002
【図２】
0006518191.tif 000003
【図３】
0006518191.tif 000004
【図４】
0006518191.tif 000005
【図５】
0006518191.tif 000006