本開示は、様々な実施形態において、記憶デバイスに関し、より具体的には、記憶デバイスのページレジスタを使用して、記憶コマンドを動的に待ち行列に入れることに関する。
メモリセルのアレイは、各サブアレイ上で独立して記憶動作を実施することができるように、様々なサブアレイに細分化され得る。しかしながら、特定のサブアレイ上でどの動作が実施されているかを追跡することは、中央の場所で管理することが困難であり得る。
記憶動作を待ち行列に入れるための装置が、提示される。一実施形態において、装置は、集積回路(「IC」)メモリ要素を含む。ICメモリ要素は、ある実施形態において、メモリ要素の記憶場所のバンクに関連付けられた記憶動作コマンドを受信する。更なる実施形態において、ICメモリ要素は、記憶動作コマンドに関連付けられたデータに対するページレジスタ内の記憶場所を判定することによって、記憶場所のバンク上で実行するための記憶動作コマンドを待ち行列に入れる。ページレジスタ内の記憶場所は、ページレジスタ内の利用可能な記憶場所のサブセットを含み得る。いくつかの実施形態において、ICメモリ要素は、ページレジスタ内の判定された記憶場所で記憶動作コマンドに関連付けられたデータを記憶する。
別の実施形態において、装置は、不揮発性記憶デバイスの複数のサブアレイに関連付けられた複数の記憶動作コマンドを、揮発性記憶デバイスのページレジスタを使用して、バッファリングするための手段を含む。更なる実施形態において、装置は、ページレジスタ内に複数の記憶動作コマンドに対するデータを記憶するための手段を含み、そのため複数の記憶動作コマンドの各々に対するデータが、ページレジスタ内に同時に記憶されるように、記憶動作コマンドの各々に対するデータは、ページレジスタのページサイズよりも小さい。一実施形態において、装置は、複数の記憶動作コマンドの少なくとも1つのサブセットに対して、ページレジスタ内に記憶されたデータを同時に処理するための手段を含む。
記憶動作を待ち行列に入れるためのシステムが、提示される。一実施形態において、システムは、ページバッファ及びコントローラを含む、不揮発性メモリ媒体を含む。ある実施形態において、コントローラは、不揮発性メモリ媒体に対する複数の記憶動作コマンドを受信するように構成される。複数の記憶動作コマンドの記憶動作コマンドは、不揮発性メモリ媒体の複数のサブアレイのうちの1つのサブアレイに対するものであり得る。別の実施形態において、コントローラは、複数の記憶動作コマンドに関連付けられたデータを同時に記憶するために、ページバッファ内の記憶場所を判定するように構成される。様々な実施形態において、コントローラは、少なくとも2つの記憶動作コマンドに関連付けられたページバッファ内に記憶されたデータを使用して、複数の記憶動作コマンドのうちの少なくとも2つを同時に実行するように構成される。
より具体的な説明が、添付の図面内に例解される特定の実施形態を参照して下記に含まれる。これらの図面は、本開示の特定の実施形態のみを示すものであり、したがって、その範囲を限定するものと見なされるべきではなく、本開示は、添付の図面を使用することを通じて、付加的な具体性及び詳細と共に記載及び説明される。
記憶管理モジュールを備えるシステムの一実施形態を例解する、模式的なブロック図である。
メモリ要素の一実施形態を例解する、模式的なブロック図である。
メモリ要素の別の実施形態を例解する、模式的なブロック図である。
記憶管理モジュールの一実施形態を例解する、模式的なブロック図である。
記憶管理モジュールの別の実施形態を例解する、模式的なブロック図である。
動的な記憶動作待ち行列の一実施形態を例解する、模式的なブロック図である。
記憶動作を待ち行列に入れるための方法の一実施形態を例解する、模式的なフローチャート図である。
記憶動作を待ち行列に入れるための方法の更なる実施形態を例解する、模式的なフローチャート図である。
記憶動作を待ち行列に入れるための方法の別の実施形態を例解する、模式的なフローチャート図である。
記憶動作を待ち行列に入れるための方法の更なる実施形態を例解する、模式的なフローチャート図である。
本開示の態様は、装置、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又はソフトウェア及びハードウェアの態様を組み合わせた実施形態の形態を採ることができ、概して、本明細書では全て「回路」、「モジュール」、「装置」、又は「システム」と称される場合がある。更に、本開示の態様は、コンピュータで読み取り可能な及び/又は実行可能なプログラムコードを記憶する1つ以上の非一時的コンピュータで読み取り可能な記憶媒体内に具現化された、コンピュータプログラム製品の形態を採ることができる。
本明細書に記載される機能ユニットの多くは、それらの実装独立性をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、カスタムVLSI回路若しくはゲートアレイ、論理チップ、トランジスタ、又は他の別個の構成要素等の市販の半導体を備えるハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。
モジュールはまた、様々なタイプのプロセッサによる実行のために、少なくとも部分的にソフトウェアにおいて実装されてもよい。実行可能なコードの識別されたモジュールは、例えば、オブジェクト、手順、又は機能として体系化され得るコンピュータ命令の1つ以上の物理的又は論理的ブロックを含み得る。それでもなお、識別されたモジュールの実行可能なファイルは、物理的に共に配置される必要はなく、論理的に共に結合されたときにモジュールを含み、モジュールに対する指定された目的を達成する、異なる場所内に記憶された異種命令を含んでもよい。
実際に、実行可能なコードのモジュールは、単一の命令、又は多くの命令を含んでもよく、いくつかの異なるコードセグメント上で、異なるプログラムの中で、いくつかのメモリデバイスなどにわたって分配さえされてもよい。モジュール又はモジュールの一部分がソフトウェアに実装される場合、ソフトウェア部分は、1つ以上のコンピュータで読み取り可能な及び/又は実行可能な記憶媒体上に記憶されてもよい。1つ以上のコンピュータで読み取り可能な記憶媒体の任意の組み合わせが、利用されてもよい。コンピュータで読み取り可能な記憶媒体としては、例えば、電子、磁気、光学、電磁、赤外線、又は半導体システム、装置、若しくはデバイス、及び前述の任意の好適な組み合わせが含まれ得るが、これらに限定されず、しかし、伝搬信号を含むことはないであろう。本文書の文脈において、コンピュータで読み取り可能な及び/又は実行可能な記憶媒体は、命令実行システム、装置、プロセッサ、又はデバイスによって、若しくはそれらに関連して使用するためのプログラムを含有又は記憶し得る、任意の有形及び/又は非一時的媒体であってもよい。
本開示の態様に対する動作を実行するためのコンピュータプログラムコードは、Python、Java(登録商標)、Smalltalk、C++、C#、Objective Cなど等のオブジェクト指向のプログラミング言語、「C」プログラミング言語、スクリプトプログラミング言語、及び/又は他の類似のプログラミング言語等の従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書き込まれてもよい。プログラムコードは、データネットワークなどを介して、1つ以上のユーザのコンピュータ上、及び/又はリモートコンピュータ若しくはサーバ上で部分的又は全体的に実行することができる。
本明細書で使用される場合、構成要素は、有形の物理的な非一時的デバイスを備える。例えば、構成要素は、カスタムVLSI回路、ゲートアレイ、若しくは他の集積回路を備えるハードウェア論理回路、論理チップ、トランジスタ、又は他の別個のデバイス等の市販の半導体、及び/若しくは他の機械的又は電気的デバイスとして実装されてもよい。構成要素はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。構成要素は、プリント回路基板(PCB)などの電気線を介して1つ以上の他の構成要素と電気通信する、1つ以上のシリコン集積回路デバイス(例えば、チップ、ダイ、ダイ平面、パッケージ)、又は他の別個の電気デバイスを備えてもよい。本明細書に記載されるモジュールの各々は、ある実施形態において、代替的に、構成要素によって具現化されるか、又は構成要素として実装されてもよい。
本明細書全体を通して、「一実施形態」、「ある実施形態」、又は実施形態に関連して記載された特定の特性、構造、又は特徴を意味する類似の文言への言及は、本開示の少なくとも1つの実施形態内に含まれる。このため、「一実施形態において」、「ある実施形態において」という句、及び本明細書全体にわたる類似の文言の出現は、必ずしも全て同じ実施形態を参照するわけではなく、別途明示的に指定されない限り、「1つ以上であるが全ての実施形態ではない」を意味する。「含む(including)」、「含む(comprising)」、「有する(having)」という用語、及びその変化形は、別途明示的に指定されない限り、「含むが、これらに限定されない」ことを意味する。項目を列挙したリストは、別途明示的に指定されない限り、項目のいずれか又は全てが相互に排他的及び/又は相互に包括的であることを意味するものではない。「a」、「an」、及び「the」という用語はまた、別途明示的に指定されない限り、「1つ以上」を指す。
本開示の態様は、本開示の実施形態に従う、方法、装置、システム、及びコンピュータプログラム製品の模式的なフローチャート図及び/又は模式的なブロック図を参照して以下に記載される。模式的なフローチャート図及び/又は模式的なブロック図の各々のブロック、並びに模式的なフローチャート図及び/又は模式的なブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータプログラム命令は、機械を製造するためのコンピュータ又は他のプログラム可能なデータ処理装置のプロセッサに提供されてもよく、そのため、プロセッサ又は他のプログラム可能なデータ処理装置を介して実行する命令は、模式的なフローチャート図及び/又は模式的なブロック図のブロック又は複数のブロックにおいて指定された機能及び/又は作用を実装するための手段を生成する。
また、いくつかの代替的な実装において、ブロック内に記された機能は、図内に記された順序から外れて行われ得ることに留意されたい。例えば、連続して示される2つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、関与する機能に応じて逆順序で実行されてもよい。例解された図の1つ以上のブロック、又はそれらの部分と機能、論理、又は効果が同等である、他の工程及び方法が、着想され得る。フローチャート及び/又はブロック図で、様々な矢印タイプ及び線タイプが用いられ得るが、それらは対応する実施形態の範囲を限定するものではないことが理解される。例えば、矢印は、図示された実施形態の列挙された工程間の指定されていない持続時間の待機期間又は監視期間を示してもよい。
以下のより詳細な説明において、その一部を形成する添付図面を参照する。前述の概要は、例解的なものに過ぎず、いかようにも限定することを意図するものではない。上記の例解的な態様、実施形態、及び特徴に加えて、更なる態様、実施形態、及び特徴が、図面及び以下の詳細な説明を参照することによって明らかとなるであろう。各図における要素の説明は、先の図の要素を参照し得る。同様の数字は、同様の要素の代替的な実施形態を含む、図面中の同様の要素を指し得る。
図1は、記憶管理モジュール150を備えるシステム100の一実施形態のブロック図である。記憶管理モジュール150は、不揮発性メモリコントローラ124、不揮発性メモリ媒体コントローラ126、デバイスドライバ、又は記憶管理層(SML)130などのうちの1つ以上の一部であってもよく、かつ/若しくはそれらと通信してもよい。記憶管理モジュール150は、プロセッサ111と、揮発性メモリ112と、通信インターフェース113とを備え得る、コンピューティングデバイス110の不揮発性メモリシステム102上で動作し得る。プロセッサ111は、1つ以上の中央処理ユニット、1つ以上の汎用プロセッサ、1つ以上の特定用途向けプロセッサ、1つ以上の仮想プロセッサ(例えば、コンピューティングデバイス110は、ホスト内で動作するバーチャルマシンであってもよい)、1つ以上のプロセッサコアなどを備え得る。通信インターフェース113は、コンピューティングデバイス110及び/又は不揮発性メモリコントローラ124を、インターネットプロトコルネットワーク、ストレージエリアネットワークなど等の通信ネットワーク115に通信可能に結合するように構成された、1つ以上のネットワークインターフェースを含んでもよい。
コンピューティングデバイス110は、非一時的なコンピュータで読み取り可能な記憶媒体114を更に備えてもよい。コンピュータで読み取り可能な記憶媒体114は、コンピューティングデバイス110(例えば、プロセッサ111)に本明細書に開示された方法のうちの1つ以上の工程を実施させるように構成された実行可能な命令を含み得る。代替的に、又は付加的に、記憶管理モジュール150は、非一時的な記憶媒体114上に記憶された1つ以上のコンピュータで読み取り可能な命令として具現化されてもよい。
不揮発性メモリシステム102は、図示された実施形態において、記憶管理モジュール150を含む。一実施形態において、記憶管理モジュール150は、メモリ要素に関連付けられたページレジスタ内の記憶場所のサブセットを使用して、メモリ要素、揮発性及び/又は不揮発性に対する記憶動作を待ち行列に入れるように構成される。例えば、不揮発性記憶デバイスが通常の「NAND」モードで動作しているとき、フルページのデータは、読み取り又は書き込み動作等の記憶動作を実施するときにページレジスタ内に記憶され得る。一方、本明細書に記載されるように、不揮発性記憶デバイスが、「バースト」モードで動作しているとき、フルページのデータよりも小さいアクセスユニットを有する場合があり、複数の記憶動作が、メモリ要素のバンク上で実施される記憶動作に関連付けられたデータを記憶するために、ページレジスタのサブセットを使用し、実行のための待ち行列に入れられ得る。
一実施形態において、記憶管理モジュール150は、プロセッサ111上での実行のためにコンピュータで読み取り可能な記憶媒体114上に記憶された、デバイスドライバ、SML 130など等の実行可能なソフトウェアコードを含み得る。別の実施形態において、記憶管理モジュール150は、不揮発性メモリ媒体コントローラ126、不揮発性メモリコントローラ124、デバイスコントローラ、フィールドプログラマブルゲートアレイ(FPGA)又は他のプログラム可能なロジック、FPGA又は他のプログラム可能なロジックに対するファームウェア、マイクロコントローラ上の実行に対するマイクロコード、特定用途向け集積回路(ASIC)など等の、1つ以上の不揮発性メモリデバイス120のロジックハードウェアを備え得る。更なる実施形態において、記憶管理モジュール150は、実行可能なソフトウェアコード及び論理ハードウェアの両方の組み合わせを含み得る。
一実施形態において、記憶管理モジュール150は、バス125などを介してSML 130から記憶要求を受信するように構成される。記憶管理モジュール150は、バス125を介して、SML 130及び/又は記憶クライアント116に/からデータを転送するように更に構成されてもよい。したがって、いくつかの実施形態において、記憶管理モジュール150は、記憶要求及び関連データの転送を容易にするために、1つ以上のダイレクトメモリアクセス(DMA)モジュール、リモートDMAモジュール、バスコントローラ、ブリッジ、バッファなどを含んでもよく、かつ/又はそれらと通信してもよい。別の実施形態において、記憶管理モジュール150は、記憶クライアント116からのAPIコールとして、IO−CTLコマンドとして、などの記憶要求を受信し得る。記憶管理モジュール150は、図4及び図5に関して下記により詳細に記載される。
様々な実施形態に従って、記憶管理モジュール150を備える不揮発性メモリコントローラ124は、1つ以上の不揮発性メモリデバイス120を管理することができる。不揮発性メモリデバイス(複数可)120は、複数のアドレス指定可能な媒体記憶場所に配置及び/又は分配されたソリッドステート記憶デバイス(複数可)等の、記録、メモリ、及び/又は記憶デバイスを備え得る。本明細書で使用される場合、媒体記憶場所は、メモリの任意の物理的な単位(例えば、不揮発性メモリデバイス120上の任意の量の物理的な記憶媒体)を指す。メモリユニットは、ページ、メモリ分割、消去ブロック、セクタ、ブロック、集合、又は物理的な記憶場所一式(例えば、以下に記載される論理ページ、論理消去ブロック)などを含み得るが、これらに限定されない。
不揮発性メモリコントローラ124は、1つ以上の記憶クライアント116に論理アドレス空間134を提示し得る、SML 130を含んでもよい。SMLの一例は、SanDisk Corporation Milpitas,CaliforniaのVirtual Storage Layer(登録商標)である。代替的に、各不揮発性メモリデバイス120は、論理アドレス空間134を記憶クライアント116に提示し得る、不揮発性メモリ媒体コントローラ126を備え得る。本明細書で使用される場合、論理アドレス空間134は、メモリリソースの論理表現を指す。論理アドレス空間134は、複数の論理アドレス(例えば、範囲)を含んでもよい。本明細書で使用される場合、論理アドレスは、論理ブロックアドレス(LBA)、シリンダ/ヘッド/セクタ(CHS)アドレス、ファイル名、オブジェクト識別子、inode、Universally Unique Identifier(UUID)、Globally Unique Identifier(GUID)、ハッシュコード、署名、インデックスエントリ、範囲、大きさなどを含むが、これらに限定されない、メモリリソース(例えば、データ)を参照するための任意の識別子を指す。
SML 130は、転送インデックス等のメタデータ135を維持して、論理アドレス空間134の論理アドレスを不揮発性メモリデバイス(複数可)120上の媒体記憶場所にマッピングしてもよい。SML 130は、論理アドレスから物理的な記憶リソースへの任意の多対多(any-to-any)マッピングを提供してもよい。本明細書で使用される場合、「多対多」マッピングは、任意の論理アドレスを任意の物理的記憶リソースにマッピングすることができる。したがって、論理アドレスと特定の媒体記憶場所及び/又は媒体アドレスとの間に、予め定義された並びに/若しくは事前設定されたマッピングは存在しない場合がある。本明細書で使用される場合、媒体アドレスは、1つのメモリリソースを別のメモリリソースから、複数のメモリリソースを管理するコントローラに固有に識別するメモリリソースのアドレスを指す。例として、媒体アドレスは、媒体記憶場所のアドレス、物理的なメモリユニット、物理的なメモリユニット(例えば、論理メモリユニット)の集合、メモリユニットの一部分(例えば、論理メモリユニットアドレス及びオフセット、範囲、及び/又は大きさ)などを含むが、これらに限定されない。したがって、SML 130は、任意のサイズ及び/又は精度の物理的なデータリソースに論理アドレスをマッピングすることができ、不揮発性メモリデバイス(複数可)120の基礎となるデータ分配スキームに対応し得、又は対応しなくてもよい。例えば、いくつかの実施形態において、不揮発性メモリコントローラ124は、複数の物理的なメモリユニットを論理的に組み合わせることによって形成される論理メモリユニット内にデータを記憶するように構成され、これにより、不揮発性メモリコントローラ124が、多くの異なる仮想メモリユニットのサイズ及び/又は精度を支持することを可能にし得る。
本明細書で使用される場合、論理メモリ要素は、(例えば、I/O及び/若しくは制御バスを介して)並行して管理されるか、又は管理することができる、一組の2つ以上の不揮発性メモリ要素を指す。論理メモリ要素は、論理ページ、論理メモリ分割(例えば、論理消去ブロック)など等の、複数の論理メモリユニットを含み得る。本明細書で使用される場合、論理メモリユニットは、2つ以上の物理的なメモリユニットを組み合わせた論理的構造体を指し、各物理的なメモリユニットが、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある(例えば、各不揮発性メモリ要素が並行してアクセス可能である)。本明細書で使用される場合、論理メモリ分割は、一組の2つ以上の物理的なメモリ分割を指し、各物理的なメモリ分割が、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある。
SML 130によって提示された論理アドレス空間134は、論理容量を有し得、論理アドレス空間134内の利用可能な論理アドレスの数、並びに論理アドレスによって参照されるデータのサイズ及び/又は精度に対応し得る。例えば、2^32の固有論理アドレスを含む論理アドレス空間134の論理容量は、各々が2048バイト(2KiB)のデータを参照し、2^43バイトであり得る。本明細書で使用される場合、キビバイト(KiB)は、1024バイトを指す。いくつかの実施形態において、論理アドレス空間134は、シンプロビジョニングされてもよい。本明細書で使用される場合、「シンプロビジョニングされた」論理アドレス空間134は、基礎となる不揮発性メモリデバイス(複数可)120の物理的な容量を超える論理容量を有する論理アドレス空間134を指す。例えば、SML 130は、記憶クライアント116に対して64ビットの論理アドレス空間134を提示し得(例えば、64ビットの論理アドレスによって参照される論理アドレス空間134)、これは基礎となる不揮発性メモリデバイス120の物理的な容量を超えてもよい。大きな論理アドレス空間134は、名前付けの競合の可能性を低減しながら、記憶クライアント116が、論理アドレスの連続範囲を割り当てること及び/又は参照することを可能にし得る。SML 130は、論理アドレス空間134を基礎となる物理的な記憶デバイス120から独立して管理するために、論理アドレスと物理的な記憶リソースとの間の多対多マッピングを活用することができる。例えば、SML 130は、必要に応じて、記憶クライアント116によって使用される論理アドレスを変更することなく、物理的な記憶リソースをシームレスに追加及び/又は除去し得る。
不揮発性メモリコントローラ124は、コンテキスト形式でデータを記憶するように構成されてもよい。本明細書で使用される場合、コンテキスト形式は、持続的コンテキストメタデータが物理的な記憶媒体122上のデータを有して記憶される、自己記述型データ形式を指す。持続的コンテキストメタデータは、記憶されるデータに対するコンテキストを提供する。ある実施形態において、持続的コンテキストメタデータは、持続的コンテキストメタデータが記憶されているデータを個別に識別する。例えば、持続的コンテキストメタデータは、記憶クライアント116が所有するデータのセクタ又はブロックを、記憶クライアント116によって所有される他のセクタ又はデータブロックから個別に識別し得る。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される一連の動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データのセキュリティ制御、データタイプ、又はデータの他の属性を識別する。ある実施形態において、持続的コンテキストメタデータは、データタイプ、固有データ識別子、動作、及びデータ上で実施される一連の動作を含む複数の態様のうちの少なくとも1つを識別する。
持続的コンテキストメタデータは、データの論理アドレス、データの識別子(例えば、ファイル名、オブジェクトid、ラベル、固有識別子など)、他のデータ(例えば、データが他のデータに関連付けられていることのインジケータ)への参照(複数可)、他のデータ(例えば、ファイルオフセットなど)に対するデータの相対位置又はオフセット、データサイズ及び/又は範囲などを含み得るが、これらに限定されない。コンテキストデータ形式は、データセグメント及び1つ以上のヘッダを含む、パケット形式を含んでもよい。代替的に、コンテキストデータ形式は、データを、他の方法で(例えば、不揮発性メモリ媒体122上の専用インデックス内、メモリ分割インデックス内など)でコンテキスト情報と関連付けることができる。
いくつかの実施形態において、コンテキストデータ形式は、データコンテキストが、不揮発性メモリ媒体122のコンテキストに基づいて、及び上記の任意の多対多マッピング等の他のメタデータから独立して、判定及び/又は再構成することを可能にし得る。データの媒体場所は、データの論理アドレスから独立しているため、データのコンテキストを媒体場所又はデータの媒体アドレスのみに基づいて判定することは非効率的又は不可能であり得る。不揮発性メモリ媒体122上にデータをコンテキスト形式で記憶することは、他のメタデータを参照することなく、データコンテキストを判定することを可能にし得る。例えば、コンテキストデータ形式は、不揮発性メモリ媒体122のコンテンツにのみ基づいて、メタデータを再構成することを可能にし得る(例えば、論理アドレスと媒体場所との間の多対多マッピングを再構成する)。
いくつかの実施形態において、不揮発性メモリコントローラ124は、ソリッドステート記憶媒体等の、1つ以上の非対称の追記型媒体122上にデータを記憶するように構成され得る。本明細書で使用される場合、「追記型」記憶媒体は、新しいデータが書き込まれるか、又はその上にプログラムされるたびに再初期化される(例えば、消去される)記憶媒体を指す。本明細書で使用される場合、「非対称」記憶媒体は、異なる記憶動作に対する異なるレイテンシを有する記憶媒体122を指す。多くのタイプのソリッドステート記憶媒体は、非対称であり、例えば、読み取り動作は、書き込み/プログラム動作よりもはるかに速くてもよく、書き込み/プログラム動作は、消去動作よりもはるかに速くてもよい(例えば、媒体を読み出すことは、消去よりも数百倍速く、媒体をプログラミングするよりも数十倍速くてもよい)。
メモリ媒体122は、とりわけ、媒体122などの非対称特性を考慮するために、グループ(例えば、消去ブロック)として消去することができるメモリ分割に分配され得る。そのため、単一のデータセグメントを定位置に変更することは、データを含む消去ブロック全体を消去すること、及び修正されたデータを、元の変更されていないデータと共に消去ブロックに再度書き込むことを必要とし得る。これは、媒体122を過度に摩耗させ得る非効率的な「書き込み増幅」をもたらし得る。したがって、いくつかの実施形態において、不揮発性メモリコントローラ124は、定位置から外してデータを書き込むように構成され得る。本明細書で使用される場合、データを「定位置から外して」書き込むことは、データを「定位置で」上書きする(例えば、データの元の物理的な場所を上書きする)のではなく、異なる媒体記憶場所(複数可)にデータを書き込むことを指す。データを定位置から外して修正することは、修正されるべきデータを有する消去ブロック上の既存の有効なデータが、消去及び再コピーされる必要がないため、書き込み増幅を回避し得る。その上、定位置から外してデータを書き込むことは、多くの記憶動作のレイテンシ経路から消去することを除去し得る(例えば、消去レイテンシは、もはや書き込み動作のクリティカルパスの一部ではない)。
不揮発性メモリコントローラ124は、記憶動作に対応するための通常の経路(例えば、記憶動作を実施する及び/又は記憶要求に対応するための「経路」)の外で動作する1つ以上のプロセスを含んでもよい。本明細書で使用される場合、「記憶要求に対応するための経路」又は「記憶動作に対応するための経路」(「クリティカルパス」とも称される)は、読み取り、書き込み、修正など等の記憶動作又は要求に対応するために必要な一連の処理動作を指す。記憶要求に対応するための経路は、記憶クライアント116から要求を受信することと、要求の論理アドレスを識別することと、不揮発性メモリ媒体122上で1つ以上の記憶動作を実施することと、応答又はデータ等の結果を返すことと、を含み得る。記憶要求に対応するための経路の外側で発生するプロセスは、グルーマ、重複排除などを含み得るが、これらに限定されない。これらのプロセスは、それらが他の記憶動作及び/又は要求の性能を妨害又は影響しないように、自律的かつバックグラウンドで実施されてもよい。したがって、これらのプロセスは、記憶要求に対応することから独立して動作し得る。
いくつかの実施形態において、不揮発性メモリコントローラ124は、ガベージコレクション又は他の記憶容量回復プロセスを使用して、再使用に対するメモリ分割(例えば、論理的又は物理的消去ブロック)を再利用するように構成されている、グルーマを含む。不揮発性メモリコントローラ124によって実装された定位置を外れたパラダイムの書き込みは、不揮発性メモリ媒体122上に残る不明瞭な又は無効なデータをもたらし得る。例えば、データYでデータXを上書きすることは、(例えば、定位置にXを上書きするのではなく)新しいメモリ分割上にYを記憶すること、及びデータの有効な最新版としてYを識別するために、メタデータの多対多マッピングを更新することをもたらし得る。上記のように、Xを消去することは、全メモリ分割を消去することを伴う場合があり、これは時間がかかる動作であり、書き込み増幅をもたらし得るため、データXの不明瞭なバージョンは、無効としてマーキングされ得るが、すぐに除去(例えば、消去)されない。同様に、これ以上使用されないデータ(例えば、削除又はトリミングされたデータ)は、直ちに除去されなくてもよい。不揮発性メモリ媒体122は、相当量の無効データを蓄積し得る。
グルーマプロセスは、記憶動作に対応するためのクリティカルパスの外側で動作することができる。グルーマプロセスは、他の記憶動作のために再使用することができるように、メモリ分割を再利用してもよい。本明細書で使用される場合、メモリ分割を再利用することは、メモリ分割を消去することを指し、そのため新しいデータがその上に記憶/プログラムされ得る。メモリ分割を再利用することは、メモリ分割上の有効データを新しい場所に再配置することを含み得る。グルーマは、メモリ分割内の無効データの量、メモリ分割内の有効データの量、メモリ分割時の摩耗(例えば、消去サイクル数)、メモリ分割がプログラムされているか又はリフレッシュされてからの時間などを含み得るが、これらに限定されない、1つ以上の要因に基づいた再利用に対するためのメモリ分割を識別し得る。
不揮発性メモリコントローラ124は、データをログ形式で記憶するように更に構成されてもよい。上記のように、ログ形式は、不揮発性メモリ媒体122上で実施される記憶動作の順序付けられたシーケンスを定義するデータ形式を指す。いくつかの実施形態において、ログ形式は、不揮発性メモリ媒体122の媒体アドレスの所定のシーケンス内に(例えば、媒体122の連続ページ及び/又は消去ブロック内に)データを記憶することを含む。ログ形式は、データ(例えば、各パケット又はデータセグメント)をそれぞれのシーケンスインジケータと関連付けることを更に含んでもよい。シーケンスインジケータは、個別に(例えば、各データパケットに適用される)データに、及び/又はデータグループ(例えば、消去ブロック等のメモリ分割上に連続的に記憶されたパケット)に適用され得る。いくつかの実施形態において、メモリ分割が上記のように再利用される(例えば、消去される)とき、及び/又はメモリ分割がデータを記憶するために最初に使用されるときに、シーケンスインジケータがメモリ分割に適用されてもよい。
いくつかの実施形態において、ログ形式は、「追加専用」パラダイム内にデータを記憶することを含み得る。以下に記載されるログ記憶モジュール137などを使用する不揮発性メモリコントローラ124は、不揮発性メモリデバイス120の媒体アドレスで現在の追加ポイントを維持し得る。追加ポイントは、現在のメモリ分割及び/又はメモリ分割内のオフセットであってもよい。次いで、データは、追加ポイントから連続的に追加され得る。したがって、データの連続的順序付けは、メモリ分割内のデータのシーケンスと組み合わせたデータのメモリ分割のシーケンスインジケータに基づいて判定され得る。メモリ分割の終了に達すると、不揮発性メモリコントローラ124は、「次の」利用可能なメモリ分割(例えば、初期化され、データを記憶する準備が整っている次のメモリ分割)を識別し得る。グルーマは、データが引き続き媒体ログに追加され得ることを確実とするために、無効、停滞、及び/又は削除されたデータを含むメモリ分割を再利用し得る。
本明細書に記載されるログ形式は、有効データが不揮発性メモリ媒体122のコンテンツに基づいて、及び他のメタデータから独立して、無効データと区別されることを可能にし得る。上記のように、無効データは、データを含むメモリ分割が再利用されるまで、不揮発性メモリ媒体122から除去されなくてもよい。したがって、同じコンテキストを有するデータの複数の「バージョン」は、不揮発性メモリ媒体122上に存在し得る(例えば、同じ論理アドレスを有する複数のバージョンのデータ)。データに関連付けられたシーケンスインジケータは、データの現在の最新バージョンから、データの無効バージョンを区別するために使用されてもよく、ログにおける直近のデータは、現在のバージョンであり、前のバージョンは無効として識別されてもよい。
記憶管理層130は、1つ以上の記憶クライアント116に記憶サービスを提供するように構成されてもよい。記憶クライアント116は、コンピューティングデバイス110上で動作するローカル記憶クライアント116、及び/又はネットワーク115並びに/若しくはネットワークインターフェース113を介してアクセス可能なリモート記憶クライアント116を含んでもよい。記憶クライアント116は、動作システム、ファイルシステム、データベースアプリケーション、サーバアプリケーション、カーネルレベルプロセス、ユーザレベルプロセス、アプリケーションなどを含み得るが、これらに限定されない。
記憶管理層130は、1つ以上の不揮発性メモリデバイス120を備え、及び/又はそれに通信可能に結合される。1つ以上の不揮発性メモリデバイス120は、ソリッドステート記憶デバイス、ハードドライブ、SAN記憶リソースなどを含む、異なるタイプの不揮発性メモリデバイスを含み得るが、これらに限定されない。1つ以上の不揮発性メモリデバイス120は、1つ以上のそれぞれの不揮発性メモリ媒体コントローラ126及び不揮発性メモリ媒体122を含み得る。図1に例解されるように、SML 130は、従来のブロックI/Oインターフェース131を介して1つ以上の不揮発性メモリデバイス120へのアクセスを提供し得る。付加的に、SML 130は、SMLインターフェース132を通じて強化された機能(例えば、大きい仮想アドレス空間134)へのアクセスを提供し得る。メタデータ135は、ブロックI/Oインターフェース131、SMLインターフェース132、キャッシュインターフェース133、又は他の関連インターフェースのうちのいずれかを通じて実施される記憶動作を管理及び/又は追跡するために使用され得る。
キャッシュインターフェース133は、記憶管理層130を介してアクセス可能なキャッシュ固有の特徴を見せ得る。また、いくつかの実施形態において、記憶クライアント116に提示されるSMLインターフェース132は、1つ以上の不揮発性メモリデバイス120及び/又は1つ以上の不揮発性メモリ媒体コントローラ126によって実装されるデータ変換へのアクセスを提供する。
SML 130は、ブロックI/Oインターフェース、拡張記憶管理層インターフェース、キャッシュインターフェースなどを含み得るが、これらに限定されない、1つ以上のインターフェースを通じて記憶サービスを提供し得る。SML 130は、1つ以上のインターフェースを通じて、記憶クライアント116に論理アドレス空間134を提示し得る。上記のように、論理アドレス空間134は、複数の論理アドレスを含み得、各々が1つ以上の不揮発性メモリデバイス120上のそれぞれの媒体場所に対応する。SML 130は、上記のように、論理アドレスと媒体場所との間の多対多マッピングを含むメタデータ135を維持し得る。
SML 130は、コンテキストに応じたログ形式においてデータを記憶するように構成されたログ記憶モジュール137を更に備え得る。コンテキストに応じたログデータ形式は、データをデータの論理アドレスなど等の持続的コンテキストメタデータと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、1つ以上の不揮発性メモリデバイス120上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体122上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。
SML 130は、データ、コマンド、及び/又はクエリを、周辺構成要素相互接続エクスプレス(PCIエクスプレス又はPCIe)バス、シリアルアドバンストテクノロジアタッチメント(ATA)バス、パラレルATAバス、小型コンピュータシステムインターフェース(SCSI)、ファイヤワイヤ、ファイバチャネル、ユニバーサルシリアルバス(USB)、PCIeアドバンストスイッチング(PCIe−AS)バス、ネットワーク115、インフィニバンド、SCSI RDMA等を含み得るが、これらに限定されない、バス125にわたって1つ以上の不揮発性メモリデバイス120に転送するように構成された不揮発性メモリデバイスインターフェース139を更に含み得る。不揮発性メモリデバイスインターフェース139は、入出力制御(IO−CTL)コマンド(複数可)、IO−CTLコマンド延長部(複数可)、リモートダイレクトメモリアクセスなどを使用して、1つ以上の不揮発性メモリデバイス120と通信し得る。
通信インターフェース113は、コンピューティングデバイス110及び/又は不揮発性メモリコントローラ124をネットワーク115に、及び/又は1つ以上のリモートの、ネットワークアクセス可能な記憶クライアント116に通信可能に結合するように構成された1つ以上のネットワークインターフェースを備えてもよい。記憶クライアント116は、コンピューティングデバイス110上で動作するローカル記憶クライアント116、及び/又はネットワーク115並びに/若しくはネットワークインターフェース113を介してアクセス可能なリモート記憶クライアント116を含んでもよい。不揮発性メモリコントローラ124は、1つ以上の不揮発性メモリデバイス120を備える。図1は、単一の不揮発性メモリデバイス120を図示するが、本開示は、この点に関して限定されず、いずれの数の不揮発性メモリデバイス120を組み込むように適合され得る。
不揮発性メモリデバイス120は、NANDフラッシュメモリ、NORフラッシュメモリ、ナノランダムアクセスメモリ(ナノRAM又はNRAM)、ナノ結晶ワイヤベースメモリ、シリコン酸化物ベースのサブ10ナノメートルプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン(SONOS)、抵抗ラム(RRAM(登録商標))、プログラム可能メタライゼーションセル(PMC)、導電性架橋RAM(CBRAM)、磁気抵抗RAM(MRAM)、ダイナミックRAM(DRAM)、相変化RAM(PRAM又はPCM)、磁気記憶媒体(例えば、ハードディスク、テープ)、光学記憶媒体など、を含み得るが、これらに限定されない、不揮発性メモリ媒体122を備えてもよい。不揮発性メモリ媒体122は、本明細書中で「メモリ媒体」として称されるが、様々な実施形態において、不揮発性メモリ媒体122は、より一般的に、不揮発性メモリ媒体、不揮発性記憶媒体などと称され得る、データを記録することが可能な不揮発性記録媒体を備えてもよい。更に、様々な実施形態において、不揮発性メモリデバイス120は、不揮発性記録デバイス、不揮発性メモリデバイス、不揮発性記憶デバイスなどを含み得る。
不揮発性メモリ媒体122は、チップ、パッケージ、平面、ダイなどを含み得るが、これらに限定されない、1つ以上の不揮発性メモリ要素123を備えてもよい。不揮発性メモリ媒体コントローラ126は、不揮発性メモリ媒体122上の記憶動作を管理するように構成されてもよく、1つ以上のプロセッサ、プログラム可能なプロセッサ(例えば、フィールドプログラマブルゲートアレイ)などを含んでもよい。いくつかの実施形態において、不揮発性メモリ媒体コントローラ126は、上記のコンテキストに応じたログ形式で不揮発性メモリ媒体122上にデータを記憶及び/又は不揮発性メモリ媒体122からデータを読み取り、不揮発性メモリデバイス120などに/からデータを転送するように構成される。
不揮発性メモリ媒体コントローラ126は、バス127によって不揮発性メモリ媒体122に通信可能に結合され得る。バス127は、不揮発性メモリ要素123に/からデータを通信するためのI/Oバスを含んでもよい。バス127は、アドレス指定及び他のコマンド並びに制御情報を不揮発性メモリ要素123に通信するための制御バスを更に含んでもよい。いくつかの実施形態において、バス127は、不揮発性メモリ要素123を不揮発性メモリ媒体コントローラ126に並行して、通信可能に結合し得る。この並行アクセスは、不揮発性メモリ要素123がグループとして管理されることを可能にし、論理メモリ要素129を形成することができる。上述のように、論理メモリ要素は、それぞれの論理メモリユニット(例えば、論理ページ)及び/又は論理メモリ分割(例えば、論理消去ブロック)に分配されてもよい。論理メモリユニットは、不揮発性メモリ要素の各々の物理的なメモリユニットを論理的に組み合わせることによって形成され得る。例えば、不揮発性メモリ媒体122が25の不揮発性メモリ要素を含む場合、各論理メモリユニットは、25ページ(例えば、不揮発性メモリ媒体122の各要素のページ)を備え得る。
不揮発性メモリコントローラ124は、SML 130及び不揮発性メモリ媒体コントローラ126を備え得る。SML 130は、1つ以上のインターフェース131、132、及び/又は133を介して記憶クライアント116に記憶サービスを提供してもよい。いくつかの実施形態において、SML 130は、ブロックデバイスI/Oインターフェース131を提供し、それを通じて記憶クライアント116がブロックレベルI/O動作を実施する。代替的に又は付加的に、SML 130は、記憶管理層(SML)インターフェース132を提供し得、記憶クライアント116に他の記憶サービスを提供し得る。いくつかの実施形態において、SMLインターフェース132は、ブロックデバイスインターフェース131への延長部を備え得る(例えば、記憶クライアント116は、ブロックデバイスインターフェース131への延長部を通じてSMLインターフェース132にアクセスしてもよい)。代替的に又は付加的に、SMLインターフェース132は、別個のAPI、サービス、及び/又はライブラリとして提供されてもよい。SML 130は、不揮発性メモリシステム102を使用してデータをキャッシュするためのキャッシュインターフェース133を提供するように更に構成され得る。
上記のように、SML 130は、論理アドレス空間134を記憶クライアント116に(例えば、インターフェース131、132、及び/又は133を通じて)提示し得る。SML 130は、論理アドレス空間134内の論理アドレスと不揮発性メモリデバイス120上の媒体場所との間の多対多マッピングを含む、メタデータ135を維持し得る。メタデータ135は、論理アドレス空間134内の論理アドレス、及び不揮発性メモリデバイス120上の媒体場所をマッピングするエントリを有する論理から物理マッピング構造を含み得る。一実施形態において、メタデータ135の論理から物理マッピング構造は、不揮発性メモリデバイス120がデータを記憶する論理アドレスに対するエントリを有して、及び不揮発性メモリデバイス120が現在データを記憶していない論理アドレスに対するエントリのない状態で、まばらに投入される。ある実施形態において、メタデータ135は、ブロックとしてデータを管理するSML 130を伴い、ブロックレベルでデータを追跡する。
不揮発性メモリシステム102は、ログ記憶モジュール137を更に備えてもよく、これは上記のように、コンテキストに応じたログ形式で不揮発性メモリデバイス120上にデータを記憶するように構成され得る。コンテキストに応じたログデータ形式は、データを不揮発性メモリ媒体122上の論理アドレスと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、不揮発性メモリ媒体122上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体122上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。不揮発性メモリコントローラ124は、上記のように、データ、コマンド、及び/又はクエリを、バス125にわたって不揮発性メモリ媒体コントローラ126に転送するように構成される、不揮発性メモリデバイスインターフェース139を更に備えてもよい。
図2は、1つ以上のメモリダイ又はチップ212を含み得る不揮発性記憶デバイス210の実施形態を図示する。不揮発性記憶デバイス210は、図1を参照して説明された不揮発性メモリデバイス120と実質的に類似し得る。いくつかの実施形態において、メモリダイ212は、メモリセル、ダイコントローラ220、及び読み取り/書き込み回路230A/230Bのアレイ200(二次元又は三次元)を含む。一実施形態において、様々な周辺回路によるメモリアレイ200へのアクセスは、アレイの反対側の側面上で、対称的に実装され、そのため各側面上のアクセスライン及び回路の密度が半分に低減される。読み取り/書き込み回路230A/230Bは、更なる実施形態において、メモリセルのページが並行して読み取り又はプログラムされることを可能にする複数の感知ブロック250を含む。
様々な実施形態において、メモリアレイ200は、行デコーダ240A/240Bを介したワード線、及び列デコーダ242A/242Bを介したビット線によってアドレス指定可能である。いくつかの実施形態において、コントローラ244は、1つ以上のメモリダイ212と同じメモリデバイス210(例えば、可動式記憶カード又はパッケージ)内に含まれる。コマンド及びデータは、線232を介してホストとコントローラ244との間で、線234を介してコントローラと1つ以上のメモリダイ212との間で転送される。一実装例は、複数のチップ212を含むことができる。
一実施形態において、ダイコントローラ220は、読み取り/書き込み回路230A/230Bと協働してメモリアレイ200上でメモリ/記憶動作を実施する。ある実施形態において、ダイコントローラ220は、記憶管理モジュール150、状態マシン222、オンチップアドレスデコーダ224、及び電力制御回路226を含む。一実施形態において、記憶管理モジュール150は、メモリアレイ200の記憶場所のバンクに対する記憶動作コマンドを受信し、メモリアレイ200に関連付けられたページレジスタ内の利用可能な記憶場所のサブセットを使用して実行するための記憶動作コマンドを待ち行列に入れ、及び記憶動作コマンドが完了、実行、実施などされるまで、ページレジスタ内の記憶場所に記憶動作コマンドに関連付けられたデータを記憶するように構成される。ある実施形態において、記憶管理モジュール150は、デバイスドライバのソフトウェア、及び/又はデバイスコントローラ244内のハードウェア、ダイコントローラ220、並びに/又は状態マシン222を含んでもよい。
一実施形態において、状態マシン222は、メモリ又は記憶動作のチップレベル制御を提供する。オンチップアドレスデコーダ224は、ホスト又はメモリコントローラによって使用されるアドレスとデコーダ240A、240B、242A、242Bによって使用されるハードウェアアドレスとの間で変換するアドレスインターフェースを提供する。電力制御モジュール226は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。一実施形態において、電力制御回路226は、供給電圧よりも大きい電圧を生成することができる1つ以上のチャージポンプを含む。
図3は、メモリセル302のアレイ301を含む、上記の不揮発性記憶デバイス210等の、メモリ要素300の一実施形態を図示する。一実施形態において、アレイ301は、メモリセル302の2つのサブアレイ303に分割される。本明細書を考慮すれば、当業者は、メモリアレイ301が、任意の数のサブアレイ303に分割することができることを認識するであろう。更に、図示された実施形態において、メモリセル302の各行は、メモリセル302のバンク306(例えば、一組のメモリセル302)と、バンクグループ304を含む一群のメモリセルバンク306と、を含む。例えば、図3に例解されるように、メモリ要素300は、メモリセル302の2つのサブアレイ303及び16個のバンク306を含み、4つの異なるバンクグループ304にグループ化されてもよい。
更なる実施形態において、メモリ要素300は、関連するページレジスタ/ページバッファ308を有してもよい。本明細書で使用される場合、ページレジスタ308は、メモリアレイ301に(例えば、書き込みコマンドに対する)、又はメモリアレイ301から(読み取りコマンドに対する)転送しながら、データを一時的に記憶するために使用される記憶エリアである。ある実施形態において、ページレジスタは、メモリアレイ301に対するアドレスを記憶するために使用することができる複数のデータラッチ、メモリアレイ301内のアドレスで記憶されるデータなどを含む、複数の異なる記憶場所を含む。
一実施形態において、メモリ要素300が不揮発性NAND記憶デバイスに対するNANDモード等のアノーマルモードで動作しているとき、ページレジスタ308に対するアクセスユニットは、例えばページ当たり512B、4kB、8kB、16kBなどのフルページのデータであってもよい。一方、メモリ要素300が「バースト」モードで実施されるとき、ページレジスタ308に対するアクセスユニットは、例えば、ページ当たり4B、8B、16Bなど、より小さくなり得、バンク306又はバンクグループ304の記憶サイズに対応し得る。本明細書で使用される場合、「バースト」モードは、メモリ要素300がメモリアレイ301のバンク306又はバンクグループ304上で高速同期読み取り310及びプログラム/書き込み312動作を処理する、メモリ要素300のモードであり得る。
したがって、「バースト」モードで実行するとき、ページレジスタ308のサブセット又は部分は、メモリアレイ301のバンク306又はバンクグループ304に関連付けられてもよく、メモリセル302のバンク306又はバンクグループ304上で、記憶動作コマンド、例えば、読み取り310又は書き込み312コマンド、を実施するために利用されてもよい。このため、ページレジスタ308内の、使用されず、利用可能な記憶空間は、メモリセル302のバンク306又はバンクグループ304に対する異なる記憶動作を、待ち行列に入れる、バッファリングする、などのために使用することができる。更に、複数の異なる記憶動作がページレジスタ308内で待ち行列に入れられ、メモリ要素300のメモリセル302の異なるバンク306又はバンクグループ304上で同期的に実施されてもよい。一実施形態において、メモリアレイ301は、各バンク306又はバンクグループ304に対する記憶動作を待ち行列に入れること及び処理を管理する単一の状態マシン222によって管理されてもよい。ある実施形態において、複数の状態マシン222は、各バンク306又はバンクグループ304に対する記憶動作を待ち行列に入れること及び処理を独立して管理し得る。
図4は、記憶管理モジュール150の一実施形態を図示する。記憶管理モジュール150は、図1に関して上記の記憶管理モジュール150と実質的に類似し得る。図示された実施形態において、記憶管理モジュール150は、コマンドモジュール402と、待ち行列モジュール404と、データモジュール406と、を含み、これらは以下でより詳細に記載される。
一実施形態において、コマンドモジュール402は、メモリ要素300の記憶場所のバンク306、例えば、メモリセル302に関連付けられた1つ以上の記憶動作コマンドを受信するように構成される。本明細書で使用される場合、記憶動作コマンドは、メモリ要素300、メモリアレイ301、バンク306、バンクグループ304、メモリセル302などの上での作用、活動などを引き起こすことを意図したコマンドを含み得る。記憶動作コマンドは、例えば、読み取りコマンド、書き込みコマンド、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、リフレッシュフラッシュコマンド、及び/又は同様のものを含んでもよい。上記のように、コマンドモジュール402は、記憶クライアント116から記憶動作コマンドを受信してもよい。
一実施形態において、コマンドモジュール402は、メモリセル302のバンク306、メモリセル302のバンクグループ304、及び/又はメモリ要素300のメモリアレイ301の同様のもの、に対する記憶動作コマンドを受信する。いくつかの実施形態において、コマンドモジュール402は、記憶動作に関連付けられたメモリセルのバンク(複数可)306に対応する記憶動作コマンドの一部として、1つ以上のアドレスを受信する。
一実施形態において、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定することによって、実行するための記憶動作コマンドを待ち行列に入れるように構成される。本明細書で使用される場合、ページレジスタ308内の記憶場所は、アドレス、識別子などを使用してアクセス可能であり得る1つ以上のデータラッチ、データレジスタ、及び/又は同様のものを含んでもよい。このような実施形態において、ページレジスタ308内の記憶場所は、ページレジスタ308内の利用可能な記憶場所のサブセット、一部分、一部などであってもよい。例えば、4kBのフルページに対するデータを記憶するように構成され得る、ページレジスタ308内の記憶場所は、メモリ要素300内のメモリセル302のバンク306に関連付けられた1B又は2Bセットのデータラッチであってもよい。
待ち行列モジュール404は、記憶コマンド動作が受信される順序、並びに記憶コマンド動作のアドレス及び/又はデータが記憶されるページレジスタ内の場所を追跡し得る。例えば、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所、及び実行のために待ち行列に入れられた複数の受信された記憶動作コマンドに対する実行順序を判定する、状態マシン222等の、コントローラ上に、又は別様にコントローラの一部の上に位置付けられ得る。別の実施例において、待ち行列モジュール404は、メモリ要素300内のメモリセル302の異なるバンク306又はバンクグループ304に関連付けられたページレジスタ308内の記憶場所を各々管理する、複数の状態マシン222の上に、又は別様に状態マシン222の一部の上に位置付けられ得る。このような実施形態において、各状態マシン222に対する待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定し、実行のために待ち行列に入れられた複数の受信された記憶動作コマンドの実行順序を判定する。
一実施形態において、データモジュール406は、受信した記憶動作コマンドに関連付けられたデータを受信し、記憶動作コマンドが実行される準備が整うまで、受信したデータをページレジスタ308内の所定の記憶場所に記憶するように構成される。データモジュール406は、例えば、書き込みコマンドに関連付けられたデータを受信し、書き込みコマンドが実行のために待ち行列に入れられている間に、記憶場所内のデータ、例えば、ページレジスタ308内の1つ以上のデータラッチを記憶してもよい。書き込みコマンドが実行される、コミットされる、又は同様のものとなるように選択されるとき、データモジュール406は、次いで、ページレジスタ308内の記憶場所からメモリアレイ301のバンク306又はバンクグループ304に書き込まれるデータにアクセスし、データをメモリアレイ301に書き込むか、又はプログラムし得る。別の実施例において、データモジュール406は、読み取り要求コマンドに応答して、メモリ要素300のバンク306又はバンクグループ304からデータを受信してもよく、かつ読み取り要求コマンドが、コミットされる、終了される、実行される、又は同様のことのための待ち行列から選択されるまで、ページレジスタ308内の記憶場所内に、読み取りデータを記憶してもよい。
したがって、記憶管理モジュール150は、ページレジスタ308の部分を使用して、個々のバンク306又はバンクグループ304に対する複数の記憶動作を管理するための、動的待ち行列システムを提供する。このように、複数の記憶動作は、例えば、各バンクグループ304又は同様のもの、の内部で、メモリアレイ301上で同期的に実行されてもよい。更に、記憶動作によって影響を受けるメモリアレイ301の部分に関連しない、メモリアレイ301の部分上での記憶動作の不必要な実行は、個々のバンク306又はバンクグループ304のために意図され、メモリアレイ301全体ではない記憶動作を待ち行列に入れるように、ページレジスタ308を使用することによって回避され得る。
図5は、記憶管理モジュール150の一実施形態を図示する。記憶管理モジュール150は、図1に関して上記の記憶管理モジュール150と実質的に類似し得る。図示された実施形態において、記憶管理モジュール150は、コマンドモジュール402、待ち行列モジュール404、及びデータモジュール406を含み、これは、図4を参照する上記のコマンドモジュール402、待ち行列モジュール404、及びデータモジュール406と実質的に類似し得る。更に、一実施形態において、記憶管理モジュール150は、ポインタ管理モジュール502、再試行モジュール504、コピーバックモジュール506、及びキャッシュ読み取りモジュール508を含み、これらは以下でより詳細に記載される。
一実施形態において、ポインタ管理モジュール502は、記憶動作コマンドに関連付けられたデータ、アドレス、及び/又は同様のもの、のために、ページレジスタ308内の記憶場所に1つ以上のポインタ、参照などを維持する。本明細書で使用される場合、ポインタは、記憶動作に関連付けられたデータ又はアドレスに対するページレジスタ308内のアドレス、メモリ場所などへの参照である。いくつかの実施形態において、1つ以上のポインタは、現在のプログラム/書き込み動作に関連付けられたデータの記憶場所へのポインタ、待ち行列に入れられたプログラム/書き込み動作に関連付けられたデータの記憶場所へのポインタ、読み取り動作に関連付けられたデータに対する記憶場所へのポインタ、及び/又は同様のものを含む。一実施形態において、ポインタ管理モジュール502は、読み取りコマンド及び書き込みコマンド等の、特定の記憶動作コマンドに対する記憶場所として事前に定義されているページレジスタ308内の特定のラッチ、記憶場所、アドレス、メモリ場所などに、様々なポインタを方向付けてもよい。
例えば、ポインタ管理モジュール502は、記憶されているメモリアレイ301のバンク306又はバンクグループ304から読み出されたデータに対して指定されたページレジスタ308内の記憶場所に、読み取りポインタを方向付けてもよい。そのような実施形態において、読み取り要求がコミット又は終了する前に、例えば、読み取り要求データがページレジスタ308から記憶クライアント116に転送される前に、処理されるように待ち行列に入れられる他の記憶コマンドが存在してもよいが、ポインタ管理モジュール502がポインタをページレジスタ308内の読み取り要求データに維持するため、及びページレジスタ308の一部分又はサブセットのみが読み取り要求データを記憶するために使用されているので、読み取り要求コマンドは待ち行列に入れることができ、例えば、以前に待ち行列に入れられた記憶動作コマンドが完了したときに、実行かつ終了又はコミットされるように指定されることによって追跡されることができる。
別の実施例において、ポインタ管理モジュール502は、現在処理されている、又は処理されるために待ち行列に入れられる、書き込み若しくはプログラムコマンドのためにデータが記憶されるページレジスタ308内の記憶場所に、現在の書き込みポインタを維持する。更に、ポインタ管理モジュール502は、処理されるために次の列にある、待ち行列に入れられた書き込み又はプログラムコマンドのためにデータが記憶される、ページレジスタ308内の記憶場所に1つ以上の待ち行列又は次のポインタを維持する。例えば、上記のように、ページレジスタ308の特定のラッチ、アドレス、メモリ場所などは、メモリアレイ301のバンク306又はバンクグループ304に関連付けられた読み取りデータ及び書き込みデータに対する記憶場所として定義されてもよい。1つの特定の実施例において、ページレジスタ308の三組のラッチ(例えば、8、16、32、又は同様の8ビットラッチの3つの列)が、例えば、特定のメモリバンク306に関して、書き込み動作に関連付けられたデータに対する記憶場所として指定される場合、ポインタ管理モジュール502は、現在のポインタを第1の組のラッチのアドレスに方向付け、次の/待ち行列に入れられたポインタを第2の組のラッチのアドレスに方向付けてもよい。第3の組のラッチは、例えば、以下に記載されるように、書き込み動作が不成功となり、再試行される必要がある事象において、追加のバッファ又はオーバーフローとして使用されてもよい。
したがって、一実施例において、データモジュール406が書き込み要求に対するデータを受信し、ページレジスタ308の第1の組のラッチ内にデータを記憶する場合、ポインタ管理モジュール502は、現在のポインタを第1の組のラッチのアドレスに方向付けて、現在の書き込み要求に対するデータ、例えば、待ち行列内の次の書き込み要求、を示し得る。第1の書き込み要求がまだ待ち行列に入れられている間に、データモジュール406が別の書き込み要求に対するデータを受信する場合、データモジュール406は、データをページレジスタ308の第2の組のラッチ内に記憶するはずであり、ポインタ管理モジュール502が、次の/待ち行列に入れられたポインタを第2の組のラッチのアドレスに方向付けて、次の書き込み要求に対するデータを示してもよい。したがって、書き込み要求が、現在のポインタによって指定されたデータ、例えば、第1の組のラッチ内のデータ、を使用して実行されるとき、ポインタ管理モジュール502は、現在のポインタを第2の組のラッチに再度方向付けて、次の書き込み要求のデータを示し得、これが現在の書き込み要求である。次いで、ポインタ管理モジュール502は、別の書き込み要求が待ち行列に入るまで、次の/待ち行列に入れられたポインタを第3の組のラッチ、第1の組のラッチ、NULLなどに再度方向付けてもよい。
更に、一実施形態において、ポインタ管理モジュール502は、ポインタに関連付けられた記憶場所でページレジスタ308内に記憶されたデータが有効であるかどうかを示す、各ポインタに関連付けられた有効性ビットを維持する。例えば、読み取り要求動作中に、データモジュール406は、メモリアレイ301のバンク306からデータを受信し、ページレジスタ308内の一組のラッチ内にデータを記憶してもよい。ポインタ管理モジュール502は、読み取りポインタを一組のラッチに方向付け、一組のラッチ内に記憶されたデータが有効であることを示す、一組のラッチに対する有効性ビットを設定し得る。一度データがページレジスタから読み取られると、例えば、記憶クライアント116に伝達されると、ポインタ管理モジュール502は、次いで、有効性ビットを無効化、リセットなどをして、例えば、読み取り要求を満たすために伝達又は処理されているため、一組のラッチ内に記憶されたデータがもはや有効ではないことを示すことができる。
一実施形態において、ポインタ管理モジュール502は、メモリアレイ301に書き込まれるように待ち行列に入れられたが、プログラム/書き込み動作中にメモリ要素300に正常に書き込まれなかったデータに対する記憶場所に、ポインタを維持する。例えば、現在のポインタによって指定されたデータに対する書き込み動作が試みられたが、何らかの理由、例えば、プログラムエラー、不完全プログラムなどにより失敗した場合、ポインタ管理モジュール502は、現在のポインタ及び次のポインタを、インクリメント又は再度方向付けて、待ち行列に入れられた書き込み動作に関連付けられたデータに対する異なる記憶場所に指定し、待ち行列に入れられたデータがバンク306又はバンクグループ304に書き込まれるように準備し得る。書き込み動作が失敗したため、ポインタ管理モジュール502は、データをメモリアレイ301に書き込むための付加的な試みが実行され得るように、有効性ビットをリセットしなくてもよい。このような実施形態において、ポインタ管理モジュール502は、「不成功」ポインタを、メモリアレイ301に書き込み失敗したデータに方向付け得、「不成功」ビットを設定して、不成功ポインタが、失敗してメモリアレイ301に書き込まれる必要のあるデータに指定されていることを示すことができる。
一実施形態において、再試行モジュール504は、不成功ビットが設定されていることに基づいて、不成功ポインタによって指定されるメモリアレイ301、メモリアレイ301のバンク306又はバンクグループ304にデータを書き込むように試みてもよい。再試行モジュール504は、データが書き込まれるまで、書き込み試行の閾値数が満たされるまで、又は同様のことになるまで、以前に失敗したデータをメモリアレイ301に書き込むことを試みてもよい。データがメモリアレイ301に正常に書き込まれた場合、ポインタ管理モジュール502は、不成功ビットをリセットし、書き込み要求に対するデータがメモリアレイ301に正常に書き込まれなくなるまで、不成功ポインタをNULL、又は別の無効な場所に指定するように再度方向付けてもよい。
いくつかの実施形態において、メモリアレイ301への書き込みに失敗したことを有効性ポインタによって示されるため、不成功ポインタが有効データに方向付けられる場合、データは、メモリアレイ301のバンク306又はバンクグループ304に関連付けられたページレジスタ308内に利用可能な記憶場所がない場合、新たな書き込み動作に関する新しいデータによって上書きされてもよい。例えば、ページレジスタの三組のラッチがバンク306又はバンクグループ304と関連付けられ、現在のポインタが、有効データを含む第1の組のラッチを指定し、次のポインタが、有効データを含む第2の組のラッチを指定し、不成功のポインタが、メモリアレイ301に書き込まれるように既に試みられた有効データを含む第3の組のラッチを指定する場合、データモジュール406は、不成功のポインタが新しいデータを有して指定する第3の組のラッチ内のデータを上書きし得る。そのような実施形態において、データモジュール406は、データがメモリアレイ301に正常に書き込まれなかったことを示すために、通知、メッセージなどを記憶クライアントに送信してもよい。更に、この実施形態において、ポインタ管理モジュール502は、不成功のポインタを更新し得、そのため失敗の書き込みが再度発生するまで、バンク306又はバンクグループ304に対するページレジスタ308内の一組のラッチを指定しない。
したがって、不成功のポインタが有効なデータを含む記憶場所に方向付けられる場合、現在のポインタ及び次のポインタは、不成功ポインタによって指定された記憶場所が利用可能になるまで、残りの記憶場所間で交互に入れ替わり得る。このように、ページレジスタ308のサブセットは、各バンク306又はバンクグループ304に対する記憶動作待ち行列として使用されてもよいが、必ずしも先入れ先出し様式ではない。換言すれば、ポインタ管理モジュール502は、例えば、現在のポインタ及び次のポインタを使用して、書き込み動作が受信される順序を維持しながら、書き込み動作に対するデータにポインタを方向付けてもよく、しかしながら、不成功ポインタが、バンク306又はバンクグループ304に書き込まれるように以前に試みられた有効データに方向付けられた場合、再試行モジュール504は、書き込み動作が受信された順序から外れた不成功ポインタによって参照されたデータを書き込むことを試みてもよい。
一実施形態において、コピーバックモジュール506は、現在のポインタ又は次のポインタ等の書き込みポインタを、読み取り要求コマンドに関連付けられたデータを記憶する、ページレジスタの記憶場所、例えば、一組のラッチ、に再度方向付け、そのためデータは、データに対する書き込み要求を受信したことに応答して、メモリアレイ301のバンク306又はバンクグループ304に「コピーバック」され得る。このように、データは、不必要な読み取り及び書き込みを実行する代わりに、ページレジスタ308に対する読み取り及び書き込みポインタを単純に操作することによって、ページレジスタを読み取り、メモリアレイ301にコピーバックすることができる。
同様に、一実施形態において、キャッシュ読み取りモジュール508は、読み取りポインタを、書き込みポインタ、例えば、現在のポインタ又は次のポインタ、によって指定されたデータに再度方向付け、そのためデータがメモリアレイ301に書き込まれるのを待ち、次いで読み取り要求コマンドを満たすためにメモリアレイ301からデータを戻して読み出す代わりに、読み取り要求コマンドに応答して、ページレジスタからデータを読み出すことができる。このように、読み取りポインタを操作することがより速く、より効率的となり得、そのためメモリアレイ301に書き込まれるように待ち行列に書き込まれるデータは、メモリアレイ301に書き込まれる前に、ページレジスタ308から読み取ることができる。
図6は、メモリセル302のバンク306に対する記憶動作コマンドを待ち行列に入れるためのページレジスタ308の部分606を使用する一実施形態を図示する。一実施形態において、コマンドモジュール402は、記憶動作コマンドを受信する。記憶動作コマンドを受信することに応答して、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対する、ページレジスタ308の部分606内の記憶場所602を判定する。上記のように、ページレジスタ308内の記憶場所602は、ページレジスタ308内の全ての利用可能な記憶場所のサブセット、一部、一部分などであってもよい。ページレジスタ308のサブセット606は、メモリアレイ301内のメモリセル302の特定のバンク306に関連付けられ得る。
一実施形態において、ポインタ管理モジュール502は、記憶動作コマンドに関連付けられたデータを記憶するように指定されたページレジスタ308内の記憶場所602に指定する1つ以上のポインタ604を維持する。例えば、コマンドモジュール402が、読み取り要求コマンドを受信する場合、ポインタ管理モジュール502は、どのポインタ604が読み取りポインタであるか、例えば、読み取りデータを記憶するための記憶場所602として指定され得る、記憶場所0に方向付けられたポインタ604であるかを判定してもよい。データモジュール406は、メモリアレイ301内のバンク306からの読み取り要求に対するデータを受信してもよく、読み取りポインタによって指定された記憶場所0内にデータを記憶してもよい。読み取りデータは、読み取り要求動作が、処理される記憶動作待ち行列内の次の列まで、記憶場所0内に残り得る(例えば、この特定の読み取り要求コマンドの前に処理され得る、読み取り又は書き込みコマンドがそれ以前に受信され得る)。
別の実施例において、コマンドモジュール402は、データをバンク306に書き込むための書き込みコマンドを受信してもよい。ポインタ管理モジュール502は、ページレジスタ308の部分606内の記憶場所602を指定する現在のポインタを判定し得る。現在のポインタが、有効なデータ、例えば、有効性ビットによって示されるように、処理されるために待ち行列に入れられるデータ、を含む記憶場所602を指定している場合、ポインタ管理モジュール502は、次いで、次の/待ち行列ポインタによって指定された記憶場所をチェックしてもよい。
更なる実施形態において、ポインタ管理モジュール502は、コマンドビットを維持し、これは設定されたときに、書き込みコマンドが現在のポインタによって参照されたデータを受信していることを示す。更なる実施形態において、ポインタ管理モジュール502は、書き込み動作が正常に完了したという指標を受信したことに応答して、コミットビットをリセットする。ポインタ管理モジュール502が、書き込み動作が失敗、又は別様に不成功(例えば、書き込みが不完全であった)と判定する場合、ポインタ管理モジュール502は、不成功ビットを設定し得、不成功ポインタが、現在のポインタによって現在参照されているデータを参照することを確実とし、現在のポインタ及び次のポインタをページレジスタ308の部分606内の待ち行列における、次の組のデータにシフトさせ得る。このように、再試行モジュール504は、不成功ポインタを維持することによって、書き込み動作が成功するまで、再試行の試みの閾値数が満たされるまで、など、不成功のポインタによって参照されたデータを使用して、今後のある時点で書き込み動作を試行することができる。いくつかの実施形態において、不成功ビットが設定されない場合、次いで、不成功ポインタは、現在のポインタと同じ記憶場所に、NULLの場所に、及び/又は同様のものに指定し得る。
一実施形態において、データモジュール406が新しいデータを受信するとき、ポインタ管理モジュール502は、データが現在のポインタによって参照される記憶場所602内、又は次のポインタによって参照される記憶場所内に記憶されるべきかどうかを判定する。この判定を行うために、ポインタ管理モジュール502は、現在のポインタに関連付けられたコミットビット及び有効性ビットをチェックしてもよい。有効性ビットが現在のポインタに設定され、現在のポインタによって参照されるデータが有効であることを示す場合、次いでデータモジュール406は、次のポインタによって参照される記憶場所602内にデータを記憶してもよい。同様に、コミットビットが設定され、現在のポインタによって参照されるデータを使用して書き込み動作が実行されていることを示す場合、データモジュール406は、次のポインタによって参照される記憶場所602内にデータを記憶してもよい。様々な実施形態において、現在のポインタ及び次のポインタ、又は1つ以上の次のポインタの各々が、有効性ビットによって示されるように、有効なデータを含み、ページレジスタ308の部分606内に利用可能な記憶場所602がない場合、ポインタ管理モジュール502及び/又はデータモジュール406は、エラーメッセージを送出する、送信するなどして、バンク306への書き込みのためのデータの記憶及び待ち行列に入れることにおけるエラーを示すことができる。
更に、上記のように、図6内に例解されたポインタ待ち行列は、典型的な先入れ先出し待ち行列として作用しなくてもよい。例えば、読み取りポインタは、常に記憶場所0を指定し得るが、現在のポインタ、次のポインタ、及び不成功ポインタは、様々な構成において記憶場所2、4、及び6を指定し得る。一実施例において、現在のポインタは、記憶場所2を参照し得、次のポインタは、記憶場所4を参照し得る。書き込み動作が、現在のポインタによって参照される記憶場所2におけるデータを使用して実行される場合、現在のポインタは、記憶場所4に再度方向付けられてもよく、次のポインタは、記憶場所6に再度方向付けられてもよい。しかしながら、書き込み動作が失敗する場合、不成功ポインタが、次いで、記憶場所2を参照し得る。別の書き込み動作が、現在のポインタによって参照される記憶場所4内のデータに対して受信される場合、現在のポインタは、記憶場所6に再度方向付けられてもよい。記憶場所2が不成功のポインタによって依然として参照される場合、次のポインタは、記憶場所4に再度方向付けられ得る。このため、ポインタ管理モジュール502は、ページレジスタ308の部分606内の記憶場所にいずれの特定の順序ではなく、例えば、書き込み動作が受信される順序を維持しながら、記憶場所602の可用性に対応する順序で、現在の/次の/利用不可能なポインタを方向付ける、及び再度方向付けてもよく、しかしながら、書き込み動作が以前に不成功に試みられた場合、再試行モジュール504は、現在の/次のポインタに関連付けられた書き込み動作の順序から外れて、データをバンク306に書き込むことを試みることができる。
図7は、記憶動作コマンドを待ち行列に入れるための方法700の一実施形態を図示する。一実施形態において、方法700が開始し、コマンドモジュール402が、メモリアレイ301の記憶場所のバンク304に関連付けられた記憶動作コマンドを受信する702。ある実施形態において、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定することによって、バンク306上で実行するための記憶動作コマンドを待ち行列に入れる704。ページレジスタ308内の記憶場所は、ページレジスタ308内の利用可能な記憶場所のサブセットを含み得る。更なる実施形態において、データモジュール406は、ページレジスタ308内の判定された記憶場所において、記憶動作コマンドに関連付けられたデータを記憶し706、方法700は終了する。
図8は、記憶動作コマンドを待ち行列に入れるための方法800の一実施形態を図示する。一実施形態において、方法800が開始し、コマンドモジュール402が、読み取り動作、例えば、読み取り要求動作を受信802して、メモリアレイ301の1つ以上のバンク306からデータを読み出す。いくつかの実施形態において、データモジュール406は、メモリアレイ301の1つ以上のバンク304から読み取り要求のデータを読み取る804。
いくつかの実施形態において、待ち行列モジュール406は、データモジュール406が読み取り動作のデータを記憶することができるページバッファ308内の記憶場所を判定する806。一実施形態において、ポインタ管理モジュール502は、ページバッファ308内の読み取りデータの判定された記憶場所を指定するための読み取りポインタを更新する808。様々な実施形態において、ポインタ管理モジュール502は、読み取りデータが有効データであることを示す、読み取りデータに対する有効性ビットを設定する810。
更なる実施形態において、データモジュール406は、ページバッファ308内の読み取りポインタによって指定された記憶場所から読み取りデータを読み取り812、データを要求した記憶クライアント116に、読み取りデータを転送、伝達、コピー、送信、などを行う。一実施形態において、ポインタ管理モジュール502は、ページレジスタ308から読み取りデータが読み取られた812後に、有効性ビットをリセットし814、方法800が終了する。
図9A及び図9Bは、記憶動作コマンドを待ち行列に入れるための方法900の一実施形態を図示する。一実施形態において、方法900が開始し、コマンドモジュール402が、メモリアレイ301の1つ以上のバンク306にデータを書き込むための書き込み動作コマンドを受信する902。更なる実施形態において、データモジュール406は、メモリアレイ301に書き込まれるデータ及び/又はデータが書き込まれるメモリアレイ301内の1つ以上のアドレス等の、書き込み動作のためのデータを受信する904。
いくつかの実施形態において、待ち行列モジュール404は、書き込み要求に関連付けられたデータを待ち行列に入れるためのページバッファ308内の現在の記憶場所を判定する906。更なる実施形態において、ポインタ管理モジュール502は、データが記憶されるページバッファ308内の記憶場所を指定するために、現在のポインタ及び不成功ポインタを更新する908。一実施形態において、ポインタ管理モジュール502は、受信された次の記憶動作コマンドに関連付けられたデータに対するページバッファ308内の次の利用可能な記憶場所を指定するために、次のポインタを更新する910。
ある実施形態において、ポインタ管理モジュール502は、現在のポインタによって指定されたデータが有効であること、例えば、データがまだ処理されていないことを示すために、データに対する有効性ビットを設定する912。一実施形態において、データモジュール406は、ページレジスタ308内のデータをメモリアレイ301に書き込むための、書き込みコマンドを試みる914。ある実施形態において、ポインタ管理モジュール502は、現在のポインタによって指定されたデータを書き込む試みが成功したかどうかを判定する916。
一実施形態において、書き込みが成功する場合、ポインタ管理モジュール502は、次のポインタが現在指定しており、次のポインタを、次の利用可能な記憶場所又はメモリアレイ301に書き込まれるように待ち行列に入れられる次のデータに方向付けている、ページレジスタ308内の記憶場所に、現在のポインタを方向付けることによって現在のポインタ及び次のポインタを更新する930。いくつかの実施形態において、ポインタ管理モジュール502は、メモリアレイ301に書き込まれたページバッファ308内のデータに対する有効性ビットをリセットし932、本方法900が終了する。
別の実施形態において、ポインタ管理モジュール502が、現在のポインタによって指定されたデータを書き込む試みが不成功であると判定する916場合、ポインタ管理モジュール502は、不成功ビットを設定し918、不成功ポインタ内に現在の記憶場所を保存する920。一実施形態において、再試行コマンドが受信されない場合922、ポインタ管理モジュール502は、現在のポインタ及び次のポインタを更新し930、本方法900は、書き込みが成功したとして継続する。別の実施形態において、再試行コマンドがコントローラ244から受信された922場合、再試行モジュール504は、不成功ポインタによって指定されたデータをメモリアレイ301に書き込むことを再試行する924。
再試行モジュール504が書き込みの再試行924において成功する場合926、ポインタ管理モジュール502は、不成功ビットをリセットし928、現在のポインタ及び次のポインタを更新し930、本方法900は継続する。再試行モジュール504が書き込みの再試行924において成功しない場合926、不成功ビットは、リセットされず、本方法900は、(例えば、書き込みが成功したとして現在のポインタ及び次のポインタを更新する930ポインタ管理モジュール502を有して、又はコントローラ244から受信した922別の再試行コマンドを有して)継続する。ある実施形態において、コントローラ244は、書き込み試行の閾値数が満たされるなどするまで、データをメモリアレイ301に、成功するまで書き込むことを再試行924し続けるように、再試行モジュール504と連携してもよい。
様々な実施形態において、ページレジスタ308を使用して不揮発性記憶デバイスのメモリアレイ301に関連付けられた記憶動作コマンドをバッファリングするための手段は、コマンドモジュール402、待ち行列モジュール404、ポインタ管理モジュール502、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ308を使用して、不揮発性記憶デバイスのメモリアレイ301に関連付けられた記憶動作コマンドをバッファリングするための類似の又は同等の手段を含み得る。
様々な実施形態において、ページレジスタ308内の記憶動作コマンドに対するデータを記憶するための手段は、データモジュール406、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ308内の記憶動作コマンドに対するデータを記憶するための類似又は同等の手段を含んでもよい。
様々な実施形態において、記憶動作の少なくともサブセットに対して、ページレジスタ308内に記憶されたデータを処理するための手段は、コマンドモジュール402、データモジュール406、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、記憶動作の少なくともサブセットに対して、ページレジスタ308内に記憶されたデータを処理するための類似の又は同等の手段を含んでもよい。
本開示は、その趣旨又は本質的な特徴から逸脱することなく、他の特定の形態で具現化されてもよい。記載された実施形態は、全ての点において、例示的なものに過ぎず、限定的ではないと見なされるべきである。したがって、本開示の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の意味及び等価範囲内に含まれる全ての変更は、それらの範囲内に包含されるものとする。
本開示は、様々な実施形態において、記憶デバイスに関し、より具体的には、記憶デバイスのページレジスタを使用して、記憶コマンドを動的に待ち行列に入れることに関する。
メモリセルのアレイは、各サブアレイ上で独立して記憶動作を実施することができるように、様々なサブアレイに細分化され得る。しかしながら、特定のサブアレイ上でどの動作が実施されているかを追跡することは、中央の場所で管理することが困難であり得る。
記憶動作を待ち行列に入れるための装置が、提示される。一実施形態において、装置は、集積回路(「IC」)メモリ要素を含む。ICメモリ要素は、ある実施形態において、メモリ要素の記憶場所のバンクに関連付けられた記憶動作コマンドを受信する。更なる実施形態において、ICメモリ要素は、記憶動作コマンドに関連付けられたデータに対するページレジスタ内の記憶場所を判定することによって、記憶場所のバンク上で実行するための記憶動作コマンドを待ち行列に入れる。ページレジスタ内の記憶場所は、ページレジスタ内の利用可能な記憶場所のサブセットを含み得る。いくつかの実施形態において、ICメモリ要素は、ページレジスタ内の判定された記憶場所で記憶動作コマンドに関連付けられたデータを記憶する。
別の実施形態において、装置は、不揮発性記憶デバイスの複数のサブアレイに関連付けられた複数の記憶動作コマンドを、揮発性記憶デバイスのページレジスタを使用して、バッファリングするための手段を含む。更なる実施形態において、装置は、ページレジスタ内に複数の記憶動作コマンドに対するデータを記憶するための手段を含み、そのため複数の記憶動作コマンドの各々に対するデータが、ページレジスタ内に同時に記憶されるように、記憶動作コマンドの各々に対するデータは、ページレジスタのページサイズよりも小さい。一実施形態において、装置は、複数の記憶動作コマンドの少なくとも1つのサブセットに対して、ページレジスタ内に記憶されたデータを同時に処理するための手段を含む。
記憶動作を待ち行列に入れるためのシステムが、提示される。一実施形態において、システムは、ページバッファ及びコントローラを含む、不揮発性メモリ媒体を含む。ある実施形態において、コントローラは、不揮発性メモリ媒体に対する複数の記憶動作コマンドを受信するように構成される。複数の記憶動作コマンドの記憶動作コマンドは、不揮発性メモリ媒体の複数のサブアレイのうちの1つのサブアレイに対するものであり得る。別の実施形態において、コントローラは、複数の記憶動作コマンドに関連付けられたデータを同時に記憶するために、ページバッファ内の記憶場所を判定するように構成される。様々な実施形態において、コントローラは、少なくとも2つの記憶動作コマンドに関連付けられたページバッファ内に記憶されたデータを使用して、複数の記憶動作コマンドのうちの少なくとも2つを同時に実行するように構成される。
より具体的な説明が、添付の図面内に例解される特定の実施形態を参照して下記に含まれる。これらの図面は、本開示の特定の実施形態のみを示すものであり、したがって、その範囲を限定するものと見なされるべきではなく、本開示は、添付の図面を使用することを通じて、付加的な具体性及び詳細と共に記載及び説明される。
記憶管理モジュールを備えるシステムの一実施形態を例解する、模式的なブロック図である。
メモリ要素の一実施形態を例解する、模式的なブロック図である。
本開示の態様は、装置、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、本開示の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又はソフトウェア及びハードウェアの態様を組み合わせた実施形態の形態を採ることができ、概して、本明細書では全て「回路」、「モジュール」、「装置」、又は「システム」と称される場合がある。更に、本開示の態様は、コンピュータで読み取り可能な及び/又は実行可能なプログラムコードを記憶する1つ以上の非一時的コンピュータで読み取り可能な記憶媒体内に具現化された、コンピュータプログラム製品の形態を採ることができる。
本明細書に記載される機能ユニットの多くは、それらの実装独立性をより具体的に強調するために、モジュールとして標識されている。例えば、モジュールは、カスタムVLSI回路若しくはゲートアレイ、論理チップ、トランジスタ、又は他の別個の構成要素等の市販の半導体を備えるハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。
モジュールはまた、様々なタイプのプロセッサによる実行のために、少なくとも部分的にソフトウェアにおいて実装されてもよい。実行可能なコードの識別されたモジュールは、例えば、オブジェクト、手順、又は機能として体系化され得るコンピュータ命令の1つ以上の物理的又は論理的ブロックを含み得る。それでもなお、識別されたモジュールの実行可能なファイルは、物理的に共に配置される必要はなく、論理的に共に結合されたときにモジュールを含み、モジュールに対する指定された目的を達成する、異なる場所内に記憶された異種命令を含んでもよい。
実際に、実行可能なコードのモジュールは、単一の命令、又は多くの命令を含んでもよく、いくつかの異なるコードセグメント上で、異なるプログラムの中で、いくつかのメモリデバイスなどにわたって分配さえされてもよい。モジュール又はモジュールの一部分がソフトウェアに実装される場合、ソフトウェア部分は、1つ以上のコンピュータで読み取り可能な及び/又は実行可能な記憶媒体上に記憶されてもよい。1つ以上のコンピュータで読み取り可能な記憶媒体の任意の組み合わせが、利用されてもよい。コンピュータで読み取り可能な記憶媒体としては、例えば、電子、磁気、光学、電磁、赤外線、又は半導体システム、装置、若しくはデバイス、及び前述の任意の好適な組み合わせが含まれ得るが、これらに限定されず、しかし、伝搬信号を含むことはないであろう。本文書の文脈において、コンピュータで読み取り可能な及び/又は実行可能な記憶媒体は、命令実行システム、装置、プロセッサ、又はデバイスによって、若しくはそれらに関連して使用するためのプログラムを含有又は記憶し得る、任意の有形及び/又は非一時的媒体であってもよい。
本開示の態様に対する動作を実行するためのコンピュータプログラムコードは、Python、Java(登録商標)、Smalltalk、C++、C#、Objective Cなど等のオブジェクト指向のプログラミング言語、「C」プログラミング言語、スクリプトプログラミング言語、及び/又は他の類似のプログラミング言語等の従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書き込まれてもよい。プログラムコードは、データネットワークなどを介して、1つ以上のユーザのコンピュータ上、及び/又はリモートコンピュータ若しくはサーバ上で部分的又は全体的に実行することができる。
本明細書で使用される場合、構成要素は、有形の物理的な非一時的デバイスを備える。例えば、構成要素は、カスタムVLSI回路、ゲートアレイ、若しくは他の集積回路を備えるハードウェア論理回路、論理チップ、トランジスタ、又は他の別個のデバイス等の市販の半導体、及び/若しくは他の機械的又は電気的デバイスとして実装されてもよい。構成要素はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイ論理、プログラマブル論理デバイスなど等の、プログラム可能なハードウェアデバイスにおいて実装されてもよい。構成要素は、プリント回路基板(PCB)などの電気線を介して1つ以上の他の構成要素と電気通信する、1つ以上のシリコン集積回路デバイス(例えば、チップ、ダイ、ダイ平面、パッケージ)、又は他の別個の電気デバイスを備えてもよい。本明細書に記載されるモジュールの各々は、ある実施形態において、代替的に、構成要素によって具現化されるか、又は構成要素として実装されてもよい。
本明細書全体を通して、「一実施形態」、「ある実施形態」、又は実施形態に関連して記載された特定の特性、構造、又は特徴を意味する類似の文言への言及は、本開示の少なくとも1つの実施形態内に含まれる。このため、「一実施形態において」、「ある実施形態において」という句、及び本明細書全体にわたる類似の文言の出現は、必ずしも全て同じ実施形態を参照するわけではなく、別途明示的に指定されない限り、「1つ以上であるが全ての実施形態ではない」を意味する。「含む(including)」、「含む(comprising)」、「有する(having)」という用語、及びその変化形は、別途明示的に指定されない限り、「含むが、これらに限定されない」ことを意味する。項目を列挙したリストは、別途明示的に指定されない限り、項目のいずれか又は全てが相互に排他的及び/又は相互に包括的であることを意味するものではない。「a」、「an」、及び「the」という用語はまた、別途明示的に指定されない限り、「1つ以上」を指す。
本開示の態様は、本開示の実施形態に従う、方法、装置、システム、及びコンピュータプログラム製品の模式的なフローチャート図及び/又は模式的なブロック図を参照して以下に記載される。模式的なフローチャート図及び/又は模式的なブロック図の各々のブロック、並びに模式的なフローチャート図及び/又は模式的なブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装され得ることが理解されるであろう。これらのコンピュータプログラム命令は、機械を製造するためのコンピュータ又は他のプログラム可能なデータ処理装置のプロセッサに提供されてもよく、そのため、プロセッサ又は他のプログラム可能なデータ処理装置を介して実行する命令は、模式的なフローチャート図及び/又は模式的なブロック図のブロック又は複数のブロックにおいて指定された機能及び/又は作用を実装するための手段を生成する。
また、いくつかの代替的な実装において、ブロック内に記された機能は、図内に記された順序から外れて行われ得ることに留意されたい。例えば、連続して示される2つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、関与する機能に応じて逆順序で実行されてもよい。例解された図の1つ以上のブロック、又はそれらの部分と機能、論理、又は効果が同等である、他の工程及び方法が、着想され得る。フローチャート及び/又はブロック図で、様々な矢印タイプ及び線タイプが用いられ得るが、それらは対応する実施形態の範囲を限定するものではないことが理解される。例えば、矢印は、図示された実施形態の列挙された工程間の指定されていない持続時間の待機期間又は監視期間を示してもよい。
以下のより詳細な説明において、その一部を形成する添付図面を参照する。前述の概要は、例解的なものに過ぎず、いかようにも限定することを意図するものではない。上記の例解的な態様、実施形態、及び特徴に加えて、更なる態様、実施形態、及び特徴が、図面及び以下の詳細な説明を参照することによって明らかとなるであろう。各図における要素の説明は、先の図の要素を参照し得る。同様の数字は、同様の要素の代替的な実施形態を含む、図面中の同様の要素を指し得る。
図1Aは、記憶管理モジュールを備えるシステム100の一実施形態のブロック図である。記憶管理モジュールは、不揮発性メモリコントローラ、不揮発性メモリ媒体コントローラ126、デバイスドライバ、又は記憶管理層(SML)などのうちの1つ以上の一部であってもよく、かつ/若しくはそれらと通信してもよい。記憶管理モジュールは、プロセッサ111と、揮発性メモリ112と、通信インターフェース113とを備え得る、コンピューティングデバイス110の不揮発性メモリシステム102上で動作し得る。プロセッサ111は、1つ以上の中央処理ユニット、1つ以上の汎用プロセッサ、1つ以上の特定用途向けプロセッサ、1つ以上の仮想プロセッサ(例えば、コンピューティングデバイス110は、ホスト内で動作するバーチャルマシンであってもよい)、1つ以上のプロセッサコアなどを備え得る。通信インターフェース113は、コンピューティングデバイス110及び/又は不揮発性メモリコントローラを、インターネットプロトコルネットワーク、ストレージエリアネットワークなど等の通信ネットワーク115に通信可能に結合するように構成された、1つ以上のネットワークインターフェースを含んでもよい。
コンピューティングデバイス110は、非一時的なコンピュータで読み取り可能な記憶媒体114を更に備えてもよい。コンピュータで読み取り可能な記憶媒体114は、コンピューティングデバイス110(例えば、プロセッサ111)に本明細書に開示された方法のうちの1つ以上の工程を実施させるように構成された実行可能な命令を含み得る。代替的に、又は付加的に、記憶管理モジュールは、非一時的な記憶媒体114上に記憶された1つ以上のコンピュータで読み取り可能な命令として具現化されてもよい。
不揮発性メモリシステム102は、図示された実施形態において、記憶管理モジュールを含む。一実施形態において、記憶管理モジュール、メモリ要素に関連付けられたページレジスタ内の記憶場所のサブセットを使用して、メモリ要素、揮発性及び/又は不揮発性に対する記憶動作を待ち行列に入れるように構成される。例えば、不揮発性記憶デバイスが通常の「NAND」モードで動作しているとき、フルページのデータは、読み取り又は書き込み動作等の記憶動作を実施するときにページレジスタ内に記憶され得る。一方、本明細書に記載されるように、不揮発性記憶デバイスが、「バースト」モードで動作しているとき、フルページのデータよりも小さいアクセスユニットを有する場合があり、複数の記憶動作が、メモリ要素のバンク上で実施される記憶動作に関連付けられたデータを記憶するために、ページレジスタのサブセットを使用し、実行のための待ち行列に入れられ得る。
一実施形態において、記憶管理モジュールは、プロセッサ111上での実行のためにコンピュータで読み取り可能な記憶媒体114上に記憶された、デバイスドライバ、SMLなど等の実行可能なソフトウェアコードを含み得る。別の実施形態において、記憶管理モジュールは、不揮発性メモリ媒体コントローラ126、不揮発性メモリコントローラ、デバイスコントローラ、フィールドプログラマブルゲートアレイ(FPGA)又は他のプログラム可能なロジック、FPGA又は他のプログラム可能なロジックに対するファームウェア、マイクロコントローラ上の実行に対するマイクロコード、特定用途向け集積回路(ASIC)など等の、1つ以上の不揮発性メモリデバイス120のロジックハードウェアを備え得る。更なる実施形態において、記憶管理モジュールは、実行可能なソフトウェアコード及び論理ハードウェアの両方の組み合わせを含み得る。
一実施形態において、記憶管理モジュールは、バス125などを介してSMLから記憶要求を受信するように構成される。記憶管理モジュールは、バス125を介して、SML及び/又は記憶クライアント116に/からデータを転送するように更に構成されてもよい。したがって、いくつかの実施形態において、記憶管理モジュールは、記憶要求及び関連データの転送を容易にするために、1つ以上のダイレクトメモリアクセス(DMA)モジュール、リモートDMAモジュール、バスコントローラ、ブリッジ、バッファなどを含んでもよく、かつ/又はそれらと通信してもよい。別の実施形態において、記憶管理モジュールは、記憶クライアント116からのAPIコールとして、IO−CTLコマンドとして、などの記憶要求を受信し得る。記憶管理モジュールは、下記により詳細に記載される。
様々な実施形態に従って、記憶管理モジュールを備える不揮発性メモリコントローラは、1つ以上の不揮発性メモリデバイス120を管理することができる。不揮発性メモリデバイス(複数可)120は、複数のアドレス指定可能な媒体記憶場所に配置及び/又は分配されたソリッドステート記憶デバイス(複数可)等の、記録、メモリ、及び/又は記憶デバイスを備え得る。本明細書で使用される場合、媒体記憶場所は、メモリの任意の物理的な単位(例えば、不揮発性メモリデバイス120上の任意の量の物理的な記憶媒体)を指す。メモリユニットは、ページ、メモリ分割、消去ブロック、セクタ、ブロック、集合、又は物理的な記憶場所一式(例えば、以下に記載される論理ページ、論理消去ブロック)などを含み得るが、これらに限定されない。
不揮発性メモリコントローラは、1つ以上の記憶クライアント116に論理アドレス空間134を提示し得る、SMLを含んでもよい。SMLの一例は、SanDisk Corporation Milpitas,CaliforniaのVirtual Storage Layer(登録商標)である。代替的に、各不揮発性メモリデバイス120は、論理アドレス空間134を記憶クライアント116に提示し得る、不揮発性メモリ媒体コントローラ126を備え得る。本明細書で使用される場合、論理アドレス空間134は、メモリリソースの論理表現を指す。論理アドレス空間134は、複数の論理アドレス(例えば、範囲)を含んでもよい。本明細書で使用される場合、論理アドレスは、論理ブロックアドレス(LBA)、シリンダ/ヘッド/セクタ(CHS)アドレス、ファイル名、オブジェクト識別子、inode、Universally Unique Identifier(UUID)、Globally Unique Identifier(GUID)、ハッシュコード、署名、インデックスエントリ、範囲、大きさなどを含むが、これらに限定されない、メモリリソース(例えば、データ)を参照するための任意の識別子を指す。
SMLは、転送インデックス等のメタデータ135を維持して、論理アドレス空間134の論理アドレスを不揮発性メモリデバイス(複数可)120上の媒体記憶場所にマッピングしてもよい。SMLは、論理アドレスから物理的な記憶リソースへの任意の多対多(any-to-any)マッピングを提供してもよい。本明細書で使用される場合、「多対多」マッピングは、任意の論理アドレスを任意の物理的記憶リソースにマッピングすることができる。したがって、論理アドレスと特定の媒体記憶場所及び/又は媒体アドレスとの間に、予め定義された並びに/若しくは事前設定されたマッピングは存在しない場合がある。本明細書で使用される場合、媒体アドレスは、1つのメモリリソースを別のメモリリソースから、複数のメモリリソースを管理するコントローラに固有に識別するメモリリソースのアドレスを指す。例として、媒体アドレスは、媒体記憶場所のアドレス、物理的なメモリユニット、物理的なメモリユニット(例えば、論理メモリユニット)の集合、メモリユニットの一部分(例えば、論理メモリユニットアドレス及びオフセット、範囲、及び/又は大きさ)などを含むが、これらに限定されない。したがって、SMLは、任意のサイズ及び/又は精度の物理的なデータリソースに論理アドレスをマッピングすることができ、不揮発性メモリデバイス(複数可)120の基礎となるデータ分配スキームに対応し得、又は対応しなくてもよい。例えば、いくつかの実施形態において、不揮発性メモリコントローラは、複数の物理的なメモリユニットを論理的に組み合わせることによって形成される論理メモリユニット内にデータを記憶するように構成され、これにより、不揮発性メモリコントローラが、多くの異なる仮想メモリユニットのサイズ及び/又は精度を支持することを可能にし得る。
本明細書で使用される場合、論理メモリ要素は、(例えば、I/O及び/若しくは制御バスを介して)並行して管理されるか、又は管理することができる、一組の2つ以上の不揮発性メモリ要素を指す。論理メモリ要素は、論理ページ、論理メモリ分割(例えば、論理消去ブロック)など等の、複数の論理メモリユニットを含み得る。本明細書で使用される場合、論理メモリユニットは、2つ以上の物理的なメモリユニットを組み合わせた論理的構造体を指し、各物理的なメモリユニットが、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある(例えば、各不揮発性メモリ要素が並行してアクセス可能である)。本明細書で使用される場合、論理メモリ分割は、一組の2つ以上の物理的なメモリ分割を指し、各物理的なメモリ分割が、それぞれの論理メモリ要素内のそれぞれの不揮発性メモリ要素上にある。
SMLによって提示された論理アドレス空間134は、論理容量を有し得、論理アドレス空間134内の利用可能な論理アドレスの数、並びに論理アドレスによって参照されるデータのサイズ及び/又は精度に対応し得る。例えば、2^32の固有論理アドレスを含む論理アドレス空間134の論理容量は、各々が2048バイト(2KiB)のデータを参照し、2^43バイトであり得る。本明細書で使用される場合、キビバイト(KiB)は、1024バイトを指す。いくつかの実施形態において、論理アドレス空間134は、シンプロビジョニングされてもよい。本明細書で使用される場合、「シンプロビジョニングされた」論理アドレス空間134は、基礎となる不揮発性メモリデバイス(複数可)120の物理的な容量を超える論理容量を有する論理アドレス空間134を指す。例えば、SMLは、記憶クライアント116に対して64ビットの論理アドレス空間134を提示し得(例えば、64ビットの論理アドレスによって参照される論理アドレス空間134)、これは基礎となる不揮発性メモリデバイス120の物理的な容量を超えてもよい。大きな論理アドレス空間134は、名前付けの競合の可能性を低減しながら、記憶クライアント116が、論理アドレスの連続範囲を割り当てること及び/又は参照することを可能にし得る。SMLは、論理アドレス空間134を基礎となる物理的な記憶デバイス120から独立して管理するために、論理アドレスと物理的な記憶リソースとの間の多対多マッピングを活用することができる。例えば、SMLは、必要に応じて、記憶クライアント116によって使用される論理アドレスを変更することなく、物理的な記憶リソースをシームレスに追加及び/又は除去し得る。
不揮発性メモリコントローラは、コンテキスト形式でデータを記憶するように構成されてもよい。本明細書で使用される場合、コンテキスト形式は、持続的コンテキストメタデータが物理的な記憶媒体122上のデータを有して記憶される、自己記述型データ形式を指す。持続的コンテキストメタデータは、記憶されるデータに対するコンテキストを提供する。ある実施形態において、持続的コンテキストメタデータは、持続的コンテキストメタデータが記憶されているデータを個別に識別する。例えば、持続的コンテキストメタデータは、記憶クライアント116が所有するデータのセクタ又はブロックを、記憶クライアント116によって所有される他のセクタ又はデータブロックから個別に識別し得る。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データ上で実施される一連の動作を識別する。更なる実施形態において、持続的コンテキストメタデータは、データのセキュリティ制御、データタイプ、又はデータの他の属性を識別する。ある実施形態において、持続的コンテキストメタデータは、データタイプ、固有データ識別子、動作、及びデータ上で実施される一連の動作を含む複数の態様のうちの少なくとも1つを識別する。
持続的コンテキストメタデータは、データの論理アドレス、データの識別子(例えば、ファイル名、オブジェクトid、ラベル、固有識別子など)、他のデータ(例えば、データが他のデータに関連付けられていることのインジケータ)への参照(複数可)、他のデータ(例えば、ファイルオフセットなど)に対するデータの相対位置又はオフセット、データサイズ及び/又は範囲などを含み得るが、これらに限定されない。コンテキストデータ形式は、データセグメント及び1つ以上のヘッダを含む、パケット形式を含んでもよい。代替的に、コンテキストデータ形式は、データを、他の方法で(例えば、不揮発性メモリ媒体122上の専用インデックス内、メモリ分割インデックス内など)でコンテキスト情報と関連付けることができる。
いくつかの実施形態において、コンテキストデータ形式は、データコンテキストが、不揮発性メモリ媒体122のコンテキストに基づいて、及び上記の任意の多対多マッピング等の他のメタデータから独立して、判定及び/又は再構成することを可能にし得る。データの媒体場所は、データの論理アドレスから独立しているため、データのコンテキストを媒体場所又はデータの媒体アドレスのみに基づいて判定することは非効率的又は不可能であり得る。不揮発性メモリ媒体122上にデータをコンテキスト形式で記憶することは、他のメタデータを参照することなく、データコンテキストを判定することを可能にし得る。例えば、コンテキストデータ形式は、不揮発性メモリ媒体122のコンテンツにのみ基づいて、メタデータを再構成することを可能にし得る(例えば、論理アドレスと媒体場所との間の多対多マッピングを再構成する)。
いくつかの実施形態において、不揮発性メモリコントローラは、ソリッドステート記憶媒体等の、1つ以上の非対称の追記型媒体122上にデータを記憶するように構成され得る。本明細書で使用される場合、「追記型」記憶媒体は、新しいデータが書き込まれるか、又はその上にプログラムされるたびに再初期化される(例えば、消去される)記憶媒体を指す。本明細書で使用される場合、「非対称」記憶媒体は、異なる記憶動作に対する異なるレイテンシを有する記憶媒体122を指す。多くのタイプのソリッドステート記憶媒体は、非対称であり、例えば、読み取り動作は、書き込み/プログラム動作よりもはるかに速くてもよく、書き込み/プログラム動作は、消去動作よりもはるかに速くてもよい(例えば、媒体を読み出すことは、消去よりも数百倍速く、媒体をプログラミングするよりも数十倍速くてもよい)。
メモリ媒体122は、とりわけ、媒体122などの非対称特性を考慮するために、グループ(例えば、消去ブロック)として消去することができるメモリ分割に分配され得る。そのため、単一のデータセグメントを定位置に変更することは、データを含む消去ブロック全体を消去すること、及び修正されたデータを、元の変更されていないデータと共に消去ブロックに再度書き込むことを必要とし得る。これは、媒体122を過度に摩耗させ得る非効率的な「書き込み増幅」をもたらし得る。したがって、いくつかの実施形態において、不揮発性メモリコントローラは、定位置から外してデータを書き込むように構成され得る。本明細書で使用される場合、データを「定位置から外して」書き込むことは、データを「定位置で」上書きする(例えば、データの元の物理的な場所を上書きする)のではなく、異なる媒体記憶場所(複数可)にデータを書き込むことを指す。データを定位置から外して修正することは、修正されるべきデータを有する消去ブロック上の既存の有効なデータが、消去及び再コピーされる必要がないため、書き込み増幅を回避し得る。その上、定位置から外してデータを書き込むことは、多くの記憶動作のレイテンシ経路から消去することを除去し得る(例えば、消去レイテンシは、もはや書き込み動作のクリティカルパスの一部ではない)。
不揮発性メモリコントローラは、記憶動作に対応するための通常の経路(例えば、記憶動作を実施する及び/又は記憶要求に対応するための「経路」)の外で動作する1つ以上のプロセスを含んでもよい。本明細書で使用される場合、「記憶要求に対応するための経路」又は「記憶動作に対応するための経路」(「クリティカルパス」とも称される)は、読み取り、書き込み、修正など等の記憶動作又は要求に対応するために必要な一連の処理動作を指す。記憶要求に対応するための経路は、記憶クライアント116から要求を受信することと、要求の論理アドレスを識別することと、不揮発性メモリ媒体122上で1つ以上の記憶動作を実施することと、応答又はデータ等の結果を返すことと、を含み得る。記憶要求に対応するための経路の外側で発生するプロセスは、グルーマ、重複排除などを含み得るが、これらに限定されない。これらのプロセスは、それらが他の記憶動作及び/又は要求の性能を妨害又は影響しないように、自律的かつバックグラウンドで実施されてもよい。したがって、これらのプロセスは、記憶要求に対応することから独立して動作し得る。
いくつかの実施形態において、不揮発性メモリコントローラは、ガベージコレクション又は他の記憶容量回復プロセスを使用して、再使用に対するメモリ分割(例えば、論理的又は物理的消去ブロック)を再利用するように構成されている、グルーマを含む。不揮発性メモリコントローラによって実装された定位置を外れたパラダイムの書き込みは、不揮発性メモリ媒体122上に残る不明瞭な又は無効なデータをもたらし得る。例えば、データYでデータXを上書きすることは、(例えば、定位置にXを上書きするのではなく)新しいメモリ分割上にYを記憶すること、及びデータの有効な最新版としてYを識別するために、メタデータの多対多マッピングを更新することをもたらし得る。上記のように、Xを消去することは、全メモリ分割を消去することを伴う場合があり、これは時間がかかる動作であり、書き込み増幅をもたらし得るため、データXの不明瞭なバージョンは、無効としてマーキングされ得るが、すぐに除去(例えば、消去)されない。同様に、これ以上使用されないデータ(例えば、削除又はトリミングされたデータ)は、直ちに除去されなくてもよい。不揮発性メモリ媒体122は、相当量の無効データを蓄積し得る。
グルーマプロセスは、記憶動作に対応するためのクリティカルパスの外側で動作することができる。グルーマプロセスは、他の記憶動作のために再使用することができるように、メモリ分割を再利用してもよい。本明細書で使用される場合、メモリ分割を再利用することは、メモリ分割を消去することを指し、そのため新しいデータがその上に記憶/プログラムされ得る。メモリ分割を再利用することは、メモリ分割上の有効データを新しい場所に再配置することを含み得る。グルーマは、メモリ分割内の無効データの量、メモリ分割内の有効データの量、メモリ分割時の摩耗(例えば、消去サイクル数)、メモリ分割がプログラムされているか又はリフレッシュされてからの時間などを含み得るが、これらに限定されない、1つ以上の要因に基づいた再利用に対するためのメモリ分割を識別し得る。
不揮発性メモリコントローラは、データをログ形式で記憶するように更に構成されてもよい。上記のように、ログ形式は、不揮発性メモリ媒体122上で実施される記憶動作の順序付けられたシーケンスを定義するデータ形式を指す。いくつかの実施形態において、ログ形式は、不揮発性メモリ媒体122の媒体アドレスの所定のシーケンス内に(例えば、媒体122の連続ページ及び/又は消去ブロック内に)データを記憶することを含む。ログ形式は、データ(例えば、各パケット又はデータセグメント)をそれぞれのシーケンスインジケータと関連付けることを更に含んでもよい。シーケンスインジケータは、個別に(例えば、各データパケットに適用される)データに、及び/又はデータグループ(例えば、消去ブロック等のメモリ分割上に連続的に記憶されたパケット)に適用され得る。いくつかの実施形態において、メモリ分割が上記のように再利用される(例えば、消去される)とき、及び/又はメモリ分割がデータを記憶するために最初に使用されるときに、シーケンスインジケータがメモリ分割に適用されてもよい。
いくつかの実施形態において、ログ形式は、「追加専用」パラダイム内にデータを記憶することを含み得る。以下に記載されるログ記憶モジュールなどを使用する不揮発性メモリコントローラは、不揮発性メモリデバイス120の媒体アドレスで現在の追加ポイントを維持し得る。追加ポイントは、現在のメモリ分割及び/又はメモリ分割内のオフセットであってもよい。次いで、データは、追加ポイントから連続的に追加され得る。したがって、データの連続的順序付けは、メモリ分割内のデータのシーケンスと組み合わせたデータのメモリ分割のシーケンスインジケータに基づいて判定され得る。メモリ分割の終了に達すると、不揮発性メモリコントローラは、「次の」利用可能なメモリ分割(例えば、初期化され、データを記憶する準備が整っている次のメモリ分割)を識別し得る。グルーマは、データが引き続き媒体ログに追加され得ることを確実とするために、無効、停滞、及び/又は削除されたデータを含むメモリ分割を再利用し得る。
本明細書に記載されるログ形式は、有効データが不揮発性メモリ媒体122のコンテンツに基づいて、及び他のメタデータから独立して、無効データと区別されることを可能にし得る。上記のように、無効データは、データを含むメモリ分割が再利用されるまで、不揮発性メモリ媒体122から除去されなくてもよい。したがって、同じコンテキストを有するデータの複数の「バージョン」は、不揮発性メモリ媒体122上に存在し得る(例えば、同じ論理アドレスを有する複数のバージョンのデータ)。データに関連付けられたシーケンスインジケータは、データの現在の最新バージョンから、データの無効バージョンを区別するために使用されてもよく、ログにおける直近のデータは、現在のバージョンであり、前のバージョンは無効として識別されてもよい。
記憶管理層は、1つ以上の記憶クライアント116に記憶サービスを提供するように構成されてもよい。記憶クライアント116は、コンピューティングデバイス110上で動作するローカル記憶クライアント116、及び/又はネットワーク115並びに/若しくはネットワークインターフェース113を介してアクセス可能なリモート記憶クライアント116を含んでもよい。記憶クライアント116は、動作システム、ファイルシステム、データベースアプリケーション、サーバアプリケーション、カーネルレベルプロセス、ユーザレベルプロセス、アプリケーションなどを含み得るが、これらに限定されない。
記憶管理層は、1つ以上の不揮発性メモリデバイス120を備え、及び/又はそれに通信可能に結合される。1つ以上の不揮発性メモリデバイス120は、ソリッドステート記憶デバイス、ハードドライブ、SAN記憶リソースなどを含む、異なるタイプの不揮発性メモリデバイスを含み得るが、これらに限定されない。1つ以上の不揮発性メモリデバイス120は、1つ以上のそれぞれの不揮発性メモリ媒体コントローラ126及び不揮発性メモリ媒体122を含み得る。図1Aに例解されるように、SMLは、従来のブロックI/Oインターフェース131を介して1つ以上の不揮発性メモリデバイス120へのアクセスを提供し得る。付加的に、SMLは、SCMインターフェース132を通じて強化された機能(例えば、大きい仮想アドレス空間134)へのアクセスを提供し得る。メタデータ135は、ブロックI/Oインターフェース131、SCMインターフェース132、キャッシュインターフェース133、又は他の関連インターフェースのうちのいずれかを通じて実施される記憶動作を管理及び/又は追跡するために使用され得る。
キャッシュインターフェース133は、記憶管理層を介してアクセス可能なキャッシュ固有の特徴を見せ得る。また、いくつかの実施形態において、記憶クライアント116に提示されるSCMインターフェース132は、1つ以上の不揮発性メモリデバイス120及び/又は1つ以上の不揮発性メモリ媒体コントローラ126によって実装されるデータ変換へのアクセスを提供する。
SMLは、ブロックI/Oインターフェース、拡張記憶管理層インターフェース、キャッシュインターフェースなどを含み得るが、これらに限定されない、1つ以上のインターフェースを通じて記憶サービスを提供し得る。SMLは、1つ以上のインターフェースを通じて、記憶クライアント116に論理アドレス空間134を提示し得る。上記のように、論理アドレス空間134は、複数の論理アドレスを含み得、各々が1つ以上の不揮発性メモリデバイス120上のそれぞれの媒体場所に対応する。SMLは、上記のように、論理アドレスと媒体場所との間の多対多マッピングを含むメタデータ135を維持し得る。
SMLは、コンテキストに応じたログ形式においてデータを記憶するように構成されたログ記憶モジュールを更に備え得る。コンテキストに応じたログデータ形式は、データをデータの論理アドレスなど等の持続的コンテキストメタデータと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、1つ以上の不揮発性メモリデバイス120上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体122上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。
SMLは、データ、コマンド、及び/又はクエリを、周辺構成要素相互接続エクスプレス(PCIエクスプレス又はPCIe)バス、シリアルアドバンストテクノロジアタッチメント(ATA)バス、パラレルATAバス、小型コンピュータシステムインターフェース(SCSI)、ファイヤワイヤ、ファイバチャネル、ユニバーサルシリアルバス(USB)、PCIeアドバンストスイッチング(PCIe−AS)バス、ネットワーク115、インフィニバンド、SCSI RDMA等を含み得るが、これらに限定されない、バス125にわたって1つ以上の不揮発性メモリデバイス120に転送するように構成された不揮発性メモリデバイスインターフェース139を更に含み得る。不揮発性メモリデバイスインターフェース139は、入出力制御(IO−CTL)コマンド(複数可)、IO−CTLコマンド延長部(複数可)、リモートダイレクトメモリアクセスなどを使用して、1つ以上の不揮発性メモリデバイス120と通信し得る。
通信インターフェース113は、コンピューティングデバイス110及び/又は不揮発性メモリコントローラをネットワーク115に、及び/又は1つ以上のリモートの、ネットワークアクセス可能な記憶クライアント116に通信可能に結合するように構成された1つ以上のネットワークインターフェースを備えてもよい。記憶クライアント116は、コンピューティングデバイス110上で動作するローカル記憶クライアント116、及び/又はネットワーク115並びに/若しくはネットワークインターフェース113を介してアクセス可能なリモート記憶クライアント116を含んでもよい。不揮発性メモリコントローラは、1つ以上の不揮発性メモリデバイス120を備える。図1Aは、単一の不揮発性メモリデバイス120を図示するが、本開示は、この点に関して限定されず、いずれの数の不揮発性メモリデバイス120を組み込むように適合され得る。
不揮発性メモリデバイス120は、NANDフラッシュメモリ、NORフラッシュメモリ、ナノランダムアクセスメモリ(ナノRAM又はNRAM)、ナノ結晶ワイヤベースメモリ、シリコン酸化物ベースのサブ10ナノメートルプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン(SONOS)、抵抗ラム(RRAM(登録商標))、プログラム可能メタライゼーションセル(PMC)、導電性架橋RAM(CBRAM)、磁気抵抗RAM(MRAM)、ダイナミックRAM(DRAM)、相変化RAM(PRAM又はPCM)、磁気記憶媒体(例えば、ハードディスク、テープ)、光学記憶媒体など、を含み得るが、これらに限定されない、不揮発性メモリ媒体122を備えてもよい。不揮発性メモリ媒体122は、本明細書中で「メモリ媒体」として称されるが、様々な実施形態において、不揮発性メモリ媒体122は、より一般的に、不揮発性メモリ媒体、不揮発性記憶媒体などと称され得る、データを記録することが可能な不揮発性記録媒体を備えてもよい。更に、様々な実施形態において、不揮発性メモリデバイス120は、不揮発性記録デバイス、不揮発性メモリデバイス、不揮発性記憶デバイスなどを含み得る。
不揮発性メモリ媒体122は、チップ、パッケージ、平面、ダイなどを含み得るが、これらに限定されない、1つ以上の不揮発性メモリ要素123を備えてもよい。不揮発性メモリ媒体コントローラ126は、不揮発性メモリ媒体122上の記憶動作を管理するように構成されてもよく、1つ以上のプロセッサ、プログラム可能なプロセッサ(例えば、フィールドプログラマブルゲートアレイ)などを含んでもよい。いくつかの実施形態において、不揮発性メモリ媒体コントローラ126は、上記のコンテキストに応じたログ形式で不揮発性メモリ媒体122上にデータを記憶及び/又は不揮発性メモリ媒体122からデータを読み取り、不揮発性メモリデバイス120などに/からデータを転送するように構成される。
不揮発性メモリ媒体コントローラ126は、バス127によって不揮発性メモリ媒体122に通信可能に結合され得る。バス127は、不揮発性メモリ要素123に/からデータを通信するためのI/Oバスを含んでもよい。バス127は、アドレス指定及び他のコマンド並びに制御情報を不揮発性メモリ要素123に通信するための制御バスを更に含んでもよい。いくつかの実施形態において、バス127は、不揮発性メモリ要素123を不揮発性メモリ媒体コントローラ126に並行して、通信可能に結合し得る。この並行アクセスは、不揮発性メモリ要素123がグループとして管理されることを可能にし、論理メモリ要素129を形成することができる。上述のように、論理メモリ要素は、それぞれの論理メモリユニット(例えば、論理ページ)及び/又は論理メモリ分割(例えば、論理消去ブロック)に分配されてもよい。論理メモリユニットは、不揮発性メモリ要素の各々の物理的なメモリユニットを論理的に組み合わせることによって形成され得る。例えば、不揮発性メモリ媒体122が25の不揮発性メモリ要素を含む場合、各論理メモリユニットは、25ページ(例えば、不揮発性メモリ媒体122の各要素のページ)を備え得る。
不揮発性メモリコントローラは、SML及び不揮発性メモリ媒体コントローラ126を備え得る。SMLは、1つ以上のインターフェース131、132、及び/又は133を介して記憶クライアント116に記憶サービスを提供してもよい。いくつかの実施形態において、SMLは、ブロックデバイスI/Oインターフェース131を提供し、それを通じて記憶クライアント116がブロックレベルI/O動作を実施する。代替的に又は付加的に、SMLは、記憶管理層(SML)インターフェースを提供し得、記憶クライアント116に他の記憶サービスを提供し得る。いくつかの実施形態において、SCMインターフェース132は、ブロックデバイスインターフェース131への延長部を備え得る(例えば、記憶クライアント116は、ブロックデバイスインターフェース131への延長部を通じてSCMインターフェース132にアクセスしてもよい)。代替的に又は付加的に、SCMインターフェース132は、別個のAPI、サービス、及び/又はライブラリとして提供されてもよい。SMLは、不揮発性メモリシステム102を使用してデータをキャッシュするためのキャッシュインターフェース133を提供するように更に構成され得る。
上記のように、SMLは、論理アドレス空間134を記憶クライアント116に(例えば、インターフェース131、132、及び/又は133を通じて)提示し得る。SMLは、論理アドレス空間134内の論理アドレスと不揮発性メモリデバイス120上の媒体場所との間の多対多マッピングを含む、メタデータ135を維持し得る。メタデータ135は、論理アドレス空間134内の論理アドレス、及び不揮発性メモリデバイス120上の媒体場所をマッピングするエントリを有する論理から物理マッピング構造を含み得る。一実施形態において、メタデータ135の論理から物理マッピング構造は、不揮発性メモリデバイス120がデータを記憶する論理アドレスに対するエントリを有して、及び不揮発性メモリデバイス120が現在データを記憶していない論理アドレスに対するエントリのない状態で、まばらに投入される。ある実施形態において、メタデータ135は、ブロックとしてデータを管理するSMLを伴い、ブロックレベルでデータを追跡する。
不揮発性メモリシステム102は、ログ記憶モジュールを更に備えてもよく、これは上記のように、コンテキストに応じたログ形式で不揮発性メモリデバイス120上にデータを記憶するように構成され得る。コンテキストに応じたログデータ形式は、データを不揮発性メモリ媒体122上の論理アドレスと関連付けることを含んでもよい。コンテキストに応じたログ形式は、上記のように、不揮発性メモリ媒体122上で実施された記憶動作の順序付けられたシーケンスを定義する、不揮発性メモリ媒体122上のそれぞれのシーケンス識別子とデータを関連付けることを更に含んでもよい。不揮発性メモリコントローラは、上記のように、データ、コマンド、及び/又はクエリを、バス125にわたって不揮発性メモリ媒体コントローラ126に転送するように構成される、不揮発性メモリデバイスインターフェース139を更に備えてもよい。
図1Bは、1つ以上のメモリダイ又はチップ212を含み得る不揮発性記憶デバイス210の実施形態を図示する。不揮発性記憶デバイス210は、図1Aを参照して説明された不揮発性メモリデバイス120と実質的に類似し得る。いくつかの実施形態において、メモリダイ212は、メモリセル、ダイコントローラ220、及び読み取り/書き込み回路230A/230Bのアレイ200(二次元又は三次元)を含む。一実施形態において、様々な周辺回路によるメモリアレイ200へのアクセスは、アレイの反対側の側面上で、対称的に実装され、そのため各側面上のアクセスライン及び回路の密度が半分に低減される。読み取り/書き込み回路230A/230Bは、更なる実施形態において、メモリセルのページが並行して読み取り又はプログラムされることを可能にする複数の感知ブロック250を含む。
様々な実施形態において、メモリアレイ200は、行デコーダ240A/240Bを介したワード線、及び列デコーダ242A/242Bを介したビット線によってアドレス指定可能である。いくつかの実施形態において、コントローラ244は、1つ以上のメモリダイ212と同じメモリデバイス210(例えば、可動式記憶カード又はパッケージ)内に含まれる。コマンド及びデータは、線232を介してホストとコントローラ244との間で、線234を介してコントローラと1つ以上のメモリダイ212との間で転送される。一実装例は、複数のチップ212を含むことができる。
一実施形態において、ダイコントローラ220は、読み取り/書き込み回路230A/230Bと協働してメモリアレイ200上でメモリ/記憶動作を実施する。ある実施形態において、ダイコントローラ220は、記憶管理モジュール、状態マシン222、オンチップアドレスデコーダ224、及び電力制御回路226を含む。一実施形態において、記憶管理モジュールは、メモリアレイ200の記憶場所のバンクに対する記憶動作コマンドを受信し、メモリアレイ200に関連付けられたページレジスタ内の利用可能な記憶場所のサブセットを使用して実行するための記憶動作コマンドを待ち行列に入れ、及び記憶動作コマンドが完了、実行、実施などされるまで、ページレジスタ内の記憶場所に記憶動作コマンドに関連付けられたデータを記憶するように構成される。ある実施形態において、記憶管理モジュールは、デバイスドライバのソフトウェア、及び/又はデバイスコントローラ244内のハードウェア、ダイコントローラ220、並びに/又は状態マシン222を含んでもよい。
一実施形態において、状態マシン222は、メモリ又は記憶動作のチップレベル制御を提供する。オンチップアドレスデコーダ224は、ホスト又はメモリコントローラによって使用されるアドレスとデコーダ240A、240B、242A、242Bによって使用されるハードウェアアドレスとの間で変換するアドレスインターフェースを提供する。電力制御モジュール226は、メモリ動作中にワード線及びビット線に供給される電力及び電圧を制御する。一実施形態において、電力制御回路226は、供給電圧よりも大きい電圧を生成することができる1つ以上のチャージポンプを含む。
メモリセル302のアレイ301を含む、上記の不揮発性記憶デバイス210等の、メモリ要素300の一実施形態を説明する。一実施形態において、アレイ301は、メモリセル302の2つのサブアレイ303に分割される。本明細書を考慮すれば、当業者は、メモリアレイ301が、任意の数のサブアレイ303に分割することができることを認識するであろう。更に、図示された実施形態において、メモリセル302の各行は、メモリセル302のバンク306(例えば、一組のメモリセル302)と、バンクグループ304を含む一群のメモリセルバンク306と、を含む。例えば、例解されるように、メモリ要素300は、メモリセル302の2つのサブアレイ303及び16個のバンク306を含み、4つの異なるバンクグループ304にグループ化されてもよい。
更なる実施形態において、メモリ要素300は、関連するページレジスタ/ページバッファ308を有してもよい。本明細書で使用される場合、ページレジスタ308は、メモリアレイ301に(例えば、書き込みコマンドに対する)、又はメモリアレイ301から(読み取りコマンドに対する)転送しながら、データを一時的に記憶するために使用される記憶エリアである。ある実施形態において、ページレジスタは、メモリアレイ301に対するアドレスを記憶するために使用することができる複数のデータラッチ、メモリアレイ301内のアドレスで記憶されるデータなどを含む、複数の異なる記憶場所を含む。
一実施形態において、メモリ要素300が不揮発性NAND記憶デバイスに対するNANDモード等のアノーマルモードで動作しているとき、ページレジスタ308に対するアクセスユニットは、例えばページ当たり512B、4kB、8kB、16kBなどのフルページのデータであってもよい。一方、メモリ要素300が「バースト」モードで実施されるとき、ページレジスタ308に対するアクセスユニットは、例えば、ページ当たり4B、8B、16Bなど、より小さくなり得、バンク306又はバンクグループ304の記憶サイズに対応し得る。本明細書で使用される場合、「バースト」モードは、メモリ要素300がメモリアレイ301のバンク306又はバンクグループ304上で高速同期読み取り310及びプログラム/書き込み312動作を処理する、メモリ要素300のモードであり得る。
したがって、「バースト」モードで実行するとき、ページレジスタ308のサブセット又は部分は、メモリアレイ301のバンク306又はバンクグループ304に関連付けられてもよく、メモリセル302のバンク306又はバンクグループ304上で、記憶動作コマンド、例えば、読み取り310又は書き込み312コマンド、を実施するために利用されてもよい。このため、ページレジスタ308内の、使用されず、利用可能な記憶空間は、メモリセル302のバンク306又はバンクグループ304に対する異なる記憶動作を、待ち行列に入れる、バッファリングする、などのために使用することができる。更に、複数の異なる記憶動作がページレジスタ308内で待ち行列に入れられ、メモリ要素300のメモリセル302の異なるバンク306又はバンクグループ304上で同期的に実施されてもよい。一実施形態において、メモリアレイ301は、各バンク306又はバンクグループ304に対する記憶動作を待ち行列に入れること及び処理を管理する単一の状態マシン222によって管理されてもよい。ある実施形態において、複数の状態マシン222は、各バンク306又はバンクグループ304に対する記憶動作を待ち行列に入れること及び処理を独立して管理し得る。
記憶管理モジュールの一実施形態を説明する。記憶管理モジュールは、図1Aに関して上記の記憶管理モジュールと実質的に類似し得る。図示された実施形態において、記憶管理モジュールは、コマンドモジュール402と、待ち行列モジュール404と、データモジュール406と、を含み、これらは以下でより詳細に記載される。
一実施形態において、コマンドモジュール402は、メモリ要素300の記憶場所のバンク306、例えば、メモリセル302に関連付けられた1つ以上の記憶動作コマンドを受信するように構成される。本明細書で使用される場合、記憶動作コマンドは、メモリ要素300、メモリアレイ301、バンク306、バンクグループ304、メモリセル302などの上での作用、活動などを引き起こすことを意図したコマンドを含み得る。記憶動作コマンドは、例えば、読み取りコマンド、書き込みコマンド、プログラムフラッシュコマンド、拡張バッファフラッシュコマンド、リフレッシュフラッシュコマンド、及び/又は同様のものを含んでもよい。上記のように、コマンドモジュール402は、記憶クライアント116から記憶動作コマンドを受信してもよい。
一実施形態において、コマンドモジュール402は、メモリセル302のバンク306、メモリセル302のバンクグループ304、及び/又はメモリ要素300のメモリアレイ301の同様のもの、に対する記憶動作コマンドを受信する。いくつかの実施形態において、コマンドモジュール402は、記憶動作に関連付けられたメモリセルのバンク(複数可)306に対応する記憶動作コマンドの一部として、1つ以上のアドレスを受信する。
一実施形態において、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定することによって、実行するための記憶動作コマンドを待ち行列に入れるように構成される。本明細書で使用される場合、ページレジスタ308内の記憶場所は、アドレス、識別子などを使用してアクセス可能であり得る1つ以上のデータラッチ、データレジスタ、及び/又は同様のものを含んでもよい。このような実施形態において、ページレジスタ308内の記憶場所は、ページレジスタ308内の利用可能な記憶場所のサブセット、一部分、一部などであってもよい。例えば、4kBのフルページに対するデータを記憶するように構成され得る、ページレジスタ308内の記憶場所は、メモリ要素300内のメモリセル302のバンク306に関連付けられた1B又は2Bセットのデータラッチであってもよい。
待ち行列モジュール404は、記憶コマンド動作が受信される順序、並びに記憶コマンド動作のアドレス及び/又はデータが記憶されるページレジスタ内の場所を追跡し得る。例えば、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所、及び実行のために待ち行列に入れられた複数の受信された記憶動作コマンドに対する実行順序を判定する、状態マシン222等の、コントローラ上に、又は別様にコントローラの一部の上に位置付けられ得る。別の実施例において、待ち行列モジュール404は、メモリ要素300内のメモリセル302の異なるバンク306又はバンクグループ304に関連付けられたページレジスタ308内の記憶場所を各々管理する、複数の状態マシン222の上に、又は別様に状態マシン222の一部の上に位置付けられ得る。このような実施形態において、各状態マシン222に対する待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定し、実行のために待ち行列に入れられた複数の受信された記憶動作コマンドの実行順序を判定する。
一実施形態において、データモジュール406は、受信した記憶動作コマンドに関連付けられたデータを受信し、記憶動作コマンドが実行される準備が整うまで、受信したデータをページレジスタ308内の所定の記憶場所に記憶するように構成される。データモジュール406は、例えば、書き込みコマンドに関連付けられたデータを受信し、書き込みコマンドが実行のために待ち行列に入れられている間に、記憶場所内のデータ、例えば、ページレジスタ308内の1つ以上のデータラッチを記憶してもよい。書き込みコマンドが実行される、コミットされる、又は同様のものとなるように選択されるとき、データモジュール406は、次いで、ページレジスタ308内の記憶場所からメモリアレイ301のバンク306又はバンクグループ304に書き込まれるデータにアクセスし、データをメモリアレイ301に書き込むか、又はプログラムし得る。別の実施例において、データモジュール406は、読み取り要求コマンドに応答して、メモリ要素300のバンク306又はバンクグループ304からデータを受信してもよく、かつ読み取り要求コマンドが、コミットされる、終了される、実行される、又は同様のことのための待ち行列から選択されるまで、ページレジスタ308内の記憶場所内に、読み取りデータを記憶してもよい。
したがって、記憶管理モジュールは、ページレジスタ308の部分を使用して、個々のバンク306又はバンクグループ304に対する複数の記憶動作を管理するための、動的待ち行列システムを提供する。このように、複数の記憶動作は、例えば、各バンクグループ304又は同様のもの、の内部で、メモリアレイ301上で同期的に実行されてもよい。更に、記憶動作によって影響を受けるメモリアレイ301の部分に関連しない、メモリアレイ301の部分上での記憶動作の不必要な実行は、個々のバンク306又はバンクグループ304のために意図され、メモリアレイ301全体ではない記憶動作を待ち行列に入れるように、ページレジスタ308を使用することによって回避され得る。
記憶管理モジュールの一実施形態を説明する。記憶管理モジュールは、図1Aに関して上記の記憶管理モジュールと実質的に類似し得る。図示された実施形態において、記憶管理モジュールは、コマンドモジュール402、待ち行列モジュール404、及びデータモジュール406を含み、これは、上記のコマンドモジュール402、待ち行列モジュール404、及びデータモジュール406と実質的に類似し得る。更に、一実施形態において、記憶管理モジュールは、ポインタ管理モジュール502、再試行モジュール504、コピーバックモジュール506、及びキャッシュ読み取りモジュール508を含み、これらは以下でより詳細に記載される。
一実施形態において、ポインタ管理モジュール502は、記憶動作コマンドに関連付けられたデータ、アドレス、及び/又は同様のもの、のために、ページレジスタ308内の記憶場所に1つ以上のポインタ、参照などを維持する。本明細書で使用される場合、ポインタは、記憶動作に関連付けられたデータ又はアドレスに対するページレジスタ308内のアドレス、メモリ場所などへの参照である。いくつかの実施形態において、1つ以上のポインタは、現在のプログラム/書き込み動作に関連付けられたデータの記憶場所へのポインタ、待ち行列に入れられたプログラム/書き込み動作に関連付けられたデータの記憶場所へのポインタ、読み取り動作に関連付けられたデータに対する記憶場所へのポインタ、及び/又は同様のものを含む。一実施形態において、ポインタ管理モジュール502は、読み取りコマンド及び書き込みコマンド等の、特定の記憶動作コマンドに対する記憶場所として事前に定義されているページレジスタ308内の特定のラッチ、記憶場所、アドレス、メモリ場所などに、様々なポインタを方向付けてもよい。
例えば、ポインタ管理モジュール502は、記憶されているメモリアレイ301のバンク306又はバンクグループ304から読み出されたデータに対して指定されたページレジスタ308内の記憶場所に、読み取りポインタを方向付けてもよい。そのような実施形態において、読み取り要求がコミット又は終了する前に、例えば、読み取り要求データがページレジスタ308から記憶クライアント116に転送される前に、処理されるように待ち行列に入れられる他の記憶コマンドが存在してもよいが、ポインタ管理モジュール502がポインタをページレジスタ308内の読み取り要求データに維持するため、及びページレジスタ308の一部分又はサブセットのみが読み取り要求データを記憶するために使用されているので、読み取り要求コマンドは待ち行列に入れることができ、例えば、以前に待ち行列に入れられた記憶動作コマンドが完了したときに、実行かつ終了又はコミットされるように指定されることによって追跡されることができる。
別の実施例において、ポインタ管理モジュール502は、現在処理されている、又は処理されるために待ち行列に入れられる、書き込み若しくはプログラムコマンドのためにデータが記憶されるページレジスタ308内の記憶場所に、現在の書き込みポインタを維持する。更に、ポインタ管理モジュール502は、処理されるために次の列にある、待ち行列に入れられた書き込み又はプログラムコマンドのためにデータが記憶される、ページレジスタ308内の記憶場所に1つ以上の待ち行列又は次のポインタを維持する。例えば、上記のように、ページレジスタ308の特定のラッチ、アドレス、メモリ場所などは、メモリアレイ301のバンク306又はバンクグループ304に関連付けられた読み取りデータ及び書き込みデータに対する記憶場所として定義されてもよい。1つの特定の実施例において、ページレジスタ308の三組のラッチ(例えば、8、16、32、又は同様の8ビットラッチの3つの列)が、例えば、特定のメモリバンク306に関して、書き込み動作に関連付けられたデータに対する記憶場所として指定される場合、ポインタ管理モジュール502は、現在のポインタを第1の組のラッチのアドレスに方向付け、次の/待ち行列に入れられたポインタを第2の組のラッチのアドレスに方向付けてもよい。第3の組のラッチは、例えば、以下に記載されるように、書き込み動作が不成功となり、再試行される必要がある事象において、追加のバッファ又はオーバーフローとして使用されてもよい。
したがって、一実施例において、データモジュール406が書き込み要求に対するデータを受信し、ページレジスタ308の第1の組のラッチ内にデータを記憶する場合、ポインタ管理モジュール502は、現在のポインタを第1の組のラッチのアドレスに方向付けて、現在の書き込み要求に対するデータ、例えば、待ち行列内の次の書き込み要求、を示し得る。第1の書き込み要求がまだ待ち行列に入れられている間に、データモジュール406が別の書き込み要求に対するデータを受信する場合、データモジュール406は、データをページレジスタ308の第2の組のラッチ内に記憶するはずであり、ポインタ管理モジュール502が、次の/待ち行列に入れられたポインタを第2の組のラッチのアドレスに方向付けて、次の書き込み要求に対するデータを示してもよい。したがって、書き込み要求が、現在のポインタによって指定されたデータ、例えば、第1の組のラッチ内のデータ、を使用して実行されるとき、ポインタ管理モジュール502は、現在のポインタを第2の組のラッチに再度方向付けて、次の書き込み要求のデータを示し得、これが現在の書き込み要求である。次いで、ポインタ管理モジュール502は、別の書き込み要求が待ち行列に入るまで、次の/待ち行列に入れられたポインタを第3の組のラッチ、第1の組のラッチ、NULLなどに再度方向付けてもよい。
更に、一実施形態において、ポインタ管理モジュール502は、ポインタに関連付けられた記憶場所でページレジスタ308内に記憶されたデータが有効であるかどうかを示す、各ポインタに関連付けられた有効性ビットを維持する。例えば、読み取り要求動作中に、データモジュール406は、メモリアレイ301のバンク306からデータを受信し、ページレジスタ308内の一組のラッチ内にデータを記憶してもよい。ポインタ管理モジュール502は、読み取りポインタを一組のラッチに方向付け、一組のラッチ内に記憶されたデータが有効であることを示す、一組のラッチに対する有効性ビットを設定し得る。一度データがページレジスタから読み取られると、例えば、記憶クライアント116に伝達されると、ポインタ管理モジュール502は、次いで、有効性ビットを無効化、リセットなどをして、例えば、読み取り要求を満たすために伝達又は処理されているため、一組のラッチ内に記憶されたデータがもはや有効ではないことを示すことができる。
一実施形態において、ポインタ管理モジュール502は、メモリアレイ301に書き込まれるように待ち行列に入れられたが、プログラム/書き込み動作中にメモリ要素300に正常に書き込まれなかったデータに対する記憶場所に、ポインタを維持する。例えば、現在のポインタによって指定されたデータに対する書き込み動作が試みられたが、何らかの理由、例えば、プログラムエラー、不完全プログラムなどにより失敗した場合、ポインタ管理モジュール502は、現在のポインタ及び次のポインタを、インクリメント又は再度方向付けて、待ち行列に入れられた書き込み動作に関連付けられたデータに対する異なる記憶場所に指定し、待ち行列に入れられたデータがバンク306又はバンクグループ304に書き込まれるように準備し得る。書き込み動作が失敗したため、ポインタ管理モジュール502は、データをメモリアレイ301に書き込むための付加的な試みが実行され得るように、有効性ビットをリセットしなくてもよい。このような実施形態において、ポインタ管理モジュール502は、「不成功」ポインタを、メモリアレイ301に書き込み失敗したデータに方向付け得、「不成功」ビットを設定して、不成功ポインタが、失敗してメモリアレイ301に書き込まれる必要のあるデータに指定されていることを示すことができる。
一実施形態において、再試行モジュール504は、不成功ビットが設定されていることに基づいて、不成功ポインタによって指定されるメモリアレイ301、メモリアレイ301のバンク306又はバンクグループ304にデータを書き込むように試みてもよい。再試行モジュール504は、データが書き込まれるまで、書き込み試行の閾値数が満たされるまで、又は同様のことになるまで、以前に失敗したデータをメモリアレイ301に書き込むことを試みてもよい。データがメモリアレイ301に正常に書き込まれた場合、ポインタ管理モジュール502は、不成功ビットをリセットし、書き込み要求に対するデータがメモリアレイ301に正常に書き込まれなくなるまで、不成功ポインタをNULL、又は別の無効な場所に指定するように再度方向付けてもよい。
いくつかの実施形態において、メモリアレイ301への書き込みに失敗したことを有効性ポインタによって示されるため、不成功ポインタが有効データに方向付けられる場合、データは、メモリアレイ301のバンク306又はバンクグループ304に関連付けられたページレジスタ308内に利用可能な記憶場所がない場合、新たな書き込み動作に関する新しいデータによって上書きされてもよい。例えば、ページレジスタの三組のラッチがバンク306又はバンクグループ304と関連付けられ、現在のポインタが、有効データを含む第1の組のラッチを指定し、次のポインタが、有効データを含む第2の組のラッチを指定し、不成功のポインタが、メモリアレイ301に書き込まれるように既に試みられた有効データを含む第3の組のラッチを指定する場合、データモジュール406は、不成功のポインタが新しいデータを有して指定する第3の組のラッチ内のデータを上書きし得る。そのような実施形態において、データモジュール406は、データがメモリアレイ301に正常に書き込まれなかったことを示すために、通知、メッセージなどを記憶クライアントに送信してもよい。更に、この実施形態において、ポインタ管理モジュール502は、不成功のポインタを更新し得、そのため失敗の書き込みが再度発生するまで、バンク306又はバンクグループ304に対するページレジスタ308内の一組のラッチを指定しない。
したがって、不成功のポインタが有効なデータを含む記憶場所に方向付けられる場合、現在のポインタ及び次のポインタは、不成功ポインタによって指定された記憶場所が利用可能になるまで、残りの記憶場所間で交互に入れ替わり得る。このように、ページレジスタ308のサブセットは、各バンク306又はバンクグループ304に対する記憶動作待ち行列として使用されてもよいが、必ずしも先入れ先出し様式ではない。換言すれば、ポインタ管理モジュール502は、例えば、現在のポインタ及び次のポインタを使用して、書き込み動作が受信される順序を維持しながら、書き込み動作に対するデータにポインタを方向付けてもよく、しかしながら、不成功ポインタが、バンク306又はバンクグループ304に書き込まれるように以前に試みられた有効データに方向付けられた場合、再試行モジュール504は、書き込み動作が受信された順序から外れた不成功ポインタによって参照されたデータを書き込むことを試みてもよい。
一実施形態において、コピーバックモジュール506は、現在のポインタ又は次のポインタ等の書き込みポインタを、読み取り要求コマンドに関連付けられたデータを記憶する、ページレジスタの記憶場所、例えば、一組のラッチ、に再度方向付け、そのためデータは、データに対する書き込み要求を受信したことに応答して、メモリアレイ301のバンク306又はバンクグループ304に「コピーバック」され得る。このように、データは、不必要な読み取り及び書き込みを実行する代わりに、ページレジスタ308に対する読み取り及び書き込みポインタを単純に操作することによって、ページレジスタを読み取り、メモリアレイ301にコピーバックすることができる。
同様に、一実施形態において、キャッシュ読み取りモジュール508は、読み取りポインタを、書き込みポインタ、例えば、現在のポインタ又は次のポインタ、によって指定されたデータに再度方向付け、そのためデータがメモリアレイ301に書き込まれるのを待ち、次いで読み取り要求コマンドを満たすためにメモリアレイ301からデータを戻して読み出す代わりに、読み取り要求コマンドに応答して、ページレジスタからデータを読み出すことができる。このように、読み取りポインタを操作することがより速く、より効率的となり得、そのためメモリアレイ301に書き込まれるように待ち行列に書き込まれるデータは、メモリアレイ301に書き込まれる前に、ページレジスタ308から読み取ることができる。
メモリセル302のバンク306に対する記憶動作コマンドを待ち行列に入れるためのページレジスタ308の部分606を使用する一実施形態を説明する。一実施形態において、コマンドモジュール402は、記憶動作コマンドを受信する。記憶動作コマンドを受信することに応答して、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対する、ページレジスタ308の部分606内の記憶場所602を判定する。上記のように、ページレジスタ308内の記憶場所602は、ページレジスタ308内の全ての利用可能な記憶場所のサブセット、一部、一部分などであってもよい。ページレジスタ308のサブセット606は、メモリアレイ301内のメモリセル302の特定のバンク306に関連付けられ得る。
一実施形態において、ポインタ管理モジュール502は、記憶動作コマンドに関連付けられたデータを記憶するように指定されたページレジスタ308内の記憶場所602に指定する1つ以上のポインタ604を維持する。例えば、コマンドモジュール402が、読み取り要求コマンドを受信する場合、ポインタ管理モジュール502は、どのポインタ604が読み取りポインタであるか、例えば、読み取りデータを記憶するための記憶場所602として指定され得る、記憶場所0に方向付けられたポインタ604であるかを判定してもよい。データモジュール406は、メモリアレイ301内のバンク306からの読み取り要求に対するデータを受信してもよく、読み取りポインタによって指定された記憶場所0内にデータを記憶してもよい。読み取りデータは、読み取り要求動作が、処理される記憶動作待ち行列内の次の列まで、記憶場所0内に残り得る(例えば、この特定の読み取り要求コマンドの前に処理され得る、読み取り又は書き込みコマンドがそれ以前に受信され得る)。
別の実施例において、コマンドモジュール402は、データをバンク306に書き込むための書き込みコマンドを受信してもよい。ポインタ管理モジュール502は、ページレジスタ308の部分606内の記憶場所602を指定する現在のポインタを判定し得る。現在のポインタが、有効なデータ、例えば、有効性ビットによって示されるように、処理されるために待ち行列に入れられるデータ、を含む記憶場所602を指定している場合、ポインタ管理モジュール502は、次いで、次の/待ち行列ポインタによって指定された記憶場所をチェックしてもよい。
更なる実施形態において、ポインタ管理モジュール502は、コマンドビットを維持し、これは設定されたときに、書き込みコマンドが現在のポインタによって参照されたデータを受信していることを示す。更なる実施形態において、ポインタ管理モジュール502は、書き込み動作が正常に完了したという指標を受信したことに応答して、コミットビットをリセットする。ポインタ管理モジュール502が、書き込み動作が失敗、又は別様に不成功(例えば、書き込みが不完全であった)と判定する場合、ポインタ管理モジュール502は、不成功ビットを設定し得、不成功ポインタが、現在のポインタによって現在参照されているデータを参照することを確実とし、現在のポインタ及び次のポインタをページレジスタ308の部分606内の待ち行列における、次の組のデータにシフトさせ得る。このように、再試行モジュール504は、不成功ポインタを維持することによって、書き込み動作が成功するまで、再試行の試みの閾値数が満たされるまで、など、不成功のポインタによって参照されたデータを使用して、今後のある時点で書き込み動作を試行することができる。いくつかの実施形態において、不成功ビットが設定されない場合、次いで、不成功ポインタは、現在のポインタと同じ記憶場所に、NULLの場所に、及び/又は同様のものに指定し得る。
一実施形態において、データモジュール406が新しいデータを受信するとき、ポインタ管理モジュール502は、データが現在のポインタによって参照される記憶場所602内、又は次のポインタによって参照される記憶場所内に記憶されるべきかどうかを判定する。この判定を行うために、ポインタ管理モジュール502は、現在のポインタに関連付けられたコミットビット及び有効性ビットをチェックしてもよい。有効性ビットが現在のポインタに設定され、現在のポインタによって参照されるデータが有効であることを示す場合、次いでデータモジュール406は、次のポインタによって参照される記憶場所602内にデータを記憶してもよい。同様に、コミットビットが設定され、現在のポインタによって参照されるデータを使用して書き込み動作が実行されていることを示す場合、データモジュール406は、次のポインタによって参照される記憶場所602内にデータを記憶してもよい。様々な実施形態において、現在のポインタ及び次のポインタ、又は1つ以上の次のポインタの各々が、有効性ビットによって示されるように、有効なデータを含み、ページレジスタ308の部分606内に利用可能な記憶場所602がない場合、ポインタ管理モジュール502及び/又はデータモジュール406は、エラーメッセージを送出する、送信するなどして、バンク306への書き込みのためのデータの記憶及び待ち行列に入れることにおけるエラーを示すことができる。
更に、上記のように、例解されたポインタ待ち行列は、典型的な先入れ先出し待ち行列として作用しなくてもよい。例えば、読み取りポインタは、常に記憶場所0を指定し得るが、現在のポインタ、次のポインタ、及び不成功ポインタは、様々な構成において記憶場所2、4、及び6を指定し得る。一実施例において、現在のポインタは、記憶場所2を参照し得、次のポインタは、記憶場所4を参照し得る。書き込み動作が、現在のポインタによって参照される記憶場所2におけるデータを使用して実行される場合、現在のポインタは、記憶場所4に再度方向付けられてもよく、次のポインタは、記憶場所6に再度方向付けられてもよい。しかしながら、書き込み動作が失敗する場合、不成功ポインタが、次いで、記憶場所2を参照し得る。別の書き込み動作が、現在のポインタによって参照される記憶場所4内のデータに対して受信される場合、現在のポインタは、記憶場所6に再度方向付けられてもよい。記憶場所2が不成功のポインタによって依然として参照される場合、次のポインタは、記憶場所4に再度方向付けられ得る。このため、ポインタ管理モジュール502は、ページレジスタ308の部分606内の記憶場所にいずれの特定の順序ではなく、例えば、書き込み動作が受信される順序を維持しながら、記憶場所602の可用性に対応する順序で、現在の/次の/利用不可能なポインタを方向付ける、及び再度方向付けてもよく、しかしながら、書き込み動作が以前に不成功に試みられた場合、再試行モジュール504は、現在の/次のポインタに関連付けられた書き込み動作の順序から外れて、データをバンク306に書き込むことを試みることができる。
記憶動作コマンドを待ち行列に入れるための方法700の一実施形態を説明する。一実施形態において、方法700が開始し、コマンドモジュール402が、メモリアレイ301の記憶場所のバンク304に関連付けられた記憶動作コマンドを受信する702。ある実施形態において、待ち行列モジュール404は、記憶動作コマンドに関連付けられたデータに対するページレジスタ308内の記憶場所を判定することによって、バンク306上で実行するための記憶動作コマンドを待ち行列に入れる704。ページレジスタ308内の記憶場所は、ページレジスタ308内の利用可能な記憶場所のサブセットを含み得る。更なる実施形態において、データモジュール406は、ページレジスタ308内の判定された記憶場所において、記憶動作コマンドに関連付けられたデータを記憶し706、方法700は終了する。
記憶動作コマンドを待ち行列に入れるための方法800の一実施形態を説明する。一実施形態において、方法800が開始し、コマンドモジュール402が、読み取り動作、例えば、読み取り要求動作を受信802して、メモリアレイ301の1つ以上のバンク306からデータを読み出す。いくつかの実施形態において、データモジュール406は、メモリアレイ301の1つ以上のバンク304から読み取り要求のデータを読み取る804。
いくつかの実施形態において、待ち行列モジュール406は、データモジュール406が読み取り動作のデータを記憶することができるページバッファ308内の記憶場所を判定する806。一実施形態において、ポインタ管理モジュール502は、ページバッファ308内の読み取りデータの判定された記憶場所を指定するための読み取りポインタを更新する808。様々な実施形態において、ポインタ管理モジュール502は、読み取りデータが有効データであることを示す、読み取りデータに対する有効性ビットを設定する810。
更なる実施形態において、データモジュール406は、ページバッファ308内の読み取りポインタによって指定された記憶場所から読み取りデータを読み取り812、データを要求した記憶クライアント116に、読み取りデータを転送、伝達、コピー、送信、などを行う。一実施形態において、ポインタ管理モジュール502は、ページレジスタ308から読み取りデータが読み取られた812後に、有効性ビットをリセットし814、方法800が終了する。
記憶動作コマンドを待ち行列に入れるための方法900の一実施形態を説明する。一実施形態において、方法900が開始し、コマンドモジュール402が、メモリアレイ301の1つ以上のバンク306にデータを書き込むための書き込み動作コマンドを受信する902。更なる実施形態において、データモジュール406は、メモリアレイ301に書き込まれるデータ及び/又はデータが書き込まれるメモリアレイ301内の1つ以上のアドレス等の、書き込み動作のためのデータを受信する904。
いくつかの実施形態において、待ち行列モジュール404は、書き込み要求に関連付けられたデータを待ち行列に入れるためのページバッファ308内の現在の記憶場所を判定する906。更なる実施形態において、ポインタ管理モジュール502は、データが記憶されるページバッファ308内の記憶場所を指定するために、現在のポインタ及び不成功ポインタを更新する908。一実施形態において、ポインタ管理モジュール502は、受信された次の記憶動作コマンドに関連付けられたデータに対するページバッファ308内の次の利用可能な記憶場所を指定するために、次のポインタを更新する910。
ある実施形態において、ポインタ管理モジュール502は、現在のポインタによって指定されたデータが有効であること、例えば、データがまだ処理されていないことを示すために、データに対する有効性ビットを設定する912。一実施形態において、データモジュール406は、ページレジスタ308内のデータをメモリアレイ301に書き込むための、書き込みコマンドを試みる914。ある実施形態において、ポインタ管理モジュール502は、現在のポインタによって指定されたデータを書き込む試みが成功したかどうかを判定する916。
一実施形態において、書き込みが成功する場合、ポインタ管理モジュール502は、次のポインタが現在指定しており、次のポインタを、次の利用可能な記憶場所又はメモリアレイ301に書き込まれるように待ち行列に入れられる次のデータに方向付けている、ページレジスタ308内の記憶場所に、現在のポインタを方向付けることによって現在のポインタ及び次のポインタを更新する930。いくつかの実施形態において、ポインタ管理モジュール502は、メモリアレイ301に書き込まれたページバッファ308内のデータに対する有効性ビットをリセットし932、本方法900が終了する。
別の実施形態において、ポインタ管理モジュール502が、現在のポインタによって指定されたデータを書き込む試みが不成功であると判定する916場合、ポインタ管理モジュール502は、不成功ビットを設定し918、不成功ポインタ内に現在の記憶場所を保存する920。一実施形態において、再試行コマンドが受信されない場合922、ポインタ管理モジュール502は、現在のポインタ及び次のポインタを更新し930、本方法900は、書き込みが成功したとして継続する。別の実施形態において、再試行コマンドがコントローラ244から受信された922場合、再試行モジュール504は、不成功ポインタによって指定されたデータをメモリアレイ301に書き込むことを再試行する924。
再試行モジュール504が書き込みの再試行924において成功する場合926、ポインタ管理モジュール502は、不成功ビットをリセットし928、現在のポインタ及び次のポインタを更新し930、本方法900は継続する。再試行モジュール504が書き込みの再試行924において成功しない場合926、不成功ビットは、リセットされず、本方法900は、(例えば、書き込みが成功したとして現在のポインタ及び次のポインタを更新する930ポインタ管理モジュール502を有して、又はコントローラ244から受信した922別の再試行コマンドを有して)継続する。ある実施形態において、コントローラ244は、書き込み試行の閾値数が満たされるなどするまで、データをメモリアレイ301に、成功するまで書き込むことを再試行924し続けるように、再試行モジュール504と連携してもよい。
様々な実施形態において、ページレジスタ308を使用して不揮発性記憶デバイスのメモリアレイ301に関連付けられた記憶動作コマンドをバッファリングするための手段は、コマンドモジュール402、待ち行列モジュール404、ポインタ管理モジュール502、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ308を使用して、不揮発性記憶デバイスのメモリアレイ301に関連付けられた記憶動作コマンドをバッファリングするための類似の又は同等の手段を含み得る。
様々な実施形態において、ページレジスタ308内の記憶動作コマンドに対するデータを記憶するための手段は、データモジュール406、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、ページレジスタ308内の記憶動作コマンドに対するデータを記憶するための類似又は同等の手段を含んでもよい。
様々な実施形態において、記憶動作の少なくともサブセットに対して、ページレジスタ308内に記憶されたデータを処理するための手段は、コマンドモジュール402、データモジュール406、不揮発性記憶デバイスインターフェース139、不揮発性メモリ媒体コントローラ126、記憶クライアント116、ホストコンピューティングデバイス110、バス127、ネットワーク115、コントローラ(例えば、ダイコントローラ220、状態マシン222、コントローラ244、デバイスドライバなど)、センスアンプ250、電圧源、プロセッサ111、他の論理ハードウェア、及び/又はコンピュータで読み取り可能な記憶媒体上に記憶された他の実行可能なコードを含み得る。他の実施形態は、記憶動作の少なくともサブセットに対して、ページレジスタ308内に記憶されたデータを処理するための類似の又は同等の手段を含んでもよい。
本開示は、その趣旨又は本質的な特徴から逸脱することなく、他の特定の形態で具現化されてもよい。記載された実施形態は、全ての点において、例示的なものに過ぎず、限定的ではないと見なされるべきである。したがって、本開示の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の意味及び等価範囲内に含まれる全ての変更は、それらの範囲内に包含されるものとする。