(57)【特許請求の範囲】
【請求項１】
複数のセクタをそれぞれ有する複数の消去ブロックが設けられており、該消去ブロックの少なくとも１つが再構築用の予備消去ブロックとして予め確保された不揮発性半導体記憶部と、
前記各消去ブロックのそれぞれの状態を前記各消去ブロック毎にブロック状態情報として設定するとともに、前記各セクタ毎のそれぞれの状態を前記各セクタ毎にセクタ状態情報として設定するファイルシステム制御部と、
前記ファイルシステム制御部にて設定される前記ブロック状態情報および前記セクタ状態情報を、前記各消去ブロック毎および前記各セクタ毎にそれぞれ格納するファイルシステム記憶手段と、
前記ファイルシステム記憶手段に格納された前記ブロック状態情報および前記セクタ状態情報を参照して前記各セクタに対するデータの処理を制御するデータ処理制御部と、を備え、
前記データ処理制御部は、前記不揮発性半導体記憶部への書き込み要求時に書き込み可能な前記消去ブロックを確保できない場合に、前記予備消去ブロックに他の消去ブロックのデータを転送することによって、そのデータ転送元の消去ブロックを新たな予備消去ブロックとするとともに、該新たな予備消去ブロックとする場合において、電源が遮断された後の電源回復時に、前記ファイルシステム記憶手段に記憶された前記ブロック状態情報に基づいて前記データ転送が完了したかを判断して、該データ転送が完了していない場合に、前記予備消去ブロックのデータを消去してデータ転送を再開することを特徴とする不揮発性半導体記憶装置。
【請求項２】
前記データ処理制御部は、前記セクタに情報をデータを書き込む場合に、電源が遮断された後の電源回復時に、前記ファイルシステム記憶手段に記憶された前記セクタ状態情報に基づいて前記データの書き込みが完了したかを判断して、該データの書き込みが完了していない場合に、該データが書き込まれるセクタのデータを消去する請求項１に記載の不揮発性半導体記憶装置。
【請求項３】
前記ファイルシステム記憶手段は、前記不揮発性半導体記憶部における各消去ブロックのデータ処理に制約の無いＲＡＭ上に設けられている、請求項１に記載の不揮発性半導体記憶装置。
【請求項４】
前記ファイルシステム制御部は、前記ブロック状態情報として、データが格納されていないことを示す「未使用」と、データが格納されていることを示す「データ有」と、データ転送元からデータの転送中であることを示す「データ転送中」と、データ転送後にデータ転送元の消去ブロックのデータの消去中であることを示す「元ブロック消去中」とが設定可能になっている、請求項１に記載の不揮発性半導体記憶装置。
【請求項５】
前記データ処理制御部は、前記電源回復時に、前記ブロック状態情報が「データ転送中」の消去ブロックが存在する場合に、対応する消去ブロックのデータを消去した後にデータ転送を再開して、データ転送元の消去ブロックのデータを消去する構成であり、前記ファイルシステム制御部は、前記データ転送が完了すると前記ブロック状態情報を「元ブロック消去中」に設定し、該データ消去が完了すると前記ブロック状態情報を「データ有」に設定するとともに、転送元ブロックの消去ブロックの前記ブロック状態情報を「未使用」に設定する、請求項４に記載の不揮発性半導体記憶装置。
【請求項６】
前記不揮発性半導体記憶部が複数設けられており、複数の不揮発性半導体記憶部に対して１個の予備消去ブロックが設けられている、請求項１に記載の不揮発性半導体記憶装置。
【請求項７】
前記消去ブロックは、ブロックサイズが異なる複数種類設けられており、前記予備消去ブロックは、前記各種類毎に少なくとも１個以上設けられている、請求項１に記載の不揮発性半導体記憶装置。
【請求項８】
前記予備消去ブロックは、前記消去ブロックのサイズ以上のサイズを有する請求項６または７に記載の不揮発性半導体記憶装置。
【請求項９】
前記ファイルシステム制御部は、前記ブロック状態情報として、未使用セクタ数が０の状態である「ブロックフル」も設定可能である、請求項４に記載の不揮発性半導体記憶装置。
【請求項１０】
前記ファイルシステム制御部は、前記ブロック状態情報として、データ転送元の消去ブロックのデータ消去が完了したことを示す「元ブロック消去完了」も設定可能になっている、請求項５に記載の不揮発性半導体記憶装置。
【請求項１１】
前記データ処理制御部は、前記新たな予備消去ブロックとする際に、前記ブロック状態情報として「元ブロック消去完了」の消去ブロックが存在すると、対応する転送元ブロックのブロック状態情報を「未使用」に設定する、請求項１０に記載の不揮発性半導体記憶装置。
【請求項１２】
前記ファイルシステム制御部は、前記ブロック状態情報として、前記データ転送元の消去ブロックの消去可能回数を書き込み中であることを示す「元ブロックフォーマット中」も設定可能である、請求項５に記載の不揮発性半導体記憶装置。
【請求項１３】
前記ファイルシステム制御部は、前記データ消去が完了すると、前記ブロック状態情報を「データ有」にする前に「元ブロックフォーマット中」とし、前記データ処理制御部は、前記データ消去が完了すると、前記データ転送元の消去ブロックに、消去可能回数を書き込む、請求項１２に記載の不揮発性半導体記憶装置。
【請求項１４】
前記データ処理制御部は、前記消去回数が最大の消去ブロックをデータ転送元として選択する、請求項１３に記載の不揮発性半導体記憶装置。
【請求項１５】
前記データ処理制御部は、前記消去ブロックに書き込まれた消去可能回数が０以下の値になった時点で、該消去ブロックの使用を禁止する請求項１４に記載の不揮発性半導体記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリ等の不揮発性半導体記憶装置を用いたファイルシステムに関するものである。
【０００２】
【従来の技術】
最近、データを電気的に書き込み及び消去することが可能な不揮発性半導体記憶装置（例えばフラッシュメモリ）を、データを磁気的に書き込み及び消去することが可能なハードディスクドライブの代替として用いるための技術が注目されている。
【０００３】
フラッシュメモリは、ハードディスクドライブと比較して、データの読み出し速度が約１万倍程度かつデータの書き込み速度が約１千倍程度速く、また小型軽量化を図り易く耐衝撃性に優れ、可搬性が高い等の特長を備え、更に低容量のデータを高速に格納しかつ読み出すという用途には好適である。
【０００４】
しかしながら、フラッシュメモリにおいては、既にデータが書き込まれている記憶領域に新しくデータを書き込むには、書き込まれているデータを一旦消去するという動作が必要となる。しかも、データを消去する単位が数キロバイトと大きく、数十ミリ秒から数秒と比較的長いデータ消去時間が必要であり、データの書き込み及び消去の保証回数が有限であるという欠点がある。
【０００５】
このため、フラッシュメモリをハードディスクドライブの代替として用いる場合は、上記欠点を踏まえ、データの取り扱い単位をハードディスクドライブ並みの数百バイト程度に小さくし、なるべくデータ消去を行なわず、効率良くデータを管理するための仕組み、つまりフラッシュメモリに対応したファイルシステムを提供する必要がある。この様なファイルシステムは、例えば特開平６−９５９５５号公報に開示されている。
【０００６】
また、米国特許５，５４４，１１９号には、電力供給遮断後の電力復旧時の処理方法が示され、米国特許５，５４４，３５６号には、ファイルシステムの再構築方法が示されている。
【０００７】
【発明が解決しようとする課題】
しかしながら、上記公報に記載の技術においては、電源として電池等を用いた電力供給が不安定な環境下で、フラッシュメモリや各種の制御を行うファイルシステムが使用される状況を想定しておらず、フラッシュメモリあるいはファイルシステムの動作中に、電池の消耗等により電力供給が一瞬でも遮断されたとき、つまり意図しない電力供給の遮断が発生したときには、フラッシュメモリに格納されているデータを正常に読み出せなくなるという可能性があった。
【０００８】
具体的には、第１に、データが格納された記憶領域（以下セクタと呼称する）の現在の状態をセクタ状態情報によって表しているが、このセクタ状態情報が「未使用」、「使用中」、「無効」という３種類の状態のいずれかを表しているに過ぎないため、セクタのデータを更新するに際し、電力供給の遮断が発生すると、データが正常に更新されなくても、セクタ状態情報に基いてデータを正常とみなしてしまうことがあった。このセクタのデータの更新処理を図１０のフローチャートに従って次に述べる。
【０００９】
図１０のフローチャートによれば、まず更新される既存のデータを格納している１つのセクタのセクタ状態情報を「使用中」から「無効」へ変更し（ステップ１０１）、次にもう１つのセクタのセクタ状態情報を「未使用」から「使用中」へ変更し（ステップ１０２）、この後にセクタ状態情報が「使用中」となったセクタに対して更新データを書き込む（ステップ１０３）。ステップ１０１〜１０３を書き込むデータがなくなるまで繰り返す。
【００１０】
ここで、ステップ１０２の直後あるいはステップ１０３の実行中において、電力供給の遮断が発生し、フラッシュメモリに対するデータの書き込みが中断すると、更新データのセクタへの書き込みが正常に終了していないにもかかわらず、このセクタのセクタ状態情報が「使用中」となる。このため、電力供給が回復したときに、ファイルシステムは、このセクタに格納されているデータを有効であると誤認してしまう。
【００１１】
第２に、１つのブロック内の全てのデータを消去して、ファイルシステムを再構築するに際し、電源の遮断が発生すると、２つのブロックにおいて同じデータを格納した状態、あるいは１つのブロック内の全てのデータを完全に消去していない状態が発生することがあった。このファイルシステムの再構築の処理を図１１のフローチャートに従って次に述べる。
【００１２】
まず、アプリケーションもしくはオペレーティングシステム６においてフラッシュメモリ部５からのデータの読み出し要求が発生した場合、この読み出し要求と共に論理セクタ番号がアプリケーションもしくはオペレーティングシステム６からファイルシステム制御部２に与えられる。ファイルシステム制御部２は、ファイルシステムメモリ部３内のセクタ情報表１１をアクセスして、与えられた論理セクタ番号を検索し、この論理セクタ番号に対応するセクタ状態が「データ有効」となっていることを確認し、この論理セクタ番号に対応する物理セクタ番号を取得し、この物理セクタ番号をフラッシュメモリ制御部４に与える（ステップ１２１）。フラッシュメモリ制御部４は、この物理セクタ番号に基いてフラッシュメモリ部５をアクセスし、この物理セクタ番号に該当する物理的な格納場所のセクタに対して読み出しを行い、読み出したデータをファイルシステム制御部２に与える（ステップ１２２）。読み出すべき残りのデータがある場合は、ステップ１２１へ戻り（ステップ１２３，Ｙｅｓ）、読み出すべき残りのデータがない場合は、終了となる（ステップ１２３，Ｎｏ）。
【００１３】
ここで、ステップ１１３の実行前あるいはステップ１１３の実行中において、電力供給の遮断が発生すると、電力供給が回復したときに、２つのブロックにおいて同じデータを格納した状態、あるいは１つのブロック内の全てのデータを完全に消去できていない状態が発生し、新たな予備ブロックを確保できない。
【００１４】
そこで、本発明は、上記従来の問題に鑑みなされたものであり、電力供給の遮断が発生しても、フラッシュメモリに格納されているデータを正常に読み出すことが可能な不揮発性半導体記憶装置を用いたファイルシステムを提供することを目的とする。
【００１５】
【課題を解決するための手段】
上記課題を解決するために、本発明のファイルシステムは、複数のセクタをそれぞれ含む複数の消去ブロックを有する不揮発性半導体記憶装置を用いたファイルシステムにおいて、該各消去ブロック毎に、消去ブロックについての複数の状態情報のいずれかを格納すると共に、該各セクタ毎に、セクタについての複数の状態情報のいずれかを格納する記憶手段と、該不揮発性半導体記憶装置のアクセス時に、該記憶手段内の該各消去ブロックの状態情報及び該各セクタの状態情報に基いて、該不揮発性半導体記憶装置に既に格納されているデータを保証する保証手段とを具備する。
【００１６】
本発明によれば、ブロックについての複数の状態情報及びセクタについての複数の状態情報を記憶手段に格納している。このため、ファイルシステムが稼働中において、意図しない電力供給の遮断が生じても、電力供給が回復したときには、起動時の初期化処理に際し、ブロックについての複数の状態情報及びセクタについての複数の状態情報に基いて、ブロック及びセクタの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【００１７】
一実施形態では、前記記憶手段は、データの更新に制約の無いＲＡＭ上に設けられ、前記保証手段は、前記不揮発性半導体記憶装置へのアクセス時に、該ＲＡＭ上の前記各消去ブロックの状態情報及び前記各セクタの状態情報を参照する。
【００１８】
この様にＲＡＭを利用すると、データの更新に制約がなくなり処理速度が早くなる。
【００１９】
一実施形態では、前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」という少なくとも５つの状態を設定しており、前記保証手段は、再構築用に予め確保されている予備ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備ブロックへ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備ブロックのブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロックのデータを消去し、このデータ転送元の消去ブロックを新たな予備ブロックとして確保し、この新たな予備ブロックの状態情報を「データ有」あるいは「ブロックフル」から「未使用」へ更新する手段と、データ転送先の該予備ブロックの状態情報を「元ブロック消去中」から「データ有」へ更新する手段とを含む。
【００２０】
この様に消去ブロックの状態情報として「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」という５つの状態を利用した場合、ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【００２１】
一実施形態では、再構築用に予め確保されている予備ブロックは、１個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有する。
【００２２】
この場合、均等ブロックあるいはブートブロック構成のフラッシュメモリのうちからシステムの目的に合わせた、あるいはより安価なフラッシュメモリを採用することが可能となる利点がある。
【００２３】
一実施形態では、再構築用に予め確保されている予備ブロックは、複数個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有する。
【００２４】
この場合、ファイルシステムが必要とする予備ブロックの数を少なくできる利点がある。このため、ファイルシステムが安価に構成できる利点もある。
【００２５】
一実施形態では、再構築用に予め確保されている予備ブロックは、消去ブロックのサイズ以上のサイズを有する。
【００２６】
この場合は、ブートブロック（例えば８Ｋバイトのサイズ）用の予備ブロックとして、８Ｋバイトより大きいサイズのブロック（例えば６４Ｋバイトのサイズ）を予備ブロックに割り当て、予備ブロックのサイズを一定にできるため、管理が簡単になる。
【００２７】
本発明のファイルシステムは、複数のセクタを有する不揮発性半導体記憶装置を用いたファイルシステムにおいて、該各セクタ毎に、セクタについての複数の状態情報のいずれかを格納する記憶手段と、該不揮発性半導体記憶装置のアクセス時に、該記憶手段内の該各セクタの状態情報に基いて、該不揮発性半導体記憶装置に既に格納されているデータを保証する保証手段とを具備し、前記セクタについての複数の状態情報として、「未使用」、「データ書き込み中」、「データ書き込み完了」、「データ有効」、「データ無効」という少なくとも５つの状態を設定しており、前記保証手段は、データが書き込まれるセクタの状態情報を「未使用」から「データ書き込み中」へ更新する手段と、該セクタへのデータの書き込みが完了した後、該セクタの状態情報を「データ書き込み中」から「データ書き込み完了」へ更新する手段と、該セクタにデータを新規に書き込んだ場合は、該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新し、該セクタに既存のデータの更新データを書き込んだ場合は、該既存のデータが書き込まれている他のセクタの状態情報を「データ有効」から「データ無効」に更新後、該更新データが書き込まれている該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新する。
【００２８】
本発明によれば、セクタについての５つの状態情報を記憶手段に格納している。このため、ファイルシステムが稼働中において、意図しない電力供給の遮断が生じても、電力供給が回復したときには、起動時の初期化処理に際し、セクタについての複数の状態情報に基いて、セクタの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【００２９】
他の実施形態では、前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という少なくとも５つの状態を設定しても良い。
【００３０】
この場合、再構築用に予め確保されている予備消去ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備消去ブロックヘ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備消去ブロックのブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロックのデータを消去し、このデータ転送元の消去ブロックを新たな予備消去ブロックとして確保し、この新たな予備消去ブロックの状態情報を「データ有」から「未使用」へ更新する手段と、データ転送先の該予備消去ブロックの状態情報を「元ブロック消去中」から「元ブロックフォーマット中」へ更新し、データ転送元の新たな予備消去ブロックヘ新たな予備消去ブロックの消去可能回数などを書き込む（フォーマットする）手段と、フォーマット完了後、データ転送先の該予備消去ブロックの状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを含む構成が考えられる。
【００３１】
この様に、消去ブロックの状態情報として「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という５つの状態を利用した場合、消去ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。また、消去ブロックの状態情報として「ブロックフル」という状態を設定しない方法は、消去ブロックが不均等なサイズのセクタに分割されて使用される場合に特に有効である。なぜならば、不均等なサイズのデータを同一の消去ブロック内の連続したセクタに書き込む場合において、次に書き込むべきデータのサイズが不明である場合に、消去ブロックの状態情報が「ブロックフル」となるかどうかの判断が難しいためである。
【００３２】
電力供給が回復した時のファイルソステムの初期化において、前記消去ブロックの状態情報として「元ブロック消去中」の消去ブロックが存在するか検索し、該消去ブロックが存在する場合は、該消去ブロックの論理ブロック番号と同一の論理ブロック番号を有し、消去ブロックの状態情報が「データ有」あるいは「ブロックフル」である消去ブロックを、前記記憶手段内の各消去ブロックの状態情報から取得する手段と、取得した消去ブロックのデータを消去し、消去完了後、この消去ブロックの状態情報を「データ有」あるいは「ブロックフル」から「未使用」へ更新する手段と、消去ブロックの状態情報が「元ブロック消去中」の消去ブロックの状態情報を「元ブロック消去中」から「データ有」へ更新する手段とを含んでもよい。
【００３３】
前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という少なくとも５つの状態を設定しており、前記保証手段は、ファイルシステムの再構築用に予め確保されている予備消去ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備消去ブロックヘ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備消去ブロックの状態情報を「データ転送中」から「元ブロック消去中」へ更新し、データ転送元の消去ブロックのデータを消去し、消去完了後、このデータ転送元の消去ブロックを新たな予備消去ブロックとして確保し、この新たな予備消去ブロックの状態情報を「データ有」から「未使用」へ更新する手段と、データ転送先の該予備消去ブロックの状態情報を「元ブロック消去中」から「元ブロックフォーマット中」へ更新し、データ転送元の新たな予備消去ブロックをフォーマットする手段と、フォーマット完了後、データ転送先の該予備消去ブロックの状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを含んでもよい。
【００３４】
前記消去ブロックは、ブロック消去可能回数を各消去ブロック内に記憶しており、前記フォーマット時において、新たな予備消去ブロックに該予備消去ブロックの消去可能回数から１減じた回数を該予備消去ブロック内に記憶する手段と、ファイルシステムの再構築時には、該予備消去ブロックを除いた全ての消去ブロックの中で、ブロック消去回数が最大の消去ブロックをデータ転送元として選択する手段とを含んでもよい。
【００３５】
前記ブロック消去可能回数が０以下の値になった時点で、該消去ブロックの使用を禁止してもよい。
【００３６】
前記消去ブロックは、ブロック消去可能回数を各消去ブロック内に記憶しており、前記フォーマット時において、新たな予備消去ブロックに該予備消去ブロックの消去回数に１増加した回数を該予備消去ブロック内に記憶する手段と、ファイルシステムの再構築時には、該予備消去ブロックを除いた全ての消去ブロックの中で、ブロック消去回数が最大の消去ブロックをデータ転送元として選択する手段とを含んでもよい。
【００３７】
前記ブロック消去可能回数が消去可能回数の仕様値（最大値）以上の値になった時点で、該消去ブロックの使用を禁止してもよい。
【００３８】
ファイルシステムの再構築用に予め確保されている予備消去ブロックは、１個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有してもよい。
【００３９】
ファイルシステムの再構築用に予め確保されている予備消去ブロックは、複数個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有してもよい。
【００４０】
ファイルシステムの再構築用に予め確保されている予備消去ブロックは、消去ブロックサイズ以上のサイズを有してもよい。
【００４１】
複数のセクタを有する不揮発性半導体記憶装置を用いたファイルシステムにおいて、該各セクタ毎に、セクタについての複数の状態情報のいずれかを格納する記憶手段と、該不揮発性半導体記憶装置へのアクセス時に、該記憶手段内の該各セクタの状態情報に基いて、該不揮発性半導体記憶装置に既に格納されているデータを保証する保証手段とを具備し、前記セクタについての複数の状態情報として、「未使用」、「データ書き込み中」、「データ書き込み完了」、「データ有効」、「データ無効」という少なくとも５つの状態を設定しており、前記保証手段は、データが書き込まれるセクタの状態情報を「未使用」から「データ書き込み中」へ更新する手段と、該セクタヘのデータの書き込みが完了した後、該セクタの状態情報を「データ書き込み中」から「データ書き込み完了」へ更新する手段と、該セクタにデータを新規に書き込んだ場合は、該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新し、該セクタに既存のデータの更新データを書き込んだ場合は、該既存のデータが書き込まれている他のセクタの状態情報を「データ有効」から「データ無効」に更新後、該更新データが書き込まれている該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新する手段とを含んでもよい。
【００４２】
電力供給が回復した時のファイルシステムの初期化において、前記消去ブロックの状態情報として「元ブロック消去中」の消去ブロックが存在するか検索し、該消去ブロックが存在する場合は、該消去ブロックヘのデータ転送元ブロックを、前記記憶手段内の各消去ブロックの状態情報から取得する手段と、取得したデータ転送元ブロックのデータを消去し、消去完了後、この消去ブロックの状態情報を「データ有」から「未使用」へ更新する手段と、消去ブロックの状態情報が「元ブロック消去中」の消去ブロックの状態情報を「元ブロック消去中」から「元ブロックフォーマット中」へ更新し、データを消去した消去ブロックをフォーマットして新たな予備消去ブロックとして確保する手段と、フォーマット完了後、消去ブロックの状態情報が「元ブロックフォーマット中」の消去ブロックの状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを含んでもよい。
【００４３】
電力供給が回復した時のファイルシステムの初期化において、前記消去ブロックの状態情報として「元ブロックフォーマット中」の消去ブロックが存在するか検索し、該消去ブロックが存在する場合は、該消去ブロックヘのデータ転送元ブロックを、前記記憶手段内の各消去ブロックの状態情報から取得する手段と、取得したデータ転送元ブロックをフォーマットして新たな予備消去ブロックとして確保する手段と、フォーマット完了後、消去ブロックの状態情報が「元ブロックフォーマット中」の消去ブロックの状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを含んでもよい。
【００４４】
【発明の実施の形態】
以下、本発明の実施形態を添付図面を参照して説明する。
【００４５】
図１は、本発明のファイルシステムの一実施形態を示している。図１において、１はファイルシステム、２はファイルシステム１の処理を制御するファイルシステム制御部、３はファイルシステム１が制御情報を格納するために使用するファイルシステムメモリ部、４はフラッシュメモリ部５へのデータ処理を制御するフラッシュメモリ制御部、５はフラッシュメモリ部、６はファイルシステム１へデータの処理を依頼するアプリケーションもしくはオペレーティングシステムである。
【００４６】
図２は、図１におけるフラッシュメモリ部５に格納されているデータの構成図である。フラッシュメモリ部５の各消去ブロック５１は、データの取扱い単位である複数の物理セクタ５２に分割されて配置されており、各消去ブロック５１内で一意の物理セクタ番号を有する。各消去ブロック５1のサイズが６４Ｋバイトで、各物理セクタ５２のサイズが５１２バイトであるとした場合、各消去ブロック５１には１２８個の物理セクタ５２が存在することになる。
【００４７】
ここで、フラッシュメモリ部５内の複数の消去ブロック５１のうちの任意の１個の消去ブロック５１をファイルシステム１の再構築用に用いられるデータ未書き込みの予備消去ブロックとして、また各消去ブロック５１の先頭のセクタ５２をそれぞれの消去ブロックの制御情報を絡納するブロックコントロールセクタ５２ａとして、予め確保しておく。
【００４８】
消去ブロック５１において、ブロックコントロールセクタ５２ａには、先頭から該消去ブロック５１の状態情報としての２バイト、セクタ＃１の物理セクタ５２の状態情報としての２バイト、セクタ＃２〜＃１２７の各物理セクタ５２の状態情報としてのそれぞれの２バイトが順次配列され、よって２バイト×１２８個＝２５６バイトの情報を有している。
【００４９】
消去ブロック５１の状態情報は、ファイルシステム制御部２が割り当てを行う０〜２５５の論理ブロック番号、及び５種類のブロック状態のいずれかを表すデータからなる。５種類のブロック状態とは、（１）「未使用」を表す１１１１１１１１ｂ（ｂは２進数を表わす。以下同様）、（２）「データ転送中」を表す１１１１１１１０ｂ、（３）「元ブロック消去中」を表す１１１１１１００ｂ、（４）「データ有」を表す１１１１１０００ｂ、（５）「ブロックフル」を表す１１１１００００ｂである。
【００５０】
消去ブロック５１の各セクタ５２の状態情報は、消去ブロック５１の状態情報と同様に、ファイルシステム制御部２が割り当てを行う０〜４０９５のシステム内で一意の論理セクタ番号、及び５種類のセクタ状態のいずれかを表すデータからなる。５種類のセクタ状態とは、（Ｉ）「未使用」を表す１１１１ｂ、（ＩＩ）「データ書き込み中」を表す１１１０ｂ、（ＩＩＩ）「データ書き込み完了」を表す１１００ｂ、（ＩＶ）「データ有効」を表す１０００ｂ、（Ｖ）「データ無効」を表す００００ｂである。
【００５１】
図３は、図１におけるファイルシステムメモリ部３に格納されている各消去ブロック５１に関するデータの構成図（以下、ブロック情報表１０と呼称）である。
【００５２】
図３において、物理ブロック番号、論理ブロック番号、及びブロック状態を１つの情報単位としており、例えば物理ブロック番号＝０、論理ブロック番号＝０、ブロック状態＝データ有となっている消去ブロック５１、物理ブロック番号＝１、論理ブロック番号＝１、ブロック状態＝ブロックフルとなっている消去ブロック５１等が存在することを示している。
【００５３】
図４は、図１におけるファイルシステムメモリ部３に格納されている各セクタ５２に関するデータの構成図（以下、セクタ情報表１１と呼称）である。
【００５４】
図４において、物理ブロック番号、物理セクタ番号、論理セクタ番号、及びセクタ状態を１つの情報単位としており、例えば物理ブロック番号＝０、物理セクタ番号＝０、論理セクタ番号＝１００、セクタ状態＝データ有効となっているセクタ５２、物理ブロック番号＝０、物理セクタ番号＝１、論理セクタ番号＝１０、セクタ状態＝データ無効となっているセクタ５２等が存在することを示している。
【００５５】
図５は、図１におけるファイルシステムメモリ部３に格納されている各消去ブロック５１毎に、各セクタ５２の数をそれぞれのセクタ状態に応じて整理したデータの構成図（以下、セクタ情報表１２と呼称）である。
【００５６】
図５において、物理ブロック番号、未使用セクタ数、データ有効セクタ数、及びデータ無効セクタ数を１つの情報単位としており、例えば物理ブロック番号＝０、未使用セクタ数＝１００、データ有効セクタ数＝２０、データ無効セクタ数＝７となっている消去ブロック５１、物理ブロック番号＝１、未使用セクタ数＝０、データ有効セクタ数＝５０、データ無効セクタ数＝７７となっている消去ブロック５１等が存在することを示している。
【００５７】
図３のブロック情報表１０、図４のセクタ情報表１１、及び図５のセクタ情報表１２は、ファイルシステム１が起動する段階において、フラッシュメモリ部５から各消去ブロック５１のブロックコントロールセクタ５２ａを読み出すことによってそれぞれ作成される。
【００５８】
ブロック情報表１０、セクタ情報表１１、及びセクタ情報表１２を作成しない場合においても、これらの表の情報が各消去ブロック５１のブロックコントロールセクタ５２ａに格納されているため、ファイルシステム１を使用することは可能である。しかしながら、ファイルシステムメモリ部３の動作速度がフラッシュメモリ部５よりも高速なため、ファイルシステムメモリ部３にブロック情報表１０、セクタ情報表１１、及びセクタ情報表１２を作成して置いておく方が、フラッシュメモリ部５の内部状態やデータの格納場所を高速に把握することができる。また、フラッシュメモリ部５とのデータのやり取りが減るので、ファイルシステムメモリ部３を利用した方が、ファイルシステム１の動作速度を高速にする上で非常に有効である。
【００５９】
図６は、本実施形態におけるフラッシュメモリ部５に格納されたデータの読み出し処理に関するフローチャートである。
【００６０】
まず、アプリケーションもしくはオペレーティングシステム６においてフラッシュメモリ部５からのデータの読み出し要求が発生した場合、この読み出し要求と共に論理セクタ番号がアプリケーションもしくはオペレーティングシステム６からファイルシステム制御部２に与えられる。ファイルシステム制御部２は、ファイルシステムメモリ部３内のセクタ情報表１１をアクセスして、与えられた論理セクタ番号を検索し、この論理セクタ番号に対応するセクタ状態が「データ有効」となっていることを確認し、この論理セクタ番号に対応する物理セクタ番号を取得し、この物理セクタ番号をフラッシュメモリ制御部４に与える（ステップ１２１）。フラッシュメモリ制御部４は、この物理セクタ番号に基いてフラッシュメモリ部５をアクセスし、この物理セクタ番号に該当する物理的な格納場所のセクタに対して読み出しを行い、読み出したデータをファイルシステム制御部２に与える（ステップ１２２）。読み出すべき残りのデータがある場合は、ステップ１２１へ戻り（ステップ１２３，Ｙｅｓ）、読み出すべき残りのデータがある場合は、終了となる（ステップ１２３，Ｎｏ）。
【００６１】
図７Ａ〜図７Ｃは、本実施形態におけるフラッシュメモリ部５へのデータの書き込み処理に関するフローチャートである。
【００６２】
まず、アプリケーションもしくはオペレーティングシステム６においてフラッシュメモリ部５へのデータの書き込み要求が発生した場合、この書き込み要求と共に論理セクタ番号及び書き込むデータがアプリケーションもしくはオペレーティングシステム６からファイルシステム制御部２に与えられる。ファイルシステム制御部２は、ファイルシステムメモリ部２内のセクタ情報表１２をアクセスして、未使用セクタ数が最も多い物理ブロック番号（書き込み可能な消去ブロック５１を示す）を取得し（ステップ１３１）、取得できたかどうかの確認を行い（ステップ１３２）、この物理ブロック番号が取得出来なかった場合は（ステップ１３２，Ｎｏ）、書き込み可能な消去ブロック５１を確保するために後述するファイルシステム１の再構築を行う（ステップ１３３）。
【００６３】
また、未使用セクタ数が最も多い物理ブロック番号を取得できれば（ステップ１３２，Ｙｅｓ）、ファイルシステム制御部２は、セクタ情報表１１をアクセスして、ステップ１３１又は１３３において取得した物理ブロック番号に対応する各物理セクタ番号のうちからセクタ状態が「未使用」となっている物理セクタ番号を取得し、更にセクタ情報表１２をアクセスして、該物理ブロック番号に対応する未使用セクタ数を−１とし、データ有効セクタ数を＋１とする（ステップ１３４）。
【００６４】
この後、ファイルシステム制御部２は、ブロック情報表１０をアクセスして、ステップ１３１又は１３３において取得した物理ブロック番号に対応するブロック状態が「未使用」であるかの確認を行い（ステップ１３５）、ブロック状態が「未使用」であれば（ステップ１３５，Ｙｅｓ）、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、該物理ブロック番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａの論理ブロック番号を該物理ブロック番号に更新し、ブロックコントロールセクタ５２ａのブロック状態を「未使用」から「データ有」へ更新する。同様に、ブロック情報表１０をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号に対応する論理ブロック番号を該物理ブロック番号に更新し、ブロック状態を「未使用」から「データ有」へ更新し（ステップ１３６）、ステップ１３７に移る。ブロック状態が「未使用」でなければ（ステップ１３５，Ｎｏ）、ステップ１３６をジャンプしてステップ１３７に移る。
【００６５】
次に、ファイルシステム制御部２は、セクタ情報表１２をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号に対応する未使用セクタ数が０かの確認を行い（ステップ１３７）、未使用セクタ数が０であれば（ステップ１３７，Ｙｅｓ）、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、該物理ブロック番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を「データ有」から「ブロックフル」へ更新する。同様に、ブロック情報表１０をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号に対応するブロック状態も「データ有」から「ブロックフル」へ更新する（ステップ１３８）。
【００６６】
次に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得した物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａの論理セクタ番号にファイルシステム制御部２に与えられた論理セクタ番号を書き込み、このセクタ５２のセクタ状態を「未使用」から「データ書き込み中」へ更新する。同様に、セクタ情報表１１をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得した物理セクタ番号に対応する論理セクタ番号をファイルシステム制御部２に与えられた論理セクタ番号に更新し、セクタ状態を「未使用」から「データ書き込み中」へ更新する（ステップ１３９）。
【００６７】
この後、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得し物理セクタ番号に対応するセクタ５２に、ファイルシステム制御部２に与えられたデータを書き込む(ステップ１４０）。
【００６８】
ファイルシステム制御部２は、フラッシュメモリ部５内のセクタ５２への書き込み終了後、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得した物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ書き込み中」から「データ書き込み完了」へ更新する。同様に、セクタ情報表１１をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得した物理セクタ番号に対応するセクタ状態を「データ書き込み中」から「データ書き込み完了」へ更新する（ステップ１４１）。
【００６９】
そして、ファイルシステム制御部２は、フラッシュメモリ部５内のセクタ５２に書き込んだデータが既にフラッシュメモリ部５に書き込まれていたデータの更新データであるかの確認を行う（ステップ１４２）。ここで、既存データの更新であれば（ステップ１４２，Ｙｅｓ）、ファイルシステム制御部２は、セクタ情報表１１をアクセスして、ステップ１４０において書き込みを実行したセクタ５２の論理セクタ番号と同じ論理セクタ番号を有しかつステップ１４０において書き込みを実行したセクタ５２の物理セクタ番号とは異なる他のセクタ５２の物理セクタ番号及び物理ブロック番号、つまり既存のデータが格納されたセクタ５２の物理セクタ番号及び物理ブロック番号を取得する（ステップ１４３）。そして、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、これらの物理ブロック番号並びに物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ有効」から「データ無効」へ更新する。同様に、セクタ情報表１１をアクセスし、これらの物理ブロック番号並びに物理セクタ番号に対応するセクタ状態を「データ有効」から「データ無効」へ更新する。更に、セクタ情報表１２をアクセスし、この物理ブロック番号に対応するデータ有効セクタ数を−１とし、データ無効セクタ数を＋１する（ステップ１４４）。
【００７０】
この後、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ステップ１３１又は１３３において取得した物理ブロック番号並びにステップ１３４において取得した物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ書き込み完了」から「データ有効」へ更新する。同様に、セクタ情報表１１をアクセスし、これらの物理ブロック番号並びに物理セクタ番号に対応するセクタ状態も「データ書き込み完了」から「データ有効」へ更新する（ステップ１４５）。
【００７１】
引き続いて、ファイルシステム制御部２は、書き込みデータがまだ残っているかの確認を行い（ステップ１４６）、書き込みデータがまだ残っている場合は（ステップ１４６，Ｙｅｓ）、ステップ１３１へ戻り、書き込みデータがなくなれば（ステップ１４６，Ｎｏ）、終了する。
【００７２】
図８Ａ〜図８Ｂは、本実施形態におけるファイルシステム１の再構築処理に関するフローチャートである。
【００７３】
まず、図７Ａ〜図７Ｃのフローチャートで説明した様に書き込み可能な消去ブロック５１が取得出来なかった場合は（ステップ１３２，Ｎｏ）、書き込み可能な消去ブロック５１を確保するためにファイルシステムの再構築を行う（ステップ１３３）。このステップ１３３の処理が図８のフローチャートに示す処理に該当する。
【００７４】
図８Ａ〜図８Ｂにおいて、ファイルシステム制御部２は、セクタ情報表１２をアクセスし、データ無効セクタ数が最も多い物理ブロック番号を取得し、更にブロック情報表１０をアクセスし、取得した物理ブロック番号に対応する論理ブロック番号を取得する（ステップ１５１）。そして、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ファイルシステムの再構築処理用に予め未使用状態で確保しておいた予備消去ブロック５１のブロックコントロールセクタ５２ａの論理ブロック番号をステップ１５１において取得した論理ブロック番号へ更新し、このブロックコントロールセクタ５２ａのブロック状態を「未使用」から「データ転送中」へ更新する。同様に、ブロック情報表１０をアクセスし、予備消去ブロック５１の論理ブロック番号をステップ１５１において取得した論理ブロック番号へ更新し、ブロック状態を「未使用」から「データ転送中」へ更新する（ステップ１５２）。
【００７５】
次に、ファイルシステム制御部２は、データをステップ１５１において取得した物理ブロック番号の消去ブロック５１から予備消去ブロック５１ヘ効率良くコピーするにために、セクタ情報表１１をアクセスし、ステップ１５１において取得した物理ブロック番号に対応する各物理セクタ番号のうちからセクタ状態が「データ有効」である物理セクタ番号を検索して取得する（ステップ１５３）。セクタ状態が「データ有効」のセクタ５２があれば（ステップ１５４，Ｙｅｓ）、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ステップ１５１において取得した物理ブロック番号並びにステップ１５３において取得した物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態「データ有効」を予備消去ブロック５１の同じ物理セクタ番号に対応するブロックコントロールセクタ５２ａのセクタ状態にコピーする。同様に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、ステップ１５１において取得した物理ブロック番号並びにステップ１５３において取得した物理セクタ番号のセクタ状態「データ有効」を予備消去ブロック５１の同じ物理セクタ番号のセクタ状態にコピーする。同時に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、ステップ１５１において取得した物理ブロック番号並びにステップ１５３において取得した物理セクタ番号に対応する消去ブロック５１のセクタ５２から予備消去ブロック５１の同じ物理セクタ番号のセクタ５２へとデータをコピーする（ステップ１５５）。
【００７６】
ファイルシステム制御部２は、ステップ１５１において取得した物理ブロック番号の消去ブロック５１に未処理のセクタ５２があるかの確認を行う（ステップ１５６）。未処理のセクタ５２がある場合は、ステップ１５３へ戻る。未処理のセクタ５２がない場合は、データのコピーが完了したため、ファイルシステム制御部２は、セクタ情報表１２をアクセスし、ステップ１５１において取得した物理ブロック番号に対応するデータ有効セクタ数を予備消去ブロック５１のデータ有効セクタ数へコピーし、またデータ無効セクタ数を０とし、データ有効セクタ数とデータ無効セクタ数と未使用セクタ数の和が総セクタ数（１２７）となる様に、未使用セクタ数を計算して設定する（ステップ１５７）。
【００７７】
次に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、予備消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を「データ転送中」から「元ブロック消去中」へ更新し（ステップ１５８）、ステップ１５１において取得した物理ブロック番号の消去ブロック５１のデータを消去し（ステップ１５９）、予備消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を「元ブロック消去中」から「データ有」へ更新する。同様に、ファイルシステム制御部２は、ブロック情報表１０をアクセスし、予備消去ブロック５１のブロック状態を「データ転送中」から「元ブロック消去中」へ更新し（ステップ１５８）、ステップ１５９を経た後に予備消去ブロック５１のブロック状態を「元ブロック消去中」から「データ有」へ更新する。これによって、ステップ１５１において取得した物理ブロック番号のブロック、つまりデータを消去したブロックが新しい予備消去ブロック５１として確保される（ステップ１６０）。
【００７８】
ここで、ステップ１５９においてデータを消去した消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態は、データ消去により自動的に「データ有」あるいは「ブロックフル」から「未使用」となる。また、ブロック情報表１０、セクタ情報表１１及びセクタ情報表１２では、ステップ１５９においてデータを消去した消去ブロック５１が予備消去ブロックとなり、フラッシュメモリ部５へのデータの書き込みにおいて予備消去ブロックが参照されることはないため、この予備消去ブロックの物理ブロック番号に対応する項目の更新は不要である。
【００７９】
なお、本実施例においては、ファイルシステム１の再構築の処理は、消去ブロック１つを消去する場合を示したが、ステップ１５１からの一連の処理を複数回実行することも可能である。
【００８０】
図９Ａ〜図９Ｄは、本実施形態におけるファイルシステム１の初期化に関するフローチャートである。この初期化は、ファイルシステム１の立ち上げ時、つまり電力供給が一旦遮断された後の電力供給再開時に一度実行され、フラッシュメモリ部５内のデータの読み出しを保証するものである。
【００８１】
まず、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、各消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を読み出し、この読み出したブロック情報に基いて、ブロック情報表１０のブロック情報を更新し（ステップ１７１）、残りの消去ブロック５１が存在するかの確認を行い（ステップ１７２）、残りの消去ブロック５１が無くなるまで、ステップ１７１の処理を繰り返す。
【００８２】
次に、ファイルシステム制御部２は、ステップ１７１において更新したブロック情報表１０をアクセスし、ブロック状態「データ転送中」が存在するかの確認を行い（ステップ１７３）、ブロック状態「データ転送中」が存在する場合は、このブロック状態の物理ブロック番号を取得し、この物理ブロック番号に対応するブロック状態を「データ転送中」から「未使用」へ更新する（ステップ１７４）。同時に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、この物理ブロック番号のブロックのデータを消去する。
【００８３】
ここで、図８Ａ〜図８Ｂのステップ１５１〜１５７の途中で電力供給が遮断され、予備消去ブロック５１へのデータ転送が中断した場合は、この予備消去ブロック５１のブロック状態が「データ転送中」として保持される。この後に電力供給が再開されたときには、ステップ１７３、１７４の処理において、データ転送が中断したブロック状態「データ転送中」の予備消去ブロック５１のデータが消去され、この予備消去ブロック５１のブロック状態が「未使用」となる。これによって不完全なデータが予備消去ブロック５１から読み出されることが防止される。
【００８４】
次に、ファイルシステム制御部２は、ステップ１７１において更新したブロック情報表１０をアクセスし、ブロック状態が「元ブロック消去中」であるブロックが存在するかの確認を行い（ステップ１７５）、ブロック状態が「元ブロック消去中」であるブロックが存在する場合は、このブロックの論理ブロック番号と同じ論理ブロック番号であってかつブロック状態が「データ有」である物理ブロック番号を取得する。そして、ファイルシステム制御部２は、ブロック情報表１０をアクセスし、この物理ブロック番号に対応するブロック状態を「未使用」へ更新する。同時に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、この物理ブロック番号のブロックのデータを消去する。
【００８５】
また、ファイルシステム制御部２は、ステップ１７５において取得したブロック状態が「元ブロック消去中」である物理ブロック番号の消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態情報を「元ブロック消去中」から「データ有」へ更新し、ブロック情報表１０における同じ物理ブロック番号に対応するブロック状態を「データ有」へ更新する（ステップ１７６）。
【００８６】
この後、ファイルシステム制御部２は、消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を読み出し、このセクタ情報に基いてファイルシステムメモリ部３内のセクタ情報表１１を更新し（ステップ１７７）、残りのセクタ情報が存在するかの確認を行い（ステップ１７８）、残りのセクタ情報が存在する場合は、ステップ１７７へ戻り、残りのセクタ５２がなくなるまで繰り返し、同様に残りの消去ブロック５１が存在する場合は、ステップ１７７へ戻り、残りの消去ブロック５１がなくなるまで繰り返す。
【００８７】
ここで、図８Ａ〜図８Ｂのステップ１５８〜１６０の途中で電力供給が遮断された場合は、この予備消去ブロック５１のブロック状態が「元ブロック消去中」として保持されており、この予備消去ブロック５１へのデータ転送が終了している。この後に電力供給が再開されると、ステップ１７５〜１７８の処理において、予備消去ブロック５１のデータを保持し、データ転送元の消去ブロック５１のデータを消去している。これによってデータ転送元の消去ブロック５１から不完全なデータが読み出されることが防止される。
【００８８】
次に、ファイルシステム制御部２は、ステップ１７７において更新したセクタ情報表１１をアクセスし、セクタ状態が「データ書き込み中」であるセクタ５２が存在するかの確認を行い（ステップ１７９）、セクタ状態が「データ書き込み中」であるセクタ５２が存在する場合は、ステップ１７９において取得したセクタ状態「データ書き込み中」に対応する物理ブロック番号及び物理セクタ番号を取得する。そして、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、これらの物理ブロック番号及び物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ書き込み中」から「データ無効」へ更新する。同様に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、これらの物理ブロック番号及び物理セクタ番号に対応するセクタ状態を「データ書き込み中」から「データ無効」へ更新する(ステップ１８０）。
【００８９】
次に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、セクタ状態が「データ書き込み完了」であるセクタ５２が存在するかの確認を行い（ステップ１８１）、セクタ状態が「データ書き込み完了」であるセクタ５２が存在する場合は、このセクタ５２の論理セクタ番号と同じ論理セクタ番号を有しかつセクタ状態が「データ有効」のセクタ５２が存在するかの確認を行い（ステップ１８２）、このセクタ５２が存在する場合は、このセクタ５２の物理ブロック番号及び物理セクタ番号を取得する。そして、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、これらの物理ブロック番号及び物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ有効」から「データ無効」へ更新する。同様に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、これらの物理ブロック番号及び物理セクタ番号に対応するセクタ状態を「データ有効」から「データ無効」へ更新する（ステップ１８３）。
【００９０】
次に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、ステップ１８１において取得したセクタ状態が「データ書き込み完了」であるセクタ５２の物理ブロック番号及び物理セクタ番号を取得する。そして、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、これらの物理ブロック及び物理セクタ番号に対応する消去ブロック５１のブロックコントロールセクタ５２ａのセクタ状態を「データ書き込み完了」から「データ有効」へ更新する。同様に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、これらの物理ブロック番号及び物理セクタ番号に対応するセクタ状態を「データ書き込み完了」から「データ有効」へ更新する（ステップ１８４）。
【００９１】
ここで、図７Ａ〜図７ｃのステップ１３９〜１４１の途中で電力供給が遮断され、データの書き込みが中断した場合は、セクタ状態が「データ書き込み中」として保持され、またデータの書き込みが完了した場合は、セクタ状態が「データ書き込み完了」として保持される。この後に電力供給が再開されると、ステップ１７９〜１８４の処理において、データの書き込みが中断したセクタ状態「データ書き込み中」のセクタ５２のデータが消去され、このセクタ５２のセクタ状態が「データ無効」となる。これによってデータの書き込みが中断したセクタ５２から不完全なデータが読み出されることが防止される。また、セクタ状態「データ書き込み完了」のセクタ５２のデータが保持され、このセクタ状態が「データ有効」に更新されるので、このセクタ５２からデータを正しく読み出すことができる。
【００９２】
次に、ファイルシステム制御部２は、セクタ情報表１１をアクセスし、物理ブロック番号毎に、同一物理ブロック番号に対応するセクタ状態「未使用」の数、セクタ状態「データ有効」の数、セクタ状態「データ無効」の数をそれぞれ計数し、これらの計数値に基いてファイルシステムメモリ部３内のセクタ情報表１２の物理ブロック番号、未使用セクタ数、データ有効セクタ数及びデータ無効セクタ数を更新し（ステップ１８５）、残りの物理ブロック番号が存在するかの確認を行い（ステップ１８６）、残りの物理ブロック番号が存在する場合は、ステップ１８５へ戻り、残りの物理ブロック番号がなくなるま繰り返す。
【００９３】
この後、ファイルシステム制御部２は、ステップ１７１、ステップ１７４、ステップ１７５において更新されたブロック情報表１０に基いて、ブロック状態が「未使用」である物理ブロック番号に対応する１つの消去ブロック５１を予備消去ブロック５１として確保する（ステップ１８７）。
【００９４】
この様に本実施形態においては、データの書き込みやファイルシステムの再構築に際し、各消去ブロック５１や各セクタ５２の状態情報をきめ細かく書き換えているため、電力供給が不用意に遮断されも、この後に電力供給が再開されたときには、各消去ブロック５１や各セクタ５２の状態情報に基いて、消去ブロック５１やセクタ５２の不確定なデータを消去して、正しいデータのみを保存することができる。
【００９５】
上記実施形態においては、現在のブロック状態として、（１）「未使用」を表す１１１１１１１１ｂ（ｂは２進数を表わす。以下同様）、（２）「データ転送中」を表す１１１１１１１０ｂ、（３）「元ブロック消去中」を表す１１１１１１００ｂ、（４）「データ有」を表す１１１１１０００ｂ、（５）「ブロックフル」を表す１１１１００００ｂという５種類のブロック状態を例示したが、１と０の組み合わせを複雑にしたり、ビット数を増やしても良く、これによって各状態の違いをより確実に判定することが可能になる。
【００９６】
また、よりきめ細かくブロック状態を管理するため、ブロックの状態数を６つ以上に設定しても良く、これによってよりきめ細かく状態を管理することが可能になる。
【００９７】
また、上記実施形態においては、現在のセクタ状態として、（Ｉ）「未使用」を表す１１１１ｂ、（ＩＩ）「データ書き込み中」を表す１１１０ｂ、（ＩＩＩ）「データ書き込み完了」を表す１１００ｂ、（ＩＶ）「データ有効」を表す１０００ｂ、（Ｖ）「データ無効」を表す００００ｂという５種類のセクタ状態を例示したが、１と０の組み合わせを複雑にしたり、ビット数を増やしても良く、これによって各状態の違いをより確実に判定することが可能になる。
【００９８】
また、よりきめ細かくセクタ状態を管理するため、セクタ５２の状態数を６つ以上に設定しても良く、これによってよりきめ細かく状態を管理することが可能になる。
【００９９】
上記実施形態においては、均等ブロックサイズであるフラッシュメモリを前提として説明したが、ブートブロック構成のフラッシュメモリにおいても、ブートブロック（例えば８Ｋバイトのサイズ）用の任意の１個の消去ブロック（８Ｋバイト）と、それ以外のブロック（例えば６４Ｋバイトのサイズ）用の任意の１個の消去ブロック（６４Ｋバイト）をファイルシステム１の再構築用の予備ブロックとして、予め確保しても良く、これによって均等ブロックあるいはブートブロック構成のフラッシュメモリのうちからシステムの目的に合うフラッシュメモリあるいはより安価なフラッシュメモリを採用することが可能となる。また、ブートブロック（例えば８Ｋバイト）用の予備ブロックとして、８Ｋバイトより大きいサイズのブロック（例えば６４Ｋバイト）を予備ブロックに割り当てることも可能であり、この場合は、予備ブロックのサイズを一定にできるため、管理が簡単になる。
【０１００】
本実施形態のファイルシステム１が複数個のフラッシュメモリを備える場合は、１個のフラッシュメモリ毎に任意の１個の消去ブロックをファイルシステムの再構築用の予備ブロックとして予め確保しておくのではなく、複数個のフラッシュメモリに対し１個の予備ブロックを確保したり、複数個のフラッシュメモリに含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個の予備ブロックを確保しても良く、この場合は、確保する予備ブロックの数を少なくすることができる。
【０１０１】
図９Ｂに示すステップ１７６においては、ファイルシステム制御部２は、ステップ１７５において取得したブロック状態「元ブロック消去中」の消去ブロック５１の論理ブロック番号と同じ論理ブロック番号であって、且つブロック状態が「データ有」である物理ブロック番号を取得する。そして、ファイルシステム制御部２は、ブロック情報表１０をアクセスし、この物理ブロック番号に対応するブロック状態を「未使用」へ更新する。同時に、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、この物理ブロック番号の消去ブロック５１のデータを消去する。また、ファイルシステム制御部２は、ステップ１７５において取得したブロック状態「元ブロック消去中」の物理ブロック番号の消去ブロック５１のブロックコントロールセクク５２ａのブロック状態を「元ブロック消去中」から「データ有」へ更新し、ブロック情報表１０における同じ物理ブロック番号に対応するブロック状態を「データ有」へ更新する。
【０１０２】
ここで、消去ブロック５１についての複数の状態惰報としては、『未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」の５つに加え、「元ブロック消去完了」を設定した場合の例として以下のような処理の流れにすることが可能である。
【０１０３】
図１３は、図９Ａ〜図９Ｄのファイルシステム１の初期化に関するフローチャートの内、本実施形態におけるステップ１７４からステップ１７７の間に相当する部分を抜き出したフローチャートを示す図である。
【０１０４】
まず、ファイルシステム制御部２は、ステップ１７１において更新したブロック情報表１０をアクセスし、ブロック状態「元ブロック消去完了」が存在するかを確認し（ステップ１９１）、ブロック状態「元ブロック消去完了」が存在する場合は、処理はステツプ１９２およびステップ１９３をスキップしてステップ１９４ヘジャンプする。
【０１０５】
次に、ファイルシステム制御部２は、ステップ１７１において更新したブロック情報表１０をアクセスし、ブロック状態「元ブロック消去中」が存在するかを確認し（ステップ１９２）、ブロック状態「元ブロック消去中」が存在する場合は、この消去ブロック５１の論理ブロック番号と同じ論理ブロック番号であって、且つブロック状態が「データ有」である物理ブロック番号を取得し、ファイルシステム制御部２は、フラッシュメモリ制御部４を通じてフラッシュメモリ部５をアクセスし、この物理ブロック番号の消去ブロック５１のデータを消去する。
【０１０６】
この後、ファイルシステム制御部２は、ステツプ１９２において取得したブロック状態が「元ブロック消去中」である物理ブロック番号の消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を「元ブロック消去中」から「元ブロック消去完了」へ更新する。
【０１０７】
また、ファイルシステム制御部２は、ブロック情報表１０をアクセスし、データ消去をした消去ブロック５１の物理ブロック番号に対応するブロック状態を「未使用」へと更新する（ステップ１９３）。
【０１０８】
次に、ブロック状態「元ブロック消去完了」へ更新した物理ブロック番号の消去ブロック５１のブロックコントロールセクタ５２ａのブロック状態を「元ブロック消去完了」から「データ有」へ更新し、ブロック情報表１０におけるこの物理ブロック番号に対応するブロック状態を「元ブロック消去中」から「データ有」へ更新する（ステップ１９４）。
【０１０９】
この様に、ブロック状態「元ブロック消去完了」を追加することにより、比較的処理時間の長いブロック消去処理をスキップすることが可能、すなわち、電力供給の遮断直前のブロック状態が「元ブロック消去中」から「元ブロック消去完了」へ更新された直後であった場合は、電力供給が回復した時の初期化処理時間を短縮することが可能である。
【０１１０】
他の実施形態では、図１２に示すように、消去ブロック５１についての複数の状態情報として、「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」の５つを設定しても良い。
【０１１１】
この場合、再構築用に予め確保されている予備消去ブロック５１の状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック５１内のデータを該予備消去ブロック５１へ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備消去ブロック５１のブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロック５１のデータを消去し、このデータ転送元の消去ブロック５１を新たな予備消去ブロック５１として確保し、この新たな予備消去ブロック５１の状態情報を「データ有」から「未使用」へ更新する手段と、データ転送先の該予備消去ブロック５１の状態情報を「元ブロック消去中」から「元ブロックフォーマット中」へ更新し、データ転送元の新たな予備消去ブロック５１へ新たな予備消去ブロック５１の消去可能回数などを書き込む（フォーマットする）手段と、フォーマット完了後、データ転送先の該予備消去ブロック５１の状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを合む構成が考えられる。
【０１１２】
この様に、消去ブロック５１の状態情報として「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という５つの状態を利用した場合、消去ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１１３】
他の実施形態における電力回復時のファイルシステム１の初期化においてブロック状態「元ブロック消去中」の消去ブロック５１が検出された場合は、データ転送元の消去ブロック５１のデータを消去する。または、更に既存データの正確性を期すために、該初期化において「元ブロック消去中」だけでなく「元ブロックフォーマット中」の消去ブロック５１が検出された場合もデータ転送元の消去ブロック５１のデータを消去する方法が考えられる。
【０１１４】
また、消去ブロック５１の状態情報として「ブロックフル」という状態を設定する前記実施形態と異なり、ブロック状態「ブロックフル」を設定しない方法は、消去ブロックが不均等なサイズのセクタに分割されて使用される場合に特に有効である。なぜならば、不均等なサイズのデータを同一の消去ブロック内の連続したセクタに書き込む場合において、次に書き込むべきデータのサイズが不明である場合に、消去ブロックの状態情報が「ブロックフル」となるかどうかの判断が難しいためである。
【０１１５】
また、各消去ブロック５１のブロック消去回数を平均化するために、各消去ブロック５１内に該消去ブロックの消去可能回数を記憶する方法がある。
【０１１６】
図８Ａおよび図８Ｂに示す他の実施形態としては、ファイルシステム１の再構築時において、ファイルシステム制御部２は、データの転送元となる消去ブロックとして予備消去ブロック５１を除いた各消去ブロック５１の消去可能回数を比較し、該回数の最大値と最小値の差が一定値を越えた場合には、該回数が最大の消去ブロック５１を選択し、差が一定値を越えていない場合は、消去ブロック５１内のセクタ情報表１２をアクセスし、データ無効セクタ数が最大の消去ブロック５１を選択する。
【０１１７】
この場合、各消去ブロック５１の消去可能回数のバラツキを一定の回数内に抑え、フラッシュメモリとしての書き替え回数を増やすことが可能になる。
【０１１８】
また、消去ブロック５１の消去可能回数は、０から1つずつ増加させ、消去可能回数の仕様値の最大値までインクリメントする方法（この場合は消去可能回数でなく消去回数を表す）と、これとは逆に消去可能回数の仕様値の最大値から１つずつ減少させ、０までデクリメントする方法が考えられるが、後者の方法においては、消去可能回数が０になった時点で該消去ブロック５１の寿命が来たと判定できるため、消去可能回数の判定アルゴリズムを簡単にできる。
【０１１９】
他の実施形態における消去ブロック５１のフォーマット手段では、フォーマットした日時を記憶することも可能であり、この場合、一定時間経過後に消去ブロック５１内のデータのリフレッシュ動作を行うことが可能になる。
【０１２０】
【発明の効果】
本発明のファイルシステムは、複数のセクタをそれぞれ含む複数の消去ブロックを有する不揮発性半導体記憶装置を用いたファイルシステムにおいて、該各消去ブロック毎に、消去ブロックについての複数の状態情報のいずれかを格納すると共に、該各セクタ毎に、セクタについての複数の状態情報のいずれかを格納する記憶手段と、該不揮発性半導体記憶装置のアクセス時に、該記憶手段内の該各消去ブロックの状態情報及び該各セクタの状態情報に基いて、該不揮発性半導体記憶装置に既に格納されているデータを保証する保証手段とを具備する。
【０１２１】
本発明によれば、ブロックについての複数の状態情報及びセクタについての複数の状態情報を記憶手段に格納している。このため、ファイルシステムが稼働中において、意図しない電力供給の遮断が生じても、電力供給が回復したときには、起動時の初期化処理に際し、ブロックについての複数の状態情報及びセクタについての複数の状態情報に基いて、ブロック及びセクタの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１２２】
一実施形態では、前記記憶手段は、データの更新に制約の無いＲＡＭ上に設けられ、前記保証手段は、前記不揮発性半導体記憶装置へのアクセス時に、該ＲＡＭ上の前記各消去ブロックの状態情報及び前記各セクタの状態情報を参照する。
【０１２３】
この様にＲＡＭを利用すると、データの更新に制約がなくなり処理速度が早くなる。
【０１２４】
一実施形態では、前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」という少なくとも５つの状態を設定しており、前記保証手段は、再構築用に予め確保されている予備ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備ブロックへ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備ブロックのブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロックのデータを消去し、このデータ転送元の消去ブロックを新たな予備ブロックとして確保し、この新たな予備ブロックの状態情報を「データ有」あるいは「ブロックフル」から「未使用」へ更新する手段と、データ転送先の該予備ブロックの状態情報を「元ブロック消去中」から「データ有」へ更新する手段とを含む。
【０１２５】
この様に消去ブロックの状態情報として「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」という５つの状態を利用した場合、ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１２６】
一実施形態では、再構築用に予め確保されている予備ブロックは、１個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有する。
【０１２７】
この場合、均等ブロックあるいはブートブロック構成のフラッシュメモリのうちからシステムの目的に合わせた、あるいはより安価なフラッシュメモリを採用することが可能となる利点がある。
【０１２８】
一実施形態では、再構築用に予め確保されている予備ブロックは、複数個の不揮発性半導体記憶装置に含まれるブロックサイズが異なる各消去ブロック毎に、少なくとも１個以上有する。
【０１２９】
この場合、ファイルシステムが必要とする予備ブロックの数を少なくできる利点がある。このため、ファイルシステムが安価に構成できる利点もある。
【０１３０】
一実施形態では、再構築用に予め確保されている予備ブロックは、消去ブロックのサイズ以上のサイズを有する。
【０１３１】
この場合は、ブートブロック（例えば８Ｋバイトのサイズ）用の予備ブロックとして、８Ｋバイトより大きいサイズのブロック（例えば６４Ｋバイトのサイズ）を予備ブロックに割り当て、予備ブロックのサイズを一定にできるため、管理が簡単になる。
【０１３２】
本発明のファイルシステムは、複数のセクタを有する不揮発性半導体記憶装置を用いたファイルシステムにおいて、該各セクタ毎に、セクタについての複数の状態情報のいずれかを格納する記憶手段と、該不揮発性半導体記憶装置のアクセス時に、該記憶手段内の該各セクタの状態情報に基いて、該不揮発性半導体記憶装置に既に格納されているデータを保証する保証手段とを具備し、前記セクタについての複数の状態情報として、「未使用」、「データ書き込み中」、「データ書き込み完了」、「データ有効」、「データ無効」という少なくとも５つの状態を設定しており、前記保証手段は、データが書き込まれるセクタの状態情報を「未使用」から「データ書き込み中」へ更新する手段と、該セクタへのデータの書き込みが完了した後、該セクタの状態情報を「データ書き込み中」から「データ書き込み完了」へ更新する手段と、該セクタにデータを新規に書き込んだ場合は、該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新し、該セクタに既存のデータの更新データを書き込んだ場合は、該既存のデータが書き込まれている他のセクタの状態情報を「データ有効」から「データ無効」に更新後、該更新データが書き込まれている該セクタの状態情報を「データ書き込み完了」から「データ有効」へ更新する。
【０１３３】
本発明によれば、セクタについての５つの状態情報を記憶手段に格納している。このため、ファイルシステムが稼働中において、意図しない電力供給の遮断が生じても、電力供給が回復したときには、起動時の初期化処理に際し、セクタについての複数の状態情報に基いて、セクタの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１３４】
一実施形態では、前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」、「元ブロック消去完了」という少なくとも６つの状態を設定しており、前記保証手段は、再構築用に予め確保されている予備消去ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備消去ブロックヘ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備消去ブロックのブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロックのデータを消去し、該予備消去ブロックのブロック状態情報を「元ブロック消去中」から「元ブロック消去完了」へ更新する手段と、データ転送元の消去ブロックを新たな予備消去ブロックとして確保し、この新たな予備消去ブロックの状態情報を「データ有」あるいは「ブロックフル」から「未使用」へと更新する手段と、データ転送先の該予備消去ブロックの状態情報を「元ブロック消去完了」から「データ有」へ変更する手段とを含む。
【０１３５】
この様に、消去ブロックの状態情報として「未使用」、「データ有」、「ブロックフル」、「データ転送中」、「元ブロック消去中」、「元ブロック消去完了」という６つの状態を利用した場合、前記５つの状態を利用した場合よりも更に消去ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また、既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１３６】
一実施形態では、前記消去ブロックについての複数の状態情報として、「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という少なくとも５つの状態を設定しており、前記保証手段は、再構築に予め確保されている予備消去ブロックの状態情報を「未使用」から「データ転送中」へ更新する手段と、データ転送元の消去ブロック内のデータを該予備消去ブロックへ転送して記憶させる手段と、該データの転送並びに記憶の完了後、該予備消去ブロックのブロック状態情報を「データ転送中」から「元ブロック消去中」へ更新し、該データ転送元の消去ブロックのデータを消去し、このデータ転送元の消去ブロックを新たな予備消去ブロックとして確保し、この新たな予備消去ブロックの状態情報を「データ有」から「未使用」へ更新する手段と、データ転送先の該予備消去ブロックの状態情報を「元ブロック消去中」から「元ブロックフォーマット中」へ更新し、データ転送元の新たな予備消去ブロックへ新たな予備消去ブロックの消去可能回数などを書き込む（フォーマットする）手段と、フォーマット完了後、データ転送先の該予備消去法ブロックの状態情報を「元ブロックフォーマット中」から「データ有」へ更新する手段とを含む。
【０１３７】
この様に、消去ブロックの状態情報として「未使用」、「データ有」、「データ転送中」、「元ブロック消去中」、「元ブロックフォーマット中」という５つの状態を利用した場合、消去ブロックの状態を正確に把握してきめ細かにフラッシュメモリを管理することができ、フラッシュメモリに格納されている既存のデータを破壊することなく、また既存のデータに矛盾を生じさせることなく、電力供給の遮断直前に実行中であった前段階ヘファイルシステムを自動的に回復させることが可能となる。
【０１３８】
この場合、消去ブロックの状態情報として「ブロックフル」という状態を設定する前記実施形態と異なり、ブロック状態「ブロックフル」を設定しない方法は、消去ブロックが不均等なサイズのセクタに分割されて使用される場合に特に有効である。なぜならば、不均等なサイズのデータを同一の消去ブロック内の連続したセクタに書き込む場合において、次に書き込むべきデータのサイズが不明である場合に、消去ブロックの状態情報が「ブロックフル」となるかどうかの判断が難しいためである。
【０１３９】
一実施形態では、各消去ブロックのブロック消去回数を平均化するために、各消去ブロック内に該消去ブロックの消去可能回数を記憶する。この消去可能回数をファイルシステムの再構築時において利用することにより、各消去ブロックの消去可能回数のバラツキを一定の回数内に抑え、フラッシュメモリとしての総書き替え回数を向上させることが可能になる。
【０１４０】
また、消去ブロックの消去可能回数は、０から１つずつ増加させ、消去可能回数の仕様値の最大値までインクリメントする方法（この場合は消去可能回数でなく消去回数を表す）と、これとは逆に消去可能回数の仕様値の最大値から１つずつ減少させ、０までデクリメントする方法が考えられるが、後者の方法においては、消去可能回数が０になった時点で該消去ブロックの寿命が来たと判定できるため、消去可能回数の判定アルゴリズムを簡単にできる。
【０１４１】
一実施形態における消去ブロックのフォーマット手段では、フォーマットした日時を記憶することも可能であり、この場合、一定時間経過後に消去ブロック内のデータのリフレッシュ動作を行うことが可能になる。
【図面の簡単な説明】
【図１】本発明のファイルシステムの一実施形態を示すブロック図である。
【図２】図１のファイルシステムのフラッシュメモリ部に格納されているデータの構成図である。
【図３】図１のファイルシステムにおけるファイルシステムメモリ部に格納されている各消去ブロックに関するデータの構成図である。
【図４】図１のファイルシステムにおけるファイルシステムメモリ部に格納されている各セクタに関するデータの構成図である。
【図５】図１のファイルシステムにおけるファイルシステムメモリ部に格納されている各消去ブロック毎に、各セクタの数をそれぞれのセクタ状態に応じて整理したデータの構成図である。
【図６】図１のファイルシステムにおけるデータの読み出し処理に関するフローチャートである。
【図７Ａ】図１のファイルシステムにおけるデータを書き込む処理に関するフローチャートである。
【図７Ｂ】図１のファイルシステムにおけるデータを書き込む処理に関する図７Ａに続くフローチャートである。
【図７Ｃ】図１のファイルシステムにおけるデータを書き込む処理に関する図７Ｂに続くフローチャートである。
【図８Ａ】図１のファイルシステムの再構築処理に関するフローチャートである。
【図８Ｂ】図１のファイルシステムの再構築処理に関する図８Ａに続くフローチャートである。
【図９Ａ】図１のファイルシステムの初期化に関するフローチャートである。
【図９Ｂ】図１のファイルシステムの初期化に関する図９Ａに続くフローチャートである。
【図９Ｃ】図１のファイルシステムの初期化に関する図９Ｂに続くフローチャートである。
【図９Ｄ】図１のファイルシステムの初期化に関する図９Ｃに続くフローチャートである。
【図１０】従来の技術におけるフラッシュメモリに格納されたデータの更新処理に関するフローチャートである。
【図１１】従来の技術におけるファイルシステムの再構築処理に関するフローチャートである。
【図１２】図１のファイルシステムにおけるフラッシュメモリ部に格納されているデータの構成図の内、ブロック状態情報のブロック状態を表す他の実施形態を示す図である。
【図１３】図１のファイルシステムの初期化に関する図９Ａ〜図９Ｄの内、状態情報として「元ブロック消去完了」を設定した第１の実施形態に関わる部分のフローチャートを示す図である。
【符号の説明】
１  ファイルシステム
２  ファイルシステム制御部
３  ファイルシステムメモリ部
４  フラッシュメモリ制御部
５  フラッシュメモリ部
６  アプリケーション、ＯＳ（オペレーティングシステム）
５１  消去ブロック、予備消去ブロック
５２  セクタ
５２ａ  ブロックコントロールセクタ
【図１】
0003797649.tif 000002
【図２】
0003797649.tif 000003
【図３】
0003797649.tif 000004
【図４】
0003797649.tif 000005
【図５】
0003797649.tif 000006
【図６】
0003797649.tif 000007
【図７Ａ】
0003797649.tif 000008
【図７Ｂ】
0003797649.tif 000009
【図７Ｃ】
0003797649.tif 000010
【図８Ａ】
0003797649.tif 000011
【図８Ｂ】
0003797649.tif 000012
【図９Ａ】
0003797649.tif 000013
【図９Ｂ】
0003797649.tif 000014
【図９Ｃ】
0003797649.tif 000015
【図９Ｄ】
0003797649.tif 000016
【図１０】
0003797649.tif 000017
【図１１】
0003797649.tif 000018
【図１２】
0003797649.tif 000019
【図１３】
0003797649.tif 000020