JP2009521044A - ブロック消去可能なメモリ位置およびポインタ情報を有するブロックを見つけ出すポインタのリンク付けしたチェーンを備えるメモリ - Google Patents
ブロック消去可能なメモリ位置およびポインタ情報を有するブロックを見つけ出すポインタのリンク付けしたチェーンを備えるメモリ Download PDFInfo
- Publication number
- JP2009521044A JP2009521044A JP2008546733A JP2008546733A JP2009521044A JP 2009521044 A JP2009521044 A JP 2009521044A JP 2008546733 A JP2008546733 A JP 2008546733A JP 2008546733 A JP2008546733 A JP 2008546733A JP 2009521044 A JP2009521044 A JP 2009521044A
- Authority
- JP
- Japan
- Prior art keywords
- block
- pointer
- control circuit
- 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)
Abstract
メモリ装置は、多数のメモリ位置の物理ブロックを有するメインメモリ(10)を備える。メインメモリ、例えばフラッシュメモリは、一度に少なくとも1個の物理ブロックの消去を行う。最終的に、物理アドレスマッピングテーブルにいたる論理アドレスのようなポインティング情報を指し示す、ポインタ(72,75)のチェーンをメインメモリ(10)内に保存し、各ポインタ(72,75)を各ブロック(70,74)に各個に保存し、チェーンにおける最終ではない各ポインタ(72)はチェーンにおける次のポインタを有する対応ブロック(74)を指すものとする。メインメモリ(10)の起動時、メインメモリからのポインタを使用して、チェーンをたどってポインティング情報を見つける。通常動作においては、RAMメモリに保存した直接ポインタを優先的に使用する。
Description
本発明は、メモリデバイスおよびこのようなメモリデバイスを操作する方法に関するものである。
特許文献1(米国特許第6,711,663号)は、フラッシュメモリデバイスを開示している。データは、フラッシュメモリデバイスから、半導体メモリデバイスほぼ同様に読み出すことができる。書き込みデータはより複雑である。通常、書き込みは、メモリセルのブロックを消去し、続いて消去したブロックにデータページをプログラムする(組み込む)ことを伴う。通常、消去はブロック全体に対し一括にのみ実行でき、したがって、この場合、このブロック全体は消去構成単位を形成する。プログラミング(プログラム組み込み)は、通常より小さい構成単位(いわゆるページと定義される)で実行される。
フラッシュメモリデバイスには消耗の問題がある。データブロックは消耗しきる前の限定回数でしか消去およびプログラム組み込みを行えず、消耗後はもはや信頼を持って用いることはできない。もし特定アドレスのためのフラッシュメモリデバイスにおけるブロックを、他のブロックよりも一層頻繁に消去およびプログラム組み込みしたら、これらブロックの有効寿命がフラッシュメモリデバイスの有効寿命を限定することになる。
この問題は、時間変動型論理‐物理アドレスマッピングを使用して対処された。マッピングを用いることにより、フラッシュメモリにアクセスするために使用する論理アドレスが、異なる時間にフラッシュメモリの異なる物理ブロックの位置を参照できる。このようにして、消去およびプログラミングを頻繁に要する論理アドレスは、時々、異なる物理ブロックに再マッピングし、これにより、論理ブロックが消去およびプログラム組み込みされる度毎に、同一の物理ブロックが消去およびプログラミングされるのを防ぐことができる。(本明細書で用いる用語「論理ブロック」は、物理ブロックにおけるマッピング可能なアドレスのセット全体にマッピングするアドレスセットを表現するものであり、随意的にこれら位置に格納したデータをもおおまかに言及する。)
効率的な論理‐物理マッピングはマッピングテーブルを要し、このマッピングテーブルは、論理アドレスに基づいて格納した物理アドレスを有し、この論理アドレスに対して物理アドレスが対応する。原則的に、このようなマッピングテーブルは、物理‐論理アドレスマッピングの変更が行われる度毎に更新しなければならない。通常、このようなフラッシュメモリのマッピングテーブルはRAMメモリに保存する。起動中、マッピングテーブルは、フラッシュメモリ中に格納される「タグ」から再構築し、異なる物理メモリ領域(例えばブロック)に対してその現論理アドレスは何であるかを示す。
特許文献1(米国特許第6711663号)は、フラッシュメモリ自体に格納するマッピングテーブルの利用を説明している。特許文献1は、セグメントで編成したマッピングを使用する。メモリは多数のブロックセグメントとして編成される。各セグメントに対してそれぞれに対応するマッピングテーブルを設け、この各セグメントのための論理アドレスをこのセグメントにおける物理アドレスに変換する。セグメントのサイズは、各マッピングテーブルのサイズがメモリページ、つまりフラッシュメモリのプログラム組み込みの構成単位に対応するよう選択する。
特許文献1(米国特許第6711663号)は、各セグメントに「メモリ更新ブロック」を設け、このセグメントにおける順次バージョンのマッピングテーブルを格納する。メモリ更新ブロックにおける最後のプログラム組み込みページをマッピングテーブルとして用いる。セグメントのマッピングテーブルが変更される度毎に、更新マッピングテーブルをメモリ更新ブロックにおける次のページに組み込む。各変更の後、新しいページを用いて、メモリ更新ブロックのすべてのページがプログラム組み込みされるまでマッピングテーブルを格納する。すべてのページがプログラム組み込みされた後、メモリテーブルの次の更新が起きる時、メモリ更新ブロックを消去し、新しいメモリテーブルを消去したブロックの最初にページへ書き込まれる。
このアプローチは起動中にタグからマッピングテーブルを再構築するのに時間を要さないという利点がある。一方、マッピングテーブルはフラッシュメモリから直接読み出すことができる。
しかし、マッピングテーブルを格納するブロックは、頻繁な更新によって消耗が激しくなる。
米国特許第6,711,663号明細書
とくに、本発明の目的は、マッピングテーブルを格納するメモリを有し、マッピングテーブルの更新による際限のない消耗を回避する装置を得るにある。
請求項1に従って装置を提供する。請求項1においては、マッピング制御回路は、ポインタのチェーンをメインメモリ(例えばフラッシュメモリ)のそれぞれに対応するブロックに各個に格納する。チェーンにおける最終ではない各ポインタは、チェーンにおける次のポインタを有する対応のブロックを指し示す。またマッピング制御回路は、メインメモリ内にポインティング情報を格納する。チェーンにおける最終ポインタはポインティング情報を有するブロックを指し示す。初期ポインタは、好適には、所定ブロックに格納する。このようにして、マッピング制御回路は、ポインティング情報をこのチェーンをたどることによって動的に選択したブロック中に見つけ出すことができる。
ある実施形態においては、マッピング制御回路は、ブロック内でポインティング情報を多数回更新した後、ポインティング情報を有するブロックを置換する。つぎに、最終ポインタは、置換ブロックを指し示すよう更新する。このようにして、ポインティング情報を有するブロックが置換されるまでは、新バージョンのポインティング情報を書き込むとき、最終ポインタは更新を必要とせず、これにより、消耗が少なくなる。ある実施形態においては、より長いチェーンを用い、チェーンに沿ったポインタを有するブロックを、多数回更新の後、置換することができる。この場合、置換の頻度をチェーンに沿ってより上流になる程より低く抑えることができ、チェーンの根元における過剰な消耗を回避することができる。さらに別の実施形態においては、チェーンの長さを動的に変化させ、例えば閾回数以上の更新が生じる場合チェーンを延長することによって、チェーンの根元における更新回数を必要範囲内に留めるようにする。
別の実施形態においては、ポインタツリーを用い、チェーンはツリーの一部とする。このようにして、ツリー中のノードは、多数のポインタによる多数の後継サクセサに分岐することができる。
別の実施形態においては、順次バージョンのポインタをそれぞれ、ポインタのためのブロックにおける相互に異なる対応位置に書き込む。この実施形態においては、マッピング制御回路は、最新バージョンのブロックをサーチすることによって、特定ポインタの最新バージョンを読み出す。このようにして、ポインタを変更する度毎にブロックを消去する必要がなく、消耗を減少させ、同時に、起動時にそのブロックまたは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個の組み込んだページを含むマッピングテーブルの格納に割り当てた1組のブロックセットにおける最初のブロックを識別する。
続いて、マッピング制御回路14は、割り当てたブロックセットにおける最初のブロック中の、順次の最初の未使用ページまたは未使用ページセットをサーチする。第5ステップ25において、マッピング制御回路14は、このようなページまたはページセットが見つかったどうかを検証する。見つかった場合、マッピング制御回路14は第6ステップ26を実行し、見つかったページまたはページセットに新しいマッピングテーブルを組み込む。マッピング制御回路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に組み入れることに留意されたい。もしこのプロセスが何らかの理由で、例えば(一部の)システムへの電力供給が止まることによって、中断される場合、第9ステップが行われることなく、第8ステップ28のみが実行される危険性がある。マッピングテーブル格納に割り当てブロックのうち一個のブロックが満杯で、これら割り当てたブロックのうち少なくとも他の1個が空でないことを検出することによって、マッピング制御回路14を起動中にこれを検出するよう構成する。検出した場合、マッピング制御回路14はなるべく、起動時に完全に満杯ではない割り当てブロックのうち1個のブロックにおける順次の最終使用済みページまたはページセットを使用し、フラッシュメモリ10に満杯の割り当てブロックを消去させる。代替案として、マッピング制御回路14は、満杯の割り当てブロックにおける順次の最終使用済みページまたはページセットを用いることができる。この場合、新たに組み込んだデータは失われるが、これは、いずれにせよ図2のプロセスが早期に中断した場合である。
図4(a)〜(c)はマッピングテーブル格納に割り当てたブロックセット中におけるページを使用する3段階を示す。各図中に2つのブロック40,42の同一セットを示す。マッピングテーブルを組み込んだページをハッチングによって示す。消去した(空の)ブロックはハッチングなしで示す。ある実施例においては、各ページにフラッグビットを組み込み、ページが空かプログラムされているかを表示するようにする。代案として、ブロック中の全てのデータが消去された状態か(例えば論理ビット値1)どうかを検査することによって、空ブロックを検出することができる。また随意に、ECC(error correcting code:ブロック中で使用するエラー訂正コード)の場合は、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は、最初に、ダーティのマークが付いていないブロックから最終マッピングテーブルを用いようとする。このブロックが(エラーによって)空の場合、マッピンング制御回路14はこのダーティブロックに頼る。
バージョン番号は周期的に変化させることができる。正しいブロックを見つけ出すため満杯および空ブロックを検査する代わりに、バージョン番号をブロック中のマッピングテーブルを有するページの位置と組み合わせて用いることができる。この場合、短い周期、例えば4個の異なるバージョン番号で十分である。上述の実施例においては、整数個のマッピングテーブルをブロックに当てはめてきたが、当然これは必ずしも必要ではない。マッピングテーブルのサイズが、ブロックを整数個のマッピングテーブルで満たすことができないとき、マッピング制御回路14は、一つのブロックから他のブロックにオーバーフローする最終マッピングテーブルを書き込む。この場合、もし追加のマッピングテーブルがオーバーフローしているマッピングテーブルの後に格納されていない場合、マッピング制御回路14は、起動時にオーバーフローしているマッピングテーブルを使用し、またマッピング制御回路14は、次のブロックが満杯になるまでマッピングテーブルを書き込まれるまでは、第1ブロックを消去しない。
上述したところは、1個のフラッシュメモリに対してマッピングテーブルを格納すると仮定して説明した。他の実施例においては、多数のマッピングテーブルを論理アドレスの対応セグメント(範囲)に対して供給する。
この他の実施例においては、マッピング制御回路14は、マッピングテーブル格納に割り当てるブロックセットにおけるそれぞれ独立して選択可能なページから、それぞれに対応する範囲に対してマッピングテーブルをプログラムし、ロードする。さらに他の実施例においては、マッピング制御回路14は、マッピングテーブルをフラッシュメモリ10のページに適用して格納するセグメントの識別をプログラミングするよう構成する。起動中、マッピング制御回路14は、割り当てたブロックをサーチして、対応するセグメントのための識別を有する順次の最終ページを見つけ出す。好適には、マッピング制御回路14は、アドレス変換中に使用するため、これらのページをマッピングテーブルメモリ12にコピーする。
プロセッサ16が新しいページの書き込みを要求するとき、マッピング制御回路14は新しいマッピングテーブルを上述のように生成するが、プロセッサ16が書き込みを要求する論理アドレスを有する、セグメント中の論理アドレスのみのために生成する。したがって、マッピング制御回路14は、そのセグメントに対する新マッピングテーブルを、マッピングテーブル格納に割り当てたブロックセット中のマッピングテーブルに追加するだけである。例えば、異なるセグメントのマッピングテーブルを、図4a,bにおいて異なる形式のハッチングで示した。
図5は、割り当てブロックが満杯のとき書き込み中にどのようなことが起こるかを示す。この場合、マッピング制御回路14は、更新したセグメントに対する新マッピングテーブルを、マッピングテーブル格納に割り当てたブロックセットのうち空のブロック42に書き込む。さらに、幾つかの実施例においては、マッピング制御回路14は、他のセグメントに対する現マッピングテーブルを、空ブロック42にコピーする。これを図中に矢印で図式的に示したが、もちろん、これらマッピングテーブルの内容を、フラッシュメモリ10からコピーする代わりに、マッピングテーブルメモリ12からコピーすることができる。これに続いて、マッピング制御回路14はフラッシュメモリ10に満杯ブロック40を消去させる。これによって、マッピング制御回路14は、起動中どのブロックが有効なマッピングテーブルを有しているか識別することができる。
古いブロック40が誤って消去されなかった場合、マッピング制御回路14は、起動の際に、満杯ブロック40が空でないブロック42と組み合わさっていることを検出し、満杯ブロックを消去する。好適には、マッピング制御回路14は、まず全てのセグメントに対してマッピングテーブルが満杯でないブロック42中に格納されていることを検証する。もしそうでなければ、マッピング制御回路14は、まず満杯ブロック40におけるコピーされていないセグメントの逐次的な最終マッピングテーブルをサーチし、これらコピーしていないマッピングテーブルを満杯でないブロック42にコピーしてから満杯ブロック40を消去する。
代案として、まず新マッピングテーブルを空ブロック42に書き込むとき、他のセグメントに対するマッピングテーブルをコピーせず、また満杯ブロック40を消去しない。この場合、誤って断線した場合でも、マッピング制御回路14は起動中に依然としてブロックを読み出すことができる。満杯ブロック40の消去は、他方のブロック42が満杯になるまで延期することができ、これはすなわち、起動中マッピング制御回路14が依然として、どのブロックが満杯でないかを検出することによって、どのブロックが最後に書き込まれたブロックかを検出することができるからである。この代替案においては、マッピング制御回路14は、満杯ではないブロックがまさに満杯になろうとするときのみ、満杯ブロック40を消去する必要がある。好適には、この場合、マッピング制御回路14は、まず、満杯ではないブロック42にマッピングテーブルがまだ一つも格納されていないセグメントがあるとしたら、このセグメントに対してマッピングテーブルをコピーする。すなわち、満杯ではないブロック42にまだプログラムされていなかったマッピングテーブルを追加した後に、満杯ではないブロック42が一つのフリーページ用に十分なスペース残量となるまで、消去を延期することができる。
別の実施例においては、マッピングテーブル格納に割り当てたブロックセットは2個より多くのブロックを有するものとする。このことは、例えばブロックに格納したデータ(例えばマッピングテーブル)が大き過ぎて一つのブロックから他のブロックにデータがオーバーフローする場合に有利である。この場合、例えば割り当てブロックを所定の順序で用いることができる。この場合、好適には、ブロックセットのうち少なくとも直近の最終更新ブロックを最初に消去し、マッピングテーブル格納に再利用する。起動時、マッピング制御回路14は、空ブロックを見つけ出し、それを用いてシーケンスの始点/終点を決定し、そこからマッピング制御回路14は最新バージョンの格納データを見つけ出す。
図6は、異なるブロックを異なるセグメントに用いる実施例を示す。この場合、4個のブロック60を同数のセグメント用に用意し、スペアブロック62をブロック60のうち1個が満杯になる場合のために用意する。動作にあたり、マッピング制御回路14が書き込み要求を処理するとき、マッピング制御回路14は、書き込み要求によって変化したセグメントのための新マッピングテーブルを、このセグメントの先行マッピングテーブルを有するブロックに組み込む。そのセグメントのブロック60が満杯の場合、マッピング制御回路14は新マッピングテーブルをスペアブロック62へ組み込む。このとき、スペアブロックはこのセグメント用のブロックとなり、続いてマッピング制御回路14はセグメントの古いブロックを消去する。ある一つの実施例においては、セグメントの識別を新ブロックへ組み込み、また代案として、このような識別を、ページを書き込むときにブロックの各ページに組み込むことができる。
起動中、マッピング制御回路14は、各割り当てブロック60,62を検査してどのセグメントにブロックを用いているか決定する。ブロックから逐次的な最終マッピングテーブルをセグメントのためのマッピングテーブルとして使用する。電力遮断のために、セグメント用のデータを有する2個の割り当てブロック60,62がある場合、マッピング制御回路14は、満杯ではないブロックから選択し、他方のブロックを消去し、満杯ではないブロックから逐次的な最終マッピングテーブルを用いる。
ある一つの実施例においては、マッピングテーブルメモリ12を、全てのセグメント用のテーブルを並列的に有し、メモリマッピングテーブルはいかなる論理アドレスも直ちに変換できるものとする。この実施例においては、マッピング制御回路14は、全てのセグメントのためのマッピングテーブルをマッピングテーブルメモリ12にロードする。ある代替実施例においては、マッピングテーブルメモリ12は、セグメントの限られたサブセットのみに対する、例えば一度に1セグメントのみに対するマッピングテーブルを格納する。この実施例においては、マッピング制御回路14は、マッピングテーブルメモリ12に存在しないマッピングテーブルのセグメントに論理アドレスを収容するとき、割り当てブロック60,62または40,42からのマッピングテーブルを用いて、あるセグメント用のマッピングテーブルを他のセグメント用のマッピングテーブルと置換する。
これまで、整数個のセグメント用マッピングテーブルをブロックに当てはめる実施例を示してきたが、当然これは必ずしも必要ではない。セグメント用のマッピングテーブルのサイズが、ブロックを整数個のセグメント用マッピングテーブルで満杯にできないとき、マッピング制御回路14は、図5の場合においては、一方のブロックから他方のブロックにオーバーフローさせて最終セグメント用のマッピングテーブルを書き込むことができる。この場合、もし追加のマッピングテーブルをオーバーフローしているマッピングテーブルの後に格納されていない場合、マッピング制御回路14は、起動時にオーバーフローしているマッピングテーブルを使用し、またマッピング制御回路14は、次のブロックが満杯になるまでマッピングテーブルを書き込まれるまでは、第1ブロックを消去しない。図6の場合、セグメント用の満杯マッピングテーブルはなるべく新たに割り当てたブロックに書き込み、こうして割り当て先行の割り当てブロックを直ちに空にする。
ある実施例においては、所定ブロックセットをマッピングテーブル格納に割り当てるものとする。この実施例においては、所定ブロックセットは所定アドレスに配置し、マッピンング制御回路14はこれら所定アドレスにおけるブロックを調べるよう構成することができる。しかし、このことは割り当てブロックがより早く消耗するという弱点がある。代替案として、変更したブロックまたは複数のブロックをマッピンテーブル格納に割り当てることができ、RAMでバックアップするメモリを設け、割り当てブロックまたは複数のブロックを示すポインタを格納する。
ある代替実施例においては、リンク付けしたリスト構造を用いてマッピングテーブル格納に割り当てたブロックセットを画定する。このことを図7aに示す。この場合、フラッシュメモリ71の全体をブロックに分割して図式的に示す。フラッシュメモリ中の所定物理アドレス(例えばアドレス0)におけるベースブロック70を、1個またはそれ以上のベースポインタを格納するために用いる。このベースブロックの拡大部分70aをベースポインタメモリ位置72とともに示す。このメモリ位置からのベースポインタは、他のポインタを格納する他のブロック74を指し示す。この他のブロックの拡大部分74aをベースポインタのメモリ位置75とともに示し、このメモリ位置75は、マッピングテーブル格納に割り当てたブロック76を指すポインタを有する。
起動中、マッピング制御回路14は、まず、ベースブロック70からポインタ72をロードし、このアドレスを用いて、他のブロック74のアドレスを指定し、ブロック74からマッピング制御回路14はマッピングテーブル格納に割り当てたブロック76を指すポインタをロードする。マッピング制御回路14は、順次の使用のためにこのポインタを保存し、ポインタを用いて、マッピングテーブル格納に割り当てたブロック76からの現マッピングテーブルを、マッピングテーブルメモリ12にロードする。このことは、例えば上述した方法のうち任意な方法を用いて実行することができる。
この構造は、異なる物理ブロックを、マッピングテーブル格納ブロック76として割り当てることができ、同一ブロックを他のブロックよりずっと頻繁に消去することを防ぐようにすることができるという利点を有する。割り当てブロック76を変更する度毎に、新しいポインタを、割り当てブロック76を指すブロック74に書き込む。好適には、少なくとも置換可能なブロック(割り当てブロック76および中間ブロック74)はそれぞれ消去された回数を示すカウンタ値を格納し、マッピング制御回路14は、カウンタ値が閾値を超える時、関連するブロックを異なるブロックに置換するよう構成することができる。カウンタ値は、例えばブロック消去後に書き込む度毎に、1ずつ増やすことができる。
同様に、時間の経過につれ、異なる物理ブロックを中間ブロック74に用いることができ、新しいポインタ値を格納する前に同一ブロックを頻繁に消去しすぎるのを防ぐ。中間ブロック74を変更する度毎に、新ポインタ72を、中間ブロック74を指すベースブロック70に書き込む。中間ブロック74の変更は、割り当てブロック76の変更より頻繁に行わないことに留意されたい。ある一つの実施例においては、割り当てブロック76をN1回(例えばN1=8)消去する度に、異なる物理ブロックを割り当てブロック76用に選択する。このとき、中間ブロック74は、割り当てブロックをN2回(例えばN2=100000、より一般的には、ブロックを消去でき依然データ格納に使用できる最大回数以下の任意の整数)消去する毎に一回だけ更新を必要とする。中間ブロック74に対応する物理ブロックをN2回消去したとき、この物理ブロックを置換する。この場合、このような置換は、割り当てブロック76をN1×N2回消去した後に生ずる。このようにして、中間ブロック74の消耗がより遅くなり、またベースブロック70の消耗もより一層少なくなる。
代替案として、中間ブロック74を用いず、ベースブロック70におけるポインタ72が割り当てブロック76を直接指し示すようにすることができる。これにより、フラッシュメモリのより効率的な使用およびより迅速なマッピングテーブルの読み出しが得られる。しかし、ベースブロックの消耗は増大する。一定時間後、ポインタ値を有するブロックは消去しなければならず、このことは消耗の増大を不可避的にもたらすことに留意されたい。そのような消耗を軽減するために、中間ブロック74における中間ポインタをベースブロック70と割り当てブロックとの間で使用する。
別の代替案として、中間ブロックのチェーン(連鎖)を使用することができ、ベースブロック70におけるポインタ72はチェーンの最初のブロックを指し、割り当てブロック76を指し示す最終ブロックを除き、各後続ブロックはチェーンにおけるそれに続くブロックを指し示すものとする。この方法においては、ベースブロックの消耗を軽減することができる。割り当てブロックからの中間ブロックの数を増やすにつれ、これら中間ブロックを更新する必要がより少なくなる。このようにして、所定物理アドレスを有するベースブロック70を、消耗を引き起こすこのような頻繁な更新から防護することができる。
固定した所定長さのチェーンを用いることができる。代替案として、動的に調節可能な長さのチェーンを用いることができる。この場合、チェーンにおける最終中間ブロックは、そのポインタが割り当てブロックを指し示す表示を格納する(または、チェーンの終端から所定距離にあるブロックは、チェーンに沿って所定距離にあるブロックがそのようなポインタを格納していることを示すようにする。)ある実施例においては、閾値を超えた更新頻度を検出したとき(例えば、ベースブロック70を消去した回数が閾値Tを超えるとき)、マッピング制御回路14はチェーンの長さを増加させる。このようにして、チェーンの長さを使用タイプに適応させ、ベースブロック70の過度の消耗を防ぐことができる。ある実施例においては、チェーン長の延長を用いて、ベースブロック70を閾値回数より多く更新するのを防ぐ。これは、例えば、ベースブロック70を、例えば閾値回数(T=100000)更新したときチェーンにおける付加的な中間ブロックを追加し、最後にベースブロック70を消去した後、ベースブロック70に新ブロックを示すポインタを書き込み、新中間ブロックに次の中間ブロックを示すポインタを書き込むことによって、実現することができる。新中間ブロックを例えば閾値回数であるT回消去した場合、新中間ブロックにベースブロック70の役割を果たさせながら、これを繰り返すことができる。
さらに他の実施例においては、多数のブロックを、マッピングテーブルまたはマッピングテーブルの一部を格納するために割り当てる。このことは、例えば、古い割り当てブロックにおける古いマッピングテーブルを消去する前に、新マッピングテーブルを新割り当てブロックに格納する実施例に適用する。代替案として、このことを、例えば、論理ブロックアドレスの対応するセグメント用のマッピングテーブルを対応するブロックに格納する実施例に適用する。
図7bはこの実施例を示す。この実施例においては、ベースブロック70は、各対応する中間ブロック74,78を示す第1および第2のポインタ72a,72bを有し、同様に各中間ブロックは各割り当てブロック76,79を示すポインタ75,75aを有するものとする。この実施例においては、起動中、マッピング制御回路14はまずベースブロック70からポインタ72,72aをロードし、これらのポインタを用いて他のブロック74,78のアドレス指定をし、マッピングテーブル格納用に割り当てたブロック76,79を指し示すポインタをロードする。マッピング制御回路14は、これらポインタをその後使用するため保存し、これらポインタを用い現マッピングテーブルまたはそのセグメントを、マッピングテーブルメモリ12にマッピングテーブルを格納するために割り当てたブロック76から、ロードする。このことは、例えば上述した方法のうち任意の方法を用いて実行することができる。
割り当てブロック76,79のうち一方の代わりに他のブロックを使用してマッピングテーブルを格納しようとし始めるとき、マッピング制御回路14は、中間ブロック74,78におけるポインタを変更し、このポインタが置換した割り当てブロック76,79を指し示すようにする。好適には、マッピング制御回路14は、ポインタを変更する前に新しいマッピングテーブル(またはマッピングテーブルのセグメント)を新たに割り当てたブロックに格納する。
2個のポインタ72,72aをベースブロック中に格納する構造を示したが、当然のことながら代替案も可能である。例えば、単独のポインタを単独の中間ブロックに格納して2個のポインタを使用する代わりに、単独の中間ブロックに割り当てブロック76,79を指し示す2個のポインタを格納することができる。これには必要なブロックが少なくなるという利点があるが、消去操作がより多く必要なためより多くの消耗が発生する。別の実施例においては、2個の割り当てブロック76,79より多くのブロックを用いるとき、2個より多くのポインタを格納してもよい(ベースブロック70または中間ブロック74,78中に)。代替案として、互いに所定の物理的関係を有するブロック(例えば連続する物理アドレス)を中間ブロック74,78または割り当てブロック76,79に用いるとき、1個のポインタを中間ブロック74,78の各個にまたは1個の割り当てブロック76,79の各個に用いることができる。
上述の実施例においては、有効なポインタのみを各ブロックに格納することを示したが、このことは、マッピング制御回路14がベースブロック70および中間ブロック74,78を、これらのブロックにおけるポインタ値を変更する度毎に、消去および上書きする(または中間ブロック74,78を置換する)ことを意味する。代替案として、先行して格納したポインタを消去せずに、マッピング制御回路14が各新ポインタ値を、ベースブロック70内における新ページ、またはポインタを有する中間ブロック74,78に、書き込むよう構成することができる。
図7cは、順次のポインタ72,75のために順次のページを使用することを示す。ポインタ値を有するページをハッチングで示す。各場合において、最下部のハッチング付きページ(このページの最高位アドレスがポインタ値を有する)が有効ポインタ値を有する。より高位のページ(より低位アドレスを持つ)はより古い(無効の)ポインタ値を有する。ある代替実施例においては、マッピング制御回路14は、ポインタに付随するバージョン数を書き込み、このバージョン数はテーブルを書き込む(さもなければ所定シーケンスに従って変更する)度毎に増やすものとする。この実施例においては、マッピングテーブルの有効バージョンを、最も進んだバージョン数を有するマッピングテーブルを選択することによって、識別することができる。
例えば、ある所定シーケンスのページにおける空ページが続くポインタを有するページをサーチすることによって、起動時にマッピング制御回路14は、有効(最も新しく格納した)ポインタ値を無効ポインタ値から識別する。この所定シーケンスは、例えば物理アドレスのシーケンスとすることができる。このサーチは、例えば二分探索法(最初にブロックの中間のページが空かどうか検査し、つぎに、この最初に検査したページがそれぞれ空または空でない場合、前半または後半のページの中間ページを検査し、検査するページの両側半分に検査済みページが隣り合うまでこの作業を続ける)とすることができる。この実施例は、起動時により長い探索時間を使うことによって、必要な消去操作をより低頻度にできるという利点がある。
ある代替実施例においては、マッピング制御回路14は、ポインタに付随するバージョン数を書き込み、このバージョン数は新ポインタを書き込む(または所定シーケンスに従って変更する)度毎に増やすものとする。この実施例においては、ポインタの有効バージョンを、最も進んだバージョン数を有するポインタを選択することによって、識別することができる。さらに別の実施例においては、マッピング制御回路14はバージョン数を有する更新を任意の中間ブロックへ書き込み、書き込み後他方のブロックを、例えばその他方のブロックが満杯の場合、消去する。
バージョン数を周期的に変更することができる。適切なブロックを見つけるために満杯および空ブロックを検査する代わりに、バージョン数をブロック中のポインタを有するページの位置と組み合わせて用いることができる。この場合、短いサイクル、例えば4個の異なるバージョン数で十分である。
別の実施例においては、マッピング制御回路14は、新しい中間ブロックへ書き込む前に、満杯中間ブロック中に「ダーティ」フラッグをセットし、起動時に適切なブロック選択を補助するよう構成する。この場合、マッピング制御回路14は、まずダーティのマークが付いていない中間ブロックを用いようとする。このブロックが(エラーのため)空の場合、マッピング制御回路14はダーティブロックを用いる。
多数の有効ポインタ値を(図7bの場合のように)並列的に用いる実施例においては、ポインタ値は、多数の並列的なポインタ値におけるランクの識別を伴って格納することができる。この場合、起動時に、マッピング制御回路14は有効(最も新しく格納した)ポインタ値をサーチし、有効ポインタ値の各ランクは、所定シーケンスにおいて同一ランクの他のいかなるポインタより最も進んだ位置にあるものとする。
マッピング制御回路14がポインタ値格納のために全てのページを使用してしまっており、新たにポインタ値を書き込まなければならないとき、マッピング制御回路14はそのブロックを消去し、頂部から再度スタートする。図8(a)〜(c)は、多数のブロックをポインタ値に使用する代替実施例を示す。ベースブロック70中のポインタ72,82、第1中間ブロック74および第2中間ブロック84を参照する。最初、図8aに示すように、ポインタ値を変更する度毎に、変更したポインタ値75を第1中間ブロック74中の新ページに書き込み、第2中間ブロック84は空のままとする。第1中間ブロック74が満杯の時、マッピング制御回路14は、図8bに示すように次の変更したポインタ値75を第2中間ブロック84の最初のページへ書き込み、続いて図8cに示すように前のブロックのポインタ値を消去する。
このようにして、更新の中断によるエラーを簡単に回復することができる。起動時、マッピング制御回路14は第1中間ブロック74が満杯かどうか検査し、満杯の場合、第2中間ブロック84から1個以上のポインタが使用可能か検査する。使用可能である場合、マッピング制御回路14は第2中間ブロック84から最後のポインタ値を用い、使用不能の場合、マッピング制御回路14は第1中間ブロック74から最後のポインタ値を用いる。第1中間ブロック74が空の場合、マッピング制御回路14は第2中間ブロック84から最後のポインタ値を用いる。
第2中間ブロック84へのポインタ値追加および使い古しの第2中間ブロック84の消去は期間を拡張し、例えば多数のポインタ値を第2中間ブロック84に書き込んでしまうまで遅延させることができることに留意されたい。それは、他方の中間ブロックが空でない場合、この他方の中間ブロックから最後のポインタ値を用い、また他方の中間ブロックがからである場合、先行の中間ブロックから最後のポインタ値を用いて中間ブロックが満杯かを検査することによって、マッピング制御回路14は起動時にどちらの中間ブロックが有効ポインタ値を有するかを決定するよう構成することができるからである。
この技術はベースブロック70にも応用することができる。例えばベースブロック70の全てのページを使用している時、マッピング制御回路14は次のポインタ値を所定の予備のベースブロック(例えばブロックアドレス1を有するブロック)中の最初のページへ書き込み、続いてベースブロック70を消去する。例えば第2中間ブロック84の変更をする場合、マッピング制御回路14は、(必要ならば)ポインタ値82を古い中間ブロックへ書き込んだ後、ポインタ値を第2中間ブロック84へ追加し、第2中間ブロック84中の最初のページへ書き込む。
図9aは、例えば図7bの場合のように、1個以上の有効ポインタ値を並列的に用いる実施例を示す。並列的なポインタ値は各ランクと対応する(例えば、連続する論理アドレスの範囲におけるマッピングテーブルの連続するセグメントのランクに対応する。つまり、並列的なポインタは第1および第2のポインタでラベル付けする)。対応する各中間ブロックを、対応する各ランクのポインタ値の格納に割り当て、割り当てランクを識別する情報(例えばランクに対応する数)をポインタ値を有する各中間ブロック中に格納する。
有効な並列ポインタは、対応する各中間ブロック74,78の最後に占有した位置にそれぞれ格納する。追加ポインタ92をベースブロック70中に格納し、ポインタ92は追加中間ブロック94を指し示すものとする。この追加中間ブロック94は、他の中間ブロック74,78がいずれも満杯でない間、空のままとする。この場合、マッピング制御回路14は新ポインタ値を中間ブロック7478中の順次のページに書き込む。中間ブロック74,78の一方が満杯となり、新ポインタ値を追加しなければならない時、マッピング制御回路14は新ポインタ値を追加中間ブロック94に書き込む。加えて、マッピング制御回路14はポインタのランクの識別を追加ブロック94へ書き込む。図9bに示すように、続いてマッピング制御回路14は満杯の中間ブロックを消去する。今度はこの消去したブロックは追加中間ブロックの役割を担う、つまり、中間ブロックが再度満杯となり、ポインタ値を追加しなければならない時、マッピング制御回路14はポインタ値をその時点で空のブロックへ書き込み、満杯ブロックを消去する。
起動時、マッピング制御回路14はベースブロック70からポインタを読み込み、どのポインタが各ランクの中間ブロックを指しているか決定する。このような2個の中間ブロックが同一ランクに対応している場合、マッピング制御回路14はそれらの中間ブロックのうち一方、すなわちポインタを割り当てブロックにロードするために満杯でも空でもない方、を選択し、他方の中間ブロックが満杯の場合この他方の中間ブロックを消去する。そのランクの一方のブロックが満杯であり、他方のブロックが空の場合、マッピング制御回路14は満杯ブロックから最後の書き込みポインタ値を用いる。
図10(a),(b)は、異なるランクのポインタ値105a,105bを同一ブロック中に一緒に格納し、各ポインタはそのランク識別を付随するものとした実施例を示す。この実施例においては、マッピング制御回路14は、全てのランクの新ポインタ値を同一中間ブロック74へ満杯になるまで追加する。あるランクの次の新ポインタ値を書き込まなければならないとき、マッピング制御回路14はそのランクの新ポインタ値を追加ブロック94に書き込み、他の1個または複数個のランクの1個または複数個の有効ポインタ値を追加ブロック94にコピーする。続いて、マッピング制御回路14は満杯ブロックを消去する。起動時、マッピング制御回路14は、ベースブロック70中のポインタ値を用いて中間ブロックを確定し、空でも満杯でもない中間ブロックを探索し、これで全てのランクのポインタ値が得られない場合、そのブロックから最後の書き込みポインタ値を用い、これが満杯の場合、マッピング制御回路14は、他方のブロックから残っているランク全ての最後の書き込みポインタ値をロードする。
当然のことながら、有効ポインタ値を、1個より多くのあり得るブロックから選択しなければならない任意の実施例において、マッピング制御回路14は、空でない他のブロックが使用可能の場合における満杯ブロックの消去、バージョン数の使用、ダーティフラッグの使用等、任意のメカニズムを用いて、そのブロックが使用可能か確定するよう構成することができる。また、不整合が生じる場合、マッピング制御回路14は最後の信頼性のあるバージョンを識別することができる。例えば、ポインタが無効なマッピングテーブル(例えば、空のマッピングテーブルまたは異なる論理アドレスを同一の物理アドレスへマッピングするテーブル)を参照していることを、マッピング制御回路14が判定する場合、マッピング制御回路14は旧バージョンのポインタを用いることができる。情報の置換を完了する前には、マッピング制御回路14が情報を消去しないことを確実にしたいとき、このことは取り得る最良のエラー修正が得られる。
他の実施例においては、更新の回数を減らすものとする。これは、マッピングテーブルに関連して、マッピングテーブルを更新するとき、そのマッピングテーブル中に入力すべきブロックを特定する、「フリー」ブロックのリストを格納することによって実行する。このようにして、もし論理アドレスを第1ブロックの物理アドレスにマッピングし、第1ブロック中のデータをつぎに更新する間にマッピング制御回路14がその第1ブロックを第2ブロックに置換する(例えば第1ブロックのこれ以上の消耗を回避するために)ことを選択する場合、マッピング制御回路14はフリーリストから第2ブロックを選択し、論理アドレスの識別子(例えば「タグ」)を第2ブロック中に格納する。この場合、マッピング制御回路14は新マッピングテーブルを書き込むことを省略する。代わりに、次の起動時、マッピング制御回路14は古いマッピングテーブルに関連して格納したフリーリストを用いて、フリーリストにおける任意のブロックを更新に使用したかどうかを決定する。使用していた場合、マッピング制御回路14はマッピングテーブルの修正を、これらのブロック中における論理アドレスの識別子から、推測する。マッピングテーブルの新バージョンは、フリーブロックリストの全てのブロックを使用した時のみ、格納する必要がある。
図11は、この実施例に用いる、マッピングテーブル情報を有するメモリからのブロック110を示す。このブロックは、連続バージョン112a-cのマッピングテーブルを有し、各バージョンには、フリーブロックのアドレスを有する「フリーリスト」114a〜cが付随する。最後のバージョンのマッピングテーブル112cおよびそれに付随するフリーリスト114cは現バージョンと称する。動作にあたり、アドレスが現バージョンのマッピングテーブル112c中に現れる物理ブロックを、置換ブロックを用いて更新しなければならないとき、マッピング制御回路14は関連するフリーリスト114cから第1利用可能アドレスを用い、第1使用可能アドレスによってアドレス指定されたブロックに更新を書き込む。さらに、マッピング制御回路14はこの新ブロックに、更新を適用する論理ブロックアドレスを識別するタグを書き込む。マッピング制御回路14は、新ブロックにおける更新を完了した後、現マッピングテーブル112c中に依然現れる古いブロックを消去する。
好適には、これに応じて、マッピング制御回路14はマッピングテーブルメモリ12中のマッピングテーブルを更新する。マッピング制御回路14が、現フリーリスト114cにおける全てのブロックを更新に使用したことを検出するとき、マッピング制御回路14は、新バージョンのマッピングテーブルおよび消去した古いブロックのリストを古いフリーリスト114cの後のブロック110内に(またはマッピングテーブルデータに用いる別のブロック内に)書き込む。好適には、各フリーリストは多数のブロックのアドレスを有するものとする。この場合、新バージョンのマッピングテーブルおよびフリーリストはなるべく、古いフリーリスト114cを使い果たしてから1回のみ書き込むと好適である。
起動時、マッピング制御回路14は現バージョンのフリーリスト114cを、例えばブロック110中の最後の空でないページをサーチすることによって、読み出す。つぎに、マッピング制御回路14はこのフリーリスト114cにおけるアドレスでアドレス指定されたページを調べ、これらページにデータが書き込まれているかどうか決定する。もしデータが書き込まれていれば、マッピング制御回路14は、タグから、どの修正を現バージョンのマッピングテーブルへ適用しなければならないかを確定する。このようにして、1個以上の修正を確定し、各修正によって論理ブロックのアドレスおよびその論理ブロックのための更新したデータを有する物理ブロックのアドレスを識別する。ある実施例においては、マッピング制御回路14は、ブロック110から現バージョンのマッピングテーブル112cを、マッピングテーブルメモリ12にコピーし、マッピングメモリ12中のマッピングテーブルに修正を適用する。別の実施例においては、マッピング制御回路14はマッピングメモリ12内に修正のリストを格納し、これらの修正を、ブロック110からロードするとき、マッピングテーブルの入力に適用する。
好適には、マッピング制御回路14はフリーリスト114cからブロックを用い、これらのブロックのアドレスがフリーリスト114c中に現れるシーケンス(順番)で更新する。この場合、起動時マッピング制御回路14は、好適には、ブロックのアドレスがフリーリスト114c内で出現する順番で更新するため、フリーリスト114cにおけるブロックを検査し、ブロックを更新していないことを確定した時点で検査を止めるようにする。これにより起動速度を上げることができるが、ほんの一部のブロックがフリーリスト上に現れるだけで、そのようなシーケンスを用いなくても起動は非常に速い。
好適には、現マッピングテーブル112cに出現する古い各ブロックを、更新バージョンのブロックを完全に書き込んだ時点で、消去する。このようにしてデータが紛失しないようにする。しかし、新バージョンのマッピングテーブルおよびフリーリスト(このフリーリスト中には全ての消去したブロックが現れるようにすると好適である)を書き込まれる直前まで、消去を遅らせることができる。また、マッピングテーブル112a〜cおよびフリーリスト114a〜cを交互に格納する実施例を説明したが、マッピングテーブルとフリーリストとの間の関連は他の方法、例えばバージョン数を双方に盛り込むことによって実現でき、この場合、マッピングテーブルおよびフリーリストを任意に格納することができる。また、マッピングテーブルおよびこれに関連するフリーリストは、例えばこの関連を生ずるよう同一シーケンスで、異なるブロック中に格納することができる。
この技術は上述の実施例全てを組み合わせて、またはそれ単独で、適用することができると理解されたい。例えば、多数のブロックを使用して、フリーリストおよび関連するマッピングテーブルのバージョンを格納することができ、新ブロックへ新バージョンを書き込んだ後のみ満杯ブロックを消去し、最新バージョンは、起動時にサーチすることによって見つけることができる。
別の実施例として、セグメント化したマッピングテーブルを用いることができ、この場合、更新したセグメントの新バージョンを格納する必要がある。この場合、対応する各フリーリストを対応するセグメントに使用することができ、セグメントのブロックの更新をセグメントのフリーリストを使用して実行する。しかし好適には、全てのセグメントに共通のフリーリストを使用し、任意セグメントのブロックの更新を、全てのセグメントが共有する同一のフリーリストを用いて実行する。これにより、格納する必要のあるマッピングテーブルの更新回数を減らすことができる。この場合なるべく、各セグメント中で参照するブロックのアドレスには何ら制限が課されず、それはセグメントのマッピングテーブル中において、全てが所定アドレスビットの同一アドレス値を有する各物理ブロックセットに各セグメントをマッピングするときよりも、若干長いアドレスを要することを意味することに留意されたい。
さらに、セグメントを用いる時、ある実施例においては、マッピングテーブルメモリ12は一部のセグメントのみの(例えば一個のセグメントのみの)マッピングテーブルの一部を取得する。これにより、小さいマッピングテーブルメモリ12を使用することができるようになる。この場合、全てのセグメントの修正は、取得したマッピングテーブルとともに、マッピングテーブルメモリ12内に格納すると好適である。この場合、マッピング制御回路14は、必要時、新セグメントのマッピングテーブルを、フラッシュメモリのブロックからマッピングテーブルメモリ内にロードし、マッピングテーブルメモリ12内に格納した修正を適用する。さらにある実施例においては、マッピング制御回路14は、フラッシュメモリ10からセグメントのマッピングテーブルをロードする前に、修正を用いて論理アドレスをマッピングしようとする構成することができる。これによりアクセス速度を向上させることができる。
他の実施例として、ポインタチェーンを使用して、マッピングテーブルおよびフリーリストを格納するブロック110(またはブロックセット)を識別する。このようにして、ブロック110(または、マッピングテーブルおよびフリーリストを一緒にまたは個別に格納するためのブロックセット)を、消耗の問題なく、交換することができる。
フリーリストの使用もポインタチェーンに適用することができる。ある実施例においては、チェーン中の中間ブロックを指し示すポインタを、新しい中間ブロックに用いるブロックを指し示すポインタのフリーリストに関連付けする。新しい中間ブロックを生成するとき、フリーリストにおいて識別されるブロックを用い、新ポインタ値をこのブロックに書き込む。さらに、何らかの情報をこのブロック中に有効ブロックとして格納し(例えばバージョン数を盛り込むことによって)、中間ブロックを指し示すベースブロック中のポインタを更新しない。フリーリストを使い果たした場合のみ、ベースブロックにおいて、新中間ブロックのポインタ値およびフリーリストを更新する。
ここまで整数個のマッピングテーブルおよびフリーリストをブロックに当てはめる実施例を説明したが、このことは必ずしも必要ではないと理解されたい。マッピングテーブルおよびフリーリストのサイズが、ブロックを整数個のマッピングテーブルおよびフリーリストで満杯にできないとき、マッピング制御回路14は、一方のブロックから他方のブロックにオーバーフローする最終マッピングテーブルおよびフリーリストを書き込むことができる。この場合、それ以上のマッピングテーブルおよびフリーリストがオーバーフローするマッピングテーブルの後に格納されていない場合、マッピング制御回路14は起動時にオーバーフローするマッピングテーブルおよびフリーリストを用い、またマッピング制御回路14は、満杯マッピングテーブルおよびフリーリストを次のブロック中に書き込み終わる後までは、第1ブロックを消去しない。
図12aは、直ちにブロックを完全に更新することはない実施例を示す。第1ブロック120は、論理ブロックの当初の完全なデータセットを格納していることを示している。第2ブロック122は、論理ブロックの更新データ123を格納していることを示している。
ある実施例においては、マッピング制御回路14は、空ブロックを例えばフリーリスト114cから選択することによって、第1ブロック120にマッピングする論理ブロックの一部を更新せよという命令に応答するよう構成することができる。この空ブロックを第2ブロック122とする。マッピング制御回路14は、ブロック120の更新した部分のデータ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ブロックを消去する。
任意の時点、例えばフリーブロックがこれ以上得られないときでも、マッピング制御回路14は、第1ブロック120の残りの(まだ更新していない)位置を第2ブロック122へコピーする。このとき、マッピング制御回路14は、さらに、第2ブロック12に、第2ブロックの準備が完了したことを示す情報を書き込む。その後、マッピング制御回路14は第2ブロック122を第1ブロック120の役割に用い、続いて当初の第1ブロック120を消去する。ある実施例においては、マッピング制御回路14は、装置の電源が遮断されたときも、この操作を行う。
読み出し中、マッピング制御回路14が論理ブロックの読み出し命令を受け取る場合、マッピング制御回路14は、第1および第2ブロック120,122が論理ブロックのために利用可能かどうか確定し、利用可能な場合、その読み出し操作が、更新したメモリ位置のための第2ブロック122からの更新データ123、または更新していない値のための第1ブロック120からの当初データ、のどちらに関するものか確定する。前者の場合、マッピング制御回路14は読み出し操作を第2ブロック122に指示し、後者の場合、マッピング制御回路14は読み出し操作を第1ブロックに指示する。
マッピング制御回路14は、好適には、追加の修正をマッピングテーブルメモリ12中に格納し、ブロックの一部(または複数部分)を更新したことを示し、読み出し操作中に、更新したデータ123を識別するようにする。これら追加の修正は、例えば更新を書き込んだとき、マッピングテーブルメモリ12に格納する。
ある実施例においては、マッピング制御回路14は、起動時、フリーリスト114cを用いて更新を修復する。この実施例においては、マッピング制御回路14は、フリーリスト114cに載っている1個または複数のブロックの検査を行い、これらブロックが、どの論理ブロックにあるかを示すデータおよびタグ、を有しているかどうかを確定する。有している場合、マッピング制御回路14は、これらのブロックが、そのブロックの準備が完了していることを示す情報を有しているかどうか検査を行う。有している場合、マッピング制御回路14は、マッピングテーブル112cにおける論理ブロックのために識別されるブロックの代わりにそのブロックを用いる。マッピング制御回路14がデータを有するブロックを検出するがそのブロックの準備が完了していない場合、マッピング制御回路14は、このブロックを第2ブロック122として用い、マッピングテーブル122cにおける同一論理ブロックにリストされているブロックを第1ブロックとして用いる。ある実施例においては、マッピング制御回路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は、第1ブロック120から第2ブロック122に、更新データ123の終端から追加書き込み命令のアドレスの始点にいたるデータをコピーし、続けて追加の書き込み命令のデータを第2ブロック122に書き込む。新しい書き込み命令のためのメモリ位置が、既に書き込んだ第2ブロックの部分の前にきたりオーバーラップする場合、マッピング制御回路14は、第3ブロック124としてフリーブロックを選択し、新しい書き込み命令のデータをこの第3ブロックに書き込み、これに先立って第2ブロック122からのデータのコピーを行う。
ある実施例においては、マッピング制御回路14は、第1、第2および第3ブロック120,122,124を維持して、使用する。追加書き込み命令を同一論理ブロックに対して行う場合、さらに多くのブロックを使用することもできる。この実施例においては、マッピング制御回路14は、読み出しアドレスに基づいて、これらブロック120,122,124のうち一個からの読み出し命令を実行する。したがって、マッピング制御回路14は、これらの各ブロック120,122,124、およびブロック中において最新データを格納している位置にいたるまでの位置を識別する追加の修正を格納することができる。さらに、任意な時点で(例えば利用可能なフリーブロックがこれ以上ないとき)、メモリマッピング制御回路14はすべての修正を一掃して、最も空きのある(先行する直近ブロック122等の次の役割を担う)ブロック124を満杯にし、準備が完了したこの第3ブロック124に情報を格納することができる。マッピング制御回路14は続いて、他のブロック120,122を消去し、更新メモリマッピングテーブルおよびフリーリストをフラッシュメモリ10へ書き込むことができる。
起動時、マッピング制御回路14は、フリーリスト123cに載っているブロックをサーチし、データを有しているかどうか決定する。ある論理ブロックのためのブロックが準備完了していることの表示を有している場合、マッピング制御回路14は、その論理ブロックのために、マッピングテーブルに載っているブロックの代わりにそのブロックを使用する。マッピング制御回路14が、フリーリストからの1個または複数個のブロックが同一論理ブロックに対するデータを有することを検出するが、これらのブロックが1個も準備完了していることを示していない場合、マッピング制御回路14は追加の修正情報を構築し、この追加の修正情報は検出したブロック122,124を参照する。
原則として、1個より多くの付加的ブロック122,124を1個の論理ブロックのために使用していて、マッピング制御回路14が書き込み命令を受け、各付加的ブロック122,124中の最後に更新したメモリ位置以降のメモリ位置にあるデータを書き込みにより更新するときに、マッピング制御回路14はどこに更新を書き込むかの選択をすることができる。最も古い(満杯の)付加的ブロックへの書き込みは、より新しいブロックには更新のための余地がより多く残っているという利点があり、このことは付加的ブロックの必要性を少なくする。しかし、最新の付加的ブロックへの書き込みも使用することができ、この場合、最新ブロックにおける更新データをより古いブロックにおける更新データを超える拡張したものとすることができるという効果を有する。この場合、マッピング制御回路14は、古いブロックを消去すると好適である。さらに好適には、マッピング制御回路14はこの場合更新のシーケンスを示すブロックに情報を書き込み、起動時に追加修正を形成するのに用いる。
ここで用いる、チェーンにおけるポインタおよびマッピングテーブル中における物理ブロックのアドレスの双方、ならびにフリーリスト中のブロックアドレスは、それぞれに対応する機能が割り当てられた各物理ブロックをそれぞれ識別するために用いるポインティング情報を意味する。これら機能の典型的な例としては、論理ブロックアドレスとしてのブロック、ポインタをなすブロック、およびフリーリストをなすブロックとして機能するブロックがある。
マッピング制御回路14は、例えば、本明細書で説明したようなブロックを使用するための命令のプログラムを組み込んだプログラム可能処理回路として実現することができる。代替案として、マッピング制御回路14の一部または全てを、上述の機能を果たす専用の回路として実現することができる。
ここまで、個々のブロックを指し示すポインティング情報を使用し、個々のブロックをポインティング情報の保存に使用する(消去単位はブロック)実施例を示したが、代わりに、そのような消去単位のグループを指し示すポインティング情報を使用し、および/または単位のグループを順次の有効ポインタ値を格納するのに使用することもできると理解されたい。
ここまで、(追加の)修正のリストを、好適には、SRAMまたはDRAMのようなRAMメモリとするマッピングテーブルメモリ12に格納する実施例を示したが、代替案として、付加的RANメモリ(図示せず)を設け、更新制御回路14に接続して、修正リストを格納することもできることを理解されたい。同様に、後続のポインタチェーンによって得る最終ポインタ、次の更新の書き込みに使用する空でないブロックの識別などのような他の情報を、マッピングテーブルメモリ12またこのような付加的RAMメモリに格納することができ、この情報を見つけるためのフラッシュメモリ10をサーチすることは、起動時、および随意的に、例えばリセット信号またはエラー信号の受信後のような後の例外的な時点において、のみ実行を要するものとする。
ここまで、(追加の)修正のリストを、好適には、SRAMまたはDRAMのようなRAMメモリとするマッピングテーブルメモリ12に格納する実施例を示したが、代替案として、付加的RANメモリ(図示せず)を設け、更新制御回路14に接続して、修正リストを格納することもできることを理解されたい。同様に、後続のポインタチェーンによって得る最終ポインタ、次の更新の書き込みに使用する空でないブロックの識別などのような他の情報を、マッピングテーブルメモリ12またこのような付加的RAMメモリに格納することができ、この情報を見つけるためのフラッシュメモリ10をサーチすることは、起動時、および随意的に、例えばリセット信号またはエラー信号の受信後のような後の例外的な時点において、のみ実行を要するものとする。
認識されている通り、ある物理ブロックは時間の経過とともに、例えばそのブロックを所定回数以上消去した後の消耗により、またはブロック中に生じる他のエラーにより、使用不能となる。このことが起きるとき、マッピング制御回路14はこれらのブロックの使用を回避する。一旦使用を断念したブロックはマッピングテーブルおよびフリーリストから除外する。随意的に、マッピング制御回路14は、フラッシュメモリ10中でもう使用すべきでない物理ブロックアドレスの「バッドリスト」を示す情報を保持する。ブロックの使用を断念すると「バッドリスト」へ加えるが、フリーリストまたはフラッシュメモリ10中のマッピングテーブルを直ちに更新する必要はない。後者の更新は、フリーリストを使い果たすまで延期することができる。起動時、マッピング制御回路14は、バッドリストを検査してフリーリストまたはマッピングテーブル中を参照するブロックがバッドリストにも載っているかどうか決定し、載っている場合マッピング制御回路14はそのブロックがこれらのどのリスト上にもないものとして動作する。
Claims (15)
- 多数のメモリ位置の物理ブロックを有し、一度に少なくとも1個の物理ブロックを消去することができる不揮発性メインメモリと、
対応するブロックにそれぞれ各個に格納したポインタのチェーンを保持するよう構成し、チェーン中の最終ではない各ポインタはチェーン中の次のポインタを有する各ブロックを指し示すものとした、マッピング制御回路であって、さらに少なくとも一個の他のブロック中に格納したポインティング情報を保持するよう構成し、チェーン中の最終ポインタは前記ポインティング情報を有するブロックを指すものとし、さらにまた、少なくとも装置を起動するとき、前記メインメモリからの前記ポインタを使用して前記チェーンをたどることによって前記ポインティング情報を見つけ出すよう構成した該マッピング制御回路と、
を有することを特徴とする装置。 - 請求項1記載の装置において、前記マッピング制御回路は、ポインタを修正せずに前記他のブロックを多数回消去しまた更新ポインティング情報を前記他のブロックに書き込み、この後、前記他のブロックの代わりに置換ブロックを使用して前記ポインティング情報を格納し、最終ポインタが前記置換ブロックを指し示すよう修正するように構成した、装置。
- 請求項2に記載の装置において、前記マッピング制御回路は、前記最終ポインタを格納している対応のブロックを他の置換ブロックに置換し、前記最終ポインタを格納しているブロックを指し示す最終ではないポインタを、前記他の置換ブロックを指し示すよう修正し、前記最終ではないポインタは前記最終ポインタより低頻度で修正するように構成した装置。
- 請求項2に記載の装置において、前記マッピング制御回路は、前記ポインティング情報を更新する回数に基づいて、動的に前記チェーンの長さを調節するよう構成した装置。
- 請求項1に記載の装置において、前記マッピング制御回路は、順次バージョンの特定ポインタを、これら特定ポインタのための少なくとも1個の特定ブロック中におけるそれぞれ相互に異なる各メモリ位置に、書き込むよう構成し、さらにマッピング制御回路は、前記少なくとも1個の特定ブロックをサーチして最新バージョンの前記特定ポインタを少なくとも装置の起動時に見つけ出すことによって、前記最新バージョンの特定ポインタを読み出すよう構成した装置。
- 請求項5に記載の装置において、前記マッピング制御回路は、スペアブロックを確保し、前記特定ポインタのための前記少なくとも1個の特定ブロックが満杯の時、新バージョンの特定ポインタを前記スペアブロックへ書き込み、続いて前記特定ポインタのための前記少なくとも1個の特定ブロックを消去するよう構成し、
さらに前記マッピング制御回路14は、前記特定ポインタのための前記少なくとも1個の特定ブロックが満杯または空であることを検出するとき、起動時に前記スペアブロックをサーチして最新バージョンの前記特定ポインタを見つけ出すよう構成した装置。 - 請求項6に記載の装置において、前記マッピング制御回路は、前記特定ポインタのための前記少なくとも1個の特定ブロックおよび前記スペアブロックを指し示すポインタを、それぞれに対応する各ブロックに各個に格納するよう構成した装置。
- 請求項6に記載の装置において、前記マッピング制御回路は、前記スペアブロックを、多数の同時有効ポインタのためのそれぞれ対応するブロックのスペアに共通のスペアブロックとして使用するよう構成した装置。
- 請求項1に記載の装置において、前記マッピング制御回路は、ポインタツリーを保持する構成とし、ツリー中の最終ポインタは前記ポインティング情報を有する各ブロックを指し示すものとし、前記チェーンは前記ツリーの一部とし、前記ツリー中の最終ではないポインタは共有ブロックを指し示すものとし、前記ツリー中における単一ノードからの異なる分岐ポインタを前記共有ブロック中に一緒に格納するよう構成した装置。
- 請求項9に記載の装置において、前記マッピング制御回路は、順次バージョンの特定ポインタをメインメモリ中の前記共有ブロックに書き込む構成とし、この場合、前記特定ポインタを更新するシーケンスに基づいて動的に選択した順番で、前記特定分岐ポインタを前記共有ブロック中のそれぞれ相互に異なるメモリ位置に書き込むよう構成し、さらに前記マッピング制御回路は、前記共有ブロックをサーチして最新バージョンの前記特定ポインタを少なくとも起動時に見つけ出すことによって、最新バージョンの各分岐の前記特定ポインタを読み出すよう構成した装置。
- 請求項10に記載の装置において、前記マッピング制御回路は、スペアブロックを確保し、前記対応するブロックが満杯のときに新バージョンの1個の特定ポインタを前記スペアブロックに書き込み、他分岐の最新バージョンのポインタを前記スペアブロックにコピーし、続いて前記共有ブロックを消去するよう構成し、また前記マッピング制御回路は、マッピング制御回路が、満杯である前記共有ブロックを検出するとき、少なくとも起動時に、前記スペアブロックをサーチして前記分岐ポインタを見つけ出すよう構成した装置。
- 請求項11に記載の装置において、前記マッピング制御回路は、少なくとも起動時、および前記特定ポインタを格納しているブロックのどれか一個でも満杯であるとき、前記スペアブロック中に情報を格納しているかどうか検査し、格納している場合、満杯ブロックからの情報の代わりに前記スペアブロックのからの情報を使用するよう構成した装置。
- 請求項1に記載の装置において、前記メインメモリをフラッシュメモリとした装置。
- 請求項1に記載の装置において、この装置がRAMメモリを有し、前記マッピング制御回路は、前記ポインティング情報を有するブロックを直接指し示す直接ポインタを前記RAMメモリに格納し、起動後の操作中直接ポインタを使用して前記ポインティング情報を見つけ出すよう構成した装置。
- 多数のメモリ位置の物理ブロックを有するメインメモリの操作の方法であって、前記メインメモリは一度に少なくとも1個の物理ブロックを消去するよう構成した該メインメモリの操作方法において、
ポインタチェーンを格納し、各ポインタをそれぞれに対応するブロックに各個に格納し、チェーン中の最終ではない各ポインタは、チェーン中の次のポインタを有するそれぞれに対応するブロックを指し示すものとし、
ポインティング情報を少なくとも一個の他のブロック中に格納し、チェーン中の最終ポインタは前記他のブロックを指し示すものとし、
起動時にメ前記インメモリを使用し、前記チェーンをたどることによって前記ポンティング情報を見出す、
ことを特徴とするメインメモリ操作の方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP05112732 | 2005-12-22 | ||
PCT/IB2006/054794 WO2007072313A2 (en) | 2005-12-22 | 2006-12-13 | Memory with block-erasable locations and a linked chain of pointers to locate blocks with pointer information |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009521044A true JP2009521044A (ja) | 2009-05-28 |
Family
ID=38091195
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008546733A Withdrawn JP2009521044A (ja) | 2005-12-22 | 2006-12-13 | ブロック消去可能なメモリ位置およびポインタ情報を有するブロックを見つけ出すポインタのリンク付けしたチェーンを備えるメモリ |
Country Status (5)
Country | Link |
---|---|
US (1) | US20100299494A1 (ja) |
EP (1) | EP1966699A2 (ja) |
JP (1) | JP2009521044A (ja) |
CN (1) | CN101346704B (ja) |
WO (1) | WO2007072313A2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020112178A1 (en) * | 2018-11-30 | 2020-06-04 | Intuit Inc. | Systems and methods for storing object state on hash chains |
JP2022551627A (ja) * | 2019-10-09 | 2022-12-12 | マイクロン テクノロジー,インク. | 自己適応型ウェアレベリングの方法及びアルゴリズム |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7721040B2 (en) | 2007-01-18 | 2010-05-18 | Sandisk Il Ltd. | Method and system for facilitating fast wake-up of a flash memory system |
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 |
US8775758B2 (en) * | 2007-12-28 | 2014-07-08 | Sandisk Technologies Inc. | Memory device and method for performing a write-abort-safe firmware update |
US8447918B2 (en) | 2009-04-08 | 2013-05-21 | Google Inc. | Garbage collection for failure prediction and repartitioning |
US8566508B2 (en) | 2009-04-08 | 2013-10-22 | Google Inc. | RAID configuration in a flash memory data storage device |
TWI425513B (zh) * | 2009-08-13 | 2014-02-01 | Silicon Motion Inc | 識別快閃記憶體中區塊之資料頁的方法以及相關之記憶裝置 |
US8560770B2 (en) * | 2009-11-13 | 2013-10-15 | Seagate Technology Llc | Non-volatile write cache for a data storage system |
US8412881B2 (en) * | 2009-12-22 | 2013-04-02 | Intel Corporation | Modified B+ tree to store NAND memory indirection maps |
JP2012128645A (ja) * | 2010-12-15 | 2012-07-05 | Toshiba Corp | メモリシステム |
CN103765393B (zh) * | 2011-09-07 | 2016-12-07 | 日本电气株式会社 | 存储*** |
US20130198453A1 (en) * | 2012-01-26 | 2013-08-01 | Korea Electronics Technology Institute | Hybrid storage device inclucing non-volatile memory cache having ring structure |
CN108595345B (zh) | 2012-07-25 | 2021-11-23 | 慧荣科技股份有限公司 | 管理闪存中所储存的数据的方法及相关记忆装置与控制器 |
US9652376B2 (en) | 2013-01-28 | 2017-05-16 | Radian Memory Systems, Inc. | Cooperative flash memory control |
CN104102585B (zh) * | 2013-04-03 | 2017-09-12 | 群联电子股份有限公司 | 映射信息记录方法、存储器控制器与存储器储存装置 |
WO2015065333A1 (en) * | 2013-10-29 | 2015-05-07 | Hewlett-Packard Development Company, L.P. | Mapping virtual memory pages to physical memory pages |
TWI585778B (zh) * | 2013-11-05 | 2017-06-01 | 威盛電子股份有限公司 | 非揮發性記憶體裝置的操作方法 |
US9632880B2 (en) * | 2013-12-26 | 2017-04-25 | Silicon Motion, Inc. | Data storage device and flash memory control method |
TWI502345B (zh) * | 2014-05-12 | 2015-10-01 | Via Tech Inc | 快閃記憶體控制晶片以及資料儲存裝置以及快閃記憶體控制方法 |
US9542118B1 (en) | 2014-09-09 | 2017-01-10 | Radian Memory Systems, Inc. | Expositive flash memory control |
US10552085B1 (en) | 2014-09-09 | 2020-02-04 | Radian Memory Systems, Inc. | Techniques for directed data migration |
US9990278B2 (en) * | 2014-10-20 | 2018-06-05 | Cypress Semiconductor Corporation | Overlaid erase block mapping |
US9857988B1 (en) * | 2016-07-10 | 2018-01-02 | Winbond Electronics Corporaiton | Data management in multiply-writeable flash memories |
KR20180039785A (ko) * | 2016-10-10 | 2018-04-19 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
KR20190056862A (ko) * | 2017-11-17 | 2019-05-27 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
CN110597741B (zh) * | 2019-08-23 | 2021-09-10 | 苏州浪潮智能科技有限公司 | 一种l2p表的读写、更新方法及l2p表 |
US11586385B1 (en) | 2020-05-06 | 2023-02-21 | Radian Memory Systems, Inc. | Techniques for managing writes in nonvolatile memory |
CN112992251B (zh) * | 2021-04-09 | 2022-05-17 | 长鑫存储技术有限公司 | 存储器地址测试电路、方法、存储器与电子设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3178909B2 (ja) * | 1992-01-10 | 2001-06-25 | 株式会社東芝 | 半導体メモリ装置 |
US5978808A (en) * | 1995-12-27 | 1999-11-02 | Intel Corporation | Virtual small block file manager for flash memory array |
GB9903490D0 (en) * | 1999-02-17 | 1999-04-07 | Memory Corp Plc | Memory system |
US6282605B1 (en) * | 1999-04-26 | 2001-08-28 | Moore Computer Consultants, Inc. | File system for non-volatile computer memory |
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 |
US7533214B2 (en) * | 2002-02-27 | 2009-05-12 | Microsoft Corporation | Open architecture flash driver |
US7457822B1 (en) * | 2002-11-01 | 2008-11-25 | Bluearc Uk Limited | Apparatus and method for hardware-based file system |
US20040268084A1 (en) * | 2003-06-30 | 2004-12-30 | Steve Longerbeam | Protected RAM filesystem |
US20060036802A1 (en) * | 2004-08-11 | 2006-02-16 | Ixi Mobile (R&D) Ltd. | Flash file system management |
-
2006
- 2006-12-13 EP EP06842468A patent/EP1966699A2/en not_active Withdrawn
- 2006-12-13 WO PCT/IB2006/054794 patent/WO2007072313A2/en active Application Filing
- 2006-12-13 JP JP2008546733A patent/JP2009521044A/ja not_active Withdrawn
- 2006-12-13 CN CN2006800488042A patent/CN101346704B/zh not_active Expired - Fee Related
- 2006-12-13 US US12/158,993 patent/US20100299494A1/en not_active Abandoned
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020112178A1 (en) * | 2018-11-30 | 2020-06-04 | Intuit Inc. | Systems and methods for storing object state on hash chains |
JP2022551627A (ja) * | 2019-10-09 | 2022-12-12 | マイクロン テクノロジー,インク. | 自己適応型ウェアレベリングの方法及びアルゴリズム |
Also Published As
Publication number | Publication date |
---|---|
WO2007072313A2 (en) | 2007-06-28 |
CN101346704B (zh) | 2011-10-05 |
EP1966699A2 (en) | 2008-09-10 |
US20100299494A1 (en) | 2010-11-25 |
WO2007072313A3 (en) | 2008-01-24 |
CN101346704A (zh) | 2009-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2009521044A (ja) | ブロック消去可能なメモリ位置およびポインタ情報を有するブロックを見つけ出すポインタのリンク付けしたチェーンを備えるメモリ | |
JP2009521045A (ja) | ブロック消去可能なメモリ場所を有する不揮発性メモリ | |
JP2009521049A (ja) | ブロック消去可能な記憶場所を有するメモリ | |
JP3906825B2 (ja) | 計算機システム、計算機システム起動方法およびプログラム | |
US7783851B2 (en) | Methods of reusing log blocks in non-volatile memories and related non-volatile memory devices | |
US8239612B2 (en) | Memory controller, flash memory system with memory controller, and control method of flash memory | |
KR0128218B1 (ko) | 일괄 소거형 비휘발성 메모리 | |
US8255614B2 (en) | Information processing device that accesses memory, processor and memory management method | |
JP4844639B2 (ja) | メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 | |
JP4828816B2 (ja) | メモリカード、半導体装置、及びメモリカードの制御方法 | |
JP4301301B2 (ja) | 不揮発性半導体記憶装置およびその管理方法 | |
JP2011154547A (ja) | メモリ管理装置及びメモリ管理方法 | |
US9442666B2 (en) | Optimized management of operation data in a solid-state memory | |
JP2009205689A (ja) | フラッシュディスク装置 | |
JP4366420B2 (ja) | メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 | |
WO2007096844A2 (en) | Memory with block-erasable locations | |
JP2009086738A (ja) | メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 | |
JP2014071535A (ja) | メモリ管理装置、マイクロコントローラ及びメモリ管理方法 | |
JP2017097404A (ja) | マイクロコンピュータ | |
JP2012027971A (ja) | 半導体装置及びデータ書き込み方法 | |
JP2008108048A (ja) | コンピュータ及びそのファームウェア更新方法 | |
JP2010020748A (ja) | 記憶制御装置及び情報処理装置 | |
JP2009026062A (ja) | メモリコントローラ、メモリシステム及びメモリ制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090907 |