(57)【特許請求の範囲】
【請求項１】
フラッシュメモリに対する演算の基本単位として使用される少なくとも一つのブロックを備えているユニット単位で領域が区切られたフラッシュメモリの再写像制御方法において、
所定ブロックに対する写像情報に基づき、所定の物理的なユニットを見つける段階と、
前記見つかった物理的なユニットに前記所定ブロックが、循環する複数の状態を含む有効な状態のうちの一つの状態で存在すれば、前記物理的なユニットでブロックの状態が未定である他のブロックを見つける段階と、
前記他のブロックの状態を前記所定ブロックに設定されている状態の次の状態に変更する段階と、
前記他のブロックに、新しいデータと論理的なブロック番号と同一の付加情報を記録する段階と、
前記所定ブロックの状態を削除状態に変更する段階と、
前記見つかった物理的なユニットに前記所定ブロックが存在しないか、或いは前記所定ブロックが削除された状態で存在すれば、前記所定ブロックの状態を未定の状態とみなし、ブロックの状態が未定である他のブロックを見つける段階と、
前記他のブロックが存在しなければ、前記物理的なユニットに対して再生演算を行う段階と、
ブロックの状態が未定である他のブロックを見つけ直す段階と、
前記他のブロックが見つかれば、前記他のブロックの状態を変更する段階へ進む段階と、
前記他のブロックが見つからないと、誤りとして処理する段階と、
を含み、前記再生演算を行う段階は、
再生するソースユニット及び移動ユニットを決定する段階と、
前記ソースユニットの状態を移動中に設定し、前記移動ユニットの状態をコピー中に設定する段階と、
前記ソースユニット内の有効なブロック、関連メタデータ及びヘッダ情報をコピーする段階と、
前記コピー中に設定されている移動ユニットを有効状態に設定しつつ、ソースユニットの削除回数（摩耗度値）を増やす段階と、
前記ソースユニットを削除した後、前記削除回数を前記ソースユニットに記録する段階と、
前記移動ユニットの削除回数がしきい値を上回るかどうかをチェックする段階と、
前記削除回数が前記しきい値を上回らなければ、前記ソースユニット及び移動ユニットの状態を設定する段階へ進む段階と、
前記削除回数が前記しきい値を上回れば、前記ソースユニットの番号を貯蔵する段階と、
前記削除回数が最小であるソースユニットを選択した後、前記ソースユニット及び移動ユニットの状態を設定する段階へ進む段階と、
を含むことを特徴とするフラッシュメモリに対する再写像制御方法。
【請求項２】
フラッシュメモリに対する演算の基本単位として使用されるブロックを少なくとも三つ備えているユニット単位に領域が区切られたフラッシュメモリの制御方法において、
前記ユニットの第１ブロックは論理的なユニット番号と有効な状態であるか否か、再生された以前のユニットの削除回数を含む情報が記録されるように割り当て、
前記ユニットの第２ブロックはユニットのコピー中または移動中であるかということと削除回数（摩耗度）とを含む情報が記録されるように割り当て、
前記ユニットのデータが記録されるブロックの余裕アレイの所定領域には循環計数方式で決定されたブロック状態を表わす情報が記録されるように制御するフラッシュメモリの制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はブロック単位でフラッシュメモリにデータを記録したり、或いはフラッシュメモリからデータを読み出したりすることに係り、特に、部分的な記録回数が限られているフラッシュメモリに／からデータを記録したり、或いは読み出したりするとき、論理的な住所と物理的な住所との再写像を制御する方法及びそれに適したフラッシュメモリの構造に関する。
【０００２】
【従来の技術】
フラッシュメモリは、既存のランダムアクセスメモリ（ＲＡＭ）や不揮発性貯蔵装置、マグネチックディスクなどのように、特定の位置に貯蔵されたデータを任意に接近することができる。
【０００３】
しかし、データを修正したり、或いは削除したりする方法が前述の貯蔵装置などと異なる。すなわち、ブロック単位の接近のために、一定の大きさのブロックに分割されたフラッシュメモリの任意のブロックにデータを一回記録した後、これを修正したり、或いは削除したりしようとするとき、前記任意のブロックを含んでいるユニットを修正または削除しなければならない。フラッシュメモリにおいて、ブロックは物理的に連続した住所をもつバイトで構成される。このブロックは、フラッシュメモリに対する演算の基本単位である。ユニットは、複数個のブロックで構成される。このユニットは、物理的にデータを修正または削除できる基本単位である。
【０００４】
前述したフラッシュメモリの修正または削除特性により、削除回数が多いほどデータの記録及び更新効率が低下される。また、フラッシュメモリに対する修正または削除を行うとき、故障が生じるとデータが失われる場合もある。これを防止すべく、従来より、ブロック（またはセクター）再写像技法が用いられてきている。
【０００５】
再写像技法とは、フラッシュメモリに記録されたデータを修正または削除するとき、フラッシュメモリに記録されたデータの物理的なブロック番号（Ｐｈｙｓｉｃａｌ Ｂｌｏｃｋ Ｎｕｍｂｅｒ、ＰＢＮとも言う）が変更された場合であっても、同一の論理的なブロック番号（Ｌｏｇｉｃａｌ Ｂｌｏｃｋ Ｎｕｍｂｅｒ、ＬＢＮとも言う）でフラッシュメモリに記録されたデータに接近できるように、該当データに対する論理的なブロック番号（ＬＢＮ）と物理的なブロック番号（ＰＢＮ）との写像情報を管理することを言う。
【０００６】
既存の再写像技法は、修正しようとするデータが発生すれば、まず、フラッシュメモリ上の該当データの物理的なブロック番号を含んでいるユニットでデータの記録されていない物理的なブロックを見つける。次に、見つかった物理的なブロックに該当するデータを記録する。次に、該当するデータの論理的なブロック番号と物理的なブロック番号との写像情報を更新する。これにより、使用者は物理的なブロック番号が変わった場合であっても、同一の論理的なブロック番号を使って該当するデータに接近できるようになる。この場合、該当データに対する以前の物理的なブロックの状態情報に削除の表示をする。
【０００７】
例えば、フラッシュメモリに、図１に示された物理的なユニット番号ＰＵＮ１、ＰＵＮ２のようにデータが記録された状態で使用者が論理的なブロック番号が'３'であるブロックに記録されたデータを修正しようとするとき、ＰＵＮ１が図２のように変更される。すなわち、ＬＢＮ-ｔｏ-ＬＵＮマッピングテーブルを参照すれば、論理的なブロック番号'３'に対応する論理的なユニット番号は'２'である。この論理的なユニット番号'２'を用いてＬＵＮ-ｔｏ-ＰＵＮマッピングテーブルを参照すれば、対応する物理的なユニット番号は'１'であることが分かる。したがって、物理的なユニット番号が'１'であるＰＵＮ１で空きブロックを見つける。図１によれば、'４'番のブロックが空きブロックとして見つけられる。'４'番のブロックに論理的なブロック番号'３'に該当するデータを図２のように記録した後、ＰＵＮ１のブロック割当てマップ（ＢＡＭ）の写像情報を更新する。これにより、ＰＵＮ１のブロック割当てマップでＰＢＮ１に対する状態情報に削除の表示がなされる。しかし、物理的なユニットに使用されない物理的なブロックが多くなると、フラッシュメモリの使用効率が低下する。
【０００８】
これを解決するために、既存には、先ず、図３に示されたＰＵＮ１とＰＵＮ２との関係のように、使用されるブロックだけを他のユニットに移動させていた。その次に、該当する物理的なユニット番号を前記他のユニットの物理的なユニット番号に変える。したがって、データを他のユニットに移動したとしても、同一の論理的なユニット番号で接近できる。
【０００９】
このような再写像技法は、ユニット内に空きブロックが存在したり、或いはフラッシュメモリ上に空きユニットが存在する限り、実質的な削除演算を行わない。しかし、削除されたブロックが増えると、フラッシュメモリで使用できない領域が増えることになる。このため、削除されたブロック有りの部分を再使用するための方法が講じられる必要がある。
【００１０】
また、書き込み演算またはユニットの再使用演算を行う間に電源が切れるなどの障害が発生すれば、使用者のデータまたは再写像のために使用されるデータが失われる場合がある。したがって、既存には、これを解決するために、ブロック及びユニットに状態情報を記録し、演算を行うときに状態情報を適宜に修正することにより、復旧演算を行うようにしている。
【００１１】
前述のように、既存の再写像技法はデータだけでなく、写像情報を貯蔵しかつ管理するために、ユニットに対する部分的な書き込み演算を多数回に亘って行う。したがって、ＮＡＮＤ型のフラッシュメモリなどのフラッシュメモリに既存の再写像技法をそのまま適用し難い。これは、前述のＮＡＮＤ型のフラッシュメモリと同一のフラッシュメモリの場合、部分的な書き込み演算の回数（またはＮｕｍｂｅｒ ｏｆ ｐｒｏｇｒａｍ ｃｙｃｌｅｓ ｉｎ ｔｈｅ ｓａｍｅ ｐａｇｅ、以下、Ｎｏｐと略する）が５回または３回に限られるからである。したがって、ブロック及びユニットに記録された情報を多数回変更することができない。
【００１２】
例えば、障害が発生してフラッシュメモリに記録されているデータを復旧するとき、該当するブロック及びユニットに記録されている状態情報に対する変更回数が前述のように限られて、復旧を正常に行えない現象が生じ得る。
【００１３】
また、所定ブロックの状態が未定（ＦＦ）→割当て（８Ｆ）→記録中（４Ｆ）→記録（２Ｆ）→削除中（０Ｆ）→削除（００）のような順番でブロックの状態を表示したり、未定（ＦＦ）→コピー中（８Ｆ）→有効（４Ｆ）→移動中（２Ｆ）のような順番でユニットの状態を表示しようとする場合、物理的に同一の位置に対して少なくとも５回ないし３回の書き込み演算を行う必要がある。のみならず、ユニットやブロックに使用者データやエラー訂正コード（ＥＣＣ）などの経路を記録することまで考慮したとき、前述のように部分的な書き込み演算の回数が５回または３回等に限られたフラッシュメモリに既存の再写像技法をそのまま適用し難い。
【００１４】
【発明が解決しようとする課題】
本発明は、上記事情に鑑みて成されたものであり、その目的は、部分記録回数を最小化しつつ、ブロック及びユニットの状態を記録かつ処理できるフラッシュメモリの再写像制御方法及びこれによるフラッシュメモリの構造を提供するところにある。
【００１５】
本発明の他の目的は、循環係数を使い、最小限の部分記録で状態情報を表示するフラッシュメモリの再写像制御方法及びこれによるフラッシュメモリの構造を提供するところにある。
【００１６】
本発明のさらに他の目的は、ＮＡＮＤ型フラッシュメモリに適したフラッシュメモリの再写像制御方法及びこれによるフラッシュメモリの構造を提供するところにある。
【００１７】
【課題を解決するための手段】
前記諸目的を達成するために、本発明による方法は、少なくとも一つのブロックを備えているユニット単位に領域が区切られたフラッシュメモリの再写像制御方法において、所定ブロックに対する写像情報に基づき所定の物理的なユニットを見つける段階と、見つかった物理的なユニットに所定ブロックが有効な状態で存在すれば、ブロックの状態が未定である他のブロックを見つける段階と、他のブロックの状態を所定ブロックに設定されている状態の次の状態に変更する段階と、他のブロックに新しいデータと論理的なブロック番号のような付加情報を記録する段階と、所定ブロックの状態を削除状態に変更する段階と、を含むことが好ましい。
【００１８】
特に、前記方法は、見つかった物理的なユニットに所定ブロックが存在しないか、或いは所定ブロックが削除状態で存在すれば、所定ブロックの状態を未定の状態に設定した後、ブロックの状態が未定である他のブロックを見つける段階と、他のブロックが存在しなければ、物理的なユニットに対して再生演算を行う段階と、をさらに含むことが好ましい。
【００１９】
前記再生演算は、再生するソースユニット及び移動ユニットを決定する段階と、ソースユニットの状態を移動中に設定し、移動ユニットの状態をコピー中に設定する段階と、ソースユニット内の有効なブロック、関連メタ及びヘッダ情報をコピーする段階と、コピー中に設定されている移動ユニットを有効状態に設定しつつ、削除回数（摩耗度値）を増やす段階と、ソースユニットを削除しつつ、決定された削除回数をソースユニットに記録する段階と、を含むことが好ましい。
【００２０】
前記諸目的を達成するために、フラッシュメモリの構造は、ユニットの第１ブロックは論理的なユニット番号と有効な状態の可否、以前のブロックの削除回数を含む情報の記録のために割り当て、ユニットの第２ブロックはコピー中であるは、或いは移動中であるかということと削除回数（摩耗度）とを含む情報の記録のために割り当てるように構成され、ユニットのデータが記録されるブロックのスペアアレイの所定領域には循環係数方式で決定されたブロック状態を表わす情報が記録されるように構成されることが好ましい。
【００２１】
【発明の実施の形態】
以下、添付した図面に基づき、本発明について詳細に説明する。
【００２２】
先ず、フラッシュメモリの再写像制御において削除単位として使用するのは削除ユニットである。削除ユニットはフラッシュメモリの物理的な削除ブロック（図１ないし図３に示されているＰＵＮ１、ＰＵＮ２）と一致することもあり、多数個の削除ブロックで構成されることもある。
【００２３】
各削除ユニットには物理的なユニット番号（ＰＵＮ）及び論理的なユニット番号（ＬＵＮ）が付される。物理的なユニット番号は削除ユニットの物理的な順番により割り当てられる。論理的なユニット番号は、ユニットの論理的な順番を表わす番号である。フラッシュメモリを初めて使用するとき、図１ないし図３に示されたように、物理的なユニット番号（ＰＵＮ）と論理的なユニット番号（ＬＵＮ）との間の写像を表わすテーブル（ＬＵＮ-ｔｏ-ＰＵＮ）がフラッシュメモリ上、またはフラッシュメモリとは別途に備えられているメモリに構成される。このテーブルはフラッシュメモリに対するデータの削除や変更、再生などの演算によりフラッシュメモリの写像関係が変わるとき毎に変更される。
【００２４】
削除ユニットは図１ないし図３に示されたＰＵＮ１、ＰＵＮ２に示されたように、小さいブロックまたはセクターにさらに分割される。このブロックはフラッシュメモリに対する演算の基本単位として使用される。フラッシュメモリにおいて、全てのブロックの大きさは同一である。削除ユニットは削除ユニットヘッダ（ＥＵＨ）及びブロック割当てマップ（ＢＡＭ）を含む。削除ユニットヘッダはフラッシュメモリ全体に対する情報及びそのユニットの管理に必要な情報が記録される。前述した全体に対する情報は、例えば、削除ユニットにあるブロックの大きさ、不良ブロックマップなどに対する情報である。ユニットの管理に必要な情報は、例えば、論理的なユニット番号、摩耗度などに対する情報である。前記削除ユニットヘッダは一つまたはそれ以上のブロックを占めることがある。
【００２５】
削除ユニットヘッダの次には、図１ないし図３のＰＵＮ１、ＰＵＮ２に示されたように、使用者データ及びブロック割当てマップが記録される。ブロック割当てマップは一つまたはそれ以上のブロックに集めて記録されえて、ＮＡＮＤ型フラッシュメモリのスペアアレイのように特殊な空間にブロック別に分けて記録されもする。
【００２６】
ブロック割当てマップ（ＢＡＭ）には削除ユニットに属するブロックに対する情報（論理的なブロック番号、状態など）が記録される。論理的なブロック番号は使用者が考えるブロックの住所である。したがって、ブロック割当てマップは論理的なブロック番号とそのブロックが実際に記録された物理的な位置との写像を表わす。ブロックに記録されるデータが変更されるときには、ブロック割当てマップの内容、すなわち、論理的なブロック番号と物理的なブロック番号との写像情報及び状態情報も変更される。
【００２７】
変更されたブロックが多くなると、フラッシュメモリに使えなくなった部分が多くなるため、再生演算を適宜に行い、削除されたブロックが占めていた空間を再使用できるようにしなければならない。既存の再写像制御方式においてもこれを考慮しているにはいるが、ＮＡＮＤ型フラッシュメモリのように部分記録の回数が限られたフラッシュメモリに対して前述の再生演算をいかに行うかについては開示されていない。
【００２８】
したがって、本発明においては、ブロックの状態情報を循環係数を使って表示する方法を提示する。この方法によれば、最小限の部分記録回数でブロックの状態を変化させ、故障が生じた場合、該当ブロックのデータを復旧できる。また、循環係数の変化順番を用いて以前のデータ及び新しいデータを区分できるので、ロールバック及びロールフォワードなど、各種の復旧方法を用いることができる。ロールバック復旧方法は新しいデータを用いてデータを復旧することであり、ロールフォワードは以前のデータを用いてデータを復旧することである。
【００２９】
このように、フラッシュメモリの再写像制御動作は、ブロック記録、空きブロックの検索、故障での回復などに分けられる。
【００３０】
ブロック割当てマップにおいて、各ブロックの状態は、未定（ｆｒｅｅ）、有効（ｖａｌｉｄ） 、削除（ｄｅｌｅｔｅｄ）とに大別できる。ここで、'有効'はさらに三つの状態に分けられる。例えば、ｓ０、ｓ１、ｓ２の状態に分けられる。有効な状態の三つの状態の間には、循環的な順序関係がある。例えば、ｓ０<ｓ１、ｓ１<ｓ２、ｓ２<ｓ０の関係がある。有効な状態はこの順番により変化するので、これを循環係数と呼ぶ。すなわち、ブロックの最初の状態は未定であってから、データが初めて記録されるときにｓ０となり、次にさらに記録されるときにｓ１、ｓ２、またｓ０に順番に変わる。
【００３１】
このような状態情報を用いて所定ブロックにデータを記録する過程は、図４の通りである。図４は、未定状態を'１１１１'に設定し、ｓ０を'１１１０'に設定し、ｓ１を'１１００'に設定し、ｓ２を'１０００'に設定し、削除を'００００'に設定した例を示している。したがって、ブロックの状態は前記５種の場合の値が循環しながら設定される。そして、図４は、図５に示されたように、物理的なユニットで構成されたＮＡＮＤ型フラッシュメモリに適用した例を示している。
【００３２】
図５に示されたように、ＮＡＮＤ型フラッシュメモリの物理的なユニット（ＰＵ）内のブロックはメインアレイ及びスペアアレイで構成される。メインアレイには実質的なデータのみが記録される。スペアアレイには論理的なセクター番号（ｌｏｇｉｃａｌ ｓｅｃｔｏｒ ｎｕｍｂｅｒ、ｌｓｎ）、循環係数（ｗｒａｐｃｏｕｎｔ、ｃｎｔ）、論理的なセクター番号及び循環係数に対するエラー訂正コード（ｅｃｃ_ｌｓｎ）及びデータに対するエラー訂正コード（ｅｃｃ_ｄａｔａ）などが記録される。このとき、ブロックをページとも言う。
【００３３】
ＮＡＮＤ型フラッシュメモリのデータシートでよく触れられる"ブロック"は、一度に削除できる物理的な単位である。このブロックは、本実施形態で触れられている"ユニット"に該当すると見ることができる。しかし、実際に具現するとき、前記ユニットを多数のブロックで構成することもできる。
【００３４】
先ず、写像情報を用い、該当ブロックが属する論理的なユニット番号及び物理的なユニット番号を決定する。決定された物理的なユニットのブロック割当てマップにおいて、該当ブロックの状態をチェックした結果未定１１１１であれば、該当ブロックの状態をｓ０=１１１０に表示する。次に、データ及び論理的なブロック番号（ｌｓｎ）などの情報を前記ブロックに記録する。未定の状態のブロックは論理的なブロック番号（ｌｓｎ）も有効でないある値をもつ。
【００３５】
該当ブロックの状態が有効である場合、該当する物理的なユニットでブロックの状態が未定１１１１であるブロックを一般的な写像方式により見つける。そして、見つかったブロックの状態を以前のブロック状態の次の状態に変更する。例えば、前述した以前のブロックの状態がｓ０（１１１０）である場合、ｓ１（１１００）に変更する。ブロックの検索は、既存の再写像制御方式でなされた方法と同一になされる。
【００３６】
次に、新しいブロック（ブロックの状態がｓ１（１１００）に設定されたブロック）に新しいデータ及び論理的なブロック番号（ｌｓｎ）などを記録する。そして、以前のブロックの状態を削除００００に変更する。
【００３７】
該当ブロックの状態がｓ１（=１１００）であり、該当ユニットに未定状態１１１１に設定されているブロックが存在する場合、未定状態に設定されているブロックの状態をｓ２=１０００に設定する。そして、ブロックの状態がｓ２に設定されたブロックにデータ及び論理的なブロック番号（ｌｓｎ）などの情報を記録する。以前のブロックの状態は削除=００００に変更する。
【００３８】
また、該当ブロックの状態がｓ２=１０００であり、該当ユニットに未定状態１１１１に設定されているブロックが存在する場合、未定状態に設定されているブロックの状態をｓ０=１１１０に設定する。そして、ブロックの状態がｓ０に設定されたブロックにデータ及び論理的なブロック番号（ｌｓｎ）などの情報を記録する。以前のブロックの状態は削除=００００に変更する。
【００３９】
前述したブロックの状態変化は、図４に示された矢印をみれば、十分理解できる筈である。
【００４０】
このように、ブロックに対する記録及び修正処理をする場合、１ブロックに対して３回の部分記録でデータを記録できる。ブロックが削除された状態である場合、データ及び論理的なブロック番号などの状態情報を除いた他のデータはいずれも有効なものであると仮定するとき、これは実際に２回の部分記録で記録演算を行うのと同じである。
【００４１】
そして、前述した作業中に４０１ないし４０７で電源がオフされたり、なんらかの事情で障害が発生した場合、データを記録しようとしていた対象ブロックの状態は削除００００に設定する回復作業を行う。そのほかの作業中には前述したように障害が発生した場合、特別な回復作業を行う必要がない。
【００４２】
換言すれば、ブロックにデータを記録している間に障害が発生した場合、未定または削除状態であるブロックに対していかなる回復作業もする必要がない。これは一つの論理的なブロック番号に対して有効な状態のブロックが一つしかない場合である。
【００４３】
同一の論理的なブロック番号をもった有効なブロックが二つ存在する場合、回復作業が必要である。既存には、同一の論理的なブロック番号をもった有効なブロックが二つ存在する場合、以前のブロック及び新しいブロックを区別することができなかった。したがって、回復処理時にどんなブロックを削除するかが決定し難かった。しかし、本発明のように循環係数を用いる場合、以前のブロック及び新しいブロックを区別できる。したがって、回復処理時に、どんなブロックを削除するかを決定し易い。回復時に以前のブロックを削除するか、或いは新しいブロックを削除するかは、応用の必要によって決定できる。
【００４４】
すなわち、ブロックデータを記録している間に障害が発生すれば、現在、一つの論理的なブロック番号に対して有効な状態をもつブロックが二つ存在するかどうかをチェックする。チェックの結果、有効な状態をもつブロックが一つだけ存在する場合、前述のように、いかなる回復作業もする必要がない。したがって、ブロックデータを記録していた作業を中断すれば良い。しかし、有効な状態をもつブロックが二つ存在する場合、ブロックに割り当てられている循環係数に基づき以前のブロック及び新しいブロックに区分する。そして、以前のブロック及び新しいブロックのうちどちらかのブロックを削除する。図４は、新しいブロックを削除するように具現した例を示している。しかし、以前のブロックを削除するように具現することもできる。
【００４５】
図６は、前述した再写像制御方法によりブロックを記録及び修正しようとするときの動作をの示したフローチャートである。
【００４６】
ステップ６０１において、該当ユニットに該当ブロックが存在するかどうかをチェックする。チェックした結果、存在すれば、該当するブロックの状態が有効な状態であるかどうかをチェックする。チェックの結果、有効な状態であれば、ステップ６０３で該当ブロックの状態をチェックする。次に、ステップ６０５において、該当ユニットに空きブロックが存在するかどうかをチェックする。チェックの方式は、ブロックの状態が未定に設定されているブロックがあるかどうかを検索する方式によりなされる。チェックの結果、該当ユニットに空きブロックが存在すれば、ステップ６０７において、新しいブロック状態値を決定する。
【００４７】
新しいブロック状態値は、ステップ６０３においてチェックした該当ブロックの状態値を考慮して決定する。すなわち、前述した図４についての説明で述べたように、以前のブロックの状態がｓ０に該当すれば、新しいブロック状態値はｓ１に設定する。以前のブロックの状態がｓ１に該当すれば、新しいブロック状態値はｓ２に設定する。以前のブロックの状態がｓ２に該当すれば、新しいブロック状態値はｓ０に設定する。そして、以前のブロックの状態が未定の状態であれば、ｓ０に設定する。
【００４８】
次に、ステップ６０９において ステップ６０５で検索された空きブロックに、ステップ６０７で決定された新しいブロック状態値を記録する。ステップ６１１において、新しいブロック状態値を記録した新しいブロックに該当するデータを記録する。ステップ６１３において、以前のブロックの状態を削除に変更し、作業を終える。このとき、以前のブロックはステップ６０３で状態がチェックされたブロックである。
【００４９】
一方、ステップ６０１においてチェックした結果、該当ブロックが存在しないか、或いは存在するにはするが、有効なブロックでない場合（すなわち、該当ブロックの状態が削除状態である場合）、ステップ６１５において該当ブロックを未定状態に設定する。このとき、該当ブロックが存在しない場合、該当ブロックに対する領域を割り当てながら該当ブロックの状態を未定状態に設定する。そして、ステップ６０５においてチェックした結果、該当するユニットに空きブロックが存在すれば、ステップ６０７において、前述のように新しいブロック状態値を決定する。
【００５０】
しかし、ステップ６０５においてチェックした結果、該当ユニットに空きブロックが存在しなければ、ステップ６１７において再生演算を行う。再生演算は、図７ないし図９を参照して後述する。
【００５１】
再生演算を行った後、ステップ６１９において該当ユニットに空きブロックが存在するかどうかをチェックする。チェックの結果、該当ユニットに空きブロックが存在すれば、ステップ６０７へ進み、新しいブロック状態値を決定する。しかし、空きブロックが存在しなければ、ステップ６２１において誤り処理をし、作業を終える。
【００５２】
ブロックからデータを読み出すために、先ず、写像情報を用い、該当する論理的なユニット番号及び物理的なユニット番号を調べる。そして、該当ユニットのブロック割当てマップを通じてブロックの物理的な位置を決定してデータを読み出す。ここで、ブロックの状態が有効な場合に限ってデータを読み出せるようになっている。したがって、有効な状態のブロックが存在しなければ、そのブロックは一度も記録されたことがないか、或いは削除されて使用されていないブロックであるため、初期値０ｘＦＦを設定する。検索の方式は、既存の再写像制御方式によりなされたのと同様である。
【００５３】
一方、削除されたブロックをたくさん含んでいるユニットの場合、再生演算が行われる。この場合にも、ユニットの状態を変更させる必要がある。
【００５４】
本発明において、例として取られている削除ユニットのフォーマットは、図７の通りである。
【００５５】
すなわち、図７を参照すれば、削除ユニットには、以前のユニットの物理的なユニット番号（ｐｈｙｓｉｃａｌ ｕｎｉｔ ｎｕｍｂｅｒ ｏｆ ｐｒｅｖｉｏｕｓ ｕｎｉｔ、ｘｐｕｎ）、再生された（以前の）ユニットの摩耗度レベル（ｗｅａｒ ｌｅｖｅｌ ｏｆ ｒｅｃｌａｉｍｅｄ（ｐｒｅｖｉｏｕｓ） ｕｎｉｔ）、論理的なユニット番号（ｌｏｇｉｃａｌ ｕｎｉｔ ｎｕｍｂｅｒ、ｌｕｎ）、有効フラグ（ｖａｌｉｄ ｆｌａｇ、ｖ）、不良ブロックテーブル（ｂａｄ ｂｌｏｃｋ ｔａｂｌｅ、ｂｂｔｂｌ）、摩耗度レベル（ｗｅａｒ ｌｅｖｅｌ、ｃｎｔ）、コピー（ｃｏｐｙｉｎｇ（ｃｐ））／伝送（ｔｒａｎｓｆｅｒｒｉｎｇ（ｘｆ））、データが記録される。
【００５６】
ユニットの状態変化も部分記録の回数によって限られる。ブロックに適用していた循環係数技法をユニットにも適用できる。しかし、削除ユニットヘッダを多数のブロックに記録しつつ、状態情報を各ブロックに適宜に分けて配置する方法を用いることもできる。
【００５７】
例えば、ユニットの状態が未定、有効、コピー中、移動中に分けられれば、削除ユニットヘッダを図８に示されたように、二つのブロックに亘って記録を行う。そして、第１ブロックには未定及び有効な状態を、第２ブロックにはコピー中及び移動中の状態を記録することができる。このとき、未定の状態であるとしても、摩耗度平準化のためのカウンターが記録される必要がある。
【００５８】
自由削除ユニットの状態は未定であり、その他の正常なユニットの状態は有効である。削除ユニットであってから再生されるブロックから送られてくるデータをコピーするユニットはコピー中（ｃｐ）という状態が表示される。再生を行う前に前記特定ブロックが含まれている以前のユニットの状態は移動中ｘｆと表示する。
【００５９】
コピー中のユニットに移動中のユニットから有効なブロックをコピーした後、移動中のユニットの摩耗度値及び論理的なユニット番号などをコピーする。コピー中のユニットの状態は有効ｖと表示する。次に、移動中のユニットは削除する。新しいユニットにコピーされていた摩耗度値ｃｎｔを１だけインクリメントさせた摩耗度値ｃｎｔ"を新しいユニット及び以前のユニットのユニットヘッダに各々記録する。
【００６０】
再生演算を行う間に障害が発生すれば、図８において再開始（ｒｅｄｏ）で指摘した部分で再生演算は再開始された後に適宜な回復手続きを行う。すなわち、再生演算中の一時的な状態に該当する'移動中'、'コピー中'の場合に障害が発生すれば、再開始をする。しかし、図８において再開始を指摘した部分を除いた部分ではいかなる回復手続きも行わない。
【００６１】
再生演算中に発生した障害に対する回復方法も、ブロック記録及び修正時の回復方法と同様である。
【００６２】
すなわち、遂行中であった演算の段階により適宜に再生演算を行い直す。例えば、論理的なユニット番号が同一のユニットが二つ存在するが、一つは移動中であり、もう一つはコピー中であれば、コピー中のユニットを削除する。移動中のユニットに以前のユニット（コピー中のユニット）の摩耗度がまだ記録されていない状態であったなら、先ず、以前のユニット（コピー中のユニット）に記録されている移動中のユニットに対する摩耗度値を移動中のユニットにコピーした後、次の演算を行えば良い。
【００６３】
削除ユニットの状態は、従来技術のように、固定された位置で値を各種に変更させて示すこともできる。また、ユニットヘッダを該当ユニット内の多数のブロックに分けて記録し、各状態に対して他の位置を指定し、位置の値を０及び１などに区別して状態値を割当てするかどうかを決定することもできる。
【００６４】
例えば、第１ブロックに論理的なユニット番号及び有効な状態の可否、以前のブロックの摩耗度などを記録し、第２ブロックにコピー中／移動中の可否及び摩耗度レベルなどを記録し、図８に示された順番に従い再生演算を行うのであれば、３回の部分記録であれば十分である。状態情報をより多くのブロックに分散させたり、或いは配置を調節すれば、部分記録の回数をさらに低減できる。
【００６５】
図９は、本発明による再写像制御方法によりブロックを再生する過程を説明するための動作フローチャートである。
【００６６】
ステップ９０１において、再生する削除ユニット（ソースユニット）及び移動ユニット（自由削除ユニット）を決定する。ステップ９０２において、移動ユニットの削除回数がしきい値を超えたかどうかをチェックする。しきい値は、前述のことを考慮したとき、３に設定できる。
【００６７】
チェックの結果、移動ユニットの削除回数がしきい値を超えてなければ、ステップ９０３においてソースユニットを'移動中'の状態に変更する。次に、ステップ９０４において、移動ユニットを'コピー中'の状態に変更する。
【００６８】
次に、ステップ９０５において、ソースユニットで有効ブロック及び関連メタデータ（論理的なブロック番号、ＥＣＣ、不良ブロックマップなど）を移動ユニットにコピーする。そして、ステップ９０６において、移動ユニットの残りのヘッダ情報を記録し、有効状態に変更する。残りのヘッダ情報はソースユニットの物理的なユニット番号及び削除回数、論理的なユニット番号などである。
【００６９】
ステップ９０７において、ソースユニットを削除する。そして、ステップ９０８において、ソースユニットに新しい削除回数を記録する。新しい削除回数は、以前の削除回数に１を増した値（以前の削除回数＋１）である。ステップ９０９において、写像情報などメモリ内の資料構造を変更する。このとき、変更は更新によるものである。そして、ステップ９１０において、貯蔵されたソースユニット番号があるかどうかをチェックする。チェックの結果、貯蔵されたソースユニット番号があれば、ステップ９０１へ進む。これに対し、チェックの結果、貯蔵されたソースユニット番号がなければ、作業を終える。
【００７０】
一方、ステップ９０２において、チェックの結果、移動ユニットの削除回数がしきい値を超える場合、ステップ９１１において、現在のソースユニットの番号を貯蔵する。これは、該当する移動ユニットにソースユニットのデータを移すのがあまり好適でないからである。したがって、後述するステップ９１２において選択されたソースユニット（削除ユニット）を用いた再生演算処理後に、変更される移動ユニットを用いて以前に再生できなかったソースユニットを再生するときに使用するためのものである。
【００７１】
そして、ステップ９１２において、削除回数が最小である削除ユニットを選択し、ステップ９０３へ進んで、前述のような再生演算処理が行われる。
【００７２】
【発明の効果】
以上述べたように、発明によれば、循環係数を使って状態情報を設定することにより、ＮＡＮＤ型フラッシュメモリのように部分記録の回数が限られているフラッシュメモリに対してブロックやユニットの記録状態を管理できるという効果がある。
【００７３】
例えば、未定（１１１１）→有効（ｓ０（１１１０））→ｓ１（１１００）→ｓ２（１０００）→ｓ０（１１１０）→．．．→削除（００００）のような手続きで変更できる。したがって、ＮＡＮＤ型フラッシュメモリにこれを適用するのであれば、３回の部分記録でデータを記録できる。もし、そのブロックが削除された状態の場合、データ及び論理的なブロック番号などの状態情報を除いた他のデータはいずれも有効なものと仮定するなら、実際に２回の部分記録で記録演算を行うのと同様である。
【００７４】
削除ユニットの場合にも、第１ブロックに論理的なユニット番号及び有効な状態の可否、以前のブロックの摩耗度（削除回数）などを記録し、第２ブロックにコピー中／移動中の可否及び摩耗度などを記録するのであれば、３回の部分記録であれば十分である。状態情報をより多くのブロックに分散させたり、或いは配置を調節すれば、部分記録回数をさらに低減できる。
【図面の簡単な説明】
【図１】  フラッシュメモリのブロック及びユニット関係と既存の再写像制御例を示したものである。
【図２】  図１に示されたようにデータを記録したフラッシュメモリのブロック削除時に、フラッシュメモリのブロック及びユニット関係と既存の再写像制御例を示したものである。
【図３】  図２に示されたようにデータを記録したフラッシュメモリのユニット削除時、フラッシュメモリのブロック及びユニット関係と既存の再写像制御例を示したものである。
【図４】  本発明によるフラッシュメモリのための再写像制御方法において、記録及び修正動作を説明するためのブロック間の関係に関する例を示したものである。
【図５】  ＮＡＮＤ型フラッシュメモリの物理的なユニットＰＵのフォーマットを示したものである。
【図６】  本発明によるフラッシュメモリのための再写像制御方法において、ブロック記録過程を説明するための動作フローチャートである。
【図７】  本発明によるフラッシュメモリの削除ユニットのフォーマットを示したものである。
【図８】  本発明によるフラッシュメモリのための再写像制御方法において、再生演算過程を説明するためのユニット間の関係に対する例を示したものである。
【図９】  本発明によるフラッシュメモリのための再写像制御方法において、再生演算過程に対する動作フローチャートである。
【符号の説明】
ＢＡＭ  ブロック割当てマップ
ＥＵＨ  削除ユニットヘッダ
ＬＢＮ  論理的なブロック番号
ＬＵＮ  論理的なユニット番号
ＰＢＮ  物理的なブロック番号
ＰＵＮ  物理的なユニット番号
【図１】
0003662510.tif 000002
【図２】
0003662510.tif 000003
【図３】
0003662510.tif 000004
【図４】
0003662510.tif 000005
【図５】
0003662510.tif 000006
【図６】
0003662510.tif 000007
【図７】
0003662510.tif 000008
【図８】
0003662510.tif 000009
【図９】
0003662510.tif 000010