JP2009503740A - データファイルを直接記憶する再プログラム可能な不揮発性メモリ内のファイルデータの索引付け - Google Patents
データファイルを直接記憶する再プログラム可能な不揮発性メモリ内のファイルデータの索引付け Download PDFInfo
- Publication number
- JP2009503740A JP2009503740A JP2008525157A JP2008525157A JP2009503740A JP 2009503740 A JP2009503740 A JP 2009503740A JP 2008525157 A JP2008525157 A JP 2008525157A JP 2008525157 A JP2008525157 A JP 2008525157A JP 2009503740 A JP2009503740 A JP 2009503740A
- Authority
- JP
- Japan
- Prior art keywords
- file
- data
- page
- block
- memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
各ファイルの一意の識別名およびファイル内のデータのオフセットを用いるが、メモリの中間論理アドレスまたは仮想アドレス空間のいずれも用いることなく、大容量の消去ブロックのフラッシュメモリシステムに直接ホストシステムのデータファイルの書き込みを行う。メモリのどこにファイルがあるかに関するディレクトリ情報を、ホストではなく、メモリシステムのコントローラが、メモリシステムに保持する。各データファイルを、ファイルディレクトリに一意に識別し、このディレクトリ情報が、ファイルを構成するデータグループのファイルインデックステーブル(FIT)内のエントリと、メモリ内のそれらの物理記憶位置を指す。
Description
本発明は、半導体フラッシュメモリなどの再プログラム可能な不揮発性メモリシステムの動作に関し、より具体的には、ホストデバイスとメモリとの間のインターフェイスを管理することに関する。
ホストシステム、メモリシステムおよび他の電子システムの外部インターフェイスを介して伝達したデータのアドレス指定を行う技術として、主に2つの技術がある。そのうちの1つは、システムが生成したり、または受信したりしたデータファイルのアドレスを、そのシステム用に設定した連続する論理アドレス空間の別個の範囲に対してマッピングを行うことである。通常、アドレス空間の広さは、システムが処理可能なアドレスの全域をカバーするのに十分な広さである。一例として、磁気ディスク記憶装置のドライブは、このような論理アドレス空間を介して、コンピュータまたは他のホストシステムと通信を行う。このアドレス空間の広さは、ディスクドライブの全データ記憶容量のアドレス指定を行うのに十分な広さである。2つの技術のうちの2つ目は、電子システムが生成したり、または受信したりしたデータファイルを一意に識別し、ファイル内で、オフセットにより理論的にそれらのデータのアドレス指定を行う。このアドレス指定方法の形式を、コンピュータまたは他のホストシステムと、“スマートカード”として周知の取り外し可能なメモリカードとの間で用いる。通常、顧客がスマートカードを利用して、顧客識別、バンキング、販売時点購入、ATMアクセス等を行う。
初期世代の市販のフラッシュメモリシステムでは、メモリセルの矩形アレイを、多数のグループのセルに分割していた。それぞれの記憶データ量は、標準ディスクドライブセクタ、すなわち、512バイトであった。通常、各グループは、16バイトといった追加のデータ量をさらに含んで、誤り訂正符号(ECC)と、ユーザデータおよび/または対応づけられたユーザデータを記憶するメモリセルグループに関する、考えられ得る他のオーバーヘッドデータとが記憶可能である。このようなグループそれぞれのメモリセルは、同時に消去可能な最小数のメモリセルである。すなわち、消去単位は、1つのデータセクタと、含まれる任意のオーバーヘッドデータとを記憶するのに効率的なメモリセルの数である。この種のメモリシステムの例が、米国特許第5,602,987号(特許文献1)および第6,426,893号(特許文献2)に記載されている。データで再プログラミングを行う前にメモリセルを消去することが、フラッシュメモリの特徴である。
フラッシュメモリシステムは、パーソナルコンピュータ、カメラ等の様々なホストに取り外し可能に接続する、メモリカードまたはフラッシュドライブの形で最も一般に提供されているものであるが、このようなホストシステムに埋め込まれている場合もある。データをメモリに書き込む際に、ホストは通常、一意の論理アドレスをメモリシステムの連続する仮想アドレス空間内のセクタ、クラスタまたは他のデータ単位に割り当てる。ディスクオペレーティングシステム(DOS)のように、ホストは、メモリシステムの論理アドレス空間内のアドレスにデータを書き込んだり、またアドレスからデータを読み出したりする。メモリシステム内のコントローラは、ホストから受け取った論理アドレスを、メモリアレイ内の物理アドレスに変換する。実際に、データをここに記憶し、次に、これらのアドレス変換を常に把握しておく。メモリシステムのデータ記憶容量は少なくとも、メモリシステムに対し定義した全論理アドレス空間についてアドレス指定可能なデータ量と同じである。
次世代のフラッシュメモリシステムでは、消去単位の大きさは、多数のデータセクタを記憶するのに十分なメモリセルブロックに増加した。メモリシステムが接続しているホストシステムが、セクタなどの小さな最小単位でデータのプログラミングを行ったり、また読み出しを行ったとしても、フラッシュメモリの1つの消去単位に多数のセクタが記憶してある。ホストが論理データセクタを更新したり、または置換したりすると、普通は、ブロック内のいくつかのデータセクタは使われなくなることがある。ブロック内に記憶してある任意のデータを上書きする前に全ブロックを消去する必要があるので、通常、前に消去が行われたもののデータ記憶容量がまだ残っている別のブロックに、新しいデータまたは更新データを記憶する。この処理により、メモリ内部の貴重な空間を占有する使われなくなったデータのある、もともとのブロックを空けるようにする。しかし、内部に有効なデータが残っている場合、そのブロックを消去することはできない。
従って、メモリの記憶容量をよりよく利用するために、有効な断片的データのコピー元のブロックを消去して、それらの全記憶容量を再利用できるように、これらの断片的データを消去ブロックにコピーすることにより、有効な断片的データを統合したり、または集めたりすることが一般的に行われている。論理アドレス順にブロック内部のデータセクタをグループ化するためにデータのコピーを行うことも望ましいのは、これにより、データ読み出し速度と、読み出したデータをホストに送信する速度とが向上するからである。このようなデータコピーがかなり頻繁に行われると、メモリシステムの動作性能が低下してしまう。このことは特に、メモリの記憶容量が、システムの論理アドレス空間を介してホストがアドレス指定可能なデータ量を若干上回っている場合に、メモリシステムの動作に影響を与える典型的な場合である。この場合、ホストがプログラミングを行ったコマンドを実行する前に、データの統合や収集が必要になることもある。そして、結果としてプログラミングを行う時間が長くなる。
任意の半導体領域に記憶するデータのビット数を増やすために、メモリシステムの世代を経るにつれて、ブロックサイズは大きくなっていった。256データセクタ以上を記憶するブロックが一般的になっている。さらに、データのプログラミングと読み出しとを行う際の並列処理の程度を上げるために、2つ、4つ、あるいはそれ以上のブロック数の異なるアレイまたはサブアレイを理論的に接続して、メタブロックを構成するようにすることがしばしば行われている。このように容量が大きい動作単位をともに効率的に動作させることが、課題となっている。
このようなメモリシステムのための一般的なホストインターフェイスは、ディスクドライブとともに一般的に用いられるものと同様な論理アドレスインターフェイスである。メモリが接続しているホストが生成したファイルには、インターフェイスの論理アドレス空間内の一意のアドレスが割り当てられている。次に、メモリシステムは通常、論理アドレス空間と、メモリの物理ブロックまたはメタブロックとの間でデータのマッピングを行う。メモリシステムは、物理メモリに対してどのように論理アドレス空間のマッピングを行うかを常に把握しているが、ホストはこのことを知る必要はない。ホストは、論理アドレス空間内のそのデータファイルのアドレスを常に把握しているが、メモリシステムの動作には、このマッピングについてわかっている必要はない。
米国特許第5,602,987号
米国特許第6,426,893号
米国特許出願第11/060,248号
米国特許出願第10/915,039号
米国特許第5,570,315号
米国特許第5,774,397号
米国特許第6,046,935号
米国特許第6,373,746号
米国特許第6,456,528号
米国特許第6,522,580号
米国特許第6,771,536号
米国特許第6,781,877号
米国公開特許出願第2003/0147278号
米国公開特許出願第2003/0109093号
米国特許第6,763,424号
米国特許出願第10/749,831号
米国特許出願第10/750,155号
米国特許出願第10/917,888号
米国特許出願第10/917,867号
米国特許出願第10/917,889号
米国特許出願第10/917,725号
米国特許出願第11/192,220号
米国特許出願第11/192,386号
米国特許出願第11/191,686号
米国特許出願第10/749,189号
米国特許出願第10/841,118号
米国特許出願第11/016,271号
米国特許出願第10/897,049号
米国特許出願第11/022,369号
米国特許出願第11/196,869号
米国特許出願第11/316,577号
米国特許出願第11/382,232号
米国特許出願第11/382,224号
フラッシュメモリシステムのこのように大きな規模の消去ブロックの動作を効率的に行う際に、様々な度合いで確実に生じる問題を克服する技術が、たくさん開発されている。これに対して、本発明は、根本的な変更、すなわち、メモリとホストシステムとの間でデータを転送するインターフェイスの変更に基づいている。仮想アドレス空間内の論理アドレスを用いることにより、メモリとホストシステムとの間でデータ通信を行うことではなく、ホストが割り当てたファイル名によりデータファイルの識別を行い、ファイル内のアドレスのオフセットを行ってそれにアクセスする。メモリシステムは次に、各セクタまたは他の単位のデータが属するホストファイルのことがわかるようになる。ここで説明するファイル単位とは、連続オフセットアドレスなどにより順序づけられたデータセットであって、ホスト演算システム内で動作するアプリケーションプログラムが生成し、かつ一意に識別したデータセットである。
このことが、現在市販のメモリシステムの多くで用いられていないのは、ホストが現在では、ファイルを識別することなく、共通セットの論理アドレスにより、全てのファイル内のメモリシステムに対しデータの識別を行っているからである。論理アドレスを用いる代わりに、ファイルオブジェクトによってホストデータの識別を行うことにより、データの統合やガーベッジコレクションを頻繁に行う必要性を低減するように、メモリシステムのコントローラはデータを記憶することができる。従って、データのコピー動作の頻度と、コピーデータ量とが大幅に低減するので、これによりメモリシステムのデータのプログラミングと読み出し性能が向上する。さらに、メモリシステムのコントローラは、ホストファイルを記憶するメモリブロックのディレクトリおよびインデックステーブル情報を保持する。このため、現在、論理アドレスインターフェイスの管理に必要なファイルアロケーションテーブル(FAT)を、ホストが保持する必要がなくなる。
そうではなく、データグループによりファイルのデータの識別を行い、メモリ内のファイルのデータグループの位置をファイルインデックステーブル(FIT)に保持する。前に援用されている特許出願、特に米国特許出願第11/060,248号(特許文献3)で、より完全に記載されているように、データグループは、連続する連続オフセットアドレスおよび連続する物理メモリアドレスの両方を有するデータを含んでいる。前に援用されている特許出願にも記載されているように、各ファイルに対する有効なデータグループのインデックスを、それらのオフセットアドレスでFITに保持する。その一意のファイル識別子を用いることにより、ファイルディレクトリを介して任意のファイルにアクセスする。次に、ファイルのFITエントリへのアクセスが、ファイルのデータグループの物理位置となる。
典型的には、メモリシステムが接続するホストは、5つのファイルなどの、1度に開くあらかじめ設定した最大数のファイルとともに動作する。最大数のファイルがすでに開かれているときに、新しいファイルを開く必要があるというイベントでは、まず、ホストが現在開いているファイルを閉じる。追加データの書き込み、更新、または削除等を行うことによりファイルが変更する度に、開いているファイルのデータグループは頻繁に変わる。典型的には、ファイルのデータグループのFITリストの更新に必要なことは、ファイルのエントリを含んでいるページを読み出し、それらのエントリを修正し、次に、メモリの異なる位置に、修正したページの、あれば、典型的には同じメモリブロック内の消去ページの書き換えを行うことである。従って、そのページが変わる度に、ファイルディレクトリは、ファイルのFITエントリを含んでいる現在のページを示すことができなければならない。
ファイルディレクトリに入っているものすべての書き換えを行う必要なしに、アクティブファイルのデータグループのリストの更新を行うことが好ましい。開いているファイルのデータグループのアドレス指定を間接的に行う手法により、ファイルのFITエントリにアクセスする際に、ファイルディレクトリが、メモリの同じ位置を指したままにすることが可能になる。好ましくは、ファイルディレクトリが、ファイルの更新FITエントリを含んでいるページのアドレスを含んでいるFITエントリの、書き込みが行われた最後のページに含まれる、論理ポインタのアドレス指定を行う。ファイルのFITエントリの更新を行う度に、論理ポインタは変化するが、ファイルのファイルディレクトリのアドレスが変わる必要はない。
しかし、小さいファイルを数多く記憶する際に発生するように、メモリシステムに多数のファイルを記憶してある場合、このような間接アドレス指定が、効率的ではない。というのは、もちろん、それらのデータ記憶容量によるが、ディレクトリおよびFITページは、非常に多くのファイルのエントリを1度に納めることができるからである。結果として、ホストが閉じていたので、現在アクティブではないファイルに対し、好ましくは、ファイルディレクトリにより、インデックスエントリに直接アドレス指定を行う。間接アドレス指定の論理アドレスポインタの特徴は用いない。
従って、開いているファイルなどの、近い将来変わることが考えられるファイルのFITエントリの間接アドレス指定と、閉じているファイルへの直接アドレス指定との組み合わせは、好適な動作モードである。すなわち、アクティブでデータの書き込みが行われていたり、または更新が行われていたりする開いたファイルに対し、ファイルディレクトリは、ファイルディレクトリを修正する必要なく、アクティブファイルのインデックスエントリのセットを修正するように、ファイルの一意の識別子が識別したインデックスエントリのセットのFITの位置を、間接的に定義する。具体例では、ファイルのインデックスエントリの実際の物理位置との参照を行う、メモリ内の任意の位置のアドレス指定を行うファイルディレクトリにより、これを達成する。インデックスエントリの更新を行って移動する度に、この参照は変わるが、ファイルディレクトリを更新する必要はない。同時に、閉じているファイルに対し、一意のファイル識別子が識別したインデックスエントリのセットのFITの位置を、ファイルディレクトリが直接定義する。閉じているファイルに対するインデックスエントリの再配置は、開いているファイルに対するものよりずっと可能性が低い。
さらに、直接アドレス指定で用いるために、好ましくは、FITページのインデックスエントリを、FITへのポインタがファイルディレクトリの同じページに含まれているファイルのデータグループに制限する。従って、そのディレクトリページに記載されているファイルの1つ以上のFITエントリの更新を行う場合、ファイルディレクトリの1ページだけを、更新すればよい。そうしないと、ファイルの1つ以上のFITエントリの更新を行う場合、複数のファイルディレクトリページを頻繁に更新しなければならなくなる。
本発明の他の態様、利点、特徴および詳細については、添付の図面を参照して説明する、以下の例示の説明に含まれている。
ここで参照する特許、特許出願、論文、他の公報、文献および事柄は全て、事実上、その全体が本願明細書において参照により援用されている。定義上、または援用されている公報、文献または事柄と本願との間の用語のある程度の不一致または矛盾については、本願で用いる用語により明らかになるであろう。
フラッシュメモリシステムの概要
図1〜図8を参照して、一般的なフラッシュメモリシステムと、ホストデバイスとの典型的な動作とについて説明する。これは、本発明の様々な態様を実施するシステムである。図1のホストシステム1は、フラッシュメモリ2にデータを記憶し、フラッシュメモリ2からデータを検索する。フラッシュメモリをホストに埋め込むことが可能であるが、メモリ2については、より広く普及している形態のカードとし、機械的および電気的なコネクタである接続部分3および4を介してホストに取り外し可能に接続しているものとして例示する。現在、多くの異なるフラッシュメモリカードが市販されているが、一例として、コンパクトフラッシュ(CF)、マルチメディアカード(MMC)、セキュアデジタル(SD)、ミニSD、マイクロSD、メモリスティック、スマートメディアおよびトランスフラッシュという商標のもとで販売されている。これらのカードは、それらの標準化仕様により一意の機械的および/または電気的インターフェイスを有しているが、各カードに含まれるフラッシュメモリは非常に似通っている。これらのカードはすべて、本願の譲受人であるサンディスク コーポレイション(SanDisk Corporation) から入手できる。サンディスク コーポレイションは、クルーザー(Cruzer)という商標のもとで一連のフラッシュドライブも販売している。これは、ホストのUSBコンセントに接続することによりホストに接続するユニバーサル・シリアル・バス(USB)プラグを有する、小形パッケージのハンドヘルド形メモリシステムである。これらのメモリカードおよびフラッシュドライブはそれぞれ、ホストとインターフェイスをとり、内部のフラッシュメモリの動作を制御するコントローラを含んでいる。
図1〜図8を参照して、一般的なフラッシュメモリシステムと、ホストデバイスとの典型的な動作とについて説明する。これは、本発明の様々な態様を実施するシステムである。図1のホストシステム1は、フラッシュメモリ2にデータを記憶し、フラッシュメモリ2からデータを検索する。フラッシュメモリをホストに埋め込むことが可能であるが、メモリ2については、より広く普及している形態のカードとし、機械的および電気的なコネクタである接続部分3および4を介してホストに取り外し可能に接続しているものとして例示する。現在、多くの異なるフラッシュメモリカードが市販されているが、一例として、コンパクトフラッシュ(CF)、マルチメディアカード(MMC)、セキュアデジタル(SD)、ミニSD、マイクロSD、メモリスティック、スマートメディアおよびトランスフラッシュという商標のもとで販売されている。これらのカードは、それらの標準化仕様により一意の機械的および/または電気的インターフェイスを有しているが、各カードに含まれるフラッシュメモリは非常に似通っている。これらのカードはすべて、本願の譲受人であるサンディスク コーポレイション(SanDisk Corporation) から入手できる。サンディスク コーポレイションは、クルーザー(Cruzer)という商標のもとで一連のフラッシュドライブも販売している。これは、ホストのUSBコンセントに接続することによりホストに接続するユニバーサル・シリアル・バス(USB)プラグを有する、小形パッケージのハンドヘルド形メモリシステムである。これらのメモリカードおよびフラッシュドライブはそれぞれ、ホストとインターフェイスをとり、内部のフラッシュメモリの動作を制御するコントローラを含んでいる。
このようなメモリカードおよびフラッシュドライブを用いるホストシステムの数は多く、様々である。これらは、パーソナルコンピュータ(PC)、ラップトップや他の携帯用コンピュータ、携帯電話、個人用携帯情報端末(PDA)、デジタル静止画カメラ、デジタル動画カメラや携帯用オーディオプレーヤを含む。ホストは典型的には、1つ以上の種類のメモリカードまたはフラッシュドライブ用の組み込みコンセントを含んでいるが、メモリカードを接続するアダプタを必要とするものもある。メモリシステムは通常、それ自体のメモリコントローラおよびドライバを備えているが、メモリシステムの中には、メモリが接続しているホストが実行するソフトウェアの制御しか受け付けないものもある。コントローラを備えるメモリシステムのうち、特にホストに埋め込まれているものは、メモリ、コントローラおよびドライバが1つの集積回路チップ上に構成されているものがよくある。
図1のホストシステム1は、メモリ2が接続する限り、2つの主な部分である、回路およびソフトウェアの組み合わせから構成されていると見なすこともできる。これらは、アプリケーション5と、メモリ2とインターフェイスをとるドライバ部分6とである。パーソナルコンピュータでは、例えば、アプリケーション5は、文書作成、グラフィック、制御または他の広く普及しているアプリケーションソフトウェアを実行するプロセッサを含むことができる。主に1つのセットの機能を専用に実行するカメラ、携帯電話または他のホストシステムでは、アプリケーション5は、カメラが画像の撮影および保存を行うように動作させたり、携帯電話が電話をかけたり、また受けたりするように動作させたりする等のソフトウェアを含んでいる。
図1のメモリシステム2は、フラッシュメモリ7と、カードと接続したホストとフラッシュメモリとのインターフェイスをとってデータのやりとりを行いメモリ7を制御する回路8とを含んでいる。コントローラ8は典型的には、データプログラミングや読み出しを行う間に、ホスト1が用いるデータの論理アドレスと、メモリ7の物理アドレスとの間で変換を行う。
図2を参照して、図1の不揮発性メモリ2として用いられる典型的なフラッシュメモリシステムの回路について説明する。通常、システムコントローラは、システムバス13を介して、1つ以上の集積回路メモリチップと並列に接続している1つの集積回路チップ11上で実現される。このような1つのメモリチップ15を図2に示す。図に示されている特定のバス13は、データを送る個別のセットの導体17と、メモリアドレス用のセット19と、制御信号、状態信号用のセット21を含んでいる。あるいは、1つのセットの導体は、これらの3つの機能を時分割で実行するものであってもよい。さらに、2004年8月9日出願の米国特許出願第10/915,039号、現在公開されている公開特許出願第2006/0031593号である“リングバス構造およびフラッシュメモリシステムでのその用法(Ring Bus Structure and It's Use in Flash Memory Systems) ”(特許文献4)に記載のリングバスなどの、他の構成のシステムバスを用いることもできる。
典型的なコントローラチップ11は、インターフェイス回路25を介してシステムバス13とインターフェイスをとるそれ自体の内部バス23を有している。通常、バスに接続している主な機能は、(マイクロプロセッサまたはマイクロコントローラなどの)プロセッサ27と、システムを初期化する(“立ち上げる”)コードを含む読み出し専用メモリ(ROM)29と、メモリとホストとの間での送信データのバッファを主に行うのに用いられるランダムアクセスメモリ(RAM)31と、メモリとホストとの間でコントローラを介してやりとりするデータ用の誤り訂正符号(ECC)を計算し検証する回路33とである。コントローラバス23は、回路35を介してホストシステムとインターフェイスをとる。これは、メモリカード内にある図2のシステムの場合、コネクタ4の一部であるカードの外部接点37を介して行われる。コントローラ11の他の構成部品それぞれが、クロック39に接続し、これを用いる。
システムバス13と接続している他の構成部品とともに、メモリチップ15は典型的には、多数のサブアレイまたはプレーンとして構成されるメモリセルアレイを含んでいる。図を簡略化するために、このような2つのプレーン41および43を示しているが、このようなプレーンは4つまたは8つ用いられることもある。あるいは、チップ15のメモリセルアレイを、プレーンに分割しなくてもよい。しかし、分割した場合、各プレーンは、たいてい互いに独立して動作可能な列制御回路45および47を有している。回路45および47は、システムバス13のアドレス部19からそれらのそれぞれのメモリセルアレイのアドレスを受け取り、これらのアドレスを復号して、特定の1つ以上の個別のビット線49および51に対しアドレス指定を行う。アドレスバス19上で受け取ったアドレスに応じて、行制御回路55を介してワード線53のアドレス指定を行う。ソース電圧制御回路57および59は、Pウェル電圧制御回路61および63のように、それぞれのプレーンにも接続している。メモリチップ15がメモリセルアレイを1つ有し、かつシステムにこのようなチップが2つ以上ある場合には、それぞれのチップのアレイは、前述したマルチプレーンチップ内のプレーンすなわちサブアレイと同じように動作することになる。
システムバス13のデータ部分17に接続しているデータ入出力回路65および67それぞれを介して、データをプレーン41および43とやりとりする。回路65および67は、列制御回路45および47それぞれを介して、プレーンに接続した線69および71を通じて、メモリセルにプログラミングを行うデータと、各々のプレーンのメモリセルから読み出すデータとを供給する。
コントローラ11は、メモリチップ15の動作を制御し、データのプログラミング、データの読み出し、消去および各種の段取りを行うが、各メモリチップはまた、コントローラ11からのコマンドを実行し、このような機能を行う制御回路をいくつか含んでいる。インターフェイス回路73は、システムバス13の制御・状態部分21に接続している。コントローラからのコマンドを状態マシーン75に供給し、次にこれらのコマンドを実行するために、他の回路の特定の制御を行うようにする。図2に示すように、制御線77〜81は、状態マシーン75をこれらの他の回路に接続している。状態マシーン75からの状態情報を、線83を介してインターフェイス73に通信し、バス部21を介してコントローラ11に送信する。
NORなどの他のアーキテクチャをかわりに用いることもできるが、メモリセルアレイ41および43のNANDアーキテクチャが現在好適なものである。一例のNANDフラッシュメモリおよびメモリシステムの一部としてのそれらの動作については、米国特許第5,570,315号(特許文献5)、第5,774,397号(特許文献6)、第6,046,935号(特許文献7)、第6,373,746号(特許文献8)、第6,456,528号(特許文献9)、第6,522,580号(特許文献10)、第6,771,536号(特許文献11)および第6,781,877号(特許文献12)ならびに米国公開特許出願第2003/0147278号(特許文献13)を参照することができる。
図3は、一例のNANDアレイを示す回路図である。これは、図2のメモリシステムのメモリセルアレイ41の一部分である。多数のグローバルビット線が形成されているが、説明を簡略化するために、図3にはこのような線91〜94を4本だけ示す。これらのビット線のうちの1本と基準電位との間には、多数の直列接続メモリセルストリング97〜104が接続している。メモリセルストリング99を代表例として用いると、複数の電荷蓄積メモリセル107〜110が、ストリングのいずれかの端部に、選択トランジスタ111および112と直列で接続している。1本のストリングの選択トランジスタが導電性である場合、そのビット線と基準電位との間にストリングが接続している。次に、そのストリング内のメモリセルに対し1つずつ、プログラミングを行ったり、または読み出しを行ったりする。
メモリセルの多数のストリングそれぞれのメモリセル1つの電荷蓄積素子に対して、図3のワード線115〜118が個別に延在し、ゲート119および120が、ストリングの各端部で、選択トランジスタの状態を制御する。共通ワード線とコントロールゲート線115〜120とを共有するメモリセルストリングにより、1度に消去するメモリセルのブロック123を構成するようにする。このセルブロックは、物理的に1度に消去可能な最小数のセルを含んでいる。ワード線115〜118のうちの1本に沿った1行のメモリセルに対し、1度にプログラミングを行う。典型的には、NANDアレイの行に対し、所定の順序でプログラミングを行う。この場合、接地電位または別の共通電位に接続したストリングの端部に最も近いワード線118に沿った行から開始している。ワード線117に沿ったメモリセルの行に対しプログラミングを行い、これを次々に繰り返して、ブロック123全体に行う。最後に、ワード線115に沿った行に対しプログラミングを行う。
第2のブロック125も同様である。そのメモリセルストリングは第1のブロック123のストリングと同じグローバルビット線に接続しているが、ワード線およびコントロールゲート線のセットが異なっている。行制御回路55により、それらの適切な動作電圧でワード線およびコントロールゲートゲート線を駆動している。図2のプレーン1および2のようにシステムに2つ以上のプレーンすなわちサブアレイがある場合、一方のメモリアーキテクチャが、間に延在している共通ワード線を用いる。あるいは、共通ワード線を共有するプレーンすなわちサブアレイが3つ以上ある場合もある。他のメモリアーキテクチャでは、個別のプレーンすなわちサブアレイのワード線を別々に駆動する。
前に援用されているNAND特許および公開特許出願のいくつかに記載されているように、メモリシステムは、電荷蓄積素子または領域それぞれに3つ以上の検出可能なレベルの電荷を記憶するように動作し、これにより、それぞれ2つ以上のビットのデータを記憶する。メモリセルの電荷蓄積素子は大抵、一般的に導電性フローティングゲートであるが、あるいは、米国公開特許出願第2003/0109093号(特許文献14)に記載されているような非導電性誘電電荷補足材料とすることもできる。
図4は、一例として用いられるフラッシュメモリセルアレイ7(図1)の構成を示す概念図である。以下にさらに説明する。1つの集積メモリセルチップの上、2つのチップ(各チップに2つのプレーン)の上、または4つの別々のチップの上に、メモリセルの4つのプレーンすなわちサブアレイ131〜134を載置してもよい。以下の説明では、特定の配置は重要ではない。もちろん、1、2、8、16またはそれ以上などの他の数のプレーンが、システムにあってもよい。それぞれのプレーン131〜134上にあるブロック137、138、139および140のように、プレーンを、図4に示す矩形のメモリセルブロックに個別に分割する。各プレーンを、数十または数百のブロックに分割可能である。前述したように、メモリセルブロックは、物理的に1度に消去可能な最小数のメモリセルの消去単位である。しかし、並列処理が増えているので、ブロックの動作は大きいメタブロック単位で行われている。各プレーンから1つのブロックが、論理的にともにリンクしてメタブロックを形成している。図に示されている4つのブロック137〜140が、1つのメタブロック141を形成している。典型的には、メタブロック内のセルをすべて、ともに消去する。ブロック145〜148から形成されている第2のメタブロック143からわかるように、メタブロックの形成に用いられるブロックは、それぞれのプレーン内で同じ相対位置である必要はない。通常、プレーンすべてにメタブロックを延在することは好ましいが、システム性能を高くするには、異なるプレーンの1つ、2つまたは3つのブロックのいずれか、またはすべてから動的にメタブロックを形成する機能により、メモリシステムの動作を行うことができる。これにより、メタブロックの大きさを、1回のプログラミング動作で記憶できるデータ量と、密接に一致させることが可能になる。
図5に示すように、個別のブロックを順に、動作を行うためにメモリセルのページに分割する。ブロック131〜134それぞれのメモリセルを例えば、8つのページP0〜P7に分割する。あるいは、ブロック内でそれぞれ16、32またはそれ以上のメモリセルのページに分割してもよい。ページは、ブロック内でデータのプログラミングと読み出しを行う単位であり、1度にプログラミングを行う最小のデータ量を含むものである。図3のNANDアーキテクチャでは、ページは、ブロック内のワード線に沿ったメモリセルから形成されている。しかし、メモリシステム動作の並列処理を向上させるために、2つ以上のブロック内のこのようなページを、論理的にメタページにリンクしてもよい。図5にメタページ151を示す。これは、4つのブロック131〜134それぞれのうちの1つの物理ページから構成されている。メタページ151は例えば、4つのブロックそれぞれでページP2を含んでいるが、メタページのページは、それぞれのブロック内で必ずしも同じ相対位置にある必要はない。
4つのプレーンすべてで、並列に最大データ量のプログラミングと読み出しを行うことは好ましいが、システム性能を高くするには、異なるプレーンの別々のブロックにおける1つ、2つまたは3つのページのいずれかまたはすべてのメタページを形成するように、メモリシステムを動作させることもできる。これにより、プログラミングと読み出し動作を、並列に都合よく処理できるデータ量と適応可能なように一致させることができ、データのプログラミングを行わないメタページの一部が残ってしまうようなことを低減する。
図5に示すように、複数のプレーンの物理ページを構成するメタページは、それらの複数のプレーンのワード線の行に沿ってメモリセルを含んでいる。1本のワード線の行のセルすべてに対して同時にプログラミングを行うよりも、より一般には、2つ以上の交互に配置したグループで交互にプログラミングを行う。各グループは、(1つのブロック内の)1ページのデータ、または(複数のブロックにわたる)1つのメタページのデータを記憶してある。メモリセルに対し交互に1度にプログラミングを行うことにより、データレジスタおよびセンス増幅器を含む1単位の周辺回路を、ビット線ごとに配置する必要はなく、むしろ隣接するビット線の間で時分割で処理を行う。これにより、周辺回路に必要な基板空間の量を節約し、行に沿って高い密度でメモリセルを集積することが可能になる。あるいは、任意のメモリシステムで可能な並列処理を最大にするために、行に沿ったセル毎に同時にプログラミングを行うことが好ましい。
図3を参照すると、図に示されているように1つの行を配置するよりも、NANDストリングの少なくとも一方の端部に沿って2つの行の選択トランジスタ(図示せず)を配置することにより、行に沿ったメモリセルを1つおきにデータプログラミングが同時に行われることを、最も都合良く達成する。次に、1つの制御信号に応答して、一方の行の選択トランジスタを、ブロック内の他のストリングを1つおきにそれぞれのビット線に接続し、もう1つの制御信号に応答して、もう一方の行の選択トランジスタを、他のストリングを1つおきにはさまれるようにそれぞれのビット線に接続する。従って、2つのページのデータが、メモリセルの各行に書き込まれる。
典型的には、各論理ページのデータ量は、整数である1つ以上のデータセクタであり、従来では、各セクタは512バイトのデータを含んでいる。図6は、1ページまたは1メタページのデータの論理データページの2つのセクタ153および155を示す。各セクタには通常、記憶してある512バイトのユーザまたはシステムデータの部分157が含まれ、部分157のデータ、または物理ページ、またはこれを記憶しているブロックのいずれかに関するオーバーヘッドデータを別の数のバイト159として含んでいる。典型的には、オーバーヘッドデータのバイト数は16バイトであり、それぞれのセクタ153および155に対し全部で528バイトである。オーバーヘッド部分159は、プログラミングを行う間にデータ部分157から算出したECCと、その論理アドレスと、ブロックの消去と再プログラミングを行った実際の回数と、1つ以上の制御フラグと、動作電圧レベルなどとともに、このようなオーバーヘッドデータ159から算出したECCとを含んでもよい。あるいは、オーバーヘッドデータ159またはその一部を、他のブロックの異なるページに記憶してもよい。
メモリの並列処理が増えるに従って、メタブロックのデータ記憶容量が増え、データページおよびメタページの大きさも結果として増えることになる。そして、データページは、3つ以上のデータセクタを含むことになる。データページの2つのセクタと、メタページ毎に2つのデータページとで、1メタページには4つのセクタが存在する。従って、各メタページは2,048バイトのデータを記憶する。これは高い度合いの並列処理であり、行のメモリセルの数が増えるに従って、さらに度合いが高くなる。この理由により、1ページおよび1メタページのデータ量を増やすために、フラッシュメモリの幅が広がっていくことになる。
前に識別した、物理的に小さい再プログラム可能な不揮発性メモリカードおよびフラッシュドライブは、512メガバイト(MB)、1ギガバイト(GB)、2GBおよび4GBのデータ記憶容量で市販され、容量はさらに大きくなっている。図7は、ホストとこのような大容量メモリシステムとの間の最も一般的なインターフェイスを示す。ホストは、アプリケーションソフトウェア、またはホストが実行するファームウェアプログラムが生成したりまたは用いたりするデータファイルを処理する。一例として、文書処理のデータファイルであり、別の例として、コンピュータ援用設計(CAD)ソフトウェアの図面ファイルがあり、PC、ラップトップコンピュータ等の一般的なコンピュータホストに多く見受けられるものである。pdfフォーマットの文書もこのようなファイルである。スチルデジタルビデオカメラは、メモリカードに記憶する画像それぞれのデータファイルを生成する。携帯電話は、電話ディレクトリなどの内部メモリカード上のファイルからデータを利用する。PDAは、アドレスファイル、カレンダファイル等のいくつかの異なるファイルを記憶し、利用する。このようなアプリケーションのいずれにおいても、メモリカードは、ホストを動かすソフトウェアを含んでいる。
ホストシステムとメモリシステムとの間の、一般的な論理インターフェイスを図7に示す。連続する論理アドレス空間161は、メモリシステムに記憶する全データのアドレスを構成するのに十分な広さである。典型的には、ホストアドレス空間を、データクラスタの単位で分割する。任意のホストシステムが多数のデータセクタを含むように、各クラスタを設計してもよく、典型的には、4セクタから64セクタの間である。標準的なセクタは512バイトのデータを含んでいる。
図7の例には、3つのファイル1、2、3が生成されている。ホストシステム上で実行するアプリケーションプログラムにより、順序づけられたデータセットとして各ファイルを生成し、一意の名称または他の基準により識別する。ホストにより、ファイル1に対して、他のファイルにまだ割り当てられていない十分に利用可能な論理アドレス空間が割り当てられている。図に示されているファイル1は、利用可能な論理アドレスの連続する範囲に割り当てられている。アドレス範囲は一般に、ホストの動作を行うソフトウェアの特定の範囲などの、特定の目的のために割り当てられているので、ホストが論理アドレスをデータに割り当てているときにこれらのアドレスが利用されていないとしても、データの記憶が行えないようになっている。
ホストがファイル2を後で生成する場合、図7に示すように、ホストは同様に、論理アドレス空間161内の連続するアドレスの2つの異なる範囲を割り当てる。ファイルを連続する論理アドレスに割り当てる必要はないが、他のファイルにすでに割り当てられたアドレス範囲の間でアドレスが断片化することがある。次に、この例について、ホストがさらに生成した別のファイル3を、ファイル1、2および他のデータに前に割り当てられていないホストアドレス空間の他の部分に割り当てていることからわかる。
ファイルアロケーションテーブル(FAT)を保持することにより、ホストは、メモリ論理アドレス空間を常に把握している。これは、変換160を行って各種のホストファイルに対しホストが割り当てた論理アドレスを保持している。新しいファイルを記憶したり、他のファイルを削除したり、ファイルを変更したりする際等に、ホストは頻繁にFAT表の更新を行う。FAT表は典型的には、時折更新が行われる不揮発性メモリに保存したコピーとともに、ホストメモリに記憶する。コピーに対しては典型的には、他のデータファイルのように、論理アドレス空間を介して不揮発性メモリにアクセスする。ホストファイルを削除する場合、ホストは次に、削除ファイルに前に割り当てられた論理アドレスの割り当てを解除して、FAT表を更新することにより、他のデータファイルとともに利用可能であることを示す。
メモリシステムのコントローラが選択してファイルを記憶する物理位置について、ホストは無関係である。典型的なホストは、その各種のファイルに割り当てたその論理アドレス空間および論理アドレスについてのみわかっている。これに反して、メモリシステムは、典型的なホスト/カードインターフェイスを介して、データを書き込んだ論理アドレス空間の一部分についてだけわかっているが、特定のホストファイルに割り当てられた論理アドレス、またはホストファイルの数についてはわかっていない。メモリシステムのコントローラは、データの記憶または検索用にホストが提供した論理アドレスを、ホストデータを記憶してあるフラッシュメモリセルアレイ内の一意の物理アドレスに変換する。ブロック163は、これらの論理対物理アドレス変換の作業表を表し、これは、メモリシステムのコントローラが保持している。
メモリシステムのコントローラは、システム性能を高いレベルで維持するやり方で、メモリアレイ165のブロックおよびメタブロック内にデータファイルを記憶できるようにプログラミングが行われている。この図では、4つのプレーンすなわちサブアレイが用いられている。好ましくは、それぞれのプレーンのブロックから構成される全メタブロックにわたって、システムが実行可能な最大の度合いの並列処理で、データのプログラミングと読み出しが行われる。通常、メモリコントローラが用いる動作ファームウェアおよびデータを記憶するための保留ブロックとして、少なくとも1つのメタブロック167が割り当てられている。別のメタブロック169、または複数のメタブロックが、ホストを動かすソフトウェア、ホストFAT表等を記憶するために、割り当てられていることもある。大抵の物理記憶空間は、データファイルを記憶するために残されている。しかし、メモリコントローラは、その各種のファイルオブジェクト間でホストがどのように受信したデータを割り当てているかをわかっていない。典型的には、ホストと対話することによりメモリコントローラがわかっていることのすべては、ホストが特定の論理アドレスに書き込んだデータを、コントローラの論理対物理アドレス表163が保持する、対応する物理アドレスに記憶していることである。
典型的なメモリシステムでは、アドレス空間161に記憶するのに必要なデータ量以上に、余分なブロックの記憶容量が備えられている。1つ以上のこれらの余分なブロックを、メモリ寿命が経過する間に不良となる他のブロックと置換するための、冗長ブロックとして備えてもよい。個別のメタブロックに含まれるブロックの論理グループ化は、メタブロックにもともと割り当てられている不良ブロックと冗長ブロックを置換するというように、様々な理由で大抵行われる。典型的には、メタブロック171などの1つ以上の追加ブロックを、消去ブロックプールに保持する。ホストがデータをメモリシステムに書き込む場合、コントローラは、消去ブロックプールのメタブロック内の物理アドレスにホストが割り当てた論理アドレスを変換する。次に、論理アドレス空間161内のデータの記憶に用いられない他のメタブロックを消去し、次のデータ書き込み動作を行う間に用いる消去プールブロックとして指定する。好適な形態では、論理アドレス空間を、それぞれ物理メモリメタブロックの記憶容量と同じデータ量を含む論理グループに分割するので、メタブロックに対し論理グループの1対1マッピングが可能になる。
もともと記憶してあるデータが使われなくなったときは、特定のホスト論理アドレスに記憶してあるデータを新しいデータで頻繁に上書きする。これに対応して、メモリシステムのコントローラは、新しいデータを消去ブロックに書き込んで、次に、それらの論理アドレスの論理対物理アドレス表を変更して、それらの論理アドレスのデータを記憶してある新しい物理ブロックの識別を行う。次に、それらの論理アドレスのもともとのデータを含むブロックを消去し、新しいデータを記憶するのに利用できるようにする。書き込み開始時に消去ブロックプールからの前に消去したブロックの記憶容量が十分でない場合、現在のデータ書き込み動作が完了する前に、このような消去を頻繁に行う必要がある。これは、システムデータのプログラミング速度に悪影響を与えることになる。典型的には、メモリコントローラは、ホストが新しいデータをそれらの同じ論理アドレスに書き込むときに限って、ホストが任意の論理アドレスのデータを使わなくなったことを学習する。従って、メモリの多くのブロックが、このような無効なデータをある期間記憶していることになる。
集積回路メモリチップの領域を効率的に利用するために、ブロックおよびメタブロックの大きさが大きくなっている。このため、個別のデータ書き込みのかなりの部分が、メタブロックの記憶容量より小さい、多くの場合、ブロックの記憶容量よりも小さいデータ量を記憶することになる。通常、メモリシステムのコントローラは、新しいデータを消去プールメタブロックに向けるので、メタブロックの一部分に書き込みが行われなくなることになる。新しいデータが別のメタブロックに記憶してあるデータの更新である場合、望ましくは、それらの新しいデータメタページと隣接する論理アドレスを有する他のメタブロックからの残っている有効なメタページのデータについても、論理アドレス順で新しいメタブロックにコピーする。古いメタブロックを他の有効なデータメタページに保持してもよい。これは、時間の経過とともに個別のメタブロックの特定のメタページのデータが使われなくなって無効になり、このデータを、異なるメタブロックに書き込まれた同じ論理アドレスの新しいデータと置換することになる。
全論理アドレス空間161にわたってデータの記憶に十分な物理的メモリ空間を保持するために、このようなデータを定期的に圧縮したり、統合したりする(ガーベッジコレクションを行う)。できる限り実際に実行可能なように、メタブロック内のデータセクタをそれらの論理アドレスと同じ順序で保持することも望ましい。というのは、これにより、連続する論理アドレスデータの読み出しがより効率的になるからである。従って、典型的には、データ圧縮およびガーベジコレクションが、この追加の目的で行われる。部分ブロックデータの更新を受け取った際のメモリの管理およびメタブロックの利用の態様については、米国特許第6,763,424号(特許文献15)にいくつか記載されている。
典型的には、データ圧縮は、処理において無効なデータのあるメタページを無視して、メタブロックからのすべての有効なデータメタページの読み出しと、新しいメタブロックへのそれらの書き込みを行う。有効なデータのあるメタページを、記憶してあるデータの論理アドレス順と一致する物理アドレス順で配列することも好ましい。新しいメタブロックを占有するメタページの数が、古いメタブロックを占有していた数よりも少なくなっている。というのは、無効なデータを含むメタページを新しいメタブロックにコピーしていないからである。次に、古いブロックを消去し、新しいデータの記憶に利用できるようにする。次に、統合で得た追加したメタページの容量を、他のデータの記憶に用いることができる。
ガーベッジコレクションを行う間、連続する論理アドレスまたはほぼ連続する論理アドレスのある有効なデータのメタページを、2つ以上のメタブロックから集め、別のメタブロックに書き換える。通常、消去ブロックプールに1つである。有効なデータメタページすべてをもともとの2つ以上のメタブロックからコピーする場合、これらを消去して後で用いる。
特に、ホストからのコマンドが実行可能になる前に、データ統合またはガーベッジコレクションを行う必要がある場合、データ統合およびガーベッジコレクションには時間がかかり、メモリシステムの性能に影響を与えることがある。通常、メモリシステムのコントローラによりこのような動作のスケジュールをたてて、できる限りバックグラウンドで実行するが、これらの動作を行わなければならないので、コントローラは、このような動作が完了するまで、ホストにビジー状態信号を送信しなければならなくなる。ホストコマンドの実行が遅延可能な一例として、ホストがメモリに書き込みを行いたいデータをすべて記憶するのに、消去ブロックプール内の前に消去したメタブロックが十分なく、データ統合またはガーベッジコレクションが必要なので、1つ以上のメタブロックの有効なデータをはじめにクリアし、次に、消去する例が挙げられる。従って、このような混乱を最小にするために、メモリ制御を管理することが注目される。多くのこのような技術について、2003年12月30日出願の米国特許出願第10/749,831号、現在公開されている公開特許出願第2005/0144358号である“大容量消去ブロックを有する不揮発性メモリシステムの管理(Management of Non-Volatile Memory Systems Having Large Erase Blocks) ”(特許文献16)、2003年12月30日出願の米国特許出願第10/750,155号“ブロック管理システムを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Block Management System) ”(特許文献17)、2004年8月13日出願の米国特許出願第10/917,888号、現在公開されている公開特許出願第2005/0141313号である“メモリプレーン配列を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Memory Planes Alignment)”(特許文献18)、現在公開されている公開特許出願第2005/0141312号の2004年8月13日出願の米国特許出願第10/917,867号(特許文献19)、2004年8月13日出願の米国特許出願第10/917,889号、現在公開されている公開特許出願第2005/0166087号である“位相プログラム障害処理を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Phased Program Failure Handling) ”(特許文献20)、2004年8月13日出願の米国特許出願第10/917,725号、現在公開されている公開特許出願第2005/0144365号である“制御データ管理を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Control Data Management) ”(特許文献21)、2005年7月27日出願の米国特許出願第11/192,220号“マルチストリーム更新トラックを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Multi-Stream Update Tracking)”(特許文献22)、2005年7月27日出願の米国特許出願第11/192,386号“スクラッチパッドおよび更新ブロックのための向上した索引付けを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks) ”(特許文献23)、2005年7月27日出願の米国特許出願第11/191,686号“マルチストリーム更新を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Multi-Stream Updating)”(特許文献24)に記載されている。
大容量消去ブロックを有するメモリアレイの動作を効率的に制御する課題の1つは、任意の書き込み動作の間に記憶が行われているデータセクタの数を、メモリのブロックの容量および境界と一致させ、調整することである。アプローチの1つは、全メタブロックを満杯にする量よりも少ないデータ量を記憶する必要がある場合、ホストからの新しいデータの記憶に用いられるメタブロックを、最大数のブロックよりも少ない数で構成することである。適応メタブロックの利用については、2003年12月30日出願の米国特許出願第10/749,189号、現在公開されている公開特許出願第2005/0144357号である“適応メタブロック(Adaptive Metablocks) ”(特許文献25)に記載されている。データブロック間の境界およびメタブロック間の物理境界のフィッティングについては、現在公開されている公開特許出願第2005/0144363号の2004年5月7日出願の米国特許出願第10/841,118号(特許文献26)、2004年12月16日出願の米国特許出願第11/016,271号、現在公開されている公開特許出願第2005/0144367号である“データランプログラミング(Data Run Programming)”(特許文献27)に記載されている。
メモリコントローラは、FAT表からのデータも用いる。これは、ホストが不揮発性メモリに記憶したもので、メモリシステムの動作をより効率的に行う。このような利用の1つは、ホストが識別したデータが使われなくなって、それらの論理アドレスの割り当てを解除する際に、学習することである。これを知ることにより、通常、ホストが書き込みを行う新しいデータをそれらの論理アドレスに書き込むことにより学習する前に、メモリコントローラが、このような無効なデータを含むブロックを消去するスケジュールをたてることが可能になる。このことは、2004年7月21日出願の米国特許出願第10/897,049号、現在公開されている公開特許出願第2006/0020744号である“不揮発性メモリシステム上のデータを保持する方法および装置(Method and Apparatus for Maintaining Data on Non-Volatile Memory Systems)”(特許文献28)に記載されている。他の技術は、任意の書き込み動作を1つのファイルに行うのかどうかを推理するために、すなわち、複数のファイルの間に境界があるかどうかを推理するために、新しいデータをメモリに書き込むホストのパターンの監視を行うことを含んでいる。2004年12月23日出願の米国特許出願第11/022,369号、現在公開されている公開特許出願第2006/0020745号である“最適化順次クラスタ管理のためのFAT分析(FAT Analysis for Optimized Sequential Cluster Management)”(特許文献29)に、このタイプの技術の利用について記載されている。
メモリシステムの動作を効率的に行うために、個別のファイルのデータにホストが割り当てた論理アドレスについて、できるだけ多くをコントローラがわかっていることが望ましい。次に、ファイル境界がわからない場合、多数のメタブロック間で分散するよりも、コントローラは、1つのメタブロックまたはメタブロックグループにデータファイルを記憶することが可能になる。結果として、データ統合およびガーベッジコレクション動作の回数と複雑さとが低減する。結果として、メモリシステムの性能が向上する。しかし、前述したように、ホスト/メモリインターフェイスが論理アドレス空間161(図7)を含んでいる場合、メモリコントローラがホストデータファイル構造について多く知ることは困難である。
図8を参照すると、図7にすでに示した典型的な論理アドレスホスト/メモリインターフェイスを別のやり方で示している。ホストが、ホストが生成したデータファイルを論理アドレスに割り当てている。次に、メモリシステムがこれらの論理アドレスを認識し、実際にデータを記憶してあるメモリセルブロックの物理アドレスに対してマッピングを行う。
ファイルベースのメモリインターフェイスおよび動作
ホストと、大容量のデータを記憶するメモリシステムとの間の、異なるタイプのインターフェイスにより、論理アドレス空間を用いなくていいようになる。そのかわり、ホストは、一意のファイルID(または他の一意の参照)と、ファイル内のデータ単位(バイトなど)のオフセットアドレスとにより、各ファイルに対し論理的にアドレス指定を行う。このファイルアドレスを、直接メモリシステムのコントローラに渡し、各ホストファイルのデータを物理的に記憶してあるそれ自体の表に保存する。図2〜図6に関連して前述した同じメモリシステムで、この新しいインターフェイスを実施することができる。前述したものとの主な違いは、メモリシステムがホストシステムと行う通信方法である。
ホストと、大容量のデータを記憶するメモリシステムとの間の、異なるタイプのインターフェイスにより、論理アドレス空間を用いなくていいようになる。そのかわり、ホストは、一意のファイルID(または他の一意の参照)と、ファイル内のデータ単位(バイトなど)のオフセットアドレスとにより、各ファイルに対し論理的にアドレス指定を行う。このファイルアドレスを、直接メモリシステムのコントローラに渡し、各ホストファイルのデータを物理的に記憶してあるそれ自体の表に保存する。図2〜図6に関連して前述した同じメモリシステムで、この新しいインターフェイスを実施することができる。前述したものとの主な違いは、メモリシステムがホストシステムと行う通信方法である。
図7の論理アドレスインターフェイスと比較を行うべき、このファイルベースのインターフェイスを、図9に示す。ファイル1、2および3のそれぞれの識別名と、図9のファイル内のデータオフセットを、直接メモリコントローラに渡す。次に、メモリコントローラ機能173により、この論理アドレス情報を、メタブロックの物理アドレスおよびメモリ165のメタページに変換する。ファイルディレクトリは、それぞれ記憶してあるセクタ、ページまたは他の単位のファイルデータが属するホストファイルを常に把握している。
図8の論理アドレスインターフェイスと比較を行うべき、ファイルベースのインターフェイスを、図10にも示す。図8のFAT表に保持した論理アドレス空間およびホストについては、図10に示していない。むしろ、ファイル番号と、ファイル内のデータオフセットとにより、メモリシステムに対して、ホストが生成したデータファイルの識別を行う。次に、メモリシステムのコントローラは、メモリセルアレイの物理ブロックに対して直接ファイルのマッピングを行い、ホストファイルを記憶してあるメモリブロックのファイルディレクトリおよびインデックステーブル情報を保持する。そして、ホストは、論理アドレスインターフェイスの管理に現在必要なファイルアロケーションテーブル(FAT)を保持する必要はなくなる。
図11は、そのプロセッサと、コントローラの他の回路とで実行するメモリシステムのファームウェアが実行する直接データファイルシステムの主な機能の概要のブロック図である。これは、以下で説明する特定のメモリ動作について想定した、全体的なフレームワークである。ファイルベースのインターフェイス601層が、メモリシステムと、外部ホストシステム、または同じメモリカードまたはフラッシュドライブ上で実行するホストアプリケーションとの間で、コマンドおよびデータのやりとりを行う。ホストアプリケーションは、メモリシステムの3つの主な機能、すなわち、ファイルの書き込み、ファイルの削除、およびファイルの読み出しを行う。フラッシュメモリアレイ603内に、データを記憶してある。
データを識別したファイルに基づいて、ファイル対ブロックマッピング機能605がフラッシュメモリ内のデータの記憶を編成する。各ファイルに対し、他のファイルのデータとともにファイルのデータを含んでいるフラッシュブロックの数を制限する。これにより、再配置を行って、ファイルの削除または変更を行った際に生成された、使われなくなったデータ空間を解放しなければならない無関係のファイルデータの容量を最小限にし、その結果、性能およびメモリの耐久性が向上することになる。メモリ603の物理メモリセルブロックが、データ管理の基本単位である。
データバッファリングおよびプログラミング機能607が、ファイルインターフェイスまたはフラッシュメモリ内の位置からのファイルデータをバッファメモリに一時的に記憶し、フラッシュメモリにその転送を行い、ファイルのアクティブブロックまたは一時的なスワップブロックのいずれかに、そのプログラミングを行うことの制御を行う。好ましくは、各ファイルデータグループの始点を、フラッシュメモリ内のメタページの始点と直接そろえる。論理メタページの構造は、各データグループに対するオフセットアドレス空間内で定義済みである。
図11の機能609は、メモリ603へアクセスし、そこに記憶してあるデータの読み出しを制御する。ホストが命令した場合に行われるファイルのデータの削除を行うことにより、機能613が保持しているファイル索引付け情報と、機能615のブロックのレコードとの更新を、機能611に行わせる。
ファイルデータ索引付け613は、一意のファイル識別子と、ファイル内のデータのオフセットアドレスとにより、メモリ603に記憶してある個別のファイルの索引付けを行う。各ファイルのデータは、連続する論理オフセットアドレスを有するデータセットグループとして記憶してある。ファイルディレクトリは、個別のファイルに対し、データグループエントリセットのファイルインデックステーブル(FIT)の位置の識別を行う。消去が行われたブロックのID、部分的にファイルデータのプログラミングが行われたブロック、または使われなくなったデータとともにファイルデータを含むブロックのいずれかのIDを、ブロックレコード機能615により保持する。
前述したガーベッジコレクションおよびデータ統合機能の主な目的は、使われていないメモリ空間を解放して、追加データの記憶に用いることである。ガーベッジコレクションでは、ソースブロックの有効なデータを、使われなくなったデータも含んでいるブロックから、少なくとも消去が行われた空間をある程度有する1つ以上の宛先ブロックにコピーする。これにより、有効なデータをより少ない数のブロックに統合するので、一旦もともとのソースブロックを消去したならば、使われなくなったデータが占有していた容量を解放することになる。データ統合では、消去されているが使われていない空間を含む、1つの部分的に埋められているブロックの有効なデータを、別の部分的に埋められているブロックの有効なデータと結合する。最も一般的には、部分的に埋められているブロックは、部分的に一部分だけが埋められている、最後に消去したブロックで閉じられている新しいファイルに書き込みを行うことに起因している。一旦、データを統合したならば、次に、複製のデータとなる、コピーしたてのデータを含むソースブロックを消去し、新しいデータを記憶するのに利用できるようにする。
ガーベッジコレクションおよびデータ統合動作は両方とも、ここではブロック解放として一緒に扱う。機能617は、プログラミングを行っていないメタページを有する物理ブロック、または使われなくなったデータを含む物理ブロックから、他のブロックへの有効なファイルデータのコピーを制御することにより、ブロックを解放する。これにより、もともとのブロックを消去して、ブロックにある使われていない空間を解放できるようにし、この空間を新しいファイルデータの記憶に利用できるようにする。機能619は、解放可能な容量と、消去ブロックの数とに基づいて、ブロック解放動作を行う回数および期間を適応可能なように制御する。全体的なメモリシステムの性能を良好に保つやり方で、新しいファイルデータの書き込みを行う速度に対して最適な速度で、ブロックの解放を行う。
図11の機能図では、変換層621およびインターフェイス層623がファイルインターフェイス601の上位に位置し、フラッシュメモリのバックエンドシステムとインターフェイスをとり、その動作の制御を行う。この例では、インターフェイス層623は、3つの異なるプロトコルのうちの1つにより、ホストまたはそれ以外のものと、メモリシステム外部のデータの通信を行う機能を有している。ファイルインターフェイス625は、ここでの説明の中心となるものであり、一意のファイル識別子とファイル内の論理オフセットアドレスとにより、個別のファイルのデータの識別を行う。オブジェクトインターフェイス627は、電子装置間でデータファイルのやりとりをするのに主に用いられるものであり、ファイルの大きさは通常周知のものである。インターフェイス627の既存のプロトコルは、マイクロソフト コーポレイション(Microsoft Corporation) のメディアトランスファープロトコル(MTP)およびピクチャトランスファープロトコル(PTP)を含んでいる。この例では、後方互換性のある論理(LBA)インターフェイス629も含んでいる。磁気ディスクドライブシステムのものと同様の、現在フラッシュメモリカードが用いているプロトコルにより、インターフェイス629を介してデータを送信して、ホストが、定義済みのメモリシステムの論理アドレス空間に対し、データのアドレス指定を行う。
変換層621は、プロトコルアダプタ631、633および635を含んでいる。これらアダプタの機能により、インターフェイスプロトコル625、627および629それぞれのプロトコルをファイルインターフェイス601との共通プロトコルに変換する。変換層により、コマンド、データフォーマット等を、異なるプロトコル間で変換する。LBAプロトコルアダプタ635はさらに、メモリシステムの論理アドレス空間をスタティックファイルに分割する。次に、ファイルインターフェイス601が同じやり方で、これらのファイルを、インターフェイス625および627を介して通信する別個のファイルとして扱う。LBAプロトコルアダプタ635の機能の詳細は、発明者S.A.ゴロベッツ(S. A. Gorobets)による2005年8月3日出願の米国特許出願第11/196,869号(特許文献30)を参照されたい。変換層621およびインターフェイス層623の情報についてはさらに、発明者アラン・シンクレア(Alan Sinclair) による2005年12月21日出願の米国特許出願第11/316,577号(特許文献31)により得られる。
新しいデータファイルのプログラミングを行ってメモリに取り込む場合、データを消去したメモリセルブロックに書き込む。ブロック内の第1の物理位置から開始し、ブロックの位置を介して連続して順に書き込みを進める。ファイル内のそのデータのオフセットの順序に関係なく、ホストから受け取った順に、データのプログラミングを行う。ファイルのデータをすべてメモリに書き込むまで、プログラミングを継続する。ファイルのデータ量が1つのメモリブロックの容量を超える場合、第1のブロックが満杯になったときは、第2の消去ブロックにプログラミングを継続する。第1のブロックと同じやり方で、ファイルのデータすべてを記憶するまで、または第2のブロックが満杯になるまで、第1の位置から順に、第2のメモリブロックにプログラミングを行う。第3のブロックまたは追加付加ブロックに対し、ファイルに残っているデータのプログラミングを行ってもよい。1つのファイルのデータを記憶してある複数のブロックまたはメタブロックは、物理的または論理的に連続している必要はない。説明を簡単にするため、特に明記がない限り、ここで用いる用語“ブロック”とは、特定のシステムでメタブロックが用いられているかどうかにより、消去ブロック単位または複数のブロックである“メタブロック”のいずれかについて言うものである。
図12の状態図は、図11に示すメモリ動作の全体的な機能を示す。個別のメモリブロックを考察すると、3つの状態のうちの1つになる。これらは、解放可能な容量のない、有効なファイルデータの記憶が行われている消去ブロック641およびブロック643と、プログラミングが行われない消去ページおよび/または記憶してあるが使われなくなった(無効な)データから、解放可能な容量を有している、有効なファイルデータを含んでいるブロック645とである。機能647が、消去したメモリブロックにデータの書き込みを行うことにより、得られるプログラミングが行われたブロックが解放可能な容量を保持しているかどうかに基づいて、カテゴリ643または645のブロックになる。機能649で示すように、ファイルを消去する場合、ファイルのデータを含んでいるブロック643を、解放可能な容量を有するブロック645に変換する。機能651が、ブロック645の使われていない記憶容量を解放することにより、それらのブロックを、新しいデータの書き込みが行われる消去ブロック641の状態に復帰させることになる。
図13Aを参照すると、メモリシステムに行うデータファイルの書き込みを示している。この例では、データファイル181は、メモリシステムの1つのブロックまたはメタブロック183の記憶容量よりも大きい。これは、縦の実線の間に延びている。従って、データファイル181の部分184は、第2のブロック185に書き込まれる。これらのメモリセルブロックは物理的に連続して示しているが、必ずしも連続している必要はない。ファイルのデータすべてをメモリに書き込むまで、ホストからの受信ストリーミングとして、ファイル181からのデータの書き込みを行う。図13Aの例では、データ181はファイルの初期データである。
メモリシステムが、記憶してあるデータの管理を行い、状態を常に把握する好適なやり方は、大きさが可変のデータグループを用いることである。すなわち、完全なファイルを形成する定義済みの順序でつながっている複数のグループのデータとして、ファイルのデータを記憶する。好ましくは、しかし、ファイルインデックステーブル(FIT)を用いることにより、メモリシステムのコントローラがファイル内のデータグループの順序を保持する。ホストからのデータストリームとして書き込みが行われている間、ファイルデータの論理オフセットアドレス、またはデータを記憶する物理空間に不連続性があると、必ず新しいデータグループが始まってしまう。このような物理的な不連続性の一例は、ファイルのデータが1つのブロックで満杯になり、別のブロックへの書き込みが始まる場合である。図13Aにこれを示す。第1のデータグループが第1のブロック183で満杯になり、第2のデータグループとしてのファイルの残っている部分184を第2のブロック185に記憶する。第1のデータグループを(F0,D0)で示す。F0がデータファイルが開始したときの論理オフセットであり、D0がファイルが始まるメモリ内部の物理位置である。第2のデータグループを(F1,D1)で示す。F1が第2のブロック185が始まるときに記憶してあるデータの論理ファイルオフセットであり、D1がデータを記憶してある物理位置である。
ホスト−メモリインターフェイスを介して転送するデータ量について、多数のバイト数のデータ、多数のデータセクタ、または他の細分性で述べる場合もある。現在の論理アドレスインターフェイスを介して大容量メモリシステムと通信を行う場合、ホストは大抵の場合、そのファイルのデータをバイト細分性で定義するが、次に、バイトを512バイト毎のセクタにグループ化を行ったり、または多数のセクタ毎のクラスタにグループ化を行ったりする。これは、メモリシステムの動作を簡略化するために通常行われている。ここで説明するファイルベースのホスト−メモリインターフェイスは他の単位のデータを用いる場合もあるが、もともとのホストファイルのバイト細分性が一般的には好ましい。すなわち、好ましくは、セクタ、クラスタ等ではなく、データオフセット、長さ等を、バイトで、最小の合理的な単位のデータで表現する。これにより、ここで説明する技術によるフラッシュメモリ記憶装置の容量をより効率的に利用することが可能になる。
次に、図13Aに示すやり方でメモリに書き込んだ新しいファイルを、この順で、データグループのインデックスエントリ(F0,D0)、(F1、D1)シーケンスとしてFITで表す。すなわち、ホストシステムが特定のファイルにアクセスしたい場合は必ず、ホストはそのファイルIDまたは他の識別名をメモリシステムに送信し、次に、そのFITにアクセスして、そのファイルを構成するデータグループの識別を行う。メモリシステムの動作の便宜上、これらの個別のエントリも個別のデータグループの長さ<length>に含めてもよい。用いる際には、メモリコントローラは、データグループの長さを算出し、記憶する。
好ましくは、ホストが図13Aのファイルを開いている状態に保持している限り、ホストからさらにデータを受信してそのファイルに書き込みを行う位置を定義できるように、物理書き込みポインタPについても保持する。ファイル内の新しいデータの論理位置に関わらず、物理メモリ内のファイルの終端にファイルの新しいデータの書き込みを行う。メモリシステムにより、4つまたは5つのファイルなどの複数のファイルを1度に開いたままにしておくことが可能になり、それぞれに対し書き込みポインタPを保持する。異なるファイルの書き込みポインタは、異なるメモリブロック内の位置を指している。メモリシステムに、すでに存在する開いているファイルの数に制限があるときに、ホストシステムが新しいファイルを開きたい場合、開いているファイルのうちの1つをまず閉じて、次に、新しいファイルを開く。
図13Bは、図13Aの前に書き込みが行われたもののまだ開いたファイルとなっているファイルの終端に、ホストがデータの追加を行うことを示す。ホストシステムが、ファイルの終端にデータ187を追加していることを示している。これは、そのファイルのデータの終端で、第2のブロック185に書き込みが行われている。追加データはデータグループ(F1,D1)の一部となるので、これでデータをさらに含むことになる。というのは、既存のデータグループ184と追加データ189との間に論理的にも物理的にもアドレス不連続性がないからである。従って、満杯になったファイルはやはり、FITのインデックスエントリ(F0,D0)、(F1,D1)のシーケンスとして表される。ポインタPのアドレスについても、記憶した追加データの終端のアドレスに変更する。
図13Aの前に書き込みを行ったファイルへのデータブロック191の挿入についての一例を図13Cに示す。ホストがデータ191をファイルに挿入しているが、メモリシステムは、前に書き込みを行ったファイルデータの終端の位置193に挿入したデータを追加している。ホストがファイルを閉じた後で、バックグラウンドで後で行うこともあるが、開いているファイルにデータの挿入を行っている間、それらの論理の順序でファイルのデータの書き換えを行う必要はない。1つの新しいグループ(F1,D3)を形成する場合、挿入したデータをすべて、第2のメモリブロック185に記憶するからである。しかし、この挿入を行うことにより、図13Aの前のデータグループ(F0,D0)になり、挿入前のグループ(F0,D0)と、挿入後のグループ(F2,D1)との2つのグループに分割される。これは、挿入の始点F1と挿入の終点F2とで発生するようなデータの論理的な不連続性がある場合は必ず、新しいデータグループを形成する必要があるからである。グループ(F3,D2)は、第2のブロック185の始点である物理アドレスD2の結果である。たとえ同じメモリブロックに記憶してある場合であっても、グループ(F1,D3)および(F3,D2)を、別々に保持する。つまり、記憶してあるデータオフセットに不連続性があるからである。次に、データグループインデックスエントリ(F0,D0)、(F1,D3)、(F2,D1)、(F3,D2)の順で、挿入のもともとのファイルをメモリシステムFITに表す。メモリ内のデータを全部使って、新しいファイルまたは既存のファイルの新しいデータの書き込みを行うこともできることが、図13A、図13Bおよび図13Cの例からわかることに留意されたい。
図13Cに示す既存のファイルへのデータの挿入に代えて、データを挿入したときは必ず、ホストが別個のファイルとしてメモリにファイルの書き換えを行ってもよい。次に、メモリシステムは、この別個のファイルを新しいファイルとして処理することもある。次に、ホストが古いファイルを削除し、メモリシステムは、データがもう使われなくなった古いファイルを記憶してある空間の解放に応答できる。
図13Dは、図13Aに示すやり方でもともと書き込みを行ったデータのある一部分を更新する、別の例を示す。データファイルの部分195が更新部分である。更新を行ってメモリシステムの全ファイルの書き換えを行うのではなく、ファイルの更新部分197を、前に書き込みを行ったデータに追加する。前に書き込みを行ったデータの部分199は、今は使われなくなっている。更新を行った後、データグループインデックスエントリ(F0,D0)、(F1,D3)、(F2,D1)、(F3,D2)の順で、ファイルをメモリシステムFITに表す。図13Aの1つのデータグループ(F0,D0)を、図13Dに示す部分に再度分割する。更新部分の前のグループと、更新部分と、更新部分の後のグループとである。使われなくなったデータが占有している空間199を解放することが望ましいが、メモリにファイルデータの書き込みを行う一部としてではなく、好ましくは、後で行う。典型的には、このような解放を行うことにより、記憶してある特定のファイルのデータのデータグループの数がより少なくなる。
可変長データグループの利用をさらに説明するために、一連の同じファイルを含むいくつかの書き込み動作について、図14A〜図14Eに順に示す。まず、図14Aに示すように、メモリシステムの2つのブロックに、もともとのファイルデータW1の書き込みを行う。次に、2つのデータグループ、物理メモリブロックの始点から始まる第1のグループと、物理メモリブロックの境界の後から開始しなければならない第2のグループとにより、ファイルを定義する。次に、図14Aのファイルを、データグループに対する以下の一連のインデックスエントリ(F0,D0)、(F1,D1)により記述する。
図14Bでは、ホストが、図14Aで書き込まれたファイルデータの更新を行う。更新データの前のバージョンが使われなくなっている前のグループ(F1,D1)のすぐ後に、更新したファイルデータU1の書き込みを行う。図14Aの前のグループ(F0,D0)が短くなって図14Bの変更後のグループ(F0,D0)になり、前のグループ(F1,D1)が短くなって、グループ(F4,D2)になる。メモリブロックの境界で重複しているので、2つのグループ(F2,D3)および(F3,D4)に更新データの書き込みを行う。データのいくつかは、第3のメモリブロックに記憶する。これで、データグループに対する以下の一連のインデックスエントリ(F0,D0)、(F2,D3)、(F3,D4)、(F4,D2)により、ファイルを記述する。
ホストが新しいファイルデータI1の挿入を行う、図14Bのファイルをさらに変更したものを図14Cに示す。挿入したデータがメモリブロックの境界と重複しているので、図14Cの新しいグループ(F5,D6)および(F6,D7)として、図14Bの前のグループ(F4,D2)のすぐ次のメモリに、新しいデータI1の書き込みを行う。第4のメモリブロックを用いる。新しいデータI1の挿入により、図14Bの前のグループ(F0,D0)を、図14Cの短縮したグループ(F0,D0)および(F7,D5)に分割する。これで、データグループに対する以下のインデックスエントリシーケンス(F0,D0)、(F5,D6)、(F6,D7)、(F7,D5)、(F8,D3)、(F9,D4)、(F10,D2)により、ファイルを記述する。
図14Dは、新しいデータW2をファイルの終端に追加した、図14Cのデータファイルの別の変更例を示す。図14Dの新しいグループ(F11,D8)として、図14Cの前のグループ(F10,D2)のすぐ次に新しいデータW2の書き込みを行う。これで、データグループに対する以下のインデックスエントリシーケンス(F0,D0)、(F5,D6)、(F6,D7)、(F7,D5)、(F8,D3)、(F9,D4)、(F10,D2)、(F11,D8)により、ファイルを記述する。
図14Dのファイルに更新したファイルデータU2の書き込みを行う、開かれているファイルに対する第2の更新を図14Eに示す。そのデータの前のバージョンが使われなくなっている、図14Dの前のグループ(F11,D8)のすぐ次に、図14Eの更新データU2の書き込みを行う。図14Dの前のグループ(F9,D4)が短くなって、図14Eの変更後のグループ(F9,D4)になり、前のグループ(F10,D2)が完全に使われなくなり、前のグループ(F11,D8)が短くなって、新しいグループ(F14,D9)を形成する。ブロックの境界と重複している図14Eの新しいグループ(F12,D10)および(F13,D11)に、更新データの書き込みを行う。これで、第5のブロックには、ファイルを記憶する必要がある。これで、データグループに対する以下のインデックスエントリシーケンス(F0,D0)、(F5,D6)、(F6,D7)、(F7,D5)、(F8,D3)、(F9,D4)、(F12,D10)、(F13,D11)、(F14,D9)により、ファイルを記述する。
好ましくは、各ファイルのデータのオフセットを、前の説明によるファイルの生成または変更を行った後で、正しい論理的順序で連続して保持する。従って、データをファイルに挿入する動作の一部として、例えば、ホストが行った挿入したデータのオフセットは、挿入の直前のオフセットから連続し、挿入後のすでにファイルに入っているデータを、挿入したデータ量で増分する。最も一般的には、既存のファイルの更新を行うと、類似量の更新データで置き換えられた既存のファイルの任意のアドレス範囲のデータになるので、通常、他のファイルのデータのオフセットを置き換える必要はない。
図13に関連して前述した、データの割り当ておよび索引付け機能はすべて、メモリシステムのコントローラが行うことに留意されたい。適切なコマンドとともに、ホストは単に、ファイルIDおよびファイル内のデータのオフセットをメモリシステムに送る通信を行うだけでよい。残りはメモリシステムが行う。
前述したやり方でホストからのファイルデータを直接フラッシュメモリに書き込みを行う利点は、このように記憶してあるデータの細分性または分解を、ホストのデータと同じように保持することができることである。ホストアプリケーションが1バイトの細分性でファイルデータの書き込みを行う場合、例えば、そのデータについても、1バイト細分性でフラッシュメモリに書き込みを行う。次に、個別のデータグループ内のデータ量および位置を、バイト数で測定する。すなわち、ホストアプリケーションファイル内で別々にアドレス指定可能なデータの同じオフセット単位については、フラッシュメモリに記憶したときのそのファイル内でもやはり別々にアドレス指定可能である。次に、ブロック内の同じファイルのデータグループ間の境界はいずれも、最も近いバイトまたは他のホストオフセット単位に対し、インデックステーブルで指定されている。同様に、ブロック内の異なるファイルのデータグループ間の境界は、ホストのオフセット単位で定義されている。
用語“セクタ”とは、ここでは大きなブロックのメモリに用いられ、ECCが対応づけられている記憶してあるデータの単位を表している。セクタも、フラッシュメモリとやりとりするデータ転送の最小単位である。“ページ”は、ブロック内のメモリセルの単位を表すのに用いられ、プログラミングの最小単位である。“メタページ”とは、メタブロックの完全な並列処理を行うページを表すのに用いられる。メタページは、プログラミングの最大単位である。
図14Bおよび図14Eから、更新コマンドにより、ファイル内のデータ量より大きいファイルを記憶する必要のある物理空間となることがわかる。これは、更新により置き換えられたデータを、メモリに記憶したままになっているからである。従って、使われなくなった無効なデータを削除することにより、ファイルのデータをより小さい物理記憶空間に統合する(ガーベッジコレクションを行う)ことは、非常に望ましい。従って、他のデータがさらに記憶空間を利用できるようになる。
図14Bおよび図14Eのファイルデータの更新の他に、図14Cのデータ挿入を行うことにより、順番が狂ってファイルデータを記憶することになることもわかる。すなわち、ほとんどいつも、ファイル内のいずれかに論理的に位置づけられるが、更新および挿入を行う際に、更新および挿入は、メモリに記憶してあるファイルの終端に加えられる。これは、図14B、図14Cおよび図14Eに一例である。従って、メモリに記憶してあるファイルのデータを整理し直して、ファイル内のオフセットの順序に一致させることは望ましい。連続してページおよびブロックの読み出しを行うことにより、ファイルのデータがそれらのオフセットの順序になるので、記憶してあるデータの読み出し速度が向上することになる。これにより、可能なファイルの断片化を解消する(defragmentation) ことが最大になる。しかし、場合によっては1つ以上のメモリブロックを解放して他のデータを記憶に用いるようにするファイルデータ統合のように、ファイルデータを整理し直して読み出しをより効率的にすることは、メモリシステムの性能にはあまり重要ではない。従って、ファイル内のデータを整理し直すことは、工場管理費を追加したほどの価値のある恩恵が得られないので通常単独で行われないが、工場管理費がほとんど、あるいは全くかからないで、多くのガーベッジコレクション動作の一部として行うことができる。
図14Eのファイルは、生成された2つのデータ更新U1およびU2により、メモリに記憶された使われなくなったデータグループ(グレー部分)を含んでいる。結果として、図14Eからわかるように、ファイルの記憶に用いられるメモリ容量の量が、ファイルの大きさよりも相当大きい。従って、ガーベッジコレクションを行うことが適切である。図15は、図14Eのデータファイルのガーベッジコレクションを行った結果を示す。ガーベッジコレクションの前は、そのファイルは、ほぼ5つのブロックの記憶容量を占有しているが(図14E)、ガーベッジコレクション後の同じファイルは、3つのメモリセルブロックを多少超えて納められている(図15)。ガーベッジコレクション動作の一部として、データをブロックからコピーする。はじめに、他の消去ブロックに書き込みを行い、次に、もともとのブロックを消去する。全ファイルのガーベッジコレクションを行う場合、ファイル内のデータ論理オフセットの順序と同じ物理的順序で、新しいブロックにそのデータをコピーする。例えば、ガーベッジコレクションの後(図15)、ホストファイル内の順序と同じ順序で、更新U1およびU2、挿入I1を記憶する。
通常、ファイルベースのガーベッジコレクションも、統合したファイル内に、新しい、異なるデータグループを形成することになる。図15の場合、新しいデータグループに対する以下の新しいインデックスエントリシーケンス(F0,D12)、(F1,D13)、(F2,D14)、(F3,D15)により、ファイルを記述する。これは、図14Eに示すファイルの状態で存在するものよりも、データグループの数はずっと少ない。ファイルのデータをコピーしたメモリセルブロック毎に1つのデータグループがある。ガーベッジコレクション動作の一部として、ファイルインデックステーブル(FIT)の更新を行って、ファイルを構成する新しいデータグループを反映させる。
図14Eのデータ分布から図15のデータ分布へ移動するには、相当のデータ量のコピーを行うことが必要であることに留意されたい。図14Eのそれぞれのブロックから有効なデータの読み出しを行って、次に、図15の4つの消去ブロックに書き込みを行う。これにより、将来用いるファイルのデータグループを非常に簡略にするが、データのコピーに相当長い時間がかかる。従って、ファイルベースのデータのガーベッジコレクションを行わないで、その代わりに、ファイルとしてデータを直接メモリに記憶する場合であっても、ブロックベースで行う。最もデータ量が少ないブロックにガーベッジコレクションを行って、別のブロックにコピーすることにより、ブロックの使われていない容量を解放する。このことは、前に援用されている、2006年5月8日出願の米国特許出願第11/382,232号“フラッシュメモリのデータ記憶容量の解放(Reclaiming Data Storage Capacity in Flash Memories)”(特許文献32)に記載されている。
従って、図14Eの状態で、ファイルのデータを保持しているブロックの解放を、同じファイルのデータを記憶してある複数のブロックに行うのではなく、ブロックに対し個別に行う。例えば、任意のときに解放動作を行うように考えられているメモリシステムのブロックのうち、図14Eの第2のブロック002の有効なデータ量が最も少ない場合、次に、図16に示すように、別の消去ブロック010にその1つのデータグループをコピーする。そして、新しいブロックは、1つのデータグループ(F8,D16)と、新しいデータの書き込みが行われるブロックの残りの消去した容量とを含むことになる。図14Eでデータを記憶してあるブロックから、その消去した容量を解放する。次に、ファイル(F0,D0)、(F5,D6)、(F6,D7)、(F7,D5)、(F8,D16)、(F9,D4)、(F12,D10)、(F13,D11)、(F14,D9)から構成される、以下のインデックスエントリシーケンスにより、データグループに対し、ファイルを記述する。ブロック解放処理に基づいて、解放動作のための基準を個別に満たすまでは、図14Eに示す他のブロックを変更しない。
ファイルデータの索引付け
図17は、いくつかのそれぞれ異なる時間0、2、4、XおよびYでの1つのファイルのファイルインデックステーブル(FIT)内のインデックスエントリシーケンスを示す。これらは、図14A、図14C、図14E、図15および図16それぞれに関連する前述したシーケンスである。好ましくは、ホストシステムからの支援を受けずに、メモリのコントローラにより、FITのデータの書き込みを行って、現在の状態を保持する。メモリシステムにデータの書き込みを行う際に、ホストシステムは、パス名、ファイル名およびファイル内のデータのオフセットを供給するが、データグループの定義、またはメモリセルアレイのどこに記憶するかについては、ホストは行わない。図17のエントリでは、図14A〜図14Eのメモリセルブロックに、左から1で始まる番号を振る。従って、図14Cに示す状態のファイルでは、例えば、その第3のデータグループ(F6,D7)にはブロック004に記憶するように図17に注記が付けられる。左から4つめのブロックで、そのブロックの初期アドレスからD7バイトである。好ましくは、表の各エントリに各データグループの長さも含む。
図17は、いくつかのそれぞれ異なる時間0、2、4、XおよびYでの1つのファイルのファイルインデックステーブル(FIT)内のインデックスエントリシーケンスを示す。これらは、図14A、図14C、図14E、図15および図16それぞれに関連する前述したシーケンスである。好ましくは、ホストシステムからの支援を受けずに、メモリのコントローラにより、FITのデータの書き込みを行って、現在の状態を保持する。メモリシステムにデータの書き込みを行う際に、ホストシステムは、パス名、ファイル名およびファイル内のデータのオフセットを供給するが、データグループの定義、またはメモリセルアレイのどこに記憶するかについては、ホストは行わない。図17のエントリでは、図14A〜図14Eのメモリセルブロックに、左から1で始まる番号を振る。従って、図14Cに示す状態のファイルでは、例えば、その第3のデータグループ(F6,D7)にはブロック004に記憶するように図17に注記が付けられる。左から4つめのブロックで、そのブロックの初期アドレスからD7バイトである。好ましくは、表の各エントリに各データグループの長さも含む。
図17に示す、ファイルの変更により、ファイルのデータグループに対する修正となる際に、またはあまり頻繁にではないが、メモリのコントローラが、1つのファイルに対するインデックスエントリシーケンスの書き換えを行う。コントローラは、このような変更をそのメモリに記憶し、フラッシュメモリに1度にその多くの書き込みを行うこができる。任意のある時間に、ファイル毎に有効なインデックスのセットが1つだけ存在する。これは、異なる時間でファイルを定義した図17に示す5つのインデックスのセットである。時間XおよびYのインデックスは、2つの異なる種類の解放動作の結果を示す。前述したように、一方はファイルベースのもので、もう一方はブロックベースのものである。ファイルへの追加データのプログラミング、ファイルからのデータ読み出し、そのデータを記憶してあるファイルまたはブロックのデータのガーベッジコレクションを行う必要があるときに、メモリシステムのコントローラは、ファイルの現在のインデックスのセットを用いる。他の動作に用いる場合もある。従って、それらのファイルオフセット(Fx)の順で個別のファイルのインデックスエントリを記憶している場合、FITは使いやすいが、そうでない場合、コントローラは、まちがいなく論理的順序でエントリの読み出しを行うことができる。メモリコントローラが特定のファイルのインデックスエントリの読み出しを行う最も一般的な理由は、ホストコマンドの実行中にある。
具体的なファイル索引付けを行う第1の実施形態
図18を参照して、連続するセット内の数値である一意のファイルID201で、直接データファイルインターフェイスとともに動作するメモリシステムに記憶してあるファイルの識別を行う。ディレクトリ203は、メモリ装置に記憶している有効なファイル毎に1つエントリを含んでいる。好ましくは、ディレクトリ203はフラットな階層で、サブディレクトリをサポートしていない。これにより、メモリの直接データファイルシステムが、ホストで用いられるオペレーティングシステムとは独立可能になる。特定のホストオペレーティングシステムプロトコルに従う階層ディレクトリについては、直接データファイルシステム外部のファームウェア層がサポートを行い、フラットなディレクトリ構造をやはりサポートしているファイルメタデータ(ファイル“属性”情報もわかっている)機能とともに利用する。
図18を参照して、連続するセット内の数値である一意のファイルID201で、直接データファイルインターフェイスとともに動作するメモリシステムに記憶してあるファイルの識別を行う。ディレクトリ203は、メモリ装置に記憶している有効なファイル毎に1つエントリを含んでいる。好ましくは、ディレクトリ203はフラットな階層で、サブディレクトリをサポートしていない。これにより、メモリの直接データファイルシステムが、ホストで用いられるオペレーティングシステムとは独立可能になる。特定のホストオペレーティングシステムプロトコルに従う階層ディレクトリについては、直接データファイルシステム外部のファームウェア層がサポートを行い、フラットなディレクトリ構造をやはりサポートしているファイルメタデータ(ファイル“属性”情報もわかっている)機能とともに利用する。
前の説明をまとめると、データセットグループとしてファイルのデータを記憶してある。それぞれ、ファイルオフセットアドレス空間と物理アドレス空間との両方で、1度に実行する連続するアドレス全域にわたっている。ファイルのセット内のデータグループは、互いに特定の物理アドレス関係を持つ必要はない。データグループは、ファイルの連続するオフセットアドレスを有するファイルデータのセットであり、1つのメモリブロックの連続する物理アドレスでプログラミングが行われる。通常、数多くのデータグループとして、ファイルに対しプログラミングを行う。データグループの長さは、1バイトから1ブロックの間とすることができる。ファイルインデックステーブル(FIT)205により、オフセットアドレスの順で、識別すべきファイルの有効なデータグループの位置の記録を行う。FITレコードとしてファイルのFITエントリのセットについてわかり、ディレクトリ203のエントリで指定されている。
FIT205は、2つの構成要素、アクティブファイルインデックスブロック207および1つ以上の非アクティブファイルインデックステーブルブロック209を有している。直接データファイル装置内のアクティブファイルのFITレコードは、アクティブファイルインデックスブロック207に配置されている。以下に説明するように、このブロックに対し、ディレクトリ203が間接アドレス指定を行うことにより、それらのファイルのディレクトリ203のエントリの更新を行う必要なく、アクティブファイルのFITレコードを修正することが可能になる。非アクティブファイルに対して、ファイルディレクトリ203が直接、非アクティブファイルインデックスブロック209にFITレコードのアドレス指定を行う。いずれの場合も、FITレコードにより、一意のファイルID201により個別に指定するファイルを構成するデータグループ211の位置を指定する。参照するために、部分的なファイルのファイルIDを含んでいるヘッダで、各データグループに対しプログラミングを行ってもよい。図18の213に示すように、ファイルのデータを記憶してあるブロックを解放した後で必要になるといったように、ファイルのFITレコードを修正してもよい。
共通の構成部品を同じ参照番号で識別した、図18を多少拡張したものを図19に示す。複数の非アクティブファイルインデックスブロック209を示す。非アクティブFITプログラムブロック209aは、新規に書き込みが行われたデータファイルの新しいFITレコードの書き込みが行われる消去を行ったメモリページを有している。一旦、このブロックが満杯になると、非アクティブファイルFITブロック209bとして指定し、新しい消去ブロックを非アクティブFITプログラムブロックとして指定する。典型的には、ファイルディレクトリ203は、システムに保持している各ファイルIDに対して、FITブロック207、209aおよび209bすべてのFITレコードを指す。
アクティブファイルインデックスブロック207、または非アクティブファイルインデックスブロック209のうちの1つに特定のファイルのFITレコードを記憶してあるかどうかは、近い将来、ファイルに修正を行う可能性が高いかどうかに依存する。高ければ、ブロック内207にそのFITレコードを保持してあるアクティブファイルであると考えられ、高くなければ、ブロック209のうちの1つにそのFITレコードを保持してある非アクティブファイルであると考えられる。メモリシステムが、“開いているファイル”および“閉じているファイル”コマンドを送信するホストシステムとともに動作している場合、メモリは、開いているファイルはすべてアクティブで、閉じているファイルはすべて非アクティブであると見なす。典型的には、これらのコマンドを用いるホストは、5つなどの所定の数を超えない多数の開いているファイルを保持する。従って、ホストがその開いているファイルに書き込みを行ったデータは、そのFITレコードがブロック207内に記憶してあり、閉じているファイルのFITレコードはブロック209のうちの1つに記憶してある。
しかし、ホストのなかには、開いているファイルコマンドおよび閉じているファイルコマンドをメモリシステムに送信しないものもある。この場合、ホストのファイルへのデータの書き込みを監視することにより、メモリシステムが、近い将来、ファイルの修正を行う可能性が高いかどうかを判定する。記憶ブロックの始端と終端との間のどこかで、ホストが新しいデータグループの書き込みを終えた場合、可能性が一番大きいと考えられるのは、ホストが、少なくとも少しの間、そのファイルへのデータの書き込みを終えたということである。しかし、記憶ブロックの終端に一致して、新しいデータグループが終わっている場合、ホストには、ファイルへ書き込みを行うデータがもっとあるという可能性が高いと考えられる。この場合、メモリシステムは、データグループが記憶ブロックの終端に一致して終わっていると定義する可能性が一番大きいので、ホストがファイルのデータの書き込みを完了したことを示すものではない。
直接データファイルインターフェイスシステムのファイルディレクトリ203は、システムがサポートしているファイルID毎に1つのエントリを含んでいる。装置がサポートしている連続するファイルID値に対応する連続するエントリのセットとして、ディレクトリを編成している。図20に示すように、指定のファイルIDのエントリには、特定の論理ページ内の特定のエントリ番号として直接アクセスすることができる。指定のファイルIDのエントリを探すのに、ディレクトリサーチを行う必要はない。
ディレクトリエントリは、FITレコードを構成しているFITエントリの数とともに、ファイルのデータの索引付け情報を含んでいるFITレコードの位置を指定している。これを、フィールド217および219それぞれで図20に示す。フィールド217の内容が非アクティブファイルのレコードを指している場合、ファイルのFITレコードを記憶しているブロック209のうちの1つの位置の物理アドレスを含んでいる。しかし、ファイルがアクティブの場合、フィールド217は、以下で説明する、ファイルのFITエントリの更新または変更を行ったのと同じままになっている中間位置を指す、論理アドレスを含んでいる。
ディレクトリはPページの論理ページから構成され、各ページはE個のディレクトリエントリから構成されている。従って、ディレクトリはP*Eファイルの容量がある。専用の1つ以上のブロックに、ディレクトリを記憶している。D個のディレクトリブロックが存在する場合、それぞれP/D論理ページを含み、P/D*Eファイルの容量がある。含んでいる論理ページの範囲に基づいて、ディレクトリブロックをDIR0からDIR(D−1)と指定する。装置に同時に存在した最大数のファイルから、ディレクトリブロックの数を求める。既存のブロックが割り当てられたファイルIDのエントリを含んでいない場合、ディレクトリブロックを加算する。しかし、サポートされているファイルの数が減る場合、ディレクトリを圧縮してもよい。
論理ページの更新を行うディレクトリブロックに用いられる一例の物理構造について、図21で説明する。(隣接する縦の点線の間の)各エントリは、ファイルIDのFITレコードの仕様、またはそのファイルIDのファイルが存在しないことを示すヌル値を含んでいる。ファイルのデータを含んでいるデータグループの数が、FITレコードの許可されている最大数のFITエントリを超えている場合、継続ファイルIDをファイルに割り当てて、継続FITレコードを利用できるようにする。継続ファイルIDを、ファイルに割り当てられた主ファイルIDのディレクトリエントリ内に指定する。ディレクトリは、専用の1つ以上のブロックに位置している。ディレクトリブロックの物理位置を、制御ブロックの制御ログ内のディレクトリブロックリストに定義する。
図21に、以下の4つのフィールドを含む、ディレクトリエントリ225の説明図を示す。
1)FIT論理ブロック#(227):このフィールドにより、ターゲットファイルIDのFITレコードが位置するFIT論理ブロック番号の識別を行う。ディレクトリブロック内のFITブロックポインタの1つにより、対応する物理ブロックアドレスを定義している。一例の物理ポインタ229を、図21に示す。フィールド227が、FITブロックポインタの1つを指している。アクティブファイルインデックスブロック用に、FIT論理ブロックNを確保している。FIT論理ブロック番号の0の値は、装置にファイルが存在しないことを意味している。
2)FIT論理ページ#(231):このフィールドにより、ターゲットファイルIDのFITレコードが位置している、アクティブファイルインデックスブロック207または非アクティブFITブロック209(図19)内の論理ページ番号の識別を行う。アクティブファイルインデックスブロック207に記憶しているFITレコードの位置は(図19)、レコードが位置しているページの間接アドレスである。非アクティブFITプログラムブロック209aまたは非アクティブFITブロック209bの場合、ページの直接物理アドレスである。
3)FITページエントリ#(233):このフィールドにより、ターゲットファイルIDのFITレコードが始まるページ内の連続するエントリ番号の識別を行う。
4)FITエントリ#(235):このフィールド内の先頭ビットがゼロの場合、このフィールドがターゲットファイルIDのFITレコード内のFITエントリの数を指定する。このフィールド内の先頭ビットが1の場合、ターゲットファイルIDのFITエントリの数は、FITレコードで許可されているFITエントリの最大数を超えている。この場合、フィールドが、ファイルに用いられる継続ファイルIDを指定する。継続ファイルIDのディレクトリエントリでは、このフィールドが、ターゲットIDと継続ファイルIDとの両方のFITレコード内のFITエントリの総数を指定する。
1)FIT論理ブロック#(227):このフィールドにより、ターゲットファイルIDのFITレコードが位置するFIT論理ブロック番号の識別を行う。ディレクトリブロック内のFITブロックポインタの1つにより、対応する物理ブロックアドレスを定義している。一例の物理ポインタ229を、図21に示す。フィールド227が、FITブロックポインタの1つを指している。アクティブファイルインデックスブロック用に、FIT論理ブロックNを確保している。FIT論理ブロック番号の0の値は、装置にファイルが存在しないことを意味している。
2)FIT論理ページ#(231):このフィールドにより、ターゲットファイルIDのFITレコードが位置している、アクティブファイルインデックスブロック207または非アクティブFITブロック209(図19)内の論理ページ番号の識別を行う。アクティブファイルインデックスブロック207に記憶しているFITレコードの位置は(図19)、レコードが位置しているページの間接アドレスである。非アクティブFITプログラムブロック209aまたは非アクティブFITブロック209bの場合、ページの直接物理アドレスである。
3)FITページエントリ#(233):このフィールドにより、ターゲットファイルIDのFITレコードが始まるページ内の連続するエントリ番号の識別を行う。
4)FITエントリ#(235):このフィールド内の先頭ビットがゼロの場合、このフィールドがターゲットファイルIDのFITレコード内のFITエントリの数を指定する。このフィールド内の先頭ビットが1の場合、ターゲットファイルIDのFITエントリの数は、FITレコードで許可されているFITエントリの最大数を超えている。この場合、フィールドが、ファイルに用いられる継続ファイルIDを指定する。継続ファイルIDのディレクトリエントリでは、このフィールドが、ターゲットIDと継続ファイルIDとの両方のFITレコード内のFITエントリの総数を指定する。
ポインタ229の一例である図21のFITブロックポインタが、装置に存在するそれぞれのFIT論理ブロックを指定する。これらは、ディレクトリブロック内の最後にプログラミングが行われたページだけに有効なものである。装置に存在する各FIT論理ブロック#に対し、FITブロックポインタが存在する。以下の3つのフィールドが、FITブロックポインタに存在する。
1)FITブロックアドレス(237):このフィールドが、ディレクトリエントリ225のフィールド227のFIT論理ブロック#に現在割り当てられている物理ブロックアドレスを指定する。
2)有効なFITレコード#(239):このフィールドが、FIT論理ブロックに存在する有効なファイルの数を指定する。
3)使われなくなったFITエントリ#(241):このフィールドが、FIT論理ブロックに存在する使われなくなったFITエントリの数を指定する。
1)FITブロックアドレス(237):このフィールドが、ディレクトリエントリ225のフィールド227のFIT論理ブロック#に現在割り当てられている物理ブロックアドレスを指定する。
2)有効なFITレコード#(239):このフィールドが、FIT論理ブロックに存在する有効なファイルの数を指定する。
3)使われなくなったFITエントリ#(241):このフィールドが、FIT論理ブロックに存在する使われなくなったFITエントリの数を指定する。
ディレクトリ論理ページポインタ243(図21)は、ディレクトリブロックの論理対物理ページマッピングとして機能する。1つのポインタが、ブロック内の各論理ページに対して存在し、論理ページの現在の物理ページアドレスを指定する。ディレクトリページポインタエントリは、ディレクトリブロック内の直近にプログラミングを行った物理ページにだけ有効なものである。
論理ページの単位で、ディレクトリの更新を行う。1つのプログラミング動作で、論理ページ内の任意の数のエントリの更新を行ってもよい。ページの読み出しを行って、1つ以上のエントリの更新を行い、ディレクトリブロックの次に利用可能な消去ページで再プログラミングを行ってもよい。ディレクトリページポインタおよびFITブロックポインタの再プログラミングを同時に行って、すべてのフィールドの現在の値を指定する。
ディレクトリブロックの最後のページに対しプログラミングを行った場合、ブロックを圧縮し、消去ブロックに書き換えを行う。これが、新しいディレクトリブロックになる。使われなくなったディレクトリブロックを消去する前に、ディレクトリページポインタが定義するように、有効なページをすべて消去ブロックにコピーすることにより、圧縮を行う。
ファイルディレクトリが指すファイルインデックステーブル(FIT)は、FITエントリストリングを含んでいる。各FITエントリにより、ファイルオフセットアドレスおよびデータグループのフラッシュメモリ内の物理位置の識別を行う。好ましくは、FITは、装置に記憶してあるファイルの有効なデータグループすべてのエントリを含んでいる。使われなくなったデータグループについては、FITが索引付けを行う必要はない。ファイル内のデータグループのFITエントリのセットを、オフセットアドレスの順で、連続するエントリとしてファイルに保持する。FITレコードとして、エントリのセットがわかっている。FITを、アクティブファイルのインデックスブロックとともにFITブロックのセットに保持する。装置のデータグループの数により、FITブロックの数は変化する。装置の動作の間に、新しいFITブロックを生成して、FITブロックを削除する。
FITの論理構造の一例を、図22に示す。ファイルのディレクトリエントリのFITブロックアドレス237およびFIT論理ページ#231(図21)により、特定のファイルのFITレコード247を検出する。FITレコードはそれぞれ、ファイル内のデータグループの連続するFITエントリのセットを含んでいる。好ましくは、そのセットのエントリは、ファイルオフセットアドレスの順に連続している。
好ましくは、ファイルの各FITレコードは、FITレコードの第1のエントリとして、FITヘッダ249(図22)を含んでいる。FITヘッダの固定長は、整数のFITエントリに等しい。FITヘッダの3つのフィールドは以下のとおりである。
1)ファイルID:ファイルIDにより、ディレクトリ内のファイルのエントリの識別を行う。
2)プログラムブロック:FITに更新したバージョンのFITレコードの書き込みを行うときは必ず、FITヘッダにファイルのプログラムブロックの現在の物理位置を記録する。ホストがファイルを再び開くときに、これを用いることにより、ファイルのプログラムブロックを検出する。プログラムブロックの統合に選択した、FITレコードとファイルのプログラムブロックとの対応関係の検査を行うのに利用してもよい。
3)プログラムポインタ:FITに更新したバージョンのFITレコードの書き込みを行うときは必ず、FITヘッダにファイルのプログラムブロック内のプログラムポインタの現在の値を記録する。ホストがファイルを再び開くとき、あるいはプログラムブロック統合にプログラムブロックを選択したときに、これを用いることにより、ファイルのプログラムブロック内でデータのプログラミングを行う位置を定義する。
1)ファイルID:ファイルIDにより、ディレクトリ内のファイルのエントリの識別を行う。
2)プログラムブロック:FITに更新したバージョンのFITレコードの書き込みを行うときは必ず、FITヘッダにファイルのプログラムブロックの現在の物理位置を記録する。ホストがファイルを再び開くときに、これを用いることにより、ファイルのプログラムブロックを検出する。プログラムブロックの統合に選択した、FITレコードとファイルのプログラムブロックとの対応関係の検査を行うのに利用してもよい。
3)プログラムポインタ:FITに更新したバージョンのFITレコードの書き込みを行うときは必ず、FITヘッダにファイルのプログラムブロック内のプログラムポインタの現在の値を記録する。ホストがファイルを再び開くとき、あるいはプログラムブロック統合にプログラムブロックを選択したときに、これを用いることにより、ファイルのプログラムブロック内でデータのプログラミングを行う位置を定義する。
典型的には、ファイルのFITレコードには、ファイルを構成するデータグループの物理位置を指定する多数のエントリがさらにある。一例のファイルに対する1つのFITエントリ251を、他のものとともに図22に示す。各FITエントリには以下の4つのフィールドがある。
1)オフセットアドレス:オフセットアドレスは、データグループの最初のバイトに関連する、ファイル内のバイト表示のオフセットである。
2)長さ:これにより、データグループ内のファイルデータ長さをバイト表示で定義する。完全なデータグループの長さは、データグループヘッダの長さの分だけ、この値よりも長い。
3)ポインタ:これは、データグループが始まるフラッシュブロック内の位置を示すポインタである。ポインタには、(1)データグループを含んでいる物理ブロックを定義するブロックアドレスと、(2)データグループが始まるブロック内のバイトオフセットを定義するバイトアドレスの2つのサブフィールドがある。このアドレスは、データグループヘッダを含んでいる。
4)EOFフラグ:EOFフラグは、データファイルの終端のデータグループの識別を行う1つのビットである。
1)オフセットアドレス:オフセットアドレスは、データグループの最初のバイトに関連する、ファイル内のバイト表示のオフセットである。
2)長さ:これにより、データグループ内のファイルデータ長さをバイト表示で定義する。完全なデータグループの長さは、データグループヘッダの長さの分だけ、この値よりも長い。
3)ポインタ:これは、データグループが始まるフラッシュブロック内の位置を示すポインタである。ポインタには、(1)データグループを含んでいる物理ブロックを定義するブロックアドレスと、(2)データグループが始まるブロック内のバイトオフセットを定義するバイトアドレスの2つのサブフィールドがある。このアドレスは、データグループヘッダを含んでいる。
4)EOFフラグ:EOFフラグは、データファイルの終端のデータグループの識別を行う1つのビットである。
図23は、アクティブファイルインデックスブロック207(図18および図19)の物理フォーマットを示す。アクティブファイル専用のインデックスブロック内で、アクティブファイルのFITレコードの更新が行われている。ブロックのページ毎に1つ以上のエントリのFITレコード1つだけ記憶し、論理FITレコードの間接アドレス指定を行うことにより、アクティブファイルインデックスブロックに、FITレコードの更新を容易に行うことが可能になる。論理FITレコードの更新を行う際に、次に利用可能な消去ページの全体に書き換えを行って、この直近でプログラミングを行ったページのFITページポインタのセットにより、論理ページ対物理ページのマッピングを行う。システムで同時にアクティブとなるファイル毎に、1つの論理FITレコードが存在する。
前述したように、ディレクトリエントリ内の対応するFIT論理ブロック#227がアクティブファイルインデックスブロックに関係する場合、ファイルのファイルディレクトリエントリ内のFIT論理ページ#231(図21)が、論理FITレコードを指定する。ファイルのファイルディレクトリエントリの更新を行う必要なく、アクティブファイルインデックスブロックに、論理FITレコードの更新および書き換えを行う。FIT論理ページ#231はFITレコードの間接アドレスであり、更新したFITレコードを含んでいるページの一部として、FIT論理ページポインタ255のセットのうちの1つが更新および書き換えを行った物理ページに対し、マッピングを行う。
アクティブファイルインデックスブロック207の直近にプログラミングが行われたページ内のFITページポインタ255のセット(図23)は、有効なバージョンの論理FITレコードが配置されている物理ページを指定する。FITページポインタのヌル値は、アクティブファイルインデックスブロック内のFIT論理ページ#が割り当てられていないことを意味している。装置に同時に存在するアクティブファイル毎に、FITページポインタフィールドが1つ存在する。
アクティブファイルインデックスブロックの最後のページに対しプログラミングを行う場合、ブロックを圧縮し、消去ブロックに書き換えを行うと、新しいアクティブファイルインデックスブロックになる。使われなくなったアクティブファイルプログラムブロックの消去を行う前に、FITページポインタが定義したように、有効なページをすべて、消去ブロックにコピーすることにより、圧縮を行う。
閉じることでアクティブファイルが非アクティブになったり、以下に説明する非アクティブFITプログラムブロックにそのFITレコードをコピーしたりすると、アクティブFITブロック内のFITレコードのデータが使われなくなる。
非アクティブFITブロックが、現在アクティブであるファイルの他に、メモリシステムに記憶してあるデータファイルすべてのFITレコードの記憶領域となる。1つのFITプログラムブロックが、FITブロック内のFITレコードのプログラミングを行う手段となる。図24を参照して、非アクティブファイルFITプログラムブロック209a(図19)の詳細を示す。非アクティブFITプログラムブロック内の全ページに対しプログラミングを行った場合、これが非アクティブFITブロック209bになり、消去ブロックを新しい非アクティブFITプログラムブロックとして割り当てる。
図24に示すように、ディレクトリから直接、非アクティブFITプログラムブロック内の各FITレコードのアドレス指定を行う。ディレクトリエントリ内のFIT論理ページ#231(図21)が、非アクティブFITプログラムブロック内の物理ページを直接指し、ディレクトリエントリ内のFITページエントリ#233が、FITレコードの始点の識別を行う。複数のFITレコードを、非アクティブFITプログラムブロック内の1ページに記憶してもよい。
好ましくは、図20に示すように、図24の非アクティブFITプログラムブロックのページ内のFITレコードすべてに、ディレクトリの同じ論理ページ内のディレクトリエントリがなければならないようにする。これにより、ディレクトリブロック内で1つのプログラム動作で、非アクティブFITプログラムブロックページ内のFITレコードすべてのディレクトリエントリの更新を行うことが可能になる。
開くことでファイルがアクティブになったり、アクティブファイルインデックスブロック内でそのFITレコードを生成したり、またはファイルを削除したりする場合、非アクティブFITプログラムブロック内のFITレコードはすべて使われなくなる。
図24の非アクティブFITプログラムブロックの最後のページに対しプログラミングを行った場合、非アクティブFITブロック209b(図19)を生成する。
図25は、FITレコードの一例の動作を示す。1つのこのような動作261により、アクティブファイルにデータの書き込みが行われる。アクティブファイルにデータの書き込みが行われているときに、時折、ファイルデータのプログラミングを行うアルゴリズムがFITの更新を要求する。アクティブファイルインデックスブロック207に、書き込みが行われているファイルの更新FITレコードのプログラミングを行う。前述した図23に示すように、アクティブファイルインデックスブロック内の論理FITレコードに間接アドレス指定方法を用いているので、ファイルのディレクトリエントリの更新を行う必要はない。
既存の非アクティブデータファイルまたは新しいデータファイルを開いたり、アクティブにしたりした場合、図25に機能263として示すように、ブロック内のFITページポインタフィールドでそのポインタの書き込みを行うことにより(図23を参照)、アクティブファイルインデックスブロック207に論理FITレコードを割り当てる。ファイルが既存のファイルの場合、そのFITレコードも、アクティブファイルインデックスブロック207からFITブロック209bまたはFITプログラムブロック209a内のその既存の位置に移動する。アクティブファイルインデックスブロック207内の1回のページプログラミング動作で、FITページポインタフィールドおよびFITレコードの書き込みを行ってもよい。開いているファイルまたはアクティブになっているファイルのディレクトリエントリを更新するためにはディレクトリ内で1ページだけ更新を行うだけでよい。
図25の265に、データファイルが閉じている状態を示す。ファイルを閉じて、アクティブファイルが非アクティブになった場合、アクティブファイルインデックスブロック207からFITプログラムブロック209aにそのFITレコードを移動する。FITプログラムブロック209aに、このFITレコードを含んでいるページのプログラミングを行った場合、好ましくは、同じディレクトリページに関連するできるだけ多くのFITレコードを、FITブロックからFITプログラムブロック209aの同じページに移動する。これにより、使われなくなったFITエントリを含んでいるFITブロックのガーベッジコレクション機構となる。すでに含まれている使われなくなったFITエントリの数に基づいて、このようなFITレコードを移動するためのソースFITブロックを選択する必要がある。使われなくなったFITエントリの数が最も高いFITブロックに、最も高い優先順位を与える。好ましくは、定義済みの数の使われなくなったFITエントリより少ない数のFITブロックからは、FITレコードを移動しない。
最後にプログラミングが行われたディレクトリページ内のFITブロックポインタフィールドに、FITブロック内の使われなくなったFITエントリの数を定義する。ディレクトリページに対しプログラミングを行って、移動したFITレコードのエントリの更新と、FITブロックポインタおよびディレクトリページポインタフィールド内のパラメータの更新を行う必要がある。アクティブファイルインデックスブロックページに対しプログラミングを行って、ブロックから移動した論理FITレコードのFITページポインタにヌルエントリを挿入する必要がある。
ガーベッジコレクション動作267(図25)は、FITブロックのガーベッジコレクション、またはデータファイルやデータブロックのガーベッジコレクションのいずれかに関連することができる。まず、FITブロック209bのうちの1つのガーベッジコレクションについて説明する。FITブロックの消去動作は、使われなくなったFITエントリが占有する容量を回収するために、時折行う必要がある。FITブロックの消去を行う前に、有効なFITレコードすべてを、FITブロック209bからFITプログラムブロック209aに移動する。ファイルを非アクティブにする前述した処理を行っても、有効なFITレコードすべてを移動することにはならない。従って、FITガーベッジコレクション処理を行って、有効なFITレコードすべてを消去するFITブロックから移動することが望ましい。
好ましくは、使われなくなったFITエントリの数が最も高いFITブロックを、FITガーベッジコレクションブロックとして指定し、次に、有効なFITレコードすべてを移動するまで、このブロックにFITガーベッジコレクション動作を行う必要がある。次に、別のFITブロックを、FITガーベッジコレクションブロックとして指定する。FITガーベッジコレクションブロックのページを選択してFITプログラムブロックに移動し、利用可能ならば、同じディレクトリページに関連するFITガーベッジコレクションブロックからの他のFITレコードで、ページを埋める。プログラミングを行うページにまだ空間がある場合、他のFITブロックからのFITレコードでさらに埋めてもよい。関連するディレクトリページ内のエントリに基づいて、選択したページとともに移動する他のFITレコードの選択を行う必要がある。
好ましくは、ディレクトリページに対しプログラミングを行って、移動したFITレコードのエントリの更新、FITブロックポインタおよびディレクトリページポインタフィールド内のパラメータの更新を行う。望ましくは、FITガーベッジコレクション動作のスケジュールをたてて、データガーベッジコレクション動作を行うのと同時に、定期的に行う。データガーベッジコレクションのページプログラム動作をN回行う毎に、FITガーベッジコレクションのページプログラム動作を1回行う。
ここで、データファイルまたはデータブロックのガーベッジコレクション267について説明する。データガーベッジコレクション動作により、閉じたファイルまたは非アクティブになったファイルのFITレコードの更新が必要となる。これを、必要な更新を組み込んで、FITレコードをFITブロックからFITプログラムブロックに移動することにより実行する。好ましくは、FITプログラムブロックにプログラミングが行われているページを、同じディレクトリページに関連する他のFITレコードで埋める。
具体的なファイル索引付けを行う第2の実施形態
ファイルIDが識別したファイルオブジェクト内の直接データファイルメモリシステムに、データの書き込みを行って、論理オフセットアドレスにより、ファイルオブジェクト内にファイルのアドレス指定を行う。データを、データセットグループとして記憶する。グループはそれぞれ、連続する論理オフセットアドレスおよび連続する物理位置を有している。ファイル索引付けにより、ファイルIDおよび論理オフセットアドレスをデータグループの位置と関係付ける。
ファイルIDが識別したファイルオブジェクト内の直接データファイルメモリシステムに、データの書き込みを行って、論理オフセットアドレスにより、ファイルオブジェクト内にファイルのアドレス指定を行う。データを、データセットグループとして記憶する。グループはそれぞれ、連続する論理オフセットアドレスおよび連続する物理位置を有している。ファイル索引付けにより、ファイルIDおよび論理オフセットアドレスをデータグループの位置と関係付ける。
ディレクトリにより、ファイルオブジェクトのインデックスエントリのファイルインデックステーブル(FIT)内の位置を直接定義する。通常、直接索引付けを用いるが、間接索引付け方法も用いることにより、結果として行う必要があるファイルディレクトリの修正を行わずに、あるファイルのインデックスエントリが頻繁に修正可能になる。ファイル索引付けも、やはりファイルデータからの別々のファイル属性情報の記憶をサポートする。
DFS装置内のファイルは、1つの論理IDを有するデータオブジェクトである。数値ファイルIDによりファイルの識別を行い、ファイル内のデータをオフセットアドレスで識別する。
ホストからのコマンドに応答して、DFS装置がファイルID値の割り当てを行って、ファイルオブジェクトを生成する。DFSシステムがファイル索引付けを行って、各ファイルオブジェクト内のデータの物理位置と、各ファイルオブジェクトの属性の物理位置とを追跡する。
ファイル索引付けの階層を、図26に示す。ファイルのディレクトリエントリは、3つの主なフィールドである、一意のファイルIDと、メモリ内の他のアドレスを示す2つのポインタとを含んでいる。ポインタ1は、FIT内のそのファイルIDのあるファイルのFITレコードを指し、ポインタ2は、ファイルのファイル属性レコード(ATR)を指す。好ましくは、ディレクトリ、FIT、ATRを、フラッシュメモリ内の別々のセットのブロックに記憶する。
ディレクトリは、装置に存在するファイルオブジェクト毎に1つエントリを含んでいる。範囲がそれぞれ別々のページに割り当てられた、ファイルID値の重複しない範囲に、エントリを記憶する。ファイルID値に基づいて、範囲内のエントリは順序づけられている。ページ内の1ページの読み出しと、バイナリサーチを行うことにより、目的とするファイルIDのディレクトリエントリを検出することができる。
占有する空間を最小限にするために、エントリにより、それぞれディレクトリに直接ファイルインデックステーブル(FIT)のアドレス指定を行う。これは、ページに編成したファイルオブジェクトを記述する、レコードの集まりから構成されている。同じまたは別のFITブロックのプログラミングを行わない位置にページを移動する、読み出し/修正/書き込み動作により、FIT内の1ページのレコードの更新を行う。FIT内の1ページのレコードはすべて、ディレクトリ内の同じページのエントリに関連しているので、FITページの更新を行うと、結果として、1つのディレクトリページを1ページだけ修正することが必要になる。
個別の一時ファイルインデックステーブル(TFIT)ブロックを用いて、近い将来修正することになるFITレコードを記憶することができる。ファイルオブジェクトのレコードをTFIT内の論理ページに記憶して、ディレクトリエントリにより、間接アドレス指定を行う。ディレクトリの更新を行う必要なく、TFIT内のレコードを修正することが可能である。
ファイルIDにより識別したファイルオブジェクトに対し、ファイル属性レコード(ATR)を記憶する。属性レコードの内容はホストシステムが定義済みで、メモリシステムは解釈を行わない。一般に、ホストがメモリシステムとともに動作するのに重要または役に立つと考えられる場合は必ず、ホストはファイルオブジェクトの属性をATRに記憶することが可能である。ファイル属性の索引付け方法は、ファイルインデックステーブルを用いる場合と同じである。
直接データファイルメモリシステムに用いられる一例のファイル索引付け構造のセットを、図27に示す。ファイルディレクトリDIRは、ファイルIDにより識別したファイルオブジェクトを記述しているエントリの集まりを含んでいる。メモリシステムに存在するファイルオブジェクト毎に1つ、DIRにエントリがある。DIRは、1つ以上の専用DIRブロックに含まれている。
各DIRブロックは、固定数の論理ページを含んでいる。次に利用可能な物理ページに書き換えを行うことにより、それぞれの更新を行う。有効なDIRエントリを含んでいるページを論理ページ番号に割り当てる。DIRブロック内の論理ページの数を、1ブロック内の物理ページの数の25%となるように指定する。
DIRブロックの最後のページの書き込みを行った後で、消去ブロックに有効なページすべての書き込みを行って、もともとのDIRブロックの消去を行うことにより、ブロックを圧縮する。
DIRページは、ファイルID値の順で、DIRエントリのセットを含んでいる。有効なDIRエントリは、DIRページ内の連続するセットのエントリ位置を占有しているが、完全にページを埋める必要はない。セット内には使われなくなったエントリがなくなり、ファイルID値が連続している必要はない。DIRページ内のファイルID値の範囲は、他のDIRページ内のファイルID値の範囲と重複していない。
新しいファイルのエントリの挿入が必要な場合、新しいブロックのファイルID値を含むファイルID範囲があるDIRページを、DIRインデックス内の情報から識別する。ファイルID範囲内の適切位置に新しいエントリを挿入し、DIRページの書き換えを行う。エントリの移動が必要な場合、エントリなしでDIRページを圧縮して、書き換えを行う。
満杯になったDIRページにさらに追加を行う場合、フリーの論理ページを新しいDIRページとして割り当て、満杯になったDIRページのファイルID範囲を2つのほぼ等しい重複しない範囲に分割し、2つの利用可能なDIRページに書き込みを行う。
隣接するファイルID範囲がある2つのDIRページの有効なエントリの総数が、DIRページ内のエントリ位置の数の70%を下回る場合、2つのDIRページの範囲を統合して、2つのDIRページのうちの1つに書き込みを行う。そして、他の使われていないページがフリーの論理ページになる。
図27のDIRブロックのDIRエントリは、3つのフィールドを含んでいる。
1)ファイルID
2)FITレコードを示すポインタ(ポインタにより、FITレコードのFITページ論理識別子およびバイトオフセットを定義する。具体例では、FITページ論理識別子が、同じDIRページ内のエントリが参照する、16ページまでの個別のFITページのうちの1つの識別を行う。これを、エントリを含んでいるDIRページ内のFITインデックスフィールドにより、物理ブロックアドレスおよびページ番号に変換する。バイトオフセットにより、識別されたFITページ内のFITレコードの位置の識別を行う。あるいは、ポインタがTFITを示してもよい。FITレコードがTFITにあることと、ポインタがTFIT内の論理ページを定義することを示すように、ポインタ内の保留ビットを設定する。)
3)ファイル属性レコードを示すポインタ(ポインタが、ATRレコードのATRページ論理識別子およびバイトオフセットを定義する。具体例では、ATRページ論理識別子により、DIRページ内のエントリが参照する、16ページまでの個別のATRページのうちの1つの識別を行う。これを、エントリを含んでいるDIRページ内のFITインデックスフィールドにより、物理ブロックアドレスおよびページ番号に変換する。バイトオフセットにより、識別したATRページ内のATRレコードの位置の識別を行う。)
1)ファイルID
2)FITレコードを示すポインタ(ポインタにより、FITレコードのFITページ論理識別子およびバイトオフセットを定義する。具体例では、FITページ論理識別子が、同じDIRページ内のエントリが参照する、16ページまでの個別のFITページのうちの1つの識別を行う。これを、エントリを含んでいるDIRページ内のFITインデックスフィールドにより、物理ブロックアドレスおよびページ番号に変換する。バイトオフセットにより、識別されたFITページ内のFITレコードの位置の識別を行う。あるいは、ポインタがTFITを示してもよい。FITレコードがTFITにあることと、ポインタがTFIT内の論理ページを定義することを示すように、ポインタ内の保留ビットを設定する。)
3)ファイル属性レコードを示すポインタ(ポインタが、ATRレコードのATRページ論理識別子およびバイトオフセットを定義する。具体例では、ATRページ論理識別子により、DIRページ内のエントリが参照する、16ページまでの個別のATRページのうちの1つの識別を行う。これを、エントリを含んでいるDIRページ内のFITインデックスフィールドにより、物理ブロックアドレスおよびページ番号に変換する。バイトオフセットにより、識別したATRページ内のATRレコードの位置の識別を行う。)
有効なDIRページごとに、有効なFITインデックスフィールドが個別に存在する。これを用いることにより、FITページの論理識別子を、FITページが位置する物理ブロックアドレスおよびページ番号に変換する。FITレコードを示すページのエントリ内で用いられる論理識別子毎に、エントリを1つ含んでいる。
有効なDIRインデックスフィールドは、直近に書き込みが行われたDIRページだけに存在する。前に書き込みが行われたDIRページすべてのフィールド内の情報が使われなくなる。その目的は、DIRエントリの順序と、論理ページの物理ページへのマッピングとをサポートすることである。
DIRインデックスは、論理ページ番号に基づいて順序づけられた考えられる論理ページ毎に、エントリを1つ含んでいる。各エントリには3つのフィールドがある。
1.論理ページの割り当て状態フラグ
2.ページ内の第1のエントリに関連するファイルID(これにより、各DIRページ内のファイルID値の範囲を設定してキャッシュを行うことが可能になる。)
3.論理ページのマッピングを行うDIR内の物理ページを示すポインタ
1.論理ページの割り当て状態フラグ
2.ページ内の第1のエントリに関連するファイルID(これにより、各DIRページ内のファイルID値の範囲を設定してキャッシュを行うことが可能になる。)
3.論理ページのマッピングを行うDIR内の物理ページを示すポインタ
図27のFITは、レコードの集まりを含んでいる。それぞれ、制御データおよびファイルIDにより識別したファイルオブジェクトのファイルデータ索引付け情報を含んでいる。装置に存在するファイルオブジェクトのFITまたはTFIT毎に、エントリが1つ存在する。ほとんどのファイルオブジェクトのFITレコードをFITに記憶し、TFITは、近い将来修正を行う確率が高いファイルオブジェクトだけのFITレコードを含んでいる。
DIRエントリにより、直接FIT内のFITレコードのアドレス指定を行い、FITページを修正する際には、DIRページの修正を行う必要がある。
FITは、1つ以上の専用FITブロックに含まれている。FITレコードの書き込みが行われるプログラミングを行わないページを、FITブロックが1つだけ含んでいる。このブロック内の次のプログラミングを行わないページの位置で、FITレコード情報すべてのプログラミングを行い、FIT書き込みポインタにより識別する。ブロック内の最後のページに対しプログラミングを行った場合、FIT書き込みポインタを、消去ブロックの最初のページに移動する。FITブロックは、書き換えられたFITページから得られる使われなくなったページと、取り除かれたDIRエントリから得られる有効なFITページ内の使われなくなったFITレコードとを含んでいることもある。使われなくなった容量を、FITブロックから解放してもよい。
FITページは、DIRエントリにより参照するFITレコードのセットを、DIRページ内のエントリとして、同じDIRページに同じ順序で含んでいる。DIRページは、複数のFITページを参照することもある。従って、FITページの修正を行うと、結果として、DIRページを1ページだけ修正することが必要になる。ページを読み出し、次に、更新を行ったり、または1つ以上のFITレコードを加えたりすることにより、FITページを修正してもよい。ページを圧縮することにより、使われなくなったFITレコードを取り除き、次に、FIT書き込みポインタにより識別した位置で、ページのプログラミングを行う。
FITページヘッダは、FITページが対応づけられているDIRページと、FITページ内のFITレコード情報の長さとに対する参照を記憶している。FITページヘッダは、FITページの書き込みを行った際に、それぞれのFITブロックに存在する使われなくなったページの数の記録についても、記憶している場合もある。典型的には、この情報は、直近で書き込みが行われたFITページヘッダ内でだけ有効である。
図27のFITブロックのFITレコードは、以下のフィールドを含んでいる。
1)ファイルID
2)ファイル状態(前に援用されている米国特許出願第11/382,224号(特許文献33)に記載されているように、これは0〜9の番号で、各状態は、ファイルのデータを含むことが許可されている物理ブロックの種類の、位置に定義した組み合わせを指定している。典型的には、ファイルの状態が変わる際に、そのファイルの1つ以上のデータグループが変わったために、FITレコードの更新が必要になる。)
3)ファイルのアクティブブロックのアドレス
4)ファイル内のデータグループの数
5)以下を含む、ファイル内の各データグループ毎に1つのフィールド
a)ファイル内のバイト表示の論理オフセット
b)バイト表示の長さ
c)物理位置を示すポインタ
図27のFITブロックのFITレコードは、以下のフィールドを含んでいる。
1)ファイルID
2)ファイル状態(前に援用されている米国特許出願第11/382,224号(特許文献33)に記載されているように、これは0〜9の番号で、各状態は、ファイルのデータを含むことが許可されている物理ブロックの種類の、位置に定義した組み合わせを指定している。典型的には、ファイルの状態が変わる際に、そのファイルの1つ以上のデータグループが変わったために、FITレコードの更新が必要になる。)
3)ファイルのアクティブブロックのアドレス
4)ファイル内のデータグループの数
5)以下を含む、ファイル内の各データグループ毎に1つのフィールド
a)ファイル内のバイト表示の論理オフセット
b)バイト表示の長さ
c)物理位置を示すポインタ
図27のTFITブロックを用いることにより、一時的なFITレコード、すなわち、近い将来修正を行う確率が高いFITレコードを記憶することが可能になる。第1の実施形態で説明したように、例えば、これにより、開いているファイルコマンドおよび閉じているファイルコマンドを利用するシステムに、開いているファイルを組み込むことが可能になる。DIRエントリにより、間接的にTFIT内のFITレコードのアドレス指定を行い、DIRを更新する必要なく、TFITエントリを修正することが可能になる。
TFITは、固定数の論理ページを含んでいる1つの専用TFITブロックに含まれている。次に利用可能な物理ページに書き換えを行うことにより、各論理ページの更新を行う。有効なTFITエントリを含んでいるページに、論理ページ番号を割り当てる。ブロック内の物理ページの数の25%となるように、TFITブロック内の論理ページの数を指定する。
TFITブロックの最後のページの書き込みが行われた後で、有効なページすべてを消去ブロックに書き込みを行って、もともとのTFITブロックの消去を行うことにより、ブロックを圧縮する。FITレコードは、FITおよびTFITの両方に、同時に存在することはない。
TFITページは、FITレコードを1つだけ含んでいる。TFIT内のFITレコードは、FITブロックの前述したものと全く同じこともある。有効なTFITインデックスフィールドは、直近に書き込みが行われたTFITページだけに存在する。前に書き込みが行われたTFITページすべてのフィールド内の情報が使われなくなる。その目的は、論理ページを物理ページにマッピングを行うことである。TFITインデックスは、論理ページ番号に基づいて順序づけられた考えられる論理ページ毎に、エントリを1つ含んでいる。各エントリには2つのフィールドがある。
1.論理ページの割り当て状態フラグ
2.論理ページのマッピングを行う、TFIT内の物理ページを示すポインタ
1.論理ページの割り当て状態フラグ
2.論理ページのマッピングを行う、TFIT内の物理ページを示すポインタ
図27のATTRブロックは、レコードの集まりであり、それぞれ、ファイルIDにより識別したファイルオブジェクトの属性を含んでいる。属性レコードの内容はホストシステムが定義済みで、メモリシステムが解釈を行わない。ホストが属性の書き込みを行うファイルオブジェクト毎に、ATRにエントリが1つ存在する。DIRエントリにより、直接ATTRブロック内のATRレコードのアドレス指定を行い、ATRページを修正する際に、DIRページを修正する。
ATRは、1つ以上の専用ATTRブロックに含まれている。ATRブロック1つだけが、ATRレコードの書き込みが行われるプログラミングを行わないページを含んでいる。ATTRブロックは、書き換えられたATRページから得られる使われなくなったページと、削除したファイルから得られる有効なATRページ内の使われなくなったATRレコードとを含むこともある。
1ページのATTRブロックは、DIRページのエントリと同じ順序で、同じDIRページ内のDIRエントリにより参照する、ATRレコードのセットを含んでいる。DIRページは、複数のATRページを参照してもよい。従って、ATRページの修正を行うと、結果として、DIRページを1ページだけ修正することが必要になる。
ATRページのヘッダは、ATRページが対応づけられたDIRページと、ATRページ内のATRレコード情報の長さとに対する参照を記憶している。ATRページのヘッダは、ATRページの書き込みが行われたときにATTRブロックそれぞれに存在する使われなくなったページの数の記録を含んでいる場合もある。典型的には、この情報は、直近に書き込みが行われたATRページのヘッダにだけ有効である。ATRレコードは、以下のフィールドを含んでいる。
1)ファイルID
2)ATRレコードの長さ
3)ATRレコードの内容(属性レコードの内容は、ホストシステムが定義済みなので、DFSシステムが解釈することはない。)
1)ファイルID
2)ATRレコードの長さ
3)ATRレコードの内容(属性レコードの内容は、ホストシステムが定義済みなので、DFSシステムが解釈することはない。)
前述したように、データグループは、ファイル内の連続する論理オフセットアドレスを有するファイルデータのセットであり、1つのブロック内の連続する物理アドレスでプログラミングが行われる。複数のデータグループとして、ファイルのプログラミングを頻繁に行う。データグループは、1バイトから1ブロックの間の任意の長さであってよい。好ましくは、ヘッダで各データグループのプログラミングを行い、一部のファイルのファイルIDを含んでいる。
FITレコードは1つ以上のFITブロックに含まれ、DIRエントリにより、直接アドレス指定が行われる。1つだけのFITブロックが、新しいまたは更新したFITレコードのプログラミングを行うのに利用可能な消去ページを含んでいる。他のFITブロックすべてにおいて、ページすべてに対しプログラミングを行うが、ブロックは、完全に使われなくなったページまたは部分的に使われなくなったページを含む場合もある。
1つのFITブロックを次に解放するブロックとして指定することにより、使われなくなったFITレコードが占有するこの容量を解放し、解放ブロックの消去を行う前に、この解放ブロックからFIT書き込みポインタが現在指定しているページへ、継続的にページコピーを行う。
FITブロックの前の解放処理が完了し、ブロックの消去を行う場合に、解放ブロックを選択する。使われなくなったページの数が最も大きいFITブロックを、解放ブロックとして選択する。直近に書き込みが行われたFITページのFITページヘッダ内のFITブロック毎に、この値を記録する。FIT書き込みポインタを含んでいるFITブロックを選択して、解放する必要はない。解放処理が完了して、そのブロックを消去するまで、選択したFITブロックは、解放ブロックとして残る。
使われなくなったページを含んでいるFITブロックを解放する処理には、スケジュールした間隔での個別のバーストで、このブロックからFIT書き込みポインタが指定するページに、有効なFITレコードを含んでいる小さい数のページのコピーを行うことが必要である。1回のバーストでのページの数は、メタページに含まれるページの数でなければならない。メタページの1回のプログラミング動作として、FIT書き込みポインタの示すページのプログラミングを行う必要がある。
4メタページに含まれるページの位置の数を介して、FIT書き込みポインタの進行により、定義済みの間隔で、解放ブロック内のページのバーストコピー動作のスケジュールをたてる必要がある。バーストコピー動作のスケジュールをたてたときに、書き込みポインタが物理メタページ内の最初のページを指す。
同じ解放処理を、ATTRブロックに別々に行ってもよい。
実施形態の変形例
前述した2つの具体的なファイル索引付けを行う実施形態それぞれにおいて、ホストからのデータのページと、FITエントリと、ディレクトリエントリとをすべて、1つ以上のブロックの別々のグループに記憶してある。この構成の第1の変形例として、ディレクトリエントリを含んでいるページおよびFITレコードを含んでいるページが、同じブロックにともに存在していてもよい。図20に示すように、ブロック内の複数の論理ページは、ディレクトリエントリを含んでいる。特定のファイルIDのディレクトリエントリは、ブロック内にわかっている論理アドレスがある。図21に示すように、各論理ページは、論理ページポインタのセットも含んでいる。これらは、ブロック内のディレクトリページの論理対物理ページマッピングとして機能する。ブロック内の論理ページ毎に、ポインタは1つあり、論理ページの現在の物理ページアドレスを指定する。FITレコードを含んでいるFITページは、ブロック内に存在することもある。FITページを論理ページには割り当てないが、ディレクトリエントリにより、物理ページ位置で直接アドレス指定を行う。FITページ内の1つ以上のFITレコードの更新を行う場合、FITページの位置を関連するディレクトリエントリから識別して、ページの読み出しを行って、関連するレコードを修正し、ブロック内の次に利用可能なプログラミングが行われないページに更新したページの書き込みを行う。ディレクトリエントリを更新して、この新しいFITページ位置に直接アドレス指定を行うために、1つのディレクトリ論理ページの修正を行って、更新したFITページが占有する位置に続く物理ページ位置に、プログラミングを行う。このディレクトリページの論理ページポインタも、同じ動作で更新してプログラミングを行う。ブロック内の論理ページすべての論理ページポインタは、ブロック内の最後に書き込みが行われたディレクトリページ内でだけ有効であって、これは常に、ブロック内の最後に書き込みが行われたページである。
前述した2つの具体的なファイル索引付けを行う実施形態それぞれにおいて、ホストからのデータのページと、FITエントリと、ディレクトリエントリとをすべて、1つ以上のブロックの別々のグループに記憶してある。この構成の第1の変形例として、ディレクトリエントリを含んでいるページおよびFITレコードを含んでいるページが、同じブロックにともに存在していてもよい。図20に示すように、ブロック内の複数の論理ページは、ディレクトリエントリを含んでいる。特定のファイルIDのディレクトリエントリは、ブロック内にわかっている論理アドレスがある。図21に示すように、各論理ページは、論理ページポインタのセットも含んでいる。これらは、ブロック内のディレクトリページの論理対物理ページマッピングとして機能する。ブロック内の論理ページ毎に、ポインタは1つあり、論理ページの現在の物理ページアドレスを指定する。FITレコードを含んでいるFITページは、ブロック内に存在することもある。FITページを論理ページには割り当てないが、ディレクトリエントリにより、物理ページ位置で直接アドレス指定を行う。FITページ内の1つ以上のFITレコードの更新を行う場合、FITページの位置を関連するディレクトリエントリから識別して、ページの読み出しを行って、関連するレコードを修正し、ブロック内の次に利用可能なプログラミングが行われないページに更新したページの書き込みを行う。ディレクトリエントリを更新して、この新しいFITページ位置に直接アドレス指定を行うために、1つのディレクトリ論理ページの修正を行って、更新したFITページが占有する位置に続く物理ページ位置に、プログラミングを行う。このディレクトリページの論理ページポインタも、同じ動作で更新してプログラミングを行う。ブロック内の論理ページすべての論理ページポインタは、ブロック内の最後に書き込みが行われたディレクトリページ内でだけ有効であって、これは常に、ブロック内の最後に書き込みが行われたページである。
あるいは、FITページは論理ページポインタのセットを含んでいてもよいし、FITページは、ブロック内の最後に書き込みが行われたページであってもよい。
2つの具体的なファイル索引付けを行う実施形態で説明した構成のさらに別の変形例において、ディレクトリエントリを含んでいるページと、FITレコードを含んでいるページと、ホストからのデータを含んでいるページとが、同じブロックにともに存在していてもよい。ホストからデータの書き込みを行う場合、データグループの形式で、ブロック内の複数の連続する物理ページにプログラミングを行う。このデータグループの位置を、更新したFITページ内の関連するFITレコードのフィールドにより識別する。これは、データグループの終端のすぐ次の物理ページにプログラミングを行う。ディレクトリページも、FITページのすぐ後にプログラミングを行って、前述したように、更新したFITページ内のFITレコードすべてを示すポインタの更新を行う。
データグループがブロック内の3番目の最後のページを超えないようにすることで、このすぐ後に、FITページおよびディレクトリページのプログラミングを行うことが可能になる。
まとめ
例示の実施形態に関連して本発明の様々な態様を説明してきたが、本発明が添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
例示の実施形態に関連して本発明の様々な態様を説明してきたが、本発明が添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。
Claims (34)
- メモリシステムの外部から受け取ったファイルのデータで再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
前記メモリブロックに、一意のファイル識別子を有するファイルのデータを記憶するステップと、
個別のファイルに対し、前記個別のファイルのデータの前記物理ブロックの位置のレコードを保持するステップと、
分類(1)近い将来修正を行う可能性がある、または分類(2)近い将来修正を行う可能性がない、のうちのいずれかとして、前記個別のファイルの分類を保持するステップと、
一意のファイル識別子により、(1)と分類されたファイルのレコードへの間接リンクと、(2)と分類されたファイルのレコードへの直接リンクとである、前記ファイルのレコードへのリンクのディレクトリを保持するステップと、
一意のファイル識別子を用いることにより、前記ディレクトリを介して前記レコードのうちの選択した1つにアクセスするステップと、
を含む方法。 - 請求項1記載の方法において、
前記メモリシステムに接続しているホストシステムが前記個別のファイルを開くと指定する分類(1)にファイルを保持し、前記メモリシステムに接続しているホストシステムが前記個別のファイルを閉じると指定する分類(2)にファイルを保持する方法。 - 請求項1記載の方法において、
前記メモリシステムに接続しているホストからの少なくとも1つの前記メモリブロック内へのファイルデータの書き込みに応答して、前記メモリシステムが前記ファイル分類を保持する方法。 - 請求項1記載の方法において、
ファイルの前記間接リンクは、エントリを前記ファイル変更の前記レコードを含んでいる第2の位置として変更を行わない前記メモリ内の第1の位置のアドレスの前記ディレクトリに含んでいて、前記第1の位置は変更のある前記第2の位置のアドレスを含んでいて、ファイルの前記直接リンクは、エントリを前記第2の位置のアドレスの前記ディレクトリに含んでいる方法。 - 請求項1記載の方法において、
(1)と分類されたファイルのレコードを他のファイルのレコードがない前記メモリブロック内の個別のページに保持し、(2)と分類されたファイルの複数のレコードを前記メモリブロック内の個別のページに保持する方法。 - 請求項1記載の方法において、
(2)と分類されたファイルの多数のレコードを前記メモリブロックの第1のページにともにグループ化し、それらの数のレコードへの多数のリンクを、前記ディレクトリを構成する前記メモリブロックの第2のページにともにグループ化する方法。 - 請求項6記載の方法において、
前記第1のページに記憶してある(2)と分類されたファイルのレコードの数を、そのリンクを前記第2のページに記憶してあるファイルに制限する方法。 - 一意のファイル識別子が識別したファイルのデータで再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
個別のファイルのデータを1つ以上のデータグループとして記憶するステップと、
前記ファイルのデータそれぞれのものを構成する前記データグループのレコードを保持するステップと、
前記一意のファイル識別子により、非アクティブファイルへの直接リンクと、アクティブファイルへの間接リンクとである、前記レコードへのリンクのディレクトリを保持するステップと、
を含む方法。 - 請求項8記載の方法において、
アクティブファイルは近い将来それらの修正を行う可能性があり、非アクティブファイルは近い将来それらの修正を行う可能性がない方法。 - 請求項8記載の方法において、
アクティブファイルは、前記メモリシステムに接続しているホストが開いていると指定したファイルを含み、非アクティブファイルは、前記ホストが閉じていると指定したファイルを含んでいる方法。 - 請求項8記載の方法において、
前記メモリシステムは、前記メモリブロック内の前記ファイルの記憶の少なくとも1つのパターンを監視することにより、前記個別のファイルがアクティブまたは非アクティブであると識別を行う方法。 - 請求項8記載の方法において、
前記1つ以上のデータグループは、メモリセルブロック内の連続する論理ファイルオフセットアドレスおよび連続する物理アドレスにデータを含んでいる方法。 - 請求項8記載の方法において、
アクティブファイルのレコードを、他のファイルのレコードがない前記メモリブロック内の個別のページに保持し、非アクティブファイルの複数のレコードを、前記メモリブロック内の個別のページに保持する方法。 - 請求項8記載の方法において、
非アクティブファイルの多数のレコードを前記メモリブロックの第1のページにともにグループ化し、それらの数のレコードへの多数のリンクを、前記ディレクトリを構成する前記メモリブロックの第2のページにともにグループ化する方法。 - ファイル内の一意のファイル識別子およびオフセットアドレスが識別したデータで、ブロックのページの再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
個別のファイルのデータを、メモリセルブロック内の連続する論理ファイルオフセットアドレスおよび連続する物理アドレス内のデータを個別に指定する、1つ以上のデータグループとして記憶するステップと、
前記個別のファイルの前記データグループの表にエントリのセットを保持するステップと、
ファイルの一意の識別子により、閉じているファイルのデータへの直接リンクと、開いているファイルのデータへの間接リンクとである、前記ファイルのデータの前記表内のエントリに前記ファイルをリンクするファイルディレクトリを保持するステップと、
を含む方法。 - 請求項15記載の方法において、
開いているファイルの表を、他のファイルの表を含まない前記メモリブロック内の個別のページに保持し、閉じられているファイルの複数のレコードを、前記メモリブロック内の個別のページに保持する方法。 - 請求項15記載の方法において、
閉じられているファイルの多数のレコードを前記メモリブロックの第1のページにともにグループ化し、それらの数のレコードへの多数のリンクを、前記ディレクトリを構成する前記メモリブロックの第2のページにともにグループ化する方法。 - ブロックのページ内のデータの再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
第1の複数のページに、個別に一意のファイル識別子を有するファイルのデータを記憶するステップと、
少なくとも第2のページに、前記第1の複数のページに記憶している前記ファイルのデータの前記物理ページ位置のレコードを保持するステップと、
少なくとも第3のページに、少なくとも前記第2のページ内のレコードの前記位置を示すポインタを保持し、前記第2のページ内の前記レコードを、そのポインタを前記第3のページに記憶してある前記ファイルのものに制限するステップと、
を含む方法。 - 請求項18記載の方法において、
少なくとも前記第2のページ内のレコードの位置を示すポインタが、前記レコードが関連する前記ファイルの一意の識別子に対応付けられている方法。 - 請求項18記載の方法において、
前記第1の複数のページが、1つ以上のブロックの第1のグループに位置し、前記少なくとも第2のページが、1つ以上のブロックの第2のグループに位置し、前記少なくとも第3のページが、1つ以上のブロックの第3のグループに位置している方法。 - 請求項18記載の方法において、
前記第1の複数のページが、1つ以上のブロックの第1のグループに位置し、前記少なくとも第2のページおよび前記少なくとも第3のページが、1つ以上のブロックの第2のグループの共有ブロックに位置している方法。 - 請求項18記載の方法において、
前記第1の複数のページ、前記少なくとも第2のページおよび前記少なくとも第3のページが、1つ以上のブロックのグループの共有ブロックにともに位置している方法。 - ブロックのページ内のデータの再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
少なくとも第1のページに、データを記憶してある前記物理ページの位置のレコードを保持するステップと、
少なくとも第2のページに、少なくとも前記第1のページ内のレコードの前記位置を指すポインタを保持し、前記第1のページ内の前記レコードを前記第2のページに記憶してある前記ポインタが指すものに制限するステップと、
を含む方法。 - ブロックのページ内のファイルのデータの再プログラミングを行う前に消去が行われるメモリセルブロックにグループ化した記憶セルを有する、不揮発性メモリシステムの動作方法であって、
前記メモリブロックに、一意のファイル識別子を有するファイルのデータを記憶するステップと、
個別のファイルに対し、前記個別のファイルのデータの前記物理ブロックの位置のレコードを保持するステップと、
一意のファイル識別子により、前記レコードの物理アドレスを含むメモリの1つ以上の位置へのリンクである、前記ファイルの前記レコードへのリンクのディレクトリを前記ディレクトリに保持するステップと、
一意のファイル識別子を用いることにより、前記ディレクトリを介して前記レコードのうちの選択した1つにアクセスし、個別のファイルのレコードを他のファイルのレコードがない個別のページに保持するステップと、
を含む方法。 - データの再プログラミングを行う前にともに消去が行われるメモリセルブロックにグループ化した記憶セルを有する不揮発性メモリのメモリシステムであって、
前記メモリシステムの外部から受け取った一意のファイル識別子を有するファイルのデータを、それらのファイル識別子により、前記メモリブロックに記憶し、
データの前記物理ブロック位置のレコードを、前記個別のファイルに対し保持し、
分類(1)近い将来修正を行う可能性がある、または分類(2)近い将来修正を行う可能性がない、のうちのいずれかとして、前記個別のファイルの分類を保持し、
一意のファイル識別子により、(1)と分類されたファイルのレコードへの間接リンクと、(2)と分類されたファイルのレコードへの直接リンクとである、前記ファイルのレコードへのリンクのディレクトリを保持するメモリシステム。 - 請求項25記載のメモリシステムにおいて、
さらに、前記メモリシステムに接続しているホストシステムが前記個別のファイルを開くと指定する分類(1)にファイルを保持し、前記メモリシステムに接続しているホストシステムが前記個別のファイルを閉じていると指定する分類(2)にファイルを保持するメモリシステム。 - 請求項25記載のメモリシステムにおいて、
さらに、ファイルの前記間接リンクは、エントリを前記ファイル変更の前記レコードを含んでいる第2の位置として変更を行わない前記メモリ内の第1の位置のアドレスの前記ディレクトリに含んでいて、前記第1の位置は変更のある前記第2の位置のアドレスを含んでいて、ファイルの前記直接リンクは、エントリを前記第2の位置のアドレスの前記ディレクトリに含んでいるメモリシステム。 - 請求項25記載のメモリシステムにおいて、
さらに、(1)と分類されたファイルのレコードを他のファイルのレコードがない前記メモリブロック内の個別のページに保持し、(2)と分類されたファイルの複数のレコードを前記メモリブロック内の個別のページに保持するメモリシステム。 - 請求項25記載のメモリシステムにおいて、
さらに、(2)と分類されたファイルの多数のレコードを前記メモリブロックの第1のページにともにグループ化し、それらの数のレコードへの多数のリンクを、前記ディレクトリを構成する前記メモリブロックの第2のページにともにグループ化するメモリシステム。 - 請求項29記載のメモリシステムにおいて、
さらに、前記第1のページに記憶してある(2)と分類されたファイルのレコードの数を、そのリンクを前記第2のページに記憶してあるファイルに制限するメモリシステム。 - データのブロックのページへの再プログラミングを行う前にともに消去が行われるメモリセルブロックにグループ化した記憶セルを有する不揮発性メモリのメモリシステムであって、
第1の複数のページに記憶される一意のファイル識別子を個別に有するファイルのデータと、
少なくとも第2のページ内の前記一意に識別が行われたファイルのデータを保持している前記物理ページ位置のレコードと、
前記少なくとも第2のページ内のレコードの前記位置を示すポインタを、少なくとも第3のページに保持し、前記第2のページ内の前記レコードを、そのポインタを前記第3のページに記憶している前記ファイルのものに制限する、ポインタと、
を備えるメモリシステム。 - 請求項31記載のメモリシステムにおいて、
さらに、前記第1の複数のページが、1つ以上のブロックの第1のグループに位置し、前記少なくとも第2のページが、1つ以上のブロックの第2のグループに位置し、前記少なくとも第3のページが、1つ以上のブロックの第3のグループに位置しているメモリシステム。 - 請求項31記載のメモリシステムにおいて、
前記第1の複数のページが、1つ以上のブロックの第1のグループに位置し、前記少なくとも第2のページおよび前記少なくとも第3のページが、1つ以上のブロックの第2のグループの共有ブロックに位置しているメモリシステム。 - 請求項31記載のメモリシステムにおいて、
前記第1の複数のページ、前記少なくとも第2のページおよび前記少なくとも第3のページが、1つ以上のブロックのグループの共有ブロックにともに位置しているメモリシステム。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US70538805P | 2005-08-03 | 2005-08-03 | |
US74674206P | 2006-05-08 | 2006-05-08 | |
US11/459,255 US7949845B2 (en) | 2005-08-03 | 2006-07-21 | Indexing of file data in reprogrammable non-volatile memories that directly store data files |
US11/459,246 US7669003B2 (en) | 2005-08-03 | 2006-07-21 | Reprogrammable non-volatile memory systems with indexing of directly stored data files |
PCT/US2006/030098 WO2007019175A2 (en) | 2005-08-03 | 2006-08-01 | Indexing of file data in reprogrammable non-volatile memories that directly store data files |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009503740A true JP2009503740A (ja) | 2009-01-29 |
Family
ID=37441507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008525157A Pending JP2009503740A (ja) | 2005-08-03 | 2006-08-01 | データファイルを直接記憶する再プログラム可能な不揮発性メモリ内のファイルデータの索引付け |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1917577A2 (ja) |
JP (1) | JP2009503740A (ja) |
KR (1) | KR20080038368A (ja) |
TW (1) | TW200731067A (ja) |
WO (1) | WO2007019175A2 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007073536A2 (en) * | 2005-12-21 | 2007-06-28 | Sandisk Corporation | Non-volatile memories and methods with memory allocation for a directly mapped file storage system |
EP2240867A4 (en) * | 2007-12-13 | 2011-02-09 | Redknee Inc | METHOD AND SYSTEM FOR STORAGE |
JP2009288924A (ja) * | 2008-05-28 | 2009-12-10 | Nec Electronics Corp | ファイルアクセスシステム |
DE102008059352A1 (de) * | 2008-11-27 | 2010-06-02 | Giesecke & Devrient Gmbh | Speicherzugriff auf einen portablen Datenträger |
TWI459197B (zh) * | 2011-04-21 | 2014-11-01 | Phison Electronics Corp | 資料寫入方法、記憶體控制器與記憶體儲存裝置 |
US9032137B2 (en) * | 2012-11-21 | 2015-05-12 | Intel Corporation | Flexible wear management for non-volatile memory |
TWI582581B (zh) * | 2016-05-13 | 2017-05-11 | 群暉科技股份有限公司 | 用來於一冗餘儲存系統中進行資料修復之方法與裝置 |
TWI643066B (zh) * | 2018-01-15 | 2018-12-01 | 慧榮科技股份有限公司 | 用來於一記憶裝置中重新使用關於垃圾收集的一目的地區塊之方法、記憶裝置及其控制器以及電子裝置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2291990A (en) * | 1995-09-27 | 1996-02-07 | Memory Corp Plc | Flash-memory management system |
-
2006
- 2006-08-01 JP JP2008525157A patent/JP2009503740A/ja active Pending
- 2006-08-01 EP EP06789199A patent/EP1917577A2/en not_active Withdrawn
- 2006-08-01 KR KR1020087004711A patent/KR20080038368A/ko not_active Application Discontinuation
- 2006-08-01 WO PCT/US2006/030098 patent/WO2007019175A2/en active Application Filing
- 2006-08-03 TW TW095128511A patent/TW200731067A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2007019175A2 (en) | 2007-02-15 |
KR20080038368A (ko) | 2008-05-06 |
EP1917577A2 (en) | 2008-05-07 |
WO2007019175A3 (en) | 2007-09-07 |
TW200731067A (en) | 2007-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7669003B2 (en) | Reprogrammable non-volatile memory systems with indexing of directly stored data files | |
US7949845B2 (en) | Indexing of file data in reprogrammable non-volatile memories that directly store data files | |
JP4533956B2 (ja) | フラッシュメモリシステムのデータ記憶容量の解放 | |
US7450420B2 (en) | Reclaiming data storage capacity in flash memories | |
US8239639B2 (en) | Method and apparatus for providing data type and host file information to a mass storage system | |
US8880483B2 (en) | System and method for implementing extensions to intelligently manage resources of a mass storage system | |
US7814262B2 (en) | Memory system storing transformed units of data in fixed sized storage blocks | |
US7480766B2 (en) | Interfacing systems operating through a logical address space and on a direct data file basis | |
US7529905B2 (en) | Method of storing transformed units of data in a memory system having fixed sized storage blocks | |
US8713283B2 (en) | Method of interfacing a host operating through a logical address space with a direct file storage medium | |
KR101378031B1 (ko) | 데이터 파일을 직접적으로 저장하는 메모리 블록의 관리 | |
KR101464199B1 (ko) | 연속 논리 주소 공간 인터페이스를 구비한 다이렉트 데이터 파일 시스템을 사용하는 방법 | |
US20090164745A1 (en) | System and Method for Controlling an Amount of Unprogrammed Capacity in Memory Blocks of a Mass Storage System | |
US20080307156A1 (en) | System For Interfacing A Host Operating Through A Logical Address Space With A Direct File Storage Medium | |
JP2009503740A (ja) | データファイルを直接記憶する再プログラム可能な不揮発性メモリ内のファイルデータの索引付け | |
US20130326128A1 (en) | Methods and Apparatus for Passing Information to a Host System to Suggest Logical Locations to Allocate to a File |