(57)【要約】【課題】  電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することが可能な書き込み処理方法を提供することである。【解決手段】  本発明のファイル情報の書き込み処理方法は、アプリケーションからのファイル情報の書き込み指示に対応して、空き領域検索部１２によって、コンピュータの記憶手段の実データ領域中の空き領域であるクラスタを検索して取得し、空き領域であるクラスタが存在する場合に、書き込み部１３によって、前記アプリケーションからの書き込み指示の対象となる前記記憶手段の実データ領域内の１以上のクラスタに上書きすべき情報をその空き領域であるクラスタに書き込み、書き込み部１３によって、書き込み対象となるクラスタの直前のクラスタに対応するポインタ情報をその書き込みを行ったクラスタのうちの先頭のクラスタを指すように変更し、解放部１５によって、空き領域のクラスタに書き込まれた情報が上書きされることになっていたクラスタを解放する、ことを特徴としている。【選択図】図３
2006184979.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータが実行する書き込み処理方法において、
前記コンピュータの記憶手段の実データ領域中の空き領域であるクラスタを検索して取得し、
空き領域であるクラスタが存在する場合に、前記アプリケーションからの書き込み指示の対象となる前記記憶手段の実データ領域内の１以上のクラスタに上書きすべき情報をその空き領域であるクラスタに書き込み、
空き領域のクラスタに書き込まれた情報によって上書きされることになっていたクラスタを解放することを特徴とするファイル情報の書き込み処理方法。
【請求項２】
前記上書きすべき情報中にその情報が空き領域のクラスタに書き込まれていない部分があるか否かを判定し、
書き込まれていない部分がある場合に、前記検索、書き込み、解放、を再度実行することを特徴とする請求項１記載のファイル情報の書き込み処理方法。
【請求項３】
前記空き領域への書き込みに続いて、さらに、
その書き込みを行った空き領域のクラスタに対応するポインタ情報を設定し、
書き込み対象となるクラスタの直前のクラスタに対応するポインタ情報をその書き込みを行ったクラスタのうち先頭のクラスタを指すように変更することを特徴とする請求項１記載の書き込み処理方法。
【請求項４】
アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータが実行する書き込み処理方法において、
移動先のディレクトリのエントリを検索して前記書き込み指示が上書きを伴うファイルの移動であるか否かを判定すべく検索し、
前記書き込み指示が上書きを伴うファイルの移動であるか否かに応じて、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成し、
移動元のファイルのディレクトリエントリを削除することを特徴とするファイル情報の書き込み処理方法。
【請求項５】
前記判定において、前記書き込み指示が上書きを伴うファイルの移動であると判定された場合に、移動先のファイルが移動指示の前にポイントしていた実データを解放することを特徴とする請求項４記載のファイル情報の書き込み処理方法。
【請求項６】
アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータに実行させる書き込み処理プログラムにおいて、
前記コンピュータの記憶手段の実データ領域中の空き領域であるクラスタを検索して取得するステップと、
空き領域であるクラスタが存在する場合に、前記アプリケーションからの書き込み指示の対象となる前記記憶手段の実データ領域内の１以上のクラスタに上書きすべき情報をその空き領域であるクラスタに書き込むステップと、
空き領域のクラスタに書き込まれた情報によって上書きされることになっていたクラスタを解放するステップと、を前記コンピュータに実行させることを特徴とするファイル情報の書き込み処理プログラム。
【請求項７】
前記上書きすべき情報中にその情報が空き領域のクラスタに書き込まれていないクラスタがあるか否かを判定するステップと、
書き込まれていないクラスタがある場合に、前記検索ステップ、書き込みステップ、解放ステップ、を再度、前記コンピュータに実行させることを特徴とする請求項６記載のファイル情報の書き込み処理プログラム。
【請求項８】
前記書き込みステップに続いて、
その書き込みを行った空き領域のクラスタに対応するポインタ情報を設定するステップと、
書き込み対象となるクラスタの直前のクラスタに対応するポインタ情報をその書き込みを行ったクラスタのうちの先頭のクラスタを指すように変更するステップを、さらに備えることを特徴とする請求項６記載の書き込み処理プログラム。
【請求項９】
アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータに実行させる書き込み処理プログラムにおいて、
移動先のディレクトリのエントリを検索して前記書き込み指示が上書きを伴うファイルの移動であるか否かを判定すべく検索するステップと、
前記書き込み指示が上書きを伴うファイルの移動であるか否かに応じて、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成するステップと、
移動元のファイルのディレクトリエントリを削除するステップと、を前記コンピュータに実行させることを特徴とするファイル情報の書き込み処理プログラム。
【請求項１０】
前記判定ステップにおいて、前記書き込み指示が上書きを伴うファイルの移動であると判定された場合に、移動先のファイルが移動指示の前にポイントしていた実データを解放するステップと、をさらに前記コンピュータに実行させることを特徴とする請求項９記載のファイル情報の書き込み処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル情報の書き込み処理方法およびプログラムに関する。
【背景技術】
【０００２】
コンピュータシステムにおけるファイルアクセスは、アプリケーション、ファイルシステム（ミドルウェア）、デバイス・ドライバの３つのプログラムの組み合わせによって実現される。ここで、アプリケーションとは、ワードプロセッサ、ＣＡＤソフト、等の各種アプリケーション・プログラムである。また、デバイス・ドライバとは、磁気ディスク、フラッシュメモリ、等の電源がオフになっても記憶内容が保持される（不揮発性の）二次記憶内の各領域に対して読み書きを行う制御プログラムである。また、ファイルシステム（ミドルウェア）とは、アプリケーションとデバイス・ドライバとの間に設けられ、アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理を行う。
【０００３】
このようなファイルシステムにおいては、データの書き込み途中に電源断等によって書き込み不良が生じた場合に、その書き込みに関わるファイルの情報をいかに復元するかということがしばしば問題となる。そして、その関係から、特許文献１等の多数の文献にそのような書き込み不良に対処する方法が開示されている。
【特許文献１】特開平２００３−１６９２９３号公報  「データ記録再生装置及びデータ記録再生方法、並びにデジタルカメラ」
【発明の開示】
【発明が解決しようとする課題】
【０００４】
以下では、コンピュータでのファイルアクセス時において、アプリケーションからファイルシステムに与えられる書き込み指示が、ファイルの上書き指示である場合と、ファイルの移動指示である場合とを説明する。
【０００５】
まず、ファイルの上書き指示がアプリケーションからミドルウェアになされた場合に、その上書き指示に対応してミドルウェア側で行われる処理について説明する。
図１７は、ファイルシステムのデータ構造を示す図である。
【０００６】
図１７に示されるように、ファイルシステムは、ブートセクタ（Boot Sector）、ファイルアロケーションテーブル（File Allocation Table、ＦＡＴ）、実データ領域、の３つの領域から構成される。
【０００７】
ここで、ブートセクタとは、ファイルシステムの容量、実データ領域の処理単位であるクラスタの大きさ、実データ領域内のルートディレクトリの位置、などのファイルシステム全般に関わる情報が記述されている。また、実データ領域の個々のクラスタに対応するＦＡＴの個々の項目には、そのクラスタがどのクラスタにつながるかを示すリンク先のポインタ情報が格納されている。つながる先がない場合は、このポインタ情報に「Ｅｎｄ」が設定される。また、クラスタが解放されている場合は、このポインタ情報に「ＮＵＬＬ」が設定される（図では空欄となっている）。すなわち、ＦＡＴテーブル上の「ＮＵＬＬ」以外のポインタ値が設定されている項目に対応するクラスタ内に保持されるデータは、意味を持つデータである。
【０００８】
また、実データ領域は、クラスタと呼ばれる（処理）単位に区切って使用され、ファイルやディレクトリについての実際の情報が格納される。なお、図１７では、簡単のため、実データ領域を１６個のクラスタに分割し、それらクラスタは、右上から左下に進むに従い、順次、１６進数の０番〜１５番の先頭アドレス、すなわち、「０ｘ０」、「０ｘ１」、「０ｘ２」、「０ｘ３」、「０ｘ４」、「０ｘ５」、「０ｘ６」、「０ｘ７」、「０ｘ８」、「０ｘ９」、「０ｘＡ」、「０ｘＢ」、「０ｘＣ」、「０ｘＤ」、「０ｘＥ」、「０ｘＦ」を持つものとしている。
【０００９】
例えば、図１７では、ブートセクタを参照することで、実データ領域のルートディレクトリが「０ｘ０番」のクラスタに対応することが分かり、その「０ｘ０番」のクラスタの内容から、そのルートディレクトリには、ディレクトリエントリとして、データ長（Ｌｅｎｇｔｈ）＝５で、先頭の実データ（Ｄａｔａ１）が「０ｘ１番」のクラスタにあるファイル（Ｆｉｌｅ１）があることが示されている。
【００１０】
ＦＡＴテーブルには、実データ領域のクラスタ間のつながりについての情報（クラスタチェーン情報）が格納されているので、図１７において、ＦＡＴテーブルを参照することで、「０ｘ１番」のクラスタのデータ（Ｄａｔａ１）の後続のデータとして、「０ｘ２番」のクラスタのデータ（Ｄａｔａ２）が、また、「０ｘ２番」のクラスタのデータ（Ｄａｔａ２）の後続のデータとして、「０ｘＢ番」のクラスタのデータ（Ｄａｔａ３）が、また、「０ｘＢ番」のクラスタのデータ（Ｄａｔａ３）の後続のデータとして、「０ｘＥ番」のクラスタのデータ（Ｄａｔａ４）が、また、「０ｘＥ番」のクラスタのデータ（Ｄａｔａ４）の後続のデータとして、「０ｘ５番」のクラスタのデータ（Ｄａｔａ５）が存在することが分かり、また、その「０ｘ５番」のクラスタに対応するＦＡＴテーブルの項目が「Ｅｎｄ」となっていることから、その「０ｘ５番」のクラスタのデータ（Ｄａｔａ５）で、そのファイル（Ｆｉｌｅ１）のデータが終了することが分かる。なお、このように、（ルートディレクトリの）ディレクトリエントリＦｉｌｅ１が、Ｄａｔａ１、Ｄａｔａ２、Ｄａｔａ３、Ｄａｔａ４、Ｄａｔａ５の順につながって構成されていることを、図１７の下段に示されるように図示するものとする。
【００１１】
このようなＦｉｌｅ１に対して、そのＦｉｌｅ１を出力したアプリケーションからの上書き指示がなされる。図１８は、その上書き指示がなされる前のファイルの状態を示す図である。
【００１２】
ファイルシステム（ミドルウェア）は、アプリケーションからのファイルの上書き指示に含まれる上書きの開始位置と長さについての情報を用いて、その書き込みの対象となる二次記憶（実データ領域）内のクラスタ（１つまたは複数）を特定する。ここでは、Ｄａｔａ２、Ｄａｔａ３、Ｄａｔａ４に対応するクラスタを、そのようにして特定されたクラスタとする。
【００１３】
すなわち、まず、図１９に示すように、Ｄａｔａ２に対応するクラスタの内容が上書きされ、次に、図２０に示すように、Ｄａｔａ３に対応するクラスタの内容が上書きされ、さらに、図２１に示すように、Ｄａｔａ４に対応するクラスタの内容が上書きされる。
【００１４】
図２２は、従来のファイルの上書き処理のフローチャートである。
図２２において、まず、ステップＳ３０１で、上書き対象として特定された実データ領域内の１つまたは複数のクラスタに対してデータの上書き（書き込み）処理がなされ、続く、ステップＳ３０２で、ファイル情報、例えば、最終更新日時の情報を変更（更新）する。
【００１５】
しかし、このような手順で、ファイルの上書きを行うと、例えば、図１９、図２０、図２１に示すような１回目、２回目、３回目の書き込み途中に、電源断などの書き込み不良が生じた場合は、その書き込み途中のクラスタ、すなわち、Ｄａｔａ２、Ｄａｔａ３、または、Ｄａｔａ４に対応するクラスタのデータが不完全な状態で二次記憶内に格納されることになる。つまり、図１９のＤａｔａ２に対応するクラスタの上書きが開始されてから、図２１のＤａｔａ４に対応するクラスタの上書きを完了する前までの期間は、電源断などが生じた場合に、不完全なデータが二次記憶内に残る期間、すなわち、データ破壊の危険性がある期間となる。
【００１６】
次に、ファイルの移動指示がアプリケーションからミドルウェアになされた場合に、その移動指示に対応してミドルウェア側で行われる処理について説明する。
図２３は、ファイルが移動される前のデータ構造を示す図である。図２３の説明で図１７と重複する部分は基本的には省略される。
【００１７】
図２３において、ブートセクタ（不図示）の内容からディレクトリｄｉｒのディレクトリエントリに対応する実データ領域のクラスタとして、「０ｘ０番」のクラスタが参照され、そのディレクトリｄｉｒの内容から、そのディレクトリｄｉｒの下にディレクトリｄｉｒ１とｄｉｒ２とがあり、ディレクトリｄｉｒ１のディレクトリエントリは「０ｘ３番」のクラスタに格納されていること、また、ディレクトリｄｉｒ２のディレクトリエントリは「０ｘ４番」のクラスタに格納されていること、が分かる。
【００１８】
「０ｘ３番」のクラスタを参照すると、ディレクトリｄｉｒ１はファイルｆｉｌｅ１を有し、そのデータ長＝３で、そのファイルｆｉｌｅ１の先頭のデータが「０ｘ１番」のクラスタに格納されていることが分かる。また、「０ｘ４番」のクラスタを参照すると、ディレクトリｄｉｒ２はファイルｆｉｌｅ２を有し、そのデータ長＝３で、そのファイルｆｉｌｅ２の先頭のデータが「０ｘ８番」のクラスタに格納されていることが分かる。そして、上述したように、ＦＡＴテーブルを参照することで、ファイルｆｉｌｅ１はＤａｔａ１、Ｄａｔａ２、Ｄａｔａ３のクラスタが、そのＤａｔａ１、Ｄａｔａ２、Ｄａｔａ３の順につながって構成されることが分かる。また、ファイルｆｉｌｅ２はＤａｔａ４、Ｄａｔａ５、Ｄａｔａ６のクラスタが、そのＤａｔａ４、Ｄａｔａ５、Ｄａｔａ６の順につながって構成されることが分かる。
【００１９】
すなわち、図２３の下半分に示される実データ領域とＦＡＴテーブルは、図２３の上半分に示されるようなファイル（ディレクトリ）構成を表していることが分かる。
以下では、￥ｄｉｒ￥ｄｉｒ１￥ｆｉｌｅ１を￥ｄｉｒ￥ｄｉｒ２￥ｆｉｌｅ２に移動する場合を図２４〜図２６を参照して説明する。図２３の例では、移動先に￥ｄｉｒ￥ｄｉｒ２￥ｆｉｌｅ２が既に存在していることから、この移動処理では、ファイルの上書きが伴うことになる。
【００２０】
図２４は、アプリケーションからの移動指示に対してファイルシステム側で行われる処理（その１）である。図２４において、まず、上記の「￥ｄｉｒ￥ｄｉｒ１￥ｆｉｌｅ１を￥ｄｉｒ￥ｄｉｒ２￥ｆｉｌｅ２に移動する」旨の情報をファイルシステムがアプリケーションから受け取ると、その情報に基づいて、二次記憶内の実データ領域の移動元のファイルｆｉｌｅ１のディレクトリエントリが一次記憶にロードされた後、二次記憶の実データ領域からその移動元のファイルｆｉｌｅ１のディレクトリエントリが削除される。
【００２１】
続いて、図２５に示されるように、移動先に予め存在しているファイルであるｆｉｌｅ２を削除する。すなわち、二次記憶の実データ領域からその移動先のファイルｆｉｌｅ２のディレクトリエントリが削除されるとともに、ＦＡＴテーブルからファイルｆｉｌｅ２を構成する実データとしてのＤａｔａ４、Ｄａｔａ５、Ｄａｔａ６に対応する項目のポインタ情報がクリアされる（Ｄａｔａ４に対応する項目以降のチェーンがクリアされる）。
【００２２】
そして、図２６に示されるように、一次記憶に保持してある移動元のファイルｆｉｌｅ１のディレクトリエントリの情報を参照して、ディレクトリｄｉｒ２のディレクトリエントリにファイルｆｉｌｅ２が移動元のファイルｆｉｌｅ１の先頭の実データであるＤａｔａ１を指すように実データ領域内に作成される（書き込まれる）。
【００２３】
図２７は、従来のファイルの移動処理のフローチャートである。
図２７において、まず、ステップＳ４０１で、二次記憶内の実データ領域の移動元のファイルのディレクトリエントリが一次記憶にロードされた後、二次記憶の実データ領域からその移動元のファイルのディレクトリエントリが削除される。そして、ステップＳ４０２で、移動先でファイルを上書きするかが判定される。ステップＳ４０２で上書きすると判定された場合は、ステップＳ４０３において、予め存在していた移動先のファイルを削除し、ステップＳ４０４に進む。一方、ステップＳ４０２で上書きしないと判定された場合は、ただちに、ステップＳ４０４に進む。
【００２４】
ステップＳ４０４では、移動元のファイルの先頭の実データを指すように移動先のディレクトリのディレクトリエントリに移動先のファイル情報を書き込む。なお、以上の各ステップでは移動対象をファイルとして説明したが、移動対象はディレクトリであってもよい。フローをファイルとディレクトリとの両方に対応させるものにするには、移動対象がディレクトリであるか否かを判定するステップＳ４０５と、移動対象がディレクトリである場合に、その移動されるディレクトリの親ディレクトリ“．．”についての情報を移動元から移動先に変更（更新）するステップＳ４０６と、を追加すればよい。
【００２５】
以上説明したような手順で、ファイルの移動を行うと、図２４において二次記憶内の実データ領域の移動元のファイルｆｉｌｅ１のディレクトリエントリからその移動元のファイルｆｉｌｅ１の情報を削除した後から、図２６においてその移動元のファイルｆｉｌｅ１の情報を一次記憶から読み込むまでの期間は、電源断などの書き込み不良が生じた場合に、移動元のファイルの先頭の実データが格納されたクラスタの位置についての情報がなくなる期間、すなわち、データ破壊の危険性がある期間となる。
【００２６】
本発明の課題は、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することが可能な書き込み処理方法およびプログラムを提供することである。
【課題を解決するための手段】
【００２７】
本発明の第１態様の書き込み処理方法は、アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータが実行する書き込み処理方法において、前記コンピュータの記憶手段の実データ領域中の空き領域であるクラスタを検索して取得し、空き領域であるクラスタが存在する場合に、前記アプリケーションからの書き込み指示の対象となる前記記憶手段の実データ領域内の１以上のクラスタに上書きすべき情報をその空き領域であるクラスタに書き込み、空き領域のクラスタに書き込まれた情報によって上書きされることになっていたクラスタを解放する、ことを特徴とするファイル情報の書き込み処理方法である。
【００２８】
ここで、検索され取得された実データ領域中の空き領域のクラスタに、書き込み対象として特定されたクラスタに上書きすべきデータを書き込むので、その空き領域であるクラスタがその書き込み対象のクラスタの数だけ確保できた場合には、その空き領域のクラスタに、その上書きすべきデータを一度に書き込むことができる。この場合には、その書き込み対象のクラスタに直接データを上書きする従来例と比較し、データ上書き中に電源断が発生することで、不完全なデータが実データ領域中に格納されるリスクをなくすことが可能となり、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することができる。上書きすべき情報とは、更新情報すなわちＤａｔａ  Ｎｅｗのことである。
【００２９】
本発明の第２態様の書き込み処理方法は、アプリケーションからのファイル情報の書き込み指示に対応する指示をデバイス・ドライバ側へ出力する処理をコンピュータが実行する書き込み処理方法において、移動先のディレクトリのエントリを検索して前記書き込み指示が上書きを伴うファイルの移動であるか否かを判定すべく検索し、前記書き込み指示が上書きを伴うファイルの移動であるか否かに応じて、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成し、移動元のファイルのディレクトリエントリを削除する、ことを特徴とするファイル情報の書き込み処理方法である。
【００３０】
ここで、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成しているので、従来例のように、移動元のファイルの情報が一次記憶にのみ存在する期間がなくなり、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することができる。
【発明の効果】
【００３１】
本発明によれば、検索され取得された実データ領域中の空き領域のクラスタに、書き込み対象として特定されたクラスタに上書きすべきデータを書き込むので、その空き領域であるクラスタがアプリケーションからの書き込み指示に含まれるデータに対応するクラスタの数だけ確保できた場合には、その空き領域のクラスタに、その上書きすべきデータを一度に書き込むことができる。この場合には、その書き込み対象のクラスタに直接データを上書きする従来例と比較し、データ上書き中に電源断が発生することで、不完全なデータが実データ領域中に格納されるリスクをなくすことが可能となり、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することができる。
【００３２】
また、本発明によれば、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成しているので、従来例のように、移動元のファイルの情報が一次記憶にのみ存在する期間がなくなり、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することができる。
【発明を実施するための最良の形態】
【００３３】
以下、本発明の実施の形態を、図面を参照しながら詳細に説明する。
図１は、ファイルシステムを含むシステム全体のプロセス間の呼び出し関係を説明する図である。図１に示すように、アプリケーションからの「ファイル作成」、「ファイル移動」、「ファイルコピー」、「ファイル上書き」の各指示に対して、対応するプロセスがファイルシステム（ミドルウェア）側で起動される。例えば「ファイル作成」に対しては、ディレクトリエントリにその作成されるファイルが追加される。また、「ファイル移動」に対しては、移動元のディレクトリと移動先のディレクトリのディレクトリエントリが変更される。また、「ファイルコピー」では、コピー先のディレクトリのディレクトリエントリにコピーされるファイルが追加されるとともに、そのコピーされるファイルの実データが実データ領域に作成される。また、「ファイル上書き」では、後述するように、ファイルの上書き対象となる実データ領域内のクラスタのデータが空き領域のクラスタに書き込まれるとともに、ＦＡＴテーブルの情報もその書き込み処理に対応して変更される。
【００３４】
図２は、アプリケーションからの指示がファイルの上書きであった場合に、ファイルシステム側で起動されるプロセス間の呼び出し関係を示す図である。図２に示すように、アプリケーションから（そのアプリケーションが出力する）ファイルへの上書き指示がファイルシステム側に出力されると、そのファイルシステム側では、対応する「ファイル上書き」のプロセスが呼び出される。
【００３５】
この「ファイル上書き」のプロセスからは、ＦＡＴテーブルを読み込むことにより行われる「空き領域検索」プロセス、ＦＡＴテーブル、実データ領域のデータを更新するための各プロセス、すなわち、それらＦＡＴテーブル、実データ領域をメディア（二次記憶）から一次記憶に読み込む「ＦＡＴ読み込み」および「実データ読み込み」プロセス、一次記憶内で更新されたＦＡＴテーブル、実データ領域のデータをメディア（二次記憶）に書き込む「ＦＡＴ書き込み」および「実データ書き込み」プロセス、の各プロセスが呼び出される。
【００３６】
図３は、本発明の第１実施形態の書き込み処理部の構成を示すブロック図である。
図３において、書き込み処理部は、アプリケーションとデバイス・ドライバとの間に設けられ、該アプリケーションからのファイル情報の書き込み指示に対応する指示を該デバイス・ドライバ側へ出力する処理を行う。このアプリケーションからのファイル情報の書き込み指示は、上書きの開始位置、長さ、および、その長さを持つデータによって構成される上書きすべき情報として一次記憶内に保持される。
【００３７】
図３において、書き込み処理部は、アプリケーションからのファイル情報の書き込み指示に基づいて、書き込み指示の対象となるクラスタ（１つまたは複数）を特定する書き込み対象特定部１１と、二次記憶の実データ領域中の空き領域であるクラスタを検索して取得する空き領域検索部１２と、空き領域であるクラスタが存在する場合に、アプリケーションからの書き込み指示の対象となる上記二次記憶の実データ領域内の１以上のクラスタに上書きすべき情報をその空き領域であるクラスタに書き込む書き込み部１３と、書き込み指示の対象となるクラスタのうちで、空き領域のクラスタに書き込まれた情報が上書きされることになっていたクラスタを解放する解放部１５と、上記書き込み指示（上書きすべき情報）に含まれるデータのうち、空き領域のクラスタに書き込まれていない部分があるか否かを判定する判定部１４と、を備える。なお、図３の各部は、例えば、図１５のＣＰＵ５１とＲＡＭ５３との組み合わせに対応する。
【００３８】
以下に、本実施形態の書き込み処理部の動作について説明する。
まず、アプリケーションからのファイルの上書き指示を書き込み部１３が受け付けると、その上書き指示を受け付けたことをトリガとして、書き込み対象特定部１１と空き領域検索部１２とが起動される。
【００３９】
書き込み対象特定部１１では、そのアプリケーションからの書き込み指示に含まれる上書きすべき情報中の上書きの開始位置と長さについての情報を用いて、その書き込みの対象となる二次記憶（実データ領域）内のクラスタ（１つまたは複数）を特定する。また、空き領域検索部１２は、ＦＡＴテーブルを読み込んで（参照して）、実データ領域内の空き領域のクラスタ（使用されていないクラスタ）を検索して取得する。
【００４０】
空き領域検索部１２から検索結果の情報、例えば、空き領域のクラスタの位置を示す情報を受け取った書き込み部１３は、その検索結果の情報から空き領域のクラスタが実データ領域に存在するか否かを判定する。存在する場合、書き込み部１３によって、特定された書き込み指示の対象となる実データ領域内のクラスタ（１つまたは複数）に上書きすべき情報が検索結果中の空き領域のクラスタに書き込まれる。なお、上記実データ領域の先頭のクラスタと末尾のクラスタには、変更されないデータ部分が含まれる場合があるが、そのような場合は、合成部（不図示）によって、その変更されないデータ部分と新たに上書きされるデータ部分とが合成され、それらクラスタに書き込むべきデータが生成される。
【００４１】
この書き込み処理の後で、解放部１５によって、空き領域のクラスタに書き込まれた情報が上書きされることになっていた書き込み指示の対象となるクラスタ中の対応するクラスタが解放される。そして、判定部１４によって、上記書き込み指示に含まれるデータのうち、空き領域のクラスタに書き込まれていない部分があるか否かが判定される。そのような部分が書き込み指示に含まれるデータ中に存在する場合は、書き込み部１３によって、空き領域検索部１２が起動され、再び、空き領域の検索が行われる。この検索においては、解放部１５によって解放されたクラスタの数以上の空き領域が得られるので、書き込み部１３は、その解放されたクラスタの数以上の空き領域について、書き込み処理を実行する。そして、同様に、書き込まれたデータが上書きされることになっていたクラスタの解放が解放部１５によって行われる。
【００４２】
以下に、本実施形態の書き込み処理部がアプリケーションからのファイルの上書き指示を処理するプロセスを図４〜図７を参照して説明するが、これらの図面においては従来技術との比較のため、従来技術の説明で用いたのと同様のファイル構成に対してアプリケーションから同様の上書き指示が与えられたものとしている。
【００４３】
すなわち、従来技術の場合と同様に、図４において、アプリケーションからの上書き指示に含まれる上書きの開始位置と長さとの情報を用いて、書き込み対象特定部１１によって、実データ領域内の上書き対象となるクラスタが、Ｄａｔａ２、Ｄａｔａ３、Ｄａｔａ４に対応するクラスタに特定されたものとする。
【００４４】
本実施形態においては、上述したように、空き領域検索部１２によって、ＦＡＴテーブルが読み込まれ、そのテーブル上で、ポインタがＮＵＬＬ（図では空欄になっている）である項目に対応するクラスタが空き領域のクラスタと判定される。この場合、書き込み部１３によって、例えば、番地が小さいクラスタから順にＤａｔａ２、Ｄａｔａ３、Ｄａｔａ４に対応する新しいデータ（Ｄａｔａ２  Ｎｅｗ、Ｄａｔａ３  Ｎｅｗ、Ｄａｔａ４  Ｎｅｗ）が書き込まれている。
【００４５】
続く図５では、「Ｄａｔａ２  Ｎｅｗ」、「Ｄａｔａ３  Ｎｅｗ」、「Ｄａｔａ４  Ｎｅｗ」がこの順につながることを示すとともに、「Ｄａｔａ４  Ｎｅｗ」が「Ｄａｔａ５」につながることを示す情報（ポインタ情報）が「Ｄａｔａ２  Ｎｅｗ」、「Ｄａｔａ３  Ｎｅｗ」、「Ｄａｔａ４  Ｎｅｗ」の各クラスタに対応するＦＡＴテーブルの項目に書き込まれる。
【００４６】
また、続く図６では、書き込み部１３によって、「Ｄａｔａ１」のクラスタに対応するＦＡＴテーブルの項目のポインタが「Ｄａｔａ２  Ｎｅｗ」のクラスタを指すように変更される。
【００４７】
さらに、続く図７では、書き込み部１３によって、「Ｄａｔａ２」、「Ｄａｔａ３」、「Ｄａｔａ４」のクラスタに対応するＦＡＴテーブルの項目のポインタがＮＵＬＬに設定されることにより、実データ領域の「Ｄａｔａ２」、「Ｄａｔａ３」、「Ｄａｔａ４」のクラスタが解放される。
【００４８】
図８は、第１実施形態の上書き処理のフローチャートである。このフローは、図３の書き込み処理部によって行われる。
図８において、まず、ステップＳ１０１で、ＦＡＴテーブルを読み込むことで空き領域検索部１２によって、実データ領域中の空き領域のクラスタが検索される。
【００４９】
書き込み部１３は受け取った検索結果から空き領域があるか否かをステップＳ１０２で判定する。空き領域のクラスタが存在しない場合は、（空き領域）エラーとして一連の処理を終了する。一方、空き領域のクラスタが（１以上）存在した場合は、ステップＳ１０３に進み、そのステップＳ１０３で、書き込み部１３によって、上書き対象として特定されたクラスタに上書きすべきデータが、検索結果の空き領域のクラスタに書き込まれる。そして、続くステップＳ１０４で、ステップＳ１０３で書き込みを行った空き領域のクラスタに対応するＦＡＴテーブルのポインタ情報を変更する。そして、ステップＳ１０５で、上書き対象となったファイルの実データを格納するクラスタのうち、上書き対象として特定されたクラスタの直前のクラスタに対応するＦＡＴテーブルのポインタをステップＳ１０３で書き込みを行ったクラスタのうちの先頭のクラスタを指すように変更する。
【００５０】
続くステップＳ１０６では、ファイル情報、例えば、最終更新日時を変更（更新）する。そして、ステップＳ１０７で、上書き対象として特定されたクラスタに対応するＦＡＴテーブルの項目のポインタをＮＵＬＬに設定することで、その上書き対象のクラスタ（領域）を解放する（空き領域にする）。
【００５１】
続くステップＳ１０８では、すべてのデータが書き込み完了したかが、すなわち、書き込み指示（上書きすべき情報）に含まれるデータ中にその情報が空き領域のクラスタに書き込まれていない部分があるか否かが、判定部１４によって判定される。すべてのデータの書き込みが完了していない場合、すなわち、ステップＳ１０１で検索され取得された空き領域のクラスタが上書き対象として特定されたクラスタより数が少なかった場合、ステップＳ１０１に戻り、空き領域を再度検索する。一方、すべてのデータの書き込みが完了している場合、一連の処理を終了する。
【００５２】
このように、第１実施形態においては、検索され取得された実データ領域中の空き領域のクラスタに、書き込み対象として特定されたクラスタに上書きすべきデータを書き込むので、その空き領域であるクラスタがアプリケーションからの書き込み指示に含まれるデータに対応するクラスタの数だけ確保できた場合には、その空き領域のクラスタに、その上書きすべきデータを一度に書き込むことができる。この場合、その書き込み対象のクラスタに直接データを上書きする従来例と比較し、データ上書き中に電源断が発生することで、不完全なデータが実データ領域中に格納されるリスクをなくすことが可能となり、電源断などが生じた場合に、データを破壊する危険性がある期間を短縮することができる。
【００５３】
続いて第２実施形態について説明する。第１実施形態ではファイルの上書き処理を扱ったが、第２実施形態ではファイルの移動処理を扱う。
図９は、アプリケーションからの指示がファイルの移動であった場合に、ファイルシステム側で起動されるプロセス間の呼び出し関係を示す図である。図９に示すように、アプリケーションから（そのアプリケーションが出力する）ファイルへの移動指示がファイルシステム側に出力されると、そのファイルシステム側では、対応する「ファイル移動」のプロセスが呼び出される。
【００５４】
この「ファイル移動」のプロセスからは、ディレクトリエントリを変更するためのプロセスとして、「ディレクトリ読み込み」と「ディレクトリ書き込み」のプロセスが呼ばれる。「ディレクトリ読み込み」のプロセスからは、ＦＡＴテーブル、実データ領域をメディア（二次記憶）から一次記憶に読み込む「ＦＡＴ読み込み」および「実データ読み込み」プロセスが呼ばれ、「ディレクトリ書き込み」のプロセスからは、一次記憶内で更新されたＦＡＴテーブル、実データ領域のデータをメディア（二次記憶）に書き込む「ＦＡＴ書き込み」および「実データ書き込み」プロセスが呼ばれる。
【００５５】
図１０は、本発明の第２実施形態の書き込み処理部の構成を示すブロック図である。
図１０において、書き込み処理部は、アプリケーションとデバイス・ドライバとの間に設けられ、該アプリケーションからのファイル情報の書き込み指示に対応する指示を該デバイス・ドライバ側へ出力する処理を行う。
【００５６】
図１０において、書き込み処理部は、移動先のディレクトリのエントリを検索して前記書き込み指示が上書きを伴うファイルの移動であるか否かを検索する検索部２３と、前記書き込み指示が上書きを伴うファイルの移動であるか否かに応じて、移動元のファイルのディレクトリエントリとファイルの実データとのリンクがとれている状態で、移動先のファイルのディレクトリエントリを移動元のファイルの実データにリンクさせるように変更または作成する書き込み部２１と、移動元のファイルのディレクトリエントリを削除するエントリ削除部２２と、前記検索において、前記書き込み指示が上書きを伴うファイルの移動であると判定された場合に、移動先のファイルが移動指示の前にポイントしていた実データを解放する解放部２６と、を備える。なお、図１０の各部は、例えば、図１５のＣＰＵ５１とＲＡＭ５３との組み合わせに対応する。
【００５７】
以下に、本実施形態の書き込み処理部の動作について説明する。
まず、アプリケーションからのファイルの移動指示を書き込み部２１が受け付けると、その移動指示を受け付けたことをトリガとして、検索部２３が起動される。この検索部２３は、エントリ検索部２４とエントリ空き領域検索部２５とを備える。エントリ検索部２４によって、まず、移動先のディレクトリのディレクトリエントリに移動指示中に指定された移動先のファイル名と一致するものがないかが検索される。一致するものがなければ、移動指示は上書きを伴わないものと判定され、続いて、エントリ空き領域検索部２５によって、移動先のディレクトリに追加されるファイルのエントリ情報を書き込む空きがその移動先のディレクトリのディレクトリエントリを格納するクラスタにあるかが検索される。そのディレクトリエントリに空きがあれば、追加されるファイルのエントリ情報は、移動元のファイルの実データにリンクするようにそのディレクトリエントリの空き領域に書き込まれる。
【００５８】
一方、エントリ検索部２４の検索において、移動先のディレクトリのディレクトリエントリに移動指示中に指定された移動先のファイル名と一致するものがあると判定された場合は、その一致したファイルのエントリ情報が移動元のファイルの実データにリンクさせるように変更される。エントリ検索部２４の検索結果がいずれの場合でも、エントリ削除部２２によって、移動元のファイルのディレクトリエントリが削除される。
【００５９】
書き込み部２１は、検索部２３からの検索結果を参照して、書き込み指示が上書きを伴うファイルの移動であるか否かを判定する。そして、上書きを伴う移動であると判定された場合に、解放部２６が起動され、移動先のファイルが移動指示の前にポイントしていた実データを解放すべくＦＡＴテーブルの対応項目がクリアされる。
【００６０】
以下に、本実施形態の書き込み処理部がアプリケーションからのファイルの移動指示を処理するプロセスを図１１〜図１３を参照して説明するが、これらの図面においては従来技術との比較のため、従来技術の説明と同様に、￥ｄｉｒ￥ｄｉｒ１￥ｆｉｌｅ１を￥ｄｉｒ￥ｄｉｒ２￥ｆｉｌｅ２に移動する場合を扱う。
【００６１】
図１１では、移動先のディレクトリｄｉｒ２内にファイルｆｉｌｅ２が既に存在している場合を示している。したがって、エントリ検索部２５は、検索結果として既に同じ名称のファイルｆｉｌｅ２が移動先のディレクトリｄｉｒ２内に存在している旨を検索結果として、書き込み部２１に返す。
【００６２】
書き込み部２１は、その検索結果の情報に基づいて、移動先のファイルｆｉｌｅ２のディレクトリエントリを移動元のファイルｆｉｌｅ１の先頭の実データＤａｔａ１を指すように変更する。すなわち、実データ領域の移動先のファイルｆｉｌｅ２のディレクトリエントリが変更される。
【００６３】
なお、従来技術では、まず、移動元のファイルのディレクトリエントリを一次記憶に保存した後に、そのディレクトリエントリを削除している関係から図１１のように、移動元と移動先のディレクトリエントリ中にＤａｔａ１に対応する実データ領域のクラスタをポイントするファイル（ｆｉｌｅ１、ｆｉｌｅ２）が存在することにはならなかった。
【００６４】
これは、「ファイルの移動に対する処理の一部に、ファイルの削除機能を用いる」という習慣に従来とらわれていたので、図１１に示すような状態は、ｆｉｌｅ１またはｆｉｌｅ２を指定してファイルの削除機能を用いると、いずれのファイルのディレクトリエントリにも接続している、必要なデータであるＤａｔａ１以下のクラスタチェーンも同時に削除されてしまう状態であり好ましくない、と考えられていたからである。
【００６５】
本実施形態においては、ファイルの削除機能の一部であるエントリの削除機能を用いて、図１２に示すように、移動元のファイルのディレクトリエントリからその移動元のファイルについての情報を削除することで、上述の不都合を回避している。
【００６６】
また、本実施形態の移動の手順は、不意の電源断によって、書き込み不良が発生する期間を短縮する、という効果も有する。すなわち、二次記憶内の移動元のファイルのディレクトリエントリにその移動元のファイルの情報が存在しているうちに、移動先のファイルのディレクトリエントリにおいて、その移動先のファイル情報を移動元のファイルの先頭の実データＤａｔａ１を指すように変更しているので、従来技術のように、移動元のファイルの情報が一次記憶にのみ存在する期間がなくなり、不意の電源断によって、書き込み不良が発生する期間が短縮される。
【００６７】
続いて、図１３において、移動元のファイルのディレクトリエントリが以前にポイントしていた実データＤａｔａ４以降のクラスタチェーンを、ＦＡＴテーブルの対応項目をクリアすることで、解放する。
【００６８】
なお、以上では、移動指示において指定されたファイル名（ｆｉｌｅ２）と同じ名称のファイルが移動先のディレクトリ（ｄｉｒ２）に存在する場合を説明したが、移動先のディレクトリに同じ名称のファイルが存在しない場合の処理も同様に考えられる。この場合、書き込み部２１は、検索結果の情報に基づいて、移動先のディレクトリｄｉｒ２に、移動先のファイルｆｉｌｅ２の情報を移動元のファイルｆｉｌｅ１の先頭の実データＤａｔａ１を指すように作成する。
【００６９】
図１４は、第２実施形態の移動処理のフローチャートである。このフローは、図１０の書き込み処理部によって行われる。
なお、図１４のフローは、ファイルの移動を説明するためのものであるが、ディレクトリの移動の場合は、ステップＳ２０１およびＳ２０２の処理が追加される。すなわち、ステップＳ２０１で、移動対象がディレクトリであるか否かを判定し、ディレクトリである場合に、ステップＳ２０２で、そのディレクトリの親ディレクトリ“．．”についての情報を移動元の（親）ディレクトリから移動先の（親）ディレクトリに変更する。
【００７０】
続くステップＳ２０３では、移動先のディレクトリを検索して、そのディレクトリ内に移動先として指定したファイルが既に存在するか否かに応じて、書き込み部２１によって、移動先のディレクトリのディレクトリエントリのファイル情報が移動元のファイルの先頭の実データを指すように変更されるか追加される。
【００７１】
そして、ステップＳ２０４で、エントリ削除部２２によって、移動元のディレクトリのディレクトリエントリから移動元のファイル情報が削除される。
続くステップＳ２０５では、移動先でファイル情報を上書きしたか否かが判定される。上書きしていないと判定された場合は一連の処理をただちに終了し、上書きしたと判定された場合は、移動先のファイルが移動指示の前にポイントしていた実データが解放される。
【００７２】
本発明の各実施形態の書き込み処理部はソフトウェアとして構成することが可能である。図１５は、本発明の各実施形態をプログラムで実現する場合のハードウェア環境を示す図である。
【００７３】
図１５において、ハードウェアとしてのコンピュータは、ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、通信インターフェイス５４、入出力装置５６、記憶装置５５、（記録媒体）読み取り装置５８、がバス５７を介して接続されることで構成されている。
【００７４】
図１５において、ＣＰＵ５１は、コンピュータ全体を制御し、ＲＡＭ５３は、プログラム実行、データ更新等の際に、記憶装置５５をはじめとする二次記憶内に記憶されるデータを一次的に格納する一次記憶である。
【００７５】
ユーザは、入出力装置５６を介してアプリケーションに上書きや移動等の各種指示を与えることができる。また、本実施形態の書き込み処理部によって処理された結果の情報がアプリケーションを介してユーザに提示される。
【００７６】
記憶装置５５に記憶されるプログラムやデータの他に、読み取り装置５８を介して読み込まれた可搬記憶媒体５９のプログラムやデータ、ネットワーク６２、通信インターフェイス５４を介して読み込まれた情報提供者６１のプログラムやデータを、コンピュータ内部で用いることができる。
【００７７】
図１６は、プログラムのローディングを説明する図である。
本発明のファイルの上書き処理、移動処理等のファイルの書き込み処理は当然一般的なコンピュータ７４によって実現することが可能である。この場合、コンピュータ７４の記憶装置７２から本発明の処理のためのプログラムなどをコンピュータ７４のメモリにロードして実行することも、可搬型記憶媒体７３から本発明の処理のためのプログラムなどをコンピュータ７４のメモリにロードして実行することも、また、プログラム提供者７０の記憶装置７１側からネットワークを介して本発明の処理のためのプログラムなどをコンピュータ７４のメモリにロードして実行することも可能である。
【図面の簡単な説明】
【００７８】
【図１】ファイルシステムを含むシステム全体のプロセス間の呼び出し関係を説明する図である。
【図２】アプリケーションからの指示がファイルの上書きであった場合に、ファイルシステム側で起動されるプロセス間の呼び出し関係を示す図である。
【図３】本発明の第１実施形態の書き込み処理部の構成を示すブロック図である。
【図４】第１実施形態の書き込み処理部の動作を説明する図（その１）である。
【図５】第１実施形態の書き込み処理部の動作を説明する図（その２）である。
【図６】第１実施形態の書き込み処理部の動作を説明する図（その３）である。
【図７】第１実施形態の書き込み処理部の動作を説明する図（その４）である。
【図８】第１実施形態の上書き処理のフローチャートである。
【図９】アプリケーションからの指示がファイルの移動であった場合に、ファイルシステム側で起動されるプロセス間の呼び出し関係を示す図である。
【図１０】本発明の第２実施形態の書き込み処理部の構成を示すブロック図である。
【図１１】第２実施形態の書き込み処理部の動作を説明する図（その１）である。
【図１２】第２実施形態の書き込み処理部の動作を説明する図（その２）である。
【図１３】第２実施形態の書き込み処理部の動作を説明する図（その３）である。
【図１４】第２実施形態の移動処理のフローチャートである。
【図１５】本発明の各実施形態をプログラムで実現する場合のハードウェア環境を示す図である。
【図１６】プログラムのローディングを説明する図である。
【図１７】ファイルシステムのデータ構造を示す図である。
【図１８】上書き指示を受け付ける前のファイルの状態を示す図である。
【図１９】上書き指示を受け付けた後の従来のファイルシステムの動作を説明する図（その１）である。
【図２０】上書き指示を受け付けた後の従来のファイルシステムの動作を説明する図（その２）である。
【図２１】上書き指示を受け付けた後の従来のファイルシステムの動作を説明する図（その３）である。
【図２２】上書き指示を受け付けた場合の従来のファイルシステムの処理を示すフローチャートである。
【図２３】移動指示を受け付ける前のファイルの状態を示す図である。
【図２４】移動指示を受け付けた後の従来のファイルシステムの動作を説明する図（その１）である。
【図２５】移動指示を受け付けた後の従来のファイルシステムの動作を説明する図（その２）である。
【図２６】移動指示を受け付けた後の従来のファイルシステムの動作を説明する図（その３）である。
【図２７】移動指示を受け付けた場合の従来のファイルシステムの処理を示すフローチャートである。
【符号の説明】
【００７９】
１１  書き込み対象特定部
１２  空き領域検索部
１３  書き込み部
１４  判定部
１５  解放部
１６  送信アンテナ
２１  書き込み部
２２  エントリ削除部
２３  検索部
２４  エントリ空き領域検索部
２５  エントリ検索部
２６  解放部
【図１】
2006184979.tif 000003
【図２】
2006184979.tif 000004
【図３】
2006184979.tif 000005
【図４】
2006184979.tif 000006
【図５】
2006184979.tif 000007
【図６】
2006184979.tif 000008
【図７】
2006184979.tif 000009
【図８】
2006184979.tif 000010
【図９】
2006184979.tif 000011
【図１０】
2006184979.tif 000012
【図１１】
2006184979.tif 000013
【図１２】
2006184979.tif 000014
【図１３】
2006184979.tif 000015
【図１４】
2006184979.tif 000016
【図１５】
2006184979.tif 000017
【図１６】
2006184979.tif 000018
【図１７】
2006184979.tif 000019
【図１８】
2006184979.tif 000020
【図１９】
2006184979.tif 000021
【図２０】
2006184979.tif 000022
【図２１】
2006184979.tif 000023
【図２２】
2006184979.tif 000024
【図２３】
2006184979.tif 000025
【図２４】
2006184979.tif 000026
【図２５】
2006184979.tif 000027
【図２６】
2006184979.tif 000028
【図２７】
2006184979.tif 000029