(57)【要約】  記憶動作を待ち行列に入れるための装置、システム、方法、及びコンピュータプログラム製品が、開示される。集積回路メモリ要素（１２３、３００）は、メモリ要素（１２３、３００）の記憶場所（３０２）のバンク（３０６）に関連付けられた記憶動作コマンドを受信する。集積回路メモリ要素（１２３、３００）は、記憶動作コマンドに関連付けられたデータに対するページレジスタ（３０８）内の記憶場所（３０２）を判定することによって、記憶場所（３０２）のバンク（３０６）上で実行するための記憶動作コマンドを待ち行列に入れる。ページレジスタ（３０８）内の記憶場所（３０２）は、ページレジスタ（３０８）内の利用可能な記憶場所のサブセットを含む。集積回路メモリ要素（１２３、３００）は、ページレジスタ（３０８）内の判定された記憶場所（３０２）で記憶動作コマンドに関連付けられたデータを記憶する。
2020502606.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、集積回路（「ＩＣ」）メモリ要素であって、
前記ＩＣメモリ要素の記憶場所のバンクに関連付けられた記憶動作コマンドを受信することと、
前記記憶動作コマンドに関連付けられたデータに対するページレジスタ内の記憶場所を判定することによって、記憶場所の前記バンク上で実行するための前記記憶動作コマンドを待ち行列に入れることであって、前記ページレジスタ内の前記記憶場所が前記ページレジスタ内の利用可能な記憶場所のサブセットを含む、待ち行列に入れることと、
前記記憶動作コマンドに関連付けられたデータを、前記ページレジスタ内の前記判定された記憶場所に記憶することと、を行うように構成された集積回路メモリ要素を備える、装置。
【請求項２】
前記ＩＣメモリ要素が、前記記憶動作コマンドに関連付けられた前記データに対する、前記ページレジスタ内の前記記憶場所に、１つ以上のポインタを維持するように更に構成されている、請求項１に記載の装置。
【請求項３】
前記記憶動作コマンドが、読み取りコマンド及びプログラムコマンドのうちの１つを含み、前記プログラムコマンドが、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、及びリフレッシュフラッシュコマンドのうちの１つ以上を含む、請求項２に記載の装置。
【請求項４】
前記１つ以上のポインタが、
現在のプログラム動作のデータに対する記憶場所へのポインタと、
待ち行列に入れられたプログラム動作のデータに対する記憶場所へのポインタと、
読み取り動作のデータに対する記憶場所へのポインタと、を含む、請求項３に記載の装置。
【請求項５】
前記１つ以上のポインタが、前記ＩＣメモリ要素に書き込まれるように待ち行列に入れられたが、前記ＩＣメモリ要素への書き込みが不成功であったデータに対する記憶場所へのポインタを含む、請求項２に記載の装置。
【請求項６】
前記ＩＣメモリ要素が、再試行の所定の閾値数が満たされるまで、前記ポインタによって指定された前記データを前記ＩＣメモリ要素に書き込むことを再試行するように更に構成されている、請求項５に記載の装置。
【請求項７】
前記ＩＣメモリ要素が、再試行及びリフレッシュ記憶動作コマンドのうちの１つを受信することに応答して、前記ポインタによって指定された前記データを前記ＩＣメモリ要素に書き込むことを再試行するように更に構成されている、請求項５に記載の装置。
【請求項８】
前記ＩＣメモリ要素が、前記ポインタに関連付けられた前記記憶場所で前記ページレジスタ内に記憶されたデータが有効であるかどうかを示す、各ポインタに関連付けられた有効性ビットを維持するように更に構成されている、請求項２に記載の装置。
【請求項９】
前記ＩＣメモリ要素が、前記ページレジスタの記憶場所の複数のサブセットに対応する複数の記憶場所のバンクを含み、前記ＩＣメモリ要素が、前記ページレジスタの前記複数のサブセット内に記憶されたデータを使用して、前記複数の記憶場所のバンクに関連付けられた複数の記憶動作コマンドを同時に実行する、請求項１に記載の装置。
【請求項１０】
前記ＩＣメモリ要素が、
読み取りポインタを、読み取りコマンドのデータに対する前記ページレジスタの記憶場所に方向付けることと、
前記ＩＣメモリ要素の第１のバンク上で前記読み取りコマンドを実行することと、
書き込みポインタを、前記読み取りコマンドの前記データに対する前記ページレジスタの前記記憶場所に再度方向付けることと、
前記読み取りコマンドの前記データを、前記ＩＣメモリ要素の第２のバンクに書き込むことと、を行うように更に構成されている、請求項１に記載の装置。
【請求項１１】
システムであって、
ページバッファを含む、不揮発性メモリ媒体と、
コントローラであって、
前記不揮発性メモリ媒体のための複数の記憶動作コマンドを受信することであって、前記複数の記憶動作コマンドのうちの１つの記憶動作コマンドが、前記不揮発性メモリ媒体の複数のサブアレイのうちの１つのサブアレイに対するものである、受信することと、
前記複数の記憶動作コマンドに関連付けられたデータを同時に記憶するために、前記ページバッファ内の記憶場所を判定することと、
前記少なくとも２つの記憶動作コマンドに関連付けられた前記ページバッファ内に記憶されたデータを使用して、前記複数の記憶動作コマンドのうちの少なくとも２つを同時に実行することと、を行うように構成された、コントローラと、を備える、システム。
【請求項１２】
前記コントローラが、処理されている現在の記憶動作コマンドに応答して実行するための記憶動作コマンドを待ち行列に入れるように更に構成され、前記待ち行列に入れられた記憶動作コマンドに対するデータが、前記現在の記憶動作が実行されている前記不揮発性メモリ媒体のサブアレイに関連付けられている前記ページバッファの記憶場所内に記憶されている、請求項１１に記載のシステム。
【請求項１３】
前記複数の記憶動作コマンドの各記憶動作コマンドに対して、前記コントローラが、前記記憶動作コマンドに関連付けられた前記データに対する前記ページバッファ内の記憶場所への１つ以上の参照を維持するように更に構成されている、請求項１１に記載のシステム。
【請求項１４】
前記複数の記憶動作コマンドが、読み取りコマンド及びプログラムコマンドのうちの１つ以上を含み、前記プログラムコマンドが、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、及びリフレッシュフラッシュコマンドのうちの１つ以上を含む、請求項１３に記載のシステム。
【請求項１５】
前記１つ以上の参照が、
現在のプログラム動作のデータに対する記憶場所への参照と、
待ち行列に入れられたプログラム動作のデータに対する記憶場所への参照と、
読み取り動作のデータに対する記憶場所への参照と、を含む、請求項１４に記載のシステム。
【請求項１６】
前記１つ以上の参照が、前記不揮発性メモリ媒体のサブアレイに書き込まれるように待ち行列に入れられたが、前記不揮発性メモリ媒体の前記サブアレイへの書き込みが不成功であったデータに対する記憶場所への参照を含む、請求項１３に記載のシステム。
【請求項１７】
前記コントローラが、所定の再試行の閾値数が満たされるまで、前記不成功の参照によって指定された前記データを書き込むことを再試行するように更に構成されている、請求項１６に記載のシステム。
【請求項１８】
前記コントローラが、再試行及びリフレッシュ記憶動作コマンドのうちの１つを受信することに応答して、前記不成功の参照によって指定された前記データを書き込むことを再試行するように更に構成されている、請求項１６に記載のシステム。
【請求項１９】
前記コントローラが、参照に関連付けられた前記記憶場所で前記ページバッファ内に記憶された前記データが有効であるかどうかを示す、各参照に関連付けられた有効性ビットを維持するように更に構成されている、請求項１３に記載のシステム。
【請求項２０】
装置であって、
不揮発性記憶デバイスの複数のサブアレイに関連付けられた複数の記憶動作コマンドを、前記不揮発性記憶デバイスのページレジスタを使用して、バッファリングするための手段と、
前記ページレジスタ内に前記複数の記憶動作コマンドに対するデータを記憶するための手段であって、前記複数の記憶動作コマンドの各々に対するデータが前記ページレジスタ内に同時に記憶されるように、前記記憶動作コマンドの各々に対するデータが、前記ページレジスタのページサイズよりも小さい、手段と、
前記複数の記憶動作コマンドの少なくとも１つのサブセットに対して、前記ページレジスタ内に記憶された前記データを同時に処理するための手段と、を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、様々な実施形態において、記憶デバイスに関し、より具体的には、記憶デバイスのページレジスタを使用して、記憶コマンドを動的に待ち行列に入れることに関する。
【背景技術】
【０００２】
メモリセルのアレイは、各サブアレイ上で独立して記憶動作を実施することができるように、様々なサブアレイに細分化され得る。しかしながら、特定のサブアレイ上でどの動作が実施されているかを追跡することは、中央の場所で管理することが困難であり得る。
【発明の概要】
【０００３】
記憶動作を待ち行列に入れるための装置が、提示される。一実施形態において、装置は、集積回路（「ＩＣ」）メモリ要素を含む。ＩＣメモリ要素は、ある実施形態において、メモリ要素の記憶場所のバンクに関連付けられた記憶動作コマンドを受信する。更なる実施形態において、ＩＣメモリ要素は、記憶動作コマンドに関連付けられたデータに対するページレジスタ内の記憶場所を判定することによって、記憶場所のバンク上で実行するための記憶動作コマンドを待ち行列に入れる。ページレジスタ内の記憶場所は、ページレジスタ内の利用可能な記憶場所のサブセットを含み得る。いくつかの実施形態において、ＩＣメモリ要素は、ページレジスタ内の判定された記憶場所で記憶動作コマンドに関連付けられたデータを記憶する。
【０００４】
別の実施形態において、装置は、不揮発性記憶デバイスの複数のサブアレイに関連付けられた複数の記憶動作コマンドを、揮発性記憶デバイスのページレジスタを使用して、バッファリングするための手段を含む。更なる実施形態において、装置は、ページレジスタ内に複数の記憶動作コマンドに対するデータを記憶するための手段を含み、そのため複数の記憶動作コマンドの各々に対するデータが、ページレジスタ内に同時に記憶されるように、記憶動作コマンドの各々に対するデータは、ページレジスタのページサイズよりも小さい。一実施形態において、装置は、複数の記憶動作コマンドの少なくとも１つのサブセットに対して、ページレジスタ内に記憶されたデータを同時に処理するための手段を含む。
【０００５】
記憶動作を待ち行列に入れるためのシステムが、提示される。一実施形態において、システムは、ページバッファ及びコントローラを含む、不揮発性メモリ媒体を含む。ある実施形態において、コントローラは、不揮発性メモリ媒体に対する複数の記憶動作コマンドを受信するように構成される。複数の記憶動作コマンドの記憶動作コマンドは、不揮発性メモリ媒体の複数のサブアレイのうちの１つのサブアレイに対するものであり得る。別の実施形態において、コントローラは、複数の記憶動作コマンドに関連付けられたデータを同時に記憶するために、ページバッファ内の記憶場所を判定するように構成される。様々な実施形態において、コントローラは、少なくとも２つの記憶動作コマンドに関連付けられたページバッファ内に記憶されたデータを使用して、複数の記憶動作コマンドのうちの少なくとも２つを同時に実行するように構成される。
【図面の簡単な説明】
【０００６】
より具体的な説明が、添付の図面内に例解される特定の実施形態を参照して下記に含まれる。これらの図面は、本開示の特定の実施形態のみを示すものであり、したがって、その範囲を限定するものと見なされるべきではなく、本開示は、添付の図面を使用することを通じて、付加的な具体性及び詳細と共に記載及び説明される。
【図１】記憶管理モジュールを備えるシステムの一実施形態を例解する、模式的なブロック図である。
【図２】メモリ要素の一実施形態を例解する、模式的なブロック図である。
【図３】メモリ要素の別の実施形態を例解する、模式的なブロック図である。
【図４】記憶管理モジュールの一実施形態を例解する、模式的なブロック図である。
【図５】記憶管理モジュールの別の実施形態を例解する、模式的なブロック図である。
【図６】動的な記憶動作待ち行列の一実施形態を例解する、模式的なブロック図である。
【図７】記憶動作を待ち行列に入れるための方法の一実施形態を例解する、模式的なフローチャート図である。
【図８】記憶動作を待ち行列に入れるための方法の更なる実施形態を例解する、模式的なフローチャート図である。
【図９Ａ】記憶動作を待ち行列に入れるための方法の別の実施形態を例解する、模式的なフローチャート図である。
【図９Ｂ】記憶動作を待ち行列に入れるための方法の更なる実施形態を例解する、模式的なフローチャート図である。
【発明を実施するための形態】
【０００７】
本開示の態様は、装置、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、又はソフトウェア及びハードウェアの態様を組み合わせた実施形態の形態を採ることができ、概して、本明細書では全て「回路」、「モジュール」、「装置」、又は「システム」と称される場合がある。更に、本開示の態様は、コンピュータで読み取り可能な及び／又は実行可能なプログラムコードを記憶する１つ以上の非一時的コンピュータで読み取り可能な記憶媒体内に具現化された、コンピュータプログラム製品の形態を採ることができる。
【０００８】
本明細書に記載される機能ユニットの多くは、それらの実装独立性をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、カスタムＶＬＳＩ回路若しくはゲートアレイ、論理チップ、トランジスタ、又は他の別個の構成要素等の市販の半導体を備えるハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。
【０００９】
モジュールはまた、様々なタイプのプロセッサによる実行のために、少なくとも部分的にソフトウェアにおいて実装されてもよい。実行可能なコードの識別されたモジュールは、例えば、オブジェクト、手順、又は機能として体系化され得るコンピュータ命令の１つ以上の物理的又は論理的ブロックを含み得る。それでもなお、識別されたモジュールの実行可能なファイルは、物理的に共に配置される必要はなく、論理的に共に結合されたときにモジュールを含み、モジュールに対する指定された目的を達成する、異なる場所内に記憶された異種命令を含んでもよい。
【００１０】
実際に、実行可能なコードのモジュールは、単一の命令、又は多くの命令を含んでもよく、いくつかの異なるコードセグメント上で、異なるプログラムの中で、いくつかのメモリデバイスなどにわたって分配さえされてもよい。モジュール又はモジュールの一部分がソフトウェアに実装される場合、ソフトウェア部分は、１つ以上のコンピュータで読み取り可能な及び／又は実行可能な記憶媒体上に記憶されてもよい。１つ以上のコンピュータで読み取り可能な記憶媒体の任意の組み合わせが、利用されてもよい。コンピュータで読み取り可能な記憶媒体としては、例えば、電子、磁気、光学、電磁、赤外線、又は半導体システム、装置、若しくはデバイス、及び前述の任意の好適な組み合わせが含まれ得るが、これらに限定されず、しかし、伝搬信号を含むことはないであろう。本文書の文脈において、コンピュータで読み取り可能な及び／又は実行可能な記憶媒体は、命令実行システム、装置、プロセッサ、又はデバイスによって、若しくはそれらに関連して使用するためのプログラムを含有又は記憶し得る、任意の有形及び／又は非一時的媒体であってもよい。
【００１１】
本開示の態様に対する動作を実行するためのコンピュータプログラムコードは、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋、Ｃ＃、Ｏｂｊｅｃｔｉｖｅ  Ｃなど等のオブジェクト指向のプログラミング言語、「Ｃ」プログラミング言語、スクリプトプログラミング言語、及び／又は他の類似のプログラミング言語等の従来の手続き型プログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書き込まれてもよい。プログラムコードは、データネットワークなどを介して、１つ以上のユーザのコンピュータ上、及び／又はリモートコンピュータ若しくはサーバ上で部分的又は全体的に実行することができる。
【００１２】
本明細書で使用される場合、構成要素は、有形の物理的な非一時的デバイスを備える。例えば、構成要素は、カスタムＶＬＳＩ回路、ゲートアレイ、若しくは他の集積回路を備えるハードウェア論理回路、論理チップ、トランジスタ、又は他の別個のデバイス等の市販の半導体、及び／若しくは他の機械的又は電気的デバイスとして実装されてもよい。構成要素はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。構成要素は、プリント回路基板（ＰＣＢ）などの電気線を介して１つ以上の他の構成要素と電気通信する、１つ以上のシリコン集積回路デバイス（例えば、チップ、ダイ、ダイ平面、パッケージ）、又は他の別個の電気デバイスを備えてもよい。本明細書に記載されるモジュールの各々は、ある実施形態において、代替的に、構成要素によって具現化されるか、又は構成要素として実装されてもよい。
【００１３】
本明細書全体を通して、「一実施形態」、「ある実施形態」、又は実施形態に関連して記載された特定の特性、構造、又は特徴を意味する類似の文言への言及は、本開示の少なくとも１つの実施形態内に含まれる。このため、「一実施形態において」、「ある実施形態において」という句、及び本明細書全体にわたる類似の文言の出現は、必ずしも全て同じ実施形態を参照するわけではなく、別途明示的に指定されない限り、「１つ以上であるが全ての実施形態ではない」を意味する。「含む（including）」、「含む（comprising）」、「有する（having）」という用語、及びその変化形は、別途明示的に指定されない限り、「含むが、これらに限定されない」ことを意味する。項目を列挙したリストは、別途明示的に指定されない限り、項目のいずれか又は全てが相互に排他的及び／又は相互に包括的であることを意味するものではない。「ａ」、「ａｎ」、及び「ｔｈｅ」という用語はまた、別途明示的に指定されない限り、「１つ以上」を指す。
【００１４】
本開示の態様は、本開示の実施形態に従う、方法、装置、システム、及びコンピュータプログラム製品の模式的なフローチャート図及び／又は模式的なブロック図を参照して以下に記載される。模式的なフローチャート図及び／又は模式的なブロック図の各々のブロック、並びに模式的なフローチャート図及び／又は模式的なブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータプログラム命令は、機械を製造するためのコンピュータ又は他のプログラム可能なデータ処理装置のプロセッサに提供されてもよく、そのため、プロセッサ又は他のプログラム可能なデータ処理装置を介して実行する命令は、模式的なフローチャート図及び／又は模式的なブロック図のブロック又は複数のブロックにおいて指定された機能及び／又は作用を実装するための手段を生成する。
【００１５】
また、いくつかの代替的な実装において、ブロック内に記された機能は、図内に記された順序から外れて行われ得ることに留意されたい。例えば、連続して示される２つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、関与する機能に応じて逆順序で実行されてもよい。例解された図の１つ以上のブロック、又はそれらの部分と機能、論理、又は効果が同等である、他の工程及び方法が、着想され得る。フローチャート及び／又はブロック図で、様々な矢印タイプ及び線タイプが用いられ得るが、それらは対応する実施形態の範囲を限定するものではないことが理解される。例えば、矢印は、図示された実施形態の列挙された工程間の指定されていない持続時間の待機期間又は監視期間を示してもよい。
【００１６】
以下のより詳細な説明において、その一部を形成する添付図面を参照する。前述の概要は、例解的なものに過ぎず、いかようにも限定することを意図するものではない。上記の例解的な態様、実施形態、及び特徴に加えて、更なる態様、実施形態、及び特徴が、図面及び以下の詳細な説明を参照することによって明らかとなるであろう。各図における要素の説明は、先の図の要素を参照し得る。同様の数字は、同様の要素の代替的な実施形態を含む、図面中の同様の要素を指し得る。
【００１７】
図１は、記憶管理モジュール１５０を備えるシステム１００の一実施形態のブロック図である。記憶管理モジュール１５０は、不揮発性メモリコントローラ１２４、不揮発性メモリ媒体コントローラ１２６、デバイスドライバ、又は記憶管理層（ＳＭＬ）１３０などのうちの１つ以上の一部であってもよく、かつ／若しくはそれらと通信してもよい。記憶管理モジュール１５０は、プロセッサ１１１と、揮発性メモリ１１２と、通信インターフェース１１３とを備え得る、コンピューティングデバイス１１０の不揮発性メモリシステム１０２上で動作し得る。プロセッサ１１１は、１つ以上の中央処理ユニット、１つ以上の汎用プロセッサ、１つ以上の特定用途向けプロセッサ、１つ以上の仮想プロセッサ（例えば、コンピューティングデバイス１１０は、ホスト内で動作するバーチャルマシンであってもよい）、１つ以上のプロセッサコアなどを備え得る。通信インターフェース１１３は、コンピューティングデバイス１１０及び／又は不揮発性メモリコントローラ１２４を、インターネットプロトコルネットワーク、ストレージエリアネットワークなど等の通信ネットワーク１１５に通信可能に結合するように構成された、１つ以上のネットワークインターフェースを含んでもよい。
【００１８】
コンピューティングデバイス１１０は、非一時的なコンピュータで読み取り可能な記憶媒体１１４を更に備えてもよい。コンピュータで読み取り可能な記憶媒体１１４は、コンピューティングデバイス１１０（例えば、プロセッサ１１１）に本明細書に開示された方法のうちの１つ以上の工程を実施させるように構成された実行可能な命令を含み得る。代替的に、又は付加的に、記憶管理モジュール１５０は、非一時的な記憶媒体１１４上に記憶された１つ以上のコンピュータで読み取り可能な命令として具現化されてもよい。
【００１９】
不揮発性メモリシステム１０２は、図示された実施形態において、記憶管理モジュール１５０を含む。一実施形態において、記憶管理モジュール１５０は、メモリ要素に関連付けられたページレジスタ内の記憶場所のサブセットを使用して、メモリ要素、揮発性及び／又は不揮発性に対する記憶動作を待ち行列に入れるように構成される。例えば、不揮発性記憶デバイスが通常の「ＮＡＮＤ」モードで動作しているとき、フルページのデータは、読み取り又は書き込み動作等の記憶動作を実施するときにページレジスタ内に記憶され得る。一方、本明細書に記載されるように、不揮発性記憶デバイスが、「バースト」モードで動作しているとき、フルページのデータよりも小さいアクセスユニットを有する場合があり、複数の記憶動作が、メモリ要素のバンク上で実施される記憶動作に関連付けられたデータを記憶するために、ページレジスタのサブセットを使用し、実行のための待ち行列に入れられ得る。
【００２０】
一実施形態において、記憶管理モジュール１５０は、プロセッサ１１１上での実行のためにコンピュータで読み取り可能な記憶媒体１１４上に記憶された、デバイスドライバ、ＳＭＬ  １３０など等の実行可能なソフトウェアコードを含み得る。別の実施形態において、記憶管理モジュール１５０は、不揮発性メモリ媒体コントローラ１２６、不揮発性メモリコントローラ１２４、デバイスコントローラ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）又は他のプログラム可能なロジック、ＦＰＧＡ又は他のプログラム可能なロジックに対するファームウェア、マイクロコントローラ上の実行に対するマイクロコード、特定用途向け集積回路（ＡＳＩＣ）など等の、１つ以上の不揮発性メモリデバイス１２０のロジックハードウェアを備え得る。更なる実施形態において、記憶管理モジュール１５０は、実行可能なソフトウェアコード及び論理ハードウェアの両方の組み合わせを含み得る。
【００２１】
一実施形態において、記憶管理モジュール１５０は、バス１２５などを介してＳＭＬ  １３０から記憶要求を受信するように構成される。記憶管理モジュール１５０は、バス１２５を介して、ＳＭＬ  １３０及び／又は記憶クライアント１１６に／からデータを転送するように更に構成されてもよい。したがって、いくつかの実施形態において、記憶管理モジュール１５０は、記憶要求及び関連データの転送を容易にするために、１つ以上のダイレクトメモリアクセス（ＤＭＡ）モジュール、リモートＤＭＡモジュール、バスコントローラ、ブリッジ、バッファなどを含んでもよく、かつ／又はそれらと通信してもよい。別の実施形態において、記憶管理モジュール１５０は、記憶クライアント１１６からのＡＰＩコールとして、ＩＯ−ＣＴＬコマンドとして、などの記憶要求を受信し得る。記憶管理モジュール１５０は、図４及び図５に関して下記により詳細に記載される。
【００２２】
様々な実施形態に従って、記憶管理モジュール１５０を備える不揮発性メモリコントローラ１２４は、１つ以上の不揮発性メモリデバイス１２０を管理することができる。不揮発性メモリデバイス（複数可）１２０は、複数のアドレス指定可能な媒体記憶場所に配置及び／又は分配されたソリッドステート記憶デバイス（複数可）等の、記録、メモリ、及び／又は記憶デバイスを備え得る。本明細書で使用される場合、媒体記憶場所は、メモリの任意の物理的な単位（例えば、不揮発性メモリデバイス１２０上の任意の量の物理的な記憶媒体）を指す。メモリユニットは、ページ、メモリ分割、消去ブロック、セクタ、ブロック、集合、又は物理的な記憶場所一式（例えば、以下に記載される論理ページ、論理消去ブロック）などを含み得るが、これらに限定されない。
【００２３】
不揮発性メモリコントローラ１２４は、１つ以上の記憶クライアント１１６に論理アドレス空間１３４を提示し得る、ＳＭＬ  １３０を含んでもよい。ＳＭＬの一例は、ＳａｎＤｉｓｋ  Ｃｏｒｐｏｒａｔｉｏｎ  Ｍｉｌｐｉｔａｓ，ＣａｌｉｆｏｒｎｉａのＶｉｒｔｕａｌ  Ｓｔｏｒａｇｅ  Ｌａｙｅｒ（登録商標）である。代替的に、各不揮発性メモリデバイス１２０は、論理アドレス空間１３４を記憶クライアント１１６に提示し得る、不揮発性メモリ媒体コントローラ１２６を備え得る。本明細書で使用される場合、論理アドレス空間１３４は、メモリリソースの論理表現を指す。論理アドレス空間１３４は、複数の論理アドレス（例えば、範囲）を含んでもよい。本明細書で使用される場合、論理アドレスは、論理ブロックアドレス（ＬＢＡ）、シリンダ／ヘッド／セクタ（ＣＨＳ）アドレス、ファイル名、オブジェクト識別子、ｉｎｏｄｅ、Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＵＵＩＤ）、Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＧＵＩＤ）、ハッシュコード、署名、インデックスエントリ、範囲、大きさなどを含むが、これらに限定されない、メモリリソース（例えば、データ）を参照するための任意の識別子を指す。
【００２４】
ＳＭＬ  １３０は、転送インデックス等のメタデータ１３５を維持して、論理アドレス空間１３４の論理アドレスを不揮発性メモリデバイス（複数可）１２０上の媒体記憶場所にマッピングしてもよい。ＳＭＬ  １３０は、論理アドレスから物理的な記憶リソースへの任意の多対多（any-to-any）マッピングを提供してもよい。本明細書で使用される場合、「多対多」マッピングは、任意の論理アドレスを任意の物理的記憶リソースにマッピングすることができる。したがって、論理アドレスと特定の媒体記憶場所及び／又は媒体アドレスとの間に、予め定義された並びに／若しくは事前設定されたマッピングは存在しない場合がある。本明細書で使用される場合、媒体アドレスは、１つのメモリリソースを別のメモリリソースから、複数のメモリリソースを管理するコントローラに固有に識別するメモリリソースのアドレスを指す。例として、媒体アドレスは、媒体記憶場所のアドレス、物理的なメモリユニット、物理的なメモリユニット（例えば、論理メモリユニット）の集合、メモリユニットの一部分（例えば、論理メモリユニットアドレス及びオフセット、範囲、及び／又は大きさ）などを含むが、これらに限定されない。したがって、ＳＭＬ  １３０は、任意のサイズ及び／又は精度の物理的なデータリソースに論理アドレスをマッピングすることができ、不揮発性メモリデバイス（複数可）１２０の基礎となるデータ分配スキームに対応し得、又は対応しなくてもよい。例えば、いくつかの実施形態において、不揮発性メモリコントローラ１２４は、複数の物理的なメモリユニットを論理的に組み合わせることによって形成される論理メモリユニット内にデータを記憶するように構成され、これにより、不揮発性メモリコントローラ１２４が、多くの異なる仮想メモリユニットのサイズ及び／又は精度を支持することを可能にし得る。
【００２５】
本明細書で使用される場合、論理メモリ要素は、（例えば、Ｉ／Ｏ及び／若しくは制御バスを介して）並行して管理されるか、又は管理することができる、一組の２つ以上の不揮発性メモリ要素を指す。論理メモリ要素は、論理ページ、論理メモリ分割（例えば、論理消去ブロック）など等の、複数の論理メモリユニットを含み得る。本明細書で使用される場合、論理メモリユニットは、２つ以上の物理的なメモリユニットを組み合わせた論理的構造体を指し、各物理的なメモリユニットが、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある（例えば、各不揮発性メモリ要素が並行してアクセス可能である）。本明細書で使用される場合、論理メモリ分割は、一組の２つ以上の物理的なメモリ分割を指し、各物理的なメモリ分割が、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある。
ＳＭＬ  １３０によって提示された論理アドレス空間１３４は、論理容量を有し得、論理アドレス空間１３４内の利用可能な論理アドレスの数、並びに論理アドレスによって参照されるデータのサイズ及び／又は精度に対応し得る。例えば、２＾３２の固有論理アドレスを含む論理アドレス空間１３４の論理容量は、各々が２０４８バイト（２ＫｉＢ）のデータを参照し、２＾４３バイトであり得る。本明細書で使用される場合、キビバイト（ＫｉＢ）は、１０２４バイトを指す。いくつかの実施形態において、論理アドレス空間１３４は、シンプロビジョニングされてもよい。本明細書で使用される場合、「シンプロビジョニングされた」論理アドレス空間１３４は、基礎となる不揮発性メモリデバイス（複数可）１２０の物理的な容量を超える論理容量を有する論理アドレス空間１３４を指す。例えば、ＳＭＬ  １３０は、記憶クライアント１１６に対して６４ビットの論理アドレス空間１３４を提示し得（例えば、６４ビットの論理アドレスによって参照される論理アドレス空間１３４）、これは基礎となる不揮発性メモリデバイス１２０の物理的な容量を超えてもよい。大きな論理アドレス空間１３４は、名前付けの競合の可能性を低減しながら、記憶クライアント１１６が、論理アドレスの連続範囲を割り当てること及び／又は参照することを可能にし得る。ＳＭＬ  １３０は、論理アドレス空間１３４を基礎となる物理的な記憶デバイス１２０から独立して管理するために、論理アドレスと物理的な記憶リソースとの間の多対多マッピングを活用することができる。例えば、ＳＭＬ  １３０は、必要に応じて、記憶クライアント１１６によって使用される論理アドレスを変更することなく、物理的な記憶リソースをシームレスに追加及び／又は除去し得る。
【００２６】
不揮発性メモリコントローラ１２４は、コンテキスト形式でデータを記憶するように構成されてもよい。本明細書で使用される場合、コンテキスト形式は、持続的コンテキストメタデータが物理的な記憶媒体１２２上のデータを有して記憶される、自己記述型データ形式を指す。持続的コンテキストメタデータは、記憶されるデータに対するコンテキストを提供する。ある実施形態において、持続的コンテキストメタデータは、持続的コンテキストメタデータが記憶されているデータを個別に識別する。例えば、持続的コンテキストメタデータは、記憶クライアント１１６が所有するデータのセクタ又はブロックを、記憶クライアント１１６によって所有される他のセクタ又はデータブロックから個別に識別し得る。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される一連の動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データのセキュリティ制御、データタイプ、又はデータの他の属性を識別する。ある実施形態において、持続的コンテキストメタデータは、データタイプ、固有データ識別子、動作、及びデータ上で実施される一連の動作を含む複数の態様のうちの少なくとも１つを識別する。
持続的コンテキストメタデータは、データの論理アドレス、データの識別子（例えば、ファイル名、オブジェクトｉｄ、ラベル、固有識別子など）、他のデータ（例えば、データが他のデータに関連付けられていることのインジケータ）への参照（複数可）、他のデータ（例えば、ファイルオフセットなど）に対するデータの相対位置又はオフセット、データサイズ及び／又は範囲などを含み得るが、これらに限定されない。コンテキストデータ形式は、データセグメント及び１つ以上のヘッダを含む、パケット形式を含んでもよい。代替的に、コンテキストデータ形式は、データを、他の方法で（例えば、不揮発性メモリ媒体１２２上の専用インデックス内、メモリ分割インデックス内など）でコンテキスト情報と関連付けることができる。
【００２７】
いくつかの実施形態において、コンテキストデータ形式は、データコンテキストが、不揮発性メモリ媒体１２２のコンテキストに基づいて、及び上記の任意の多対多マッピング等の他のメタデータから独立して、判定及び／又は再構成することを可能にし得る。データの媒体場所は、データの論理アドレスから独立しているため、データのコンテキストを媒体場所又はデータの媒体アドレスのみに基づいて判定することは非効率的又は不可能であり得る。不揮発性メモリ媒体１２２上にデータをコンテキスト形式で記憶することは、他のメタデータを参照することなく、データコンテキストを判定することを可能にし得る。例えば、コンテキストデータ形式は、不揮発性メモリ媒体１２２のコンテンツにのみ基づいて、メタデータを再構成することを可能にし得る（例えば、論理アドレスと媒体場所との間の多対多マッピングを再構成する）。
【００２８】
いくつかの実施形態において、不揮発性メモリコントローラ１２４は、ソリッドステート記憶媒体等の、１つ以上の非対称の追記型媒体１２２上にデータを記憶するように構成され得る。本明細書で使用される場合、「追記型」記憶媒体は、新しいデータが書き込まれるか、又はその上にプログラムされるたびに再初期化される（例えば、消去される）記憶媒体を指す。本明細書で使用される場合、「非対称」記憶媒体は、異なる記憶動作に対する異なるレイテンシを有する記憶媒体１２２を指す。多くのタイプのソリッドステート記憶媒体は、非対称であり、例えば、読み取り動作は、書き込み／プログラム動作よりもはるかに速くてもよく、書き込み／プログラム動作は、消去動作よりもはるかに速くてもよい（例えば、媒体を読み出すことは、消去よりも数百倍速く、媒体をプログラミングするよりも数十倍速くてもよい）。
【００２９】
メモリ媒体１２２は、とりわけ、媒体１２２などの非対称特性を考慮するために、グループ（例えば、消去ブロック）として消去することができるメモリ分割に分配され得る。そのため、単一のデータセグメントを定位置に変更することは、データを含む消去ブロック全体を消去すること、及び修正されたデータを、元の変更されていないデータと共に消去ブロックに再度書き込むことを必要とし得る。これは、媒体１２２を過度に摩耗させ得る非効率的な「書き込み増幅」をもたらし得る。したがって、いくつかの実施形態において、不揮発性メモリコントローラ１２４は、定位置から外してデータを書き込むように構成され得る。本明細書で使用される場合、データを「定位置から外して」書き込むことは、データを「定位置で」上書きする（例えば、データの元の物理的な場所を上書きする）のではなく、異なる媒体記憶場所（複数可）にデータを書き込むことを指す。データを定位置から外して修正することは、修正されるべきデータを有する消去ブロック上の既存の有効なデータが、消去及び再コピーされる必要がないため、書き込み増幅を回避し得る。その上、定位置から外してデータを書き込むことは、多くの記憶動作のレイテンシ経路から消去することを除去し得る（例えば、消去レイテンシは、もはや書き込み動作のクリティカルパスの一部ではない）。
【００３０】
不揮発性メモリコントローラ１２４は、記憶動作に対応するための通常の経路（例えば、記憶動作を実施する及び／又は記憶要求に対応するための「経路」）の外で動作する１つ以上のプロセスを含んでもよい。本明細書で使用される場合、「記憶要求に対応するための経路」又は「記憶動作に対応するための経路」（「クリティカルパス」とも称される）は、読み取り、書き込み、修正など等の記憶動作又は要求に対応するために必要な一連の処理動作を指す。記憶要求に対応するための経路は、記憶クライアント１１６から要求を受信することと、要求の論理アドレスを識別することと、不揮発性メモリ媒体１２２上で１つ以上の記憶動作を実施することと、応答又はデータ等の結果を返すことと、を含み得る。記憶要求に対応するための経路の外側で発生するプロセスは、グルーマ、重複排除などを含み得るが、これらに限定されない。これらのプロセスは、それらが他の記憶動作及び／又は要求の性能を妨害又は影響しないように、自律的かつバックグラウンドで実施されてもよい。したがって、これらのプロセスは、記憶要求に対応することから独立して動作し得る。
【００３１】
いくつかの実施形態において、不揮発性メモリコントローラ１２４は、ガベージコレクション又は他の記憶容量回復プロセスを使用して、再使用に対するメモリ分割（例えば、論理的又は物理的消去ブロック）を再利用するように構成されている、グルーマを含む。不揮発性メモリコントローラ１２４によって実装された定位置を外れたパラダイムの書き込みは、不揮発性メモリ媒体１２２上に残る不明瞭な又は無効なデータをもたらし得る。例えば、データＹでデータＸを上書きすることは、（例えば、定位置にＸを上書きするのではなく）新しいメモリ分割上にＹを記憶すること、及びデータの有効な最新版としてＹを識別するために、メタデータの多対多マッピングを更新することをもたらし得る。上記のように、Ｘを消去することは、全メモリ分割を消去することを伴う場合があり、これは時間がかかる動作であり、書き込み増幅をもたらし得るため、データＸの不明瞭なバージョンは、無効としてマーキングされ得るが、すぐに除去（例えば、消去）されない。同様に、これ以上使用されないデータ（例えば、削除又はトリミングされたデータ）は、直ちに除去されなくてもよい。不揮発性メモリ媒体１２２は、相当量の無効データを蓄積し得る。
【００３２】
グルーマプロセスは、記憶動作に対応するためのクリティカルパスの外側で動作することができる。グルーマプロセスは、他の記憶動作のために再使用することができるように、メモリ分割を再利用してもよい。本明細書で使用される場合、メモリ分割を再利用することは、メモリ分割を消去することを指し、そのため新しいデータがその上に記憶／プログラムされ得る。メモリ分割を再利用することは、メモリ分割上の有効データを新しい場所に再配置することを含み得る。グルーマは、メモリ分割内の無効データの量、メモリ分割内の有効データの量、メモリ分割時の摩耗（例えば、消去サイクル数）、メモリ分割がプログラムされているか又はリフレッシュされてからの時間などを含み得るが、これらに限定されない、１つ以上の要因に基づいた再利用に対するためのメモリ分割を識別し得る。
【００３３】
不揮発性メモリコントローラ１２４は、データをログ形式で記憶するように更に構成されてもよい。上記のように、ログ形式は、不揮発性メモリ媒体１２２上で実施される記憶動作の順序付けられたシーケンスを定義するデータ形式を指す。いくつかの実施形態において、ログ形式は、不揮発性メモリ媒体１２２の媒体アドレスの所定のシーケンス内に（例えば、媒体１２２の連続ページ及び／又は消去ブロック内に）データを記憶することを含む。ログ形式は、データ（例えば、各パケット又はデータセグメント）をそれぞれのシーケンスインジケータと関連付けることを更に含んでもよい。シーケンスインジケータは、個別に（例えば、各データパケットに適用される）データに、及び／又はデータグループ（例えば、消去ブロック等のメモリ分割上に連続的に記憶されたパケット）に適用され得る。いくつかの実施形態において、メモリ分割が上記のように再利用される（例えば、消去される）とき、及び／又はメモリ分割がデータを記憶するために最初に使用されるときに、シーケンスインジケータがメモリ分割に適用されてもよい。
【００３４】
いくつかの実施形態において、ログ形式は、「追加専用」パラダイム内にデータを記憶することを含み得る。以下に記載されるログ記憶モジュール１３７などを使用する不揮発性メモリコントローラ１２４は、不揮発性メモリデバイス１２０の媒体アドレスで現在の追加ポイントを維持し得る。追加ポイントは、現在のメモリ分割及び／又はメモリ分割内のオフセットであってもよい。次いで、データは、追加ポイントから連続的に追加され得る。したがって、データの連続的順序付けは、メモリ分割内のデータのシーケンスと組み合わせたデータのメモリ分割のシーケンスインジケータに基づいて判定され得る。メモリ分割の終了に達すると、不揮発性メモリコントローラ１２４は、「次の」利用可能なメモリ分割（例えば、初期化され、データを記憶する準備が整っている次のメモリ分割）を識別し得る。グルーマは、データが引き続き媒体ログに追加され得ることを確実とするために、無効、停滞、及び／又は削除されたデータを含むメモリ分割を再利用し得る。
【００３５】
本明細書に記載されるログ形式は、有効データが不揮発性メモリ媒体１２２のコンテンツに基づいて、及び他のメタデータから独立して、無効データと区別されることを可能にし得る。上記のように、無効データは、データを含むメモリ分割が再利用されるまで、不揮発性メモリ媒体１２２から除去されなくてもよい。したがって、同じコンテキストを有するデータの複数の「バージョン」は、不揮発性メモリ媒体１２２上に存在し得る（例えば、同じ論理アドレスを有する複数のバージョンのデータ）。データに関連付けられたシーケンスインジケータは、データの現在の最新バージョンから、データの無効バージョンを区別するために使用されてもよく、ログにおける直近のデータは、現在のバージョンであり、前のバージョンは無効として識別されてもよい。
【００３６】
記憶管理層１３０は、１つ以上の記憶クライアント１１６に記憶サービスを提供するように構成されてもよい。記憶クライアント１１６は、コンピューティングデバイス１１０上で動作するローカル記憶クライアント１１６、及び／又はネットワーク１１５並びに／若しくはネットワークインターフェース１１３を介してアクセス可能なリモート記憶クライアント１１６を含んでもよい。記憶クライアント１１６は、動作システム、ファイルシステム、データベースアプリケーション、サーバアプリケーション、カーネルレベルプロセス、ユーザレベルプロセス、アプリケーションなどを含み得るが、これらに限定されない。
【００３７】
記憶管理層１３０は、１つ以上の不揮発性メモリデバイス１２０を備え、及び／又はそれに通信可能に結合される。１つ以上の不揮発性メモリデバイス１２０は、ソリッドステート記憶デバイス、ハードドライブ、ＳＡＮ記憶リソースなどを含む、異なるタイプの不揮発性メモリデバイスを含み得るが、これらに限定されない。１つ以上の不揮発性メモリデバイス１２０は、１つ以上のそれぞれの不揮発性メモリ媒体コントローラ１２６及び不揮発性メモリ媒体１２２を含み得る。図１に例解されるように、ＳＭＬ  １３０は、従来のブロックＩ／Ｏインターフェース１３１を介して１つ以上の不揮発性メモリデバイス１２０へのアクセスを提供し得る。付加的に、ＳＭＬ  １３０は、ＳＭＬインターフェース１３２を通じて強化された機能（例えば、大きい仮想アドレス空間１３４）へのアクセスを提供し得る。メタデータ１３５は、ブロックＩ／Ｏインターフェース１３１、ＳＭＬインターフェース１３２、キャッシュインターフェース１３３、又は他の関連インターフェースのうちのいずれかを通じて実施される記憶動作を管理及び／又は追跡するために使用され得る。
キャッシュインターフェース１３３は、記憶管理層１３０を介してアクセス可能なキャッシュ固有の特徴を見せ得る。また、いくつかの実施形態において、記憶クライアント１１６に提示されるＳＭＬインターフェース１３２は、１つ以上の不揮発性メモリデバイス１２０及び／又は１つ以上の不揮発性メモリ媒体コントローラ１２６によって実装されるデータ変換へのアクセスを提供する。
【００３８】
ＳＭＬ  １３０は、ブロックＩ／Ｏインターフェース、拡張記憶管理層インターフェース、キャッシュインターフェースなどを含み得るが、これらに限定されない、１つ以上のインターフェースを通じて記憶サービスを提供し得る。ＳＭＬ  １３０は、１つ以上のインターフェースを通じて、記憶クライアント１１６に論理アドレス空間１３４を提示し得る。上記のように、論理アドレス空間１３４は、複数の論理アドレスを含み得、各々が１つ以上の不揮発性メモリデバイス１２０上のそれぞれの媒体場所に対応する。ＳＭＬ  １３０は、上記のように、論理アドレスと媒体場所との間の多対多マッピングを含むメタデータ１３５を維持し得る。
【００３９】
ＳＭＬ  １３０は、コンテキストに応じたログ形式においてデータを記憶するように構成されたログ記憶モジュール１３７を更に備え得る。コンテキストに応じたログデータ形式は、データをデータの論理アドレスなど等の持続的コンテキストメタデータと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、１つ以上の不揮発性メモリデバイス１２０上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体１２２上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。
【００４０】
ＳＭＬ  １３０は、データ、コマンド、及び／又はクエリを、周辺構成要素相互接続エクスプレス（ＰＣＩエクスプレス又はＰＣＩｅ）バス、シリアルアドバンストテクノロジアタッチメント（ＡＴＡ）バス、パラレルＡＴＡバス、小型コンピュータシステムインターフェース（ＳＣＳＩ）、ファイヤワイヤ、ファイバチャネル、ユニバーサルシリアルバス（ＵＳＢ）、ＰＣＩｅアドバンストスイッチング（ＰＣＩｅ−ＡＳ）バス、ネットワーク１１５、インフィニバンド、ＳＣＳＩ  ＲＤＭＡ等を含み得るが、これらに限定されない、バス１２５にわたって１つ以上の不揮発性メモリデバイス１２０に転送するように構成された不揮発性メモリデバイスインターフェース１３９を更に含み得る。不揮発性メモリデバイスインターフェース１３９は、入出力制御（ＩＯ−ＣＴＬ）コマンド（複数可）、ＩＯ−ＣＴＬコマンド延長部（複数可）、リモートダイレクトメモリアクセスなどを使用して、１つ以上の不揮発性メモリデバイス１２０と通信し得る。
【００４１】
通信インターフェース１１３は、コンピューティングデバイス１１０及び／又は不揮発性メモリコントローラ１２４をネットワーク１１５に、及び／又は１つ以上のリモートの、ネットワークアクセス可能な記憶クライアント１１６に通信可能に結合するように構成された１つ以上のネットワークインターフェースを備えてもよい。記憶クライアント１１６は、コンピューティングデバイス１１０上で動作するローカル記憶クライアント１１６、及び／又はネットワーク１１５並びに／若しくはネットワークインターフェース１１３を介してアクセス可能なリモート記憶クライアント１１６を含んでもよい。不揮発性メモリコントローラ１２４は、１つ以上の不揮発性メモリデバイス１２０を備える。図１は、単一の不揮発性メモリデバイス１２０を図示するが、本開示は、この点に関して限定されず、いずれの数の不揮発性メモリデバイス１２０を組み込むように適合され得る。
【００４２】
不揮発性メモリデバイス１２０は、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ナノランダムアクセスメモリ（ナノＲＡＭ又はＮＲＡＭ）、ナノ結晶ワイヤベースメモリ、シリコン酸化物ベースのサブ１０ナノメートルプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン（ＳＯＮＯＳ）、抵抗ラム（ＲＲＡＭ（登録商標））、プログラム可能メタライゼーションセル（ＰＭＣ）、導電性架橋ＲＡＭ（ＣＢＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、相変化ＲＡＭ（ＰＲＡＭ又はＰＣＭ）、磁気記憶媒体（例えば、ハードディスク、テープ）、光学記憶媒体など、を含み得るが、これらに限定されない、不揮発性メモリ媒体１２２を備えてもよい。不揮発性メモリ媒体１２２は、本明細書中で「メモリ媒体」として称されるが、様々な実施形態において、不揮発性メモリ媒体１２２は、より一般的に、不揮発性メモリ媒体、不揮発性記憶媒体などと称され得る、データを記録することが可能な不揮発性記録媒体を備えてもよい。更に、様々な実施形態において、不揮発性メモリデバイス１２０は、不揮発性記録デバイス、不揮発性メモリデバイス、不揮発性記憶デバイスなどを含み得る。
【００４３】
不揮発性メモリ媒体１２２は、チップ、パッケージ、平面、ダイなどを含み得るが、これらに限定されない、１つ以上の不揮発性メモリ要素１２３を備えてもよい。不揮発性メモリ媒体コントローラ１２６は、不揮発性メモリ媒体１２２上の記憶動作を管理するように構成されてもよく、１つ以上のプロセッサ、プログラム可能なプロセッサ（例えば、フィールドプログラマブルゲートアレイ）などを含んでもよい。いくつかの実施形態において、不揮発性メモリ媒体コントローラ１２６は、上記のコンテキストに応じたログ形式で不揮発性メモリ媒体１２２上にデータを記憶及び／又は不揮発性メモリ媒体１２２からデータを読み取り、不揮発性メモリデバイス１２０などに／からデータを転送するように構成される。
【００４４】
不揮発性メモリ媒体コントローラ１２６は、バス１２７によって不揮発性メモリ媒体１２２に通信可能に結合され得る。バス１２７は、不揮発性メモリ要素１２３に／からデータを通信するためのＩ／Ｏバスを含んでもよい。バス１２７は、アドレス指定及び他のコマンド並びに制御情報を不揮発性メモリ要素１２３に通信するための制御バスを更に含んでもよい。いくつかの実施形態において、バス１２７は、不揮発性メモリ要素１２３を不揮発性メモリ媒体コントローラ１２６に並行して、通信可能に結合し得る。この並行アクセスは、不揮発性メモリ要素１２３がグループとして管理されることを可能にし、論理メモリ要素１２９を形成することができる。上述のように、論理メモリ要素は、それぞれの論理メモリユニット（例えば、論理ページ）及び／又は論理メモリ分割（例えば、論理消去ブロック）に分配されてもよい。論理メモリユニットは、不揮発性メモリ要素の各々の物理的なメモリユニットを論理的に組み合わせることによって形成され得る。例えば、不揮発性メモリ媒体１２２が２５の不揮発性メモリ要素を含む場合、各論理メモリユニットは、２５ページ（例えば、不揮発性メモリ媒体１２２の各要素のページ）を備え得る。
【００４５】
不揮発性メモリコントローラ１２４は、ＳＭＬ  １３０及び不揮発性メモリ媒体コントローラ１２６を備え得る。ＳＭＬ  １３０は、１つ以上のインターフェース１３１、１３２、及び／又は１３３を介して記憶クライアント１１６に記憶サービスを提供してもよい。いくつかの実施形態において、ＳＭＬ  １３０は、ブロックデバイスＩ／Ｏインターフェース１３１を提供し、それを通じて記憶クライアント１１６がブロックレベルＩ／Ｏ動作を実施する。代替的に又は付加的に、ＳＭＬ  １３０は、記憶管理層（ＳＭＬ）インターフェース１３２を提供し得、記憶クライアント１１６に他の記憶サービスを提供し得る。いくつかの実施形態において、ＳＭＬインターフェース１３２は、ブロックデバイスインターフェース１３１への延長部を備え得る（例えば、記憶クライアント１１６は、ブロックデバイスインターフェース１３１への延長部を通じてＳＭＬインターフェース１３２にアクセスしてもよい）。代替的に又は付加的に、ＳＭＬインターフェース１３２は、別個のＡＰＩ、サービス、及び／又はライブラリとして提供されてもよい。ＳＭＬ  １３０は、不揮発性メモリシステム１０２を使用してデータをキャッシュするためのキャッシュインターフェース１３３を提供するように更に構成され得る。
【００４６】
上記のように、ＳＭＬ  １３０は、論理アドレス空間１３４を記憶クライアント１１６に（例えば、インターフェース１３１、１３２、及び／又は１３３を通じて）提示し得る。ＳＭＬ  １３０は、論理アドレス空間１３４内の論理アドレスと不揮発性メモリデバイス１２０上の媒体場所との間の多対多マッピングを含む、メタデータ１３５を維持し得る。メタデータ１３５は、論理アドレス空間１３４内の論理アドレス、及び不揮発性メモリデバイス１２０上の媒体場所をマッピングするエントリを有する論理から物理マッピング構造を含み得る。一実施形態において、メタデータ１３５の論理から物理マッピング構造は、不揮発性メモリデバイス１２０がデータを記憶する論理アドレスに対するエントリを有して、及び不揮発性メモリデバイス１２０が現在データを記憶していない論理アドレスに対するエントリのない状態で、まばらに投入される。ある実施形態において、メタデータ１３５は、ブロックとしてデータを管理するＳＭＬ  １３０を伴い、ブロックレベルでデータを追跡する。
不揮発性メモリシステム１０２は、ログ記憶モジュール１３７を更に備えてもよく、これは上記のように、コンテキストに応じたログ形式で不揮発性メモリデバイス１２０上にデータを記憶するように構成され得る。コンテキストに応じたログデータ形式は、データを不揮発性メモリ媒体１２２上の論理アドレスと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、不揮発性メモリ媒体１２２上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体１２２上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。不揮発性メモリコントローラ１２４は、上記のように、データ、コマンド、及び／又はクエリを、バス１２５にわたって不揮発性メモリ媒体コントローラ１２６に転送するように構成される、不揮発性メモリデバイスインターフェース１３９を更に備えてもよい。
【００４７】
図２は、１つ以上のメモリダイ又はチップ２１２を含み得る不揮発性記憶デバイス２１０の実施形態を図示する。不揮発性記憶デバイス２１０は、図１を参照して説明された不揮発性メモリデバイス１２０と実質的に類似し得る。いくつかの実施形態において、メモリダイ２１２は、メモリセル、ダイコントローラ２２０、及び読み取り／書き込み回路２３０Ａ／２３０Ｂのアレイ２００（二次元又は三次元）を含む。一実施形態において、様々な周辺回路によるメモリアレイ２００へのアクセスは、アレイの反対側の側面上で、対称的に実装され、そのため各側面上のアクセスライン及び回路の密度が半分に低減される。読み取り／書き込み回路２３０Ａ／２３０Ｂは、更なる実施形態において、メモリセルのページが並行して読み取り又はプログラムされることを可能にする複数の感知ブロック２５０を含む。
【００４８】
様々な実施形態において、メモリアレイ２００は、行デコーダ２４０Ａ／２４０Ｂを介したワード線、及び列デコーダ２４２Ａ／２４２Ｂを介したビット線によってアドレス指定可能である。いくつかの実施形態において、コントローラ２４４は、１つ以上のメモリダイ２１２と同じメモリデバイス２１０（例えば、可動式記憶カード又はパッケージ）内に含まれる。コマンド及びデータは、線２３２を介してホストとコントローラ２４４との間で、線２３４を介してコントローラと１つ以上のメモリダイ２１２との間で転送される。一実装例は、複数のチップ２１２を含むことができる。
【００４９】
一実施形態において、ダイコントローラ２２０は、読み取り／書き込み回路２３０Ａ／２３０Ｂと協働してメモリアレイ２００上でメモリ／記憶動作を実施する。ある実施形態において、ダイコントローラ２２０は、記憶管理モジュール１５０、状態マシン２２２、オンチップアドレスデコーダ２２４、及び電力制御回路２２６を含む。一実施形態において、記憶管理モジュール１５０は、メモリアレイ２００の記憶場所のバンクに対する記憶動作コマンドを受信し、メモリアレイ２００に関連付けられたページレジスタ内の利用可能な記憶場所のサブセットを使用して実行するための記憶動作コマンドを待ち行列に入れ、及び記憶動作コマンドが完了、実行、実施などされるまで、ページレジスタ内の記憶場所に記憶動作コマンドに関連付けられたデータを記憶するように構成される。ある実施形態において、記憶管理モジュール１５０は、デバイスドライバのソフトウェア、及び／又はデバイスコントローラ２４４内のハードウェア、ダイコントローラ２２０、並びに／又は状態マシン２２２を含んでもよい。
【００５０】
一実施形態において、状態マシン２２２は、メモリ又は記憶動作のチップレベル制御を提供する。オンチップアドレスデコーダ２２４は、ホスト又はメモリコントローラによって使用されるアドレスとデコーダ２４０Ａ、２４０Ｂ、２４２Ａ、２４２Ｂによって使用されるハードウェアアドレスとの間で変換するアドレスインターフェースを提供する。電力制御モジュール２２６は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。一実施形態において、電力制御回路２２６は、供給電圧よりも大きい電圧を生成することができる１つ以上のチャージポンプを含む。
【００５１】
図３は、メモリセル３０２のアレイ３０１を含む、上記の不揮発性記憶デバイス２１０等の、メモリ要素３００の一実施形態を図示する。一実施形態において、アレイ３０１は、メモリセル３０２の２つのサブアレイ３０３に分割される。本明細書を考慮すれば、当業者は、メモリアレイ３０１が、任意の数のサブアレイ３０３に分割することができることを認識するであろう。更に、図示された実施形態において、メモリセル３０２の各行は、メモリセル３０２のバンク３０６（例えば、一組のメモリセル３０２）と、バンクグループ３０４を含む一群のメモリセルバンク３０６と、を含む。例えば、図３に例解されるように、メモリ要素３００は、メモリセル３０２の２つのサブアレイ３０３及び１６個のバンク３０６を含み、４つの異なるバンクグループ３０４にグループ化されてもよい。
【００５２】
更なる実施形態において、メモリ要素３００は、関連するページレジスタ／ページバッファ３０８を有してもよい。本明細書で使用される場合、ページレジスタ３０８は、メモリアレイ３０１に（例えば、書き込みコマンドに対する）、又はメモリアレイ３０１から（読み取りコマンドに対する）転送しながら、データを一時的に記憶するために使用される記憶エリアである。ある実施形態において、ページレジスタは、メモリアレイ３０１に対するアドレスを記憶するために使用することができる複数のデータラッチ、メモリアレイ３０１内のアドレスで記憶されるデータなどを含む、複数の異なる記憶場所を含む。
【００５３】
一実施形態において、メモリ要素３００が不揮発性ＮＡＮＤ記憶デバイスに対するＮＡＮＤモード等のアノーマルモードで動作しているとき、ページレジスタ３０８に対するアクセスユニットは、例えばページ当たり５１２Ｂ、４ｋＢ、８ｋＢ、１６ｋＢなどのフルページのデータであってもよい。一方、メモリ要素３００が「バースト」モードで実施されるとき、ページレジスタ３０８に対するアクセスユニットは、例えば、ページ当たり４Ｂ、８Ｂ、１６Ｂなど、より小さくなり得、バンク３０６又はバンクグループ３０４の記憶サイズに対応し得る。本明細書で使用される場合、「バースト」モードは、メモリ要素３００がメモリアレイ３０１のバンク３０６又はバンクグループ３０４上で高速同期読み取り３１０及びプログラム／書き込み３１２動作を処理する、メモリ要素３００のモードであり得る。
【００５４】
したがって、「バースト」モードで実行するとき、ページレジスタ３０８のサブセット又は部分は、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられてもよく、メモリセル３０２のバンク３０６又はバンクグループ３０４上で、記憶動作コマンド、例えば、読み取り３１０又は書き込み３１２コマンド、を実施するために利用されてもよい。このため、ページレジスタ３０８内の、使用されず、利用可能な記憶空間は、メモリセル３０２のバンク３０６又はバンクグループ３０４に対する異なる記憶動作を、待ち行列に入れる、バッファリングする、などのために使用することができる。更に、複数の異なる記憶動作がページレジスタ３０８内で待ち行列に入れられ、メモリ要素３００のメモリセル３０２の異なるバンク３０６又はバンクグループ３０４上で同期的に実施されてもよい。一実施形態において、メモリアレイ３０１は、各バンク３０６又はバンクグループ３０４に対する記憶動作を待ち行列に入れること及び処理を管理する単一の状態マシン２２２によって管理されてもよい。ある実施形態において、複数の状態マシン２２２は、各バンク３０６又はバンクグループ３０４に対する記憶動作を待ち行列に入れること及び処理を独立して管理し得る。
【００５５】
図４は、記憶管理モジュール１５０の一実施形態を図示する。記憶管理モジュール１５０は、図１に関して上記の記憶管理モジュール１５０と実質的に類似し得る。図示された実施形態において、記憶管理モジュール１５０は、コマンドモジュール４０２と、待ち行列モジュール４０４と、データモジュール４０６と、を含み、これらは以下でより詳細に記載される。
【００５６】
一実施形態において、コマンドモジュール４０２は、メモリ要素３００の記憶場所のバンク３０６、例えば、メモリセル３０２に関連付けられた１つ以上の記憶動作コマンドを受信するように構成される。本明細書で使用される場合、記憶動作コマンドは、メモリ要素３００、メモリアレイ３０１、バンク３０６、バンクグループ３０４、メモリセル３０２などの上での作用、活動などを引き起こすことを意図したコマンドを含み得る。記憶動作コマンドは、例えば、読み取りコマンド、書き込みコマンド、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、リフレッシュフラッシュコマンド、及び／又は同様のものを含んでもよい。上記のように、コマンドモジュール４０２は、記憶クライアント１１６から記憶動作コマンドを受信してもよい。
一実施形態において、コマンドモジュール４０２は、メモリセル３０２のバンク３０６、メモリセル３０２のバンクグループ３０４、及び／又はメモリ要素３００のメモリアレイ３０１の同様のもの、に対する記憶動作コマンドを受信する。いくつかの実施形態において、コマンドモジュール４０２は、記憶動作に関連付けられたメモリセルのバンク（複数可）３０６に対応する記憶動作コマンドの一部として、１つ以上のアドレスを受信する。
【００５７】
一実施形態において、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定することによって、実行するための記憶動作コマンドを待ち行列に入れるように構成される。本明細書で使用される場合、ページレジスタ３０８内の記憶場所は、アドレス、識別子などを使用してアクセス可能であり得る１つ以上のデータラッチ、データレジスタ、及び／又は同様のものを含んでもよい。このような実施形態において、ページレジスタ３０８内の記憶場所は、ページレジスタ３０８内の利用可能な記憶場所のサブセット、一部分、一部などであってもよい。例えば、４ｋＢのフルページに対するデータを記憶するように構成され得る、ページレジスタ３０８内の記憶場所は、メモリ要素３００内のメモリセル３０２のバンク３０６に関連付けられた１Ｂ又は２Ｂセットのデータラッチであってもよい。
【００５８】
待ち行列モジュール４０４は、記憶コマンド動作が受信される順序、並びに記憶コマンド動作のアドレス及び／又はデータが記憶されるページレジスタ内の場所を追跡し得る。例えば、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所、及び実行のために待ち行列に入れられた複数の受信された記憶動作コマンドに対する実行順序を判定する、状態マシン２２２等の、コントローラ上に、又は別様にコントローラの一部の上に位置付けられ得る。別の実施例において、待ち行列モジュール４０４は、メモリ要素３００内のメモリセル３０２の異なるバンク３０６又はバンクグループ３０４に関連付けられたページレジスタ３０８内の記憶場所を各々管理する、複数の状態マシン２２２の上に、又は別様に状態マシン２２２の一部の上に位置付けられ得る。このような実施形態において、各状態マシン２２２に対する待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定し、実行のために待ち行列に入れられた複数の受信された記憶動作コマンドの実行順序を判定する。
【００５９】
一実施形態において、データモジュール４０６は、受信した記憶動作コマンドに関連付けられたデータを受信し、記憶動作コマンドが実行される準備が整うまで、受信したデータをページレジスタ３０８内の所定の記憶場所に記憶するように構成される。データモジュール４０６は、例えば、書き込みコマンドに関連付けられたデータを受信し、書き込みコマンドが実行のために待ち行列に入れられている間に、記憶場所内のデータ、例えば、ページレジスタ３０８内の１つ以上のデータラッチを記憶してもよい。書き込みコマンドが実行される、コミットされる、又は同様のものとなるように選択されるとき、データモジュール４０６は、次いで、ページレジスタ３０８内の記憶場所からメモリアレイ３０１のバンク３０６又はバンクグループ３０４に書き込まれるデータにアクセスし、データをメモリアレイ３０１に書き込むか、又はプログラムし得る。別の実施例において、データモジュール４０６は、読み取り要求コマンドに応答して、メモリ要素３００のバンク３０６又はバンクグループ３０４からデータを受信してもよく、かつ読み取り要求コマンドが、コミットされる、終了される、実行される、又は同様のことのための待ち行列から選択されるまで、ページレジスタ３０８内の記憶場所内に、読み取りデータを記憶してもよい。
【００６０】
したがって、記憶管理モジュール１５０は、ページレジスタ３０８の部分を使用して、個々のバンク３０６又はバンクグループ３０４に対する複数の記憶動作を管理するための、動的待ち行列システムを提供する。このように、複数の記憶動作は、例えば、各バンクグループ３０４又は同様のもの、の内部で、メモリアレイ３０１上で同期的に実行されてもよい。更に、記憶動作によって影響を受けるメモリアレイ３０１の部分に関連しない、メモリアレイ３０１の部分上での記憶動作の不必要な実行は、個々のバンク３０６又はバンクグループ３０４のために意図され、メモリアレイ３０１全体ではない記憶動作を待ち行列に入れるように、ページレジスタ３０８を使用することによって回避され得る。
【００６１】
図５は、記憶管理モジュール１５０の一実施形態を図示する。記憶管理モジュール１５０は、図１に関して上記の記憶管理モジュール１５０と実質的に類似し得る。図示された実施形態において、記憶管理モジュール１５０は、コマンドモジュール４０２、待ち行列モジュール４０４、及びデータモジュール４０６を含み、これは、図４を参照する上記のコマンドモジュール４０２、待ち行列モジュール４０４、及びデータモジュール４０６と実質的に類似し得る。更に、一実施形態において、記憶管理モジュール１５０は、ポインタ管理モジュール５０２、再試行モジュール５０４、コピーバックモジュール５０６、及びキャッシュ読み取りモジュール５０８を含み、これらは以下でより詳細に記載される。
【００６２】
一実施形態において、ポインタ管理モジュール５０２は、記憶動作コマンドに関連付けられたデータ、アドレス、及び／又は同様のもの、のために、ページレジスタ３０８内の記憶場所に１つ以上のポインタ、参照などを維持する。本明細書で使用される場合、ポインタは、記憶動作に関連付けられたデータ又はアドレスに対するページレジスタ３０８内のアドレス、メモリ場所などへの参照である。いくつかの実施形態において、１つ以上のポインタは、現在のプログラム／書き込み動作に関連付けられたデータの記憶場所へのポインタ、待ち行列に入れられたプログラム／書き込み動作に関連付けられたデータの記憶場所へのポインタ、読み取り動作に関連付けられたデータに対する記憶場所へのポインタ、及び／又は同様のものを含む。一実施形態において、ポインタ管理モジュール５０２は、読み取りコマンド及び書き込みコマンド等の、特定の記憶動作コマンドに対する記憶場所として事前に定義されているページレジスタ３０８内の特定のラッチ、記憶場所、アドレス、メモリ場所などに、様々なポインタを方向付けてもよい。
【００６３】
例えば、ポインタ管理モジュール５０２は、記憶されているメモリアレイ３０１のバンク３０６又はバンクグループ３０４から読み出されたデータに対して指定されたページレジスタ３０８内の記憶場所に、読み取りポインタを方向付けてもよい。そのような実施形態において、読み取り要求がコミット又は終了する前に、例えば、読み取り要求データがページレジスタ３０８から記憶クライアント１１６に転送される前に、処理されるように待ち行列に入れられる他の記憶コマンドが存在してもよいが、ポインタ管理モジュール５０２がポインタをページレジスタ３０８内の読み取り要求データに維持するため、及びページレジスタ３０８の一部分又はサブセットのみが読み取り要求データを記憶するために使用されているので、読み取り要求コマンドは待ち行列に入れることができ、例えば、以前に待ち行列に入れられた記憶動作コマンドが完了したときに、実行かつ終了又はコミットされるように指定されることによって追跡されることができる。
【００６４】
別の実施例において、ポインタ管理モジュール５０２は、現在処理されている、又は処理されるために待ち行列に入れられる、書き込み若しくはプログラムコマンドのためにデータが記憶されるページレジスタ３０８内の記憶場所に、現在の書き込みポインタを維持する。更に、ポインタ管理モジュール５０２は、処理されるために次の列にある、待ち行列に入れられた書き込み又はプログラムコマンドのためにデータが記憶される、ページレジスタ３０８内の記憶場所に１つ以上の待ち行列又は次のポインタを維持する。例えば、上記のように、ページレジスタ３０８の特定のラッチ、アドレス、メモリ場所などは、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられた読み取りデータ及び書き込みデータに対する記憶場所として定義されてもよい。１つの特定の実施例において、ページレジスタ３０８の三組のラッチ（例えば、８、１６、３２、又は同様の８ビットラッチの３つの列）が、例えば、特定のメモリバンク３０６に関して、書き込み動作に関連付けられたデータに対する記憶場所として指定される場合、ポインタ管理モジュール５０２は、現在のポインタを第１の組のラッチのアドレスに方向付け、次の／待ち行列に入れられたポインタを第２の組のラッチのアドレスに方向付けてもよい。第３の組のラッチは、例えば、以下に記載されるように、書き込み動作が不成功となり、再試行される必要がある事象において、追加のバッファ又はオーバーフローとして使用されてもよい。
したがって、一実施例において、データモジュール４０６が書き込み要求に対するデータを受信し、ページレジスタ３０８の第１の組のラッチ内にデータを記憶する場合、ポインタ管理モジュール５０２は、現在のポインタを第１の組のラッチのアドレスに方向付けて、現在の書き込み要求に対するデータ、例えば、待ち行列内の次の書き込み要求、を示し得る。第１の書き込み要求がまだ待ち行列に入れられている間に、データモジュール４０６が別の書き込み要求に対するデータを受信する場合、データモジュール４０６は、データをページレジスタ３０８の第２の組のラッチ内に記憶するはずであり、ポインタ管理モジュール５０２が、次の／待ち行列に入れられたポインタを第２の組のラッチのアドレスに方向付けて、次の書き込み要求に対するデータを示してもよい。したがって、書き込み要求が、現在のポインタによって指定されたデータ、例えば、第１の組のラッチ内のデータ、を使用して実行されるとき、ポインタ管理モジュール５０２は、現在のポインタを第２の組のラッチに再度方向付けて、次の書き込み要求のデータを示し得、これが現在の書き込み要求である。次いで、ポインタ管理モジュール５０２は、別の書き込み要求が待ち行列に入るまで、次の／待ち行列に入れられたポインタを第３の組のラッチ、第１の組のラッチ、ＮＵＬＬなどに再度方向付けてもよい。
【００６５】
更に、一実施形態において、ポインタ管理モジュール５０２は、ポインタに関連付けられた記憶場所でページレジスタ３０８内に記憶されたデータが有効であるかどうかを示す、各ポインタに関連付けられた有効性ビットを維持する。例えば、読み取り要求動作中に、データモジュール４０６は、メモリアレイ３０１のバンク３０６からデータを受信し、ページレジスタ３０８内の一組のラッチ内にデータを記憶してもよい。ポインタ管理モジュール５０２は、読み取りポインタを一組のラッチに方向付け、一組のラッチ内に記憶されたデータが有効であることを示す、一組のラッチに対する有効性ビットを設定し得る。一度データがページレジスタから読み取られると、例えば、記憶クライアント１１６に伝達されると、ポインタ管理モジュール５０２は、次いで、有効性ビットを無効化、リセットなどをして、例えば、読み取り要求を満たすために伝達又は処理されているため、一組のラッチ内に記憶されたデータがもはや有効ではないことを示すことができる。
【００６６】
一実施形態において、ポインタ管理モジュール５０２は、メモリアレイ３０１に書き込まれるように待ち行列に入れられたが、プログラム／書き込み動作中にメモリ要素３００に正常に書き込まれなかったデータに対する記憶場所に、ポインタを維持する。例えば、現在のポインタによって指定されたデータに対する書き込み動作が試みられたが、何らかの理由、例えば、プログラムエラー、不完全プログラムなどにより失敗した場合、ポインタ管理モジュール５０２は、現在のポインタ及び次のポインタを、インクリメント又は再度方向付けて、待ち行列に入れられた書き込み動作に関連付けられたデータに対する異なる記憶場所に指定し、待ち行列に入れられたデータがバンク３０６又はバンクグループ３０４に書き込まれるように準備し得る。書き込み動作が失敗したため、ポインタ管理モジュール５０２は、データをメモリアレイ３０１に書き込むための付加的な試みが実行され得るように、有効性ビットをリセットしなくてもよい。このような実施形態において、ポインタ管理モジュール５０２は、「不成功」ポインタを、メモリアレイ３０１に書き込み失敗したデータに方向付け得、「不成功」ビットを設定して、不成功ポインタが、失敗してメモリアレイ３０１に書き込まれる必要のあるデータに指定されていることを示すことができる。
【００６７】
一実施形態において、再試行モジュール５０４は、不成功ビットが設定されていることに基づいて、不成功ポインタによって指定されるメモリアレイ３０１、メモリアレイ３０１のバンク３０６又はバンクグループ３０４にデータを書き込むように試みてもよい。再試行モジュール５０４は、データが書き込まれるまで、書き込み試行の閾値数が満たされるまで、又は同様のことになるまで、以前に失敗したデータをメモリアレイ３０１に書き込むことを試みてもよい。データがメモリアレイ３０１に正常に書き込まれた場合、ポインタ管理モジュール５０２は、不成功ビットをリセットし、書き込み要求に対するデータがメモリアレイ３０１に正常に書き込まれなくなるまで、不成功ポインタをＮＵＬＬ、又は別の無効な場所に指定するように再度方向付けてもよい。
【００６８】
いくつかの実施形態において、メモリアレイ３０１への書き込みに失敗したことを有効性ポインタによって示されるため、不成功ポインタが有効データに方向付けられる場合、データは、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられたページレジスタ３０８内に利用可能な記憶場所がない場合、新たな書き込み動作に関する新しいデータによって上書きされてもよい。例えば、ページレジスタの三組のラッチがバンク３０６又はバンクグループ３０４と関連付けられ、現在のポインタが、有効データを含む第１の組のラッチを指定し、次のポインタが、有効データを含む第２の組のラッチを指定し、不成功のポインタが、メモリアレイ３０１に書き込まれるように既に試みられた有効データを含む第３の組のラッチを指定する場合、データモジュール４０６は、不成功のポインタが新しいデータを有して指定する第３の組のラッチ内のデータを上書きし得る。そのような実施形態において、データモジュール４０６は、データがメモリアレイ３０１に正常に書き込まれなかったことを示すために、通知、メッセージなどを記憶クライアントに送信してもよい。更に、この実施形態において、ポインタ管理モジュール５０２は、不成功のポインタを更新し得、そのため失敗の書き込みが再度発生するまで、バンク３０６又はバンクグループ３０４に対するページレジスタ３０８内の一組のラッチを指定しない。
【００６９】
したがって、不成功のポインタが有効なデータを含む記憶場所に方向付けられる場合、現在のポインタ及び次のポインタは、不成功ポインタによって指定された記憶場所が利用可能になるまで、残りの記憶場所間で交互に入れ替わり得る。このように、ページレジスタ３０８のサブセットは、各バンク３０６又はバンクグループ３０４に対する記憶動作待ち行列として使用されてもよいが、必ずしも先入れ先出し様式ではない。換言すれば、ポインタ管理モジュール５０２は、例えば、現在のポインタ及び次のポインタを使用して、書き込み動作が受信される順序を維持しながら、書き込み動作に対するデータにポインタを方向付けてもよく、しかしながら、不成功ポインタが、バンク３０６又はバンクグループ３０４に書き込まれるように以前に試みられた有効データに方向付けられた場合、再試行モジュール５０４は、書き込み動作が受信された順序から外れた不成功ポインタによって参照されたデータを書き込むことを試みてもよい。
【００７０】
一実施形態において、コピーバックモジュール５０６は、現在のポインタ又は次のポインタ等の書き込みポインタを、読み取り要求コマンドに関連付けられたデータを記憶する、ページレジスタの記憶場所、例えば、一組のラッチ、に再度方向付け、そのためデータは、データに対する書き込み要求を受信したことに応答して、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に「コピーバック」され得る。このように、データは、不必要な読み取り及び書き込みを実行する代わりに、ページレジスタ３０８に対する読み取り及び書き込みポインタを単純に操作することによって、ページレジスタを読み取り、メモリアレイ３０１にコピーバックすることができる。
【００７１】
同様に、一実施形態において、キャッシュ読み取りモジュール５０８は、読み取りポインタを、書き込みポインタ、例えば、現在のポインタ又は次のポインタ、によって指定されたデータに再度方向付け、そのためデータがメモリアレイ３０１に書き込まれるのを待ち、次いで読み取り要求コマンドを満たすためにメモリアレイ３０１からデータを戻して読み出す代わりに、読み取り要求コマンドに応答して、ページレジスタからデータを読み出すことができる。このように、読み取りポインタを操作することがより速く、より効率的となり得、そのためメモリアレイ３０１に書き込まれるように待ち行列に書き込まれるデータは、メモリアレイ３０１に書き込まれる前に、ページレジスタ３０８から読み取ることができる。
【００７２】
図６は、メモリセル３０２のバンク３０６に対する記憶動作コマンドを待ち行列に入れるためのページレジスタ３０８の部分６０６を使用する一実施形態を図示する。一実施形態において、コマンドモジュール４０２は、記憶動作コマンドを受信する。記憶動作コマンドを受信することに応答して、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対する、ページレジスタ３０８の部分６０６内の記憶場所６０２を判定する。上記のように、ページレジスタ３０８内の記憶場所６０２は、ページレジスタ３０８内の全ての利用可能な記憶場所のサブセット、一部、一部分などであってもよい。ページレジスタ３０８のサブセット６０６は、メモリアレイ３０１内のメモリセル３０２の特定のバンク３０６に関連付けられ得る。
【００７３】
一実施形態において、ポインタ管理モジュール５０２は、記憶動作コマンドに関連付けられたデータを記憶するように指定されたページレジスタ３０８内の記憶場所６０２に指定する１つ以上のポインタ６０４を維持する。例えば、コマンドモジュール４０２が、読み取り要求コマンドを受信する場合、ポインタ管理モジュール５０２は、どのポインタ６０４が読み取りポインタであるか、例えば、読み取りデータを記憶するための記憶場所６０２として指定され得る、記憶場所０に方向付けられたポインタ６０４であるかを判定してもよい。データモジュール４０６は、メモリアレイ３０１内のバンク３０６からの読み取り要求に対するデータを受信してもよく、読み取りポインタによって指定された記憶場所０内にデータを記憶してもよい。読み取りデータは、読み取り要求動作が、処理される記憶動作待ち行列内の次の列まで、記憶場所０内に残り得る（例えば、この特定の読み取り要求コマンドの前に処理され得る、読み取り又は書き込みコマンドがそれ以前に受信され得る）。
【００７４】
別の実施例において、コマンドモジュール４０２は、データをバンク３０６に書き込むための書き込みコマンドを受信してもよい。ポインタ管理モジュール５０２は、ページレジスタ３０８の部分６０６内の記憶場所６０２を指定する現在のポインタを判定し得る。現在のポインタが、有効なデータ、例えば、有効性ビットによって示されるように、処理されるために待ち行列に入れられるデータ、を含む記憶場所６０２を指定している場合、ポインタ管理モジュール５０２は、次いで、次の／待ち行列ポインタによって指定された記憶場所をチェックしてもよい。
【００７５】
更なる実施形態において、ポインタ管理モジュール５０２は、コマンドビットを維持し、これは設定されたときに、書き込みコマンドが現在のポインタによって参照されたデータを受信していることを示す。更なる実施形態において、ポインタ管理モジュール５０２は、書き込み動作が正常に完了したという指標を受信したことに応答して、コミットビットをリセットする。ポインタ管理モジュール５０２が、書き込み動作が失敗、又は別様に不成功（例えば、書き込みが不完全であった）と判定する場合、ポインタ管理モジュール５０２は、不成功ビットを設定し得、不成功ポインタが、現在のポインタによって現在参照されているデータを参照することを確実とし、現在のポインタ及び次のポインタをページレジスタ３０８の部分６０６内の待ち行列における、次の組のデータにシフトさせ得る。このように、再試行モジュール５０４は、不成功ポインタを維持することによって、書き込み動作が成功するまで、再試行の試みの閾値数が満たされるまで、など、不成功のポインタによって参照されたデータを使用して、今後のある時点で書き込み動作を試行することができる。いくつかの実施形態において、不成功ビットが設定されない場合、次いで、不成功ポインタは、現在のポインタと同じ記憶場所に、ＮＵＬＬの場所に、及び／又は同様のものに指定し得る。
【００７６】
一実施形態において、データモジュール４０６が新しいデータを受信するとき、ポインタ管理モジュール５０２は、データが現在のポインタによって参照される記憶場所６０２内、又は次のポインタによって参照される記憶場所内に記憶されるべきかどうかを判定する。この判定を行うために、ポインタ管理モジュール５０２は、現在のポインタに関連付けられたコミットビット及び有効性ビットをチェックしてもよい。有効性ビットが現在のポインタに設定され、現在のポインタによって参照されるデータが有効であることを示す場合、次いでデータモジュール４０６は、次のポインタによって参照される記憶場所６０２内にデータを記憶してもよい。同様に、コミットビットが設定され、現在のポインタによって参照されるデータを使用して書き込み動作が実行されていることを示す場合、データモジュール４０６は、次のポインタによって参照される記憶場所６０２内にデータを記憶してもよい。様々な実施形態において、現在のポインタ及び次のポインタ、又は１つ以上の次のポインタの各々が、有効性ビットによって示されるように、有効なデータを含み、ページレジスタ３０８の部分６０６内に利用可能な記憶場所６０２がない場合、ポインタ管理モジュール５０２及び／又はデータモジュール４０６は、エラーメッセージを送出する、送信するなどして、バンク３０６への書き込みのためのデータの記憶及び待ち行列に入れることにおけるエラーを示すことができる。
【００７７】
更に、上記のように、図６内に例解されたポインタ待ち行列は、典型的な先入れ先出し待ち行列として作用しなくてもよい。例えば、読み取りポインタは、常に記憶場所０を指定し得るが、現在のポインタ、次のポインタ、及び不成功ポインタは、様々な構成において記憶場所２、４、及び６を指定し得る。一実施例において、現在のポインタは、記憶場所２を参照し得、次のポインタは、記憶場所４を参照し得る。書き込み動作が、現在のポインタによって参照される記憶場所２におけるデータを使用して実行される場合、現在のポインタは、記憶場所４に再度方向付けられてもよく、次のポインタは、記憶場所６に再度方向付けられてもよい。しかしながら、書き込み動作が失敗する場合、不成功ポインタが、次いで、記憶場所２を参照し得る。別の書き込み動作が、現在のポインタによって参照される記憶場所４内のデータに対して受信される場合、現在のポインタは、記憶場所６に再度方向付けられてもよい。記憶場所２が不成功のポインタによって依然として参照される場合、次のポインタは、記憶場所４に再度方向付けられ得る。このため、ポインタ管理モジュール５０２は、ページレジスタ３０８の部分６０６内の記憶場所にいずれの特定の順序ではなく、例えば、書き込み動作が受信される順序を維持しながら、記憶場所６０２の可用性に対応する順序で、現在の／次の／利用不可能なポインタを方向付ける、及び再度方向付けてもよく、しかしながら、書き込み動作が以前に不成功に試みられた場合、再試行モジュール５０４は、現在の／次のポインタに関連付けられた書き込み動作の順序から外れて、データをバンク３０６に書き込むことを試みることができる。
【００７８】
図７は、記憶動作コマンドを待ち行列に入れるための方法７００の一実施形態を図示する。一実施形態において、方法７００が開始し、コマンドモジュール４０２が、メモリアレイ３０１の記憶場所のバンク３０４に関連付けられた記憶動作コマンドを受信する７０２。ある実施形態において、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定することによって、バンク３０６上で実行するための記憶動作コマンドを待ち行列に入れる７０４。ページレジスタ３０８内の記憶場所は、ページレジスタ３０８内の利用可能な記憶場所のサブセットを含み得る。更なる実施形態において、データモジュール４０６は、ページレジスタ３０８内の判定された記憶場所において、記憶動作コマンドに関連付けられたデータを記憶し７０６、方法７００は終了する。
【００７９】
図８は、記憶動作コマンドを待ち行列に入れるための方法８００の一実施形態を図示する。一実施形態において、方法８００が開始し、コマンドモジュール４０２が、読み取り動作、例えば、読み取り要求動作を受信８０２して、メモリアレイ３０１の１つ以上のバンク３０６からデータを読み出す。いくつかの実施形態において、データモジュール４０６は、メモリアレイ３０１の１つ以上のバンク３０４から読み取り要求のデータを読み取る８０４。
【００８０】
いくつかの実施形態において、待ち行列モジュール４０６は、データモジュール４０６が読み取り動作のデータを記憶することができるページバッファ３０８内の記憶場所を判定する８０６。一実施形態において、ポインタ管理モジュール５０２は、ページバッファ３０８内の読み取りデータの判定された記憶場所を指定するための読み取りポインタを更新する８０８。様々な実施形態において、ポインタ管理モジュール５０２は、読み取りデータが有効データであることを示す、読み取りデータに対する有効性ビットを設定する８１０。
【００８１】
更なる実施形態において、データモジュール４０６は、ページバッファ３０８内の読み取りポインタによって指定された記憶場所から読み取りデータを読み取り８１２、データを要求した記憶クライアント１１６に、読み取りデータを転送、伝達、コピー、送信、などを行う。一実施形態において、ポインタ管理モジュール５０２は、ページレジスタ３０８から読み取りデータが読み取られた８１２後に、有効性ビットをリセットし８１４、方法８００が終了する。
【００８２】
図９Ａ及び図９Ｂは、記憶動作コマンドを待ち行列に入れるための方法９００の一実施形態を図示する。一実施形態において、方法９００が開始し、コマンドモジュール４０２が、メモリアレイ３０１の１つ以上のバンク３０６にデータを書き込むための書き込み動作コマンドを受信する９０２。更なる実施形態において、データモジュール４０６は、メモリアレイ３０１に書き込まれるデータ及び／又はデータが書き込まれるメモリアレイ３０１内の１つ以上のアドレス等の、書き込み動作のためのデータを受信する９０４。
【００８３】
いくつかの実施形態において、待ち行列モジュール４０４は、書き込み要求に関連付けられたデータを待ち行列に入れるためのページバッファ３０８内の現在の記憶場所を判定する９０６。更なる実施形態において、ポインタ管理モジュール５０２は、データが記憶されるページバッファ３０８内の記憶場所を指定するために、現在のポインタ及び不成功ポインタを更新する９０８。一実施形態において、ポインタ管理モジュール５０２は、受信された次の記憶動作コマンドに関連付けられたデータに対するページバッファ３０８内の次の利用可能な記憶場所を指定するために、次のポインタを更新する９１０。
【００８４】
ある実施形態において、ポインタ管理モジュール５０２は、現在のポインタによって指定されたデータが有効であること、例えば、データがまだ処理されていないことを示すために、データに対する有効性ビットを設定する９１２。一実施形態において、データモジュール４０６は、ページレジスタ３０８内のデータをメモリアレイ３０１に書き込むための、書き込みコマンドを試みる９１４。ある実施形態において、ポインタ管理モジュール５０２は、現在のポインタによって指定されたデータを書き込む試みが成功したかどうかを判定する９１６。
【００８５】
一実施形態において、書き込みが成功する場合、ポインタ管理モジュール５０２は、次のポインタが現在指定しており、次のポインタを、次の利用可能な記憶場所又はメモリアレイ３０１に書き込まれるように待ち行列に入れられる次のデータに方向付けている、ページレジスタ３０８内の記憶場所に、現在のポインタを方向付けることによって現在のポインタ及び次のポインタを更新する９３０。いくつかの実施形態において、ポインタ管理モジュール５０２は、メモリアレイ３０１に書き込まれたページバッファ３０８内のデータに対する有効性ビットをリセットし９３２、本方法９００が終了する。
【００８６】
別の実施形態において、ポインタ管理モジュール５０２が、現在のポインタによって指定されたデータを書き込む試みが不成功であると判定する９１６場合、ポインタ管理モジュール５０２は、不成功ビットを設定し９１８、不成功ポインタ内に現在の記憶場所を保存する９２０。一実施形態において、再試行コマンドが受信されない場合９２２、ポインタ管理モジュール５０２は、現在のポインタ及び次のポインタを更新し９３０、本方法９００は、書き込みが成功したとして継続する。別の実施形態において、再試行コマンドがコントローラ２４４から受信された９２２場合、再試行モジュール５０４は、不成功ポインタによって指定されたデータをメモリアレイ３０１に書き込むことを再試行する９２４。
【００８７】
再試行モジュール５０４が書き込みの再試行９２４において成功する場合９２６、ポインタ管理モジュール５０２は、不成功ビットをリセットし９２８、現在のポインタ及び次のポインタを更新し９３０、本方法９００は継続する。再試行モジュール５０４が書き込みの再試行９２４において成功しない場合９２６、不成功ビットは、リセットされず、本方法９００は、（例えば、書き込みが成功したとして現在のポインタ及び次のポインタを更新する９３０ポインタ管理モジュール５０２を有して、又はコントローラ２４４から受信した９２２別の再試行コマンドを有して）継続する。ある実施形態において、コントローラ２４４は、書き込み試行の閾値数が満たされるなどするまで、データをメモリアレイ３０１に、成功するまで書き込むことを再試行９２４し続けるように、再試行モジュール５０４と連携してもよい。
【００８８】
様々な実施形態において、ページレジスタ３０８を使用して不揮発性記憶デバイスのメモリアレイ３０１に関連付けられた記憶動作コマンドをバッファリングするための手段は、コマンドモジュール４０２、待ち行列モジュール４０４、ポインタ管理モジュール５０２、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ３０８を使用して、不揮発性記憶デバイスのメモリアレイ３０１に関連付けられた記憶動作コマンドをバッファリングするための類似の又は同等の手段を含み得る。
【００８９】
様々な実施形態において、ページレジスタ３０８内の記憶動作コマンドに対するデータを記憶するための手段は、データモジュール４０６、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ３０８内の記憶動作コマンドに対するデータを記憶するための類似又は同等の手段を含んでもよい。
【００９０】
様々な実施形態において、記憶動作の少なくともサブセットに対して、ページレジスタ３０８内に記憶されたデータを処理するための手段は、コマンドモジュール４０２、データモジュール４０６、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、記憶動作の少なくともサブセットに対して、ページレジスタ３０８内に記憶されたデータを処理するための類似の又は同等の手段を含んでもよい。
【００９１】
本開示は、その趣旨又は本質的な特徴から逸脱することなく、他の特定の形態で具現化されてもよい。記載された実施形態は、全ての点において、例示的なものに過ぎず、限定的ではないと見なされるべきである。したがって、本開示の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の意味及び等価範囲内に含まれる全ての変更は、それらの範囲内に包含されるものとする。
【図１Ａ】
2020502606.tif 000003
【図１Ｂ】
2020502606.tif 000004
【図２Ａ】
2020502606.tif 000005
【図２Ｂ】
2020502606.tif 000006
【図３】
2020502606.tif 000007
【図４】
2020502606.tif 000008
【図５】
2020502606.tif 000009
【図６】
2020502606.tif 000010
【手続補正書】
【提出日】令和1年7月11日(2019.7.11)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、様々な実施形態において、記憶デバイスに関し、より具体的には、記憶デバイスのページレジスタを使用して、記憶コマンドを動的に待ち行列に入れることに関する。
【背景技術】
【０００２】
メモリセルのアレイは、各サブアレイ上で独立して記憶動作を実施することができるように、様々なサブアレイに細分化され得る。しかしながら、特定のサブアレイ上でどの動作が実施されているかを追跡することは、中央の場所で管理することが困難であり得る。
【発明の概要】
【０００３】
記憶動作を待ち行列に入れるための装置が、提示される。一実施形態において、装置は、集積回路（「ＩＣ」）メモリ要素を含む。ＩＣメモリ要素は、ある実施形態において、メモリ要素の記憶場所のバンクに関連付けられた記憶動作コマンドを受信する。更なる実施形態において、ＩＣメモリ要素は、記憶動作コマンドに関連付けられたデータに対するページレジスタ内の記憶場所を判定することによって、記憶場所のバンク上で実行するための記憶動作コマンドを待ち行列に入れる。ページレジスタ内の記憶場所は、ページレジスタ内の利用可能な記憶場所のサブセットを含み得る。いくつかの実施形態において、ＩＣメモリ要素は、ページレジスタ内の判定された記憶場所で記憶動作コマンドに関連付けられたデータを記憶する。
【０００４】
別の実施形態において、装置は、不揮発性記憶デバイスの複数のサブアレイに関連付けられた複数の記憶動作コマンドを、揮発性記憶デバイスのページレジスタを使用して、バッファリングするための手段を含む。更なる実施形態において、装置は、ページレジスタ内に複数の記憶動作コマンドに対するデータを記憶するための手段を含み、そのため複数の記憶動作コマンドの各々に対するデータが、ページレジスタ内に同時に記憶されるように、記憶動作コマンドの各々に対するデータは、ページレジスタのページサイズよりも小さい。一実施形態において、装置は、複数の記憶動作コマンドの少なくとも１つのサブセットに対して、ページレジスタ内に記憶されたデータを同時に処理するための手段を含む。
【０００５】
記憶動作を待ち行列に入れるためのシステムが、提示される。一実施形態において、システムは、ページバッファ及びコントローラを含む、不揮発性メモリ媒体を含む。ある実施形態において、コントローラは、不揮発性メモリ媒体に対する複数の記憶動作コマンドを受信するように構成される。複数の記憶動作コマンドの記憶動作コマンドは、不揮発性メモリ媒体の複数のサブアレイのうちの１つのサブアレイに対するものであり得る。別の実施形態において、コントローラは、複数の記憶動作コマンドに関連付けられたデータを同時に記憶するために、ページバッファ内の記憶場所を判定するように構成される。様々な実施形態において、コントローラは、少なくとも２つの記憶動作コマンドに関連付けられたページバッファ内に記憶されたデータを使用して、複数の記憶動作コマンドのうちの少なくとも２つを同時に実行するように構成される。
【図面の簡単な説明】
【０００６】
より具体的な説明が、添付の図面内に例解される特定の実施形態を参照して下記に含まれる。これらの図面は、本開示の特定の実施形態のみを示すものであり、したがって、その範囲を限定するものと見なされるべきではなく、本開示は、添付の図面を使用することを通じて、付加的な具体性及び詳細と共に記載及び説明される。
【図１Ａ】記憶管理モジュールを備えるシステムの一実施形態を例解する、模式的なブロック図である。
【図１Ｂ】メモリ要素の一実施形態を例解する、模式的なブロック図である。
【発明を実施するための形態】
【０００７】
本開示の態様は、装置、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、又はソフトウェア及びハードウェアの態様を組み合わせた実施形態の形態を採ることができ、概して、本明細書では全て「回路」、「モジュール」、「装置」、又は「システム」と称される場合がある。更に、本開示の態様は、コンピュータで読み取り可能な及び／又は実行可能なプログラムコードを記憶する１つ以上の非一時的コンピュータで読み取り可能な記憶媒体内に具現化された、コンピュータプログラム製品の形態を採ることができる。
【０００８】
本明細書に記載される機能ユニットの多くは、それらの実装独立性をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、カスタムＶＬＳＩ回路若しくはゲートアレイ、論理チップ、トランジスタ、又は他の別個の構成要素等の市販の半導体を備えるハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。
【０００９】
モジュールはまた、様々なタイプのプロセッサによる実行のために、少なくとも部分的にソフトウェアにおいて実装されてもよい。実行可能なコードの識別されたモジュールは、例えば、オブジェクト、手順、又は機能として体系化され得るコンピュータ命令の１つ以上の物理的又は論理的ブロックを含み得る。それでもなお、識別されたモジュールの実行可能なファイルは、物理的に共に配置される必要はなく、論理的に共に結合されたときにモジュールを含み、モジュールに対する指定された目的を達成する、異なる場所内に記憶された異種命令を含んでもよい。
【００１０】
実際に、実行可能なコードのモジュールは、単一の命令、又は多くの命令を含んでもよく、いくつかの異なるコードセグメント上で、異なるプログラムの中で、いくつかのメモリデバイスなどにわたって分配さえされてもよい。モジュール又はモジュールの一部分がソフトウェアに実装される場合、ソフトウェア部分は、１つ以上のコンピュータで読み取り可能な及び／又は実行可能な記憶媒体上に記憶されてもよい。１つ以上のコンピュータで読み取り可能な記憶媒体の任意の組み合わせが、利用されてもよい。コンピュータで読み取り可能な記憶媒体としては、例えば、電子、磁気、光学、電磁、赤外線、又は半導体システム、装置、若しくはデバイス、及び前述の任意の好適な組み合わせが含まれ得るが、これらに限定されず、しかし、伝搬信号を含むことはないであろう。本文書の文脈において、コンピュータで読み取り可能な及び／又は実行可能な記憶媒体は、命令実行システム、装置、プロセッサ、又はデバイスによって、若しくはそれらに関連して使用するためのプログラムを含有又は記憶し得る、任意の有形及び／又は非一時的媒体であってもよい。
【００１１】
本開示の態様に対する動作を実行するためのコンピュータプログラムコードは、Ｐｙｔｈｏｎ、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋、Ｃ＃、Ｏｂｊｅｃｔｉｖｅ  Ｃなど等のオブジェクト指向のプログラミング言語、「Ｃ」プログラミング言語、スクリプトプログラミング言語、及び／又は他の類似のプログラミング言語等の従来の手続き型プログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書き込まれてもよい。プログラムコードは、データネットワークなどを介して、１つ以上のユーザのコンピュータ上、及び／又はリモートコンピュータ若しくはサーバ上で部分的又は全体的に実行することができる。
【００１２】
本明細書で使用される場合、構成要素は、有形の物理的な非一時的デバイスを備える。例えば、構成要素は、カスタムＶＬＳＩ回路、ゲートアレイ、若しくは他の集積回路を備えるハードウェア論理回路、論理チップ、トランジスタ、又は他の別個のデバイス等の市販の半導体、及び／若しくは他の機械的又は電気的デバイスとして実装されてもよい。構成要素はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。構成要素は、プリント回路基板（ＰＣＢ）などの電気線を介して１つ以上の他の構成要素と電気通信する、１つ以上のシリコン集積回路デバイス（例えば、チップ、ダイ、ダイ平面、パッケージ）、又は他の別個の電気デバイスを備えてもよい。本明細書に記載されるモジュールの各々は、ある実施形態において、代替的に、構成要素によって具現化されるか、又は構成要素として実装されてもよい。
【００１３】
本明細書全体を通して、「一実施形態」、「ある実施形態」、又は実施形態に関連して記載された特定の特性、構造、又は特徴を意味する類似の文言への言及は、本開示の少なくとも１つの実施形態内に含まれる。このため、「一実施形態において」、「ある実施形態において」という句、及び本明細書全体にわたる類似の文言の出現は、必ずしも全て同じ実施形態を参照するわけではなく、別途明示的に指定されない限り、「１つ以上であるが全ての実施形態ではない」を意味する。「含む（including）」、「含む（comprising）」、「有する（having）」という用語、及びその変化形は、別途明示的に指定されない限り、「含むが、これらに限定されない」ことを意味する。項目を列挙したリストは、別途明示的に指定されない限り、項目のいずれか又は全てが相互に排他的及び／又は相互に包括的であることを意味するものではない。「ａ」、「ａｎ」、及び「ｔｈｅ」という用語はまた、別途明示的に指定されない限り、「１つ以上」を指す。
【００１４】
本開示の態様は、本開示の実施形態に従う、方法、装置、システム、及びコンピュータプログラム製品の模式的なフローチャート図及び／又は模式的なブロック図を参照して以下に記載される。模式的なフローチャート図及び／又は模式的なブロック図の各々のブロック、並びに模式的なフローチャート図及び／又は模式的なブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータプログラム命令は、機械を製造するためのコンピュータ又は他のプログラム可能なデータ処理装置のプロセッサに提供されてもよく、そのため、プロセッサ又は他のプログラム可能なデータ処理装置を介して実行する命令は、模式的なフローチャート図及び／又は模式的なブロック図のブロック又は複数のブロックにおいて指定された機能及び／又は作用を実装するための手段を生成する。
【００１５】
また、いくつかの代替的な実装において、ブロック内に記された機能は、図内に記された順序から外れて行われ得ることに留意されたい。例えば、連続して示される２つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、関与する機能に応じて逆順序で実行されてもよい。例解された図の１つ以上のブロック、又はそれらの部分と機能、論理、又は効果が同等である、他の工程及び方法が、着想され得る。フローチャート及び／又はブロック図で、様々な矢印タイプ及び線タイプが用いられ得るが、それらは対応する実施形態の範囲を限定するものではないことが理解される。例えば、矢印は、図示された実施形態の列挙された工程間の指定されていない持続時間の待機期間又は監視期間を示してもよい。
【００１６】
以下のより詳細な説明において、その一部を形成する添付図面を参照する。前述の概要は、例解的なものに過ぎず、いかようにも限定することを意図するものではない。上記の例解的な態様、実施形態、及び特徴に加えて、更なる態様、実施形態、及び特徴が、図面及び以下の詳細な説明を参照することによって明らかとなるであろう。各図における要素の説明は、先の図の要素を参照し得る。同様の数字は、同様の要素の代替的な実施形態を含む、図面中の同様の要素を指し得る。
【００１７】
図１Ａは、記憶管理モジュールを備えるシステム１００の一実施形態のブロック図である。記憶管理モジュールは、不揮発性メモリコントローラ、不揮発性メモリ媒体コントローラ１２６、デバイスドライバ、又は記憶管理層（ＳＭＬ）などのうちの１つ以上の一部であってもよく、かつ／若しくはそれらと通信してもよい。記憶管理モジュールは、プロセッサ１１１と、揮発性メモリ１１２と、通信インターフェース１１３とを備え得る、コンピューティングデバイス１１０の不揮発性メモリシステム１０２上で動作し得る。プロセッサ１１１は、１つ以上の中央処理ユニット、１つ以上の汎用プロセッサ、１つ以上の特定用途向けプロセッサ、１つ以上の仮想プロセッサ（例えば、コンピューティングデバイス１１０は、ホスト内で動作するバーチャルマシンであってもよい）、１つ以上のプロセッサコアなどを備え得る。通信インターフェース１１３は、コンピューティングデバイス１１０及び／又は不揮発性メモリコントローラを、インターネットプロトコルネットワーク、ストレージエリアネットワークなど等の通信ネットワーク１１５に通信可能に結合するように構成された、１つ以上のネットワークインターフェースを含んでもよい。
【００１８】
コンピューティングデバイス１１０は、非一時的なコンピュータで読み取り可能な記憶媒体１１４を更に備えてもよい。コンピュータで読み取り可能な記憶媒体１１４は、コンピューティングデバイス１１０（例えば、プロセッサ１１１）に本明細書に開示された方法のうちの１つ以上の工程を実施させるように構成された実行可能な命令を含み得る。代替的に、又は付加的に、記憶管理モジュールは、非一時的な記憶媒体１１４上に記憶された１つ以上のコンピュータで読み取り可能な命令として具現化されてもよい。
【００１９】
不揮発性メモリシステム１０２は、図示された実施形態において、記憶管理モジュールを含む。一実施形態において、記憶管理モジュール、メモリ要素に関連付けられたページレジスタ内の記憶場所のサブセットを使用して、メモリ要素、揮発性及び／又は不揮発性に対する記憶動作を待ち行列に入れるように構成される。例えば、不揮発性記憶デバイスが通常の「ＮＡＮＤ」モードで動作しているとき、フルページのデータは、読み取り又は書き込み動作等の記憶動作を実施するときにページレジスタ内に記憶され得る。一方、本明細書に記載されるように、不揮発性記憶デバイスが、「バースト」モードで動作しているとき、フルページのデータよりも小さいアクセスユニットを有する場合があり、複数の記憶動作が、メモリ要素のバンク上で実施される記憶動作に関連付けられたデータを記憶するために、ページレジスタのサブセットを使用し、実行のための待ち行列に入れられ得る。
【００２０】
一実施形態において、記憶管理モジュールは、プロセッサ１１１上での実行のためにコンピュータで読み取り可能な記憶媒体１１４上に記憶された、デバイスドライバ、ＳＭＬなど等の実行可能なソフトウェアコードを含み得る。別の実施形態において、記憶管理モジュールは、不揮発性メモリ媒体コントローラ１２６、不揮発性メモリコントローラ、デバイスコントローラ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）又は他のプログラム可能なロジック、ＦＰＧＡ又は他のプログラム可能なロジックに対するファームウェア、マイクロコントローラ上の実行に対するマイクロコード、特定用途向け集積回路（ＡＳＩＣ）など等の、１つ以上の不揮発性メモリデバイス１２０のロジックハードウェアを備え得る。更なる実施形態において、記憶管理モジュールは、実行可能なソフトウェアコード及び論理ハードウェアの両方の組み合わせを含み得る。
【００２１】
一実施形態において、記憶管理モジュールは、バス１２５などを介してＳＭＬから記憶要求を受信するように構成される。記憶管理モジュールは、バス１２５を介して、ＳＭＬ及び／又は記憶クライアント１１６に／からデータを転送するように更に構成されてもよい。したがって、いくつかの実施形態において、記憶管理モジュールは、記憶要求及び関連データの転送を容易にするために、１つ以上のダイレクトメモリアクセス（ＤＭＡ）モジュール、リモートＤＭＡモジュール、バスコントローラ、ブリッジ、バッファなどを含んでもよく、かつ／又はそれらと通信してもよい。別の実施形態において、記憶管理モジュールは、記憶クライアント１１６からのＡＰＩコールとして、ＩＯ−ＣＴＬコマンドとして、などの記憶要求を受信し得る。記憶管理モジュールは、下記により詳細に記載される。
【００２２】
様々な実施形態に従って、記憶管理モジュールを備える不揮発性メモリコントローラは、１つ以上の不揮発性メモリデバイス１２０を管理することができる。不揮発性メモリデバイス（複数可）１２０は、複数のアドレス指定可能な媒体記憶場所に配置及び／又は分配されたソリッドステート記憶デバイス（複数可）等の、記録、メモリ、及び／又は記憶デバイスを備え得る。本明細書で使用される場合、媒体記憶場所は、メモリの任意の物理的な単位（例えば、不揮発性メモリデバイス１２０上の任意の量の物理的な記憶媒体）を指す。メモリユニットは、ページ、メモリ分割、消去ブロック、セクタ、ブロック、集合、又は物理的な記憶場所一式（例えば、以下に記載される論理ページ、論理消去ブロック）などを含み得るが、これらに限定されない。
【００２３】
不揮発性メモリコントローラは、１つ以上の記憶クライアント１１６に論理アドレス空間１３４を提示し得る、ＳＭＬを含んでもよい。ＳＭＬの一例は、ＳａｎＤｉｓｋ  Ｃｏｒｐｏｒａｔｉｏｎ  Ｍｉｌｐｉｔａｓ，ＣａｌｉｆｏｒｎｉａのＶｉｒｔｕａｌ  Ｓｔｏｒａｇｅ  Ｌａｙｅｒ（登録商標）である。代替的に、各不揮発性メモリデバイス１２０は、論理アドレス空間１３４を記憶クライアント１１６に提示し得る、不揮発性メモリ媒体コントローラ１２６を備え得る。本明細書で使用される場合、論理アドレス空間１３４は、メモリリソースの論理表現を指す。論理アドレス空間１３４は、複数の論理アドレス（例えば、範囲）を含んでもよい。本明細書で使用される場合、論理アドレスは、論理ブロックアドレス（ＬＢＡ）、シリンダ／ヘッド／セクタ（ＣＨＳ）アドレス、ファイル名、オブジェクト識別子、ｉｎｏｄｅ、Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＵＵＩＤ）、Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ（ＧＵＩＤ）、ハッシュコード、署名、インデックスエントリ、範囲、大きさなどを含むが、これらに限定されない、メモリリソース（例えば、データ）を参照するための任意の識別子を指す。
【００２４】
ＳＭＬは、転送インデックス等のメタデータ１３５を維持して、論理アドレス空間１３４の論理アドレスを不揮発性メモリデバイス（複数可）１２０上の媒体記憶場所にマッピングしてもよい。ＳＭＬは、論理アドレスから物理的な記憶リソースへの任意の多対多（any-to-any）マッピングを提供してもよい。本明細書で使用される場合、「多対多」マッピングは、任意の論理アドレスを任意の物理的記憶リソースにマッピングすることができる。したがって、論理アドレスと特定の媒体記憶場所及び／又は媒体アドレスとの間に、予め定義された並びに／若しくは事前設定されたマッピングは存在しない場合がある。本明細書で使用される場合、媒体アドレスは、１つのメモリリソースを別のメモリリソースから、複数のメモリリソースを管理するコントローラに固有に識別するメモリリソースのアドレスを指す。例として、媒体アドレスは、媒体記憶場所のアドレス、物理的なメモリユニット、物理的なメモリユニット（例えば、論理メモリユニット）の集合、メモリユニットの一部分（例えば、論理メモリユニットアドレス及びオフセット、範囲、及び／又は大きさ）などを含むが、これらに限定されない。したがって、ＳＭＬは、任意のサイズ及び／又は精度の物理的なデータリソースに論理アドレスをマッピングすることができ、不揮発性メモリデバイス（複数可）１２０の基礎となるデータ分配スキームに対応し得、又は対応しなくてもよい。例えば、いくつかの実施形態において、不揮発性メモリコントローラは、複数の物理的なメモリユニットを論理的に組み合わせることによって形成される論理メモリユニット内にデータを記憶するように構成され、これにより、不揮発性メモリコントローラが、多くの異なる仮想メモリユニットのサイズ及び／又は精度を支持することを可能にし得る。
【００２５】
本明細書で使用される場合、論理メモリ要素は、（例えば、Ｉ／Ｏ及び／若しくは制御バスを介して）並行して管理されるか、又は管理することができる、一組の２つ以上の不揮発性メモリ要素を指す。論理メモリ要素は、論理ページ、論理メモリ分割（例えば、論理消去ブロック）など等の、複数の論理メモリユニットを含み得る。本明細書で使用される場合、論理メモリユニットは、２つ以上の物理的なメモリユニットを組み合わせた論理的構造体を指し、各物理的なメモリユニットが、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある（例えば、各不揮発性メモリ要素が並行してアクセス可能である）。本明細書で使用される場合、論理メモリ分割は、一組の２つ以上の物理的なメモリ分割を指し、各物理的なメモリ分割が、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある。
ＳＭＬによって提示された論理アドレス空間１３４は、論理容量を有し得、論理アドレス空間１３４内の利用可能な論理アドレスの数、並びに論理アドレスによって参照されるデータのサイズ及び／又は精度に対応し得る。例えば、２＾３２の固有論理アドレスを含む論理アドレス空間１３４の論理容量は、各々が２０４８バイト（２ＫｉＢ）のデータを参照し、２＾４３バイトであり得る。本明細書で使用される場合、キビバイト（ＫｉＢ）は、１０２４バイトを指す。いくつかの実施形態において、論理アドレス空間１３４は、シンプロビジョニングされてもよい。本明細書で使用される場合、「シンプロビジョニングされた」論理アドレス空間１３４は、基礎となる不揮発性メモリデバイス（複数可）１２０の物理的な容量を超える論理容量を有する論理アドレス空間１３４を指す。例えば、ＳＭＬは、記憶クライアント１１６に対して６４ビットの論理アドレス空間１３４を提示し得（例えば、６４ビットの論理アドレスによって参照される論理アドレス空間１３４）、これは基礎となる不揮発性メモリデバイス１２０の物理的な容量を超えてもよい。大きな論理アドレス空間１３４は、名前付けの競合の可能性を低減しながら、記憶クライアント１１６が、論理アドレスの連続範囲を割り当てること及び／又は参照することを可能にし得る。ＳＭＬは、論理アドレス空間１３４を基礎となる物理的な記憶デバイス１２０から独立して管理するために、論理アドレスと物理的な記憶リソースとの間の多対多マッピングを活用することができる。例えば、ＳＭＬは、必要に応じて、記憶クライアント１１６によって使用される論理アドレスを変更することなく、物理的な記憶リソースをシームレスに追加及び／又は除去し得る。
【００２６】
不揮発性メモリコントローラは、コンテキスト形式でデータを記憶するように構成されてもよい。本明細書で使用される場合、コンテキスト形式は、持続的コンテキストメタデータが物理的な記憶媒体１２２上のデータを有して記憶される、自己記述型データ形式を指す。持続的コンテキストメタデータは、記憶されるデータに対するコンテキストを提供する。ある実施形態において、持続的コンテキストメタデータは、持続的コンテキストメタデータが記憶されているデータを個別に識別する。例えば、持続的コンテキストメタデータは、記憶クライアント１１６が所有するデータのセクタ又はブロックを、記憶クライアント１１６によって所有される他のセクタ又はデータブロックから個別に識別し得る。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される一連の動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データのセキュリティ制御、データタイプ、又はデータの他の属性を識別する。ある実施形態において、持続的コンテキストメタデータは、データタイプ、固有データ識別子、動作、及びデータ上で実施される一連の動作を含む複数の態様のうちの少なくとも１つを識別する。
持続的コンテキストメタデータは、データの論理アドレス、データの識別子（例えば、ファイル名、オブジェクトｉｄ、ラベル、固有識別子など）、他のデータ（例えば、データが他のデータに関連付けられていることのインジケータ）への参照（複数可）、他のデータ（例えば、ファイルオフセットなど）に対するデータの相対位置又はオフセット、データサイズ及び／又は範囲などを含み得るが、これらに限定されない。コンテキストデータ形式は、データセグメント及び１つ以上のヘッダを含む、パケット形式を含んでもよい。代替的に、コンテキストデータ形式は、データを、他の方法で（例えば、不揮発性メモリ媒体１２２上の専用インデックス内、メモリ分割インデックス内など）でコンテキスト情報と関連付けることができる。
【００２７】
いくつかの実施形態において、コンテキストデータ形式は、データコンテキストが、不揮発性メモリ媒体１２２のコンテキストに基づいて、及び上記の任意の多対多マッピング等の他のメタデータから独立して、判定及び／又は再構成することを可能にし得る。データの媒体場所は、データの論理アドレスから独立しているため、データのコンテキストを媒体場所又はデータの媒体アドレスのみに基づいて判定することは非効率的又は不可能であり得る。不揮発性メモリ媒体１２２上にデータをコンテキスト形式で記憶することは、他のメタデータを参照することなく、データコンテキストを判定することを可能にし得る。例えば、コンテキストデータ形式は、不揮発性メモリ媒体１２２のコンテンツにのみ基づいて、メタデータを再構成することを可能にし得る（例えば、論理アドレスと媒体場所との間の多対多マッピングを再構成する）。
【００２８】
いくつかの実施形態において、不揮発性メモリコントローラは、ソリッドステート記憶媒体等の、１つ以上の非対称の追記型媒体１２２上にデータを記憶するように構成され得る。本明細書で使用される場合、「追記型」記憶媒体は、新しいデータが書き込まれるか、又はその上にプログラムされるたびに再初期化される（例えば、消去される）記憶媒体を指す。本明細書で使用される場合、「非対称」記憶媒体は、異なる記憶動作に対する異なるレイテンシを有する記憶媒体１２２を指す。多くのタイプのソリッドステート記憶媒体は、非対称であり、例えば、読み取り動作は、書き込み／プログラム動作よりもはるかに速くてもよく、書き込み／プログラム動作は、消去動作よりもはるかに速くてもよい（例えば、媒体を読み出すことは、消去よりも数百倍速く、媒体をプログラミングするよりも数十倍速くてもよい）。
【００２９】
メモリ媒体１２２は、とりわけ、媒体１２２などの非対称特性を考慮するために、グループ（例えば、消去ブロック）として消去することができるメモリ分割に分配され得る。そのため、単一のデータセグメントを定位置に変更することは、データを含む消去ブロック全体を消去すること、及び修正されたデータを、元の変更されていないデータと共に消去ブロックに再度書き込むことを必要とし得る。これは、媒体１２２を過度に摩耗させ得る非効率的な「書き込み増幅」をもたらし得る。したがって、いくつかの実施形態において、不揮発性メモリコントローラは、定位置から外してデータを書き込むように構成され得る。本明細書で使用される場合、データを「定位置から外して」書き込むことは、データを「定位置で」上書きする（例えば、データの元の物理的な場所を上書きする）のではなく、異なる媒体記憶場所（複数可）にデータを書き込むことを指す。データを定位置から外して修正することは、修正されるべきデータを有する消去ブロック上の既存の有効なデータが、消去及び再コピーされる必要がないため、書き込み増幅を回避し得る。その上、定位置から外してデータを書き込むことは、多くの記憶動作のレイテンシ経路から消去することを除去し得る（例えば、消去レイテンシは、もはや書き込み動作のクリティカルパスの一部ではない）。
【００３０】
不揮発性メモリコントローラは、記憶動作に対応するための通常の経路（例えば、記憶動作を実施する及び／又は記憶要求に対応するための「経路」）の外で動作する１つ以上のプロセスを含んでもよい。本明細書で使用される場合、「記憶要求に対応するための経路」又は「記憶動作に対応するための経路」（「クリティカルパス」とも称される）は、読み取り、書き込み、修正など等の記憶動作又は要求に対応するために必要な一連の処理動作を指す。記憶要求に対応するための経路は、記憶クライアント１１６から要求を受信することと、要求の論理アドレスを識別することと、不揮発性メモリ媒体１２２上で１つ以上の記憶動作を実施することと、応答又はデータ等の結果を返すことと、を含み得る。記憶要求に対応するための経路の外側で発生するプロセスは、グルーマ、重複排除などを含み得るが、これらに限定されない。これらのプロセスは、それらが他の記憶動作及び／又は要求の性能を妨害又は影響しないように、自律的かつバックグラウンドで実施されてもよい。したがって、これらのプロセスは、記憶要求に対応することから独立して動作し得る。
【００３１】
いくつかの実施形態において、不揮発性メモリコントローラは、ガベージコレクション又は他の記憶容量回復プロセスを使用して、再使用に対するメモリ分割（例えば、論理的又は物理的消去ブロック）を再利用するように構成されている、グルーマを含む。不揮発性メモリコントローラによって実装された定位置を外れたパラダイムの書き込みは、不揮発性メモリ媒体１２２上に残る不明瞭な又は無効なデータをもたらし得る。例えば、データＹでデータＸを上書きすることは、（例えば、定位置にＸを上書きするのではなく）新しいメモリ分割上にＹを記憶すること、及びデータの有効な最新版としてＹを識別するために、メタデータの多対多マッピングを更新することをもたらし得る。上記のように、Ｘを消去することは、全メモリ分割を消去することを伴う場合があり、これは時間がかかる動作であり、書き込み増幅をもたらし得るため、データＸの不明瞭なバージョンは、無効としてマーキングされ得るが、すぐに除去（例えば、消去）されない。同様に、これ以上使用されないデータ（例えば、削除又はトリミングされたデータ）は、直ちに除去されなくてもよい。不揮発性メモリ媒体１２２は、相当量の無効データを蓄積し得る。
【００３２】
グルーマプロセスは、記憶動作に対応するためのクリティカルパスの外側で動作することができる。グルーマプロセスは、他の記憶動作のために再使用することができるように、メモリ分割を再利用してもよい。本明細書で使用される場合、メモリ分割を再利用することは、メモリ分割を消去することを指し、そのため新しいデータがその上に記憶／プログラムされ得る。メモリ分割を再利用することは、メモリ分割上の有効データを新しい場所に再配置することを含み得る。グルーマは、メモリ分割内の無効データの量、メモリ分割内の有効データの量、メモリ分割時の摩耗（例えば、消去サイクル数）、メモリ分割がプログラムされているか又はリフレッシュされてからの時間などを含み得るが、これらに限定されない、１つ以上の要因に基づいた再利用に対するためのメモリ分割を識別し得る。
【００３３】
不揮発性メモリコントローラは、データをログ形式で記憶するように更に構成されてもよい。上記のように、ログ形式は、不揮発性メモリ媒体１２２上で実施される記憶動作の順序付けられたシーケンスを定義するデータ形式を指す。いくつかの実施形態において、ログ形式は、不揮発性メモリ媒体１２２の媒体アドレスの所定のシーケンス内に（例えば、媒体１２２の連続ページ及び／又は消去ブロック内に）データを記憶することを含む。ログ形式は、データ（例えば、各パケット又はデータセグメント）をそれぞれのシーケンスインジケータと関連付けることを更に含んでもよい。シーケンスインジケータは、個別に（例えば、各データパケットに適用される）データに、及び／又はデータグループ（例えば、消去ブロック等のメモリ分割上に連続的に記憶されたパケット）に適用され得る。いくつかの実施形態において、メモリ分割が上記のように再利用される（例えば、消去される）とき、及び／又はメモリ分割がデータを記憶するために最初に使用されるときに、シーケンスインジケータがメモリ分割に適用されてもよい。
【００３４】
いくつかの実施形態において、ログ形式は、「追加専用」パラダイム内にデータを記憶することを含み得る。以下に記載されるログ記憶モジュールなどを使用する不揮発性メモリコントローラは、不揮発性メモリデバイス１２０の媒体アドレスで現在の追加ポイントを維持し得る。追加ポイントは、現在のメモリ分割及び／又はメモリ分割内のオフセットであってもよい。次いで、データは、追加ポイントから連続的に追加され得る。したがって、データの連続的順序付けは、メモリ分割内のデータのシーケンスと組み合わせたデータのメモリ分割のシーケンスインジケータに基づいて判定され得る。メモリ分割の終了に達すると、不揮発性メモリコントローラは、「次の」利用可能なメモリ分割（例えば、初期化され、データを記憶する準備が整っている次のメモリ分割）を識別し得る。グルーマは、データが引き続き媒体ログに追加され得ることを確実とするために、無効、停滞、及び／又は削除されたデータを含むメモリ分割を再利用し得る。
【００３５】
本明細書に記載されるログ形式は、有効データが不揮発性メモリ媒体１２２のコンテンツに基づいて、及び他のメタデータから独立して、無効データと区別されることを可能にし得る。上記のように、無効データは、データを含むメモリ分割が再利用されるまで、不揮発性メモリ媒体１２２から除去されなくてもよい。したがって、同じコンテキストを有するデータの複数の「バージョン」は、不揮発性メモリ媒体１２２上に存在し得る（例えば、同じ論理アドレスを有する複数のバージョンのデータ）。データに関連付けられたシーケンスインジケータは、データの現在の最新バージョンから、データの無効バージョンを区別するために使用されてもよく、ログにおける直近のデータは、現在のバージョンであり、前のバージョンは無効として識別されてもよい。
【００３６】
記憶管理層は、１つ以上の記憶クライアント１１６に記憶サービスを提供するように構成されてもよい。記憶クライアント１１６は、コンピューティングデバイス１１０上で動作するローカル記憶クライアント１１６、及び／又はネットワーク１１５並びに／若しくはネットワークインターフェース１１３を介してアクセス可能なリモート記憶クライアント１１６を含んでもよい。記憶クライアント１１６は、動作システム、ファイルシステム、データベースアプリケーション、サーバアプリケーション、カーネルレベルプロセス、ユーザレベルプロセス、アプリケーションなどを含み得るが、これらに限定されない。
【００３７】
記憶管理層は、１つ以上の不揮発性メモリデバイス１２０を備え、及び／又はそれに通信可能に結合される。１つ以上の不揮発性メモリデバイス１２０は、ソリッドステート記憶デバイス、ハードドライブ、ＳＡＮ記憶リソースなどを含む、異なるタイプの不揮発性メモリデバイスを含み得るが、これらに限定されない。１つ以上の不揮発性メモリデバイス１２０は、１つ以上のそれぞれの不揮発性メモリ媒体コントローラ１２６及び不揮発性メモリ媒体１２２を含み得る。図１Ａに例解されるように、ＳＭＬは、従来のブロックＩ／Ｏインターフェース１３１を介して１つ以上の不揮発性メモリデバイス１２０へのアクセスを提供し得る。付加的に、ＳＭＬは、ＳＣＭインターフェース１３２を通じて強化された機能（例えば、大きい仮想アドレス空間１３４）へのアクセスを提供し得る。メタデータ１３５は、ブロックＩ／Ｏインターフェース１３１、ＳＣＭインターフェース１３２、キャッシュインターフェース１３３、又は他の関連インターフェースのうちのいずれかを通じて実施される記憶動作を管理及び／又は追跡するために使用され得る。
キャッシュインターフェース１３３は、記憶管理層を介してアクセス可能なキャッシュ固有の特徴を見せ得る。また、いくつかの実施形態において、記憶クライアント１１６に提示されるＳＣＭインターフェース１３２は、１つ以上の不揮発性メモリデバイス１２０及び／又は１つ以上の不揮発性メモリ媒体コントローラ１２６によって実装されるデータ変換へのアクセスを提供する。
【００３８】
ＳＭＬは、ブロックＩ／Ｏインターフェース、拡張記憶管理層インターフェース、キャッシュインターフェースなどを含み得るが、これらに限定されない、１つ以上のインターフェースを通じて記憶サービスを提供し得る。ＳＭＬは、１つ以上のインターフェースを通じて、記憶クライアント１１６に論理アドレス空間１３４を提示し得る。上記のように、論理アドレス空間１３４は、複数の論理アドレスを含み得、各々が１つ以上の不揮発性メモリデバイス１２０上のそれぞれの媒体場所に対応する。ＳＭＬは、上記のように、論理アドレスと媒体場所との間の多対多マッピングを含むメタデータ１３５を維持し得る。
【００３９】
ＳＭＬは、コンテキストに応じたログ形式においてデータを記憶するように構成されたログ記憶モジュールを更に備え得る。コンテキストに応じたログデータ形式は、データをデータの論理アドレスなど等の持続的コンテキストメタデータと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、１つ以上の不揮発性メモリデバイス１２０上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体１２２上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。
【００４０】
ＳＭＬは、データ、コマンド、及び／又はクエリを、周辺構成要素相互接続エクスプレス（ＰＣＩエクスプレス又はＰＣＩｅ）バス、シリアルアドバンストテクノロジアタッチメント（ＡＴＡ）バス、パラレルＡＴＡバス、小型コンピュータシステムインターフェース（ＳＣＳＩ）、ファイヤワイヤ、ファイバチャネル、ユニバーサルシリアルバス（ＵＳＢ）、ＰＣＩｅアドバンストスイッチング（ＰＣＩｅ−ＡＳ）バス、ネットワーク１１５、インフィニバンド、ＳＣＳＩ  ＲＤＭＡ等を含み得るが、これらに限定されない、バス１２５にわたって１つ以上の不揮発性メモリデバイス１２０に転送するように構成された不揮発性メモリデバイスインターフェース１３９を更に含み得る。不揮発性メモリデバイスインターフェース１３９は、入出力制御（ＩＯ−ＣＴＬ）コマンド（複数可）、ＩＯ−ＣＴＬコマンド延長部（複数可）、リモートダイレクトメモリアクセスなどを使用して、１つ以上の不揮発性メモリデバイス１２０と通信し得る。
【００４１】
通信インターフェース１１３は、コンピューティングデバイス１１０及び／又は不揮発性メモリコントローラをネットワーク１１５に、及び／又は１つ以上のリモートの、ネットワークアクセス可能な記憶クライアント１１６に通信可能に結合するように構成された１つ以上のネットワークインターフェースを備えてもよい。記憶クライアント１１６は、コンピューティングデバイス１１０上で動作するローカル記憶クライアント１１６、及び／又はネットワーク１１５並びに／若しくはネットワークインターフェース１１３を介してアクセス可能なリモート記憶クライアント１１６を含んでもよい。不揮発性メモリコントローラは、１つ以上の不揮発性メモリデバイス１２０を備える。図１Ａは、単一の不揮発性メモリデバイス１２０を図示するが、本開示は、この点に関して限定されず、いずれの数の不揮発性メモリデバイス１２０を組み込むように適合され得る。
【００４２】
不揮発性メモリデバイス１２０は、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ナノランダムアクセスメモリ（ナノＲＡＭ又はＮＲＡＭ）、ナノ結晶ワイヤベースメモリ、シリコン酸化物ベースのサブ１０ナノメートルプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン（ＳＯＮＯＳ）、抵抗ラム（ＲＲＡＭ（登録商標））、プログラム可能メタライゼーションセル（ＰＭＣ）、導電性架橋ＲＡＭ（ＣＢＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、相変化ＲＡＭ（ＰＲＡＭ又はＰＣＭ）、磁気記憶媒体（例えば、ハードディスク、テープ）、光学記憶媒体など、を含み得るが、これらに限定されない、不揮発性メモリ媒体１２２を備えてもよい。不揮発性メモリ媒体１２２は、本明細書中で「メモリ媒体」として称されるが、様々な実施形態において、不揮発性メモリ媒体１２２は、より一般的に、不揮発性メモリ媒体、不揮発性記憶媒体などと称され得る、データを記録することが可能な不揮発性記録媒体を備えてもよい。更に、様々な実施形態において、不揮発性メモリデバイス１２０は、不揮発性記録デバイス、不揮発性メモリデバイス、不揮発性記憶デバイスなどを含み得る。
【００４３】
不揮発性メモリ媒体１２２は、チップ、パッケージ、平面、ダイなどを含み得るが、これらに限定されない、１つ以上の不揮発性メモリ要素１２３を備えてもよい。不揮発性メモリ媒体コントローラ１２６は、不揮発性メモリ媒体１２２上の記憶動作を管理するように構成されてもよく、１つ以上のプロセッサ、プログラム可能なプロセッサ（例えば、フィールドプログラマブルゲートアレイ）などを含んでもよい。いくつかの実施形態において、不揮発性メモリ媒体コントローラ１２６は、上記のコンテキストに応じたログ形式で不揮発性メモリ媒体１２２上にデータを記憶及び／又は不揮発性メモリ媒体１２２からデータを読み取り、不揮発性メモリデバイス１２０などに／からデータを転送するように構成される。
【００４４】
不揮発性メモリ媒体コントローラ１２６は、バス１２７によって不揮発性メモリ媒体１２２に通信可能に結合され得る。バス１２７は、不揮発性メモリ要素１２３に／からデータを通信するためのＩ／Ｏバスを含んでもよい。バス１２７は、アドレス指定及び他のコマンド並びに制御情報を不揮発性メモリ要素１２３に通信するための制御バスを更に含んでもよい。いくつかの実施形態において、バス１２７は、不揮発性メモリ要素１２３を不揮発性メモリ媒体コントローラ１２６に並行して、通信可能に結合し得る。この並行アクセスは、不揮発性メモリ要素１２３がグループとして管理されることを可能にし、論理メモリ要素１２９を形成することができる。上述のように、論理メモリ要素は、それぞれの論理メモリユニット（例えば、論理ページ）及び／又は論理メモリ分割（例えば、論理消去ブロック）に分配されてもよい。論理メモリユニットは、不揮発性メモリ要素の各々の物理的なメモリユニットを論理的に組み合わせることによって形成され得る。例えば、不揮発性メモリ媒体１２２が２５の不揮発性メモリ要素を含む場合、各論理メモリユニットは、２５ページ（例えば、不揮発性メモリ媒体１２２の各要素のページ）を備え得る。
【００４５】
不揮発性メモリコントローラは、ＳＭＬ及び不揮発性メモリ媒体コントローラ１２６を備え得る。ＳＭＬは、１つ以上のインターフェース１３１、１３２、及び／又は１３３を介して記憶クライアント１１６に記憶サービスを提供してもよい。いくつかの実施形態において、ＳＭＬは、ブロックデバイスＩ／Ｏインターフェース１３１を提供し、それを通じて記憶クライアント１１６がブロックレベルＩ／Ｏ動作を実施する。代替的に又は付加的に、ＳＭＬは、記憶管理層（ＳＭＬ）インターフェースを提供し得、記憶クライアント１１６に他の記憶サービスを提供し得る。いくつかの実施形態において、ＳＣＭインターフェース１３２は、ブロックデバイスインターフェース１３１への延長部を備え得る（例えば、記憶クライアント１１６は、ブロックデバイスインターフェース１３１への延長部を通じてＳＣＭインターフェース１３２にアクセスしてもよい）。代替的に又は付加的に、ＳＣＭインターフェース１３２は、別個のＡＰＩ、サービス、及び／又はライブラリとして提供されてもよい。ＳＭＬは、不揮発性メモリシステム１０２を使用してデータをキャッシュするためのキャッシュインターフェース１３３を提供するように更に構成され得る。
【００４６】
上記のように、ＳＭＬは、論理アドレス空間１３４を記憶クライアント１１６に（例えば、インターフェース１３１、１３２、及び／又は１３３を通じて）提示し得る。ＳＭＬは、論理アドレス空間１３４内の論理アドレスと不揮発性メモリデバイス１２０上の媒体場所との間の多対多マッピングを含む、メタデータ１３５を維持し得る。メタデータ１３５は、論理アドレス空間１３４内の論理アドレス、及び不揮発性メモリデバイス１２０上の媒体場所をマッピングするエントリを有する論理から物理マッピング構造を含み得る。一実施形態において、メタデータ１３５の論理から物理マッピング構造は、不揮発性メモリデバイス１２０がデータを記憶する論理アドレスに対するエントリを有して、及び不揮発性メモリデバイス１２０が現在データを記憶していない論理アドレスに対するエントリのない状態で、まばらに投入される。ある実施形態において、メタデータ１３５は、ブロックとしてデータを管理するＳＭＬを伴い、ブロックレベルでデータを追跡する。
不揮発性メモリシステム１０２は、ログ記憶モジュールを更に備えてもよく、これは上記のように、コンテキストに応じたログ形式で不揮発性メモリデバイス１２０上にデータを記憶するように構成され得る。コンテキストに応じたログデータ形式は、データを不揮発性メモリ媒体１２２上の論理アドレスと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、不揮発性メモリ媒体１２２上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体１２２上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。不揮発性メモリコントローラは、上記のように、データ、コマンド、及び／又はクエリを、バス１２５にわたって不揮発性メモリ媒体コントローラ１２６に転送するように構成される、不揮発性メモリデバイスインターフェース１３９を更に備えてもよい。
【００４７】
図１Ｂは、１つ以上のメモリダイ又はチップ２１２を含み得る不揮発性記憶デバイス２１０の実施形態を図示する。不揮発性記憶デバイス２１０は、図１Ａを参照して説明された不揮発性メモリデバイス１２０と実質的に類似し得る。いくつかの実施形態において、メモリダイ２１２は、メモリセル、ダイコントローラ２２０、及び読み取り／書き込み回路２３０Ａ／２３０Ｂのアレイ２００（二次元又は三次元）を含む。一実施形態において、様々な周辺回路によるメモリアレイ２００へのアクセスは、アレイの反対側の側面上で、対称的に実装され、そのため各側面上のアクセスライン及び回路の密度が半分に低減される。読み取り／書き込み回路２３０Ａ／２３０Ｂは、更なる実施形態において、メモリセルのページが並行して読み取り又はプログラムされることを可能にする複数の感知ブロック２５０を含む。
【００４８】
様々な実施形態において、メモリアレイ２００は、行デコーダ２４０Ａ／２４０Ｂを介したワード線、及び列デコーダ２４２Ａ／２４２Ｂを介したビット線によってアドレス指定可能である。いくつかの実施形態において、コントローラ２４４は、１つ以上のメモリダイ２１２と同じメモリデバイス２１０（例えば、可動式記憶カード又はパッケージ）内に含まれる。コマンド及びデータは、線２３２を介してホストとコントローラ２４４との間で、線２３４を介してコントローラと１つ以上のメモリダイ２１２との間で転送される。一実装例は、複数のチップ２１２を含むことができる。
【００４９】
一実施形態において、ダイコントローラ２２０は、読み取り／書き込み回路２３０Ａ／２３０Ｂと協働してメモリアレイ２００上でメモリ／記憶動作を実施する。ある実施形態において、ダイコントローラ２２０は、記憶管理モジュール、状態マシン２２２、オンチップアドレスデコーダ２２４、及び電力制御回路２２６を含む。一実施形態において、記憶管理モジュールは、メモリアレイ２００の記憶場所のバンクに対する記憶動作コマンドを受信し、メモリアレイ２００に関連付けられたページレジスタ内の利用可能な記憶場所のサブセットを使用して実行するための記憶動作コマンドを待ち行列に入れ、及び記憶動作コマンドが完了、実行、実施などされるまで、ページレジスタ内の記憶場所に記憶動作コマンドに関連付けられたデータを記憶するように構成される。ある実施形態において、記憶管理モジュールは、デバイスドライバのソフトウェア、及び／又はデバイスコントローラ２４４内のハードウェア、ダイコントローラ２２０、並びに／又は状態マシン２２２を含んでもよい。
【００５０】
一実施形態において、状態マシン２２２は、メモリ又は記憶動作のチップレベル制御を提供する。オンチップアドレスデコーダ２２４は、ホスト又はメモリコントローラによって使用されるアドレスとデコーダ２４０Ａ、２４０Ｂ、２４２Ａ、２４２Ｂによって使用されるハードウェアアドレスとの間で変換するアドレスインターフェースを提供する。電力制御モジュール２２６は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。一実施形態において、電力制御回路２２６は、供給電圧よりも大きい電圧を生成することができる１つ以上のチャージポンプを含む。
【００５１】
メモリセル３０２のアレイ３０１を含む、上記の不揮発性記憶デバイス２１０等の、メモリ要素３００の一実施形態を説明する。一実施形態において、アレイ３０１は、メモリセル３０２の２つのサブアレイ３０３に分割される。本明細書を考慮すれば、当業者は、メモリアレイ３０１が、任意の数のサブアレイ３０３に分割することができることを認識するであろう。更に、図示された実施形態において、メモリセル３０２の各行は、メモリセル３０２のバンク３０６（例えば、一組のメモリセル３０２）と、バンクグループ３０４を含む一群のメモリセルバンク３０６と、を含む。例えば、例解されるように、メモリ要素３００は、メモリセル３０２の２つのサブアレイ３０３及び１６個のバンク３０６を含み、４つの異なるバンクグループ３０４にグループ化されてもよい。
【００５２】
更なる実施形態において、メモリ要素３００は、関連するページレジスタ／ページバッファ３０８を有してもよい。本明細書で使用される場合、ページレジスタ３０８は、メモリアレイ３０１に（例えば、書き込みコマンドに対する）、又はメモリアレイ３０１から（読み取りコマンドに対する）転送しながら、データを一時的に記憶するために使用される記憶エリアである。ある実施形態において、ページレジスタは、メモリアレイ３０１に対するアドレスを記憶するために使用することができる複数のデータラッチ、メモリアレイ３０１内のアドレスで記憶されるデータなどを含む、複数の異なる記憶場所を含む。
【００５３】
一実施形態において、メモリ要素３００が不揮発性ＮＡＮＤ記憶デバイスに対するＮＡＮＤモード等のアノーマルモードで動作しているとき、ページレジスタ３０８に対するアクセスユニットは、例えばページ当たり５１２Ｂ、４ｋＢ、８ｋＢ、１６ｋＢなどのフルページのデータであってもよい。一方、メモリ要素３００が「バースト」モードで実施されるとき、ページレジスタ３０８に対するアクセスユニットは、例えば、ページ当たり４Ｂ、８Ｂ、１６Ｂなど、より小さくなり得、バンク３０６又はバンクグループ３０４の記憶サイズに対応し得る。本明細書で使用される場合、「バースト」モードは、メモリ要素３００がメモリアレイ３０１のバンク３０６又はバンクグループ３０４上で高速同期読み取り３１０及びプログラム／書き込み３１２動作を処理する、メモリ要素３００のモードであり得る。
【００５４】
したがって、「バースト」モードで実行するとき、ページレジスタ３０８のサブセット又は部分は、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられてもよく、メモリセル３０２のバンク３０６又はバンクグループ３０４上で、記憶動作コマンド、例えば、読み取り３１０又は書き込み３１２コマンド、を実施するために利用されてもよい。このため、ページレジスタ３０８内の、使用されず、利用可能な記憶空間は、メモリセル３０２のバンク３０６又はバンクグループ３０４に対する異なる記憶動作を、待ち行列に入れる、バッファリングする、などのために使用することができる。更に、複数の異なる記憶動作がページレジスタ３０８内で待ち行列に入れられ、メモリ要素３００のメモリセル３０２の異なるバンク３０６又はバンクグループ３０４上で同期的に実施されてもよい。一実施形態において、メモリアレイ３０１は、各バンク３０６又はバンクグループ３０４に対する記憶動作を待ち行列に入れること及び処理を管理する単一の状態マシン２２２によって管理されてもよい。ある実施形態において、複数の状態マシン２２２は、各バンク３０６又はバンクグループ３０４に対する記憶動作を待ち行列に入れること及び処理を独立して管理し得る。
【００５５】
記憶管理モジュールの一実施形態を説明する。記憶管理モジュールは、図１Ａに関して上記の記憶管理モジュールと実質的に類似し得る。図示された実施形態において、記憶管理モジュールは、コマンドモジュール４０２と、待ち行列モジュール４０４と、データモジュール４０６と、を含み、これらは以下でより詳細に記載される。
【００５６】
一実施形態において、コマンドモジュール４０２は、メモリ要素３００の記憶場所のバンク３０６、例えば、メモリセル３０２に関連付けられた１つ以上の記憶動作コマンドを受信するように構成される。本明細書で使用される場合、記憶動作コマンドは、メモリ要素３００、メモリアレイ３０１、バンク３０６、バンクグループ３０４、メモリセル３０２などの上での作用、活動などを引き起こすことを意図したコマンドを含み得る。記憶動作コマンドは、例えば、読み取りコマンド、書き込みコマンド、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、リフレッシュフラッシュコマンド、及び／又は同様のものを含んでもよい。上記のように、コマンドモジュール４０２は、記憶クライアント１１６から記憶動作コマンドを受信してもよい。
一実施形態において、コマンドモジュール４０２は、メモリセル３０２のバンク３０６、メモリセル３０２のバンクグループ３０４、及び／又はメモリ要素３００のメモリアレイ３０１の同様のもの、に対する記憶動作コマンドを受信する。いくつかの実施形態において、コマンドモジュール４０２は、記憶動作に関連付けられたメモリセルのバンク（複数可）３０６に対応する記憶動作コマンドの一部として、１つ以上のアドレスを受信する。
【００５７】
一実施形態において、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定することによって、実行するための記憶動作コマンドを待ち行列に入れるように構成される。本明細書で使用される場合、ページレジスタ３０８内の記憶場所は、アドレス、識別子などを使用してアクセス可能であり得る１つ以上のデータラッチ、データレジスタ、及び／又は同様のものを含んでもよい。このような実施形態において、ページレジスタ３０８内の記憶場所は、ページレジスタ３０８内の利用可能な記憶場所のサブセット、一部分、一部などであってもよい。例えば、４ｋＢのフルページに対するデータを記憶するように構成され得る、ページレジスタ３０８内の記憶場所は、メモリ要素３００内のメモリセル３０２のバンク３０６に関連付けられた１Ｂ又は２Ｂセットのデータラッチであってもよい。
【００５８】
待ち行列モジュール４０４は、記憶コマンド動作が受信される順序、並びに記憶コマンド動作のアドレス及び／又はデータが記憶されるページレジスタ内の場所を追跡し得る。例えば、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所、及び実行のために待ち行列に入れられた複数の受信された記憶動作コマンドに対する実行順序を判定する、状態マシン２２２等の、コントローラ上に、又は別様にコントローラの一部の上に位置付けられ得る。別の実施例において、待ち行列モジュール４０４は、メモリ要素３００内のメモリセル３０２の異なるバンク３０６又はバンクグループ３０４に関連付けられたページレジスタ３０８内の記憶場所を各々管理する、複数の状態マシン２２２の上に、又は別様に状態マシン２２２の一部の上に位置付けられ得る。このような実施形態において、各状態マシン２２２に対する待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定し、実行のために待ち行列に入れられた複数の受信された記憶動作コマンドの実行順序を判定する。
【００５９】
一実施形態において、データモジュール４０６は、受信した記憶動作コマンドに関連付けられたデータを受信し、記憶動作コマンドが実行される準備が整うまで、受信したデータをページレジスタ３０８内の所定の記憶場所に記憶するように構成される。データモジュール４０６は、例えば、書き込みコマンドに関連付けられたデータを受信し、書き込みコマンドが実行のために待ち行列に入れられている間に、記憶場所内のデータ、例えば、ページレジスタ３０８内の１つ以上のデータラッチを記憶してもよい。書き込みコマンドが実行される、コミットされる、又は同様のものとなるように選択されるとき、データモジュール４０６は、次いで、ページレジスタ３０８内の記憶場所からメモリアレイ３０１のバンク３０６又はバンクグループ３０４に書き込まれるデータにアクセスし、データをメモリアレイ３０１に書き込むか、又はプログラムし得る。別の実施例において、データモジュール４０６は、読み取り要求コマンドに応答して、メモリ要素３００のバンク３０６又はバンクグループ３０４からデータを受信してもよく、かつ読み取り要求コマンドが、コミットされる、終了される、実行される、又は同様のことのための待ち行列から選択されるまで、ページレジスタ３０８内の記憶場所内に、読み取りデータを記憶してもよい。
【００６０】
したがって、記憶管理モジュールは、ページレジスタ３０８の部分を使用して、個々のバンク３０６又はバンクグループ３０４に対する複数の記憶動作を管理するための、動的待ち行列システムを提供する。このように、複数の記憶動作は、例えば、各バンクグループ３０４又は同様のもの、の内部で、メモリアレイ３０１上で同期的に実行されてもよい。更に、記憶動作によって影響を受けるメモリアレイ３０１の部分に関連しない、メモリアレイ３０１の部分上での記憶動作の不必要な実行は、個々のバンク３０６又はバンクグループ３０４のために意図され、メモリアレイ３０１全体ではない記憶動作を待ち行列に入れるように、ページレジスタ３０８を使用することによって回避され得る。
【００６１】
記憶管理モジュールの一実施形態を説明する。記憶管理モジュールは、図１Ａに関して上記の記憶管理モジュールと実質的に類似し得る。図示された実施形態において、記憶管理モジュールは、コマンドモジュール４０２、待ち行列モジュール４０４、及びデータモジュール４０６を含み、これは、上記のコマンドモジュール４０２、待ち行列モジュール４０４、及びデータモジュール４０６と実質的に類似し得る。更に、一実施形態において、記憶管理モジュールは、ポインタ管理モジュール５０２、再試行モジュール５０４、コピーバックモジュール５０６、及びキャッシュ読み取りモジュール５０８を含み、これらは以下でより詳細に記載される。
【００６２】
一実施形態において、ポインタ管理モジュール５０２は、記憶動作コマンドに関連付けられたデータ、アドレス、及び／又は同様のもの、のために、ページレジスタ３０８内の記憶場所に１つ以上のポインタ、参照などを維持する。本明細書で使用される場合、ポインタは、記憶動作に関連付けられたデータ又はアドレスに対するページレジスタ３０８内のアドレス、メモリ場所などへの参照である。いくつかの実施形態において、１つ以上のポインタは、現在のプログラム／書き込み動作に関連付けられたデータの記憶場所へのポインタ、待ち行列に入れられたプログラム／書き込み動作に関連付けられたデータの記憶場所へのポインタ、読み取り動作に関連付けられたデータに対する記憶場所へのポインタ、及び／又は同様のものを含む。一実施形態において、ポインタ管理モジュール５０２は、読み取りコマンド及び書き込みコマンド等の、特定の記憶動作コマンドに対する記憶場所として事前に定義されているページレジスタ３０８内の特定のラッチ、記憶場所、アドレス、メモリ場所などに、様々なポインタを方向付けてもよい。
【００６３】
例えば、ポインタ管理モジュール５０２は、記憶されているメモリアレイ３０１のバンク３０６又はバンクグループ３０４から読み出されたデータに対して指定されたページレジスタ３０８内の記憶場所に、読み取りポインタを方向付けてもよい。そのような実施形態において、読み取り要求がコミット又は終了する前に、例えば、読み取り要求データがページレジスタ３０８から記憶クライアント１１６に転送される前に、処理されるように待ち行列に入れられる他の記憶コマンドが存在してもよいが、ポインタ管理モジュール５０２がポインタをページレジスタ３０８内の読み取り要求データに維持するため、及びページレジスタ３０８の一部分又はサブセットのみが読み取り要求データを記憶するために使用されているので、読み取り要求コマンドは待ち行列に入れることができ、例えば、以前に待ち行列に入れられた記憶動作コマンドが完了したときに、実行かつ終了又はコミットされるように指定されることによって追跡されることができる。
【００６４】
別の実施例において、ポインタ管理モジュール５０２は、現在処理されている、又は処理されるために待ち行列に入れられる、書き込み若しくはプログラムコマンドのためにデータが記憶されるページレジスタ３０８内の記憶場所に、現在の書き込みポインタを維持する。更に、ポインタ管理モジュール５０２は、処理されるために次の列にある、待ち行列に入れられた書き込み又はプログラムコマンドのためにデータが記憶される、ページレジスタ３０８内の記憶場所に１つ以上の待ち行列又は次のポインタを維持する。例えば、上記のように、ページレジスタ３０８の特定のラッチ、アドレス、メモリ場所などは、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられた読み取りデータ及び書き込みデータに対する記憶場所として定義されてもよい。１つの特定の実施例において、ページレジスタ３０８の三組のラッチ（例えば、８、１６、３２、又は同様の８ビットラッチの３つの列）が、例えば、特定のメモリバンク３０６に関して、書き込み動作に関連付けられたデータに対する記憶場所として指定される場合、ポインタ管理モジュール５０２は、現在のポインタを第１の組のラッチのアドレスに方向付け、次の／待ち行列に入れられたポインタを第２の組のラッチのアドレスに方向付けてもよい。第３の組のラッチは、例えば、以下に記載されるように、書き込み動作が不成功となり、再試行される必要がある事象において、追加のバッファ又はオーバーフローとして使用されてもよい。
したがって、一実施例において、データモジュール４０６が書き込み要求に対するデータを受信し、ページレジスタ３０８の第１の組のラッチ内にデータを記憶する場合、ポインタ管理モジュール５０２は、現在のポインタを第１の組のラッチのアドレスに方向付けて、現在の書き込み要求に対するデータ、例えば、待ち行列内の次の書き込み要求、を示し得る。第１の書き込み要求がまだ待ち行列に入れられている間に、データモジュール４０６が別の書き込み要求に対するデータを受信する場合、データモジュール４０６は、データをページレジスタ３０８の第２の組のラッチ内に記憶するはずであり、ポインタ管理モジュール５０２が、次の／待ち行列に入れられたポインタを第２の組のラッチのアドレスに方向付けて、次の書き込み要求に対するデータを示してもよい。したがって、書き込み要求が、現在のポインタによって指定されたデータ、例えば、第１の組のラッチ内のデータ、を使用して実行されるとき、ポインタ管理モジュール５０２は、現在のポインタを第２の組のラッチに再度方向付けて、次の書き込み要求のデータを示し得、これが現在の書き込み要求である。次いで、ポインタ管理モジュール５０２は、別の書き込み要求が待ち行列に入るまで、次の／待ち行列に入れられたポインタを第３の組のラッチ、第１の組のラッチ、ＮＵＬＬなどに再度方向付けてもよい。
【００６５】
更に、一実施形態において、ポインタ管理モジュール５０２は、ポインタに関連付けられた記憶場所でページレジスタ３０８内に記憶されたデータが有効であるかどうかを示す、各ポインタに関連付けられた有効性ビットを維持する。例えば、読み取り要求動作中に、データモジュール４０６は、メモリアレイ３０１のバンク３０６からデータを受信し、ページレジスタ３０８内の一組のラッチ内にデータを記憶してもよい。ポインタ管理モジュール５０２は、読み取りポインタを一組のラッチに方向付け、一組のラッチ内に記憶されたデータが有効であることを示す、一組のラッチに対する有効性ビットを設定し得る。一度データがページレジスタから読み取られると、例えば、記憶クライアント１１６に伝達されると、ポインタ管理モジュール５０２は、次いで、有効性ビットを無効化、リセットなどをして、例えば、読み取り要求を満たすために伝達又は処理されているため、一組のラッチ内に記憶されたデータがもはや有効ではないことを示すことができる。
【００６６】
一実施形態において、ポインタ管理モジュール５０２は、メモリアレイ３０１に書き込まれるように待ち行列に入れられたが、プログラム／書き込み動作中にメモリ要素３００に正常に書き込まれなかったデータに対する記憶場所に、ポインタを維持する。例えば、現在のポインタによって指定されたデータに対する書き込み動作が試みられたが、何らかの理由、例えば、プログラムエラー、不完全プログラムなどにより失敗した場合、ポインタ管理モジュール５０２は、現在のポインタ及び次のポインタを、インクリメント又は再度方向付けて、待ち行列に入れられた書き込み動作に関連付けられたデータに対する異なる記憶場所に指定し、待ち行列に入れられたデータがバンク３０６又はバンクグループ３０４に書き込まれるように準備し得る。書き込み動作が失敗したため、ポインタ管理モジュール５０２は、データをメモリアレイ３０１に書き込むための付加的な試みが実行され得るように、有効性ビットをリセットしなくてもよい。このような実施形態において、ポインタ管理モジュール５０２は、「不成功」ポインタを、メモリアレイ３０１に書き込み失敗したデータに方向付け得、「不成功」ビットを設定して、不成功ポインタが、失敗してメモリアレイ３０１に書き込まれる必要のあるデータに指定されていることを示すことができる。
【００６７】
一実施形態において、再試行モジュール５０４は、不成功ビットが設定されていることに基づいて、不成功ポインタによって指定されるメモリアレイ３０１、メモリアレイ３０１のバンク３０６又はバンクグループ３０４にデータを書き込むように試みてもよい。再試行モジュール５０４は、データが書き込まれるまで、書き込み試行の閾値数が満たされるまで、又は同様のことになるまで、以前に失敗したデータをメモリアレイ３０１に書き込むことを試みてもよい。データがメモリアレイ３０１に正常に書き込まれた場合、ポインタ管理モジュール５０２は、不成功ビットをリセットし、書き込み要求に対するデータがメモリアレイ３０１に正常に書き込まれなくなるまで、不成功ポインタをＮＵＬＬ、又は別の無効な場所に指定するように再度方向付けてもよい。
【００６８】
いくつかの実施形態において、メモリアレイ３０１への書き込みに失敗したことを有効性ポインタによって示されるため、不成功ポインタが有効データに方向付けられる場合、データは、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に関連付けられたページレジスタ３０８内に利用可能な記憶場所がない場合、新たな書き込み動作に関する新しいデータによって上書きされてもよい。例えば、ページレジスタの三組のラッチがバンク３０６又はバンクグループ３０４と関連付けられ、現在のポインタが、有効データを含む第１の組のラッチを指定し、次のポインタが、有効データを含む第２の組のラッチを指定し、不成功のポインタが、メモリアレイ３０１に書き込まれるように既に試みられた有効データを含む第３の組のラッチを指定する場合、データモジュール４０６は、不成功のポインタが新しいデータを有して指定する第３の組のラッチ内のデータを上書きし得る。そのような実施形態において、データモジュール４０６は、データがメモリアレイ３０１に正常に書き込まれなかったことを示すために、通知、メッセージなどを記憶クライアントに送信してもよい。更に、この実施形態において、ポインタ管理モジュール５０２は、不成功のポインタを更新し得、そのため失敗の書き込みが再度発生するまで、バンク３０６又はバンクグループ３０４に対するページレジスタ３０８内の一組のラッチを指定しない。
【００６９】
したがって、不成功のポインタが有効なデータを含む記憶場所に方向付けられる場合、現在のポインタ及び次のポインタは、不成功ポインタによって指定された記憶場所が利用可能になるまで、残りの記憶場所間で交互に入れ替わり得る。このように、ページレジスタ３０８のサブセットは、各バンク３０６又はバンクグループ３０４に対する記憶動作待ち行列として使用されてもよいが、必ずしも先入れ先出し様式ではない。換言すれば、ポインタ管理モジュール５０２は、例えば、現在のポインタ及び次のポインタを使用して、書き込み動作が受信される順序を維持しながら、書き込み動作に対するデータにポインタを方向付けてもよく、しかしながら、不成功ポインタが、バンク３０６又はバンクグループ３０４に書き込まれるように以前に試みられた有効データに方向付けられた場合、再試行モジュール５０４は、書き込み動作が受信された順序から外れた不成功ポインタによって参照されたデータを書き込むことを試みてもよい。
【００７０】
一実施形態において、コピーバックモジュール５０６は、現在のポインタ又は次のポインタ等の書き込みポインタを、読み取り要求コマンドに関連付けられたデータを記憶する、ページレジスタの記憶場所、例えば、一組のラッチ、に再度方向付け、そのためデータは、データに対する書き込み要求を受信したことに応答して、メモリアレイ３０１のバンク３０６又はバンクグループ３０４に「コピーバック」され得る。このように、データは、不必要な読み取り及び書き込みを実行する代わりに、ページレジスタ３０８に対する読み取り及び書き込みポインタを単純に操作することによって、ページレジスタを読み取り、メモリアレイ３０１にコピーバックすることができる。
【００７１】
同様に、一実施形態において、キャッシュ読み取りモジュール５０８は、読み取りポインタを、書き込みポインタ、例えば、現在のポインタ又は次のポインタ、によって指定されたデータに再度方向付け、そのためデータがメモリアレイ３０１に書き込まれるのを待ち、次いで読み取り要求コマンドを満たすためにメモリアレイ３０１からデータを戻して読み出す代わりに、読み取り要求コマンドに応答して、ページレジスタからデータを読み出すことができる。このように、読み取りポインタを操作することがより速く、より効率的となり得、そのためメモリアレイ３０１に書き込まれるように待ち行列に書き込まれるデータは、メモリアレイ３０１に書き込まれる前に、ページレジスタ３０８から読み取ることができる。
【００７２】
メモリセル３０２のバンク３０６に対する記憶動作コマンドを待ち行列に入れるためのページレジスタ３０８の部分６０６を使用する一実施形態を説明する。一実施形態において、コマンドモジュール４０２は、記憶動作コマンドを受信する。記憶動作コマンドを受信することに応答して、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対する、ページレジスタ３０８の部分６０６内の記憶場所６０２を判定する。上記のように、ページレジスタ３０８内の記憶場所６０２は、ページレジスタ３０８内の全ての利用可能な記憶場所のサブセット、一部、一部分などであってもよい。ページレジスタ３０８のサブセット６０６は、メモリアレイ３０１内のメモリセル３０２の特定のバンク３０６に関連付けられ得る。
【００７３】
一実施形態において、ポインタ管理モジュール５０２は、記憶動作コマンドに関連付けられたデータを記憶するように指定されたページレジスタ３０８内の記憶場所６０２に指定する１つ以上のポインタ６０４を維持する。例えば、コマンドモジュール４０２が、読み取り要求コマンドを受信する場合、ポインタ管理モジュール５０２は、どのポインタ６０４が読み取りポインタであるか、例えば、読み取りデータを記憶するための記憶場所６０２として指定され得る、記憶場所０に方向付けられたポインタ６０４であるかを判定してもよい。データモジュール４０６は、メモリアレイ３０１内のバンク３０６からの読み取り要求に対するデータを受信してもよく、読み取りポインタによって指定された記憶場所０内にデータを記憶してもよい。読み取りデータは、読み取り要求動作が、処理される記憶動作待ち行列内の次の列まで、記憶場所０内に残り得る（例えば、この特定の読み取り要求コマンドの前に処理され得る、読み取り又は書き込みコマンドがそれ以前に受信され得る）。
【００７４】
別の実施例において、コマンドモジュール４０２は、データをバンク３０６に書き込むための書き込みコマンドを受信してもよい。ポインタ管理モジュール５０２は、ページレジスタ３０８の部分６０６内の記憶場所６０２を指定する現在のポインタを判定し得る。現在のポインタが、有効なデータ、例えば、有効性ビットによって示されるように、処理されるために待ち行列に入れられるデータ、を含む記憶場所６０２を指定している場合、ポインタ管理モジュール５０２は、次いで、次の／待ち行列ポインタによって指定された記憶場所をチェックしてもよい。
【００７５】
更なる実施形態において、ポインタ管理モジュール５０２は、コマンドビットを維持し、これは設定されたときに、書き込みコマンドが現在のポインタによって参照されたデータを受信していることを示す。更なる実施形態において、ポインタ管理モジュール５０２は、書き込み動作が正常に完了したという指標を受信したことに応答して、コミットビットをリセットする。ポインタ管理モジュール５０２が、書き込み動作が失敗、又は別様に不成功（例えば、書き込みが不完全であった）と判定する場合、ポインタ管理モジュール５０２は、不成功ビットを設定し得、不成功ポインタが、現在のポインタによって現在参照されているデータを参照することを確実とし、現在のポインタ及び次のポインタをページレジスタ３０８の部分６０６内の待ち行列における、次の組のデータにシフトさせ得る。このように、再試行モジュール５０４は、不成功ポインタを維持することによって、書き込み動作が成功するまで、再試行の試みの閾値数が満たされるまで、など、不成功のポインタによって参照されたデータを使用して、今後のある時点で書き込み動作を試行することができる。いくつかの実施形態において、不成功ビットが設定されない場合、次いで、不成功ポインタは、現在のポインタと同じ記憶場所に、ＮＵＬＬの場所に、及び／又は同様のものに指定し得る。
【００７６】
一実施形態において、データモジュール４０６が新しいデータを受信するとき、ポインタ管理モジュール５０２は、データが現在のポインタによって参照される記憶場所６０２内、又は次のポインタによって参照される記憶場所内に記憶されるべきかどうかを判定する。この判定を行うために、ポインタ管理モジュール５０２は、現在のポインタに関連付けられたコミットビット及び有効性ビットをチェックしてもよい。有効性ビットが現在のポインタに設定され、現在のポインタによって参照されるデータが有効であることを示す場合、次いでデータモジュール４０６は、次のポインタによって参照される記憶場所６０２内にデータを記憶してもよい。同様に、コミットビットが設定され、現在のポインタによって参照されるデータを使用して書き込み動作が実行されていることを示す場合、データモジュール４０６は、次のポインタによって参照される記憶場所６０２内にデータを記憶してもよい。様々な実施形態において、現在のポインタ及び次のポインタ、又は１つ以上の次のポインタの各々が、有効性ビットによって示されるように、有効なデータを含み、ページレジスタ３０８の部分６０６内に利用可能な記憶場所６０２がない場合、ポインタ管理モジュール５０２及び／又はデータモジュール４０６は、エラーメッセージを送出する、送信するなどして、バンク３０６への書き込みのためのデータの記憶及び待ち行列に入れることにおけるエラーを示すことができる。
【００７７】
更に、上記のように、例解されたポインタ待ち行列は、典型的な先入れ先出し待ち行列として作用しなくてもよい。例えば、読み取りポインタは、常に記憶場所０を指定し得るが、現在のポインタ、次のポインタ、及び不成功ポインタは、様々な構成において記憶場所２、４、及び６を指定し得る。一実施例において、現在のポインタは、記憶場所２を参照し得、次のポインタは、記憶場所４を参照し得る。書き込み動作が、現在のポインタによって参照される記憶場所２におけるデータを使用して実行される場合、現在のポインタは、記憶場所４に再度方向付けられてもよく、次のポインタは、記憶場所６に再度方向付けられてもよい。しかしながら、書き込み動作が失敗する場合、不成功ポインタが、次いで、記憶場所２を参照し得る。別の書き込み動作が、現在のポインタによって参照される記憶場所４内のデータに対して受信される場合、現在のポインタは、記憶場所６に再度方向付けられてもよい。記憶場所２が不成功のポインタによって依然として参照される場合、次のポインタは、記憶場所４に再度方向付けられ得る。このため、ポインタ管理モジュール５０２は、ページレジスタ３０８の部分６０６内の記憶場所にいずれの特定の順序ではなく、例えば、書き込み動作が受信される順序を維持しながら、記憶場所６０２の可用性に対応する順序で、現在の／次の／利用不可能なポインタを方向付ける、及び再度方向付けてもよく、しかしながら、書き込み動作が以前に不成功に試みられた場合、再試行モジュール５０４は、現在の／次のポインタに関連付けられた書き込み動作の順序から外れて、データをバンク３０６に書き込むことを試みることができる。
【００７８】
記憶動作コマンドを待ち行列に入れるための方法７００の一実施形態を説明する。一実施形態において、方法７００が開始し、コマンドモジュール４０２が、メモリアレイ３０１の記憶場所のバンク３０４に関連付けられた記憶動作コマンドを受信する７０２。ある実施形態において、待ち行列モジュール４０４は、記憶動作コマンドに関連付けられたデータに対するページレジスタ３０８内の記憶場所を判定することによって、バンク３０６上で実行するための記憶動作コマンドを待ち行列に入れる７０４。ページレジスタ３０８内の記憶場所は、ページレジスタ３０８内の利用可能な記憶場所のサブセットを含み得る。更なる実施形態において、データモジュール４０６は、ページレジスタ３０８内の判定された記憶場所において、記憶動作コマンドに関連付けられたデータを記憶し７０６、方法７００は終了する。
【００７９】
記憶動作コマンドを待ち行列に入れるための方法８００の一実施形態を説明する。一実施形態において、方法８００が開始し、コマンドモジュール４０２が、読み取り動作、例えば、読み取り要求動作を受信８０２して、メモリアレイ３０１の１つ以上のバンク３０６からデータを読み出す。いくつかの実施形態において、データモジュール４０６は、メモリアレイ３０１の１つ以上のバンク３０４から読み取り要求のデータを読み取る８０４。
【００８０】
いくつかの実施形態において、待ち行列モジュール４０６は、データモジュール４０６が読み取り動作のデータを記憶することができるページバッファ３０８内の記憶場所を判定する８０６。一実施形態において、ポインタ管理モジュール５０２は、ページバッファ３０８内の読み取りデータの判定された記憶場所を指定するための読み取りポインタを更新する８０８。様々な実施形態において、ポインタ管理モジュール５０２は、読み取りデータが有効データであることを示す、読み取りデータに対する有効性ビットを設定する８１０。
【００８１】
更なる実施形態において、データモジュール４０６は、ページバッファ３０８内の読み取りポインタによって指定された記憶場所から読み取りデータを読み取り８１２、データを要求した記憶クライアント１１６に、読み取りデータを転送、伝達、コピー、送信、などを行う。一実施形態において、ポインタ管理モジュール５０２は、ページレジスタ３０８から読み取りデータが読み取られた８１２後に、有効性ビットをリセットし８１４、方法８００が終了する。
【００８２】
記憶動作コマンドを待ち行列に入れるための方法９００の一実施形態を説明する。一実施形態において、方法９００が開始し、コマンドモジュール４０２が、メモリアレイ３０１の１つ以上のバンク３０６にデータを書き込むための書き込み動作コマンドを受信する９０２。更なる実施形態において、データモジュール４０６は、メモリアレイ３０１に書き込まれるデータ及び／又はデータが書き込まれるメモリアレイ３０１内の１つ以上のアドレス等の、書き込み動作のためのデータを受信する９０４。
【００８３】
いくつかの実施形態において、待ち行列モジュール４０４は、書き込み要求に関連付けられたデータを待ち行列に入れるためのページバッファ３０８内の現在の記憶場所を判定する９０６。更なる実施形態において、ポインタ管理モジュール５０２は、データが記憶されるページバッファ３０８内の記憶場所を指定するために、現在のポインタ及び不成功ポインタを更新する９０８。一実施形態において、ポインタ管理モジュール５０２は、受信された次の記憶動作コマンドに関連付けられたデータに対するページバッファ３０８内の次の利用可能な記憶場所を指定するために、次のポインタを更新する９１０。
【００８４】
ある実施形態において、ポインタ管理モジュール５０２は、現在のポインタによって指定されたデータが有効であること、例えば、データがまだ処理されていないことを示すために、データに対する有効性ビットを設定する９１２。一実施形態において、データモジュール４０６は、ページレジスタ３０８内のデータをメモリアレイ３０１に書き込むための、書き込みコマンドを試みる９１４。ある実施形態において、ポインタ管理モジュール５０２は、現在のポインタによって指定されたデータを書き込む試みが成功したかどうかを判定する９１６。
【００８５】
一実施形態において、書き込みが成功する場合、ポインタ管理モジュール５０２は、次のポインタが現在指定しており、次のポインタを、次の利用可能な記憶場所又はメモリアレイ３０１に書き込まれるように待ち行列に入れられる次のデータに方向付けている、ページレジスタ３０８内の記憶場所に、現在のポインタを方向付けることによって現在のポインタ及び次のポインタを更新する９３０。いくつかの実施形態において、ポインタ管理モジュール５０２は、メモリアレイ３０１に書き込まれたページバッファ３０８内のデータに対する有効性ビットをリセットし９３２、本方法９００が終了する。
【００８６】
別の実施形態において、ポインタ管理モジュール５０２が、現在のポインタによって指定されたデータを書き込む試みが不成功であると判定する９１６場合、ポインタ管理モジュール５０２は、不成功ビットを設定し９１８、不成功ポインタ内に現在の記憶場所を保存する９２０。一実施形態において、再試行コマンドが受信されない場合９２２、ポインタ管理モジュール５０２は、現在のポインタ及び次のポインタを更新し９３０、本方法９００は、書き込みが成功したとして継続する。別の実施形態において、再試行コマンドがコントローラ２４４から受信された９２２場合、再試行モジュール５０４は、不成功ポインタによって指定されたデータをメモリアレイ３０１に書き込むことを再試行する９２４。
【００８７】
再試行モジュール５０４が書き込みの再試行９２４において成功する場合９２６、ポインタ管理モジュール５０２は、不成功ビットをリセットし９２８、現在のポインタ及び次のポインタを更新し９３０、本方法９００は継続する。再試行モジュール５０４が書き込みの再試行９２４において成功しない場合９２６、不成功ビットは、リセットされず、本方法９００は、（例えば、書き込みが成功したとして現在のポインタ及び次のポインタを更新する９３０ポインタ管理モジュール５０２を有して、又はコントローラ２４４から受信した９２２別の再試行コマンドを有して）継続する。ある実施形態において、コントローラ２４４は、書き込み試行の閾値数が満たされるなどするまで、データをメモリアレイ３０１に、成功するまで書き込むことを再試行９２４し続けるように、再試行モジュール５０４と連携してもよい。
【００８８】
様々な実施形態において、ページレジスタ３０８を使用して不揮発性記憶デバイスのメモリアレイ３０１に関連付けられた記憶動作コマンドをバッファリングするための手段は、コマンドモジュール４０２、待ち行列モジュール４０４、ポインタ管理モジュール５０２、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ３０８を使用して、不揮発性記憶デバイスのメモリアレイ３０１に関連付けられた記憶動作コマンドをバッファリングするための類似の又は同等の手段を含み得る。
【００８９】
様々な実施形態において、ページレジスタ３０８内の記憶動作コマンドに対するデータを記憶するための手段は、データモジュール４０６、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ３０８内の記憶動作コマンドに対するデータを記憶するための類似又は同等の手段を含んでもよい。
【００９０】
様々な実施形態において、記憶動作の少なくともサブセットに対して、ページレジスタ３０８内に記憶されたデータを処理するための手段は、コマンドモジュール４０２、データモジュール４０６、不揮発性記憶デバイスインターフェース１３９、不揮発性メモリ媒体コントローラ１２６、記憶クライアント１１６、ホストコンピューティングデバイス１１０、バス１２７、ネットワーク１１５、コントローラ（例えば、ダイコントローラ２２０、状態マシン２２２、コントローラ２４４、デバイスドライバなど）、センスアンプ２５０、電圧源、プロセッサ１１１、他の論理ハードウェア、及び／又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、記憶動作の少なくともサブセットに対して、ページレジスタ３０８内に記憶されたデータを処理するための類似の又は同等の手段を含んでもよい。
【００９１】
本開示は、その趣旨又は本質的な特徴から逸脱することなく、他の特定の形態で具現化されてもよい。記載された実施形態は、全ての点において、例示的なものに過ぎず、限定的ではないと見なされるべきである。したがって、本開示の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の意味及び等価範囲内に含まれる全ての変更は、それらの範囲内に包含されるものとする。
【国際調査報告】
2020502606.tif 000011
2020502606.tif 000012