(57)【特許請求の範囲】
【請求項１】
ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含み、各前記バンクは、複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割され、
前記ファイルシステムは、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納するための更新データ格納手段と、
予め定められた第１の条件が満足されると、前記更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択するための最新データ選択手段と、
前記最新データ選択手段に接続され、前記選択された最新の更新データを処理するための処理手段とを含み、
前記処理手段は、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納するための第１のマージデータ格納手段と、
前記データバンクから、前記最新の更新データに関連するデータを選択するための関連データ選択手段と、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納するための第２のマージデータ格納手段と、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定するための設定手段とを含む、ファイルシステム。
【請求項２】
前記第１の条件は、前記更新データ用バンクに、空きブロックがないという条件である、請求項１に記載のファイルシステム。
【請求項３】
前記ファイルシステムは、２以上のブロックを格納する揮発性半導体記憶装置をさらに含み、
前記更新データ格納手段は、
更新前のデータを、前記揮発性半導体記憶装置のブロックに格納するための手段と、
前記揮発性半導体記憶装置のブロックの中から、データ書換命令に対応するデータが格納されたブロックを選択するための手段と、
前記選択されたブロックに格納された、前記更新前のデータを更新するための手段と、
前記更新されたデータを、前記更新データ用バンクに格納するための手段とを含む、請求項１に記載のファイルシステム。
【請求項４】
前記ファイルシステムは、
複数のデータバンクの中から、全てのブロックが初期化された状態であるバンクを抽出するための抽出手段と、
前記抽出手段により抽出されたバンクを、前記マージ用バンクに設定するための設定手段とをさらに含む、請求項１に記載のファイルシステム。
【請求項５】
前記処理手段は、
前記関連するデータが格納されていたデータバンクを初期化して、新たな更新データ用バンクに設定するための更新データ用バンク設定手段と、
前記更新データ用バンクであったバンクを初期化して、新たなマージ用バンクに設定するためのマージ用バンク設定手段とをさらに含む、請求項１に記載のファイルシステム。
【請求項６】
前記処理手段は、
前記設定されたデータバンクが最新のデータバンクであることを示す情報を作成するための作成手段をさらに含む、請求項５に記載のファイルシステム。
【請求項７】
前記ファイルシステムは、
予め定められた第２の条件が満足されると、前記更新データ用バンクに格納されたデータに関する管理情報を、前記不揮発性半導体記憶装置に格納するための管理情報格納手段と、
前記管理情報が格納されたことに応答して、前記更新データバンクの各ブロック毎に、前記更新データに対応付けて、前記管理情報が格納されたことを示す情報を格納するための情報格納手段とをさらに含む、請求項１に記載のファイルシステム。
【請求項８】
前記最新データ選択手段は、前記更新データ用バンクに格納された更新データの中から、各ブロック毎に最新の更新データであって、前記管理情報が格納されたことを示す情報が対応付けられた更新データを選択するための手段を含む、請求項７に記載のファイルシステム。
【請求項９】
前記更新データ用バンク設定手段は、前記関連するデータが格納されていたバンクを初期化して、前記初期化されたバンクに、前記管理情報が格納されたことを示す情報が対応付けられていない更新データを格納して、新たな更新データ用バンクに設定するための手段を含む、請求項７に記載のファイルシステム。
【請求項１０】
前記第２の条件は、データ書換命令に対応する複数のブロックに対する更新が終了したという条件である、請求項７に記載のファイルシステム。
【請求項１１】
前記第２の条件は、前記更新データ用バンクに、空きブロックがないという条件である、請求項７に記載のファイルシステム。
【請求項１２】
前記ファイルシステムは、
書込まれるデータの容量が、更新データ用バンクの大きさよりも大きい場合には、更新データ用のバンクの大きさ以下の容量のデータに分割するための分割手段をさらに含み、
前記第２の条件は、前記分割されたデータが書込まれたという条件である、請求項７に記載のファイルシステム。
【請求項１３】
前記ファイルシステムは、
書込まれるデータの容量が、更新データ用バンクの大きさよりも大きい場合には、マージ用バンクの大きさと同じ容量のデータに分割するための分割手段と、
前記分割されたデータをマージ用バンクに格納するための手段とをさらに含む、請求項７に記載のファイルシステム。
【請求項１４】
ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含み、揮発性半導体装置は、少なくとも１つの更新データ用バンクを含み、各前記バンクは複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割され、
前記ファイルシステムは、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納するための更新データ格納手段と、
予め定められた第１の条件が満足されると、前記更新データ用バンクに含まれる複数のブロックに格納された更新データの中から、各ブロックに対する最新の更新データを選択するための最新データ選択手段と、
前記最新データ選択手段に接続され、前記選択された最新の更新データを処理するための処理手段とを含み、
前記処理手段は、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納するための第１のマージデータ格納手段と、
前記データバンクから、前記最新の更新データに関連するデータを選択するための関連データ選択手段と、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納するための第２のマージデータ格納手段と、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定するための設定手段とを含む、ファイルシステム。
【請求項１５】
前記第１の条件は、前記更新データ用バンクに、空きブロックがないという条件である、請求項１４に記載のファイルシステム。
【請求項１６】
ファイルシステムを制御する方法であって、前記ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含み、各前記バンクは、複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割され、
前記ファイルシステムを制御する方法は、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納する更新データ格納ステップと、
予め定められた第１の条件が満足されると、前記更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、
前記選択された最新の更新データを処理する処理ステップとを含み、
前記処理ステップは、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、
前記データバンクから、前記最新の更新データに関連するデータを選択する関連データ選択ステップと、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む、ファイルシステム制御方法。
【請求項１７】
ファイルシステムを制御する方法であって、前記ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含み、揮発性半導体装置は、少なくとも１つの更新データ用バンクを含み、各前記バンクは複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割され、
ファイルシステム制御方法は、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納する更新データ格納ステップと、
予め定められた第１の条件が満足されると、前記更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、
前記選択された最新の更新データを処理する処理ステップとを含み、
前記処理ステップは、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、
前記データバンクから、前記最新の更新データに関連するデータを選択する関連データ選択ステップと、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む、ファイルシステム制御方法。
【請求項１８】
ファイルシステムを制御するためのプログラムであって、前記ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含み、各前記バンクは、複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割され、
前記プログラムはコンピュータに、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納する更新データ格納ステップと、
予め定められた第１の条件が満足されると、前記更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、
前記選択された最新の更新データを処理する処理ステップとを実行させ、
前記処理ステップは、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、
前記データバンクから、前記最新の更新データに関連するデータを選択する関連データ選択ステップと、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む、プログラム。
【請求項１９】
ファイルシステムを制御するためのプログラムであって、前記ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含み、揮発性半導体装置は、少なくとも１つの更新データ用バンクを含み、各前記バンクは複数のブロックを含み、前記不揮発性半導体記憶装置は、前記バンク単位で消去が可能であり、前記不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割され、
前記プログラムはコンピュータに、
データ書換命令に対応する更新データを、前記更新データ用バンクに格納する更新データ格納ステップと、
予め定められた第１の条件が満足されると、前記更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、
前記選択された最新の更新データを処理する処理ステップとを実行させ、
前記処理ステップは、
前記選択された最新の更新データを、前記マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、
前記データバンクから、前記最新の更新データに関連するデータを選択する関連データ選択ステップと、
前記選択されたデータを、前記マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、
前記最新の更新データと前記最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む、プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムのファイルシステムに関し、特に、フラッシュメモリ等の不揮発性半導体記憶装置を用いたファイルシステムに関する。
【０００２】
【従来の技術】
フラッシュメモリは、電気的に内容を書き換えることができるＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM)の一種であって、ＤＲＡＭ（Dynamic Random Access Memory）より安価である、バックアップ電源が不要である、ビットの変更が不可逆的である、データの消去はバンク単位である、バンクの消去に時間を要する、バンクの消去回数に限界があるという特徴を有する。
【０００３】
このような特徴を有するフラッシュメモリは、携帯電話、ＰＤＡ（Personal Digital Assistant）、デジタルスチルカメラなどにおいて、データ記憶用デバイスとして広く用いられている。これらの機器において、記憶するデータの種類が多くなり、データの保存、削除、移動等を頻繁に行なうため、フラッシュメモリ上で動作するファイルシステムが必要になる。フラッシュメモリは、ビットの変更が不可逆的（ビット１から０には変更できるが、逆のビット０から１には無制限に変更できない）であるという特徴を有するため、フラッシュメモリ上でファイルシステムを構築する場合には、以下のような問題点がある。すなわち、ファイルの内容を変更すると、その度にバンクを消去して、変更後の内容を書込まなければならない。本発明に関連するメモリについて、図を用いて説明する。
【０００４】
図４８に、本発明に関連するメモリの構造を示す。図４８に示すように、このメモリ１２２は、フラッシュメモリ２００とＲＡＭ３００とを含む。フラッシュメモリ２００は、３１個のデータ用バンク２１０と、１個のマージ用バンクとを含む。１個のバンクは、１００個のファイルブロックを含む。ＲＡＭ３００は、キャッシュメモリとして１個のファイルブロックを含む。ファイルの書換え命令が実行されると、ファイルに書込まれるデータがキャッシュメモリであるＲＡＭ３００に書込まれ、その後、フラッシュメモリ２００がアクセスされて、そのデータが所定のファイルブロックに書込まれる。
【０００５】
図４９〜図５３を参照して、このメモリの動作について説明する。以下の説明では、ファイルブロック（１００）、ファイルブロック（２１０）、ファイルブロック（２５０）、ファイルブロック（３００）、ファイルブロック（３０１）の順序でデータが書込まれると想定する。図面中の丸数字の昇順に動作が進む。以下の数字と丸数字とは対応する。
【０００６】
１）マージ用バンク２２０である第３１番目のバンクが初期状態で（ビットが全て１）、１番目の書込み対象のファイルブロック（１００）がフラッシュメモリ２００のデータ用バンク２１０の第１番目のバンクから、ＲＡＭ３００のエントリＣ（０）にコピーされる。
【０００７】
２）ＲＡＭ３００のエントリＣ（０）にコピーされたファイルブロック（１００）のデータが更新される。
【０００８】
３）ＲＡＭ３００のエントリＣ（０）のファイルブロック（１００）が、マージ用バンク２２０である第３１番目のバンクにコピーされる。
【０００９】
４）データ用バンク２１０の中の第１番目のバンクから、ファイルブロック（１００）以外のファイルブロックがマージ用バンク２２０である第３１番目のバンクにコピーされる。
【００１０】
５）第１番目のバンクが消去されて初期状態にされ、この第１番目のバンクが新たなマージ用バンク２２０になる。第３１番目のバンクには、更新されたファイルブロック（１００）を含む新たなファイルブロック（１００）〜ファイルブロック（１９９）が記憶されている。
【００１１】
６）マージ用バンク２２０である第１番目のバンクが初期状態で、２番目の書込み対象のファイルブロック（２１０）がフラッシュメモリ２００のデータ用バンク２１０の第２番目のバンクから、ＲＡＭ３００のエントリＣ（０）にコピーされる。
【００１２】
７）ＲＡＭ３００のエントリＣ（０）にコピーされたファイルブロック（２１０）のデータが更新される。
【００１３】
８）ＲＡＭ３００のエントリＣ（０）のファイルブロック（２１０）が、マージ用バンク２２０である第１番目のバンクにコピーされる。
【００１４】
９）データ用バンク２１０の中の第２番目のバンクから、ファイルブロック（２１０）以外のファイルブロックがマージ用バンク２２０である第１番目のバンクにコピーされる。
【００１５】
１０）第２番目のバンクが消去されて初期状態にされ、この第２番目のバンクが新たなマージ用バンク２２０になる。第１番目のバンクには、更新されたファイルブロック（２１０）を含む新たなファイルブロック（２００）〜ファイルブロック（２９９）が記憶されている。
【００１６】
１１）マージ用バンク２２０である第２番目のバンクが初期状態で、３番目の書込み対象のファイルブロック（２５０）がフラッシュメモリ２００のデータ用バンク２１０の第２番目のバンクから、ＲＡＭ３００のエントリＣ（０）にコピーされる。
【００１７】
１２）ＲＡＭ３００のエントリＣ（０）にコピーされたファイルブロック（２５０）のデータが更新される。
【００１８】
１３）ＲＡＭ３００のエントリＣ（０）のファイルブロック（２５０）が、マージ用バンク２２０である第２番目のバンクにコピーされる。
【００１９】
１４）データ用バンク２１０の中の第２番目のバンクから、ファイルブロック（２５０）以外のファイルブロックがマージ用バンク２２０である第２番目のバンクにコピーされる。
【００２０】
１５）第１番目のバンクが消去されて初期状態にされ、この第１番目のバンクが新たなマージ用バンク２２０になる。第２番目のバンクには、更新されたファイルブロック（２５０）を含む新たなファイルブロック（２００）〜ファイルブロック（２９９）が記憶されている。
【００２１】
１６）マージ用バンク２２０である第１番目のバンクが初期状態で、４番目の書込み対象のファイルブロック（３００）がフラッシュメモリ２００のデータ用バンク２１０の第３番目のバンクから、ＲＡＭ３００のエントリＣ（０）にコピーされる。
【００２２】
１７）ＲＡＭ３００のエントリＣ（０）にコピーされたファイルブロック（３００）のデータが更新される。
【００２３】
１８）ＲＡＭ３００のエントリＣ（０）のファイルブロック（３００）が、マージ用バンク２２０である第１番目のバンクにコピーされる。
【００２４】
１９）データ用バンク２１０の中の第３番目のバンクから、ファイルブロック（３００）以外のファイルブロックがマージ用バンク２２０である第１番目のバンクにコピーされる。
【００２５】
２０）第３番目のバンクが消去されて初期状態にされ、この第３番目のバンクが新たなマージ用バンクになる。第１番目のバンクには、更新されたファイルブロック（３００）を含む新たなファイルブロック（３００）〜ファイルブロック（３９９）が記憶されている。
【００２６】
２１）マージ用バンク２２０である第３番目のバンクが初期状態で、５番目の書込み対象のファイルブロック（３０１）がフラッシュメモリ２００のデータ用バンク２１０の第１番目のバンクから、ＲＡＭ３００のエントリＣ（０）にコピーされる。
【００２７】
２２）ＲＡＭ３００のエントリＣ（０）にコピーされたファイルブロック（３０１）のデータが更新される。
【００２８】
２３）ＲＡＭ３００のエントリＣ（０）のファイルブロック（３０１）が、マージ用バンク２２０である第３番目のバンクにコピーされる。
【００２９】
２４）データ用バンク２１０の中の第１番目のバンクから、ファイルブロック（３０１）以外のファイルブロックがマージ用バンク２２０である第３番目のバンクにコピーされる。
【００３０】
２５）第１番目のバンクが消去されて初期状態にされ、この第１番目のバンクが新たなマージ用バンク２２０になる。第３番目のバンクには、更新されたファイルブロック（３０１）を含む新たなファイルブロック（３００）〜ファイルブロック（３９９）が記憶されている。
【００３１】
このようにして、５個のファイルブロックを更新するのに、バンクを５回消去する必要がある。前述の説明のように、このようなバンク単位の消去に必要とする時間は長く、消去の回数には一定の制限がある。
【００３２】
【発明が解決しようとする課題】
しかしながら、従来のメモリでは、バンクの消去が頻繁に発生するため、実行速度が遅くなるとともに、フラッシュメモリの寿命が短くなる。また、従来のメモリでは、予期しないタイミングで電源が切られたり、リセットされたりすると、ファイルシステム全体が破壊されて、再フォーマットしないと使用できなくなる場合がある。このような事態になると、記憶されていたデータは消滅する。
【００３３】
本発明は、上述の課題を解決するためになされたものであって、フラッシュメモリを用いて、予期しない電源遮断に対してもバックアップ機能を有し、かつ高速および長寿命のファイルシステム、ファイルシステム制御方法およびファイルシステムを制御するためのプログラムを提供することである。
【００３４】
【課題を解決するための手段】
第１の発明に係るファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含む。各バンクは、複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割される。ファイルシステムは、データ書換命令に対応する更新データを、更新データ用バンクに格納するための更新データ格納手段と、予め定められた第１の条件が満足されると、更新データ用バンクに格納された更新データの中から、最新の更新データを選択するための最新データ選択手段と、最新データ選択手段に接続され、選択された最新の更新データを処理するための処理手段とを含む。処理手段は、選択された最新の更新データを、マージ用バンクの第１のブロックに格納するための第１のマージデータ格納手段と、データバンクから、最新の更新データに関連するデータを選択するための関連データ選択手段と、選択されたデータを、マージ用バンクの第２のブロックに格納するための第２のマージデータ格納手段と、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定するための設定手段とを含む。
【００３５】
第１の発明によると、不揮発性半導体記憶装置として、たとえばフラッシュメモリを実装する。データ書換命令が発生すると、その命令に対応する更新データが更新データ用バンクの空きブロックに格納される。たとえば、それが繰返されて、更新データ用バンクの空きブロックがない状態になると、更新データ用バンクの中から、最新の更新データが選択される。選択された最新の更新データがマージ用バンクの第１のブロックに、最新の更新データに関連するデータがマージ用バンクの第２のブロックに、格納される。具体的には、ある１つのバンクに第０のブロックから第９９のブロックまでの１００個のブロックを含む場合を説明する。第０のブロックに格納されるデータが、更新データ用バンクに格納されている場合、第０のブロックに対応する更新データの中で最新のものを調べ、そのブロックがマージ用バンクの第１のブロックに、第１〜第９９の９９個のブロックが関連するデータとしてマージ用バンクの第２のブロックに格納される。１００個のブロックが格納されたマージ用バンクが、新たなデータバンクに設定される。これにより、更新データ用バンクの空きブロックがなくなるまでは、更新データ用バンクに更新データが記憶される。更新データ用バンクの空きブロックがなくなると、その更新データ用バンクの中の全更新データに対して処理が行なわれるが、同一ブロックの更新データが複数存在する場合は、その中で最新の更新データに対してのみ処理が行なわれる。また、同一バンクに含まれるブロックの更新データに対する処理は同時に行われるので、最大で１００ブロック分の更新データに対する処理においても１回の消去で済む。データ書換命令が発生する毎にその命令に関するデータが格納されたバンクに対してバンクの消去が実行される場合に比較して、大幅に消去の回数を減少させることができる。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを提供することができる。
【００３６】
第２の発明に係るファイルシステムは、第１の発明の構成に加えて、第１の条件は、更新データ用バンクに、空きブロックがないという条件である。
【００３７】
第２の発明によると、更新データ用バンクの空きブロックがなくなるまでは、更新データの処理が実行されず、バンクの消去も発生しない。
【００３８】
第３の発明に係るファイルシステムは、第１の発明の構成に加えて、２以上のブロックを格納する揮発性半導体記憶装置をさらに含む。更新データ格納手段は、更新前のデータを、揮発性半導体記憶装置のブロックに格納するための手段と、揮発性半導体記憶装置のブロックの中から、データ書換命令に対応するデータが格納されたブロックを選択するための手段と、選択されたブロックに格納された、更新前のデータを更新するための手段と、更新されたデータを、更新データ用バンクに格納するための手段とを含む。
【００３９】
第３の発明によると、揮発性半導体記憶装置としてＲＡＭを実装する。データ書換命令が発生すると、その命令に対応する更新データがＲＡＭに格納される。次のデータ書換命令が、先ほど更新されたデータを再び更新する場合、ＲＡＭに格納された更新データを更新することができる。これにより、更新データ用バンクの空きブロックがなくなる回数を減少させることができ、その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを提供することができる。
【００４０】
第４の発明に係るファイルシステムは、第１の発明の構成に加えて、複数のデータバンクの中から、全てのブロックが初期化された状態であるバンクを抽出するための抽出手段と、抽出手段により抽出されたバンクを、マージ用バンクに設定するための設定手段とをさらに含む。
【００４１】
第４の発明によると、抽出手段は、全てのブロックが初期化された状態であるバンクを抽出する。これにより、繰返し同じバンクへのデータ書込命令が発生しても、同じバンクがマージ用バンクに設定されることがなくなり、特定のバンクが消去されることを回避できる。その結果、バンクの消去回数が平均化されて、極端に消去回数の多いバンクがなくなり、より長寿命のファイルシステムを提供することができる。
【００４２】
第５の発明に係るファイルシステムは、第１の発明の構成に加えて、処理手段は、関連するデータが格納されていたデータバンクを初期化して、新たな更新データ用バンクに設定するための更新用バンク設定手段と、更新データ用バンクであったバンクを初期化して、新たなマージ用バンクに設定するためのマージ用バンク設定手段とをさらに含む。
【００４３】
第５の発明によると、データバンク、更新用バンクおよびマージ用バンクが、入れ替わるので、同じ更新データ用バンクに更新データが書込まれることを回避できる。その結果、極端に消去回数の多いバンクがなくなり、より長寿命のファイルシステムを提供することができる。
【００４４】
第６の発明に係るファイルシステムは、第５の発明の構成に加えて、処理手段は、設定されたデータバンクが最新のデータバンクであることを示す情報を作成するための作成手段をさらに含む。
【００４５】
第６の発明によると、新たなデータバンクの作成後であって、関連するデータが格納されていたデータバンクを初期化する前に、電源が遮断されると、同じデータバンクが並存する。そのような場合でも、作成手段により作成された最新のデータバンクであることを示す情報に基づいて、新たに作成されたデータバンクを特定できる。その結果、フラッシュメモリを用いて、予期しない電源遮断に対してもバックアップ機能を有するファイルシステムを提供することができる。
【００４６】
第７の発明に係るファイルシステムは、第１の発明の構成に加えて、予め定められた第２の条件が満足されると、更新データ用バンクに格納されたデータに関する管理情報を、不揮発性半導体記憶装置に格納するための管理情報格納手段と、管理情報が格納されたことに応答して、更新データバンクの各ブロック毎に、更新データに対応付けて、管理情報が格納されたことを示す情報を格納するための情報格納手段とをさらに含む。
【００４７】
第７の発明によると、たとえば、データ書換命令に対応する複数のブロックに対する更新が終了すると、管理情報格納手段により、管理情報がフラッシュメモリに格納される。更新データバンクのこれら複数のブロックには、管理情報が格納されたことを示す情報を格納される。これにより、フラッシュメモリに管理情報が格納されたデータと、そうではないデータとを、管理情報が格納されたこと表わす情報に基づいて識別できる。電源が遮断されても、この情報に基づいて、管理情報がフラッシュメモリに格納されているか否かを判断できる。電源再投入時には、フラッシュメモリに格納された管理情報に基づいて、データを再現することができる。その結果、フラッシュメモリを用いて、予期しない電源遮断に対してもバックアップ機能を有するファイルシステムを提供することができる。
【００４８】
第８の発明に係るファイルシステムは、第７の発明の構成に加えて、最新データ選択手段は、更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データであって、管理情報が格納されたことを示す情報が対応付けられた更新データを選択するための手段を含む。
【００４９】
第８の発明によると、更新データの中から選択される更新データは、管理情報が格納されている更新データである。これにより、フラッシュメモリに管理情報が格納された更新データを、処理対象の更新データとして選択できる。フラッシュメモリに管理情報が格納されている更新データに基づいて処理が実行される。この処理の途中で電源遮断が発生しても、すでに管理情報がフラッシュメモリに格納されている更新データに基づいて処理が行なわれているので、電源再投入時にはフラッシュメモリに格納された管理情報に基づいて、データを再現できる。その結果、十分なバックアップ機能を有するファイルシステムを提供することができる。
【００５０】
第９の発明に係るファイルシステムは、第７の発明の構成に加えて、更新用バンク設定手段は、関連するデータが格納されていたバンクを初期化して、初期化されたバンクに、管理情報が格納されたことを示す情報が対応付けられていない更新データを格納して、新たな更新データ用バンクに設定するための手段を含む。
【００５１】
第９の発明によると、管理情報がフラッシュメモリに格納されていない更新データは、更新データ用バンクに格納する。これにより、更新データ用バンクの空きブロックがなくなった場合であっても、フラッシュメモリに管理情報が格納されていない更新データを更新処理の対象として、引継ぐことができる。
【００５２】
第１０の発明に係るファイルシステムは、第７の発明の構成に加えて、第２の条件は、データ書換命令に対応する複数のブロックに対する更新が終了したという条件である。
【００５３】
第１０の発明によると、データ書換命令によるデータの書換えが複数のブロックにおよぶ場合、その複数のブロックに対する更新が終了すると、更新データ用バンクに格納されたデータに関する管理情報が、フラッシュメモリに格納される。
【００５４】
第１１の発明に係るファイルシステムは、第７の発明の構成に加えて、第２の条件は、更新データ用バンクに、空きブロックがないという条件である。
【００５５】
第１１の発明によると、更新データ用バンクの空きブロックがなくなるまでは、管理情報の処理が実行されず、バンクの消去も発生しない。
【００５６】
第１２の発明に係るファイルシステムは、第７の発明の構成に加えて、書込まれるデータの容量が、更新データ用バンクの大きさよりも大きい場合には、更新データ用のバンクの大きさ以下の容量のデータに分割するための分割手段をさらに含む。第２の条件は、分割されたデータが書込まれたという条件である。
【００５７】
第１２の発明によると、更新データ用バンクの大きさよりも大きなデータでも書込命令を実行できる。
【００５８】
第１３の発明に係るファイルシステムは、第７の発明の構成に加えて、書込まれるデータの容量が、更新データ用バンクの大きさよりも大きい場合には、マージ用バンクの大きさと同じ容量のデータに分割するための分割手段と、分割されたデータをマージ用バンクに格納するための手段とをさらに含む。
【００５９】
第１３の発明によると、更新データ用バンクの大きさよりも大きなデータでも、そのデータをマージ用バンクの大きさに分割して、更新データ用バンクを経由することなく、マージ用バンクに格納できる。これにより、更新データ用バンクへの消去回数を減少させることができる。
【００６０】
第１４の発明に係るファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含む。揮発性半導体装置は、少なくとも１つの更新データ用バンクを含む。各バンクは複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割される。ファイルシステムは、データ書換命令に対応する更新データを、更新データ用バンクに格納するための更新データ格納手段と、予め定められた第１の条件が満足されると、更新データ用バンクに含まれる複数のブロックに格納された更新データの中から、各ブロックに対する最新の更新データを選択するための最新データ選択手段と、最新データ選択手段に接続され、選択された最新の更新データを処理するための処理手段とを含む。処理手段は、選択された最新の更新データを、マージ用バンクの第１のブロックに格納するための第１のマージデータ格納手段と、データバンクから、最新の更新データに関連するデータを選択するための関連データ選択手段と、選択されたデータを、マージ用バンクの第２のブロックに格納するための第２のマージデータ格納手段と、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定するための設定手段とを含む。
【００６１】
第１４の発明によると、バックアップ機能を有する揮発性半導体記憶装置として、たとえばＳＲＡＭ（Static Random Access Memory）を実装する。このＳＲＡＭは、更新データ用バンクを含む。ＳＲＡＭは、データの書込みおよび読出しに関する制限がないため、更新用データ用バンクには、同じブロックに対する書込命令が発生すると、ＳＲＡＭ上の同じブロックにデータが書込まれる。これにより、ＳＲＡＭ上の更新データ用バンクの空きブロックがなくなる回数が減少する。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを提供することができる。
【００６２】
第１５の発明に係るファイルシステムは、第１４の発明の構成に加えて、第１の条件は、更新データ用バンクに、空きブロックがないという条件である。
【００６３】
第１５の発明によると、更新データ用バンクの空きブロックがなくなると、更新データの処理が実行される。この更新データの処理が実行されるタイミングは、ＳＲＡＭ上に１００個のブロックを有する更新データ用バンクが設定されている場合、１０１種類目のブロックに対する書込命令が発生したタイミングである。これにより、ＳＲＡＭ上の更新データ用バンクの空きブロックがなくなる回数が減少する。
【００６４】
第１６の発明に係る制御方法は、ファイルシステムを制御する方法である。このファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含む。各バンクは、複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割される。ファイルシステムを制御する方法は、データ書換命令に対応する更新データを、更新データ用バンクに格納する更新データ格納ステップと、予め定められた第１の条件が満足されると、更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、選択された最新の更新データを処理する処理ステップとを含む。処理ステップは、選択された最新の更新データを、マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、データバンクから、最新の更新データに関連するデータを選択する関連データ選択ステップと、選択されたデータを、マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む。
【００６５】
第１６の発明によると、不揮発性半導体記憶装置として、たとえばフラッシュメモリを実装する。データ書換命令が発生すると、その命令に対応する更新データが更新データ用バンクの空きブロックに格納される。たとえば、それが繰返されて、更新データ用バンクの空きブロックがなくなると、更新データ用バンクの中から、各ブロックに対する最新の更新データが選択される。選択された最新の更新データがマージ用バンクの第１のブロックに、最新の更新データに関連するデータがマージ用バンクの第２のブロックに、格納される。これにより、更新データ用バンクの空きブロックがなくなるまでは、更新データ用バンクに更新データが記憶される。更新データ用バンクの空きブロックがなくなると、その更新データ用バンクの中の全更新データに対して処理が行なわれるが、同一ブロックの更新データが複数存在する場合は、その中で最新の更新データに対してのみ処理が行なわれる。また、同一バンクに含まれるブロックの更新データに対する処理は同時に行なわれるので、最大で１００ブロック分の更新データに対する処理においても１回の消去で済む。データ書換命令が発生する毎にその命令に関するデータが格納されたバンクに対してバンクの消去が実行される場合に比較して、大幅に消去の回数を減少させることができる。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを制御する方法を提供することができる。
【００６６】
第１７の発明に係る制御方法は、ファイルシステムを制御する方法である．ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含む。揮発性半導体装置は、少なくとも１つの更新データ用バンクを含む。各バンクは複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割される。ファイルシステムを制御する方法は、データ書換命令に対応する更新データを、更新データ用バンクに格納する更新データ格納ステップと、予め定められた第１の条件が満足されると、更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、選択された最新の更新データを処理する処理ステップとを含む。処理ステップは、選択された最新の更新データを、マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、データバンクから、最新の更新データに関連するデータを選択する関連データ選択ステップと、選択されたデータを、マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む。
【００６７】
第１７の発明によると、バックアップ機能を有する揮発性半導体記憶装置として、たとえばＳＲＡＭを実装する。このＳＲＡＭは、更新データ用バンクを含む。ＳＲＡＭは、データの書込みおよび読出しに関する制限がないため、更新用データ用バンクには、同じブロックに対する書込命令が発生すると、ＳＲＡＭ上の同じブロックにデータが書込まれる。これにより、ＳＲＡＭ上の更新データ用バンクの空きブロックがなくなる回数が減少する。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを制御する方法を提供することができる。
【００６８】
第１８の発明に係るプログラムは、ファイルシステムを制御するためのプログラムである。ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置を含む。各バンクは、複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。複数のバンクは、少なくとも１つの更新データ用バンクと、少なくとも１つのマージ用バンクと、データバンクとに分割される。プログラムはコンピュータに、データ書換命令に対応する更新データを、更新データ用バンクに格納する更新データ格納ステップと、予め定められた第１の条件が満足されると、更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、選択された最新の更新データを処理する処理ステップとを実行させる。処理ステップは、選択された最新の更新データを、マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、データバンクから、最新の更新データに関連するデータを選択する関連データ選択ステップと、選択されたデータを、マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む。
【００６９】
第１８の発明によると、不揮発性半導体記憶装置として、たとえばフラッシュメモリを実装する。データ書換命令が発生すると、その命令に対応する更新データが更新データ用バンクの空きブロックに格納される。たとえば、それが繰返されて、更新データ用バンクの空きブロックがなくなると、更新データ用バンクの中から、各ブロックに対する最新の更新データが選択される。選択された最新の更新データがマージ用バンクの第１のブロックに、最新の更新データに関連するデータがマージ用バンクの第２のブロックに、格納される。これにより、更新データ用バンクの空きブロックがなくなるまでは、更新データ用バンクに更新データが記憶される。更新データ用バンクの空きブロックがなくなると、その更新データ用バンクの中の全更新データに対して処理が行なわれるが、同一ブロックの更新データが複数存在する場合は、その中で最新の更新データに対してのみ処理が行なわれる。また、同一バンクに含まれるブロックの更新データに対する処理は同時に行なわれるので、最大で１００ブロック分の更新データに対する処理においても１回の消去で済む。データ書換命令が発生する毎にその命令に関するデータが格納されたバンクに対してバンクの処理が実行される場合に比較して、大幅に消去の回数を減少させることができる。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを制御するためのプログラムを提供することができる。
【００７０】
第１９の発明に係るプログラムは、ファイルシステムを制御するためのプログラムである。ファイルシステムは、複数のバンクを有する不揮発性半導体記憶装置と、バックアップ機能を有する揮発性半導体記憶装置とを含む。揮発性半導体装置は、少なくとも１つの更新データ用バンクを含む。各バンクは複数のブロックを含む。不揮発性半導体記憶装置は、バンク単位で消去が可能である。不揮発性半導体装置の複数のバンクは、少なくとも１つのマージ用バンクと、データバンクとに分割される。プログラムはコンピュータに、データ書換命令に対応する更新データを、更新データ用バンクに格納する更新データ格納ステップと、予め定められた第１の条件が満足されると、更新データ用バンクに格納された更新データの中から、各ブロックに対する最新の更新データを選択する最新データ選択ステップと、選択された最新の更新データを処理する処理ステップとを実行させる。処理ステップはコンピュータに、選択された最新の更新データを、マージ用バンクの第１のブロックに格納する第１のマージデータ格納ステップと、データバンクから、最新の更新データに関連するデータを選択する関連データ選択ステップと、選択されたデータを、マージ用バンクの第２のブロックに格納する第２のマージデータ格納ステップと、最新の更新データと最新の更新データに関連するデータとが格納されたマージ用バンクを、新たなデータバンクに設定する設定ステップとを含む。
【００７１】
第１９の発明によると、バックアップ機能を有する揮発性半導体記憶装置として、たとえばＳＲＡＭを実装する。このＳＲＡＭは、更新データ用バンクを含む。ＳＲＡＭは、データの書込みおよび読出しに関する制限がないため、更新用データ用バンクには、同じブロックに対する書込命令が発生すると、ＳＲＡＭ上の同じブロックにデータが書込まれる。これにより、ＳＲＡＭ上の更新データ用バンクの空きブロックがなくなる回数が減少する。その結果、フラッシュメモリを用いた高速および長寿命のファイルシステムを制御するためのプログラムを提供することができる。
【００７２】
【発明の実施の形態】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
【００７３】
＜第１の実施の形態＞
本実施の形態に係るファイルシステムは、バンク単位に消去が可能な不揮発性ＲＯＭ（フラッシュメモリ）のファイル制御に関するものである。このファイルシステムは、特に、何回もデータを書換える用途でフラッシュメモリを搭載する機器（携帯電話、ＰＤＡ、ディジタルスチルカメラ等の携帯機器）に使用される。
【００７４】
図１に、携帯機器１０２０の構成をブロック図形式で示す。図１に示すように、携帯機器１０２０は、相互にバスで接続されたＣＰＵ（Central Processing Unit）１２００と、メモリ１２２０と、入力キー１１００と、液晶モニタ１０４０とを含む。本実施の形態に係るファイルシステムを制御するプログラムは、メモリ１２２０の不揮発性メモリ部分（フラッシュメモリ）に予め記憶される。図１に示した携帯機器のハードウェア自体は一般的なものである。したがって、本発明の本質的な部分は、メモリ１２２０などの記録媒体に記録されたソフトウェアである。
【００７５】
図２を参照して、メモリ１２２０の内部構造について説明する。メモリ１２２０は、フラッシュメモリ２０００とＲＡＭ３０００とを含む。フラッシュメモリ２０００は、データ用バンク２１００と、マージ用バンク２２００と、更新データ用バンク２３００とを含む。データ用バンク２１００は、３０個のバンクから構成される。マージ用バンク２２００および更新データ用バンク２３００は、それぞれ１個のバンクから構成される。すなわち、フラッシュメモリ２０００は、３２個のバンクから構成される。１個のバンクは、１００個のファイルブロックを含む。それぞれのファイルブロックは、データ保存領域と管理テーブル記憶領域とを含む。ＲＡＭ３０００は、キャッシュ領域３１００と、ファイルブロック管理テーブル記憶領域３２００と、システム記憶領域３３００とを含む。キャッシュ領域は、４個のファイルブロックから構成される。
【００７６】
本発明は、このような構成に限定されるものではなく、複数のファイルブロックから構成されるＲＡＭ３０００と、１個以上のバンクを含むマージ用バンク２２００と、１個以上のバンクを含む更新データ用バンク２３００と、３０個程度のバンクを含むデータ用バンク２１００とから構成されるものであれば、特に限定されない。
【００７７】
図３を参照して、さらにメモリ１２２０の内部構造を説明する。図３に示すように、データ用バンク２１００は、ファイルブロック（０）からファイルブロック（９９）までにより構成される第０番目のバンク、ファイルブロック（１００）からファイルブロック（１９９）までにより構成される第１番目のバンク、ファイルブロック（２００）からファイルブロック（２９９）までにより構成される第２番目のバンク、ファイルブロック（３００）からファイルブロック（３９９）までにより構成される第３番目のバンク、…、ファイルブロック（２９００）からファイルブロック（２９９９）までにより構成される第２９番目のバンクの３０個のバンクを含む。
【００７８】
マージ用バンク２２００は、ファイルブロック（３０００）からファイルブロック（３０９９）までにより構成される第３０番目のバンク、更新データ用バンク２３００は、ファイルブロック（３１００）からファイルブロック（３１９９）までにより構成される第３１番目のバンクから構成される。
【００７９】
更新データ用バンク２３００は、１００個のエントリ（Ｒ（０）、Ｒ（１）、Ｒ（２）、…、Ｒ（９６）、Ｒ（９７）、Ｒ（９８）、Ｒ（９９））により構成される。ＲＡＭ３０００のキャッシュ領域３１００は、４個のエントリ（Ｃ（０）、Ｃ（１）、Ｃ（２）、Ｃ（３））により構成される。
【００８０】
図４を参照して、ファイル構成について説明する。図４に、３個のファイルブロックから構成されるファイル構成を示す。ファイルブロックにはファイルサイズおよびタイムスタンプを記憶する領域がある。ファイルのサイズが大きくなり、図４に示すような３個のファイルブロックでは格納できなくなると、新たなファイルブロックが追加される。
【００８１】
図５を参照して、ファイルブロック管理テーブルについて説明する。図５に示すように、ファイルブロック管理テーブルは、全てのファイルブロックのエントリを記憶する。それぞれのファイルブロックごとにファイルブロックのステータスを記憶する。ステータスは、フラグと次のファイルブロック番号とを含む。フラグは、ファイルブロックの使用状態を示す識別符号である。たとえば、「０」が「未使用」、「１」が「ファイルとして使用」、「２」が「ディレクトリとして使用」というように設定される。
【００８２】
図６を参照して、本実施の形態に係るファイルシステムで実行される書込み処理の制御構造について説明する。
【００８３】
ステップ（以下、ステップをＳと略す。）１０００にて、ＣＰＵ１２００は、処理対象の命令が書込み命令であるか否かを判断する。処理対象の命令が書込み命令である場合には（Ｓ１０００にてＹＥＳ）、処理は、Ｓ１００２に移される。もしそうでないと（Ｓ１０００にてＮＯ）、処理はＳ１０００に戻され、書込み命令を待つ。
【００８４】
Ｓ１００２にて、ＣＰＵ１２００は、書込み命令に基づいて、書込み先であるＮ個のファイルブロックを決定する。このとき、書込み命令によりファイルに書込まれる情報は、データのみならず、タイムスタンプおよびサイズ等を含む。タイムスタンプおよびサイズは、ファイルブロックごとではなく、１個のファイルに対して１個のタイムスタンプおよびサイズとが記憶されるため、１個の書込み命令による書込み対象のファイルブロックは、多くの場合、２以上のファイルブロックにまたがる。
【００８５】
Ｓ１００４にて、ＣＰＵ１２００は、変数Ｉを初期化（Ｉ＝１）する。Ｓ１００６にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００（エントリＣ（０）〜Ｃ（３））内に、ファイルブロック（Ｉ）があるか否かを判断する。ＲＡＭ３０００のキャッシュ領域３１００にファイルブロック（Ｉ）があると（Ｓ１００６にてＹＥＳ）、処理は、Ｓ１０１４に移される。もしそうでないと（Ｓ１００６にてＮＯ）、処理は、Ｓ１００８に移される。
【００８６】
Ｓ１００８にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００に空きがないか否かを判断する。ＲＡＭ３０００のキャッシュ領域３１００に空きがないと（Ｓ１００８にてＹＥＳ）、処理はＳ１０１０に移される。もしそうでないと（Ｓ１００８にてＮＯ）、処理はＳ１０１２に移される。
【００８７】
Ｓ１０１０にて、ＣＰＵ１２００は、copy＿cache＿to＿bank処理を行なう。copy＿cache＿to＿bank処理の詳細については後述する。Ｓ１０１２にて、ＣＰＵ１２００は、copy＿bank＿to＿cache処理を行なう。copy＿bank＿to＿cache処理の詳細については後述する。
【００８８】
Ｓ１０１４にて、ＲＡＭ３０００のキャッシュ領域３１００内のファイルブロック（Ｉ）を更新する。Ｓ１０１６にて、ＣＰＵ１２００は、変数Ｉに１を加算する。Ｓ１０１８にて、ＣＰＵ１２００は、変数Ｉがファイルブロック数Ｎよりも大きいか否かを判断する。変数Ｉがファイルブロック数Ｎよりも大きい場合には（Ｓ１０１８にてＹＥＳ）、処理は、Ｓ１０２０に移される。もしそうでないと（Ｓ１０１８にてＮＯ）、処理は、Ｓ１００６に戻され、次のファイルブロックに対する処理が実行される。Ｓ１０２０にて、ＣＰＵ１２００は、コミット処理を行なう。このコミット処理の詳細については後述する。
【００８９】
図７を参照して、本実施の形態に係るファイルシステムで実行される読出し処理の制御構造について説明する。
【００９０】
Ｓ１１００にて、ＣＰＵ１２００は、処理対象の命令が読出し命令であるか否かを判断する。処理対象の命令が読出し命令である場合には（Ｓ１１００にてＹＥＳ）、処理は、Ｓ１１０２に移される。もしそうでないと（Ｓ１１００にてＮＯ）、処理はＳ１１００に戻され、読出し命令を待つ。
【００９１】
Ｓ１１０２にて、ＣＰＵ１２００は、読出し命令に基づいて、読出し先であるＮ個のファイルブロックを決定する。１個の読出し命令による読出し対象のファイルブロックは、多くの場合、２以上のファイルブロックにまたがる。
【００９２】
Ｓ１１０４にて、ＣＰＵ１２００は、変数Ｉを初期化（Ｉ＝１）する。Ｓ１１０６にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００（エントリＣ（０）〜Ｃ（３））内に、ファイルブロック（Ｉ）があるか否かを判断する。ＲＡＭ３０００のキャッシュ領域３１００にファイルブロック（Ｉ）があると（Ｓ１１０６にてＹＥＳ）、処理は、Ｓ１１１４に移される。もしそうでないと（Ｓ１１０６にてＮＯ）、処理は、Ｓ１１０８に移される。
【００９３】
Ｓ１１０８にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００に空きがないか否かを判断する。ＲＡＭ３０００のキャッシュ領域３１００に空きがないと（Ｓ１１０８にてＹＥＳ）、処理はＳ１１１０に移される。もしそうでないと（Ｓ１１０８にてＮＯ）、処理はＳ１１１２に移される。
【００９４】
Ｓ１１１０にて、ＣＰＵ１２００は、copy＿cache＿to＿bank処理を行なう。copy＿cache＿to＿bank処理の詳細については後述する。Ｓ１１１２にて、ＣＰＵ１２００は、copy＿bank＿to＿cache処理を行なう。copy＿bank＿to＿cache処理の詳細については後述する。
【００９５】
Ｓ１１１４にて、ＲＡＭ３０００のキャッシュ領域３１００内のファイルブロック（Ｉ）に格納されたデータを読出す。Ｓ１１１６にて、ＣＰＵ１２００は、変数Ｉに１を加算する。Ｓ１１１８にて、ＣＰＵ１２００は、変数Ｉがファイルブロック数Ｎよりも大きいか否かを判断する。変数Ｉがファイルブロック数Ｎよりも大きい場合には（Ｓ１１１８にてＹＥＳ）、この処理は、終了する。もしそうでないと（Ｓ１１１８にてＮＯ）、処理は、Ｓ１１０６に戻され、次のファイルブロックに対する処理が実行される。
【００９６】
図８を参照して、本実施の形態に係るファイルシステムで実行されるcopy＿bank＿to＿cache処理の制御構造について説明する。
【００９７】
Ｓ１２００にて、ＣＰＵ１２００は、ファイルブロック（Ｉ）が更新データ用バンク２３００にあるか否かを判断する。ファイルブロック（Ｉ）が更新データ用バンク２３００にある場合には（Ｓ１２００にてＹＥＳ）、処理はＳ１２０２へ移される。もしそうでないと（Ｓ１２００にてＮＯ）、処理はＳ１２０６へ移される。
【００９８】
Ｓ１２０２にて、ＣＰＵ１２００は、更新データ用バンク２３００にあるファイルブロック（Ｉ）のコミット済みフラグがセットされているか否かを判断する。更新データ用バンク２３００にあるファイルブロック（Ｉ）のコミット済みフラグがセットされている場合には（Ｓ１２０２にてＹＥＳ）、処理はＳ１２０４へ移される。もしそうでないと（Ｓ１２０２にてＮＯ）、処理はＳ１２０６へ移される。
【００９９】
Ｓ１２０４にて、ＣＰＵ１２００は、更新データ用バンク２３００からファイルブロック（Ｉ）をＲＡＭ３０００のキャッシュ領域３１００にコピーする。Ｓ１２０６にて、ＣＰＵ１２００は、データ用バンク２０００からファイルブロック（Ｉ）をＲＡＭ３０００のキャッシュ領域３１００にコピーする。Ｓ１２０４またはＳ１２０６の処理の後、copy＿bank＿to＿cache処理は終了する。
【０１００】
図９を参照して、本実施の形態に係るファイルシステムで実行されるcopy＿cache＿to＿bank処理の制御構造について説明する。
【０１０１】
Ｓ１３００にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００における空きでない最初のエントリを決定する。Ｓ１３０２にて、ＣＰＵ１２００は、決定されたエントリに記憶されたファイルブロックに変更があるか否かを判断する。決定されたエントリに記憶されたファイルブロックに変更がある場合には（Ｓ１３０２にてＹＥＳ）、処理はＳ１３０４へ移される。もしそうでないと（Ｓ１３０２にてＮＯ）、処理はＳ１３１４へ移される。
【０１０２】
Ｓ１３０４にて、ＣＰＵ１２００は、更新データ用バンク２３００に空きがないか否かを判断する。更新データ用バンク２３００に空きがない場合には（Ｓ１３０４にてＹＥＳ）、処理はＳ１３０６へ移される。もしそうでないと（Ｓ１３０４にてＮＯ）、処理はＳ１３１２へ移される。
【０１０３】
Ｓ１３０６にて、ＣＰＵ１２００は、merge処理を行なう。このmerge処理の詳細については後述する。
【０１０４】
Ｓ１３０８にて、ＣＰＵ１２００は、更新データ用バンク２３００に空きがないか否かを判断する。更新データ用バンク２３００に空きがない場合には（Ｓ１３０８にてＹＥＳ）、処理はＳ１３１０へ移される。もしそうでないと（Ｓ１３０８にてＮＯ）、処理はＳ１３１２へ移される。
【０１０５】
Ｓ１３１０にて、ＣＰＵ１２００は、更新データ用バンク２３００に含まれるファイルブロックのコミット済みフラグをセットする。このＳ１３１０の処理の後、処理はＳ１３０６へ戻される。
【０１０６】
Ｓ１３１２にて、ＣＰＵ１２００は、決定されたエントリのファイルブロックを更新データ用バンク２３００にコピーする。Ｓ１３１４にて、ＣＰＵ１２００は、決定されたエントリを開放する。このＳ１３１４の処理の後、このcopy＿cache＿to＿bankは終了する。
【０１０７】
図１０を参照して、本実施の形態に係るファイルシステムで実行されるmerge処理の制御構造について説明する。
【０１０８】
Ｓ１４００にて、ＣＰＵ１２００は、変数Ｊを初期化（Ｊ＝０）する。
Ｓ１４０２にて、ＣＰＵ１２００は、第Ｊ番目のバンクはデータ用バンクであるか否かを判断する。第Ｊ番目のバンクがデータ用バンクである場合には（Ｓ１４０２にてＹＥＳ）、処理はＳ１４０４へ移される。もしそうでないと（Ｓ１４０２にてＮＯ）、処理はＳ１４２２へ移される。
【０１０９】
Ｓ１４０４にて、ＣＰＵ１２００は、第Ｊ番目のバンクに含まれるファイルブロックが、更新データ用バンク２３００にあるか否かを判断する。第Ｊ番目のバンクに含まれるファイルブロックが、更新データ用バンク２３００にある場合には（Ｓ１４０４にてＹＥＳ）、処理はＳ１４０６へ移される。もしそうでないと（Ｓ１４０４にてＮＯ）、処理はＳ１４２２へ移される。
【０１１０】
Ｓ１４０６にて、ＣＰＵ１２００は変数Ｋを初期化（Ｋ＝０）する。
Ｓ１４０８にて、ＣＰＵ１２００は、第Ｊ番目のバンクの第Ｋ番目のファイルブロックが、更新データ用バンク２３００にあるファイルブロックであるか否かを判断する。第Ｊ番目のバンクの第Ｋ番目のファイルブロックが、更新データ用バンク２３００にあるファイルブロックである場合には（Ｓ１４０８にてＹＥＳ）、処理はＳ１４１０へ移される。もしそうでないと（Ｓ１４０８にてＮＯ）、処理はＳ１４１４へ移される。
【０１１１】
Ｓ１４１０にて、ＣＰＵ１２００は、そのファイルブロックのコミット済みフラグがセットされているか否かを判断する。そのファイルブロックのコミット済みフラグがセットされていると（Ｓ１４１０にてＹＥＳ）、処理はＳ１４１２へ移される。もしそうでないと（Ｓ１４１０にてＮＯ）、処理はＳ１４１４に移される。
【０１１２】
Ｓ１４１２にて、ＣＰＵ１２００は、更新データ用バンク２３００にある第Ｊ番目のバンクの第Ｋ番目のファイルブロックをマージ用バンクにコピーする。Ｓ１４１４にて、ＣＰＵ１２００は、データ用バンク２０００にある第Ｊ番目のバンクの第Ｋ番目のファイルブロックをマージ用バンク２２００にコピーする。
【０１１３】
Ｓ１４１６にて、ＣＰＵ１２００は、変数Ｋに１を加算する。Ｓ１４１８にて、ＣＰＵ１２００は、変数Ｋが、第Ｊ番目のバンクに含まれるファイルブロック数よりも大きいか否かを判断する。変数Ｋが、第Ｊ番目のバンクに含まれるファイルブロック数よりも大きい場合には（Ｓ１４１８にてＹＥＳ）、処理はＳ１４２０へ移される。もしそうでないと（Ｓ１４１８にてＮＯ）、処理Ｓ１４０８へ戻される。
【０１１４】
Ｓ１４２０にて、ＣＰＵ１２００は、マージ用バンク２２００を第Ｊ番目のバンクに対応した新たなデータ用バンクに、古い第Ｊ番目のデータ用バンクを消去してこれを新たなマージ用バンクに設定する。Ｓ１４２２にて、ＣＰＵ１２００は、変数Ｊに１を加算する。Ｓ１４２４にて、ＣＰＵ１２００は、変数Ｊが３２より大きいか否かを判断する。なお、このフラッシュメモリ２０００は３２個のバンクから構成されている。変数Ｊが３２より大きい場合には（Ｓ１４２４にてＹＥＳ）、処理はＳ１４２６へ移される。もしそうでないと（Ｓ１４２４にてＮＯ）、処理はＳ１４０２へ戻される。
【０１１５】
Ｓ１４２６にて、ＣＰＵ１２００は、更新データ用バンク２３００に含まれる、コミット済みフラグがリセットされたファイルブロックをマージ用バンクにコピーし、これを新たな更新データ用バンクに設定する。Ｓ１４２８にて、ＣＰＵ１２００は、古い更新データ用バンクを消去して、これを新たなマージ用バンクに設定する。
【０１１６】
図１１を参照して、本実施の形態の係るファイルシステムで実行されるコミット処理の制御構造について説明する。Ｓ１５００にて、ＣＰＵ１２００は、変数Ｌを初期化（Ｌ＝１）する。Ｓ１５０２にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００におけるエントリＣ（Ｌ）をcopy＿cache＿to＿bank処理の対象に決定する。Ｓ１５０４にて、ＣＰＵ１２００は、copy＿cache＿to＿bank処理を行なう。
【０１１７】
Ｓ１５０６にて、ＣＰＵ１２００は、変数Ｌに１を加算する。Ｓ１５０８にて、ＣＰＵ１２００は、変数ＬがＲＡＭ３０００のキャッシュ領域３１００のエントリ数よりも大きいか否かを判断する。変数ＬがＲＡＭ３０００のキャッシュ領域３１００のエントリ数よりも大きい場合には（Ｓ１５０８にてＹＥＳ）、処理はＳ１５１０へ移される。もしそうでないと（Ｓ１５０８にてＮＯ）、処理はＳ１５０２へ戻される。
【０１１８】
Ｓ１５１０にて、ＣＰＵ１２００は、ＲＡＭ３０００のファイル管理テーブルに変更があるか否かを判断する。ＲＡＭ３０００のファイル管理テーブルに変更がある場合には（Ｓ１５１０にてＹＥＳ）、処理はＳ１５１２へ移される。もしそうでないと（Ｓ１５１０にてＮＯ）、処理はＳ１５１４へ移される。
【０１１９】
Ｓ１５１２にて、ＣＰＵ１２００は、ＲＡＭ３０００のファイル管理テーブルの内容を、フラッシュメモリ２０００のファイル管理テーブル記憶領域にコピーする。Ｓ１５１４にて、ＣＰＵ１２００は、更新データ用バンク２３００に含まれるファイルブロックのコミット済みフラグをセットする。
【０１２０】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図１２〜図１９を参照して説明する。以下の説明では、１個の書込命令により、ファイルブロック（１００）、ファイルブロック（２１０）、ファイルブロック（２５０）、ファイルブロック（３００）、ファイルブロック（３０１）の順序で、データが書込まれると想定する。図１２〜図１９の中の丸数字の昇順に動作が進む。以下の数字と丸数字とは対応する。
【０１２１】
図１２に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが、更新データ用バンク２３００として第３１番目のバンクが設定されている。更新データ用バンク２３００は、エントリＲ（０）からＲ（９８）までの９９個のエントリが使用されており、エントリＲ（９９）の１個のエントリのみが空いている。更新データ用バンク２３００のエントリＲ（０）からＲ（９７）までの９８個のエントリは、コミット済みである。ＲＡＭ３０００のキャッシュ領域３１００は、エントリＣ（０）にファイルブロック（１００）が、エントリＣ（１）にファイルブロック（１５０）が格納されている。ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）およびＣ（３）は、空いている。
【０１２２】
１）１番目の書込み対象のファイルブロック（１００）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納されている。そのため、このエントリＣ（０）の内容が更新される。これで、ファイルブロック（１００）に対する書込み動作は終了する。
【０１２３】
２）２番目の書込み対象のファイルブロック（２１０）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリには格納されていないが、更新データ用バンク２３００のエントリＲ（９７）に格納されている。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）、Ｃ（３）が空いている。そのため、更新データ用バンク２３００のコミット済みのエントリＲ（９７）に格納されたファイルブロック（２１０）が、ＲＡＭ３１００のエントリＣ（２）に格納される。このとき、更新データ用バンク２３００の中のエントリＲ（９８）は、コミット済みではない。そのため、Ｒ（９８）のファイルブロック（２１０）のデータと、ファイル管理テーブルの内容とは、データの整合性が取れない可能性があるので、コミット済みではないデータが使用されず、コミット済みのデータが使用される。
【０１２４】
３）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）の内容が更新される。これで、ファイルブロック（２１０）に対する書込み動作は終了する。
【０１２５】
４）３番目の書込み対象のファイルブロック（２５０）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（３）が空いている。そのため、データバンク２１００の第２番目のバンクのファイルブロック（２５０）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（３）に格納される。
【０１２６】
５）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（３）の内容が更新される。これで、ファイルブロック（２５０）に対する書込み動作は終了する。
【０１２７】
６）４番目の書込み対象のファイルブロック（３００）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。そのため、データバンク２１００の第３番目のバンクのファイルブロック（３００）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリに格納される。しかしながら、ＲＡＭ３０００のキャッシュ領域３１００のエントリに空きがない。そのため、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を更新データ用バンクのエントリＲ（９９）に格納して、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を空きにする。
【０１２８】
７）データバンク２１００の第３番目のバンクのファイルブロック（３００）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。
【０１２９】
８）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（３００）に対する書込み動作は終了する。
【０１３０】
９）５番目の書込み対象のファイルブロック（３０１）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。そのため、データバンク２１００の第３番目のバンクのファイルブロック（３０１）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリに格納される。しかしながら、ＲＡＭ３０００のキャッシュ領域３１００のエントリに空きがなく、かつ更新データ用バンク２３００にも空きがない。そのため、更新データ用バンク２３００に空きを作成するために、更新データ用バンク２３００の中のコミット済みのファイルブロック（１００）の中で最新のＲ（９６）が、マージ用バンク２２００に格納される。
【０１３１】
１０）データ用バンク２１００の第１番目のバンクのファイルブロック（１００）以外のファイルブロック（ファイルブロック（１０１）〜ファイルブロック（１９９））が、マージ用バンク２２００に格納される。
【０１３２】
１１）第１番目のバンクを消去し、新たなマージ用バンク２２００とするとともに、第３０番目のバンクをデータ用バンク２１００とする。
【０１３３】
１２）更新データ用バンク２３００の中のコミット済みのファイルブロック（２１０）の中で最新のＲ（９７）が、マージ用バンク２２００に格納される。
【０１３４】
１３）データ用バンク２１００の第２番目のバンクのファイルブロック（２１０）以外のファイルブロック（ファイルブロック（２０１）〜ファイルブロック（２０９）およびファイルブロック（２１１）〜ファイルブロック（２９９））が、マージ用バンク２２００に格納される。
【０１３５】
１４）第２番目のバンクを消去し、新たなマージ用バンク２２００とするとともに、第１番目のバンクをデータ用バンク２１００とする。
【０１３６】
１５）更新データ用バンク２３００の中のコミット済みでないエントリＲ（９８）およびＲ（９９）に格納されたファイルブロック（２１０）およびファイルブロック（１００）が、マージ用バンク２２００に格納される。
【０１３７】
１６）更新データ用バンク２３００であった第３１番目のバンクが消去される。
【０１３８】
１７）更新データ用バンク２３００であった第３１番目のバンクと、マージ用バンクであった第２番目のバンクとが入換えられる。
【０１３９】
１８）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を更新データ用バンクのエントリＲ（２）に格納して、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を空きにする。
【０１４０】
１９）データバンク２１００の第３番目のバンクのファイルブロック（３０１）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（３０１）に対する書込み動作は終了する。
【０１４１】
以上のようにして、本実施の形態に係るファイルシステムによると、１個のデータ書込命令が終了するとコミット処理を実行して、不測の電源遮断が発生しても、ファイルシステム全体としての整合性が確保できた状態を再現できる。さらに、従来のように、１つのファイルブロックへの書込み毎にバンクを消去するわけではないので、ファイルブロックに同じ回数書込みをしても、バンクの消去回数を減少させることができ、よりフラッシュメモリの寿命を長くするとともに、高速処理を実現できる。
【０１４２】
＜第２の実施の形態＞
本発明の実施の形態に係るファイルシステムは、前述の第１の実施の形態と異なる書込処理を実行する。その他のハードウェア構成、以下に示す以外のフローチャートについては前述の第１の実施の形態と同様である。したがって、それらについての詳細な説明はここでは繰返さない。
【０１４３】
図２０を参照して、本実施の形態に係るファイルシステムで実行される書込処理の制御構造について説明する。なお、図２０に示す処理の中で、前述の図６と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０１４４】
Ｓ２０００にて、ＣＰＵ１２００は、変数Ｉを初期化した後、キャッシュフルフラグをリセットする。Ｓ２００２にて、ＣＰＵ１２００は、ＲＡＭ３０００のキャッシュ領域３１００に空きがない場合には、キャッシュフルフラグをセットする。その後、copy＿cache＿to＿bank処理が実行される。Ｓ２００４にて、ＣＰＵ１２００は、変数Ｉが、書込命令に基づく書込先であるファイルブロック数Ｎよりも大きい場合は、キャッシュフルフラグがセットされているか否かを判断する。キャッシュフルフラグがセットされていると（Ｓ２００４にてＹＥＳ）、処理はＳ１０２０へ移される。もしそうでないと（Ｓ２００４にてＮＯ）、この書込処理を終了する。Ｓ１０２０にて、ＣＰＵ１２００は、コミット処理を実行する。このコミット処理は、前述の第１の実施の形態のコミット処理と同様である。したがって、このコミット処理についての詳細な説明はここでは繰返さない。
【０１４５】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図２１〜図２２を参照して説明する。以下の説明では、１個のデータ書込命令により、ファイルブロック（１５０）、ファイルブロック（１５１）、ファイルブロック（１００）の順序で、データが書込まれ、このデータ書込み命令が繰返されると想定する。たとえば、データ書込み先がファイルブロック（１５０）とファイルブロック（１５１）とに跨っており、ファイルブロック（１００）にファイルサイズおよびタイムスタンプが格納される場合である。図２１〜図２２の中の丸数字の昇順に動作が進む。以下の数字と丸数字とは対応する。
【０１４６】
図２１に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが、更新データ用バンク２３００として第３１番目のバンクが設定されている。更新データ用バンク２３００の全てのエントリが空いている。ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリが空いている。
【０１４７】
１）１番目の書込み対象のファイルブロック（１５０）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。また、ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリが空いている。そのため、データバンク２１００の第１番目のバンクのファイルブロック（１５０）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（１５０）に対する書込み動作は終了する。
【０１４８】
２）２番目の書込み対象のファイルブロック（１５１）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）以外のエントリが空いている。そのため、データバンク２１００の第１番目のバンクのファイルブロック（１５１）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（１）に格納される。ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（１）の内容が更新される。これで、ファイルブロック（１５１）に対する書込み動作は終了する。
【０１４９】
３）３番目の書込み対象のファイルブロック（１００）は、ＲＡＭ３０００のキャッシュ領域３１００に格納されておらず、更新データ用バンク２３００にも格納されていない。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）およびＣ（１）以外のエントリが空いている。そのため、データバンク２１００の第１番目のバンクのファイルブロック（１００）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）に格納される。ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）の内容が更新される。これで、ファイルブロック（１００）に対する書込み動作は終了する。この時点で、ＲＡＭ３０００のキャッシュ領域３１００に空きがあるため（Ｓ１００８にてＮＯ）、キャッシュフルフラグがセットされない。このため、キャッシュフルフラグがリセットされているので（Ｓ２００４にてＮＯ）、コミット処理が実行されない。その結果、バンクの消去処理が実行されない。
【０１５０】
４）４番目の書込み対象のファイルブロック（１５０）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納されている。そのため、このエントリＣ（０）の内容が更新される。これで、ファイルブロック（１５０）に対する書込み動作は終了する。
【０１５１】
５）５番目の書込み対象のファイルブロック（１５１）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（１）に格納されている。そのため、このエントリＣ（１）の内容が更新される。これで、ファイルブロック（１５１）に対する書込み動作は終了する。
【０１５２】
６）６番目の書込み対象のファイルブロック（１００）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（２）に格納されている。そのため、このエントリＣ（２）の内容が更新される。これで、ファイルブロック（１００）に対する書込み動作は終了する。この後、このデータ書込み命令が繰返されても、ＲＡＭ３０００のキャッシュ領域３１００に空きがなくなることがないので、コミット処理が実行されない。その結果、バンクの消去が実行されない。
【０１５３】
一方、図２３〜図２４を参照して、このように同じファイルブロックに対する書込み命令が繰返される場合に、第１の実施の形態のファイルシステムの動作を、比較のために説明する。
【０１５４】
図２３に示すように、初期状態は、前述の図２１の状態と同じである。
１）１番目の書込み対象のファイルブロック（１５０）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（０））を用いてデータが更新される。
【０１５５】
２）２番目の書込み対象のファイルブロック（１５１）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（１））を用いてデータが更新される。
【０１５６】
３）３番目の書込み対象のファイルブロック（１００）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（２））を用いてデータが更新される。
【０１５７】
４）１個の書込命令に対応する、ファイルブロック（１５０）、ファイルブロック（１５１）およびファイルブロック（１００）のデータ更新が終了すると、コミット処理が行なわれる。すなわち、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）、エントリＣ（１）およびエントリＣ（２）から、更新データ用バンク２３００のエントリＲ（０）、エントリＲ（１）およびエントリＲ（２）にデータがコピーされて、copy＿cache＿to＿bank処理が実行される。
【０１５８】
このようなデータ書込命令が３３回繰返されると、図２４のように、更新データ用バンク２３００は、エントリ（９９）以外は空いていない状態になる。
【０１５９】
５）第３４回目のデータ書込命令に対する、１番目の書込み対象のファイルブロック（１５０）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（０））を用いてデータが更新される。
【０１６０】
６）２番目の書込み対象のファイルブロック（１５１）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（１））を用いてデータが更新される。
【０１６１】
７）３番目の書込み対象のファイルブロック（１００）に対して、前述と同じようにして、ＲＡＭ３０００のキャッシュ領域（エントリＣ（２））を用いてデータが更新される。
【０１６２】
８）１個のデータ書込命令に対応する、ファイルブロック（１５０）、ファイルブロック（１５１）およびファイルブロック（１００）のデータ更新が終了すると、コミット処理が行なわれる。
【０１６３】
９）しかしながら、更新データ用バンク２３００に空きがない。そのため、更新データ用バンク２３００に空きを作成するために、更新データ用バンク２３００の中のコミット済みの中の最新のファイルブロック（１００）が、マージ用バンク２２００に格納される。このようにして、第３４回目のデータ書込命令で、マージ処理が発生し、バンクの消去が実行される。
【０１６４】
以上のようにして、本実施の形態に係るファイルシステムによると、１個のデータ書込命令が終了するとコミット処理を実行するのではなく、コミット処理が必要な場合のみ（たとえば、ＲＡＭ３０００のキャッシュ領域３１００に空きがない場合など）、コミット処理を実行する。このため、バンクの消去回数を減少させることができ、よりフラッシュメモリの寿命を長くするとともに、高速処理を実現できる。
【０１６５】
すなわち、キャッシュに空きがなかったのかあったのかを示すキャッシュフルフラグを設ける。キャッシュに空きがない場合にはキャッシュフルフラグをリセットからセットに変更して、このフラグがセットされているときのみコミット処理を行なう。これにより、キャッシュに空きがあってコミット処理が必要でない場合にまでコミット処理を実行するという無駄な処理を避けることができるとともに、必要に応じてコミット処理を実行することにより、不測の電源遮断等が発生しても、ファイルシステム全体としての整合性が確保できた状態を再現できる。
【０１６６】
＜第３の実施の形態＞
本発明の実施の形態に係るファイルシステムは、前述の第１の実施の形態における更新データ用バンク２３００を、バックアップ電源を有するＳＲＡＭにて実現したものである。図２５を参照して、本実施の形態に係るファイルシステムのメモリの内部構造について説明する。図２５に示すように本実施の形態に係るファイルシステムのメモリは、データ用バンク２１００とマージ用バンク２２０とからなるフラッシュメモリ２１０１と、更新データ用バンクからなるＳＲＡＭ２３０１とを含む。その他の構成、以下に示す以外のフローチャートについては、前述の第１の実施の形態と同じである。したがって、それらについてのここでの詳細な説明は繰返さない。
【０１６７】
本実施の形態に係るファイルシステムは、更新データ用バンクをＳＲＡＭにて実現したため、フラッシュメモリにより更新データ用バンクを実現した場合に比較して、更新データ用バンクへのデータの書込の制限を有さない。この違いにより、本実施の形態に係るファイルシステムと、前述の第１の実施の形態のファイルシステムとでは、copy＿cache＿to＿bank処理およびmerge処理が異なる。
【０１６８】
図２６を参照して、本実施の形態に係るファイルシステムで実行されるcopy＿cache＿to＿bank処理について説明する。なお、図２６に示す処理の中で、前述の図９と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０１６９】
Ｓ３０００にて、ＣＰＵ１２００は、決定されたエントリのファイルブロックが、更新データ用バンク２３０１にあって、そのコミット済みフラグがリセット済みであるか否かを判断する。決定されたエントリのファイルブロックが更新データ用バンク２３０１にあって、そのコミット済みフラグがリセットされていると（Ｓ３０００にてＹＥＳ）、処理はＳ３００２へ移される。もしそうでないと（Ｓ３０００にてＮＯ）、処理はＳ１３０４へ移される。
【０１７０】
Ｓ１３０４にて、ＣＰＵ１２００は、更新データ用バンク２３０１に空きがないか否かを判断する。更新データ用バンクに空きがない場合には（Ｓ１３０４にてＹＥＳ）、処理はＳ３００４へ移される。もしそうでないと（Ｓ１３０４にてＮＯ）、処理はＳ１３１２へ移される。
【０１７１】
Ｓ３００２にて、ＣＰＵ１２００は、コミットフラグがリセットされたエントリに、決定されたエントリのファイルブロックをコピーする。
【０１７２】
Ｓ３００４にて、ＣＰＵ１２００は、merge処理を行なう。このＳ３００４にて実行されるmerge処理は、前述の第１の実施の形態のmerge処理とは異なる処理である。
【０１７３】
図２７を参照して、本実施の形態に係るファイルシステムで実行されるmerge処理の制御構造について説明する。なお、図２７に示す処理の中で、前述の図１０と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０１７４】
Ｓ３１００にて、ＣＰＵ１２００は、変数Ｊが３２より大きいと、更新データ用バンク２３０１に含まれる、コミット済みフラグがリセットされたファイルブロックを前詰めにして、空いた領域をクリアする。その後このmerge処理を終了する。
【０１７５】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図２８〜図３２を参照して説明する。以下の説明では、１個のデータ書込命令により、ファイルブロック（１００）、ファイルブロック（１０１）に対して交互にデータが書込まれ、このデータ書込み命令が繰返されると想定する。図２８〜図３２の中の丸数字の昇順に動作が進む。以下の数字と丸数字とは対応する。
【０１７６】
図２８に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが設定されている。ＳＲＡＭにより構成された更新データ用バンク２３０１のエントリＲ（９９）以外は空いていない。更新データ用バンク２３０１のエントリＲ（９８）およびエントリＲ（９９）以外のファイルブロックはコミット済みである。ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリが空いていない。
【０１７７】
１）１番目の書込み対象のファイルブロック（１００）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリには格納されていないが、更新データ用バンク２３０１のエントリＲ（９６）に格納されている。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリに空きがない。そのため、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を更新データ用バンクのエントリＲ（９９）に格納して、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を空きにする。
【０１７８】
２）更新データ用バンク２３０１のエントリＲ（９６）に格納されたファイルブロック（１００）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。
【０１７９】
３）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（１００）に対する書込み動作は終了する。
【０１８０】
４）２番目の書込み対象のファイルブロック（１０１）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリには格納されていないが、更新データ用バンク２３０１のエントリＲ（９７）に格納されている。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリに空きがない。そのため、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を、コミット済みでないファイルブロック（１００）を格納したエントリＲ(９８)に格納して、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を空きにする。
【０１８１】
５）更新データ用バンク２３０１のエントリＲ（９７）に格納されたファイルブロック（１０１）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。
【０１８２】
６）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（１０１）に対する書込み動作は終了する。
【０１８３】
７）３番目の書込み対象のファイルブロック（１００）は、ＲＡＭ３０００のキャッシュ領域３１００のエントリには格納されていないが、更新データ用バンク２３０１のエントリＲ（９６）に格納されている。また、ＲＡＭ３０００のキャッシュ領域３１００のエントリに空きがない。そのため、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を、コミット済みでないファイルブロック（１０１）を格納したエントリＲ(９９)に格納して、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）を空きにする。
【０１８４】
８）更新データ用バンク２３０１のエントリＲ（９６）に格納されたファイルブロック（１００）が、ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）に格納される。
【０１８５】
９）ＲＡＭ３０００のキャッシュ領域３１００のエントリＣ（０）の内容が更新される。これで、ファイルブロック（１００）に対する書込み動作は終了する。さらに、ファイルブロック（１０１）に対する書込動作が実行される。
【０１８６】
以上のようにして、本実施の形態に係るファイルシステムによると、ＳＲＡＭにより更新データ用バンクを構成するため、同じファイルブロックは上書きできる。このため、更新データ用バンクに空きがなくなることを回避でき、バンクの消去回数を減少させることができ、よりフラッシュメモリの寿命を長くするとともに、高速処理を実現できる。
【０１８７】
＜第４の実施の形態＞
本実施の形態に係るファイルシステムは、前述の第１の実施の形態に係るファイルシステムと異なるmerge処理を実行する。その他のハードウェア構成、以下に示す以外のフローチャートについては前述の第１の実施の形態と同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０１８８】
図３３を参照して、本実施の形態に係るファイルシステムで実行されるmerge処理の制御構造について説明する。なお、図３３に示す処理の中で、前述の図１０に示す処理と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０１８９】
Ｓ４０００にて、ＣＰＵ１２００は、更新データ用バンク２３００に含まれる。コミット済みフラグがリセットされたファイルブロックをマージ用バンク２２００にコピーし、これを新たな更新データ用バンクに設定する。Ｓ４００２にて、ＣＰＵ１２００は、古い更新データ用バンクを消去する。このバンクをバンクＲと呼ぶ。Ｓ４００４にて、ＣＰＵ１２００は、含まれるファイルブロックがすべて未使用のバンクがあるか否かを判断する。含まれるファイルブロックがすべて未使用のバンクがある場合には（Ｓ４００４にてＹＥＳ）、処理はＳ４００８へ移される。もしそうでないと（Ｓ４００４にてＮＯ）、処理はＳ４００６へ移される。
【０１９０】
Ｓ４００６にて、ＣＰＵ１２００は、バンクＲを新たなマージ用バンクに設定する。Ｓ４００８にて、ＣＰＵ１２００は、そのバンクをバンクＦとして、バンクＲをバンクＦのデータバンクに、バンクＦを新たなマージ用バンクに設定する。
【０１９１】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図３４〜図３５を参照して説明する。以下の説明では、ファイルブロック（０）からファイルブロック（９９）までの第１のバンクに含まれるファイルブロックにデータが繰返し書込まれると想定する。
【０１９２】
図３４に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが、更新データ用バンク２３００として第３１番目のバンクが設定されている。更新データ用バンク２３００の全てのエントリは空いている。ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリは空いている。このときの状態を図３５（Ａ）に示す。網掛けされているバンクは、そのバンクに含まれる全てのファイルブロックが未使用であることを示す。
【０１９３】
このような初期状態から、ファイルブロック（０）からファイルブロック（９９）まで、繰返しデータが書込まれる。更新データ用バンクに空きがなくなるので、マージ処理が実行される。
【０１９４】
更新データ用バンクである第３１番目のバンクおよびデータ用バンクである第０番目のバンクから、マージ用バンクである第３０番目のバンクへデータがコピーされる。第３０番目のバンクが新たなデータ用バンク（ファイルブロック（０）〜ファイルブロック（９９）格納用）に設定される。データ用バンクであった第０番目のバンクが消去されて、新たなマージ用バンクに設定される。第０番目のバンクが新たな更新データ用バンクに設定され、古い更新データ用バンクであった第３１番目のバンクが消去される。第１番目のバンクが未使用であるので、古い更新データ用バンクである第３１番目のバンクが、新たなデータ用バンク（ファイルブロック（１００）〜ファイルブロック（１９９）格納用）に設定される。第１番目のバンクが消去され、新たなマージ用バンクに設定される。この状態を図３５（Ｂ）に示す。
【０１９５】
さらに、このような状態から、ファイルブロック（０）からファイルブロック（９９）まで、繰返しデータが書込まれる。更新データ用バンクに空きがなくなるので、マージ処理が実行される。
【０１９６】
更新データ用バンクである第０番目のバンクおよびデータ用バンクである第３０番目のバンクから、マージ用バンクである第１番目のバンクへデータがコピーされる。第１番目のバンクが新たなデータ用バンク（ファイルブロック（０）〜ファイルブロック（９９）格納用）に設定される。データ用バンクであった第３０番目のバンクが消去されて、新たなマージ用バンクに設定される。第３０番目のバンクが新たな更新データ用バンクに設定され、古い更新データ用バンクであった第０番目のバンクが消去される。第２番目のバンクが未使用であるので、古い更新データ用バンクである第０番目のバンクが、新たなデータ用バンク（ファイルブロック（２００）〜ファイルブロック（２９９）格納用）に設定される。第２番目のバンクが消去され、新たなマージ用バンクに設定される。この状態を図３５（Ｃ）に示す。
【０１９７】
さらに、このような状態から、ファイルブロック（０）からファイルブロック（９９）まで、繰返しデータが書込まれる。更新データ用バンクに空きがなくなるので、マージ処理が実行される。
【０１９８】
更新データ用バンクである第３０番目のバンクおよびデータ用バンクである第１番目のバンクから、マージ用バンクである第２番目のバンクへデータがコピーされる。第２番目のバンクが新たなデータ用バンク（ファイルブロック（０）〜ファイルブロック（９９）格納用）に設定される。データ用バンクであった第１番目のバンクが消去されて、新たなマージ用バンクに設定される。第１番目のバンクが新たな更新データ用バンクに設定され、古い更新データ用バンクであった第３０番目のバンクが消去される。第３番目のバンクが未使用であるので、古い更新データ用バンクである第３０番目のバンクが、新たなデータ用バンク（ファイルブロック（３００）〜ファイルブロック（３９９）格納用）に設定される。第３番目のバンクが消去され、新たなマージ用バンクに設定される。この状態を図３５（Ｄ）に示す。
【０１９９】
以上のようにして本実施の形態に係るファイルシステムによると、このような動作を繰返して、バンクの状態は、図３５（Ｅ）から（Ｇ）に示すように変化する。このため、第０番目のバンク、第３０番目のバンクおよび第３１番目のバンクの３個のバンクにバンクの消去が集中することを回避できる。その結果、使用するバンクが適宜切換えられるので、１バンクの消去頻度が分散され、フラッシュメモリの一部のバンクの寿命が短くなることを避けることができる。
【０２００】
＜第５の実施の形態＞
本実施の形態に係るファイルシステムは、前述の第１の実施の形態とは異なる書込処理を実行する。その他のハードウェア構成、以下に示す以外のフローチャートについては、前述の第１の実施の形態と同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０２０１】
図３６を参照して、本実施の形態に係るファイルシステムで実行される書込処理の制御構造について説明する。なお、図３６に示す処理の中で、前述の図６に示す処理と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０２０２】
Ｓ５０００にて、ＣＰＵ１２００は、書込むデータサイズが、更新データ用バンクの容量よりも大きいか否かを判断する。書込むデータサイズが更新データ用バンクの容量よりも大きい場合には（Ｓ５０００にてＹＥＳ）、処理はＳ５００２へ移される。もしそうでないと（Ｓ５０００にてＮＯ）、処理はＳ５００４へ移される。
【０２０３】
Ｓ５００２にて、ＣＰＵ１２００は、write＿large処理を行なう。このwrite＿large処理の詳細については後述する。
【０２０４】
Ｓ５００４にて、ＣＰＵ１２００は、write＿small処理を行なう。このwrite＿small処理の詳細については後述する。
【０２０５】
図３７を参照して、本実施の形態に係るファイルシステムで実行されるwrite＿small処理の制御構造について説明する。なお、図３７に示す処理の中で、前述の図６に示す処理と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０２０６】
Ｓ５１００にて、ＣＰＵ１２００は、この書込によって更新データ用バンクが溢れる可能性を算出する。Ｓ５１０２にて、ＣＰＵ１２００は、この書込によって更新データ用バンクが溢れる可能性があるか否かを判断する。溢れる可能性がある場合には（Ｓ５１０２にてＹＥＳ）、処理はＳ５１０４へ移される。もしそうでないと（Ｓ５１０２にてＮＯ）、処理はＳ５１０６へ移される。
【０２０７】
Ｓ５１０４にて、ＣＰＵ１２００は、コミット処理を行なう。このコミット処理は、前述の第１の実施の形態において説明したコミット処理と同じ処理である。したがって、このコミット処理についての詳細な説明は繰返さない。
【０２０８】
Ｓ５１０６にて、ＣＰＵ１２００は、書込命令に基づいて、書込先であるＮ個のファイルブロックを決定する。その後、処理はＳ１００４〜１０１８へ移される。
【０２０９】
図３８を参照して、本実施の形態に係るファイルシステムで実行されるwrite＿large処理の制御構造について説明する。
【０２１０】
Ｓ５２００にて、ＣＰＵ１２００は、書込データを分割データ（１）〜分割データ（Ｐ）に分割する。このとき、分割データの境界とデータ用バンクとの境界とを一致させる。Ｓ５２０２にて、ＣＰＵ１２００は、変数Ｄを初期化（Ｄ＝１）する。Ｓ５２０４にて、ＣＰＵ１２００は、分割データ（Ｄ）のサイズが１バンク分に等しいか否かを判断する。分割データ（Ｄ）のサイズが１バンク分に等しい場合には（Ｓ５２０４にてＹＥＳ）、処理はＳ５２０６へ移される。もしそうでないと（Ｓ５２０４にてＮＯ）、処理はＳ５２１８へ移される。
【０２１１】
Ｓ５２０６にて、ＣＰＵ１２００は、キャッシュと更新データ用バンクとが空き状態であるか否かを判断する。キャッシュと更新データ用バンクとが空き状態である場合には（Ｓ５２０６にてＹＥＳ）、処理はＳ５２０１２へ移される。もしそうでないと（Ｓ５２０６にてＮＯ）、処理はＳ５２０８へ移される。
【０２１２】
Ｓ５２０８にて、ＣＰＵ１２００は、コミット処理を行なう。このコミット処理は、前述の第１の実施の形態のコミット処理と同じ処理である。したがって、このコミット処理の詳細についてここでは繰返さない。
【０２１３】
Ｓ５２１０にて、ＣＰＵ１２００は、merge処理を行なう。このmerge処理は、前述の第１の実施の形態のmerge処理と同じ処理である。したがって、このmerge処理についての説明はここでは繰返さない。
【０２１４】
Ｓ５２１２にて、ＣＰＵ１２００は、書込命令に基づいて、書込先であるファイルブロックを決定する。Ｓ５２１４にて、ＣＰＵ１２００は、マージ用バンクに分割データ（Ｄ）をコピーして、これを新たなデータ用バンクに設定する。
【０２１５】
Ｓ５２１６にて、ＣＰＵ１２００は、書込先ファイルブロックを含むバンクを消去して、これを新たなマージ用バンクに設定する。
【０２１６】
Ｓ５２１８にて、ＣＰＵ１２００は、write＿small処理を行なう。
Ｓ５２２０にて、ＣＰＵ１２００は、変数Ｄに１を加算する。Ｓ５２２２にて、ＣＰＵ１２００は、変数Ｄが分割データ数Ｐよりも大きいか否かを判断する。変数Ｄが分割データ数Ｐよりも大きい場合には（Ｓ５２２２にてＹＥＳ）、このwrite＿large処理を終了する。もしそうでないと（Ｓ５２２２にてＮＯ）、処理はＳ５２０４へ戻される。
【０２１７】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図３９〜図４５を参照して説明する。以下の説明では、図３９に示すように、１個のデータ書込命令により、ファイルブロック（１５０）からファイルブロック（３８０）までの２３１ブロック分のデータを書込むと想定する。
【０２１８】
図３９に示すように、この２３１個のブロックは、３個の分割データ（分割データ（１）、分割データ（２）および分割データ（３））に分割される。分割されたデータは、複数のバンクを跨らない。第１のバンクに書込む分割データ（１）は、ファイルブロック（１５０）からファイルブロック（１９９）までのデータを含み、その容量は、１バンク分のデータ容量よりも小さい。第２のバンクに書込む分割データ（２）は、ファイルブロック（２００）からファイルブロック（２９９）までのデータを含み、その容量は、１バンク分のデータ容量と等しい。第３のバンクに書込む分割データ（３）は、ファイルブロック（３００）からファイルブロック（３８０）までのデータを含み、その容量は、１バンク分のデータ容量よりも小さい。図４０〜図４５の中の丸数字の昇順に動作が進む。以下の数字と丸数字とは対応する。
【０２１９】
図４０に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが、更新データ用バンク２３００として第３１番目のバンクが設定されている。更新データ用バンク２３００の全てのエントリが空いている。ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリが空いている。
【０２２０】
１）分割データ（１）であるファイルブロック（１５０）からファイルブロック（１９９）までが、更新データ用バンク２３００とＲＡＭ３０００のキャッシュ領域３１００とに書込まれる。このとき、更新データ用バンク２３００のエントリは全て空いており、１バンク分の容量よりも小さな分割データ（１）を書込んでも、更新データ用バンクに空きがなくなることはないので、コミット処理は実行されない。この時点で、更新データ用バンク２３００にファイルブロック（１５０）からファイルブロック（１９５）までのデータが格納され、ＲＡＭ３０００のキャッシュ領域３１００にファイルブロック（１９６）からファイルブロック（１９９）までのデータが格納された状態になる。
【０２２１】
２）分割データ（２）を書込む前に、コミット処理とマージ処理とが実行され、更新データ用バンク２３００およびＲＡＭ３０００のキャッシュ領域３１００とが空いている状態になる。
【０２２２】
３）分割データ（２）であるファイルブロック（２００）からファイルブロック（２９９）までが、更新データ用バンク２３００とＲＡＭ３０００のキャッシュ領域３１００とに書込まれる。このとき、分割データ（２）の容量は、１バンク分の容量と同じである。分割データ（２）は、更新データ用バンク２３００ではなく、マージ用バンク２２００に書込まれる。この時点で、マージ用バンク２２００にファイルブロック（２００）からファイルブロック（２９９）までのデータが格納される。更新データ用バンク２３００およびＲＡＭ３０００のキャッシュ領域３１００のエントリは、全て空いている状態のままである。
【０２２３】
４）分割データ（２）が格納されたマージ用バンクが、新たなデータ用バンク（ファイルブロック（２００）〜ファイルブロック（２９９）格納用）に設定されて、第２番目のバンクが消去されて、それが新たなマージ用バンクに設定される。
【０２２４】
５）分割データ（３）であるファイルブロック（３００）からファイルブロック（３８０）までが、更新データ用バンク２３００とＲＡＭ３０００のキャッシュ領域３１００とに書込まれる。このとき、更新データ用バンク２３００のエントリは全て空いており、１バンク分の容量よりも小さな分割データ（３）を書込んでも、更新データ用バンクに空きがなくなることはないので、コミット処理は実行されない。この時点で、更新データ用バンク２３００にファイルブロック（３００）からファイルブロック（３７６）までのデータが格納され、ＲＡＭ３０００のキャッシュ領域３１００にファイルブロック（３７７）からファイルブロック（３８０）までのデータが格納された状態になる。
【０２２５】
以上のようにして、本実施の形態に係るファイルシステムによると、マージ処理が実行されるのは、常にファイルシステムの整合性が確保できた状態であるので、データ書込みの途中で予期しない電源遮断が発生しても、ファイルシステム全体としての整合性が確保できた状態を再現できる。また、書込むデータの容量がバンクの容量と同じ場合には、更新データ用バンクを経由することなく、マージ用バンクにデータを書込むので、バンクの消去回数を減少させることができる。
【０２２６】
＜第６の実施の形態＞
本実施の形態に係るファイルシステムは、前述の第１の実施の形態とは異なるmerge処理を実行する。その他のハードウェア構成および以下に示す以外のフローチャートについては、前述の第１の実施の形態と同じである。したがって、それらについてのここでの詳細な説明は繰返さない。
【０２２７】
図４６を参照して、本実施の形態に係るファイルシステムで実行されるmerge処理の制御構造について説明する。なお、図４６の処理の中で、前述の図１０に示した処理と同じ処理については同じステップ番号を付してある。それらについての処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【０２２８】
Ｓ６０００にて、ＣＰＵ１２００は、マージ用バンクを第Ｊ番目のバンクに対応した新たなデータ用バンクに、古い第Ｊ番目のバンクを消去して新たなマージ用バンクに設定する。このとき、新たなデータ用バンクのカウンタ値は、古いデータ用バンクのカウンタ値に１を加算したものとする。
【０２２９】
以上のような構造およびフローチャートに基づく、本実施の形態に係るファイルシステムの動作を、図４７を参照して説明する。以下の説明では、ファイルブロック（０）からファイルブロック（９９）までの第１のバンクに含まれるファイルブロックにデータが繰返し書込まれると想定する。
【０２３０】
図４７（Ａ）に示すように、初期状態では、データ用バンク２１００として第０番目のバンクから第２９番目のバンクまでの３０個のバンクが、マージ用バンク２２００として第３０番目のバンクが、更新データ用バンク２３００として第３１番目のバンクが設定されている。更新データ用バンク２３００の全てのエントリは空いている。ＲＡＭ３０００のキャッシュ領域３１００の全てのエントリは空いていると想定する。
【０２３１】
ファイルブロック（０）からファイルブロック（９９）まで、繰返しデータが書込まれる。更新データ用バンクに空きがなくなるので、マージ処理が実行される。
【０２３２】
更新データ用バンクである第３１番目のバンクおよびデータ用バンクである第０番目のバンクから、マージ用バンクである第３０番目のバンクへデータがコピーされる。このとき、第０番目のバンクのカウント値（＝０）に１を加算した値が第３０番目のカウンタ値（＝１）に設定される。第３０番目のバンクが新たなデータ用バンク（ファイルブロック（０）〜ファイルブロック（９９）格納用）に設定される。この状態を図４７（Ｂ）に示す。
【０２３３】
この時点で、電源が遮断されると、ファイルブロック（０）からファイルブロック（９９）までを格納する２個のバンク（第０番目のバンクと第３０番目のバンク）とが存在するが、カウンタ値の大きな方をより新しいデータが格納されたバンクとして判断できる。
【０２３４】
データ用バンクであった第０番目のバンクが消去されて、新たなマージ用バンクに設定される。第０番目のバンクが新たな更新データ用バンクに設定され、古い更新データ用バンクであった第３１番目のバンクが消去される。第３１番目のバンクが新たなマージ用バンクに設定される。この状態を図４７（Ｃ）に示す。
【０２３５】
さらに、ファイルブロック（０）からファイルブロック（９９）まで、繰返しデータが書込まれる。更新データ用バンクに空きがなくなるので、マージ処理が実行される。
【０２３６】
更新データ用バンクである第０番目のバンクおよびデータ用バンクである第３０番目のバンクから、マージ用バンクである第３１番目のバンクへデータがコピーされる。このとき、第３０番目のバンクのカウント値（＝１）に１を加算した値が第３１番目のカウンタ値（＝２）に設定される。第３１番目のバンクが新たなデータ用バンク（ファイルブロック（０）〜ファイルブロック（９９）格納用）に設定される。
【０２３７】
データ用バンクであった第３０番目のバンクが消去されて、新たなマージ用バンクに設定される。第３０番目のバンクが新たな更新データ用バンクに設定され、古い更新データ用バンクであった第０番目のバンクが消去される。第０番目のバンクが新たなマージ用バンクに設定される。この状態を図４７（Ｄ）に示す。
【０２３８】
以上のようにして、本実施の形態に係るファイルシステムによると、マージ処理の途中で電源が遮断されても、ファイルシステム全体としての整合性が確保できた状態を再現できる。
【０２３９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【図１】  本発明の実施の形態に係るファイルシステムが使用される携帯機器の制御ブロック図である。
【図２】  本発明の第１の実施の形態に係るファイルシステムを実現するメモリの制御ブロック図である。
【図３】  本発明の第１の実施の形態に係るファイルシステムを実現するメモリのバンク構成を示す図である。
【図４】  ファイルのデータ構造を示す図である。
【図５】  ファイルブロック管理テーブルのデータ構造を示す図である。
【図６】  本発明の第１の実施の形態に係る書込み処理の制御の手順を示すフローチャートである。
【図７】  本発明の第１の実施の形態に係る読出し処理の制御の手順を示すフローチャートである。
【図８】  本発明の第１の実施の形態に係るcopy＿bank＿to＿cache処理の制御の手順を示すフローチャートである。
【図９】  本発明の第１の実施の形態に係るcopy＿cache＿to＿bank処理の制御の手順を示すフローチャートである。
【図１０】  本発明の第１の実施の形態に係るmerge処理の制御の手順を示すフローチャートである。
【図１１】  本発明の第１の実施の形態に係るコミット処理の制御の手順を示すフローチャートである。
【図１２】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その１）である。
【図１３】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その２）である。
【図１４】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その３）である。
【図１５】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その４）である。
【図１６】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その５）である。
【図１７】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その６）である。
【図１８】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その７）である。
【図１９】  本発明の第１の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その８）である。
【図２０】  本発明の第２の実施の形態に係る書込み処理の制御の手順を示すフローチャートである。
【図２１】  本発明の第２の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その１）である。
【図２２】  本発明の第２の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その２）である。
【図２３】  本発明の第２の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その３）である。
【図２４】  本発明の第２の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その４）である。
【図２５】  本発明の第３の実施の形態に係るファイルシステムを実現するメモリのバンク構成を示す図である。
【図２６】  本発明の第３の実施の形態に係るcopy＿cache＿to＿bank処理の制御の手順を示すフローチャートである。
【図２７】  本発明の第３の実施の形態に係るmerge処理の制御の手順を示すフローチャートである。
【図２８】  本発明の第３の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その１）である。
【図２９】  本発明の第３の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その２）である。
【図３０】  本発明の第３の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その３）である。
【図３１】  本発明の第３の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その４）である。
【図３２】  本発明の第３の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その５）である。
【図３３】  本発明の第４の実施の形態に係るmerge処理の制御の手順を示すフローチャートである。
【図３４】  本発明の第４の実施の形態に係る処理によるバンクの記憶内容の初期状態を表わす図である。
【図３５】  本発明の第４の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図である。
【図３６】  本発明の第５の実施の形態に係る書込み処理の制御の手順を示すフローチャートである。
【図３７】  本発明の第５の実施の形態に係るwrite＿small処理の制御の手順を示すフローチャートである。
【図３８】  本発明の第５の実施の形態に係るwrite＿large処理の制御の手順を示すフローチャートである。
【図３９】  本発明の第５の実施の形態において書込まれるファイルの構造を示す図である。
【図４０】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その１）である。
【図４１】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その２）である。
【図４２】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その３）である。
【図４３】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その４）である。
【図４４】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その５）である。
【図４５】  本発明の第５の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図（その６）である。
【図４６】  本発明の第６の実施の形態に係るmerge処理の制御の手順を示すフローチャートである。
【図４７】  本発明の第６の実施の形態に係る処理によるバンクの記憶内容の変化を表わす図である。
【図４８】  本発明に関連するファイルシステムを実現するメモリの制御ブロック図である。
【図４９】  本発明に関連するファイルシステムにおけるバンクの記憶内容の変化を表わす図（その１）である。
【図５０】  本発明に関連するファイルシステムにおけるバンクの記憶内容の変化を表わす図（その２）である。
【図５１】  本発明に関連するファイルシステムにおけるバンクの記憶内容の変化を表わす図（その３）である。
【図５２】  本発明に関連するファイルシステムにおけるバンクの記憶内容の変化を表わす図（その４）である。
【図５３】  本発明に関連するファイルシステムにおけるバンクの記憶内容の変化を表わす図（その５）である。
【符号の説明】
１０２０  携帯機器、１０４０  液晶モニタ、１１００  入力キー、１２００ＣＰＵ、１２２、１２２０  メモリ、２００、２０００  フラッシュメモリ、２１０、２１００  データ用バンク、２２０、２２００  マージ用バンク、２３００  更新データ用バンク、３００、３０００  ＲＡＭ、３１００  キャッシュ領域、３２００  ファイルブロック管理テーブル記憶領域、３３００  システム記憶領域。
【図１】
0003967121.tif 000002
【図２】
0003967121.tif 000003
【図３】
0003967121.tif 000004
【図４】
0003967121.tif 000005
【図５】
0003967121.tif 000006
【図６】
0003967121.tif 000007
【図７】
0003967121.tif 000008
【図８】
0003967121.tif 000009
【図９】
0003967121.tif 000010
【図１０】
0003967121.tif 000011
【図１１】
0003967121.tif 000012
【図１２】
0003967121.tif 000013
【図１３】
0003967121.tif 000014
【図１４】
0003967121.tif 000015
【図１５】
0003967121.tif 000016
【図１６】
0003967121.tif 000017
【図１７】
0003967121.tif 000018
【図１８】
0003967121.tif 000019
【図１９】
0003967121.tif 000020
【図２０】
0003967121.tif 000021
【図２１】
0003967121.tif 000022
【図２２】
0003967121.tif 000023
【図２３】
0003967121.tif 000024
【図２４】
0003967121.tif 000025
【図２５】
0003967121.tif 000026
【図２６】
0003967121.tif 000027
【図２７】
0003967121.tif 000028
【図２８】
0003967121.tif 000029
【図２９】
0003967121.tif 000030
【図３０】
0003967121.tif 000031
【図３１】
0003967121.tif 000032
【図３２】
0003967121.tif 000033
【図３３】
0003967121.tif 000034
【図３４】
0003967121.tif 000035
【図３５】
0003967121.tif 000036
【図３６】
0003967121.tif 000037
【図３７】
0003967121.tif 000038
【図３８】
0003967121.tif 000039
【図３９】
0003967121.tif 000040
【図４０】
0003967121.tif 000041
【図４１】
0003967121.tif 000042
【図４２】
0003967121.tif 000043
【図４３】
0003967121.tif 000044
【図４４】
0003967121.tif 000045
【図４５】
0003967121.tif 000046
【図４６】
0003967121.tif 000047
【図４７】
0003967121.tif 000048
【図４８】
0003967121.tif 000049
【図４９】
0003967121.tif 000050
【図５０】
0003967121.tif 000051
【図５１】
0003967121.tif 000052
【図５２】
0003967121.tif 000053
【図５３】
0003967121.tif 000054