(57)【要約】      （修正有）【課題】電源断してもファイルを再構成できるようにする。【解決手段】ステップＳ１０１において、書き込み処理を開始する。ステップＳ１０８においてブロック情報とデータをブロックへ書き込み、ステップＳ１０９において、書き込みデータが残っているか否かを判定する。次いで、ステップＳ１１０において、書き込み完了フラグを先頭ブロックに書き込み、ステップＳ１１１においてファイルＩＤを更新し、ステップＳ１１２において、ファイル構成情報に新ファイルを追加する。ステップＳ１１３において、旧ファイルが存在するか否かを判定し、存在すれば（ＹＥＳ）ステップＳ１１４に進み旧ファイル構成ブロックを再利用リストに追加し、ステップＳ１１５においてファイル構成情報から旧ファイルを削除し、書き込みを終了する（ステップＳ１１６）。旧ファイルが存在しない場合には、そのまま処理を終了する（ステップＳ１１６）。【選択図】図２４
2008262574.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュメモリと、ＲＡＭと、を含み、ファイルがフラッシュメモリの領域のどこを使用しているかというファイル構成情報を、フラッシュメモリの特定の領域に記憶するのではなく、ファイルシステムの初期化処理時にＲＡＭ上に再構成するファイルシステムであって、メモリ領域がブロックから構成されており、該メモリ領域に書き込まれたデータの消去をブロック単位で行い、該ブロックが複数のページから構成されており、前記メモリ領域へのデータの書き込みをページ単位で行うメモリ上のファイルシステムにおいて、
ファイル書き込みを完了する際に、ファイル内のいずれかのブロックに書き込み完了を示す書き込み完了フラグを書き込む完了フラグ書き込み手段を有し、
前記書き込み完了フラグの書き込みをもって、書き込みが完了したファイルのファイル構成情報にファイルを追加することで当該ファイルを有効化し、前記書き込みが完了したファイルと同名の旧ファイルがある場合には、前記旧ファイルのファイル構成情報からファイルを削除することで当該旧ファイルを無効化し、前記旧ファイルを構成するブロックを消去可能なブロックのリストにつなぐことを特徴とするファイルシステム。
【請求項２】
前記書き込み完了フラグを、ファイル内の先頭ブロックに書き込むことを特徴とする請求項１に記載のファイルシステム。
【請求項３】
前記書き込み完了フラグを、ブロックの最終ページに書き込むことを特徴とする請求項１又は２に記載のファイルシステム。
【請求項４】
請求項１から３までのいずれか１項に記載のファイルシステムを備えることを特徴とする電子機器。
【請求項５】
フラッシュメモリと、ＲＡＭと、を含み、ファイルがフラッシュメモリの領域のどこを使用しているかというファイル構成情報を、フラッシュメモリの特定の領域に記憶するのではなく、ファイルシステムの初期化処理時にＲＡＭ上に再構成するファイルシステムであって、メモリ領域がブロックから構成されており、該メモリ領域に書き込まれたデータの消去をブロック単位で行い、該ブロックが複数のページから構成されており、前記メモリ領域へのデータの書き込みをページ単位で行うメモリ上のファイルシステムにおいてファイルを更新するファイル更新方法において、
ファイル書き込みを完了する際に、ファイル内のいずれかのブロックに書き込み完了を示す書き込み完了フラグを書き込むステップと、
前記書き込み完了フラグの書き込みをもって、書き込みが完了したファイルのファイル構成情報にファイルを追加することでファイルを有効化するステップと、
書き込みが完了したファイルと同名の旧ファイルがある場合には、前記旧ファイルのファイル構成情報からファイルを削除することで当該旧ファイルを無効化し、前記旧ファイルを構成するブロックを消去可能なブロックのリストにつなぐステップと、
を有することを特徴とするファイル更新方法。
【請求項６】
メモリ領域がブロックから構成されており、該メモリ領域に書き込まれたデータの消去をブロック単位で行い、該ブロックが複数のページから構成されており、前記メモリ領域へのデータの書き込みをページ単位で行うメモリ上のファイルシステムであって、
ファイル書き込みを完了する際に、ファイル内のいずれかのブロックに書き込み完了を示す書き込み完了フラグを書き込む完了フラグ書き込み手段を有し、
前記書き込み完了フラグの書き込みをもって、書き込みが完了したファイルを別のメモリ上に存在するファイル構成情報に追加して前記ファイルを有効化し、
前記書き込みが完了したファイルと同名の旧ファイルがある場合には、前記旧ファイルを前記ファイル構成情報から取り出して当該旧ファイルを無効化し、前記旧ファイルを構成するブロックを消去可能なブロックのリストにつなぎ、
ファイル構成情報の再構築の際に、
少なくとも、書き込み完了フラグの書き込まれていないファイルに関しては、前記ファイル構成情報に追加せず当該ファイルを無効化し、前記ファイルを構成するブロックを消去可能なブロックのリストの最後につなぐこと、を特徴とするファイルシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルシステムの技術に関し、特に、ＮＡＮＤ型フラッシュメモリのファイルシステムの技術に関する。
【背景技術】
【０００２】
近年、情報機器の発達により、その情報記録媒体として、フラッシュメモリが注目されている。その理由として、小型化が可能になること、駆動装置が不要なため信頼性が増すことなどがあげられる。特に、大容量化が容易なＮＡＮＤ型フラッシュメモリが、情報記録媒体として急速に広がりつつある。ＮＡＮＤ型フラッシュメモリは、フラッシュメモリの一種であり、高速な消去と書き込みができることが特徴である。
【０００３】
一般に、フラッシュメモリへ書き込みを行うには、書き込みに先立って消去を行っておく必要がある。ＮＡＮＤ型フラッシュメモリは、複数のブロックから構成され、ブロックは複数のページから構成される。消去はブロック単位で行われ、書き込みはページ単位で行われる。また、ページはデータを格納する部分と、エラー訂正符号などの冗長データを格納する部分に分けて使用されるのが一般的である。
【０００４】
図２２は、磁気記憶装置のファイルシステムのイメージを示す図である。磁気記憶装置では、物理的な読み書きはセクタ単位である。また、論理的な読み書き単位はクラスタ単位（セクタを複数まとめたものをクラスタとする）である。
【０００５】
クラスタは、システム領域とデータ領域とにわけられ、ファイルはデータ領域に割り当てられた複数のクラスタに分割されて保存される。ファイルに割り当てられたクラスタの情報やファイル自身の情報（ファイル構成情報）はシステム領域に保存される。そのため、ファイルの更新が行われると、この領域も書き換えられる。どのクラスタが使用中で、どのクラスタが空いているかという情報も、システム領域に保存される。そのため、ファイルの更新が行われると、この領域も書き換えられる。
【０００６】
しかしながら、フラッシュメモリはその電気的特性上、データの消去と書き込みに回数制限があり、書き込み回数に実質制限がない磁気記憶装置に対するファイルシステムの手法をそのまま適用することはできない。なぜなら、書き込み回数に制限がない手法では、たとえば、ＦＡＴ（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）に代表されるようなファイル構成情報が、記憶装置のある特定の場所に格納されており、ファイルの書き込み等により構成情報が変更されると、この場所の内容もそれにしたがって更新されるようになっている。すなわち、ファイルの書き込みを行うと、実際にファイルを書き込んだ場所だけでなく、ファイル構成情報も書き換えられる。
【０００７】
図２３は、フラッシュメモリのファイルシステムのイメージを示す図である。フラッシュメモリでは、物理的な消去はブロック単位、書き込みはページ単位である。論理的な読み書き単位はブロック単位（ブロックは複数のページから構成されている）であり、ブロックはすべてデータ領域として使用する。ファイルは複数のブロックに分割されて保存される。このとき、ブロックの先頭にヘッダ情報を付加して保存する。ファイルに割り当てられたブロックの情報やファイル自身の情報（ファイル構成情報）はフラッシュメモリには保存されないようになっている。すなわち、ブロックのヘッダ情報を解析することでファイルシステムの初期化時に再構成可能であり、その情報自体は利用する電子機器のＲＡＭなど別のメモリに記憶しておくことになる。また、どのブロックが使用中で、どのブロックが空いている（再利用可能なブロックか）というブロック利用情報も、フラッシュメモリには保存されない。その代わりに、ブロックのヘッダ情報を解析することでファイルシステムの初期化時に検出可能であり、その情報自体はＲＡＭに記憶しておくことになる。
【０００８】
なぜなら、磁気記憶装置と同様のファイルシステムの手法をフラッシュメモリに適用すると、特定のブロックだけ頻繁に書き換えがおこるため、そのブロックはすぐに書き込み回数の制限を越えて使用不能となり、結果として、フラッシュメモリ全体が利用できなくなるからである。
【０００９】
このような問題を回避するために、Ｌｉｎｕｘ  ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）ではｊｆｆｓ２（Ｊｏｕｒｎａｌｉｎｇ  ＦｌａｓｈＦｉｌｅ  Ｓｙｓｔｅｍ  ｖｅｒｓｉｏｎ  ２）と呼ばれるファイルシステムが米レッドハット社により開発されている。これは、データの書き込みが、特定のブロックにかたよらないようにすることで、フラッシュメモリの書き込み回数の制限を領域全体に分散化させ、フラッシュメモリ全体の長寿命化を図ることを目的としている。
【００１０】
【非特許文献１】ｈｔｔｐ：／／ｓｏｕｒｃｅｓ．ｒｅｄｈａｔ．ｃｏｍ／ｊｆｆｓ２／
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかしながら、ファイルの書き込み時に装置の電源断があると、書き込み途中の不完全なファイルが復旧できるに過ぎない。このようなファイルはデータが不足しているため、アプリケーションからは利用できないことが多い。また、ファイルの上書き更新中に装置の電源断があった場合は、ファイルが復旧できたとしても、どこまで更新されたのかはわからないため、このようなファイルも、アプリケーションからは利用できない。復旧されたファイルの正当性を判断するには、アプリケーション側でファイルの内容をチェックするしかなく、無駄な処理が増えてしまうとともに、ファイルが正しくないと判断した場合は、ファイルを消去せざるを得ない。これは、家電製品のように、使用中に突発的に装置の電源断が発生するような場合には、不向きである。
【００１２】
本発明の目的は、ファイル書き込み中に装置の電源断があっても、ファイルの不整合やファイルの消失を防止できるファイルシステムを提供することである。
【課題を解決するための手段】
【００１３】
本発明の一観点によれば、メモリ領域が複数のブロックに分割されており、メモリ領域に書き込まれたデータの消去をブロック単位で行い、ブロックが複数のページに分割されており、メモリ領域へのデータの書き込みをページ単位で行うフラッシュメモリのファイルシステムであって、ファイル書き込み完了時にファイル内のいずれかのブロックに書き込み完了を示す書き込み完了フラグを書き込む完了フラグ書き込み手段と、前記書き込む完了フラグを読み出す完了フラグ読み出し手段と、を有することを特徴とするファイルシステムが提供される。上記書き込み完了フラグを読み込むことにより、ファイル書き込みの際における電源断による不完全ファイルを簡単に検出することができる。書き込み完了フラグをファイル内の先頭ブロックに書き込むことが好ましい。  前記書き込み完了フラグを、ブロックの最終ページに書き込むことも可能である。
【００１４】
さらに、ブロックに対して、少なくとも、ファイルに付与されるファイルシステムで一意のファイルＩＤと、ファイル内のブロックの接続の順番を示すブロック番号と、を含むブロック情報を付加するブロック情報付加手段と、前記ブロック情報に基づいてファイル構成を表すファイル構成情報を再構築するファイル構成情報再構築手段とを有するようにしても良い。
【００１５】
本発明の他の観点によれば、メモリ領域が複数のブロックに分割されており、メモリ領域に書き込まれたデータの消去をブロック単位で行い、ブロックが複数のページに分割されており、メモリ領域へのデータの書き込みをページ単位で行うフラッシュメモリのファイルシステムであって、ファイルの書き込み完了時に同名の古いファイルを無効化するファイル更新手段を有することを特徴とするファイルシステムが提供される。
【００１６】
本発明の別の観点によれば、上記のファイルシステムを用いたファイル書き込み方法であって、ファイル全体の書き込みが完了すると、ファイル内のいずれかのブロックに書き込み完了フラグを書き込むステップを有することを特徴とするファイル書き込み方法が提供される。
【００１７】
また、更新対象のファイルと同名のファイルを生成するステップと、該更新対象のファイルと同名のファイルを更新するステップと、更新終了後に前記更新対象のファイルを無効化するステップと、を有することを特徴とするファイル更新方法が提供される。
【発明の効果】
【００１８】
本発明によれば、ファイル書き込み中の装置の電源断があっても、ファイルの不整合やファイルの消失を防止できるファイルシステムを提供できる。
【発明を実施するための最良の形態】
【００１９】
以下に、本発明の実施の形態によるフラッシュメモリのファイルシステムについて図面を参照しながら説明を行う。図１は、本発明の第１の実施の形態によるファイルシステムを適用可能な機器の一例として示す電子機器の一構成例を示す機能ブロック図である。図１に示すように、本実施の形態による電子機器Ａは、全体を制御する制御装置（ＣＰＵ）１と、機器を制御するためのプログラムやデータファイルなどを格納する不揮発性のフラッシュメモリ３と、ＲＡＭなどの揮発性のメモリ５と、データの入出力が行われるデータ入出力手段１５と、ユーザが入力を行う入力手段７と、入力されたデータが処理されて出力されるその出力に基づく情報を表示する表示手段１１と、を有している。
【００２０】
上記電子機器におけるファイルシステムでは、ファイルがフラッシュメモリの領域のどこを使用しているかというファイル構成情報を、フラッシュメモリの特定の領域に記憶するのではなく、マウント処理（ファイルシステムの初期化処理）時にファイル構成情報をメモリ５上に再構成するようにするものであり、これをＮＡＮＤ型フラッシュメモリに適用する場合の実施例について以下に詳細に説明する。図２は、ＮＡＮＤ型フラッシュメモリの領域構成例を示す図である。図２に示すように、ファイルＸは、一つ以上のブロックＹからなり、ブロックＹは、ページＺから構成されている。このように、ＮＡＮＤ型フラッシュメモリは、複数のブロックからなり、また、ブロックは複数のページからなる。図３は、ブロック情報のバリエーションを示す図である。例えば、ファイルＸがブロックＡ、Ｂ、Ｃ（Ｙ）から構成されるとして、データ２３に付加されるブロック情報２５・２７・３１・３３は、図３（Ａ）のように各ブロックＡ、Ｂ、Ｃで同じものを保持しておいても、図３（Ｂ）に示すようにブロックによって異なるものを保持しておいてもよい。図３（Ｂ）の場合では、ファイルを構成する先頭ブロック（ブロックＡ’：矢印の一番元に存在するブロック、矢印はアクセス順を示す）にのみ、ファイル名とファイルサイズとからなるブロック情報２１を持つようになっている。
【００２１】
データの書き込みの際には、それに先立ち消去を行う必要がある。消去はブロック単位で行われ、書き込みはページ単位で行われる。また、ページは、通常のデータを書き込むデータ領域と、冗長データを書き込むＯＯＢ（Ｏｕｔ  Ｏｆ  Ｂａｎｄ）領域にわけられるのが一般的である。ＯＯＢ領域には、データ領域に書かれたデータの誤りを訂正する誤り訂正符号を格納する領域と、そのブロックがバッドブロックであるかどうかを示す領域などを有している。
【００２２】
これは、ＮＡＮＤ型フラッシュメモリの特性上、書き込み時に誤ったデータを書いてしまうことがあり、このままでは、次にそれを読み出した場合、誤ったデータが読み出されてしまうため、その誤りを訂正するための訂正符号を格納する領域が備わっているためである。訂正符号だけでは訂正しきれない程度の誤りが発生する場合には、それが発生するページを含むブロックをバッドブロックとして扱う。バッドブロックは、その先頭ページのＯＯＢ領域でバッドブロックであることが記されている。バッドブロックは、製造工程によって最初からバッドブロックになっているものと、消去と書き込みを繰り返すことで劣化が進み、後天的にバッドブロックになるものがある。
【００２３】
以下に、本明細書において使用される用語についての定義を示す。
１）フリーブロック：消去済みのブロック。この状態でデータの書き込みが行えるブロックである。
２）妥当ブロック：本ファイルシステムにより書き込まれたデータを保持しているブロック。ファイルを構成するブロックと成りえる。
【００２４】
３）無効ブロック：フリーブロックでも妥当ブロックでもないブロック。消去が必要なブロックである。ブロックへの書き込み中に電源断されたか、もしくは、本ファイルシステムにおいて、消去が必要と判断して明示的に無効ブロックとしたかのいずれかである。
４）バッドブロック：物理的に使用不可能なブロックである。出荷時から存在する初期バッドブロックと、書き込みを繰り返しているうちに発生する後天的なバッドブロックがある。いずれも、ＯＯＢのある部分にその情報がマークされており、正常なブロックとの判別は可能である。なお、上記３つのブロックは正常なブロックに関してのことである。
【００２５】
５）フリーブロックリスト：フリーブロックを格納しているリストであり、ＲＡＭ上に存在するリストである。
６）チェックブロックリスト：妥当ブロックを格納しているリストであり、ＲＡＭ上に存在するリストである。
【００２６】
７）イレースブロックリスト：無効ブロック、および、妥当ブロックの中でも消去可能なブロックを格納しているリストであり、ＲＡＭ上に存在するリストである。
８）バッドブロックリスト：バッドブロックを格納しているリストであり、ＲＡＭ上に存在するリストである。
【００２７】
９）妥当ファイル／妥当ファイル候補：必要十分な妥当ブロックから構成され、本ファイルシステムのデータ構造に従ったファイルと判断されるファイルである。同名のファイルも存在する。妥当ファイル候補は、ブロックは揃っているが一部データが不足している可能性があるファイルである。妥当ファイルは妥当ファイル候補のサブセットとなる。
１０）不完全ファイル：本ファイルシステムのデータ構造に従っていない異常なファイルと判断されるファイルである。構成ブロックが不足しているファイル、必要なデータが書き込まれていないファイルなどが該当する。
【００２８】
１１）有効ファイル：妥当ファイルの一つであり、妥当ファイルの中に同名のファイルが存在する場合、最後に正常に書き込まれたファイルを指す。同名のファイルが存在しない場合は、そのファイル自身である。ただし、「消去を示すファイル」ではないものとする。
１２）無効ファイル：妥当ファイルのうちでも、有効ファイルではないファイルである。これより新しい同名のファイルが存在しているか、もしくは「消去を示すファイル」である。
【００２９】
１３）ファイルＩＤ：ファイルの書き込み時にファイルに付与される、本ファイルシステム内でユニークなＩＤである。再利用されない。例えば、次に付与するファイルＩＤ = 過去に付与した最大ファイルＩＤ + 1などとする。
１４）ブロックＩＤ：ブロックを識別するための通し番号。
１５）ブロック番号：ファイル内のブロックの通し番号。
【００３０】
次に、マウント処理について図面を参照しながら説明する。
本実施の形態によるファイルシステムは、ファイル構成情報を特定のブロックに記録せず、各ブロックに対して、ブロック情報付加手段によりブロック情報を付加し、このブロック情報を記録しておくことで、マウント時にブロック情報からファイル構成情報再構築手段によりファイル構成情報を構築することを特徴とする。すなわち、マウント処理において、すべての有効なブロックのブロック情報を読み込み、同一のファイルＩＤを持つブロックを集める。そして、正しくファイルが再構成できるブロックから、ファイル構成情報を生成する。
【００３１】
尚、ブロック情報付加手段は、ブロックへの書き込みデータの生成時に、該当するブロックに対してブロックに関する情報を付加する手段であり、一般的にはプログラムにより制御装置が行うのが一般的だが、専用のハードウエアにより付加するようにしても良い。図３に示すブロックの構成例では、既にブロック情報が付加された後の状態が示されている。
【００３２】
ファイル構成情報再構築手段は、マウント時に、上記ブロック情報に基づいてファイル構成情報を再構成する手段であり、一般的にはプログラムにより制御装置が行うことになるが、専用のハードウエアにより再構成するようにしても良い。図７に示すフローチャートでは、ブロックを取り出してから再構成が終了するまでのプログラムが示されている。この処理がファイル再構成手段による処理に相当する。
【００３３】
ファイルＩＤは、ファイルＩＤ付与手段により、付与される。ファイルＩＤ付与手段は、ファイル書き込み時に、ファイルを識別するためのシステム内でユニークなファイルＩＤを付与する手段である。なお、ファイルＩＤは、ブロック情報付加手段により、ブロック情報の一つとして、ブロックに書き込まれる。
【００３４】
マウントの第一段階では、領域内の全てのブロックをスキャンし、フリーブロック、妥当ブロック、無効ブロック、バッドブロックを判断して、それぞれのリストにブロックをつなぐ。
【００３５】
より具体的には、各ブロックの先頭ページのＯＯＢ領域にバッドブロックであることが記録されているか、記録されていない場合、ブロックに所定のマジックナンバーが書き込まれているかどうかで判断する。マジックナンバーが書き込まれるのはデータ領域でもＯＯＢ領域でもどちらでもよいが、ブロックがバッドブロックであるかどうかを判断するためにはＯＯＢ領域を読み込む必要があるため、マジックナンバーもＯＯＢ領域に書き込んでおけば同時に判断でき処理が簡単になる。したがって、各ブロックの先頭ページと最終使用ページのＯＯＢ領域にマジックナンバーが書かれているかどうかで判断する。ブロックチェック手段は、ブロックの有効性を判断するために、このような判断を行う手段であり、一般的にはプログラムにより制御装置が行うことになるが、専用のハードウエアによってチェックするようにしてもよい。このような判断を行えるようにするために、ブロックへのデータの書き込みを行う際に、マジックナンバー付加手段により、マジックナンバーとそのブロックの使用ページ数がＯＯＢ領域に書き込まれる。マジックナンバー付加手段は、一般的にはプログラムにより制御装置が行うことになるが、専用のハードウエアにより付加するようにしてもよい。また、消去済みのブロックは、通常、ビットが全て１となる（マジックナンバーとしては、それが１６ビットであれば０ｘｆｆｆｆとなる）。このとき、判断基準は次の表１に示すようになる。
【００３６】
【表１】
2008262574.tif 000003
【００３７】
ここで、以下のようにすることで、マウント時のブロックの有効性の判断を高速化することができる。図８を参照しながら説明を行う。高速化の一手法は、ブロックの２カ所以上に上述のマジックナンバーを書き込むためのマジックナンバー領域を設けることで達成できる。すなわち、ブロックの有効性を判断するには、データが正しく書き込まれたかどうかを確認すればよい。ブロック全体を読み込んでデータの整合性をチェックするのは時間がかかるため、データがブロックの先頭から順番に書き込まれていくのであれば、先頭付近と最後付近で正しいデータが書き込まれているか確認するだけでよいことになる。そこで、ブロックの先頭付近と最後付近にマジックナンバーを記載する領域を設けておく。このマジックナンバーだけを読むことで、ブロックの有効性を高速に判断することができる。さらに、ブロック書き込み中の電源断の有無の判断も容易となる。
【００３８】
図８（Ａ）は、上記手法を実現するためのブロック構成例を示す図である。図８（Ａ）に示すように、ブロックＹは、データ１領域７３ａと、マジックナンバー１領域７１ａと、データ２領域７３ｂと、マジックナンバー２領域７１ｂと、データ３領域７３ｃとのページ順で構成されている。マジックナンバーはデータ領域にあってもＯＯＢ領域にあってもよいので、図ではデータ領域とＯＯＢ領域の区別はしていない。しかし、マジックナンバーはＯＯＢ領域にあるほうが望ましいので、ＯＯＢ領域に書き込まれているものとする。また、マジックナンバー１領域７１ａはブロックの先頭ページに、マジックナンバー２領域７１ｂはブロックの先頭以外のページに、それぞれ存在するとする。上記表１に記載した判断基準に基づいて、各ブロックの先頭ページのＯＯＢ領域にバッドブロックであることが記録されているか、記録されていない場合、各ブロックの先頭ページと最終使用ページのＯＯＢ領域にマジックナンバーが書かれているかどうかでブロックの有効性のチェックを行う。
【００３９】
図８（Ｂ）は、４種類のブロック１〜４までについての構成例を示す図である。ブロック１〜４までには、図８（Ａ）のように、ブロックの２カ所以上に上述のマジックナンバーを書き込むためのマジックナンバー領域を設けている。ここでは、有効なマジックナンバーを０ｘ１２３４として説明する。ブロック１では、マジックナンバー１領域７１ａと、マジックナンバー２領域７１ｂと、に、有効を示すマジックナンバーが記載されている。従って、ブロック１は有効ブロックと判断することができる。ブロック２においては、マジックナンバー１領域７１ａに有効を示すマジックナンバーが記載されているが、マジックナンバー２領域７１ｂは０ｘｆｆｆｆが記載されている。このブロックは、ブロックの書き込み中に電源断が生じたと考えられる。従って、ブロック２は無効ブロックと判断することができる。ブロック３においては、マジックナンバー１領域７１ａと、マジックナンバー２領域７１ｂとの両方に、０ｘｆｆｆｆが記載されており、フリーブロックであると判断することができる。ブロック４においては、マジックナンバー２領域７１ｂに有効を示すマジックナンバーが記載されているが、マジックナンバー１領域７１ａは０ｘ００００が記載されている。このブロックは、ファイルシステムが明示的にブロックを無効化したものと考えられる。従って、ブロック４は無効ブロックと判断することができる。
【００４０】
尚、先頭ページと最終使用ページとの２箇所で判断を行うのは、ブロックへの書き込みはページ単位で行われるため、一箇所のマジックナンバーを確認するだけでは、ブロック書き込み中の電源断を検出できないからである。データがブロックの先頭ページにだけしか書き込まれていないブロックに関しては、先頭ページと最終使用ページとが等しくなるので、先頭ページ以外のページにもマジックナンバーを書き込むようにして、それを、最終使用ページのマジックナンバーの代わりに用いて判断する。
【００４１】
また、このように、２つのページのマジックナンバーを判断することにより、少なくとも、先頭ページのデータは正しいデータであることが保証される。その理由は、ブロック内に複数のページを連続して書き込む場合に、先頭ページから順番に書き込んで行き、ページを書き込むたびに書き込んだデータが正しいかベリファイを行っていれば、先頭ページが正しく書き込めない限り、以降のページに書き込みに行くことはないからである。すなわち、データ２、またはデータ３の書き込み時に電源断が生じたとしても、マジックナンバー領域７１ａとマジックナンバー領域７１ｂが有効であることが判定できれば、マジックナンバー領域７１ａの前にあるデータ１は有効であることが保証される。データ１の領域に重要な情報を記憶させておけば、少なくともこの情報は正常なデータとして利用することができる。なお、ページのベリファイはページベリファイ手段により行われる。ページベリファイ手段は、ページへのデータの書き込み時に、書き込んだデータが正しく書き込めているかのベリファイを行う手段であり、一般的にはプログラムにより制御装置が行うことになるが、専用のハードウエアによってベリファイするようにしてもよい。
【００４２】
マウントの第二段階では、チェックブロックリスト内の妥当ブロックを解析し、妥当ファイル候補、もしくは、不完全ファイルを再構成する。基本的に妥当ブロックは、妥当ファイル候補か不完全ファイルかどちらかの構成要素となるはずである。
【００４３】
具体的にファイルを再構成するには、各ブロックの先頭ページに、以下の表２に示すようなブロック情報を付加してデータを書き込んでおく。上述したように、妥当ブロックの先頭ページはデータが正しいことが保証されているので、ブロック情報が正しいかどうかのチェックは省いてもよい。
【００４４】
【表２】
2008262574.tif 000004
【００４５】
尚、ファイル名とファイルサイズに関しては、ブロック情報において必須ではなく含めなくてもよい。その場合は、データの先頭にこれらを付加しておけばよい（図３のブロック情報のバリエーションを参照）。
【００４６】
より具体的なファイル構成情報の生成例について図面を参照しながら説明を行う。図４は、本実施の形態によるファイルシステムにおけるブロックの一構成例を示す図である。図４に示すように、ブロックＹは、太線で囲まれたブロック情報領域と、それ以外のデータ領域５３とを含んでいる。ブロック情報４１は、ファイル名４３とファイルサイズ４５とファイルシステムが付与する一意のファイルＩＤ４７とファイルにおけるブロックのつながりの順番を示すブロック番号５１とを含んでいる。尚、このうち、ブロック情報４１の必須項目４１ａは、ファイルＩＤとブロック番号とであり、これにより、ブロックがどこに属するかについての構成を知ることができる。
【００４７】
図５は、例として示したブロック１から６までに関するブロック構成例を示す図である。ブロック１は、ファイルＩＤ４７が“４５６”であり、ブロック番号５１が２／２である。２／２は、２つあるブロックのうちの２番目であることを示す。ブロック２は、ファイルＩＤ４７が“１２３”であり、ブロック番号５１が１／３である。ブロック３は、ファイルＩＤ４７が“７８９”であり、ブロック番号５１が２／４である。ブロック４は、ファイルＩＤ４７が“１２３”であり、ブロック番号５１が３／３である。ブロック５は、ファイルＩＤ４７が“１２３”であり、ブロック番号５１が２／３である。ブロック６は、ファイルＩＤ４７が“４５６”であり、ブロック番号５１が１／２である。
【００４８】
図６は、ファイル構成情報の構成例と、ファイル構成情報から再生成できるファイルの構成例を示す図である。図６（Ａ）に示すように、ファイル構成情報６１は、ファイルＩＤ４５と、ブロックリスト５７とを有している。図６（Ｂ）に示すように、ファイルＩＤ＝１２３のファイル１のブロックリストは、矢印ＡＲ１、２、３の順番で繋がれているブロック２、ブロック５、ブロック４により構成されていることがわかる。一方、ファイルＩＤ＝４５６のファイル２は、矢印ＡＲ１１、１２の順番で繋がれているブロック６、ブロック１により構成されていることがわかる。
【００４９】
次に、ファイル構成情報再構築の処理の流れを図７（Ａ）、（Ｂ）を参照しながら説明する。ステップＳ１においてファイル再構成を開始する。ステップＳ２において、ブロックを取り出し、ステップＳ３において、取り出したブロックが有効なブロックであるか否かを、ブロックチェック手段を用いて判定する。有効なブロックでない場合には（Ｎ）、ステップＳ８に進む。有効のブロックである場合には（Ｙ）ステップＳ４に進み、ブロック情報を読み込む。ステップＳ５において読み込んだブロック情報に記載されているファイルＩＤが新規なファイルＩＤであるか否かを判定する。新規ファイルＩＤである場合には（Ｙ）、ステップＳ６においてファイルＩＤを登録し、ステップＳ７に進む。新規ファイルＩＤでない場合にも（Ｎ）ステップＳ７に進み、該当ファイルＩＤにこのブロックを追加する。次いで、ステップＳ８において全ブロックの処理が完了したか否かを判定する。全ブロックの処理が完了していない場合には（Ｎ）ステップＳ２に戻る。全ブロックの処理が完了した場合には（Ｙ）、ファイルの構成情報の生成処理を終了する。これらの情報は、ＲＡＭのファイル構成情報格納領域に登録する。この時点で登録されるファイルは、不完全ファイル、もしくは、妥当ファイル候補となっている。
【００５０】
次いで、ファイルの構成情報に基づいてこれらのファイルから妥当ファイル候補を抽出する処理について説明する。ステップＳ９において、ＲＡＭのファイル構成情報格納領域に登録されている情報を読み出してファイルＩＤを取り出し、このファイルＩＤを持つファイルにおいて全ブロックが存在するか否かを判定する（ステップＳ１０）。全ブロックが存在する場合には（Ｙ）ステップＳ１１に進み、該当するファイルＩＤのファイル構成情報を有効にし、全ブロックが存在するのではない場合（Ｎ）とともに、ステップＳ１２に進み、全ファイルＩＤについて処理が完了しているか否かを判断し、ＮＯの場合にはステップＳ９に戻って同様の処理を繰り返す。全ファイルＩＤについて処理が完了して場合（Ｙ）には、ステップＳ１３においてファイルの再構成を完了する。尚、ステップＳ１からステップＳ８までの処理と、ステップＳ９からステップＳ１３までの処理は、並行処理としても良い。以上のようにすることで、ファイル構成情報の作成と再構成とを簡単に行うことができる。ファイル構成情報をフラッシュメモリに記憶するのではないため、ブロック情報のみに基づいて、ファイルを再構成する際に、同じ領域における書き込み、読み出しを避けることができる。
【００５１】
尚、妥当ファイル候補でないものは不完全ファイルとなる。マウントの第三段階では、再構成された妥当ファイル候補から有効ファイルを選び出す。有効ファイルは、妥当ファイルとなる妥当ファイル候補であり、妥当ファイル中に同名のファイルがなければそのファイルとし、同名のファイルがあれば、最後に書き込まれたファイルとする。また、有効ファイルは、「消去を示すファイル」ではないことも条件となる。なお、同名のファイルが存在すること、同名の最後に書き込まれたファイルを判断すること、および、「消去を示すファイル」に関しては後述する。
【００５２】
ブロックへの書き込みでベリファイが必要な場合、ベリファイ中に電源断があるとそのブロックが本当に正しく書き込めたかどうかがわからないという問題がある。ファイルが複数のブロックから構成されている場合に、最終ブロックで電源断が発生すると、最終ブロックの書き込み正当性が判断できず、ファイル内容が異常になる可能性がある。そこで、本実施の形態によるファイルシステムにおいては、ファイルの書き込みはファイル内のいずれかのブロックに書き込み完了フラグを書くことで完了とすることを特徴とする。ファイル内のどこかのブロックに、ファイル全体の書き込み完了を意味するフラグを書き込む領域を設けておけば、そのフラグをチェックするだけでファイルの書き込みが正常に行われたかどうかを簡単に判断できる。従って、ファイル書き込みの際の電源断による不完全ファイルの検出を容易にすることができる。図９（Ａ）は、このようなブロック構成例を示す図である。図示するように、ブロックＹは、データ領域８１と、書き込み完了フラグ領域８３とを有している。図９（Ｂ）は、ブロックＡからブロックＦまでの６つのブロックの構成例を示す図である。ブロックＡ〜Ｃは、ファイル１に含まれるブロックであり、ブロックＤ〜Ｆは、ファイル２に含まれるブロックである。ここで、各ファイル１、２の先頭ブロックの最終ページには、書き込み完了を示す書き込み完了フラグを記載するための書き込み完了フラグ領域８３ａが設けられている。書き込み完了フラグ領域はどこに設けてもよいが、先頭ブロックにあるのが好ましい。図１０（Ａ）に示すように、ブロックＡ、Ｂ、Ｃからなるファイル１は、最終ブロックであるブロックＣまで正常に書き込まれており、ブロックＡの最終ページに書き込み完了フラグ領域８３ａに有りと記載されているため、ファイルの書き込みが正常に行われたことがわかる。一方、図１０（Ｂ）に示すように、ファイル２は、ブロックＤ、Ｅ、Ｆからなるが、ブロックＤの最終ページに設けられた書き込み完了フラグ領域８３ｂにはフラグが記載されておらず、これをもってファイルの書き込みが未完であると判断することができる。すなわち、妥当ファイル候補が妥当ファイルであるか否かを判断するために、ファイルを構成するブロックのうちファイルの先頭ブロックに関しては、そのファイル全体のブロックの書き込みが完了したことを示すデータ（書き込み完了フラグ）を書き込む領域８３を別途設けておくことが特徴となる。
【００５３】
実装の一例としては、先頭ブロックの最終ページはファイルのデータを書き込むためには使用せずに、この書き込み完了フラグを書き込むために使用する。このようにすることで、あるファイルの先頭のブロックに書き込み完了フラグが書かれているかどうかを調べることにより、そのブロックを先頭ブロックとするファイルの全てのブロックが正常に書き込まれているか否かを判断することができる。この書き込み完了フラグが書き込まれている妥当候補ファイルを妥当ファイルとする。なお、書き込み完了フラグは、完了フラグ書き込み手段により、ファイルの書き込み完了後に、書き込まれる。また、マウント時には、完了フラグ読み込み手段により読み込まれ、ファイルの書き込みが完了したかどうかを判断するために用いられる。これら、書き込みと読み込み、および、判断は、一般的にはプログラムにより制御装置が行うことになるが、専用のハードウエアによってこれらを行うようにしてもよい。
【００５４】
有効ファイルを構成するブロックはチェックブロックリストから外す。有効ファイルを構成するブロックとならなかったブロックは、チェックブロックリストから外されイレースブロックリストにつながれる。すなわち、無効ファイルと不完全ファイルを構成するブロックである。これらのブロックは再利用されることになる。なお、イレースブロックリストにつなぐ際には、そのブロックへの書き込みが古く行われたものから順につなぐようにする。
【００５５】
上記、一連の処理によって、マウント終了後には、フリーブロックはフリーブロックリストに、消去が必要な、もしくは、消去が可能なブロックはイレースブロックリストにつながれていることになる。
【００５６】
次に、ファイルの書き込み処理について図２４を参照しながら説明する。まず、ステップＳ１０１において、書き込み処理を開始する。次いで、ステップＳ１０２において、ファイルＩＤ付与手段を用いて、ファイルＩＤを取得する。ステップＳ１０３において、フリーブロックリストが空か否かを判定する。フリーブロックリストが空であれば（ＹＥＳ）、ステップＳ１０４に進み、フリーブロックリストではなくイレースブロックリストからブロックを取り出し、ステップＳ１０６においてブロックを消去し、ステップＳ１０７においてブロック情報を生成する。ステップＳ１０３でＮＯの場合にはステップＳ１０５に進み、フリーブロックリストからブロックを取り出し、ステップＳ１０７に進みブロック情報を生成する。
【００５７】
次いで、ステップＳ１０８においてブロック情報とデータをブロックへ書き込み、ステップＳ１０９において、書き込みデータが残っているか否かを判定する。次いで、ステップＳ１１０において、完了フラグ書き込み手段を用いて、書き込み完了フラグを先頭ブロックに書き込み、ステップＳ１１１においてファイルＩＤを更新（ファイルＩＤを消費したことを、ファイルＩＤ付与手段に示す）し、ステップＳ１１２において、ファイル構成情報に新ファイルを追加する。ステップＳ１１３において、旧ファイルが存在するか否かを判定し、存在すれば（ＹＥＳ）ステップＳ１１４に進み旧ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ１１５においてファイル構成情報から旧ファイルを削除し、書き込みを終了する（ステップＳ１１６）。旧ファイルが存在しない場合には、そのまま処理を終了する（ステップＳ１１６）。ここで、ステップＳ１１０からステップＳ１１５は、後述するファイル更新手段の手順を示している。すなわち、書き込みが完了したファイルと同名の旧ファイルがある場合には、そのファイルを無効とするとともに、新たなファイルを有効とする処理である。旧ファイルがない場合には、新たなファイルが有効になるだけである。ステップＳ１１０からステップＳ１１５の処理は、一般的には、プログラムにより制御装置が行うことになるが、専用のハードウエアによってこれらを行うようにしてもよい。
【００５８】
以上に説明したように、ファイルの書き込みに使用するブロックは、フリーブロックリストから取り出す。フリーブロックリストにブロックがない場合は、イレースブロックリストからブロックを取り出し、消去を行い、フリーブロックリストに入れた後、フリーブロックリストから取り出す。このような手順にしておけば、フリーブロックリストのブロックが尽きてからイレースブロックリストのブロックを再利用するようになるため、全領域が初期化された状態から、全領域のブロックに書き込みを行うまでの間では、ブロックが再利用されることはない。また、イレースブロックリストにつながれているブロックは、書き込まれた順番でつながれており、つなぐときも書き込まれた順番でつなぐ。したがって、イレースブロックリスト内の特定のブロックが何度も再利用されるというようなことはおこらない。
【００５９】
上記ステップＳ１１０において、書き込み完了フラグをファイルの先頭ブロックに書き込んだ時点で、ファイルの書き込みが正常に行われたものとなる。すなわち、ステップＳ１１０以前に電源断が発生した場合、書き込んだブロックは不完全ファイルを構成するものとなるか、もしくは、無効ブロックとなるかのどちらかであり、次回のマウント処理において、それらは、イレースブロックリストにつながれることになる。このとき、不完全ファイルにおいても、ファイルＩＤは付与されているため、このファイルはイレースブロックリストの最後尾につながれる。無効ブロックに関してはイレースブロックリストの先頭につながれる。この場合、書き込みが行われなかったことに等しい。
【００６０】
ステップＳ１１０以降に電源断が行われた場合、ステップ１１４およびステップ１１５の処理は必要があれば次回のマウント処理で必ず行われるため、特に考慮する必要はない。
【００６１】
次に、ファイルの更新処理について説明する。
一般的なファイルシステムでは、ファイルを更新する場合には、そのファイルが記録されている部分を直接書き換えるか、別名でファイルを作成した後にファイル名を変更するか、といった方法が取られる。しかしながら、これらの方法では、書き換え中に電源断が発生した場合や、ファイル名を変更中に電源断が発生した場合には、データの不整合やファイルの消失といった危険性が伴う。一方、フラッシュメモリは書き換えを行うためにはブロック全体の消去を行う必要があり、一部分だけの書き換えは無駄が多く、また、書き換えの回数にも制限があることから、上述のような方法は向いていない。
【００６２】
そこで、本実施の形態によるファイルシステムにおいては、ファイルシステム内に同名のファイルが存在することを許し、有効なファイルは最後に書き込まれたファイルであるとし、また、新しいファイルの書き込み完了を待ってから古いファイルを無効化することを特徴とする。これにより、ファイル更新の際の電源断に起因する上記のような危険性を排除することができる。これらの処理はファイル更新手段により行われる。
【００６３】
次に、図面を参照しながら、より詳細に説明を行う。図１１は、ファイル書き込み前のファイル構成情報の例を示す図である。図１１に示すように、ファイル１におけるファイル書き込み前の構成情報は、ファイル名が‘ＡＡ’であり、このファイル名ＡＡのファイル１は、ＡＲ１の矢印とそれに続くＡＲ２の矢印で示すようにブロックＡとブロックＢとから構成されている。図１２に示すファイル書き込み中の構成情報（１）は、図示するように、このファイル１を更新するためにファイル書き込む場合に、ファイル１の他にファイル１と同名のファイル２を作成する。このファイル２に含まれるブロックＣは、ファイル書き込みがまだ完了していないため、フラグ領域８３ｂにはフラグが立っていない（無し）。図１３に示すファイル書き込み中の構成情報（２）は、図示するように、ファイル２に関して、ブロックＣとブロックＤとをつなげる。この状態では、ファイル書き込みがまだ完了していないため、フラグ領域８３ｂにはフラグが立っていない。
【００６４】
図１４は、ファイル書き込み完了直後の構成情報例を示す図である。図１４に示すように、ファイル２において、ブロックＤをつなげた後に、矢印ＡＲ３１で示すように、フラグ書き込み領域８３ａにフラグを立てる（有りとする）。これ以降であれば、フラグ有りになっているため、電源断が生じた場合でもファイル２が存在する。従って、図１５に示すように、ファイル１を無効化処理したとしても、ファイル２を引き続き利用することで、ファイル１からファイル２への更新を行うことができる。この状態でＲＡＭへのファイル構成情報の書き込みを行う。
【００６５】
このように、同名ファイルの存在を許容し同名ファイルで更新することにより、途中で電源断が生じても、更新前のファイルと更新後のファイルの両方のファイルを消失する危険性がなく、安全にファイルの更新を行うことができる。
【００６６】
次に、ファイルの消去処理について説明する。本実施の形態によるファイルシステムにおいては、ファイルの消去は“ファイルを消去したことを示すファイル”を書き込むことで行うことを特徴とする。ファイルを消去するには、ファイル構成情報からそのファイルの構成情報を取り除けばよいが、ファイル構成情報はＲＡＭ上に存在するため、その状態で電源断が起こった場合、次回のマウント処理で消去されたはずファイルが復活してしまう。したがって、ファイル構成情報を消去するだけでなく、そのファイルを構成するブロックを消去する必要がある。しかしながら、複数のブロックからなるファイルを消去する場合や、消去に時間がかかるデバイスにとっては、このような処理では時間がかかってしまう。そこで、ファイルを構成するブロックを消去する代わりに、ファイルを消去したことを示すファイルを書き込むことにし、そのファイル、および、そのファイルにより消去されたファイルは利用者に見せないようにする。このようにしておけば、電源断が起こった場合でも、次回のマウント処理で消去されたファイルが復活することはない。ここで、例えば、ファイルを消去したことを示すファイルとして、同名のサイズが０のファイルを書き込むようにすれば、たかだか１ブロック分の書き込みだけですむため、消去を高速に行うことが可能となる。
【００６７】
図１６（Ａ）は、消去を示すファイル書き込み前の構成情報の例を示す図である。図１６（Ａ）に示すように、消去を示すファイル書き込み前においては、ファイル名‘ＡＡ’４５を有するファイル１は、矢印ＡＲ１、ＡＲ２、ＡＲ３でそれぞれ順番に繋がれているブロックＡ、Ｂ、Ｃから構成されていることがわかる。ここで、図１６（Ｂ）に示すように、複数のブロックからなるファイル１を消去する場合に、ブロックＤのみを含むファイル２を生成する。このファイル２は、ファイル消去のファイルであり、サイズが０のファイルである。ファイル２のフラグ書き込み領域８３ａには、書き込み完了を示すフラグが付される。そして、サイズ０のファイル２でファイル１を上書きすることにより、利用者には見えない形でファイル１が消去できることになる。この場合に、同じ名前‘ＡＡ’のファイルがあった場合に、最後に書き込まれたファイル２が有効となる。すなわち、図１６（Ｃ）に示すように、ファイル１とファイル２とを無効化することにより実質的にファイル１を消去することが簡単に行うことが可能となる。すなわち、ファイル消去の高速化が可能となる。
【００６８】
このように、ファイルの消去は、「消去を示すファイル」を書き込むことで実現することができる。たとえば、上記では、同名のファイルサイズが０のファイルにその役割をまかせているが、特に限定はしない。但し、「消去を示すファイル」は利用者には見せないほうが好ましい。書き込み手順は、通常のファイルの書き込みとほぼ同じであるが、ファイルの書き込み後に、「消去を示すファイル」を構成するブロックをイレースブロックリストにつなげるという処理が加わる。
【００６９】
図２５に、処理のフローチャート図を示す。まず、ステップＳ１２１において、消去処理を開始する。次いで、ステップＳ１２２においてファイルＩＤを取得する。ステップＳ１２３において、フリーブロックリストが空か否かを判定する。フリーブロックリストが空であれば（ＹＥＳ）、ステップＳ１２４に進み、フリーブロックリストではなくイレースブロックリストからブロックを取り出し、ステップＳ１２６においてブロックを消去し、ステップＳ１２７においてブロック情報を生成する。この時、ファイルサイズは０とする。ステップＳ１２３でＮＯの場合にはステップＳ１２５に進み、フリーブロックリストからブロックを取り出し、ステップＳ１２７に進みブロック情報を生成する。この時、ファイルサイズは０とする。次いで、ステップＳ１２８においてブロック情報とデータをブロックへ書き込み、ステップＳ１２９において、書き込みデータが残っているか否かを判定する。次いで、ステップＳ１３０において、書き込み完了フラグを先頭ブロックに書き込み、ステップＳ１３１においてファイルＩＤを更新し、ステップＳ１３２において、ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ１３３において、旧ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ１３４においてファイル構成情報から旧ファイルを削除し、書き込みを終了する（ステップＳ１３５）。
【００７０】
尚、上記ステップＳ１３０において、書き込み完了フラグをファイルの先頭ブロックに書き込んだ時点で、ファイルの書き込みが正常に行われたものとなる。すなわち、ステップＳ１３０以前に電源断が発生した場合、書き込んだブロックは不完全ファイルを構成するものとなるか、もしくは、無効ブロックとなるかのどちらかであり、次回のマウント処理において、それらは、イレースブロックリストにつながれることになる。このとき、不完全ファイルにおいても、ファイルＩＤは付与されているため、このファイルはイレースブロックリストの最後尾につながれる。無効ブロックに関してはイレースブロックリストの先頭につながれる。この場合、消去は行われなかったことに等しい。
【００７１】
ステップＳ１３０以降に電源断が行われた場合でも、有効なファイルは最後に書き込まれたファイルと決めておく限り、ステップ１３２からステップ１３４の処理は必要があれば次回のマウント処理で必ず行われるため、特に考慮する必要はない。
【００７２】
次に、ファイルＩＤの付与方法、ならびに、ブロックの再利用方法について説明する。
マウント時に、ブロックに付与されたファイルＩＤに基づいて、ファイルを再構成し、有効なファイルを抽出する方法はすでに述べた。また、同名のファイルがある場合、最後に書き込まれたファイルが有効なファイルであるとしておくことで、ファイルの書き込み時や消去時に電源断があっても不具合が発生しない方法を述べた。さらに、有効でないファイルを構成するブロックに関しては、そのファイルが書き込まれた順番で再利用する方法を述べた。
【００７３】
これらの方法はそれぞれ独立しているが、ユニークなファイルＩＤに基づいて、ファイルの書き込み順が判断できるようにしておけば、一度に全てを満たすことができる。特に、ファイルＩＤは再利用することなく、ファイルの書き込みが行われるごとに新たなものを割り当て、さらに、ファイルＩＤは、単調増加、または、単調減少するものが好ましい。
【００７４】
そこで、本実施の形態によるファイルシステムにおいては、ファイルＩＤ付与手段が付与するファイルＩＤは、過去に割り当てた最大ファイルＩＤ＋１とし、ファイルＩＤの大きさに基づいて、ファイルの書き込まれた順番を判断するファイル書き込み順判定手段を設けることを特徴とする。
【００７５】
ファイル書き込み中の電源断で生成された、あるいは、ファイルの更新や削除により必要がなくなった、無効なファイルを構成するブロックは、そのまま放置しておき、新たな書き込みでブロックが必要となったときに、そのようなブロックを再利用するという方式では、特定のブロックが何度も再利用されることがないようにするのが望ましい。ファイル（ブロック）にファイルＩＤを割り当てておくと、不要な古いブロックから再利用させることが可能となる。マウント時もそれにならうようにする。これにより、ブロック再利用時に、適切なブロック割り当てが可能となるという利点がある。すなわち、ウエアレベリングが可能となる。
【００７６】
図１７は、本実施の形態によるファイルシステムにおける、ウエアレベリング対応のファイル書き込み時のブロック接続例を示す図である。図１７（Ａ）は、ファイル書き込み前の構成情報の例を示す図である。図１７（Ａ）に示すように、イレースブロックリストは、ブロックＡ（ＡＲ１）、ブロックＢ（ＡＲ２）、ブロックＣ（ＡＲ３）、ブロックＤ（ＡＲ４）、ブロックＧ（ＡＲ４）と繋がれているリストとなっている。一方、ファイル１は、ファイル名‘ＢＢ’のファイルであって、ブロックＥ（ＡＲ５）、ブロックＦ（ＡＲ６）とつながれて構成されている。ここで、ブロックＡからブロックＧへとファイルＩＤが大きくなっている。
【００７７】
図１７（Ｂ）は、ファイル書き込み完了直後のファイル構成情報の例を示す図である。ブロックは、図１７（Ａ）のイレースブロックリストにつながれているブロックのうちのファイルＩＤが小さいブロック（ブロックＡからＧに向けてファイルＩＤが大きい）から再利用を行うようにする。ファイル１は図１７（Ａ）の構成と同じであり、ファイル２は、ファイル１と同名‘ＢＢ’であり、ブロック番号の小さな順番にイレースブロックリストからブロックＡとブロックＢとを利用する。
【００７８】
次いで、図１７（Ｃ）に示すように、ファイル構成情報を更新する。すなわち、ファイル１はファイル情報を消去（無効化）し、それまで含まれていたブロックをイレースブロックリストに挿入する。イレースブロックのリストには、ブロックＥとブロックＦとは、ファイル書き込み順判定手段により判定されたファイルＩＤの大きさの順番に基づいてブロックＤとブロックＧとの間に挿入される。そして、ファイル２は、ブロックＡとブロックＢとから構成される。
【００７９】
尚、ファイル２をさらに更新すると、ブロックＡとブロックＢとは、ファイルＩＤがブロックＧよりも大きくなるため、イレースブロックリストにおいてはブロックＧの後につながれることになる。
【００８０】
書き込み処理について、再び図２４を参照しながら説明する。まず、ステップＳ１０１において、書き込み処理を開始する。次いで、ステップＳ１０２においてユニークなファイルＩＤを取得する。ここで、新たに取得するファイルＩＤは、ファイルシステムが過去に割り当てた最大ファイルＩＤ＋１とする。ステップＳ１０３において、フリーブロックリストが空か否かを判定する。フリーブロックリストが空であれば（ＹＥＳ）、ステップＳ１０４に進み、フリーブロックリストではなくイレースブロックリストからブロックを取り出し、ステップＳ１０６においてブロックを消去し、ステップＳ１０７においてブロック情報を生成する。ステップＳ１０３でＮＯの場合にはステップＳ１０５に進み、フリーブロックリストからブロックを取り出し、ステップＳ１０７に進みブロック情報を生成する。
【００８１】
次いで、ステップＳ１０８においてブロック情報とデータをブロックへ書き込み、ステップＳ１０９において、書き込みデータが残っているか否かを判定する。次いで、ステップＳ１１０において、書き込み完了フラグを先頭ブロックに書き込み、ステップＳ１１１においてファイルＩＤを更新し、ファイルシステムにファイルＩＤを消費したことを伝える。ステップＳ１１２において、ファイル構成情報に新ファイルを追加する。ステップＳ１１３において、旧ファイルが存在するか否かを判定し、存在すれば（ＹＥＳ）ステップＳ１１４に進み旧ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ１１５においてファイル構成情報から旧ファイルを削除し、書き込みを終了する（ステップＳ１１６）。旧ファイルが存在しない場合には、そのまま処理を終了する（ステップＳ１１６）。上記ファイルの書き込み処理で説明したように、ファイルを書き込むために使用するブロックは、フリーブロックリストから取得している。フリーブロックリストにブロックがない場合は、イレースブロックリストからブロックを取り出し、ブロックを消去した後、フリーブロックリストにつなげ、フリーブロックリストから取得している。
【００８２】
これが意味するところは、ＮＡＮＤ型フラッシュメモリの領域全体を初期化した状態では、全てのブロックがフリーブロックリストにつながれており、それらを使い切った後、初めて、イレースブロックリストにあるブロックが再利用されるということである。また、イレースブロックリストにあるブロックは、ファイルＩＤの順番でつながれている。ファイルＩＤが同じブロックに関しては、その中でもブロック番号の順番につながれている。すなわち、再利用されるブロックというのは、消去可能なブロックのうち、最も以前に書き込みが行われたブロックということになる。
【００８３】
次いで、マウント処理の流れについて図１８を参照しながら説明を行う。ステップＳ６１において、ファイルの再構成処理を開始する。次いで、ステップＳ６２においてブロックを取り出し、ステップＳ６３において、取り出したブロックが有効なブロックであるか否かを判定する。有効でない場合には（ＮＯ）ステップＳ６９に進む。有効な場合には（ＹＥＳ）、ステップＳ６４においてブロック情報を読み込み、ステップＳ６５において新規ファイルＩＤであるか否かを判定する。新規ファイルＩＤでない場合には（ＮＯ）、ステップＳ６８に進む。新規ファイルＩＤであれば（ＹＥＳ）、ステップＳ６６においてファイルＩＤを登録し、ステップＳ６７においてファイルＩＤを更新し、ステップＳ６８に進む。ステップＳ６８においては、該当ファイルＩＤに取り出したブロックを追加する。
【００８４】
ステップＳ６９においては、全ブロックの処理が完了したかどうかを判定し、ＮＯの場合にはステップＳ６２に戻る。ＹＥＳの場合には、ステップＳ７０に進み、登録されたファイルＩＤを大きな順に取り出す。すなわち、ステップＳ７０では、ファイル書き込み順判定手段を用いて、最後に書き込まれたファイルから順に抽出し、以降の処理を続けることになる。ステップＳ７１において、全ブロックが存在するか否かを判定し、ＹＥＳであればステップＳ７２に進み同名ファイルが存在するか否かを判定する。次いで、ステップＳ７３において該当ファイルＩＤのファイル構成情報を有効にし、ステップＳ７５に進む。ＮＯであれば、ステップＳ７４に進み、本ファイル構成ブロックをファイルＩＤの順番にイレースブロックリストに挿入し、ステップＳ７５に進む。ステップＳ７５においては、全ファイルＩＤの処理が完了したか否かを判定し、ＮＯであればステップＳ７０に戻り、ＹＥＳであればステップＳ７６において再構成を終了する。
【００８５】
以上のようにすれば、ファイルの書き込み中に電源断が発生した場合、その書き込みで消費されたブロックは次回のマウント処理時に、イレースブロックリストの最後につながれることになる。なぜなら、イレースブロックリストのブロックはファイルＩＤの順番でつながれており、電源断が発生した最後の書き込みで使用したファイルＩＤは、その時点で最大であったからである。これは、それらのブロックが再利用されるのは、ファイル書き込み時点でのイレースブロックリストのブロックを使い切ってからということに他ならない。つまり、特定ブロックだけが何度も再利用されるということを防ぐことができる。
【００８６】
ここまで、バッドブロックの扱いに関して、特に言及しなかったので、ここで簡単に説明する。
【００８７】
ＮＡＮＤ型フラッシュメモリには、出荷時から存在する初期バッドブロックと、消去や書き込みを繰り返しているうちに磨耗がおきて発生する後天的なバッドブロックがある。これらは、データを正しく読み出すことができない可能性のあるブロックであり、使用を控える必要がある。このようなブロックにはＯＯＢ領域に自身がバッドブロックであることが記録されている。このようなバッドブロックはマウント処理時に検出できるので、これらはバッドブロックリストに入れて、以後は使用しないようにすればよい。
【００８８】
初期バッドブロックは出荷時にバッドブロックであることが記録されているが、後天的なバッドブロックは書き込み時に検出し、記録しなければならない。すなわち、ブロックにデータを書き込んだ後、もう一度同じブロックを読み込み、ベリファイを行えばよい。このとき、書き込みと読み込みは正常に行われたにもかかわらず、ベリファイにおいてエラーが出たものが、後天的なバッドブロックとなる。このようなブロックは、先頭ページのＯＯＢ領域にバッドブロックであることを記録しバッドブロックリストに入れるとともに、以後は、使用しないようにすればよい。一旦、ＯＯＢ領域にバッドブロックであることが記録されると、電源断後のマウント処理においても、そのブロックはバッドブロックであることが検出できるので、使用されることはない。
【００８９】
以上に説明したように、本実施の形態によるファイルシステムにおいては、高速なファイル処理を行うことができる。また、ウエアレベリングが可能になる。さらに、ファイル書き込み中に電源断が発生してもファイル情報を再構成可能でありファイルの損失や破壊も生じないという利点がある。
【００９０】
次に、本発明の第２の実施の形態によるファイルシステムについて説明する。第１の実施の形態では、ファイルの消去に関しては、「消去を示すファイル」を書き込むことで実現しているが、セキュリティの面から、実際に、物理的にデータを消去したいという要求もあることが考えられる。
【００９１】
この場合に、ファイルの消去時には、「消去を示すファイル」を書き込む代わりに、実際にそのファイルが使用しているブロックを消去するという方法もある。しかしながら、ブロックを消去した後に電源断が発生すると、これらのブロックは次回電源投入の際のファイルシステムのマウント処理時にフリーブロックとみなされるため、それらのブロックがすぐに再利用されてしまう。さらに、再利用されたこれらのブロックが構成するファイルが消去された後に電源断が発生すると、再び、これらのブロックがすぐに再利用されることになる。
【００９２】
すなわち、ファイルの書き込み、そのファイルの消去、電源断、電源投入、というサイクルを繰り返すと、特定のブロックが何度も繰り返し利用されることになり、書き込み回数に制限があるフラッシュメモリにとっては都合が悪い。
【００９３】
そこで、本発明の第２の実施の形態によるファイルシステムにおいては、ファイルの消去は「ファイルを消去したことを示すファイル」を書き込むことで行うとともに、過去のファイルに関してはブロックの消去も行う。このとき、消去されるブロックのブロックＩＤを前記ファイルにも付加することを特徴とする。すなわち、ファイルの消去は、「消去を示すファイル」を書き込むことと、消去したいファイルが利用しているブロックを実際に消去することと、「消去を示すファイル」の中に、実際に消去されるブロックのブロックＩＤを付加しておくことで実現する。さらには、消去したブロックと、「消去を示すファイル」を構成するブロックは、イレースブロックリストに順につなぐ。このようにしておけば、消去されたブロックが再利用される前に電源断があった場合でも、次回のマウント処理時には、消去されたブロックをフリーブロックリストではなく、イレースブロックリストの適切な位置につなぐことができる。なぜなら、「消去を示すファイル」を構成するブロックは、マウント処理時にイレースブロックリストにつながれるので、そのようなブロックがあれば、そのファイルに付加されている消去したブロックの情報を取り出し、その直前に挿入することで、電源断時のイレースブロックリストを再構成できるからである。具体的には、図１９（Ａ）に示すように、ファイル消去前の構成情報として、イレースブロックリストにブロックＡとブロックＢとブロックＣとブロックＤとブロックＧとが、ＡＲ１〜４までのようにつながっているとする。また、ファイル名４５が‘ＢＢ’であるファイル１が、ブロックＥとブロックＦから構成されているとする。
【００９４】
ここで、図１９（Ｂ）に示すように、ファイル消去中の構成情報として、ファイル１を消去すると、ファイル１を構成していたブロックＥとブロックＦがイレースブロックリストにつながれ、ブロックＡから構成された、「消去を示すファイル」であるファイル２が新たに生成される。このとき、ブロックＡはイレースブロックリストの先頭のブロックが取り出されたものである。さらに、ブロックＡには、ブロックＥとブロックＦを消去したという情報を付加しておく。この後、実際に、ブロックＥとブロックＦを消去する。
【００９５】
最終的には、図１９（Ｃ）に示すように、ファイル消去後の構成情報として、イレースブロックリストは図１９（Ｂ）のものにブロックＡが加わった状態になる。
【００９６】
ブロックＡには、ブロックＥとブロックＦとを消去したという情報を格納しておくため、電源断が起こった場合でもイレースブロックリストの再構築は可能になる。
【００９７】
図２６を用いて、消去処理のフローを説明する。まず、ステップＳ１４１において、消去処理を開始する。次いで、ステップＳ１４２においてファイルＩＤを取得する。ステップＳ１４３において、フリーブロックリストが空か否かを判定する。フリーブロックリストが空であれば（ＹＥＳ）、ステップＳ１４４に進み、フリーブロックリストではなくイレースブロックリストからブロックを取り出し、ステップＳ１４６においてブロックを消去し、ステップＳ１４７においてブロック情報を生成する。この時、ファイルサイズは０とする。ステップＳ１４３でＮＯの場合にはステップＳ１４５に進み、フリーブロックリストからブロックを取り出し、ステップＳ１４７に進みブロック情報を生成する。この時、ファイルサイズは０とする。次いで、ステップＳ１４８においてブロック情報とデータをブロックへ書き込む。このとき、データとして、実際に消去すべきブロックのブロックＩＤを付加しておく。次にステップＳ１４９において、書き込みデータが残っているか否かを判定する。次いで、ステップＳ１５０において、書き込み完了フラグを先頭ブロックに書き込み、ステップＳ１５１においてファイルＩＤを更新し、ステップＳ１５２において旧ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ１５３においてイレースブロックリスト内にある同名のファイルを構成するブロックを消去し、ステップＳ１５４において消去したブロックをイレースブロックリストの最後につなぎなおし、ステップＳ１５５においてファイル構成ブロックをイレースブロックリストに追加するとともに、ステップＳ１５６においてファイル構成情報から旧ファイルを削除し、書き込みを終了する（ステップＳ１５７）。
【００９８】
ステップＳ１５４において、消去したブロックをイレースブロックリストにつなぎなおす（最後に追加する）ことで、このまま電源断が発生しない限りは、イレースブロックリストに最初からあったブロックを使いつくすまで、これらの消去したブロックが使用されることはない。一方、途中で電源断があった場合は、マウント処理時、次に説明する手順で、これらのブロックをフリーブロックリストからイレースブロックリストにつなぎなおすことができ、イレースブロックリストを電源断が発生した状態に戻すことができる。これにより、ファイルの消去時にブロックの消去を行った場合でも、同一のブロックだけが何度も再利用されることを防ぐことができる。
【００９９】
次に、マウント処理の流れについて図２０を参照しながら説明を行う。まず、ステップＳ８１において再構成を開始し、ステップＳ８２においてブロックを取り出す。ステップＳ８３においてフリーブロックであるか否かを判定する。フリーブロックであれば（ＹＥＳ）、ステップＳ９２に進み、フリーブロックリストに追加しステップＳ９０に進む。フリーブロックでなければ（ＮＯ）、ステップＳ８４において、有効なブロックかどうかを判定する。有効なブロックであれば（ＹＥＳ）ステップＳ８５に進み、有効なブロックでなければ（ＮＯ）ステップＳ９１においてイレースブロックリストに追加し、ステップＳ９０に進む。ステップＳ８５においては、ブロック情報を読み込み、ステップＳ８６において、新規ファイルＩＤであるか否かを判定する。新規ファイルＩＤであればステップＳ８７でファイルＩＤを登録し、ステップＳ８８で該当ファイルＩＤにブロックを追加する。次いで、ステップＳ９０において、全ブロックの処理が完了したか否かを判定し、ＮＯであればステップＳ８２に戻り、ＹＥＳであれば、図２１のステップに移行する。
【０１００】
図２１は、図２０に続く処理の流れを示すフローチャート図である。ステップＳ９０でＹＥＳであれば、ステップＳ９１に進み、登録されたファイルＩＤを大きな順（新しく作成された順番）で取り出す。ステップＳ９２において、全ブロックが存在するか否かを判定し、ＮＯの場合にはステップＳ１００に進み、ファイル構成ブロックをイレースブロックリストに追加し、ステップＳ９６に移行する。ステップＳ９２においてＹＥＳの場合には、ステップＳ９３において同名ファイルが登録済みであるか否かを判定し、ＮＯであれば、ステップＳ９４に進み該当ファイルＩＤのファイル構成情報を有効にし、ステップＳ９５において、消去ファイルであるか否かを判定し、ＮＯであれば、ステップＳ９６に進む。ステップＳ９３でＹＥＳの場合には、ステップＳ９８に進み、消去ファイルであるか否かを判定する。ＮＯの場合にはステップＳ１００に進む。ＹＥＳの場合には、ステップＳ９９に進み、本ファイルで記録されているブロックをフリーブロックリストから取り出しイレースブロックリストに追加しステップＳ１００に進む。ステップＳ９６において全ＩＤの処理が完了したか否かを判定し、完了していなければ（ＮＯ）ステップＳ９１に戻り、完了していれば（ＹＥＳ）、ステップＳ９７において再構成処理を終了する。
【０１０１】
なお、ステップＳ１００にて、イレースブロックリストに追加されるブロックとは、ステップＳ９２から来る、全ブロックが存在しないファイルを構成するブロック、ステップＳ９８から来る、妥当なファイルであるが同名の新しいファイルが存在する場合のそのファイルを構成するブロック、ステップＳ９５から来る、最も新しい消去ファイルを構成するブロックであり、すなわち、全ブロックが存在する有効なファイルであり、かつ、消去ファイルでないファイルを構成するブロック以外のブロックが、イレースブロックリストにつながれることになる。
【０１０２】
上述を基本形とすると、これの発展形として、上記ステップＳ１４８において、「消去を示すファイル」には消去するブロックのブロックＩＤだけでなく、そのブロックのファイルＩＤとブロック番号も付加しておき、また、上記ステップＳ１５２において、イレースブロックにつなげるときは、ファイルＩＤとブロック番号の順番でイレースブロックリストにブロックをつなげ、さらに、上記ステップＳ１５４において、ブロックを消去した後、つなぎなおすことはしないという方法も考えられる。この場合は、電源断発生後のマウント時、消去されたブロックをフリーブロックリストからイレースブロックリストにつなぎなおす際には、ブロック番号と一緒に保存されているファイルＩＤとブロック番号を用いてつなぎなおすことで、やはり、イレースブロックリストを電源断があった状態に戻すことができる。この方法では、ブロックの再利用の順番が、ファイル消去時にブロックを消去しない場合と完全に同じ順番になりわかりやすいというメリットがある反面、実装が少し複雑になるというデメリットがある。
【０１０３】
基本形でも発展形でも、同一のブロックだけが何度も再利用されるということはないので、目的に合うように、どちらの方法を選択してもよい。
【０１０４】
以上に説明したように、本実施の形態によるファイルシステムにおいては、高速なファイル処理を行うことができる。また、ウエアレベリングが可能になる。さらに、ファイル書き込み中に電源断が発生してもファイル情報を再構成可能でありファイルの損失や破壊も生じない。また、ファイルの消去では実際にデータを消去するため、セキュリティの面でも安心できるという利点がある。
【産業上の利用可能性】
【０１０５】
本発明は、電子機器に用いられるフラッシュメモリのファイルシステムに利用可能である。
【図面の簡単な説明】
【０１０６】
【図１】本発明の第１の実施の形態によるファイルシステムを適用可能な機器の一例として示す電子機器の一構成例を示す機能ブロック図である。
【図２】ＮＡＮＤ型フラッシュメモリの領域構成例を示す図である。
【図３】ヘッダ情報のバリエーションを示す図である。
【図４】本実施の形態によるファイルシステムにおけるブロックの一構成例を示す図である。
【図５】例として示したブロック１から６までに関するブロック構成例を示す図である。
【図６】ファイル構成情報の構成例と、ファイル構成情報から再生成できるファイルの構成例を示す図である。
【図７】ファイル構成情報再構築の処理の流れを示すフローチャート図である。
【図８】図８（Ａ）は、上記手法を実現するためのブロック構成例を示す図である。図８（Ｂ）は、４種類のブロック１〜４までについての構成例を示す図である。
【図９】図９（Ａ）は、このようなブロック構成例を示す図である。図９（Ｂ）は、ブロックＡからブロックＦまでの６つのブロックの構成例を示す図である。
【図１０】図１０（Ａ）は、ブロックＡ、Ｂ、Ｃからなるファイル１の構成例を示す図であり、図１０（Ｂ）は、ブロックＤ、Ｅ、Ｆからなるファイル２の構成例を示す図である。
【図１１】ファイル書き込み前のファイル構成情報の例を示す図である。
【図１２】ファイル書き込み中の構成情報（１）を示す図である。
【図１３】書き込み中の構成情報（２）を示す図である。
【図１４】ファイル書き込み完了直後の構成情報例を示す図である
【図１５】ファイル１を無効化処理し、ファイル２を引き続き利用することで、ファイル１からファイル２への更新を行う様子を示す図である。
【図１６】ファイル書き込み処理時の構成情報の例を示す図である。
【図１７】本実施の形態によるファイルシステムにおける、ウエアレベリング対応のファイル書き込み時のブロック接続例を示す図である。
【図１８】ファイルの更新を考慮した、ファイル構成情報再構築の処理の流れを示すフローチャート図である。
【図１９】ファイル消去処理におけるファイルの構成例を示す図である。
【図２０】ファイルの消去を考慮した、ファイル構成情報再構築の処理の流れを示すフローチャート図である。
【図２１】図２０に続く処理の流れを示すフローチャート図である。
【図２２】磁気記憶装置のファイルシステムのイメージを示す図である。
【図２３】フラッシュメモリのファイルシステムのイメージを示す図である。
【図２４】ファイル書き込み処理の流れを示すフローチャート図である。
【図２５】ファイル消去処理の流れを示すフローチャート図である。
【図２６】ブロックの消去を伴うファイル消去処理の流れを示すフローチャート図である。
【符号の説明】
【０１０７】
Ａ…電子機器、１…制御装置（ＣＰＵ）３…フラッシュメモリ、５…ＲＡＭ（メモリ）、７…入力手段、１１…表示手段、１５…データ入出力手段。
【図１】
2008262574.tif 000005
【図２】
2008262574.tif 000006
【図３】
2008262574.tif 000007
【図４】
2008262574.tif 000008
【図５】
2008262574.tif 000009
【図６】
2008262574.tif 000010
【図７】
2008262574.tif 000011
【図８】
2008262574.tif 000012
【図９】
2008262574.tif 000013
【図１０】
2008262574.tif 000014
【図１１】
2008262574.tif 000015
【図１２】
2008262574.tif 000016
【図１３】
2008262574.tif 000017
【図１４】
2008262574.tif 000018
【図１５】
2008262574.tif 000019
【図１６】
2008262574.tif 000020
【図１７】
2008262574.tif 000021
【図１８】
2008262574.tif 000022
【図１９】
2008262574.tif 000023
【図２０】
2008262574.tif 000024
【図２１】
2008262574.tif 000025
【図２２】
2008262574.tif 000026
【図２３】
2008262574.tif 000027
【図２４】
2008262574.tif 000028
【図２５】
2008262574.tif 000029
【図２６】
2008262574.tif 000030