(57)【特許請求の範囲】
【請求項１】
複数のブロックに組織化された不揮発性メモリであって、各ブロックは、共に消去可能なメモリユニットに分割される不揮発性メモリにおいて、前記メモリ内のデータを記憶および更新する方法は、
（ａ）データの互いに異なる種類を保持するステップと、
（ｂ）前記データの互いに異なる種類に対して、第１のデータ種類より更新頻度が高く、かつブロックを実質的に充填する第２の種類の更新データのカスケード効果によって前記第１の種類のデータの更新が生じる場合に、前記第１のデータ種類を、前記第２のデータ種類よりランクが高くなるようにランク付けを割り当てるステップと、
（ｃ）各ブロックが実質的に同種類のデータを記憶するように、前記データの互いに異なる種類の更新を複数のブロックに記憶するステップと、
（ｄ）所定の数より少ない空きメモリユニットを有し、かつ前記複数のブロックの中から最上位ランクのデータ種類を有するブロックを優先して、前記ブロックのデータの現在の更新を他のブロックに移転するステップと、
（ｅ）中断されるまで（ｃ）から（ｄ）を繰り返すステップと、
を含む方法。
【請求項２】
請求項１記載の方法において、
空きメモリユニットの前記所定の数は、１から６の間である方法。
【請求項３】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、フローティングゲートメモリセルを有する方法。
【請求項４】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、フラッシュＥＥＰＲＯＭである方法。
【請求項５】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、ＮＲＯＭである方法。
【請求項６】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、メモリカード内にある方法。
【請求項７】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、それぞれがデータの１ビットを記憶するメモリセルを有する方法。
【請求項８】
請求項１〜２のいずれか記載の方法において、
前記不揮発性メモリは、それぞれがデータの１ビットより多くを記憶するメモリセルを有する方法。
【請求項９】
不揮発性メモリであって、
複数のブロックに組織化されたメモリアレイであって、各ブロックは、共に消去可能なメモリユニットに分割されるメモリアレイと、
データの種類の更新をそれぞれ記憶するための複数のブロックであって、データの各種類は、第１のデータ種類より更新頻度が高く、かつブロックを実質的に充填する第２の種類の更新データのカスケード効果によって前記第１の種類のデータの更新が生じる場合に、前記第１のデータ種類が、前記第２のデータ種類よりランクが高くなるように、複数のうちのランクを有する複数のブロックと、
あるブロック内の現在の更新を、所定の数より少ない空きメモリユニットを有し、かつ前記複数のブロックのうちの最上位ランクのデータ種類を有する前記ブロックを優先して、他のブロックに移転するためのコントローラと、
を備える不揮発性メモリ。
【請求項１０】
請求項９記載の不揮発性メモリにおいて、
空きメモリユニットの前記所定の数は、１から６の間である不揮発性メモリ。
【請求項１１】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、フローティングゲートメモリセルを有する不揮発性メモリ。
【請求項１２】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、フラッシュＥＥＰＲＯＭである不揮発性メモリ。
【請求項１３】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、ＮＲＯＭである不揮発性メモリ。
【請求項１４】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、メモリカード内にある不揮発性メモリ。
【請求項１５】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、それぞれがデータの１ビットを記憶するメモリセルを有する不揮発性メモリ。
【請求項１６】
請求項９〜１０のいずれか記載の不揮発性メモリにおいて、
前記不揮発性メモリは、それぞれがデータの１ビットより多くを記憶するメモリセルを有する不揮発性メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、不揮発性半導体メモリに関し、特定的には、制御データの重要な処理を伴うメモリブロック管理システムを有するものに関する。
【背景技術】
【０００２】
電荷を不揮発的に記憶することができる固体メモリであり、特に、小形形状のファクタカードとしてパッケージ化されたＥＥＰＲＯＭおよびフラッシュＥＥＰＲＯＭの形態を取るものが、最近、様々な移動および携帯装置、とりわけ情報機器および一般消費者向け電子製品における記憶装置の選択肢となってきている。同じく固体メモリであるＲＡＭ（ランダムアクセスメモリ）とは異なり、フラッシュメモリは不揮発性であり、電源を切った後でもその記憶したデータを保持する。また、ＲＯＭ（読み出し専用メモリ）とは異なり、フラッシュメモリは、ディスク記憶装置と同様に書き換え可能である。高いコストにもかかわらず、フラッシュメモリは、大容量記憶装置の利用の際にますます使用されるようになっている。従来の大容量記憶装置は、ハードドライブおよびフロッピー（登録商標名）ディスクなどの回転磁気媒体に基づき、移動および携帯環境には不適切である。というのは、ディスクドライブはかさばりがちであり、機械的な故障が生じやすく、大きな待ち時間および高電力という要件を有するからである。これらの望ましくない属性により、ディスクをベースとした記憶装置は、ほとんどの移動および携帯の利用において実用的でないものとなっている。他方、フラッシュメモリは、埋め込み形および着脱可能なカードの形態の両方で、小さいサイズ、低電力消費、高速および高い信頼性という特徴が理由で、移動および携帯環境に理想的なほど適している。
【０００３】
フラッシュＥＥＰＲＯＭは、消去可能な不揮発性メモリであること、およびメモリセルに新たなデータを書き込むまたは「プログラム」するという点で、ＥＥＰＲＯＭ（電気的に消去可能でプログラム可能な読み出し専用メモリ）に類似している。両方とも、フローティング（未接続の）導電ゲートを使用し、電界効果トランジスタの構造であり、半導体基板におけるソース領域とドレイン領域と間のチャネル領域を覆って位置している。そして、コントロールゲートがフローティングゲートを覆って設けられる。トランジスタのしきい値電圧特性は、フローティングゲート上に保持された電荷量によって制御される。すなわち、フローティングゲート上の電荷の所定のレベルについて、トランジスタが「オン」に転換されてソース領域とドレイン領域との間が導通することができるようにする前にコントロールゲートに印加されなければならない対応する電圧（しきい値）がある。特に、フラッシュＥＥＰＲＯＭなどのフラッシュメモリは、メモリセルの全ブロックを同時に消去することができる。
【０００４】
フローティングゲートは、ある範囲の電荷を保持することができるので、しきい値電圧ウィンドウ内の任意のしきい値電圧レベルにプログラムすることができる。しきい値電圧ウィンドウのサイズは、装置の最小および最大しきい値レベルによって区切られ、さらにフローティングゲート上にプログラムすることができる電荷の範囲に対応している。しきい値ウィンドウは、一般的には、メモリデバイスの特徴、動作状態、および履歴に依存している。ウィンドウ内の各別個の分解可能なしきい値電圧レベルの範囲は、原則的には、セルの限定的なメモリ状態を指定するために使用されてもよい。
【０００５】
メモリセルとしての役割を果たすトランジスタは、典型的には、２つの機構のうちの１つによって「プログラムされた」状態にプログラムされる。「熱い電子注入」において、ドレインに印加された高い電圧が基板チャネル領域にわたって電子を加速させる。同時に、コントロールゲートに印加された高い電圧が、熱い電子を薄いゲート誘電体を通ってフローティングゲートへ引き寄せる。「トンネル注入」において、高い電圧が基板に対するコントロールゲートに印加される。このように、電子は、基板から介在フローティングゲートへと引き寄せられる。メモリの状態を変化させるために、メモリセルの最初に消去される電荷蓄積ユニットに電子を注入することによってメモリに対する書き込みを行うことを説明するために、「プログラム」という用語を従来使用してきたが、この用語は、現在では、「書き込み」または［記録する」などといった、より一般的な用語と交換可能に使用されてきている。
【０００６】
メモリデバイスの消去は、数多くの機構によって行われてもよい。例えば、ＥＥＰＲＯＭについて、高い電圧をコントロールゲートに関連した基板に印加して、フローティングゲート内の電子を薄い酸化物層を通じて基板チャネル領域へと通すようにすることによって（すなわち、ファウラー・ノルドハイムトンネル現象）、メモリセルは電気的に消去可能である。典型的には、ＥＥＰＲＯＭは、バイト毎に消去可能である。フラッシュＥＥＰＲＯＭについて、メモリは、すべて一度に電気的に消去可能であるか、または１回につき１つ以上の最小の消去可能なブロックを電気的に消去可能であり、最小の消去可能なブロックは、１つ以上のセクタからなってもよく、各セクタは、５１２バイト以上のデータを記憶してもよい。
【０００７】
メモリデバイスは、典型的には、カードに実装されてもよい１つ以上のメモリチップを備える。各メモリチップは、デコーダまたは消去、書き込み、および読み出し回路のような周辺回路によってサポートされたメモリセルのアレイを備える。より高性能のメモリデバイスは、高機能および高レベルのメモリ動作およびインターフェイスを行うコントローラも搭載されている。
【０００８】
商業的に成功している数多くの不揮発性固体メモリデバイスが現在使用されている。これらのメモリデバイスはフラッシュＥＥＰＲＯＭであってもよく、または他の種類の不揮発性メモリセルを使用してもよい。フラッシュメモリおよびそれを製造するシステムおよび方法の例は、米国特許第５，０７０，０３２号（特許文献１）、第５，０９５，３４４号（特許文献２）、第５，３１５，５４１号（特許文献３）、第５，３４３，０６３号（特許文献４）、および第５，６６１，０５３号（特許文献５）、第５，３１３，４２１号（特許文献６）、および第６，２２２，７６２号（特許文献７）に記載されている。特に、ＮＡＮＤストリング構造のフラッシュメモリデバイスは、米国特許第５，５７０，３１５号（特許文献８）、第５，９０３，４９５号（特許文献９）、第６，０４６，９３５号（特許文献１０）に記載されている。また、不揮発性メモリデバイスは、電荷を蓄積するための誘電体層を有するメモリセルからも製造される。前に説明した導電性のフローティングゲート素子の代わりに、誘電体層が使用される。誘電体蓄積素子を使用するこのようなメモリデバイスは、エイタンらによる「ＮＲＯＭ：新規の局所化されたトラッピング、２ビット不揮発性メモリセル」，米国電子電気学会（ＩＥＥＥ）電子デバイスレター，第２１巻，第１１号，２０００年１１月，５４３〜５４５ページ (“NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letter, vol. 21, no. 11, November 2000, pp. 543-545) （非特許文献１）に記載されている。ＯＮＯ誘電体層が、ソースおよびドレイン拡散間のチャネルにわたって延在している。１データビットに対する電荷は、ドレインに隣接する誘電体層にて局在化され、他のデータビットについての電荷は、ソースに隣接する誘電体層にて局在化される。例えば、米国特許第５，７６８，１９２号（特許文献１１）および第６，０１１，７２５号（特許文献１２）は、２つの二酸化シリコン層間に挟まれたトラッピング誘電体を有する不揮発性メモリセルを開示している。多状態のデータ記憶装置は、誘電体内の空間的に別個の電荷蓄積領域のバイナリ状態を別個に読み出すことによって実施される。
【０００９】
読み出しおよびプログラミング性能を改善するために、アレイ内の複数の電荷蓄積素子またはメモリトランジスタが、並列に読み出しまたはプログラムされる。よって、メモリ素子の「ページ」が、一緒に読み出されるか、またはプログラムされる。既存のメモリ構成において、列は、典型的には、いくつかのインターリーブされたページを含むか、または１つのページを構成することもある。あるページのすべてのメモリ素子が、一緒に読み出されるか、またはプログラムされることもある。
【００１０】
フラッシュメモリシステムにおいて、消去動作は、読み出しおよびプログラミング動作よりも非常に長くかかる場合がある。よって、かなりのサイズの消去ブロックがあることが望ましい。このように、消去時間は、メモリセルの大きな集合体にわたって償却される。
【００１１】
フラッシュメモリの性質は、データが消去されたメモリ位置に書き込まれなければならないということに基づいている。ホストからのある論理アドレスのデータを更新すべき場合、１つのやり方は、更新データを同一の物理メモリ位置に書き換えるというものである。すなわち、論理／物理アドレスマッピングは変化しない。しかし、これは、この物理位置を含む消去ブロック全体が最初に消去されてから、更新されたデータで書き換えられなければならないということを意味する。この更新方法は、消去ブロック全体が消去され、かつ書き換えられる必要があるので効率が悪く、更新すべきデータが消去ブロックの小さい部分のみを占める場合には特に効率が悪い。また、メモリブロックの消去リサイクルが高い頻度で生じる結果となり、この種のメモリデバイスの限られた耐久性の観点から望ましくない。
【００１２】
フラッシュメモリシステムの他の問題点は、システム制御およびディレクトリデータと関係がある。データは、様々なメモリ動作の過程で生成かつアクセスされる。よって、効率的な取り扱いおよび素早いアクセスが性能に直接影響を与えることになる。フラッシュメモリは記憶装置用を意図し、かつ不揮発性であるので、フラッシュメモリ内のこの種のデータを保持するのが望ましい。しかし、コントローラとフラッシュメモリとの間の介在ファイル管理システムによって、データは直接にはアクセスすることができない。また、システム制御およびディレクトリデータは、アクティブかつ断片化しがちであり、大規模なブロック消去を伴うシステムへの記憶には役に立たない。従来、この種のデータは、コントローラＲＡＭに設定され、コントローラによる直接アクセスを可能としている。メモリデバイスの電源投入後、コントローラＲＡＭに配置すべき必要なシステム制御およびディレクトリ情報をコンパイルするために、初期化の処理によって、フラッシュメモリを走査することができる。この処理は時間がかかり、フラッシュメモリの容量が増加しているのでいっそうのコントローラＲＡＭの容量が要求される。
【００１３】
米国特許第６，５６７，３０７号（特許文献１３）は、メモ帳としての役割を果たす複数の消去ブロック内に更新データを記録し、また様々なブロック内の有効なセクタを最終的に統合化し、かつこのセクタを論理的な順次順序で再構成した後にセクタを書き換えることを含む大きな消去ブロック内のセクタ更新を扱う方法を開示している。このように、ブロックは、ごくわずかな更新の度に消去され、かつ書き込まれる必要はない。
【００１４】
国際公開特許出願第ＷＯ０３／０２７８２８号（特許文献１４）および国際公開特許出願第ＷＯ００／４９４８８号（特許文献１５）は共に、論理セクタアドレスを区画に分割することを含む、大きな消去ブロック内での更新を扱うメモリシステムを開示している。小さな区画の論理アドレス範囲が、ユーザデータ用の他の区画とは別に、アクティブなシステム制御データ用に確保される。このように、システム制御データを独自の区画内で操作すれば、他の区画内の関連するユーザデータと相互に作用しないことになる。更新は論理セクタレベルであり、書き込みポインタは、書き込むべきブロック内の対応する物理セクタを指す。マッピング情報は、ＲＡＭ内にバッファリングされ、最終的にはメインメモリ内のセクタ割り当てテーブルに記憶される。論理セクタの最新バージョンによって、既存のブロック内のすべての以前のバージョンは廃止されることになり、既存のブロックは、部分的に廃止される。部分的に廃止されたブロックを許容することができる数に維持するために、ガーベッジコレクションが行われる。
【００１５】
従来技術のシステムは、更新データを数多くのブロックに渡って分散させる傾向にあるか、または更新データによって数多くの既存ブロックを部分的に廃止する場合もある。その結果、部分的に廃止されたブロックに対して大量のガーベッジコレクションが必要となることが多く、これは効率的でなく、メモリの早すぎる老化を生じさせる。また、非順次更新に比べて、順次更新を扱う体系化された効率的なやり方がない。
したがって、大容量かつ高性能の不揮発性メモリに対する一般的な要求がある。特に、大きなブロックにおけるメモリ動作を前述した問題なく行うことのできる大容量不揮発性メモリを有するための要求がある。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】米国特許第５，０７０，０３２号
【特許文献２】米国特許第５，０９５，３４４号
【特許文献３】米国特許第５，３１５，５４１号
【特許文献４】米国特許第５，３４３，０６３号
【特許文献５】米国特許第５，６６１，０５３号
【特許文献６】米国特許第５，３１３，４２１号
【特許文献７】米国特許第６，２２２，７６２号
【特許文献８】米国特許第５，５７０，３１５号
【特許文献９】米国特許第５，９０３，４９５号
【特許文献１０】米国特許第６，０４６，９３５号
【特許文献１１】米国特許第５，７６８，１９２号
【特許文献１２】米国特許第６，０１１，７２５号
【特許文献１３】米国特許第６，５６７，３０７号
【特許文献１４】国際公開特許出願第ＷＯ０３／０２７８２８号
【特許文献１５】国際公開特許出願第ＷＯ００／４９４８８号
【特許文献１６】２００３年１２月３０日出願のアラン・シンクレアによる「適応メタブロック」という米国特許出願
【特許文献１７】２００３年１２月３０日出願のカルロス・ゴンザレスらによる「マルチブロック単位へのブロックの適応決定論的グループ化」という米国特許出願
【特許文献１８】米国特許第６，４５６，５２８号
【非特許文献】
【００１７】
【非特許文献１】エイタンらによる「ＮＲＯＭ：新規の局所化されたトラッピング、２ビット不揮発性メモリセル」、米国電子電気学会（ＩＥＥＥ）電子デバイスレター、第２１巻、第１１号、２０００年１１月、５４３〜５４５ページ
【発明の概要】
【００１８】
不揮発性メモリシステムは、物理メモリ位置の物理グループに組織化される。各物理グループ（メタブロック）は、一単位として消去可能であり、データの論理グループを記憶するために使用することができる。メモリ管理システムは、論理グループの更新データを記録する専用のメタブロックを割り当てることにより、データの論理グループの更新を行うことができる。更新メタブロックは、更新データを受信した順序で記録し、記録が当初記憶された通りの正確な論理順序であるか（順次）、またはそうでないか（カオス的）についての制限はない。最終的には、更新メタブロックは閉鎖されて、さらに記録することができなくなる。いくつかの処理のうちの１つが生じることになるが、元メタブロックを置換する、正確な順序の一杯となったメタブロックが結局は生じることになる。カオス的な場合には、ディレクトリデータが、頻繁な更新の助けとなるようなやり方で、不揮発性メモリに保持される。このシステムは、複数の論理グループが並行して更新されることをサポートする。
【００１９】
本発明の一特徴により、データを論理グループ毎に更新することができる。よって、論理グループが更新されている最中は、論理ユニットの分配（および更新によって廃止されるメモリユニットの分散）は、その範囲が限定される。これは、論理グループが物理ブロック内に正常に含まれている場合に特に当てはまる。
【００２０】
論理グループの更新中に、典型的には１つまたは２つのブロックが、更新論理ユニットをバッファリングするように割り当てられる必要がある。よって、ガーベッジコレクションは、比較的少ない数のブロックに渡ってのみ行えばよい。カオス的ブロックのガーベッジコレクションは、統合化またはコンパクト化によって行われてもよい。
【００２１】
更新処理の経済性は、順次更新に比較してカオス的（非順次）更新に割り当てられる必要のある追加のブロックがないようにする更新ブロックの一般的な処理において、さらに明らかである。すべての更新ブロックは、順次更新ブロックとして割り当てられ、どの更新ブロックも、カオス的更新ブロックに変更可能である。実際、順次からカオス的への更新ブロックの変更は任意である。
【００２２】
システムリソースの効率的な使用により、複数の論理グループを並行して更新することができる。これは、効率性をさらに増し、オーバーヘッドを減少させる。
【００２３】
複数のメモリプレーンに渡って分散されたメモリについての配列
本発明の他の態様によれば、消去可能なブロックに組織化され、かつ論理ユニットを複数のプレーンに並列に読み出しまたはプログラムすることができるように複数のメモリプレーンから構成されるメモリアレイに関して、所定のメモリプレーンに記憶された第１のブロックの元論理ユニットが更新される場合、更新済みの論理ユニットが元論理ユニットと同一のプレーンに維持されるための措置が講じられる。これは、更新済み論理ユニットを、同一のプレーン内ではあるが第２のブロックの次に使用可能な位置に記録することによって達成される。好ましくは、論理ユニットは、所定の論理ユニットのすべてのバージョンが検知回路の同一のセットによって処理されるように、プレーン内の他のバージョンにおけるのと同一のオフセット位置で記録される。
【００２４】
好ましい一実施形態において、最後にプログラムされたメモリユニットから次に使用可能なプレーン配列されたメモリユニットへの介在ギャップが、論理ユニットの現在のバージョンに従ってパディングされる。パディングは、論理ユニットから論理的に先行する論理ユニットの現在のバージョンが次に使用可能なプレーン配列されたメモリユニットに記憶された状態で、最後にプログラムされた論理ユニットから論理的に従う論理ユニットの現在のバージョンでギャップを埋めることによって達成される。
【００２５】
このように、ガーベッジコレクション動作において、論理ユニットの最終バージョンを異なるプレーンから取り出すという、性能を低下させる結果を生じる動作が必要ないように、ある論理ユニットのすべてのバージョンが、同一プレーン内に、元のものと同一のオフセットを有して保持される。好ましい実施形態において、プレーン上の各メモリユニットは、最終バージョンによって更新または埋められる。よって、各プレーンからの論理ユニットを並列に読み出すことができ、さらに再構成をする必要なく、論理的な順次順序となる。
【００２６】
この手法は、論理グループの論理ユニットの最終バージョンをプレーン上で再構成することを可能にし、互いに異なるメモリプレーンから最終バージョンを収集する必要性を回避することによって、カオス的ブロックの統合化のための時間を削減する。これは、ホストインターフェイスに関する性能仕様によってメモリシステムによるセクタ書き込み動作の完了に対する最大待ち時間が規定される場合に、有利である。
【００２７】
フェーズ化されたプログラムエラー処理
本発明の他の態様によれば、ブロック管理システムを伴うメモリにおいて、時間が重視されるメモリ動作中のブロック内のプログラム障害が、ブレークアウトブロック内のプログラミング動作を継続することによって処理される。後のあまり危機的でないときに、中断前に障害ブロック内に記憶されたデータが他のブロックに転送され、この他のブロックもブレークアウトブロックであってもよい。その後、障害ブロックを廃棄することができる。このように、不良ブロックが生じる場合に、データを失うこともなく、不良ブロック内に記憶されたデータを直ちに転送しなければならないことによって指定された時間制限を超えることもなく、不良ブロックを処理することができる。このエラー処理は、危機的な最中にすべての動作を新規のブロックに対して繰り返す必要がないようにするために、ガーベッジコレクションにとっては特に重要である。その後、都合のよいときに、不良ブロックからのデータは、他のブロックへ移転されることによって復旧される。
【００２８】
プログラム障害処理は、統合化処理中には特に重要である。通常の統合化処理は、元ブロックおよび更新ブロック内にある論理グループのすべての論理ユニットの現在のバージョンを統合化ブロックに統合化する。統合化処理中に、統合化ブロック内でプログラム障害が生じると、残りの論理ユニットの統合化を受け入れるために、ブレークアウト統合化ブロックとして機能する他のブロックが準備されることとなる。このように、１回より多くコピーをする必要のある論理ユニットはなく、例外処理を伴う処理も、通常の統合化処理について指定された期間内に完了することができる。好都合なときには、グループのすべての未処理の論理ユニットをブレークアウトブロックに統合化することによって、統合化処理を完了することができる。好都合なときとは、統合化を行う時間があるときに、現在のホスト書き込み動作以外の何らかの他の期間中のことを指すことになる。このような好都合なときの１つとして、更新はあるが、関連する統合化処理がない場合の他のホスト書き込み中が挙げられる。
【００２９】
基本的には、プログラム障害処理を伴う統合化は、複数のフェーズ内で実施されるものとみなされる。第１のフェーズにおいて、各論理ユニットを１回より多く統合化することを避けるために、論理ユニットは、プログラム障害が生じた後に、１つより多くのブロックに統合化されている最中である。最終フェーズは、好都合なときに完了し、その際に、論理グループは、好ましくはすべての論理ユニットをブレークアウト統合化ブロックに順次順序で収集することによって、１つのブロックに統合化される。
【００３０】
非順次更新ブロックのインデックス付け
本発明の他の態様によれば、非順次論理ユニットを有する更新ブロックをサポートするブロック管理システムを伴う不揮発性メモリにおいて、非順次更新ブロック内の論理ユニットのインデックスがＲＡＭにバッファされ、不揮発性メモリ内に周期的に記憶される。一実施形態において、インデックスは、インデックスを記憶する専用のブロック内に記憶される。他の実施形態において、インデックスは、更新ブロック自体に記憶される。さらに他の実施形態において、インデックスは、各論理ユニットのヘッダ内に記憶される。他の態様において、最終のインデックス更新の後だが次の分の前に書き込まれた論理ユニットは、インデックス付け情報を各論理ユニットのヘッダ内に記憶させる。このように、停電後に、初期化中に走査を実行する必要なく、最近書き込まれた論理ユニットの位置を決定することができる。さらに他の態様において、ブロックは、部分的に順次にかつ部分的に非順次に、１つより多い論理サブグループを対象として管理される。
【００３１】
制御データの整合性と管理
本発明の他の態様によれば、制御データのいくつかまたはすべてといった重要なデータは、複製にして保持しておけば、信頼性のレベルが上がることが保証される。メモリセルの同一のセットのマルチビットを順次的にプログラムするための２パスプログラミング手法を使用する多状態メモリシステムについて、第１のパスによって確立されたデータが第２のパスにおけるプログラミングエラーによって破損されないように、複製が行われる。また、複製は、書き込みの異常終了の検出、誤検出の検出（すなわち、両コピーは良好なＥＣＣを有するが、データが異なる場合）の助けとなり、信頼性のレベルが向上する。データ複製にはいくつかの手法が考えられる。
【００３２】
一実施形態において、所定のデータの２つのコピーが先のプログラミングパスにプログラムされた後に、後続のプログラミングパスは、２つのコピーのうちの少なくとも１つを記憶するメモリセルをプログラムすることを回避する。このように、２つのコピーのうちの少なくとも１つは、後続のプログラミングパスが完了前に異常終了して先のパスのデータを破損する場合に、その影響を受けないことになる。
【００３３】
他の実施形態において、所定のデータの２つのコピーは、２つのコピーのうちの多くても１つがそのメモリセルを後続のプログラミングパス内にプログラムする、２つの異なるブロックに記憶される。
【００３４】
さらに他の実施形態において、所定のデータの２つのコピーがプログラミングパスに記憶された後は、２つのコピーを記憶するメモリセルのセットに対して、これ以上のプログラミングが行われないことになる。これは、２つのコピーをメモリセルのセットについての最終的なプログラミングパスにプログラムすることによって達成される。
【００３５】
さらに他の実施形態において、所定のデータの２つのコピーは、プログラム済みのメモリセルに対してこれ以上のプログラミングが行われないようにするために、バイナリプログラミングモードの多状態メモリ内にプログラムされる。
【００３６】
さらに他の実施形態において、メモリセルの同一のセットのマルチビットを順次的にプログラムするための２パスプログラミング手法を使用する多状態メモリシステムについて、先のプログラミングパスによって確立されたデータが後続のプログラミングパスにおける障害の影響を受けないようにするために、障害耐性コードを使用して、複数のメモリ状態を符号化する。
【００３７】
本発明の他の態様において、ブロック管理システムを伴う不揮発性メモリにおいて、数多くの更新ブロックすべてを並行して移送する必要が生じるような状況を回避するために、「制御ガーベッジコレクション」またはメモリブロックのプリエンプティブな移転が実施される。例えば、この状況は、ブロック管理システムの動作を制御するために使用される制御データを更新する際に生じうる。制御データ種の階層は更新頻度が様々なので、その関連する更新ブロックは、それぞれ異なる度合いで、ガーベッジコレクションまたは移転を必要とすることとなる。１つより多くの制御データ種のガーベッジコレクション動作が同時に生じるときがあることになる。極端な例の場合、すべての制御データ種についての更新ブロックの移転フェーズが並んでしまうこともあり得るので、すべての更新ブロックが同時に移転を必要とすることになってしまう。
【００３８】
本発明のさらなる特徴および利点は、添付の図面と共に理解される以下の好ましい実施形態の説明から理解されるだろう。
【図面の簡単な説明】
【００３９】
【図１】本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。
【図２】本発明の好ましい実施形態に係る、セクタ（またはメタブロック）の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。
【図３Ａ】（ｉ）〜（ｉｉｉ）は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。
【図３Ｂ】論理グループとメタブロックと間のマッピングを概略的に示す。
【図４】物理メモリにおける構造を含むメタブロックの配列を示す。
【図５Ａ】互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。
【図５Ｂ】１つの最小消去ユニット（ＭＥＵ）が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【図５Ｃ】１つより多くの最小消去ユニット（ＭＥＵ）が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。
【図６】コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。
【図７Ａ】順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図７Ｂ】カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示す。
【図８】２つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図９】本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図１０】本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図１１Ａ】図１０に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。
【図１１Ｂ】図１０に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。
【図１２Ａ】様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
【図１２Ｂ】論理グループの予想される状態を列挙する表である。
【図１３Ａ】様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。メタブロックとは、論理グループに対応する物理グループである。
【図１３Ｂ】メタブロックの予想される状態を列挙する表である。
【図１４（Ａ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｂ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｃ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｄ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｅ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｆ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｇ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｈ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｉ）】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図１４（Ｊ）】論理グループの状態と、物理メタブロックとに対する様々な動作の影響を示す状態図である。
【図１５】割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト（ＡＢＬ）の構造の好ましい実施形態を示す。
【図１６Ａ】カオス的ブロックインデックス（ＣＢＩ）セクタのデータフィールドを示す。
【図１６Ｂ】カオス的ブロックインデックス（ＣＢＩ）セクタが専用のメタブロックに記録されている一例を示す。
【図１６Ｃ】カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図１６Ｄ】論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図１６Ｅ】各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け（ＣＢＩ）セクタおよびその機能の例を示す。
【図１７Ａ】グループアドレステーブル（ＧＡＴ）セクタのデータフィールドを示す。
【図１７Ｂ】グループアドレステーブル（ＧＡＴ）セクタがＧＡＴブロックに記録されている一例を示す。
【図１８】消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。
【図１９】論理／物理アドレス変換の処理を示すフローチャートである。
【図２０】メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。
【図２１】複数のメモリプレーンから構成されるメモリアレイを示す。
【図２２Ａ】本発明の一般的な実施に係る、プレーン配列を伴う更新の方法を示すフロー図である。
【図２２Ｂ】図２２Ａに示されているフロー図における更新を記憶するステップの好ましい実施形態を示す。
【図２３Ａ】プレーン配列を考慮しないで順次更新ブロックへ順次順序で書き込まれる論理ユニットの一例を示す。
【図２３Ｂ】プレーン配列を考慮しないでカオス的更新ブロックへ非順次順序で書き込まれる論理ユニットの一例を示す。
【図２４Ａ】本発明の好ましい実施形態に係る、プレーン配列およびパディングを伴う図２３Ａの順次更新の例を示す。
【図２４Ｂ】本発明の好ましい実施形態に係る、プレーン配列は伴うがパディングは伴わない図２３Ｂのカオス的更新の例を示す。
【図２４Ｃ】本発明の他の好ましい実施形態に係る、プレーン配列およびパディングを伴う図２３Ｂのカオス的更新の例を示す。
【図２５】各ページが２つの論理セクタのような２つの論理ユニットを記憶するための２つのメモリユニットを含む、メモリ組織の一例を示す。
【図２６Ａ】各ページが１つではなく２つのセクタを含む以外は、図２１のメモリ構造と同様のものである。
【図２６Ｂ】模式的に線形に配置されたメモリユニットを有する、図２６Ａに示すメタブロックを示す。
【図２７】ある位置から他の位置へコピーすべき論理ユニットをパディングしない、更新ブロック内のプレーン配列のための代替の手法を示す。
【図２８】統合化動作中に不良ブロックにプログラム障害が生じた場合に、統合化動作が他のブロックに対して繰り返される手法を示す。
【図２９】書き込み（更新）動作および統合化動作を完了するのに十分な時間を取れるようなタイミングまたは書き込み待ち時間を伴うホスト書き込み動作を模式的に示す。
【図３０】本発明の一般的な手法に係る、プログラム障害処理のフローチャートを示す。
【図３１Ａ】第３の（最終移転）ブロックが第２の（ブレークアウト）ブロックとは異なる、プログラム障害処理の一実施形態を示す。
【図３１Ｂ】第３の（最終移転）ブロックが第２の（ブレークアウト）ブロックと同一である、プログラム障害処理の他の実施形態を示す。
【図３２Ａ】統合化動作となる最初の更新動作のフローチャートを示す。
【図３２Ｂ】本発明の好ましい実施形態に係る、複数フェーズ統合化動作のフローチャートを示す。
【図３３】複数フェーズ統合化動作の最初および最後のフェーズのタイミング例を示す。
【図３４Ａ】ブレークアウト統合化ブロックが、更新ブロックとしてよりも、統合化処理が中断された統合化ブロックとして使用される場合を示す。
【図３４Ｂ】図３４Ａで開始された複数フェーズ統合化の第３および最後のフェーズを示す。
【図３５Ａ】ブレークアウト統合化ブロックが、統合化ブロックとしてよりも、ホスト書き込みを受け取る更新ブロックとして保持される場合を示す。
【図３５Ｂ】第２の場合について図３５Ａで開始された複数フェーズ統合化の第３および最後のフェーズを示す。
【図３６Ａ】ホスト書き込みが更新ブロックの閉鎖をトリガし、かつ更新ブロックが順次的な場合に適用されるような、フェーズ化されたプログラムエラー処理方法を示す。
【図３６Ｂ】更新ブロックの更新の場合の（部分的ブロックシステム）に適用可能であるような、フェーズ化されたプログラムエラー処理方法を示す。
【図３６Ｃ】メタブロックにマッピングされた論理グループをサポートしないメモリブロック管理システムにおける、フェーズ化されたプログラムエラー処理、ガーベッジコレクション動作、またはクリーンアップを示す。
【図３７】同一の論理グループのＮ回毎のセクタ書き込み後の関連するカオス的インデックスセクタブロックへのＣＢＩセクタの書き込みのスケジュールの一例を示す。
【図３８Ａ】所定数の書き込みの後にＣＢＩセクタが記録される時点までの更新ブロックを示す。
【図３８Ｂ】インデックスセクタの後にデータページ１，２，および４がさらに記憶される、図３８Ａの更新ブロックを示す。
【図３８Ｃ】インデックスセクタの次の記録をトリガするために他の論理セクタが書き込まれる、図３８Ｂの更新ブロックを示す。
【図３９Ａ】カオス的更新ブロック内の各データセクタのヘッダに記憶されている中間書き込みについての中間インデックスを示す。
【図３９Ｂ】書き込まれた各セクタのヘッダ内に中間書き込みについての中間インデックスを記憶する一例を示す。
【図４０】カオス的更新ブロック内の各データセクタのヘッダに記憶されているカオス的インデックスフィールド内の情報を示す。
【図４１Ａ】各メモリセルがデータの２ビットを記憶する場合の４状態メモリアレイのしきい値電圧分布を示す。
【図４１Ｂ】グレイコードを使用する既存の２パスプログラミング手法を示す。
【図４２】各セクタを複製化して退避することによって重要データを保護するやり方の一つを示す。例えば、セクタＡ，Ｂ，Ｃ，およびＤは、複製コピーで退避される。あるセクタコピーにおいてデータの破損があれば、他のものが代わりに読み出される。
【図４３】複製セクタが典型的には多状態メモリ内に退避される非ロバストを示す。
【図４４Ａ】重要データのずらし複製コピーを多状態メモリへ退避する、一実施形態を示す。
【図４４Ｂ】重要データの複製コピーを多状態メモリの論理上位ページにのみ退避する、他の実施形態を示す。
【図４４Ｃ】重要データの複製コピーを多状態メモリのバイナリモードで退避する、さらに他の実施形態を示す。
【図４５】重要データの複製コピーを２つの互いに異なるメタブロックへ並行に退避する、さらに他の実施形態を示す。
【図４６Ａ】４状態メモリアレイのしきい値電圧分布を示す点で図４１と類似し、図４６Ｂについての参考として示す。
【図４６Ｂ】障害耐性コードを使用して重要データの複製コピーを並行に退避する、さらに他の実施形態を示す。
【図４７】データの２つのコピーの予想される状態と、データの有効性とを示す表である。
【図４８】メモリブロック記憶制御データのプリエンプティブな移転のフローチャートを示す。
【発明を実施するための形態】
【００４０】
図１は、本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。メモリシステム２０は、典型的には、ホストインターフェイスを通じてホスト１０と共に動作する。メモリシステムは、典型的には、メモリカードの形式を取るか、または埋め込み形メモリシステムである。メモリシステム２０は、動作がコントローラ１００によって制御されるメモリ２００を含む。メモリ２００は、１つ以上の集積回路チップに渡って分散された不揮発性メモリセルの１つ以上のアレイからなる。コントローラ１００は、インターフェイス１１０と、プロセッサ１２０と、オプションのコプロセッサ１２１と、ＲＯＭ１２２（読み出し専用メモリ）と、ＲＡＭ１３０（ランダムアクセスメモリ）と、オプションのプログラム可能な不揮発性メモリ１２４とを含む。インターフェイス１１０は、ある構成要素をコントローラからホストへとインターフェイスさせ、他の構成要素をメモリ２００とインターフェイスさせる。不揮発性ＲＯＭ１２２および／またはオプションの不揮発性メモリ１２４に記憶されたファームウェアは、コントローラ１００の機能を実施するためにプロセッサ１２０に対して符号を提供する。誤り訂正符号は、プロセッサ１２０またはオプションのコプロセッサ１２１によって処理されてもよい。代替の実施形態において、コントローラ１００は、状態マシン（図示せず）によって実施される。さらに他の実施形態において、コントローラ１００は、ホスト内で実施される。
【００４１】
論理および物理ブロック構造
図２は、本発明の好ましい実施形態に係る、セクタ（またはメタブロック）の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。メモリ２００は、メタブロックに組織化され、各メタブロックは、共に消去可能な物理セクタＳ0 ，．．．，ＳN-1 のグループである。
【００４２】
ホスト１０は、ファイルシステムまたはオペレーティングシステムの下でアプリケーションを実行する場合に、メモリ２００にアクセスする。典型的には、ホストシステムは、データを論理セクタ単位でアドレス指定し、例えば、各セクタは、５１２バイトのデータを含んでもよい。また、ホストが、論理クラスタ単位でメモリシステムに対して読み出しまたは書き込みを行うのが通常であり、各クラスタは、１つ以上の論理セクタからなる。ホストシステムによっては、より低いレベルのメモリ管理をホスト側で行うためにオプションのホスト側メモリマネージャが存在する場合がある。多くの場合、読み出しまたは書き込み動作中に、ホスト１０は、実質的に、メモリシステム２０に対してコマンドを発行して、データの論理セクタのストリングを含むセグメントを連続するアドレスと共に読み出しまたは書き込みを行う。
【００４３】
フラッシュメモリ２００のメタブロック内のホスト論理セクタのデータの記憶および検索を管理するために、メモリ側メモリマネージャが、メモリシステム２０のコントローラ１００内で実施される。好ましい実施形態において、メモリマネージャは、メタブロックの消去、読み出し、書き込み動作を管理するための数多くのソフトウェアモジュールを含む。また、メモリマネージャは、フラッシュメモリ２００とコントローラＲＡＭ１３０との間の動作に関連したシステム制御およびディレクトリデータを保持する。
【００４４】
図３Ａ（ｉ）〜（ｉｉｉ）は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。物理メモリのメタブロックは、論理グループのデータのＮ個の論理セクタを記憶するためのＮ個の物理セクタを有する。図３Ａ（ｉ）は、論理グループＬＧi からのデータを示し、論理セクタは、連続論理順序０，１，．．．，Ｎ−１である。図３Ａ（ｉｉ）は、同一の論理順序のメタブロック内に記憶されている同じデータを示す。このように記憶される場合に、メタブロックは、「順次」であるといわれる。一般的に、メタブロックは、異なる順序で記憶されたデータを有してもよく、その場合は、メタブロックは、「非順次」または「カオス的」であるといわれる。
【００４５】
論理グループの最小のアドレスと、それがマッピングされるメタブロックの最小アドレスとの間には、オフセットがあることがある。この場合、論理セクタアドレスは、メタブロック内の論理グループの末尾から先頭へ戻るループとして折り返す。例えば、図３Ａ（ｉｉｉ）では、メタブロックは、その最初の位置が論理セクタｋのデータで始まるように記憶する。最終論理セクタＮ−１に達すると、セクタ０に戻り、最終的には、その最終物理セクタに論理セクタｋ−１に関連したデータを記憶する。好ましい実施形態において、メタブロックの最初の物理セクタに記憶されたデータの最初の論理セクタアドレスを識別するといった、任意のオフセットの識別のために、ページタグが使用される。２つのブロックは、ページタグだけが異なる場合、その論理セクタを同様の順序で記憶しているものと考えられる。
【００４６】
図３Ｂは、論理グループとメタブロックと間のマッピングを概略的に示す。各論理グループは、データが現在更新中の少数の論理グループを除いて、固有のメタブロックにマッピングされる。論理グループが更新された後、別のメタブロックにマッピングされてもよい。マッピング情報は、論理／物理ディレクトリのセットに維持され、これについては、詳細に後述する。
【００４７】
メタブロックマッピングに対する他の種類の論理グループも予期される。例えば、可変サイズのメタブロックが、本願と同日にアラン・シンクレアによって出願された「適応メタブロック」という同時継続出願中の共有された米国特許出願（特許文献１６）に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【００４８】
本発明の特徴の１つは、システムは単一の論理区画で動作し、メモリシステムの論理アドレス範囲にわたる論理セクタのグループは同一に扱われることである。例えば、システムデータを含むセクタと、ユーザデータを含むセクタとは、論理アドレス空間内のどこにでも分散することができる。
【００４９】
従来技術のシステムとは異なり、高頻度かつ小サイズの更新を伴うデータを含む可能性が高い論理アドレス空間セクタに局在化させるための、システムセクタ（すなわち、ファイル割り当てテーブルに関連するセクタ、ディレクトリ、またはサブディレクトリ）の特別な分割またはゾーニングはない。代わりに、セクタの論理グループを更新するこの手法は、システムセクタに典型的なアクセスパターンおよびファイルデータに典型的なアクセスパターンを効率的に扱うことになる。
【００５０】
図４は、物理メモリにおける構造を含むメタブロックの配列を示す。フラッシュメモリは、一単位として共に消去可能なメモリセルのブロックを備える。このような消去ブロックは、フラッシュメモリの消去の最小単位、またはメモリの最小消去ユニット（ＭＥＵ）である。最小消去ユニットは、メモリのハードウェア設計パラメータであるが、複数のＭＥＵの消去をサポートするメモリシステムによっては、１つ以上のＭＥＵを備える「超ＭＥＵ」を構成することができる。フラッシュＥＥＰＲＯＭについて、ＭＥＵは１つのセクタを備えてもよいが、複数のセクタが好ましい。図に示されている例では、Ｍ個のセクタを有する。好ましい実施形態において、各セクタは、５１２バイトのデータを記憶することができ、ユーザデータ部分と、システムまたはオーバーヘッドデータを記憶するためのヘッダ部分とを有する。メタブロックがＰ個のＭＥＵから構成されている場合には、各ＭＥＵはＭ個のセクタを含み、そして、各メタブロックは、Ｎ＝Ｐ＊Ｍ個のセクタを有することになる。
【００５１】
メタブロックは、システムレベルでは、例えば共に消去可能なセクタといった、メモリ位置のグループを表す。フラッシュメモリの物理アドレス空間は、メタブロックを消去の最小単位とした、メタブロックのセットとして扱われる。本願明細書において「メタブロック」および「ブロック」という用語は、媒体管理のためのシステムレベルにおける消去の最小単位を規定するために類義語として使用され、「最小消去ユニット」またはＭＥＵは、フラッシュメモリの消去の最小単位を示すために使用される。
【００５２】
メタブロックを形成するための最小消去ユニット（ＭＥＵ）のリンク付け
プログラミング速度および消去速度を最大限にするために、複数のＭＥＵにある複数のページの情報が並列にプログラミングされるように、かつ複数のＭＥＵが並列に消去されるようにすることによって、並行処理ができる限り活用される。
【００５３】
フラッシュメモリにおいて、ページは、１回の動作で共にプログラムすることができるメモリセルの集まりである。ページは、１つ以上のセクタを備えていてもよい。また、メモリアレイは、１つ以上のプレーンに分割されてもよく、１つのプレーン内の１つのＭＥＵのみが１度にプログラムまたは消去されてもよい。最後に、プレーンは、１つ以上のメモリチップに渡って分散されていてもよい。
【００５４】
フラッシュメモリにおいて、ＭＥＵは、１つ以上のページを備えていてもよい。フラッシュメモリチップ内のＭＥＵは、プレーンに組織化されてもよい。各プレーンからの１つのＭＥＵは並行してプログラムまたは消去されてもよいので、各プレーンから１つのＭＥＵを選択することによって複数のＭＥＵメタブロックを形成するのが得策である（以下の図５Ｂ参照）。
【００５５】
図５Ａは、互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。ＭＢ０，ＭＢ１，．．．などの各メタブロックは、メモリシステムの互いに異なるプレーンからのＭＥＵから構成され、互いに異なるプレーンは、１つ以上のチップにわたって分散されていてもよい。図２に示されているメタブロックリンクマネージャ１７０は、各メタブロックについてのＭＥＵのリンク付けを管理する。各メタブロックは、初期フォーマット処理中に構成され、その構成成分であるＭＥＵを、ＭＥＵのうちの１つに障害があるまで、システムの寿命がある限り保持する。
【００５６】
図５Ｂは、１つの最小消去ユニット（ＭＥＵ）が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【００５７】
図５Ｃは、１つより多くの最小消去ユニット（ＭＥＵ）が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。別の実施形態において、１つより多くのＭＥＵが各プレーンから選択されて超ＭＥＵが形成されてもよい。例えば、超ＭＥＵは、２つのＭＥＵから形成されてもよい。この場合、読み出しまたは書き込み動作について１つより多くのパスを利用してもよい。
【００５８】
ＭＥＵをメタブロックにリンク付けまたは再リンク付けすることは、本願と同日にカルロス・ゴンザレスらによって出願された「マルチブロック単位へのブロックの適応決定論的グループ化」という同時継続出願中の共有された米国特許出願（特許文献１７）に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【００５９】
メタブロック管理
図６は、コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。メタブロック管理システムは、コントローラ１００において実施された様々な機能モジュールを備え、様々な制御データ（ディレクトリデータを含む）をフラッシュメモリ２００およびコントローラＲＡＭ１３０内に階層的に分散されたテーブルおよびリストに保持する。コントローラ１００内に実装された機能モジュールは、インターフェイスモジュール１１０と、論理／物理アドレス変換モジュール１４０と、更新ブロックマネージャモジュール１５０と、消去ブロックマネージャモジュール１６０と、メタブロックリンクマネージャモジュール１７０とを含む。
【００６０】
インターフェイス１１０により、メタブロック管理システムは、ホストシステムとインターフェイスすることができる。論理／物理アドレス変換モジュール１４０は、論理アドレスをホストから物理メモリ位置へマッピングする。更新ブロックマネージャモジュール１５０は、データの所定の論理グループについて、メモリにおけるデータ更新動作を管理する。消去ブロックマネージャモジュール１６０は、メタブロックの消去動作と、新規の情報を記憶するためのメタブロック割り当てとを管理する。メタブロックリンクマネージャモジュール１７０は、セクタの最小消去可能ブロックのサブグループのリンク付けを管理して、所定のメタブロックを構成する。これらのモジュールの詳細な説明は、それぞれの欄で行う。
【００６１】
動作中に、メタブロック管理システムは、アドレス、制御および状態情報などの制御データを生成して、それと共に動作する。制御データのほとんどが小さなサイズの頻繁に変化するデータであることが多いので、大きなブロック構造のフラッシュメモリ内では簡単かつ効率的に記憶および保持することができない。より静的な制御データを不揮発性フラッシュメモリに記憶させ、より変化するより少ない量の制御データをコントローラＲＡＭに位置づけるという階層的分散手法を使用することで、さらに効率的な更新およびアクセスを行う。電源遮断または障害時には、この手法により、揮発性コントローラＲＡＭ内の制御データは、不揮発性メモリ内の小さなセットの制御データを走査することによって、迅速に再構築することができる。これが可能なのは、本発明が、データの所定の論理グループの予想される動作に関連するブロックの数を制限しているからである。加えて、存続が必要とされる制御データのいくつかは、セクタ毎に更新可能な不揮発性のメタブロックに記憶され、新規のセクタを生じさせる各更新が、以前の更新に代わって記録される。セクタインデックス付け手法を制御データのために使用して、メタブロック内のセクタ毎の更新を追跡する。
【００６２】
不揮発性フラッシュメモリ２００は、比較的静的な大量の制御データを記憶する。これには、グループアドレステーブル（ＧＡＴ）２１０と、カオス的ブロックインデックス（ＣＢＩ）２２０と、消去済みブロックリスト（ＥＢＬ）２３０と、ＭＡＰ２４０とが含まれる。ＧＡＴ２１０は、セクタの論理グループと、その対応するメタブロックとの間のマッピングを追跡する。マッピングは、更新を受けるもの以外は変化しない。ＣＢＩ２２０は、更新中の論理的な非順次セクタのマッピングを追跡する。ＥＢＬ２３０は、消去されたメタブロックのプールを追跡する。ＭＡＰ２４０は、フラッシュメモリ内のすべてのメタブロックの消去状態を示すビットマップである。
【００６３】
揮発性コントローラＲＡＭ１３０は、頻繁に変化およびアクセスされる制御データの小さな部分を記憶する。これには、割り当てブロックリスト（ＡＢＬ）１３４と、クリア済みブロックリスト（ＣＢＬ）１３６とが含まれる。ＡＢＬ１３４は、更新データを記録するためにメタブロックの割り当てを追跡し、ＣＢＬ１３６は、割り当て解除および消去されたメタブロックを追跡する。好ましい実施形態において、ＲＡＭ１３０は、フラッシュメモリ２００に記憶された制御データについてのキャッシュとしての役割を果たす。
【００６４】
更新ブロックマネージャ
（図２に示されている）更新ブロックマネージャ１５０は、論理グループの更新を扱う。本発明の一態様によれば、更新を受けているセクタの各論理グループには、更新データを記録するために、専用の更新メタブロックが割り当てられる。好ましい実施形態において、論理グループの１つ以上のセクタの任意のセグメントが、更新ブロックに記録されることになる。更新ブロックは、順次順序または非順次（カオス的としても知られる）順序のいずれかで更新データを受信するように管理される。カオス的更新ブロックでは、セクタデータを論理グループ内で任意の順序で更新することができ、また個別のセクタの任意の繰り返しがあってもよい。特に、順次更新ブロックは、いずれのデータセクタの移転の必要なく、カオス的更新ブロックになりえる。カオス的データ更新には、ブロックの所定の割り当ては必要ない。任意の論理アドレスでの非順次書き込みが自動的に対処される。よって、従来技術のシステムとは異なり、論理グループの様々な更新セグメントが論理的な順次順序であってもまたは非順次順序であっても、特殊な処理はない。一般的な更新ブロックは、ホストによって要求された順序で様々なセグメントを記憶するために、単に使用されることになる。例えば、ホストシステムデータまたはシステム制御データがカオス的に更新されがちな場合でも、ホストシステムデータに対応する論理アドレス空間の領域を、ホストユーザデータを伴う領域と別々に扱う必要はない。
【００６５】
セクタの完全な論理グループのデータは、１つのメタブロック内に論理的な順次順序で記憶されるのが好ましい。このように、記憶された論理セクタに対するインデックスは、予め規定されている。メタブロックが所定の順序で所定の論理グループのすべてのセクタを記憶している場合、これは「変化なし(intact)」といわれる。更新ブロックに関して、更新データを論理的な順次順序で最終的に充填する場合、更新ブロックは、元メタブロックを容易に置換する更新された変化なしのメタブロックとなる。他方、更新ブロックが更新データを、変化なしのブロックとは異なる論理的な順序で充填する場合、更新ブロックは、非順次またはカオス的更新ブロックであり、順序がばらばらのセグメントは、変化なしのブロックと同一の順序で論理グループの更新データが最終的には記憶されるように、さらに処理されなければならない。好ましい場合において、このセグメントは、１つのメタブロック内の論理的な順次順序である。さらなる処理には、元ブロック内の変化していないセクタを伴う更新ブロック内の更新されたセクタを、さらに他の更新メタブロックに統合化することを伴う。統合化された更新ブロックは、その後、論理的な順次順序となり、元ブロックを置換するために使用することができる。何らかの所定の条件下では、統合化処理に先立って、１つ以上のコンパクト化処理がある。コンパクト化処理は、カオス的更新ブロックのセクタを、置換するカオス的更新ブロックに単純に再記録し、同じ論理セクタの以前の更新によって廃止された重複する論理セクタを削除することはない。
【００６６】
更新手法により、複数の更新スレッドを、所定の最大限まで並行して実行することができる。各スレッドは、専用の更新メタブロックを使用して更新を受けている論理グループである。
【００６７】
順次データ更新
ある論理グループに属するデータを最初に更新する場合、論理グループの更新データについての更新ブロックとして、メタブロックが専用に割り当てられる。更新ブロックが割り当てられるのは、コマンドがホストから受信されて、既存のメタブロックがそのすべてのセクタを変化なく記憶している論理グループの１つ以上のセクタのセグメントを書き込む場合である。最初のホスト書き込み動作の場合、データの最初のセグメントが更新ブロックに記録される。各ホスト書き込みは連続論理アドレスを伴う１つ以上のセクタのセグメントであるので、最初の更新は、その性質上常に順次的であることとなる。後続のホスト書き込みでは、同一の論理グループ内の更新セグメントが、ホストから受信された順序で更新ブロックに記録される。ブロックは、順次更新ブロックとして管理され続けるのに対し、関連する論理グループ内でホストによって更新されたセクタは、論理的に順次的であり続ける。この論理グループ内で更新されたすべてのセクタは、このブロックが閉鎖されるか、カオス的更新ブロックに変換されるかのいずれかとなるまで、この順次更新ブロックに書き込まれる。
【００６８】
図７Ａは、２つの別個のホスト書き込み動作の結果、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の対応するセクタは廃止になる。ホスト書き込み動作＃１において、論理セクタＬＳ５〜ＬＳ８内のデータが更新中である。ＬＳ５’〜ＬＳ８’として更新されたデータは、新規に割り当てられた専用の更新ブロックに記録される。
【００６９】
便宜上、論理グループ内の更新すべき第１のセクタは、第１の物理セクタ位置から開始する専用更新ブロックに記録される。一般的に、更新すべき第１の論理セクタは、必ずしもグループの論理的に第１番目のセクタではないので、論理グループの最初と、更新ブロックの最初との間にはオフセットがあることがある。このオフセットは、図３Ａに関連して前に説明したように、ページタグとして知られている。後続のセクタは、論理的な順次順序で更新される。論理グループの最後のセクタが書き込まれる場合、グループアドレスは折り返して、書き込みシーケンスを、グループの最初のセクタで継続する。
【００７０】
ホスト書き込み動作＃２において、論理セクタＬＳ９〜ＬＳ１２内のデータのセグメントが更新中である。ＬＳ９’〜ＬＳ１２’として更新されたデータは、専用の更新ブロック内の、最後の書き込みが終了した場所に直接続く位置に記録される。２つのホスト書き込みは、更新データが論理的な順次順序で、すなわち、ＬＳ５’〜ＬＳ１２’のようにして、更新ブロックに記録されたようなものとして理解することができる。更新ブロックが順次更新ブロックとみなされるのは、論理的な順次順序で充填されているからである。更新ブロックに記録された更新データによって、元ブロック内の対応するデータが廃止される。
【００７１】
カオス的データ更新
カオス的更新ブロック管理は、関連論理グループ内でホストによって更新された任意のセクタが論理的に非順次の場合に、既存の順次更新ブロックについて開始される。カオス的更新ブロックは、関連する論理グループ内の論理セクタが任意の順序でかつ任意の繰り返し量で更新されてもよいようなデータ更新ブロックの形式を取る。これは、ホストによって書き込まれたセクタが、更新中の論理グループ内の以前書き込んだセクタに対して論理的に非順次である場合に、順次更新ブロックからの変換によって作成される。この論理グループ内のその後の更新されたすべてのセクタは、グループ内の論理セクタアドレスが何であれ、カオス的更新ブロック内の次に使用可能なセクタ位置に書き込まれる。
【００７２】
図７Ｂは、５つの別個のホスト書き込み動作の結果、カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の取り替えられたセクタと、カオス的更新ブロック内の複製セクタとは廃止になる。ホスト書き込み動作＃１において、元メタブロックに記憶されている所定の論理グループの論理セクタＬＳ１０〜ＬＳ１１が更新される。更新された論理セクタＬＳ１０’〜ＬＳ１１’は、新規に割り当てられた更新ブロックに記憶される。この点で、更新ブロックは、順次的である。ホスト書き込み動作＃２において、論理セクタＬＳ５〜ＬＳ６がＬＳ５’〜ＬＳ６’に更新されて、更新ブロック内の最終の書き込みに直接続く位置に記録される。これにより、更新ブロックは、順次的からカオス的なものへと変換される。ホスト書き込み動作＃３において、論理セクタＬＳ１０が再び更新中であり、更新ブロックの次の位置にＬＳ１０’’として記録される。この点で、更新ブロック内のＬＳ１０’’は、元ブロック内のＬＳ１０に取って代わる以前の記録内のＬＳ１０’に取って代わる。ホスト書き込み動作＃４において、論理セクタＬＳ１０内のデータは再び更新されて、更新ブロックの次の位置にＬＳ１０’’’として記録される。よって、ＬＳ１０’’’が、論理セクタＬＳ１０についての現在における最新かつ唯一の有効データとなる。ホスト書き込み動作＃５において、論理セクタＬＳ３０内のデータが更新中であり、更新ブロックにＬＳ３０’として記録される。よって、この例は、任意の順序および任意の繰り返しによって、論理グループ内のセクタをカオス的更新ブロックに書き込むことができることを示す。
【００７３】
強制的順次更新
図８は、２つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。ホスト書き込み＃１において、論理セクタＬＳ５〜ＬＳ８における更新データは、ＬＳ５’〜ＬＳ８’として専用の更新ブロック内に記録される。ホスト書き込み＃２において、論理セクタＬＳ１４〜ＬＳ１６における更新データは、最終の書き込みに続く更新ブロック内にＬＳ１４’〜ＬＳ１６’として記録されている。しかし、ＬＳ８とＬＳ１４との間にアドレスジャンプがあり、ホスト書き込み＃２は、通常、更新ブロックを非順次的にすることになる。アドレスジャンプは重要ではないので、１つのオプションとしては、ホスト書き込み＃２を実行する前に、介在セクタのデータを元ブロックから更新ブロックへコピーすることによってパディング動作（＃２Ａ）をまず行うというものである。このように、更新ブロックの順次的性質が維持される。
【００７４】
図９は、本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ２６０：メモリはブロックに組織化され、各ブロックは共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものである。
ステップ２６２：データは論理グループに組織化され、各論理グループは、論理ユニットに分割される。
ステップ２６４：標準的な場合、論理グループのすべての論理ユニットは、第１の所定の順序、好ましくは論理的な順次順序に従って、元ブロックのメモリユニットに記憶される。このように、ブロック内の個々の論理ユニットをアクセスするためのインデックスがわかる。
ステップ２７０：データの所定の論理グループ（例えば、ＬＧx ）について、ＬＧx 内で論理ユニットを更新するための要求が行われる（一例として、論理ユニット更新が挙げられる。一般的には、更新は、ＬＧx 内の１つ以上の連続論理ユニットのセグメントとなる）。
ステップ２７２：要求された更新論理ユニットが、ＬＧx の更新の記録専用の第２のブロックに記憶されることになる。記録順序は、第２の順序であり、典型的には、更新が要求された順序に従う。本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。第２の順序によっては、第２のブロックは、順次的なものである場合も、カオス的なものである場合もある。
ステップ２７４：処理がステップ２７０にループバックするにつれて、第２のブロックは、論理ユニットが記録されるように要求し続ける。閉鎖のための所定の条件が具体化すると、第２のブロックは閉鎖されて、さらなる更新を受信しなくなる。この場合、処理は２７６へ進む。
ステップ２７６：閉鎖された第２のブロックが元ブロックと同様の順序でその更新論理ユニットを記録しているかどうかについて決定が行われる。図３Ａに関して説明したように、ページタグ分だけ異なる論理ユニットを記録している場合には、２つのブロックは同様の順序であるとみなされる。２つのブロックが同様の順序である場合は、処理はステップ２８０へ進み、そうでなければ、ステップ２９０において、何らかのガーベッジコレクションを行う必要がある。
ステップ２８０：第２のブロックは第１のブロックと同一の順序なので、第２のブロックは、元ブロックである第１のブロックを置換するために使用される。更新処理は、その後、ステップ２９９で終了する。
ステップ２９０：所定の論理グループの各論理ユニットの最新バージョンが、第２のブロック（更新ブロック）および第１のブロック（元ブロック）から収集される。所定の論理グループの統合化された論理ユニットは、その後、第１のブロックと同様の順序で第３のブロックに書き込まれる。
ステップ２９２：第３のブロック（統合化されたブロック）は第１のブロックと同様の順序であるので、第３のブロックは、元ブロックである第１のブロックを置換するために使用される。更新処理は、その後、ステップ２９９で終了する。
ステップ２９９：閉鎖処理によって変化のない更新ブロックが作成されると、これが所定の論理グループにとっての新規の標準ブロックとなる。論理グループについての更新スレッドは終了される。
【００７５】
図１０は、本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ３１０：データの所定の論理グループ（例えば、ＬＧx ）について、ＬＧx 内で論理セクタを更新するための要求が行われる（一例として、セクタ更新が挙げられる。一般的には、更新は、ＬＧx 内の１つ以上の連続論理セクタのセグメントととなる）。
ステップ３１２：ＬＧx に専用の更新ブロックがまだ存在しない場合、ステップ４１０へ進み、論理グループについて新規の更新スレッドを開始する。これは、論理グループの更新データを記録するのに専用の更新ブロックを割り当てることによって達成されることになる。開放されている更新ブロックが既にあれば、ステップ３１４へ進み、更新ブロックに対する更新セクタの記録を開始する。
ステップ３１４：現在の更新ブロックが既にカオス的（すなわち、非順次的）である場合には、そのままステップ５１０へ進み、要求された更新セクタをカオス的更新ブロックに記録する。現在の更新ブロックが順次的である場合、ステップ３１６へ進み、順次更新ブロックの処理を行う。
ステップ３１６：本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。しかし、論理グループは、最終的にはそのデータを論理的な順次順序でメタブロックに記憶させるので、更新ブロックをできるだけ順次的に維持するのが望ましい。そうすれば、更新ブロックが閉鎖されてさらなる更新ができなくなった場合、ガーベッジコレクションは必要ないので、必要とされる処理が少なくなる。
【００７６】
要求された更新が更新ブロックの現在の順次順序に従うかどうかについての決定がなされる。更新が順次的に従う場合、ステップ５１０へ進み、順次更新が行われ、更新ブロックは順次的なままである。他方、更新が順次的に従わない（カオス的更新の）場合、他の動作が行われないならば、順次更新ブロックをカオス的なものに変換する。
一実施形態において、状況を守るためにこれ以上何もせず、処理は直接ステップ３７０へ進み、更新ブロックをカオス的なものにする更新が許容される。
【００７７】
オプションの強制的順次処理
他の実施形態において、強制的順次処理ステップ３２０が、保留中のカオス的更新の観点から順次更新ブロックをできるだけ保存するためにオプションとして行われる。２つの状況があり、どちらも、欠落したセクタを元ブロックからコピーして、更新ブロック上に記録された論理セクタの順次順序を維持するものである。第１の状況は、更新によって短いアドレスジャンプが生じることである。第２の状況は、更新ブロックを順次的に保つために、更新ブロックを早く閉鎖することである。強制的順次処理ステップ３２０は、以下のサブステップを含む。
ステップ３３０：更新によって、所定の量ＣB より大きい論理アドレスジャンプが生じる場合、処理はステップ３５０の強制的順次更新処理へと進み、そうでなければ、処理はステップ３４０へと進んで、強制的順次閉鎖の資格があるかどうかの検討を行う。
ステップ３４０：充填されていない物理セクタ数が、更新ブロックのサイズの半分が典型的な値である所定の設定パラメータＣC を超える場合、更新ブロックは、比較的使用されず、早く閉鎖されることはない。処理はステップ３７０へ進み、更新ブロックは、カオス的となる。他方、更新ブロックがおおむね充填されている場合、既に十分に使っているとみなされるので、ステップ３６０へと進み、強制的順次閉鎖となる。
ステップ３５０：強制的順次更新により、現在の順次更新ブロックを、アドレスジャンプが所定量ＣB を超えない限り順次的なままとすることができる。基本的には、更新ブロックの関連する元ブロックからのセクタがコピーされて、アドレスジャンプによるギャップを埋める。よって、順次更新ブロックは、ステップ５１０へ進んで現在の更新を順次記録する前に、介在アドレス内のデータで埋められることになる。
ステップ３６０：強制的順次閉鎖により、現在の順次的な更新ブロックを、カオス的なものに変換するよりも保留中のカオス的更新によって既におおむね充填されていれば、閉鎖することができる。カオス的または非順次更新は、前述したアドレスジャンプ例外、逆方向アドレス遷移、またはアドレス反復の対象ではなく、順方向アドレス遷移を伴うものとして規定される。順次更新ブロックがカオス的更新によって変換されるのを防止するために、更新ブロックの未書き込みのセクタ位置が、更新ブロックの関連した元の部分的に廃止されたブロックからセクタをコピーすることによって充填される。元ブロックは、その後完全に廃止されて、消去することができる。現在の更新ブロックは、現在では、フルセットの論理セクタを有するので、元メタブロックを置き換える変化のないメタブロックとして閉鎖される。処理は、ステップ４３０へと進み、ステップ３１０において最初に要求された保留中のセクタ更新の記録を受け付けるために、新規の更新ブロックをその位置に割り当てる。
【００７８】
カオス的更新ブロックへの変換
ステップ３７０：保留中の更新が順次順序でなく、オプションとして、強制的順次条件が満たされていない場合、処理がステップ５１０へ進むときに非順次アドレスを有する保留中の更新セクタが更新ブロックへ記録されるようにするために、順次更新ブロックは、カオス的なものに変換されることが許容される。カオス的更新ブロックの最大数が存在する場合に、変換が進む前に、最近最もアクセスされていないカオス的更新ブロックを閉鎖する必要がある。よって、カオス的更新ブロックの最大数が超えないようにする。最近最もアクセスされていないカオス的更新ブロックの識別は、ステップ４２０において説明した一般的な場合と同一であるが、カオス的更新ブロックだけに制約される。このときにカオス的更新ブロックを閉鎖することは、ステップ５５０において説明したような統合化によって達成される。
【００７９】
システム制約を受ける新規の更新ブロックの割り当て
ステップ４１０：消去メタブロックを更新ブロックとして割り当てる処理は、所定のシステム制約が超えているかどうかを判断することから開始する。リソースは有限であるため、メモリ管理システムは、典型的には、更新ブロックの所定の最大数ＣA が並行して存在することを許容する。この制限は、順次更新ブロックとカオス的更新ブロックとの総計であり、設計パラメータである。好ましい実施形態において、この制限は、例えば、最大８つの更新ブロックである。また、システムリソースに対するさらなる高い需要により、並行して開放されているカオス的更新ブロックの最大数に対する対応する所定の制限があってもよい（例えば、４つ）。
よって、ＣA 個の更新ブロックが既に割り当てられていれば、次の割り当て要求は、既存の割り当てられたものの１つが閉鎖された後にはじめて満足することができるようになる。処理はステップ４２０へ進む。開放更新ブロックの数がＣA を下回る場合には、処理は直接ステップ４３０へ進む。
【００８０】
ステップ４２０：更新ブロックＣA の最大数を超える場合には、最近最もアクセスされていない更新ブロックが閉鎖されて、ガーベッジコレクションが行われる。最近最もアクセスされていない更新ブロックは、最近最もアクセスされていない論理ブロックに関連した更新ブロックとして識別される。最近最もアクセスされていないブロックを決定する目的で、アクセスは、論理セクタの書き込みと、オプションで読み出しとを含む。開放更新ブロックのリストが、アクセス順に保持され、初期化の際には、アクセス順序は何ら想定されていない。更新ブロックの閉鎖は、更新ブロックが順次的な場合のステップ３６０および５３０、ならびに更新ブロックがカオス的な場合のステップ５４０に関連して説明したのと同様の処理に従う。閉鎖により、ステップ４３０において新規の更新ブロックを割り当てる空間ができる。
ステップ４３０：割り当て要求は、新規のメタブロックを所定の論理グループＬＧx に専用の更新ブロックとして割り当てることで満足される。その後、処理はステップ５１０へ進む。
【００８１】
更新データの更新ブロックへの記録
ステップ５１０：要求された更新セクタは、更新ブロックの次に使用可能な物理位置上に記録される。その後、処理はステップ５２０へ進み、更新ブロックを閉鎖する機が熟したかどうかが判断される。
【００８２】
更新ブロックの閉鎖
ステップ５２０：さらなる更新を受け付けるための空間が更新ブロックにまだある場合には、ステップ５７０へ進む。そうでない場合には、ステップ５２２へ進み、更新ブロックを閉鎖する。現在の要求された書き込みが、ブロックが有する空間よりも多くの論理セクタを書き込もうとするものである場合に、更新ブロックを満たす実装例として２つのものがある。第１の実装例において、書き込み要求は２つの部分に分割され、第１の部分がブロックの最終物理セクタまで書き込む。その後、ブロックは閉鎖され、書き込みの第２の部分が、次に要求された書き込みとして扱われることになる。他方の実装例において、要求された書き込みは、ブロックが残りのセクタが埋め込まれて閉鎖されている間は保留される。要求された書き込みは、次に要求された書き込みとして扱われることになる。
ステップ５２２：更新ブロックが順次的であれば、ステップ５３０へと進み、順次閉鎖となる。更新ブロックがカオス的であれば、ステップ５４０へと進み、カオス的閉鎖となる。
【００８３】
順次更新ブロックの閉鎖
ステップ５３０：更新ブロックが順次的かつ満杯であるので、そこに記憶された論理グループには変化がない。メタブロックは変化がなく、元のものを置換する。このとき、元ブロックは完全に廃止され、消去されてもよい。その後、処理はステップ５７０へと進み、所定の論理グループに対する更新スレッドは終了する。
【００８４】
カオス的更新ブロックの閉鎖
ステップ５４０：更新ブロックは非順次的に充填され、いくつかの論理セクタの複数の更新を含む場合もあるので、ガーベッジコレクションが行われて、内部の有効なデータを救い出す。カオス的更新ブロックは、コンパクト化または統合化のいずれかが行われることになる。どちらの処理を行うかは、ステップ５４２において決定される。
ステップ５４２：コンパクト化を行うか、または統合化を行うかは、更新ブロックの重なり具合に依存する。論理セクタが複数回更新されていれば、その論理アドレスは非常に重なっている。更新ブロックに記録された同一の論理セクタの複数のバージョンがあることになり、最後に記録されたバージョンのみが、この論理セクタについて有効なものである。複数のバージョンを有する論理セクタを含む更新ブロックにおいて、別個の論理セクタの数は、論理グループの数よりはるかに少ないことになる。
【００８５】
好ましい実施形態において、更新ブロック内の別個の論理セクタの数が、論理グループの大きさの半分が典型的な値である所定の設計パラメータＣD を超える場合には、閉鎖処理はステップ５５０において統合化を行い、そうでなければ、処理はステップ５６０においてコンパクト化を行う。
ステップ５５０：カオス的更新ブロックが統合化されることになる場合、元ブロックと更新ブロックとが、統合化されたデータを含む新規の標準メタブロックに置換されることになる。統合化後、更新スレッドはステップ５７０において終了する。
ステップ５６０：カオス的更新ブロックがコンパクト化されることになる場合、コンパクト化されたデータを保持する新規の更新ブロックに置換されることになる。コンパクト化後、コンパクト化された更新ブロックの処理は、ステップ５７０において終了する。代わりに、更新ブロックが再び書き込まれるまで、コンパクト化を遅らせることもでき、これにより、介在する更新がないのに統合化に続いてコンパクト化が生じる可能性を排除する。新規の更新ブロックは、その後、ＬＧx における更新への次の要求がステップ５０２において生じるときに、所定の論理ブロックのさらなる更新を行う際に使用されることになる。
ステップ５７０：閉鎖処理によって変化のない更新ブロックが作成される場合には、それが所定の論理グループの新規の標準ブロックになる。この論理グループの更新スレッドは終了することになる。閉鎖処理によって既存のものを置換する新規の更新ブロックが作成される場合には、この新規の更新ブロックは、所定の論理グループに対して要求される次の更新を記録するために使用されることになる。更新ブロックが閉鎖されない場合には、処理は、ＬＧx 内の更新に対する次の要求がステップ３１０に生じる場合に継続する。
【００８６】
前述した処理からわかるように、カオス的更新ブロックが閉鎖される場合には、そこに記録された更新データがさらに処理される。特に、その有効データに対しては、他のカオス的ブロックへコンパクト化する処理か、またはその関連する元ブロックに統合化して新たな標準順次ブロックを形成する処理によって、ガーベッジコレクションが行われる。
【００８７】
図１１Ａは、図１０に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。カオス的更新ブロックの統合化は、更新ブロックが閉鎖されている場合、例えば、更新ブロックが最終物理セクタ位置に書き込みがなされた状態で一杯である場合に行われる、２つの予想される処理のうちの１つである。統合化は、ブロックに書き込まれた別個の論理セクタの数が所定の設計パラメータＣD を超える場合に選ばれる。図１０に示されている統合化処理ステップ５５０は、以下のサブステップを備える。
ステップ５５１：カオス的更新ブロックが閉鎖されている場合に、それを置換する新規のメタブロックが割り当てられることになる。
ステップ５５２：廃止されたセクタはすべて無視して、カオス的更新ブロックおよびその関連する元ブロック内の各論理セクタの最新バージョンを収集する。
ステップ５５４：収集された有効なセクタを新規のメタブロックに論理的な順次順序で記録して、変化のないブロック、すなわち、論理グループのすべての論理セクタが順次順序で記録されているブロックを形成する。
ステップ５５６：元ブロックを新規の変化のないブロックに置換する。
ステップ５５８：閉鎖された更新ブロックおよび元ブロックを消去する。
【００８８】
図１１Ｂは、図１０に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。コンパクト化は、ブロック内の別個の論理セクタの数が所定の設計パラメータＣD を下回る場合に選ばれる。図１０に示されているコンパクト化処理ステップ５６０は、以下のサブステップを備える。
ステップ５６１：カオス的更新ブロックがコンパクト化されている最中に、それを置換する新規のメタブロックが割り当てられる。
ステップ５６２：コンパクト化されるべき既存のカオス的更新ブロック内の各論理セクタの最新バージョンを収集する。
ステップ５６４：収集されたセクタを新規更新ブロックに記録して、コンパクト化されたセクタを有する新規の更新ブロックを形成する。
ステップ５６６：既存の更新ブロックをコンパクト化されたセクタを有する新規の更新ブロックに置換する。
ステップ５６８：閉鎖された更新ブロックを消去する。
【００８９】
論理およびメタブロック状態
図１２Ａは、様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
【００９０】
図１２Ｂは、論理グループの予想される状態を列挙する表である。論理グループの状態は、以下のように規定される。
１．変化なし：論理グループ内のすべての論理セクタが、論理的な順次順序で、ページタグ折り返しなどを使用して、１つのメタブロックに書き込まれている。
２．未書き込み：論理グループ内の論理セクタが全く書き込まれていない。論理グループは、グループアドレステーブルにおいて未書き込みとして印付けされ、割り当てられたメタブロックはない。このグループ内のすべてのセクタに対するホスト読み出しに応答して、予め定められたデータパターンが返される。
３．順次更新：論理グループ内のいくつかのセクタが、論理的な順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。
４．カオス的更新：論理グループ内のいくつかのセクタが、論理的な非順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。グループ内のセクタは、１回より多く書き込まれてもよく、最新のバージョンが、以前のすべてのバージョンを置換することになる。
【００９１】
図１３Ａは、様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。
【００９２】
図１３Ｂは、メタブロックの予想される状態を列挙する表である。メタブロックの状態は、以下のように規定される。
１．消去済み：メタブロック内のすべてのセクタは消去される。
２．順次更新：メタブロックには、セクタが論理的な順次順序でページタグなどを使用して部分的に書き込まれている。すべてのセクタは、同一の論理グループに属する。
３．カオス的更新：メタブロックには、セクタが論理的な非順次順序で部分的または一杯に書き込まれている。任意のセクタは１回より多く書き込むことができる。すべてのセクタは、同一の論理グループに属する。
４．変化なし：メタブロックは、論理的な順次順序でページタグなどを使用して一杯に書き込まれている。
５．オリジナル：メタブロックは、以前は変化なしであったが、少なくとも１つのセクタがホストデータ更新によって廃止されている。
【００９３】
図１４（Ａ）〜１４（Ｊ）は、論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
図１４（Ａ）は、第１の書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、依然未書き込みの論理グループの１つ以上のセクタを、新規に割り当てられた消去済みメタブロックに、論理的な順次順序で書き込む。論理グループおよびメタブロックは、順次更新状態になる。
【００９４】
図１４（Ｂ）は、第１の変化なし動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、すべてのセクタが順次的にホストによって書き込まれると、変化なしとなる。この遷移は、カードが残りの未書き込みのセクタを予め定められたデータパターンで埋めることによって、グループを充填する場合も生じうる。メタブロックは変化なしとなる。
【００９５】
図１４（Ｃ）は、第１のカオス的動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、少なくとも１つのセクタが非順次的にホストによって書き込まれると、カオス的となる。
【００９６】
図１４（Ｄ）は、最初のコンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧ブロックから新規のカオス的メタブロックへコピーされ、旧ブロックは、その後消去される。
【００９７】
図１４（Ｅ）は、最初の統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧カオス的ブロックから移動されて、新規に割り当てられたブロックに論理的な順次順序で充填される。ホストによって書き込みされていないセクタには、予め定められたデータパターンが充填される。旧カオス的ブロックは、その後消去される。
【００９８】
図１４（Ｆ）は、順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、変更なしの論理グループの１つ以上のセクタを、論理的な順次順序で、新規に割り当てられた消去済みブロックに書き込む。論理グループおよびメタブロックは、順次更新状態となる。以前変更なしであったメタブロックは、元メタブロックとなる。
【００９９】
図１４（Ｇ）は、順次充填動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、そのすべてのセクタが順次的にホストによって書き込まれる場合に、変化なしとなる。これは、順次更新論理グループを変化無しとするために、元ブロックからの有効なセクタで充填する場合にも生じることがあり、その後、元ブロックは消去される。
【０１００】
図１４（Ｈ）は、非順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、少なくとも１つのセクタが非順次的にホストによって書き込まれる場合に、カオス的となる。非順次的セクタの書き込みは、更新ブロック内または対応する元ブロック内のいずれかの有効なセクタを廃止することがあってもよい。
【０１０１】
図１４（Ｉ）は、コンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧ブロックから新規のカオス的メタブロックへコピーされて、旧ブロックは、その後消去される。元ブロックは、影響を受けない。
【０１０２】
図１４（Ｊ）は、統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧カオス的ブロックおよび元ブロックからコピーされて、新規に割り当てられた消去ブロックは論理的な順次順序で充填される。その後、旧カオス的ブロックおよび元ブロックは消去される。
【０１０３】
更新ブロックの追跡および管理
図１５は、割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト（ＡＢＬ）の構造の好ましい実施形態を示す。割り当てブックリスト（ＡＢＬ）６１０は、コントローラＲＡＭ１３０に保持され、消去されたブロックの割り当て、割り当てられた更新ブロック、関連するブロック、および制御構造の管理を行うことができ、また正確な論理／物理アドレス変換を可能にする。好ましい実施形態において、ＡＢＬは、消去済みブロックのリストと、開放更新ブロックリスト６１４と、閉鎖更新ブロックリスト６１６とを含む。
【０１０４】
開放更新ブロックリスト６１４は、開放更新ブロックの属性を伴う、ＡＢＬ内のブロックエントリのセットである。開放更新ブロックリストは、現在開放されている各データ更新ブロック毎に１つのエントリを有する。各エントリは、以下の情報を保持する。ＬＧは、現在の更新メタブロックが専用である論理グループアドレスである。順次／カオス的は、更新ブロックが順次またはカオス的更新データで充填されているかどうかを示す状態である。ＭＢは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。書き込まれたセクタ数は、更新ブロックに現在書き込まれたセクタの数を示す。ＭＢ0 は、関連する元ブロックのメタブロックアドレスである。ページタグ0 は、関連する元ブロックのページタグである。
【０１０５】
閉鎖更新ブロックリスト６１６は、割り当てブロックリスト（ＡＢＬ）のサブセットである。閉鎖更新ブロックの属性を伴う、ＡＢＬ内のブロックエントリのセットである。閉鎖更新ブロックリストは、閉鎖されたデータ更新ブロック毎に１つのエントリを有するが、そのエントリは、論理的に主要物理ディレクトリに更新されていない。各エントリは、以下の情報を保持する。ＬＧは、現在の更新ブロックが専用である論理グループアドレスである。ＭＢは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。ＭＢ0 は、関連する元ブロックのメタブロックアドレスである。
【０１０６】
カオス的ブロックのインデックス付け
順次更新ブロックは、論理的に順次順序でデータを記憶しているので、ブロック内の任意の論理セクタは、容易に位置決定することができる。カオス的更新ブロックは、その論理セクタを順序がばらばらに記憶し、論理セクタの複数の更新生成物を記憶してもよい。各有効な論理セクタがカオス的更新ブロックのどこにあるかを追跡するために、追加の情報を保持しなければならない。
【０１０７】
好ましい実施形態において、カオス的ブロックのインデックス付けのデータ構造は、カオス的ブロックにおけるすべての有効なセクタの追跡および高速アクセスを可能にする。カオス的ブロックのインデックス付けは、論理アドレス空間の小さな領域を独立して管理するものであり、システムデータと、ユーザデータのホット領域を効率的に扱う。インデックス付けデータ構造により、性能が大幅な影響を受けないように、本質的にインデックス付け情報が、更新が稀であるという要件でフラッシュメモリ内に保持することができる。他方、カオス的ブロックに現在書き込まれているセクタのリストは、コントローラＲＡＭにおけるカオス的セクタリストに保持される。また、フラッシュメモリからのインデックス情報のキャッシュが、アドレス変換のためのフラッシュセクタアクセス数を最小限にするために、コントローラＲＡＭに保持される。カオス的ブロック毎のインデックスが、フラッシュメモリ内のカオス的ブロックインデック（ＣＢＩ）内に記憶される。
【０１０８】
図１６Ａは、カオス的ブロックインデックス（ＣＢＩ）セクタのデータフィールドを示す。カオス的ブロックインデックスセクタ（ＣＢＩセクタ）は、カオス的更新ブロックにマッピングされた論理グループ内のセクタ毎のインデックスを含み、カオス的更新ブロックまたはその関連する元ブロック内の論理グループの各セクタの位置を規定する。ＣＢＩセクタは、カオス的ブロック内の有効セクタを追跡するためのカオスブロックインデックスフィールドと、カオスブロックについてのアドレスパラメータを追跡するためのカオス的ブロック情報フィールドと、ＣＢＩセクタを記憶するメタブロック（ＣＢＩブロック）内の有効なＣＢＩセクタを追跡するためのセクタインデックスフィールドとを含む。
【０１０９】
図１６Ｂは、カオス的ブロックインデックス（ＣＢＩ）セクタが専用のメタブロックに記録されている一例を示す。専用のメタブロックを、ＣＢＩブロック６２０と称する。ＣＢＩセクタが更新されると、ＣＢＩブロック６２０内の次に使用可能な物理セクタ位置に書き込まれる。したがって、ＣＢＩセクタの複数のコピーがＣＢＩブロック内に存在し、最後に書き込まれたコピーのみが有効である。例えば、論理グループＬＧ1 についてのＣＢＩセクタは３回更新され、最後に書き込まれたコピーのみが有効なものである。ＣＢＩブロック内の各有効セクタの位置は、ブロック内の最後に書き込まれたＣＢＩセクタ内のインデックスのセットによって識別される。この例において、ブロック内に最後に書き込まれたＣＢＩセクタは、ＬＧ136 についてのＣＢＩセクタであり、そのインデックスのセットは、以前のすべてのものに取って代わる有効なものである。ＣＢＩブロックが最終的にＣＢＩセクタで満杯になると、ブロックは、制御書き込み動作中に、すべての有効セクタを新規のブロック位置に書き換えることによってコンパクト化される。その後、一杯のブロックは、消去される。
【０１１０】
ＣＢＩセクタ内のカオス的ブロックインデックスフィールドは、カオス的更新ブロックにマッピングされた論理グループまたはサブグループ内の各論理セクタについてのインデックスエントリを含む。各インデックスエントリは、対応する論理セクタについての有効データが位置するカオス的更新ブロック内のオフセットを示す。予約されたインデックス値は、論理セクタについての有効データがカオス的更新ブロック内に存在しないことを示し、関連する元ブロック内の対応するセクタが有効であることを示す。いくつかのカオス的ブロックインデックスフィールドエントリのキャッシュが、コントローラＲＡＭに保持される。
【０１１１】
ＣＢＩセクタ内のカオス的ブロック情報フィールドは、システム内に存在するカオス的更新ブロック毎に１つのエントリを含み、ブロックについてのアドレスパラメータ情報を記録する。このフィールド内の情報は、ＣＢＩブロック内に最後に書き込まれたセクタにおいて有効であるのみである。この情報は、ＲＡＭ内のデータ構造にも存在する。
【０１１２】
カオス的更新ブロック毎のエントリは、３つのアドレスパラメータを含む。１つ目は、カオス的更新ブロックに関連する論理グループの論理アドレス（または論理グループ番号）である。２つ目は、カオス的更新ブロックのメタブロックアドレスである。３つ目は、カオス的更新ブロック内に最後に書き込まれたセクタの物理アドレスのオフセットである。オフセット情報は、ＲＡＭ内にデータ構造を再構築するために、初期化中のカオス的更新ブロックの走査のための開始点を設定する。
【０１１３】
セクタインデックスフィールドは、ＣＢＩブロックにおける有効ＣＢＩセクタ毎のエントリを含む。各許可されたカオス的更新ブロックに関する最も最近書き込まれたＣＢＩセクタが位置するＣＢＩブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可されたカオス的更新ブロックが存在しないことを示す。
【０１１４】
図１６Ｃは、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。更新処理中に、更新データがカオス的更新ブロックに更新データを記録し、変化していないデータは、論理グループに関連する元メタブロック内に留まる。カオス的更新下で論理グループの論理セクタをアクセスする処理は、以下のようである。
ステップ６５０：所定の論理グループの所定の論理セクタの位置決定を開始する。
ステップ６５２：ＣＢＩブロック内の最終書き込みＣＢＩセクタを位置決定する。
ステップ６５４：最終書き込みＣＢＩセクタのカオス的ブロック情報フィールドを検索することによって、所定の論理グループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ６６２の前であればいつでも行うことができる。
ステップ６５８：最終書き込みＣＢＩセクタが所定の論理グループ宛であれば、ＣＢＩセクタは位置決定される。ステップ６６２へ進む。そうでなければ、ステップ６６０へ進む。
ステップ６６０：最終書き込みＣＢＩセクタのセクタインデックスフィールドを検索することによって、所定の論理グループについてのＣＢＩセクタを位置決定する。
ステップ６６２：位置決定されたＣＢＩセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【０１１５】
図１６Ｄは、論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。ＣＢＩセクタの容量は有限なので、論理セクタの所定の最大数を追跡することができるのみである。論理グループが単一のＣＢＩセクタが扱えるより多くの論理セクタを有する場合には、論理グループは、ＣＢＩセクタがそれぞれ割り当てられた複数のサブグループに分割される。一例において、各ＣＢＩセクタは、２５６個のセクタと、８個までのカオス的更新ブロックとからなる論理グループを追跡するのに十分な容量を有する。論理グループが２５６セクタを超えるサイズを有する場合には、２５６セクタのサブグループのそれぞれための別個のＣＢＩセクタが論理グループ内に存在する。８個までのサブグループのためのＣＢＩセクタが論理グループ内に存在してもよく、サイズで２０４８個のセクタまでの論理グループに対してサポートを提供する。
【０１１６】
好ましい実施形態において、インデックスの管理を促進するために、間接インデックス付け手法が取られる。セクタインデックスの各エントリは、直接および間接フィールドを有する。
直接セクタインデックスは、特定のカオス的更新ブロックに関連するすべての予想されるＣＢＩセクタが位置するＣＢＩブロック内のオフセットを規定する。このフィールドの情報は、最後に書き込まれた、この特定のカオス的更新ブロックに関連するＣＢＩセクタにおいてのみ有効である。インデックス内のオフセットの予約値は、ＣＢＩセクタが存在しないことを示す。というのは、カオス的更新ブロックに関連する対応する論理サブグループが、存在しないか、または更新ブロックが割り当てられて以来更新されていないからである。
【０１１７】
間接セクタインデックスは、各許可されたカオス的更新ブロックに関連する最も最近書き込まれたＣＢＩセクタが位置するＣＢＩブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可された更新ブロックが存在しないことを示す。
【０１１８】
図１６Ｄは、以下のような、カオス的更新下の論理グループの論理セクタをアクセスする処理を示す。
ステップ６７０：各論理グループを複数のサブグループに分割して、ＣＢＩセクタを各サブグループに割り当てる。
ステップ６８０：所定の論理グループの所定のサブグループの所定の論理セクタの位置決定を開始する。
ステップ６８２：ＣＢＩブロック内の最終書き込みＣＢＩセクタを位置決定する。
ステップ６８４：最終書き込みＣＢＩセクタのカオス的ブロック情報フィールドを検索することによって、所定のサブグループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ６９６の前であればいつでも行うことができる。
ステップ６８６：最終書き込みＣＢＩセクタが所定の論理グループ宛である場合には、ステップ６９１へ進む。そうでなければ、ステップ６９０へ進む。
ステップ６９０：最終書き込みＣＢＩセクタの間接セクタインデックスフィールドを検索することによって、所定の論理グループについての複数のＣＢＩセクタの最終書き込みを位置決定する。
ステップ６９１：所定の論理グループについてのサブグループの１つに関連したＣＢＩセクタが少なくとも位置決定されている。続く。
ステップ６９２：位置決定されたＣＢＩセクタが所定のサブグループ宛である場合には、この所定のサブグループについてのＣＢＩセクタが位置決定される。ステップ６９６へ進む。そうでなければ、ステップ６９４へ進む。
ステップ６９４：現在の位置決定されたＣＢＩセクタの直接セクタフィールドを検索することによって、所定のサブグループについてのＣＢＩセクタを位置決定する。
ステップ６９６：所定のサブグループについてのＣＢＩセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【０１１９】
図１６Ｅは、各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け（ＣＢＩ）セクタおよびその機能の例を示す。論理グループ７００は、その変化のないデータを、元メタブロック７０２内に記憶する。その後、論理グループは、専用のカオス的更新ブロック７０４の割り当てを伴う更新を受ける。この例において、論理グループ７００は、サブグループＡ，Ｂ，Ｃ，Ｄのようなサブグループに分割され、各サブグループは２５６個のセクタを有する。
【０１２０】
サブグループＢ内のｉ番目のセクタを位置決定するために、ＣＢＩブロック６２０内の最終書き込みＣＢＩセクタを最初に位置決定する。最終書き込みＣＢＩセクタのカオス的ブロック情報フィールドは、所定の論理グループについてのカオス的更新ブロック７０４を位置決定するためのアドレスを提供する。同時に、これは、カオス的ブロックに書き込まれた最終セクタの位置をも提供する。この情報は、走査および再構築の際に有用である。
【０１２１】
最終書き込みＣＢＩセクタが所定の論理グループの４つのＣＢＩセクタのうちの１つであることがわかると、このセクタが確かにｉ番目の論理セクタを含む所定のサブグループＢについてのＣＢＩセクタかどうかをさらに確認することになる。そうであれば、ＣＢＩセクタのカオス的ブロックインデックスは、ｉ番目の論理セクタについてのデータを記憶するメタブロック位置を指すことになる。セクタ位置は、カオス的更新ブロック７０４または元ブロック７０２のいずれかでありうる。
【０１２２】
最終書き込みＣＢＩセクタが所定の論理グループの４つのＣＢＩセクタのうちの１つではあるが、正確にはサブグループＢについてのＣＢＩセクタではないことがわかると、その直接セクタインデックスを検索して、サブグループＢについてのＣＢＩセクタを位置決定する。この正確なＣＢＩセクタが位置決定されると、そのカオス的ブロックインデックスを検索して、カオス的更新ブロック７０４および元ブロック７０２の中のｉ番目の論理セクタを位置決定する。
【０１２３】
最終書き込みＣＢＩセクタが所定の論理グループの４つのＣＢＩセクタのうちのいずれでもないことがわかると、その間接セクタインデックスを検索して、４つのうちの１つを位置決定する。図１６Ｅに示されている例において、サブグループＣについてのＣＢＩセクタを位置決定する。その後、サブグループＣについてのこのＣＢＩセクタは、その直接セクタインデックスを検索して、サブグループＢについての正確なＣＢＩセクタを位置決定する。図に示されている例では、カオス的ブロックインデックスを検索すると、ｉ番目の論理セクタが変化していないことがわかり、その有効データが元データ内で位置決定される。
【０１２４】
同様の検討が、所定の論理グループのサブグループＣ内のｊ番目の論理セクタを位置決定することにも適用される。図に示されている例では、最終書き込みＣＢＩセクタが所定の論理グループの４つのＣＢＩセクタのうちのいずれでもないことがわかる。その間接セクタインデックスは、所定のグループについての４つのＣＢＩセクタのうちの１つを指す。また、４つのうちの指された最終書き込み分は、確かにサブグループＣについてのＣＢＩセクタであることがわかる。そのカオス的ブロックインデックスを検索すると、ｊ番目の論理セクタが、カオス的更新ブロック７０４内の指定された位置に位置決定されることがわかる。
【０１２５】
カオス的セクタのリストが、システム内の各カオス的更新ブロックについてのコントローラＲＡＭ内にある。各リストは、関連するＣＢＩセクタがフラッシュメモリ内で最後に更新されたときからの、カオス的更新ブロック内に書き込まれたセクタの記録を含む。特定のカオス的更新ブロックについての論理セクタアドレスの数は、カオス的セクタリスト内に保持することができ、８から１６というのが典型的な値の設計パラメータである。このリストの最適なサイズは、カオス的データ書き込み動作についてのオーバーヘッドに対する影響と、初期化中のセクタ走査時間とを調整して決定される。
【０１２６】
システム初期化中に、各カオス的更新ブロックを必要に応じて走査して、関連するＣＢＩセクタのうちの１つについての以前の更新以来書き込まれた有効なセクタを識別する。各カオス的更新ブロックについてのコントローラＲＡＭ内のカオス的セクタリストが構築される。各ブロックは、最終書き込みＣＢＩセクタ内のカオス的ブロック情報フィールドで規定された最終セクタアドレスから走査されればよい。
【０１２７】
カオス的更新ブロックが割り当てられると、ＣＢＩセクタが、すべての更新された論理サブグループに対応するように書き込まれる。カオス的更新ブロックについての論理および物理アドレスは、カオス的ブロックインデックスフィールド内の空白エントリと共に、セクタ内の使用可能なカオス的ブロック情報フィールド内に書き込まれる。カオス的セクタリストは、コントローラＲＡＭにおいて開放される。
【０１２８】
カオス的更新ブロックが閉鎖されると、ＣＢＩセクタが、セクタ内のカオス的ブロック情報フィールドから除去されたブロックの論理および物理アドレスと共に書き込まれる。ＲＡＭ内の対応するカオス的セクタリストは、使用されなくなる。
【０１２９】
コントローラＲＡＭ内の対応するカオス的セクタリストは、カオス的更新ブロックに書き込まれたセクタの記録を含むように修正される。コントローラＲＡＭ内のカオス的セクタリストが、カオス的更新ブロックに対するさらなるセクタ書き込みの記録について使用可能な空間を有していない場合には、更新されたＣＢＩセクタが、リスト内のセクタに関連する論理サブグループについて書き込まれ、リストはクリアされる。
ＣＢＩブロック６２０が満杯になると、有効なＣＢＩセクタが割り当てられた消去済みブロックにコピーされ、以前のＣＢＩブロックは消去される。
【０１３０】
アドレステーブル
図２に示されている論理／物理アドレス変換モジュール１４０は、ホストの論理アドレスをフラッシュメモリ内の対応する物理アドレスに関連付ける役割を担う。論理グループと物理グループ（メタブロック）との間のマッピングが、不揮発性フラッシュメモリ２００および揮発性だが動作が速いＲＡＭ１３０（図１参照）に分散されたテーブルおよびリストのセット内に記憶される。アドレステーブルは、フラッシュメモリに保持され、メモリシステム内の各論理グループについてのメタブロックアドレスを含む。加えて、最近書き込まれたセクタについての論理／物理アドレス記録は、ＲＡＭに一時的に保持される。これらの揮発性記録は、電源投入後にシステムを初期化するときに、フラッシュメモリ内のブロックリストおよびデータセクタヘッダから再構築することができる。よって、フラッシュメモリ内のアドレステーブルは、たまに更新されればよく、制御データについてのオーバーヘッド書き込み動作の割合が減ることになる。
論理グループについてのアドレス記録の階層は、開放更新ブロックリストと、ＲＡＭ内の閉鎖更新ブロックリストと、フラッシュメモリに保持されたグループアドレステーブル（ＧＡＴ）とを含む。
【０１３１】
開放更新ブロックリストは、更新されたホストセクタデータについて現在開放されているデータ更新ブロックのコントローラＲＡＭ内のリストである。あるブロックに対するエントリは、ブロックが閉鎖されると、閉鎖更新ブロックリストに移動される。閉鎖更新ブロックリストは、閉鎖されているデータ更新ブロックのコントローラＲＡＭ内のリストである。リスト内のエントリのサブセットは、制御書き込み動作中に、グループアドレステーブル内のセクタに移動される。
【０１３２】
グループアドレステーブル（ＧＡＴ）は、メモリシステム内のホストデータのすべての論理グループについてのメタブロックアドレスのリストである。ＧＡＴは、論理アドレスに従って順次的に並べられた、論理グループ毎に１つのエントリを含む。ＧＡＴ内のｎ番目のエントリは、アドレスｎの論理グループについてのメタブロックアドレスを含む。好ましい実施形態において、このテーブルは、フラッシュメモリ内にあるテーブルであり、メモリシステム内のすべての論理グループについてのメタブロックアドレスを規定するエントリを伴うセクタ（ＧＡＴセクタと称する）のセットを含む。ＧＡＴセクタは、フラッシュメモリ内の１つ以上の専用制御ブロック（ＧＡＴブロックと称する）内にある。
【０１３３】
図１７Ａは、グループアドレステーブル（ＧＡＴ）セクタのデータフィールドを示す。ＧＡＴセクタは、例えば、１２８個の連続する論理グループのセットについてのＧＡＴエントリを含むのに十分な容量を有してもよい。各ＧＡＴセクタは、２つの構成要素、すなわち、ある範囲内の各論理グループのメタブロックアドレスについてのＧＡＴエントリのセットと、ＧＡＴセクタインデックスとを含む。第１の構成要素は、論理アドレスに関連するメタブロックを位置決定するための情報を含む。第２の構成要素は、ＧＡＴブロック内のすべての有効なＧＡＴセクタを位置決定するための情報を含む。各ＧＡＴエントリは、３つのフィールド、すなわち、メタブロック番号と、図３Ａ（ｉｉｉ）に関連して前に規定したようなページタグと、メタブロックが再リンクされたかどうかを示すフラグとを有する。ＧＡＴセクタインデックスは、ＧＡＴブロック内の有効なＧＡＴセクタの位置を列挙する。このインデックスは、各ＧＡＴセクタ内にあるが、ＧＡＴブロック内の次に書き込まれたＧＡＴセクタのバージョンによって取って代わられる。よって、最終書き込みＧＡＴセクタ内のバージョンのみが有効である。
【０１３４】
図１７Ｂは、グループアドレステーブル（ＧＡＴ）セクタが１つ以上のＧＡＴブロックに記録されている一例を示す。ＧＡＴブロックは、ＧＡＴセクタを記録する専用のメタブロックである。ＧＡＴセクタが更新される場合には、ＧＡＴブロック７２０内の次に使用可能な物理セクタ位置に書き込まれる。したがって、ＧＡＴセクタの複数のコピーがＧＡＴブロック内に存在することがあり、最後に書き込まれたコピーのみが有効である。例えば、ＧＡＴセクタ４５は、少なくとも２回更新され、最終バージョンが有効なものである。ＧＡＴブロック内の各有効セクタの位置は、ブロック内の最終書き込みＧＡＴセクタ内のインデックスのセットによって識別される。この例において、ブロック内の最終書き込みＧＡＴセクタは、ＧＡＴセクタ５６であり、そのインデックスのセットは、すべての以前のものにとって代わる有効なものである。ＧＡＴブロックが、ＧＡＴセクタで最終的に満杯になった場合には、ブロックは、すべての有効なセクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【０１３５】
前に説明したように、ＧＡＴブロックは、論理アドレス空間のある領域におけるグループの論理的に連続したセットについてのエントリを含む。ＧＡＴブロック内のＧＡＴセクタは、それぞれ、１２８個の連続する論理グループについての論理／物理マッピング情報を含む。ＧＡＴブロックが対象とするアドレス範囲内のすべての論理グループについてのエントリを記憶するのに必要な数多くのＧＡＴセクタは、ブロック内の全セクタ位置のほんのわずかを占めるに過ぎない。したがって、あるＧＡＴセクタは、ブロック内の次に使用可能なセクタ位置に書き込まれることによって更新されてもよい。すべての有効なＧＡＴセクタおよびそれらのＧＡＴブロック内の位置のインデックスが、直近の書き込みＧＡＴセクタ内のインデックスフィールドに保持される。有効なＧＡＴセクタによって占められたＧＡＴブロック内の僅かな合計セクタは、システム設計パラメータであり、典型的には２５％である。しかし、ＧＡＴブロック毎に最大６４個の有効ＧＡＴセクタがある。論理容量が大きいシステムにおいて、１つ以上のＧＡＴブロックにＧＡＴセクタを記憶する必要がある場合がある。この場合、各ＧＡＴブロックは、固定的な範囲の論理グループに関連付けられる。
【０１３６】
ＧＡＴ更新は、制御書き込み動作の一部として行われ、割り当てのためのブロックがＡＢＬになくなったときにトリガされる（図１８参照）。これは、ＡＢＬ充填動作およびＣＢＬを空にする動作と並行して行われる。ＧＡＴ更新動作中に、１つのＧＡＴセクタは、閉鎖更新ブロックリスト内の対応するエントリからの情報で更新されたエントリを有する。ＧＡＴエントリが更新されると、対応するエントリはどれでも、閉鎖更新ブロックリスト（ＣＵＢＬ）から除去される。例えば、更新すべきＧＡＴセクタは、閉鎖更新ブロックリスト内の最初のエントリに基づいて選択される。更新されたセクタは、ＧＡＴブロック内の次に使用可能なセクタ位置に書き込まれる。
【０１３７】
更新されたＧＡＴセクタに使用可能なセクタ位置がなくなったときに、ＧＡＴ書き換え動作は、制御書き込み動作中に生じる。新たなＧＡＴブロックが割り当てられ、ＧＡＴインデックスによって規定された有効なＧＡＴセクタは、順次順序で一杯のＧＡＴブロックからコピーされる。その後、一杯のＧＡＴブロックは消去される。
【０１３８】
ＧＡＴキャッシュは、ＧＡＴセクタ内の１２８個のエントリの再分割部分内のエントリの、コントローラＲＡＭ１３０内のコピーである。ＧＡＴキャッシュエントリの数は、システム設計パラメータであり、典型的な値は３２である。該当セクタの再分割部分についてのＧＡＴキャッシュは、エントリがＧＡＴセクタから読み出される度に作成される。複数のＧＡＴキャッシュが保持される。その数は、設計パラメータであり、典型的な値は４である。ＧＡＴキャッシュは、最近最も使用されていないことに基づいて、異なるセクタの再分割部分についてのエントリで上書きされる。
【０１３９】
消去済みメタブロックの管理
図２に示されている消去ブロックマネージャ１６０は、ディレクトリおよびシステム制御情報を保持するためのリストのセットを使用して、消去ブロックを管理する。これらのリストは、コントローラＲＡＭ１３０およびフラッシュメモリ２００に分散されている。消去されたメタブロックがユーザデータの記憶のため、またはシステム制御データ構造の記憶のために割り当てられなければならない場合には、コントローラＲＡＭに保持された割り当てブロックリスト（ＡＢＬ）（図１５参照）内の次に使用可能なメタブロック番号が選択される。同様に、メタブロックが廃棄後に消去される場合には、その番号が、同じくコントローラＲＡＭに保持されたクリア済みブロックリスト（ＣＢＬ）に追加される。比較的静的なディレクトリおよびシステム制御データが、フラッシュメモリ内に記憶される。これらには、消去済みブロックリストと、フラッシュメモリ内のすべてのメタブロックの消去された状態のビットマップ（ＭＡＰ）リストとが含まれる。消去済みブロックリストおよびＭＡＰは、個別のセクタに記憶され、ＭＡＰブロックとして知られる専用のメタブロックに記録される。これらのリストは、コントローラＲＡＭおよびフラッシュメモリに分散されて、消去済みメタブロックの使用を効率的に管理するための消去済みブロック記録の階層を提供する。
【０１４０】
図１８は、消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。制御およびディレクトリデータは、コントローラＲＡＭ１３０内か、フラッシュメモリ２００内に常駐するＭＡＰブロック７５０内のいずれかに保持されるリストに保持される。
【０１４１】
好ましい実施形態において、コントローラＲＡＭ１３０は、割り当てブロックリスト（ＡＢＬ）６１０と、クリア済みブロックリスト（ＣＢＬ）７４０とを保持する。図１５に関連して前に説明したように、割り当てブロックリスト（ＡＢＬ）は、ユーザデータの記憶のため、またはシステム制御データ構造の記憶のために最近割り当てられたのがどのメタブロックかを追跡する。新規の消去済みメタブロックを割り当てる必要がある場合には、割り当てブロックリスト（ＡＢＬ）内の次に使用可能なメタブロック番号が選択される。同様に、クリア済みブロックリスト（ＣＢＬ）を使用して、割り当て解除および消去された更新メタブロックを追跡する。ＡＢＬおよびＣＢＬは、比較的アクティブな更新ブロックを追跡する際の迅速なアクセスおよび容易な操作のために、コントローラＲＡＭ１３０（図１参照）に保持される。
【０１４２】
割り当てブロックリスト（ＡＢＬ）は、消去済みメタブロックのプールと、消去済みメタブロックを更新ブロックにする割り当てとを追跡する。よって、これらの各メタブロックは、ＡＢＬ保留割り当ての消去済みブロックか、開放更新ブロックか、閉鎖更新ブロックかどうかを指定する属性によって記述されてもよい。図１８は、消去済みＡＢＬリスト６１２と、開放更新ブロックリスト６１４と、閉鎖更新ブロックリスト６１６とを含むＡＢＬを示す。加えて、開放更新ブロックリスト６１４に関連付けられているのは、関連する元ブロックリスト６１５である。同様に、閉鎖更新ブロックリストに関連付けられているのは、関連消去済みの元ブロックリスト６１７である。図１５において前に示したように、これらの関連リストは、それぞれ、開放更新ブロックリスト６１４および閉鎖更新ブロックリスト６１６のサブセットである。消去済みＡＢＬブロックリスト６１２、開放更新ブロックリスト６１４、および閉鎖更新ブロックリスト６１６は、すべて、割り当てブロックリスト（ＡＢＬ）６１０のサブセットであり、それぞれの中のエントリは、それぞれ対応する属性を有する。
【０１４３】
ＭＡＰブロック７５０は、フラッシュメモリ２００内の消去管理記録を記憶するのに専用のメタブロックである。ＭＡＰブロックは、時系列のＭＡＰブロックセクタを記憶し、各ＭＡＰセクタは、消去ブロック管理（ＥＢＭ）セクタ７６０またはＭＡＰセクタ７８０のいずれかである。メタブロックが廃棄されて、消去済みブロックが割り当てで使い尽くされてリサイクルされるにつれて、関連する制御およびディレクトリデータは、ＭＡＰブロック内で更新される論理セクタに含まれるのが好ましく、更新データの各インスタンスは、新規のブロックセクタに記録される。ＥＢＭセクタ７６０およびＭＡＰセクタ７８０の複数のコピーがＭＡＰブロック７５０内に存在してもよく、その最新バージョンのみが有効である。有効ＭＡＰセクタの位置へのインデックスは、ＥＭＢブロック内のフィールド内に含まれる。有効なＥＭＢセクタが、制御書き込み動作中のＭＡＰブロック内にいつも最後に書き込まれる。ＭＡＰブロック７５０が一杯の場合には、すべての有効セクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【０１４４】
各ＥＢＭセクタ７６０は、消去済みブロックリスト（ＥＢＬ）７７０を含み、これは、消去済みブロックの母集団のサブセットのアドレスのリストである。消去済みブロックリスト（ＥＢＬ）７７０は、消去済みメタブロック番号を含むバッファとしての役割を果たし、ＥＢＬから、メタブロック番号が周期的に取り出されてＡＢＬを再充填し、ＥＢＬに対して、メタブロック番号が周期的に追加されてＣＢＬを再び空にする。ＥＢＬ７７０は、使用可能ブロックバッファ（ＡＢＢ）７７２、消去済みブロックバッファ（ＥＢＢ）７７４、および消去済みブロックバッファ（ＣＢＢ）７７６のためのバッファとしての役割を果たす。
【０１４５】
使用可能ブロックバッファ（ＡＢＢ）７７２は、前回のＡＢＬ充填動作のすぐ後に続くＡＢＬ６１０内のエントリのコピーを含む。これは、実質上、ＡＢＬ充填動作直後のＡＢＬのバックアップコピーである。
消去済みブロックバッファ（ＥＢＢ）７７４は、ＭＡＰセクタ７８０から、または（後述する）ＣＢＢリスト７７６からのいずれかから先に転送され、かつＡＢＬ充填動作中にＡＢＬ６１０へ転送に使用可能である消去済みブロックアドレスを含む。
クリアされたブロックバッファ（ＣＢＢ）７７６は、ＣＢＬを空にする動作中にＣＢＬ７４０から転送され、かつＭＡＰセクタ７８０またはＥＢＢリスト７７４へ後に転送される消去済みブロックのアドレスを含む。
【０１４６】
各ＭＡＰセクタ７８０は、ＭＡＰと称されるビットマップ構造を含む。ＭＡＰは、フラッシュメモリ内のメタブロック毎に１ビットを使用し、これは、各ブロックの消去状態を示すために使用される。ＡＢＬ、ＣＢＬ、またはＥＢＭ内の消去済みブロックリスト内に列挙されたブロックアドレスに対応するビットは、ＭＡＰ内において消去済み状態に設定されない。
【０１４７】
有効データ構造を含まず、かつＭＡＰ内の消去済みブロック、消去済みブロックリスト、ＡＢＬ、またはＣＢＬとして指定されていないブロックはどれでも、ブロック割り当てアルゴリズムによって決して使用されず、従ってホストまたは制御データ構造の記憶のためにアクセスすることはできない。これにより、アクセス可能なフラッシュメモリアドレス空間から障害位置のあるブロックを除外するための簡単な機構が提供される。
【０１４８】
図１８に示されている階層により、消去済みブロック記録を効率的に管理することができるようになり、コントローラのＲＡＭ内に記憶されたブロックアドレスリストの完全なセキュリティを提供する。消去済みブロックエントリが、これらのブロックアドレスリストと、１つ以上のＭＡＰセクタ７８０との間で、稀に交換される。これらのリストは、電源が切られた後のシステム初期化中に、消去済みブロックリスト、およびフラッシュメモリ内のセクタに記憶されたアドレス変換テーブル内の情報と、フラッシュメモリ内のわずかな数の参照済みデータブロックの限定的な走査とを介して再構築される。
【０１４９】
消去済みメタブロック記録の階層を更新するために採用されたアルゴリズムにより、消去済みブロックが、ＭＡＰブロック７５０からのアドレス順序のブロックのバーストと、ブロックがホストによって更新された順序を反映するＣＢＬ７４０からのブロックアドレスのバーストとをインターリーブする順序で使用するために割り当てられる結果となる。メタブロックサイズおよびシステムメモリ容量のほとんどについて、１つのＭＡＰセクタは、システム内のすべてのメタブロックについてのビットマップを提供する。この場合、消去済みブロックは、このＭＡＰセクタに記録されるとおりのアドレス順序での使用のために常に割り当てられる。
【０１５０】
消去ブロック管理動作
前に説明したように、ＡＢＬ６１０は、使用のために割り当てられるであろう消去済みメタブロック、およびデータ更新ブロックとして最近割り当てられたメタブロックについてのアドレスエントリを有するリストである。ＡＢＬ内のブロックアドレスの実際の数は、上限と下限という、システム設計の変数の間にある。製造中にフォーマットされたＡＢＬエントリの数は、カードの種類と容量との関数である。加えて、システムの寿命の終わりが近づくとＡＢＬ内のエントリの数が減少するのは、使用可能な消去済みブロックの数が寿命内でのブロックの障害によって減少するためである。例えば、充填動作の後、ＡＢＬ内のエントリは、以下の目的のために使用可能なブロックを指定してもよい。ブロック毎に１つのエントリを有する部分的に書き込まれたデータ更新ブロックについてのエントリであり、同時に開放されている更新ブロックの最大数についてのシステム制限を越えないもの。データ更新ブロックとして割り当てるための消去済みブロックについての１個から１２個の間のエントリ。制御ブロックとして割り当てるための消去済みブロックについての４つのエントリ。
【０１５１】
ＡＢＬ充填動作
ＡＢＬ６１０が割り当てによって使い尽くされると、再充填される必要があることになる。ＡＢＬを充填する動作は、制御書き込み動作中に生じる。これは、ブロックを割り当てなければならない場合にトリガされるが、ＡＢＬには、データ更新ブロックとして割り当てるため、またはいくつかの他の制御データ更新ブロックのために使用可能な消去済みブロックエントリが十分には含まれていない。制御書き込み中に、ＡＢＬ充填動作は、ＧＡＴ更新動作と並行して行われる。
【０１５２】
以下の動作が、ＡＢＬ充填動作中に生じる。
１．現在のデータ更新ブロックの属性を有するＡＢＬエントリは保持される。
２．閉鎖データ更新ブロックの属性を有するＡＢＬエントリは、このブロックについてのエントリが並行ＧＡＴ更新動作において書き込み中でなければ保持され、書き込み中であれば、このエントリはＡＢＬから除去される。
３．割り当てられていない消去ブロックについてのＡＢＬエントリは保持される。
４．ＡＢＬは、エントリの除去によって生じたギャップを除去するためにコンパクト化され、エントリの順序が維持される。
５．ＡＢＬは、ＥＢＢリストから次に使用可能なエントリをつけることによって完全に充填される。
６．ＡＢＢリストは、ＡＢＬ内の現在のエントリで上書きされる。
【０１５３】
ＣＢＬを空にする動作
ＣＢＬは、消去済みブロックエントリの数に対するＡＢＬと同じ制限を有する、コントローラＲＡＭ内の消去済みブロックアドレスのリストである。ＣＢＬを空にする動作は、制御書き込み動作中に生じる。したがって、この動作は、ＡＢＬ充填／ＧＡＴ更新動作、またはＣＢＩブロック書き込み動作と並行して行われる。ＣＢＬを空にする動作において、エントリはＣＢＬ７４０から除去されて、ＣＢＢリスト７７６に書き込まれる。
【０１５４】
ＭＡＰ交換動作
ＭＡＰセクタ７８０およびＥＢＭセクタ７６０内の消去ブロック情報間のＭＡＰ交換動作は、ＥＢＢリスト７７４が空の場合に、制御書き込み動作中に周期的に生じてもよい。システム内のすべての消去済みメタブロックは、ＥＢＭセクタ７６０内に記録され、ＭＡＰセクタ７８０はなく、ＭＡＰ交換は行われない。ＭＡＰ交換動作中に、ＥＢＢ７７４に消去済みブロックを入力するＭＡＰセクタは、送信元ＭＡＰセクタ７８２とみなされる。逆に、ＣＢＢ７７６から消去済みブロックを受信するＭＡＰセクタは、送信先ＭＡＰセクタ７８４とみなされる。ＭＡＰセクタが１つだけ存在する場合は、以下に規定するように、送信元および送信先ＭＡＰセクタの両方としての役割を果たす。
【０１５５】
以下の動作が、ＭＡＰ交換中に行われる。
１．送信元ＭＡＰセクタが、増分ポインタに基づいて選択される。
２．送信先ＭＡＰセクタが、送信元ＭＡＰセクタ内ではない最初のＣＢＢエントリ内のブロックアドレスに基づいて選択される。
３．送信先ＭＡＰセクタが、ＣＢＢ内の該当エントリによって規定されたように更新され、当該エントリは、ＣＢＢから除去される。
４．別個の送信元ＭＡＰセクタが存在しなければ、更新された送信先ＭＡＰセクタが、ＭＡＰブロックに書き込まれる。
５．送信元ＭＡＰセクタが、ＣＢＢ内の該当エントリによって規定されたように更新され、当該エントリは、ＣＢＢから除去される。
６．ＣＢＢ内の残りのエントリが、ＥＢＢに付加される。
７．ＥＢＢには、送信元ＭＡＰセクタから規定された消去済みブロックアドレスができる限り充填される。
８．更新済みの送信元ＭＡＰセクタが、ＭＡＰブロック内に書き込まれる。
９．更新済みのＥＢＭセクタが、ＭＡＰブロック内に書き込まれる。
【０１５６】
リスト管理
図１８は、様々なリスト間の制御およびディレクトリ情報の分配および流れを示す。便宜のために、リストの要素間でエントリを移動する動作、またはエントリの属性を変更する動作は、［Ａ］から［Ｏ］として図１８に示され、以下のようなものである。
［Ａ］消去済みブロックがホストデータについての更新ブロックとして割り当てられる場合には、そのエントリのＡＢＬ内にある属性は、消去済みＡＢＬブロックから開放更新ブロックに変更される。
［Ｂ］消去されたブロックが制御ブロックとして割り当てられる場合には、ＡＢＬ内のそのエントリが除去される。
［Ｃ］ＡＢＬエントリが開放更新ブロック属性と共に作成される場合には、更新中の論理グループについての元メタブロックアドレスを記録するために、関連する元ブロックフィールドがエントリに付加される。この情報は、ＧＡＴから取得される。
［Ｄ］更新ブロックが閉鎖されると、そのエントリのＡＢＬ内にある属性は、開放更新ブロックから閉鎖更新ブロックへ変更される。
［Ｅ］更新ブロックが閉鎖されると、その関連する元ブロックは消去されて、ＡＢＬ内にあるそのエントリ内の関連する元ブロックフィールドの属性は、消去済み元ブロックに変更される。
［Ｆ］ＡＢＬ充填動作中、同一の制御書き込み動作中にＧＡＴ内でアドレスが更新された閉鎖更新ブロックはどれでも、そのエントリがＡＢＬから除去される。
［Ｇ］ＡＢＬ充填動作中、閉鎖更新ブロックについてのエントリがＡＢＬから除去されると、その関連する消去済みの元ブロックについてのエントリが、ＣＢＬへ移動される。
［Ｈ］制御ブロックが消去されると、それについてのエントリが、ＣＢＬへ追加される。
［Ｉ］ＡＢＬ充填動作中、消去済みブロックエントリが、ＥＢＢリストからＡＢＬへ移動され、消去済みＡＢＬブロックの属性が与えられる。
［Ｊ］ＡＢＬ充填動作中のすべての該当ＡＢＬエントリの修正後、ＡＢＬ内のブロックアドレスが、ＡＢＢリスト内のブロックアドレスに取って代わる。
［Ｋ］制御書き込み中にＡＢＬ充填動作と並行して、ＣＢＬ内の消去済みブロックについてのエントリが、ＣＢＢリストへ移動される。
［Ｌ］ＭＡＰ交換動作中、すべての該当エントリが、ＣＢＢリストからＭＡＰ送信先セクタへ移動される。
［Ｍ］ＭＡＰ交換動作中、すべての該当エントリが、ＣＢＢリストからＭＡＰ送信元セクタへ移動される。
［Ｎ］ＭＡＰ交換動作中の［Ｌ］および［Ｍ］に続いて、すべての残りのエントリが、ＣＢＢリストからＥＢＢリストへ移動される。
［Ｏ］ＭＡＰ交換動作中の［Ｎ］に続いて、可能であれば、［Ｍ］において移動されたもの以外のエントリが、ＭＡＰ送信元セクタから移動されて、ＥＢＢリストを充填する。
【０１５７】
論理／物理アドレス変換
フラッシュメモリ内の論理セクタの物理位置を位置決定するために、図２に示されている論理／物理アドレス変換モジュール１４０は、論理／物理アドレス変換を行う。最近更新された論理グループを除いて、大量の変換を、フラッシュメモリ２００またはコントローラＲＡＭ１３０内のＧＡＴキャッシュ内にあるグループアドレステーブル（ＧＡＴ）を使用して行うことになる可能性がある。最近更新された論理グループについてのアドレス変換は、主にコントローラＲＡＭ１３０内にある更新ブロックについてのアドレスリストを検索することを必要とすることになる。したがって、論理セクタアドレスについての論理／物理アドレス変換のための処理は、セクタが位置する論理グループに関連したブロックの種類に依存する。ブロックの種類には、変化のないブロックと、順次データ更新ブロックと、カオス的データ更新ブロックと、閉鎖データ更新ブロックとがある。
【０１５８】
図１９は、論理／物理アドレス変換の処理を示すフローチャートである。基本的には、対応するメタブロックおよび物理セクタは、論理セクタアドレスを使用して、最初に、開放更新ブロックリストおよび閉鎖更新ブロックリストなどの様々な更新ディレクトリを検索することによって、位置決定される。関連するメタブロックが更新処理の一部でない場合、ディレクトリ情報がＧＡＴによって提供される。論理／物理アドレス変換は、以下のステップを含む。
ステップ８００：論理セクタアドレスが与えられる。
ステップ８１０：コントローラＲＡＭ内の開放更新ブロックリスト６１４（図１５および１８参照）内の所定の論理アドレスが検索される。検索が失敗すると、ステップ８２０へ進み、そうでなければ、ステップ８３０へ進む。
ステップ８２０：閉鎖更新ブロックリスト６１６内の所定の論理アドレスを検索する。検索が失敗すると、所定の論理アドレスはどの更新処理の一部でもないことになり、ＧＡＴアドレス変換のためのステップ８７０へ進む。そうでなければ、閉鎖更新ブロックアドレス変換のためのステップ８６０へ進む。
ステップ８３０：所定の論理アドレスを含む更新ブロックが順次であれば、順次更新ブロックアドレス変換のためのステップ８４０へ進む。そうでなければ、カオス的更新ブロックアドレス変換のためのステップ８５０へ進む。
ステップ８４０：順次更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ８８０へ進む。
ステップ８５０：カオス的更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ８８０へ進む。
ステップ８６０：閉鎖更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ８８０へ進む。
ステップ８７０：グループアドレステーブル（ＧＡＴ）変換を使用して、メタブロックアドレスを取得する。ステップ８８０へ進む。
ステップ８８０：メタブロックアドレスを物理アドレスに変換する。変換方法は、メタブロックが再リンクされているかどうかに依存する。
ステップ８９０：物理セクタアドレスが取得される。
【０１５９】
様々なアドレス変換処理について、以下により詳細に説明する。
順次更新ブロックアドレス変換（ステップ８４０）
順次更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、開放更新ブロックリスト６１４内の情報から直接達成される（図１５および１８）。
１．リスト内の「ページタグ」フィールドおよび「書き込みセクタの数」フィールドから、対象論理セクタが更新ブロックにあるか、またはその関連する元ブロックにあるかどうかを判断する。
２．対象論理セクタに適切なメタブロックアドレスが、リストから読み出される。
３．メタブロック内のセクタアドレスが、適切な「ページタグ」フィールドから決定される。
【０１６０】
カオス的更新ブロックアドレス変換（ステップ８５０）
カオス的更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
１．ＲＡＭ内のカオス的セクタリストから、セクタが最近書き込まれたセクタであると判断される場合には、アドレス変換は、このリスト内のその位置から直接達成されてもよい。
２．ＣＢＩブロック内の直近に書き込まれたセクタは、そのカオス的ブロックデータフィールド内に、対象論理セクタアドレスに該当するカオス的更新ブロックの物理アドレスを含む。また、その間接セクタインデックスフィールド内に、このカオス的更新ブロックに関連する最終書き込みＣＢＩセクタのＣＢＩブロック内のオフセットを含む（図１６Ａ〜１６Ｅ参照）。
３．これらのフィールド内の情報は、ＲＡＭ内にキャッシュされ、後続のアドレス変換中にセクタを読み出す必要をなくしている。
４．間接セクタインデックスフィールドによってステップ３において識別されたＣＢＩセクタが読み出される。
５．直近にアクセスされたカオス的更新サブグループについての直接セクタインデックスフィールドは、ＲＡＭ内にキャッシュされ、同一のカオス的更新ブロックに対する繰り返しのアクセスのためのステップ４における読み出しを行う必要をなくしている。
６．ステップ４または５において読み出された直接セクタインデックスフィールドは、対象論理セクタアドレスを含む論理サブグループに関連するＣＢＩセクタを識別する。
７．対象論理セクタアドレスについてのカオス的ブロックインデックスエントリは、ステップ６において識別されたＣＢＩセクタから読み出される。
８．直近に読み出されたカオス的ブロックインデックスフィールドは、コントローラＲＡＭ内にキャッシュされてもよく、同一の論理サブグループに対する繰り返しのアクセスのためのステップ４およびステップ７における読み出しを行う必要をなくしている。
９．カオス的ブロックインデックスエントリは、カオス的更新ブロックまたは関連する元ブロックのいずれかの内に対象論理セクタの位置を規定する。対象論理セクタの有効コピーが元ブロック内にあれば、元メタブロックおよびページタグ情報を使用して位置決定される。
【０１６１】
閉鎖更新ブロックアドレス変換（ステップ８６０）
閉鎖更新ブロックに関連した論理ブロックループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、閉鎖ブロック更新リスト内の情報から直接達成することができる（図１８参照）。
１．対象論理グループに割り当てられたメタブロックアドレスは、リストから読み出される。
２．メタブロック内のセクタアドレスは、リスト内の「ページタグ」フィールドから決定される。
【０１６２】
ＧＡＴアドレス変換（ステップ８７０）
論理グループが開放または閉鎖ブロック更新リストのいずれかによって参照されない場合には、ＧＡＴ内のそのエントリは有効である。ＧＡＴによって参照される論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
１．ＲＡＭ内の使用可能なＧＡＴキャッシュの範囲を評価して、対象論理グループについてのエントリがＧＡＴキャッシュ内に含まれるかどうかを判断する。
２．対象論理グループがステップ１において見つかった場合、ＧＡＴキャッシュは、メタブロックアドレスおよびページタグを含む全グループアドレス情報を含み、対象論理セクタアドレスの変換が可能となる。
３．対象アドレスがＧＡＴキャッシュ内にない場合、ＧＡＴインデックスを対象ＧＡＴブロックについて読みだして、対象論理グループアドレスに関するＧＡＴセクタの位置を識別しなければならない。
４．最後にアクセスされたＧＡＴブロックについてのＧＡＴインデックスは、コントローラＲＡＭ内に保持され、フラッシュメモリからセクタを読み出す必要なくアクセスされてもよい。
５．各ＧＡＴブロックについてのメタブロックアドレスのリストと、各ＧＡＴブロック内に書き込まれたセクタの数とが、コントローラＲＡＭ内に保持される。必要なＧＡＴインデックスがステップ４において使用可能でない場合、フラッシュメモリからすぐに読み出されてもよい。
６．対象論理グループアドレスに関するＧＡＴセクタは、ステップ４またはステップ６において取得されたＧＡＴインデックスによって規定されたＧＡＴブロック内のセクタ位置から読み出される。ＧＡＴキャッシュが、対象エントリを含むセクタの再分割部分によって更新される。
７．対象セクタアドレスは、対象ＧＡＴエントリ内のメタブロックアドレスおよび「ページタグ」フィールドから取得される。
【０１６３】
メタブロック／物理アドレス変換（ステップ８８０）
メタブロックが再リンクされていることをメタブロックアドレスに関連したフラグが示されている場合、該当ＬＴセクタがＢＬＭブロックから読み出されて、対象セクタアドレスについての消去ブロックアドレスであると決定する。そうでなければ、消去ブロックアドレスは、メタブロックアドレスから直接決定される。
【０１６４】
制御データ管理
図２０は、メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。データ更新管理動作は、ＲＡＭ内にある様々なリストに対して作用する。制御書き込み動作は、様々な制御データセクタおよびフラッシュメモリ内の専用ブロックに対して作用し、またＲＡＭ内のリストとデータを交換する。
【０１６５】
データ更新管理動作が、ＲＡＭ内で、ＡＢＬ、ＣＢＬ、およびカオス的セクタリストに対して行われる。ＡＢＬは、消去済みブロックが更新ブロックまたは制御ブロックとして割り当てられる場合、または更新ブロックが閉鎖される場合に更新される。ＣＢＬは、制御ブロックが消去される場合、または閉鎖更新ブロックについてのエントリがＧＡＴに書き込まれる場合に更新される。更新カオス的セクタリストは、セクタがカオス的更新ブロックに書き込まれる場合に更新される。
【０１６６】
制御書き込み動作によって、ＲＡＭ内の制御データ構造からの情報がフラッシュメモリ内の制御データ構造に書き込まれ、必要があれば、フラッシュメモリおよびＲＡＭ内の他の補助制御データ構造を更新する結果となる。これは、更新ブロックとして割り当てるべき消去済みブロックについてのエントリをＡＢＬがこれ以上含まない場合、またはＣＢＩブロックが書き換えられる場合にトリガされる。
【０１６７】
好ましい実施形態において、ＡＢＬ充填動作、ＣＢＬを空にする動作、およびＥＢＭセクタ更新動作は、各制御書き込み動作中に行われる。ＥＢＭセクタを含むＭＡＰブロックが一杯になると、有効ＥＢＭおよびＭＡＰセクタが、割り当てられた消去済みブロックにコピーされ、以前のＭＡＰブロックは消去される。
各制御書き込み動作中に、１つのＧＡＴセクタが書き込まれ、かつ閉鎖更新ブロックリストがそれに従って修正される。ＧＡＴブロックが一杯になると、ＧＡＴ書き換え動作が行われる。
ＣＢＩセクタが、前に説明したように、あるカオス的セクタ書き込み動作後に書き込まれる。ＣＢＩブロックが一杯になると、有効なＣＢＩセクタが、割り当てられた消去済みブロックにコピーされ、以前のＣＢＩブロックは消去される。
ＭＡＰ交換動作が、前に説明したように、ＥＢＭセクタ内のＥＢＢリスト内に消去済みブロックエントリがこれ以上ない場合に行われる。
【０１６８】
ＭＡＰアドレス（ＭＡＰＡ）セクタは、ＭＡＰブロックの現在アドレスを記録し、ＭＡＰブロックが書き換えられる度に専用のＭＡＰＡブロックに書き込まれる。ＭＡＰＡブロックが一杯になると、有効なＭＡＰＡセクタは、割り当てられた消去ブロックにコピーされ、以前のＭＡＰＡブロックは消去される。
【０１６９】
ブートセクタが、ＭＡＰＡブロックが書き換えられる度に現在のブートブロック内に書き込まれる。ブートブロックが一杯になると、有効なブートセクタは、ブートブロックの現在のバージョンからバックアップバージョンへコピーされ、その後、現在のバージョンとなる。以前の現在のバージョンは消去されて、バックアップバージョンとなり、そこに有効なブートセクタは書き戻される。
【０１７０】
複数のメモリプレーンに渡って分散されたメモリの配列
図４および図５Ａ〜５Ｃに関連して前に説明したように、性能を向上させるために、複数のメモリプレーンが並列に動作される。基本的には、各プレーンは、プレーンの範囲のメモリセルの対応するページを並列に処理するための読み出しおよびプログラム回路の一部としての独自のセンス増幅器のセットを有する。複数のプレーンが組み合わされると、複数のページが並列に動作されてもよく、さらに性能が高まる。
【０１７１】
本発明の他の態様において、消去可能なブロックに組織化され、かつ論理ユニットを複数のプレーンに並列に読み出しまたはプログラムすることができるように複数のメモリプレーンから構成されるメモリアレイについて、所定のメモリプレーンに記憶された第１のブロックの元論理ユニットが更新される場合、更新済みの論理ユニットが元論理ユニットと同一のプレーンに維持されるための措置が講じられる。これは、更新済み論理ユニットを、同一のプレーン内ではあるが第２のブロックの次に使用可能な位置に記録することによって達成される。好ましくは、論理ユニットは、所定の論理ユニットのすべてのバージョンが検知回路の同一のセットによって処理されるように、プレーン内の他のバージョンにおけるのと同一のオフセット位置で記憶される。
【０１７２】
本発明の好ましい実施形態において、最後にプログラムされたメモリユニットから次に使用可能なプレーン配列されたメモリユニットへの介在ギャップが、論理ユニットの現在のバージョンに従ってパディングされる。パディングは、論理ユニットから論理的に先行する論理ユニットの現在のバージョンが次に使用可能なプレーン配列されたメモリユニットに記憶された状態で、最後にプログラムされた論理ユニットから論理的に従う論理ユニットの現在のバージョンでギャップを埋めることによって達成される。
【０１７３】
このように、ガーベッジコレクション動作において、論理ユニットの最終バージョンを異なるプレーンから取り出すという、性能を低下させる結果を生じる動作が必要ないように、ある論理ユニットのすべてのバージョンが、同一プレーン内に、元のものと同一のオフセットを有して保持される。好ましい実施形態において、プレーン上の各メモリユニットは、最終バージョンによって更新またはパディングされる。よって、複数のプレーンに渡る並列処理において、論理ユニットは、さらに再構成をする必要なく、論理的な順次順序となる。
【０１７４】
この手法は、論理グループの論理ユニットの最終バージョンをプレーン上で再構成することを可能にし、互いに異なるメモリプレーンから最終バージョンを収集する必要性を回避することによって、カオス的ブロックの統合化のための時間を削減する。これは、ホストインターフェイスに関する性能仕様によってメモリシステムによるセクタ書き込み動作の完了に対する最大待ち時間が規定される場合に、有利である。
【０１７５】
図２１は、複数のメモリプレーンから構成されるメモリアレイを示す。メモリプレーンは、同一のメモリチップから、または複数のメモリチップからであってもよい。各プレーン９１０は、メモリセルのページ９１４を並列に処理するための読み出し・プログラム回路９１２の独自のセットを有する。一般性を失うことなく、図に示されている例において、メモリアレイは、並列に動作する４つのプレーンを有する。
【０１７６】
一般的に、論理ユニットは、ホストシステムによるアクセスの最小単位である。典型的には、論理ユニットは、５１２バイトのサイズのセクタである。ページは、プレーンにおける並列読み出しまたはプログラミングの最大単位である。典型的には、論理ページは、１つ以上の論理ユニットを含む。したがって、複数のプレーンを組み合わせる場合に、並列読み出しまたはプログラミングの最大総計ユニットを、メモリセルのメタページとみなすことができ、メタページは、複数の各プレーンからなるページによって構成される。例えば、ＭＰ0 などのメタページは、各プレーンＰ０，Ｐ１，Ｐ２，およびＰ３からの４つのページを有し、論理ページＬＰ0 ，ＬＰ1 ，ＬＰ2 ，およびＬＰ3 を並列に記憶する。よって、メモリの読み出しおよび書き込み性能は、１つのプレーンにおいてのみ動作するのと比較して４倍に増加する。
【０１７７】
メモリアレイは、ＭＢ0 ，・・・ＭＢj などのメタブロックにさらに組織化され、各メタブロック内のすべてのメモリセルは、ユニットとして共に消去可能である。ＭＢ0 などのメタブロックは、複数のメモリ位置から構成され、ＬＰ0 〜ＬＰN-1 などのデータの論理ページ９１４を記憶するためのものである。メタブロック内の論理ページは、メタブロックに充填される順序に従って、所定のシーケンスで、４つのプレーンＰ０，Ｐ１，Ｐ２，およびＰ３に渡って分散される。例えば、論理ページが論理的な順次順序で充填される場合には、プレーンは、第１のページは第１のプレーンに、第２のページは第２のプレーンに、というような周期的な順序で巡回される。最後のプレーンに到達後、充填は周期的に戻って、次のメタページにおいて第１のプレーンから再開する。このように、論理ページの連続実行は、すべてのプレーンが並列に動作される場合に、並列にアクセス可能である。
【０１７８】
一般的に、並列に動作するＷ個のプレーンがあり、メタブロックが論理的な順次順序で充填される場合に、メタブロック内のｋ番目の論理ページは、ｘ＝ｋＭＯＤ  Ｗの場合のプレーンｘにある。例えば、プレーンが４つ、すなわちＷ＝４であり、ブロックを論理的な順次順序で充填する場合、図２１に示されているように、５番目の論理ページＬＰ５が５ＭＯＤ４によって与えられるプレーン、すなわちプレーン１内にある。
【０１７９】
各メモリプレーンにおけるメモリ動作は、読み出し／書き込み回路９１２のセットによって行われる。各読み出し／書き込み回路へのデータおよびそこからのデータは、コントローラ９２０の制御下で、データバス９３０を介して転送される。コントローラ９２０内のバッファ９２２は、データ転送をデータバス９３０を介してバッファするのを助ける。特に、第１のプレーンにおける動作が第２のプレーン内のデータに対するアクセスを必要とする場合には、２つの段階の処理が必要である。まず、データが第２のプレーンからコントローラによって読み出され、その後、データバスおよびバッファを介して第１のプレーンへ転送される。実際、たいていのメモリ構成において、２つの互いに異なるビットライン間のデータ転送は、データバス９２０を通じてのデータのやり取りをも必要とする。
【０１８０】
極少なくとも、これには、あるプレーンにおける読み出し／書き込み回路のあるセットからの転送と、別のプレーンにおける読み出し／書き込み回路の他のセットへの転送を伴うものであった。プレーンが互いに異なるチップからである場合には、チップ間の転送が必要となる。本発明は、性能を最大化するために、あるプレーンによる他のプレーンからのアクセスを回避するようなメモリブロック管理についての構造および手法を提供する。
【０１８１】
図２１に示されているように、メタページは、複数の論理ページによって形成され、プレーン毎に１つある。各論理ページは、１つ以上の論理ユニットからなってもよい。データが複数のプレーンに渡って論理ユニット毎にブロックに記録されているので、各論理ユニットは、４つのメモリプレーンのうちの１つに該当することになる。
【０１８２】
プレーン配列の問題が生じるのは、論理ユニットを更新する場合である。この例において、図示の目的のために、論理ユニットは、５１２バイトの論理セクタとされ、論理ページも、論理ユニット全体である。フラッシュメモリは、最初に全体のブロックを消去することなくブロックの一部を書き換えることができないので、論理ページに対する更新は、既存の位置には書き込まれないが、ブロックの未使用の位置に記録される。その後、論理ユニットの以前の（複数の）バージョンが廃止とみなされる。数多くの更新の後、ブロックは、更新されることによって廃止となった数多くの論理ユニットを含む場合がある。その後、ブロックは、「汚い (dirty)」と称され、ガーベッジコレクション動作が、この汚い論理ユニットを無視するが、各個別の論理ユニットの最新バージョンを収集して、それらを論理的な順次順序で１つ以上の新規ブロックに再記録する。その後、汚いブロックは、消去されリサイクルされる。
【０１８３】
更新済みの論理ユニットがブロック内の次に未使用の位置に記録される場合、一般的には、以前のバージョンと同一のメモリプレーンに記録されない。統合化またはコンパクト化などのガーベッジコレクション動作の場合、論理ユニットの最新バージョンは、元のと同一のプレーン内に再記録されて、元の順序を維持する。しかし、最新バージョンを他のプレーンから取り出さなければならない場合には、性能が低下する。
【０１８４】
よって、本発明の他の態様によれば、所定のプレーンに記憶された第１のブロックの元論理ユニットが更新される場合、更新済みの論理ユニットが元論理ユニットと同一のプレーンに維持されるための措置が講じられる。これは、更新済み論理ユニットを、同一のプレーン内ではあるが第２のブロックの次に使用可能な位置に記録することによって達成される。好ましくは、最後にプログラムされたメモリユニットから次に使用可能なプレーン配列されたメモリユニットへの介在ギャップが、元ブロック内の元論理ユニットと同一の相対位置内の論理ユニットの現在のバージョンでパディング（すなわち、コピーによって充填）される。
【０１８５】
図２２Ａは、本発明の一般的な実施に係る、プレーン配列を伴う更新の方法を示すフロー図である。
ステップ９５０：ブロックに組織化された不揮発性メモリにおいて、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものである。
ステップ９５２：複数のメモリプレーンからメモリを構成し、各プレーンは、並列にメモリページを処理するための検知回路のセットを有し、前記メモリページは、１つ以上のメモリユニットを含む。
ステップ９５４：論理ユニットの第１のバージョンを第１の順序に従って第１のブロックのメモリユニットに記憶し、各第１のバージョンの論理ユニットは、メモリプレーンのうちの１つに記憶される。
ステップ９５６：論理ユニットの後続のバージョンを第１の順序とは異なる第２の順序に従って第２のブロックへ記憶し、各後続のバージョンは、論理ユニットのすべてのバージョンが検知回路の同一のセットによって同一のプレーンからアクセス可能であるように、第１のバージョンと同一プレーン内で次に使用可能なメモリユニットに記憶される。
【０１８６】
図２２Ｂは、図２２Ａに示されているフロー図における更新を記憶するステップの好ましい実施形態を示す。
ステップ９５６’は、ステップ９５７、ステップ９５８、およびステップ９５９を含む。
ステップ９５７：各ブロックをメタページに分割し、各メタページは、各プレーンのページから構成される。このステップは、どの記憶するステップの前でも行うことができる。
ステップ９５８：論理ユニットの後続のバージョンを、第１の順序とは異なる第２の順序に従って第２のブロックへ記憶し、各後続のバージョンは、メタページ内の第１のバージョンと同一のオフセットを有する次に使用可能なメモリユニット内に記憶する。
ステップ９５９：論理ユニットの後続のバージョンと並行して、前記次に使用可能なメモリユニットに先立つあらゆる未使用のメモリユニットを、メタページ毎に、論理ユニットの現在のバージョンを第１の順序に従ってコピーすることによってパディングする。
【０１８７】
図２３Ａは、プレーン配列を考慮しないで順次更新ブロックへ順次順序で書き込まれる論理ユニットの一例を示す。この例は、各論理ページが、ＬＳ０，ＬＳ１などの論理セクタの大きさであることを示している。４プレーンの例において、ＭＢ0 などの各ブロックは、メタページＭＰ0 ，ＭＰ1 ，・・・に分割され、ＭＰ0 などの各メタページは、それぞれプレーンＰ０，Ｐ１，Ｐ２，およびＰ３からのＬＳ０，ＬＳ１，ＬＳ２，およびＬＳ３のような４つのセクタを含む。したがって、ブロックは、セクタ毎に、プレーンＰ０，Ｐ１，Ｐ２，およびＰ３内の論理ユニットに周期的な順序で充填される。
【０１８８】
ホスト書き込み動作＃１において、論理セクタＬＳ５〜ＬＳ８内のデータが更新中である。ＬＳ５’〜ＬＳ８’となった更新済みのデータが、新規に割り当てられた更新ブロックに、最初に利用可能な位置から記録される。
ホスト書き込み動作＃２において、論理セクタＬＳ９〜ＬＳ１２内のデータのセグメントが更新中である。ＬＳ９’〜ＬＳ１２’となった更新済みのデータは、最終書き込みが終了した箇所に直接続く位置にある更新ブロック内に記録される。２つのホスト書き込みは、更新データが論理的な順次順序で更新ブロック、すなわちＬＳ５’〜ＬＳ１２’に記録されているようになっていることがわかる。更新ブロックは、論理的な順次順序で充填されているので、順次更新ブロックとみなされる。更新ブロックに記録された更新データは、元ブロック内の対応するデータを廃止する。
【０１８９】
しかし、更新論理セクタは、次に使用可能な位置に従うがプレーン配列には関係なく、更新ブロックに記録されている。例えば、セクタＬＳ５は、元々はプレーンＰ１内に記録されているが、更新されたＬＳ５’は、今やＰ０に記録されている。同様に、他の更新セクタもすべて位置関係が合っていない。
【０１９０】
図２３Ｂは、プレーン配列を考慮しないでカオス的更新ブロックへ非順次順序で書き込まれる論理ユニットの一例を示す。
ホスト書き込み動作＃１において、元メタブロック内に記憶された所定の論理グループの論理セクタＬＳ１０〜ＬＳ１１が更新される。更新済み論理セクタＬＳ１０’〜ＬＳ１１’は、新たに割り当てられた更新ブロックに記憶される。この時点で、更新ブロックは順次的である。ホスト書き込み動作＃２において、論理セクタＬＳ５〜ＬＳ６がＬＳ５’〜ＬＳ６’に更新されて、最終書き込みの直後の位置にある更新ブロック内に記録される。これにより、更新ブロックは、順次的からカオス的なものに変換される。ホスト書き込み動作＃３において、論理セクタＬＳ１０’は再び更新されて、更新ブロックの次の位置にＬＳ１０’’として記録される。この時点で、更新ブロックのＬＳ１０’’は、元ブロック内のＬＳ１０に取って代わった以前の記録におけるＬＳ１０’に取って代わる。ホスト書き込み動作＃４において、論理セクタＬＳ１０’’内のデータは再び更新され、更新ブロックの次の位置にＬＳ１０’’’として記録される。よって、ＬＳ１０’’’が、論理セクタＬＳ１０についての現在最新かつ唯一有効なバージョンである。ＬＳ１０のすべての以前のバージョンは今や廃止される。ホスト書き込み動作＃５において、論理セクタＬＳ３０のデータが更新され、更新ブロック内にＬＳ３０’として記録される。この例において、論理グループ内の論理ユニットを、任意の順序かつ任意の繰り返しで、カオス的更新ブロック内に書き込むことができる。
【０１９１】
繰り返すが、更新論理セクタは、次に使用可能な位置に従うがプレーン配列には関係なく、更新ブロックに記録されている。例えば、セクタＬＳ１０は、元々はプレーンＰ２（すなわち、ＭＰ2 ，第３のプレーン）内に記録されているが、更新されたＬＳ１０’は、今やＰ０（すなわち、ＭＰ0 ’，第１のプレーン）内に記録されている。同様に、ホスト書き込み動作＃３において、論理セクタＬＳ１０’は再びＬＳ１０’’に更新されて、次に使用可能な位置、つまり同じくプレーンＰ０（ＭＰ1 ’内の第１のプレーン）に置かれる。よって、一般的に、ブロックの次に使用可能な位置に更新セクタを記録すると、更新済みのセクタが以前のバージョンとは異なるプレーンに記録されることになる場合があることがわかる。
【０１９２】
パディングによって介在ギャップが埋められた、プレーン配列された順次更新ブロック
図２４Ａは、本発明の好ましい実施形態に係る、プレーン配列およびパディングを伴う図２３Ａの順次更新の例を示す。
ホスト書き込み動作＃１において、ＬＳ５’〜ＬＳ８’としての更新済みデータは、第１の使用可能なプレーン配列の位置から始めて、新規に割り当てられた更新ブロックに記録される。この場合、ＬＳ５は、元々はＰ１、すなわちメタページの第２のプレーン内にある。したがって、ＬＳ５’〜ＬＳ７’は、更新ブロックの第１の使用可能なメタページＭＰ0 内の対応するプレーンにプログラムされることになる。同時に、ＭＰ0 ’内の未使用の第１のプレーンのギャップは、元ブロックのメタページ内でＬＳ５に先立つ論理セクタＬＳ４の現在のバージョンでパディングされている。元のＬＳ４は、その後、廃止データとして扱われる。残りのＬＳ８’は、その後、次のメタページＭＰ1 ’の第１のプレーンに記録されて、プレーン配列される。
【０１９３】
ホスト書き込み動作＃２において、ＬＳ９’〜ＬＳ１２’としての更新済みのデータは、次に使用可能なプレーン配列の位置における更新ブロック内に記録される。したがって、ＬＳ９’は、次に使用可能なプレーン配列のメモリユニット、すなわちＭＰ1 ’の第２のプレーンに記録される。この場合、ギャップは生じず、パディングは必要ない。更新ブロックは、論理的な順次順序で充填されているので、順次更新ブロックとみなされる。さらに、各更新論理ユニットはその元のものと同じプレーン内にあるので、プレーン配列されている。
【０１９４】
介在ギャップを伴う、プレーン配列されたカオス的更新ブロック
図２４Ｂは、本発明の好ましい実施形態に係る、プレーン配列は伴うがパディングは伴わない図２３Ｂのカオス的更新の例を示す。
ホスト書き込み動作＃１において、更新済み論理セクタＬＳ１０’〜ＬＳ１１’が新規に割り当てられた更新ブロック内に記録される。これらを次に使用可能なメモリユニットに記憶する代わりに、これらは、次に使用可能なプレーン配列のメモリユニットに記憶される。ＬＳ１０’およびＬＳ１１’は元々はプレーンＰ２およびＰ３（元ブロックのＭＰ2 の第３および第４のプレーン）内にそれぞれ記憶されていたので、次に使用可能なプレーン配列のメモリユニットは、更新ブロックのＭＰ0 ’の第３および第４のプレーン内にあることになる。この時点で、更新ブロックは非順次的であり、メタページＭＰ0 ’のページは、未充填、未充填、ＬＳ１０’およびＬＳ１１’という順序で充填される。
【０１９５】
ホスト書き込み動作＃２において、論理セクタＬＳ５〜ＬＳ６は、ＬＳ５’〜ＬＳ６’に更新されて、次に使用可能なプレーン配列の位置における更新ブロック内に記録される。よって、第２（Ｐ１）および第３（Ｐ２）のプレーンまたは元ブロックのＭＰ1 のメモリユニットにあるＬＳ５’〜ＬＳ６’は、更新ブロックにおける次に利用可能なメタページＭＰ1 ’内の対応するプレーンにプログラムされることになる。これにより、ＭＰ1 ’内の先行する未使用の第１のプレーンはそのままとされる。
【０１９６】
ホスト書き込み動作＃３において、論理セクタＬＳ１０’は再び更新されて、ＬＳ１０’’として更新ブロックの次にプレーン配列された位置に記録される。よって、これは次に使用可能な第３のプレーンである、ＭＰ2 ’に書き込まれることになる。これにより、ＭＰ1 ’内の最終プレーンの先行ギャップと、ＭＰ2 ’の最初の２つのプレーンとは、そのままとされる。これにより、ＭＰ0 ’内のＬＳ１０’が廃止される。
【０１９７】
ホスト書き込み動作＃４において、論理セクタＬＳ１０’’内のデータは再び更新されて、ＬＳ１０’’’として更新ブロック内のメタページＭＰ2 ’の次に使用可能な第３のプレーン内に記録される。よって、ＬＳ１０’’’は、論理セクタＬＳ１０についての現在最新かつ唯一有効なバージョンである。これにより、ＭＰ2 ’内の最終プレーンと、ＭＰ3 ’内の最初の２つのプレーンとからなるギャップは、そのままとされる。
【０１９８】
ホスト書き込み動作＃５において、論理セクタＬＳ３０内のデータは更新され、ＬＳ３０’として更新ブロック内に記録される。元のＬＳ３０はＰ２またはメタページの第３のプレーン内にあるので、更新ブロック内の次に使用可能な第３のプレーンに書き込まれることになる。この場合、ＭＰ4 ’の第３のプレーンとなる。ＭＰ3 ’の最後のプレーンからＭＰ4 ’の最初の２つのプレーンにかけてギャップが形成される。よって、この例は、論理グループ内の論理セクタを、カオス的更新ブロック内に、任意の順序でかつプレーン配列となるような任意の繰り返しによって書き込むことができることを示している。後続のガーベッジコレクション動作の際に、すべてのバージョン、特に所定の論理セクタの最新バージョンは、検知回路の同一のセットによって都合よく処理されるようになる。
【０１９９】
パディングによって介在ギャップが埋められた、プレーン配列されたカオス的更新ブロック
図２４Ｃは、本発明の他の好ましい実施形態に係る、プレーン配列およびパディングを伴う図２３Ｂのカオス的更新の例を示す。
動作は、介在ギャップがパディングによってまず埋められる以外は、図２４Ｂに示されているものと同様である。ホスト書き込み動作＃１において、メタページＭＰ0 ’の第１および第２の未使用のプレーンによって形成されたギャップは、元ブロック内にあるＬＳ８およびＬＳ９の最新バージョンでまずパディングされる。これにより、元ブロック内のＬＳ８およびＬＳ９が廃止される。この時点で、更新ブロックは順次的であり、メタページＭＰ0 ’がＬＳ８，ＬＳ９，ＬＳ１０’，およびＬＳ１１’の順で充填される。
【０２００】
ホスト書き込み動作＃２において、ＭＰ1 ’内の先行する未使用の第１のプレーンによってギャップが形成され、まずＬＳ４でパディングされる。これにより、元ブロック内のＬＳ４が廃止されることになる。前述したように、第２の書き込みは、更新ブロックを順次的からカオス的なものに変換する。
【０２０１】
ホスト書き込み動作＃３において、未使用の、ＭＰ1 ’内の最後のプレーンと、ＭＰ2 ’の最初の２つのプレーンによってギャップが形成される。ＭＰ1 ’の最後のプレーンは、最後にプログラムされたＬＳ６’に続くＬＳ７でパディングされ、ＭＰ2 ’の最初の２つのプレーンは、ＬＳ１０に先行する論理ユニット、すなわちＬＳ８およびＬＳ９でパディングされる。これにより、ＭＰ0 ’内のＬＳ１０’と、元ブロック内のＬＳ７〜ＬＳ９とが廃止される。
【０２０２】
ホスト書き込み動作＃４において、ＭＰ2 ’内の最後のプレーンと、ＭＰ3 ’内の最初の２つのプレーンとからなるギャップが形成される。ＭＰ2 ’の最後のプレーンは、メタページＭＰ2 ’内の最後に書き込みされたＬＳ１０’’に続く論理ユニットの最新バージョンであるＬＳ１１’によってパディングされる。ＭＰ3 ’の最初の２つのプレーンは、メタページＭＰ3 ’内のＬＳ１０’’’に先行する論理ユニットとして、ＬＳ８およびＬＳ９によってそれぞれパディングされる。
【０２０３】
ホスト書き込み動作＃５において、ＭＰ3 ’の最後のプレーンからＭＰ4 ’の２つのプレーンにかけてのギャップは、それに応じて、すなわちそれぞれＬＳ１１’，ＬＳ２８，およびＬＳ２９でパディングされることになる。よって、この例は、論理グループ内の論理セクタを、カオス的更新ブロック内に、任意の順序でかつプレーン配列となるような任意の繰り返しによって書き込むことができることを示している。
【０２０４】
好ましい実施形態において、メタページは、個別のプレーンからのページの周期的な実行を含む。メタページは並列に読み出しまたはプログラム可能なので、各ホスト更新をメタページの粒度で実施するのが得策である。もしあれば、パディングが、メタページ毎に、更新済み論理ユニットと共に記録される。
【０２０５】
図２４Ａおよび図２４Ｃの例に示されている実施形態において、各ホスト書き込み中に、更新がプログラムされるべきプレーン配置されたメモリユニットに先行する未使用のメモリユニットに対して、パディングが行われる。最後にプログラムされたメモリユニットに続く任意の未使用のメモリユニットの動作は、次のホスト書き込みまで延期される。通常、任意の先行する未使用のメモリユニットが各メタページの境界内でパディングされる。言い換えれば、先行するギャップが２つのメタページにまたがる場合には、パディングは、各メタページに適切な論理的な順次順序で、各メタページに対して行われるが、境界に渡る連続性とは見なされない。ブロックの統合化の場合には、最後の書き込みメタページが部分的に書き込まれていれば、パディングによって完全に充填される。
他の実施形態において、任意の部分的に充填されたメタページが、次のメタページに移動する前に完全にパディングされる。
【０２０６】
メモリユニットの粒度
個々のメモリ構成によってサポートされる柔軟性に依存して、読み出しまたはプログラムのユニットを変更することが可能である。個々のプレーンの個々の性質によって、あるメタページ内の個々のプレーンからの各ページを個別に読み出しまたはプログラムすることができる。前に説明した例では、プログラムの最大ユニットは、各プレーン内のページである。メタページ内において、すべてのページより少ない数の部分メタページプログラミングが可能である。例えば、メタページの最初の３ページをプログラムし、その後に４ページ目をプログラムすることが可能である。
【０２０７】
また、プレーンレベルにおいて、１つ以上のメモリユニットを含んでもよい。各メモリユニットがデータのセクタを記憶することができる場合は、物理ページは、１つ以上のセクタを記憶してもよい。メモリ構成によっては、部分ページプログラミングをサポートしているものもあり、ページ内において選択されたメモリユニットのプログラミングを禁止することによって、選択された論理ユニットを、複数のプログラミングパスに渡って、互いに異なるときに個別にプログラムするようにしてもよい。
【０２０８】
論理グループのカオス的更新についてのメモリプレーン内における論理ユニット配列
ブロックメモリ管理システムにおいて、論理ユニットの論理グループが、元ブロック内での論理的な順次順序で記憶される。論理グループが更新される場合に、論理ユニットの後続のバージョンが更新ブロックに記憶される。論理ユニットがカオス的に（すなわち、非順次に）更新ブロックに記憶される場合、最終的にはガーベッジコレクションが行われ、元ブロック内の論理ユニットの最新版と更新ブロックとを収集して、それらを新規の元ブロックに順次に統合化する。ガーベッジコレクション動作がさらに効率的となるのは、所定の論理ユニットの更新済みバージョンが、すべてのバージョンが検知回路の同一のセットによってアクセス可能であるように、元ブロック内の元バージョンに揃って、更新ブロック内にすべて記憶される場合である。
【０２０９】
本発明の他の態様によれば、前述したブロックメモリ管理システムにおいて、メモリが一連のメモリページに組織化される場合に、メモリユニットの各ページは、検知回路のセットによって並列に処理され、所定の論理ユニットのすべてのバージョンは、記憶されるページ内の同一のオフセット位置をすべてが有する場合には、整列される。
【０２１０】
図２５は、各ページが２つの論理セクタのような２つの論理ユニットを記憶するための２つのメモリユニットを含むメモリ組織の一例を示す。元ブロックにおいて、論理セクタは論理的な順次順序で記憶されているので、論理セクタＬＳ０およびＬＳ１は、ページＰ０に記憶され、論理セクタＬＳ２およびＬＳ３は、ページＰ１に記憶され、論理セクタＬＳ４およびＬＳ５は、ページＰ３に記憶されるといった具合である。この２セクタページにおいて、左から１番目のセクタは、ページオフセット「０」を有し、２番目のセクタは「１」のページオフセットを有することがわかる。
【０２１１】
元ブロック内に順次的に記憶された論理セクタの論理グループを更新する場合、更新済み論理セクタは、更新ブロック内に記録される。例えば、論理セクタＬＳ２は、ページＰ０内に、元ブロック内のオフセット「０」で存在する。最初の書き込みにおいて、ＬＳ２がＬＳ２’に更新されると、同じページオフセット「０」を有する更新ブロック内の最初に使用可能な位置に記憶されることになる。これは、ページＰ０’の最初のメモリユニット内であることになる。第２の書き込みにおいて、ＬＳ５はＬＳ５’に更新され、同じページオフセット「１」を有する更新ブロック内の最初に使用可能な位置に記憶されることになる。これは、ページＰ１’のオフセット「１」を有する第２のメモリユニット内であることになる。しかし、ＬＳ５’を記憶する前に、Ｐ０’内のオフセット「１」とＰ１’内のオフセット「０」とを有する未使用のメモリユニットは、少なくとも各ページ内で論理的な順次順序を維持するような論理セクタの最新バージョンをコピーすることによって、最初にパディングされることになる。この場合、ＬＳ３がＰ０’内のオフセット「１」の位置にコピーされ、ＬＳ４がＰ１’内のオフセット「０」の位置にコピーされることになる。第３の書き込みにおいて、ＬＳ２’が再びＬＳ２’’に更新されると、Ｐ２’のオフセット「０」内に記憶されることになる。第４の書き込みにおいて、ＬＳ２２およびＬＳ２３がＬＳ２２’およびＬＳ２３’にそれぞれ更新されると、Ｐ３’のオフセット「０」および「１」内にそれぞれ記憶されることになる。しかし、その前に、Ｐ２’内のオフセット「１」を有する未使用のメモリユニットはＬＳ３でパディングされる。
【０２１２】
前述した更新シーケンスは、あるページ内の個別のセクタをプログラムすることが可能であるものとしている。部分ページプログラミングをサポートしないメモリ構成によっては、あるページ内のすべてのセクタは、共にプログラムされなければならない。その場合、第１の書き込みにおいて、ＬＳ２’およびＬＳ３は、Ｐ０’に共にプログラムされる。第２の書き込みにおいて、ＬＳ４およびＬＳ５’は、Ｐ１’に共にプログラムされる。第３の書き込みにおいて、ＬＳ２’’およびＬＳ３は、Ｐ２’に共にプログラムされるといった具合である。
【０２１３】
メタページ内でのプレーン配列
代わりに、プログラムのユニットは、メタページの粒度を有してもよい。カオス的更新ブロックへの書き込みの粒度がペタページとなる場合には、図１６Ａおよび１６Ｂに関連して説明したＣＢＩブロック内のエントリは、セクタの代わりにメタページに関連してもよい。粒度が上昇すると、カオス的更新ブロックに対して記録されなければならないエントリ数は減少し、直接インデックスを除去して、単一のＣＢＩセクタがメタブロック毎に使用することができるようになる。
【０２１４】
図２６Ａは、各ページが１つではなく２つのセクタを含む以外は、図２１のメモリ構造と同様のものである。よって、メタページＭＰ0 は、今やデータの２つの論理ユニットを記憶することができる各ページを有することがわかる。各論理ユニットがセクタであれば、論理セクタが、ＬＳ０およびＬＳ１をプレーンＰ０に、ＬＳ３をプレーンＰ１にという具合に、ＭＰ0 内に順次に記憶される。
【０２１５】
図２６Ｂは、模式的に線形に配置されたメモリユニットを有する、図２６Ａに示されているメタブロックを示す。図２１の単一セクタページと比較すると、論理セクタは、２つのセクタが各ページにあるように、４つのページ内に周期的に記憶される。
【０２１６】
一般的に、並列に動作するＷ個のプレーンがあり、ページ毎にＫ個のメモリユニットがあり、メタブロックが論理的な順次順序で充填される場合に、メタブロック内のｋ番目の論理ページは、ｘ＝ｋ’ＭＯＤ  Ｗの場合のプレーンｘにあり、ここでｋ’＝ＩＮＴ（ｋ／Ｋ）である。例えば、プレーンが４つ、すなわちＷ＝４であり、ページ毎に２セクタ、すなわちＫ＝２であれば、ｋ＝５の場合、つまり第５の論理セクタＬＳ５のことだが、図２４Ａに示されているように、２ＭＯＤ  ４によって与えられるプレーン、すなわち、プレーン２内にあるｋとになる。一般的に、前に説明したプレーン配列を実施するために同一の原則が当てはまる。
【０２１７】
前に示した例は、複数プレーンの構成におけるプレーンを有するページ配列についてのものである。複数のセクタを有するページの場合には、ページ内にセクタ配列を維持することも利点となる。このように、検知回路の同一のセットを、同一の論理セクタの互いに異なるバージョンに対して都合よく使用することができる。移転またはあるセクタの「読み出し・変更・書き込み」のような動作が、効率的に行われる。ページ内でセクタ順序を整列する場合に、ページをプレーンに整列するのと同じ技術を使用することができる。また、実施形態によっては、任意の介在ギャップがパディングされてもよいし、されなくてもよい。
【０２１８】
パディングなしの論理ユニットまたはプレーンの配列
図２７は、ある位置から他の位置へコピーすべき論理ユニットをパディングしない、更新ブロック内のプレーン配列のための代替の手法を示す。４つのプレーンのうちの更新ブロックと交差する部分は、ホストから受信するプレーン配列された更新済み論理ユニットを収集する４つのバッファとみなしてもよい。ホストから受信された各論理ユニットは、適切なバッファの次に使用可能なメモリユニット内にパディングすることなくプログラムされる。ホストから受信される論理ユニットアドレスのシーケンスに従って、異なる数の論理ユニットが各プレーンにプログラムされている可能性もある。
【０２１９】
カオス的更新ブロックＭＢ’1 は、ＭＰ’0 の場合のように、論理メタページのすべての論理ユニットの更新済みバージョンを含んでもよい。また、これは、ＭＰ’1 の場合のように、メタページのすべての論理ユニットより少ない論理ユニットを含んでもよい。ＭＰ’1 の場合、失われた論理ユニットＬＳ4 は、対応する元ブロックＭＢ0 から取得することができる。
【０２２０】
この代替の手法は、メモリ構成が各プレーンから任意の論理ページを並列に読み出すことをサポートしている場合に特に効率的である。このように、個々の論理ページが同列からのものでなくても、あるメタページのすべての論理ページを単一の並列読み出し動作で読み出すことができる。
【０２２１】
フェーズ化されたプログラムエラー処理
あるブロック内にプログラム障害がある場合、このブロックに記憶すべきすべてのデータは、典型的には他のブロックに移動され、障害ブロックは不良と印付けされる。障害が生じる動作についてのタイミング仕様によっては、記憶済みデータを他のブロックにさらに移動するのに十分な時間がない場合もある。最悪の場合は、通常のガーベッジコレクション動作中のプログラム障害であり、すべてのデータを他のブロックへ移転するために、他の同様のガーベッジコレクション動作が必要となる。この場合、所定のホスト／メモリ装置の特定の書き込み待ち時間限度が破られることもある。なぜなら、典型的には、２つのガーベッジコレクション動作ではなく１つのガーベッジコレクション動作に対応するように設計されているからである。
【０２２２】
図２８は、統合化動作中に不良ブロックにプログラム障害が生じた場合に、統合化動作が他のブロックに対して繰り返される手法を示す。この例において、ブロック１は、論理グループの完全な論理ユニットを論理的な順次順序で記憶する元ブロックである。図示の目的から、元ブロックは、セクションＡ，Ｂ，Ｃ，およびＤを含み、それぞれは、論理ユニットのサブグループを記憶している。グループのある論理ユニットをホストが更新する場合に、論理ユニットのより新しいバージョンが更新ブロック、すなわちブロック２に記録される。更新ブロックに関連して前に説明したように、ホストによっては、更新は、論理ユニットを順次または非順次（カオス的）順序で記録することもできる。最終的には、更新ブロックは、一杯または何らかの他の理由で閉鎖されて、さらなる更新を受信することができなくなる。更新ブロック（ブロック２）が閉鎖されると、更新ブロックまたは元ブロック（ブロック１）のいずれかにある論理ユニットの現在のバージョンが、新規のブロック（ブロック３）に統合化されて、この論理グループについての新規の元ブロックを形成する。この例は、論理ユニットのより新規のバージョンがセクションＢおよびＤに含まれている更新ブロックを示す。便宜上、セクションＢおよびＤは、ブロック２内であり、必ずしも記録された位置ではないがブロック１内の元の位置に整列する位置に、模式的に示されている。
【０２２３】
統合化動作において、元々はブロック１内にある論理グループのすべての論理ユニットの現在のバージョンは、順次順序で、統合化ブロック（ブロック３）に記録される。よって、セクションＡの論理ユニットがまずブロック１からブロック３へコピーされ、続いてセクションＢの論理ユニットがブロック２からブロック３へコピーされる。この例において、セクションＣの論理ユニットをブロック１からブロック３へコピーする場合には、ブロック３の不良がプログラム障害という結果となる。
【０２２４】
プログラム障害を処理する１つのやり方としては、新規のブロック（ブロック４）に対して統合化処理を再開することである。セクションＡ，Ｂ，Ｃ，およびＤは、ブロック４にコピーされ、その後、不良ブロック３は廃棄される。しかし、これは、２つの統合化動作を並行して行うという意味になってしまい、論理ユニットで一杯の２つのブロックをコピーするという結果となってしまう場合もある。
【０２２５】
メモリ装置は、ある動作を完了させるのに特定の時間的余裕を有している。例えば、ホストがメモリ装置に対して書き込む場合に、書き込み動作が、「書き込み待ち時間」として知られる特定の時間内に完了することが期待されている。メモリカードのようなメモリ装置が、ホストからのデータを書き込むのに忙しい間は、「ＢＵＳＹ」状態をホストに対して知らせる。「ＢＵＳＹ」状態が書き込み待ち期間よりも長く続く場合には、ホストは、書き込み動作をタイムアウトして、例外またはエラーを書き込み動作に対して登録する。
【０２２６】
図２９は、書き込み（更新）動作および統合化動作を完了するのに十分な時間を取れるようなタイミングまたは書き込み待ち時間を伴うホスト書き込み動作を模式的に示す。ホスト書き込み動作は、ホストデータを更新ブロックに書き込む更新動作９７２（図２９（Ａ））を完了するのに十分な時間を提供することになる書き込み待ち時間ＴW を有する。前にブロック管理システムにおいて説明したように、更新ブロックに対するホスト書き込みは、統合化動作をトリガする場合がある。よって、タイミングは、更新動作９７２に加えて、統合化動作９７４（図２９（Ｂ））も考慮している。しかし、失敗した動作に応答して統合化処理を新規に再開しなければならないとすると、非常に多くの時間がかかり、指定された書き込み待ち時間を超える場合がある。
【０２２７】
本発明の他の態様によれば、ブロック管理システムを伴うメモリにおいて、時間が重視されるメモリ動作中のブロック内のプログラム障害が、ブレークアウトブロック内のプログラミング動作を継続することによって処理される。後のあまり危機的でないときに、中断前に障害ブロック内に記憶されたデータは他のブロックに転送され、この他のブロックもブレークアウトブロックであってもよい。その後、障害ブロックを廃棄することができる。このように、不良ブロックが生じる場合に、データを失うこともなく、不良ブロック内に記憶されたデータを直ちに転送しなければならないことによって指定された時間制限を超えることもなく、不良ブロックを処理することができる。このエラー処理は、危機的な最中にすべての動作を新規のブロックに対して繰り返す必要がないようにするために、ガーベッジコレクション動作にとっては特に重要である。その後、都合のよいときに、不良ブロックからのデータは、他のブロックへ移転されることによって復旧される。
【０２２８】
図３０は、本発明の一般的な手法に係る、プログラム障害処理のフローチャートを示す。
ステップ１００２：不揮発性メモリをブロックに組織化し、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリは、データの論理ユニットを記憶するためのものである。
プログラム障害処理（第１のフェーズ）
ステップ１０１２：データの論理ユニットのシーケンスを第１のブロックに記憶する。
ステップ１０１４：数多くの論理ユニットを記憶した後の第１のブロックにおける記憶障害に応じて、後続の論理ユニットを第１のブロック用のブレークアウトブロックとしての役割を果たす第２のブロックに記憶する。
プログラム障害処理（最終のフェーズ）
ステップ１０２０：予め定められたイベントに応じて、第１のブロック内に記憶された論理ユニットを第３のブロックへ転送し、第３のブロックは、第２のブロックと同一であってもなくてもよい。
ステップ１０２２：第１のブロックを破棄する。
【０２２９】
図３１Ａは、第３の（最終移転）ブロックが第２の（ブレークアウト）ブロックとは異なる、プログラム障害処理の一実施形態を示す。フェーズＩにおいて、論理ユニットのシーケンスが、第１のブロックに記録されている。論理ユニットがホスト書き込みからであれば、第１のブロックは、更新ブロックであるとみなされてもよい。論理ユニットが統合化動作またはコンパクト化動作からであれば、第１のブロックは、移転ブロックであるとみなされてもよい。ある時点でブロック１にプログラム障害が発生すると、ブレークアウトブロックとして機能する第２のブロックが提供される。ブロック１に記録することができなかった論理ユニットおよび任意の後続の論理ユニットは、代わりにブレークアウトブロック上に記録される。このように、障害ブロック１およびそこにあるデータを置き換えるのに追加の時間を必要としない。
【０２３０】
中間フェーズＩＩにおいて、シーケンスのすべての記録済み論理ユニットは、ブロック１およびブロック２から取得可能である。
最終フェーズＩＩＩにおいて、障害ブロック１およびそこにあるデータは、論理ユニットを移転ブロックとしての役割を果たすブロック３へ移転させることによって置き換えられる。よって、障害ブロック内のデータは復旧され、その後、障害ブロックを廃棄することができる。最終フェーズは、任意の同時期のメモリ動作のタイミングと衝突しないように時間調整される。
【０２３１】
この実施形態において、移転ブロック３は、ブレークアウトブロック２とは別のものである。これは、中間フェーズ中に追加の論理ユニットをブレークアウトブロックに記録していた場合には都合がよい。よって、ブレークアウトブロックは更新ブロックに変化し、不良ブロックから論理ユニットを移転するには適さない。
【０２３２】
図３１Ｂは、第３の（最終移転）ブロックが第２の（ブレークアウト）ブロックと同一である、プログラム障害処理の他の実施形態を示す。フェーズＩおよびＩＩは、図３１Ａに示されている第１の実施形態と同様である。しかし、フェーズＩＩＩにおいて、不良ブロック１からの論理ユニットは、ブレークアウトブロック２へ移転される。これは、以前の書き込み動作の元シーケンス以外の追加の論理ユニットをブレークアウトブロック２に記録していない場合には都合がよい。このように、この論理ユニットを記憶するために必要なブロックが最小限となる。
【０２３３】
統合化中のプログラム障害処理のための実施形態
プログラム障害処理は、統合化動作中には特に重要である。通常の統合化動作は、元ブロックおよび更新ブロック内にある論理グループのすべての論理ユニットの現在のバージョンを統合化ブロックに統合化する。統合化動作中に、統合化ブロック内にプログラム障害が生じると、残りの論理ユニットの統合化を受け入れるために、ブレークアウト統合化ブロックとして機能する他のブロックが提供されることとなる。このように、１回より多くコピーをする必要のある論理ユニットはなく、例外処理を伴う動作も、通常の統合化処理について指定された期間内に完了することができる。好都合なときには、グループのすべての未処理の論理ユニットをブレークアウトブロックに統合化することによって、統合化動作を完了することができる。好都合なときとは、統合化を行う時間があるときに、現在のホスト書き込み動作以外の何らかの他の期間中のことを指すことになる。このような好都合なときの１つとして、更新はあるが、関連する統合化処理がない場合の他のホスト書き込み中が挙げられる。
【０２３４】
基本的には、プログラム障害処理を伴う統合化は、複数のフェーズ内で実施されるものとみなされる。第１のフェーズにおいて、各論理ユニットを１回より多く統合化することを避けるために、論理ユニットは、プログラム障害が生じた後に、１つより多くのブロックに統合化されている最中である。最終フェーズは、好都合なときに完了し、その際に、論理グループは、好ましくはすべての論理ユニットをブレークアウト統合化ブロックに順次順序で収集することによって、１つのブロックに統合化される。
【０２３５】
図３２Ａは、統合化処理となる最初の更新動作のフローチャートを示す。
ステップ１１０２：ブロックに組織化された不揮発性メモリを組織化し、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリは、データの論理ユニットを記憶するためのものである。
ステップ１１０４：データを複数の論理グループに組織化し、各論理グループは、あるブロック内に記憶可能な論理ユニットのグループである。
ステップ１１１２：論理ユニットにパッケージ化されたホストデータを受信する。
ステップ１１１４：論理グループの論理ユニットの第１のバージョンを第１の順序に従って第１のブロックに記憶することによって、論理グループの元ブロックを作成する。
ステップ１１１６：論理グループの論理ユニットの後続のバージョンを含む第２のブロックに第２の順序に従って記憶することによって、論理グループの更新ブロックを作成する。
ステップ１１１９：前述した章において説明したような予め定められたイベントにおいて、様々なブロック内の論理ユニットの現在のバージョンを収集して新規のブロックに再記録するために、ガーベッジコレクションが行われる。
【０２３６】
図３２Ｂは、本発明の好ましい実施形態に係る、複数フェーズ統合化動作のフローチャートを示す。
統合化障害処理（フェーズＩ）
エラー処理を伴う統合化であるフェーズＩ動作１１２０は、ステップ１１２２およびステップ１１２４からなる。
ステップ１１２２：論理グループの論理ユニットの現在のバージョンを第３のブロックに第１の順序と同様に記憶することによって、論理グループについての統合化ブロックを作成する。
ステップ１１２４：統合化ブロックにおける記憶障害に応じて、前記第３のブロックにはない論理グループの論理ユニットを第４のブロックに第１の順序と同様に記憶することによって、ブレークアウト統合化ブロックを提供する。
【０２３７】
ブロック１および２内のデータは、ブロック３およびブロック４へ転送されているので、ブロック１および２は、空間を開放するために消去することができる。好ましい実施形態において、ブロック２をＥＢＬ（消去済みブロックリスト、図１８参照）へ直接開放して、再利用することができる。ブロック１は、これが閉鎖更新ブロックであり、対応するＧＡＴエントリが指し示す他のブロックがある場合にのみ開放される。
基本的に、ブロック３は、論理グループについての元ブロックとなり、ブロック４は、ブロック３についての置換順序更新ブロックとなる。
フェーズＩ統合化が完了すると、メモリ装置は、ＢＵＳＹ信号を発行することによってその旨ホストに対して通知する。
【０２３８】
中間動作（フェーズＩＩ）
フェーズＩＩ中間動作１１３０は、フェーズＩＩＩ統合化動作１１４０の前に生じてもよい。ステップ１１３２，１１３４，１１３６のいずれか１つによって与えられるような、数多くの予想される場合が可能である。
ステップ１１３２：論理グループの書き込み動作において、更新ブロックとしての第４のブロック（ブレークアウト統合化ブロック）に対して書き込みを行う。
【０２３９】
ホストがこの元論理データへ書き込みを行うと、ブレークアウト統合化ブロックであり、置換順次更新ブロックの役割を現在まで担ってきたブロック４が、通常の更新ブロックとして使用されることになる。ホスト書き込みによっては、順次的のままである場合もあるし、カオス的状態に変化している場合もある。更新ブロックとして、先の好ましい実施形態において説明したように、何らかの時点で、他のカオス的ブロックの閉鎖をトリガする。
ホストが他の論理グループに書き込むと、フェーズＩＩＩ動作に直接進む。
ステップ１１３４：または、読み出し動作において、論理グループについての元ブロックとしての第３のブロックと、更新ブロックとしての第４のブロックと共にメモリを読み出す。
【０２４０】
この場合、セクションＡおよびＢからの論理ユニットは、論理グループの元ブロックとしてのブロック３から読み出されることとなり、セクションＣおよびＤからの論理ユニットは、グループの更新ブロックとしてのブロック４から読み出されることとなる。セクションＡおよびＢのみがブロック３から読み出すことができるので、プログラミングが失敗したページに対するアクセスはないことになり、その後の未書き込み部分に対するアクセスもないことになる。フラッシュメモリ内のＧＡＴディレクトリはまだ更新されておらず、元ブロックとしてブロックＩをまだ指し示してはいるが、そこから読み出されるデータはなく、ブロック自体はそれ以前に消去されている。
【０２４１】
中間フェーズの他の可能性として、論理グループ内の論理ユニットのホスト読み出しが挙げられる。この場合、セクションＡおよびＢからの論理ユニットは、論理グループの元ブロックとしてのブロック３から読み出されることとなり、セクションＣおよびＤからの論理ユニットは、グループの順次更新ブロックとしてのブロック４から読み出されることとなる。
ステップ１１３６：または、電源投入初期化の際に、第１から第４のブロックのいずれかをその内容を走査することによって再識別する。
【０２４２】
中間フェーズに関する他の可能性として、メモリ装置の電源が落とされて、その後に再始動される場合が挙げられる。前に説明したように、電源投入初期化中に、割り当てブロックリスト（消去プールのブロックが使用される、図１５および図１８参照）内のブロックが走査されて、特別な状態の元ブロック（ブロック３）となった不良統合化ブロックと、論理グループに関する関連する順次更新ブロック（ブロック４）とを識別する。関連するブロックはプログラムエラーが生じている元ブロック（ブロック３）である旨を、ブレークアウトブロック（ブロック４）の第１の論理ユニット内のフラグが示すことになる。ブロックディレクトリ（ＧＡＴ）を調べることによって、その後、ブロック３を位置決定することができる。
【０２４３】
一実施形態において、ブレークアウト統合化ブロック（ブロック４）内の第１の論理ユニットにフラグがプログラムされている。これは、論理グループの特別な状態、すなわちブロック３およびブロック４という２つのブロックに統合化されていることを示すのに役立つ。
【０２４４】
フラグを使用して不良ブロックを有する論理グループを識別する代替の手法としては、元ブロックが一杯となるほどこのブロックが一杯ではない（最終ページにエラーが生じて、最終ページにＥＣＣエラーがない場合を除いて）という特性によって、走査中にブロックが不良であることを検出することが挙げられる。また実施によっては、ブレークアウト統合化ブロック（ブロック４）に書き込まれた第１のセクタのヘッダ領域内の単なるフラグではなく、フラッシュメモリ内の制御データ構造内に記憶された障害グループ／ブロックについての情報記録がある場合がある。
統合化完了（フェーズＩＩＩ）
ステップ１１４２：予め定められたイベントに応じて、第４のブロックがフェーズＩ以来さらに記録されることがなかった場合である第１の場合には、論理グループのすべての未処理の論理ユニットの現在のバージョンを第１の順序と同様に記憶し、第４のブロックがフェーズＩ以来さらに記録されることがあった場合である第２の場合には、第３および第４のブロックを第５のブロックに統合化する。
ステップ１１４４：その後、第１の場合には、論理グループについての元ブロックとしての統合化された第４のブロックと共にメモリを動作させ、第２の場合には、論理グループの元ブロックとしての第５のブロックと共にメモリを動作させる。
【０２４５】
何らかの特定の時間的制限を違反しない機会があるときはいつでも、フェーズＩＩＩにおける最終統合化が実施される。好ましい時機としては、統合化動作を伴わない他の論理グループへの更新動作がある場合に、次のホスト書き込みスロットに「便乗する (piggy-back) 」ことが挙げられる。他の論理グループへのホスト書き込みがガーベッジコレクション自体をトリガする場合には、フェーズＩＩＩの統合化は延期される。
【０２４６】
図３３は、複数フェーズ統合化動作の最初および最後のフェーズのタイミング例を示す。ホスト書き込み遅延は、期間ＴW を伴う各ホスト書き込み時間スロットの幅である。ホスト書き込み１は、単純な更新であり、論理グループＬＧ1 内の論理ユニットの第１のセットの現在のバージョンが関連する更新ブロック上に記録される。
【０２４７】
ホスト書き込み２において、論理グループＬＧ1 に対する他の更新が生じて、更新ブロックが閉鎖される結果となる（例えば、一杯で）。新規の更新ブロックが、残りの更新を記録するために提供されることになる。新規の更新ブロックの提供によって、ガーベッジコレクションがトリガされて、ブロックの再利用のためにリサイクルするために、ＬＧ4 に対して統合化動作が生じる結果となる場合がある。ＬＧ4 グループの現在の論理ユニットは、統合化ブロック上に順次順序で記録中である。統合化動作は、統合化ブロック内に不良が生じるまで進む。その後、フェーズＩの統合化が呼び出されて、統合化処理はブレークアウト統合化ブロックに対して継続する。その間、ＬＧ4 の最終統合（フェーズＩＩＩ）は、次の機会を待つ。
【０２４８】
ホスト書き込み３において、論理グループＬＧ2 の論理ユニットの書き込みも生じて、ＬＧ2 についての統合化をトリガする。これは、時間スロットが既に完全に使用されていることを意味する。
ホスト書き込み４において、動作は、ＬＧ2 のいくつかの論理ユニットをその更新ブロックに単に記録するだけである。時間スロット内の余った時間は、ＬＧ4 の最終統合化を実行する機会を提供する。
【０２４９】
ブレークアウト統合化ブロックが更新ブロックに変換されない実施形態
図３４Ａおよび図３４Ｂは、図２８および図３１における例に対して適用した、複数のフェーズ統合化のフェーズＩおよびフェーズＩＩＩ動作に関する第１の場合をそれぞれ示す。
図３４Ａは、ブレークアウト統合化ブロックが、更新ブロックとしてよりも、統合化処理が中断された統合化ブロックとして使用される場合を示す。特に、図３４Ａは、ホストが論理グループＬＧ1 に属する論理ユニットの更新を書き込むものであり、その動作によって他の論理グループＬＧ4 に関連したブロックの統合化もトリガされる、図３３に示されているホスト書き込み＃２を参照している。
【０２５０】
元ブロック（ブロック１）および更新ブロック（ブロック２）の形成は、図２８における例と同様の手法で行われる。同様に、統合化動作中に、統合化ブロック（ブロック３）には、セクションＣ内の論理ユニットを統合化するポイントにおいて障害があることがわかる。しかし、図２８に示されている統合化手法とは異なり、この複数フェーズ手法は、統合化動作を、ブレークアウト統合化ブロックとしての役割を果たす新規に与えられたブロック（ブロック４）に対して行い続ける。よって、フェーズＩの統合化動作において、セクションＡおよびＢ内の論理ユニットは、統合化ブロック（ブロック３）内に統合化されている。セクションＣおよびＤ内の残りの論理ユニットは、プログラム障害が統合化ブロック内で生じると、ブレークアウト統合化ブロック（ブロック４）へ順次にコピーされる。
【０２５１】
第２の論理グループに関連したブロックの統合化動作をトリガする第１の論理グループにおける更新をホストが本来書き込む場合は、第１の論理グループの更新は、第１の論理グループについての更新ブロック（典型的には、新規の更新ブロック）に記録される。この場合、ブレークアウト統合化ブロック（ブロック４）は、統合化動作外のどの更新データを記録するのにも使用されず、未だ完了されていないブレークアウト統合化ブロックのままである。
【０２５２】
ブロック１および２内のデータは他のブロック（ブロック３および４）内に今や完全に含まれているので、リサイクルのために消去することができる。アドレステープル（ＧＡＴ）は更新されて、ブロック３を論理グループについての元ブロックとして示す。更新ブロックについてのディレクトリ情報（ＡＣＬ内、図１５および図１８参照）も更新されて、論理グループ（例えば、ＬＧ4 ）についての順次更新ブロックとなったブロック４を示す。
【０２５３】
その結果、統合化された論理ブロックは、１つのブロックに局在化せず、不良統合化ブロック（ブロック３）およびブレークアウト統合化ブロック（ブロック４）に渡って分散される。この手法の重要な特徴は、１つより多いブロックに渡って統合化を分散させる代償として、グループ内の論理ユニットはこのフェーズにおいて１回統合化されるだけであるということである。このように、統合化動作は、通常の指定された時間内に完了することができる。
【０２５４】
図３４Ｂは、図３４Ａで開始された複数フェーズ統合化の第３および最終フェーズを示す。図３３に関連して説明したように、フェーズＩＩＩの統合化は、付随する統合化動作をトリガしない後続のホスト書き込み中といった、第１のフェーズ後の好都合なときに実行される。特に、図３４Ｂは、図３３に示されているホスト書き込み＃４が生じる時間スロットを示す。その期間中に、ホスト書き込みは、他の追加の統合化動作をトリガしない論理グループＬＧ2 に属する論理ユニットを更新する。よって、時間スロット内の余った時間は、論理グループＬＧ4 の統合化の完了のためのフェーズＩＩＩ動作のために好都合に使用することができる。
【０２５５】
この動作により、既にブレークアウトブロック内にないＬＧ4 のすべての未処理の論理ユニットをブレークアウトブロックに統合化する。この例において、これは、セクションＡおよびＢがブロック３からブレークアウトブロック（ブロック４）へ論理的な順次順序でコピーされることになることを意味する。ブロック内での論理ユニットの折り返し手法およびページタグ（図３Ａ）の使用を考慮して、この例では、ブロック４内において、セクションＡおよびＢがセクションＣおよびＤの後に記録されているように示されているにもかかわらず、記録済みのシーケンスは、Ａ，Ｂ，Ｃ，およびＤという順次順序と同等であるとみなされることになる。実施によっては、コピーすべき未処理の論理ユニットの現在のバージョンは、ブロック３では既に統合化の形式となっているので、ブロック３から取得されるのが好ましいが、消去されていなければブロック１およびブロック２から収集されてもよい。
【０２５６】
ブレークアウトブロック（ブロック４）に対する最終統合化が完了した後、この論理グループの元ブロックと指定されることになり、適切なディレクトリ（例えば、ＧＡＴ、図１７Ａ参照）がそれに従って更新されることになる。同様に、障害物理ブロック（ブロック３）は、不良と印付けされ、マッピングからはずされる。他のブロックであるブロック１およびブロック２は消去されてリサイクルされる。その間、ＬＧ2 の更新がＬＧ2 に関連した更新ブロック内に記録される。
【０２５７】
ブレークアウト統合化ブロックが更新ブロックに変更されない場合の実施形態
図３５Ａおよび図３５Ｂは、図２８および図３３における例に対して適用した、複数のフェーズ統合化のフェーズＩおよびフェーズＩＩＩ動作に関する第２の場合をそれぞれ示す。
図３５Ａは、ブレークアウト統合化ブロックが、統合化ブロックとしてよりも、ホスト書き込みを受け取る更新ブロックとして保持される場合を示す。これは、例えば論理グループＬＧ4 を更新し、その処理において同一の論理グループ内の統合をもトリガするホスト書き込みに適用可能である。
【０２５８】
図３４Ａの場合のように、ブロック１およびブロック２のブロック３への統合化は、セクションＣを処理中にプログラム障害が発生するまで進む。その後、統合化は、ブレークアウト統合化ブロック（ブロック４）へ続く。未処理の論理ユニット（例えば、セクションＣおよびＤ）がブレークアウトブロック（ブロック４）に統合化された後に、フェーズＩＩＩにおいて論理グループの統合化の完了を待つ代わりに、ブレークアウトブロックは更新ブロックとして保持される。この場合は、ホスト書き込みが論理グループを更新して、同一の論理グループの統合化をトリガする場合に、特に適用可能である。この例において、これにより、論理グループＬＧ4 についてのホスト更新の記録を、新規の更新ブロックに記録する代わりに、ブレークアウト統合化ブロック（ブロック４）内に記録することができる。（以前はブレークアウト統合化ブロック（ブロック４）であった）更新ブロックは、記録されたホストデータによっては、順序的であることも、またはカオス的になることもある。図に示されている例において、セクションＣ内の論理ブロックの後続の新規のバージョンがブロック４内の以前のバージョンを廃止するので、ブロック４はカオス的に変化している。
中間フェーズ中に、ブロック３は、ＬＧ4 についての元ブロックとみなされることになり、ブロック４は、関連する更新ブロックとなる。
【０２５９】
図３５Ｂは、第２の場合について図３５Ａにおいて開始した複数のフェーズ統合化の第３および最終フェーズを示す。図３３に関連して説明したように、フェーズＩＩＩの統合化は、付随する統合化動作をトリガしない後続のホスト書き込み中といった、第１のフェーズ後の好都合なときに実行される。その期間中に、ホスト書き込みは、統合化動作をトリガしない論理グループに属する論理ユニットを更新する。よって、時間スロット内の余った時間は、論理グループＬＧ4 の統合化の完了のためのフェーズＩＩＩ動作のために好都合に使用することができる。
【０２６０】
その後、論理ブロックＬＧ4 は、ブロック３および４から新規の統合化ブロック（ブロック５）へガーベッジコレクションされる。その後、ブロック３は不良と印付けされ、ブロック４はリサイクルされて、新規の統合化ブロック（ブロック５）が論理グループＬＧ4 についての新規の元ブロックになる。ブロック１およびブロック２という他のブロックも、消去されリサイクルされる。
【０２６１】
フェーズ化されたプログラム障害処理の他の実施形態
図３１Ａ，３１Ｂ，３４Ａ，３４Ｂ，３５Ａ，および３５Ｂにおいて説明した例は、同一の論理グループに属する論理ユニットのみを記憶する各物理ブロック（メタブロック）を有する、好ましいブロック管理システムに当てはまる。本発明は、例えば、国際公開特許出願第ＷＯ０３／０２７８２８号（特許文献１４）および国際公開特許出願第ＷＯ００／４９４８８号（特許文献１５）に開示されているような、物理ブロック配列する論理グループがない他のブロック管理システムにも等しく適用可能である。フェーズ化されたプログラム障害処理方法を他のシステムに対して実施するいくつかの例を、図３６Ａ，３６Ｂ，および３６Ｃに示す。
【０２６２】
図３６Ａは、ホスト書き込みが更新ブロックの閉鎖をトリガし、かつ更新ブロックが順次的な場合に適用されるような、フェーズ化されたプログラムエラー処理方法を示す。この場合の閉鎖は、残りの有効データ（ＢおよびＣ）を元のブロック２から順次更新ブロック３へコピーすることによって行われる。データ部分Ｃのプログラミングの開始時におけるプログラム障害の場合、部分Ｃは、確保していたブロック４へプログラムされることになる。その後、新規のホストデータは、新規の更新ブロック５（図示せず）に書き込むことができる。この方法のフェーズＩＩおよびＩＩＩは、カオス的ブロック閉鎖の場合と同一である。
【０２６３】
図３６Ｂは、更新ブロックの更新の場合の（部分的ブロックシステム）に適用可能であるような、フェーズ化されたプログラムエラー処理方法を示す。この場合、論理グループは、元ブロック１と他の更新ブロックとに記憶される。統合化動作には、更新ブロックのうちの１つ（何らかの規則に従って選ばれる、図ではブロック３）に対して、元ブロック１および他の更新ブロック２からデータをコピーすることが含まれる。既に説明した基本的な場合との違いは、ブロック３が既に部分的に書き込まれていることである。
【０２６４】
図３６Ｃは、メタブロックにマッピングされた論理グループをサポートしないメモリブロック管理システムにおける、フェーズ化されたプログラムエラー処理、ガーベッジコレクション動作、またはクリーンアップを示す。このようなメモリブロック管理（周期的記憶）システムは、国際公開特許出願第ＷＯ０３／０２７８２８号（特許文献１４）に記載されている。周期的な記憶システムの際立った特徴は、ブロックが１つの論理グループに割り当てられるのではないということである。メタブロック内の制御データについての複数の論理グループ化をサポートしている。ガーベッジコレクションは、無関係なこともある（ランダム論理ブロックアドレス）有効データセクタを、既に何らかのデータを有している場合もある部分的に廃止されたブロックから移転ブロックへ取り出すことを伴う。移転ブロックが動作中に一杯になると、他のブロックが開放される。
【０２６５】
非順次更新ブロックのインデックス付け
図１６Ａ〜１６Ｅに関連したカオス的ブロックのインデックス付けについての先の章において、ＣＢＩセクタが、カオス的または非順次的更新ブロック内にランダムに記憶された論理セクタの位置を追跡するインデックスを記憶するために使用される。
【０２６６】
本発明の他の態様によれば、非順次論理ユニットを有する更新ブロックをサポートするブロック管理システムを伴う不揮発性メモリにおいて、ＲＡＭにバッファされた更新ブロック内の論理ユニットのインデックスが、不揮発性メモリ内に周期的に記憶される。一実施形態において、インデックスは、インデックスを記憶する専用のブロック内に記憶される。他の実施形態において、インデックスは、更新ブロック自体に記憶される。さらに他の実施形態において、インデックスは、各論理ユニットのヘッダ内に記憶される。他の態様において、最終のインデックス更新の後だが次の分の前に書き込まれた論理ユニットは、インデックス付け情報を各論理ユニットのヘッダ内に記憶させる。このように、停電後に、初期化中に走査を実行する必要なく、最近書き込まれた論理ユニットの位置を決定することができる。さらに他の態様において、ブロックは、部分的に順次にかつ部分的に非順次に、１つより多い論理サブグループを対象として管理される。
【０２６７】
所定のトリガイベント後のＣＢＩブロック内のＣＢＩセクタ内に記憶されたインデックスポインタ
図１６Ａ〜１６Ｅに関連して説明した手法によれば、カオス的ブロック内の最近書き込み済みのセクタのリストは、コントローラＲＡＭ内に保持される。直近のインデックス付け情報を含むＣＢＩセクタは、所定のカオス的ブロックに関連した論理ブロックへの所定数の書き込みの後にのみ、フラッシュメモリ（ＣＢＩブロック６２０）に書き込まれる。このようにして、ＣＢＩブロックに対する更新の回数を減少する。
【０２６８】
ある論理グループについてのＣＢＩセクタの次の更新に先立って、論理グループについての最近書き込み済みのセクタのリストがコントローラＲＡＭ内に保持される。メモリ装置が電源遮断にあった場合にはリストは失われるが、電源投入後の初期化時に更新済みブロックを走査することによって再構築することができる。
【０２６９】
図３７は、同一の論理グループのＮ回毎のセクタ書き込み後に、関連するカオス的インデックスセクタブロックへのＣＢＩセクタの書き込みのスケジュールの一例を示す。この例は、２つの論理グループＬＧ3 およびＬＧ11が並行更新を受けていることを示す。最初に、ＬＧ3 の論理セクタが順次順序で元ブロックに記憶されている。グループ内の論理セクタの更新は、ホストによって支持された順序で、関連する更新ブロックに記録される。この例は、カオス的更新シーケンスを示す。並行して、論理グループＬＧ11も、その更新ブロックにおいて同様のやり方で更新されている。各論理セクタ書き込みの後、更新ブロック内のその位置は、コントローラＲＡＭ内に保持される。各所定のトリガイベントの後、更新ブロック内の論理セクタの現在のインデックスが、カオス的インデックスセクタの形式で、不揮発性のカオス的インデックスセクタブロックへ書き込まれる。例えば、Ｎ回毎の書き込みの後に所定のトリガイベントが生じ、ここで、Ｎは３であってもよい。
【０２７０】
提示された例は、セクタとしてのデータの論理ユニットを伴うものとしたが、当業者が、論理ユニットをセクタまたはセクタのグループを含むページのような何らかの他の集合体でありうると認識することになる。また、順次ブロックの最初のページは、必ずしも論理ページ０である必要はない。なぜなら、ページタグの折り返しがある場合があるからである。
【０２７１】
所定のトリガイベント後のカオス的更新ブロック内のＣＢＩセクタに記憶されたインデックスポインタ
他の実施形態において、インデックスポインタは、Ｎ回毎の書き込みの後に、カオス的更新ブロック内の専用のＣＢＩセクタ内に記憶される。この手法は、インデックスもＣＢＩセクタ内に記憶する場合の前述した実施形態と同様である。先の実施形態において異なる点は、ＣＢＩセクタはＣＢＩセクタブロックに記録され、更新ブロック自体には記録されないことである。
【０２７２】
この方法は、すべてのカオス的ブロックインデックス付け情報をカオス的更新ブロック自体に保持することに基づく。図３７Ａ，３７Ｂ，および３７Ｃは、３つの異なる段階においてＣＢＩセクタをも記憶する更新ブロックの状態をそれぞれ示す。
【０２７３】
図３８Ａは、所定数の書き込みの後にＣＢＩセクタが記録される時点までの更新ブロックを示す。この例において、ホストが論理セクタ０〜３を順次書き込んだ後に、論理セクタ１の他のバージョンを書き込むためのコマンドを発行し、よってデータ書き込みの連続シーケンスを破断させる。その後、更新ブロックは、ＣＢＩセクタ内に保持されたカオス的ブロックインデックスの実施を伴うカオス的更新ブロックに変換される。前述したように、ＣＢＩは、カオス的ブロックのすべての論理セクタについてのインデックスを含むインデックスである。例えば、０番目のエントリは、０番目の論理セクタについての更新ブロック内のオフセットを示し、同様に、ｎ番目のエントリは、ｎ番目の論理セクタについてのオフセットを示す。ＣＢＩセクタは、更新ブロック内の次に利用可能な位置に書き込まれる。頻繁なフラッシュアクセスを回避するために、ＣＢＩセクタは、Ｎ回毎のデータセクタの書き込みの後、書き込まれる。この例において、Ｎは４である。この時点で電力が失われると、最終書き込みセクタはＣＢＩセクタとなり、ブロックは、カオス的更新ブロックとみなされることになる。
【０２７４】
図３８Ｂは、インデックスセクタの後に論理セクタ１，２，および４がさらに記録される、図３８Ａの更新ブロックを示す。論理セクタ１および２の新規のバージョンが、更新ブロック内に以前に記録された古いバージョンに取って代わる。この時点での電力周期の場合、最終書き込みセクタを最初に見つける必要があり、その後、最終書き込みインデックスセクタおよび最近書き込まれたデータセクタを見つけるために、Ｎ個のセクタを走査する必要がある。
【０２７５】
図３８Ｃは、インデックスセクタの次の記録をトリガするために他の論理セクタが書き込まれる、図３８Ｂの更新ブロックを示す。他のＮ（Ｎ＝４）個のセクタ書き込みの後に同じ更新ブロックが、ＣＢＩセクタの他の現在のバージョンを記録する。
【０２７６】
この手法の利点は、ＣＢＩブロックを分離する必要性をなくすことである。同時に、物理フラッシュセクタのオーバーヘッドデータ領域が、カオス的更新ブロック内の有効セクタに対するインデックスについて必要とされるエントリ数を収容することができるほど大きいかどうかを心配する必要はない。カオス的更新ブロックは、その後、すべての情報を含み、アドレス変換のための外部データを必要としない。これにより、ＣＢＩブロックのコンパクト化に関連する制御更新の数を減少させ、かつカスケード制御更新を短縮させる、単純なアルゴリズムとなる（ＣＢＩブロック管理についての前述した章を参照）。
【０２７７】
カオス的更新ブロック内のデータセクタヘッダに記憶された、最近書き込み済みのセクタについての情報
本発明の他の態様によれば、あるブロックに記録された論理ユニットのインデックスは、Ｎ回毎の書き込みの後、不揮発性メモリ上に記録され、中間書き込みの論理ユニットについての現在の情報は、書き込まれた各論理ユニットのオーバヘッド部分に記憶される。このように、電力が再開した後に、最終インデックス更新以来書き込まれた論理ユニットについての情報が、ブロックを走査する必要なく、ブロック内の最終書き込み論理ユニットのオーバーヘッド部分から即座に取得することができる。
【０２７８】
図３９Ａは、カオス的更新ブロック内の各データセクタのヘッダに記憶されている中間書き込みについての中間インデックスを示す。
【０２７９】
図３９Ｂは、書き込まれた各セクタのヘッダ内に中間書き込みについての中間インデックスを記憶する一例を示す。この例において、４つのセクタＬＳ0 〜ＬＳ3 が書き込まれた後、ＣＢＩインデックスが、ブロック内の次のセクタとして書き込まれる。その後、論理セクタＬＳ’1 ，ＬＳ’2 ，およびＬＳ’4 がブロックに書き込まれる。その度に、ヘッダは、最終ＣＢＩインデックス以来書き込まれた論理ユニットについての中間インデックスを記憶する。よって、ＬＳ’2 内のヘッダは、最終ＣＢＩインデックスのオフセット（すなわち、位置）を与えると共にＬＳ’1 のオフセットも与えるインデックスを有することとなる。同様に、ＬＳ4 におけるヘッダは、最終ＣＢＩインデックスのオフセットを与えると共にＬＳ’1 およびＬＳ’2 のオフセットも与えるインデックスを有することになる。
【０２８０】
最終書き込み済みデータセクタは、Ｎ個の最終書き込み済みページ（すなわち、最終書き込み済みＣＢＩセクタまで）についての情報を常に含む。電力再開があるときにはいつでも、最終ＣＢＩインデックスは、ＣＢＩインデックスセクタ以前に書き込まれた論理ユニットについてのインデックス付け情報を提供し、後続の論理ユニットについてのインデックス情報は、最終書き込みデータセクタのヘッダ内に見つけられる。これには、初期化の際に、後続の書き込み済みセクタについてのブロックを走査してその位置を決定する必要がない点で有利である。
【０２８１】
中間インデックス情報をデータセクタのヘッダに記憶する手法は、ＣＢＩインデックスセクタを更新ブロック自体に記憶させるか、または前述した章で説明したような別個のＣＢＩセクタブロック内に記憶させるどうかについて等しく適用可能である。
【０２８２】
カオス的更新ブロック内のデータセクタヘッダ内に記憶されたインデックスポインタ
他の実施形態において、全ＣＢＩインデックスは、カオス的更新ブロック内の各データセクタのオーバーヘッド部分に記憶される。
図４０は、カオス的更新ブロック内の各データセクタのヘッダに記憶されているカオス的インデックスフィールド内の情報を示す。
【０２８３】
セクタヘッダの情報容量は限られているので、任意の１つのセクタによって提供されるインデックスの範囲は、階層的なインデックス付け手法の一部として設計されてもよい。例えば、メモリの特定のプレーン内におけるセクタが、このプレーン内のセクタのみに対してインデックス付けを提供してもよい。また、論理アドレスの範囲は、複数の副範囲に分割されてもよく、これによって、間接的インデックス付け手法を採用することができる。例えば、６４個の論理アドレスを有するセクタがあるプレーンに記憶されてもよい場合に、各セクタがセクタオフセット値についての３つのフィールドを有してもよく、各フィールドは４つのオフセット値を記憶することができる。第１のフィールドは、論理オフセット範囲０〜１５，１５〜３１，３２〜４７，および４８〜６３内の最終書き込みセクタについての物理オフセットを規定する。第２のフィールドは、それぞれが関連する範囲内にある４つのセクタの４つの副範囲についての物理オフセット値を規定する。第３のフィールドは、関連する副範囲内の４つのセクタについての物理オフセット値を規定する。したがって、カオス的更新ブロック内の論理セクタの物理オフセットは、３つのセクタまでからの間接オフセット値を読み出すことによって決定されてもよい。
【０２８４】
この手法の利点は、別個のＣＢＩブロックまたはＣＢＩセクタに対する必要性もなくすことにある。しかし、物理フラッシュセクタのオーバーヘッドデータ領域がカオス的更新ブロック内の有効セクタに対するインデックスに必要なエントリ数を収容することができるのに十分なほど大きい場合にのみ適用されてもよい。
【０２８５】
カオス的更新ブロックについての論理グループ内の限られた論理範囲
ある論理グループ内において、非順次に書き込み可能なセクタの論理範囲が減少される。この手法の主な利点は、この範囲外のセクタが元ブロック内に順次書き込みされ続け、（コピー元およびコピー先が整列していることを条件として、そうでなければ、他の読み出しが必要となる場合もある）コピー先ページについてのすべてのデータを得るためには１つのマルチセクタページ（マルチチップの場合には複数ページの並列的な読み出しの場合もある）だけを読み出せばよいので、順次書き込み済みデータのコピーの方が早く行えるので、ガーベッジコレクションをはるかに短時間に行えることである。また、順次データは、そのコピー元からコピー先へ、コントローラに対するデータ転送なして、オンチップコピー機能を使用してコピーすることができる。カオス的ブロックにおいて生じるような、コピー元データが分散している場合には、コピー先へ書き込むべきすべてのセクタを収集するために、セクタ毎に１ページまでの読み出しが必要になる。
【０２８６】
一実施形態において、論理範囲をいくつかのセクタに文字通り制限する代わりに、ＣＢＩの数を制限することによってそれを行う（カオス的範囲を大きなグループ／メタブロックに対してのみ制限することは理にかない、これには、複数のカオス的ブロックインデックスが全論理グループの範囲をカバーすることが必要となる）。例えば、メタブロック／グループが２０４８個のセクタを有する場合、８個までのＣＢＩセクタが必要となる場合があり、それぞれは、２５６個のセクタの１つのサブグループの連続論理範囲をカバーする。ＣＢＩの数が４に制限されると、４つのサブグループ（いずれでもよい）までのセクタを書き込むために、カオス的メタブロックを使用することができる。よって、論理グループは、４つまでの部分的または完全なカオス的サブグループを有することが許可され、最小４つのサブグループが完全に順次的のままであることになる。カオス的ブロックが４つの有効なＣＢＩセクタを有する場合であり、それに関連して、これらのＣＢＩセクタ（カオス的サブグループ）の範囲外のセクタをホストが書き込む場合には、カオス的論理グループは、統合化されて閉鎖されなければならない。しかし、これが生じることは滅多にない。なぜならば、実際の応用では、ホストは、２０４８個のセクタ（論理グループ）の範囲内の２５６個のセクタ（サブグループ）のカオス的範囲を４つより多く必要としないからである。その結果、通常の場合、ガーベッジコレクション時間も影響を受けないが、制限規則によって、ホストのタイムアウトをトリガするような長すぎるガーベッジコレクションの極端な場合が生じるのを防ぐ。
【０２８７】
一部順次的なカオス的更新ブロックのインデックス付け
ブロックがカオス的管理モードに変換される前に、順次更新ブロックが一部書き込まれた場合には、論理グループのすべてまたは一部の順次更新済みセクションは、順次更新されたものとして扱われ続けてもよく、カオス的更新管理は、論理グループのアドレス範囲のサブセットにのみ適用されてもよい。
【０２８８】
制御データの整合性および管理
メモリ装置に記憶されたデータは、電力中断またはあるメモリ位置の不良によって、破損する場合がある。メモリブロック内に不良が生じると、データは異なるブロックに移転されて、不良ブロックは廃棄される。エラーが広範でない場合は、データと共に対比してある誤り訂正符号（ＥＣＣ）によってすぐに訂正することができる。しかし、ＥＣＣが破損データを訂正できない場合もある。例えば、エラービット数がＥＣＣの能力を超える場合である。これは、メモリブロック管理システムに関連した制御データなどの重要データについては受け入れられない。
【０２８９】
制御データの例として、図２０に関連して説明したような、メモリブロック管理システムに関連したディレクトリ情報およびブロック割り当て情報が挙げられる。前に説明したように、制御データは、高速のＲＡＭと、低速の不揮発性メモリブロックとの両方に保持される。頻繁に変化する制御データを、周期的な制御書き込みによってＲＡＭ内に保持して、不揮発性メタブロック内に記憶されたものと同等の情報を更新する。このように、制御データは、不揮発だが低速のフラッシュメモリに、頻繁にアクセスする必要なく記憶される。図２０に示されているＧＡＴ，ＣＢＩ，ＭＡＰ，ＭＡＰＡなどの制御データ構造の階層は、フラッシュメモリに内に保持される。よって、制御書き込み動作により、ＲＡＭ内の制御データ構造からの情報が、フラッシュメモリ内の同等の制御データ構造を更新する。
【０２９０】
重要データの複製
本発明の他の態様によれば、制御データのいくつかまたはすべてといった重要なデータは、複製にして保持しておけば、信頼性のレベルが上がることが保証される。メモリセルの同一のセットのマルチビットを順次にプログラムするための２パスプログラミング手法を使用する多状態メモリシステムについて、第１のパスによって確立されたデータが第２のパスにおけるいかなるプログラミングエラーによっても破損されないように、複製が行われる。また、複製は、書き込みの異常終了の検出、誤検出の検出（すなわち、両コピーは良好なＥＣＣを有するが、データが異なる場合）の助けとなり、信頼性のレベルが向上する。データ複製にはいくつかの手法が考えられる。
【０２９１】
一実施形態において、所定のデータの２つのコピーが先のプログラミングパスにプログラムされた後に、後続のプログラミングパスは、２つのコピーのうちの少なくとも１つを記憶するメモリセルをプログラムすることを回避する。このように、２つのコピーのうちの少なくとも１つは、後続のプログラミングパスが完了前に異常終了して先のパスのデータを破損する場合に、その影響を受けないことになる。
【０２９２】
他の実施形態において、所定のデータの２つのコピーは、２つのコピーのうちの多くても１つがそのメモリセルを後続のプログラミングパス内にプログラムする、２つの異なるブロックに記憶される。
【０２９３】
さらに他の実施形態において、所定のデータの２つのコピーがプログラミングパスに記憶された後は、２つのコピーを記憶するメモリセルのセットに対して、これ以上のプログラミングが行われないことになる。これは、２つのコピーをメモリセルのセットについての最終的なプログラミングパスにプログラムすることによって達成される。
【０２９４】
さらに他の実施形態において、所定のデータの２つのコピーは、プログラムされたメモリセルに対してさらなるプログラミングが生じないように、バイナリプログラミングモードの多状態メモリ内にプログラムされる。
【０２９５】
さらに他の実施形態において、メモリセルの同一のセットのマルチビットを順次にプログラムするための２パスプログラミング手法を使用する多状態メモリシステムについて、先のプログラミングパスによって確立されたデータが後続のプログラミングパスにおけるエラーの影響を受けないようにするために、障害耐性コードを使用して、複数のメモリ状態を符号化する。
【０２９６】
各メモリセルがデータの１ビットより多くを記憶する多状態メモリにおいては、データの複製が複雑になることが生じる。例えば、４状態メモリは、２ビットで表現することができる。既存の手法の１つとして、２パスプログラミングを使用してこのようなメモリをプログラムすることが挙げられる。第１のビット（下位ページビット）は、第１のパスによってプログラムされる。その後、同一のセルが、第２のパス内にプログラムされて、所望の第２のビット（上位ページビット）を表す。第２のパス内の第１のビットの値を変更しないようにするために、第１のビットのメモリ状態表現を、第２のビットの値に依存させる。したがって、第２のビットのプログラミング中に、電力中断または他の理由でエラーが生じて誤ったメモリ状態になってしまった場合には、第１のビットの値も破損されている可能性がある。
【０２９７】
図４１Ａは、各メモリセルがデータの２ビットを記憶する場合の４状態メモリのしきい値電圧分布を示す。４つの分布は、４つのメモリ状態「Ｕ」、「Ｘ」「Ｙ」、および「Ｚ」の群を示す。メモリセルは、プログラムされる前にまず消去されて、「Ｕ」または「未書き込み」の状態にされる。メモリ状態「Ｘ」「Ｙ」、および「Ｚ」は、メモリセルが次第にプログラムされていくに従って、徐々に到達される。
【０２９８】
図４１Ｂは、グレイコードを使用する既存の２パスプログラミング手法を示す。４つの状態は、下位ページビットおよび上位ページビットという２つのビットによって表現することができ、例えば（上位ページビット、下位ページビット）のように表現することができる。並列にプログラムされるべきセルのページについては、論理下位ページおよび論理上位ページという、確かに２つの論理ページが存在する。第１のプログラミングパスは、論理下位ページのみをプログラムする。適切なコード化によって、セルの同じページに対する後続の第２のプログラミングパスは、論理下位ページを再設定することなく、論理上位ページをプログラムすることになる。一般的に使用されるコードは、グレイコードであり、隣接する状態へ移行する際に１ビットしか変化しない。したがって、このコードは、１ビットしか関与しないので、エラー訂正に対する要求が少なくなるという利点を有する。
【０２９９】
グレイコードを使用する一般的な手法では、「１」は「非プログラム」状態を表す。よって、消去済みメモリ状態「Ｕ」は、（上位ページビット，下位ページビット）＝（１，１）によって表される。したがって、論理下位ページをプログラムするための第１のパスでは、データ「０」を記憶するセルはどれでも、（ｘ，１）から（ｘ，０）へ移行する論理状態を有することになり、ここで「ｘ」は、上位ビットの「無関係」値を表す。しかし、上位ビットはまだプログラムされていないので、「ｘ」は整合性のために「１」と標記されても構わない。（１，０）という論理状態は、セルをメモリ状態「Ｘ」にプログラムすることによって表される。すなわち、第２のプログラムパスの前に、下位ビット値「０」は、メモリ状態「Ｘ」によって表される。
【０３００】
第２のパスプログラミングは、論理上位ページのビットを記憶するために実行される。上位ページビット値「０」を必要とするセルのみが、プログラムされる。第１のパスの後、ページ内のセルは、論理状態（１，１）または（１，０）のいずれかの状態である。下位ページの値を第２のパスに保存するためには、下位ビット値「０」または「１」を区別する必要がある。（１，０）から（０，０）への移行について、このメモリセルは、メモリ状態「Ｙ」にプログラムされる。（１，１）から（０，１）への移行について、このメモリセルは、メモリ状態「Ｚ」にプログラムされる。このように、読み出し中に、セル内にプログラムされたメモリ状態を判断することによって、下位ページビットおよび上位ページビットの両方を復号化することができる。
【０３０１】
しかし、グレイコードの２パスプログラミング手法は、第２のパスプログラミングが誤りである場合には問題となりうる。例えば、上位ページビットのプログラミングが「０」であり、下位ビットが「１」にあると、（１，１）から（０，１）への移行を生じさせることとなる。これは、メモリセルが「Ｕ」から「Ｘ」および「Ｙ」を通って「Ｚ」へ徐々にプログラムされることを要求する。プログラミングの完了前に停電になると、メモリセルは、過渡的なメモリ状態のうちの１つ、例えば「Ｘ」で終わってしまう場合もある。メモリセルを読み出す場合には、「Ｘ」が復号化されて、論理状態（１，０）とされる。これは、上位および下位ビットの両方について誤った結果をもたらす。なぜならば、本来は（０，１）であるはずだったからである。同様に、「Ｙ」に到達した場合にプログラミングが中断されると、（０，０）に相当する。今度は上位ビットは正しいが、下位ビットはまだ誤りである。
【０３０２】
よって、上位ページプログラミングが、既に下位ページ内にあるデータを破損しうるという問題があることがわかる。特に、第２のパスプログラミングが中間メモリ状態を越えるパスを伴う場合、プログラムの異常終了によって、プログラミングがそのメモリ状態で終わる場合があり、誤った下位ページビットが復号化される結果となりうる。
【０３０３】
図４２は、各セクタを複製化して退避することによって重要データを保護するやり方の一つを示す。例えば、セクタＡ，Ｂ，Ｃ，およびＤは、複製コピーで退避される。あるセクタコピーにおいてデータの破損があれば、他のものが代わりに読み出される。
【０３０４】
図４３は、複製セクタが典型的には多状態メモリ内に退避される非ロバストを示す。前に説明したように、４状態メモリの例において、多状態ページは、実際には、２つのパスでそれぞれプログラムされる論理下位ページおよび論理上位ページを含む。図に示されている例において、ページは４セクタの幅である。よって、セクタＡおよびその複製は、論理下位ページに並行にプログラムされることとなり、セクタＢおよびその複製についても同様である。その後、論理上位ページ内のプログラミングの後続の第２のパスにおいて、セクタＣ，Ｃは、並行にプログラムされることとなり、セクタＤ，Ｄについても同様である。セクタＣ，Ｃのプログラミング中にプログラム異常終了が生じた場合には、下位ページ内のセクタＡ，Ａが破損することになる。上位ページプログラミングの前に下位ページセクタがまず読み出されかつバッファされるのでなければ、破損の場合に回復不可能な場合もある。よって、セクタＡ，Ａのように重要なデータの２つのコピーを並行に退避しても、後で上位ページ内にセクタＣ，Ｃを退避する際に問題があると、両方共、破損を回避することができない。
【０３０５】
図４４Ａは、重要データのずらし複製コピーを多状態メモリへ退避する、一実施形態を示す。基本的に、図４３におけるのと同様の手法、すなわちセクタＡ，ＡおよびセクタＢ，Ｂで、下位ページが退避される。しかし、上位ページプログラミングにおいて、Ｃ，Ｄ，Ｃ，Ｄのように、セクタＣ，Ｄは、その複製とインターリーブされている。部分的なページプログラミングがサポートされている場合には、セクタＣの２つのコピーを並行にプログラムすることができ、セクタＤの２つのコピーについても同様である。プログラムが、例えば２つのセクタＣが異常終了する場合には、セクタＡの一方のコピーおよびセクタＢの一方のコピーに関してのみ、下位ページが破損されうる。他方のコピーは影響を受けないままである。よって、第１のパスに記憶された重要データの２つのコピーがある場合、後続の第２のパスプログラミングに同時に影響を受けることはない。
【０３０６】
図４４Ｂは、重要データの複製コピーを多状態メモリの論理上位ページにのみ退避する、他の実施形態を示す。この場合、下位ページ内のデータは使用されない。セクタＡ，ＡおよびセクタＢ，Ｂなどの重要データおよびその複製は、論理上位ページにのみ退避される。このように、プログラム異常修了がある場合に、重要データは他の論理上位ページに書き換えられることができ、下位ページデータに対する破損は重要でなくなる。この解決策は、基本的には、各多状態ページの記憶容量の半分を使用することである。
【０３０７】
図４４Ｃは、重要データの複製コピーを多状態メモリのバイナリモードで退避する、さらに他の実施形態を示す。この場合、各メモリセルは、しきい値範囲が２つの領域にのみ分割されているバイナリモードでプログラムされる。よって、１つのパスプログラミングのみであり、プログラム異常終了が生じる場合には、プログラミングを、異なる位置から再開することができる。この解決策も、各多状態ページの記憶容量の半分を使用することである。多状態メモリをバイナリモードで動作させることは、米国特許第６，４５６，５２８号（特許文献１８）に記載され、その開示全体は本願明細書において参照により援用されている。
【０３０８】
図４５は、重要データの複製コピーを２つの互いに異なるメタブロックへ並行に退避する、さらに他の実施形態を示す。ブロックのうちの１つが使用不可能になった場合、データは他方から読み出すことができる。例えば、重要データが、セクタＡ，Ｂ，Ｃ，Ｄと、Ｅ，Ｆ，Ｇ，Ｈと、Ｉ，Ｊ，Ｋ，Ｌとに含まれている。各セクタは、複製されて退避されている。２つのコピーは、２つの互いに異なるブロックであるブロック０およびブロック１に対して並行に書き込まれることになる。一方のコピーが論理下位ページに書き込まれると、他方のコピーは、論理上位ページに書き込まれることになる。このように、論理上位ページにプログラムされるコピーが常に存在することになる。プログラム異常終了が生じると、他の論理上位ページへ再プログラムすることができる。同時に、下位ページが破損される場合には、他のブロック内の他の上位ページのコピーが常に存在することになる。
【０３０９】
図４６Ｂは、障害耐性コードを使用して重要データの複製コピーを並行に退避する、さらに他の実施形態を示す。図４６Ａは、４状態メモリアレイのしきい値電圧分布を示す点で図４１と類似し、図４６Ｂについての参考として示す。障害耐性コードは、基本的には、任意の上位ページプログラミングが任意の中間状態を通じて移行するのを回避する。よって、第１のパスの下位ページプログラミングは、消去済みメモリ状態「Ｕ」から「Ｙ」へプログラムすることによって表されるように、論理状態（１，１）を（１，０）に移行させる。上位ページビットを「０」にする第２のパスプログラミングにおいて、下位ページビットが「１」にある場合、消去済みメモリ状態「Ｕ」から「Ｘ」へプログラムすることによって表されるように、論理状態（１，１）は（０，１）に移行する。下位ページビットが「０」にある場合、メモリ状態「Ｙ」から「Ｚ」へプログラムすることによって表されるように、論理状態（１，０）は（０，０）に移行する。上位ページプログラミングは次に隣接するメモリ状態へのプログラミングのみを伴うので、プログラム異常終了によって、下位ページビットは変化しない。
【０３１０】
順次書き込み
重要データの複製コピーは、前述したように、並行に書き込まれるのが好ましい。両コピーが同時に衝突するのを避ける他のやり方として、コピーを順次的に書き込むことが挙げられる。この方法は遅いが、コントローラが両コピーをチェックする際に、コピー自体がプログラミングが成功したかどうかを示す。
【０３１１】
図４７は、データの２つのコピーの予想される状態と、データの有効性とを示す表である。
第１および第２のコピーにＥＣＣエラーがない場合には、データのプログラミングは完全にうまくいったと考えられる。いずれのコピーからも有効データが得られる。
第１のコピーにはＥＣＣエラーはないが、第２のコピーにはＥＣＣエラーがある場合には、プログラミングが第２のコピープログラミング中に中断されたことを意味する可能性がある。第１のコピーは、有効データを含む。第２のコピーデータは、エラーが訂正可能であっても信頼することができない。
第１のコピーにはＥＣＣエラーがなく、第２のコピーは空（消去済み）である場合には、第１のコピープログラミングの後であるが第２のコピーが始まる前に、プログラミングが中断されたことを意味する可能性がある。第１のコピーは、有効データを含む。
第１のコピーにＥＣＣエラーがあり、第２のコピーは空（消去済み）である場合には、プログラミングが第１のコピープログラミング中に中断されたことを意味する可能性がある。第１のコピーは、エラーが訂正可能であっても無効データを含むことがある。
【０３１２】
複製で保持されるデータを読み出すためには、以下の手法が好ましい。なぜならば、複製コピーの存在を利用するからである。両コピーを読み出しおよび比較する。この場合、図４７に示されているような両コピーの状態を使用して、エラー誤検出がないことを確認することができる。
【０３１３】
コントローラが１つのコピーのみを読み出す他の実施形態において、速度および簡易性を考慮して、コピー読み出しは、２つのコピー間で交互に行うのが好ましい。例えば、コントローラが制御データを読み出す場合、例えばコピー１を読み出す場合に、次の制御読み出し（任意の制御読み出し）は、コピー２から行わなくてはならず、その後に再びコピー１などとなる。このように、２つのコピーを読み出して整合性を定期的にチェックする（ＥＣＣチェック）。これにより、劣化したデータ保持によって生じた時間エラーを検出しない危険性が減少する。例えば、通常はコピー１のみを読み出す場合、コピー２は、エラーがＥＣＣによって回復することができないレベルに徐々に劣化して、第２のコピーを使用することができなくなる。
【０３１４】
プリエンプティブなデータ移転
図２０に関連して説明したように、ブロック管理システムは、その動作中にフラッシュメモリ内に制御データのセットを保持する。制御データのこのセットは、ホストデータと同様に、メタブロックに記憶される。このように、制御データ自体はブロック管理されることになり、更新を受けるので、ガーベッジコレクション動作も受けることになる。
【０３１５】
また、低階層のデータが高階層のデータよりも頻繁に更新される、制御データの階層が存在することについても説明してきた。例えば、すべての制御ブロックは、書き込むためのＮ個の制御セクタを有すると想定すると、制御更新および制御ブロック移転の以下のシーケンスが通常生じる。図２０を再び参照すると、各Ｎ個のＣＢＩ更新によって、ＣＢＩブロックが充填されて、ＣＢＩ移転（書き換え）およびＭＡＰ更新がトリガされる。カオス的ブロックが閉鎖されると、ＧＡＴ更新もトリガされる。各ＧＡＴ更新は、ＭＡＰ更新をトリガする。各Ｎ個のＧＡＴ更新によって、ブロックが充填されて、ＧＡＴブロック移転がトリガされる。加えて、ＭＡＰブロックが一杯になると、ＭＡＰブロック移転およびＭＡＰＡブロック（ＭＡＰＡブロックがあればであるが、そうでなければ、ＢＯＯＴブロックはＭＡＰを直接ポイントする）更新もトリガされる。加えて、ＭＡＰＡブロックが一杯になると、ＭＡＰＡブロック移転、ＢＯＯＴブロック更新、およびＭＡＰ更新もトリガされる。加えて、ＢＯＯＴブロックが一杯になると、他のＢＯＯＴブロックに対するアクティブなＢＯＯＴブロック移転がトリガされる。
【０３１６】
ＢＯＯＴ制御データが先頭で、次にＭＡＰＡ、ＭＡＰ、そしてＧＡＴが続いて階層が形成されるので、Ｎ3 回のＧＡＴ更新毎に、ＧＡＴ、ＭＡＰ、ＭＡＰＡ、およびＢＯＯＴブロックのすべてが移転されるような「カスケード制御更新」が生じることとなる。ＧＡＴ更新がホスト書き込みによるカオス的または順次更新ブロックの閉鎖によって生じる場合、ガーベッジコレクション動作（すなわち、移転または書き換え）も生じることとなる。カオス的更新ブロックのガーベッジコレクションの場合、ＣＢＩが更新されるが、ＣＢＩブロック移転もトリガされる。よって、この極端な例の場合、数多くのメタブロックが同時にガーベッジコレクションされる。
【０３１７】
階層の各制御データブロックが、埋め込みおよび移転に関して独自の周期性を有することがわかる。それぞれが通常通り進めば、数多くのブロックのフェーズが並んで、これらすべてのブロックが関与する大量の移転またはガーベッジコレクションを同時にトリガするときがあることになる。数多くの制御ブロックを移転するには長い時間がかかり、このような大量の制御動作によって生じる長時間の遅延を許容しないホストもあるので、これは避けるべきである。
【０３１８】
本発明の他の態様によれば、ブロック管理システムを伴う不揮発性メモリにおいて、数多くの更新ブロックすべてを並行して移転する必要が生じるような状況を回避するために、「制御ガーベッジコレクション」またはメモリブロックのプリエンプティブな移転が実施される。例えば、この状況は、ブロック管理システムの動作を制御するために使用される制御データを更新する際に生じうる。制御データ種の階層は更新頻度が様々なので、その関連する更新ブロックは、それぞれ異なる度合いで、ガーベッジコレクションまたは移転を必要とすることとなる。１つより多くの制御データ種のガーベッジコレクション動作が同時に生じるときがあることになる。極端な例の場合、すべての制御データ種についての更新ブロックの移転フェーズが並んでしまうこともあり得るので、すべての更新ブロックが同時に移転を必要とすることになってしまう。
【０３１９】
この望ましくない状況は、本発明によって回避され、本発明において、現在のメモリ動作が自発的なガーベッジコレクション動作に対応することができるときにはいつでも、ブロックが完全に埋められる前に予め更新データのプリエンプティブな移転を生じさせる。特に、最も遅いレートを有する、階層内で最高位のデータ種を有するブロックに優先度が与えられる。このように、最も遅いレートのブロックが移転されると、他のガーベッジコレクションを比較的長い時間行う必要がなくなる。また、階層内で高いところに位置する遅いレートのブロックは、トリガする移転のカスケードをほとんど有しない。本発明の方法は、様々なブロックのフェーズが並ぶのを避けるために、混合物全体に対してある種のディザリングを導入するとみなすことができる。よって、機会が生じるときはいつでも、完全に充填されるのにはあまりマージンのない、低速に充填されるブロックが、プリエンプティブに移転されることになる。
【０３２０】
カスケード効果によって、階層が低いデータが階層が高いデータよりも高速に変化している制御データの階層を有するシステムにおいて、階層内で高いところにある制御データのブロックに対して優先度が与えられる。自発的なプリエンプティブな移転を行う機会の一例として、ホスト書き込みが、それ自体、移転をトリガしないので、待ち時間の期間の余裕を使用してプリエンプティブな移転動作を行うという場合である。一般的に、絶対に移転されなければならないブロックの前のマージンは、ブロックが完全に充填される前の未書き込みのメモリユニットの所定の数である。ブロックが満杯になる前に移転を突然行っても十分なマージンであるかどうかを考慮する必要はあるが、あまりにも早計でないならば、リソースの無駄となってしまう。好ましい実施形態において、未書き込みのメモリユニットの所定の数は、１つから６つの間のメモリユニットである。
【０３２１】
図４８は、制御データを記憶するメモリブロックのプリエンプティブな移転のフローチャートを示す。
ステップ１２０２：不揮発性メモリをブロックに組織化し、各ブロックは、共に消去可能なメモリユニットに分割される。
ステップ１２０４：互いに異なる種類のデータを保持する。
ステップ１２０６：互いに異なる種類のデータにランク付けを割り当てる。
ステップ１２０８：各ブロックが実質的に同一の種類のデータを記憶するように、前記互いに異なる種類のデータの更新を複数のブロックに渡って記憶する。
ステップ１２１０：ブロックが所定の数よりも少ない空メモリユニットを有し、かつ前記複数のブロックに渡って最高ランクのデータ種類を有することに応じて、前記ブロックのデータの現在の更新を他のブロックへ移転する。中断されなければ、ステップ１２０８へ進む。
【０３２２】
図２０に示されている制御データについてのプリエンプティブな移転を実施するためのアルゴリズムの例は、以下のとおりである。
Ｉｆ（ユーザデータのためにガーベッジコレクションがない場合）ＯＲ（ＭＡＰに残る未書き込みのセクタは６つ以下である）ＯＲ（ＧＡＴに残る未書き込みのセクタは３つ以下である）、
Ｔｈｅｎ
Ｉｆ（ＢＯＯＴに残る未書込みのセクタは１つである）
Ｔｈｅｎ  ＢＯＯＴを移転（すなわち、ブロックに移転）
Ｅｌｓｅ
Ｉｆ（ＭＡＰＡに残る未書込みのセクタは１つである）
Ｔｈｅｎ  ＭＡＰＡを移転してＭＡＰを更新
Ｅｌｓｅ
Ｉｆ（ＭＡＰに残る未書き込みのセクタは１つである）
Ｔｈｅｎ  ＭＡＰを移転
Ｅｌｓｅ
Ｉｆ（最終更新または最大ＧＡＴに残る未書込みのセクタは１つである）
Ｔｈｅｎ  ＧＡＴを移転
Ｅｌｓｅ
Ｉｆ（ＣＢＩに残る未書込みのセクタは１つである）
Ｔｈｅｎ  ＣＢＩを移転
Ｅｌｓｅ
Ｅｌｓｅ
Ｅｘｉｔ
【０３２３】
よって、プリエンプティブな移転は、通常、ユーザデータガーベッジコレクションが生じることなく行われる。最悪の場合、すべてのホスト書き込みがユーザデータガーベッジコレクションをトリガするが、１つのブロックの自発的な移転には時間があり、プリエンプティブな移転を１回に１つの制御ブロックに対して行うことができる。
【０３２４】
ユーザデータガーベッジコレクション動作および制御更新は物理的エラーと同時に生じることがあるので、例えば、ブロックがまた２つ以上の未書き込みのメモリユニット（例えば、セクタ）を有している間などに、プリエンプティブな移転または制御されたガーベッジコレクションを事前に行っておくことで、安全のための大きなマージンを持っておく方がよい。
【０３２５】
本発明の様々な態様をいくつかの実施形態と共に説明してきたが、本発明が添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解されよう。
【図１】
0005617079.tif 000002
【図２】
0005617079.tif 000003
【図３Ａ】
0005617079.tif 000004
【図３Ｂ】
0005617079.tif 000005
【図４】
0005617079.tif 000006
【図５Ａ】
0005617079.tif 000007
【図５Ｂ】
0005617079.tif 000008
【図５Ｃ】
0005617079.tif 000009
【図６】
0005617079.tif 000010
【図７Ａ】
0005617079.tif 000011
【図７Ｂ】
0005617079.tif 000012
【図８】
0005617079.tif 000013
【図９】
0005617079.tif 000014
【図１０】
0005617079.tif 000015
【図１１Ａ】
0005617079.tif 000016
【図１１Ｂ】
0005617079.tif 000017
【図１２Ａ】
0005617079.tif 000018
【図１２Ｂ】
0005617079.tif 000019
【図１３Ａ】
0005617079.tif 000020
【図１３Ｂ】
0005617079.tif 000021
【図１４（Ａ）−１４（Ｂ）】
0005617079.tif 000022
【図１４（Ｃ）−１４（Ｅ）】
0005617079.tif 000023
【図１４（Ｆ）−１４（Ｈ）】
0005617079.tif 000024
【図１４（Ｉ）−１４（Ｊ）】
0005617079.tif 000025
【図１５】
0005617079.tif 000026
【図１６Ａ】
0005617079.tif 000027
【図１６Ｂ】
0005617079.tif 000028
【図１６Ｃ】
0005617079.tif 000029
【図１６Ｄ】
0005617079.tif 000030
【図１６Ｅ】
0005617079.tif 000031
【図１７Ａ】
0005617079.tif 000032
【図１７Ｂ】
0005617079.tif 000033
【図１８】
0005617079.tif 000034
【図１９】
0005617079.tif 000035
【図２０】
0005617079.tif 000036
【図２１】
0005617079.tif 000037
【図２２Ａ】
0005617079.tif 000038
【図２２Ｂ】
0005617079.tif 000039
【図２３Ａ】
0005617079.tif 000040
【図２３Ｂ】
0005617079.tif 000041
【図２４Ａ】
0005617079.tif 000042
【図２４Ｂ】
0005617079.tif 000043
【図２４Ｃ】
0005617079.tif 000044
【図２５】
0005617079.tif 000045
【図２６Ａ】
0005617079.tif 000046
【図２６Ｂ】
0005617079.tif 000047
【図２７】
0005617079.tif 000048
【図２８】
0005617079.tif 000049
【図２９】
0005617079.tif 000050
【図３０】
0005617079.tif 000051
【図３１Ａ】
0005617079.tif 000052
【図３１Ｂ】
0005617079.tif 000053
【図３２Ａ】
0005617079.tif 000054
【図３２Ｂ】
0005617079.tif 000055
【図３３】
0005617079.tif 000056
【図３４Ａ】
0005617079.tif 000057
【図３４Ｂ】
0005617079.tif 000058
【図３５Ａ】
0005617079.tif 000059
【図３５Ｂ】
0005617079.tif 000060
【図３６Ａ】
0005617079.tif 000061
【図３６Ｂ】
0005617079.tif 000062
【図３６Ｃ】
0005617079.tif 000063
【図３７】
0005617079.tif 000064
【図３８Ａ】
0005617079.tif 000065
【図３８Ｂ】
0005617079.tif 000066
【図３８Ｃ】
0005617079.tif 000067
【図３９Ａ】
0005617079.tif 000068
【図３９Ｂ】
0005617079.tif 000069
【図４０】
0005617079.tif 000070
【図４１Ａ】
0005617079.tif 000071
【図４１Ｂ】
0005617079.tif 000072
【図４２】
0005617079.tif 000073
【図４３】
0005617079.tif 000074
【図４４Ａ】
0005617079.tif 000075
【図４４Ｂ】
0005617079.tif 000076
【図４４Ｃ】
0005617079.tif 000077
【図４５】
0005617079.tif 000078
【図４６Ａ】
0005617079.tif 000079
【図４６Ｂ】
0005617079.tif 000080
【図４７】
0005617079.tif 000081
【図４８】
0005617079.tif 000082