フラッシュメモリシステムの概要
図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) ”(特許文献3)に記載のリングバスなどの、他の構成のシステムバスを用いることもできる。
典型的なコントローラチップ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号(特許文献4)、第5,774,397号(特許文献5)、第6,046,935号(特許文献6)、第6,373,746号(特許文献7)、第6,456,528号(特許文献8)、第6,522,580号(特許文献9)、第6,771,536号(特許文献10)および第6,781,877号(特許文献11)ならびに米国公開特許出願第2003/0147278号(特許文献12)を参照することができる。
図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号(特許文献13)に記載されているような非導電性誘電電荷補足材料とすることもできる。
図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号(特許文献14)にいくつか記載されている。
典型的には、データ圧縮は、処理において無効なデータのあるメタページを無視して、メタブロックからのすべての有効なデータメタページの読み出しと、新しいメタブロックへのそれらの書き込みを行う。有効なデータのあるメタページを、記憶してあるデータの論理アドレス順と一致する物理アドレス順で配列することも好ましい。新しいメタブロックを占有するメタページの数が、古いメタブロックを占有していた数よりも少なくなっている。というのは、無効なデータを含むメタページを新しいメタブロックにコピーしていないからである。次に、古いブロックを消去し、新しいデータの記憶に利用できるようにする。次に、統合で得た追加したメタページの容量を、他のデータの記憶に用いることができる。
ガーベッジコレクションを行う間、連続する論理アドレスまたはほぼ連続する論理アドレスのある有効なデータのメタページを、2つ以上のメタブロックから集め、別のメタブロックに書き換える。通常、消去ブロックプールに1つである。有効なデータメタページすべてをもともとの2つ以上のメタブロックからコピーする場合、これらを消去して後で用いる。
特に、ホストからのコマンドが実行可能になる前に、データ統合またはガーベッジコレクションを行う必要がある場合、データ統合およびガーベッジコレクションには時間がかかり、メモリシステムの性能に影響を与えることがある。通常、メモリシステムのコントローラによりこのような動作のスケジュールをたてて、できる限りバックグラウンドで実行するが、これらの動作を行わなければならないので、コントローラは、このような動作が完了するまで、ホストにビジー状態信号を送信しなければならなくなる。ホストコマンドの実行が遅延可能な一例として、ホストがメモリに書き込みを行いたいデータをすべて記憶するのに、消去ブロックプール内の前に消去したメタブロックが十分なく、データ統合またはガーベッジコレクションが必要なので、1つ以上のメタブロックの有効なデータをはじめにクリアし、次に、消去する例が挙げられる。従って、このような混乱を最小にするために、メモリ制御を管理することが注目される。多くのこのような技術について、2003年12月30日出願の米国特許出願第10/749,831号、現在公開されている公開特許出願第2005/0144358号である“大容量消去ブロックを有する不揮発性メモリシステムの管理(Management of Non-Volatile Memory Systems Having Large Erase Blocks) ”(特許文献15)、2003年12月30日出願の米国特許出願第10/750,155号“ブロック管理システムを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Block Management System) ”(特許文献16)、2004年8月13日出願の米国特許出願第10/917,888号、現在公開されている公開特許出願第2005/0141313号である“メモリプレーン配列を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Memory Planes Alignment)”(特許文献17)、現在公開されている公開特許出願第2005/0141312号の2004年8月13日出願の米国特許出願第10/917,867号(特許文献18)、2004年8月13日出願の米国特許出願第10/917,889号、現在公開されている公開特許出願第2005/0166087号である“位相プログラム障害処理を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Phased Program Failure Handling) ”(特許文献19)、2004年8月13日出願の米国特許出願第10/917,725号、現在公開されている公開特許出願第2005/0144365号である“制御データ管理を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Control Data Management) ”(特許文献20)、2005年7月27日出願の米国特許出願第11/192,220号“マルチストリーム更新トラックを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Multi-Stream Update Tracking)”(特許文献21)、2005年7月27日出願の米国特許出願第11/192,386号“スクラッチパッドおよび更新ブロックのための向上した索引付けを用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Improved Indexing for Scratch Pad and Update Blocks) ”(特許文献22)、2005年7月27日出願の米国特許出願第11/191,686号“マルチストリーム更新を用いた不揮発性メモリおよび方法(Non-Volatile Memory and Method with Multi-Stream Updating)”(特許文献23)に記載されている。
大容量消去ブロックを有するメモリアレイの動作を効率的に制御する課題の1つは、任意の書き込み動作の間に記憶が行われているデータセクタの数を、メモリのブロックの容量および境界と一致させ、調整することである。アプローチの1つは、全メタブロックを満杯にする量よりも少ないデータ量を記憶する必要がある場合、ホストからの新しいデータの記憶に用いられるメタブロックを、最大数のブロックよりも少ない数で構成することである。適応メタブロックの利用については、2003年12月30日出願の米国特許出願第10/749,189号、現在公開されている公開特許出願第2005/0144357号である“適応メタブロック(Adaptive Metablocks) ”(特許文献24)に記載されている。データブロック間の境界およびメタブロック間の物理境界のフィッティングについては、現在公開されている公開特許出願第2005/0144363号の2004年5月7日出願の米国特許出願第10/841,118号(特許文献25)、2004年12月16日出願の米国特許出願第11/016,271号、現在公開されている公開特許出願第2005/0144367号である“データランプログラミング(Data Run Programming)”(特許文献26)に記載されている。
メモリコントローラは、FAT表からのデータも用いる。これは、ホストが不揮発性メモリに記憶したもので、メモリシステムの動作をより効率的に行う。このような利用の1つは、ホストが識別したデータが使われなくなって、それらの論理アドレスの割り当てを解除する際に、学習することである。これを知ることにより、通常、ホストが書き込みを行う新しいデータをそれらの論理アドレスに書き込むことにより学習する前に、メモリコントローラが、このような無効なデータを含むブロックを消去するスケジュールをたてることが可能になる。このことは、2004年7月21日出願の米国特許出願第10/897,049号、現在公開されている公開特許出願第2006/0020744号である“不揮発性メモリシステム上のデータを保持する方法および装置(Method and Apparatus for Maintaining Data on Non-Volatile Memory Systems)”(特許文献27)に記載されている。他の技術は、任意の書き込み動作を1つのファイルに行うのかどうかを推理するために、すなわち、複数のファイルの間に境界があるかどうかを推理するために、新しいデータをメモリに書き込むホストのパターンの監視を行うことを含んでいる。2004年12月23日出願の米国特許出願第11/022,369号、現在公開されている公開特許出願第2006/0020745号である“最適化順次クラスタ管理のためのFAT分析(FAT Analysis for Optimized Sequential Cluster Management)”(特許文献28)に、このタイプの技術の利用について記載されている。
メモリシステムの動作を効率的に行うために、個別のファイルのデータにホストが割り当てた論理アドレスについて、できるだけ多くをコントローラがわかっていることが望ましい。次に、ファイル境界がわからない場合、多数のメタブロック間で分散するよりも、コントローラは、1つのメタブロックまたはメタブロックグループにデータファイルを記憶することが可能になる。結果として、データ統合およびガーベッジコレクション動作の回数と複雑さとが低減する。結果として、メモリシステムの性能が向上する。しかし、前述したように、ホスト/メモリインターフェイスが論理アドレス空間161(図7)を含んでいる場合、メモリコントローラがホストデータファイル構造について多く知ることは困難である。
図8を参照すると、図7にすでに示した典型的な論理アドレスホスト/メモリインターフェイスを別のやり方で示している。ホストが、ホストが生成したデータファイルを論理アドレスに割り当てている。次に、メモリシステムがこれらの論理アドレスを認識し、実際にデータを記憶してあるメモリセルブロックの物理アドレスに対してマッピングを行う。
ファイルベースのメモリインターフェイスおよび動作
ホストと、大容量のデータを記憶するメモリシステムとの間の、異なるタイプのインターフェイスにより、論理アドレス空間を用いなくていいようになる。そのかわり、ホストは、一意のファイルID(または他の一意の参照)と、ファイル内のデータ単位(バイトなど)のオフセットアドレスとにより、各ファイルに対し論理的にアドレス指定を行う。このファイルアドレスを、直接メモリシステムのコントローラに渡し、各ホストファイルのデータを物理的に記憶してあるそれ自体の表に保存する。図2〜図6に関連して前述した同じメモリシステムで、この新しいインターフェイスを実施することができる。前述したものとの主な違いは、メモリシステムがホストシステムと行う通信方法である。
図7の論理アドレスインターフェイスと比較を行うべき、このファイルベースのインターフェイスを、図9に示す。ファイル1、2および3のそれぞれの識別名と、図9のファイル内のデータオフセットを、直接メモリコントローラに渡す。次に、メモリコントローラ機能173により、この論理アドレス情報を、メタブロックの物理アドレスおよびメモリ165のメタページに変換する。ファイルディレクトリは、それぞれ記憶してあるセクタ、ページまたは他の単位のファイルデータが属するホストファイルを常に把握している。
図8の論理アドレスインターフェイスと比較を行うべき、ファイルベースのインターフェイスを、図10にも示す。図8のFAT表に保持した論理アドレス空間およびホストについては、図10に示していない。むしろ、ファイル番号と、ファイル内のデータオフセットとにより、メモリシステムに対して、ホストが生成したデータファイルの識別を行う。次に、メモリシステムのコントローラは、メモリセルアレイの物理ブロックに対して直接ファイルのマッピングを行い、ホストファイルを記憶してあるメモリブロックのファイルディレクトリおよびインデックステーブル情報を保持する。そして、ホストは、論理アドレスインターフェイスの管理に現在必要なファイルアロケーションテーブル(FAT)を保持する必要はなくなる。
図11は、そのプロセッサと、コントローラの他の回路とで実行するメモリシステムのファームウェアが実行する直接データファイルシステムの主な機能の概要のブロック図である。これは、以下で説明する特定のメモリ動作について想定した、全体的なフレームワークである。ファイルベースのインターフェイス601層が、メモリシステムと、外部ホストシステム、または同じメモリカードまたはフラッシュドライブ上で実行するホストアプリケーションとの間で、コマンドおよびデータのやりとりを行う。ホストアプリケーションは、メモリシステムの3つの主な機能、すなわち、ファイルの書き込み、ファイルの削除、およびファイルの読み出しを行う。フラッシュメモリアレイ603内に、データを記憶してある。
ファイルブロック管理機能605は、データを識別したファイルに基づいて、フラッシュメモリへのデータの記憶を整理し、データを記憶するブロックが2つ以上のファイルになることを最小限にする。メモリ603の物理メモリセルブロックが、データ管理の基本単位である。
個別のメタページが特定のファイル内で連続する論理オフセットアドレス範囲のデータを含むように、機能607により、データをメタページに整理して、メモリ603に書き込みを行う。機能609は、メモリ603へのアクセスを制御し、そこに記憶してあるデータの読み出しを行う。ホストからコマンドを受けた場合、ファイルのデータの消去を行うことにより、機能611に、機能613が保持しているファイル索引付け情報および機能615内のブロックのリストの更新を行わせる。
ファイルデータ索引付け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号(特許文献29)を参照されたい。変換層621およびインターフェイス層623の情報についてはさらに、発明者アラン・シンクレア(Alan Sinclair) による2005年12月21日出願の米国特許出願第11/316,577号(特許文献30)により得られる。
新しいデータファイルのプログラミングを行ってメモリに取り込む場合、データを消去したメモリセルブロックに書き込む。ブロック内の第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を解放することが望ましいが、メモリにファイルデータの書き込みを行う一部としてではなく、好ましくは、後で行う。典型的には、このような解放を行うことにより、記憶してある特定のファイルのデータのデータグループの数がより少なくなる。
好ましくは、各ファイルのデータのオフセットを、前の説明によるファイルの生成または変更を行った後で、正しい論理的順序で連続して保持する。従って、データをファイルに挿入する動作の一部として、例えば、ホストが行った挿入したデータのオフセットは、挿入の直前のオフセットから連続し、挿入後のすでにファイルに入っているデータを、挿入したデータ量で増分する。最も一般的には、既存のファイルの更新を行うと、類似量の更新データで置き換えられた既存のファイルの任意のアドレス範囲のデータになるので、通常、他のファイルのデータのオフセットを置き換える必要はない。
図13に関連して前述した、データの割り当ておよび索引付け機能はすべて、メモリシステムのコントローラが行うことに留意されたい。適切なコマンドとともに、ホストは単に、ファイルIDおよびファイル内のデータのオフセットをメモリシステムに送る通信を行うだけでよい。残りはメモリシステムが行う。
前述したやり方でホストからのファイルデータを直接フラッシュメモリに書き込みを行う利点は、このように記憶してあるデータの細分性または分解を、ホストのデータと同じように保持することができることである。ホストアプリケーションが1バイトの細分性でファイルデータの書き込みを行う場合、例えば、そのデータについても、1バイト細分性でフラッシュメモリに書き込みを行う。次に、個別のデータグループ内のデータ量および位置を、バイト数で測定する。すなわち、ホストアプリケーションファイル内で別々にアドレス指定可能なデータの同じオフセット単位については、フラッシュメモリに記憶したときのそのファイル内でもやはり別々にアドレス指定可能である。次に、ブロック内の同じファイルのデータグループ間の境界はいずれも、最も近いバイトまたは他のホストオフセット単位に対し、インデックステーブルで指定されている。同様に、ブロック内の異なるファイルのデータグループ間の境界は、ホストのオフセット単位で定義されている。
用語“セクタ”とは、ここでは大きなブロックのメモリに用いられ、ECCが対応づけられている記憶してあるデータの単位を表している。セクタも、フラッシュメモリとやりとりするデータ転送の最小単位である。“ページ”は、ブロック内のメモリセルの単位を表すのに用いられ、プログラミングの最小単位である。“メタページ”とは、メタブロックの完全な並列処理を行うページを表すのに用いられる。メタページは、プログラミングの最大単位である。
ファイルブロックの管理
図11のファイル対ブロックマッピング機能605の一例を以下に説明する。外部ホストまたはホスト内部処理のいずれかから、メモリシステムにデータの書き込みを行うか、またはデータ解放動作の一部として、メモリの他の位置からコピーする場合、特定の処理に基づいて、データを記憶する宛先ブロックを選択する。この処理では、記憶してあるファイルデータの構造に基づいて、特定のブロックの種類を認識する。次に、多数の状態のうちの1つとして、メモリシステムに記憶してある各ファイルに注記を行う。ファイルの状態はそれぞれ、ファイルのデータを記憶してあるブロックの数と種類とで定義済みである。ファイルにデータの書き込みを行う場合、その現在の状態と、ある状態から別の状態へ許可されている遷移とを制御して、1つ以上の他のファイルのデータも含んでいる特定のファイルのデータを含むブロックの数を制限する。これにより、メモリブロックの効率的な利用を促進し、新しいデータまたはコピーしたデータを受け入れるのに十分な消去ブロックを全メモリで保持するのに必要な、後で行う解放動作の頻度を低減する。
この例で認識される、ファイルデータを含むブロックの種類は以下の通りである。
“ファイルブロック”とは、完全にプログラミングが行われ、1つのファイルの有効なデータを含んでいる。使われなくなったデータをいくつか含んでいることもある。
“プログラムブロック”とは、部分的にプログラミングが行われ、1つのファイルにだけ有効なデータを含んでいる。消去した容量がいくらかブロックに残っている。使われなくなったデータをいくつか含んでいることもある。
“共有ブロック”とは、部分的にプログラミングが行われ、2つ以上のファイルに有効なデータを含んでいる。消去した容量がいくらか残っている。使われなくなったデータをいくつか含んでいることもある。
“フル共有ブロック”とは、プログラミングが完全に行われ、2つ以上のファイルに有効なデータを含んでいる。使われなくなったデータをいくつか含んでいることもある。
“フルプログラムブロック”とは、ファイルに直近に書き込まれたデータと使われなくなったデータとを含む場合、満杯になったプログラムブロックに対する一時指定であり、ファイルに対し存在するオフセットアドレスの範囲は、1つのブロックが収容可能ものである。ファイルに書き込む次のデータが、1つのブロックが収容可能なオフセットアドレスの範囲を超えている場合、フルプログラムブロックは次に、ファイルブロックとして指定を受ける。完全プログラムブロックは、既存の論理ブロックアドレス(LBA)システムの完全な無秩序(Chaotic) ブロックに相当する。というのは、一旦有効なデータの指定を行って、使われなくなったデータを少なくとも別のときに1回指定したならば、このブロックにファイルの特定の論理オフセットの書き込みを複数回行うからである。
別のブロックの種類は、“消去ブロック”であり、ブロックの全容量のプログラミングを行わず、データを受け入れられるようにしたものである。メモリが満杯であったり、または全データ量に近かったりする場合、典型的には、使用されているブロック内に存在する使われていない容量を連続して解放することにより、指定の最小数の消去ブロックのプールを保持する。
“フラクタルブロック”とは、プログラムブロック、共有ブロックまたはフル共有ブロックのことを言う全体的な用語である。ファイルのフラクタルブロックは、プログラミングを行わないメモリ容量、他のファイルの有効なデータのいずれか、または両方とともに、有効なファイルのデータを含んでいる。ここで説明する技術の主な目的は、ファイルのデータを受け取ると指定されているアクティブブロックの種類を管理することにより、メモリシステム内のフラクタルブロックの数を最小限にすることである。これにより、指定の最小数の消去ブロックを保持するのに必要なガーベッジコレクションおよびデータ統合(ブロック解放動作)の原因を低減する。そして、データの内部コピーを行って、前にプログラミングを行ったブロック内の使われていない容量の断片を解放するのに時間がかからないので、メモリにデータの書き込みを行う速度が上がる。
ここで他の種類のブロックについて用いられる用語を、まとめて説明する。
“部分ブロック”とは、プログラミングを行わない容量、1つ以上のファイルの有効なデータを含むもので、使われなくなったデータを含む場合もある。プログラムブロックおよび共有ブロックが、部分ブロックの一例である。
“使われなくなったブロック”とは、使われなくなったデータを含むファイルブロックまたはフル共有ブロックである。使われなくなったブロックは、消去した容量を含まず、有効なデータおよび使われなくなったデータの両方を含んでいる。
“無効なブロック”とは、有効なデータを全く含まないものである。無効なブロックは、少なくとも使われなくなったデータを含み、有効なデータを含まない、消去した容量を含んでいる場合もある。
図14A〜図14Eは、前に説明した種類のブロックを用いる例をいくつか示している。図14Aでは、ファイルAのデータが、ブロック661および663に埋められ、第3のブロック665に部分的に埋められている。この例の各ブロックには、左から右へデータの書き込みを行う。まずブロック661を埋め、次に、ブロック663を埋め、その後、ブロック665の一部分に書き込みを行う。残っているブロック665の部分は、追加のデータを記憶可能な、プログラミングを行わない消去した容量である。ブロック661および663は、前の定義によるファイルブロックであり、ブロック665はプログラムブロックである。新しいデータがあれば、ブロック665に書き込みを行い、プログラムポインタPから開始する。ブロックにデータの書き込みを行う際に、ポインタPは左から右へ移動して、ブロックの次に利用可能な記憶位置を常に示している。プログラミングを行わない消去した容量を保持する個別のブロックに対して、現在アクティブであるかどうかをこのようなポインタが保持するので、ブロックに書き込みを行う他のデータの物理アドレスが常にわかるようになる。
一例として、図14Bは、ファイルブロック662とフルプログラムブロック667とに記憶したファイルAを示す。フルプログラムブロックに対する前の定義により、ブロック667は、ファイルAの直近の書き込みデータと、使われなくなったデータとを含み、使われていない容量はない。また、前の定義により、2つのブロック662および667に記憶したファイルAの全データ量は、1つのブロックの記憶容量に等しい。プログラムポインタPが示すブロック667の終端に、ファイルAの最後のデータが書き込まれている。さらにファイルAのデータを受信した場合、別のブロックに対しプログラミングを行う。そのブロックが、ブロック667のファイルAのデータを集めた別のブロックになる。というのは、使われなくなったデータが占有する空間を解放するからである。あるいは、完全に消去したブロックに、追加データの書き込みを行うことができる。いずれの場合も、ポインタPは、追加したファイルAのデータの開始位置の新しいブロックに移動する。次に、ブロック667がファイルブロックになる。従って、まさに図14Bに示したときだけ存在するので、ブロック667は過渡的なものである。ファイルAのデータですべて埋まってしまう直前のものがプログラムブロックであって、ファイルAの新しいデータが書き込まれると直ちに、ファイルブロックになる。
図14Cの例は、共有ブロックであるブロック669を含んでいる。というのは、別のファイルBのデータとともに、現在のファイルAのデータと、プログラミングを行わない容量とを含んでいるからである。ファイルAの終端でブロック669に新しいデータの書き込みを行い、プログラムポインタPが示すところから開始する。ブロック669は、ファイルAのアクティブブロックである。プログラムポインタPのところでファイルAまたはBの追加データの書き込みを行う場合には、ファイルBのアクティブブロックである場合もある。あるいは、個別のブロック(図示せず)がファイルBのアクティブブロックであってもよい。
この形態のプログラミングを行わない容量をうまく利用するために、消去ブロックではなく、別のファイルのデータをすでに含んでいる部分ブロックの消去した容量に直接ファイルのデータの書き込みを行ってもよい。これは特に、ファイルデータの量が満杯のブロックの容量より少ないとわかっているファイルデータの書き込みを行う場合に、有益である。既存の部分ブロックの検索を行って、書き込みを行うデータの量がわかっているデータに合う消去した容量の量を検出する。データのページの数(または、メタブロックを用いる場合はメタページ)を、部分ブロック内のプログラミングを行わない、消去した容量のページの数と比較する。このようにプログラムブロックの使われていない消去が行われた空間に対しプログラミングを行う場合、共有ブロックに変換する。
図14Dでは、ファイルブロック661と、ブロック671の一部分と、ブロック673の一部分とにファイルAを記憶してある。2つのファイルAおよびBのデータで満杯なので、ブロック671はフル共有ブロックである。ブロック673は、図14Aのブロック665と同様のプログラムブロックである。ブロック673はファイルのアクティブブロックであり、ポインタPがブロック673内の使われていない容量の位置を指し、追加データの書き込みを開始するところである。
図14Eの例では、フル共有ブロック671および共有ブロック675の一部分にファイルAの書き込みを行う。ブロック675は、第3のファイルCのデータを含んでいる。ポインタPは、アクティブブロック675の使われていない部分の最初の位置を指し、追加データの書き込みを行うところである。
図14A〜図14Eの例では、いくつかの異なる種類のブロックを説明するために、複数のブロックにファイルのデータを記憶してあるものを示しているが、多くの場合、ファイルを記憶するには、もっと少ない数のブロックで十分であって、1つのブロックでも十分である。ここで説明する技術は、このような小さいファイルにも適用可能である。また、大きいファイルは、4つ以上のブロックのページを占有することになる。
ブロック665、667、669、671、673および675は、フラクタルブロックであることに留意されたい。任意の1つのファイルのデータが占有するフラクタルブロックの数を最小限にすることが望ましい。というのは、それらブロックが存在することで、それらの使われていない容量を解放する必要性が増すので、システムの性能に悪影響を与えるからである。使われていない消去した容量は、部分ブロック665、669、673および675にあるが、ファイルの書き込みが行われていないデータ量がわかっていて、かつそのわかっている量が、これらのブロックのうちの1つの使われていない容量と一致していなければ、ホストからの新しいデータの書き込みをこの空間に直接行うことを効率的に行えない。最も一般的には、特定のファイルに対するホストからのデータ量がわかっていないので、これらのビットの容量をすぐには埋められない。従って、メモリ容量を効率的に利用するために、解放動作を行う間、別のブロックから使われていない空間へデータを移動する必要がある場合もある。ブロック669、671および675は2つ以上のファイルのデータを含み、このことは、ファイルのうちの1つを削除したり、または共有ブロックに記憶したそのデータが使われなくなったりした場合、データの解放を行って、使われなくなったデータが占有するブロックの容量を解放する可能性があることを意味している。
従って、データ解放動作に必要な時間を減らすために、1つ、2つまたは他の数のフラクタルブロックに限って1度に特定のファイルのデータを記憶できるようにする。ここで説明する具体例では、2つ以下のフラクタルブロックにしか任意の1つのファイルのデータを記憶しないようにする。新しいアクティブブロックを指定してファイルのデータを記憶する処理について考える。許可されているファイル状態のセットのうちの1つを、ファイルのデータを記憶してあるブロックの種類で定義済みの各ファイルに割り当てる。既存のブロックが満杯になった場合などで、特定のファイルのデータを受け取るのに新しいアクティブブロックに割り当てが必要な場合、ファイルの状態によりブロックの種類をこのように指定するが、多くの場合、他の要因も考えられる。
ここで説明するメモリ動作のコンセプトの具体的な実施例における、フラクタルブロックおよびファイルのデータを記憶してあるフルプログラムブロックの種類および組み合わせについて、10の許可されているファイル状態0〜9の定義を図15の表に示す。許可されているファイル状態のそれぞれにより、たった2つのフラクタルブロックまたは1つのフルプログラムブロックに対してデータの記憶が可能になる。ファイルに対応付けられているファイルブロックの数に、制限はない。メモリがホストからそのデータを受け取る場合と、解放動作を行う間メモリ内でデータを再配置する場合との2つの場合では、これらのファイル状態を用いて、ファイルデータを記憶するアクティブブロックを選択する。メモリシステムに記憶してある全ファイルの状態を監視して、他の情報とともに、ファイルのFITレコードのヘッダといったファイルインデックステーブル(FIT)613(図11)に、記録する。状態遷移が発生した場合は必ず、FITエントリを更新して、新しいファイル状態に記録する。
図15で定義済みのファイル状態0〜9の間の得られる主な遷移について、図16の状態図を示し、図17の表で説明する。これらの3つの図から、好適なメモリシステムの動作の詳細がわかり、この動作を行うのに十分であると考えられる。しかし、この動作のある態様について、さらに説明する。
図15の表に示すように、フラクタルブロックにデータがないので、ファイルを状態0と指定する。他の種類のブロックがファイルブロックだけなので、ファイルのデータは1つ以上のファイルブロックにしか書き込まれないものか、ファイルのデータをどのブロックにも記憶していないものかのいずれかである。前者が、データ量とブロック容量との間で必要な正確さによる一時的条件である可能性が一番大きい。この後者の条件は、メモリシステムが新しいファイルの情報を受け取ったものの、そのファイルのデータの書き込みをまだ行っていない場合に発生する。いずれの場合も、アクティブブロックがデータを受信すると指定する必要がある。ホストから長さがわからないデータを受け取った場合、消去ブロックをアクティブブロックとして指定する。一旦、消去ブロックにデータの書き込みを行ったならば、このブロックがアクティブプログラムブロックになったので、状態0から状態2へファイルが遷移する(図16を参照)。
しかし、ファイル状態0であり、ホストから受け取った新しいファイルのデータの長さがブロックの記憶容量より小さいとわかっている場合、消去した容量が、わかっているデータ量を記憶するのに十分に利用可能ならば、部分ブロックをアクティブブロックとして指定する。次に、ファイルは状態0から状態3へ遷移する(図16を参照)。このような部分ブロックは、プログラムブロックまたは共有ブロックである。長さがわかっているデータと、利用可能な部分ブロックの残っている記憶容量との間で、考えられる最良適合となる。量がわかっているデータに対して十分な容量のある部分ブロックがまったくなければ、消去ブロックにデータの書き込みを行うことにより、状態0から状態2へファイルが遷移する。
状態2のファイルの特徴は、プログラムブロックが、ファイルの追加データの受け取りに割り当てられていることである。しかし、ファイルが十分大きければ、ブロックは最終的に満杯になり、次に、別のアクティブブロックを指定する必要がある。今はファイルブロックである満杯のブロックには、使われなくなったデータは含まれず、ファイルは状態0に戻る。ここでは、アクティブブロックと指定しない。次に、前述したように、追加データを記憶する量によるが、消去ブロックまたは部分ブロックを、新しいアクティブブロックとして指定する。しかし、満杯のブロックに使われなくなったデータが含まれていて、ファイルの最大オフセットが、1つのブロックが収容可能なオフセットアドレスの範囲より小さければ、前の定義により、フルプログラムブロックになる。次に、好ましくは、その有効なデータを消去ブロックにコピーすることにより、ブロックを圧縮し、もともとのブロックを消去する。得られるブロックは、この有効なデータと消去した容量とを含むので、部分ブロックになる。次に、この新しい部分ブロックがアクティブプログラムブロックになる。ファイルの状態は、状態2から状態1へ遷移して、状態2に戻る(図16を参照)。しかし、状態1でファイルのデータを受け取って、そのオフセットアドレスが、1つのブロックが収容可能なアドレス範囲を超えている場合、フルプログラムブロックはファイルブロックになる。そして、ファイルは状態0に遷移する。
部分ブロックとして、解放動作を行う間、ファイルが状態2のときに存在するアクティブプログラムブロックを、ソースブロックからの別のファイルの量がわかっているデータの宛先ブロックとして選択する。プログラムブロックのIDを、リストのそれぞれのブロック内に利用可能な消去した容量を含んでいる部分ブロックのリストに保持する。ソースブロックからコピーするデータ量は、リストの部分ブロックの消去した容量と合っている。解放動作を行う間、現在のファイルのプログラムブロックを別のファイルのデータの宛先ブロックとして選択する場合、他のファイルのデータをその消去した容量にコピーした後で、プログラムブロックは、現在のファイルのアクティブ共有ブロックになる。そして、ファイルは、状態2から状態3へ遷移する(図15および図16参照)。
さらに、ファイルが状態2の間に、プログラムブロックを解放する動作一部として、ファイルのプログラムブロックに書き込んだデータを、別のファイルのデータを記憶してある部分ブロックである別のブロックにコピーする可能性がある。この状況で、解放動作の宛先ブロックがアクティブ共有ブロックになる。ファイルは状態2から状態4へ遷移する。これで、共有ブロックにファイルの別のデータの書き込みを行うことになり、ファイルのアクティブブロックになる。
状態2のファイルのアクティブ共有ブロックが満杯になった場合、フル共有ブロックとして指定する。そして、2つのフラクタルブロック、フル共有ブロックおよびプログラムブロックの限度まで、ファイルが入る。別のフラクタルブロックがファイルのデータの受け取りに割り当てられていないので、ファイルのデータをプログラムブロックから消去ブロックにコピーし、この新しいブロックをファイルのアクティブプログラムブロックとして指定する。ファイル状態遷移の一部として、このようなファイルデータのコピーを、ここでは“データ遷移”として識別し、図16および図17にそのように注記する。そして、ファイルは状態4から状態8へ遷移する。
状態遷移が完了したと見なす前に、すべてのデータ遷移を1つの動作として完了する。このことは、ファイルに、データの書き込みを行うアクティブブロックが必要な場合、データ遷移のデータコピー部分が完了するまで、メモリは他の動作を行うことができないことを意味している。従って、典型的には、このデータコピーを、時間の経過とともに他のメモリ動作と交互に行うことはできない。
ファイル状態4から状態3への遷移は、そのプログラムブロックを解放するブロックと指定する場合に発生する。解放動作の一部として、プログラムブロック内のファイルのデータを共有ブロックに移動する。その後、共有ブロックがファイルのアクティブブロックになる。さらに、一旦、状態4のファイルのアクティブ共有ブロックが満杯になったら、ファイルを2つのフラクタルブロックに記憶する。フラクタルブロックのうちの1つを削除するまで、別のブロックをアクティブブロックとして割り当てることはできない。従って、状態4から状態7への遷移の一部として、プログラムブロック内のデータを部分ブロックの消去した容量に移動し(データ遷移)、これにより、フラクタルプログラムブロックを削除する。そして、得られる共有ブロックがファイルのアクティブブロックになる。
状態3のときに、アクティブ共有ブロックにファイルのデータの書き込みを行う。解放動作を行う間、ファイルのデータをアクティブ共有ブロックから部分ブロックの消去した容量に移動する場合、宛先部分ブロックがファイルの別のデータを書き込むアクティブ共有ブロックになる。そして、ファイルは状態3から状態6へ遷移する。しかし、ソースプログラムブロックから移動するデータ量が、部分ブロックのリスト上の部分ブロックの容量とうまく適合しない場合、共有ブロック内のファイルデータを、そのブロックから消去ブロックへ移動するので、その消去ブロックがファイルのアクティブプログラムブロックになる。そして、ファイルは状態3から状態2へ遷移する。この状態遷移の途中で、アクティブブロックの割り当てが、もともとの共有ブロックから新しい消去ブロックへのデータ遷移を含んでいると、次に、ファイルのアクティブプログラムブロックになる。
ファイルが状態3にあるときの別の可能性は、ファイルのデータが書き込まれるアクティブ共有ブロックが満杯になることである。次に、ファイルには別のデータを書き込むアクティブブロックがなくなり、状態5へ遷移する。この状態は、ファイル状態0のときの動作と同様の状態で、ファイルのアクティブブロックはないが、ファイルが状態5のときに、フル共有ブロックにファイルのデータが含まれている点が異なっている。状態0のときには、ファイルのデータを含んでいるフラクタルブロックはない。通常、2つの状態0および5は一時的状態で、この状態から、ファイルの追加データの書き込みを行うと直ちに遷移が始まる。
状態5のとき、他のファイル状態への考えられる遷移は、状態5でかつ状態0ではないときに、共有ブロックにファイルのデータを記憶することを除いて、ファイルが状態0のときの遷移と同様である。データ量がわからない場合、消去ブロックをファイルの追加データに割り当てるので、アクティブプログラムブロックを生成し、ファイルが状態8へ遷移する。データ量がわかっている場合、部分ブロックの残っている容量に書き込みを行い、大きさがうまく適合したならば、これにより、部分ブロックがアクティブ共有ブロックになり、ファイルは状態5から状態7へ遷移する。状態8のときにフル共有ブロックにファイルのデータを記憶することと、ファイル状態2のときにこのようなブロックがないこととを除いて、ファイル状態8は状態2と同様である。ファイル状態7は、ファイル状態3に関連して同様である。
ファイル状態6で、アクティブ共有ブロックがデータで埋められている場合、フル共有ブロックおよび共有ブロックにファイルを記憶する。この実施形態における2つのフラクタルブロックの限度になったので、プログラムブロックまたは他のフラクタルブロックとして、別のブロックを割り当てることはできない。従って、データ遷移が発生しなければならない。データと部分ブロックの消去した容量とのふさわしい適合がなければ、共有ブロックのうちの1つからのファイルのデータを、部分ブロックに移動して(状態7へのファイルの遷移)、ファイルのアクティブ共有ブロックになるか、または消去ブロックに移動する(状態8へのファイルの遷移)。
ファイル状態7のときは、アクティブ共有ブロックは満杯にならない。ファイルを2つのフル共有ブロックに記憶して、状態9への遷移となる。
また、ファイルが状態7のときは、解放するブロックとして共有ブロックを指定するので、次に、ファイルのデータを再配置する必要がある。そして、データ遷移が発生する。ファイルのデータを共有ブロックから消去ブロックに移動し、その後、アクティブプログラムブロックになれば、ファイル状態8への遷移が発生したことになる。そうではなく、ファイルのデータを部分ブロックに移動したならば、部分ブロックは共有ブロックになり、ファイル状態は7のままである。
ファイルに追加データの書き込みを行う間、ファイルは2つのフル共有ブロックに残っているので、ファイル状態9は安定状態である。しかし、ファイルがその状態のときは、指定したアクティブブロックはない。2つのフラクタルブロックの限度があるので、ファイルに追加データの書き込みが可能になる前に、データ遷移は発生しなければならない。一例として、2つのフル共有ブロックのうちの一方のファイルのデータすべてを、消去ブロックに移動すると、このブロックが、ファイルの新しいデータを書き込むためのアクティブプログラムブロックになる。そして、ファイルは状態9から状態8へ遷移する。しかし、2つのフル共有ブロックのうちの一方のファイルのデータ量とファイルの追加データの全量がブロックの容量未満ならば、部分ブロック内の十分に消去が行われた空間を検索する。検出したならば、フル共有ブロックのうちの一方からのファイルのデータを部分ブロックに移動すると、ファイルの追加データの書き込みを行うためのアクティブ共有ブロックになる。これは、状態9から状態7への遷移となる。
ファイル状態8のときは、アクティブプログラムブロックにファイルのデータの書き込みが行われているが、他のファイルのデータは、フル共有ブロックに格納されたままになっている。プログラムブロックが満杯になった場合、ファイルブロックになり、ファイルのアクティブブロックはもうない。そして、状態は状態5に遷移する。さらにファイルが遷移することにより、前述したように、新しいアクティブブロックとして消去ブロックまたは部分ブロックを割り当てることになる。
しかし、状態8のときに、ファイルのアクティブプログラムブロックを解放動作のための宛先ブロックとして選択した場合、第1の場合では、ファイルの状態は、直接状態7に遷移する。これにより、ファイルの新しいデータを受け取るアクティブの共有ブロックを生成する。あるいは、状態8のときにファイルのアクティブプログラムブロックを解放動作のソースブロックとして指定した場合、ファイルのデータを部分ブロックに移動すると、ファイルに追加データを書き込むためのアクティブ共有ブロックになる。第2の場合では、ファイル状態は、やはり状態8から状態7へ遷移する。
図16および図17に示す主なファイル状態遷移の他に、発生する第2のファイルの遷移のセットがある。これらを図18および図19に示す。現在注目のファイルのこれらの第2の遷移は、現在のファイルのデータを含んでいるフラクタルブロック内に記憶した1つのファイルのデータすべてが使われなくなったときに発生する。使われなくなったデータは、現在のファイルのものであったり、または他のファイルのものであったりする。ホストがファイルを削除した結果として、ホストがファイルに前に書き込みを行ったデータを更新した結果として、または解放動作を行う間、ファイルのデータを再配置した結果として、データが使われなくなる。ファイルを更新する途中で、例えば、別のブロックに新しいデータの書き込みを行うことによりすべてを更新した場合、共有ブロックに記憶したファイルのデータすべてが使われなくなる。一例の解放動作では、現在注目のファイルではない、共有ブロック内のファイルのデータを別のブロックにコピーした場合、共有ブロック内の他のファイルのデータが使われないようにしておく。
これらの状況でデータを使わないようにすることにより、使われなくなったデータを記憶してあるブロックの種類を変更し、ファイルの状態が変わることになる。ファイルのデータ用に新しいアクティブブロックが必要な場合、新しいファイル状態に基づいて、図16および図17に関連して説明したやり方で選択する。
図18の遷移と、発生する特定の遷移の図19の識別名とが、これらのすべての説明になる。これらの遷移により、ファイルのデータを含んでいるフラクタルブロックの数が減る傾向にあるので、ファイル状態を簡素化することに留意されたい。これらの遷移により、ファイルの状態が、フラクタルブロックがない状態0に移行しやすくなる。
ファイルに対しデータのプログラミングを行うが、現在のファイルにアクティブブロックがない場合に、ファイル状態の情報を利用して、ファイルのアクティブブロックとして割り当てられたブロックの種類を判定する。図20の表の右側の欄に、真ん中の欄で述べた条件下での状態0〜9の任意の1つでファイルに対するアクティブブロックの割り当てをまとめている。ブロックの種類は、図に示す順である。“最良適合部分ブロック”は、量がわかっているデータを効率的に利用できる量の消去した容量を有する部分ブロックを意味する。ふさわしい部分ブロックがない場合、最も一般的には消去ブロックを選択する。しかし、状態2または3のいずれかで、ファイルの最良適合の部分ブロックを識別できない場合、“最大部分ブロック”を割り当てる。これは、書き込まれる全データ量を十分処理できる消去した容量がないブロックであるが、そのデータの最大量を処理可能なブロックである。次に、ファイルの状態を変更し、新しい状態でブロックの選択を制御して、最大部分ブロックに適合しない残っているデータ量を受け付ける。しかし、データ量および部分ブロック内の利用可能な容量により、最大部分ブロックを利用してもデータを3つ以上のブロックに分割するようになる場合、消去ブロックをアクティブブロックとして割り当てる。
前述した動作を、図2に示す一例のメモリシステムに格納しているファームウェアを実行する、コントローラ11のプロセッサ27が実行してもよい。
ブロック容量の解放
前述したように、ブロック管理の一部には、ブロック内の使われていない容量を解放して新しいデータを記憶することが含まれている。メモリシステムに記憶するデータ量がその容量よりずっと少ない場合、これは、特に問題ではないが、好ましくは、メモリシステムを、データで満杯になっているように動作するように設計する。これは、使われなくなったデータだけを含んでいるブロックや、有効なデータを含んでいるが、使われなくなったデータおよび/または書き込みが行われていない消去ページもある他のブロックを、この使われていない容量を解放するように処理できることを意味している。この目的は、できるだけ余すところなくメモリシステムの記憶容量を利用することであり、同時に、システム性能への悪影響を最小限にすることである。ブロックの解放については、図11の全体的なシステム動作図に617と記してある。
解放動作を行うと指定されたブロック(ソースブロック)内の有効なデータを、有効なデータを記憶するのに十分な消去した容量を有する1つ以上のブロック(宛先ブロック)にコピーする。前述したブロック管理技術に従って、宛先ブロックを選択する。ソースブロックに記憶した各ファイルのデータを、前述したように、ファイルの状態および他の要因に基づいて選択した種類のブロックにコピーする。解放動作の一部としての異なる種類のファイル間のデータコピーの一例を、図21A〜図21Dに示す。
図21Aでは、2つの部分ブロック681および683の解放動作を、一例として示す。ブロック681は、ファイルAの有効なデータを記憶してあるプログラムブロックであるが、データを記憶していない消去した容量も含んでいる。考えられる解放動作の1つは、ファイルAの状態に基づいて、ブロック681のファイルAのデータを、異なるファイルBのデータをすでに含んでいる別の部分ブロック685の利用可能な消去した容量にコピーし、共有ブロックとすることである。次に、FITでは、ブロック681内のデータグループをもう参照することはなく、このブロックには、使われなくなったという注記が付けられる。ブロック681内に記憶が行われる際に、ファイルAは、プログラムブロックを含む、状態2、4または8(図15を参照)のうちの1つになっている。次に、データを別のフラクタルブロックに移動することになるが、ファイルは、2つのフラクタルブロックの上限まで書き込まれたままである。ブロック685にコピーを行った後、ファイルAは、状態3、4、6または7のうちの1つに遷移する。これは、他のファイルのデータを記憶してあるブロックの種類に基づいて共有ブロック内に記憶してある、ファイルのデータを含んでいる。
図21Aのブロック683は、ファイルCおよびDのデータに記憶してあるデータを、ファイルEのデータを含んでいるプログラムブロック687の消去した容量にコピーすることにより、解放された共有ブロックであり、そして共有ブロックになる。ブロックそれ自体のように、ブロック683のファイルCおよびDのデータが使われなくなる。データをある共有ブロックから別の共有ブロックに移動したので、ファイルCおよびDそれぞれの状態は変わらない。しかし、ファイルEの状態は、2から3、または8から7へのいずれかに変わっている。あるいは、ファイルCおよびDそれぞれのデータを互いに異なるブロックに移動することが可能であり、必ずしも共有ブロックの利用可能な空間にコピーする必要はない。そして、ファイルの状態はおそらく他の状態に遷移することになる。
図21Bは、一例のブロック689および691の解放動作を示す。有効でかつ使われなくなったデータで満杯になっているので、これらのブロックはそれぞれ、使われなくなったブロックである。一部分が使われなくなり残りが有効な、ブロック689はファイルFのデータを含んでいるファイルブロックである。これは、例えば、ファイルの終端に物理的に新しいデータの書き込みを行う、ファイルFを更新する間に発生する。このファイルには、既存のファイルのデータとして同じ論理オフセットがあり、既存のデータが使われなくなる。この例では、ファイルFのデータを、ファイルGのデータを含んでいるプログラムブロック693の消去した容量にコピーし、ブロック693の種類が共有ブロックに変わることになる。あるいは、ファイルFの有効なデータを消去ブロックに書き込むと、このブロックはプログラムブロックになる。
図21Bのブロック691は、ファイルHの無効なデータおよびファイルIの有効なデータを含んでいるフル共有ブロックである。この例では、ファイルIの有効なデータを、ブロック691から消去ブロック695にコピーする。そして、ブロック695がプログラムブロックになる。あるいは、良い適合があれば、ファイルIのデータを、別のファイルのデータを含んでいる部分ブロックに書き込んでもよい。宛先ブロックは、解放動作を行ったときのファイルIの状態に依存する。
図21Aおよび図21Bに示す4つの具体的な一例の解放動作それぞれの結果として、2つの部分ブロックに記憶してあるデータを1つに結合すると、これにより、他の2つのブロックには使われなくなったデータだけが残ることになる。これらは無効なブロックになる。次に、図21Cに示すように、ブロックの消去を行うことにより、もともとのブロック681、683、689および691それぞれの全空間を解放する。消去ブロックは、無効なブロックを解放した結果である。
図21Dは、ファイルJのデータを記憶してある一例のファイルブロック697を示す。ホストがファイルJを削除した場合、ブロック697内のファイルJのデータと、おそらく他のブロックのデータもまた、使われなくなる。そして、ブロック697は無効なものになる。無効なブロックを解放することにより、システムの消去ブロックプール用に、消去ブロックを生成する。
一般に、メモリからファイルの消去を行うと、共有ブロックまたはフル共有ブロックなどの1つ以上のフラクタルブロック内のファイルのデータも、使われなくなる。残っている別のファイルの有効なデータがブロックの記憶容量より少なく、小さい量となるので、そのブロックに対し解放動作を行う。
図22のフローチャートに、一般的な解放動作を示す。ステップ701に示すように、具体的な実施形態に基づいて、1つ以上のリストを、部分ブロックと、使われなくなったブロックと、無効なブロックとに対し保持する。リストを、ブロックリスト615(図11)の一部として保持してもよい。メモリ動作技術の1つにより、このブロックリストを、電源をはじめに入れたときなど、メモリシステムの開始時に形成する。このリストは、各ブロック内の有効なデータ量や各ブロック内の消去メモリ量といった、1度に1つずつ解放ブロックを選択可能な、ブロックの他の情報を含むことができる。典型的には、これらの量を、ブロックのページ数、またはメタブロックを用いる場合はメタページの数で測定する。好適な別の技術は、これらのリストを不揮発性メモリに保持して、その状態が変わったときは必ず、リストのブロックのエントリの追加または更新を行うことである。この技術により、メモリシステムを初期化する際に、ブロックを走査してリストを形成する必要がなくなる。リストの部分ブロックと、使われなくなったブロックと、無効なブロックとをすべて保持する代わりに、解放ブロックを選択する特徴の1つが、コピーする必要のある有効なデータがほとんどないもの、または全くないブロックなので、設定したしきい値量を下回る小さい量の有効なデータを有するブロックだけを含むようにする。非常に時間のかかる多くの解放動作で必要なことは、あるブロックから別のブロックにデータのコピーを行うことなので、通常、コピーするデータ量がより少ないブロックに対してはじめに行う。
データの書き込み、更新、移動、削除等を行うと、このようなブロックリストは常に変化する。種類が、部分ブロック、使われなくなったブロック、無効なブロックから変更したブロックになるという変化により、図22のステップ701で保持するリストが変わることになる。このようなブロックに個別に記憶した有効なデータ量の変化と、消去した容量の量の変化とを、ブロックリスト615(図11)にも注記を行う。
ステップ703において、好ましくは、解放するために、1つの解放ブロックを次のブロックとして更新したリストのものと識別する。部分ブロックまたは使われなくなったブロックならば、それが、宛先ブロックと呼ぶ別のブロックに有効なデータをコピーするソースである。ソースブロックの選択に用いられるいくつかの特定の技術について、以下に説明する。
次のステップ705で、ホストのコマンドに応答して、メモリ動作を行う必要があるかを考慮して、いま解放動作を行うことが妥当であるかどうかを判定する。ホストが、アイドルコマンド、または、ホストがメモリシステムに特定の動作を行わせるまで時間があることを示す、似たようなものをメモリシステムに送信した場合、メモリシステムは、解放動作を含むオーバーヘッド動作をフォアグラウンドで自由に実行する。メモリシステムが、メモリへのデータ書き込みでビジーであったり、またはホストコマンドに応答して、メモリからのデータ読み出しでビジーであったりしても、解放動作、特にそのデータコピーを、データ書き込み、読み出し動作と交互に配置して行うことができる。このような交互配置法については、アラン・シンクレアによる2005年10月25日出願の米国特許出願第11/259,423号(特許文献31)、アラン・ベネットらによる2005年12月19日出願の米国特許出願第11/312,985号(特許文献32)に記載されている。
ステップ705において、解放動作を実行すると判定した場合、識別した解放ブロックが有効なデータを含んでいるかどうかにより処理は異なり、その場合、2つ以上のファイルの有効なデータを含んでいるかどうかにより処理が異なる。部分ブロックまたは使われなくなったブロックの場合、定義により、有効なデータを含んでいるし、かつ共有ブロックまたはフル共有ブロックの場合、2つ以上のファイルに有効なデータを含んでいる。解放ブロック内に有効なデータがあるかどうか、ステップ707において判定する。移動する必要のある有効なデータがある場合、1つのファイルのデータを識別して、次のステップ709において、そのデータを受け取る宛先ブロックとして識別する。前述した処理により、(この例では)有効なデータが属するファイルのデータすべてを、2つ以下のフラクタルブロックに記憶して保持するために、図15〜図17に関連して、宛先ブロックを識別する。ステップ711で示すように、1つのファイルの有効なデータをソース解放ブロックから宛先ブロックへコピーすることを開始する。これらのデータをコピーした後、処理はステップ707に戻って、別のファイルのデータが残っているかどうかを判定する。残っている場合、追加データに対しステップ709および711の処理を繰り返す。異なるファイルのデータ用に前に選択したものとは別に、宛先ブロックを選択する。ステップ713を実行する毎に、ソースブロックの消去を行う場合、ステップ707において、ソースブロックには移動するデータがないと判定するまで、これを繰り返す。次に、このブロックを消去ブロックプールに移動して、新しいデータの記憶に用いる。
ステップ707に戻り、無効なブロックの場合であるが、ソースブロックに有効なデータが含まれていない場合、移動する有効なデータはない。ソースブロックを消去する必要があるだけである。従って、その場合の処理は、図22に示すように、ステップ709および711をバイパスする。
図22の処理の第1の実施形態では、ステップ701において、部分ブロックと、使われなくなったブロックと、無効なブロックとのリストを1つ保持する。ブロック内の有効なデータ量は、リストの個別のエントリに含まれている。ステップ703において、リストから解放ブロックとして選択されたブロックは、有効なデータが一番少ない。リストに無効なブロックが1つある場合、有効なデータがないので、そのブロックをはじめに選択する。リストに無効なブロックが多くある場合、データが最も長いブロックを選択する。リストに無効なブロックがない場合、有効なデータ量が最も少ないブロックを解放ブロックとして選択する。リストの全ブロックから有効なデータ量が最も少ないブロックを選択することにより、あるブロックから別のブロックにコピーする有効なデータがもっと多くある場合に比べて、解放動作にかかる時間が短くなる。結果として、メモリに対するデータの書き込み、読み出し速度などの、他のメモリシステムの動作を速い速度で維持する。新規の消去ブロックを、メモリ性能に対し、より少ないコストで得られる。
1つのリストのフラクタルブロック内の有効なデータ量に基づいてソースブロックを選択する、図22の処理の第1の実施形態の利点は、実行するのに相対的に簡単なことである。しかし、部分ブロックの値についても考慮ことにより、この処理をさらに改良することもできる。部分ブロックにはデータを書き込む消去した容量があるが、使われなくなったブロックも無効なブロックもどちらも、消去した容量を含んでいない。使われなくなったブロックを新しいデータの記憶に用いる前に、有効なデータをそれらブロックから別のブロックに移動する必要があるので、それらブロックを消去して、新しいデータを記憶するのに利用できるようにする。しかし、部分ブロックは、解放動作のオーバーヘッドを行う必要のない、データを書き込む消去した容量を有している。例えば、データを書き込む消去した容量も大量に含む場合、有効なデータ量が最も少ないという理由だけで、部分ブロックを解放することは有益ではない。
従って、図22の処理の他の実施形態において、有効なデータ量と、部分ブロックに存在する消去した容量の量との両方に基づいて、ソースブロックを解放する候補として部分ブロックを選択する。部分ブロック内のデータの構成要素を、図23に示す。ブロック(メタブロックでもよい)は、有効なデータを含んでいるある数の1つ以上のページ(メタページでもよい)と、消去したもので、データを書き込む1つ以上の他のページとを有している。一例として図23に示すように、部分ブロックは、使われなくなったデータがある1つ以上の他のページも含んでいることもある。
図22の処理のこれらの他の実施形態において、好ましくは、ステップ701において、部分ブロックを、使われなくなったブロックおよび無効なブロックのリストとは別のリストに保持する。消去した容量がほとんどなく、(これは、それらの今の状態であまり役に立たないことを意味する)移動する必要のある有効なデータの量が小さい場合には、部分ブロックを、解放動作のためのそれらのリストの先頭に移動する。このようなブロックは主として、使われなくなったデータを含んでいる。逆に、消去した容量が大量で(場合によってはデータの記憶に役立つことを意味する)、移動する有効なデータ量が大きい部分ブロックを、解放ブロックの候補として識別する可能性は最も低い。使われなくなったブロックを解放することで行われるように、消去した容量がある部分ブロックを解放することで、同じ量の記憶容量をメモリシステムに追加することはない。有益な消去した容量がなく、有効なデータをコピーする必要がないので、無効なブロックは明らかに、解放するのに最も魅力的なブロックである。
図22の解放ブロック識別ステップ703の第2の実施形態では、ステップ701において、部分ブロックと、使われなくなったブロックと、無効なブロックとのそれぞれに1つずつ、3つの別々のリストを保持している。無効なブロックがある場合、そのリストからブロックがなくなるまで、解放ブロックを無効なブロックリストから選択する。一番長くリストにある無効なブロックをはじめに選択するように、先入れ先出し(FIFO)を除いて、無効なブロックをリストに記載する順番は特にない。次に、無効なブロックがない場合、そのリストの全ブロックのうち、有効なデータ量が最も少ないブロックを、使われなくなったブロックリストから選択する。
無効なリストまたは使われなくなったリストのいずれにもブロックがない場合、ステップ703において、部分ブロックリストのブロックを解放ブロックとして選択する。部分ブロックを、有効なデータ量が最も少ないものとして選択することもできるが、それらの消去した容量の有益性がわかるように、部分ブロックの順位付けを行うことが好ましい。この目的のために、各部分ブロックに対し、以下のように“解放利得”を算出することができる。
解放利得=(S−kE)/V (1)
Sは、データを記憶してあるページの総数としてのブロックの大きさであり、Eは、データを書き込む消去した容量のページの数であり、Vは、別のブロックに移動する必要のある有効なデータを含んでいるページの数である。ブロックの消去した容量の考えられる影響の重み付けを行うために、定数kを含んでいるが、1で設定可能である。kEの値が増えると、得られる解放利得が低下していく。Vの値が増えていくと、解放利得も低下していく。ステップ703において、解放利得の値が最も高い部分ブロックを、解放ブロックとして選択する。他の数学的表現を交互に用いて、有効なデータを含むシステム動作と、消去した容量があることの利点とに対する妨げとなるものとのバランスをとるEおよびVに関して、解放利得を定義することができる。その消去した容量にデータを書き込む毎に、ファイルディレクトリまたはFITが保持する情報の一部として記憶する毎にというように、ブロックに変更がある毎に、解放利得を算出してもよい。
この第2の実施形態について、図25に示す。別々の部分ブロックリストと、使われなくなったブロックリストと、無効なブロックリストとから(図22のステップ701において保持するように)、解放ブロックを選択する方法(図22のステップ703)を示している。ステップ721において、はじめに無効なブロックリストにブロックがあるかどうかを判定する。このようなブロックが複数ある場合、ステップ723において、リストにのっている最も長いブロックを、解放ブロックとして選択する。無効なブロックリストにブロックがない場合、ステップ725において、使われなくなったブロックリストにエントリがあるかどうかを判定する。2つ以上のブロックが使われなくなったブロックリストにある場合であるが、あれば、ステップ727において、有効なデータ量が最も少ないブロックを、解放ブロックとして選択する。ステップ725において、使われなくなったブロックリストにエントリがないと判定した場合、ステップ729において、部分ブロックリストを調べる。部分ブロックリストに2つ以上のブロックがある場合、解放利得が最も高いものを解放ブロックとして選択する。前述した式(1)を利用するといったように、解放利得は、ブロック内の有効なデータ量および消去した容量を考慮に入れている。部分ブロックリストに何もない場合、ステップ721に戻り、リストのうちの1つにブロックが現れるまで、処理を繰り返す。解放ブロックを選択した後で、処理は、図22のステップ705に進む。
第3の実施形態を、図24のフローチャートに示す。図22のステップ701で保持している無効なブロックリストでエントリを検索するステップ741によっても、図22のステップ703の実行を開始する。無効なブロックリストに2つ以上のエントリがある場合、図25のステップ743において、最も古いものを選択して解放ブロックとする。無効なブロックリストにエントリがない場合、次のステップ745において、使われなくなったブロックリストにエントリがあるかどうかを判定する。あれば、次のステップは、図24の実施形態とは異なる。部分ブロックリストに少なくとも1つのエントリがある場合、使われなくなったブロックまたは部分ブロックのリストから解放ブロックを選択することが一番いいかどうかを判定する。
ステップ747において、使われなくなったブロックリストで、有効なデータ量が最も少ないブロックの識別を行う。次に、ステップ749において、部分ブロックリストに少なくとも1つのブロックがあるかどうかを判定する。あれば、ステップ751において、有効なデータ量が最も少ないブロックを識別する。次のステップ753において、使われなくなったブロックリストから識別した1つのブロックと、部分ブロックリストから識別した1つのブロックとの間で選択を行う。この目的のために、ステップ751において、部分ブロックリストから識別したブロックについて数量(V+kE)を算出する。V、Eおよびkは前述したのと同じである。この数量を、ステップ747において使われなくなったブロックリストから識別したブロック内の有効なデータ量Vと比較する。部分ブロックの数量(V+kE)が、使われなくなったブロックの数量Vより大きい場合、ステップ755において、使われなくなったブロックを解放ブロックとして選択する。しかし、使われなくなったブロックの数量Vが、識別した部分ブロックの数量(V+kE)より大きい場合、ステップ757において、部分ブロックを解放ブロックとして選択する。
識別した使われなくなったブロックの有効なデータVだけと比較する前に、識別した部分ブロックの消去した容量の数量kEをその有効なデータVに加算することにより、使われなくなったブロックを選択するように、処理にバイアスをかける。その消去した容量にデータを記憶するために用いられる可能性がまだあるので、識別した使われなくなったブロックと同じ有効なデータ量を有する識別した部分ブロックを保持する。実際、数量kEだけ使われなくなったブロックより小さい有効なデータ量を有する部分ブロックを保持することになる。
図25のステップ745に戻り、使われなくなったブロックリストにエントリがない場合、ステップ759において、部分ブロックリストにブロックが記載されているかどうかを判定する。なければ、3つのリストのうちの1つにブロックが記載されるまで、処理はステップ741に戻り、繰り返される。複数の部分ブロックが記載されていれば、ステップ761において、有効なデータ量が最も少ないブロックを解放ブロックとして選択する。あるいは、第2の実施形態のステップ731(図24)に関連して説明したように、解放利得を用いて部分ブロックを選択してもよい。
一方、第3の実施形態では、2つのリストしか用いないこともある。第1のリストは、使われなくなったデータと、消去を行わないメモリ容量とを含むブロックのエントリを含む、使われなくなったブロックリストである。図25に示すように、個別の無効なブロックリストを用いるのではなく、無効なブロックと使われなくなったブロックの両方を、1つの“使われなくなった”ブロックリストに記載する。オプションとして、ブロックは有効なデータを含むこともある。リストの各エントリは、関連するブロック内の有効なデータ量を定義する値を含むフィールドを有している。リストのエントリは、これらのフィールドの値に基づいて、順序づけられている。従って、使われなくなったデータがあり、有効なデータのないブロック(無効なブロック)を、この第1のリストの先頭にともにグループ化する。
第3の実施形態の別の形態である第2のリストは、消去が行われたメモリ容量を含むブロックのエントリを含んでいる、部分ブロックリストである。オプションとして、ブロックは有効なデータを含んでいることもある。リストの各エントリは、関連するブロック内の有効なデータ量を定義する値を含んでいるフィールドを有している。リストのエントリは、これらのフィールドの値に基づいて、順序づけられている。図25のステップ753における手法により、第1のリストまたは第2のリストのいずれかの先頭から、ブロックを選択してもよい(無効なデータ量が最も少ないブロック)。
図26の表に、第3の実施形態のこの変形例による、解放動作のための部分ブロックリストと、使われなくなったブロックリストとに記載したブロックの種類の詳細について記載している。部分ブロックリストに記載されるために、ブロックは、有効なデータと消去した容量とを両方とも含んでいる。ブロック内に使われなくなったデータがあってもなくてもよい。使われなくなったブロックリストに記載されるために、ブロックは、使われなくなったデータと、有効なデータまたは消去した容量のいずれかとを含んでいる。
図22、図24および図25に関連して前に説明した処理を、図2に示す一例のメモリシステムに格納したファームウェアを実行する、コントローラ11のプロセッサ27が実行してもよい。
まとめ
例示の実施形態に関連して本発明の様々な態様を説明してきたが、本発明が添付の特許請求の範囲の全範囲内においてその権利が保護されるべきであることが理解できよう。