不揮発性メモリおよびクラスベースの更新ブロック置換規則のための方法
ブロック管理システムを伴う不揮発性メモリにおいて、データはブロックに書き込まれ、ブロック毎に消去可能である。いつでも、ブロックのプールは、データを同時に記憶するために開放されている。プール内のブロック数は制限されている。置換システムは、新規のブロックがプールにその制限を超えることなく導入されることを可能にする。特に、プール内のブロックの異なるクラスは、最もアクティブでないブロックを置換前に閉鎖するなど、それぞれ独自の置換規則を有する。このように、予想される非効率およびプール内のブロックの早期閉鎖を回避することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的には、不揮発性半導体メモリに関し、さらに詳しくは、データを記憶するために同時に開放中のブロックのプールの置換を管理するための改良されたシステムを伴うメモリブロック管理システムを有するものに関する。
【背景技術】
【0002】
電荷を不揮発的に記憶することができる固体メモリであり、特に、小形形状のファクタカードとしてパッケージ化されたEEPROMおよびフラッシュEEPROMの形態を取るものが、最近、様々な移動および携帯装置、とりわけ情報機器および一般消費者向け電子製品における記憶装置の選択肢となってきている。同じく固体メモリであるRAM(ランダムアクセスメモリ)とは異なり、フラッシュメモリは不揮発性であり、電源を切った後でもその記憶したデータを保持する。また、ROM(読み出し専用メモリ)とは異なり、フラッシュメモリは、ディスク記憶装置と同様に書き換え可能である。高いコストにもかかわらず、フラッシュメモリは、大容量記憶装置の利用の際にますます使用されるようになっている。従来の大容量記憶装置は、ハードドライブおよびフロッピーディスクなどの回転磁気媒体に基づき、移動および携帯環境には不適切である。というのは、ディスクドライブはかさばりがちであり、機械的な故障が生じやすく、大きな待ち時間および高電力という要件を有するからである。これらの望ましくない属性により、ディスクをベースとした記憶装置は、ほとんどの移動および携帯の利用において実用的でないものとなっている。他方、フラッシュメモリは、埋め込み形および着脱可能なカードの形態の両方で、小さいサイズ、低電力消費、高速および高い信頼性という特徴が理由で、移動および携帯環境に理想的なほど適している。
【0003】
フラッシュEEPROMは、消去可能な不揮発性メモリであること、およびメモリセルに新たなデータを書き込むまたは「プログラム」するという点で、EEPROM(電気的に消去可能でプログラム可能な読み出し専用メモリ)に類似している。両方とも、フローティング(未接続の)導電ゲートを使用し、電界効果トランジスタの構造であり、半導体基板におけるソース領域とドレイン領域と間のチャネル領域を覆って位置している。そして、コントロールゲートがフローティングゲートを覆って設けられる。トランジスタのしきい値電圧特性は、フローティングゲート上に保持された電荷量によって制御される。すなわち、フローティングゲート上の電荷の所定のレベルについて、トランジスタが「オン」に転換されてソース領域とドレイン領域との間が導通することができるようにする前にコントロールゲートに印加されなければならない対応する電圧(しきい値)がある。特に、フラッシュEEPROMなどのフラッシュメモリは、メモリセルの全ブロックを同時に消去することができる。
【0004】
フローティングゲートは、ある範囲の電荷を保持することができるので、しきい値電圧ウィンドウ内の任意のしきい値電圧レベルにプログラムすることができる。しきい値電圧ウィンドウのサイズは、装置の最小および最大しきい値レベルによって区切られ、さらにフローティングゲート上にプログラムすることができる電荷の範囲に対応している。しきい値ウィンドウは、一般的には、メモリデバイスの特徴、動作状態、および履歴に依存している。ウィンドウ内の各別個の分解可能なしきい値電圧レベルの範囲は、原則的には、セルの限定的なメモリ状態を指定するために使用されてもよい。しきい値電圧が2つの別個の領域に分割される場合には、各メモリセルは1ビットのデータを記憶することができることになる。同様に、しきい値電圧ウィンドウが2つ以上の別個の領域に分割される場合には、各メモリセルは、1ビット以上のデータを記憶することができることになる。
【0005】
メモリセルとしての役割を果たすトランジスタは、典型的には、2つの機構のうちの1つによって「プログラムされた」状態にプログラムされる。「熱い電子注入」において、ドレインに印加された高い電圧が基板チャネル領域にわたって電子を加速させる。同時に、コントロールゲートに印加された高い電圧が、熱い電子を薄いゲート誘電体を通ってフローティングゲートへ引き寄せる。「トンネル注入」において、高い電圧が基板に対するコントロールゲートに印加される。このように、電子は、基板から介在フローティングゲートへと引き寄せられる。メモリの状態を変化させるために、メモリセルの最初に消去される電荷蓄積ユニットに電子を注入することによってメモリに対する書き込みを行うことを説明するために、「プログラム」という用語を従来使用してきたが、この用語は、現在では、「書き込み」または[記録する」などといった、より一般的な用語と交換可能に使用されてきている。
【0006】
メモリデバイスの消去は、数多くの機構によって行われてもよい。例えば、EEPROMについて、高い電圧をコントロールゲートに関連した基板に印加して、フローティングゲート内の電子を薄い酸化物層を通じて基板チャネル領域へと通すようにすることによって(すなわち、ファウラー・ノルドハイムトンネル現象)、メモリセルは電気的に消去可能である。典型的には、EEPROMは、バイト毎に消去可能である。フラッシュEEPROMについて、メモリは、すべて一度に電気的に消去可能であるか、または1回につき1つ以上の最小の消去可能なブロックを電気的に消去可能であり、最小の消去可能なブロックは、1つ以上のセクタからなってもよく、各セクタは、512バイト以上のデータを記憶してもよい。
【0007】
メモリデバイスは、典型的には、カードに実装されてもよい1つ以上のメモリチップを備える。各メモリチップは、デコーダまたは消去、書き込み、および読み出し回路のような周辺回路によってサポートされたメモリセルのアレイを備える。より高性能のメモリデバイスは、高機能および高レベルのメモリ動作およびインターフェイスを行うコントローラも搭載されている。
【0008】
商業的に成功している数多くの不揮発性固体メモリデバイスが現在使用されている。これらのメモリデバイスはフラッシュEEPROMであってもよく、または他の種類の不揮発性メモリセルを使用してもよい。フラッシュメモリおよびそれを製造するシステムおよび方法の例は、米国特許第5,070,032号(特許文献1)、第5,095,344号(特許文献2)、第5,315,541号(特許文献3)、第5,343,063号(特許文献4)、および第5,661,053号(特許文献5)、第5,313,421号(特許文献6)、および第6,222,762号(特許文献7)に記載されている。特に、NANDストリング構造のフラッシュメモリデバイスは、米国特許第5,570,315号(特許文献8)、第5,903,495号(特許文献9)、第6,046,935号(特許文献10)に記載されている。また、不揮発性メモリデバイスは、電荷を蓄積するための誘電体層を有するメモリセルからも製造される。前に説明した導電性のフローティングゲート素子の代わりに、誘電体層が使用される。誘電体蓄積素子を使用するこのようなメモリデバイスは、エイタンらによる「NROM:新規の局所化されたトラッピング、2ビット不揮発性メモリセル」,米国電子電気学会(IEEE)電子デバイスレター,第21巻,第11号,2000年11月,543〜545ページ ("NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letter, vol. 21, no. 11, November 2000, pp. 543-545)(非特許文献1)に記載されている。ONO誘電体層が、ソースおよびドレイン拡散間のチャネルにわたって延在している。1データビットに対する電荷は、ドレインに隣接する誘電体層にて局在化され、他のデータビットについての電荷は、ソースに隣接する誘電体層にて局在化される。例えば、米国特許第5,768,192号(特許文献11)および第6,011,725号(特許文献12)は、2つの二酸化シリコン層間に挟まれたトラッピング誘電体を有する不揮発性メモリセルを開示している。多状態のデータ記憶装置は、誘電体内の空間的に別個の電荷蓄積領域のバイナリ状態を別個に読み出すことによって実施される。
【0009】
読み出しおよびプログラミング性能を改善するために、アレイ内の複数の電荷蓄積素子またはメモリトランジスタが、並列に読み出しまたはプログラムされる。よって、メモリ素子の「ページ」が、一緒に読み出されるか、またはプログラムされる。既存のメモリ構成において、列は、典型的には、いくつかのインターリーブされたページを含むか、または1つのページを構成することもある。あるページのすべてのメモリ素子が、一緒に読み出されるか、またはプログラムされることもある。
【0010】
フラッシュメモリシステムにおいて、消去動作は、読み出しおよびプログラミング動作よりも非常に長くかかる場合がある。よって、かなりのサイズの消去ブロックがあることが望ましい。このように、消去時間は、メモリセルの大きな集合体にわたって償却される。
【0011】
フラッシュメモリの性質は、データが消去されたメモリ位置に書き込まれなければならないということに基づいている。ホストからのある論理アドレスのデータを更新すべき場合、1つのやり方は、更新データを同一の物理メモリ位置に書き換えるというものである。すなわち、論理/物理アドレスマッピングは変化しない。しかし、これは、この物理位置を含む消去ブロック全体が最初に消去されてから、更新されたデータで書き換えられなければならないということを意味する。この更新方法は、消去ブロック全体が消去され、かつ書き換えられる必要があるので効率が悪く、更新すべきデータが消去ブロックの小さい部分のみを占める場合には特に効率が悪い。また、メモリブロックの消去リサイクルが高い頻度で生じる結果となり、この種のメモリデバイスの限られた耐久性の観点から望ましくない。
【0012】
フラッシュメモリシステムの他の問題点は、システム制御およびディレクトリデータと関係がある。データは、様々なメモリ動作の過程で生成かつアクセスされる。よって、効率的な取り扱いおよび素早いアクセスが性能に直接影響を与えることになる。フラッシュメモリは記憶装置用を意図し、かつ不揮発性であるので、フラッシュメモリ内のこの種のデータを保持するのが望ましい。しかし、コントローラとフラッシュメモリとの間の介在ファイル管理システムによって、データは直接にはアクセスすることができない。また、システム制御およびディレクトリデータは、アクティブかつ断片化しがちであり、大規模なブロック消去を伴うシステムへの記憶には役に立たない。従来、この種のデータは、コントローラRAMに設定され、コントローラによる直接アクセスを可能としている。メモリデバイスの電源投入後、コントローラRAMに配置すべき必要なシステム制御およびディレクトリ情報をコンパイルするために、初期化の処理によって、フラッシュメモリを走査することができる。この処理は時間がかかり、フラッシュメモリの容量が増加しているのでいっそうのコントローラRAMの容量が要求される。
【0013】
米国特許第6,567,307号(特許文献13)は、メモ帳としての役割を果たす複数の消去ブロック内に更新データを記録し、また様々なブロック内の有効なセクタを最終的に統合化し、かつこのセクタを論理的な順次順序で再構成した後にセクタを書き換えることを含む大きな消去ブロック内のセクタ更新を扱う方法を開示している。このように、ブロックは、ごくわずかな更新の度に消去され、かつ書き込まれる必要はない。
【0014】
国際公開特許出願第WO03/027828号(特許文献14)および国際公開特許出願第WO00/49488号(特許文献15)は共に、論理セクタアドレスを区画に分割することを含む、大きな消去ブロック内での更新を扱うメモリシステムを開示している。小さな区画の論理アドレス範囲が、ユーザデータ用の他の区画とは別に、アクティブなシステム制御データ用に確保される。このように、システム制御データを独自の区画内で操作すれば、他の区画内の関連するユーザデータと相互に作用しないことになる。更新は論理セクタレベルであり、書き込みポインタは、書き込むべきブロック内の対応する物理セクタを指す。マッピング情報は、RAM内にバッファリングされ、最終的にはメインメモリ内のセクタ割り当てテーブルに記憶される。論理セクタの最新バージョンによって、既存のブロック内のすべての以前のバージョンは廃止されることになり、既存のブロックは、部分的に廃止される。部分的に廃止されたブロックを許容することができる数に維持するために、ガーベッジコレクションが行われる。
【0015】
従来技術のシステムは、更新データを数多くのブロックに渡って分散させる傾向にあるか、または更新データによって数多くの既存ブロックを部分的に廃止する場合もある。その結果、部分的に廃止されたブロックに対して大量のガーベッジコレクションが必要となることが多く、これは効率的でなく、メモリの早すぎる老化を生じさせる。また、非順次更新に比べて、順次更新を扱う体系化された効率的なやり方がない。
【0016】
したがって、大容量かつ高性能の不揮発性メモリに対する一般的な要求がある。特に、大きなブロックにおけるメモリ動作を前述した問題なく行うことのできる大容量不揮発性メモリを有するための要求がある。
【先行技術文献】
【特許文献】
【0017】
【特許文献1】米国特許第5,070,032号
【特許文献2】米国特許第5,095,344号
【特許文献3】米国特許第5,315,541号
【特許文献4】米国特許第5,343,063号
【特許文献5】米国特許第5,661,053号
【特許文献6】米国特許第5,313,421号
【特許文献7】米国特許第6,222,762号
【特許文献8】米国特許第5,570,315号
【特許文献9】米国特許第5,903,495号
【特許文献10】米国特許第6,046,935号
【特許文献11】米国特許第5,768,192号
【特許文献12】米国特許第6,011,725号
【特許文献13】米国特許第6,567,307号
【特許文献14】国際公開特許出願第WO03/027828号
【特許文献15】国際公開特許出願第WO00/49488号
【特許文献16】米国公開特許出願第2005/0144365号
【特許文献17】2003年12月30日出願のAlan Sinclair による「Adaptive Metablocks 」という米国特許出願
【特許文献18】2003年12月30日出願のCarlos Gonzales らによる「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures 」という米国特許出願
【非特許文献】
【0018】
【非特許文献1】"NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letter, vol. 21, no. 11, November 2000, pp. 543-545
【発明の概要】
【0019】
不揮発性メモリシステムは、物理メモリ位置の物理グループに組織化される。各物理グループ(メタブロック)は、一単位として消去可能であり、データの論理グループを記憶するために使用することができる。メモリ管理システムは、論理グループの更新データを記録する専用のメタブロックを割り当てることにより、データの論理グループの更新を行うことができる。更新メタブロックは、更新データを受信した順序で記録し、記録が当初記憶された通りの正確な論理順序であるか(順次)、またはそうでないか(カオス的)についての制限はない。最終的には、更新メタブロックは閉鎖されて、さらに記録することができなくなる。いくつかの処理のうちの1つが生じることになるが、元メタブロックを置換する、正確な順序の一杯となったメタブロックが結局は生じることになる。カオス的な場合には、ディレクトリデータが、頻繁な更新の助けとなるようなやり方で、不揮発性メモリに保持される。このシステムは、複数の論理グループが並行して更新されることをサポートする。
【0020】
本発明の一特徴により、データを論理グループ毎に更新することができる。よって、論理グループが更新されている最中は、論理ユニットの分配(および更新によって廃止されるメモリユニットの分散)は、その範囲が限定される。これは、論理グループが物理ブロック内に正常に含まれている場合に特に当てはまる。
【0021】
論理グループの更新中に、典型的には1つまたは2つのブロックが、更新論理ユニットをバッファリングするように割り当てられる必要がある。よって、ガーベッジコレクションは、比較的少ない数のブロックに渡ってのみ行えばよい。カオス的ブロックのガーベッジコレクションは、統合化またはコンパクト化によって行われてもよい。
【0022】
更新処理の経済性は、順次更新に比較してカオス的(非順次)更新に割り当てられる必要のある追加のブロックがないようにする更新ブロックの一般的な処理において、さらに明らかである。すべての更新ブロックは、順次更新ブロックとして割り当てられ、どの更新ブロックも、カオス的更新ブロックに変更可能である。実際、順次からカオス的への更新ブロックの変更は任意である。
【0023】
システムリソースの効率的な使用により、複数の論理グループを並行して更新することができる。これは、効率性をさらに増し、オーバーヘッドを減少させる。
【0024】
本発明の一態様によれば、ブロック管理システムを伴う不揮発性メモリにおいて、データを記録するために同時に開放されている更新ブロックの第1の所定最大数までサポートするシステムのために、改良されたブロック置換手法が実施される。更新ブロックは、主に連続更新ブロックであって、当該連続更新ブロックにおいて、データが論理的に連続した順序で記録されているが、そのブロック数は、データが論理的に連続した順序で記録されないカオス的更新ブロックであることが許容された第2の所定最大数までである。更新ブロックの新規の割り当てによって更新ブロックのプールが第1または第2の所定最大数を超えるような場合にはいつでも、当該制限に従うようにプール内の既存の更新ブロックのうちの1つが閉鎖および削除されることになる。更新ブロックを閉鎖する前に、そのデータは連続ブロックに統合される。この改良された手法は、連続的な更新が過度のカオス的ブロック統合数を生じさせ得る状況を回避するためのものである。これは、連続更新ブロックとカオス的更新ブロックとをそれぞれの置換または統合プールに分離することによって達成される。特に、連続更新によって新規の更新ブロックの割り当てが第1の所定最大数を超える場合には、プール内の最も長時間使用されていない連続更新ブロックが、空きを作るために優先される。
【0025】
現行システムにおいて、一般的に、ユーザデータと制御データという2つの種類のデータがある。ユーザデータは、ホストからメモリシステムへ、典型的には論理的に連続した順序で送られる。連続更新ブロックは、ホストからの連続書き込み動作を最適に扱うように割り当てられる。ユーザデータは、とりわけ論理データに対する後続の更新がある場合には、論理的に不連続な順序である場合がある。カオス的更新ブロックは、不連続な順序でデータを最適に扱うために作成される。カオス的または不連続データの他のソースとしては、ユーザデータを記憶する過程で生成されるファイルおよびディレクトリ情報などといった、ファイルシステムまたはメモリシステムによって保持される制御データがある。
【0026】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限に従う従来の手法は、連続的かカオス的かどうかに関わらず、プール内の最も長時間使用されていない更新ブロックを閉鎖するものであった。
【0027】
本願の手法は、従来の手法を改良するものであって、基本的には、連続的な書き込み動作中に、新規の割り当て用に空きを作るためにプール内の更新ブロックを閉鎖する必要がある場合には、プール内の最も長時間使用されていない連続更新ブロックが閉鎖される。これにより、連続的な書き込み動作およびランダムな書き込み動作を扱うために様々な更新ブロックを効果的に活用することが確実になる。特に、ホストによる大規模な連続書き込み動作によってFATおよびディレクトリ情報を含むカオス的更新ブロックを閉鎖せざるを得なくなる場合があるといった非効率な状況を回避する。この大規模な書き込み動作が終わると再び更新されるようなFATおよびディレクトリ情報を記憶するために、さらなるカオス的ブロックが実質上まもなく作成されることになる。改良された置換ポリシーを作成することによって、置換および統合プールの分離が規定され、開放された連続ブロックまたは開放されたカオス的ブロックとなり得るブロックの連続的な書き込みおよび統合中に、カオス的ブロックを統合する際のさらなるオーバーヘッドを防止して、後続のFATおよびディレクトリ更新を管理する。
【0028】
本願の手法を一般的にいうと、更新ブロックが連続または不連続データのいずれを記憶しているか、または、ある予め定められた種類のシステムデータを記憶しているかどうかなどといった属性のセットに基づいて、更新ブロックを分類するものである。限られた数の更新ブロックのプールを実装するにあたって、更新ブロックの各クラスは、当該クラス用にサポートされた最大数を超えるような場合の置換に関する独自の規則を有することになる。
【0029】
例えば、連続更新ブロックおよび不連続更新ブロックは、2つの異なるクラスである。これら各クラス用の置換規則は同一であり、すなわち、最もアクティブでないものを新規のものに置換する。よって、連続更新ブロックのプールを超えるような場合には、新規のものがプールに導入される前に、プール内の最もアクティブでないものが閉鎖および削除されることになる。不連続更新ブロックのプールについても同様である。
【0030】
一般的に、各クラスは、他のクラスから独立した独自の置換規則を有する。置換規則の例として、対応するクラスによっては、最も長時間アクセスされていないもの、直近にアクセスされたもの、最も頻繁にアクセスされていないもの、最も頻繁にアクセスされているものなどを置換する。
【0031】
本発明のさらなる特徴および利点は、添付の図面と共に理解される以下の好ましい実施形態の説明から理解されるだろう。
【図面の簡単な説明】
【0032】
【図1】本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。
【図2】本発明の好ましい実施形態に係る、セクタ(またはメタブロック)の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。
【図3A】(i)〜(iii)は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。
【図3B】論理グループとメタブロックと間のマッピングを概略的に示す。
【図4】物理メモリにおける構造を含むメタブロックの配列を示す。
【図5A】互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。
【図5B】1つの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【図5C】1つより多くの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。
【図6】コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。
【図7A】順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図7B】カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示す。
【図8】2つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図9】本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図10】本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図11A】図10に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。
【図11B】図10に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。
【図12A】様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
【図12B】論理グループの予想される状態を列挙する表である。
【図13A】様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。メタブロックとは、論理グループに対応する物理グループである。
【図13B】メタブロックの予想される状態を列挙する表である。
【図14(A)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(B)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(C)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(D)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(E)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(F)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(G)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(H)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(I)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(J)】論理グループの状態と、物理メタブロックとに対する様々な動作の影響を示す状態図である。
【図15】割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト(ABL)の構造の好ましい実施形態を示す。
【図16A】カオス的ブロックインデックス(CBI)セクタのデータフィールドを示す。
【図16B】カオス的ブロックインデックス(CBI)セクタが専用のメタブロックに記録されている一例を示す。
【図16C】カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図16D】論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図16E】各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け(CBI)セクタおよびその機能の例を示す。
【図17A】グループアドレステーブル(GAT)セクタのデータフィールドを示す。
【図17B】グループアドレステーブル(GAT)セクタがGATブロックに記録されている一例を示す。
【図18】消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。
【図19】論理/物理アドレス変換の処理を示すフローチャートである。
【図20】メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。
【図21】ブロック管理システム用の更新ブロック数に対する2つの所定の規制の典型例を概略的に示す。
【図22】様々なメモリ装置用に最適化された2つの規制の組み合わせの典型例を示す。
【図23A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図23B】従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。
【図23C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図24A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図24B】従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。
【図24C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図25A】図10のステップ410ならびに図23Bおよび図24Bに先に示す手法であって、新規の割り当てが所定の制限を超えるような場合にはいつでも、最も長時間アクセスされていない更新ブロックが閉鎖される手法を示す。
【図25B】図10のステップ370に先に示す手法であって、カオス的更新ブロック数が所定の制限を超える場合にはいつでも、最も長時間アクセスされていないカオス的(不連続)更新ブロックが閉鎖される手法を示す。
【図26A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図26B】本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。
【図26C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図27A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図27B】本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。
【図27C】空きを作るために他のカオス的更新ブロックが閉鎖および削除された後、新規のカオス的更新ブロックをプールに導入することを概略的に示す。
【図28】第1の実施形態に係る、連続更新中に更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【図29】第2の実施形態に係る、2つの所定の制限を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【図30】クラスベースの置換規則を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【発明を実施するための形態】
【0033】
図1から図20は、本願の様々な態様が実施されるようなブロック管理を伴うメモリシステムの例を示す。同様のメモリシステムが、Gorobetsらによる「Non-Volatile Memory and Method with Control Data Management 」という米国公開特許出願第2005/0144365号(特許文献16)に記載されている。
【0034】
図1は、本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。メモリシステム20は、典型的には、ホストインターフェイスを通じてホスト10と共に動作する。メモリシステムは、典型的には、メモリカードの形式を取るか、または埋め込み形メモリシステムである。メモリシステム20は、動作がコントローラ100によって制御されるメモリ200を含む。メモリ200は、1つ以上の集積回路チップに渡って分散された不揮発性メモリセルの1つ以上のアレイからなる。コントローラ100は、インターフェイス110と、プロセッサ120と、オプションのコプロセッサ121と、ROM122(読み出し専用メモリ)と、RAM130(ランダムアクセスメモリ)と、オプションのプログラム可能な不揮発性メモリ124とを含む。インターフェイス110は、ある構成要素をコントローラからホストへとインターフェイスさせ、他の構成要素をメモリ200とインターフェイスさせる。不揮発性ROM122および/またはオプションの不揮発性メモリ124に記憶されたファームウェアは、コントローラ100の機能を実施するためにプロセッサ120に対して符号を提供する。誤り訂正符号は、プロセッサ120またはオプションのコプロセッサ121によって処理されてもよい。代替の実施形態において、コントローラ100は、状態マシン(図示せず)によって実施される。さらに他の実施形態において、コントローラ100は、ホスト内で実施される。
【0035】
論理および物理ブロック構造
図2は、本発明の好ましい実施形態に係る、セクタ(またはメタブロック)の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。メモリ200は、メタブロックに組織化され、各メタブロックは、共に消去可能な物理セクタS0 ,...,SN-1 のグループである。
【0036】
ホスト10は、ファイルシステムまたはオペレーティングシステムの下でアプリケーションを実行する場合に、メモリ200にアクセスする。典型的には、ホストシステムは、データを論理セクタ単位でアドレス指定し、例えば、各セクタは、512バイトのデータを含んでもよい。また、ホストが、論理クラスタ単位でメモリシステムに対して読み出しまたは書き込みを行うのが通常であり、各クラスタは、1つ以上の論理セクタからなる。ホストシステムによっては、より低いレベルのメモリ管理をホスト側で行うためにオプションのホスト側メモリマネージャが存在する場合がある。多くの場合、読み出しまたは書き込み動作中に、ホスト10は、実質的に、メモリシステム20に対してコマンドを発行して、データの論理セクタのストリングを含むセグメントを連続するアドレスと共に読み出しまたは書き込みを行う。
【0037】
フラッシュメモリ200のメタブロック内のホスト論理セクタのデータの記憶および検索を管理するために、メモリ側メモリマネージャが、メモリシステム20のコントローラ100内で実施される。好ましい実施形態において、メモリマネージャは、メタブロックの消去、読み出し、書き込み動作を管理するための数多くのソフトウェアモジュールを含む。また、メモリマネージャは、フラッシュメモリ200とコントローラRAM130との間の動作に関連したシステム制御およびディレクトリデータを保持する。
【0038】
図3A(i)〜(iii)は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。物理メモリのメタブロックは、論理グループのデータのN個の論理セクタを記憶するためのN個の物理セクタを有する。図3A(i)は、論理グループLGi からのデータを示し、論理セクタは、連続論理順序0,1,...,N−1である。図3A(ii)は、同一の論理順序のメタブロック内に記憶されている同じデータを示す。このように記憶される場合に、メタブロックは、「順次」であるといわれる。一般的に、メタブロックは、異なる順序で記憶されたデータを有してもよく、その場合は、メタブロックは、「非順次」または「カオス的」であるといわれる。
【0039】
論理グループの最小のアドレスと、それがマッピングされるメタブロックの最小アドレスとの間には、オフセットがあることがある。この場合、論理セクタアドレスは、メタブロック内の論理グループの末尾から先頭へ戻るループとして折り返す。例えば、図3A(iii)では、メタブロックは、その最初の位置が論理セクタkのデータで始まるように記憶する。最終論理セクタN−1に達すると、セクタ0に戻り、最終的には、その最終物理セクタに論理セクタk−1に関連したデータを記憶する。好ましい実施形態において、メタブロックの最初の物理セクタに記憶されたデータの最初の論理セクタアドレスを識別するといった、任意のオフセットの識別のために、ページタグが使用される。2つのブロックは、ページタグだけが異なる場合、その論理セクタを同様の順序で記憶しているものと考えられる。
【0040】
図3Bは、論理グループとメタブロックと間のマッピングを概略的に示す。各論理グループは、データが現在更新中の少数の論理グループを除いて、固有のメタブロックにマッピングされる。論理グループが更新された後、別のメタブロックにマッピングされてもよい。マッピング情報は、論理/物理ディレクトリのセットに維持され、これについては、詳細に後述する。
【0041】
メタブロックマッピングに対する他の種類の論理グループも予期される。例えば、可変サイズのメタブロックが、本願と同日にAlan Sinclair によって出願された「Adaptive Metablocks 」という同時継続出願中の共有された米国特許出願(特許文献17)に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【0042】
本発明の特徴の1つは、システムは単一の論理区画で動作し、メモリシステムの論理アドレス範囲にわたる論理セクタのグループは同一に扱われることである。例えば、システムデータを含むセクタと、ユーザデータを含むセクタとは、論理アドレス空間内のどこにでも分散することができる。
【0043】
従来技術のシステムとは異なり、高頻度かつ小サイズの更新を伴うデータを含む可能性が高い論理アドレス空間セクタに局在化させるための、システムセクタ(すなわち、ファイル割り当てテーブルに関連するセクタ、ディレクトリ、またはサブディレクトリ)の特別な分割またはゾーニングはない。代わりに、セクタの論理グループを更新するこの手法は、システムセクタに典型的なアクセスパターンおよびファイルデータに典型的なアクセスパターンを効率的に扱うことになる。
【0044】
図4は、物理メモリにおける構造を含むメタブロックの配列を示す。フラッシュメモリは、一単位として共に消去可能なメモリセルのブロックを備える。このような消去ブロックは、フラッシュメモリの消去の最小単位、またはメモリの最小消去ユニット(MEU)である。最小消去ユニットは、メモリのハードウェア設計パラメータであるが、複数のMEUの消去をサポートするメモリシステムによっては、1つ以上のMEUを備える「超MEU」を構成することができる。フラッシュEEPROMについて、MEUは1つのセクタを備えてもよいが、複数のセクタが好ましい。図に示されている例では、M個のセクタを有する。好ましい実施形態において、各セクタは、512バイトのデータを記憶することができ、ユーザデータ部分と、システムまたはオーバーヘッドデータを記憶するためのヘッダ部分とを有する。メタブロックがP個のMEUから構成されている場合には、各MEUはM個のセクタを含み、そして、各メタブロックは、N=P*M個のセクタを有することになる。
【0045】
メタブロックは、システムレベルでは、例えば共に消去可能なセクタといった、メモリ位置のグループを表す。フラッシュメモリの物理アドレス空間は、メタブロックを消去の最小単位とした、メタブロックのセットとして扱われる。本願明細書において「メタブロック」および「ブロック」という用語は、媒体管理のためのシステムレベルにおける消去の最小単位を規定するために類義語として使用され、「最小消去ユニット」またはMEUは、フラッシュメモリの消去の最小単位を示すために使用される。
【0046】
メタブロックを形成するための最小消去ユニット(MEU)のリンク付け
プログラミング速度および消去速度を最大限にするために、複数のMEUにある複数のページの情報が並列にプログラミングされるように、かつ複数のMEUが並列に消去されるようにすることによって、並行処理ができる限り活用される。
【0047】
フラッシュメモリにおいて、ページは、1回の動作で共にプログラムすることができるメモリセルの集まりである。ページは、1つ以上のセクタを備えていてもよい。また、メモリアレイは、1つ以上のプレーンに分割されてもよく、1つのプレーン内の1つのMEUのみが1度にプログラムまたは消去されてもよい。最後に、プレーンは、1つ以上のメモリチップに渡って分散されていてもよい。
【0048】
フラッシュメモリにおいて、MEUは、1つ以上のページを備えていてもよい。フラッシュメモリチップ内のMEUは、プレーンに組織化されてもよい。各プレーンからの1つのMEUは並行してプログラムまたは消去されてもよいので、各プレーンから1つのMEUを選択することによって複数のMEUメタブロックを形成するのが得策である(以下の図5B参照)。
【0049】
図5Aは、互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。MB0,MB1,...などの各メタブロックは、メモリシステムの互いに異なるプレーンからのMEUから構成され、互いに異なるプレーンは、1つ以上のチップにわたって分散されていてもよい。図2に示されているメタブロックリンクマネージャ170は、各メタブロックについてのMEUのリンク付けを管理する。各メタブロックは、初期フォーマット処理中に構成され、その構成成分であるMEUを、MEUのうちの1つに障害があるまで、システムの寿命がある限り保持する。
図5Bは、1つの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【0050】
図5Cは、1つより多くの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。別の実施形態において、1つより多くのMEUが各プレーンから選択されて超MEUが形成されてもよい。例えば、超MEUは、2つのMEUから形成されてもよい。この場合、読み出しまたは書き込み動作について1つより多くのパスを利用してもよい。
【0051】
MEUをメタブロックにリンク付けまたは再リンク付けすることは、本願と同日にCarlos Gonzales らによって出願された「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures 」という同時継続出願中の共有された米国特許出願(特許文献18)に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【0052】
メタブロック管理
図6は、コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。メタブロック管理システムは、コントローラ100において実施された様々な機能モジュールを備え、様々な制御データ(ディレクトリデータを含む)をフラッシュメモリ200およびコントローラRAM130内に階層的に分散されたテーブルおよびリストに保持する。コントローラ100内に実装された機能モジュールは、インターフェイスモジュール110と、論理/物理アドレス変換モジュール140と、更新ブロックマネージャモジュール150と、消去ブロックマネージャモジュール160と、メタブロックリンクマネージャモジュール170とを含む。
【0053】
インターフェイス110により、メタブロック管理システムは、ホストシステムとインターフェイスすることができる。論理/物理アドレス変換モジュール140は、論理アドレスをホストから物理メモリ位置へマッピングする。更新ブロックマネージャモジュール150は、データの所定の論理グループについて、メモリにおけるデータ更新動作を管理する。消去ブロックマネージャモジュール160は、メタブロックの消去動作と、新規の情報を記憶するためのメタブロック割り当てとを管理する。メタブロックリンクマネージャモジュール170は、セクタの最小消去可能ブロックのサブグループのリンク付けを管理して、所定のメタブロックを構成する。これらのモジュールの詳細な説明は、それぞれの欄で行う。
【0054】
動作中に、メタブロック管理システムは、アドレス、制御および状態情報などの制御データを生成して、それと共に動作する。制御データのほとんどが小さなサイズの頻繁に変化するデータであることが多いので、大きなブロック構造のフラッシュメモリ内では簡単かつ効率的に記憶および保持することができない。より静的な制御データを不揮発性フラッシュメモリに記憶させ、より変化するより少ない量の制御データをコントローラRAMに位置づけるという階層的分散手法を使用することで、さらに効率的な更新およびアクセスを行う。電源遮断または障害時には、この手法により、揮発性コントローラRAM内の制御データは、不揮発性メモリ内の小さなセットの制御データを走査することによって、迅速に再構築することができる。これが可能なのは、本発明が、データの所定の論理グループの予想される動作に関連するブロックの数を制限しているからである。加えて、存続が必要とされる制御データのいくつかは、セクタ毎に更新可能な不揮発性のメタブロックに記憶され、新規のセクタを生じさせる各更新が、以前の更新に代わって記録される。セクタインデックス付け手法を制御データのために使用して、メタブロック内のセクタ毎の更新を追跡する。
【0055】
不揮発性フラッシュメモリ200は、比較的静的な大量の制御データを記憶する。これには、グループアドレステーブル(GAT)210と、カオス的ブロックインデックス(CBI)220と、消去済みブロックリスト(EBL)230と、MAP240とが含まれる。GAT210は、セクタの論理グループと、その対応するメタブロックとの間のマッピングを追跡する。マッピングは、更新を受けるもの以外は変化しない。CBI220は、更新中の論理的な非順次セクタのマッピングを追跡する。EBL230は、消去されたメタブロックのプールを追跡する。MAP240は、フラッシュメモリ内のすべてのメタブロックの消去状態を示すビットマップである。
【0056】
揮発性コントローラRAM130は、頻繁に変化およびアクセスされる制御データの小さな部分を記憶する。これには、割り当てブロックリスト(ABL)134と、クリア済みブロックリスト(CBL)136とが含まれる。ABL134は、更新データを記録するためにメタブロックの割り当てを追跡し、CBL136は、割り当て解除および消去されたメタブロックを追跡する。好ましい実施形態において、RAM130は、フラッシュメモリ200に記憶された制御データについてのキャッシュとしての役割を果たす。
【0057】
更新ブロックマネージャ
(図2に示されている)更新ブロックマネージャ150は、論理グループの更新を扱う。本発明の一態様によれば、更新を受けているセクタの各論理グループには、更新データを記録するために、専用の更新メタブロックが割り当てられる。好ましい実施形態において、論理グループの1つ以上のセクタの任意のセグメントが、更新ブロックに記録されることになる。更新ブロックは、順次順序または非順次(カオス的としても知られる)順序のいずれかで更新データを受信するように管理される。カオス的更新ブロックでは、セクタデータを論理グループ内で任意の順序で更新することができ、また個別のセクタの任意の繰り返しがあってもよい。特に、順次更新ブロックは、いずれのデータセクタの移転の必要なく、カオス的更新ブロックになりえる。カオス的データ更新には、ブロックの所定の割り当ては必要ない。任意の論理アドレスでの非順次書き込みが自動的に対処される。よって、従来技術のシステムとは異なり、論理グループの様々な更新セグメントが論理的な順次順序であってもまたは非順次順序であっても、特殊な処理はない。一般的な更新ブロックは、ホストによって要求された順序で様々なセグメントを記憶するために、単に使用されることになる。例えば、ホストシステムデータまたはシステム制御データがカオス的に更新されがちな場合でも、ホストシステムデータに対応する論理アドレス空間の領域を、ホストユーザデータを伴う領域と別々に扱う必要はない。
【0058】
セクタの完全な論理グループのデータは、1つのメタブロック内に論理的な順次順序で記憶されるのが好ましい。このように、記憶された論理セクタに対するインデックスは、予め規定されている。メタブロックが所定の順序で所定の論理グループのすべてのセクタを記憶している場合、これは「変化なし(intact)」といわれる。更新ブロックに関して、更新データを論理的な順次順序で最終的に充填する場合、更新ブロックは、元メタブロックを容易に置換する更新された変化なしのメタブロックとなる。他方、更新ブロックが更新データを、変化なしのブロックとは異なる論理的な順序で充填する場合、更新ブロックは、非順次またはカオス的更新ブロックであり、順序がばらばらのセグメントは、変化なしのブロックと同一の順序で論理グループの更新データが最終的には記憶されるように、さらに処理されなければならない。好ましい場合において、このセグメントは、1つのメタブロック内の論理的な順次順序である。さらなる処理には、元ブロック内の変化していないセクタを伴う更新ブロック内の更新されたセクタを、さらに他の更新メタブロックに統合化することを伴う。統合化された更新ブロックは、その後、論理的な順次順序となり、元ブロックを置換するために使用することができる。何らかの所定の条件下では、統合化処理に先立って、1つ以上のコンパクト化処理がある。コンパクト化処理は、カオス的更新ブロックのセクタを、置換するカオス的更新ブロックに単純に再記録し、同じ論理セクタの以前の更新によって廃止された重複する論理セクタを削除することはない。
【0059】
更新手法により、複数の更新スレッドを、所定の最大限まで並行して実行することができる。各スレッドは、専用の更新メタブロックを使用して更新を受けている論理グループである。
【0060】
順次データ更新
ある論理グループに属するデータを最初に更新する場合、論理グループの更新データについての更新ブロックとして、メタブロックが専用に割り当てられる。更新ブロックが割り当てられるのは、コマンドがホストから受信されて、既存のメタブロックがそのすべてのセクタを変化なく記憶している論理グループの1つ以上のセクタのセグメントを書き込む場合である。最初のホスト書き込み動作の場合、データの最初のセグメントが更新ブロックに記録される。各ホスト書き込みは連続論理アドレスを伴う1つ以上のセクタのセグメントであるので、最初の更新は、その性質上常に順次的であることとなる。後続のホスト書き込みでは、同一の論理グループ内の更新セグメントが、ホストから受信された順序で更新ブロックに記録される。ブロックは、順次更新ブロックとして管理され続けるのに対し、関連する論理グループ内でホストによって更新されたセクタは、論理的に順次的であり続ける。この論理グループ内で更新されたすべてのセクタは、このブロックが閉鎖されるか、カオス的更新ブロックに変換されるかのいずれかとなるまで、この順次更新ブロックに書き込まれる。
【0061】
図7Aは、2つの別個のホスト書き込み動作の結果、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の対応するセクタは廃止になる。ホスト書き込み動作#1において、論理セクタLS5〜LS8内のデータが更新中である。LS5’〜LS8’として更新されたデータは、新規に割り当てられた専用の更新ブロックに記録される。
【0062】
便宜上、論理グループ内の更新すべき第1のセクタは、第1の物理セクタ位置から開始する専用更新ブロックに記録される。一般的に、更新すべき第1の論理セクタは、必ずしもグループの論理的に第1番目のセクタではないので、論理グループの最初と、更新ブロックの最初との間にはオフセットがあることがある。このオフセットは、図3Aに関連して前に説明したように、ページタグとして知られている。後続のセクタは、論理的な順次順序で更新される。論理グループの最後のセクタが書き込まれる場合、グループアドレスは折り返して、書き込みシーケンスを、グループの最初のセクタで継続する。
【0063】
ホスト書き込み動作#2において、論理セクタLS9〜LS12内のデータのセグメントが更新中である。LS9’〜LS12’として更新されたデータは、専用の更新ブロック内の、最後の書き込みが終了した場所に直接続く位置に記録される。2つのホスト書き込みは、更新データが論理的な順次順序で、すなわち、LS5’〜LS12’のようにして、更新ブロックに記録されたようなものとして理解することができる。更新ブロックが順次更新ブロックとみなされるのは、論理的な順次順序で充填されているからである。更新ブロックに記録された更新データによって、元ブロック内の対応するデータが廃止される。
【0064】
カオス的データ更新
カオス的更新ブロック管理は、関連論理グループ内でホストによって更新された任意のセクタが論理的に非順次の場合に、既存の順次更新ブロックについて開始される。カオス的更新ブロックは、関連する論理グループ内の論理セクタが任意の順序でかつ任意の繰り返し量で更新されてもよいようなデータ更新ブロックの形式を取る。これは、ホストによって書き込まれたセクタが、更新中の論理グループ内の以前書き込んだセクタに対して論理的に非順次である場合に、順次更新ブロックからの変換によって作成される。この論理グループ内のその後の更新されたすべてのセクタは、グループ内の論理セクタアドレスが何であれ、カオス的更新ブロック内の次に使用可能なセクタ位置に書き込まれる。
【0065】
図7Bは、5つの別個のホスト書き込み動作の結果、カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の取り替えられたセクタと、カオス的更新ブロック内の複製セクタとは廃止になる。ホスト書き込み動作#1において、元メタブロックに記憶されている所定の論理グループの論理セクタLS10〜LS11が更新される。更新された論理セクタLS10’〜LS11’は、新規に割り当てられた更新ブロックに記憶される。この点で、更新ブロックは、順次的である。ホスト書き込み動作#2において、論理セクタLS5〜LS6がLS5’〜LS6’に更新されて、更新ブロック内の最終の書き込みに直接続く位置に記録される。これにより、更新ブロックは、順次的からカオス的なものへと変換される。ホスト書き込み動作#3において、論理セクタLS10が再び更新中であり、更新ブロックの次の位置にLS10’’として記録される。この点で、更新ブロック内のLS10’’は、元ブロック内のLS10に取って代わる以前の記録内のLS10’に取って代わる。ホスト書き込み動作#4において、論理セクタLS10内のデータは再び更新されて、更新ブロックの次の位置にLS10’’’として記録される。よって、LS10’’’が、論理セクタLS10についての現在における最新かつ唯一の有効データとなる。ホスト書き込み動作#5において、論理セクタLS30内のデータが更新中であり、更新ブロックにLS30’として記録される。よって、この例は、任意の順序および任意の繰り返しによって、論理グループ内のセクタをカオス的更新ブロックに書き込むことができることを示す。
【0066】
強制的順次更新
図8は、2つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。ホスト書き込み#1において、論理セクタLS5〜LS8における更新データは、LS5’〜LS8’として専用の更新ブロック内に記録される。ホスト書き込み#2において、論理セクタLS14〜LS16における更新データは、最終の書き込みに続く更新ブロック内にLS14’〜LS16’として記録されている。しかし、LS8とLS14との間にアドレスジャンプがあり、ホスト書き込み#2は、通常、更新ブロックを非順次的にすることになる。アドレスジャンプは重要ではないので、1つのオプションとしては、ホスト書き込み#2を実行する前に、介在セクタのデータを元ブロックから更新ブロックへコピーすることによってパディング動作(#2A)をまず行うというものである。このように、更新ブロックの順次的性質が維持される。
【0067】
図9は、本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ260:メモリはブロックに組織化され、各ブロックは共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものである。
ステップ262:データは論理グループに組織化され、各論理グループは、論理ユニットに分割される。
ステップ264:標準的な場合、論理グループのすべての論理ユニットは、第1の所定の順序、好ましくは論理的な順次順序に従って、元ブロックのメモリユニットに記憶される。このように、ブロック内の個々の論理ユニットをアクセスするためのインデックスがわかる。
ステップ270:データの所定の論理グループ(例えば、LGx )について、LGx 内で論理ユニットを更新するための要求が行われる(一例として、論理ユニット更新が挙げられる。一般的には、更新は、LGx 内の1つ以上の連続論理ユニットのセグメントとなる)。
ステップ272:要求された更新論理ユニットが、LGx の更新の記録専用の第2のブロックに記憶されることになる。記録順序は、第2の順序であり、典型的には、更新が要求された順序に従う。本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。第2の順序によっては、第2のブロックは、順次的なものである場合も、カオス的なものである場合もある。
ステップ274:処理がステップ270にループバックするにつれて、第2のブロックは、論理ユニットが記録されるように要求し続ける。閉鎖のための所定の条件が具体化すると、第2のブロックは閉鎖されて、さらなる更新を受信しなくなる。この場合、処理は276へ進む。
ステップ276:閉鎖された第2のブロックが元ブロックと同様の順序でその更新論理ユニットを記録しているかどうかについて決定が行われる。図3Aに関して説明したように、ページタグ分だけ異なる論理ユニットを記録している場合には、2つのブロックは同様の順序であるとみなされる。2つのブロックが同様の順序である場合は、処理はステップ280へ進み、そうでなければ、ステップ290において、何らかのガーベッジコレクションを行う必要がある。
ステップ280:第2のブロックは第1のブロックと同一の順序なので、第2のブロックは、元ブロックである第1のブロックを置換するために使用される。更新処理は、その後、ステップ299で終了する。
ステップ290:所定の論理グループの各論理ユニットの最新バージョンが、第2のブロック(更新ブロック)および第1のブロック(元ブロック)から収集される。所定の論理グループの統合化された論理ユニットは、その後、第1のブロックと同様の順序で第3のブロックに書き込まれる。
ステップ292:第3のブロック(統合化されたブロック)は第1のブロックと同様の順序であるので、第3のブロックは、元ブロックである第1のブロックを置換するために使用される。更新処理は、その後、ステップ299で終了する。
ステップ299:閉鎖処理によって変化のない更新ブロックが作成されると、これが所定の論理グループにとっての新規の標準ブロックとなる。論理グループについての更新スレッドは終了される。
【0068】
図10は、本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ310:データの所定の論理グループ(例えば、LGx )について、LGx 内で論理セクタを更新するための要求が行われる(一例として、セクタ更新が挙げられる。一般的には、更新は、LGx 内の1つ以上の連続論理セクタのセグメントととなる)。
ステップ312:LGx に専用の更新ブロックがまだ存在しない場合、ステップ410へ進み、論理グループについて新規の更新スレッドを開始する。これは、論理グループの更新データを記録するのに専用の更新ブロックを割り当てることによって達成されることになる。開放されている更新ブロックが既にあれば、ステップ314へ進み、更新ブロックに対する更新セクタの記録を開始する。
ステップ314:現在の更新ブロックが既にカオス的(すなわち、非順次的)である場合には、そのままステップ510へ進み、要求された更新セクタをカオス的更新ブロックに記録する。現在の更新ブロックが順次的である場合、ステップ316へ進み、順次更新ブロックの処理を行う。
ステップ316:本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。しかし、論理グループは、最終的にはそのデータを論理的な順次順序でメタブロックに記憶させるので、更新ブロックをできるだけ順次的に維持するのが望ましい。そうすれば、更新ブロックが閉鎖されてさらなる更新ができなくなった場合、ガーベッジコレクションは必要ないので、必要とされる処理が少なくなる。
【0069】
要求された更新が更新ブロックの現在の順次順序に従うかどうかについての決定がなされる。更新が順次的に従う場合、ステップ510へ進み、順次更新が行われ、更新ブロックは順次的なままである。他方、更新が順次的に従わない(カオス的更新の)場合、他の動作が行われないならば、順次更新ブロックをカオス的なものに変換する。
一実施形態において、状況を守るためにこれ以上何もせず、処理は直接ステップ370へ進み、更新ブロックをカオス的なものにする更新が許容される。
【0070】
オプションの強制的順次処理
他の実施形態において、強制的順次処理ステップ320が、保留中のカオス的更新の観点から順次更新ブロックをできるだけ保存するためにオプションとして行われる。2つの状況があり、どちらも、欠落したセクタを元ブロックからコピーして、更新ブロック上に記録された論理セクタの順次順序を維持するものである。第1の状況は、更新によって短いアドレスジャンプが生じることである。第2の状況は、更新ブロックを順次的に保つために、更新ブロックを早く閉鎖することである。強制的順次処理ステップ320は、以下のサブステップを含む。
ステップ330:更新によって、所定の量CB より大きい論理アドレスジャンプが生じる場合、処理はステップ350の強制的順次更新処理へと進み、そうでなければ、処理はステップ340へと進んで、強制的順次閉鎖の資格があるかどうかの検討を行う。
ステップ340:充填されていない物理セクタ数が、更新ブロックのサイズの半分が典型的な値である所定の設定パラメータCC を超える場合、更新ブロックは、比較的使用されず、早く閉鎖されることはない。処理はステップ370へ進み、更新ブロックは、カオス的となる。他方、更新ブロックがおおむね充填されている場合、既に十分に使っているとみなされるので、ステップ360へと進み、強制的順次閉鎖となる。
ステップ350:強制的順次更新により、現在の順次更新ブロックを、アドレスジャンプが所定量CB を超えない限り順次的なままとすることができる。基本的には、更新ブロックの関連する元ブロックからのセクタがコピーされて、アドレスジャンプによるギャップを埋める。よって、順次更新ブロックは、ステップ510へ進んで現在の更新を順次記録する前に、介在アドレス内のデータで埋められることになる。
ステップ360:強制的順次閉鎖により、現在の順次的な更新ブロックを、カオス的なものに変換するよりも保留中のカオス的更新によって既におおむね充填されていれば、閉鎖することができる。カオス的または非順次更新は、前述したアドレスジャンプ例外、逆方向アドレス遷移、またはアドレス反復の対象ではなく、順方向アドレス遷移を伴うものとして規定される。順次更新ブロックがカオス的更新によって変換されるのを防止するために、更新ブロックの未書き込みのセクタ位置が、更新ブロックの関連した元の部分的に廃止されたブロックからセクタをコピーすることによって充填される。元ブロックは、その後完全に廃止されて、消去することができる。現在の更新ブロックは、現在では、フルセットの論理セクタを有するので、元メタブロックを置き換える変化のないメタブロックとして閉鎖される。処理は、ステップ430へと進み、ステップ310において最初に要求された保留中のセクタ更新の記録を受け付けるために、新規の更新ブロックをその位置に割り当てる。
【0071】
カオス的更新ブロックへの変換
ステップ370:保留中の更新が順次順序でなく、オプションとして、強制的順次条件が満たされていない場合、処理がステップ510へ進むときに非順次アドレスを有する保留中の更新セクタが更新ブロックへ記録されるようにするために、順次更新ブロックは、カオス的なものに変換されることが許容される。カオス的更新ブロックの最大数が存在する場合に、変換が進む前に、最近最もアクセスされていないカオス的更新ブロックを閉鎖する必要がある。よって、カオス的更新ブロックの最大数が超えないようにする。最近最もアクセスされていないカオス的更新ブロックの識別は、ステップ420において説明した一般的な場合と同一であるが、カオス的更新ブロックだけに制約される。このときにカオス的更新ブロックを閉鎖することは、ステップ550において説明したような統合化によって達成される。
【0072】
システム制約を受ける新規の更新ブロックの割り当て
ステップ410:消去メタブロックを更新ブロックとして割り当てる処理は、所定のシステム制約が超えているかどうかを判断することから開始する。リソースは有限であるため、メモリ管理システムは、典型的には、更新ブロックの所定の最大数UMAX が並行して存在することを許容する。この制限は、順次更新ブロックとカオス的更新ブロックとの総計であり、設計パラメータである。好ましい実施形態において、この制限は、例えば、最大8つの更新ブロックである。また、システムリソースに対するさらなる高い需要により、並行して開放されているカオス的更新ブロックの最大数に対する対応する所定の制限があってもよい(例えば、4つ)。
よって、UMAX 個の更新ブロックが既に割り当てられていれば、次の割り当て要求は、既存の割り当てられたものの1つが閉鎖された後にはじめて満足することができるようになる。処理はステップ420へ進む。開放更新ブロックの数がCA を下回る場合には、処理は直接ステップ430へ進む。
【0073】
ステップ420:更新ブロックCA の最大数を超える場合には、最近最もアクセスされていない更新ブロックが閉鎖されて、ガーベッジコレクションが行われる。最近最もアクセスされていない更新ブロックは、最近最もアクセスされていない論理ブロックに関連した更新ブロックとして識別される。最近最もアクセスされていないブロックを決定する目的で、アクセスは、論理セクタの書き込みと、オプションで読み出しとを含む。開放更新ブロックのリストが、アクセス順に保持され、初期化の際には、アクセス順序は何ら想定されていない。更新ブロックの閉鎖は、更新ブロックが順次的な場合のステップ360および530、ならびに更新ブロックがカオス的な場合のステップ540に関連して説明したのと同様の処理に従う。閉鎖により、ステップ430において新規の更新ブロックを割り当てる空間ができる。
ステップ430:割り当て要求は、新規のメタブロックを所定の論理グループLGx に専用の更新ブロックとして割り当てることで満足される。その後、処理はステップ510へ進む。
【0074】
更新データの更新ブロックへの記録
ステップ510:要求された更新セクタは、更新ブロックの次に使用可能な物理位置上に記録される。その後、処理はステップ520へ進み、更新ブロックを閉鎖する機が熟したかどうかが判断される。
【0075】
更新ブロックの閉鎖
ステップ520:さらなる更新を受け付けるための空間が更新ブロックにまだある場合には、ステップ570へ進む。そうでない場合には、ステップ522へ進み、更新ブロックを閉鎖する。現在の要求された書き込みが、ブロックが有する空間よりも多くの論理セクタを書き込もうとするものである場合に、更新ブロックを満たす実装例として2つのものがある。第1の実装例において、書き込み要求は2つの部分に分割され、第1の部分がブロックの最終物理セクタまで書き込む。その後、ブロックは閉鎖され、書き込みの第2の部分が、次に要求された書き込みとして扱われることになる。他方の実装例において、要求された書き込みは、ブロックが残りのセクタが埋め込まれて閉鎖されている間は保留される。要求された書き込みは、次に要求された書き込みとして扱われることになる。
ステップ522:更新ブロックが順次的であれば、ステップ530へと進み、順次閉鎖となる。更新ブロックがカオス的であれば、ステップ540へと進み、カオス的閉鎖となる。
【0076】
順次更新ブロックの閉鎖
ステップ530:更新ブロックが順次的かつ満杯であるので、そこに記憶された論理グループには変化がない。メタブロックは変化がなく、元のものを置換する。このとき、元ブロックは完全に廃止され、消去されてもよい。その後、処理はステップ570へと進み、所定の論理グループに対する更新スレッドは終了する。
【0077】
カオス的更新ブロックの閉鎖
ステップ540:更新ブロックは非順次的に充填され、いくつかの論理セクタの複数の更新を含む場合もあるので、ガーベッジコレクションが行われて、内部の有効なデータを救い出す。カオス的更新ブロックは、コンパクト化または統合化のいずれかが行われることになる。どちらの処理を行うかは、ステップ542において決定される。
ステップ542:コンパクト化を行うか、または統合化を行うかは、更新ブロックの重なり具合に依存する。論理セクタが複数回更新されていれば、その論理アドレスは非常に重なっている。更新ブロックに記録された同一の論理セクタの複数のバージョンがあることになり、最後に記録されたバージョンのみが、この論理セクタについて有効なものである。複数のバージョンを有する論理セクタを含む更新ブロックにおいて、別個の論理セクタの数は、論理グループの数よりはるかに少ないことになる。
【0078】
好ましい実施形態において、更新ブロック内の別個の論理セクタの数が、論理グループの大きさの半分が典型的な値である所定の設計パラメータCD を超える場合には、閉鎖処理はステップ550において統合化を行い、そうでなければ、処理はステップ560においてコンパクト化を行う。
ステップ550:カオス的更新ブロックが統合化されることになる場合、元ブロックと更新ブロックとが、統合化されたデータを含む新規の標準メタブロックに置換されることになる。統合化後、更新スレッドはステップ570において終了する。
ステップ560:カオス的更新ブロックがコンパクト化されることになる場合、コンパクト化されたデータを保持する新規の更新ブロックに置換されることになる。コンパクト化後、コンパクト化された更新ブロックの処理は、ステップ570において終了する。代わりに、更新ブロックが再び書き込まれるまで、コンパクト化を遅らせることもでき、これにより、介在する更新がないのに統合化に続いてコンパクト化が生じる可能性を排除する。新規の更新ブロックは、その後、LGx における更新への次の要求がステップ502において生じるときに、所定の論理ブロックのさらなる更新を行う際に使用されることになる。
ステップ570:閉鎖処理によって変化のない更新ブロックが作成される場合には、それが所定の論理グループの新規の標準ブロックになる。この論理グループの更新スレッドは終了することになる。閉鎖処理によって既存のものを置換する新規の更新ブロックが作成される場合には、この新規の更新ブロックは、所定の論理グループに対して要求される次の更新を記録するために使用されることになる。更新ブロックが閉鎖されない場合には、処理は、LGx 内の更新に対する次の要求がステップ310に生じる場合に継続する。
【0079】
前述した処理からわかるように、カオス的更新ブロックが閉鎖される場合には、そこに記録された更新データがさらに処理される。特に、その有効データに対しては、他のカオス的ブロックへコンパクト化する処理か、またはその関連する元ブロックに統合化して新たな標準順次ブロックを形成する処理によって、ガーベッジコレクションが行われる。
【0080】
図11Aは、図10に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。カオス的更新ブロックの統合化は、更新ブロックが閉鎖されている場合、例えば、更新ブロックが最終物理セクタ位置に書き込みがなされた状態で一杯である場合に行われる、2つの予想される処理のうちの1つである。統合化は、ブロックに書き込まれた別個の論理セクタの数が所定の設計パラメータCD を超える場合に選ばれる。図10に示されている統合化処理ステップ550は、以下のサブステップを備える。
ステップ551:カオス的更新ブロックが閉鎖されている場合に、それを置換する新規のメタブロックが割り当てられることになる。
ステップ552:廃止されたセクタはすべて無視して、カオス的更新ブロックおよびその関連する元ブロック内の各論理セクタの最新バージョンを収集する。
ステップ554:収集された有効なセクタを新規のメタブロックに論理的な順次順序で記録して、変化のないブロック、すなわち、論理グループのすべての論理セクタが順次順序で記録されているブロックを形成する。
ステップ556:元ブロックを新規の変化のないブロックに置換する。
ステップ558:閉鎖された更新ブロックおよび元ブロックを消去する。
【0081】
図11Bは、図10に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。コンパクト化は、ブロック内の別個の論理セクタの数が所定の設計パラメータCD を下回る場合に選ばれる。図10に示されているコンパクト化処理ステップ560は、以下のサブステップを備える。
ステップ561:カオス的更新ブロックがコンパクト化されている最中に、それを置換する新規のメタブロックが割り当てられる。
ステップ562:コンパクト化されるべき既存のカオス的更新ブロック内の各論理セクタの最新バージョンを収集する。
ステップ564:収集されたセクタを新規更新ブロックに記録して、コンパクト化されたセクタを有する新規の更新ブロックを形成する。
ステップ566:既存の更新ブロックをコンパクト化されたセクタを有する新規の更新ブロックに置換する。
ステップ568:閉鎖された更新ブロックを消去する。
【0082】
論理およびメタブロック状態
図12Aは、様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
図12Bは、論理グループの予想される状態を列挙する表である。論理グループの状態は、以下のように規定される。
1.変化なし:論理グループ内のすべての論理セクタが、論理的な順次順序で、ページタグ折り返しなどを使用して、1つのメタブロックに書き込まれている。
2.未書き込み:論理グループ内の論理セクタが全く書き込まれていない。論理グループは、グループアドレステーブルにおいて未書き込みとして印付けされ、割り当てられたメタブロックはない。このグループ内のすべてのセクタに対するホスト読み出しに応答して、予め定められたデータパターンが返される。
3.順次更新:論理グループ内のいくつかのセクタが、論理的な順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。
4.カオス的更新:論理グループ内のいくつかのセクタが、論理的な非順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。グループ内のセクタは、1回より多く書き込まれてもよく、最新のバージョンが、以前のすべてのバージョンを置換することになる。
【0083】
図13Aは、様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。
図13Bは、メタブロックの予想される状態を列挙する表である。メタブロックの状態は、以下のように規定される。
1.消去済み:メタブロック内のすべてのセクタは消去される。
2.順次更新:メタブロックには、セクタが論理的な順次順序でページタグなどを使用して部分的に書き込まれている。すべてのセクタは、同一の論理グループに属する。
3.カオス的更新:メタブロックには、セクタが論理的な非順次順序で部分的または一杯に書き込まれている。任意のセクタは1回より多く書き込むことができる。すべてのセクタは、同一の論理グループに属する。
4.変化なし:メタブロックは、論理的な順次順序でページタグなどを使用して一杯に書き込まれている。
5.オリジナル:メタブロックは、以前は変化なしであったが、少なくとも1つのセクタがホストデータ更新によって廃止されている。
【0084】
図14(A)〜14(J)は、論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
図14(A)は、第1の書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、依然未書き込みの論理グループの1つ以上のセクタを、新規に割り当てられた消去済みメタブロックに、論理的な順次順序で書き込む。論理グループおよびメタブロックは、順次更新状態になる。
図14(B)は、第1の変化なし動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、すべてのセクタが順次的にホストによって書き込まれると、変化なしとなる。この遷移は、カードが残りの未書き込みのセクタを予め定められたデータパターンで埋めることによって、グループを充填する場合も生じうる。メタブロックは変化なしとなる。
図14(C)は、第1のカオス的動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、少なくとも1つのセクタが非順次的にホストによって書き込まれると、カオス的となる。
図14(D)は、最初のコンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧ブロックから新規のカオス的メタブロックへコピーされ、旧ブロックは、その後消去される。
図14(E)は、最初の統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧カオス的ブロックから移動されて、新規に割り当てられたブロックに論理的な順次順序で充填される。ホストによって書き込みされていないセクタには、予め定められたデータパターンが充填される。旧カオス的ブロックは、その後消去される。
【0085】
図14(F)は、順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、変更なしの論理グループの1つ以上のセクタを、論理的な順次順序で、新規に割り当てられた消去済みブロックに書き込む。論理グループおよびメタブロックは、順次更新状態となる。以前変更なしであったメタブロックは、元メタブロックとなる。
図14(G)は、順次充填動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、そのすべてのセクタが順次的にホストによって書き込まれる場合に、変化なしとなる。これは、順次更新論理グループを変化無しとするために、元ブロックからの有効なセクタで充填する場合にも生じることがあり、その後、元ブロックは消去される。
図14(H)は、非順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、少なくとも1つのセクタが非順次的にホストによって書き込まれる場合に、カオス的となる。非順次的セクタの書き込みは、更新ブロック内または対応する元ブロック内のいずれかの有効なセクタを廃止することがあってもよい。
図14(I)は、コンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧ブロックから新規のカオス的メタブロックへコピーされて、旧ブロックは、その後消去される。元ブロックは、影響を受けない。
図14(J)は、統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧カオス的ブロックおよび元ブロックからコピーされて、新規に割り当てられた消去ブロックは論理的な順次順序で充填される。その後、旧カオス的ブロックおよび元ブロックは消去される。
【0086】
更新ブロックの追跡および管理
図15は、割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト(ABL)の構造の好ましい実施形態を示す。割り当てブックリスト(ABL)610は、コントローラRAM130に保持され、消去されたブロックの割り当て、割り当てられた更新ブロック、関連するブロック、および制御構造の管理を行うことができ、また正確な論理/物理アドレス変換を可能にする。好ましい実施形態において、ABLは、消去済みブロックのリストと、開放更新ブロックリスト614と、閉鎖更新ブロックリスト616とを含む。
【0087】
開放更新ブロックリスト614は、開放更新ブロックの属性を伴う、ABL内のブロックエントリのセットである。開放更新ブロックリストは、現在開放されている各データ更新ブロック毎に1つのエントリを有する。各エントリは、以下の情報を保持する。LGは、現在の更新メタブロックが専用である論理グループアドレスである。順次/カオス的は、更新ブロックが順次またはカオス的更新データで充填されているかどうかを示す状態である。MBは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。書き込まれたセクタ数は、更新ブロックに現在書き込まれたセクタの数を示す。MB0 は、関連する元ブロックのメタブロックアドレスである。ページタグ0 は、関連する元ブロックのページタグである。
【0088】
閉鎖更新ブロックリスト616は、割り当てブロックリスト(ABL)のサブセットである。閉鎖更新ブロックの属性を伴う、ABL内のブロックエントリのセットである。閉鎖更新ブロックリストは、閉鎖されたデータ更新ブロック毎に1つのエントリを有するが、そのエントリは、論理的に主要物理ディレクトリに更新されていない。各エントリは、以下の情報を保持する。LGは、現在の更新ブロックが専用である論理グループアドレスである。MBは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。MB0 は、関連する元ブロックのメタブロックアドレスである。
【0089】
カオス的ブロックのインデックス付け
順次更新ブロックは、論理的に順次順序でデータを記憶しているので、ブロック内の任意の論理セクタは、容易に位置決定することができる。カオス的更新ブロックは、その論理セクタを順序がばらばらに記憶し、論理セクタの複数の更新生成物を記憶してもよい。各有効な論理セクタがカオス的更新ブロックのどこにあるかを追跡するために、追加の情報を保持しなければならない。
【0090】
好ましい実施形態において、カオス的ブロックのインデックス付けのデータ構造は、カオス的ブロックにおけるすべての有効なセクタの追跡および高速アクセスを可能にする。カオス的ブロックのインデックス付けは、論理アドレス空間の小さな領域を独立して管理するものであり、システムデータと、ユーザデータのホット領域を効率的に扱う。インデックス付けデータ構造により、性能が大幅な影響を受けないように、本質的にインデックス付け情報が、更新が稀であるという要件でフラッシュメモリ内に保持することができる。他方、カオス的ブロックに現在書き込まれているセクタのリストは、コントローラRAMにおけるカオス的セクタリストに保持される。また、フラッシュメモリからのインデックス情報のキャッシュが、アドレス変換のためのフラッシュセクタアクセス数を最小限にするために、コントローラRAMに保持される。カオス的ブロック毎のインデックスが、フラッシュメモリ内のカオス的ブロックインデック(CBI)内に記憶される。
【0091】
図16Aは、カオス的ブロックインデックス(CBI)セクタのデータフィールドを示す。カオス的ブロックインデックスセクタ(CBIセクタ)は、カオス的更新ブロックにマッピングされた論理グループ内のセクタ毎のインデックスを含み、カオス的更新ブロックまたはその関連する元ブロック内の論理グループの各セクタの位置を規定する。CBIセクタは、カオス的ブロック内の有効セクタを追跡するためのカオスブロックインデックスフィールドと、カオスブロックについてのアドレスパラメータを追跡するためのカオス的ブロック情報フィールドと、CBIセクタを記憶するメタブロック(CBIブロック)内の有効なCBIセクタを追跡するためのセクタインデックスフィールドとを含む。
【0092】
図16Bは、カオス的ブロックインデックス(CBI)セクタが専用のメタブロックに記録されている一例を示す。専用のメタブロックを、CBIブロック620と称する。CBIセクタが更新されると、CBIブロック620内の次に使用可能な物理セクタ位置に書き込まれる。したがって、CBIセクタの複数のコピーがCBIブロック内に存在し、最後に書き込まれたコピーのみが有効である。例えば、論理グループLG1 についてのCBIセクタは3回更新され、最後に書き込まれたコピーのみが有効なものである。CBIブロック内の各有効セクタの位置は、ブロック内の最後に書き込まれたCBIセクタ内のインデックスのセットによって識別される。この例において、ブロック内に最後に書き込まれたCBIセクタは、LG136 についてのCBIセクタであり、そのインデックスのセットは、以前のすべてのものに取って代わる有効なものである。CBIブロックが最終的にCBIセクタで満杯になると、ブロックは、制御書き込み動作中に、すべての有効セクタを新規のブロック位置に書き換えることによってコンパクト化される。その後、一杯のブロックは、消去される。
【0093】
CBIセクタ内のカオス的ブロックインデックスフィールドは、カオス的更新ブロックにマッピングされた論理グループまたはサブグループ内の各論理セクタについてのインデックスエントリを含む。各インデックスエントリは、対応する論理セクタについての有効データが位置するカオス的更新ブロック内のオフセットを示す。予約されたインデックス値は、論理セクタについての有効データがカオス的更新ブロック内に存在しないことを示し、関連する元ブロック内の対応するセクタが有効であることを示す。いくつかのカオス的ブロックインデックスフィールドエントリのキャッシュが、コントローラRAMに保持される。
【0094】
CBIセクタ内のカオス的ブロック情報フィールドは、システム内に存在するカオス的更新ブロック毎に1つのエントリを含み、ブロックについてのアドレスパラメータ情報を記録する。このフィールド内の情報は、CBIブロック内に最後に書き込まれたセクタにおいて有効であるのみである。この情報は、RAM内のデータ構造にも存在する。
【0095】
カオス的更新ブロック毎のエントリは、3つのアドレスパラメータを含む。1つ目は、カオス的更新ブロックに関連する論理グループの論理アドレス(または論理グループ番号)である。2つ目は、カオス的更新ブロックのメタブロックアドレスである。3つ目は、カオス的更新ブロック内に最後に書き込まれたセクタの物理アドレスのオフセットである。オフセット情報は、RAM内にデータ構造を再構築するために、初期化中のカオス的更新ブロックの走査のための開始点を設定する。
【0096】
セクタインデックスフィールドは、CBIブロックにおける有効CBIセクタ毎のエントリを含む。各許可されたカオス的更新ブロックに関する最も最近書き込まれたCBIセクタが位置するCBIブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可されたカオス的更新ブロックが存在しないことを示す。
【0097】
図16Cは、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。更新処理中に、更新データがカオス的更新ブロックに更新データを記録し、変化していないデータは、論理グループに関連する元メタブロック内に留まる。カオス的更新下で論理グループの論理セクタをアクセスする処理は、以下のようである。
ステップ650:所定の論理グループの所定の論理セクタの位置決定を開始する。
ステップ652:CBIブロック内の最終書き込みCBIセクタを位置決定する。
ステップ654:最終書き込みCBIセクタのカオス的ブロック情報フィールドを検索することによって、所定の論理グループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ662の前であればいつでも行うことができる。
ステップ658:最終書き込みCBIセクタが所定の論理グループ宛であれば、CBIセクタは位置決定される。ステップ662へ進む。そうでなければ、ステップ660へ進む。
ステップ660:最終書き込みCBIセクタのセクタインデックスフィールドを検索することによって、所定の論理グループについてのCBIセクタを位置決定する。
ステップ662:位置決定されたCBIセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【0098】
図16Dは、論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。CBIセクタの容量は有限なので、論理セクタの所定の最大数を追跡することができるのみである。論理グループが単一のCBIセクタが扱えるより多くの論理セクタを有する場合には、論理グループは、CBIセクタがそれぞれ割り当てられた複数のサブグループに分割される。一例において、各CBIセクタは、256個のセクタと、8個までのカオス的更新ブロックとからなる論理グループを追跡するのに十分な容量を有する。論理グループが256セクタを超えるサイズを有する場合には、256セクタのサブグループのそれぞれための別個のCBIセクタが論理グループ内に存在する。8個までのサブグループのためのCBIセクタが論理グループ内に存在してもよく、サイズで2048個のセクタまでの論理グループに対してサポートを提供する。
好ましい実施形態において、インデックスの管理を促進するために、間接インデックス付け手法が取られる。セクタインデックスの各エントリは、直接および間接フィールドを有する。
【0099】
直接セクタインデックスは、特定のカオス的更新ブロックに関連するすべての予想されるCBIセクタが位置するCBIブロック内のオフセットを規定する。このフィールドの情報は、最後に書き込まれた、この特定のカオス的更新ブロックに関連するCBIセクタにおいてのみ有効である。インデックス内のオフセットの予約値は、CBIセクタが存在しないことを示す。というのは、カオス的更新ブロックに関連する対応する論理サブグループが、存在しないか、または更新ブロックが割り当てられて以来更新されていないからである。
【0100】
間接セクタインデックスは、各許可されたカオス的更新ブロックに関連する最も最近書き込まれたCBIセクタが位置するCBIブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可された更新ブロックが存在しないことを示す。
【0101】
図16Dは、以下のような、カオス的更新下の論理グループの論理セクタをアクセスする処理を示す。
ステップ670:各論理グループを複数のサブグループに分割して、CBIセクタを各サブグループに割り当てる。
ステップ680:所定の論理グループの所定のサブグループの所定の論理セクタの位置決定を開始する。
ステップ682:CBIブロック内の最終書き込みCBIセクタを位置決定する。
ステップ684:最終書き込みCBIセクタのカオス的ブロック情報フィールドを検索することによって、所定のサブグループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ696の前であればいつでも行うことができる。
ステップ686:最終書き込みCBIセクタが所定の論理グループ宛である場合には、ステップ691へ進む。そうでなければ、ステップ690へ進む。
ステップ690:最終書き込みCBIセクタの間接セクタインデックスフィールドを検索することによって、所定の論理グループについての複数のCBIセクタの最終書き込みを位置決定する。
ステップ691:所定の論理グループについてのサブグループの1つに関連したCBIセクタが少なくとも位置決定されている。続く。
ステップ692:位置決定されたCBIセクタが所定のサブグループ宛である場合には、この所定のサブグループについてのCBIセクタが位置決定される。ステップ696へ進む。そうでなければ、ステップ694へ進む。
ステップ694:現在の位置決定されたCBIセクタの直接セクタフィールドを検索することによって、所定のサブグループについてのCBIセクタを位置決定する。
ステップ696:所定のサブグループについてのCBIセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【0102】
図16Eは、各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け(CBI)セクタおよびその機能の例を示す。論理グループ700は、その変化のないデータを、元メタブロック702内に記憶する。その後、論理グループは、専用のカオス的更新ブロック704の割り当てを伴う更新を受ける。この例において、論理グループ700は、サブグループA,B,C,Dのようなサブグループに分割され、各サブグループは256個のセクタを有する。
【0103】
サブグループB内のi番目のセクタを位置決定するために、CBIブロック620内の最終書き込みCBIセクタを最初に位置決定する。最終書き込みCBIセクタのカオス的ブロック情報フィールドは、所定の論理グループについてのカオス的更新ブロック704を位置決定するためのアドレスを提供する。同時に、これは、カオス的ブロックに書き込まれた最終セクタの位置をも提供する。この情報は、走査および再構築の際に有用である。
【0104】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちの1つであることがわかると、このセクタが確かにi番目の論理セクタを含む所定のサブグループBについてのCBIセクタかどうかをさらに確認することになる。そうであれば、CBIセクタのカオス的ブロックインデックスは、i番目の論理セクタについてのデータを記憶するメタブロック位置を指すことになる。セクタ位置は、カオス的更新ブロック704または元ブロック702のいずれかでありうる。
【0105】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちの1つではあるが、正確にはサブグループBについてのCBIセクタではないことがわかると、その直接セクタインデックスを検索して、サブグループBについてのCBIセクタを位置決定する。この正確なCBIセクタが位置決定されると、そのカオス的ブロックインデックスを検索して、カオス的更新ブロック704および元ブロック702の中のi番目の論理セクタを位置決定する。
【0106】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちのいずれでもないことがわかると、その間接セクタインデックスを検索して、4つのうちの1つを位置決定する。図16Eに示されている例において、サブグループCについてのCBIセクタを位置決定する。その後、サブグループCについてのこのCBIセクタは、その直接セクタインデックスを検索して、サブグループBについての正確なCBIセクタを位置決定する。図に示されている例では、カオス的ブロックインデックスを検索すると、i番目の論理セクタが変化していないことがわかり、その有効データが元データ内で位置決定される。
【0107】
同様の検討が、所定の論理グループのサブグループC内のj番目の論理セクタを位置決定することにも適用される。図に示されている例では、最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちのいずれでもないことがわかる。その間接セクタインデックスは、所定のグループについての4つのCBIセクタのうちの1つを指す。また、4つのうちの指された最終書き込み分は、確かにサブグループCについてのCBIセクタであることがわかる。そのカオス的ブロックインデックスを検索すると、j番目の論理セクタが、カオス的更新ブロック704内の指定された位置に位置決定されることがわかる。
【0108】
カオス的セクタのリストが、システム内の各カオス的更新ブロックについてのコントローラRAM内にある。各リストは、関連するCBIセクタがフラッシュメモリ内で最後に更新されたときからの、カオス的更新ブロック内に書き込まれたセクタの記録を含む。特定のカオス的更新ブロックについての論理セクタアドレスの数は、カオス的セクタリスト内に保持することができ、8から16というのが典型的な値の設計パラメータである。このリストの最適なサイズは、カオス的データ書き込み動作についてのオーバーヘッドに対する影響と、初期化中のセクタ走査時間とを調整して決定される。
【0109】
システム初期化中に、各カオス的更新ブロックを必要に応じて走査して、関連するCBIセクタのうちの1つについての以前の更新以来書き込まれた有効なセクタを識別する。各カオス的更新ブロックについてのコントローラRAM内のカオス的セクタリストが構築される。各ブロックは、最終書き込みCBIセクタ内のカオス的ブロック情報フィールドで規定された最終セクタアドレスから走査されればよい。
【0110】
カオス的更新ブロックが割り当てられると、CBIセクタが、すべての更新された論理サブグループに対応するように書き込まれる。カオス的更新ブロックについての論理および物理アドレスは、カオス的ブロックインデックスフィールド内の空白エントリと共に、セクタ内の使用可能なカオス的ブロック情報フィールド内に書き込まれる。カオス的セクタリストは、コントローラRAMにおいて開放される。
カオス的更新ブロックが閉鎖されると、CBIセクタが、セクタ内のカオス的ブロック情報フィールドから除去されたブロックの論理および物理アドレスと共に書き込まれる。RAM内の対応するカオス的セクタリストは、使用されなくなる。
【0111】
コントローラRAM内の対応するカオス的セクタリストは、カオス的更新ブロックに書き込まれたセクタの記録を含むように修正される。コントローラRAM内のカオス的セクタリストが、カオス的更新ブロックに対するさらなるセクタ書き込みの記録について使用可能な空間を有していない場合には、更新されたCBIセクタが、リスト内のセクタに関連する論理サブグループについて書き込まれ、リストはクリアされる。
CBIブロック620が満杯になると、有効なCBIセクタが割り当てられた消去済みブロックにコピーされ、以前のCBIブロックは消去される。
【0112】
アドレステーブル
図2に示されている論理/物理アドレス変換モジュール140は、ホストの論理アドレスをフラッシュメモリ内の対応する物理アドレスに関連付ける役割を担う。論理グループと物理グループ(メタブロック)との間のマッピングが、不揮発性フラッシュメモリ200および揮発性だが動作が速いRAM130(図1参照)に分散されたテーブルおよびリストのセット内に記憶される。アドレステーブルは、フラッシュメモリに保持され、メモリシステム内の各論理グループについてのメタブロックアドレスを含む。加えて、最近書き込まれたセクタについての論理/物理アドレス記録は、RAMに一時的に保持される。これらの揮発性記録は、電源投入後にシステムを初期化するときに、フラッシュメモリ内のブロックリストおよびデータセクタヘッダから再構築することができる。よって、フラッシュメモリ内のアドレステーブルは、たまに更新されればよく、制御データについてのオーバーヘッド書き込み動作の割合が減ることになる。
【0113】
論理グループについてのアドレス記録の階層は、開放更新ブロックリストと、RAM内の閉鎖更新ブロックリストと、フラッシュメモリに保持されたグループアドレステーブル(GAT)とを含む。
開放更新ブロックリストは、更新されたホストセクタデータについて現在開放されているデータ更新ブロックのコントローラRAM内のリストである。あるブロックに対するエントリは、ブロックが閉鎖されると、閉鎖更新ブロックリストに移動される。閉鎖更新ブロックリストは、閉鎖されているデータ更新ブロックのコントローラRAM内のリストである。リスト内のエントリのサブセットは、制御書き込み動作中に、グループアドレステーブル内のセクタに移動される。
【0114】
グループアドレステーブル(GAT)は、メモリシステム内のホストデータのすべての論理グループについてのメタブロックアドレスのリストである。GATは、論理アドレスに従って順次的に並べられた、論理グループ毎に1つのエントリを含む。GAT内のn番目のエントリは、アドレスnの論理グループについてのメタブロックアドレスを含む。好ましい実施形態において、このテーブルは、フラッシュメモリ内にあるテーブルであり、メモリシステム内のすべての論理グループについてのメタブロックアドレスを規定するエントリを伴うセクタ(GATセクタと称する)のセットを含む。GATセクタは、フラッシュメモリ内の1つ以上の専用制御ブロック(GATブロックと称する)内にある。
【0115】
図17Aは、グループアドレステーブル(GAT)セクタのデータフィールドを示す。GATセクタは、例えば、128個の連続する論理グループのセットについてのGATエントリを含むのに十分な容量を有してもよい。各GATセクタは、2つの構成要素、すなわち、ある範囲内の各論理グループのメタブロックアドレスについてのGATエントリのセットと、GATセクタインデックスとを含む。第1の構成要素は、論理アドレスに関連するメタブロックを位置決定するための情報を含む。第2の構成要素は、GATブロック内のすべての有効なGATセクタを位置決定するための情報を含む。各GATエントリは、3つのフィールド、すなわち、メタブロック番号と、図3A(iii)に関連して前に規定したようなページタグと、メタブロックが再リンクされたかどうかを示すフラグとを有する。GATセクタインデックスは、GATブロック内の有効なGATセクタの位置を列挙する。このインデックスは、各GATセクタ内にあるが、GATブロック内の次に書き込まれたGATセクタのバージョンによって取って代わられる。よって、最終書き込みGATセクタ内のバージョンのみが有効である。
【0116】
図17Bは、グループアドレステーブル(GAT)セクタが1つ以上のGATブロックに記録されている一例を示す。GATブロックは、GATセクタを記録する専用のメタブロックである。GATセクタが更新される場合には、GATブロック720内の次に使用可能な物理セクタ位置に書き込まれる。したがって、GATセクタの複数のコピーがGATブロック内に存在することがあり、最後に書き込まれたコピーのみが有効である。例えば、GATセクタ45は、少なくとも2回更新され、最終バージョンが有効なものである。GATブロック内の各有効セクタの位置は、ブロック内の最終書き込みGATセクタ内のインデックスのセットによって識別される。この例において、ブロック内の最終書き込みGATセクタは、GATセクタ56であり、そのインデックスのセットは、すべての以前のものにとって代わる有効なものである。GATブロックが、GATセクタで最終的に満杯になった場合には、ブロックは、すべての有効なセクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【0117】
前に説明したように、GATブロックは、論理アドレス空間のある領域におけるグループの論理的に連続したセットについてのエントリを含む。GATブロック内のGATセクタは、それぞれ、128個の連続する論理グループについての論理/物理マッピング情報を含む。GATブロックが対象とするアドレス範囲内のすべての論理グループについてのエントリを記憶するのに必要な数多くのGATセクタは、ブロック内の全セクタ位置のほんのわずかを占めるに過ぎない。したがって、あるGATセクタは、ブロック内の次に使用可能なセクタ位置に書き込まれることによって更新されてもよい。すべての有効なGATセクタおよびそれらのGATブロック内の位置のインデックスが、直近の書き込みGATセクタ内のインデックスフィールドに保持される。有効なGATセクタによって占められたGATブロック内の僅かな合計セクタは、システム設計パラメータであり、典型的には25%である。しかし、GATブロック毎に最大64個の有効GATセクタがある。論理容量が大きいシステムにおいて、1つ以上のGATブロックにGATセクタを記憶する必要がある場合がある。この場合、各GATブロックは、固定的な範囲の論理グループに関連付けられる。
【0118】
GAT更新は、制御書き込み動作の一部として行われ、割り当てのためのブロックがABLになくなったときにトリガされる(図18参照)。これは、ABL充填動作およびCBLを空にする動作と並行して行われる。GAT更新動作中に、1つのGATセクタは、閉鎖更新ブロックリスト内の対応するエントリからの情報で更新されたエントリを有する。GATエントリが更新されると、対応するエントリはどれでも、閉鎖更新ブロックリスト(CUBL)から除去される。例えば、更新すべきGATセクタは、閉鎖更新ブロックリスト内の最初のエントリに基づいて選択される。更新されたセクタは、GATブロック内の次に使用可能なセクタ位置に書き込まれる。
【0119】
更新されたGATセクタに使用可能なセクタ位置がなくなったときに、GAT書き換え動作は、制御書き込み動作中に生じる。新たなGATブロックが割り当てられ、GATインデックスによって規定された有効なGATセクタは、順次順序で一杯のGATブロックからコピーされる。その後、一杯のGATブロックは消去される。
【0120】
GATキャッシュは、GATセクタ内の128個のエントリの再分割部分内のエントリの、コントローラRAM130内のコピーである。GATキャッシュエントリの数は、システム設計パラメータであり、典型的な値は32である。該当セクタの再分割部分についてのGATキャッシュは、エントリがGATセクタから読み出される度に作成される。複数のGATキャッシュが保持される。その数は、設計パラメータであり、典型的な値は4である。GATキャッシュは、最近最も使用されていないことに基づいて、異なるセクタの再分割部分についてのエントリで上書きされる。
【0121】
消去済みメタブロックの管理
図2に示されている消去ブロックマネージャ160は、ディレクトリおよびシステム制御情報を保持するためのリストのセットを使用して、消去ブロックを管理する。これらのリストは、コントローラRAM130およびフラッシュメモリ200に分散されている。消去されたメタブロックがユーザデータの記憶のため、またはシステム制御データ構造の記憶のために割り当てられなければならない場合には、コントローラRAMに保持された割り当てブロックリスト(ABL)(図15参照)内の次に使用可能なメタブロック番号が選択される。同様に、メタブロックが廃棄後に消去される場合には、その番号が、同じくコントローラRAMに保持されたクリア済みブロックリスト(CBL)に追加される。比較的静的なディレクトリおよびシステム制御データが、フラッシュメモリ内に記憶される。これらには、消去済みブロックリストと、フラッシュメモリ内のすべてのメタブロックの消去された状態のビットマップ(MAP)リストとが含まれる。消去済みブロックリストおよびMAPは、個別のセクタに記憶され、MAPブロックとして知られる専用のメタブロックに記録される。これらのリストは、コントローラRAMおよびフラッシュメモリに分散されて、消去済みメタブロックの使用を効率的に管理するための消去済みブロック記録の階層を提供する。
【0122】
図18は、消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。制御およびディレクトリデータは、コントローラRAM130内か、フラッシュメモリ200内に常駐するMAPブロック750内のいずれかに保持されるリストに保持される。
【0123】
好ましい実施形態において、コントローラRAM130は、割り当てブロックリスト(ABL)610と、クリア済みブロックリスト(CBL)740とを保持する。図15に関連して前に説明したように、割り当てブロックリスト(ABL)は、ユーザデータの記憶のため、またはシステム制御データ構造の記憶のために最近割り当てられたのがどのメタブロックかを追跡する。新規の消去済みメタブロックを割り当てる必要がある場合には、割り当てブロックリスト(ABL)内の次に使用可能なメタブロック番号が選択される。同様に、クリア済みブロックリスト(CBL)を使用して、割り当て解除および消去された更新メタブロックを追跡する。ABLおよびCBLは、比較的アクティブな更新ブロックを追跡する際の迅速なアクセスおよび容易な操作のために、コントローラRAM130(図1参照)に保持される。
【0124】
割り当てブロックリスト(ABL)は、消去済みメタブロックのプールと、消去済みメタブロックを更新ブロックにする割り当てとを追跡する。よって、これらの各メタブロックは、ABL保留割り当ての消去済みブロックか、開放更新ブロックか、閉鎖更新ブロックかどうかを指定する属性によって記述されてもよい。図18は、消去済みABLリスト612と、開放更新ブロックリスト614と、閉鎖更新ブロックリスト616とを含むABLを示す。加えて、開放更新ブロックリスト614に関連付けられているのは、関連する元ブロックリスト615である。同様に、閉鎖更新ブロックリストに関連付けられているのは、関連消去済みの元ブロックリスト617である。図15において前に示したように、これらの関連リストは、それぞれ、開放更新ブロックリスト614および閉鎖更新ブロックリスト616のサブセットである。消去済みABLブロックリスト612、開放更新ブロックリスト614、および閉鎖更新ブロックリスト616は、すべて、割り当てブロックリスト(ABL)610のサブセットであり、それぞれの中のエントリは、それぞれ対応する属性を有する。
【0125】
MAPブロック750は、フラッシュメモリ200内の消去管理記録を記憶するのに専用のメタブロックである。MAPブロックは、時系列のMAPブロックセクタを記憶し、各MAPセクタは、消去ブロック管理(EBM)セクタ760またはMAPセクタ780のいずれかである。メタブロックが廃棄されて、消去済みブロックが割り当てで使い尽くされてリサイクルされるにつれて、関連する制御およびディレクトリデータは、MAPブロック内で更新される論理セクタに含まれるのが好ましく、更新データの各インスタンスは、新規のブロックセクタに記録される。EBMセクタ760およびMAPセクタ780の複数のコピーがMAPブロック750内に存在してもよく、その最新バージョンのみが有効である。有効MAPセクタの位置へのインデックスは、EMBブロック内のフィールド内に含まれる。有効なEMBセクタが、制御書き込み動作中のMAPブロック内にいつも最後に書き込まれる。MAPブロック750が一杯の場合には、すべての有効セクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【0126】
各EBMセクタ760は、消去済みブロックリスト(EBL)770を含み、これは、消去済みブロックの母集団のサブセットのアドレスのリストである。消去済みブロックリスト(EBL)770は、消去済みメタブロック番号を含むバッファとしての役割を果たし、EBLから、メタブロック番号が周期的に取り出されてABLを再充填し、EBLに対して、メタブロック番号が周期的に追加されてCBLを再び空にする。EBL770は、使用可能ブロックバッファ(ABB)772、消去済みブロックバッファ(EBB)774、および消去済みブロックバッファ(CBB)776のためのバッファとしての役割を果たす。
【0127】
使用可能ブロックバッファ(ABB)772は、前回のABL充填動作のすぐ後に続くABL610内のエントリのコピーを含む。これは、実質上、ABL充填動作直後のABLのバックアップコピーである。
消去済みブロックバッファ(EBB)774は、MAPセクタ780から、または(後述する)CBBリスト776からのいずれかから先に転送され、かつABL充填動作中にABL610へ転送に使用可能である消去済みブロックアドレスを含む。
クリアされたブロックバッファ(CBB)776は、CBLを空にする動作中にCBL740から転送され、かつMAPセクタ780またはEBBリスト774へ後に転送される消去済みブロックのアドレスを含む。
【0128】
各MAPセクタ780は、MAPと称されるビットマップ構造を含む。MAPは、フラッシュメモリ内のメタブロック毎に1ビットを使用し、これは、各ブロックの消去状態を示すために使用される。ABL、CBL、またはEBM内の消去済みブロックリスト内に列挙されたブロックアドレスに対応するビットは、MAP内において消去済み状態に設定されない。
【0129】
有効データ構造を含まず、かつMAP内の消去済みブロック、消去済みブロックリスト、ABL、またはCBLとして指定されていないブロックはどれでも、ブロック割り当てアルゴリズムによって決して使用されず、従ってホストまたは制御データ構造の記憶のためにアクセスすることはできない。これにより、アクセス可能なフラッシュメモリアドレス空間から障害位置のあるブロックを除外するための簡単な機構が提供される。
【0130】
図18に示されている階層により、消去済みブロック記録を効率的に管理することができるようになり、コントローラのRAM内に記憶されたブロックアドレスリストの完全なセキュリティを提供する。消去済みブロックエントリが、これらのブロックアドレスリストと、1つ以上のMAPセクタ780との間で、稀に交換される。これらのリストは、電源が切られた後のシステム初期化中に、消去済みブロックリスト、およびフラッシュメモリ内のセクタに記憶されたアドレス変換テーブル内の情報と、フラッシュメモリ内のわずかな数の参照済みデータブロックの限定的な走査とを介して再構築される。
【0131】
消去済みメタブロック記録の階層を更新するために採用されたアルゴリズムにより、消去済みブロックが、MAPブロック750からのアドレス順序のブロックのバーストと、ブロックがホストによって更新された順序を反映するCBL740からのブロックアドレスのバーストとをインターリーブする順序で使用するために割り当てられる結果となる。メタブロックサイズおよびシステムメモリ容量のほとんどについて、1つのMAPセクタは、システム内のすべてのメタブロックについてのビットマップを提供する。この場合、消去済みブロックは、このMAPセクタに記録されるとおりのアドレス順序での使用のために常に割り当てられる。
【0132】
消去ブロック管理動作
前に説明したように、ABL610は、使用のために割り当てられるであろう消去済みメタブロック、およびデータ更新ブロックとして最近割り当てられたメタブロックについてのアドレスエントリを有するリストである。ABL内のブロックアドレスの実際の数は、上限と下限という、システム設計の変数の間にある。製造中にフォーマットされたABLエントリの数は、カードの種類と容量との関数である。加えて、システムの寿命の終わりが近づくとABL内のエントリの数が減少するのは、使用可能な消去済みブロックの数が寿命内でのブロックの障害によって減少するためである。例えば、充填動作の後、ABL内のエントリは、以下の目的のために使用可能なブロックを指定してもよい。ブロック毎に1つのエントリを有する部分的に書き込まれたデータ更新ブロックについてのエントリであり、同時に開放されている更新ブロックの最大数についてのシステム制限を越えないもの。データ更新ブロックとして割り当てるための消去済みブロックについての1個から12個の間のエントリ。制御ブロックとして割り当てるための消去済みブロックについての4つのエントリ。
【0133】
ABL充填動作
ABL610が割り当てによって使い尽くされると、再充填される必要があることになる。ABLを充填する動作は、制御書き込み動作中に生じる。これは、ブロックを割り当てなければならない場合にトリガされるが、ABLには、データ更新ブロックとして割り当てるため、またはいくつかの他の制御データ更新ブロックのために使用可能な消去済みブロックエントリが十分には含まれていない。制御書き込み中に、ABL充填動作は、GAT更新動作と並行して行われる。
【0134】
以下の動作が、ABL充填動作中に生じる。
1.現在のデータ更新ブロックの属性を有するABLエントリは保持される。
2.閉鎖データ更新ブロックの属性を有するABLエントリは、このブロックについてのエントリが並行GAT更新動作において書き込み中でなければ保持され、書き込み中であれば、このエントリはABLから除去される。
3.割り当てられていない消去ブロックについてのABLエントリは保持される。
4.ABLは、エントリの除去によって生じたギャップを除去するためにコンパクト化され、エントリの順序が維持される。
5.ABLは、EBBリストから次に使用可能なエントリをつけることによって完全に充填される。
6.ABBリストは、ABL内の現在のエントリで上書きされる。
【0135】
CBLを空にする動作
CBLは、消去済みブロックエントリの数に対するABLと同じ制限を有する、コントローラRAM内の消去済みブロックアドレスのリストである。CBLを空にする動作は、制御書き込み動作中に生じる。したがって、この動作は、ABL充填/GAT更新動作、またはCBIブロック書き込み動作と並行して行われる。CBLを空にする動作において、エントリはCBL740から除去されて、CBBリスト776に書き込まれる。
【0136】
MAP交換動作
MAPセクタ780およびEBMセクタ760内の消去ブロック情報間のMAP交換動作は、EBBリスト774が空の場合に、制御書き込み動作中に周期的に生じてもよい。システム内のすべての消去済みメタブロックは、EBMセクタ760内に記録され、MAPセクタ780はなく、MAP交換は行われない。MAP交換動作中に、EBB774に消去済みブロックを入力するMAPセクタは、送信元MAPセクタ782とみなされる。逆に、CBB776から消去済みブロックを受信するMAPセクタは、送信先MAPセクタ784とみなされる。MAPセクタが1つだけ存在する場合は、以下に規定するように、送信元および送信先MAPセクタの両方としての役割を果たす。
【0137】
以下の動作が、MAP交換中に行われる。
1.送信元MAPセクタが、増分ポインタに基づいて選択される。
2.送信先MAPセクタが、送信元MAPセクタ内ではない最初のCBBエントリ内のブロックアドレスに基づいて選択される。
3.送信先MAPセクタが、CBB内の該当エントリによって規定されたように更新され、当該エントリは、CBBから除去される。
4.別個の送信元MAPセクタが存在しなければ、更新された送信先MAPセクタが、MAPブロックに書き込まれる。
5.送信元MAPセクタが、CBB内の該当エントリによって規定されたように更新され、当該エントリは、CBBから除去される。
6.CBB内の残りのエントリが、EBBに付加される。
7.EBBには、送信元MAPセクタから規定された消去済みブロックアドレスができる限り充填される。
8.更新済みの送信元MAPセクタが、MAPブロック内に書き込まれる。
9.更新済みのEBMセクタが、MAPブロック内に書き込まれる。
【0138】
リスト管理
図18は、様々なリスト間の制御およびディレクトリ情報の分配および流れを示す。便宜のために、リストの要素間でエントリを移動する動作、またはエントリの属性を変更する動作は、[A]から[O]として図18に示され、以下のようなものである。
[A]消去済みブロックがホストデータについての更新ブロックとして割り当てられる場合には、そのエントリのABL内にある属性は、消去済みABLブロックから開放更新ブロックに変更される。
[B]消去されたブロックが制御ブロックとして割り当てられる場合には、ABL内のそのエントリが除去される。
[C]ABLエントリが開放更新ブロック属性と共に作成される場合には、更新中の論理グループについての元メタブロックアドレスを記録するために、関連する元ブロックフィールドがエントリに付加される。この情報は、GATから取得される。
[D]更新ブロックが閉鎖されると、そのエントリのABL内にある属性は、開放更新ブロックから閉鎖更新ブロックへ変更される。
[E]更新ブロックが閉鎖されると、その関連する元ブロックは消去されて、ABL内にあるそのエントリ内の関連する元ブロックフィールドの属性は、消去済み元ブロックに変更される。
[F]ABL充填動作中、同一の制御書き込み動作中にGAT内でアドレスが更新された閉鎖更新ブロックはどれでも、そのエントリがABLから除去される。
[G]ABL充填動作中、閉鎖更新ブロックについてのエントリがABLから除去されると、その関連する消去済みの元ブロックについてのエントリが、CBLへ移動される。 [H]制御ブロックが消去されると、それについてのエントリが、CBLへ追加される。
[I]ABL充填動作中、消去済みブロックエントリが、EBBリストからABLへ移動され、消去済みABLブロックの属性が与えられる。
[J]ABL充填動作中のすべての該当ABLエントリの修正後、ABL内のブロックアドレスが、ABBリスト内のブロックアドレスに取って代わる。
[K]制御書き込み中にABL充填動作と並行して、CBL内の消去済みブロックについてのエントリが、CBBリストへ移動される。
[L]MAP交換動作中、すべての該当エントリが、CBBリストからMAP送信先セクタへ移動される。
[M]MAP交換動作中、すべての該当エントリが、CBBリストからMAP送信元セクタへ移動される。
[N]MAP交換動作中の[L]および[M]に続いて、すべての残りのエントリが、CBBリストからEBBリストへ移動される。
[O]MAP交換動作中の[N]に続いて、可能であれば、[M]において移動されたもの以外のエントリが、MAP送信元セクタから移動されて、EBBリストを充填する。
【0139】
論理/物理アドレス変換
フラッシュメモリ内の論理セクタの物理位置を位置決定するために、図2に示されている論理/物理アドレス変換モジュール140は、論理/物理アドレス変換を行う。最近更新された論理グループを除いて、大量の変換を、フラッシュメモリ200またはコントローラRAM130内のGATキャッシュ内にあるグループアドレステーブル(GAT)を使用して行うことになる可能性がある。最近更新された論理グループについてのアドレス変換は、主にコントローラRAM130内にある更新ブロックについてのアドレスリストを検索することを必要とすることになる。したがって、論理セクタアドレスについての論理/物理アドレス変換のための処理は、セクタが位置する論理グループに関連したブロックの種類に依存する。ブロックの種類には、変化のないブロックと、順次データ更新ブロックと、カオス的データ更新ブロックと、閉鎖データ更新ブロックとがある。
【0140】
図19は、論理/物理アドレス変換の処理を示すフローチャートである。基本的には、対応するメタブロックおよび物理セクタは、論理セクタアドレスを使用して、最初に、開放更新ブロックリストおよび閉鎖更新ブロックリストなどの様々な更新ディレクトリを検索することによって、位置決定される。関連するメタブロックが更新処理の一部でない場合、ディレクトリ情報がGATによって提供される。論理/物理アドレス変換は、以下のステップを含む。
ステップ800:論理セクタアドレスが与えられる。
ステップ810:コントローラRAM内の開放更新ブロックリスト614(図15および18参照)内の所定の論理アドレスが検索される。検索が失敗すると、ステップ820へ進み、そうでなければ、ステップ830へ進む。
ステップ820:閉鎖更新ブロックリスト616内の所定の論理アドレスを検索する。検索が失敗すると、所定の論理アドレスはどの更新処理の一部でもないことになり、GATアドレス変換のためのステップ870へ進む。そうでなければ、閉鎖更新ブロックアドレス変換のためのステップ860へ進む。
ステップ830:所定の論理アドレスを含む更新ブロックが順次であれば、順次更新ブロックアドレス変換のためのステップ840へ進む。そうでなければ、カオス的更新ブロックアドレス変換のためのステップ850へ進む。
ステップ840:順次更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ850:カオス的更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ860:閉鎖更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ870:グループアドレステーブル(GAT)変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ880:メタブロックアドレスを物理アドレスに変換する。変換方法は、メタブロックが再リンクされているかどうかに依存する。
ステップ890:物理セクタアドレスが取得される。
【0141】
様々なアドレス変換処理について、以下により詳細に説明する。
順次更新ブロックアドレス変換(ステップ840)
順次更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、開放更新ブロックリスト614内の情報から直接達成される(図15および18)。
1.リスト内の「ページタグ」フィールドおよび「書き込みセクタの数」フィールドから、対象論理セクタが更新ブロックにあるか、またはその関連する元ブロックにあるかどうかを判断する。
2.対象論理セクタに適切なメタブロックアドレスが、リストから読み出される。
3.メタブロック内のセクタアドレスが、適切な「ページタグ」フィールドから決定される。
【0142】
カオス的更新ブロックアドレス変換(ステップ850)
カオス的更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
1.RAM内のカオス的セクタリストから、セクタが最近書き込まれたセクタであると判断される場合には、アドレス変換は、このリスト内のその位置から直接達成されてもよい。
2.CBIブロック内の直近に書き込まれたセクタは、そのカオス的ブロックデータフィールド内に、対象論理セクタアドレスに該当するカオス的更新ブロックの物理アドレスを含む。また、その間接セクタインデックスフィールド内に、このカオス的更新ブロックに関連する最終書き込みCBIセクタのCBIブロック内のオフセットを含む(図16A〜16E参照)。
3.これらのフィールド内の情報は、RAM内にキャッシュされ、後続のアドレス変換中にセクタを読み出す必要をなくしている。
4.間接セクタインデックスフィールドによってステップ3において識別されたCBIセクタが読み出される。
5.直近にアクセスされたカオス的更新サブグループについての直接セクタインデックスフィールドは、RAM内にキャッシュされ、同一のカオス的更新ブロックに対する繰り返しのアクセスのためのステップ4における読み出しを行う必要をなくしている。
6.ステップ4または5において読み出された直接セクタインデックスフィールドは、対象論理セクタアドレスを含む論理サブグループに関連するCBIセクタを識別する。
7.対象論理セクタアドレスについてのカオス的ブロックインデックスエントリは、ステップ6において識別されたCBIセクタから読み出される。
8.直近に読み出されたカオス的ブロックインデックスフィールドは、コントローラRAM内にキャッシュされてもよく、同一の論理サブグループに対する繰り返しのアクセスのためのステップ4およびステップ7における読み出しを行う必要をなくしている。
9.カオス的ブロックインデックスエントリは、カオス的更新ブロックまたは関連する元ブロックのいずれかの内に対象論理セクタの位置を規定する。対象論理セクタの有効コピーが元ブロック内にあれば、元メタブロックおよびページタグ情報を使用して位置決定される。
【0143】
閉鎖更新ブロックアドレス変換(ステップ860)
閉鎖更新ブロックに関連した論理ブロックループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、閉鎖ブロック更新リスト内の情報から直接達成することができる(図18参照)。
1.対象論理グループに割り当てられたメタブロックアドレスは、リストから読み出される。
2.メタブロック内のセクタアドレスは、リスト内の「ページタグ」フィールドから決定される。
【0144】
GATアドレス変換(ステップ870)
論理グループが開放または閉鎖ブロック更新リストのいずれかによって参照されない場合には、GAT内のそのエントリは有効である。GATによって参照される論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
1.RAM内の使用可能なGATキャッシュの範囲を評価して、対象論理グループについてのエントリがGATキャッシュ内に含まれるかどうかを判断する。
2.対象論理グループがステップ1において見つかった場合、GATキャッシュは、メタブロックアドレスおよびページタグを含む全グループアドレス情報を含み、対象論理セクタアドレスの変換が可能となる。
3.対象アドレスがGATキャッシュ内にない場合、GATインデックスを対象GATブロックについて読みだして、対象論理グループアドレスに関するGATセクタの位置を識別しなければならない。
4.最後にアクセスされたGATブロックについてのGATインデックスは、コントローラRAM内に保持され、フラッシュメモリからセクタを読み出す必要なくアクセスされてもよい。
5.各GATブロックについてのメタブロックアドレスのリストと、各GATブロック内に書き込まれたセクタの数とが、コントローラRAM内に保持される。必要なGATインデックスがステップ4において使用可能でない場合、フラッシュメモリからすぐに読み出されてもよい。
6.対象論理グループアドレスに関するGATセクタは、ステップ4またはステップ6において取得されたGATインデックスによって規定されたGATブロック内のセクタ位置から読み出される。GATキャッシュが、対象エントリを含むセクタの再分割部分によって更新される。
7.対象セクタアドレスは、対象GATエントリ内のメタブロックアドレスおよび「ページタグ」フィールドから取得される。
【0145】
メタブロック/物理アドレス変換(ステップ880)
メタブロックが再リンクされていることをメタブロックアドレスに関連したフラグが示されている場合、該当LTセクタがBLMブロックから読み出されて、対象セクタアドレスについての消去ブロックアドレスであると決定する。そうでなければ、消去ブロックアドレスは、メタブロックアドレスから直接決定される。
【0146】
制御データ管理
図20は、メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。データ更新管理動作は、RAM内にある様々なリストに対して作用する。制御書き込み動作は、様々な制御データセクタおよびフラッシュメモリ内の専用ブロックに対して作用し、またRAM内のリストとデータを交換する。
【0147】
データ更新管理動作が、RAM内で、ABL、CBL、およびカオス的セクタリストに対して行われる。ABLは、消去済みブロックが更新ブロックまたは制御ブロックとして割り当てられる場合、または更新ブロックが閉鎖される場合に更新される。CBLは、制御ブロックが消去される場合、または閉鎖更新ブロックについてのエントリがGATに書き込まれる場合に更新される。更新カオス的セクタリストは、セクタがカオス的更新ブロックに書き込まれる場合に更新される。
【0148】
制御書き込み動作によって、RAM内の制御データ構造からの情報がフラッシュメモリ内の制御データ構造に書き込まれ、必要があれば、フラッシュメモリおよびRAM内の他の補助制御データ構造を更新する結果となる。これは、更新ブロックとして割り当てるべき消去済みブロックについてのエントリをABLがこれ以上含まない場合、またはCBIブロックが書き換えられる場合にトリガされる。
【0149】
好ましい実施形態において、ABL充填動作、CBLを空にする動作、およびEBMセクタ更新動作は、各制御書き込み動作中に行われる。EBMセクタを含むMAPブロックが一杯になると、有効EBMおよびMAPセクタが、割り当てられた消去済みブロックにコピーされ、以前のMAPブロックは消去される。
【0150】
各制御書き込み動作中に、1つのGATセクタが書き込まれ、かつ閉鎖更新ブロックリストがそれに従って修正される。GATブロックが一杯になると、GAT書き換え動作が行われる。
CBIセクタが、前に説明したように、あるカオス的セクタ書き込み動作後に書き込まれる。CBIブロックが一杯になると、有効なCBIセクタが、割り当てられた消去済みブロックにコピーされ、以前のCBIブロックは消去される。
MAP交換動作が、前に説明したように、EBMセクタ内のEBBリスト内に消去済みブロックエントリがこれ以上ない場合に行われる。
【0151】
MAPアドレス(MAPA)セクタは、MAPブロックの現在アドレスを記録し、MAPブロックが書き換えられる度に専用のMAPAブロックに書き込まれる。MAPAブロックが一杯になると、有効なMAPAセクタは、割り当てられた消去ブロックにコピーされ、以前のMAPAブロックは消去される。
ブートセクタが、MAPAブロックが書き換えられる度に現在のブートブロック内に書き込まれる。ブートブロックが一杯になると、有効なブートセクタは、ブートブロックの現在のバージョンからバックアップバージョンへコピーされ、その後、現在のバージョンとなる。以前の現在のバージョンは消去されて、バックアップバージョンとなり、そこに有効なブートセクタは書き戻される。
【0152】
制御データの整合性および管理
制御データの例として、図20に関して説明したような、メモリブロック管理システムに関するディレクトリ情報およびブロック割り当て情報がある。前述したように、制御データは、高速RAMおよびより低速な不揮発性メモリブロックの両方において保持される。頻繁に変化する制御データはいずれも、不揮発性メタブロックに記憶された対応する情報を更新するために、周期的な制御書き込みを伴うRAMに保持される。このように、制御データは、頻繁なアクセスを必要としない、不揮発だが低速のフラッシュメモリに記憶される。図20に示されているGAT、CBI、MAP、MAPAのような制御データ構造の階層をフラッシュメモリ内に保持する。よって、制御書き込み動作により、RAM内の制御データ構造からの情報が、フラッシュメモリ内の対応する制御データ構造を更新する。
【0153】
図20に関して説明したように、ブロック管理システムは、その動作中にフラッシュメモリ内の制御データのセットを保持する。制御データのこのセットは、ホストデータと同様に、メタブロックに記憶される。このように、制御データ自体はブロック管理されることになり、更新を受けるので、ガーベッジコレクション動作も受けることになる。
【0154】
また、低階層のデータが高階層のデータよりも頻繁に更新される、制御データの階層が存在することについて説明した。例えば、すべての制御ブロックは、書き込むためのN個の制御セクタを有すると想定すると、制御更新および制御ブロック移転の以下のシーケンスが普通は偶然にも生じる。図20を再び参照すると、各N個のCBI更新によって、CBIブロックが充填されて、CBI移転(書き換え)およびMAP更新がトリガされる。カオス的ブロックが閉鎖されると、GAT更新もトリガされる。各GAT更新は、MAP更新をトリガする。各N個のGAT更新によって、ブロックが充填されて、GATブロック移転がトリガされる。加えて、MAPブロックが一杯になると、MAPブロック移転およびMAPAブロック(MAPAブロックがあればであるが、そうでなければ、BOOTブロックはMAPを直接ポイントする)更新もトリガされる。加えて、MAPAブロックが一杯になると、MAPAブロック移転、BOOTブロック更新、およびMAP更新もトリガされる。加えて、BOOTブロックが一杯になると、他のBOOTブロックに対するアクティブなBOOTブロック移転がトリガされる。
【0155】
更新ブロック置換手法
本発明の他の態様によれば、ブロック管理システムを伴う不揮発性メモリにおいて、データを記録するために同時に開放されている更新ブロックの第1の所定最大数までサポートするシステムのために、改良されたブロック置換手法が実施される。更新ブロックは、主に連続更新ブロックであって、当該連続更新ブロックにおいて、データが論理的に連続した順序で記録されているが、そのブロック数は、データが論理的に連続した順序で記録されないカオス的更新ブロックであることが許容された第2の所定最大数までである。更新ブロックの新規の割り当てによって更新ブロックのプールが第1または第2の所定最大数を超えるような場合にはいつでも、当該制限に従うようにプール内の既存のブロックのうちの1つが閉鎖および削除されることになる。更新ブロックを閉鎖する前に、そのデータは連続ブロックに統合される。この改良された手法は、連続的な更新が過度のカオス的ブロック統合数を生じさせ得る状況を回避するためのものである。これは、連続更新ブロックとカオス的更新ブロックとをそれぞれの置換または統合プールに分離することによって達成される。特に、連続更新によって新規の更新ブロックの割り当てが第1の所定最大数を超える場合には、プール内の最も長時間使用されていない連続更新ブロックが、空きを作るために優先される。
【0156】
現行システムにおいて、一般的に、ユーザデータと制御データという2つの種類のデータがある。ユーザデータは、ホストからメモリシステムへ、典型的には論理的に連続した順序で送られる。連続更新ブロックは、ホストからの連続書き込み動作を最適に扱うように割り当てられる。ユーザデータは、とりわけ論理データに対する後続の更新がある場合には、論理的に不連続な順序である場合がある。カオス的更新ブロックは、不連続な順序でデータを最適に扱うために作成される。カオス的または不連続データの他のソースとしては、ユーザデータを記憶する過程で生成されるファイルおよびディレクトリ情報などといった、ファイルシステムまたはメモリシステムによって保持される制御データがある。
【0157】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限に従う従来の手法は、連続的かカオス的かどうかに関わらず、プール内の最も長時間使用されていない更新ブロックを閉鎖するものであった。
【0158】
本願の手法は、従来の手法を改良するものであって、基本的には、連続的な書き込み動作中に、新規の割り当て用に空きを作るためにプール内の更新ブロックを閉鎖する必要がある場合には、プール内の最も長時間使用されていない連続更新ブロックが閉鎖される。これにより、連続的な書き込み動作およびランダムな書き込み動作を扱うために様々な更新ブロックを効果的に活用することが確実になる。特に、ホストによる大規模な連続書き込み動作によってFATおよびディレクトリ情報を含むカオス的更新ブロックを閉鎖せざるを得なくなる場合があるといった非効率な状況を回避する。この大規模な書き込み動作が終わると再び更新されるようなFATおよびディレクトリ情報を記憶するために、さらなるカオス的ブロックが実質上まもなく作成されることになる。改良された置換ポリシーを作成することによって、置換および統合プールの分離が規定され、開放された連続ブロックまたは開放されたカオス的ブロックとなり得るブロックの連続的な書き込みおよび統合中に、カオス的ブロックを統合する際のさらなるオーバーヘッドを防止して、後続のFATおよびディレクトリ更新を管理する。
【0159】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限については前に述べた。例えば、図10に関連して説明した一実施形態において、ステップ410は、更新データを受け付けるために同時に開放され得る更新ブロックの最大数UMAX を超えることになるかどうかをテストする。UMAX を超えることになる場合には、更新ブロックのうちで最もアクティブでないものが、連続更新ブロックであるのかカオス的更新ブロックであるのかに関わらず、ステップ420において閉鎖されることになり、所定の制限内にシステムを維持する。
【0160】
図21は、ブロック管理システム用の更新ブロック数に対する2つの所定の規制を概略的に示す。更新ブロック総数に対する包括的な規制(UMAX )があり、これは、カオス的更新ブロックNC の数と連続更新ブロックNS の数との合計によって与えられる。カオス的更新ブロックは、より多くのリソースを要し、カオス的ブロックインデックス(CBI)をさらに保持することを必要とするので、カオス的更新ブロックの最大数(「UCMAX」)に対する規制もある。よって、第1の規制は、更新ブロック総数NC +NS ≦UMAX であることを要する。第2の規制は、カオス的更新ブロック数NC ≦UCMAXであることを要する。
【0161】
図22は、様々なメモリ装置用に最適化された2つの規制の組み合わせの典型例を示す。ある組み合わせは、UMAX 「ダッシュ」UCMAXによって指定される。例えば、「3−1」は、更新プール内の最大3つの更新ブロックを許容し、そのうち1つまでのみがカオス的更新ブロックであるブロック管理システムを指定する。同様に、「7−3」は、最大7つの更新ブロックまでをサポートし、そのうち3つまでがカオス的更新ブロックであり得るブロック管理システムを指定する。一般的に、小さいメモリ容量を有する単純なメモリシステムほど、制限が厳しくなり、最大数が小さくなることになる。
【0162】
図23A、図23Bおよび図23Cは、従来の置換手法における第1の状況に係る、新規の更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図23Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1201のS3のような連続更新ブロックであるという第1の状況を示す。
【0163】
新規の更新ブロックを割り当てる必要がある場合には、空きを作るために、更新プール内の既存の更新ブロックのうちの1つが閉鎖される必要があることになる。例えば、プール内の既存の更新ブロックによってサービス提供されていないセクタの論理グループについて連続データをホストが書き込む場合には、当該データを記録するために、新規の更新ブロックを割り当てる必要がある。
【0164】
図23Bは、従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。最もアクティブでないブロックは、この場合では偶然にも1201のS3であり、閉鎖されて更新ブロックのプールから削除されることになる。
【0165】
図23Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序で記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0166】
図24A、図24B、および図24Cは、従来の置換手法における第2の状況に係る、新規の更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図24Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1301のC4のようなカオス的更新ブロックであるという第2の状況を示す。
【0167】
図24Bは、従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。最もアクティブでないブロックは、この場合では偶然にも1301のC4であり、閉鎖されて更新ブロックのプールから削除されることになる。
【0168】
図24Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序で記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0169】
図25Aおよび図25Bは、図10、図23Bおよび図24Bにおいて先に説明した手法におけるUMAX およびUCMAX制限の保持をそれぞれ示す。2つの制限は、典型的には同時に課せられる。
【0170】
図25Aは、図10のステップ410ならびに図23Bおよび図24Bに先に示す手法であって、新規の割り当てが所定の制限を超えるような場合にはいつでも、最も長時間アクセスされていない更新ブロックが閉鎖される手法を示す。
ステップ1252:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1254:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1256:新規の更新ブロックの割り当てが当該所定数を超えるようになる場合にはいつでも、直近にアクセスされた更新ブロックのうちの1つを閉鎖して、新規更新ブロック用に空きを作る。
【0171】
図25Bは、図10のステップ370に先に示す手法であって、カオス的更新ブロック数が所定の制限を超える場合にはいつでも、最も長時間アクセスされていないカオス的(不連続)更新ブロックが閉鎖される手法を示す。
ステップ1354:データの論理ユニットを論理的に不連続な順序で記憶するための開放更新ブロックのうち、更新ブロックの第2の所定数まで割り当てる。
ステップ1356:不連続更新ブロックの数が第2の所定数を超えるようになる場合にはいつでも、最も長時間アクセスされていない不連続更新ブロックのうちの1つを閉鎖して、第2の所定数を超えないようにする。
【0172】
この従来の手法の欠点の1つは、状況によって、カオス的更新ブロックを過度に閉鎖してしまうことにつながり得ることである。連続書き込みによって、新規に割り当てられた連続ブロック用にプール内に空きを作るために制御データを含むカオス的ブロックが早期に閉鎖されてしまう場合、特に非効率である。例えば、閉鎖されたカオス的更新ブロックである1310のC4がFATおよびディレクトリ情報を記録していた場合には、連続書き込みがなされたらすぐに当該機能をサービス提供するために、置換が直ちに必要になる。これは、制御データを記録するための置換更新ブロック用に空きを作るために、現在プール内にある最もアクティブでない更新ブロックをもう一度閉鎖することになる。
【0173】
本発明のこの態様によれば、更新ブロックの所定の最大数を超えないように更新ブロックを閉鎖するこの手法は、最も長時間使用されていない更新ブロックを単に選択することから、カオス的更新ブロックが過度に閉鎖される事例を減少させる手法へとさらに洗練されている。好ましい一実施形態において、連続データを記録するために更新ブロックが割り当てられ、空きを作るために更新ブロックのプール内の1つが閉鎖される場合には、プール内の最もアクティブでない連続更新ブロックが閉鎖される。
【0174】
図26A、図26Bおよび図26Cは、改良された本願の置換手法に係る、新規更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図26Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1301のC4のようなカオス的更新ブロックであるという、図24Aにおけるのと同様の状況を示す。さらに、この例は、連続ブロック1202のS3が連続プール1200のうち最もアクティブでないことを示す。
【0175】
図26Bは、本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。連続更新に関連した新規の割り当てであって、プール内の更新ブロック数が既に最大である場合、新規に割り当てられた更新ブロック用に空きを作るために、プール内の更新ブロックのうちの1つを閉鎖しなければならなくなる。しかし、この場合、最もアクティブでないブロックは、1301のC4であり、これはカオス的ブロックであるので、パスされることになる。代わりに、連続プール1200内で最もアクティブな更新ブロックが閉鎖されることになる。この例において、閉鎖されて更新ブロックプールから削除されることになるのは1202のS3である。
【0176】
図26Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序でデータを記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0177】
図27A、図27B、および図27Cは、本願の改良された置換手法に係る、新規のカオス的更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図27Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1201のS6のような連続更新ブロックであることを示す。さらに、この例は、カオス的ブロックである1302のC4を、カオス的プール1300のうちで最もアクティブでないものとすることを示す。
【0178】
図27Bは、本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。新規のカオス的更新ブロックが既に一杯のカオス的プール1300に導入される場合、空きを作るためにカオス的プール内の更新ブロックのうちの1つが閉鎖されなければならなくなる。この例において、カオス的プール1300は、最大2つのカオス的更新ブロックを既に含んでいる。さらなるカオス的更新ブロックが作成されると、例えば既存の連続更新ブロックである1220のS1をカオス的ブロックに変換する場合には、カオス的ブロックのうちの1つを削除しなければ、カオス的ブロックの最大数を超える。この場合、空きを作るために、最もアクティブでないカオス的ブロックである1302のC4が閉鎖されて、カオス的プール1300から削除される。
【0179】
図27Cは、空きを作るために他のカオス的更新ブロックが閉鎖および削除された後、新規のカオス的更新ブロックをプールに導入することを概略的に示す。この場合、S1が、連続プール1200内の連続更新ブロック1220から、カオス的プール1300内のカオス的ブロックである1320のC6に変換されている。このように、許容されるカオス的更新ブロックの最大数であるUCMAXを超えることはない。
【0180】
図28は、第1の実施形態に係る、連続更新中に更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1400:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1402:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1406:連続データを書き込むための書き込みコマンドに応じて、データの論理ユニットを連続順序で更新ブロックに書き込む。
ステップ1408:データの連続論理ユニットをさらに書き込むために閉鎖される更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて書き込みを継続し、新規の割り当てが第1の所定数を超えるようであれば、最も長時間アクセスされていない連続順序の更新ブロックを、最も長時間アクセスされていない不連続な順序の更新ブロックのいずれよりも優先的に閉鎖する。
【0181】
図29は、第2の実施形態に係る、2つの所定の制限を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1410:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1412:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1416:データの論理ユニットを論理的に不連続な順序で記憶するための開放更新ブロックのうち、更新ブロックの第2の所定数まで割り当てる。
ステップ1418:論理的に連続した順序でデータを記憶するための更新ブロックの導入が第1の所定数を超えるようになる場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、導入された更新ブロック用に空きを作る。
ステップ1420:論理的に不連続な順序でデータを記憶するための更新ブロックの導入が第2の所定数を超えるようになる場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、導入された更新ブロック用に空きを作る。
【0182】
本願の手法を一般的にいうと、更新ブロックが連続または不連続データのいずれを記憶しているか、または、ある予め定められた種類のシステムデータを記憶しているかどうかなどといった属性のセットに基づいて、更新ブロックを分類するものである。限られた数の更新ブロックのプールを実装するにあたって、更新ブロックの各クラスは、当該クラス用にサポートされた最大数を超えるような場合の置換に関する独自の規則を有することになる。
【0183】
例えば、連続更新ブロックおよび不連続更新ブロックは、2つの異なるクラスである。これら各クラス用の置換規則は同一であり、すなわち、最もアクティブでないものを新規のものに置換する。よって、連続更新ブロックのプールを超えるような場合には、新規のものがプールに導入される前に、プール内の最もアクティブでないものが閉鎖および削除されることになる。不連続更新ブロックのプールについても同様である。
【0184】
一般的に、各クラスは、他のクラスから独立した独自の置換規則を有する。置換規則の例として、対応するクラスによっては、最も長時間アクセスされていないもの、直近にアクセスされたもの、最も頻繁にアクセスされていないもの、最も頻繁にアクセスされているものなどを置換する。
【0185】
図30は、クラスベースの置換規則を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1430:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1432:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールを提供する。
ステップ1436:更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットを提供し、各クラスは関連する所定最大数の更新ブロックまでのサブプールをサポートする。
ステップ1438:それぞれのサブプール内の置換されるべき更新ブロックを特定するために、予め定められたクラスのセットに対応する置換規則のセットを提供する。
ステップ1440:プール内の更新ブロックを対応するサブプールにグループ化する。
ステップ1442:同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、関連する所定最大数の更新ブロックを含むサブプール内にある最もアクティブでない更新ブロックを閉鎖および削除する。
【0186】
本願明細書において参照されたすべての特許、特許出願、論文、書籍、明細書、他の出版物、書類、および事物は、あらゆる目的のためにその全体が本願明細書において参照により援用されている。任意の援用されている出版物、書類、および事物と、本願明細書の文章との間に用語の定義または用法における矛盾または不一致がある場合には、本願明細書における用語の定義または用法に従う。
【0187】
本発明の様々な態様をある実施形態に関して説明してきたが、本発明は、添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
【技術分野】
【0001】
本発明は、一般的には、不揮発性半導体メモリに関し、さらに詳しくは、データを記憶するために同時に開放中のブロックのプールの置換を管理するための改良されたシステムを伴うメモリブロック管理システムを有するものに関する。
【背景技術】
【0002】
電荷を不揮発的に記憶することができる固体メモリであり、特に、小形形状のファクタカードとしてパッケージ化されたEEPROMおよびフラッシュEEPROMの形態を取るものが、最近、様々な移動および携帯装置、とりわけ情報機器および一般消費者向け電子製品における記憶装置の選択肢となってきている。同じく固体メモリであるRAM(ランダムアクセスメモリ)とは異なり、フラッシュメモリは不揮発性であり、電源を切った後でもその記憶したデータを保持する。また、ROM(読み出し専用メモリ)とは異なり、フラッシュメモリは、ディスク記憶装置と同様に書き換え可能である。高いコストにもかかわらず、フラッシュメモリは、大容量記憶装置の利用の際にますます使用されるようになっている。従来の大容量記憶装置は、ハードドライブおよびフロッピーディスクなどの回転磁気媒体に基づき、移動および携帯環境には不適切である。というのは、ディスクドライブはかさばりがちであり、機械的な故障が生じやすく、大きな待ち時間および高電力という要件を有するからである。これらの望ましくない属性により、ディスクをベースとした記憶装置は、ほとんどの移動および携帯の利用において実用的でないものとなっている。他方、フラッシュメモリは、埋め込み形および着脱可能なカードの形態の両方で、小さいサイズ、低電力消費、高速および高い信頼性という特徴が理由で、移動および携帯環境に理想的なほど適している。
【0003】
フラッシュEEPROMは、消去可能な不揮発性メモリであること、およびメモリセルに新たなデータを書き込むまたは「プログラム」するという点で、EEPROM(電気的に消去可能でプログラム可能な読み出し専用メモリ)に類似している。両方とも、フローティング(未接続の)導電ゲートを使用し、電界効果トランジスタの構造であり、半導体基板におけるソース領域とドレイン領域と間のチャネル領域を覆って位置している。そして、コントロールゲートがフローティングゲートを覆って設けられる。トランジスタのしきい値電圧特性は、フローティングゲート上に保持された電荷量によって制御される。すなわち、フローティングゲート上の電荷の所定のレベルについて、トランジスタが「オン」に転換されてソース領域とドレイン領域との間が導通することができるようにする前にコントロールゲートに印加されなければならない対応する電圧(しきい値)がある。特に、フラッシュEEPROMなどのフラッシュメモリは、メモリセルの全ブロックを同時に消去することができる。
【0004】
フローティングゲートは、ある範囲の電荷を保持することができるので、しきい値電圧ウィンドウ内の任意のしきい値電圧レベルにプログラムすることができる。しきい値電圧ウィンドウのサイズは、装置の最小および最大しきい値レベルによって区切られ、さらにフローティングゲート上にプログラムすることができる電荷の範囲に対応している。しきい値ウィンドウは、一般的には、メモリデバイスの特徴、動作状態、および履歴に依存している。ウィンドウ内の各別個の分解可能なしきい値電圧レベルの範囲は、原則的には、セルの限定的なメモリ状態を指定するために使用されてもよい。しきい値電圧が2つの別個の領域に分割される場合には、各メモリセルは1ビットのデータを記憶することができることになる。同様に、しきい値電圧ウィンドウが2つ以上の別個の領域に分割される場合には、各メモリセルは、1ビット以上のデータを記憶することができることになる。
【0005】
メモリセルとしての役割を果たすトランジスタは、典型的には、2つの機構のうちの1つによって「プログラムされた」状態にプログラムされる。「熱い電子注入」において、ドレインに印加された高い電圧が基板チャネル領域にわたって電子を加速させる。同時に、コントロールゲートに印加された高い電圧が、熱い電子を薄いゲート誘電体を通ってフローティングゲートへ引き寄せる。「トンネル注入」において、高い電圧が基板に対するコントロールゲートに印加される。このように、電子は、基板から介在フローティングゲートへと引き寄せられる。メモリの状態を変化させるために、メモリセルの最初に消去される電荷蓄積ユニットに電子を注入することによってメモリに対する書き込みを行うことを説明するために、「プログラム」という用語を従来使用してきたが、この用語は、現在では、「書き込み」または[記録する」などといった、より一般的な用語と交換可能に使用されてきている。
【0006】
メモリデバイスの消去は、数多くの機構によって行われてもよい。例えば、EEPROMについて、高い電圧をコントロールゲートに関連した基板に印加して、フローティングゲート内の電子を薄い酸化物層を通じて基板チャネル領域へと通すようにすることによって(すなわち、ファウラー・ノルドハイムトンネル現象)、メモリセルは電気的に消去可能である。典型的には、EEPROMは、バイト毎に消去可能である。フラッシュEEPROMについて、メモリは、すべて一度に電気的に消去可能であるか、または1回につき1つ以上の最小の消去可能なブロックを電気的に消去可能であり、最小の消去可能なブロックは、1つ以上のセクタからなってもよく、各セクタは、512バイト以上のデータを記憶してもよい。
【0007】
メモリデバイスは、典型的には、カードに実装されてもよい1つ以上のメモリチップを備える。各メモリチップは、デコーダまたは消去、書き込み、および読み出し回路のような周辺回路によってサポートされたメモリセルのアレイを備える。より高性能のメモリデバイスは、高機能および高レベルのメモリ動作およびインターフェイスを行うコントローラも搭載されている。
【0008】
商業的に成功している数多くの不揮発性固体メモリデバイスが現在使用されている。これらのメモリデバイスはフラッシュEEPROMであってもよく、または他の種類の不揮発性メモリセルを使用してもよい。フラッシュメモリおよびそれを製造するシステムおよび方法の例は、米国特許第5,070,032号(特許文献1)、第5,095,344号(特許文献2)、第5,315,541号(特許文献3)、第5,343,063号(特許文献4)、および第5,661,053号(特許文献5)、第5,313,421号(特許文献6)、および第6,222,762号(特許文献7)に記載されている。特に、NANDストリング構造のフラッシュメモリデバイスは、米国特許第5,570,315号(特許文献8)、第5,903,495号(特許文献9)、第6,046,935号(特許文献10)に記載されている。また、不揮発性メモリデバイスは、電荷を蓄積するための誘電体層を有するメモリセルからも製造される。前に説明した導電性のフローティングゲート素子の代わりに、誘電体層が使用される。誘電体蓄積素子を使用するこのようなメモリデバイスは、エイタンらによる「NROM:新規の局所化されたトラッピング、2ビット不揮発性メモリセル」,米国電子電気学会(IEEE)電子デバイスレター,第21巻,第11号,2000年11月,543〜545ページ ("NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letter, vol. 21, no. 11, November 2000, pp. 543-545)(非特許文献1)に記載されている。ONO誘電体層が、ソースおよびドレイン拡散間のチャネルにわたって延在している。1データビットに対する電荷は、ドレインに隣接する誘電体層にて局在化され、他のデータビットについての電荷は、ソースに隣接する誘電体層にて局在化される。例えば、米国特許第5,768,192号(特許文献11)および第6,011,725号(特許文献12)は、2つの二酸化シリコン層間に挟まれたトラッピング誘電体を有する不揮発性メモリセルを開示している。多状態のデータ記憶装置は、誘電体内の空間的に別個の電荷蓄積領域のバイナリ状態を別個に読み出すことによって実施される。
【0009】
読み出しおよびプログラミング性能を改善するために、アレイ内の複数の電荷蓄積素子またはメモリトランジスタが、並列に読み出しまたはプログラムされる。よって、メモリ素子の「ページ」が、一緒に読み出されるか、またはプログラムされる。既存のメモリ構成において、列は、典型的には、いくつかのインターリーブされたページを含むか、または1つのページを構成することもある。あるページのすべてのメモリ素子が、一緒に読み出されるか、またはプログラムされることもある。
【0010】
フラッシュメモリシステムにおいて、消去動作は、読み出しおよびプログラミング動作よりも非常に長くかかる場合がある。よって、かなりのサイズの消去ブロックがあることが望ましい。このように、消去時間は、メモリセルの大きな集合体にわたって償却される。
【0011】
フラッシュメモリの性質は、データが消去されたメモリ位置に書き込まれなければならないということに基づいている。ホストからのある論理アドレスのデータを更新すべき場合、1つのやり方は、更新データを同一の物理メモリ位置に書き換えるというものである。すなわち、論理/物理アドレスマッピングは変化しない。しかし、これは、この物理位置を含む消去ブロック全体が最初に消去されてから、更新されたデータで書き換えられなければならないということを意味する。この更新方法は、消去ブロック全体が消去され、かつ書き換えられる必要があるので効率が悪く、更新すべきデータが消去ブロックの小さい部分のみを占める場合には特に効率が悪い。また、メモリブロックの消去リサイクルが高い頻度で生じる結果となり、この種のメモリデバイスの限られた耐久性の観点から望ましくない。
【0012】
フラッシュメモリシステムの他の問題点は、システム制御およびディレクトリデータと関係がある。データは、様々なメモリ動作の過程で生成かつアクセスされる。よって、効率的な取り扱いおよび素早いアクセスが性能に直接影響を与えることになる。フラッシュメモリは記憶装置用を意図し、かつ不揮発性であるので、フラッシュメモリ内のこの種のデータを保持するのが望ましい。しかし、コントローラとフラッシュメモリとの間の介在ファイル管理システムによって、データは直接にはアクセスすることができない。また、システム制御およびディレクトリデータは、アクティブかつ断片化しがちであり、大規模なブロック消去を伴うシステムへの記憶には役に立たない。従来、この種のデータは、コントローラRAMに設定され、コントローラによる直接アクセスを可能としている。メモリデバイスの電源投入後、コントローラRAMに配置すべき必要なシステム制御およびディレクトリ情報をコンパイルするために、初期化の処理によって、フラッシュメモリを走査することができる。この処理は時間がかかり、フラッシュメモリの容量が増加しているのでいっそうのコントローラRAMの容量が要求される。
【0013】
米国特許第6,567,307号(特許文献13)は、メモ帳としての役割を果たす複数の消去ブロック内に更新データを記録し、また様々なブロック内の有効なセクタを最終的に統合化し、かつこのセクタを論理的な順次順序で再構成した後にセクタを書き換えることを含む大きな消去ブロック内のセクタ更新を扱う方法を開示している。このように、ブロックは、ごくわずかな更新の度に消去され、かつ書き込まれる必要はない。
【0014】
国際公開特許出願第WO03/027828号(特許文献14)および国際公開特許出願第WO00/49488号(特許文献15)は共に、論理セクタアドレスを区画に分割することを含む、大きな消去ブロック内での更新を扱うメモリシステムを開示している。小さな区画の論理アドレス範囲が、ユーザデータ用の他の区画とは別に、アクティブなシステム制御データ用に確保される。このように、システム制御データを独自の区画内で操作すれば、他の区画内の関連するユーザデータと相互に作用しないことになる。更新は論理セクタレベルであり、書き込みポインタは、書き込むべきブロック内の対応する物理セクタを指す。マッピング情報は、RAM内にバッファリングされ、最終的にはメインメモリ内のセクタ割り当てテーブルに記憶される。論理セクタの最新バージョンによって、既存のブロック内のすべての以前のバージョンは廃止されることになり、既存のブロックは、部分的に廃止される。部分的に廃止されたブロックを許容することができる数に維持するために、ガーベッジコレクションが行われる。
【0015】
従来技術のシステムは、更新データを数多くのブロックに渡って分散させる傾向にあるか、または更新データによって数多くの既存ブロックを部分的に廃止する場合もある。その結果、部分的に廃止されたブロックに対して大量のガーベッジコレクションが必要となることが多く、これは効率的でなく、メモリの早すぎる老化を生じさせる。また、非順次更新に比べて、順次更新を扱う体系化された効率的なやり方がない。
【0016】
したがって、大容量かつ高性能の不揮発性メモリに対する一般的な要求がある。特に、大きなブロックにおけるメモリ動作を前述した問題なく行うことのできる大容量不揮発性メモリを有するための要求がある。
【先行技術文献】
【特許文献】
【0017】
【特許文献1】米国特許第5,070,032号
【特許文献2】米国特許第5,095,344号
【特許文献3】米国特許第5,315,541号
【特許文献4】米国特許第5,343,063号
【特許文献5】米国特許第5,661,053号
【特許文献6】米国特許第5,313,421号
【特許文献7】米国特許第6,222,762号
【特許文献8】米国特許第5,570,315号
【特許文献9】米国特許第5,903,495号
【特許文献10】米国特許第6,046,935号
【特許文献11】米国特許第5,768,192号
【特許文献12】米国特許第6,011,725号
【特許文献13】米国特許第6,567,307号
【特許文献14】国際公開特許出願第WO03/027828号
【特許文献15】国際公開特許出願第WO00/49488号
【特許文献16】米国公開特許出願第2005/0144365号
【特許文献17】2003年12月30日出願のAlan Sinclair による「Adaptive Metablocks 」という米国特許出願
【特許文献18】2003年12月30日出願のCarlos Gonzales らによる「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures 」という米国特許出願
【非特許文献】
【0018】
【非特許文献1】"NROM: A Novel Localized Trapping, 2-Bit Nonvolatile Memory Cell", IEEE Electron Device Letter, vol. 21, no. 11, November 2000, pp. 543-545
【発明の概要】
【0019】
不揮発性メモリシステムは、物理メモリ位置の物理グループに組織化される。各物理グループ(メタブロック)は、一単位として消去可能であり、データの論理グループを記憶するために使用することができる。メモリ管理システムは、論理グループの更新データを記録する専用のメタブロックを割り当てることにより、データの論理グループの更新を行うことができる。更新メタブロックは、更新データを受信した順序で記録し、記録が当初記憶された通りの正確な論理順序であるか(順次)、またはそうでないか(カオス的)についての制限はない。最終的には、更新メタブロックは閉鎖されて、さらに記録することができなくなる。いくつかの処理のうちの1つが生じることになるが、元メタブロックを置換する、正確な順序の一杯となったメタブロックが結局は生じることになる。カオス的な場合には、ディレクトリデータが、頻繁な更新の助けとなるようなやり方で、不揮発性メモリに保持される。このシステムは、複数の論理グループが並行して更新されることをサポートする。
【0020】
本発明の一特徴により、データを論理グループ毎に更新することができる。よって、論理グループが更新されている最中は、論理ユニットの分配(および更新によって廃止されるメモリユニットの分散)は、その範囲が限定される。これは、論理グループが物理ブロック内に正常に含まれている場合に特に当てはまる。
【0021】
論理グループの更新中に、典型的には1つまたは2つのブロックが、更新論理ユニットをバッファリングするように割り当てられる必要がある。よって、ガーベッジコレクションは、比較的少ない数のブロックに渡ってのみ行えばよい。カオス的ブロックのガーベッジコレクションは、統合化またはコンパクト化によって行われてもよい。
【0022】
更新処理の経済性は、順次更新に比較してカオス的(非順次)更新に割り当てられる必要のある追加のブロックがないようにする更新ブロックの一般的な処理において、さらに明らかである。すべての更新ブロックは、順次更新ブロックとして割り当てられ、どの更新ブロックも、カオス的更新ブロックに変更可能である。実際、順次からカオス的への更新ブロックの変更は任意である。
【0023】
システムリソースの効率的な使用により、複数の論理グループを並行して更新することができる。これは、効率性をさらに増し、オーバーヘッドを減少させる。
【0024】
本発明の一態様によれば、ブロック管理システムを伴う不揮発性メモリにおいて、データを記録するために同時に開放されている更新ブロックの第1の所定最大数までサポートするシステムのために、改良されたブロック置換手法が実施される。更新ブロックは、主に連続更新ブロックであって、当該連続更新ブロックにおいて、データが論理的に連続した順序で記録されているが、そのブロック数は、データが論理的に連続した順序で記録されないカオス的更新ブロックであることが許容された第2の所定最大数までである。更新ブロックの新規の割り当てによって更新ブロックのプールが第1または第2の所定最大数を超えるような場合にはいつでも、当該制限に従うようにプール内の既存の更新ブロックのうちの1つが閉鎖および削除されることになる。更新ブロックを閉鎖する前に、そのデータは連続ブロックに統合される。この改良された手法は、連続的な更新が過度のカオス的ブロック統合数を生じさせ得る状況を回避するためのものである。これは、連続更新ブロックとカオス的更新ブロックとをそれぞれの置換または統合プールに分離することによって達成される。特に、連続更新によって新規の更新ブロックの割り当てが第1の所定最大数を超える場合には、プール内の最も長時間使用されていない連続更新ブロックが、空きを作るために優先される。
【0025】
現行システムにおいて、一般的に、ユーザデータと制御データという2つの種類のデータがある。ユーザデータは、ホストからメモリシステムへ、典型的には論理的に連続した順序で送られる。連続更新ブロックは、ホストからの連続書き込み動作を最適に扱うように割り当てられる。ユーザデータは、とりわけ論理データに対する後続の更新がある場合には、論理的に不連続な順序である場合がある。カオス的更新ブロックは、不連続な順序でデータを最適に扱うために作成される。カオス的または不連続データの他のソースとしては、ユーザデータを記憶する過程で生成されるファイルおよびディレクトリ情報などといった、ファイルシステムまたはメモリシステムによって保持される制御データがある。
【0026】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限に従う従来の手法は、連続的かカオス的かどうかに関わらず、プール内の最も長時間使用されていない更新ブロックを閉鎖するものであった。
【0027】
本願の手法は、従来の手法を改良するものであって、基本的には、連続的な書き込み動作中に、新規の割り当て用に空きを作るためにプール内の更新ブロックを閉鎖する必要がある場合には、プール内の最も長時間使用されていない連続更新ブロックが閉鎖される。これにより、連続的な書き込み動作およびランダムな書き込み動作を扱うために様々な更新ブロックを効果的に活用することが確実になる。特に、ホストによる大規模な連続書き込み動作によってFATおよびディレクトリ情報を含むカオス的更新ブロックを閉鎖せざるを得なくなる場合があるといった非効率な状況を回避する。この大規模な書き込み動作が終わると再び更新されるようなFATおよびディレクトリ情報を記憶するために、さらなるカオス的ブロックが実質上まもなく作成されることになる。改良された置換ポリシーを作成することによって、置換および統合プールの分離が規定され、開放された連続ブロックまたは開放されたカオス的ブロックとなり得るブロックの連続的な書き込みおよび統合中に、カオス的ブロックを統合する際のさらなるオーバーヘッドを防止して、後続のFATおよびディレクトリ更新を管理する。
【0028】
本願の手法を一般的にいうと、更新ブロックが連続または不連続データのいずれを記憶しているか、または、ある予め定められた種類のシステムデータを記憶しているかどうかなどといった属性のセットに基づいて、更新ブロックを分類するものである。限られた数の更新ブロックのプールを実装するにあたって、更新ブロックの各クラスは、当該クラス用にサポートされた最大数を超えるような場合の置換に関する独自の規則を有することになる。
【0029】
例えば、連続更新ブロックおよび不連続更新ブロックは、2つの異なるクラスである。これら各クラス用の置換規則は同一であり、すなわち、最もアクティブでないものを新規のものに置換する。よって、連続更新ブロックのプールを超えるような場合には、新規のものがプールに導入される前に、プール内の最もアクティブでないものが閉鎖および削除されることになる。不連続更新ブロックのプールについても同様である。
【0030】
一般的に、各クラスは、他のクラスから独立した独自の置換規則を有する。置換規則の例として、対応するクラスによっては、最も長時間アクセスされていないもの、直近にアクセスされたもの、最も頻繁にアクセスされていないもの、最も頻繁にアクセスされているものなどを置換する。
【0031】
本発明のさらなる特徴および利点は、添付の図面と共に理解される以下の好ましい実施形態の説明から理解されるだろう。
【図面の簡単な説明】
【0032】
【図1】本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。
【図2】本発明の好ましい実施形態に係る、セクタ(またはメタブロック)の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。
【図3A】(i)〜(iii)は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。
【図3B】論理グループとメタブロックと間のマッピングを概略的に示す。
【図4】物理メモリにおける構造を含むメタブロックの配列を示す。
【図5A】互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。
【図5B】1つの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【図5C】1つより多くの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。
【図6】コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。
【図7A】順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図7B】カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示す。
【図8】2つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。
【図9】本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図10】本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。
【図11A】図10に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。
【図11B】図10に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。
【図12A】様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
【図12B】論理グループの予想される状態を列挙する表である。
【図13A】様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。メタブロックとは、論理グループに対応する物理グループである。
【図13B】メタブロックの予想される状態を列挙する表である。
【図14(A)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(B)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(C)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(D)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(E)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(F)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(G)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(H)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(I)】論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
【図14(J)】論理グループの状態と、物理メタブロックとに対する様々な動作の影響を示す状態図である。
【図15】割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト(ABL)の構造の好ましい実施形態を示す。
【図16A】カオス的ブロックインデックス(CBI)セクタのデータフィールドを示す。
【図16B】カオス的ブロックインデックス(CBI)セクタが専用のメタブロックに記録されている一例を示す。
【図16C】カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図16D】論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。
【図16E】各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け(CBI)セクタおよびその機能の例を示す。
【図17A】グループアドレステーブル(GAT)セクタのデータフィールドを示す。
【図17B】グループアドレステーブル(GAT)セクタがGATブロックに記録されている一例を示す。
【図18】消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。
【図19】論理/物理アドレス変換の処理を示すフローチャートである。
【図20】メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。
【図21】ブロック管理システム用の更新ブロック数に対する2つの所定の規制の典型例を概略的に示す。
【図22】様々なメモリ装置用に最適化された2つの規制の組み合わせの典型例を示す。
【図23A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図23B】従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。
【図23C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図24A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図24B】従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。
【図24C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図25A】図10のステップ410ならびに図23Bおよび図24Bに先に示す手法であって、新規の割り当てが所定の制限を超えるような場合にはいつでも、最も長時間アクセスされていない更新ブロックが閉鎖される手法を示す。
【図25B】図10のステップ370に先に示す手法であって、カオス的更新ブロック数が所定の制限を超える場合にはいつでも、最も長時間アクセスされていないカオス的(不連続)更新ブロックが閉鎖される手法を示す。
【図26A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図26B】本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。
【図26C】空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。
【図27A】図22において説明したような「5−2」構成の更新プールを概略的に示す。
【図27B】本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。
【図27C】空きを作るために他のカオス的更新ブロックが閉鎖および削除された後、新規のカオス的更新ブロックをプールに導入することを概略的に示す。
【図28】第1の実施形態に係る、連続更新中に更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【図29】第2の実施形態に係る、2つの所定の制限を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【図30】クラスベースの置換規則を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
【発明を実施するための形態】
【0033】
図1から図20は、本願の様々な態様が実施されるようなブロック管理を伴うメモリシステムの例を示す。同様のメモリシステムが、Gorobetsらによる「Non-Volatile Memory and Method with Control Data Management 」という米国公開特許出願第2005/0144365号(特許文献16)に記載されている。
【0034】
図1は、本発明を実施するのに適切なメモリシステムの主要ハードウェアの構成要素を概略的に示す。メモリシステム20は、典型的には、ホストインターフェイスを通じてホスト10と共に動作する。メモリシステムは、典型的には、メモリカードの形式を取るか、または埋め込み形メモリシステムである。メモリシステム20は、動作がコントローラ100によって制御されるメモリ200を含む。メモリ200は、1つ以上の集積回路チップに渡って分散された不揮発性メモリセルの1つ以上のアレイからなる。コントローラ100は、インターフェイス110と、プロセッサ120と、オプションのコプロセッサ121と、ROM122(読み出し専用メモリ)と、RAM130(ランダムアクセスメモリ)と、オプションのプログラム可能な不揮発性メモリ124とを含む。インターフェイス110は、ある構成要素をコントローラからホストへとインターフェイスさせ、他の構成要素をメモリ200とインターフェイスさせる。不揮発性ROM122および/またはオプションの不揮発性メモリ124に記憶されたファームウェアは、コントローラ100の機能を実施するためにプロセッサ120に対して符号を提供する。誤り訂正符号は、プロセッサ120またはオプションのコプロセッサ121によって処理されてもよい。代替の実施形態において、コントローラ100は、状態マシン(図示せず)によって実施される。さらに他の実施形態において、コントローラ100は、ホスト内で実施される。
【0035】
論理および物理ブロック構造
図2は、本発明の好ましい実施形態に係る、セクタ(またはメタブロック)の物理グループに組織化され、コントローラのメモリマネージャによって管理されたメモリを示す。メモリ200は、メタブロックに組織化され、各メタブロックは、共に消去可能な物理セクタS0 ,...,SN-1 のグループである。
【0036】
ホスト10は、ファイルシステムまたはオペレーティングシステムの下でアプリケーションを実行する場合に、メモリ200にアクセスする。典型的には、ホストシステムは、データを論理セクタ単位でアドレス指定し、例えば、各セクタは、512バイトのデータを含んでもよい。また、ホストが、論理クラスタ単位でメモリシステムに対して読み出しまたは書き込みを行うのが通常であり、各クラスタは、1つ以上の論理セクタからなる。ホストシステムによっては、より低いレベルのメモリ管理をホスト側で行うためにオプションのホスト側メモリマネージャが存在する場合がある。多くの場合、読み出しまたは書き込み動作中に、ホスト10は、実質的に、メモリシステム20に対してコマンドを発行して、データの論理セクタのストリングを含むセグメントを連続するアドレスと共に読み出しまたは書き込みを行う。
【0037】
フラッシュメモリ200のメタブロック内のホスト論理セクタのデータの記憶および検索を管理するために、メモリ側メモリマネージャが、メモリシステム20のコントローラ100内で実施される。好ましい実施形態において、メモリマネージャは、メタブロックの消去、読み出し、書き込み動作を管理するための数多くのソフトウェアモジュールを含む。また、メモリマネージャは、フラッシュメモリ200とコントローラRAM130との間の動作に関連したシステム制御およびディレクトリデータを保持する。
【0038】
図3A(i)〜(iii)は、本発明の好ましい実施形態に係る、論理グループとメタブロックとの間のマッピングを概略的に示す。物理メモリのメタブロックは、論理グループのデータのN個の論理セクタを記憶するためのN個の物理セクタを有する。図3A(i)は、論理グループLGi からのデータを示し、論理セクタは、連続論理順序0,1,...,N−1である。図3A(ii)は、同一の論理順序のメタブロック内に記憶されている同じデータを示す。このように記憶される場合に、メタブロックは、「順次」であるといわれる。一般的に、メタブロックは、異なる順序で記憶されたデータを有してもよく、その場合は、メタブロックは、「非順次」または「カオス的」であるといわれる。
【0039】
論理グループの最小のアドレスと、それがマッピングされるメタブロックの最小アドレスとの間には、オフセットがあることがある。この場合、論理セクタアドレスは、メタブロック内の論理グループの末尾から先頭へ戻るループとして折り返す。例えば、図3A(iii)では、メタブロックは、その最初の位置が論理セクタkのデータで始まるように記憶する。最終論理セクタN−1に達すると、セクタ0に戻り、最終的には、その最終物理セクタに論理セクタk−1に関連したデータを記憶する。好ましい実施形態において、メタブロックの最初の物理セクタに記憶されたデータの最初の論理セクタアドレスを識別するといった、任意のオフセットの識別のために、ページタグが使用される。2つのブロックは、ページタグだけが異なる場合、その論理セクタを同様の順序で記憶しているものと考えられる。
【0040】
図3Bは、論理グループとメタブロックと間のマッピングを概略的に示す。各論理グループは、データが現在更新中の少数の論理グループを除いて、固有のメタブロックにマッピングされる。論理グループが更新された後、別のメタブロックにマッピングされてもよい。マッピング情報は、論理/物理ディレクトリのセットに維持され、これについては、詳細に後述する。
【0041】
メタブロックマッピングに対する他の種類の論理グループも予期される。例えば、可変サイズのメタブロックが、本願と同日にAlan Sinclair によって出願された「Adaptive Metablocks 」という同時継続出願中の共有された米国特許出願(特許文献17)に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【0042】
本発明の特徴の1つは、システムは単一の論理区画で動作し、メモリシステムの論理アドレス範囲にわたる論理セクタのグループは同一に扱われることである。例えば、システムデータを含むセクタと、ユーザデータを含むセクタとは、論理アドレス空間内のどこにでも分散することができる。
【0043】
従来技術のシステムとは異なり、高頻度かつ小サイズの更新を伴うデータを含む可能性が高い論理アドレス空間セクタに局在化させるための、システムセクタ(すなわち、ファイル割り当てテーブルに関連するセクタ、ディレクトリ、またはサブディレクトリ)の特別な分割またはゾーニングはない。代わりに、セクタの論理グループを更新するこの手法は、システムセクタに典型的なアクセスパターンおよびファイルデータに典型的なアクセスパターンを効率的に扱うことになる。
【0044】
図4は、物理メモリにおける構造を含むメタブロックの配列を示す。フラッシュメモリは、一単位として共に消去可能なメモリセルのブロックを備える。このような消去ブロックは、フラッシュメモリの消去の最小単位、またはメモリの最小消去ユニット(MEU)である。最小消去ユニットは、メモリのハードウェア設計パラメータであるが、複数のMEUの消去をサポートするメモリシステムによっては、1つ以上のMEUを備える「超MEU」を構成することができる。フラッシュEEPROMについて、MEUは1つのセクタを備えてもよいが、複数のセクタが好ましい。図に示されている例では、M個のセクタを有する。好ましい実施形態において、各セクタは、512バイトのデータを記憶することができ、ユーザデータ部分と、システムまたはオーバーヘッドデータを記憶するためのヘッダ部分とを有する。メタブロックがP個のMEUから構成されている場合には、各MEUはM個のセクタを含み、そして、各メタブロックは、N=P*M個のセクタを有することになる。
【0045】
メタブロックは、システムレベルでは、例えば共に消去可能なセクタといった、メモリ位置のグループを表す。フラッシュメモリの物理アドレス空間は、メタブロックを消去の最小単位とした、メタブロックのセットとして扱われる。本願明細書において「メタブロック」および「ブロック」という用語は、媒体管理のためのシステムレベルにおける消去の最小単位を規定するために類義語として使用され、「最小消去ユニット」またはMEUは、フラッシュメモリの消去の最小単位を示すために使用される。
【0046】
メタブロックを形成するための最小消去ユニット(MEU)のリンク付け
プログラミング速度および消去速度を最大限にするために、複数のMEUにある複数のページの情報が並列にプログラミングされるように、かつ複数のMEUが並列に消去されるようにすることによって、並行処理ができる限り活用される。
【0047】
フラッシュメモリにおいて、ページは、1回の動作で共にプログラムすることができるメモリセルの集まりである。ページは、1つ以上のセクタを備えていてもよい。また、メモリアレイは、1つ以上のプレーンに分割されてもよく、1つのプレーン内の1つのMEUのみが1度にプログラムまたは消去されてもよい。最後に、プレーンは、1つ以上のメモリチップに渡って分散されていてもよい。
【0048】
フラッシュメモリにおいて、MEUは、1つ以上のページを備えていてもよい。フラッシュメモリチップ内のMEUは、プレーンに組織化されてもよい。各プレーンからの1つのMEUは並行してプログラムまたは消去されてもよいので、各プレーンから1つのMEUを選択することによって複数のMEUメタブロックを形成するのが得策である(以下の図5B参照)。
【0049】
図5Aは、互いに異なるプレーンの最小消去ユニットのリンク付けから構成されるメタブロックを示す。MB0,MB1,...などの各メタブロックは、メモリシステムの互いに異なるプレーンからのMEUから構成され、互いに異なるプレーンは、1つ以上のチップにわたって分散されていてもよい。図2に示されているメタブロックリンクマネージャ170は、各メタブロックについてのMEUのリンク付けを管理する。各メタブロックは、初期フォーマット処理中に構成され、その構成成分であるMEUを、MEUのうちの1つに障害があるまで、システムの寿命がある限り保持する。
図5Bは、1つの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、一実施形態を示す。
【0050】
図5Cは、1つより多くの最小消去ユニット(MEU)が、メタブロックへのリンク付けのために各プレーンから選択される、別の実施形態を示す。別の実施形態において、1つより多くのMEUが各プレーンから選択されて超MEUが形成されてもよい。例えば、超MEUは、2つのMEUから形成されてもよい。この場合、読み出しまたは書き込み動作について1つより多くのパスを利用してもよい。
【0051】
MEUをメタブロックにリンク付けまたは再リンク付けすることは、本願と同日にCarlos Gonzales らによって出願された「Adaptive Deterministic Grouping of Blocks into Multi-Block Structures 」という同時継続出願中の共有された米国特許出願(特許文献18)に開示されている。同時継続出願の開示全体は、本願明細書において参照により援用されている。
【0052】
メタブロック管理
図6は、コントローラおよびフラッシュメモリにおいて実施されるようなメタブロック管理システムの概略ブロック図である。メタブロック管理システムは、コントローラ100において実施された様々な機能モジュールを備え、様々な制御データ(ディレクトリデータを含む)をフラッシュメモリ200およびコントローラRAM130内に階層的に分散されたテーブルおよびリストに保持する。コントローラ100内に実装された機能モジュールは、インターフェイスモジュール110と、論理/物理アドレス変換モジュール140と、更新ブロックマネージャモジュール150と、消去ブロックマネージャモジュール160と、メタブロックリンクマネージャモジュール170とを含む。
【0053】
インターフェイス110により、メタブロック管理システムは、ホストシステムとインターフェイスすることができる。論理/物理アドレス変換モジュール140は、論理アドレスをホストから物理メモリ位置へマッピングする。更新ブロックマネージャモジュール150は、データの所定の論理グループについて、メモリにおけるデータ更新動作を管理する。消去ブロックマネージャモジュール160は、メタブロックの消去動作と、新規の情報を記憶するためのメタブロック割り当てとを管理する。メタブロックリンクマネージャモジュール170は、セクタの最小消去可能ブロックのサブグループのリンク付けを管理して、所定のメタブロックを構成する。これらのモジュールの詳細な説明は、それぞれの欄で行う。
【0054】
動作中に、メタブロック管理システムは、アドレス、制御および状態情報などの制御データを生成して、それと共に動作する。制御データのほとんどが小さなサイズの頻繁に変化するデータであることが多いので、大きなブロック構造のフラッシュメモリ内では簡単かつ効率的に記憶および保持することができない。より静的な制御データを不揮発性フラッシュメモリに記憶させ、より変化するより少ない量の制御データをコントローラRAMに位置づけるという階層的分散手法を使用することで、さらに効率的な更新およびアクセスを行う。電源遮断または障害時には、この手法により、揮発性コントローラRAM内の制御データは、不揮発性メモリ内の小さなセットの制御データを走査することによって、迅速に再構築することができる。これが可能なのは、本発明が、データの所定の論理グループの予想される動作に関連するブロックの数を制限しているからである。加えて、存続が必要とされる制御データのいくつかは、セクタ毎に更新可能な不揮発性のメタブロックに記憶され、新規のセクタを生じさせる各更新が、以前の更新に代わって記録される。セクタインデックス付け手法を制御データのために使用して、メタブロック内のセクタ毎の更新を追跡する。
【0055】
不揮発性フラッシュメモリ200は、比較的静的な大量の制御データを記憶する。これには、グループアドレステーブル(GAT)210と、カオス的ブロックインデックス(CBI)220と、消去済みブロックリスト(EBL)230と、MAP240とが含まれる。GAT210は、セクタの論理グループと、その対応するメタブロックとの間のマッピングを追跡する。マッピングは、更新を受けるもの以外は変化しない。CBI220は、更新中の論理的な非順次セクタのマッピングを追跡する。EBL230は、消去されたメタブロックのプールを追跡する。MAP240は、フラッシュメモリ内のすべてのメタブロックの消去状態を示すビットマップである。
【0056】
揮発性コントローラRAM130は、頻繁に変化およびアクセスされる制御データの小さな部分を記憶する。これには、割り当てブロックリスト(ABL)134と、クリア済みブロックリスト(CBL)136とが含まれる。ABL134は、更新データを記録するためにメタブロックの割り当てを追跡し、CBL136は、割り当て解除および消去されたメタブロックを追跡する。好ましい実施形態において、RAM130は、フラッシュメモリ200に記憶された制御データについてのキャッシュとしての役割を果たす。
【0057】
更新ブロックマネージャ
(図2に示されている)更新ブロックマネージャ150は、論理グループの更新を扱う。本発明の一態様によれば、更新を受けているセクタの各論理グループには、更新データを記録するために、専用の更新メタブロックが割り当てられる。好ましい実施形態において、論理グループの1つ以上のセクタの任意のセグメントが、更新ブロックに記録されることになる。更新ブロックは、順次順序または非順次(カオス的としても知られる)順序のいずれかで更新データを受信するように管理される。カオス的更新ブロックでは、セクタデータを論理グループ内で任意の順序で更新することができ、また個別のセクタの任意の繰り返しがあってもよい。特に、順次更新ブロックは、いずれのデータセクタの移転の必要なく、カオス的更新ブロックになりえる。カオス的データ更新には、ブロックの所定の割り当ては必要ない。任意の論理アドレスでの非順次書き込みが自動的に対処される。よって、従来技術のシステムとは異なり、論理グループの様々な更新セグメントが論理的な順次順序であってもまたは非順次順序であっても、特殊な処理はない。一般的な更新ブロックは、ホストによって要求された順序で様々なセグメントを記憶するために、単に使用されることになる。例えば、ホストシステムデータまたはシステム制御データがカオス的に更新されがちな場合でも、ホストシステムデータに対応する論理アドレス空間の領域を、ホストユーザデータを伴う領域と別々に扱う必要はない。
【0058】
セクタの完全な論理グループのデータは、1つのメタブロック内に論理的な順次順序で記憶されるのが好ましい。このように、記憶された論理セクタに対するインデックスは、予め規定されている。メタブロックが所定の順序で所定の論理グループのすべてのセクタを記憶している場合、これは「変化なし(intact)」といわれる。更新ブロックに関して、更新データを論理的な順次順序で最終的に充填する場合、更新ブロックは、元メタブロックを容易に置換する更新された変化なしのメタブロックとなる。他方、更新ブロックが更新データを、変化なしのブロックとは異なる論理的な順序で充填する場合、更新ブロックは、非順次またはカオス的更新ブロックであり、順序がばらばらのセグメントは、変化なしのブロックと同一の順序で論理グループの更新データが最終的には記憶されるように、さらに処理されなければならない。好ましい場合において、このセグメントは、1つのメタブロック内の論理的な順次順序である。さらなる処理には、元ブロック内の変化していないセクタを伴う更新ブロック内の更新されたセクタを、さらに他の更新メタブロックに統合化することを伴う。統合化された更新ブロックは、その後、論理的な順次順序となり、元ブロックを置換するために使用することができる。何らかの所定の条件下では、統合化処理に先立って、1つ以上のコンパクト化処理がある。コンパクト化処理は、カオス的更新ブロックのセクタを、置換するカオス的更新ブロックに単純に再記録し、同じ論理セクタの以前の更新によって廃止された重複する論理セクタを削除することはない。
【0059】
更新手法により、複数の更新スレッドを、所定の最大限まで並行して実行することができる。各スレッドは、専用の更新メタブロックを使用して更新を受けている論理グループである。
【0060】
順次データ更新
ある論理グループに属するデータを最初に更新する場合、論理グループの更新データについての更新ブロックとして、メタブロックが専用に割り当てられる。更新ブロックが割り当てられるのは、コマンドがホストから受信されて、既存のメタブロックがそのすべてのセクタを変化なく記憶している論理グループの1つ以上のセクタのセグメントを書き込む場合である。最初のホスト書き込み動作の場合、データの最初のセグメントが更新ブロックに記録される。各ホスト書き込みは連続論理アドレスを伴う1つ以上のセクタのセグメントであるので、最初の更新は、その性質上常に順次的であることとなる。後続のホスト書き込みでは、同一の論理グループ内の更新セグメントが、ホストから受信された順序で更新ブロックに記録される。ブロックは、順次更新ブロックとして管理され続けるのに対し、関連する論理グループ内でホストによって更新されたセクタは、論理的に順次的であり続ける。この論理グループ内で更新されたすべてのセクタは、このブロックが閉鎖されるか、カオス的更新ブロックに変換されるかのいずれかとなるまで、この順次更新ブロックに書き込まれる。
【0061】
図7Aは、2つの別個のホスト書き込み動作の結果、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の対応するセクタは廃止になる。ホスト書き込み動作#1において、論理セクタLS5〜LS8内のデータが更新中である。LS5’〜LS8’として更新されたデータは、新規に割り当てられた専用の更新ブロックに記録される。
【0062】
便宜上、論理グループ内の更新すべき第1のセクタは、第1の物理セクタ位置から開始する専用更新ブロックに記録される。一般的に、更新すべき第1の論理セクタは、必ずしもグループの論理的に第1番目のセクタではないので、論理グループの最初と、更新ブロックの最初との間にはオフセットがあることがある。このオフセットは、図3Aに関連して前に説明したように、ページタグとして知られている。後続のセクタは、論理的な順次順序で更新される。論理グループの最後のセクタが書き込まれる場合、グループアドレスは折り返して、書き込みシーケンスを、グループの最初のセクタで継続する。
【0063】
ホスト書き込み動作#2において、論理セクタLS9〜LS12内のデータのセグメントが更新中である。LS9’〜LS12’として更新されたデータは、専用の更新ブロック内の、最後の書き込みが終了した場所に直接続く位置に記録される。2つのホスト書き込みは、更新データが論理的な順次順序で、すなわち、LS5’〜LS12’のようにして、更新ブロックに記録されたようなものとして理解することができる。更新ブロックが順次更新ブロックとみなされるのは、論理的な順次順序で充填されているからである。更新ブロックに記録された更新データによって、元ブロック内の対応するデータが廃止される。
【0064】
カオス的データ更新
カオス的更新ブロック管理は、関連論理グループ内でホストによって更新された任意のセクタが論理的に非順次の場合に、既存の順次更新ブロックについて開始される。カオス的更新ブロックは、関連する論理グループ内の論理セクタが任意の順序でかつ任意の繰り返し量で更新されてもよいようなデータ更新ブロックの形式を取る。これは、ホストによって書き込まれたセクタが、更新中の論理グループ内の以前書き込んだセクタに対して論理的に非順次である場合に、順次更新ブロックからの変換によって作成される。この論理グループ内のその後の更新されたすべてのセクタは、グループ内の論理セクタアドレスが何であれ、カオス的更新ブロック内の次に使用可能なセクタ位置に書き込まれる。
【0065】
図7Bは、5つの別個のホスト書き込み動作の結果、カオス的更新ブロックへカオス的順序で書き込まれる論理グループ内のセクタの一例を示し、この論理グループについての元ブロック内の取り替えられたセクタと、カオス的更新ブロック内の複製セクタとは廃止になる。ホスト書き込み動作#1において、元メタブロックに記憶されている所定の論理グループの論理セクタLS10〜LS11が更新される。更新された論理セクタLS10’〜LS11’は、新規に割り当てられた更新ブロックに記憶される。この点で、更新ブロックは、順次的である。ホスト書き込み動作#2において、論理セクタLS5〜LS6がLS5’〜LS6’に更新されて、更新ブロック内の最終の書き込みに直接続く位置に記録される。これにより、更新ブロックは、順次的からカオス的なものへと変換される。ホスト書き込み動作#3において、論理セクタLS10が再び更新中であり、更新ブロックの次の位置にLS10’’として記録される。この点で、更新ブロック内のLS10’’は、元ブロック内のLS10に取って代わる以前の記録内のLS10’に取って代わる。ホスト書き込み動作#4において、論理セクタLS10内のデータは再び更新されて、更新ブロックの次の位置にLS10’’’として記録される。よって、LS10’’’が、論理セクタLS10についての現在における最新かつ唯一の有効データとなる。ホスト書き込み動作#5において、論理セクタLS30内のデータが更新中であり、更新ブロックにLS30’として記録される。よって、この例は、任意の順序および任意の繰り返しによって、論理グループ内のセクタをカオス的更新ブロックに書き込むことができることを示す。
【0066】
強制的順次更新
図8は、2つの別個のホスト書き込み動作の結果としての、論理アドレスに不連続性を有する、順次更新ブロックへ順次順序で書き込まれる論理グループ内のセクタの一例を示す。ホスト書き込み#1において、論理セクタLS5〜LS8における更新データは、LS5’〜LS8’として専用の更新ブロック内に記録される。ホスト書き込み#2において、論理セクタLS14〜LS16における更新データは、最終の書き込みに続く更新ブロック内にLS14’〜LS16’として記録されている。しかし、LS8とLS14との間にアドレスジャンプがあり、ホスト書き込み#2は、通常、更新ブロックを非順次的にすることになる。アドレスジャンプは重要ではないので、1つのオプションとしては、ホスト書き込み#2を実行する前に、介在セクタのデータを元ブロックから更新ブロックへコピーすることによってパディング動作(#2A)をまず行うというものである。このように、更新ブロックの順次的性質が維持される。
【0067】
図9は、本発明の一般的な一実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ260:メモリはブロックに組織化され、各ブロックは共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものである。
ステップ262:データは論理グループに組織化され、各論理グループは、論理ユニットに分割される。
ステップ264:標準的な場合、論理グループのすべての論理ユニットは、第1の所定の順序、好ましくは論理的な順次順序に従って、元ブロックのメモリユニットに記憶される。このように、ブロック内の個々の論理ユニットをアクセスするためのインデックスがわかる。
ステップ270:データの所定の論理グループ(例えば、LGx )について、LGx 内で論理ユニットを更新するための要求が行われる(一例として、論理ユニット更新が挙げられる。一般的には、更新は、LGx 内の1つ以上の連続論理ユニットのセグメントとなる)。
ステップ272:要求された更新論理ユニットが、LGx の更新の記録専用の第2のブロックに記憶されることになる。記録順序は、第2の順序であり、典型的には、更新が要求された順序に従う。本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。第2の順序によっては、第2のブロックは、順次的なものである場合も、カオス的なものである場合もある。
ステップ274:処理がステップ270にループバックするにつれて、第2のブロックは、論理ユニットが記録されるように要求し続ける。閉鎖のための所定の条件が具体化すると、第2のブロックは閉鎖されて、さらなる更新を受信しなくなる。この場合、処理は276へ進む。
ステップ276:閉鎖された第2のブロックが元ブロックと同様の順序でその更新論理ユニットを記録しているかどうかについて決定が行われる。図3Aに関して説明したように、ページタグ分だけ異なる論理ユニットを記録している場合には、2つのブロックは同様の順序であるとみなされる。2つのブロックが同様の順序である場合は、処理はステップ280へ進み、そうでなければ、ステップ290において、何らかのガーベッジコレクションを行う必要がある。
ステップ280:第2のブロックは第1のブロックと同一の順序なので、第2のブロックは、元ブロックである第1のブロックを置換するために使用される。更新処理は、その後、ステップ299で終了する。
ステップ290:所定の論理グループの各論理ユニットの最新バージョンが、第2のブロック(更新ブロック)および第1のブロック(元ブロック)から収集される。所定の論理グループの統合化された論理ユニットは、その後、第1のブロックと同様の順序で第3のブロックに書き込まれる。
ステップ292:第3のブロック(統合化されたブロック)は第1のブロックと同様の順序であるので、第3のブロックは、元ブロックである第1のブロックを置換するために使用される。更新処理は、その後、ステップ299で終了する。
ステップ299:閉鎖処理によって変化のない更新ブロックが作成されると、これが所定の論理グループにとっての新規の標準ブロックとなる。論理グループについての更新スレッドは終了される。
【0068】
図10は、本発明の好ましい実施形態に係る、データの論理グループを更新するための更新ブロックマネージャによる処理を示すフロー図である。更新処理は、以下のステップを含む。
ステップ310:データの所定の論理グループ(例えば、LGx )について、LGx 内で論理セクタを更新するための要求が行われる(一例として、セクタ更新が挙げられる。一般的には、更新は、LGx 内の1つ以上の連続論理セクタのセグメントととなる)。
ステップ312:LGx に専用の更新ブロックがまだ存在しない場合、ステップ410へ進み、論理グループについて新規の更新スレッドを開始する。これは、論理グループの更新データを記録するのに専用の更新ブロックを割り当てることによって達成されることになる。開放されている更新ブロックが既にあれば、ステップ314へ進み、更新ブロックに対する更新セクタの記録を開始する。
ステップ314:現在の更新ブロックが既にカオス的(すなわち、非順次的)である場合には、そのままステップ510へ進み、要求された更新セクタをカオス的更新ブロックに記録する。現在の更新ブロックが順次的である場合、ステップ316へ進み、順次更新ブロックの処理を行う。
ステップ316:本発明の一特徴は、論理的な順次またはカオス的順序でデータを記録するように、更新ブロックを最初に一般的に設定することができるようにする。しかし、論理グループは、最終的にはそのデータを論理的な順次順序でメタブロックに記憶させるので、更新ブロックをできるだけ順次的に維持するのが望ましい。そうすれば、更新ブロックが閉鎖されてさらなる更新ができなくなった場合、ガーベッジコレクションは必要ないので、必要とされる処理が少なくなる。
【0069】
要求された更新が更新ブロックの現在の順次順序に従うかどうかについての決定がなされる。更新が順次的に従う場合、ステップ510へ進み、順次更新が行われ、更新ブロックは順次的なままである。他方、更新が順次的に従わない(カオス的更新の)場合、他の動作が行われないならば、順次更新ブロックをカオス的なものに変換する。
一実施形態において、状況を守るためにこれ以上何もせず、処理は直接ステップ370へ進み、更新ブロックをカオス的なものにする更新が許容される。
【0070】
オプションの強制的順次処理
他の実施形態において、強制的順次処理ステップ320が、保留中のカオス的更新の観点から順次更新ブロックをできるだけ保存するためにオプションとして行われる。2つの状況があり、どちらも、欠落したセクタを元ブロックからコピーして、更新ブロック上に記録された論理セクタの順次順序を維持するものである。第1の状況は、更新によって短いアドレスジャンプが生じることである。第2の状況は、更新ブロックを順次的に保つために、更新ブロックを早く閉鎖することである。強制的順次処理ステップ320は、以下のサブステップを含む。
ステップ330:更新によって、所定の量CB より大きい論理アドレスジャンプが生じる場合、処理はステップ350の強制的順次更新処理へと進み、そうでなければ、処理はステップ340へと進んで、強制的順次閉鎖の資格があるかどうかの検討を行う。
ステップ340:充填されていない物理セクタ数が、更新ブロックのサイズの半分が典型的な値である所定の設定パラメータCC を超える場合、更新ブロックは、比較的使用されず、早く閉鎖されることはない。処理はステップ370へ進み、更新ブロックは、カオス的となる。他方、更新ブロックがおおむね充填されている場合、既に十分に使っているとみなされるので、ステップ360へと進み、強制的順次閉鎖となる。
ステップ350:強制的順次更新により、現在の順次更新ブロックを、アドレスジャンプが所定量CB を超えない限り順次的なままとすることができる。基本的には、更新ブロックの関連する元ブロックからのセクタがコピーされて、アドレスジャンプによるギャップを埋める。よって、順次更新ブロックは、ステップ510へ進んで現在の更新を順次記録する前に、介在アドレス内のデータで埋められることになる。
ステップ360:強制的順次閉鎖により、現在の順次的な更新ブロックを、カオス的なものに変換するよりも保留中のカオス的更新によって既におおむね充填されていれば、閉鎖することができる。カオス的または非順次更新は、前述したアドレスジャンプ例外、逆方向アドレス遷移、またはアドレス反復の対象ではなく、順方向アドレス遷移を伴うものとして規定される。順次更新ブロックがカオス的更新によって変換されるのを防止するために、更新ブロックの未書き込みのセクタ位置が、更新ブロックの関連した元の部分的に廃止されたブロックからセクタをコピーすることによって充填される。元ブロックは、その後完全に廃止されて、消去することができる。現在の更新ブロックは、現在では、フルセットの論理セクタを有するので、元メタブロックを置き換える変化のないメタブロックとして閉鎖される。処理は、ステップ430へと進み、ステップ310において最初に要求された保留中のセクタ更新の記録を受け付けるために、新規の更新ブロックをその位置に割り当てる。
【0071】
カオス的更新ブロックへの変換
ステップ370:保留中の更新が順次順序でなく、オプションとして、強制的順次条件が満たされていない場合、処理がステップ510へ進むときに非順次アドレスを有する保留中の更新セクタが更新ブロックへ記録されるようにするために、順次更新ブロックは、カオス的なものに変換されることが許容される。カオス的更新ブロックの最大数が存在する場合に、変換が進む前に、最近最もアクセスされていないカオス的更新ブロックを閉鎖する必要がある。よって、カオス的更新ブロックの最大数が超えないようにする。最近最もアクセスされていないカオス的更新ブロックの識別は、ステップ420において説明した一般的な場合と同一であるが、カオス的更新ブロックだけに制約される。このときにカオス的更新ブロックを閉鎖することは、ステップ550において説明したような統合化によって達成される。
【0072】
システム制約を受ける新規の更新ブロックの割り当て
ステップ410:消去メタブロックを更新ブロックとして割り当てる処理は、所定のシステム制約が超えているかどうかを判断することから開始する。リソースは有限であるため、メモリ管理システムは、典型的には、更新ブロックの所定の最大数UMAX が並行して存在することを許容する。この制限は、順次更新ブロックとカオス的更新ブロックとの総計であり、設計パラメータである。好ましい実施形態において、この制限は、例えば、最大8つの更新ブロックである。また、システムリソースに対するさらなる高い需要により、並行して開放されているカオス的更新ブロックの最大数に対する対応する所定の制限があってもよい(例えば、4つ)。
よって、UMAX 個の更新ブロックが既に割り当てられていれば、次の割り当て要求は、既存の割り当てられたものの1つが閉鎖された後にはじめて満足することができるようになる。処理はステップ420へ進む。開放更新ブロックの数がCA を下回る場合には、処理は直接ステップ430へ進む。
【0073】
ステップ420:更新ブロックCA の最大数を超える場合には、最近最もアクセスされていない更新ブロックが閉鎖されて、ガーベッジコレクションが行われる。最近最もアクセスされていない更新ブロックは、最近最もアクセスされていない論理ブロックに関連した更新ブロックとして識別される。最近最もアクセスされていないブロックを決定する目的で、アクセスは、論理セクタの書き込みと、オプションで読み出しとを含む。開放更新ブロックのリストが、アクセス順に保持され、初期化の際には、アクセス順序は何ら想定されていない。更新ブロックの閉鎖は、更新ブロックが順次的な場合のステップ360および530、ならびに更新ブロックがカオス的な場合のステップ540に関連して説明したのと同様の処理に従う。閉鎖により、ステップ430において新規の更新ブロックを割り当てる空間ができる。
ステップ430:割り当て要求は、新規のメタブロックを所定の論理グループLGx に専用の更新ブロックとして割り当てることで満足される。その後、処理はステップ510へ進む。
【0074】
更新データの更新ブロックへの記録
ステップ510:要求された更新セクタは、更新ブロックの次に使用可能な物理位置上に記録される。その後、処理はステップ520へ進み、更新ブロックを閉鎖する機が熟したかどうかが判断される。
【0075】
更新ブロックの閉鎖
ステップ520:さらなる更新を受け付けるための空間が更新ブロックにまだある場合には、ステップ570へ進む。そうでない場合には、ステップ522へ進み、更新ブロックを閉鎖する。現在の要求された書き込みが、ブロックが有する空間よりも多くの論理セクタを書き込もうとするものである場合に、更新ブロックを満たす実装例として2つのものがある。第1の実装例において、書き込み要求は2つの部分に分割され、第1の部分がブロックの最終物理セクタまで書き込む。その後、ブロックは閉鎖され、書き込みの第2の部分が、次に要求された書き込みとして扱われることになる。他方の実装例において、要求された書き込みは、ブロックが残りのセクタが埋め込まれて閉鎖されている間は保留される。要求された書き込みは、次に要求された書き込みとして扱われることになる。
ステップ522:更新ブロックが順次的であれば、ステップ530へと進み、順次閉鎖となる。更新ブロックがカオス的であれば、ステップ540へと進み、カオス的閉鎖となる。
【0076】
順次更新ブロックの閉鎖
ステップ530:更新ブロックが順次的かつ満杯であるので、そこに記憶された論理グループには変化がない。メタブロックは変化がなく、元のものを置換する。このとき、元ブロックは完全に廃止され、消去されてもよい。その後、処理はステップ570へと進み、所定の論理グループに対する更新スレッドは終了する。
【0077】
カオス的更新ブロックの閉鎖
ステップ540:更新ブロックは非順次的に充填され、いくつかの論理セクタの複数の更新を含む場合もあるので、ガーベッジコレクションが行われて、内部の有効なデータを救い出す。カオス的更新ブロックは、コンパクト化または統合化のいずれかが行われることになる。どちらの処理を行うかは、ステップ542において決定される。
ステップ542:コンパクト化を行うか、または統合化を行うかは、更新ブロックの重なり具合に依存する。論理セクタが複数回更新されていれば、その論理アドレスは非常に重なっている。更新ブロックに記録された同一の論理セクタの複数のバージョンがあることになり、最後に記録されたバージョンのみが、この論理セクタについて有効なものである。複数のバージョンを有する論理セクタを含む更新ブロックにおいて、別個の論理セクタの数は、論理グループの数よりはるかに少ないことになる。
【0078】
好ましい実施形態において、更新ブロック内の別個の論理セクタの数が、論理グループの大きさの半分が典型的な値である所定の設計パラメータCD を超える場合には、閉鎖処理はステップ550において統合化を行い、そうでなければ、処理はステップ560においてコンパクト化を行う。
ステップ550:カオス的更新ブロックが統合化されることになる場合、元ブロックと更新ブロックとが、統合化されたデータを含む新規の標準メタブロックに置換されることになる。統合化後、更新スレッドはステップ570において終了する。
ステップ560:カオス的更新ブロックがコンパクト化されることになる場合、コンパクト化されたデータを保持する新規の更新ブロックに置換されることになる。コンパクト化後、コンパクト化された更新ブロックの処理は、ステップ570において終了する。代わりに、更新ブロックが再び書き込まれるまで、コンパクト化を遅らせることもでき、これにより、介在する更新がないのに統合化に続いてコンパクト化が生じる可能性を排除する。新規の更新ブロックは、その後、LGx における更新への次の要求がステップ502において生じるときに、所定の論理ブロックのさらなる更新を行う際に使用されることになる。
ステップ570:閉鎖処理によって変化のない更新ブロックが作成される場合には、それが所定の論理グループの新規の標準ブロックになる。この論理グループの更新スレッドは終了することになる。閉鎖処理によって既存のものを置換する新規の更新ブロックが作成される場合には、この新規の更新ブロックは、所定の論理グループに対して要求される次の更新を記録するために使用されることになる。更新ブロックが閉鎖されない場合には、処理は、LGx 内の更新に対する次の要求がステップ310に生じる場合に継続する。
【0079】
前述した処理からわかるように、カオス的更新ブロックが閉鎖される場合には、そこに記録された更新データがさらに処理される。特に、その有効データに対しては、他のカオス的ブロックへコンパクト化する処理か、またはその関連する元ブロックに統合化して新たな標準順次ブロックを形成する処理によって、ガーベッジコレクションが行われる。
【0080】
図11Aは、図10に示されているカオス的更新ブロックを閉鎖する統合化処理をより詳細に示すフロー図である。カオス的更新ブロックの統合化は、更新ブロックが閉鎖されている場合、例えば、更新ブロックが最終物理セクタ位置に書き込みがなされた状態で一杯である場合に行われる、2つの予想される処理のうちの1つである。統合化は、ブロックに書き込まれた別個の論理セクタの数が所定の設計パラメータCD を超える場合に選ばれる。図10に示されている統合化処理ステップ550は、以下のサブステップを備える。
ステップ551:カオス的更新ブロックが閉鎖されている場合に、それを置換する新規のメタブロックが割り当てられることになる。
ステップ552:廃止されたセクタはすべて無視して、カオス的更新ブロックおよびその関連する元ブロック内の各論理セクタの最新バージョンを収集する。
ステップ554:収集された有効なセクタを新規のメタブロックに論理的な順次順序で記録して、変化のないブロック、すなわち、論理グループのすべての論理セクタが順次順序で記録されているブロックを形成する。
ステップ556:元ブロックを新規の変化のないブロックに置換する。
ステップ558:閉鎖された更新ブロックおよび元ブロックを消去する。
【0081】
図11Bは、図10に示されているカオス的更新ブロックを閉鎖するためのコンパクト化処理をより詳細に示すフロー図である。コンパクト化は、ブロック内の別個の論理セクタの数が所定の設計パラメータCD を下回る場合に選ばれる。図10に示されているコンパクト化処理ステップ560は、以下のサブステップを備える。
ステップ561:カオス的更新ブロックがコンパクト化されている最中に、それを置換する新規のメタブロックが割り当てられる。
ステップ562:コンパクト化されるべき既存のカオス的更新ブロック内の各論理セクタの最新バージョンを収集する。
ステップ564:収集されたセクタを新規更新ブロックに記録して、コンパクト化されたセクタを有する新規の更新ブロックを形成する。
ステップ566:既存の更新ブロックをコンパクト化されたセクタを有する新規の更新ブロックに置換する。
ステップ568:閉鎖された更新ブロックを消去する。
【0082】
論理およびメタブロック状態
図12Aは、様々な動作下における、論理グループの予想されるすべての状態と、その状態間で予想される遷移とを示す。
図12Bは、論理グループの予想される状態を列挙する表である。論理グループの状態は、以下のように規定される。
1.変化なし:論理グループ内のすべての論理セクタが、論理的な順次順序で、ページタグ折り返しなどを使用して、1つのメタブロックに書き込まれている。
2.未書き込み:論理グループ内の論理セクタが全く書き込まれていない。論理グループは、グループアドレステーブルにおいて未書き込みとして印付けされ、割り当てられたメタブロックはない。このグループ内のすべてのセクタに対するホスト読み出しに応答して、予め定められたデータパターンが返される。
3.順次更新:論理グループ内のいくつかのセクタが、論理的な順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。
4.カオス的更新:論理グループ内のいくつかのセクタが、論理的な非順次順序で、ページタグなどを使用してメタブロックに書き込まれ、これらのセクタによって、このグループの以前の変化なしの状態から対応する論理セクタが置換される。グループ内のセクタは、1回より多く書き込まれてもよく、最新のバージョンが、以前のすべてのバージョンを置換することになる。
【0083】
図13Aは、様々な動作下における、メタブロックの予想されるすべての状態と、その状態間で予想される遷移とを示す。
図13Bは、メタブロックの予想される状態を列挙する表である。メタブロックの状態は、以下のように規定される。
1.消去済み:メタブロック内のすべてのセクタは消去される。
2.順次更新:メタブロックには、セクタが論理的な順次順序でページタグなどを使用して部分的に書き込まれている。すべてのセクタは、同一の論理グループに属する。
3.カオス的更新:メタブロックには、セクタが論理的な非順次順序で部分的または一杯に書き込まれている。任意のセクタは1回より多く書き込むことができる。すべてのセクタは、同一の論理グループに属する。
4.変化なし:メタブロックは、論理的な順次順序でページタグなどを使用して一杯に書き込まれている。
5.オリジナル:メタブロックは、以前は変化なしであったが、少なくとも1つのセクタがホストデータ更新によって廃止されている。
【0084】
図14(A)〜14(J)は、論理グループの状態と、物理メタブロックとに対する様々な動作の効果を示す状態図である。
図14(A)は、第1の書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、依然未書き込みの論理グループの1つ以上のセクタを、新規に割り当てられた消去済みメタブロックに、論理的な順次順序で書き込む。論理グループおよびメタブロックは、順次更新状態になる。
図14(B)は、第1の変化なし動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、すべてのセクタが順次的にホストによって書き込まれると、変化なしとなる。この遷移は、カードが残りの未書き込みのセクタを予め定められたデータパターンで埋めることによって、グループを充填する場合も生じうる。メタブロックは変化なしとなる。
図14(C)は、第1のカオス的動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだった順次更新論理グループは、少なくとも1つのセクタが非順次的にホストによって書き込まれると、カオス的となる。
図14(D)は、最初のコンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧ブロックから新規のカオス的メタブロックへコピーされ、旧ブロックは、その後消去される。
図14(E)は、最初の統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。以前に未書き込みだったカオス的更新論理グループ内のすべての有効なセクタが、旧カオス的ブロックから移動されて、新規に割り当てられたブロックに論理的な順次順序で充填される。ホストによって書き込みされていないセクタには、予め定められたデータパターンが充填される。旧カオス的ブロックは、その後消去される。
【0085】
図14(F)は、順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。ホストは、変更なしの論理グループの1つ以上のセクタを、論理的な順次順序で、新規に割り当てられた消去済みブロックに書き込む。論理グループおよびメタブロックは、順次更新状態となる。以前変更なしであったメタブロックは、元メタブロックとなる。
図14(G)は、順次充填動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、そのすべてのセクタが順次的にホストによって書き込まれる場合に、変化なしとなる。これは、順次更新論理グループを変化無しとするために、元ブロックからの有効なセクタで充填する場合にも生じることがあり、その後、元ブロックは消去される。
図14(H)は、非順次書き込み動作についての論理グループおよびメタブロック遷移に対応する状態図である。順次更新論理グループは、少なくとも1つのセクタが非順次的にホストによって書き込まれる場合に、カオス的となる。非順次的セクタの書き込みは、更新ブロック内または対応する元ブロック内のいずれかの有効なセクタを廃止することがあってもよい。
図14(I)は、コンパクト化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧ブロックから新規のカオス的メタブロックへコピーされて、旧ブロックは、その後消去される。元ブロックは、影響を受けない。
図14(J)は、統合化動作についての論理グループおよびメタブロック遷移に対応する状態図である。カオス的更新論理グループ内のすべての有効なセクタは、旧カオス的ブロックおよび元ブロックからコピーされて、新規に割り当てられた消去ブロックは論理的な順次順序で充填される。その後、旧カオス的ブロックおよび元ブロックは消去される。
【0086】
更新ブロックの追跡および管理
図15は、割り当てのための開放または閉鎖された更新ブロックおよび消去ブロックの状況を追跡するための割り当てブロックリスト(ABL)の構造の好ましい実施形態を示す。割り当てブックリスト(ABL)610は、コントローラRAM130に保持され、消去されたブロックの割り当て、割り当てられた更新ブロック、関連するブロック、および制御構造の管理を行うことができ、また正確な論理/物理アドレス変換を可能にする。好ましい実施形態において、ABLは、消去済みブロックのリストと、開放更新ブロックリスト614と、閉鎖更新ブロックリスト616とを含む。
【0087】
開放更新ブロックリスト614は、開放更新ブロックの属性を伴う、ABL内のブロックエントリのセットである。開放更新ブロックリストは、現在開放されている各データ更新ブロック毎に1つのエントリを有する。各エントリは、以下の情報を保持する。LGは、現在の更新メタブロックが専用である論理グループアドレスである。順次/カオス的は、更新ブロックが順次またはカオス的更新データで充填されているかどうかを示す状態である。MBは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。書き込まれたセクタ数は、更新ブロックに現在書き込まれたセクタの数を示す。MB0 は、関連する元ブロックのメタブロックアドレスである。ページタグ0 は、関連する元ブロックのページタグである。
【0088】
閉鎖更新ブロックリスト616は、割り当てブロックリスト(ABL)のサブセットである。閉鎖更新ブロックの属性を伴う、ABL内のブロックエントリのセットである。閉鎖更新ブロックリストは、閉鎖されたデータ更新ブロック毎に1つのエントリを有するが、そのエントリは、論理的に主要物理ディレクトリに更新されていない。各エントリは、以下の情報を保持する。LGは、現在の更新ブロックが専用である論理グループアドレスである。MBは、更新ブロックのメタブロックアドレスである。ページタグは、更新ブロックの最初の物理位置に記録された開始論理セクタである。MB0 は、関連する元ブロックのメタブロックアドレスである。
【0089】
カオス的ブロックのインデックス付け
順次更新ブロックは、論理的に順次順序でデータを記憶しているので、ブロック内の任意の論理セクタは、容易に位置決定することができる。カオス的更新ブロックは、その論理セクタを順序がばらばらに記憶し、論理セクタの複数の更新生成物を記憶してもよい。各有効な論理セクタがカオス的更新ブロックのどこにあるかを追跡するために、追加の情報を保持しなければならない。
【0090】
好ましい実施形態において、カオス的ブロックのインデックス付けのデータ構造は、カオス的ブロックにおけるすべての有効なセクタの追跡および高速アクセスを可能にする。カオス的ブロックのインデックス付けは、論理アドレス空間の小さな領域を独立して管理するものであり、システムデータと、ユーザデータのホット領域を効率的に扱う。インデックス付けデータ構造により、性能が大幅な影響を受けないように、本質的にインデックス付け情報が、更新が稀であるという要件でフラッシュメモリ内に保持することができる。他方、カオス的ブロックに現在書き込まれているセクタのリストは、コントローラRAMにおけるカオス的セクタリストに保持される。また、フラッシュメモリからのインデックス情報のキャッシュが、アドレス変換のためのフラッシュセクタアクセス数を最小限にするために、コントローラRAMに保持される。カオス的ブロック毎のインデックスが、フラッシュメモリ内のカオス的ブロックインデック(CBI)内に記憶される。
【0091】
図16Aは、カオス的ブロックインデックス(CBI)セクタのデータフィールドを示す。カオス的ブロックインデックスセクタ(CBIセクタ)は、カオス的更新ブロックにマッピングされた論理グループ内のセクタ毎のインデックスを含み、カオス的更新ブロックまたはその関連する元ブロック内の論理グループの各セクタの位置を規定する。CBIセクタは、カオス的ブロック内の有効セクタを追跡するためのカオスブロックインデックスフィールドと、カオスブロックについてのアドレスパラメータを追跡するためのカオス的ブロック情報フィールドと、CBIセクタを記憶するメタブロック(CBIブロック)内の有効なCBIセクタを追跡するためのセクタインデックスフィールドとを含む。
【0092】
図16Bは、カオス的ブロックインデックス(CBI)セクタが専用のメタブロックに記録されている一例を示す。専用のメタブロックを、CBIブロック620と称する。CBIセクタが更新されると、CBIブロック620内の次に使用可能な物理セクタ位置に書き込まれる。したがって、CBIセクタの複数のコピーがCBIブロック内に存在し、最後に書き込まれたコピーのみが有効である。例えば、論理グループLG1 についてのCBIセクタは3回更新され、最後に書き込まれたコピーのみが有効なものである。CBIブロック内の各有効セクタの位置は、ブロック内の最後に書き込まれたCBIセクタ内のインデックスのセットによって識別される。この例において、ブロック内に最後に書き込まれたCBIセクタは、LG136 についてのCBIセクタであり、そのインデックスのセットは、以前のすべてのものに取って代わる有効なものである。CBIブロックが最終的にCBIセクタで満杯になると、ブロックは、制御書き込み動作中に、すべての有効セクタを新規のブロック位置に書き換えることによってコンパクト化される。その後、一杯のブロックは、消去される。
【0093】
CBIセクタ内のカオス的ブロックインデックスフィールドは、カオス的更新ブロックにマッピングされた論理グループまたはサブグループ内の各論理セクタについてのインデックスエントリを含む。各インデックスエントリは、対応する論理セクタについての有効データが位置するカオス的更新ブロック内のオフセットを示す。予約されたインデックス値は、論理セクタについての有効データがカオス的更新ブロック内に存在しないことを示し、関連する元ブロック内の対応するセクタが有効であることを示す。いくつかのカオス的ブロックインデックスフィールドエントリのキャッシュが、コントローラRAMに保持される。
【0094】
CBIセクタ内のカオス的ブロック情報フィールドは、システム内に存在するカオス的更新ブロック毎に1つのエントリを含み、ブロックについてのアドレスパラメータ情報を記録する。このフィールド内の情報は、CBIブロック内に最後に書き込まれたセクタにおいて有効であるのみである。この情報は、RAM内のデータ構造にも存在する。
【0095】
カオス的更新ブロック毎のエントリは、3つのアドレスパラメータを含む。1つ目は、カオス的更新ブロックに関連する論理グループの論理アドレス(または論理グループ番号)である。2つ目は、カオス的更新ブロックのメタブロックアドレスである。3つ目は、カオス的更新ブロック内に最後に書き込まれたセクタの物理アドレスのオフセットである。オフセット情報は、RAM内にデータ構造を再構築するために、初期化中のカオス的更新ブロックの走査のための開始点を設定する。
【0096】
セクタインデックスフィールドは、CBIブロックにおける有効CBIセクタ毎のエントリを含む。各許可されたカオス的更新ブロックに関する最も最近書き込まれたCBIセクタが位置するCBIブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可されたカオス的更新ブロックが存在しないことを示す。
【0097】
図16Cは、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。更新処理中に、更新データがカオス的更新ブロックに更新データを記録し、変化していないデータは、論理グループに関連する元メタブロック内に留まる。カオス的更新下で論理グループの論理セクタをアクセスする処理は、以下のようである。
ステップ650:所定の論理グループの所定の論理セクタの位置決定を開始する。
ステップ652:CBIブロック内の最終書き込みCBIセクタを位置決定する。
ステップ654:最終書き込みCBIセクタのカオス的ブロック情報フィールドを検索することによって、所定の論理グループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ662の前であればいつでも行うことができる。
ステップ658:最終書き込みCBIセクタが所定の論理グループ宛であれば、CBIセクタは位置決定される。ステップ662へ進む。そうでなければ、ステップ660へ進む。
ステップ660:最終書き込みCBIセクタのセクタインデックスフィールドを検索することによって、所定の論理グループについてのCBIセクタを位置決定する。
ステップ662:位置決定されたCBIセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【0098】
図16Dは、論理グループがサブグループに分割されている代替の実施形態に係る、カオス的更新を受けている所定の論理グループの論理セクタのデータに対するアクセスを示すフロー図である。CBIセクタの容量は有限なので、論理セクタの所定の最大数を追跡することができるのみである。論理グループが単一のCBIセクタが扱えるより多くの論理セクタを有する場合には、論理グループは、CBIセクタがそれぞれ割り当てられた複数のサブグループに分割される。一例において、各CBIセクタは、256個のセクタと、8個までのカオス的更新ブロックとからなる論理グループを追跡するのに十分な容量を有する。論理グループが256セクタを超えるサイズを有する場合には、256セクタのサブグループのそれぞれための別個のCBIセクタが論理グループ内に存在する。8個までのサブグループのためのCBIセクタが論理グループ内に存在してもよく、サイズで2048個のセクタまでの論理グループに対してサポートを提供する。
好ましい実施形態において、インデックスの管理を促進するために、間接インデックス付け手法が取られる。セクタインデックスの各エントリは、直接および間接フィールドを有する。
【0099】
直接セクタインデックスは、特定のカオス的更新ブロックに関連するすべての予想されるCBIセクタが位置するCBIブロック内のオフセットを規定する。このフィールドの情報は、最後に書き込まれた、この特定のカオス的更新ブロックに関連するCBIセクタにおいてのみ有効である。インデックス内のオフセットの予約値は、CBIセクタが存在しないことを示す。というのは、カオス的更新ブロックに関連する対応する論理サブグループが、存在しないか、または更新ブロックが割り当てられて以来更新されていないからである。
【0100】
間接セクタインデックスは、各許可されたカオス的更新ブロックに関連する最も最近書き込まれたCBIセクタが位置するCBIブロック内のオフセットを規定する。インデックス内のオフセットの予約値は、許可された更新ブロックが存在しないことを示す。
【0101】
図16Dは、以下のような、カオス的更新下の論理グループの論理セクタをアクセスする処理を示す。
ステップ670:各論理グループを複数のサブグループに分割して、CBIセクタを各サブグループに割り当てる。
ステップ680:所定の論理グループの所定のサブグループの所定の論理セクタの位置決定を開始する。
ステップ682:CBIブロック内の最終書き込みCBIセクタを位置決定する。
ステップ684:最終書き込みCBIセクタのカオス的ブロック情報フィールドを検索することによって、所定のサブグループに関連したカオス的更新ブロックまたは元ブロックを位置決定する。このステップは、ステップ696の前であればいつでも行うことができる。
ステップ686:最終書き込みCBIセクタが所定の論理グループ宛である場合には、ステップ691へ進む。そうでなければ、ステップ690へ進む。
ステップ690:最終書き込みCBIセクタの間接セクタインデックスフィールドを検索することによって、所定の論理グループについての複数のCBIセクタの最終書き込みを位置決定する。
ステップ691:所定の論理グループについてのサブグループの1つに関連したCBIセクタが少なくとも位置決定されている。続く。
ステップ692:位置決定されたCBIセクタが所定のサブグループ宛である場合には、この所定のサブグループについてのCBIセクタが位置決定される。ステップ696へ進む。そうでなければ、ステップ694へ進む。
ステップ694:現在の位置決定されたCBIセクタの直接セクタフィールドを検索することによって、所定のサブグループについてのCBIセクタを位置決定する。
ステップ696:所定のサブグループについてのCBIセクタのカオス的ブロックインデックスフィールドを検索することによって、カオス的ブロックまたは元ブロック内の所定の論理セクタを位置決定する。
【0102】
図16Eは、各論理グループが複数のサブグループに分割される実施形態についての、カオス的ブロックインデックス付け(CBI)セクタおよびその機能の例を示す。論理グループ700は、その変化のないデータを、元メタブロック702内に記憶する。その後、論理グループは、専用のカオス的更新ブロック704の割り当てを伴う更新を受ける。この例において、論理グループ700は、サブグループA,B,C,Dのようなサブグループに分割され、各サブグループは256個のセクタを有する。
【0103】
サブグループB内のi番目のセクタを位置決定するために、CBIブロック620内の最終書き込みCBIセクタを最初に位置決定する。最終書き込みCBIセクタのカオス的ブロック情報フィールドは、所定の論理グループについてのカオス的更新ブロック704を位置決定するためのアドレスを提供する。同時に、これは、カオス的ブロックに書き込まれた最終セクタの位置をも提供する。この情報は、走査および再構築の際に有用である。
【0104】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちの1つであることがわかると、このセクタが確かにi番目の論理セクタを含む所定のサブグループBについてのCBIセクタかどうかをさらに確認することになる。そうであれば、CBIセクタのカオス的ブロックインデックスは、i番目の論理セクタについてのデータを記憶するメタブロック位置を指すことになる。セクタ位置は、カオス的更新ブロック704または元ブロック702のいずれかでありうる。
【0105】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちの1つではあるが、正確にはサブグループBについてのCBIセクタではないことがわかると、その直接セクタインデックスを検索して、サブグループBについてのCBIセクタを位置決定する。この正確なCBIセクタが位置決定されると、そのカオス的ブロックインデックスを検索して、カオス的更新ブロック704および元ブロック702の中のi番目の論理セクタを位置決定する。
【0106】
最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちのいずれでもないことがわかると、その間接セクタインデックスを検索して、4つのうちの1つを位置決定する。図16Eに示されている例において、サブグループCについてのCBIセクタを位置決定する。その後、サブグループCについてのこのCBIセクタは、その直接セクタインデックスを検索して、サブグループBについての正確なCBIセクタを位置決定する。図に示されている例では、カオス的ブロックインデックスを検索すると、i番目の論理セクタが変化していないことがわかり、その有効データが元データ内で位置決定される。
【0107】
同様の検討が、所定の論理グループのサブグループC内のj番目の論理セクタを位置決定することにも適用される。図に示されている例では、最終書き込みCBIセクタが所定の論理グループの4つのCBIセクタのうちのいずれでもないことがわかる。その間接セクタインデックスは、所定のグループについての4つのCBIセクタのうちの1つを指す。また、4つのうちの指された最終書き込み分は、確かにサブグループCについてのCBIセクタであることがわかる。そのカオス的ブロックインデックスを検索すると、j番目の論理セクタが、カオス的更新ブロック704内の指定された位置に位置決定されることがわかる。
【0108】
カオス的セクタのリストが、システム内の各カオス的更新ブロックについてのコントローラRAM内にある。各リストは、関連するCBIセクタがフラッシュメモリ内で最後に更新されたときからの、カオス的更新ブロック内に書き込まれたセクタの記録を含む。特定のカオス的更新ブロックについての論理セクタアドレスの数は、カオス的セクタリスト内に保持することができ、8から16というのが典型的な値の設計パラメータである。このリストの最適なサイズは、カオス的データ書き込み動作についてのオーバーヘッドに対する影響と、初期化中のセクタ走査時間とを調整して決定される。
【0109】
システム初期化中に、各カオス的更新ブロックを必要に応じて走査して、関連するCBIセクタのうちの1つについての以前の更新以来書き込まれた有効なセクタを識別する。各カオス的更新ブロックについてのコントローラRAM内のカオス的セクタリストが構築される。各ブロックは、最終書き込みCBIセクタ内のカオス的ブロック情報フィールドで規定された最終セクタアドレスから走査されればよい。
【0110】
カオス的更新ブロックが割り当てられると、CBIセクタが、すべての更新された論理サブグループに対応するように書き込まれる。カオス的更新ブロックについての論理および物理アドレスは、カオス的ブロックインデックスフィールド内の空白エントリと共に、セクタ内の使用可能なカオス的ブロック情報フィールド内に書き込まれる。カオス的セクタリストは、コントローラRAMにおいて開放される。
カオス的更新ブロックが閉鎖されると、CBIセクタが、セクタ内のカオス的ブロック情報フィールドから除去されたブロックの論理および物理アドレスと共に書き込まれる。RAM内の対応するカオス的セクタリストは、使用されなくなる。
【0111】
コントローラRAM内の対応するカオス的セクタリストは、カオス的更新ブロックに書き込まれたセクタの記録を含むように修正される。コントローラRAM内のカオス的セクタリストが、カオス的更新ブロックに対するさらなるセクタ書き込みの記録について使用可能な空間を有していない場合には、更新されたCBIセクタが、リスト内のセクタに関連する論理サブグループについて書き込まれ、リストはクリアされる。
CBIブロック620が満杯になると、有効なCBIセクタが割り当てられた消去済みブロックにコピーされ、以前のCBIブロックは消去される。
【0112】
アドレステーブル
図2に示されている論理/物理アドレス変換モジュール140は、ホストの論理アドレスをフラッシュメモリ内の対応する物理アドレスに関連付ける役割を担う。論理グループと物理グループ(メタブロック)との間のマッピングが、不揮発性フラッシュメモリ200および揮発性だが動作が速いRAM130(図1参照)に分散されたテーブルおよびリストのセット内に記憶される。アドレステーブルは、フラッシュメモリに保持され、メモリシステム内の各論理グループについてのメタブロックアドレスを含む。加えて、最近書き込まれたセクタについての論理/物理アドレス記録は、RAMに一時的に保持される。これらの揮発性記録は、電源投入後にシステムを初期化するときに、フラッシュメモリ内のブロックリストおよびデータセクタヘッダから再構築することができる。よって、フラッシュメモリ内のアドレステーブルは、たまに更新されればよく、制御データについてのオーバーヘッド書き込み動作の割合が減ることになる。
【0113】
論理グループについてのアドレス記録の階層は、開放更新ブロックリストと、RAM内の閉鎖更新ブロックリストと、フラッシュメモリに保持されたグループアドレステーブル(GAT)とを含む。
開放更新ブロックリストは、更新されたホストセクタデータについて現在開放されているデータ更新ブロックのコントローラRAM内のリストである。あるブロックに対するエントリは、ブロックが閉鎖されると、閉鎖更新ブロックリストに移動される。閉鎖更新ブロックリストは、閉鎖されているデータ更新ブロックのコントローラRAM内のリストである。リスト内のエントリのサブセットは、制御書き込み動作中に、グループアドレステーブル内のセクタに移動される。
【0114】
グループアドレステーブル(GAT)は、メモリシステム内のホストデータのすべての論理グループについてのメタブロックアドレスのリストである。GATは、論理アドレスに従って順次的に並べられた、論理グループ毎に1つのエントリを含む。GAT内のn番目のエントリは、アドレスnの論理グループについてのメタブロックアドレスを含む。好ましい実施形態において、このテーブルは、フラッシュメモリ内にあるテーブルであり、メモリシステム内のすべての論理グループについてのメタブロックアドレスを規定するエントリを伴うセクタ(GATセクタと称する)のセットを含む。GATセクタは、フラッシュメモリ内の1つ以上の専用制御ブロック(GATブロックと称する)内にある。
【0115】
図17Aは、グループアドレステーブル(GAT)セクタのデータフィールドを示す。GATセクタは、例えば、128個の連続する論理グループのセットについてのGATエントリを含むのに十分な容量を有してもよい。各GATセクタは、2つの構成要素、すなわち、ある範囲内の各論理グループのメタブロックアドレスについてのGATエントリのセットと、GATセクタインデックスとを含む。第1の構成要素は、論理アドレスに関連するメタブロックを位置決定するための情報を含む。第2の構成要素は、GATブロック内のすべての有効なGATセクタを位置決定するための情報を含む。各GATエントリは、3つのフィールド、すなわち、メタブロック番号と、図3A(iii)に関連して前に規定したようなページタグと、メタブロックが再リンクされたかどうかを示すフラグとを有する。GATセクタインデックスは、GATブロック内の有効なGATセクタの位置を列挙する。このインデックスは、各GATセクタ内にあるが、GATブロック内の次に書き込まれたGATセクタのバージョンによって取って代わられる。よって、最終書き込みGATセクタ内のバージョンのみが有効である。
【0116】
図17Bは、グループアドレステーブル(GAT)セクタが1つ以上のGATブロックに記録されている一例を示す。GATブロックは、GATセクタを記録する専用のメタブロックである。GATセクタが更新される場合には、GATブロック720内の次に使用可能な物理セクタ位置に書き込まれる。したがって、GATセクタの複数のコピーがGATブロック内に存在することがあり、最後に書き込まれたコピーのみが有効である。例えば、GATセクタ45は、少なくとも2回更新され、最終バージョンが有効なものである。GATブロック内の各有効セクタの位置は、ブロック内の最終書き込みGATセクタ内のインデックスのセットによって識別される。この例において、ブロック内の最終書き込みGATセクタは、GATセクタ56であり、そのインデックスのセットは、すべての以前のものにとって代わる有効なものである。GATブロックが、GATセクタで最終的に満杯になった場合には、ブロックは、すべての有効なセクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【0117】
前に説明したように、GATブロックは、論理アドレス空間のある領域におけるグループの論理的に連続したセットについてのエントリを含む。GATブロック内のGATセクタは、それぞれ、128個の連続する論理グループについての論理/物理マッピング情報を含む。GATブロックが対象とするアドレス範囲内のすべての論理グループについてのエントリを記憶するのに必要な数多くのGATセクタは、ブロック内の全セクタ位置のほんのわずかを占めるに過ぎない。したがって、あるGATセクタは、ブロック内の次に使用可能なセクタ位置に書き込まれることによって更新されてもよい。すべての有効なGATセクタおよびそれらのGATブロック内の位置のインデックスが、直近の書き込みGATセクタ内のインデックスフィールドに保持される。有効なGATセクタによって占められたGATブロック内の僅かな合計セクタは、システム設計パラメータであり、典型的には25%である。しかし、GATブロック毎に最大64個の有効GATセクタがある。論理容量が大きいシステムにおいて、1つ以上のGATブロックにGATセクタを記憶する必要がある場合がある。この場合、各GATブロックは、固定的な範囲の論理グループに関連付けられる。
【0118】
GAT更新は、制御書き込み動作の一部として行われ、割り当てのためのブロックがABLになくなったときにトリガされる(図18参照)。これは、ABL充填動作およびCBLを空にする動作と並行して行われる。GAT更新動作中に、1つのGATセクタは、閉鎖更新ブロックリスト内の対応するエントリからの情報で更新されたエントリを有する。GATエントリが更新されると、対応するエントリはどれでも、閉鎖更新ブロックリスト(CUBL)から除去される。例えば、更新すべきGATセクタは、閉鎖更新ブロックリスト内の最初のエントリに基づいて選択される。更新されたセクタは、GATブロック内の次に使用可能なセクタ位置に書き込まれる。
【0119】
更新されたGATセクタに使用可能なセクタ位置がなくなったときに、GAT書き換え動作は、制御書き込み動作中に生じる。新たなGATブロックが割り当てられ、GATインデックスによって規定された有効なGATセクタは、順次順序で一杯のGATブロックからコピーされる。その後、一杯のGATブロックは消去される。
【0120】
GATキャッシュは、GATセクタ内の128個のエントリの再分割部分内のエントリの、コントローラRAM130内のコピーである。GATキャッシュエントリの数は、システム設計パラメータであり、典型的な値は32である。該当セクタの再分割部分についてのGATキャッシュは、エントリがGATセクタから読み出される度に作成される。複数のGATキャッシュが保持される。その数は、設計パラメータであり、典型的な値は4である。GATキャッシュは、最近最も使用されていないことに基づいて、異なるセクタの再分割部分についてのエントリで上書きされる。
【0121】
消去済みメタブロックの管理
図2に示されている消去ブロックマネージャ160は、ディレクトリおよびシステム制御情報を保持するためのリストのセットを使用して、消去ブロックを管理する。これらのリストは、コントローラRAM130およびフラッシュメモリ200に分散されている。消去されたメタブロックがユーザデータの記憶のため、またはシステム制御データ構造の記憶のために割り当てられなければならない場合には、コントローラRAMに保持された割り当てブロックリスト(ABL)(図15参照)内の次に使用可能なメタブロック番号が選択される。同様に、メタブロックが廃棄後に消去される場合には、その番号が、同じくコントローラRAMに保持されたクリア済みブロックリスト(CBL)に追加される。比較的静的なディレクトリおよびシステム制御データが、フラッシュメモリ内に記憶される。これらには、消去済みブロックリストと、フラッシュメモリ内のすべてのメタブロックの消去された状態のビットマップ(MAP)リストとが含まれる。消去済みブロックリストおよびMAPは、個別のセクタに記憶され、MAPブロックとして知られる専用のメタブロックに記録される。これらのリストは、コントローラRAMおよびフラッシュメモリに分散されて、消去済みメタブロックの使用を効率的に管理するための消去済みブロック記録の階層を提供する。
【0122】
図18は、消去済みブロックの使用およびリサイクルのための制御およびディレクトリ情報の分配および流れを示す概略ブロック図である。制御およびディレクトリデータは、コントローラRAM130内か、フラッシュメモリ200内に常駐するMAPブロック750内のいずれかに保持されるリストに保持される。
【0123】
好ましい実施形態において、コントローラRAM130は、割り当てブロックリスト(ABL)610と、クリア済みブロックリスト(CBL)740とを保持する。図15に関連して前に説明したように、割り当てブロックリスト(ABL)は、ユーザデータの記憶のため、またはシステム制御データ構造の記憶のために最近割り当てられたのがどのメタブロックかを追跡する。新規の消去済みメタブロックを割り当てる必要がある場合には、割り当てブロックリスト(ABL)内の次に使用可能なメタブロック番号が選択される。同様に、クリア済みブロックリスト(CBL)を使用して、割り当て解除および消去された更新メタブロックを追跡する。ABLおよびCBLは、比較的アクティブな更新ブロックを追跡する際の迅速なアクセスおよび容易な操作のために、コントローラRAM130(図1参照)に保持される。
【0124】
割り当てブロックリスト(ABL)は、消去済みメタブロックのプールと、消去済みメタブロックを更新ブロックにする割り当てとを追跡する。よって、これらの各メタブロックは、ABL保留割り当ての消去済みブロックか、開放更新ブロックか、閉鎖更新ブロックかどうかを指定する属性によって記述されてもよい。図18は、消去済みABLリスト612と、開放更新ブロックリスト614と、閉鎖更新ブロックリスト616とを含むABLを示す。加えて、開放更新ブロックリスト614に関連付けられているのは、関連する元ブロックリスト615である。同様に、閉鎖更新ブロックリストに関連付けられているのは、関連消去済みの元ブロックリスト617である。図15において前に示したように、これらの関連リストは、それぞれ、開放更新ブロックリスト614および閉鎖更新ブロックリスト616のサブセットである。消去済みABLブロックリスト612、開放更新ブロックリスト614、および閉鎖更新ブロックリスト616は、すべて、割り当てブロックリスト(ABL)610のサブセットであり、それぞれの中のエントリは、それぞれ対応する属性を有する。
【0125】
MAPブロック750は、フラッシュメモリ200内の消去管理記録を記憶するのに専用のメタブロックである。MAPブロックは、時系列のMAPブロックセクタを記憶し、各MAPセクタは、消去ブロック管理(EBM)セクタ760またはMAPセクタ780のいずれかである。メタブロックが廃棄されて、消去済みブロックが割り当てで使い尽くされてリサイクルされるにつれて、関連する制御およびディレクトリデータは、MAPブロック内で更新される論理セクタに含まれるのが好ましく、更新データの各インスタンスは、新規のブロックセクタに記録される。EBMセクタ760およびMAPセクタ780の複数のコピーがMAPブロック750内に存在してもよく、その最新バージョンのみが有効である。有効MAPセクタの位置へのインデックスは、EMBブロック内のフィールド内に含まれる。有効なEMBセクタが、制御書き込み動作中のMAPブロック内にいつも最後に書き込まれる。MAPブロック750が一杯の場合には、すべての有効セクタを新規のブロック位置に書き換えることによって、制御書き込み動作中にコンパクト化される。その後、一杯のブロックは消去される。
【0126】
各EBMセクタ760は、消去済みブロックリスト(EBL)770を含み、これは、消去済みブロックの母集団のサブセットのアドレスのリストである。消去済みブロックリスト(EBL)770は、消去済みメタブロック番号を含むバッファとしての役割を果たし、EBLから、メタブロック番号が周期的に取り出されてABLを再充填し、EBLに対して、メタブロック番号が周期的に追加されてCBLを再び空にする。EBL770は、使用可能ブロックバッファ(ABB)772、消去済みブロックバッファ(EBB)774、および消去済みブロックバッファ(CBB)776のためのバッファとしての役割を果たす。
【0127】
使用可能ブロックバッファ(ABB)772は、前回のABL充填動作のすぐ後に続くABL610内のエントリのコピーを含む。これは、実質上、ABL充填動作直後のABLのバックアップコピーである。
消去済みブロックバッファ(EBB)774は、MAPセクタ780から、または(後述する)CBBリスト776からのいずれかから先に転送され、かつABL充填動作中にABL610へ転送に使用可能である消去済みブロックアドレスを含む。
クリアされたブロックバッファ(CBB)776は、CBLを空にする動作中にCBL740から転送され、かつMAPセクタ780またはEBBリスト774へ後に転送される消去済みブロックのアドレスを含む。
【0128】
各MAPセクタ780は、MAPと称されるビットマップ構造を含む。MAPは、フラッシュメモリ内のメタブロック毎に1ビットを使用し、これは、各ブロックの消去状態を示すために使用される。ABL、CBL、またはEBM内の消去済みブロックリスト内に列挙されたブロックアドレスに対応するビットは、MAP内において消去済み状態に設定されない。
【0129】
有効データ構造を含まず、かつMAP内の消去済みブロック、消去済みブロックリスト、ABL、またはCBLとして指定されていないブロックはどれでも、ブロック割り当てアルゴリズムによって決して使用されず、従ってホストまたは制御データ構造の記憶のためにアクセスすることはできない。これにより、アクセス可能なフラッシュメモリアドレス空間から障害位置のあるブロックを除外するための簡単な機構が提供される。
【0130】
図18に示されている階層により、消去済みブロック記録を効率的に管理することができるようになり、コントローラのRAM内に記憶されたブロックアドレスリストの完全なセキュリティを提供する。消去済みブロックエントリが、これらのブロックアドレスリストと、1つ以上のMAPセクタ780との間で、稀に交換される。これらのリストは、電源が切られた後のシステム初期化中に、消去済みブロックリスト、およびフラッシュメモリ内のセクタに記憶されたアドレス変換テーブル内の情報と、フラッシュメモリ内のわずかな数の参照済みデータブロックの限定的な走査とを介して再構築される。
【0131】
消去済みメタブロック記録の階層を更新するために採用されたアルゴリズムにより、消去済みブロックが、MAPブロック750からのアドレス順序のブロックのバーストと、ブロックがホストによって更新された順序を反映するCBL740からのブロックアドレスのバーストとをインターリーブする順序で使用するために割り当てられる結果となる。メタブロックサイズおよびシステムメモリ容量のほとんどについて、1つのMAPセクタは、システム内のすべてのメタブロックについてのビットマップを提供する。この場合、消去済みブロックは、このMAPセクタに記録されるとおりのアドレス順序での使用のために常に割り当てられる。
【0132】
消去ブロック管理動作
前に説明したように、ABL610は、使用のために割り当てられるであろう消去済みメタブロック、およびデータ更新ブロックとして最近割り当てられたメタブロックについてのアドレスエントリを有するリストである。ABL内のブロックアドレスの実際の数は、上限と下限という、システム設計の変数の間にある。製造中にフォーマットされたABLエントリの数は、カードの種類と容量との関数である。加えて、システムの寿命の終わりが近づくとABL内のエントリの数が減少するのは、使用可能な消去済みブロックの数が寿命内でのブロックの障害によって減少するためである。例えば、充填動作の後、ABL内のエントリは、以下の目的のために使用可能なブロックを指定してもよい。ブロック毎に1つのエントリを有する部分的に書き込まれたデータ更新ブロックについてのエントリであり、同時に開放されている更新ブロックの最大数についてのシステム制限を越えないもの。データ更新ブロックとして割り当てるための消去済みブロックについての1個から12個の間のエントリ。制御ブロックとして割り当てるための消去済みブロックについての4つのエントリ。
【0133】
ABL充填動作
ABL610が割り当てによって使い尽くされると、再充填される必要があることになる。ABLを充填する動作は、制御書き込み動作中に生じる。これは、ブロックを割り当てなければならない場合にトリガされるが、ABLには、データ更新ブロックとして割り当てるため、またはいくつかの他の制御データ更新ブロックのために使用可能な消去済みブロックエントリが十分には含まれていない。制御書き込み中に、ABL充填動作は、GAT更新動作と並行して行われる。
【0134】
以下の動作が、ABL充填動作中に生じる。
1.現在のデータ更新ブロックの属性を有するABLエントリは保持される。
2.閉鎖データ更新ブロックの属性を有するABLエントリは、このブロックについてのエントリが並行GAT更新動作において書き込み中でなければ保持され、書き込み中であれば、このエントリはABLから除去される。
3.割り当てられていない消去ブロックについてのABLエントリは保持される。
4.ABLは、エントリの除去によって生じたギャップを除去するためにコンパクト化され、エントリの順序が維持される。
5.ABLは、EBBリストから次に使用可能なエントリをつけることによって完全に充填される。
6.ABBリストは、ABL内の現在のエントリで上書きされる。
【0135】
CBLを空にする動作
CBLは、消去済みブロックエントリの数に対するABLと同じ制限を有する、コントローラRAM内の消去済みブロックアドレスのリストである。CBLを空にする動作は、制御書き込み動作中に生じる。したがって、この動作は、ABL充填/GAT更新動作、またはCBIブロック書き込み動作と並行して行われる。CBLを空にする動作において、エントリはCBL740から除去されて、CBBリスト776に書き込まれる。
【0136】
MAP交換動作
MAPセクタ780およびEBMセクタ760内の消去ブロック情報間のMAP交換動作は、EBBリスト774が空の場合に、制御書き込み動作中に周期的に生じてもよい。システム内のすべての消去済みメタブロックは、EBMセクタ760内に記録され、MAPセクタ780はなく、MAP交換は行われない。MAP交換動作中に、EBB774に消去済みブロックを入力するMAPセクタは、送信元MAPセクタ782とみなされる。逆に、CBB776から消去済みブロックを受信するMAPセクタは、送信先MAPセクタ784とみなされる。MAPセクタが1つだけ存在する場合は、以下に規定するように、送信元および送信先MAPセクタの両方としての役割を果たす。
【0137】
以下の動作が、MAP交換中に行われる。
1.送信元MAPセクタが、増分ポインタに基づいて選択される。
2.送信先MAPセクタが、送信元MAPセクタ内ではない最初のCBBエントリ内のブロックアドレスに基づいて選択される。
3.送信先MAPセクタが、CBB内の該当エントリによって規定されたように更新され、当該エントリは、CBBから除去される。
4.別個の送信元MAPセクタが存在しなければ、更新された送信先MAPセクタが、MAPブロックに書き込まれる。
5.送信元MAPセクタが、CBB内の該当エントリによって規定されたように更新され、当該エントリは、CBBから除去される。
6.CBB内の残りのエントリが、EBBに付加される。
7.EBBには、送信元MAPセクタから規定された消去済みブロックアドレスができる限り充填される。
8.更新済みの送信元MAPセクタが、MAPブロック内に書き込まれる。
9.更新済みのEBMセクタが、MAPブロック内に書き込まれる。
【0138】
リスト管理
図18は、様々なリスト間の制御およびディレクトリ情報の分配および流れを示す。便宜のために、リストの要素間でエントリを移動する動作、またはエントリの属性を変更する動作は、[A]から[O]として図18に示され、以下のようなものである。
[A]消去済みブロックがホストデータについての更新ブロックとして割り当てられる場合には、そのエントリのABL内にある属性は、消去済みABLブロックから開放更新ブロックに変更される。
[B]消去されたブロックが制御ブロックとして割り当てられる場合には、ABL内のそのエントリが除去される。
[C]ABLエントリが開放更新ブロック属性と共に作成される場合には、更新中の論理グループについての元メタブロックアドレスを記録するために、関連する元ブロックフィールドがエントリに付加される。この情報は、GATから取得される。
[D]更新ブロックが閉鎖されると、そのエントリのABL内にある属性は、開放更新ブロックから閉鎖更新ブロックへ変更される。
[E]更新ブロックが閉鎖されると、その関連する元ブロックは消去されて、ABL内にあるそのエントリ内の関連する元ブロックフィールドの属性は、消去済み元ブロックに変更される。
[F]ABL充填動作中、同一の制御書き込み動作中にGAT内でアドレスが更新された閉鎖更新ブロックはどれでも、そのエントリがABLから除去される。
[G]ABL充填動作中、閉鎖更新ブロックについてのエントリがABLから除去されると、その関連する消去済みの元ブロックについてのエントリが、CBLへ移動される。 [H]制御ブロックが消去されると、それについてのエントリが、CBLへ追加される。
[I]ABL充填動作中、消去済みブロックエントリが、EBBリストからABLへ移動され、消去済みABLブロックの属性が与えられる。
[J]ABL充填動作中のすべての該当ABLエントリの修正後、ABL内のブロックアドレスが、ABBリスト内のブロックアドレスに取って代わる。
[K]制御書き込み中にABL充填動作と並行して、CBL内の消去済みブロックについてのエントリが、CBBリストへ移動される。
[L]MAP交換動作中、すべての該当エントリが、CBBリストからMAP送信先セクタへ移動される。
[M]MAP交換動作中、すべての該当エントリが、CBBリストからMAP送信元セクタへ移動される。
[N]MAP交換動作中の[L]および[M]に続いて、すべての残りのエントリが、CBBリストからEBBリストへ移動される。
[O]MAP交換動作中の[N]に続いて、可能であれば、[M]において移動されたもの以外のエントリが、MAP送信元セクタから移動されて、EBBリストを充填する。
【0139】
論理/物理アドレス変換
フラッシュメモリ内の論理セクタの物理位置を位置決定するために、図2に示されている論理/物理アドレス変換モジュール140は、論理/物理アドレス変換を行う。最近更新された論理グループを除いて、大量の変換を、フラッシュメモリ200またはコントローラRAM130内のGATキャッシュ内にあるグループアドレステーブル(GAT)を使用して行うことになる可能性がある。最近更新された論理グループについてのアドレス変換は、主にコントローラRAM130内にある更新ブロックについてのアドレスリストを検索することを必要とすることになる。したがって、論理セクタアドレスについての論理/物理アドレス変換のための処理は、セクタが位置する論理グループに関連したブロックの種類に依存する。ブロックの種類には、変化のないブロックと、順次データ更新ブロックと、カオス的データ更新ブロックと、閉鎖データ更新ブロックとがある。
【0140】
図19は、論理/物理アドレス変換の処理を示すフローチャートである。基本的には、対応するメタブロックおよび物理セクタは、論理セクタアドレスを使用して、最初に、開放更新ブロックリストおよび閉鎖更新ブロックリストなどの様々な更新ディレクトリを検索することによって、位置決定される。関連するメタブロックが更新処理の一部でない場合、ディレクトリ情報がGATによって提供される。論理/物理アドレス変換は、以下のステップを含む。
ステップ800:論理セクタアドレスが与えられる。
ステップ810:コントローラRAM内の開放更新ブロックリスト614(図15および18参照)内の所定の論理アドレスが検索される。検索が失敗すると、ステップ820へ進み、そうでなければ、ステップ830へ進む。
ステップ820:閉鎖更新ブロックリスト616内の所定の論理アドレスを検索する。検索が失敗すると、所定の論理アドレスはどの更新処理の一部でもないことになり、GATアドレス変換のためのステップ870へ進む。そうでなければ、閉鎖更新ブロックアドレス変換のためのステップ860へ進む。
ステップ830:所定の論理アドレスを含む更新ブロックが順次であれば、順次更新ブロックアドレス変換のためのステップ840へ進む。そうでなければ、カオス的更新ブロックアドレス変換のためのステップ850へ進む。
ステップ840:順次更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ850:カオス的更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ860:閉鎖更新ブロックアドレス変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ870:グループアドレステーブル(GAT)変換を使用して、メタブロックアドレスを取得する。ステップ880へ進む。
ステップ880:メタブロックアドレスを物理アドレスに変換する。変換方法は、メタブロックが再リンクされているかどうかに依存する。
ステップ890:物理セクタアドレスが取得される。
【0141】
様々なアドレス変換処理について、以下により詳細に説明する。
順次更新ブロックアドレス変換(ステップ840)
順次更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、開放更新ブロックリスト614内の情報から直接達成される(図15および18)。
1.リスト内の「ページタグ」フィールドおよび「書き込みセクタの数」フィールドから、対象論理セクタが更新ブロックにあるか、またはその関連する元ブロックにあるかどうかを判断する。
2.対象論理セクタに適切なメタブロックアドレスが、リストから読み出される。
3.メタブロック内のセクタアドレスが、適切な「ページタグ」フィールドから決定される。
【0142】
カオス的更新ブロックアドレス変換(ステップ850)
カオス的更新ブロックに関連した論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
1.RAM内のカオス的セクタリストから、セクタが最近書き込まれたセクタであると判断される場合には、アドレス変換は、このリスト内のその位置から直接達成されてもよい。
2.CBIブロック内の直近に書き込まれたセクタは、そのカオス的ブロックデータフィールド内に、対象論理セクタアドレスに該当するカオス的更新ブロックの物理アドレスを含む。また、その間接セクタインデックスフィールド内に、このカオス的更新ブロックに関連する最終書き込みCBIセクタのCBIブロック内のオフセットを含む(図16A〜16E参照)。
3.これらのフィールド内の情報は、RAM内にキャッシュされ、後続のアドレス変換中にセクタを読み出す必要をなくしている。
4.間接セクタインデックスフィールドによってステップ3において識別されたCBIセクタが読み出される。
5.直近にアクセスされたカオス的更新サブグループについての直接セクタインデックスフィールドは、RAM内にキャッシュされ、同一のカオス的更新ブロックに対する繰り返しのアクセスのためのステップ4における読み出しを行う必要をなくしている。
6.ステップ4または5において読み出された直接セクタインデックスフィールドは、対象論理セクタアドレスを含む論理サブグループに関連するCBIセクタを識別する。
7.対象論理セクタアドレスについてのカオス的ブロックインデックスエントリは、ステップ6において識別されたCBIセクタから読み出される。
8.直近に読み出されたカオス的ブロックインデックスフィールドは、コントローラRAM内にキャッシュされてもよく、同一の論理サブグループに対する繰り返しのアクセスのためのステップ4およびステップ7における読み出しを行う必要をなくしている。
9.カオス的ブロックインデックスエントリは、カオス的更新ブロックまたは関連する元ブロックのいずれかの内に対象論理セクタの位置を規定する。対象論理セクタの有効コピーが元ブロック内にあれば、元メタブロックおよびページタグ情報を使用して位置決定される。
【0143】
閉鎖更新ブロックアドレス変換(ステップ860)
閉鎖更新ブロックに関連した論理ブロックループ内の対象論理セクタアドレスについてのアドレス変換は、以下のように、閉鎖ブロック更新リスト内の情報から直接達成することができる(図18参照)。
1.対象論理グループに割り当てられたメタブロックアドレスは、リストから読み出される。
2.メタブロック内のセクタアドレスは、リスト内の「ページタグ」フィールドから決定される。
【0144】
GATアドレス変換(ステップ870)
論理グループが開放または閉鎖ブロック更新リストのいずれかによって参照されない場合には、GAT内のそのエントリは有効である。GATによって参照される論理グループ内の対象論理セクタアドレスについてのアドレス変換シーケンスは、以下の通りである。
1.RAM内の使用可能なGATキャッシュの範囲を評価して、対象論理グループについてのエントリがGATキャッシュ内に含まれるかどうかを判断する。
2.対象論理グループがステップ1において見つかった場合、GATキャッシュは、メタブロックアドレスおよびページタグを含む全グループアドレス情報を含み、対象論理セクタアドレスの変換が可能となる。
3.対象アドレスがGATキャッシュ内にない場合、GATインデックスを対象GATブロックについて読みだして、対象論理グループアドレスに関するGATセクタの位置を識別しなければならない。
4.最後にアクセスされたGATブロックについてのGATインデックスは、コントローラRAM内に保持され、フラッシュメモリからセクタを読み出す必要なくアクセスされてもよい。
5.各GATブロックについてのメタブロックアドレスのリストと、各GATブロック内に書き込まれたセクタの数とが、コントローラRAM内に保持される。必要なGATインデックスがステップ4において使用可能でない場合、フラッシュメモリからすぐに読み出されてもよい。
6.対象論理グループアドレスに関するGATセクタは、ステップ4またはステップ6において取得されたGATインデックスによって規定されたGATブロック内のセクタ位置から読み出される。GATキャッシュが、対象エントリを含むセクタの再分割部分によって更新される。
7.対象セクタアドレスは、対象GATエントリ内のメタブロックアドレスおよび「ページタグ」フィールドから取得される。
【0145】
メタブロック/物理アドレス変換(ステップ880)
メタブロックが再リンクされていることをメタブロックアドレスに関連したフラグが示されている場合、該当LTセクタがBLMブロックから読み出されて、対象セクタアドレスについての消去ブロックアドレスであると決定する。そうでなければ、消去ブロックアドレスは、メタブロックアドレスから直接決定される。
【0146】
制御データ管理
図20は、メモリ管理の動作中に、制御データ構造に対して行われる動作の階層を示す。データ更新管理動作は、RAM内にある様々なリストに対して作用する。制御書き込み動作は、様々な制御データセクタおよびフラッシュメモリ内の専用ブロックに対して作用し、またRAM内のリストとデータを交換する。
【0147】
データ更新管理動作が、RAM内で、ABL、CBL、およびカオス的セクタリストに対して行われる。ABLは、消去済みブロックが更新ブロックまたは制御ブロックとして割り当てられる場合、または更新ブロックが閉鎖される場合に更新される。CBLは、制御ブロックが消去される場合、または閉鎖更新ブロックについてのエントリがGATに書き込まれる場合に更新される。更新カオス的セクタリストは、セクタがカオス的更新ブロックに書き込まれる場合に更新される。
【0148】
制御書き込み動作によって、RAM内の制御データ構造からの情報がフラッシュメモリ内の制御データ構造に書き込まれ、必要があれば、フラッシュメモリおよびRAM内の他の補助制御データ構造を更新する結果となる。これは、更新ブロックとして割り当てるべき消去済みブロックについてのエントリをABLがこれ以上含まない場合、またはCBIブロックが書き換えられる場合にトリガされる。
【0149】
好ましい実施形態において、ABL充填動作、CBLを空にする動作、およびEBMセクタ更新動作は、各制御書き込み動作中に行われる。EBMセクタを含むMAPブロックが一杯になると、有効EBMおよびMAPセクタが、割り当てられた消去済みブロックにコピーされ、以前のMAPブロックは消去される。
【0150】
各制御書き込み動作中に、1つのGATセクタが書き込まれ、かつ閉鎖更新ブロックリストがそれに従って修正される。GATブロックが一杯になると、GAT書き換え動作が行われる。
CBIセクタが、前に説明したように、あるカオス的セクタ書き込み動作後に書き込まれる。CBIブロックが一杯になると、有効なCBIセクタが、割り当てられた消去済みブロックにコピーされ、以前のCBIブロックは消去される。
MAP交換動作が、前に説明したように、EBMセクタ内のEBBリスト内に消去済みブロックエントリがこれ以上ない場合に行われる。
【0151】
MAPアドレス(MAPA)セクタは、MAPブロックの現在アドレスを記録し、MAPブロックが書き換えられる度に専用のMAPAブロックに書き込まれる。MAPAブロックが一杯になると、有効なMAPAセクタは、割り当てられた消去ブロックにコピーされ、以前のMAPAブロックは消去される。
ブートセクタが、MAPAブロックが書き換えられる度に現在のブートブロック内に書き込まれる。ブートブロックが一杯になると、有効なブートセクタは、ブートブロックの現在のバージョンからバックアップバージョンへコピーされ、その後、現在のバージョンとなる。以前の現在のバージョンは消去されて、バックアップバージョンとなり、そこに有効なブートセクタは書き戻される。
【0152】
制御データの整合性および管理
制御データの例として、図20に関して説明したような、メモリブロック管理システムに関するディレクトリ情報およびブロック割り当て情報がある。前述したように、制御データは、高速RAMおよびより低速な不揮発性メモリブロックの両方において保持される。頻繁に変化する制御データはいずれも、不揮発性メタブロックに記憶された対応する情報を更新するために、周期的な制御書き込みを伴うRAMに保持される。このように、制御データは、頻繁なアクセスを必要としない、不揮発だが低速のフラッシュメモリに記憶される。図20に示されているGAT、CBI、MAP、MAPAのような制御データ構造の階層をフラッシュメモリ内に保持する。よって、制御書き込み動作により、RAM内の制御データ構造からの情報が、フラッシュメモリ内の対応する制御データ構造を更新する。
【0153】
図20に関して説明したように、ブロック管理システムは、その動作中にフラッシュメモリ内の制御データのセットを保持する。制御データのこのセットは、ホストデータと同様に、メタブロックに記憶される。このように、制御データ自体はブロック管理されることになり、更新を受けるので、ガーベッジコレクション動作も受けることになる。
【0154】
また、低階層のデータが高階層のデータよりも頻繁に更新される、制御データの階層が存在することについて説明した。例えば、すべての制御ブロックは、書き込むためのN個の制御セクタを有すると想定すると、制御更新および制御ブロック移転の以下のシーケンスが普通は偶然にも生じる。図20を再び参照すると、各N個のCBI更新によって、CBIブロックが充填されて、CBI移転(書き換え)およびMAP更新がトリガされる。カオス的ブロックが閉鎖されると、GAT更新もトリガされる。各GAT更新は、MAP更新をトリガする。各N個のGAT更新によって、ブロックが充填されて、GATブロック移転がトリガされる。加えて、MAPブロックが一杯になると、MAPブロック移転およびMAPAブロック(MAPAブロックがあればであるが、そうでなければ、BOOTブロックはMAPを直接ポイントする)更新もトリガされる。加えて、MAPAブロックが一杯になると、MAPAブロック移転、BOOTブロック更新、およびMAP更新もトリガされる。加えて、BOOTブロックが一杯になると、他のBOOTブロックに対するアクティブなBOOTブロック移転がトリガされる。
【0155】
更新ブロック置換手法
本発明の他の態様によれば、ブロック管理システムを伴う不揮発性メモリにおいて、データを記録するために同時に開放されている更新ブロックの第1の所定最大数までサポートするシステムのために、改良されたブロック置換手法が実施される。更新ブロックは、主に連続更新ブロックであって、当該連続更新ブロックにおいて、データが論理的に連続した順序で記録されているが、そのブロック数は、データが論理的に連続した順序で記録されないカオス的更新ブロックであることが許容された第2の所定最大数までである。更新ブロックの新規の割り当てによって更新ブロックのプールが第1または第2の所定最大数を超えるような場合にはいつでも、当該制限に従うようにプール内の既存のブロックのうちの1つが閉鎖および削除されることになる。更新ブロックを閉鎖する前に、そのデータは連続ブロックに統合される。この改良された手法は、連続的な更新が過度のカオス的ブロック統合数を生じさせ得る状況を回避するためのものである。これは、連続更新ブロックとカオス的更新ブロックとをそれぞれの置換または統合プールに分離することによって達成される。特に、連続更新によって新規の更新ブロックの割り当てが第1の所定最大数を超える場合には、プール内の最も長時間使用されていない連続更新ブロックが、空きを作るために優先される。
【0156】
現行システムにおいて、一般的に、ユーザデータと制御データという2つの種類のデータがある。ユーザデータは、ホストからメモリシステムへ、典型的には論理的に連続した順序で送られる。連続更新ブロックは、ホストからの連続書き込み動作を最適に扱うように割り当てられる。ユーザデータは、とりわけ論理データに対する後続の更新がある場合には、論理的に不連続な順序である場合がある。カオス的更新ブロックは、不連続な順序でデータを最適に扱うために作成される。カオス的または不連続データの他のソースとしては、ユーザデータを記憶する過程で生成されるファイルおよびディレクトリ情報などといった、ファイルシステムまたはメモリシステムによって保持される制御データがある。
【0157】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限に従う従来の手法は、連続的かカオス的かどうかに関わらず、プール内の最も長時間使用されていない更新ブロックを閉鎖するものであった。
【0158】
本願の手法は、従来の手法を改良するものであって、基本的には、連続的な書き込み動作中に、新規の割り当て用に空きを作るためにプール内の更新ブロックを閉鎖する必要がある場合には、プール内の最も長時間使用されていない連続更新ブロックが閉鎖される。これにより、連続的な書き込み動作およびランダムな書き込み動作を扱うために様々な更新ブロックを効果的に活用することが確実になる。特に、ホストによる大規模な連続書き込み動作によってFATおよびディレクトリ情報を含むカオス的更新ブロックを閉鎖せざるを得なくなる場合があるといった非効率な状況を回避する。この大規模な書き込み動作が終わると再び更新されるようなFATおよびディレクトリ情報を記憶するために、さらなるカオス的ブロックが実質上まもなく作成されることになる。改良された置換ポリシーを作成することによって、置換および統合プールの分離が規定され、開放された連続ブロックまたは開放されたカオス的ブロックとなり得るブロックの連続的な書き込みおよび統合中に、カオス的ブロックを統合する際のさらなるオーバーヘッドを防止して、後続のFATおよびディレクトリ更新を管理する。
【0159】
同時に開放されている更新ブロックの最大数までサポートするという実際上のシステム制限については前に述べた。例えば、図10に関連して説明した一実施形態において、ステップ410は、更新データを受け付けるために同時に開放され得る更新ブロックの最大数UMAX を超えることになるかどうかをテストする。UMAX を超えることになる場合には、更新ブロックのうちで最もアクティブでないものが、連続更新ブロックであるのかカオス的更新ブロックであるのかに関わらず、ステップ420において閉鎖されることになり、所定の制限内にシステムを維持する。
【0160】
図21は、ブロック管理システム用の更新ブロック数に対する2つの所定の規制を概略的に示す。更新ブロック総数に対する包括的な規制(UMAX )があり、これは、カオス的更新ブロックNC の数と連続更新ブロックNS の数との合計によって与えられる。カオス的更新ブロックは、より多くのリソースを要し、カオス的ブロックインデックス(CBI)をさらに保持することを必要とするので、カオス的更新ブロックの最大数(「UCMAX」)に対する規制もある。よって、第1の規制は、更新ブロック総数NC +NS ≦UMAX であることを要する。第2の規制は、カオス的更新ブロック数NC ≦UCMAXであることを要する。
【0161】
図22は、様々なメモリ装置用に最適化された2つの規制の組み合わせの典型例を示す。ある組み合わせは、UMAX 「ダッシュ」UCMAXによって指定される。例えば、「3−1」は、更新プール内の最大3つの更新ブロックを許容し、そのうち1つまでのみがカオス的更新ブロックであるブロック管理システムを指定する。同様に、「7−3」は、最大7つの更新ブロックまでをサポートし、そのうち3つまでがカオス的更新ブロックであり得るブロック管理システムを指定する。一般的に、小さいメモリ容量を有する単純なメモリシステムほど、制限が厳しくなり、最大数が小さくなることになる。
【0162】
図23A、図23Bおよび図23Cは、従来の置換手法における第1の状況に係る、新規の更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図23Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1201のS3のような連続更新ブロックであるという第1の状況を示す。
【0163】
新規の更新ブロックを割り当てる必要がある場合には、空きを作るために、更新プール内の既存の更新ブロックのうちの1つが閉鎖される必要があることになる。例えば、プール内の既存の更新ブロックによってサービス提供されていないセクタの論理グループについて連続データをホストが書き込む場合には、当該データを記録するために、新規の更新ブロックを割り当てる必要がある。
【0164】
図23Bは、従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。最もアクティブでないブロックは、この場合では偶然にも1201のS3であり、閉鎖されて更新ブロックのプールから削除されることになる。
【0165】
図23Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序で記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0166】
図24A、図24B、および図24Cは、従来の置換手法における第2の状況に係る、新規の更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図24Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1301のC4のようなカオス的更新ブロックであるという第2の状況を示す。
【0167】
図24Bは、従来の手法に係る、新規の更新ブロック用に空きを作るために最もアクティブでない更新ブロックを閉鎖することを概略的に示す。最もアクティブでないブロックは、この場合では偶然にも1301のC4であり、閉鎖されて更新ブロックのプールから削除されることになる。
【0168】
図24Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序で記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0169】
図25Aおよび図25Bは、図10、図23Bおよび図24Bにおいて先に説明した手法におけるUMAX およびUCMAX制限の保持をそれぞれ示す。2つの制限は、典型的には同時に課せられる。
【0170】
図25Aは、図10のステップ410ならびに図23Bおよび図24Bに先に示す手法であって、新規の割り当てが所定の制限を超えるような場合にはいつでも、最も長時間アクセスされていない更新ブロックが閉鎖される手法を示す。
ステップ1252:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1254:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1256:新規の更新ブロックの割り当てが当該所定数を超えるようになる場合にはいつでも、直近にアクセスされた更新ブロックのうちの1つを閉鎖して、新規更新ブロック用に空きを作る。
【0171】
図25Bは、図10のステップ370に先に示す手法であって、カオス的更新ブロック数が所定の制限を超える場合にはいつでも、最も長時間アクセスされていないカオス的(不連続)更新ブロックが閉鎖される手法を示す。
ステップ1354:データの論理ユニットを論理的に不連続な順序で記憶するための開放更新ブロックのうち、更新ブロックの第2の所定数まで割り当てる。
ステップ1356:不連続更新ブロックの数が第2の所定数を超えるようになる場合にはいつでも、最も長時間アクセスされていない不連続更新ブロックのうちの1つを閉鎖して、第2の所定数を超えないようにする。
【0172】
この従来の手法の欠点の1つは、状況によって、カオス的更新ブロックを過度に閉鎖してしまうことにつながり得ることである。連続書き込みによって、新規に割り当てられた連続ブロック用にプール内に空きを作るために制御データを含むカオス的ブロックが早期に閉鎖されてしまう場合、特に非効率である。例えば、閉鎖されたカオス的更新ブロックである1310のC4がFATおよびディレクトリ情報を記録していた場合には、連続書き込みがなされたらすぐに当該機能をサービス提供するために、置換が直ちに必要になる。これは、制御データを記録するための置換更新ブロック用に空きを作るために、現在プール内にある最もアクティブでない更新ブロックをもう一度閉鎖することになる。
【0173】
本発明のこの態様によれば、更新ブロックの所定の最大数を超えないように更新ブロックを閉鎖するこの手法は、最も長時間使用されていない更新ブロックを単に選択することから、カオス的更新ブロックが過度に閉鎖される事例を減少させる手法へとさらに洗練されている。好ましい一実施形態において、連続データを記録するために更新ブロックが割り当てられ、空きを作るために更新ブロックのプール内の1つが閉鎖される場合には、プール内の最もアクティブでない連続更新ブロックが閉鎖される。
【0174】
図26A、図26Bおよび図26Cは、改良された本願の置換手法に係る、新規更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図26Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1301のC4のようなカオス的更新ブロックであるという、図24Aにおけるのと同様の状況を示す。さらに、この例は、連続ブロック1202のS3が連続プール1200のうち最もアクティブでないことを示す。
【0175】
図26Bは、本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。連続更新に関連した新規の割り当てであって、プール内の更新ブロック数が既に最大である場合、新規に割り当てられた更新ブロック用に空きを作るために、プール内の更新ブロックのうちの1つを閉鎖しなければならなくなる。しかし、この場合、最もアクティブでないブロックは、1301のC4であり、これはカオス的ブロックであるので、パスされることになる。代わりに、連続プール1200内で最もアクティブな更新ブロックが閉鎖されることになる。この例において、閉鎖されて更新ブロックプールから削除されることになるのは1202のS3である。
【0176】
図26Cは、空きを作るために閉鎖された更新ブロックが削除された後、新たに割り当てられた更新ブロックをプールに導入することを概略的に示す。この場合、データを論理的に連続した順序でデータを記録するために、新規に割り当てられた更新ブロックである1212のS6が、連続プール1200に導入されることになる。このように、許容される更新ブロックの最大数であるUMAX を超えることはない。
【0177】
図27A、図27B、および図27Cは、本願の改良された置換手法に係る、新規のカオス的更新ブロックを更新ブロックのプールに導入するためのイベントのシーケンスを概略的に示す。
図27Aは、図22において説明したような「5−2」構成の更新プールを概略的に示す。この例において、更新プールは、最大5つの許容更新ブロックで完全に埋められている。更新プールは、3つの連続更新ブロックS1、S2およびS3を含む連続プール1200と、最大2つのカオス的または不連続更新ブロックC4およびC5を含むカオス的プール1300とにさらに分割される。この例は、最もアクティブでないブロックが偶然にも1201のS6のような連続更新ブロックであることを示す。さらに、この例は、カオス的ブロックである1302のC4を、カオス的プール1300のうちで最もアクティブでないものとすることを示す。
【0178】
図27Bは、本願の改良された手法に係る、新規の更新ブロック用に空きを作るためにプール内の更新ブロックのうちの1つを閉鎖することを概略的に示す。新規のカオス的更新ブロックが既に一杯のカオス的プール1300に導入される場合、空きを作るためにカオス的プール内の更新ブロックのうちの1つが閉鎖されなければならなくなる。この例において、カオス的プール1300は、最大2つのカオス的更新ブロックを既に含んでいる。さらなるカオス的更新ブロックが作成されると、例えば既存の連続更新ブロックである1220のS1をカオス的ブロックに変換する場合には、カオス的ブロックのうちの1つを削除しなければ、カオス的ブロックの最大数を超える。この場合、空きを作るために、最もアクティブでないカオス的ブロックである1302のC4が閉鎖されて、カオス的プール1300から削除される。
【0179】
図27Cは、空きを作るために他のカオス的更新ブロックが閉鎖および削除された後、新規のカオス的更新ブロックをプールに導入することを概略的に示す。この場合、S1が、連続プール1200内の連続更新ブロック1220から、カオス的プール1300内のカオス的ブロックである1320のC6に変換されている。このように、許容されるカオス的更新ブロックの最大数であるUCMAXを超えることはない。
【0180】
図28は、第1の実施形態に係る、連続更新中に更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1400:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1402:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1406:連続データを書き込むための書き込みコマンドに応じて、データの論理ユニットを連続順序で更新ブロックに書き込む。
ステップ1408:データの連続論理ユニットをさらに書き込むために閉鎖される更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて書き込みを継続し、新規の割り当てが第1の所定数を超えるようであれば、最も長時間アクセスされていない連続順序の更新ブロックを、最も長時間アクセスされていない不連続な順序の更新ブロックのいずれよりも優先的に閉鎖する。
【0181】
図29は、第2の実施形態に係る、2つの所定の制限を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1410:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1412:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定数まで割り当てる。
ステップ1416:データの論理ユニットを論理的に不連続な順序で記憶するための開放更新ブロックのうち、更新ブロックの第2の所定数まで割り当てる。
ステップ1418:論理的に連続した順序でデータを記憶するための更新ブロックの導入が第1の所定数を超えるようになる場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、導入された更新ブロック用に空きを作る。
ステップ1420:論理的に不連続な順序でデータを記憶するための更新ブロックの導入が第2の所定数を超えるようになる場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、導入された更新ブロック用に空きを作る。
【0182】
本願の手法を一般的にいうと、更新ブロックが連続または不連続データのいずれを記憶しているか、または、ある予め定められた種類のシステムデータを記憶しているかどうかなどといった属性のセットに基づいて、更新ブロックを分類するものである。限られた数の更新ブロックのプールを実装するにあたって、更新ブロックの各クラスは、当該クラス用にサポートされた最大数を超えるような場合の置換に関する独自の規則を有することになる。
【0183】
例えば、連続更新ブロックおよび不連続更新ブロックは、2つの異なるクラスである。これら各クラス用の置換規則は同一であり、すなわち、最もアクティブでないものを新規のものに置換する。よって、連続更新ブロックのプールを超えるような場合には、新規のものがプールに導入される前に、プール内の最もアクティブでないものが閉鎖および削除されることになる。不連続更新ブロックのプールについても同様である。
【0184】
一般的に、各クラスは、他のクラスから独立した独自の置換規則を有する。置換規則の例として、対応するクラスによっては、最も長時間アクセスされていないもの、直近にアクセスされたもの、最も頻繁にアクセスされていないもの、最も頻繁にアクセスされているものなどを置換する。
【0185】
図30は、クラスベースの置換規則を有する更新ブロックの限られたセットを管理する本願の改良された手法を示すフローチャートである。
ステップ1430:不揮発性メモリをブロックに組織化し、各ブロックは共に消去可能なデータを記憶するためのものである。
ステップ1432:データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールを提供する。
ステップ1436:更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットを提供し、各クラスは関連する所定最大数の更新ブロックまでのサブプールをサポートする。
ステップ1438:それぞれのサブプール内の置換されるべき更新ブロックを特定するために、予め定められたクラスのセットに対応する置換規則のセットを提供する。
ステップ1440:プール内の更新ブロックを対応するサブプールにグループ化する。
ステップ1442:同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、関連する所定最大数の更新ブロックを含むサブプール内にある最もアクティブでない更新ブロックを閉鎖および削除する。
【0186】
本願明細書において参照されたすべての特許、特許出願、論文、書籍、明細書、他の出版物、書類、および事物は、あらゆる目的のためにその全体が本願明細書において参照により援用されている。任意の援用されている出版物、書類、および事物と、本願明細書の文章との間に用語の定義または用法における矛盾または不一致がある場合には、本願明細書における用語の定義または用法に従う。
【0187】
本発明の様々な態様をある実施形態に関して説明してきたが、本発明は、添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
【特許請求の範囲】
【請求項1】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
論理的に連続した順序のデータを書き込むための書き込みコマンドに応じて、論理的に連続した順序でデータを更新ブロックに書き込むステップと、
前記データの連続論理ユニットをさらに書き込むために閉鎖される前記更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて前記書き込みを継続し、前記新規の割り当てが前記第1の所定数を超えるようであれば、連続順序でデータを記憶している最も長時間アクセスされていない更新ブロックを、不連続な順序でデータを記憶している最も長時間アクセスされていない更新ブロックのいずれよりも優先的に閉鎖するステップと、
を含む方法。
【請求項2】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
データの論理ユニットを論理的に不連続な順序で記憶するための前記開放更新ブロックのうち、更新ブロックの第2の所定ブロック数まで割り当てるステップと、
論理的に連続した順序でデータを記憶するための更新ブロックの導入が前記第1の所定数を超えるような場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作るステップと、
論理的に不連続な順序でデータを記憶するための更新ブロックの導入が前記第2の所定数を超えるような場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作るステップと、
を含む方法。
【請求項3】
請求項2記載の方法において、
論理的に不連続な順序でデータを記憶するための前記更新ブロックは、論理的に連続した順序でデータを記憶するものから変換される方法。
【請求項4】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールを提供するステップと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットを提供するステップであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするステップと、
対応する置換規則のセットを前記予め定められたクラスのセットに提供して、それぞれのサブプール内の置換されるべき前記更新ブロックを特定するステップと、
前記プール内の前記更新ブロックを対応するサブプールにグループ化するステップと、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある最もアクティブでない更新ブロックを閉鎖および削除するステップであって、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択されるステップと、
を含む方法。
【請求項5】
請求項4記載の方法において、
前記属性のセットは、論理的に連続した順序でデータを記憶するブロックを含む方法。
【請求項6】
請求項4記載の方法において、
前記属性のセットは、論理的に不連続な順序でデータを記憶するブロックを含む方法。
【請求項7】
請求項4記載の方法において、
前記属性のセットは、前記メモリを動作させることに関連したシステムデータを記憶するブロックを含む方法。
【請求項8】
請求項4記載の方法において、
前記メモリは、フラッシュEEPROMである方法。
【請求項9】
請求項4記載の方法であって、
前記メモリは、NAND構造を有する方法。
【請求項10】
請求項4記載の方法において、
前記メモリは、着脱可能なメモリカード上にある方法。
【請求項11】
請求項4記載の方法において、
前記不揮発性メモリは、フローティングゲート構造のメモリセルを有する方法。
【請求項12】
請求項4記載の方法において、
前記不揮発性メモリは、誘電体層構造のメモリセルを有する方法。
【請求項13】
請求項1〜12記載の方法において、
前記メモリは、1ビットのデータをそれぞれ記憶するメモリセルを有する方法。
【請求項14】
請求項1〜12記載の方法において、
前記メモリは、1ビット以上のデータをそれぞれ記憶するメモリセルを有する方法。
【請求項15】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てることと、
論理的に連続した順序のデータを書き込むための書き込みコマンドに応じて、論理的に連続した順序でデータを更新ブロックに書き込むことと、
前記データの連続論理ユニットをさらに書き込むために閉鎖される前記更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて前記書き込みを継続し、前記新規の割り当てが前記第1の所定数を超えるようであれば、連続順序でデータを記憶している最も長時間アクセスされていない更新ブロックを、不連続な順序でデータを記憶している最も長時間アクセスされていない更新ブロックのいずれよりも優先的に閉鎖することと、を含むコントローラと、
を備える不揮発性メモリ。
【請求項16】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てることと、
データの論理ユニットを論理的に不連続な順序で記憶するための前記開放更新ブロックのうち、更新ブロックの第2の所定ブロック数まで割り当てることと、
論理的に連続した順序でデータを記憶するための更新ブロックの導入が前記第1の所定数を超えるような場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作ることと、
論理的に不連続な順序でデータを記憶するための更新ブロックの導入が前記第2の所定数を超えるような場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作ることと、を含むコントローラと、
を備える不揮発性メモリ。
【請求項17】
請求項16記載のメモリにおいて、
論理的に不連続な順序でデータを記憶するための前記更新ブロックは、論理的に連続した順序でデータを記憶するものから変換されているメモリ。
【請求項18】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするセットと、
それぞれのサブプール内の置換されるべき前記更新ブロックを特定するための、前記予め定められたクラスのセットに対応する置換規則のセットと、
クラス毎に更新ブロックを含むサブプールのセットと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある更新ブロックを閉鎖および削除し、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択されることを含むコントローラと、
を備える不揮発性メモリ。
【請求項19】
請求項18記載のメモリにおいて、
前記属性のセットは、論理的に連続した順序でデータを記憶するブロックを含むメモリ。
【請求項20】
請求項18記載のメモリにおいて、
前記属性のセットは、論理的に不連続な順序でデータを記憶するブロックを含むメモリ。
【請求項21】
請求項18記載のメモリにおいて、
前記属性のセットは、前記メモリを動作させることに関連したシステムデータを記憶するブロックを含むメモリ。
【請求項22】
請求項18記載のメモリであって、
前記メモリは、フラッシュEEPROMであるメモリ。
【請求項23】
請求項18記載のメモリにおいて、
前記メモリは、NAND構造を有するメモリ。
【請求項24】
請求項18記載のメモリにおいて、
前記メモリは、着脱可能なメモリカード上にあるメモリ。
【請求項25】
請求項18記載のメモリにおいて、
前記不揮発性メモリは、フローティングゲート構造のメモリセルを有するメモリ。
【請求項26】
請求項18記載のメモリにおいて、
前記不揮発性メモリは、誘電体層構造のメモリセルを有するメモリ。
【請求項27】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするセットと、
それぞれのサブプール内の置換されるべき前記更新ブロックを特定するための、前記予め定められたクラスのセットに対応する置換規則のセットと、
クラス毎に更新ブロックを含むサブプールのセットと、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある更新ブロックを閉鎖するおよび削除する手段であって、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択される手段と、
を備える不揮発性メモリ。
【請求項28】
請求項15〜27記載のメモリにおいて、
前記メモリは、1ビットのデータをそれぞれ記憶するメモリセルを有するメモリ。
【請求項29】
請求項15〜27記載のメモリにおいて、
前記メモリは、1ビット以上のデータをそれぞれ記憶するメモリセルを有するメモリ。
【請求項1】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
論理的に連続した順序のデータを書き込むための書き込みコマンドに応じて、論理的に連続した順序でデータを更新ブロックに書き込むステップと、
前記データの連続論理ユニットをさらに書き込むために閉鎖される前記更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて前記書き込みを継続し、前記新規の割り当てが前記第1の所定数を超えるようであれば、連続順序でデータを記憶している最も長時間アクセスされていない更新ブロックを、不連続な順序でデータを記憶している最も長時間アクセスされていない更新ブロックのいずれよりも優先的に閉鎖するステップと、
を含む方法。
【請求項2】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
データの論理ユニットを論理的に不連続な順序で記憶するための前記開放更新ブロックのうち、更新ブロックの第2の所定ブロック数まで割り当てるステップと、
論理的に連続した順序でデータを記憶するための更新ブロックの導入が前記第1の所定数を超えるような場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作るステップと、
論理的に不連続な順序でデータを記憶するための更新ブロックの導入が前記第2の所定数を超えるような場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作るステップと、
を含む方法。
【請求項3】
請求項2記載の方法において、
論理的に不連続な順序でデータを記憶するための前記更新ブロックは、論理的に連続した順序でデータを記憶するものから変換される方法。
【請求項4】
共に消去可能なデータの論理ユニットを記憶するためのブロックから各々なる、複数のブロックに組織化された不揮発性メモリにおける、データを前記メモリに記憶する方法であって、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てるステップと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールを提供するステップと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットを提供するステップであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするステップと、
対応する置換規則のセットを前記予め定められたクラスのセットに提供して、それぞれのサブプール内の置換されるべき前記更新ブロックを特定するステップと、
前記プール内の前記更新ブロックを対応するサブプールにグループ化するステップと、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある最もアクティブでない更新ブロックを閉鎖および削除するステップであって、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択されるステップと、
を含む方法。
【請求項5】
請求項4記載の方法において、
前記属性のセットは、論理的に連続した順序でデータを記憶するブロックを含む方法。
【請求項6】
請求項4記載の方法において、
前記属性のセットは、論理的に不連続な順序でデータを記憶するブロックを含む方法。
【請求項7】
請求項4記載の方法において、
前記属性のセットは、前記メモリを動作させることに関連したシステムデータを記憶するブロックを含む方法。
【請求項8】
請求項4記載の方法において、
前記メモリは、フラッシュEEPROMである方法。
【請求項9】
請求項4記載の方法であって、
前記メモリは、NAND構造を有する方法。
【請求項10】
請求項4記載の方法において、
前記メモリは、着脱可能なメモリカード上にある方法。
【請求項11】
請求項4記載の方法において、
前記不揮発性メモリは、フローティングゲート構造のメモリセルを有する方法。
【請求項12】
請求項4記載の方法において、
前記不揮発性メモリは、誘電体層構造のメモリセルを有する方法。
【請求項13】
請求項1〜12記載の方法において、
前記メモリは、1ビットのデータをそれぞれ記憶するメモリセルを有する方法。
【請求項14】
請求項1〜12記載の方法において、
前記メモリは、1ビット以上のデータをそれぞれ記憶するメモリセルを有する方法。
【請求項15】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てることと、
論理的に連続した順序のデータを書き込むための書き込みコマンドに応じて、論理的に連続した順序でデータを更新ブロックに書き込むことと、
前記データの連続論理ユニットをさらに書き込むために閉鎖される前記更新ブロックについて満たされた所定の条件に応じて、新規の更新ブロックを割り当てて前記書き込みを継続し、前記新規の割り当てが前記第1の所定数を超えるようであれば、連続順序でデータを記憶している最も長時間アクセスされていない更新ブロックを、不連続な順序でデータを記憶している最も長時間アクセスされていない更新ブロックのいずれよりも優先的に閉鎖することと、を含むコントローラと、
を備える不揮発性メモリ。
【請求項16】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックとして、第1の所定ブロック数まで割り当てることと、
データの論理ユニットを論理的に不連続な順序で記憶するための前記開放更新ブロックのうち、更新ブロックの第2の所定ブロック数まで割り当てることと、
論理的に連続した順序でデータを記憶するための更新ブロックの導入が前記第1の所定数を超えるような場合にはいつでも、論理的に連続した順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作ることと、
論理的に不連続な順序でデータを記憶するための更新ブロックの導入が前記第2の所定数を超えるような場合にはいつでも、論理的に不連続な順序のデータを含む最も長時間アクセスされていない更新ブロックを閉鎖して、前記導入された更新ブロック用に空きを作ることと、を含むコントローラと、
を備える不揮発性メモリ。
【請求項17】
請求項16記載のメモリにおいて、
論理的に不連続な順序でデータを記憶するための前記更新ブロックは、論理的に連続した順序でデータを記憶するものから変換されているメモリ。
【請求項18】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするセットと、
それぞれのサブプール内の置換されるべき前記更新ブロックを特定するための、前記予め定められたクラスのセットに対応する置換規則のセットと、
クラス毎に更新ブロックを含むサブプールのセットと、
前記ブロックの動作を制御するためのコントローラであって、前記動作は、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある更新ブロックを閉鎖および削除し、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択されることを含むコントローラと、
を備える不揮発性メモリ。
【請求項19】
請求項18記載のメモリにおいて、
前記属性のセットは、論理的に連続した順序でデータを記憶するブロックを含むメモリ。
【請求項20】
請求項18記載のメモリにおいて、
前記属性のセットは、論理的に不連続な順序でデータを記憶するブロックを含むメモリ。
【請求項21】
請求項18記載のメモリにおいて、
前記属性のセットは、前記メモリを動作させることに関連したシステムデータを記憶するブロックを含むメモリ。
【請求項22】
請求項18記載のメモリであって、
前記メモリは、フラッシュEEPROMであるメモリ。
【請求項23】
請求項18記載のメモリにおいて、
前記メモリは、NAND構造を有するメモリ。
【請求項24】
請求項18記載のメモリにおいて、
前記メモリは、着脱可能なメモリカード上にあるメモリ。
【請求項25】
請求項18記載のメモリにおいて、
前記不揮発性メモリは、フローティングゲート構造のメモリセルを有するメモリ。
【請求項26】
請求項18記載のメモリにおいて、
前記不揮発性メモリは、誘電体層構造のメモリセルを有するメモリ。
【請求項27】
不揮発性メモリであって、
ブロックに組織化されたメモリであって、各ブロックは、共に消去可能なメモリユニットに分割され、各メモリユニットは、データの論理ユニットを記憶するためのものであるメモリと、
データの論理ユニットの更新を記憶するために同時に開放中の更新ブロックの第1の所定最大数までのプールと、
更新ブロックを属性のセットに基づいて分類するための予め定められたクラスのセットであって、各クラスは、関連する所定最大数の更新ブロックまでのサブプールをサポートするセットと、
それぞれのサブプール内の置換されるべき前記更新ブロックを特定するための、前記予め定められたクラスのセットに対応する置換規則のセットと、
クラス毎に更新ブロックを含むサブプールのセットと、
同一のクラスの他の更新ブロックが導入されつつある場合にはいつでも、前記関連する所定最大数の更新ブロックを含むサブプール内にある更新ブロックを閉鎖するおよび削除する手段であって、前記削除される更新ブロックは、同一のクラス用の前記対応する置換規則に従って選択される手段と、
を備える不揮発性メモリ。
【請求項28】
請求項15〜27記載のメモリにおいて、
前記メモリは、1ビットのデータをそれぞれ記憶するメモリセルを有するメモリ。
【請求項29】
請求項15〜27記載のメモリにおいて、
前記メモリは、1ビット以上のデータをそれぞれ記憶するメモリセルを有するメモリ。
【図1】
【図2】
【図3A】
【図3B】
【図4】
【図5A】
【図5B】
【図5C】
【図6】
【図7A】
【図7B】
【図8】
【図9】
【図10】
【図11A】
【図11B】
【図12A】
【図12B】
【図13A】
【図13B】
【図14(A)−14(B)】
【図14(C)−14(E)】
【図14(F)−14(H)】
【図14(I)−14(J)】
【図15】
【図16A】
【図16B】
【図16C】
【図16D】
【図16E】
【図17A】
【図17B】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23A】
【図23B】
【図23C】
【図24A】
【図24B】
【図24C】
【図25A】
【図25B】
【図26A】
【図26B】
【図26C】
【図27A】
【図27B】
【図27C】
【図28】
【図29】
【図30】
【図2】
【図3A】
【図3B】
【図4】
【図5A】
【図5B】
【図5C】
【図6】
【図7A】
【図7B】
【図8】
【図9】
【図10】
【図11A】
【図11B】
【図12A】
【図12B】
【図13A】
【図13B】
【図14(A)−14(B)】
【図14(C)−14(E)】
【図14(F)−14(H)】
【図14(I)−14(J)】
【図15】
【図16A】
【図16B】
【図16C】
【図16D】
【図16E】
【図17A】
【図17B】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23A】
【図23B】
【図23C】
【図24A】
【図24B】
【図24C】
【図25A】
【図25B】
【図26A】
【図26B】
【図26C】
【図27A】
【図27B】
【図27C】
【図28】
【図29】
【図30】
【公表番号】特表2010−503929(P2010−503929A)
【公表日】平成22年2月4日(2010.2.4)
【国際特許分類】
【出願番号】特願2009−528456(P2009−528456)
【出願日】平成19年9月12日(2007.9.12)
【国際出願番号】PCT/US2007/078311
【国際公開番号】WO2008/033952
【国際公開日】平成20年3月20日(2008.3.20)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(506197901)サンディスク コーポレイション (175)
【Fターム(参考)】
【公表日】平成22年2月4日(2010.2.4)
【国際特許分類】
【出願日】平成19年9月12日(2007.9.12)
【国際出願番号】PCT/US2007/078311
【国際公開番号】WO2008/033952
【国際公開日】平成20年3月20日(2008.3.20)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.フロッピー
【出願人】(506197901)サンディスク コーポレイション (175)
【Fターム(参考)】
[ Back to top ]