(57)【特許請求の範囲】
【請求項１】
クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置であって、
各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付手段と、
複数のファイルにそれぞれ対応する複数のファイルバッファと、
前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積手段と、
前記データ蓄積手段により蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定手段と、
判定が肯定的であるとき、前記データ蓄積手段により蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込手段とを備え、
前記判定手段は、各ファイルバッファのデータサイズをクラスタサイズで除した商の合計が前記所定数以上のとき、蓄積されたデータがブロックサイズ以上と判定し、
前記書込手段は、前記各ファイルバッファからクラスタのサイズの単位で前記所定数のクラスタ分のデータを取り出し、前記空きブロックに書き込む
ことを特徴とするファイル記録装置。
【請求項２】
前記判定手段は、前記蓄積手段にて最近蓄積された特定のファイルバッファのデータサイズがブロックサイズ以上のとき、蓄積されたデータがブロックサイズ以上と判定し、
前記書込手段は、前記特定のファイルバッファの先頭からブロックサイズ分のデータを取り出し、取り出したデータを前記空きブロックに書き込むことを特徴とする請求項１に記載のファイル記録装置。
【請求項３】
割り当てられた前記空きブロックに前記書込手段が書き込む前に、前記空きブロックの消去を行なう消去手段をさらに備えることを特徴とする請求項１に記載のファイル記録装置。
【請求項４】
複数のファイルにそれぞれ対応する複数のファイルバッファを備え、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置の制御方法であって、
受付手段により、各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付ステップと、
蓄積手段により、前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積ステップと、
判定手段により、前記データ蓄積ステップにより蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定ステップと、
書込手段により、判定が肯定的であるとき、前記データ蓄積ステップにより蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込ステップとを有し、
前記判定ステップは、各ファイルバッファのデータサイズをクラスタサイズで除した商の合計が前記所定数以上のとき、蓄積されたデータがブロックサイズ以上と判定し、
前記書込ステップは、前記各ファイルバッファからクラスタのサイズの単位で前記所定数のクラスタ分のデータを取り出し、前記空きブロックに書き込む
ことを特徴とする制御方法。
【請求項５】
複数のファイルにそれぞれ対応する複数のファイルバッファを備え、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置に、
各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付ステップと、
前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積ステップと、
前記データ蓄積ステップにより蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定ステップと、
判定が肯定的であるとき、前記データ蓄積ステップにより蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込ステップとを実行させ、
前記判定ステップは、各ファイルバッファのデータサイズをクラスタサイズで除した商の合計が前記所定数以上のとき、蓄積されたデータがブロックサイズ以上と判定し、
前記書込ステップは、前記各ファイルバッファからクラスタのサイズの単位で前記所定数のクラスタ分のデータを取り出し、前記空きブロックに書き込む
ことを特徴とするプログラム。
【請求項６】
前記ファイル記録装置は、さらに、ドライバデータバッファを備え、
前記ファイル記録装置に、さらに、
前記記録媒体における書き込み先アドレスを含む書き込みの要求を受け付ける受付ステップと、
前記ドライバデータバッファが空きでないとき、前記書き込みのデータと前記ドライバデータバッファのデータとが前記記録媒体のアドレスにおいて連続するか否かを判定する第１判定ステップと、
肯定と判定されたとき、書き込みのデータを前記ドライバデータバッファに蓄積させるデータ蓄積ステップと、
前記ドライバデータバッファに蓄積されたデータの書き込み先がブロックの境界に一致するか否かを判定する第２判定ステップと、
第２判定ステップにて肯定と判定されたとき、前記ドライバデータバッファの先頭から前記ブロックの境界までのデータを前記記録媒体に書き込む書込ステップとを実行させる
ための請求項５に記載のプログラム。
【請求項７】
前記プログラムは前記記録媒体のフィルタドライバであることを特徴とする請求項６に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体メモリにファイルを記録するファイル記録装置に関する。
【背景技術】
【０００２】
電源を切っても記録されたデータが消えない、いわゆる不揮発性の半導体メモリは、記録する前に消去が必要であるが、機械的な駆動機構や回転がないことから耐振動性や静粛性に優れ、また記録密度の向上による大容量化と相俟って、CD（Compact Disk）、DVD(Digital Versatile Disk)などと並び、情報記録媒体としての普及に拍車がかかっている。
半導体メモリのなかでもバイトごとの消去が必要なEEPROM (Electrically Erasable Programmable Read Only Memory) を改良したフラッシュメモリは、ブロックと呼ぶ単位で一括して消去が行えるので、SDメモリカードなどの製品としてディジタルカメラの記録用などに使われている。
【０００３】
このフラッシュメモリを含む各種の記録媒体のデータを管理するファイルシステムには、例えばFAT（File  Allocation Table、Standard ECMA−１０７：Volume and File Structure of Disk Cartridges for Information Interchange）、NTFS（New Technology File System）、UDF（Universal Disk Format）などがある。ファイルシステムを利用して、例えば映像や音声のデータをそれぞれファイルとして同時並行的に記録あるいは再生することが行なわれている。
【０００４】
ファイルシステムによるファイルは、FATではクラスタと呼ぶ単位で容量の割り当てと管理が行なわれる。
ファイルのデータがわずかでもクラスタを占有するので、クラスタはそのサイズが大きいほどメモリの容量効率が低下してしまい、一方、ブロックはそのサイズが大きいほどメモリの集積効率が良くなることから、ブロックサイズはクラスタサイズよりも大きいのが普通である。
【０００５】
また、クラスタが２つのブロックに跨るような場合、そのクラスタに記録するときは、２つのブロックの消去が必要となってしまう。これを避けるため、クラスタがブロック間に跨らないようにする技術が、例えば、特許文献１に開示されている。ファイルシステムは、フラッシュメモリのブロックに属するクラスタがすべて空きの状態であれば、そのブロックを消去し、書き込むだけでよい。
【０００６】
しかし、ブロック内に既存のファイルのデータを記録しているクラスタが一つでもあれば、そのブロックを消去する前にいったん主記憶上の一時メモリに読み込み（Read）、当該ブロックを消去し（Delete）、一時メモリ上で変更部分を変更し（Modify）、一時メモリの内容を書き出す（Write）という一連の操作（リード・モディファイ・ライトという）が必要となり、この場合読み込みと変更が余分にかかる。
【０００７】
また、同じブロックへの記録を行なうごとに上記一連の操作が行なわれるので、映像や音声のデータのように連続する大量のデータを同じブロックに対して上述の一連の操作を繰り返しながら書き込んでいくと、同じデータを何度も読み出しては書き込むことになり、膨大な処理時間がかかってしまう。
【特許文献１】特開２００１−１８８７０１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、上記課題に鑑みてなされたものであり、一括消去が必要な記憶媒体に無駄なく能率的に記録するファイル記録装置を提供することを第1の目的とし、従来のファイルシステムのもとで上記記憶媒体にデータを無駄なく能率的に記録するプログラムを提供することを第2の目的とする。
【課題を解決するための手段】
【０００９】
上記目的は、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置であって、各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付手段と、複数のファイルバッファと、前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積手段と、前記データ蓄積手段により蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定手段と、判定が肯定的であるとき、前記データ蓄積手段により蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込手段とを備えることで達成できる。
【発明の効果】
【００１０】
このような構成によって、記録前にブロック単位で消去が必要な記憶媒体に対しファイルのデータを記録する要求があったとき、書き込み先ブロックへのデータの書き込みは一回だけで済むので、記録の要求の都度書き込むのに較べると書き込み先ブロックに既に書き込んだデータがあればそれを再書き込みしなければならない無駄がなく、ファイルを能率的に記録することができる。
【００１１】
ここで、前記判定手段は、前記蓄積手段にて最近蓄積された特定のファイルバッファのデータサイズがブロックサイズ以上のとき、蓄積されたデータがブロックサイズ以上と判定し、前記書込手段は、前記特定のファイルバッファの先頭からブロックサイズ分のデータを取り出し、取り出したデータを前記空きブロックに書き込むこととしている。
このような構成によって、一つのファイルのデータが占有するブロックの単位で書き込むことができる。
【００１２】
ここで、前記判定手段は、各ファイルバッファのデータサイズをクラスタサイズで除した商の合計が前記所定数以上のとき、蓄積されたデータがブロックサイズ以上と判定し、前記書込手段は、前記各ファイルバッファからクラスタのサイズの単位で前記所定数のクラスタ分のデータを取り出し、前記空きブロックに書き込むこととできる。
このような構成によって、複数の各ファイルの書きこみデータ量の比率に準じて各ファイルのデータが混在するブロックの単位で書き込むことができる。
【００１３】
ここで、割り当てられた前記空きブロックに前記書込手段が書き込む前に、前記空きブロックの消去を行なう消去手段をさらに備えることができる。
このような構成によって、データの書き込み時までに、当該データの書き込み先ブロックの消去ができる。
また、上記目的は、複数のファイルバッファを備え、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置の制御方法であって、各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付ステップと、前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積ステップと、前記データ蓄積ステップにより蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定ステップと、判定が肯定的であるとき、前記データ蓄積ステップにより蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込ステップとを有する制御方法とすることで達成できる。
【００１４】
このような構成によって、記録前にブロック単位で消去が必要な記憶媒体に対しファイルのデータを記録する要求があったとき、書き込み先ブロックへのデータの書き込みは一回だけで済むので、記録の要求の都度書き込むのに較べると書き込み先ブロックに既に書き込んだデータがあればそれを再書き込みしなければならない無駄がなく、ファイルを能率的に記録することができる。
【００１５】
また、上記目的は、複数のファイルバッファを備え、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体に、データを記録するファイル記録装置に、各ファイルのデータの前記記録媒体への書き込み要求を受け付ける受付ステップと、前記書き込み要求されたデータをそれぞれ前記ファイルバッファに各別に蓄積させるデータ蓄積ステップと、前記データ蓄積ステップにより蓄積されたデータのサイズがブロックサイズ以上であるか否かを判定する判定ステップと、判定が肯定的であるとき、前記データ蓄積ステップにより蓄積されたデータのうち、ブロックサイズ分のデータを取り出し、前記記録媒体の空きブロックに書き込む書込ステップとを実行させるプログラムとすることで達成できる。
【００１６】
このような構成によって、記録前にブロック単位で消去が必要な記憶媒体に対しファイルのデータを記録する要求があったとき、書き込み先ブロックへのデータの書き込みは一回だけで済むので、記録の要求の都度書き込むのに較べると書き込み先ブロックに既に書き込んだデータがあればそれを再書き込みしなければならない無駄がなく、ファイルを能率的に記録することができる。
【００１７】
また、上記目的は、ドライバデータバッファを備え、クラスタをファイルに含まれるデータへの記録割当単位とし、連続した所定数のクラスタで構成されるブロックの単位で消去が必要な記録媒体にデータを記録するファイル記録装置に、前記記録媒体における書き込み先アドレスを含む書き込みの要求を受け付ける受付ステップと、前記ドライバデータバッファが空きでないとき、前記書き込みのデータと前記ドライバデータバッファのデータとが前記記録媒体のアドレスにおいて連続するか否かを判定する第１判定ステップと、肯定と判定されたとき、書き込みのデータを前記ドライバデータバッファに蓄積させるデータ蓄積ステップと、前記ドライバデータバッファに蓄積されたデータの書き込み先がブロックの境界に一致するか否かを判定する第２判定ステップと、第２判定ステップにて肯定と判定されたとき、前記ドライバデータバッファの先頭から前記ブロックの境界までのデータを前記記録媒体に書き込む書込ステップとを実行させるためのプログラムとすることで達成できる。
【００１８】
このような構成によって、記録前にブロック単位で消去が必要な記憶媒体に対し、記憶媒体の書き込み先のアドレスを指定してファイルのデータを書き込む要求があったとき、書き込み先ブロックへの要求のあったデータの書き込みは一回だけで済むので、書き込みの要求の都度書き込むのに較べて、書き込み先ブロックに以前ブロックに書き込み要求で書き込んだデータがあればそれを再書き込みしなければならないという無駄がなく、ファイルを能率的に記録することができる。
【００１９】
ここで、前記プログラムは前記記録媒体のフィルタドライバであることとできる。
このような構成によって、フィルタドライバの追加だけで、既存のファイルシステムのもとでファイルを能率的に記録することができる。
【発明を実施するための最良の形態】
【００２０】
以下に、本発明に係るファイル記録装置の実施の形態について図面を参照しながら説明する。
（第1の実施の形態）
第1の実施の形態は、ファイルシステムにより能率的にファイルを記録する。
図１は、本実施の形態の構成を示す図である。
【００２１】
ファイル記録装置は、メモリカード１１０、ファイルバッファ１２０、入出力要求受付部１３０、データ蓄積部１４０、ブロック管理部１５０、ファイル書込部１６０、ファイル管理部１９０から構成される。
ファイル記録装置は、他に不図示のＣＰＵとメモリを備え、上記の構成各部はプログラムあるいはメモリ領域であり、構成部がプログラムの場合はメモリにローディングされ、ＣＰＵで実行する。
【００２２】
ファイル記録装置は、単数のファイルまたは複数の各ファイルに対する入出力要求を受け付ける。入出力要求元は、例えばファイル記録装置で動作するアプリケーション、ネットワークを通じて要求を発行する装置等である。入出力要求元は、同時並行的に複数のファイルへの記録をファイル記録装置に要求することができる。
また、入出力要求元は、複数の種類、例えばアプリケーションとネットワーク上の他の装置であっても、１種類の中で複数、例えばアプリケーションの種類においてアプリケーションA、B、Cなど、であっても構わない。入出力要求元は、ここでは単数として扱う。
【００２３】
次に、ファイル記録装置の構成要素について説明する。
メモリカード１１０は、入出力要求元から要求のあったファイルの記録を行う。
メモリカード１１０の構成を図２に示す。図２において、メモリカード１１０は、コマンド実行部２０１、データバッファ２０２、フラッシュメモリ２０５で構成される。
コマンド実行部２０１は、メモリカード１１０で実行できるコマンドをファイル書込部１６０から受け取り、そのコマンドを実行する。コマンド実行部２０１コマンドが実行できるコマンドには、フラッシュメモリ２０５の書き込み、読み込み、ブロック消去とがある。
【００２４】
書き込みコマンドには、フラッシュメモリ２０５における書き込み先の先頭アドレスとしてセクタ番号が、データサイズとしてセクタ数が含まれている。コマンド実行部２０１は、書き込みコマンドを受け取ると、データバッファ２０２に設定されているセクタ数分のデータをフラッシュメモリ２０５の上述のセクタ番号から書き込んでいく。ここで、データサイズとしてのセクタ数の最大は、１ブロックサイズ相当数、つまり１２８である。
【００２５】
データバッファ２０２は、書き込みコマンドの書き込み対象のデータを保持するブロックサイズのバッファである。データバッファ２０２は、ファイル書込部１６０により転送された書き込みデータを保持し、書き込みコマンドを受け取ったコマンド実行部２０１により、ファイル書込部１６０の書き込みデータがフラッシュメモリ１１０に書き込まれる。データバッファ２０２は、また、読み込みコマンドによりフラッシュメモリ２０５から読みこれたデータを保持する。
【００２６】
読み込みコマンドには、フラッシュメモリ２０５における読み込み先の先頭アドレスとデータサイズとして、セクタ番号とセクタ数とが含まれている。セクタ数の最大は、書き込みの場合と同じく１２８である。
フラッシュメモリ２０５は、記録前にブロックの単位で消去が必要なメモリ、つまり書き込むセクタ（後述）、あるいはクラスタ（後述）が構成するブロックの消去が必要なメモリであり、コマンド実行部２０１によって書き込まれたファイルのデータを記憶する。
【００２７】
消去コマンドには、消去するブロック番号が含まれている。コマンド実行部２０１は、消去コマンドを受け取ると、フラッシュメモリ２０５の指定のブロック番号のブロックの消去を行なう。
図３は、フラッシュメモリ２０５のフォーマットの一例を示す図である。図３において、フラッシュメモリ２０５は、ブロック３１１、クラスタ３１２、セクタ３１３の階層的な区分の単位で管理される。
【００２８】
ブロック３１１は、記録前に必要な消去の単位である。ファイルのデータの書き込みの際、未使用である空きブロックがそのファイルのデータに割り当てられる。なお、ブロック番号４００１−４１９２は予備として図３に記載していない。
クラスタ３１２は、ファイルのデータに対する割り当ての最小単位であり、ファイルの管理表である後述のFAT２０５で参照される。
【００２９】
セクタ３１３は、データ入出力の最小単位であり、１から順に整数のセクタ番号が付されていて、そのセクタ番号がフラッシュメモリ上のアドレスを示す。また、フラッシュメモリ２０５への書き込みのときのデータのサイズは、バイト数ではなくセクタ数が使用される。図３のセクタ３１３では、各ブロックおよび各クラスタの先頭セクタ番号だけを記している。
【００３０】
フラッシュメモリ２０５は、その領域３１４が、システム領域３２１とユーザ領域３３１に大別される。
システム領域３２１には、管理情報が記録される。システム領域３２１は、さらに、予約領域３２２、FAT領域３２３、ルートディレクトリエントリ３２４からなる。
予約領域３２２は、ブート情報、および記録媒体であるフラッシュメモリ２０５に関するパラメータ情報等を納める。例３１６によると、セクタサイズは５１２B（バイト）、１クラスタは１６KB、１クラスタは３２セクタ、１ブロックは４クラスタというパラメータが記録されている。この場合、１クラスタは１６KB、１ブロックは６４KBのサイズを有している。図３の例では、フラッシュメモリ２０５は、２５６ＭＢの記憶容量を有している。なお、クラスタサイズ、ブロックサイズはこの値に限定されるものでは勿論ない。フラッシュメモリによっては、１ブロックが１２８KB、あるいは２５６KB等となる場合もあり、クラスタサイズも８KB、３２KB等となる場合もある。
【００３１】
FAT領域３２３は、FAT３３５を納める。FAT３３５は、ファイルのデータが存在するクラスタの場所を示す表である。
ルートディレクトリエントリ３２４は、ファイルの管理情報を納めたディレクトリからなる領域である。各ディレクトリには、ファイル名、ファイルの記録日時（不図示）、このファイルに割り当てられ、占有されている先頭のクラスタ番号（あるいは先頭のFATエントリ番号）などが納められる。
【００３２】
例えば、ファイルAのディレクトリ３３６は、先頭クラスタが１であり、クラスタ１に対応するFAT３３５のエントリ１を見ると「２」が記録されているので、ファイルAはクラスタ１に続いてクラスタ２を占有することが分かる。同様に、エントリ２には「３」が記録されているので、クラスタ３を占有し、エントリ３には「４」が記録されているので、クラスタ４を占有している。FATのエントリ４にはファイルの最終であることを示す「FF」が記録されているので、占有しているクラスタは、１，２，３，４の連続したクラスタであり、これはブロック４に相当することが分かる。なお、FAT領域３２３には、FAT３３５が安全のため二重に納められている（不図示）。
【００３３】
ユーザ領域３３１は、ファイルのデータ、あるいはディレクトリの情報が記録される領域であり、ファイルのデータへの割当は、本実施の形態では、原則的にブロック単位で行なう。システム領域３２１のフォーマットは固定的であり、クラスタ番号はユーザ領域でのみ使用される。
図１に戻り、ファイルバッファ１２０は、記録要求元から記録要求のあったデータを一時的に記憶しておくための２ブロックサイズのバッファ（メモリ領域）であり、ファイルの入出力要求元から記録を行なうファイルのオープンの要求時にファイル管理部１９０によりそのファイル専用に確保され、ファイルのクロ−ズの要求でファイル管理部１９０により開放（返却）される。なお、ファイルバッファ１２０のサイズは２ブロックサイズとしたが、後述の入出力要求の書き込みデータの最大サイズに１ブロックサイズを加えたサイズであればよい。
【００３４】
書き込みバッファ１２５は、フラッシュメモリ２０５に書き込むファイルのデータを一時的に記憶しておくためのブロックサイズのメモリ領域であり、ファイル書込部１６０により利用される。
入出力要求受付部１３０は、入出力要求元からメモリカード１１０のフラッシュメモリ２０５のファイルの入出力要求を受け付ける。ファイルの入出力要求には、ファイルのオープン、クローズ、ファイルのデータの書き込み（Write）、ファイルのデータの読み込み（Read）等がある。
【００３５】
入出力要求がファイルのオープンのとき、入出力要求受付部１３０は、オープンするファイルの情報であるファイル名を、また、クローズのとき、クローズするファイルの情報であるファイルデスクリプタ（後述）を入出力要求元からさらに受け取る。
入出力要求がファイルのデータの書き込みの場合、入出力要求受付部１３０は書き込むべきファイルのデータ（以下、「書き込みデータ」という）も入出力要求元から受け取る。書き込みデータは、書き込みの指示に続けて直接受け取るか、または、あらかじめ書き込み要求元が設定したデータが存在するメモリ上のアドレスとデータサイズ（バイト単位）を書き込みの指示に続けて受け取る。ここで、入出力要求受付部１３０が受け付ける書き込み要求ごとの書き込みデータサイズの最大値はブロックサイズ（６４ＫＢ）とする。なお、この最大値は固定ではなく別のサイズ、例えば２５６ＫＢにしてもよい。
【００３６】
書きこみデータを直接受け取ったとき、入出力要求受付部１３０は、メモリ上のデータ領域（不図示）に書き込みデータを転送しておく。
入出力要求がファイルのデータの読み込みの場合、入出力要求受付部１３０は読み込むべきファイルのデータに関する情報を入出力要求元から受け取るが、ファイル記録においては利用しないので詳細な説明は省略する。
【００３７】
入出力要求受付部１３０は、受け取った入出力要求の種類（オープン、書き込み等）と、処理対象のファイルの情報（例えば書き込みとクローズのときはファイルデスクリプタ、またオープンの時はファイル名称）と、さらに、書き込み要求のときは書き込みデータのアドレスとサイズとを入出力要求情報として、ファイル管理部１５０に通知する。そして、通知した入出力要求情報についての処理結果の情報を、ファイル管理部１５０から受け取り、入出力要求元に通知する。処理結果の入出力要求元への通知は、処理結果の情報を直接通知するか、またはメモリ領域に処理結果の情報を転送し、そのメモリアドレスを通知することにより行なう。
【００３８】
データ蓄積部１４０は、ファイル管理部１９０からの指示に基づき、ファイルデスクリプタで示されるファイルに対応するファイルバッファ１２０への書き込みデータの蓄積処理を行なう。当該書き込みデータの受け取りは、ファイル管理部１９０からデータが存在するメモリ上のアドレスとサイズを受け取ることにより行なう。
図４は、各ファイルバッファ１２０A、１２０B、１２０Cにデータが蓄積され、フラッシュメモリ２０５に書き込まれる一例を示す図である。図４において、書き込みデータの蓄積処理は、記録中のファイルごとに確保されているファイルバッファ、例えばファイルバッファ１２０A、１２０B、１２０Cのうち、書き込みデータの属するファイルに対応するファイルバッファ、例えば書き込みデータがファイルCのデータのとき、ファイルCに対応するファイルバッファ１２０Cに書き込みデータを蓄積する。ここで蓄積とは、ファイルバッファ１２０Cにデータがなければ、書き込みデータをファイルバッファ１２０Cの先頭から書き込み、また、データがあればその直後に追加することをいう。なお、ファイルバッファ１２０に蓄積されたデータのサイズは、クラスタサイズの整数倍とは限らないが、説明の便宜上、整数倍として例示した。また、ファイルバッファ１２０A、１２０B、１２０Cはいずれも２ブロックサイズ（８クラスタ）あるが、説明の便宜上ブロックサイズとして示した。
【００３９】
データ蓄積部１４０は、書き込みデータをファイルバッファ１２０に蓄積した後、ファイル管理部１９０に蓄積処理の終了通知を行なう。
ファイル書込部１６０は、ファイル管理部１９０からの指示に基づき、一つの指定されたファイルバッファ１２０において、その先頭から１ブロックサイズ分のデータを取り出し、取り出したデータを書き込みバッファ１２５に転送し、ファイルバッファ１２０に残ったデータを前詰めする。そして、書き込みバッファ１２５のデータをフラッシュメモリ２０５の指定のブロック（ブロック先頭から１ブロックサイズ分）に書き込むよう、メモリカード１１０に書き込み指示を行う。ここで、書き込み指示とは、書き込みバッファ１２５のデータをメモリカード１１０のデータバッファ２０２に転送するとともに、コマンド実行部２０１に対して書き込みコマンドと、書き込み先ブロックのアドレスと、書き込みデータのサイズとを設定することをいう。
【００４０】
ファイル管理部１９０は、メモリカード１１０のフラッシュメモリ２０５へのファイルのデータの書き込み、より詳しくはメモリカード１１０のファイルのデータの書き込みがブロック単位で行なわれるように制御する。
ファイル管理部１９０は、入出力要求受付部１３０から入出力要求情報を受け取る。受け取った入出力要求情報に含まれる入出力要求の種類が書き込みの場合、データ蓄積部１４０に対して、当該入出力要求情報に含まれる書き込みデータのメモリアドレスとサイズとを通知し、また入出力要求情報に含まれるファイルデスクリプタが示すファイルに対応するファイルバッファ１２０に当該書き込みデータを蓄積するように指示する。
【００４１】
そして、データ蓄積部１４０から書き込みデータの蓄積の終了通知を受け取ると、ファイル管理部１９０は、上記ファイルバッファ１２０に蓄積されたデータのサイズを調べ、それがブロックサイズ以上であるか否かを判定する。
判定が肯定の場合、ファイル管理部１９０は、FAT３３５から空きブロックを検索し、あればその空きブロックを割り当て、さらに、その空きブロックを消去する。空きブロックの消去は、ファイル管理部１９０がメモリカード１１０のコマンド実行部２０１に対し、その空きブロックのブロック番号を指定した消去コマンドを発行することにより行なう。ここで空きブロックとは、構成要素のクラスタのすべてが空き（未使用）となっているブロックのことである。
【００４２】
なお、空きブロックの消去は、本実施の形態では空きブロックの割り当て時に行なうとしたが、空きブロックの発生時、または、発生時から書き込み時までの間のいずれかのタイミングで行なうようにしてもよい。また、消去の有無を、ブロックごとに設けた消去フラグで管理するようにし、メモリカード１１０の空き時間を利用して消去するようにしてもよい。
【００４３】
ファイル管理部１９０は、次に、ファイル書込部１６０に対して、その特定のファイルバッファ１２０を指定して、そのファイルバッファ１２０の先頭から１ブロックサイズ分のデータをフラッシュメモリ２０５に書き込むように指示する。そして、ファイル管理部１９０は、ファイル書込部１６０から終了通知をうけとったら、書き込んだファイルに関してFAＴ３３５を更新する。
【００４４】
例えば、図４において、ファイル書込部１６０が新規のファイルC４２５に、書き込みバッファ１２５にあるファイルCのデータ１ブロック分（クラスタ９〜１２により構成されるブロック番号６）をフラッシュメモリ２０５に書き込むと、ファイル管理部１９０は、ファイルCのディレクトリ４２２に先頭のクラスタ番号である９を記録し、FAT４２１内のクラスタ９から１２までのクラスタの連鎖として、各エントリに次のエントリ番号をそれぞれ記録する。
【００４５】
ファイル管理部１９０は、空きブロックがないときは、エラー処理として、空きブロックの不足の書き込み不可とする旨のログ情報を不図示のログファイルに出力し、あるいは不図示の表示部に表示する。
なお、本実施の形態では、空きブロックがないとき書き込み不可としたが、空きクラスタの合計がブロックサイズ分あれば、ブロックサイズ分を検索し割り当てるようにしてもよい。この場合は、各クラスタごとにそのクラスタが属するブロックに対する「リード・モディファイ・ライト」が必要である。
【００４６】
ファイル管理部１９０は、また、入出力要求受付部１３０から書き込み要求以外の種類の入出力要求を受け取ったとき、その処理を次のように行なう。
入出力要求がファイルのオープンのとき、入出力要求情報に含まれるファイル名のファイルがフラッシュメモリ２０５になければ新規ファイルの創生（クリエイト）を行ない、また、既にあればそのファイルを特定し、当該ファイルを示すファイルデスクリプタと呼ぶファイル識別情報を、入出力要求元にオープンの入出力要求に対する処理結果として返す。入出力要求元は、今後はファイルの指定をこのファイルデスクリプタにより行なう。新規ファイルの創生には、当該ファイル用のファイルバッファ１２０のメモリ確保、ディレクトリの作成が含まれる。
【００４７】
入出力要求がファイルのクローズのとき、ファイル管理部１９０は、入出力要求情報に含まれるファイルデスクリプタが示すファイルの記録の完了処理を行なう。この完了処理には、当該ファイル用のファイルバッファ１２０に残ったデータがあれば、それをフラッシュメモリ２０５に書き込み、当該ファイルバッファのメモリを開放（返却）する。
また、入出力要求がファイルの読み込みのとき、ファイル管理部１９０は、入出力要求情報に含まれるファイルデスクリプタが示すファイルからデータを読み込んで、入出力要求元に渡す。
【００４８】
ファイル管理部１９０は、ファイル記録装置の動作開始のときに起動され、メモリカード１１０に対して、フラッシュメモリ２０５のブロック１〜３のシステム領域３２１（図３）をメモリに読込む。この読み込みにより、ブロック、クラスタ、セクタに関する情報等を得る。また、ＦＡＴあるいはディレクトリの更新は、処理の効率化のために、まずメモリ上で行う。そして、適宜、メモリカード１１０に対し書込コマンドを発行して、図３のフラッシュメモリ２０５のブロック２またはブロック３を最新の情報として書き込み、更新する。なお、システム領域についても、書き込みの前にブロックを消去するのは勿論である。
【００４９】
図５〜図７は、ファイル記録の処理手順を示すフローチャートである。ファイル記録の動作をこれらの図をもとに説明する。
図５において、入出力要求受付部１３０は、ファイルの入出力要求を入出力要求元から受け付ける。
入出力要求が、新規のファイルのオープンのとき（S５１４）、入出力要求受付部１３０は、オープンするファイル名も入出力要求元から受け取り、オープン要求とファイル名とを入出力要求情報としてファイル管理部１９０に伝達する。ファイル管理部１９０は、指定ファイル名のファイルのオープン処理を行なう（Ｓ５１６）。ファイルのオープン処理の詳細は後述する。
【００５０】
入出力要求が、新規のファイルのクローズのとき（S５１８）、入出力要求受付部１３０は、クローズするファイルのファイルデスクリプタも入出力要求元から受け取り、クローズ要求とファイルデスクリプタとを入出力要求情報としてファイル管理部１９０に伝達する。ファイル管理部１９０は、そのファイルデスクリプタが示すファイルのクローズ処理を行なう（Ｓ５２０）。ファイルのクローズ処理の詳細は後述する。
【００５１】
入出力要求が、データの書き込みのとき（S５２２）、入出力要求受付部１３０は、書き込みデータを、書き込みの指示に続けて直接受け取るか、または、あらかじめ入出力要求元が設定した書き込みデータが存在するメモリ上のアドレスとデータサイズ（バイト単位）を書き込みの指示に続けて受け取る。データを直接受け取ったとき、入出力要求受付部１３０は、メモリ上のデータ領域（不図示）にデータを転送し、そのアドレスとサイズのデータ書き込み要求を示す入出力要求情報を作成し、ファイル管理部１９０に通知する。書き込み要求に対応する処理である書込要求処理については後述する。
【００５２】
また、入出力要求が、上記以外のとき、当該要求に対応する処理を行なう（Ｓ５２６）。当該要求には、フラッシュメモリ２０５のファイルのデータの読み込み要求も含まれるが詳細な説明は省略する。
図６は、ファイルのオープンとクローズの処理を示すフローチャートである。
ファイルのオープンでは、ファイル管理部１９０は、ファイルオープンの入出力要求情報を入出力要求受付部１３０から受け取り、入出力要求情報に含まれるファイル名のファイルのディレクトリ、例えば図４の「ファイルＣ」のディレクトリ４２２を、図３のルートディレクトリエントリ３２４に作成する（Ｓ６１０）。なお、ファイル名のファイルのディレクトリが既にあれば、そのファイルは既存ファイルでありディレクトリの作成は不要である。
【００５３】
次に、ファイル管理部１９０は、オープンしたファイルに対応するファイルバッファ１２０、例えば図４においてオープンしたファイルが「ファイルＣ」のときファイルバッファ１２０Ｃを確保する（Ｓ６１２）。そして、当該ファイルを示すポインタ情報であるファイルデスクリプタを作成し、入出力要求受付部１３０に処理結果として通知する。入出力要求受付部１３０は、オープン要求の処理結果としてそのファイルデスクリプタを入出力要求受付部１３０を通じて入出力要求元に返す。
【００５４】
ファイルのクローズでは、ファイル管理部１９０は、ファイルクローズの入出力要求情報を入出力要求受付部１３０から受け取り、入出力要求情報に含まれるファイルデスクリプタが示すファイルに対応するファイルバッファ１２０Cを開放する（Ｓ６５４）。最後に、当該ファイルのディレクトリ、例えばディレクトリ４２２に記録日時（不図示）を記録し、クローズ要求の処理結果として入出力要求受付部１３０を通じて正常終了の旨を入出力要求元に返す。
【００５５】
図７は、ファイルのデータ書込要求の処理を示すフローチャートである。
図７において、ファイル管理部１９０は、入出力要求がデータの書き込みのとき、データ蓄積部１４０に対し、入出力要求情報に含まれるファイルデスクリプタが示すファイルに対応する特定のファイルバッファ１２０と、書き込みデータが存在するデータ領域のアドレスとサイズとを通知して、上述のデータ領域からファイルバッファ１２０に蓄積するように指示する（Ｓ７１０）。データ蓄積部１４０は、ファイル管理部１９０からの指示に基づき、指定されたデータ領域の書き込みデータをァイルバッファ１２０へ蓄積する処理を行なう。
【００５６】
データ蓄積部１４０から、蓄積の終了通知を受け取ったとき、ファイル管理部１９０は、終了通知で蓄積の対象となった特定のファイルバッファ１２０に蓄積されたデータのサイズを調べ、それがブロックサイズで以上であるか否かを判定する（Ｓ７１２）。
判定が肯定の場合、ファイル管理部１９０は、FAT３３５から空きブロックを検索し（Ｓ７１６）、空きブロックがあれば（Ｓ７１８）、その空きブロックを割り当て、さらに、メモリカード１１０にその空きブロックを消去させる。
【００５７】
ファイル管理部１９０は、当該ファイルバッファ１２０に蓄積されたデータを上記の空きブロックに書き込むようにファイル書込部１６０に指示する。ファイル書込部１６０は、その指示に基づき、指定のファイルバッファ１２０の先頭からブロックサイズ分のデータを取り出し、そのデータを書き込みバッファ１２５に転送し（Ｓ７１４）、ファイルバッファ１２０の残ったデータを前詰めする。そして、書き込みバッファ１２５のデータをメモリカード１１０のデータバッファ２０２に転送するとともに、コマンド実行部２０１に対して書き込みコマンドと、割り当てられた空きブロックの先頭アドレスとブロックサイズとを設定することにより、メモリカード１１０に対し、フラッシュメモリ２０５上の指定のブロックにデータを書き込ませる（Ｓ７２４）。ファイル書込部１６０は、メモリカード１１０から書き込みの終了通知を受け取ると、ファイル管理部１９０に書き込みの終了通知を同じく行なう。
【００５８】
ファイル管理部１９０は、ファイル書込部１６０から書き込みの終了通知を受け取ると、書き込んだファイルに関してFAＴを更新する（Ｓ７２６）。そして、Ｓ７１２に分岐して当該ファイルバッファ１２０の残ったデータに関して同様な処理を行なう。
本実施の形態の変形例として、書き込みデータ蓄積の例外を実施しても良い。例えば、書き込み要求において、直ちに書き込みを行なわせるオプションがあっても良い。この場合はデータの蓄積を行なわないで直ちにフラッシュメモリ２０５に書き出す。あるいは、書き込み要求があったとき、データ蓄積後、当該ファイルバッファにタイマを設定し、一定時間たっても当該ファイルバッファの状態が変化しなければ、当該ファイルバッファのデータの書き込みを行なうようにしてもよい。また、書き込み要求のうち、既存のデータを指定のデータと置き換える書き込み要求の場合、その要求の処理の前に、要求のあったファイルに対応するファイルバッファのデータをすべて書き込むようにしてもよい。
（第2の実施の形態）
第2の実施の形態では、フラッシュメモリにブロック単位で書き込むとき、そのブロックには複数ファイルのデータが混在可能である。
【００５９】
本実施の形態におけるファイル記録装置の構成は、図１で示される第1の実施の形態の構成と、固有の構成だけが異なる。つまりファイル管理部１９０とファイル書込部１６０との２つの構成要素の機能だけが異なるので、以下では主にその相違点を説明する。
図８は、本実施の形態において、各ファイルバッファ１２０A、１２０B、１２０Cにデータが蓄積され、フラッシュメモリに書き込まれる一例を示す図である。第1の実施の形態（図４）では、最近蓄積された特定のファイルバッファ１２０のデータサイズがブロックサイズになったとき、フラッシュメモリ２０５に書き込まれたが、本実施の形態では、データ蓄積部１４０によって蓄積された特定のファイルバッファ２０のデータサイズがブロックサイズに達していなくても、複数の各ファイルバッファ１２０のデータをクラスタサイズ単位で換算して、合計のクラスタ数がブロックの構成クラスタ数以上、つまり４以上になっていれば、ファイル管理部１９０は複数の各ファイルバッファ１２０からクラスタサイズの単位でブロックサイズになるまで取り出して、書き込みバッファ１２５に転送し、フラッシュメモリの空きブロックに書き込む。図８の例では、書きこみ前のフラッシュメモリ２０５が、図３の例３１６の状態として、ファイルバッファＡから１クラスタ分、ファイルバッファＢから１クラスタ分、ファイルバッファＣから２クラスタ分を取り出して、フラッシュメモリ例８１１で示すようにクラスタ９―１２からなる空きブロック（ブロック番号６）に書き込んでいることが分かる。この場合でも、ファイルＡ８２５はクラスタ９に、ファイルＢ８２６はクラスタ１０に、またファイルＣ８２７はクラスタ１１と１２に書き込まれ、同一クラスタ内での異なるファイルのデータの混在はない。
【００６０】
書き込まれたファイルのデータに関して、ＦＡＴ８２１とディレクトリ８２２の更新を行なう。
なお、各ファイルバッファ１２０のデータをクラスタサイズ単位で換算するとは、各ファイルバッファ１２０において、ファイルバッファのデータのサイズを超えないクラスタの数のうち、最大のクラスタ数を得ることである。
【００６１】
以上の処理により、書き込みのデータをファイルごとにブロックサイズ単位になるまで待って、単一ファイルのデータの書き込みを行なうよりも、全体として早くデータが書き込まれる。また、同一主題の映像データと音声データの同時ファイル記録のように、データ量の比率が異なるファイルのデータの記録のときでも、そのデータ量に比例配分して各ブロックに各ファイルのデータが記録される。
【００６２】
図９は、書き込み要求処理の詳細を示すフローチャートである。
図９のうち、第１の実施の形態の書き込み要求処理のフローチャートを示す図７において処理が同じものは同じステップ番号を付している。
書き込み要求の処理のうち、図７と異なる処理を中心に、図９を用いて説明する。
図９において、データ蓄積部１４０に蓄積された特定のファイルバッファのデータがブロックサイズ以上ではないとき（Ｓ７１２）、ファイル管理部１９０は、さらに、複数の各ファイルバッファ１２０のデータをクラスタサイズ単位で換算して、合計のクラスタ数がブロックの構成クラスタ数以上、つまり４以上になっているか否か判定する（Ｓ９２６）。判定結果が肯定なら、書き込み先のブロックを検索する（Ｓ７１６）
空きブロック割り当て後、書き込みデータが単一ファイルのデータか複数ファイルのデータかを、上述した特定のファイルバッファのデータのサイズで判定し（Ｓ９２７）、複数ファイルのデータのとき、ファイル管理部１９０は複数の各ファイルバッファ１２０からクラスタサイズの単位でブロックサイズになるまで取り出して、書き込みバッファ１２５に転送する（Ｓ９２８）。空きブロックに書き込み後のＦＡＴの更新は、書き込んだ複数のファイルに関して行なう。
（第３の実施の形態）
本実施の形態では、ファイル記録装置のもとで動作するフィルタドライバがファイル記録を能率的に行なう。
【００６３】
図１０は、本実施の形態のファイル記録装置にて動作するソフトウェアの階層構成を示す。
アプリケーションプログラム１０１０は、ファイル記録装置におけるファイル記録の要求元であり、例えば映像コンテンツの記録プログラムである。アプリケーションプログラム１０１０は、ファイルの記録のためにファイルシステム１０２０に対しファイルの入出力要求を発行する。
【００６４】
ファイルシステム１０２０は、既存の汎用のファイルシステム、例えばWindows（登録商標）オペレーティングシステム（マイクロソフト社製品）のFATファイルシステムであり、ファイルの記録と管理を行なう。ファイルシステム１０２０は、既存のファイルの管理とともに、新規ファイルの記録を含めて、アプリケーションプログラム１０１０からのファイルの入出力要求に対する処理を行なう。ファイルシステム１０２０自体は、従来と同様にクラスタ単位の割り当てと管理を行ない、ブロックを意識した管理と処理は行なわない。
【００６５】
ファイルシステム１０２０は、アプリケーションプログラム１０１０から、ファイルの入出力要求があるとき、その処理を行なう。
ファイルの入出力要求にはファイルのオープンとクローズ、ファイルのデータの読み込みと書き込みなどがある。
ファイルシステム１０２０は、ファイルの入出力要求を受け取ると、メモリカード１１０（図１）のデバイスドライバであるメモリカードデバイスドライバ１０４０（以下、単に「デバイスドライバ１０４０」という）に対してデバイスレベルの入出力要求を発行する。デバイスレベルの入出力要求とは、例えばファイルの入出力要求が書き込み要求のとき、ファイルシステム１０２０は必要に応じて空きのクラスタをFATを参照して検索して割り当て、書き込み先のアドレスをそのクラスタの先頭のセクタのセクタ番号で、またデータサイズをバイト数に代えてセクタ数でそれぞれ指定して、デバイスドライバ１０４０に対して書き込み要求を発行する。このように、デバイスレベルの入出力要求は、フラッシュメモリ２０５のデータの入出力をセクタ指定で行なう。
【００６６】
メモリカードフィルタドライバ１０３０（以下、単に「フィルタドライバ１０３０」という）は、ファイルシステム１０２０がデバイスドライバ１０４０に対して発行したデバイスレベルの入出力要求を横取り（Intercept）し、それが書き込み要求のとき、直ちにデバイスドライバ１０４０にデータを書き込ませないで、内部のメモリ領域であるドライバデータバッファに蓄積しておき、ある条件になったとき、デバイスドライバ１０４０に指示して蓄積したデータを一括してメモリカード１１０に書き込ませる。なお、フィルタドライバ１０３０の詳細については後述する。
【００６７】
デバイスドライバ１０４０は、フィルタドライバ１０３０からのデバイスレベルの入出力要求を受け取り、
メモリカード１１０に対する入出力の処理を行なう。
メモリカード１１０は、第１の実施の形態とほぼ同様であるが、フラッシュメモリのフォーマットは、第１の実施の形態での図３の予約領域３２２において、ブロックに関する情報であるブロックを構成するクラスタ数を示す「ブロック/クラスタ：４」の情報は、本実施の形態では記録されないことだけが相違する。
【００６８】
図１１は、フィルタドライバ１０３０の処理手順を示すフローチャートである。フィルタドライバ１０３０の入出力要求の処理を、図１１をもとに説明する。
フィルタドライバ１０３０は、ロードされた時、内部的に使用するメモリ領域であるドライバデータバッファを一定のサイズ分、例えば２ブロックサイズ分確保する。またブロックを構成するクラスタ数、例えば「ブロック/クラスタ：４」の情報およびブロックとクラスタとセクタの対応に関する情報等のブロックに関する情報を、内部情報として保持している。
【００６９】
ファイルシステム１０２０からドライバ１０４０に対してドライバレベルの入出力要求があると、当該入出力要求を横取りし、それがメモリカード１１０のフラッシュメモリ２０５に対する書き込み要求であるか否か判定する（S１１１０）。書き込み要求でなければ、当該入出力要求の処理をデバイスドライバ１０４０に行なわせる（S１１１２）。ここで、ドライバレベルの入出力要求とは、読み書きの指定がセクタで行われる入出力要求のことであり、例えば書き込みでは、フラッシュメモリ２０５における書き込み先の先頭アドレスとサイズがセクタ数で指定されている入出力要求のことである。なお、セクタ数で指定される書き込みデータのサイズの最大は、１ブロック分とする。
【００７０】
ドライバレベルの入出力要求には、書き込み、読み込み、指定ブロックの消去が含まれる。
図１２は、フィルタドライバ１０３０が管理するドライバデータバッファ１２０１のデータとメモリカード１１０のフラッシュメモリ２０５のブロックとの関係をアドレスで対応させた図である。図１２において、ドライバデータバッファ１２０１に、データＡ１、Ａ２、Ａ３がありこれらがアドレスにおいて連続しているとし、データＡ１、Ａ２、Ａ３の合計が１ブロック分であるとする。
【００７１】
第1の実施の形態では、ファイルバッファに１ブロック分までデータを蓄積してから書き込みを行なった。一方、本実施の形態では、図１２に示すように１ブロックのサイズになってから書き込むということは必ずしも行なわないが、一回の書き込みでは一つのブロックの一部または全体に対して行ない、２つのブロックに跨らないようにしている。また、そのブロックへの書き込みを書き込み要求のたびに何度も行なうのではなく、書き込みデータがアドレスにおいて連続するときはドライバデータバッファ１２０１に蓄積して、同一データの書き込みが一回で済むようにしている。
【００７２】
入出力要求が書き込み要求のとき、フィルタドライバ１０３０は、ドライバデータバッファ１２０１が空か否か判定する（S１１１３）。空であれば、S１１２０に分岐する。また、ドライバデータバッファ１２０１が空でなければ、書き込み要求のデータ（以下、「書き込みデータという」）とドライバデータバッファ１２０１のデータとが連続か否かを判定する（S１１１４）。
【００７３】
例えば、図１２においてドライバデータバッファ１２０１にデータＡ１があり、Ａ１の書き込み先アドレス（先頭のセクタアドレス）がセクタｓ１、書き込みのセクタ数がｄ１であり、書き込み要求のデータＡ２の書き込み先アドレスがｓ２、書き込みのセクタ数がｄ２であるとすると、ｓ２が（ｓ１＋ｄ）と一致すれば連続と判定する。
書き込みデータとドライバデータバッファ１２０１のデータとが連続でなければ（S１１１６）、ドライバデータバッファ１２０１に蓄積されたデータのフラッシュメモリ２０５への書き込みをデバイスドライバ１０４０に行なわせる（S１１１８）。
【００７４】
次に、書き込み要求のあった書き込みデータのドライバデータバッファ１２０１への蓄積を次のように行なう（S１１２０）。
ドライバデータバッファ１２０１が、もともと空であるか、または不連続な蓄積されたデータを書き込んだために空であるとき、フィルタドライバ１０３０は書き込み要求がされた書き込みデータをドライバデータバッファ１２０１に新たに蓄積する。
【００７５】
また、書き込みデータとドライバデータバッファ１２０１に蓄積されたデータとが連続であればデータバッファ１２０１のデータに書き込み要求のデータを追加によって蓄積し、書き込みデータサイズを更新する。
上記の例では、セクタ数がｄ１であった書き込みデータサイズを、書き込み要求のデータのサイズｄ２を加えた（ｓ１＋ｓ２）とする。なお、ドライバデータバッファ１２０１の書き込み先アドレス（セクタ番号）とデータサイズ（セクタ数）とは、データバッファ１０２１に付随する管理情報（不図示）として記憶しておく。
【００７６】
図１２において、ドライバデータバッファ１２０１のデータの先頭アドレス（セクタ番号）が、ブロック１の途中であり、ドライバデータバッファ１２０１のデータが１ブロック分あり、Ａ２とＡ３との間でアドレスがブロック境界に跨ることが示されている。このように、データが書き込み先のアドレスにおいては連続していても、ブロックの境界に跨るときは、１ブロック分のデータをフラッシュメモリ２０５に書き込むのは、２ブロック分のリード・モディファイ・ライトの処理が必要となり、さらにＡ３の後続のデータがまた１ブロック分連続していると、それらも２ブロック分のリード・モディファイ・ライトの処理が必要となるので無駄が大きい。
【００７７】
したがって、フィルタドライバ１０３０は、ドライバデータバッファ１２０１のデータにブロック境界があるか否か判定する（Ｓ１１２２）。ここで、データにブロック境界があるというのは、データの書き込み先のセクタのいずれかが、ブロックの終端、つまりブロックの最後のセクタと一致する場合をいう。データバッファ１２０１の先頭から、書き込み先のアドレスがブロックの終端までのデータ（Ａ１＋Ａ２）を、フラッシュメモリ２０５の書き込み先ブロック（図１２の例ではブロック１）へ書き込みを行なう。ここで、データの書き込み先がブロック境界に一致するとは、また、書き込み先ブロック（図１２の例ではブロック１）への書き込みは、書き込み先ブロックのメモリへの読み込みとデバイスドライバ１０４０に指示し、書き込み先ブロックの消去をデバイスドライバ１０４０に指示し、読み込まれたメモリ上のブロックデータにＡ１＋Ａ２を追加修正し、追加修正したメモリ上のブロックデータの書き込み先ブロックへの書き込みをデバイスドライバ１０４０に指示することによって行なう。
【００７８】
本実施の形態では、フィルタドライバ１０３０により、ブロック単位の書き込みを行なうようにしたが、これに限定されない。デバイスドライバに上記のフィルタドライバの機能を組み込んで、実施しても良い。あるいは、ファイルシステムに上記のフィルタドライバの機能を組み込んで、実施しても良いのは勿論である。
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【００７９】
本発明の方法を、コンピュータシステムを用いて実現するためのコンピュータプログラムであるとしてもよいし、前記プログラムを表すデジタル信号であるとしてもよい。
また、本発明は、前記プログラム又は前記デジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば半導体メモリ等であるとしてもよい。
また、本発明は、電気通信回線、無線又は有線通信回線、若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【産業上の利用可能性】
【００８０】
本発明に係るファイル記録装置は、ビデオなどの映像、音声等の大量データを能率的に記録でき、これらの大量データを記録し配布する産業、たとえば音楽産業、情報産業等で利用される。
【図面の簡単な説明】
【００８１】
【図１】本発明に係るファイル記録装置の第1の実施の形態の構成を示す図である。
【図２】上記実施の形態のメモリカードの構成を示す図である。
【図３】上記実施の形態におけるフラッシュメモリのフォーマットの一例を示す図である。
【図４】上記実施の形態におけるファイルバッファのデータの蓄積の様子と、フラッシュメモリに書き込まれる一例を示す図である。
【図５】上記実施の形態のファイル記録の全体の処理手順を示すフローチャートである。
【図６】上記実施の形態のファイル記録のオープン等の処理手順を示すフローチャートである。
【図７】上記実施の形態のファイル記録の書き込み要求の処理手順を示すフローチャートである。
【図８】本発明に係るファイル記録装置の第２の実施の形態におけるファイルバッファのデータの蓄積の様子とフラッシュメモリに書き込まれる一例を示す図である。
【図９】上記実施の形態の書き込み要求の処理手順を示すフローチャートである。
【図１０】本発明に係るファイル記録装置の第３の実施の形態におけるソフトウェアの階層構成を示す図である。
【図１１】上記実施の形態のフィルタドライバの処理手順を示すフローチャートである。
【図１２】上記実施の形態のデータバッファのデータとフラッシュメモリのブロックとの関係を示す図である。
【符号の説明】
【００８２】
１１０  メモリカード
１２０  ファイルバッファ
１２５  書き込みバッファ
１３０  入出力要求受付部
１４０  データ蓄積部
１６０  ファイル書込部
１９０  ファイル管理部
【図１】
0004287433.tif 000002
【図２】
0004287433.tif 000003
【図３】
0004287433.tif 000004
【図４】
0004287433.tif 000005
【図５】
0004287433.tif 000006
【図６】
0004287433.tif 000007
【図７】
0004287433.tif 000008
【図８】
0004287433.tif 000009
【図９】
0004287433.tif 000010
【図１０】
0004287433.tif 000011
【図１１】
0004287433.tif 000012
【図１２】
0004287433.tif 000013