JP2009521049A - ブロック消去可能な記憶場所を有するメモリ - Google Patents
ブロック消去可能な記憶場所を有するメモリ Download PDFInfo
- Publication number
- JP2009521049A JP2009521049A JP2008546769A JP2008546769A JP2009521049A JP 2009521049 A JP2009521049 A JP 2009521049A JP 2008546769 A JP2008546769 A JP 2008546769A JP 2008546769 A JP2008546769 A JP 2008546769A JP 2009521049 A JP2009521049 A JP 2009521049A
- Authority
- JP
- Japan
- Prior art keywords
- block
- control circuit
- blocks
- mapping control
- mapping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
不揮発性メインメモリ(10)が、記憶場所の複数の物理ブロックを備えている。ポインティング情報(112a〜c,114a〜c)をメインメモリ(10)に記憶し、このポインティング情報は、特定機能用に使用した使用済みブロックへのポインタ(112a〜c)、およびこれらの特定機能用に将来使用するために空いている空きブロックへのポインタ(114a〜c)から成る。空きブロックは、使用済みブロックのうち選択したものと置き換える。このことが発生した後、少なくとも2つの空きブロックを置き換えに使用して初めて、ポインティング情報の更新バージョンをメインメモリに書き込むことができる。起動時に、空きブロックへのポインタ(114a〜c)の少なくとも1つを用いて、空きブロックの少なくとも1つにアクセスして、アクセスした空きブロックが使用済みブロックの特定のものの置き換えとして使用されたか否かを判定する。使用された場合は、この空きブロックを、上記使用済みブロックの特定のものの代わりに使用する。
Description
本発明は、メモリデバイス、およびこうしたデバイスを動作させる方法に関するものである。
米国特許第6711663号明細書は、フラッシュメモリデバイスを開示している。あらゆる半導体メモリデバイスからとだいたい同様に、フラッシュメモリ素子からデータを読み込むことができる。データの書込みはより複雑である。一般的に書込みは、メモリセルの1つのブロックを消去して、その後に消去したブロックにデータのページをプログラムすることを含む。一般的に、消去は、ブロック全体に対して集合的に実行することのみが可能であり、したがって、この場合はブロック全体が消去の単位を形成する。プログラミングは通常、ページと呼ばれる定義によってより小さい単位で行うことができる。
フラッシュメモリ素子は、損耗するという問題がある。データブロックは、損耗しきる前に、限られた回数だけ消去およびプログラムすることができ、それ以降は、もはや信頼性を以って使用することはできない。フラッシュメモリデバイスの特定のアドレスのブロックを、他のブロックより頻繁に消去およびプログラムする場合、これらのブロックの有効寿命が、このフラッシュメモリデバイスの有効寿命を制限する。
時間変化する論理アドレス−物理アドレスマッピングを用いることによって、この問題に応えてきた。マッピングを用いて、フラッシュメモリにアクセスするために使用する論理アドレスが、異なる時刻にフラッシュメモリの異なる物理ブロック内の記憶場所を参照することを可能にすることができる。したがって、頻繁に消去およびプログラムを必要とする論理アドレスを、時間と共に異なる物理ブロックに再マッピングして、この論理ブロックを消去およびプログラムする毎に、同一の物理ブロックを消去およびプログラムしなければならないことを回避することができる(本明細書において、「論理ブロック」は、物理ブロック内のマッピング可能な完結した一組のアドレスの完全セットにマッピングされる一組のアドレスを称し、随意的に大まかに、これらの記憶場所に記憶されているデータをも称する)。
効率的な論理アドレス−物理アドレスのマッピングは、論理アドレスに応じて記憶した物理アドレスを含むマッピングテーブルを必要とし、これらの論理アドレスが当該物理アドレスに対応する。原則として、こうしたマッピングテーブルは、物理アドレス−論理アドレスマッピングの変更がなされる毎に更新しなければならない。従来は、フラッシュメモリ用のこうしたマッピングテーブルはRAMメモリ(ランダムアクセスメモリ)に記憶している。起動時に、マッピングテーブルをフラッシュメモリに記憶した「タグ」から再構成し、これらのタグは、異なる物理メモリ領域(例えばブロック)に対する現在の論理アドレスを示す。
米国特許第6711663号明細書は、フラッシュメモリ自体に記憶したマッピングテーブルの使用法について記載している。米国特許第6711663号明細書は、セグメント構成のマッピングを使用している。このメモリは、複数の、ブロックのセグメントとして構成されている。それぞれのマッピングテーブルをセグメント毎に設けて、このテーブルが、セグメントに対する論理アドレスを当該セグメントにおける物理アドレスに変換する。セグメントのサイズは、各マッピングテーブルのサイズがメモリページ、つまりフラッシュメモリのプログラミングの単位に相当するように選択する。
米国特許第6711663号明細書は、セグメントのマッピングテーブルの連続したバージョンを記憶するために、各セグメント内に「メモリ更新ブロック」を設けている。メモリ更新ブロックの最後にプログラムしたページをマッピングテーブルとして使用する。セグメントのマッピングテーブルを変更する毎に、更新したマッピングテーブルをメモリ更新ブロックの次のページにプログラムする。各変更後に、新たなページを用いて、メモリ更新ブロックの全てのページがプログラムされるまで、マッピングテーブルを記憶する。全てのページをプログラムしたあとに、メモリテーブルの次の更新が発生すると、メモリ更新ブロックを消去して、新たなメモリテーブルを、消去したブロックの最初のページに書き込む。
この方法は、起動時に、タグからマッピングテーブルを再構成する時間を必要としない利点を有する。その代わりに、マッピングテーブルをフラッシュメモリから直接読み出すことができる。
しかし、マッピングテーブルを記憶したブロックは、頻繁な更新により、損耗が増加する問題があり得る。
本発明の目的はとりわけ、必要とするマッピングテーブルの更新頻度がより少なく、起動時に長い検索時間を必要としない、マッピングテーブルを記憶したメモリ素子を提供することにある。
本発明によれば、請求項1に記載の装置が提供される。本明細書では、マッピング制御回路は、メインメモリ、例えばフラッシュメモリに記憶されたポインティング情報を維持する。ポインティング情報は、特定機能用に使用するブロックへのポインタ(例えば、論理アドレスのデータ、または、データの検索において使用するデータブロックへのポインタを記憶するため)を含む。これに加えて、ポインティング情報は空きブロックへのポインタを含む。(例えば1つのブロックの過度の損耗を回避するために)特定機能に使用するブロックを置き換える際に、マッピング制御回路は、常にメインメモリのポインティング情報を更新せずに、記憶している空きブロックへのポインタに従って代わりのブロックを選択する。起動時に、マッピング制御回路は、記憶している空きブロックへのポインタの1つ以上を使用して、当該空きブロックが特定機能用のブロックの代替に使用されたか否かを判定し、使用された場合は、この使用済みブロックに代わる空きブロックを使用する。したがって、ポインティング情報が必ずしもメインメモリ内で置き換えられない場合でも、ポインタが空きブロックとして識別したブロックに検索を集中することができるので、起動が高速になる。
一好適例では、メインメモリに記憶している空きブロックへのポインタを使い果たす毎に、ポインティング情報の新たなバージョンを書き込む。この時に、多くの使用済みブロックが空きになっており、これらのブロックを消去した後に、これらのブロックへのポインタを新たなバージョンに記憶することができる。
一好適例では、マッピング制御回路が訂正情報を記憶し、この情報は、作業メモリ(例えばRAMのような揮発性メモリ)内で、空きブロックが使用済みブロックを置き換えるために使用されたか否かを示す。通常動作中に、この訂正情報を使用して、使用済みブロックを置き換える空きブロックの選択を加速することができる。他の好適例では、マッピングテーブルの変更部分(例えば論理アドレス空間のそれぞれのセグメントに対応する物理ブロックのアドレスを含む部分)をキャッシュ記憶する。この他の好適例では、訂正情報を変更部分と並列的に記憶する。したがって、例えば、訂正情報をメインメモリからロードする毎に、訂正情報に応じて、キャッシュ記憶しているマッピングテーブルの対応部分を訂正することができる。代案として、訂正情報をメインメモリからロードする毎に、訂正情報に応じて個々のポインタを訂正することができ、あるいは、論理アドレスの訂正が利用可能である場合には、メインメモリからのポインタのロードをバイパスすることができる。
一好適例では、部分的な書込み動作をブロックに適用する。この場合、少なくとも2つのブロックが同一機能についての情報を記憶し、第1ブロックは、完結した(しかし、部分的に古い)データを有し、第2ブロックは、完結していないが最新のデータを有する。このように、第2ブロックにすでに書き込んだデータと重複しないデータを後に書き込む動作を、他の空きブロックを使用せずに第2ブロックに適用することができる。この好適例では、空きブロックを用いて使用済みブロックを置き換える際に、使用済みブロックはすぐに空きにはならない。読出し動作は古いブロックから行うことができ、あるいは読出し動作が更新されたデータをアドレス指定する際には、新たなブロックから行うことができる。起動時に、マッピング制御回路は、記憶している空きブロックへのポインタを使用して、これらのブロックが特定機能用の部分的データを有するか否かどうかを検査し、有する場合には、これらのブロックを元のブロックと組み合わせて、ポインティング情報によって識別される機能用に使用する。
他の好適例では、2つ以上の書込みコマンドを処理した際に、3つ以上のブロックを同一機能、即ち前に記憶しているデータと重複するデータに関係するコマンド用に使用することができる。代案の好適例では、所定数より多いブロックが同一の機能に必要である際に、不完全に書き込まれたブロックを完結させ、同じ機能用の他のブロックを空き状態にする。他の好適例では、以前に空きであったブロック、並びに更新データ用に使用したブロックの一部を示す訂正情報を、作業メモリに維持する。
本発明のこれらおよび他の目的および有利な態様は、図面に例示する好適な実施例の説明より明らかになる。
図1に、メモリを有する装置を示す。この装置は、フラッシュメモリ10と、マッピングテーブルメモリ12と、マッピング制御回路14と、プロセッサ16と、マルチプレクサ18a,bとを備えている。例えば、マッピング制御回路14は、マッピング制御の機能を実行するコンピュータプログラムによりプログラムされたプログラマブル回路として実現される。プロセッサ16は、マッピング制御回路14への制御接続部を有する。プロセッサ16およびマッピング制御回路14のデータ入出力は、フラッシュメモリ10のデータ入出力に結合されている。マッピング制御回路14およびプロセッサ16は、(随意的にページアドレス部も含む)ブロックアドレス部分および残りのアドレス部分用のアドレス出力を有する。プロセッサ16およびマッピング制御回路14からの、ブロックアドレス部分の出力および残りのアドレス部分の出力は、それぞれマルチプレクサ18a,bを経由してフラッシュメモリ10のブロックアドレス入力および残りのアドレス入力に結合されている。プロセッサ16からのアドレス出力は、マッピングテーブルメモリ12を経由してマルチプレクサ18bに結合されている。マッピング制御回路14は、マッピングテーブルメモリ12およびマルチプレクサ18a,bに結合された制御出力を有する。
フラッシュメモリ10は、一度に少なくとも1ブロックの記憶場所の消去動作を可能にする種類のものである。したがって、消去の単位をブロックと称する。記憶場所は一度に1ページだけプログラムすることができる。一般的に、各ブロックは複数のページを含む。
通常の読出し動作では、プロセッサ16は読出しアドレスを出力して記憶場所にアクセスする。アドレスは、ブロックアドレス部分および残りのアドレス部分を含む。読出しアドレスのブロックアドレス部分を、マッピングテーブルメモリ12によって物理ブロックアドレスに変換して、フラッシュメモリ10に供給する。変換は一般的に、論理ブロックアドレスを、マッピングテーブルメモリ12用のアドレスとして使用して、対応する物理アドレスを読み出すことを含む。残りのアドレス部分は、変換せずにフラッシュメモリ10に供給する。より進歩的な実施例では、読出しアドレスの変換は、アドレスのページアドレス部分とブロックアドレス部分との組合せの変換を含むことができる。
図2に、書込み動作のフローチャートを示す。第1ステップ21では、プロセッサ16は、書込み動作の要求を、この書込み動作に適用すべき論理ブロックアドレスと共に、マッピング制御回路14に信号通知する。第2ステップ22では、マッピング制御回路14は、書込みに使用する物理ブロックを選択する。より進歩的な実施例では、マッピング制御回路14は、書込みに使用する物理ブロックおよび物理ページを共に選択する。選択したブロックおよびページは、他の論理ブロックアドレス用に使用されていない消去済みブロック、または、進歩的な実施例では、使用中でない消去済みページであるべきである。随意的に、マッピング制御回路14は、使用していないブロックがまだ消去されていない場合、フラッシュメモリ10に当該ブロックを消去させる。いずれにせよ、使用していないブロックのいずれも消去されていない場合、これを実行する。
マッピング制御回路14は、選択した物理ブロック(またはページ)を、プロセッサ16が書込みを要求する論理ブロック(またはページ)に割り当てる。第3ステップ23では、マッピング制御回路14は、論理アドレスを物理アドレスにマッピングするための、新たに割り当てたブロック(またはページ)を占める新たなマッピングテーブルを構成する。一実施例では、マッピング制御回路14は、マッピングテーブルメモリ12内のマッピングテーブルを更新して、フラッシュメモリに、上記論理ブロック(またはページ)用の新たなデータを物理ブロック(またはページ)の記憶場所にプログラムさせる。
第4ステップ24では、マッピング制御回路14は、少なくとも1つのプログラムされたページを含むマッピングテーブルの記憶用に割り当てられた一組のブロックうち最初のブロックを識別する。
その後、マッピング制御回路14は連続的に、上記割り当てられたブロックの最初のブロック内の順序的に最初の未使用のページまたは一組のページを検索する。第5ステップ25では、マッピング制御回路14は、こうしたページまたは一組のページを発見したか否かを検査する。発見した場合、マッピング制御回路14は第6ステップ26を実行し、発見した1つ又は複数のページに新たなマッピングテーブルをプログラムする。マッピング制御回路14が、上記最初のブロック内に未使用のページを発見しない場合、マッピング制御回路14は第7ステップ27に分岐し、ここでマッピング制御回路14は、マッピングテーブルの記憶に割り当てた一組のブロックのうち次のブロックを選択する。第8ステップ28では、マッピング制御回路14は、上記次のブロック内の、順序的に最初の未使用のページまたは一組のページに、新たなマッピングテーブルをプログラムする。第9ステップ29では、マッピング制御回路14は、フラッシュメモリ10を制御して、上記最初のブロックを消去する。
図3に、装置が起動するフローチャートを示す。第1ステップ31では、マッピング制御回路14は、少なくとも1つのプログラムされたページを含むマッピングテーブルの記憶用に割り当てられた一組のブロックの最初のブロックを識別する。その後、マッピング制御回路14は、上記最初のブロック内の、順序的に最後に使用したページまたは一組のページを検索する。第2ステップ32では、マッピング制御回路14は、最後に使用したページからマッピングテーブルメモリ12にマッピングテーブルをコピーする。第3ステップ33では、マッピング制御回路14はシステムの通常動作を開始する。
なお、マッピング制御回路14は、第9ステップ29において上記最初のブロックを消去する前に、第8ステップ28において新たなマッピングテーブルをフラッシュメモリ10にプログラムする。この処理が何らかの理由で、例えばシステム(の一部)への電力供給を解除することによって中断された場合、第8ステップ28は実行されるが、第9ステップ29は実行されない恐れがある。マッピング制御回路14は起動時に、マッピングテーブルの記憶用に割り当てられたブロックのうち1つは満杯であり、これらの割り当てられたブロックの他の少なくとも1つは空きでないことを検出することによって、このことを検出するように構成されている。このことを検出した場合は、マッピング制御回路14は、起動時に、完全に満杯ではない上記割り当てられたブロックのうち1つのブロック内の、順序的に最後に使用したページまたは一組のページを使用し、フラッシュメモリ10に、満杯である上記割り当てられたブロックを消去させることが好ましい。代案として、マッピング制御回路14は、満杯である上記割り当てられたブロックの、順序的に最後に使用したページまたは一組のページを使用することができる。この場合、新たにプログラムしたデータを入手し損なうかもしれないが、このことは、図2の処理が早期に中断された場合であり得る。
図4a〜cは、マッピングテーブルの記憶用に割り当てられた一組のブロック内のページを利用する3つの段階を示す。各図には、同じ2つのブロック40,42の組を示す。マッピングテーブルをプログラムしたページを斜線で示す。消去した(空きの)ブロックを、斜線がないことによって示す。一実施例では、各ページにフラグビットをプログラムして、当該ページが空きであるかプログラムされているかを示す。代案として、ブロック内の全てのデータが消去された状態(例えば論理ビット値1)であるか否かを検査することによって、および、随意的にECCの場合(エラー訂正コードをブロック内で使用している場合)は、ECCがエラーを示しているか否かを検査することによって、空きのブロックを検出することができる。あるいはまた、タグをデータとともに書き込む場合、有効なタグの存在を検査することによって検出することができる。
例えば、ページはアドレスの増加と共に図のより下方に示し、図の最上部に示すページが最小アドレスを有する。
第1段階(図4a)では、第1ブロック40のページの一部分にマッピングテーブルがプログラムされている。ブロック40,42がこの状態にある際に、マッピング制御回路14は起動時に、空きでないブロック40内の最下部に示すプログラムされたページを使用する。プロセッサ16が書込みを要求すると、マッピング制御回路14は、空きでないブロック40内の最上部に示す空きのページを、新たなマッピングテーブルをプログラムするために選択する。
第2段階(図4b)では、第1ブロック40の全てのページにマッピングテーブルをプログラムし、第2ブロック42は空きである。この場合、マッピング制御回路14は、図4aの場合のように起動を進める。プロセッサ16が書込みを要求すると、マッピング制御回路14は、第2ブロック42内の最初の空きのページを、新たなマッピングテーブルをプログラムするために選択する。新たなマッピングテーブルをプログラムした後、マッピング制御回路14は、満杯のブロックを消去し、これにより、図4cに示す第3段階に至る。
第3段階(図4c)では、第1ブロック40は空きであり、第2ブロック42の一部分はプログラムされている。ブロック40,42がこの状態にある際に、これらのブロックの役割は図4aと逆になる。
図4dに、第2の段階(図4b)後に、電源の早期の遮断により生じる状態を示す。一方のブロック40は満杯であり、他方のブロック42は空きではない。マッピング制御回路14が起動時にこの状態に直面した場合、マッピング制御回路14は、満杯のブロックを消去して、満杯でないブロック42からのマッピングテーブルを使用する。
代案の実施例では、マッピング制御回路14は、マッピングテーブルに付随するバージョン番号を書き込み、このバージョン番号は、テーブルを書き込む毎に増加する(さもなければ、所定順序に従い変化する)。この実施例では、最新バージョン番号を有するマッピングテーブルを選択することによって、マッピングテーブルの有効なバージョンを識別することができる。別の実施例では、マッピング制御回路14は、更新をバージョン番号とともに、いずれかの中間ブロックに書き込むことができ、例えば他のブロックが満杯である場合は、書込み後にこれらの他のブロックを消去する。
他の実施例では、新たなブロックへの書込み前に満杯のブロック内に「ダーティ」フラグを設定し、起動時に適正なブロックの選択を補助するように、マッピング制御回路を構成することができる。この場合、マッピング制御回路14はまず、ダーティとしてマークされていないブロックから最後のマッピングテーブルを使用しようとする。このブロックが(エラーにより)空きである場合、マッピング制御回路14はダーティのブロックに頼る。
バージョン番号は周期的に変更することができる。バージョン番号は、適正なブロックを見つける目的で満杯のブロックおよび空きのブロックを検査する代わりに、ブロック内の、マッピングテーブルを有するページの位置と組み合わせて利用することができる。この場合、短い周期、例えば4つの異なるバージョン番号で十分である。整数個のマッピングテーブルをブロック内に適合させる実施例を示してきたが、このことが必要でないことは明らかである。マッピングテーブルのサイズが、ブロックを整数個のマッピングテーブルで満たすことができないようなサイズである際に、マッピング制御回路14は最後のマッピングテーブルを、一方のブロックから他方のブロックにオーバーフローさせる(溢れ出させる)ことによって書き込むことができる。この場合、オーバーフローしているマッピングテーブルの後に別のマッピングテーブルを記憶していない場合に、マッピング制御回路14は起動時に、このオーバーフローしているマッピングテーブルを使用し、マッピング制御回路14は、次のブロック内に完全なマッピングテーブルを書き込むまで、最初のブロックを消去しない。
この時点までは、完結したフラッシュメモリ用のマッピングテーブルを記憶していることを仮定している。他の実施例では、複数のマッピングテーブルを、それぞれの論理アドレスのセグメント(範囲)に設ける。
この他の実施例では、マッピング制御回路14は、マッピングテーブルの記憶用に割り当てられた一組のブロック内の独立して選択可能なそれぞれのページから、それぞれの範囲用のマッピングテーブルをプログラムおよびロードする。別の実施例では、マッピング制御回路14は、マッピングテーブルに当たるセグメントの識別子を、当該マッピングテーブルが記憶されているフラッシュメモリ10のページにプログラムするように構成されている。起動時に、マッピング制御回路14は、割り当てられたブロックを検索して、各セグメントの識別子を含む順序的に最後のページを見つける。マッピング制御回路14はこれらのページをマッピングテーブルメモリ12にコピーして、アドレスの変換中に使用することが好ましい。
プロセッサ16が新たなページの書込みを要求すると、マッピング制御回路14は前述のように新たなマッピングテーブルを生成するが、プロセッサ16が書込みを要求する論理アドレスを含むセグメントの論理アドレスのみについて生成する。しがたって、マッピング制御回路14は、当該セグメント用の新たなマッピングテーブルを、マッピングテーブルの記憶用に割り当てられた一組のブロック内のマッピングテーブルに追加するに過ぎない。例えば、異なるセグメント用のマッピングテーブルを、異なる形式の斜線で図4a,bに示す。
図5に、割り当てられたブロックが満杯である際に、書込み中に起こることを示す。この場合、マッピング制御回路14は、更新したセグメント用の新たなマッピングテーブルを、マッピングテーブルの記憶用に割り当てられた一組のブロックのうち空きのブロックの1つ42に書き込む。これに加えて、いくつかの実施例では、マッピング制御回路14は、他のセグメント用の現在のマッピングテーブルを、空きのブロックの1つ42にコピーする。このことを図の矢印により図式的に示すが、もちろん、これらのマッピングテーブルの内容は、フラッシュメモリ10の代わりにマッピングテーブルメモリ12からコピーすることもできる。その後、マッピング制御回路14は、フラッシュメモリ10に満杯のブロック40を消去させる。これにより、マッピング制御回路14が起動時に、どのブロックが有効なマッピングテーブルを含むかを識別することを可能にする。
古いブロック40を誤って消去していない場合、マッピング制御回路14は、満杯のブロック40が空きでないブロック42と組み合わされていることを検出して、起動時に満杯のブロックを消去する。マッピング制御回路14はまず、全てのセグメント用のマッピングテーブルが満杯でないブロック42内に記憶されていることを検証することが好ましい。記憶されていない場合には、マッピング制御回路14はまず、満杯のブロック40内のコピーされていないセグメント用の順序的に最後のマッピングテーブルを検索して、満杯のブロック40を消去する前に、これらのマッピングテーブルを満杯でないブロック42にコピーする。
代案として、まず新たなマッピングテーブルを空きのブロック42に書き込む際に、他のセグメント用のマッピングテーブルをコピーせず、満杯のブロック40を消去しない。この場合、マッピング制御回路14は、誤った遮断の場合と同様に、起動時にブロックを読み出すことがまだ可能である。他のブロック42が満杯になるまで、満杯のブロック40の消去を延期することができる、というのは、起動時にマッピング制御回路14は、どのブロックが満杯でないかを検出することによって、どのブロックが最後に書き込まれかを、まだ検出することができるからである。この代案では、マッピング制御回路14は、満杯でないブロックが満杯になりそうな際のみに、満杯のブロック40を消去する必要がある。この場合、マッピング制御回路14はまず、あるセグメント用のマッピングテーブルが満杯でないブロック42内にまだ記憶されていなければ、これらのセグメント用のマッピングテーブルをコピーすることが好ましい。すなわち、満杯でないブロック42内にまだプログラムされていないマッピングテーブルを追加した後に、満杯でないブロック42が1つの空きページを残すのにちょうど十分な空間を有するまで、消去を延期することができる。
他の実施例では、マッピングテーブルの記憶用に割り当てられた一組のブロックが3つ以上のブロックを含む。このことは例えば、これらのブロックに記憶したデータ(例えばマッピングテーブル)が、1つのブロックから他のブロックにオーバーフローし得るほど大きい場合に有利であり得る。この場合、例えば割り当てられたブロックは、所定のシーケンスで使用することができる。その場合は、上記一組のうち少なくとも最も長らく更新していないブロックを消去して、マッピングテーブルを記憶するために再使用することが好ましい。起動中に、マッピング制御回路14は空きのブロックを位置検出し、これを利用してシーケンスの開始/終了を決定し、このシーケンスから、マッピング制御回路は、記憶しているデータの最新バージョンを検出する。
図6に、異なるブロックを異なるセグメント用に使用する実施例を示す。この場合、4つのブロック60を同数のセグメント用に設け、ブロック60の1つが満杯である場合用に予備ブロック62を設ける。動作中に、マッピング制御回路14が書込み要求を処理する際に、マッピング制御回路14は、書込み要求によって変更されたセグメント用の新たなマッピングテーブルを、当該セグメント用の前のマッピングテーブルを含むブロック内にプログラムする。当該セグメント用のブロック60が満杯である場合、マッピング制御回路14は新たなマッピングテーブルを予備ブロック62内にプログラムする。そして、この予備ブロックは、当該セグメント用のブロックになり、その後にマッピング制御回路14は、当該セグメント用の古いブロックを消去する。一実施例では、ページに書き込む際に、セグメントの識別子を新たなブロックにプログラムするか、あるいは、こうした識別子をブロックの各ページ中にプログラムすることができる。
起動時に、マッピング制御回路14は、割り当てられたブロック60,62の各々を検査して、これらのブロックをどのセグメント用に使用するかを決定する。ブロックからの順序的に最後のマッピングテーブルを、セグメント用のマッピングテーブルとして使用する。電源遮断により、1つのセグメント用のデータを含む割り当てられたブロック60,62が2つ存在する場合、マッピング制御回路14は、これらのブロックから満杯でないブロックを選択し、その他のブロックを消去して、満杯でないブロックからの順序的に最後のマッピングテーブルを使用する。
一実施例では、マッピングテーブルメモリ12は、全てのセグメント用のテーブルを並列的に含み、メモリマッピングテーブルはいかなる論理アドレスも即座に変換することができる。この実施例では、マッピング制御回路14は、全てのセグメント用のマッピングテーブルをマッピングテーブルメモリ12にロードする。他の実施例では、マッピングテーブルメモリ12は、セグメントの限定された部分集合用のマッピングテーブルのみ、例えば1つのセグメント用のマッピングテーブルのみを、一度に記憶する。この実施例では、マッピング制御回路14は、当該セグメント用のマッピングテーブルがマッピングテーブルメモリ12内に存在しないセグメント内の論理アドレスを受信した際に、割り当てられたブロック、60,62または40,42からのマッピングテーブルを用いて、1つのセグメント用のマッピングテーブルを他のセグメント用のものに置き換える。
セグメント用の整数個のマッピングテーブルがブロックに適合する実施例を示してきたが、このことは必要でないことは明らかである。セグメント用のマッピングテーブルのサイズが、セグメント用の整数個のマッピングテーブルでブロックを満たすことができないサイズである際に、マッピング制御回路14は、最終セグメント用のマッピングテーブルを、図5の場合には一方のブロックから他方のブロックにオーバーフローさせて書き込むことができる。この場合、オーバーフローしているマッピングテーブルの後に他のマッピングテーブルを記憶ない場合に、マッピング制御回路14は起動時に、オーバーフローしているマッピングテーブルを使用して、完全なマッピングテーブルを次のブロック内に書き込むまで最初のブロックを消去しない。図6の場合、セグメント用の完全なマッピングテーブルを、新たに割り当てたブロックに書き込み、そしてすぐに、前に割り当てたブロックを空きにすることが好ましい。
一実施例では、所定組のブロックを、マッピングテーブルの記憶用に割り当てる。この実施例では、この所定組のブロックは所定のアドレスに位置し、このためマッピング制御回路14は、これらの所定のアドレスにあるブロックを参照するように設計することができる。しかし、このことは、割り当てられたブロックがより早く損耗する欠点を有し得る。代案として、変化する1つまたは複数のブロックをマッピングテーブルを記憶するために割り当てることができ、メモリでバックアップされたRAMを設けて、割り当てられた1つまたは複数のブロックへのポインタを記憶することができる。
代案の実施例では、連結リスト構造を用いて、マッピングテーブルを記憶するために割り当てられた一組のブロックを規定する。これを図7aに示す。ここではフラッシュメモリ71全体をブロックに分割して概略的に示す。フラッシュメモリ内の所定の物理アドレス(例えばアドレスゼロ)にあるベース(基本)ブロック70を用いて、1つ以上のベースポインタを記憶する。このベースブロックを拡大したもの70aを、ベースポインタ位置72とともに示す。この位置からのベースポインタは、他のポインタを記憶している他のブロック74を指示(ポイント)する。この他のブロックを拡大したもの74aを、マッピングテーブルを記憶するために割り当てられたブロック76を指示するポインタを有するベースポインタ位置75とともに示す。
起動中に、マッピング制御回路14はまず、ポインタ72をベースブロック70からロードし、このポインタを使用して他のブロック74をアドレス指定し、このブロックから、マッピング制御回路14は、マッピングテーブルの記憶用に割り当てたブロック76へのポインタをロードする。マッピング制御回路14は、その後の使用のためにこのポインタを保存し、このポインタを使用して、マッピングテーブルの記憶用に割り当てられたブロック76から現在のマッピングテーブルをマッピングテーブルメモリ12にロードする。このことは例えば、前に記載したいずれかの方法を用いて行うことができる。
なお、ブロック70,74の各々は、1つの有効なポインタのみを含む。したがって、これらのブロックは、マッピングテーブルを有するブロック76を、ベースブロック70または中間ブロック74内の1つのダイレクトポインタによって全く同様に発見することができたという意味で冗長である。これらの冗長なブロックを足し合わせて、ベースブロックを更新する必要のある頻度を低減する。
さらに、この構造は、マッピングテーブルを記憶するためのブロック76として異なる物理ブロックを割り当てて、同一ブロックを他よりずっと頻繁に消去することを回避することができる利点がある。割り当てられたブロック76を変更する毎に、割り当てられたブロック76を指示するブロック74内に新たなポインタ75を書き込む。少なくとも置き換え可能なブロック(割り当てられたブロック76および中間ブロック74)の各々が、消去された回数を示すカウンタ値を記憶し、マッピング制御回路14は、このカウンタ値が閾値を超えると、関連するブロックを異なるブロックに置き換えるように構成可能であることが好ましい。例えばブロックを消去する毎にカウンタ値を書き込む際に、このカウンタ値を1だけ増加することができる。
同様に、時間と共に、異なる物理ブロックを中間ブロック74用に用いて、新たなポインタ値を記憶する前に同一ブロックを過度に頻繁に消去することを回避することができる。中間ブロック74を変更する毎に、中間ブロック74を指示するベースブロック70内に新たなポインタ72を書き込む。なお、中間ブロック74の変更の頻度は、割り当てられたブロック76の変更の頻度より低い。一例では、割り当てられたブロック76をN1回(例えばN1=8)消去する毎に、割り当てられたブロック76用に異なる物理ブロックを選択する。したがって、中間ブロック74は、割り当てられたブロックをN2回(例えばN2=100000、又はより一般的にいえば、ブロックを消去してまだデータを記憶するために利用することができる最大回数より小さい任意の整数)消去する毎に、1回だけ更新する必要がある。中間ブロック74に対応する物理ブロックをN2回消去すると、この物理ブロックも置き換えられる。したがって、こうした置き換えは、割り当てられたブロック76の消去をN1×N2回した後に発生する。こうして、より遅い損耗が中間ブロック74に生じ、ベースブロック70にはさらに少ない損耗が生じる。
代案として、中間ブロック74を全く利用せずに、割り当てられたブロック76を直接指示するベースブロック70内のポインタ72を利用することができる。このことは、フラッシュメモリのより効率的な使用、およびマッピングテーブルのより高速の検索を提供する。しかし、ベースブロックの損耗は増加する。少し時間をおいて、ポインタ値を有するブロックを消去しなければならず、このことは不可避の損耗の増加をもたらす。こうした損耗を低減するために、中間ブロック74内の中間ポインタを、ベースブロック70と割り当てられたブロック76との間に使用する。
他の代案として、中間ブロックのチェーン(連鎖)を用いることができ、つまり、割り当てられたブロック76を指示するチェーン内の最後のブロックを除いて、ベースブロック70内のポインタ72がチェーン内の最初のブロックを指示し、チェーン内の次のブロックの各々が、チェーン内のその次のブロックを指示する。このようにして、ベースブロックの損耗を低減することができる。中間ブロックが割り当てられたブロックからより遠いほど、これらのブロックを更新する必要性はより低い。したがって、所定の物理アドレスを有するベースブロック70を、これが損耗するほど頻繁な更新から保護することができる。
固定の所定長のチェーンを使用することができる。代案として、動的に適応可能な長さを用いることができる。この場合、チェーン内の最終の中間ブロックが、当該ブロックのポインタが上記割り当てられたブロックを指示することの指標を記憶する(あるいは、チェーンの終点から所定距離にあるブロックが、チェーンに沿って所定距離にあるブロックがこうしたポインタを記憶していることを示す)ことが好ましい。一実施例では、マッピング制御回路14が閾値を上回る更新頻度を検出すると(例えばベースブロック70が消去された回数が閾値Tを上回ると)、マッピング制御回路14はチェーンの長さを増加させる。したがって、チェーンの長さを使用の種類に適応させて、ベースブロック70の過度の損耗を回避することができる。一実施例では、チェーンの長さの延長を用いて、閾値回数より多いベースブロック70の更新を回避する。このことは例えば、ベースブロック70が例えば閾値(T=100000)回更新されると、追加的な中間ブロックをチェーン内に追加し、ベースブロック70の最終回の消去後に、新たなブロックへのポインタをベースブロック70内に書き込み、そして、次の中間ブロックへのポインタを新たな中間ブロックに書き込むことによって実現することができる。新たな中間ブロックを閾値T回消去した場合等に、ベースブロックの役割を果たす新たな中間ブロックを用いてこのことを繰り返すことができる。
他の実施例では、チェーンはツリー(木)構造の一部である。すなわち、チェーンからのポインタを記憶するいくつかのブロックは、他のブロックへの他の有効なポインタも記憶し、これらの他のブロックも、1つ以上の他のポインタ、または論理アドレス−物理アドレスのマッピングテーブル(の一部)を記憶する。起動時に、マッピング制御回路14は、ツリー構造の全てのブランチ(枝、分枝)のポインタを追跡して、マッピングテーブル(の一部)を見つける。
複数の有効なポインタを記憶するブロックは同時に、ツリー構造内の分岐(分岐点)を有するノードに対応する。ツリー構造内の最終ノード(リーフ(葉)ノード)はマッピングテーブルの一部分を指示する。任意の深さのツリー構造を用いることができる。ツリー内のいくつかのノードは、分岐しないノードであり、ツリー構造内の次の1つのノードのみを指示するノードであることが好ましい。これらのノードは単に、ツリー構造の深さ(ルート(根)ノードとリーフノードとの間のノード数)を増加させる働きをし、リーフノードの数は増加させない。したがって、ルートノード用の1つ又は複数のポインタを記憶するブロックの更新頻度を低減することができる。
こうした分岐しない複数のノードは直列に使用することが好ましい。また、ノードの層全体(所定の深さ、即ちルートノードから等距離にある全てのノード)を非分岐にすることが好ましく、連続した複数の層のノードを非分岐にすることがより好ましい。これらの層は、単にツリー構造の深さ(ルートノードとリーフノードとの間のノード数)を増加させる働きをし、リーフノードの数を増加させる働きはしない。したがって、ルートノードに対する1つ又は複数のポインタを記憶するブロックの更新頻度を低減することができる。所望すれば、ツリー構造の深さを動的に増加させて更新頻度をさらに低減することができる。
他の実施例では、複数のブロックを、マッピングテーブル又はその一部分を記憶するために割り当てる。このことは例えば、古い割り当てられたブロック内の古いマッピングテーブルを消去する前に、新たに割り当てられたブロック内に新たなマッピングテーブルを記憶する実施例に適用することができる。代案として、このことは例えば、論理ブロックアドレスのそれぞれのセグメント用のマッピングテーブルをそれぞれのブロック内に記憶する実施例に適用することができる。
図7bは、この実施例を示す。この実施例では、ベースブロック70は、それぞれ中間ブロック74,78への第1および第2ポインタ72,72aを含み、これらの中間ブロックの各々は、それぞれ割り当てられたブロック76,79へのポインタ75,75aを含む。この実施例では、起動中に、マッピング制御回路14は、まずポインタ72,72aをベースブロック70からロードし、これらのポインタを使用して他のブロック74,78をアドレス指定し、マッピングテーブルの記憶用に割り当てられたブロック76,79へのポインタをロードする。マッピング制御回路14は、その後の使用のためにこれらのポインタを保存し、これらのポインタを用いて、現在のマッピングテーブルまたはそのセグメントを、マッピングテーブルの記憶用に割り当てられたブロック76から、マッピングテーブルメモリ12にロードする。このことは例えば、前に記載した方法のいずれかを用いて行うことができる。
割り当てられたブロック76,79の一方の代わりに他のブロックを、マッピングテーブルの記憶用に使用し始める際に、マッピング制御回路14は、中間ブロック74,78内のポインタのうち、置き換えられた方の割り当てられたブロック76,79を指示していた方のポインタを変更する。マッピング制御回路14は、ポインタを変更する前に、新しいマッピングテーブル(またはマッピングテーブルのセグメント)を、新たに割り当てられたブロック内に記憶することが好ましい。
2つのポインタ72,72aをベースブロックに記憶する構造を示してきたが、代案が可能であることは明らかである。例えば、2つのポインタの代わりに、単一の中間ブロックへの単一のポインタを記憶することができ、この中間ブロックが、割り当てられたブロック76,79への2つのポインタを記憶する。このことは、必要なブロックがより少数であるという利点があるが、より多くの消去動作を必要とするので、より損耗をもたらす。他の例として、3つ以上の割り当てられたブロック76,79を用いる際に、3つ以上のポインタを(ベースブロック70または中間ブロック74,78内に)記憶することができる。代案として、互いに所定の物理的関係にある(例えば連続した物理アドレスを有する)ブロックを、中間ブロック74,78または割り当てられたブロック76,79用に用いる際に、中間ブロック74,78の一方または割り当てられたブロック76,79の一方への単一のポインタを使用することができる。
前の例では、有効なポインタだけを各ブロック内に記憶することを示したが、このことは、マッピング制御回路14が、ベースブロック70および中間ブロック74,78内のポインタ値を変更する毎にこれらのブロックを消去して再書込みする(あるいは中間ブロック74,78を置き換える)ことを意味する。代案として、マッピング制御回路14は、前に記憶したポインタを消去することなしに、ポインタを有するベースブロック70または中間ブロック74,78内の新しいページに、新たなポインタ値の各々を書き込むように構成することができる。
図7cに、連続したポインタ72,75用の連続したページの使用法を示す。ポインタ値を含むページを斜線で示す。各場合において、斜線を付けた最下部のページ(ポインタ値を含み、かつ最高アドレスを有するページ)が有効なポインタ値を含む。より上部の(より低いアドレスを有する)ページは、より古い(無効な)ポインタ値を含む。代案の実施例では、マッピング制御回路14は、ポインタに付随するバージョン番号を書き込み、このバージョン番号は、テーブルを書き込む(さもなければ、所定シーケンスに従って変化する)毎に増加する。この実施例では、最新のバージョン番号を有するマッピングテーブルを選択することによって、マッピングテーブルの有効なバージョンを識別することができる。
起動中に、マッピング制御回路14は、例えば、所定のページ列内のポインタを有するページであって、空きページが後続するページを検索することによって、有効な(最新に記憶した)ポインタ値を無効なポインタ値と区別する。この所定のページ列は例えば、物理アドレスの列とすることができる。検索は、例えば二分探索(バイナリサーチ)法(まずブロック内の中ほどのあるページが空きであるか否かを検査し、そして、最初に検査したページが空きである場合または空きでない場合にそれぞれ、前半または後半内の中ほどのあるページを検査し、等を、検査したページの両側に隣接するページがすでに検査したページになるまで行う方法)とすることができる。この実施例は、起動中のより長い探索時間を代償にして、必要な消去動作の頻度がより少ないという利点がある。
代案の実施例では、マッピング制御回路14はポインタに付随するバージョン番号を書き込み、このバージョン番号は、新たなポインタを書き込む(さもなければ、所定シーケンスに従って変更する)毎に増加する。この実施例では、最新のバージョン番号を有するポインタを選択することによって、ポインタの有効バージョンを識別することができる。さらに他の実施例では、マッピング制御回路14は、更新をバージョン番号とともに、いずれかの中間ブロックに書き込むことができ、例えば他のブロックが満杯である場合は、書込み後に他のブロックを消去する。
バージョン番号は周期的に変化させることができる。バージョン番号は、適正なブロックを見つける目的で満杯のブロックおよび空きのブロックを検査する代わりに、ブロック内のポインタを有するページの位置と組み合わせて用いることができる。この場合、例えば4つの異なるバージョン番号の短い周期で十分である。
他の実施例では、マッピング制御回路は、新たな中間ブロックへの書込み前に満杯の中間ブロックに「ダーティ」フラグを設定し、起動時に適正なブロックの選択を補助するように構成することができる。この場合、マッピング制御回路14はまず、ダーティとしてマークされていない中間ブロックを使用しようとする。このブロックが(エラーにより)空きである場合、マッピング制御回路14はダーティのブロックに頼る。
(図7bの場合のように)複数の有効なポインタ値を並列的に使用する実施例では、複数の並列的なポインタ値を、これらのポインタ値のランクの識別子を伴って記憶することができる。この場合、起動中に、マッピング制御回路14は、ランク毎の有効な(最新に記憶した)ポインタ値を検索し、これらのポインタ値は、ほとんどが、所定シーケンス内で、同じランクの他のあらゆるポインタ値より進んだ位置にあったものである。
マッピング制御回路14がポインタ値の記憶用に全てのページを使用し尽くし、新たなポインタ値を書き込まなければならない際に、マッピング制御回路14はブロックを消去して、再び最上部から開始する。図8a〜cは、複数ブロックをポインタ値用に使用する代案実施例を示す。ベースブロック70内のポインタ72、82は、第1中間ブロック74および第2中間ブロック84を参照する。最初に、図8aに示すように、ポインタ値を変更する毎に、変更したポインタ値75を第1中間ブロック74内の新たなページに書き込み、第2中間ブロック84は空きのままである。第1中間ブロック74が満杯である際に、マッピング制御回路14は、図8bに示すように、次に変更したポインタ値75を第2中間ブロック84の第1ページに書き込み、その後に図8cに示すように、古いポインタ値のブロックを消去する。
このようにして、更新の中断によるエラーを容易に回復することができる。起動中に、マッピング制御回路14は、第1中間ブロック74が満杯であるか否かを検査し、満杯である場合、1つ以上のポインタを第2中間ブロック84から入手可能であるか否かを検査する。入手可能である場合、マッピング制御回路14は第2中間ブロック84からの最終ポインタを使用し、入手可能でない場合、マッピング制御回路14は第1中間ブロック74からの最終ポインタ値を使用する。第1中間ブロック74が空きである場合、マッピング制御回路14は第2中間ブロック84からの最終ポインタ値を使用する。
なお、第2中間ブロック84へのポインタ値の追加、および、古い第2中間ブロックの消去は、長い時間にわたって行う(例えば複数ポインタ値を第2中間ブロック84に書き込むまで消去を遅らせる)ことができる、というのは、マッピング制御回路14は起動時に、中間ブロックが満杯であるか否かを検査することによって、どの中間ブロックが有効なポインタ値を有するかを特定し、当該中間ブロックが空きでない場合は他の中間ブロックからの最終ポインタ値を使用し、それ以外の場合は、先行する中間ブロックからの最終ポインタ値を使用するように構成することができるからである。
この技術はベースブロック70にも適用することができる。例えばベースブロック70の全てのページを使用している際に、マッピング制御回路14は、所定の予備ベースブロック(例えばブロックアドレス1を有するブロック)内の最初のページに次のポインタ値を書き込み、その後にベースブロック70を消去する。例えば第2中間ブロック84を変更する場合、マッピング制御回路14は、古い中間ブロックへのポインタ値82の後に(必要であれば)第2中間ブロック84にポインタ値を追加し、第2中間ブロック84内の最初のページにポインタ値を書き込む。
図9aに、例えば図7bの場合のように、2つ以上の有効なポインタ値を並列的に使用する例を示す。並列的なポインタ値は、それぞれのランクに対応する(例えば連続した論理アドレス範囲用のマッピングテーブルの連続したセグメントのランクに対応し、並列的なポインタを第1および第2ポインタと称する)。それぞれの中間ブロックをそれぞれのランクに対するポインタ値の記憶用に割り当て、割り当てたランクを識別する情報(例えばランクに対応する数)を、ポインタ値を含むそれぞれの中間ブロックに記憶する。
有効な並列的なポインタの各々を、それぞれの中間ブロック74,78内の最後に占有された位置に記憶する。追加的なポインタ92をベースブロック70内に記憶し、このポインタは追加的な中間ブロック94を指示する。他の中間ブロック74,78のいずれも満杯でない間は、この追加的な中間ブロック94は空きのままである。この場合、マッピング制御回路14は、新たなポインタ値を中間ブロック74,78内の連続したページに書き込む。中間ブロック74,78の一方が満杯であり、新たなポインタ値を追加しなければならない際に、マッピング制御回路14はこの新たなポインタ値を追加的な中間ブロック94に書き込む。これに加えて、マッピング制御回路14は、このポインタのランクの識別子を追加的ブロック94に書き込む。図9bに示すように、その後、マッピング制御回路14は満杯の中間ブロックを消去する。この消去したブロックは今度は、追加的な中間ブロックの一部を想定し、つまり、ポインタ値を追加しなければならない時にある中間ブロックが再び満杯である際に、マッピング制御回路14はこのポインタ値を、現在空きである追加的ブロックに書き込み、満杯のブロックを消去する。
起動時に、マッピング制御回路14は、ポインタをベースブロック70からロードして、どのポインタがランク毎の中間ブロックを指示するかを特定する。こうした中間ブロックの2つが同一ランクに対応する場合、マッピング制御回路14は、これらの中間部ロックのうち満杯でない、または空きである方を選択して、上記割り当てられたブロックへのポインタをロードし、他方の中間ブロックが満杯である場合、このブロックを消去する。ランクに対する一方のブロックが満杯であり、他方が空きである場合、マッピング制御回路14は、満杯のブロックからの最後に書き込んだポインタ値を使用する。
図10a,bに、異なるランクのポインタ値105a,105bを共に同じブロック内に記憶し、各ポインタ値がそのランクの識別子を伴う実施例を示す。この実施例では、マッピング制御回路14は、全てのランクに対する新たなポインタ値を同一の中間ブロック74に、当該ブロックが満杯になるまで追加する。次に、あるランクに対する新たなポインタ値を書き込まなければならない際に、マッピング制御回路14は、このランクに対する新たなポインタ値を追加的ブロック94に書き込み、その他の1つまたは複数のランクに対する、1つまたは複数の有効なポインタ値を追加的ブロック94にコピーする。その後に、マッピング制御回路14は満杯のブロックを消去する。起動時に、マッピング制御回路14は、ベースブロック70内のポインタ値を使用して中間ブロックを特定し、空きでもなく満杯でもない中間ブロックを検索して、このブロックからの最後に書き込んだポインタ値を使用し、このブロックが全てのランクに対するポインタ値を生じさせなければ、マッピング制御回路14は、他のブロックが満杯でなければ、残りの全てのランク対する、最後に書き込んだポインタ値を他のブロックからロードする。
なお、有効なポインタ値を2つ以上の可能なブロックから選択しなければならない実施例のいずれにおいても、マッピング制御回路14は、例えば、空きでない他のブロックが利用可能な場合の満杯ブロックの消去、バージョン番号の使用、ダーティフラグの使用のような何らかのメカニズムを使用して、使用するブロックを決定するように構成することができる。また、矛盾が生じた場合、マッピング制御回路14は、信頼性のある最終バージョンを識別することができる。例えば、マッピング制御回路が、ポインタが無効なマッピングテーブル(例えば、空のマッピングテーブル、または、異なる論理アドレスを同一の物理アドレスにマッピングするテーブル)を参照していることを判定した場合、マッピング制御回路はポインタの前のバージョンを用いることができる。このことは、マッピング制御回路14が情報の置き換えを完了する前に情報を消去しないことが保証されている際に、最良のエラー訂正をもたらす。
他の実施例では、更新の回数を低減する。このことは、マッピングテーブルを更新する際に、マッピングテーブルに関連して、マッピングテーブルに記入すべきブロックを指定する「空き」ブロックのリストを記憶することによって行う。したがって、論理アドレスが第1ブロックの物理アドレスにマッピングされ、その後の第1ブロック内のデータの更新中に、マッピング制御回路14が(例えば第1ブロックのそれ以上の損耗を回避するために)第1ブロックを第2ブロックに置き換えることを選択した場合、マッピング制御回路14は、第2ブロックを空きリストから選択して、論理アドレスの識別子(例えば「タグ」)を第2ブロック内に記憶する。この場合、マッピング制御回路14は新たなマッピングテーブルを書込まない。その代わりに、その後の起動時に、マッピング制御回路14は、古いマッピングテーブルに関連して記憶した空きリストを使用して、空きリスト上のブロックのいずれかが更新に使用されたか否かを判定する。使用されている場合、マッピング制御回路14は、マッピングテーブルの訂正を、これらのブロック内の論理アドレスの識別子から推測する。空きブロックのリスト上の全てのブロックを使用した場合のみに、マッピングテーブルの新たなバージョンを記憶する必要がある。
図11に、この実施例において使用する、マッピングテーブルの情報を有するメモリからのブロック110を示す。このブロックは、マッピングテーブルの連続したバージョン112a〜cを含み、各バージョンは空きブロックのアドレスを有する「空きリスト」114a〜cを伴う。マッピングテーブル112cの最終バージョン、及びこれに関連する空きリスト114cを現在バージョンと称する。動作中には、マッピングテーブル112cの現在バージョン中にアドレスが出現する物理ブロックを代替ブロックを用いて更新しなければならない際に、マッピング制御回路14は、関連する空きリスト114cからの最初に利用可能なアドレスを使用して、この最初に利用可能なアドレスによってアドレス指定したブロックに更新を書き込む。これに加えて、マッピング制御回路14はタグをこの新たなブロックに書き込み、このタグは更新を適用する論理ブロックアドレスを識別する。マッピング制御回路14は、新たなブロックにおける更新が完了した後に、現在のマッピングテーブル112cにまだ見られる古いブロックを消去する。
したがって、マッピング制御回路14は、マッピングテーブルメモリ12中のマッピングテーブルを更新することが好ましい。マッピング制御回路14が、現在の空きリスト114c中の全てのブロックを更新に使用したことを検出すると、マッピング制御回路14は、マッピングテーブル及び消去した古いブロックのリストの新たなバージョンを、ブロック110内の古い空きリスト114cの後に(あるいはマッピングテーブルデータ用に使用した他のブロック内に)書き込む。各空きリストは複数のブロックのアドレスを含むことが好ましい。この場合、一旦、古い空きリスト114cを使い切ったときにのみ、マッピングテーブルおよび空きリストの新たなバージョンを書き込むことが好ましい。
起動時に、マッピング制御回路14は、例えばブロック110内の空でない最後のページを検索することによって、空きリスト114cの現在バージョンを読み出す。そして、マッピング制御回路14は、この空きリスト114c上のアドレスによってアドレス指定されるページを参照して、データがこれらのページに書き込まれているか否かを判定する。書き込まれている場合は、マッピング制御回路14はタグから、どの訂正をマッピングテーブルの現在バージョンに適用しなければならないかを決定する。したがって、各々が、論理ブロックのアドレスおよび物理ブロックのアドレスを当該論理ブロックについての更新データによって識別する1つ以上の訂正を決定する。一実施例では、マッピング制御回路14は、マッピングテーブル112cの現在バージョンをブロック110からマッピングテーブルメモリ12にコピーして、これらの訂正をマッピングテーブルメモリ12中のマッピングテーブルに適用する。他の実施例では、マッピング制御回路14は、訂正のリストをマッピングテーブルメモリ12に記憶し、マッピングテーブルのエントリをブロック110からロードする際に、これらの訂正をマッピングテーブルのエントリに適用する。
マッピング制御回路14は、空きリスト114cからのブロックを、これらのブロックのアドレスが空きリスト114c中に出現する順序で、更新に使用することが好ましい。この場合、起動時に、マッピング制御回路14は、空きリスト114c上のブロックを、これらのブロックのアドレスが空きリスト中に出現する順序で、更新について検査し、一旦、あるブロックが更新されていないことを判定すると検査を中止することが好ましい。このことは起動を加速するが、ブロックの一部分のみが空きリスト114cに出現する際に、こうしたシーケンスを使用しないでも起動は非常に速い。
一旦、ブロックの更新バージョンが完全に書き込まれると、現在のマッピングテーブル112c中に出現する古いブロックの各々を消去することが好ましい。したがって、データは失われない。しかし、マッピングテーブルおよび(好ましくは消去された全てのブロックが出現する)空きリストの新たなバージョンが書き込まれる直前まで、消去を遅延させることができる。また、マッピングテーブル112a〜cおよび空きリスト114a〜cを次々に記憶する実施例を示したが、マッピングテーブルと空きリストとの関連付けは他の方法で、例えば両方のバージョン番号を含めることによって実現することができることは明らかであり、ここではマッピングテーブルおよび空きリストを任意に記憶することができる。また、マッピングテーブルおよびこれに関連する空きリストを、異なるブロックに、例えば同じ順序で記憶して、関連性を提供することができる。
この技術は、上記の全ての実施例と組み合わせて、あるいはそれだけで利用することができることは明らかである。例えば、複数のブロックを用いて、空きリストおよびこれに関連するマッピングテーブルの複数バージョンを記憶することができ、新たなバージョンを新たなブロックに書き込んだ後にのみ、満杯のブロックを消去して、起動時に検索によって最新バージョンを見出すことができる。
他の実施例として、セグメント化したマッピングテーブルを使用することができ、この場合、更新したセグメントについての新たなバージョンを記憶する必要がある。この場合、それぞれの空きリストをそれぞれのセグメント用に用いることができ、あるセグメント用のブロックの更新は当該セグメントに用の空きリストを用いて実行される。しかし、全てのセグメント用の共通の空きリストを使用して、あらゆるセグメント用のブロックの更新を、全てのセグメント用の同一の共用空きリストを用いて実行することが好ましい。このことは、記憶する必要のあるマッピングテーブルの更新回数を低減する。なお、この場合、それぞれのセグメント内で参照するブロックのアドレスに制約を課さないことが好ましく、このことは、すべてのブロックが特定アドレスビットについて同じアドレス値を有する物理ブロックの各組に各セグメントをマッピングする際よりも少し長いアドレスが、セグメント用のマッピングテーブル内に必要であることを意味し得る。
さらに、複数セグメントを使用する場合、一実施例では、一部のセグメントのみ(例えば1セグメントのみ)のためのマッピングテーブル部分をマッピングテーブルメモリ12にキャッシュ記憶する。このことは、小型のマッピングテーブルメモリ12を使用することを可能にする。この場合、全てのセグメントについての訂正を、キャッシュ記憶するマッピングテーブルとともにマッピングテーブルメモリ12に記憶することが好ましい。この場合、マッピング制御回路14は、必要時に、新たなセグメント用のマッピングテーブルをフラッシュメモリのブロックからマッピングテーブルメモリにロードして、マッピングテーブルメモリ12に記憶されている訂正を適用する。他の実施例では、マッピング制御回路14は、セグメント用のマッピングテーブルをフラッシュメモリ10からロードする前に、訂正を用いて論理アドレスをマッピングしようとするように構成することができる。このことはアクセス速度を増加させる。
他の実施例として、ポインタのチェーンを用いて、マッピングテーブルおよび空きリストを記憶しているブロック110(または一組のブロック)を識別することができる。このようにして、ブロック110(またはマッピングテーブルおよび空きリストを一緒にまたは別個に記憶している一組のブロック)を、損耗の問題なしに置き換えることができる。
空きリストの使用法は、ポインタのチェーンにも適用することができる。一実施例では、チェーン内にある中間ブロックへのポインタは、新たな中間ブロック用に使用するブロックを指示するポインタの空きリストに関連する。新たな中間ブロックを作成する際に、空きリスト上で識別されるブロックを使用し、新たなポインタ値をこのブロックに書き込む。これに加えて、(例えばバージョン番号を含めることによって)有効ブロックとしてのこのブロック内に情報を記憶し、ベースブロック内にあるこの中間ブロックへのポインタは更新しない。空きリストを使い切った場合のみに、ベースブロックを、新たな中間ブロックおよび空きリストへのポインタ値で更新する。
整数個のマッピングテーブルと空きリストをブロック内に適合させる実施例を示してきたが、このことが必要でないことは明らかである。マッピングテーブルと空きリストの合計サイズが、整数個のマッピングテーブルと空きリストで1ブロックを満たすことができないサイズである際に、マッピング制御回路14は、最後のマッピングテーブルと空きリストを、一方のブロックから他方のブロックにオーバーフローさせて書き込むことができる。この場合、他のマッピングテーブルと空きリストを、オーバーフローしているマッピングテーブルの後に全く記憶しない場合に、マッピング制御回路14は、起動時にオーバーフローしているマッピングテーブルと空きリストを使用して、完全なマッピングテーブルと空きリストを次のブロックに書き込んだ後まで、最初のブロックを消去しない。
図12aに、ブロックを直ちに完全に更新しない実施例を示す。ある論理ブロックに対する元の完結したデータ組を記憶する第1ブロック120を示す。この論理ブロックに対する更新データ123を記憶する第2ブロック122を示す。
一実施例では、マッピング制御回路14は、例えば空きリスト114cから空きブロックを選択することによって、第1ブロック120にマッピングされる論理ブロックの一部を更新するコマンドに応答するように構成されている。この空きブロックが第2ブロック122になる。マッピング制御回路14は、ブロックのデータの更新部分123のみを第2ブロック122に書き込む。マッピング制御回路14が、その後にこの種のコマンドを受けると、同じ論理ブロック内、前に更新した記憶場所と重複しない記憶場所について、マッピング制御回路14は新たに更新されたデータを第2ブロック122に書き込む。マッピング制御回路14は、その後の他のコマンドに対してこのことを繰り返す。
その後のコマンドにおける更新が重複する場合、マッピング制御回路14は第1ブロック120の残りの(まだ更新していない)記憶場所を第2ブロック122にコピーする。マッピング制御回路14はまた、第2のブロック122が完結したことを示す情報を第2ブロック122に書き込む。その後に、第2ブロックは第1ブロック120の役割を引き継ぎ、マッピング制御回路14は、更新を記憶する第2ブロックとして作用する新たなブロックを(例えば空きリスト114cから)選択する。その後に元の第1ブロック120を消去する。
いつでも、たとえばそれ以上の空きブロックが利用可能でない際に、マッピング制御回路14は、第1ブロック120の残りの(まだ更新されていない)記憶場所を第2ブロック122にコピーすることができる。そして、マッピング制御回路14はまた、第2ブロック122が完結したことを示す情報を第2ブロック122に書き込む。その後に、マッピング制御回路は第2ブロック122を第1ブロック120の役割に使用し、その後に元の第1のブロック120を消去する。一実施例では、マッピング制御回路14は、装置を停止する際にもこの動作を実行する。
読出し中に、マッピング制御回路14が論理ブロック用の読出しコマンドを受信した場合、マッピング制御回路14は、第1および第2ブロック120,122がこの論理ブロック用に利用可能であるか否かを判定し、利用可能である場合は、読出し動作が、更新される記憶場所用の、第2ブロック122からの更新データ123に関係するか、更新しない値用の、第1ブロック120からの元のデータに関係するかを判定する。前者の場合は、マッピング制御回路14は読出し動作を第2ブロック122に指向させ、後者の場合は、マッピング制御回路は読出し動作を第1ブロックに指向させる。
マッピング制御回路14は、更新されたブロックの部分を示す別な訂正をマッピングテーブルメモリ12に記憶して、読出し動作中に、更新されたデータ123を識別するために用いることが好ましい。例えば更新を書き込む際に、これらの別な訂正をマッピングテーブルメモリ12に記憶する。
一実施例では、マッピング制御回路14は、起動時に、空きリスト114c用いて更新を回復する。この実施例では、マッピング制御回路14は、空きリスト114c上に挙げられた1つ以上のブロックについて、これらのブロックがデータ、及びどの論理ブロック用であるかを示すタグを含むか否かを検査をする。含む場合は、マッピング制御回路14は、これらのブロックが、当該ブロックが完結していることを示す情報を含むか否かの検査を実行する。含む場合は、マッピング制御回路14は、マッピングテーブル112c内の上記論理ブロック用に識別されたブロックの代わりに、当該ブロックを使用する。マッピング制御回路14が、データは含むが完結していないブロックを発見した場合、マッピング制御回路14は、このブロックを第2ブロック122として使用し、マッピングテーブル122c内に同じ論理ブロック用に挙げられたブロックを第1ブロック120として使用する。一実施例では、マッピング制御回路14は、この場合に別な訂正を生成し、この別な訂正をマッピングテーブルメモリに記憶する。
図12bに、更新されたデータ123に加えて、更新されたデータ123より前のアドレスについてコピーしたデータも記憶する実施例を示す。このことは、読出し用の別な訂正を単純化し、つまり、更新されたデータ123の終点までのデータを、第2ブロック122から読み出すことができ、更新されたデータ123の後のデータは、第1ブロック120から読み出す必要がある。このことは、ブロックに順に書き込むことしかできないフラッシュメモリ10にとって特に有用である。この場合、書込み動作中に、マッピング制御回路14はまず、更新されたデータまでのデータを、第1ブロック120から第2ブロック122にコピーし、そして更新されたデータ123を第2ブロック122に書き込む。
他の実施例では、マッピング制御回路14は、別な書込みコマンドを検査して、この書込みコマンドが、第1ブロック120および第2ブロック122が当該論理アドレス用に使用中である論理アドレスに対するものであるか否かを判定する。そうである場合、マッピング制御回路14は、この書込みコマンドが、ブロック内の更新されたデータの後の記憶場所に指向されているか否かを検査する。指向されている場合、マッピング制御回路14は、更新されたデータ123の終点から別な書込みコマンドのアドレスの始点までのデータを、第1ブロック120から第2ブロック122にコピーし、その後に、この別な書込みコマンドのデータを第2ブロック122に書き込む。新たな書込みコマンド用の記憶場所が、第2ブロック内の既に書き込まれた部分より前にあるか重複する場合、マッピング制御回路14は、第2ブロック122からのデータのコピーの後に、空きブロックを第3ブロック124として選択し、新たな書込みコマンド用のデータをこの第3のブロック124に書き込む。
一実施例では、マッピング制御回路14は、第1、第2および第3ブロック120,122,124を使用中のままに維持する。更なる書込み動作が同じ論理ブロックに対して発生すると、さらに多くのブロックを使用することができる。この実施例では、マッピング制御回路14は、読出しアドレスに応じて、これらのブロック120,122,124の1つからの読出し動作を実行する。したがって、マッピング制御回路14は、これらブロック120,122,124の各々を識別し、かつブロックの位置を最新のデータが記憶されている所まで識別する別な訂正を記憶することができる。また、いつでも(例えば、それ以上の空きブロックが利用可能でない際に)メモリのマッピング制御回路14は、全ての訂正を一掃して、最小に満たされているブロック124(前に最新であったブロック122等の役割を次に引き継ぐ)を完全に満たすことができ、この第3のブロック124に、このブロックが完結したことを示す情報を記憶することができる。マッピング制御回路14は、その後に他のブロック120,122を消去し、更新されたメモリマッピングテーブルおよび空きリストをフラッシュメモリ10に書き込むことができる。
起動時に、マッピング制御回路14は、空きリスト123cに挙げられたブロックを検索し、これらのブロックがデータを有するか否かを判定する。ある論理ブロック用のブロックが、当該ブロックが完結していることの指標を含む場合、マッピング制御回路14は、マッピングテーブル中に上記論理ブロック用に挙げられたブロックの代わりに、このブロックを使用する。空きリスト中の1つ以上のブロックが同じ論理ブロック用のデータを含むが、これらブロックのいずれも、当該ブロックが完結していることを示していないことを、マッピング制御回路14が発見した場合、マッピング制御回路14は、発見したブロック122,124を参照する別な訂正情報を構成する。
原則として、複数の追加的なブロック122,124がある論理ブロック用に使用中である際にマッピング制御回路14が書込みコマンドを受信して、追加的な各ブロック122,124内の最後に更新した記憶場所の後の記憶場所にデータを書込み更新する際に、マッピング制御回路14はこの更新を書き込む場所の選択肢を有する。最も古い(最も満たされている)追加的ブロックに書き込むことは、より新しいブロック内により大きな更新用の空間が残されているという利点を有し、このことは、追加的ブロックの必要性を低減する。しかし、最も新しい追加的ブロックに書き込むことも利用することができ、このことは、最も新しいブロック内の更新されたデータを、より古いブロック内のデータよりも拡張することができるという効果を有する。この場合、マッピング制御回路14は、より古いブロックを消去することが好ましい。また、マッピング制御回路14はこの場合、更新の順序を示す情報をブロック内に書き込んで、起動中に別な訂正を形成するために使用する琴が好ましい。
本明細書では、チェーン内のポインタ及びマッピングテーブル内の物理ブロックのアドレスを共に、並びに空きリスト内のブロックアドレスを、ポインティング情報と称し、それぞれの機能に割り当てられたそれぞれの物理ブロックを識別するために使用する。これらの機能の代表的な例は、論理ブロックアドレス用のブロックとして機能するブロック、ポインタを提供するブロック、および空きリストを提供するブロックである。
マッピング制御回路14は、例えば、本明細書に記載したようにブロックを使用するための命令のプログラムをプログラムされたプログラマブル処理回路として実現することができる。代案として、マッピング制御回路14の一部または全部を、本明細書に記載した機能を実行することに特化した回路として実現することができる。
個別ブロックを指示するポインティング情報を使用し、個別ブロックを用いてポインティング情報(消去する単位であるブロック)を記憶する実施例を示してきたが、その代わりに、こうした消去の単位のグループを指示するポインティング情報を使用することができ、及び/または、単位のグループを用いて連続的な有効ポインタ値を記憶することができることは明らかである。
(別な)訂正リストを、マッピングテーブルメモリ12、好適には例えばSRAMやDRAMなどのRAMメモリに記憶する実施例を示してきたが、代案として、追加的なRAMメモリ(図示せず)を更新制御回路14に結合して設け、訂正のリストを記憶することができることは明らかである。同様に、他の情報、例えばポインタのチェーンに従って得られた最終ポインタ、後の更新の書込みに使用する空でないブロックの識別子を、マッピングテーブルメモリ12またはこうした追加的なRAMメモリに記憶することができ、これにより、フラッシュメモリ10中でこの情報を検索することは、起動時のみ、そして随意的に、その後の例外的時点、例えばリセット信号またはエラー信号の受信後のみにのみに実行する必要がある。
明らかなように、いくつかの物理ブロックは、時間の経過と共に使用不能になることがあり、このことは例えば、こうしたブロックを特定回数以上消去した後の損耗、またはブロック内に生じる他のエラーによって生じる。このことが発生すると、マッピング制御回路14はこれらのブロックの使用を回避する。一旦、ブロックの使用を放棄すると、当該ブロックをマッピングテーブルおよび空きリストから除去する。推移的に、マッピング制御回路14は、マッピング制御回路14がもはやフラッシュメモリ10内で使用すべきでない物理ブロックアドレスの「不良リスト」を表現する情報を維持する。ブロックを放棄すると、このブロックは「不良リスト」に追加されるが、フラッシュメモリ10内の空きリストまたはマッピングテーブルの即時の更新は必要ない。後者の更新は、空きリストを使い切るまで延期することができる。起動時に、マッピング制御回路14は、空きリストまたはマッピングテーブル内で参照するブロックが不良リストにも存在するか否かについて不良リストを検査し、存在する場合、マッピング制御回路14は、当該ブロックがこれらのリスト(空きリストまたはマッピングテーブル)のいずれにもないものとして動作する。
Claims (18)
- 記憶場所の複数の物理ブロックから成り、一度に少なくとも1つの物理ブロックを消去することをサポートする不揮発性メインメモリと、
前記メインメモリに記憶されたポインティング情報を維持するように構成されたマッピング制御回路とを備え、
前記記憶されたポインティング情報は、特定機能用に使用した使用済みブロックへのポインタと、前記特定機能用に将来使用するために空いている空きブロックへのポインタから成り、前記マッピング制御回路は、前記使用済みブロックのうち選択した1ブロックの少なくとも一部分の代替として、代替ブロックを、前記空きブロックへのポインタが指示する前記空きブロックから提供し、少なくとも、前記空きブロックの少なくとも2つの組合せを1つ使用した後に、前記空きブロックの少なくとも2つを前記代替ブロックとして使用して初めて、前記ポインティング情報の更新バージョンを前記メインメモリに書き込むように構成され、前記マッピング制御回路はさらに、少なくとも起動時に、前記記憶されたポインティング情報からの前記空きブロックへのポインタの少なくとも1つを使用して、前記空きブロックの少なくとも1つにアクセスして、前記アクセスした空きブロックが、前記使用済みブロックのうち特定の1ブロックの代替ブロックとして使用されたか否かを判定し、前記アクセスした空きブロックが前記代替ブロックとして使用された場合は、起動後に、前記アクセスした空きブロックを、前記特定の1ブロックの代替ブロックとして使用するように構成されていることを特徴とする装置。 - 請求項1に記載の装置において、前記メインメモリがフラッシュメモリであることを特徴とする装置。
- 請求項1に記載の装置において、さらに、前記メインメモリとは別の作業メモリを備え、前記マッピング制御回路は、起動時に、訂正情報を前記作業メモリに記憶するように構成され、前記訂正情報は前記ポインティング情報に対する訂正を表し、前記訂正の各々が、当該空きブロックが代替ブロックとして使用されていることを前記マッピング制御回路が判定した前記空きブロックのそれぞれを示すことを特徴とする装置。
- 請求項3に記載の装置において、前記マッピング制御回路は、論理アドレスを物理ブロックにマッピングするマッピングテーブルの変更部分をキャッシュ記憶するように構成され、前記訂正情報は前記変更部分と並列して記憶されることを特徴とする装置。
- 請求項3に記載の装置において、前記マッピング制御回路は、前記メインメモリからロードした前記ポインティング情報の一部分をキャッシュ記憶し、前記ロードした前記ポインティング情報の一部分に、前記作業メモリからの前記記憶されている訂正情報に従って訂正を加えるように構成されることを特徴とする装置。
- 請求項3に記載の装置において、前記マッピング制御回路は、論理読出しブロックアドレスが前記記憶されている訂正情報によってカバーされるか否かを検査することによって、前記論理読出しブロックアドレスで読出しコマンドに応答し、前記論理読出しブロックアドレスが前記訂正情報によってカバーされる際に、前記訂正情報を用いて物理ブロックを選択し、前記論理読出しブロックアドレスが前記訂正情報によってカバーされない際に、前記論理読出しブロックアドレス用に前記使用済みブロック内に定義された物理ブロックのアドレスを使用するように構成されていることを特徴とする装置。
- 請求項1に記載の装置において、前記ポインティング情報は、論理ブロックアドレスのそれぞれのセグメントについて、論理ブロックアドレスを物理ブロックアドレスにマッピングするためのマッピングテーブルを備え、前記論理ブロックアドレスのそれぞれのセグメントに対する前記マッピングテーブルのセグメントは、それぞれ異なるブロック内に記憶され、前記マッピング制御回路は、異なるセグメントを記憶するためのそれぞれ異なるブロックの代替ブロックを選択するために前記空きブロックへのポインタを使用する使用法を共用するように構成されていることを特徴とする装置。
- 請求項1に記載の装置において、前記マッピング制御回路は、論理ブロック内の少なくとも1つのアドレス範囲用の書込みコマンドを受信するように構成され、前記マッピング制御回路は、前記論理ブロック用の第1および第2物理ブロックを前記メインメモリ内に維持するように構成され、前記第2物理ブロックは、前記ポインティング情報によって指示される前記空きブロックから選択され、前記第1物理ブロックは、前記論理ブロックの基本バージョンを含み、前記マッピング制御回路は、前記第2物理ブロック内の、前記少なくとも1つのアドレス範囲を含むアドレス部分のみに書き込むことによって、前記書込みコマンドに応答するように構成され、前記マッピング制御回路は、前記読出しコマンドが前記アドレス部分中の前記論理ブロックをアドレス指定しているか否かに応じて、前記第2物理ブロックからのデータまたは前記第1物理ブロックからのデータを戻すことによって、前記論理ブロックに対する前記出しコマンドに応答するように構成されていることを特徴とする装置。
- 請求項8に記載の装置において、前記マッピング制御回路は、前記第1物理ブロックの始点から前記アドレス範囲の始点までのアドレスに対するデータを、前記第1物理ブロックから前記第2物理ブロックにコピーすることによって前記書込みコマンドに応答し、前記書込みコマンドに従って、前記アドレス範囲に対するデータを前記第2物理ブロックに書き込むように構成され、前記第2物理ブロックの残りのデータは、前記書込みコマンドに応答して書き込まれていないまま残されていることを特徴とする装置。
- 請求項8に記載の装置において、前記マッピング制御回路は、前記空きブロックの1つへのポインタの少なくとも1つを使用して、少なくとも起動時に選択的に、前記第2物理ブロックにアクセスし、前記第2物理ブロックが前記アドレス部分におけるデータを記憶するために使用されたか否かを判定し、使用された場合は、前記第2物理ブロックを使用して、その後に前記アドレス部分をアドレス指定する読出しコマンドに応答して、前記第2物理ブロックからデータを供給するように構成されていることを特徴とする装置。
- 請求項10に記載の装置において、さらに、作業メモリを備え、前記マッピング制御回路は、起動時に、訂正情報を前記作業メモリに記憶するように構成され、前記訂正情報は前記ポインティング情報に対する訂正を表し、前記訂正の各々は、前記空きブロックうち、当該空きブロックが前記第2物理ブロックとして使用されていることを判定した空きブロック、及び当該第2物理ブロック内の前記アドレス部分を示すことを特徴とする装置。
- 請求項8に記載の装置において、前記マッピング制御回路は、第2のアドレス範囲に対する第2の書込みコマンドを受信し、前記第2のアドレス範囲が前記アドレス部分に重複するか否かを検査することによって、前記第2の書込みコマンドに応答し、重複しない場合、前記コマンドによって識別されるデータを前記第2物理ブロック内に書き込み、重複する場合、前記コマンドによって識別されるデータを、前記空きブロックから選択した第3物理ブロックに書き込むように構成されていることを特徴とする装置。
- 請求項12に記載の装置において、前記マッピング制御回路は、残りのデータを、前記第1物理ブロックから、前記第2物理ブロックおよび前記第3物理ブロックの一方にコピーし、その後に、前記第1物理ブロックの代わりに、前記第2物理ブロックおよび前記第3物理ブロックの一方を使用し、前記コピーの後に、前記第1物理ブロックを消去するように構成されていることを特徴とする装置。
- 請求項1に記載の装置において、前記マッピング制御回路は、前記ポインティング情報によって識別される全ての空きブロックを使用した時点を検出し、この検出時に、前記ポインティング情報の更新バージョンを前記メインメモリに書き込み、前記更新バージョン内では、前記空きブロックへの元のポインタが、前記使用済みブロックへのポインタに追加され、前記空きブロックに置き換えたブロックへの元のポインタが、前記使用済みブロックへのポインタから除去され、前記空きブロックへのポインタに追加されていることを特徴とする装置。
- 請求項14に記載の装置において、前記マッピング制御回路は、前記ポインティング情報の前記更新バージョンを前記メインメモリに書き込む前に、前記空きブロックに置き換えたブロックを消去するように構成されていることを特徴とする装置。
- 請求項14に記載の装置において、前記マッピング制御回路は、更なる使用を永久に中止した前記メインメモリの不良ブロックを識別する情報を前記メインメモリに書き込み、少なくとも起動時に、前記不良ブロックを識別する情報を検索するように構成されていることを特徴とする装置。
- 請求項14に記載の装置において、前記マッピング制御回路は、論理ブロック内のアドレス範囲に対する書込みコマンドを受信し、前記論理ブロック用の第1および第2物理ブロックを維持するように構成され、前記第2物理ブロックは、前記ポインティング情報によって指示される前記空きブロックから選択され、前記第1物理ブロックは前記論理ブロックの基本バージョンを含み、前記マッピング制御回路はさらに、前記第2物理ブロック内の、前記アドレス範囲を含む前記アドレス部分のみに書き込むことによって前記書込みコマンドに応答し、読出しコマンドが前記アドレス部分の中の論理ブロックをアドレス指定しているか否かに応じて、前記第2物理ブロックからのデータまたは前記第1物理ブロックからのデータを戻すことによって、前記論理ブロックに対する前記読出しコマンドに応答するように構成され、前記マッピング制御回路はさらに、残りのデータを前記第1物理ブロックから前記第2物理ブロックにコピーし、かつ前記第2物理ブロックへのポインタを前記ポインティング情報の前記更新バージョン中に使用済みブロックとして含めることによって、前記ポインティング情報によって識別される全ての空きブロックを使用したことの検出に応答するように構成されていることを特徴とする装置。
- 記憶場所の複数の物理ブロックから成り、一度に少なくとも1つの物理ブロックを消去することをサポートする不揮発性メインメモリを、マッピング制御回路を用いて動作させる方法において、
ポインティング情報を前記メインメモリに記憶するステップであって、前記ポインティング情報は、特定機能用に使用した使用済みブロックへのポインタと、前記特定機能用に将来使用するために空いている空きブロックへのポインタから成るステップと;
前記空きブロックを用いて、前記使用済みブロックから選択した1ブロックを置き換えるステップと;
少なくとも、前記空きブロックの少なくとも2つの組合せを1つ使用した後に、前記空きブロックの少なくとも2つを代替ブロックとして使用して初めて、前記ポインティング情報の更新バージョンを前記メインメモリに書き込むステップと;
少なくとも前記マッピング制御回路の起動時に選択的に、前記空きブロックへのポインタの少なくとも1つを使用して、前記空きブロックの少なくとも1つにアクセスするステップと;
少なくとも前記マッピング制御回路の起動時に選択的に、前記アクセスした空きブロックが、前記使用済みブロックのうち特定の1ブロックの代替ブロックとして使用されたか否かを判定するステップと;
前記アクセスした空きブロックが前記代替ブロックとして使用された場合に、前記アクセスした空きブロックを、前記特定の1ブロックの代わりに使用するステップと
を具えていることを特徴とする方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP05112640 | 2005-12-21 | ||
PCT/IB2006/054871 WO2007072367A2 (en) | 2005-12-21 | 2006-12-14 | Memory with block-erasable locations |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009521049A true JP2009521049A (ja) | 2009-05-28 |
Family
ID=38091191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008546769A Withdrawn JP2009521049A (ja) | 2005-12-21 | 2006-12-14 | ブロック消去可能な記憶場所を有するメモリ |
Country Status (5)
Country | Link |
---|---|
US (1) | US20080276036A1 (ja) |
EP (1) | EP1966701A2 (ja) |
JP (1) | JP2009521049A (ja) |
CN (1) | CN101346702B (ja) |
WO (1) | WO2007072367A2 (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014029616A (ja) * | 2012-07-31 | 2014-02-13 | Mega Chips Corp | 半導体記憶装置 |
JP2014035747A (ja) * | 2012-08-10 | 2014-02-24 | Mega Chips Corp | 半導体記憶装置 |
US10331369B2 (en) | 2016-09-02 | 2019-06-25 | Fujitsu Limited | Array control program, array control method, and array control apparatus |
KR20190099053A (ko) * | 2016-12-26 | 2019-08-23 | 알리바바 그룹 홀딩 리미티드 | 블록체인에서 블록 데이터를 검증하기 위한 방법 및 장치 |
US10809946B2 (en) | 2017-11-08 | 2020-10-20 | Fujitsu Limited | Array control program, array control method, and array control apparatus |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008087634A1 (en) * | 2007-01-18 | 2008-07-24 | Sandisk Il Ltd. | A method and system for facilitating fast wake-up of a flash memory system |
US7721040B2 (en) | 2007-01-18 | 2010-05-18 | Sandisk Il Ltd. | Method and system for facilitating fast wake-up of a flash memory system |
KR100882740B1 (ko) * | 2007-02-22 | 2009-02-09 | 삼성전자주식회사 | 맵 히스토리 기반의 불휘발성 메모리의 매핑 방법 및 저장장치 |
TWI431627B (zh) * | 2009-07-31 | 2014-03-21 | Silicon Motion Inc | 快閃記憶體裝置及快閃記憶體裝置之運作方法 |
US8560770B2 (en) * | 2009-11-13 | 2013-10-15 | Seagate Technology Llc | Non-volatile write cache for a data storage system |
US8495601B2 (en) * | 2010-06-09 | 2013-07-23 | Lear Corporation | Shared memory architecture |
US9645943B2 (en) * | 2011-02-22 | 2017-05-09 | Infinidat Ltd. | Storage arrangement and method using a plurality of storage spaces which have separate control layers and separate mapping structures |
US20120262815A1 (en) * | 2011-04-15 | 2012-10-18 | Lsi Corporation | Method and system for dynamically expandable software based bad block management |
CN102231136B (zh) * | 2011-07-12 | 2014-06-11 | 晨星软件研发(深圳)有限公司 | 一种闪存存储设备的数据存储方法和装置 |
US9164676B2 (en) * | 2011-11-30 | 2015-10-20 | International Business Machines Corporation | Storing multi-stream non-linear access patterns in a flash based file-system |
CN103425594B (zh) * | 2012-05-23 | 2016-09-14 | 群联电子股份有限公司 | 数据处理方法、存储器控制器与存储器存储装置 |
TWI492051B (zh) * | 2012-09-05 | 2015-07-11 | Silicon Motion Inc | 資料儲存裝置與快閃記憶體控制方法 |
CN105225695A (zh) * | 2014-05-28 | 2016-01-06 | 上海复旦微电子集团股份有限公司 | 快闪存储器的擦除方法及快闪存储器 |
US9990278B2 (en) * | 2014-10-20 | 2018-06-05 | Cypress Semiconductor Corporation | Overlaid erase block mapping |
CN105760313A (zh) * | 2015-08-07 | 2016-07-13 | 深圳市证通金信科技有限公司 | 基于SPI-Flash的文件系统的数据处理方法及装置 |
US9857988B1 (en) * | 2016-07-10 | 2018-01-02 | Winbond Electronics Corporaiton | Data management in multiply-writeable flash memories |
EP3627308A1 (en) * | 2018-09-20 | 2020-03-25 | STMicroelectronics Srl | A method of managing memories, corresponding circuit, device and computer program product |
US10891077B2 (en) * | 2018-12-26 | 2021-01-12 | Macronix International Co., Ltd. | Flash memory device and controlling method thereof |
CN109783035A (zh) * | 2019-02-28 | 2019-05-21 | 中国人民解放军陆军工程大学 | 一种基于大颗粒度存储单元的队列管理器及方法 |
US11042481B1 (en) * | 2019-12-19 | 2021-06-22 | Micron Technology, Inc. | Efficient processing of commands in a memory sub-system |
US11531481B1 (en) * | 2021-06-23 | 2022-12-20 | Vmware, Inc. | Optimal method for deleting sub-blocks of a pointer block that do not have on-disk metadata headers for addresses |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5404485A (en) * | 1993-03-08 | 1995-04-04 | M-Systems Flash Disk Pioneers Ltd. | Flash file system |
US5479638A (en) * | 1993-03-26 | 1995-12-26 | Cirrus Logic, Inc. | Flash memory mass storage architecture incorporation wear leveling technique |
US5485595A (en) * | 1993-03-26 | 1996-01-16 | Cirrus Logic, Inc. | Flash memory mass storage architecture incorporating wear leveling technique without using cam cells |
US5838614A (en) * | 1995-07-31 | 1998-11-17 | Lexar Microsystems, Inc. | Identification and verification of a sector within a block of mass storage flash memory |
US5978808A (en) * | 1995-12-27 | 1999-11-02 | Intel Corporation | Virtual small block file manager for flash memory array |
US6000006A (en) * | 1997-08-25 | 1999-12-07 | Bit Microsystems, Inc. | Unified re-map and cache-index table with dual write-counters for wear-leveling of non-volatile flash RAM mass storage |
US6226728B1 (en) * | 1998-04-21 | 2001-05-01 | Intel Corporation | Dynamic allocation for efficient management of variable sized data within a nonvolatile memory |
US6282605B1 (en) * | 1999-04-26 | 2001-08-28 | Moore Computer Consultants, Inc. | File system for non-volatile computer memory |
US6763424B2 (en) * | 2001-01-19 | 2004-07-13 | Sandisk Corporation | Partial block data programming and reading operations in a non-volatile memory |
KR100389867B1 (ko) * | 2001-06-04 | 2003-07-04 | 삼성전자주식회사 | 플래시 메모리 관리방법 |
US6711663B2 (en) * | 2001-11-15 | 2004-03-23 | Key Technology Corporation | Algorithm of flash memory capable of quickly building table and preventing improper operation and control system thereof |
JP2003233993A (ja) * | 2002-02-08 | 2003-08-22 | Matsushita Electric Ind Co Ltd | 不揮発性記憶装置の書き換え方法 |
US6895464B2 (en) * | 2002-06-03 | 2005-05-17 | Honeywell International Inc. | Flash memory management system and method utilizing multiple block list windows |
-
2006
- 2006-12-14 US US12/158,838 patent/US20080276036A1/en not_active Abandoned
- 2006-12-14 EP EP06842542A patent/EP1966701A2/en not_active Withdrawn
- 2006-12-14 CN CN2006800486899A patent/CN101346702B/zh not_active Expired - Fee Related
- 2006-12-14 WO PCT/IB2006/054871 patent/WO2007072367A2/en active Application Filing
- 2006-12-14 JP JP2008546769A patent/JP2009521049A/ja not_active Withdrawn
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014029616A (ja) * | 2012-07-31 | 2014-02-13 | Mega Chips Corp | 半導体記憶装置 |
JP2014035747A (ja) * | 2012-08-10 | 2014-02-24 | Mega Chips Corp | 半導体記憶装置 |
US10331369B2 (en) | 2016-09-02 | 2019-06-25 | Fujitsu Limited | Array control program, array control method, and array control apparatus |
KR20190099053A (ko) * | 2016-12-26 | 2019-08-23 | 알리바바 그룹 홀딩 리미티드 | 블록체인에서 블록 데이터를 검증하기 위한 방법 및 장치 |
KR102098548B1 (ko) | 2016-12-26 | 2020-04-08 | 알리바바 그룹 홀딩 리미티드 | 블록체인에서 블록 데이터를 검증하기 위한 방법 및 장치 |
US10790981B2 (en) | 2016-12-26 | 2020-09-29 | Alibaba Group Holding Limited | Method and apparatus for verifying block data in a blockchain |
US10809946B2 (en) | 2017-11-08 | 2020-10-20 | Fujitsu Limited | Array control program, array control method, and array control apparatus |
Also Published As
Publication number | Publication date |
---|---|
CN101346702A (zh) | 2009-01-14 |
CN101346702B (zh) | 2012-09-05 |
US20080276036A1 (en) | 2008-11-06 |
WO2007072367A3 (en) | 2008-01-17 |
WO2007072367A2 (en) | 2007-06-28 |
EP1966701A2 (en) | 2008-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009521049A (ja) | ブロック消去可能な記憶場所を有するメモリ | |
US9213627B2 (en) | Non-volatile memory with block erasable locations | |
US20100299494A1 (en) | Memory with block-erasable locations and a linked chain of pointers to locate blocks with pointer information | |
KR0128218B1 (ko) | 일괄 소거형 비휘발성 메모리 | |
US8255614B2 (en) | Information processing device that accesses memory, processor and memory management method | |
KR100843543B1 (ko) | 플래시 메모리 장치를 포함하는 시스템 및 그것의 데이터복구 방법 | |
US8316257B2 (en) | NAND power fail recovery | |
US8762661B2 (en) | System and method of managing metadata | |
TWI554877B (zh) | 處理用於具有非揮發性記憶體之一系統之不正常關機 | |
JP4762261B2 (ja) | メモリシステム | |
JP2011154547A (ja) | メモリ管理装置及びメモリ管理方法 | |
KR20070068796A (ko) | 비휘발성 메모리가 캐쉬로 사용되는 저장 장치 및 그 관리방법 | |
US9710378B2 (en) | Writing an address conversion table for nonvolatile memory wear leveling | |
JP4301301B2 (ja) | 不揮発性半導体記憶装置およびその管理方法 | |
US9442666B2 (en) | Optimized management of operation data in a solid-state memory | |
JP2009294982A (ja) | ディスク装置及びその制御方法 | |
KR101179027B1 (ko) | 버퍼의 지역성에 기초한 가비지 컬렉션을 수행하는 낸드 플래시 메모리 시스템 및 방법 | |
WO2007096844A2 (en) | Memory with block-erasable locations | |
JP4703673B2 (ja) | メモリシステム | |
JP3573706B2 (ja) | 記憶装置の書き込み/消去方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090904 |