(57)【特許請求の範囲】
【請求項１】
大容量記憶システム（100）にフラッシュメモリを使用する方法であって、
前記フラッシュメモリを複数のマルチセクタブロックに分割し、
前記複数のマルチセクタブロックから第１ブロック集合（Ｗブロック）を割当て、前記第１ブロック集合を予め決められたアドレッシングスキームにあわせて編成されたデータをストアするのに使用し、
前記複数のマルチセクタブロックから第２ブロック（Ｑバッファ）を割当て、前記第２ブロックを、前記第１ブロック集合内のブロックにシーケンシャルに書き込まれるようになっているデータをストアするための一時的なバッファとして使用し、
前記複数のマルチセクタブロックから第３ブロック（Ｘバッファ）を割当て、前記第３ブロックを、前記第１ブロック集合内のブロックに非シーケンシャルに書き込まれるようになっているデータをストアするための一時的なバッファとして使用し、
消去される無効なデータを含む第４ブロック集合（Ｅ／Ｃブロック）を特定し、
前記第１ブロック集合、前記第２ブロック、及び前記第４ブロック集合間で、前記複数のマルチセクタブロックの少なくとも１つを再割当てするようにし、
シーケンシャルデータを含む更新の場合（260）は、前記第２ブロックの対応セクタに更新データを書き込み、且つ前記第２ブロックの対応セクタをマーキングすることによって、前記第１ブロック集合内の選択ブロックのセクタにストアされたデータを更新し、
非シーケンシャルデータを含む更新の場合（280）は、前記第３ブロックのセクタに前記更新データを書き込むことによって、前記第１ブロック集合内の選択ブロックのセクタにストアされたデータを更新する、ステップを含む方法。
【請求項２】
前記第３ブロックに関係する不揮発性メモリに前記非シーケンシャルデータのためのアドレス情報を書き込むステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項３】
前の更新のアドレスを解析することによって、前記更新が非シーケンシャルデータを含むかどうかを決定するステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記第２ブロック内のマークされていないセクタを決定し、
前記第１ブロック集合内のブロックのセクタからのデータを、マークされていない前記第２ブロック内のブロックにあるセクタにコピーし、
前記第２ブロックとして割当てられたブロックの識別を、前記第１ブロック集合内のブロックに変更する、ステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項５】
（ａ）物理識別子（ブロックＩＤ）を前記複数のマルチセクタブロックの各々に割り当て、
（ｂ）論理アドレス（150）を前記マルチセクタブロック集合の各ブロックに割当て、
（ｃ）前記物理識別子を前記論理アドレスにマッピングする（132C）、ステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記第２ブロック内のセクタがマークされているかを決定しながら、読み出されるセクタ内のデータに対応する前記第２ブロック内のセクタを決定し（314）、
前記セクタがマークされている場合、前記第２ブロックからのデータを取得（316）し、そして前記セクタがマークされていない場合、前記第１ブロック集合内のブロックまたは前記第３ブロックからのデータを取得する（310,320）、ステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記第２ブロックを前記第１ブロック集合内のブロックに変更し、
前記第１ブロック集合内のブロックを前記第４ブロック集合内のブロックに変更するステップを更に含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記第２ブロックの対応セクタのマーキングが、前記第２ブロックに関係する不揮発性メモリセル内にパラメータを書き込むことを含む請求項１に記載の方法。
【請求項９】
大容量記憶システム（100）であって、
（１）複数のマルチセクタブロックを含むフラッシュメモリシステムと、
（２）予め決められたアドレッシングスキームにあわせて編成されたデータをストアするのに使用される第１ブロック集合（Ｗブロック）を、前記複数のマルチセクタブロックから割当てるための論理手段（110）と、
（３）前記第１ブロック集合内のブロックにシーケンシャルに書き込まれるようになっているデータをストアするための一時的なバッファとして使用される第２ブロック（Ｑバッファ）を、前記複数のマルチセクタブロックから割当てるための論理手段（110）と、
（４）前記第１ブロック集合内のブロックに非シーケンシャルに書き込まれるようになっているデータをストアするための一時的なバッファとして使用される第３ブロック（Ｘバッファ）を、前記複数のマルチセクタブロックから割当てるための論理手段（110）と、
（５）消去されるデータを含む、前記複数のブロック内の第４ブロック集合（Ｅ／Ｃブロック）をマップ（map）するための論理手段と、
（６）前記第１ブロック集合、前記第２ブロック、及び前記第４ブロック集合間で、前記複数のマルチセクタブロックの少なくとも１つを再割当てするためのリソースと、
（７）（i）シーケンシャルなデータを含む更新の場合には、前記第２ブロックの対応セクタに更新データを書き込むこと且つ前記第２ブロックの対応セクタをマーキングすることによって前記第１ブロック集合内の選択ブロックのセクタにストアされたデータを更新し、及び、
（ii）非シーケンシャルデータを含む更新であって、前記第２ブロックのまだ更新データがストアされていないアドレスに対応するアドレスをもつデータを含む更新の場合には、前記第３ブロックのセクタに前記更新データを書き込むことによって前記第１ブロック集合内の選択ブロックのセクタにストアされたデータを更新する、
動作を実現する論理手段（110）、とを備えたシステム。
【請求項１０】
前記第３ブロックに関係する不揮発性メモリに前記非シーケンシャルデータのためのアドレス情報を書き込む論理手段を更に含むことを特徴とする請求項９に記載のシステム。
【請求項１１】
前の更新（previous updates）のアドレスを解析することによって、前記更新が非シーケンシャルデータを含むかどうかを決定する論理手段を更に含むことを特徴とする請求項９に記載のシステム。
【請求項１２】
前記第２ブロック内のどのセクタがマークされていないかを決定し、前記第１ブロック集合内のブロックのセクタからのデータを、マークされていない前記第２ブロック内のブロックにあるセクタにコピーし、そして前記第２ブロックを、前記第１ブロック集合内のブロック内へ変更するリソース手段を更に含むことを特徴とする請求項９に記載のシステム。
【請求項１３】
読み出されるデータに対応する前記第２ブロック内のセクタを決定し、且つ、前記決定されたセクタがマークされている場合、前記決定されたセクタからのデータを取得し、そして前記決定されたセクタがマークされていない場合、前記第１ブロック集合内のブロックまたは前記第３ブロックからのデータを取得するリソース手段を更に含むことを特徴とする請求項９に記載のシステム。
【請求項１４】
前記第２ブロックと前記第１ブロック集合内のブロックとのマッピングを変更するリソース手段と、
前記第１ブロック集合内のブロックを前記第４ブロック集合内のブロックに変更するリソース手段とを更に含むことを特徴とする請求項９に記載のシステム。
【請求項１５】
物理識別子（ブロックＩＤ）が前記複数のマルチセクタブロックの各々に割当てられ、
論理アドレス（150）が前記マルチセクタブロック集合のブロックに割当てられ、
前記物理識別子が前記論理アドレスにマッピングされる（132C）ことを特徴とする請求項９に記載のシステム。
【発明の詳細な説明】
発明の分野
本発明は、コンピュータ用の大容量記憶装置の分野に関する。特に、本発明は、半導体不揮発性メモリに関するアーキテクチャに関し、特にフラッシュメモリに関する。
発明の背景
近代の情報処理システムは、プログラムやデータを記憶させるための大容量記憶装置として、不揮発性ランダムアクセスメモリを十分に利用する。最も広く使用される不揮発性メモリ装置はハードディスクであり、それは磁気材料にデータを記憶させる接触装置である。最近、半導体不揮発性メモリが開発された。半導体不揮発性メモリの１つのタイプは、典型的な行及び列配列におけるメモリセルとして配列された、複数の浮動ゲート金属シリコン酸化物電解効果トランジスタを有するフラッシュメモリである。浮動ゲート設計は、電源が取り外された後、情報を保存させるようにする。フラッシュメモリは、情報処理システムにおける大容量記憶装置として使用されるように適合させる数多くの特徴を有する。それは、重みにして軽量であり、非常に僅かな空間を占め、接触装置よりも少ない電力を消費する。更に、それは頑丈であり、接触装置を破壊することのできる反復ドロップに耐えることができる。
フラッシュメモリは典型的に、ホット電子注入によってプログラム可能であり、Ｆｏｗｌｅｒ−Ｎｏｒｄｈｅｉｍトンネリングによって消去可能である、複数の単一トランジスタメモリセルを有する。かかるメモリセルのプログラミング及び消去には、浮動ゲート電極の周りの誘電体を通過する電流を必要とする。誘電体は、一定の回数のプログラミング及び消去の後、故障することがわかった。該属性のために、かかるタイプのメモリは有限の消去−書込みサイクルを有する。フラッシュセル装置の製造者は、１０，０００から１００，０００の間の数消去−書込みサイクルのための制限を指定する。これは、故障する前に無数の消去−書込みサイクルを経て行くことができる、回転する磁気媒体（例、ハードディスク）及び揮発性メモリチップ（ダイナミックＲＡＭ及びスタティックＲＡＭ）のようなメモリ装置の他のタイプと異なる。結果として、フラッシュメモリ内の多くの消去−書込みサイクルを減らすことが望ましい。
フラッシュメモリは典型的に、メモリ内のセルのソース端末に高電圧を加えることにより消去される。ソース端末が全て金属ブッシングによって互いに接続されるため、全体的なメモリ（あるいはいくらかのサブポーション）は同時に消去される必要がある。従って、消去操作において、有効データ、並びに無効（不正）データは消去される。これは、個別のビットが消去され、書込まれる他のＲＡＭ装置と異なる。
フラッシュメモリと他のタイプのメモリ装置との間の別の差は、フラッシュメモリ装置における消去サイクルが遅い（メモリ装置の他のタイプの読込み−書込み時間と比較した場合）ことである。該属性は、システムが遅い消去サイクルを補うのに特別に設計されていない限り、大容量記憶装置としてフラッシュメモリを利用するシステムの性能を著しく下げる。
上述のように、フラッシュメモリを大容量記憶装置として有効利用するために、新たなメモリ構造の設計が必要とされている。
発明の概要
本発明は、フラッシュメモリシステムの新しいアーキテクチャに関する。このアーキテクチャは、データをストアするためにフラッシュメモリを使用して、上述の問題のいくつかを克服するように設計する。このアーキテクチャは、ブロック及びセクタを含む論理構造に物理メモリセルを編成することを含む。本発明の実施形態では、（「エントリバッファ」と呼ばれる）バッファが物理メモリを論理配列にマップするのに使用される。エントリバッファの内容を変更することによって、同じ物理メモリが異なる論理関数を実行するのに使用され得る。
本アーキテクチャの一つの用途は、メモリシステムが、セクタベースアドレッシングスキームによって配列されているデータをストアするのに使用されることである。かかるスキームの例が、Ｍｉｃｒｏｓｏｆｔ  ＤＯＳファイルシステムで使用される「論理ブロックアドレス」（ＬＢＡ）である。本発明は、セクタベースアドレッシングスキームにおいて編成されたデータを処理するための論理構造を使用するフレキシブルメソッドを提供する。
フラッシュメモリの特別な特徴の一つは、別々のセルが新しいデータで直接上書きされないことである。これは、各ビットが随意に変更され得る他のメモリデバイスと異なる。従って、在来の読み込み及び書き込みメソッドを使用することができない。本発明は、この論理構造に書き込み、この論理構造から読み出す新しい方法を含む。この方法は、古いデータを直接上書きする変わりに、新しいデータを受け取るための（本発明ではＱバッファと呼ぶ）バッファを使用する。Ｑバッファは、（ダーティブロックと呼ぶ）古いデータを包含するブロックと置換するように、後で変形される。バッファによって置換された古いブロックは、消去されることができ、次いで、別の目的で使用する。次いで、新しいブロックを新しいバッファとなるように割り当てる。上述したエントリバッファの使用は、この変形を容易にする。
この書き込みメソッドの結果として生ずるものは、ブロックがリサイクルされることである（即ち、ダーティブロックを他のタイプのブロックに論理的に変更することができる）。これは、本アーキテクチャがＱバッファの連続供給を必要としているからである。ブロックがリサイクルされなければ、全てのブロックが使用され、Ｑバッファに割り当てることができるブロックがなくなるときが来てしまう。従って、本発明のアーキテクチャは、消去されたブロックが結局バッファとして使用され得るようになリサイクルブロックに対するメソッドを提供する。
本アーキテクチャの性能を向上させるために、新しいタイプのバッファを導入する。上述したＱバッファは、データのランダム更新を取扱うのに有効ではない。このバッファは、このタイプの書き込みを受け取るのに役立つ。この新しいバッファは、Ｑバッファが消去される回数を減少させることができることが分かる。ブロックを消去するために比較的長い時間を要するので、システムの性能は向上する。
本発明のこれらの及び他の特徴は、添付した図面と併せて読むときに、以下の記載から明らかになるであろう。
【図面の簡単な説明】
図１Ａは、本発明のフラッシュメモリシステムの概略図である。
図１Ｂ乃至１Ｄは、本発明のフラッシュメモリシステムの論理構造を示す。
図２Ａ乃至２Ｄは、本発明に関する書き込みオペレーションを示す。
図３は、図２Ａ乃至２Ｄの書き込みオペレーション後のブロックの状態を示す。
図４は、データが本発明に関する別のブロック内に書き込まれる必要があるときのブロックの状態を示す。
図５は、あるカテゴリから別のカテゴリへの本発明のブロックの遷移を示す概略図である。
図６Ａ乃至６Ｆは、本発明の「暗黙のダーティ」を例示する。
図７は、本発明のデータの書き込みを示すフローチャートである。
図８は、本発明のデータの読み込みを示すフローチャートである。
図９は、データを本発明のフラッシュメモリに書き込む例を図示する。
発明の詳細な説明
本発明は、新しいメモリアーキテクチャ及びそれに関連する方法を含む。以下の記載は、いかなる当業者にとっても本発明を行い且つ使用することができるように表す。特定の用途の記載は、例としてのみ提供する。好ましい実施形態の種々の修正は、当業者にとって容易に明らかであり、ここに定義された一般的な原理は、本発明の精神及び範囲から逸脱することなく他の実施形態及び用途に適用しうる。従って、本発明は、示される実施形態に限定することなく、ここに開示する原理及び特徴と調和する最も広い範囲と一致させるべきである。
メモリシステムの本質的な機能は、データをストアすることである。更に、ソフトウェアアプリケーションは、メモリシステムから読み込み、且つ、メモリシステムに書き込むことができ得る。フラッシュメモリは、在来のメモリと異なる多くの特徴を有する。その結果、フラッシュメモリシステムのアーキテクチャは、多くの困難を克服し、あらゆる有利な特徴を利用するために準備されることを必要とする。ある相違点は、新しいデータで直接上書きされることができないフラッシュメモリにデータを存在させることである。フラッシュメモリは、「クリーン」メモリになるように、最初に消去される必要がある。次いで、新しいデータは、クリーンメモリに書き込まれる。ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）におけるデータとは対照的に、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）及びハードディスクは、直接上書きされ得る。これが、フラッシュメモリシステムのアーキテクチャが在来のメモリシステムと異なる理由の一つである。
使用することができなくなる前に、各ブロックが、（在来のメモリと比較して）比較的小さい数の回数だけ消去されるからである。その結果、不必要な消去サイクルを減少させる必要がある。フラッシュメモリに関する上記の技術的な問題を克服する必要に加えて、システムの性能を高め、コストを低くしなければならない。さもなければ、フラッシュメモリシステムは市場で競争することができない。この要求の重要性の一つは、アーキテクチャが大きすぎる諸経費を含まないようにすることである。従って、ハードウェア及びソフトウェアサポート（例えば、バッファ、プログラムコードなど）を低くする必要があり、データ構造及びアルゴリズムを簡単にする必要があり、信頼性及び性能を高くする必要がある。本発明のフラッシュメモリシステムは、これらの要求を満たすように設計されている。
（Ａ）システムアーキテクチャの記述
（１）メモリセルのブロックへの分割
図１Ａは、本発明のフラッシュメモリシステム１００の概略図である。シスチム１００は、チップ１０２乃至１０４のようなデータ及びプログラムをストアするための１又はそれ以上のフラッシュメモリチップを有する。これらのチップは、線１０６乃至１０８を介して制御器１１０に電気的に接続される。本発明の実施形態では、これらの線は、ディジタルデータを通信するためのバスの一部分でありうる。制御器１１０は、フラッシュメモリチップ１０２乃至１０４をメモリブロック内に編成し、システム１００と無関係なデバイスと異なる目的のインターフェースにこれらのメモリブロックを割り当てるような（以下に詳細に記載する）種々の関数を実行する。制御器１００は、専用データ処理デバイスでありうる。変形実施形態では、制御器１１０の機能は、中央演算処理装置（ＣＰＵ）と、ランダムアクセスメモリ（ＲＡＭ）と、読み出し専用メモリ（ＲＯＭ）と、ハードディスクとを有する汎用マイクロプロセッサシステムによって実行され得る。本発明のある用途では、フラッシュメモリシステム１００は、ハードディスクの機能及び処理をエミュレートする。この用途では、マイクロコンピュータシステムは、一般的なハードディスクとしてシステム１００を処理する。変形実施形態として、フラッシュメモリシステム１００は、ビデオゲームカートリッジ及び産業用制御データロガのような、特定のシステムで使用するために最適化された構成を有しうる。
各メモリチップは、種々のメモリブロックに分割され得る。各メモリブロックは、データのビットをストアすることができる多くのＥＰＲＯＭセルを有する。例えば、チップ１０２は、ブロック１１２ａ乃至１２３ｂに分割される。同様に、チップ１０３及び１０４は、ブロック１１２ｂ乃至１２３ｂ及び１１２ｃ乃至１２３ｃにそれぞれ分割される。好ましい実施形態では、１０２乃至１０４のチップの各々は、同じ数のブロックに分割される。しかしながら、チップが異なる数のブロックを有してもよいことに注意すべきである。
（２）物理ブロックの論理的編成
チップ１０２乃至１０４のブロックは、論理的に編成される必要があり、それらはデータをストアするためにフレキシブルシステムを提供することができる。編成の一つの方法は、物理ブロックを論理的構造にマッピングするための手段を提供することである。本発明では、特別のバッファがこのマッピングのために使用される。このバッファ内の内容を変更することによって、同じ物理ブロックは異なる論理的編成内にマッピングされ得る。
以下は、ある編成を示す例である。この例に使用されるブロックの数が例示の目的だけのものであり、実在のフラッシュメモリシステムは多くのブロックを有することができることに注意すべきである。各チップにおける８つのブロックがアレイに使用されている（他のブロックは他の目的のために使用され得る）と仮定する。各メモリブロックは一意的な識別番号（「ブロックＩＤ」）を有する。図１Ｂでは、チップ１０２のブロック１１２ａ乃至１１９ａ及びチップ１０３のブロック１１２ｂ乃至１１９ｂがブロックＩＤ１乃至１６に順次に割り当てられている。これらの１６ブロックが今、メモリアレイ１３０を形成する。物理ブロックとそのブロックＩＤとの間に１対１対応があるので、各ブロックの位置はそのブロックＩＤを特定することによって一意的に識別され得る。この点で、ブロックＩＤはブロック物理アドレスの形態とみなすことができる。本発明のある実施形態では、各ブロックが更にセクタに分割される。この実施形態では、データの読み込み及び書き出しは同時にセクタで実行される。
ブロックＩＤは、種々の論理的オーダに配列される。図１Ｂでは、バッファ１３２ａは、ブロックＩＤをストアするのに使用される。このバッファは、ここでは「エントリバッファ」と呼ぶ。バッファ１２３ａは、多くのレジスタ（１６ブロックＩＤがあるので、この例では１６）を包含する。図１Ｂでは、それらは０乃至１５からラベル付けされる。バッファにおける各レジスタを、「エントリ」と呼ぶ。各エントリは、一意的なブロックＩＤをストアするのに使用され得る。
以下により詳細に説明するように、本発明のある態様は、本発明の物理ブロックが種々の論理的変形を経験することができる。従って、同じ物理ブロックは、ある時間で第１の論理アドレスと、別の時間で第２の論理アドレスとに関連するデータを包含し得る。バッファ１３２ａは、論理アドレスを備える物理ブロックを関連付けることによって線形アドレッシングスキームを実行するのに使用され得る。図１Ｂでは、バッファ１３２ａにおける各レジスタは、論理アドレスのレンジと関連する。レジスタが論理的手段（例えば「０」乃至「１５」）に順次に配列されるので、レジスタの論理的な位置とデータの論理アドレスとの間に１対１の関係がある。各レジスタは、関連するアドレスを有するデータをストアするのに使用される物理ブロックのブロックＩＤを包含する。例えば、バッファ１３２ａにおいて最初から３つのレジスタは、ブロックＩＤ１３，２及び８を包含する。ブロックが変形を通過するので、異なる物理ブロックは、同じアドレスレンジにデータをストアするのに使用され得る。例えば、図１Ｂは、エントリバッファ１３２ｂとして示される別の配列を示し、最初の３つのレジスタがブロックＩＤ１１，５及び１４を含む。この例では、バッファ１３２ａ及び１３２ｂが同じ物理バッファにストアされた異なる値を例示するのに使用されていることに注意すべきである。本発明のフラッシュメモリシステムは、多くの種類の情報処理システムの大容量記憶装置として使用され得る。本発明の作動を示すための例として、フラッシュメモリシステム１００を、ハードディスクをエミュレートするのに使用する。図１Ｃは、フラッシュメモリシステム１００のブロック１４０を示す。ブロック１４０は、セクタ１４２乃至１４４のようなｒセクタに分割される。ブロック１４０はまた、ブロック１４０に関連した属性情報をストアするために（「拡張」とラベル付けされた）メモリ領域１４８を包含する。各セクタはまた、セクタの属性情報をストアするために（セクタ１４２の領域１４６のような）セクタ属性領域を包含する。
（Ｂ）論理メモリアドレスの物理フラッシュメモリアドレスへのマッピング
上で指摘したように、フラッシュメモリシステムの実質的な機能は、データ及びプログラムをストアすることである。典型的には、データ及びプログラムがセクタベースアドレッシングスキームで編成されるので、データの各部分は一意的に識別される。本発明のフラッシュメモリシステムがこのアドレッシングスキームと互換性があるように設計されるので、外部のシステムは論理セクタアドレスを特定することによってフラッシュ大容量記憶装置にアクセスすることができる。
図１Ｄは、典型的なメモリ編成を実行するための本発明のフラッシュメモリシステム１００を使用する例を示す。（ＭｉｃｒｏｓｏｆｔのＤＯＳオペレーティングシステム及びＷｉｎｄｏｗｓのような）多くのソフトウェアシステムは、データを大容量記憶装置に配置するためにセクタベース線形アドレッシングスキームを使用する。このアドレッシングスキームでは、論理メモリ１５０のメモリアドレスは、線形的に増加する。メモリ空間の最小アドレス可能ユニットは、（図１Ｃのセクタ１４２乃至１４４に対応する）セクタであり、即ち、データは、同時にバイト又はワードを読み込み且つ書き込む代わりに、同時にセクタを読み込み且つ書き込む。セクタのサイズは、ファイルシステムの設計に関連して選択することができる。図１Ｄに示す例では、スターティングセクタアドレスを「００」と示し、最高セクタアドレスを（例示の目的に限って）「７９」として示す。これらの論理セクタは論理ブロックにグループ化され、これらの論理ブロックは（エントリバッファ１３２ｃを使用して）それらに対応する物理ブロックにマップされる。物理ブロックのセクタのオーダは、それに対応する論理ブロックを保持する。
例として、図１Ｄの各ブロックは、１０セクタを包含するように仮定する。この例では、数は、（２進数又は１６進数の代わりに）１０進数である。エントリバッファ１３２ｃのレジスタ番号「０」によって、１３のブロックＩＤを有するブロックが論理アドレス空間の第１のブロックとして割り当てられる。従って、このブロックのセクタは、「００」乃至「０９」の論理セクタアドレスに対応する。エントリバッファ１３２ｃのレジスタ番号「１」によって、２のブロックＩＤを有するブロックは、第２のブロックとして割り当てられる。従ってこのブロックのセクタは、「１０」乃至「１９」の論理セクタアドレスに対応する。同じ関係が、他のレジスタに関しても保持される。
データをストアするための独創的なフラッシュメモリシステムを使用するために、制御器１１０は、フラッシュメモリシステムにおける一意的に識別可能なセクタ内の外部システムから生じたデータにアクセスすることができなければならない。上記の論理セクタアドレスは、外部システムとフラッシュメモリシステムとの間にインターフェースを提供する。外部システムは、その論理セクタアドレスを特定することによってアクセスされ得るデータの位置を示すことができる。論理セクタアドレスが知られているとき、論理セクタアドレスは、一つのブロック内の総セクタの数を論理セクタアドレスに割ることによって計算され得る。この除算の商は、論理ブロックアドレスであり、剰余はその論理ブロック内のセクタ数である。典型的なブロックアドレスは、論理的−物理的ブロックマップテーブルを見つけることによって見出され得る。
以下の例は、その論理セクタアドレスが知られている場合の、セクタの物理的位置を得るための方法を例示する。論理セクタアドレス＃３２が与えられていると仮定すると（図１Ｄ参照）、このアドレスは１つのブロック内の（この例では１０である）セクタの数によって除算される。除算の商は３であり、剰余は２である。それゆえ、論理ブロックアドレスは、上記除算の商である３である。１１の物理ブロックＩＤ内のこの変換は、エントリバッファインデックス３の内容から得られ得る。上記除算の剰余２は、上で得られた物理ブロックＩＤに関するセクタオーダである。セクタ数が０から始まるので、論理セクタアドレス＃３２を備えるセクタは、１１の物理ブロックＩＤを備えるブロックの第３のセクタに配置される。
図１Ｂ乃至１Ｄに示すエントリバッファは、好ましくは（スタティック又はダイナミック）ＲＡＭで実行される。これは、エントリバッファの情報がしばしば変更される必要があるので、それは、エントリバッファがフラッシュメモリで実行されるならば、効率的に減少しうる。
コンピュータシステムをパワーダウンした後に、ＲＡＭにストアされたデータが消去されることは知られている。従って、エントリバッファの情報は、パワーダウンしたときに失われる。しかしながら、各ブロックの拡張領域にストアされた属性情報を使用することによってエントリバッファの内容を復元することが可能である。
（Ｃ）メモリシステムのデータの読み出し及び書き込み
本発明のシステムは情報をストアするのに使用される。従って、本発明のブロック及びセクタから書き込み及び読み出しする必要がある。上述したように、フラッシュメモリは消去する前に上書きすることができない。従って、データをストアするためのブロックに加えて、新しい構造を導入する必要がある。
本発明のある実施形態では、ブロックはワーキング（Ｗ）ブロックと、テンポラリＱバッファと、消去可能（Ｅ）商とに分割される。Ｗバッファはデータをストアするのに使用される。Ｑバッファは、選択されたＷブロックに対してテンポラリ書き込みバッファとして使用される。これは、Ｗブロックが直接更新されないので、必要である。消去されるべきブロックがＥバッファに置かれる。以下に説明するように、Ｅ商の導入がブロックリサイクリングに関する必要性から生じるので、Ｑバッファのほとんど無限大の供給は、物理ブロックの固定された数から生成され得る。Ｅ商の好ましいサイズは、ユーザの用途によって決定される。
（１）データ書き込み作動
図２Ａは、本発明に関する書き込みのための方法を図示する。合計１０ブロックがあると仮定する。再び、図２Ａのブロックの数は例示の目的のためだけであり、ブロックの実際の数は非常の多くすることができることに注意すべきである。それらのブロックＩＤは、エントリバッファ１３２ｅに包含される。それらのブロックの８つは、データをストアするために使用される（それらのブロックは上述したＷブロックである）。残りのブロックはＱバッファ又はＥ商に割り当てられ得る。この例の各カテゴリにおけるブロックの数が例示のみであり、他のユーザアプリケーションがカテゴリに対して異なる数のブロックを割り当てることができることに注意すべきである。
書き込みの一つの方法がＷブロックに順次書き込むことと、一度に同時に書き込むことを含む。本発明では、Ｗブロックは直接書き込まれることはできない。その代わり、Ｑバッファはデータを受け取るのに使用される。図２Ａでは、３のブロックＩＤを備えるブロックがＱバッファとして割り当てられると仮定する。このＱバッファが、６番目のブロックに対応する線形論理ブロックアドレスを有するＷブロックの代理として使用されることも仮定する。このブロックは、８のブロックＩＤを有する。従って、第６のブロックに書き込まれるいかなるデータも、Ｑバッファ内に書き込まれる。
図２Ｂは、Ｑバッファ１５８の初期状態と第６のブロック１６０とを示す。これらの２つのブロックは複数のセクタを包含する。９番目のブロック１６０の全てのセクタが、データを包含し、「ｕｓｅｄ」とマークされると仮定する。一方、Ｑバッファが最初はクリーンなので、Ｑバッファ１５８の全てのセクタは「ｕｎｕｓｅｄ」とマークされる。
データがＱバッファ１５８内に書き込まれるとき、Ｑバッファの対応するセクタは「ｕｓｅｄ」とマークされる。直後に、６番目のブロック１６０の対応するセクタは、ダーティ（ｄｉｒｔｙ）とマークされる。これを図２Ｃに示す。
別のＷブロックをサービスするためにＱバッファを割り当てることが望ましいとき、全ての有効なデータをＱバッファ１５８に対する第６のブロック１６０にコピーすることが必要である。再び、以下のステップがコピーする際に続く：（i）セクタを使用されたＱバッファにマークし、次いで（ii）対応するセクタをＷブロックｄｉｒｔｙにマークする。これを図２Ｄに示す。
データ転送が完了した後に、８のブロックＩＤを有するブロックはＥ商の一つのブロックに変更される。３のブロックＩＤを備えるオリジナルＱバッファは第６のＷブロックを置換する。これを図３に示す。
別のＷブロックに書き込むことが必要ならば、別のＱバッファが割り当てられるために必要である。Ｅ商の一つのブロックがＱバッファ内で消去され変更される。これを図４に示し、６のブロックＩＤを備えるブロックが消去されるために選択される。次いで、このブロックはＱバッファ内で変更され得る。次いで、このブロックは、意図されたＷブロック（図４では第２のＷブロック）を受け取るのに使用される。
（２）データ読み込み作動
アドレッシングの観点では、読み込みは書き込みと似ている。ほとんどのデータ書き込みは、論理セクタアドレスの特定のレンジに対するデータのストリームの書き込みを含む。従って、まず特定の論理セクタアドレスをＷブロックにマップし、次いで、上述した書き込み作動を実行することが必要である。同様に、読み込みは通常は、論理セクタアドレスの特定のレンジで実行される。
アプリケーションが読み込みタスクを実行することを望むとき、それは図１の制御器１１０にコマンドを送る。次いで、制御器１１０は、要求されたデータが該データをアプリケーションにストアし、戻す、対応物理アドレスを計算する。データがストアされている物理的位置に論理セクタアドレスをマッピングする方法は、上述した「Mapping Logical Memory Address into Physical Flash Memory Address」と名付けられたセクタに基づく。上のデータ書き込み作動に記載したように、有効なデータはＷブロック又はＱバッファにストアされ得る。読み込まれるべきデータがＱバッファによって取り扱われないＷブロックに配置されていることを制御器１１０が見つけたとき、Ｗブロック内のデータは有効になり、データのこのレンジはアプリケーションに戻され得る。読み込まれるべきデータが、Ｑバッファによって取り扱われているＷブロックに配置されているならば、実在の戻されたデータは、Ｗブロックのデータが有効か否かに依存して、Ｗブロック又はＱバッファのどちらかから来る。新しいデータがＱバッファに対応して書き込まれた後、Ｗブロックの古いデータがｄｉｒｔｙとマークされるので、有効になっているデータの一つのコピーとなりうる。
（Ｄ）ブロックリサイクリング
上述したように、本発明のフラッシュメモリシステムの特徴の一つは、ブロックが種々のカテゴリ内に分割され、各々が特定の機能を実行するように設計されることである。上の例はまた、Ｑブロックの一定の供給の必要性を示す。更に、ダーティブロックは、放棄される必要がある。フラッシュメモリシステムのブロックの数が有限なので、これらのダーティブロックをＱブロックに変える必要がある。本アーキテクチャでは、ブロックは一つのカテゴリから別のカテゴリに変形することができる。その結果、Ｑブロックの明らかな無限の供給がある。
次に、物理ブロックの変形を記載する。本発明では、メモリブロックは以下のカテゴリの内の１つに配置され得る：消去可能−クリーン（「Ｅ／Ｃ」）、バッド（ｂａｄ）（「Ｂ」）、メインワーキングブロック（「Ｗ」）、シーケンシャルバッファ（「Ｑ」）、及び、非シーケンシャルバッファ（「Ｘ」）。Ｘバッファは、上述のシーケンシャル書き込みに使用されるＱバッファと異なる、非シーケンシャル書き込みに使用される。非シーケンシャル書き込みの詳細は、個々の項で詳細に記載する。
フラッシュメモリの特徴の一つは、ブロックが作動中に不完全となることである。これらのブロックはマークされるので、それらは再び使用されない。Ｂカテゴリのブロックは不完全なブロックである。このカテゴリはここに包含されているので、ブロック変形の完全なピクチャは表されない。
これらのカテゴリの間の関係は、図５に示されている。このアーキテクチャでは、Ｗブロック（例えば、ブロック１７２乃至１７４）が、線形アドレッシングスキームでデータをストアするのに使用される。従って、各Ｗブロックはそのスキームの所定のアドレスレンジと関連している。多くの状況では、多数のＷブロックがある。データはＷブロックに直接書き込まれない。新しいデータの書き込みは、Ｑバッファ１７６又はＸバッファ１７７のいずれかに差し向けられ得る。この実施形態では、Ｑバッファは新しいデータのシーケンシャル書き込みのために使用され、Ｘバッファは新しいデータの非シーケンシャル書き込みに使用される。必要なときに、（矢印１７８及び１７９によって示した）Ｅ／Ｃカテゴリの（ブロック１８１乃至１８３のような）クリーンブロックのプールから、Ｑ及びＸバッファは得られる。古い又は有効なデータを備えるＷブロックは、ｄｉｒｔｙとマークされ、次いで、（矢印１８５で示した）Ｅ／Ｃカテゴリに配置される。Ｅ／Ｃカテゴリのダーティブロックは、クリーンブロックを作るために消去される。（以下に詳細に述べるような）適切な時間で、Ｑバッファが（矢印１８６によって示された）Ｗブロックに変更され、Ｘバッファが（両方向矢印１７９によって示された）Ｅ／Ｃカテゴリに配置され得る。幾つかのブロックが検出されたならば、それらはＢカテゴリ（例えば、ブロック１９１乃至１９３）内に配置され得る。これは、図５の矢印１９５乃至１９７によって示される。
図１Ｃと関連して上述したように、各ブロックは拡張領域１４８を有する。この領域は、ブロックのカテゴリを決定するのに使用され得る属性情報をストアする。属性情報の詳細は以下に記載する。
（Ｅ）ブロック及びセクタのカテゴリの識別
上述したことは、本フラッシュメモリシステムのアーキテクチャである。その中でデータを更新し、そこからデータを検索する、セクタベースアドレッシングスキームに関連してデータをストアすることを取り扱うことができる。アーキテクチャの一つの態様は、ブロックがカテゴリ内に分割されることである。従って、ブロックに関連しているカテゴリを決定する必要がある。
図１Ｃと関連して指摘したように、各セクタはセクタ属性領域を有し、各ブロックは、セクタの状況情報をストアするための拡張領域と、ブロックのカテゴリ情報とをそれぞれ有する。
セクタ属性領域及び拡張領域を使用するための他の方法は、本発明と同じ発明者によって同じ日付で出願された「Method and System for Managing a Flash Memory Mass Storage System」（代理人ドケット番号１７５３８．８７１）と名付けられた特許出願に開示されている。「Method and System for Managing a Flash Memory Mass Storage System」特許出願の開示は、リファレンスとしてここに組み込む。
（Ｆ）変形実施形態：暗示ダーティ
本発明のアーキテクチャがフレキシブルであり、フラッシュメモリの特定の特徴から生ずる問題を取り扱うことができることは、上記記載から分かる。しかしながら、性能を更に向上することが可能である。「暗示ダーティ」と呼ばれる変形プロシージャが、本発明の利点として使用され得る。以下に説明するように、このプロシージャは、回数を減少させ、フラッシュメモリが古いデータ・ダーティを作る目的でプログラムされている必要がある。プログラミングのための時間の長さが比較的長いので、このプロシージャは本発明のフラッシュメモリシステムの性能を向上させることができる。
暗示のダーティプロシージャを図示した例を図６Ｄ乃至６Ｆに示す。このプロシージャと（図２Ｂ乃至２Ｄに記載した）通常のプロシージャとの間の相違を図示するために、対応する通常のプロシージャを図６Ａ乃至６Ｃに示す。図６Ａは、Ｗブロック７６２の全てのセクタが、（「ｕｓｅｄ」とラベル付けされた）データをストアするのに使用されていることを示す。一方、Ｗブロック７６２を取扱うＱバッファ７６４の全てのセクタは、（「ｕｎｕｓｅｄ」とラベル付けされ）使用されていない。従って、Ｑバッファ７６４はクリーンバッファである。図６Ｂは、Ｑバッファ７６４の使用されていないセクタの幾つかが（「ｕｎｕｓｅｄｕｓｅｄ」とラベル付けされ、ここで「ｕｓｅｄ」と呼ばれる）データをストアするのに使用される。Ｗブロック７６２の対応するセクタは、（「ｕｓｅｄ  ｄｉｒｔｙ」とラベル付けされ、ここでは「ｄｉｒｔｙ」と呼ばれる）マークされたダーティである。Ｗブロック７６２をきれいにする必要があるとき、（即ち、「ｕｓｅｄ」とラベル付けされ、「ｄｉｒｔｙ」でない）その中で、全ての有効なデータがＱバッファ７６４にコピーされる必要がある。図６Ｃは、クリーンアップ・オペレーションの後の、Ｑバッファ７６４及びＷブロック７６２を示す。Ｑバッファ７６４の全てのセクタがいま、マークされた「ｕｓｅｄ」であり、Ｗブロック７６２の全てのセクタがいま、マークされた「ｄｉｒｔｙ」である。
図６Ａに対応する暗示のダーティプロシージャにおける状況を、図６Ｄに示す。再び、Ｗブロック７６６の全てのセクタが、（「ｕｓｅｄ」とラベル付けされた）データをストアするのに使用される。一方、Ｑバッファ７６８の全てのセクタは、（「ｕｎｕｓｅｄ」とラベル付けされ）使用されない。図６Ｅは、Ｑバッファ７６８の使用されていないセクタの幾つかが、（「ｕｎｕｓｅｄ  ｕｓｅｄ」とラベル付けされ、ここでは「ｕｓｅｄ」と呼ぶ）データをストアするのに使用される。しかしながら、Ｗブロック７６６における対応するセクタは、マークされたダーティではない。従って、Ｗブロック７６６における全てのセクタは、「ｕｓｅｄ」状態のままである。Ｑバッファ７６８の対応するセクタが「ｕｓｅｄ」とラベル付けされているならば、それらは考慮されたダーティであり得るので、Ｗブロック７６６における対応するセクタをマークする必要はない。Ｗブロック７６６をきれいにする必要があるとき、Ｑバッファは最初に走査される。Ｑバッファ７６８の「ｕｎｕｓｅｄ」セクタに対応するＷブロック７６６のセクタだけがＱバッファにコピーされる必要がある。図６Ｆは、クリーンアップ・オペレーションの結果を示す。Ｑバッファ７６８の全てのセクタはいま、コピーされた後に、「ｕｓｅｄ」とラベル付けされる。しかしながら、Ｗブロック７６６のセクタをマークする必要はない。その結果、セクタ・ダーティをマークする目的のためにＷブロック７６６をプログラムする必要はない。従って、オペレーションは簡略化され、性能が向上する。
暗示のダーティプロシージャを使用して処理されたデータを読み込む際に、Ｑバッファは最初に走査される必要がある。Ｑバッファのデータが「ｕｓｅｄ」とマークされているならば、このデータは有効なデータである。Ｑバッファのデータが「ｕｎｕｓｅｄ」とマークされているならば、有効なデータを見つけるためにＷブロックの対応するセクタに行く必要がある。
（Ｇ）変形実施形態：非シーケンシャル書き込み及び読み込み
上述したＷブロック、Ｑバッファ及び消去キューを使用したフラッシュメモリシステムをセットアップすることが可能であるけれども、このシステムはデータのランダム更新を有効に取扱うことができない。要求を更新するセクタがシーケンシャルに到着せずにランダムであるならば、本システムはＱバッファを頻繁にきれいにする必要がある。このクリーンアッププロシージャは有効なセクタをＷブロックからＱバッファに移動させることを含む。フラッシュメモリのプログラム速度が比較的遅いので、これは時間消費プロセスである。全ての時間で書き込み要求が異なるＷブロックに降下する最悪の場合を考慮する。この状況では、セクタが書き込まれているときはいつでも、システムは、新しい書き込み要求に関して新しいＱバッファを割り当てるためにＱバッファをきれいにしなければならない。古いＷブロックに１つだけダーティなセクタがあるので、他の全ての有効なセクタを古いＱバッファ内に移動させるべきである。１つのセクタを書き込むオーバーヘッドは、この最悪の場合では非常に大きい。この性能発行を乗り越えるために、ランダム書き込みを有効に取扱う新しい機構を設計するべきである。（Ｘバッファとも呼ばれる）非シーケンシャルバッファはこの目的のために設計された。
非シーケンシャルバッファはバッファランダム書き込みし、（Ｑバッファとも呼ばれる）シーケンシャルバッファは、バッファシーケンシャル書き込みのために設計される。書き込み要求を受け入れるときはいつでも、本システムは、要求がシーケンシャルか否シーケンシャルかどうか最初に評価する。シーケンシャル書き込みのデータがＱバッファに置かれる。非シーケンシャル書き込みのデータは、この要求されたアドレスの有効なデータがＱバッファに存在しないならば、Ｘバッファ内に置かれる。さもなければ、それはＱバッファ内にも置かれ得る。本発明では、Ｑバッファのセクタがダーティとマークされないので、この制約は必要である。有効なセクタがＱバッファに存在するとき、非シーケンシャル書き込みのデータがＸバッファ内に置かれるならば、Ｑバッファの有効なセクタをダーティとマークする。ついに、ＱバッファはＷブロック内に変更される。これが生じるとき、Ｗブロックの全ての有効なデータを、Ｑバッファの対応するその位置に移動する。Ｘバッファ内に置かれる非シーケンシャル書き込みのデータを、Ｑバッファのその対応する位置に移動する。フラッシュメモリが、消去する前に上書きすることができないので、このことは可能ではない。
全ての書き込み要求を、最初にシーケンシャル又は非シーケンシャル書き込みに分類する。以下で、簡単な原理に基づいてシーケンシャルと非シーケンシャル書き込みを定義する。Ｒがリファレンスセクタアドレスであり、Ｓ（ｎ）がｎ番目の書き込み要求のセクタアドレスであると仮定する。
Ｓ（ｎ）＝（Ｒ＋１）ｍｏｄ  ｍ
ならば、ｎ番目の書き込み要求はシーケンシャルであり、
ここで、ｍは総セクタ数あり、
ｍｏｄはモジュロ演算である。
ｎ番目の書き込み要求がシーケンシャルならば、リファレンスセクタアドレスは、Ｓ（ｎ）の新しい値を割り当てられる。さもなければ、Ｒの値は更新されない。非シーケンシャル書き込みは、シーケンシャルでない全ての書き込みを参照する。上述の定義がシーケンシャル書き込みの基本的な態様を記載しているけれども、それは全ての命令された書き込みシーケンスを受け取ることを可能にしているわけではない。論理セクタアドレス１，２，３，５，６，７，８によって示された書き込み要求のオーダを考える。最初の３つの要求は、上の定義にしたがったシーケンシャル書き込みである。３番目の書き込みが完了したとき、３番目の書き込みがシーケンシャル書き込みであるので、リファレンスセクタアドレスは３の値となるように更新される。５の論理セクタアドレスを備える４番目の書き込みは、非シーケンシャル書き込みとして分類されるので、リファレンスセクタアドレスは更新されない。上の定義に基づいて、４番目の要求に続く全ての要求はまた、リファレンスセクタアドレスが３であるので、非シーケンシャルとして分類される。書き込み要求５，６，７及び８が命令された順番で到着することが明らかであり、シーケンシャルとして分類されるべきである。この例に見られるように、非シーケンシャル書き込みを更にチェックすることが要求されるので、非シーケンシャル書き込みに続く書き込みの命令されたシーケンスは識別されない。いかなる非シーケンシャル書き込みに関しても、以下の条件はチェックされるべきである：
上の定義に従った非シーケンシャル書き込みＳ（ｎ）が、
Ｓ（ｎ）＝（Ｓ（ｎ−１）＋１）ｍｏｄ  ｍ
を満たし、
ここで、Ｓ（ｎ−１）が以前の書き込み要求の論理セクタアドレスであるならば、非シーケンシャル書き込みＳ（ｎ）がシーケンシャル書き込みとなるように定義され、リファレンスセクタアドレスＲはＳ（ｎ）の値となるように更新される。
この定義は、非シーケンシャル書き込みが以前の書き込み要求の論理セクタアドレスをチェックすることによってシーケンシャル書き込みとして分類されることができることを示す。実際の実施では、種々の以前の書き込み要求をチェックする必要がある。更に、シーケンシャル書き込みをチェックする規則は、書き込みシーケンスの現在のパターンに適合するように動的に変化させることができる。例えば、同様の規則は、逆転されたシーケンシャル書き込みを受け取るように適用され、書き込みシーケンスの論理セクタアドレスは降順で整列される。
（１）シーケンシャル及び非シーケンシャルバッファを使用した書き込み
フラッシュメモリシステム１００におけるデータを読み込み且つ書き込むプロシージャをいま記載する。図７は、新規又は更新データがシステム１００の適切なブロックに書き込まれる方法を示すフローチャート２５０である。フローチャートはポイント２５２で開始する。ステップ２５４で、（図１Ａに示した）制御器１１０は、入力データの線形セクタアドレスを受け取る。次いで、制御器１１０は、線形セクタアドレスを論理ブロック及びセクタ座標に変換する（ステップ２５６）。この実施形態では、セクタの書き込みを同時に実行する。ステップ２６８では、制御器１１０は、入力データがシーケンシャル（即ち、Ｑ）バッファ又は非シーケンシャル（即ち、Ｘ）バッファのどちらに書き込まれるべきか判断する。書き込みがシーケンシャルバッファで実行されるならば、制御器１１０は、この入力データのセクタアドレスが、シーケンシャルバッファに既に存在するデータのアドレスと同じであるかどうか判断する（ステップ２６０）。その答えが否ならば、入力データはシーケンシャルバッファに書き込まれる（ステップ２６２）。次いで、制御器１１０は、入力データセクタアドレスが否シーケンシャルバッファに既に存在するデータのアドレスと同じであるか判断する（ステップ２６４）。その答えが正ならは、入力データと同じセクタアドレスを有する非シーケンシャルバッファのセクタをダーティとマークする（ステップ２６６）。次いで、フローチャート２５０は終了する（ステップ２６８）。ステップ２６４に対する答えが否ならば、フローチャート２５０はステップ２７０に分岐し、即ち、入力データセクタアドレスに対応するＷブロックをダーティとマークする。次いでフローチャート２５０は終了する。
入力データが、以前の非シーケンシャル書き込みの結果として非シーケンシャルバッファに以前にストアされたデータを更新するので、ステップ２６４及び２６６を実行することは重要である。従って、このデータはダーティとマークするのに必要である。
ステップ２６０に戻ると、答えが（入力データアドレスがシーケンシャルバッファにおけるデータのアドレスと同じであることを含む）正であるならば、制御器１１０は、シーケンシャルバッファをＷブロックに切りかえる（ステップ２７２）。新しいシーケンシャルバッファが、消去キューから得られる。次いで、入力データを新しいシーケンシャルバッファに書き込む（ステップ２７４）。次いで、（入力データと同じアドレスを有するデータを包含する）新しいＷブロックをダーティとマークする（ステップ２７０）。次いで、フローチャートは終了する。
フラッシュメモリが消去の前に上書きできないので、ステップ２７２を実行することは重要である。従って、いったんシーケンシャルバッファのセクタがデータで以前に書き込まれているならば、同じセクタは再び書き込まれることはできない。その結果、新しいシーケンシャルバッファは、新しいデータが書き込まれる前に、割り当てられなければならない。非シーケンシャル書き込みに関する状況をいま記載する。ステップ２８０では、制御器１１０は、入力データアドレスがシーケンシャルバッファにおけるアドレスと同じであるかどうか判断する。その答えが否ならば、入力データを、非シーケンシャルバッファにおいて次に入手可能なセクタに追加する（ステップ２８２）。非シーケンシャルバッファにおける連続のセクタが完全に異なるアドレスを有しているので、完全なアドレスをまた、非シーケンシャルバッファに書き込む。次いで、制御器は、同じアドレスを有するデータが、非シーケンシャルバッファに以前に書きこまれているかどうか判断する（ステップ２８４）。答えが否ならば、フローチャート２５０はステップ２７０に分岐し、即ち、入力データアドレスに対応するＷブロックのセクタをダーティとマークする。次いで、フローチャート２５０は終了する。答えが正ならは、非シーケンシャルバッファの以前に書き込まれたデータをダーティとマークする（ステップ２８６）。フローチャート２５０は、ステップ２７０に分岐し、即ち、入力データアドレスに対応するＷブロックにおけるセクタをダーティとマークする。次いで、フローチャート２５０は終了する。
ステップ２８０に戻ると、答えが（入力データアドレスがシーケンシャルバッファにおけるデータのアドレスと同じであることを含む）正であるならば、制御器１１０はシーケンシャルバッファをＷブロックに切りかえる（ステップ２７２）。入力データは、この場合において非シーケンシャルバッファに書き込まれる必要がない。その代わり、新しいシーケンシャルバッファが消去キューから割り当てられる。次いで、入力データを新しいシーケンシャルバッファに書き込む（ステップ２７４）。次いで、（ステップ２７２で作り出され、入力データとして同じアドレスを有するデータを包含する）新しいＷブロックをダーティとマークする（ステップ２７０）。次いで、フローチャート２５０は終了する。
上の実施形態では、シーケンシャル及び非シーケンシャルバッファは、対応するＷブロックダーティをマークする前に書き込まれる。オペレーションのこの命令は、新しいデータが正しく書き込まれるまで、古いデータを保持することを保証する。Ｗブロックが最初にダーティとマークされ、新しいデータをシーケンシャル又は非シーケンシャルバッファに書き込む際に問題があるならば、古いデータを回復させることは不可能である。これは、同じアドレスを有する１つ以上のダーティＷブロックのためである。従って、ダーティブロックが最も最近マークされたダーティなブロックであることを知ることが不可能である。
（２）シーケンシャル及び非シーケンシャルバッファを含む読み込み
単一のセクタのデータを読み込む際のプロシージャを図８のフローチャート３００に示す。フローチャート３００はポイント３０２で始まる。ステップ３０４では、制御器１１０は関心のあるセクタの線形アドレスを受け取る。ステップ３０６では、制御器１１０は、上述したマッピングを用いて、線形アドレスを、Ｗブロック及びセクタ座標に変換する。ステップ３０８では、制御器１１０は、所定のセクタがステップ３０６で決定されたＷブロックにあるかどうか判断する。その答えが正ならば、出板をＷブロックから読み込む（ステップ３１０）。フローチャート３００は終了する（ステップ３１２）。
その答えが否ならば、シーケンシャルバッファを、それが所望のセクタを包含するかどうか判断するためにサーチする（ステップ３１４）。その答えが正ならば、データをシーケンシャルバッファから読み込む（ステップ３１６）。フローチャート３００は終了する（ステップ３１８）。ステップ３１４に対する答えが否ならば、データを非シーケンシャルバッファから読み込む（ステップ３２０）。フローチャート３００は終了する（ステップ３２２）。
（３）シーケンシャル及び非シーケンシャル書き込みを図示する例
この項は、ブロックサイクリング、シーケンシャル書き込み及び非シーケンシャル書き込みとの間の対話を更に図示することを提供する。対話を図示するための例をここで提供し、図９に示す。簡単のために、ブロックＩＤ１乃至４を有する４つの物理ブロックがあると仮定する。最初に、ブロックは、ＷブロックＷ１及びＷ２として機能するブロックＩＤ１及び２をそれぞれ有し、ブロックは、Ｑバッファとして機能する３のブロックＩＤと、Ｘバッファとして機能する最後の物理ブロックとを有する。ブロックＩＤとカテゴリとの間のマッピングを、部六マップテーブル２１０に示す。更に、各ブロックが４つのセクタ（Ｓ１乃至Ｓ４）を有すると仮定する。この例では、データが以下のセクタ：（Ｗ１，Ｓ３），（Ｗ１，Ｓ４），（Ｗ１，Ｓ１），（Ｗ２、Ｓ１）に順番に書き込まれる必要があることを仮定する。最初に、２つのＷブロックを（シンボル「Ｖ」によって図３に示す）有効なデータを包含するように仮定し、Ｑ及びＸバッファを（シンボル「Ｅ」によって図９に示す）空となるように仮定する。
この例では、第１の書き込みはＷ１ブロックになされるので、ＱバッファはＷ１を処理するように割り当てられる。（Ｗ１，Ｓ３）にストアされるデータは、Ｑバッファの第３のセクタに書き込まれる。データがＱバッファ内に書き込まれた後、ブロックＷ１のセクタＳ３に存在するデータはダーティとマークされる（シンボル「Ｄ」によって図９に示す）。これがシーケンシャル書き込みであるので、同様なステップが、（Ｗ１，Ｓ４）内にストアされるべきデータを書き込む際に用いられる。このとき、Ｗ１の内容をボックス２１２に示し、Ｗ２の内容をボックス２１３に示し、Ｑバッファの内容をボックス２１４に示し、Ｘバッファの内容をボックス２１５に示す。
（Ｗ１，Ｓ１）に対する書き込みは、（Ｗ１，Ｓ４）のシーケンシャル命令に続かない。従って、データはＸバッファ内に書き込まれる（ボックス２１７参照）。Ｗ１ブロックのセクタＳ１はダーティとマークされる（ボックス２１８参照）。Ｗ２及びＱバッファには変更がない。
（Ｗ２，Ｓ２）に対する書き込みを今、記載する。この書き込みは、Ｑバッファのサービスレンジの外に落ちる。その結果、このＱバッファはクリーンアップされなければならないので、新しいＱバッファはこの書き込み要求を処理するために割り当てられる。Ｗ１ブロックに属するＸバッファの全ての有効なデータは、（図９の矢印２２０で示す）Ｑバッファに移動されなければならない。図３では、ＸバッファのセクタＳ１は、ダーティとマークされる（ボックス２２６参照）。Ｗ１ブロックに残った有効な全てのデータはまた、Ｑバッファに移動されなければならない（図９の矢印２２１参照）。次いで、Ｑバッファを（拡張領域の属性情報を変更することによって）新しいＷ１ブロックに変形する。古いＷ１ブロックをＥ／Ｃカテゴリに置く。
古いＷ１ブロックの消去後、それは使用可能になる。この例では、新しいＱバッファとして割り当てられる。このＱバッファはＷ２ブロックを処理するのに使用する。ブロックマップテーブルの内容を、ボックス２２４に示す一つに変更する。（４つのみのブロックの代わりに）多くのブロックを有するメモリシステムでは、新しいＱバッファは古いＷ１ブロックから来なければならないことはない。
（Ｗ２，Ｓ１）に関する新しいデータはいま、（シンボル「Ｖ」によって示す）新しいＱバッファのセクタＳ１に書き込まれる。Ｗ２ブロックの対応するセクタは、ダーティとマークされる（ボックス２２７参照）。
「Ｑバッファ・プロモーション」として本出願で参照される、書き込み要求がＱバッファのサービスレンジの外側である場合を取扱うために、ステップを図９に示す。
（Ｈ）変形実施形態：管理ユニット
上述したシステムは、大容量記憶システムとしてフラッシュメモリを使用するための有効なシステムである。規則的に、エントリバッファはＤＲＡＭ又はＳＲＡＭを使用して実行される。幾つかの状況では、本システムは、ＳＲＡＭの制限された寸法でシステム内で実行される（例えば、マイクロコントローラ）。ＳＲＡＭは不安リソース（scare resource）であるので、エントリバッファのサイズを減少することが望ましい。一つの方法は、多数のブロックを「管理ユニット」内にグループ化することである。エントリバッファの各レジスタは、管理ユニットの物理ＩＤをストアするのに使用される。管理ユニットの数がブロックの数より少ないので、エントリバッファのレジスタの数を減少させることができる。管理ユニットのサイズが、それらのコストパフォーマンス要求を満たすようにユーザによって定義することができる。
管理ユニットが使用される実施形態では、全てのブロックリサイクリング、クリーンアップ・オペレーション及びＱバッファ・プロモーションは、管理ユニットに基づいている。その結果、更なるデータが、（例えば、リサイクリング・オペレーションに移動される）各オペレーションで処理される必要がある。その結果、システムの性能は低下する。従って、管理ユニットの使用は、ＳＲＡＭと性能との間の取引を含む。この項の前に記載したシステムは、管理ユニットのサイズが１つのブロックである状況に対応し、最高の性能を有する。
（Ｉ）カテゴリ変化のさらなる詳細
カテゴリの変化をここで更に詳細に記載する。
（ａ）Ｑバッファに対するＥ／Ｃブロック
上で指摘したように、データをＷブロックに直接書き込むことができない。その代わり、ＱバッファはＷブロックに関する代理として役立つように割り当てられる。Ｗブロック内に通常書き込まれるデータは、最初にＱバッファに書き込まれる。Ｑバッファがいっぱいのとき、それは（その拡張領域の属性情報を変更することによって）Ｗブロックに変更される。シーケンシャル書き込みが生じ、この新しいデータが現在のＱバッファによって取扱われているＷブロックに配置されないときはいつでも、新しいＱバッファは新しいＷブロックに関する書き込みバッファとして役立つようにＥ／Ｃブロックから割り当てられる。新しいＱバッファが割り当てられる前に、古いＱバッファをまず、Ｗブロックに変更しなければならない。Ｅ／ＣブロックからＱバッファへの遷移は、その拡張領域の属性ビットの小さな数を変更することを含む。
（ｂ）Ｗブロックに対するＱバッファ
ＱバッファがＷブロックに変更されなければならない種々の状況がある。ある状態は、シーケンシャル書き込み要求がＱバッファのサービスレンジの外に落ちるときである。この状況は、Ｑバッファ遷移に対するＥ／Ｃブロックに関して上で詳細に説明した。別の状態は、Ｘバッファがいっぱいのときであり：Ｘバッファにバッファされた全てのデータは、データが属するＷブロックに戻されて書き込まれる必要がある（このプロシージャはＸバッファクリーンアップと呼ばれる）。この状況が生じ、Ｑバッファによって取扱われているＷブロックに属するＸバッファにデータがあるならは、ＱバッファをＷブロックに変更する。この遷移は、以下のステップを含む（このプロシージャを「Ｑバッファ・プロモーション」と呼ぶ）。
（ｉ）これらのセクタがＱバッファによって取扱われているＷブロックに属しているならば、ＸバッファからＱバッファに有効なセクタを移動する。Ｘバッファの遷移されたセクタにダーティを設定する。
（ii）ＷブロックからＱバッファの対応するセクタに有効なセクタを移動し、Ｗブロックの全ての遷移されたセクタをダーティとしてマークする。
（iii）ＱバッファがＷブロックの位置を置換するように、エントリバッファを変更する。
（iv）消去するために古いＷブロックを送る。
Ｘバッファ内の有効な全てのデータをクリーンアップするために、これらの有効なセクタのオーナを見つけるためにＸバッファにおける全ての有効なセクタを最初にスキャンする。Ｘバッファの有効なセクタの各オーナ（Ｗブロック）に関して、以下のステップを実行する：
（ｉ）オーナＷブロックに関するＱバッファとしてＥ／Ｃカテゴリからブロックを割り当てる（ＱバッファはＷブロックに関する書き込みバッファとして役立つ）。
（ii）上述したように「Ｑバッファ・プロモーション」プロシージャを実行する。
上のプロシージャを実行したとき、Ｘバッファの全てのデータを無効とマークする。このＸバッファをＥ／Ｃカテゴリに設定し、次いで、それが他のカテゴリに遷移されることができるように、クリーンアップする。次いで、新しいＸバッファをＥ／Ｃカテゴリのブロックから割り当てる。
（ｃ）Ｅ／Ｃブロックに対するＷブロック
ＷブロックからＥ／Ｃブロックへの遷移は、Ｑバッファプロモーションの最後のステップで生じる。
（ｄ）Ｅ／Ｃブロックに対するＸバッファ
ＸバッファからＥ／Ｃブロックへの遷移は、上述したＸバッファクリーンアップの最後のステップで生じる。
（ｅ）Ｘバッファに対するＥ／Ｃブロック
非シーケンシャル書き込みが生じ且つＸバッファが存在しないとき、若しくは、非シーケンシャル書き込みが生じ且つＸバッファがいっぱいのときに、Ｘバッファを必要とする。Ｘバッファが必要なとき、Ｅ／ＣカテゴリからのブロックがＸバッファに遷移される。Ｅ／ＣからＸへの遷移だけが、Ｅ／Ｃブロックの拡張領域で幾つかの情報を変更することを含む。
（ｆ）Ｂブロックに対するＱバッファ
書き込みがＱバッファ失敗を試みるとき、ＱバッファからＢブロックへの遷移が生じる。この状況では、Ｑバッファは、バッド・ブロックとしてマークされ、データをストアするのに決して再び使用されない。
（ｇ）Ｂブロックに対するＸバッファ
書き込みがＸバッファ失敗を試みるとき、ＸバッファからＢブロックへの遷移が生じる。この状況では、Ｘバッファはバッド・ブロックとしてマークされ、データをストアするのに決して再び使用されない。
（ｈ）Ｂブロックに対するＥ／Ｃブロック
Ｅ／Ｃブロックがうまく消去されないとき、Ｅ／ＣブロックからＢブロックへの遷移が生じる。この状況では、Ｅ／Ｃブロックは、バッド・ブロックとしてマークされ、データをストアするのに決して再び使用されない。
本発明は、それの特定の実施形態を参照して記載してある。種々の修正及び変更が、本発明の広い精神及び範囲から逸脱することなく成され得る。従って、明細書及び図面は、限定的ではなく、例示として考慮されるべきであり、発明は提供される請求の範囲によってのみ制限される。
【図１Ａ】
0004005142.tif 000002
【図１Ｂ】
0004005142.tif 000003
【図１Ｃ】
0004005142.tif 000004
【図１Ｄ】
0004005142.tif 000005
【図２Ａ】
0004005142.tif 000006
【図２Ｂ】
0004005142.tif 000007
【図２Ｃ】
0004005142.tif 000008
【図２Ｄ】
0004005142.tif 000009
【図３】
0004005142.tif 000010
【図４】
0004005142.tif 000011
【図５】
0004005142.tif 000012
【図６Ａ】
0004005142.tif 000013
【図６Ｂ】
0004005142.tif 000014
【図６Ｃ】
0004005142.tif 000015
【図６Ｄ】
0004005142.tif 000016
【図６Ｅ】
0004005142.tif 000017
【図６Ｆ】
0004005142.tif 000018
【図７】
0004005142.tif 000019
【図８】
0004005142.tif 000020
【図９】
0004005142.tif 000021