(57)【要約】【目的】システムが電源断等で中断してしまった場合に、フィルシステムの破壊を起こさないことは勿論のこと、クローズ前の不完全なファイルを残さない電子ファイルシステムを提供すること。【構成】ファイル単位で使用する不揮発性記憶装置の記憶位置の情報を主記憶又は一時記憶において管理する記憶位置管理の機構を備え、上記記憶位置管理機構は新たに不揮発性記憶装置の記憶領域をファイルに割り当てる場合の空き領域検索機構から参照するための参照手段を備え、前記記憶位置管理機構はファイルの入出力終了時に不揮発性記憶装置の記憶位置管理情報を不揮発性記憶装置の記憶位置管理領域へ書き込むという特徴を備える。【選択図】      図１
2004272608.tif 000002
【特許請求の範囲】
【請求項１】
ファイル単位で使用する不揮発性記憶装置の記憶位置の情報を主記憶又は一時記憶において管理する記憶位置管理の機構を備え、上記記憶位置管理機構は新たに不揮発性記憶装置の記憶領域をファイルに割り当てる場合の空き領域検索機構から参照するための参照手段を備え、前記記憶位置管理機構はファイルの入出力終了時に不揮発性記憶装置の記憶位置管理情報を不揮発性記憶装置の記憶位置管理領域へ書き込むという特徴を備えて成ることを特徴とする電子ファイルシステム。
【請求項２】
ＬＲＵ（最長不使用）アルゴリズムによってバッファーを管理することで不揮発性記憶装置への入出力頻度を減らすキャッシュ機構と、ファイル単位での入出力を可能とするファイルシステムと不揮発性記憶装置を備えた電子ファイリング装置において、
前記キャッシュ機構は不揮発性記憶装置への即時転送を行う即時転送手段と転送を最適なタイミングで行うために転送を保留する転送保留手段の両方を備え、ファイルシステムとのインターフェースにおいて入出力単位で上記即時転送手段と転送保留手段を使い分けることを可能とする手段を備えたことを特徴とする電子ファイリング装置。
【請求項３】
請求項１記載の電子ファイルシステムは請求項２のキャッシュ機構の即時転送手段を用いて記憶位置管理情報を不揮発性記憶装置に即時転送し、ファイルの内容となる情報を最適なタイミングで不揮発性記憶へ転送するように保留する転送保留手段を用いて転送し、請求項１記載の電子ファイルシステムはファイルの入出力終了時に請求項２のキャッシュ機構に保留中の情報を全て転送するフラッシュ手段を用いてフラッシュするという特徴を備えたことを特徴とする電子ファイリング装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータシステムのディスク装置等の不揮発性記憶装置をファイルとして論理的に管理する電子ファイルシステム及び電子ファイリング装置に関する。
【０００２】
【従来の技術】
図２は近年の不揮発性記憶装置を扱うコンピュータソフトウェアの構成図である。
【０００３】
ディスクデバイス等に情報を格納するアプリケーションプログラムは、オペレーティングシステムの提供するファイルシステムの提供するインターフェースを介在してファイル単位で情報の読み書きを行う。ディスク装置等のハードウェアを直接操作するのは、駆動のための知識を持ったデバイスドライバというモジュールの役割である。図２中のＦＳＤはファイルシステムドライバと呼ばれ、ファイリングのための論理的記憶位置等を管理するものである。
【０００４】
近年の多くのオペレーティングシステムでファイルシステムをフロントエンドとファイルシステムドライバに分離しており、同時に方式（構造）の異なる複数のファイルシステムを扱うことを可能としている。このようなファイルシステムをインストーラブルファイルシステムと呼ぶ。例えば、パーソナルコンピュータのＤＯＳで使用されているＦＡＴ方式のファイルシステムとワークステーションで使用されるファイルシステムを同時に使うことが可能となり、種類の異なるパーソナルコンピュータ間でフロッピーディスク等の物理媒体の交換が可能となる。特開平０６−１２３０６に記載されたファイルシステムもインストーラブルファイルシステムである。
【０００５】
本発明は図中のＦＳＤ（  ファイルシステムドライバ）  に相当する部分に関するものである。
【０００６】
一般にファイルシステムは不揮発性記憶媒体の一部を管理領域として使用しており、新たにファイルを書く等の操作によって、ファイルの中身となるデータに加えファイルの管理情報も物理的な不揮発性記憶媒体に書き込む。例えば、特開平０４−２８７２４５号や特開平０４−３５０７３８号等で従来のファイルシステムに関して解説されている。
【０００７】
＜ＦＡＴの例＞
パーソナルコンピュータのＤＯＳで使用されるＦＡＴシステムを例に従来の技術について詳しく説明する。。
【０００８】
ＦＡＴ方式では、記憶位置をクラスタという単位で管理しており、ファイルが使用するクラスタの情報をＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  という管理領域に格納している。Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ
Ｔａｂｌｅ  とファイルの関係はディレクトリスロットという領域にファイル名単位で格納されている。
【０００９】
図３はディレクトリスロットとＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  の関係を示したものである。
【００１０】
ＦＩＬＥ＿Ａ．ＴＸＴの場合を例に説明すると、ディレクトスロットにファイル名ＦＩＬＥ＿Ａ．ＴＸＴとファイルサイズやタイムスタンプが記憶されており、最初のクラスタ番号として１０番と記憶されている。Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  のクラスタ１０番の場所には次のクラスタが１１番であると記憶されている。同様に１１番には１４番が書かれてあり、１４番には最後のクラスタである事を示すマークが書かれている。１０→１１→１４→ＥＮＤという具合にチェーンのように繋がりを表現することからクラスタチェーンと呼ばれている。そして、ＦＩＬＥ＿Ａ．ＴＸＴの中身はクラスタ番号に対応した記憶領域に書き込まれている。
【００１１】
新たにファイル作成して書き込む場合を例に説明する。
【００１２】
ファイルの作成時にファイルシステムはディレクトリ領域の空きスロットを検索する。空きスロットが見つかるとファイル名やフィルサイズ等の情報を書き込む。ディレクトリ領域に空きスロットが発見されなかった場合は、ディレクトリ領域を増加されるためにＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  を更新する。ディレクトリ領域もファイルと同様にクラスタ単位で記憶領域を管理しているからである。この時点でファイルをクローズすればサイズが０のファイルとしてタイムスタンプ等の追加情報も更新されて書き込まれる。それと同時にオペレーティングシステムの内部バッファー内の情報と物理的な媒体の情報が一致するように全て書き込む。この操作をフラッシュと呼ぶ。
【００１３】
一般にディレクトリスロット等の管理領域は同じ情報を何度も更新するため主記憶内の作業領域の操作と物理媒体の操作を併用することで効率を上げることができる。フラッシュ操作によって主記憶内の作業領域の情報と物理媒体の情報を一致させることは非常に重要である。
【００１４】
＜キャッシュ＞
効率を上げる具体的な技術として、キャッシュと呼ばれる方法が一般的である。キャッシュはＬＲＵ（最長不使用）というアルゴリズムでバッファーを管理している。ＬＲＵアルゴリズムによってアクセス頻度の高い情報をバッファーに残すことができるので物理的な不揮発性記憶媒体へのアクセスを減らす効果がある。
【００１５】
セクタ単位で管理をするキャッシュを例にＬＲＵの仕組みを説明する。
【００１６】
図４はキャッシュのバッファーの構成を示している。バッファーの先頭を示すポインタが１０番のセクタのデータを保持しているバッファーを指し示している。バッファーにはセクタ番号とセクタのデータのコピーが保持されており、１０番セクタを格納したバッファーの次のバッファー位置を示すポインタは６番セクタの情報を保持しているバッファーを示している。このようにＬｉｎｋｅｄ  ｌｉｓｔ  として実現されており、リンクの順番でアクセスのあった順番を表現している。最近アクセスのあったものが先頭にあり、最もアクセスから時間が経過したものがリストの最後尾にある。又、バッファーにはデータに変更があったことを示す変更フラグがあり、書き込みによってデータが更新されると真となる。
【００１７】
図４の状態から２１番セクタの読み出し要求が発生した場合、キャッシュプログラムはバッファーに２１番セクタの情報のコピーがあるかどうかを検索する。図４の場合はバッファーに２１番セクタが存在しないので、物理的な不揮発性記憶媒体から２１番セクタを読み出し、バッファー上にコピーを保持する。新たに２１番セクタを保持するために使用するバッファーとして図４でリストの最後尾にある項目、即ち、最後のアクセスから最も時間が経過したものを選択する。
【００１８】
図４の場合、最後尾のバッファーは２５番セクタの情報を保持しているが、そのバッファーをリストから取り外す。新たに２１番セクタ用にバッファーとして使用するためである。
【００１９】
しかし、２５番セクタの情報は書き込みによって更新されたことを示すフラグが真となっているので、リストから外すと同時にバッファーの内容を物理的な不揮発性記憶媒体に対して書き込む。その後、２１番セクタの情報のコピーを格納した後、バッファーはリストの先頭へ挿入される。
【００２０】
図５は２１番セクタを読み出した後のキャッシュの状態を表した図である。図４で２５番セクタに使われていたバッファーが２１番セクタ用に使用され、リストの先頭へ移動している。２１番セクタの読み出し要求がきっかけとなって図４の状態から図５の状態へ変化し、その副作用として２５番セクタの書き込みが発生したのである。このようにＬＲＵのアルゴリズムでバッファーを管理すると物理的な不揮発性記憶媒体へのアクセス頻度が減る反面、物理的な不揮発性記憶媒体への書き込み順序がファイルシステムによる書き込み順序と異なってしまうという副作用がある。
【００２１】
多くの場合キャッシュにもフラッシュ機能があり、フラッシュ動作を行うことで、変更フラグが真となっている全てのバッファーの内容を物理的な不揮発性記憶媒体に対して書き込むことができる。又、ファイルのクローズと連動してフラッシュを行うシステムもある。逆にフラッシュ直後でない限り物理的な不揮発性記憶媒体に対しての書き込みが保留されているセクタが存在することになり、物理的な不揮発性記憶媒体においてファイルの管理領域の情報は不完全な状態となっている。従って、電源断等による事故でシステムが中断してしまった場合にファイルの管理領域の情報は不完全なままになってしまう危険性がある。
【００２２】
【発明が解決しようとする課題】
ＦＡＴファイルシステムに上記のキャッシュを組み合わせた構成はパーソナルコンピュータのＤＯＳを含め一般的である。このような構成のシステムの場合、電源断等の事故によってキャッシュ中で書き込みが保留されていた情報を失うことになり、物理的な不揮発性記憶媒体のファイルシステムの管理領域が不完全な状態となってしまう。管理領域が不完全な状態で致命的な状態をファイルシステムの破壊と呼ぶことにする。ファイルシステムの破壊状態を２例について説明する。
【００２３】
＜脱落チェーンによる破壊＞
図６はＦＡＴファイルシステムにおいてＦＩＬＥ＿Ａ．ＴＸＴという名前のファイルを作成し、データを書き込んだ場合の管理領域の状態である。セクタ２００にはディレクトリスロットが格納されており、最初のクラスタ番号は１００と記憶されている。１００番クラスタに対応するＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  の情報はセクタ２０に記憶されており、クラスタチェーンは１００→１０３→５００→５０１→ＥＮＤの順に繋がっている。このとき、キャッシュリストの最後に２１番セクタがある。ファイルの内容を更新したことによって２０５番セクタへのアクセスが発生し、２１番セクタの不揮発性記憶媒体への書き出しが発生すると、不揮発性記憶媒体は図７のような状態となる。セクタ２００番とセクタ２０番は未だ不揮発性記憶媒体に書き出していないからである。この状態で電源が切れた場合はセクタ２００番とセクタ２０番の情報は失われてしまうため、クラスタ５００番とクラスタ５０１番のチェーンだけが残ってしまう。
【００２４】
このようにファイルに属していないチェーンの事を脱落チェーンという。脱落チェーンはファイルとして利用できない領域として残ってしまうので記憶領域の無駄となる。又、ファイルシステムのエラーチェックプログラムによって検出できるので、脱落チェーンを発生させる装置は使用者に互換性上の不安を与え兼ねない。
【００２５】
＜クロスリンクによる破壊＞
図６の状態でセクタ２１番だけが不揮発性記憶媒体に書き出された場合を説明したが、キャッシュの状態によっては逆の場合も起こり得る。即ち、セクタ２１番の情報が失われ、セクタ２００番とセクタ２０番の情報が不揮発性記憶媒体に書き込まれる場合である。図８はそのような状態を示している。このような状態ではＦＩＬＥ＿Ａ．ＴＸＴの内容は破壊されており、正しく内容を読み出すことはできない。それだけでなく、もっと深刻な２次災害を引き起こすことが予想される。
【００２６】
セクタ２１番には５００番クラスタと５０１番クラスタは空き領域として記録されている。次に、ＦＩＬＥ＿Ｂ．ＴＸＴを作成してデータを保存しようとするとファイルシステムは空きクラスタである５００番と５０１番をＦＩＬＥ＿Ｂ．ＴＸＴの保存領域として割り当てて使用する。図９はファイルＦＩＬＥ＿Ｂ．ＴＸＴの一部としてクラスタ５００番と５０１番を割り当ててしまった状態である。クラスタ５００番と５０１番はＦＩＬＥ＿Ａ．ＴＸＴの一部でもあり、ＦＩＬＥ＿Ｂ．ＴＸＴの一部でもある状態になってしまうのである。このような状態をクロスリンクと呼ぶ。
【００２７】
ＦＩＬＥ＿Ａ  ．ＴＸＴ  は読み出しが可能となるが正しい内容と異なる内容が読み出される。即ち、ＦＩＬＥ＿Ｂ．ＴＸＴの一部をＦＩＬＥ＿Ａ．ＴＸＴの内容として読み出してしまうこととなる。ＦＩＬＥ＿Ｂ．ＴＸＴはファイルとして完全な状態でデータも保持している。
【００２８】
しかし、多くの場合、内容の破壊されたＦＩＬＥ＿Ａ．ＴＸＴは使用者にとって何の価値もないため、ＦＩＬＥ＿Ａ．ＴＸＴを消去したくなる。ＦＩＬＥ＿Ａ．ＴＸＴを消去した時に２次災害が発生する。ＦＩＬＥ＿Ａ．ＴＸＴを消去するとファイルシステムはＦＩＬＥ＿Ａ．ＴＸＴで使用していた領域を開放して空き領域に戻す。
【００２９】
しかし、クロスリンクが発生しているのでＦＩＬＥ＿Ａ．ＴＸＴの一部はＦＩＬＥ＿Ｂ．ＴＸＴの一部でもある。図１０は図９の状態からＦＩＬＥ＿Ａ．ＴＸＴを消去した状態を示している。ＦＩＬＥ＿Ａ．ＴＸＴのディレクトリ情報とクラスタチェーンは消去され空き領域に変更されている。クロスリンクだったクラスタ５００番と５０１番も空き領域として開放されてしまったので、ＦＩＬＥ＿Ｂ．ＴＸＴの内容を正しく読み出すことができなくなってしまった。しかも、この状態は図８と同じ状態であり、更なる災害を引き起こすことが予想できる。
【００３０】
本発明は、電源断等によるこのようなファイルシステムの破壊を発生させないための技術に関するものである。
【００３１】
＜従来の解決策１＞
上記のようなファイルシステムの破壊が発生する危険を下げる方法として、効果的なタイミングでキャッシュをフラッシュする方法がある。
【００３２】
通常ファイルへの書き込みプログラムは、
▲１▼ファイルをオープン
▲２▼ファイルへデータを書き出す。
【００３３】
▲３▼ファイルをクローズ
という手順で行う。
【００３４】
▲２▼でファイルにデータを書き出す時にファイルシステムは空きクラスタを検索して、ファイルへ割り当てる作業を随時行う。▲３▼のクローズまでの間はキャッシュのフラッシュを行わないので、▲１▼〜▲３▼までの間に電源断が発生するとファイルシステムの破壊となる。一般に▲２▼が最も時間が掛かる行為なので危険な時間が非常に長くなる。
【００３５】
そこで、アプリケーションプログラムを工夫して、
▲１▼ファイルをオープン
▲２▼ファイルサイズを変更。
【００３６】
▲３▼ファイルをクローズ
▲４▼フラッシュ
▲５▼ファイルを再びオープン
▲６▼ファイルへデータを書き出す。
【００３７】
▲７▼ファイルをクローズ
という手順にすれば危険な時間を短くすることができる。
【００３８】
▲２▼でファイルサイズを変更した時点でファイルシステムは空き領域をファイルに割り当てる作業を済ませてしまうことができるからである。しかも、書き込むのは管理領域だけなので、▲１▼〜▲４▼は非常に短い時間で行うことができる。ファイルの中身の書き出しは▲５▼〜▲７▼で行うが、その間に変更しなければならない管理領域はファイルのタイムスタンプだけである。この方法はファイルシステムの破壊の危険性を非常に少なくすることができるが、アプリケーションレイアのプログラムで行う解決策であり、しかも、予めファイルサイズが判っている場合にしか適応できないという欠点がある。
【００３９】
又、▲５▼〜▲７▼の間に電源断が起こった場合、ファイルの内容は正しくない。しかも、ファイルの内容が正しくないことをファイルシステム側で検出する手段は無い。
【００４０】
＜従来の解決策２＞
キャッシュの仕組みを使わないようにすると、破壊は起こらない代りに物理的な不揮発性記憶媒体へのアクセス頻度が増大し、ファイルシステムの実行効率は非常に低下する。
【００４１】
そこで、Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ
Ｔａｂｌｅ  とディレクトリスロットの全てのコピーをファイルシステムが主記憶又は一時記憶に保持することで物理的な不揮発性記憶媒体へのアクセス頻度を減らすことが可能でキャッシュと同様に実行効率を上げることが可能である。
【００４２】
ファイルをオープンして、書き込みクローズするまでの間、物理的な不揮発性記憶媒体の管理領域への書き込みは一切行わず、データのみの書き込みを行う。データ書き込み中に電源断となっても物理的な不揮発性記憶媒体の管理領域はファイルをオープンする前と同じ状態である。ファイルをクローズしてバッファーをフラッシュすれば完全なファイルとして物理的な不揮発性記憶媒体に残る。この方法の場合、アプリケーションプログラムに工夫を加える必要はない。又、完全なファイルとして残るか、ファイル作成前の状態として残るのでシステムを安全に運営できるように構成し易い。
【００４３】
しかし、電源断で中断した場合に、完全なファイル若しくはファイル作成前の状態になるという理想的な特徴は同時にオープンするファイルが１つしかない場合のみにしか当ては嵌らない。ファイルを同時に複数オープンしているとすれば、電源断で完全な状態となっているのは最後にクローズしたファイルだけである。残りのファイルは不完全な状態である。この解決策の場合は全てのＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  ｔａｂｌｅ  とディレクトリスロットの情報を格納できるだけの大容量な主記憶又は一時記憶が必要となり、構成するためのコストが大きくなってしまう。
【００４４】
本発明は上記のようにシステムが電源断等で中断してしまった場合に、フィルシステムの破壊を起こさないことは勿論のこと、クローズ前の不完全なファイルを残さない電子ファイルシステム及び電子ファイリング装置を提供することを目的とする。
【００４５】
【課題を解決するための手段】
上記目的を達成するための本発明に係る電子ファイルシステムは、ファイル単位で使用する不揮発性記憶装置の記憶位置の情報を主記憶又は一時記憶において管理する記憶位置管理の機構を備え、前記記憶位置管理機構は新たに不揮発性記憶装置の記憶領域をファイルに割り当てる場合の空き領域検索機構から参照するための参照手段を備え、前記記憶位置管理機構はファイルの入出力終了時に不揮発性記憶装置の記憶位置管理情報を不揮発性記憶装置の記憶位置管理領域へ書き込むという特徴を備えている。
【００４６】
上記特徴により、システムが電源断等で中断してしまった場合にフィルシステムの破壊を起こさないことは勿論のこと、クローズ前の不完全なファイルを残さないという理想的なシステムを構築することができる。
【００４７】
又、本発明に係る電子ファイリング装置は、ＬＲＵ（最長不使用）アルゴリズム等によってバッファーを管理することで不揮発性記憶装置への入出力頻度を減らすキャッシュ機構と、ファイル単位での入出力を可能とするファイルシステムと不揮発性記憶装置を備えたファイリング装置において、前記キャッシュ機構は不揮発性記憶装置への即時転送を行う即時転送手段と転送を最適なタイミングで行うために転送を保留する転送保留手段の両方を備え、前記ファイルシステムとのインターフェースにおいて入出力単位で前記即時転送手段と転送保留手段を使い分けることを可能とする手段を備えている。
【００４８】
上記構成によって、電源断等の事故に対してデータ喪失の危険性の低い不揮発性記憶装置への情報転送順序を行い、且つ、不揮発性記憶装置への転送順序を最適化し転送頻度を減少させて効率を上げることが可能なシステムを構築することが可能となる。
【００４９】
更に、本発明に係る電子ファイリング装置は、前記ファイルシステムが前記キャッシュ機構の即時転送手段を用いて記憶位置管理情報を不揮発性記憶装置に即時転送し、ファイルの内容となる情報を最適なタイミングで不揮発性記憶へ転送するように保留する転送保留手段を用いて転送し、ファイルシステムがファイルの入出力終了時にキャッシュ機構に保留中の情報を全て転送するフラッシュ手段を用いてフラッシュするという特徴を備えている。
【００５０】
上記構成によって、電源断等の事故に対してデータ喪失の危険性の低い不揮発性記憶装置への情報転送順序を行い、且つ、不揮発性記憶装置への転送順序を最適化し転送頻度を減少させて効率を上げる電子ファイリング装置となる。
【００５１】
【発明の実施の形態】
以下に本発明の実施の形態を添付図面に基づいて説明する。
【００５２】
＜実施の形態１＞
図１は本発明のファイルシステムドライバ内での管理を示した図である。
【００５３】
オープン中のファイルを管理するためのインスタンス情報を格納する構造体から間接的に参照可能な、ファイルごとの予約クラスタ情報を管理する予約クラスタ管理モジュールによってファイルに割り当てた領域を管理している。又、オープン中のファイルインスタンスから間接的に参照可能な予約ディレクトリスロット管理モジュールによって、ファイルに割り当てたディレクトリスロットを管理する。
【００５４】
＜予約クラスタ管理＞
ファイルをオープンしてデータを書き込むか、明示的にファイルサイズを大きくすることにより、ファイルに新たに領域を割り当てる必要が生じる。従来はＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  の空きクラスタを探して、そのファイルのクラスタチェーンに追加していたが、ファイルクローズまでに電源断等で処理を中断してしまった場合に、ファイルオープン前と同じ状態にするためにはクローズするまでは従来のようにクラスタチェーンを更新してはならない。
【００５５】
本発明のファイルシステムドライバでは、ファイルをクローズするまでの間は不揮発性記憶媒体のクラスタチェーンを更新しないので割り当てたクラスタは空きクラスタのままである。システムが別のファイルに同じ領域を割り当ててしまうことがないように空きクラスタ検索時に既に別のファイル用に割り当てていないかを調べる必要がある。
【００５６】
又、ファイル内部をＳｅｅｋしてファイルの任意の場所へ書き込みポインタを移動させるためにも主記憶上にクラスタチェーンを管理する必要がある。これらの目的を果たすために予約クラスタ管理モジュールが存在する。主記憶上に作成するクラスタチェーンを予約クラスタチェーンと呼ぶ。既に作成済みのファイルにデータを追加する場合は、そのクラスタチェーンの続きのクラスタチェーンを予約クラスタチェーンとして作成する。図１のファイル構造体インスタンスＣは作成済みのファイルをオープンして１００→１０１→１０２というクラスタチェーン対して→１０７という予約クラスタチェーンを追加している。
【００５７】
＜予約ディレクトリ管理＞
“エラー！参照元が見つかりません。”は予約ディレクトリスロット管理の管理する情報を説明するための図である。ファイルのディレクトリスロットにはファイル名に加えタイムスタンプやファイルサイズと最初のクラスタ番号等が格納されている。ディレクトリスロットは通常のファイル同様にクラスターチェーンによって領域の割り当てを行う。そして、ディレクトリスロットの最後を示すマークの付いたスロットまでが有効なディレクトリスロットである。
【００５８】
ディレクトリスロットには空きスロットという状態がある。空きスロットは従来のＦＡＴシステムにおいてはファイルの削除時に発生する。ファイルを削除したときに削除したファイルのスロットを空きスロットにすることにより、ディレクトリスロットの配列の前詰めが不要になる。
【００５９】
次に、ファイルを作成する場合に空きスロットが残っていれば、空きスロットを新しいファイルに割り当てることができる。本発明のシステムでは、ファイルクローズの間までディレクトリスロットへの書き込みを行わないが、ディレクトリスロット領域もファイル同様にクラスタチェーンによって割り当てるのでファイルオープン時にどのスロットにするかを割り当てることで、空き領域管理の仕組みを簡略化することができる。
【００６０】
“エラー！参照元が見つかりません。”の状態Ａはオープン中のファイル用に空きスロットを割り当てた状態である。状態Ａで、更に新しくファイルを作成してオープンすると、最後のスロットだった場所を空きスロットとして確保し、最後のスロットを１つ後ろに用意する。そして、新たに作成した空きスロットを新たにオープンしたファイル用に割り当てる。最後のスロットを１つ後ろに移動させるために必要な領域が不足した場合はクラスタチェーンを追加する必要がある。追加するクラスタチェーン及び空きスロットは即時に不揮発性記憶媒体に書き込む。
【００６１】
又、既に存在しているファイルに追加でデータを書き込むことでファイルサイズが増加する場合は、空きスロットの予約は行わないでファイルインスタンスから既に存在しているディレクトリスロットの場所を参照する。図１のファイル管理構造体インスタンスＣは作成済みのファイルをオープンしているので、予約ディレクトリスロットではなく、不揮発性記憶媒体のディレクトリスロットを参照している。
【００６２】
＜選択的ライトスルーキャッシュ＞
クラスタチェーンとディレクトリスロットは予約クラスタ及び予約ディレクトリスロットによって不揮発性記憶媒体への書き込みが最適化されている。従って、キャッシュによる効率化は期待できない。それどころか、電源断等による中断時にファイルシステムが不完全にならないためにクラスタチェーンとディレクトリスロットの書き込みはキャッシュによって遅延してはならない。即時書き込みの要求と遅延書き込みの要求を区別できるキャッシュがあることにより管理領域の完全性を保ちながらデータ領域のアクセス頻度減らすことが可能となる。
【００６３】
＜ファイルへの書き込み＞
“エラー！参照元が見つかりません。”はファイルへの書き込みが生じたときの動作をフローチャートで示したものである。ＳＴＥＰ１でファイルへの書き込みを開始し、ＳＴＥＰ２で書き込みによって現在のサイズを超えるかどうかで分岐をする。現在の書き込み位置に書き込みサイズを足したものが現在のファイルサイズを超えるかどうかで判断する。
【００６４】
現在のファイルサイズを超える場合はＳＴＥＰ３でファイルサイズを増加させる。ＳＴＥＰ４でファイルサイズの増加に失敗したらＳＴＥＰ６へ分岐し、ＳＴＥＰ６でエラーとして呼び出し元に復帰する。ＳＴＥＰ３の動作は“エラー！参照元が見つかりません。”を用いて詳しく説明することとする。ＳＴＥＰ２で現在のファイルサイズを超えない場合とＳＴＥＰ４でファイルサイズ増加に成功した場合はＳＴＥＰ５へ進む。ＳＴＥＰ５でデータ領域への書き込みを行う。
【００６５】
ＳＴＥＰ５で書き込むためのデータ領域を知るためにはクラスタチェーンを辿る必要があるが、不揮発性記憶媒体のクラスタチェーンと予約クラスタチェーンの両方を使ってデータ領域を検索する。書き込みが終了するとＳＴＥＰ７へ進み、正常復帰する。
【００６６】
＜ファイルサイズの増加＞
ファイルをオープンしてデータを書き込むか、明示的にファイルサイズを大きくすることにより、ファイルに新たに領域を割り当てる必要が生じる。“エラー！参照元が見つかりません。”はファイルサイズが増加した場合の動作手順をフローチャートで示したものである。ＳＴＥＰ１でファイルサイズ増加の処理をスタートし、ＳＴＥＰ２でクラスタの追加が必要かどうかを確かめる。
【００６７】
ファイルサイズの増加は１バイト単位なのに対してクラスタは５１２バイト〜３２ｋバイトという単位で割り当てるのでクラスタを追加する必要があるかどうかを判断する。ＳＴＥＰ２でクラスタ追加の必要がなければＳＴＥＰ７へ分岐し、呼び出し元へ正常復帰する。ＳＴＥＰ３で空きクラスタの検索を行う。ＳＴＥＰ３は“エラー！参照元が見つかりません。”のフローチャートを用いて更に詳しく説明することとする。
【００６８】
そして、ＳＴＥＰ４でＳＴＥＰ３の結果空きクラスタが不足していないかどうか確かめる。もし、空きクラスタが不足していれば、ＳＴＥＰ５へ分岐し、エラーとして呼び出し元へ復帰する。ＳＴＥＰ４で空きクラスタの割り当てができていた場合はＳＴＥＰ６に進み、割り当てられたクラスタを予約クラスタチェーンに追加する。そして、ＳＴＥＰ７に進み正常復帰する。
【００６９】
＜空きクラスタ領域検索＞
“エラー！参照元が見つかりません。”は空き領域検索の手順をフローチャートで示したものである。
【００７０】
ＳＴＥＰ１で空き領域検索を開始し、ＳＴＥＰ２でＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  の先頭クラスタを指定する。ＳＴＥＰ２で指定するのは検索開始のクラスタなので、ここで指定するクラスタはアロケーション戦略によって異なる。ファーストフィット法と呼ばれる戦略では先頭クラスタであり、ネクストフィット法の場合は前回割り当てた場所の次からスタートする。ここではファーストフィット法を例に説明を続ける。
【００７１】
ＳＴＥＰ３で最後のクラスタに到達したかどうかを確かめ、もし最後のクラスタに到達していれば空きクラスタが存在していないことを意味しているため、ＳＴＥＰ４へ分岐し、空き領域無しで呼び出し元に復帰する。ＳＴＥＰ３で最後のクラスタでない場合はＳＴＥＰ４へ進み、Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  からクラスタ情報を読む。
【００７２】
ＳＴＥＰ６で読み出したクラスタ情報が空きクラスタかどうかを確かめ空きクラスタでなければＳＴＥＰ１０へ分岐し、次のクラスタの検索へ進み、空きクラスタだった場合はＳＴＥＰ７へ進む。ＳＴＥＰ７で予約クラスタチェーンのリストに存在するかどうかを調べ、ＳＴＥＰ８で予約クラスタチェーンのリストに存在しなかった場合はＳＴＥＰ９へ分岐してその領域を空き領域として復帰する。ＳＴＥＰ８でもし既に予約クラスタチェーンのリストに存在していればＳＴＥＰ１０へ進む。ＳＴＥＰ１０ではＦｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ  の次のクラスタを指定してＳＴＥＰ３へ戻る。ＳＴＥＰ３からＳＴＥＰ１０を繰り返すことによっていずれＳＴＥＰ４又はＳＴＥＰ９のどちらかに分岐し復帰する。
【００７３】
＜ファイルのクローズ＞
“エラー！参照元が見つかりません。”はファイルのクローズ時の動作を示したものである。
【００７４】
ＳＴＥＰ１でファイルクローズを開始し、ＳＴＥＰ２でキャッシュのフラッシュを行い、データ領域で書き込みが保留されているものを全て不揮発性記憶媒体に書き込む。ＳＴＥＰ３で予約ディレクトリスロットのタイムスタンプを更新する。そして、ＳＴＥＰ４で予約ディレクトリスロットの不揮発性記憶媒体への書き込みを行う。ＳＴＥＰ５で予約クラスタチェーンの書き込みを行い、ＳＴＥＰ６で復帰する。ＳＴＥＰ２のキャッシュのフラッシュによってオープン中のファイルの書き込みデータは全てフラッシュされるが、ディレクトリ情報及びクラスタチェーンが更新されるのはクローズしたファイルのみである。
【００７５】
＜ファイルの作成＞
“エラー！参照元が見つかりません。”でファイルを新しく作成する場合の手順をフローチャートで示した。
【００７６】
ＳＴＥＰ１でファイルの作成を開始し、ＳＴＥＰ２でファイルの属するサブディレクトリの検索を行う。ＳＴＥＰ３でファイル作成が不可能ならＳＴＥＰ１１へ分岐しエラーで呼び出し元へ復帰する。例えば、作成すべきファイルの属するサブディレクトリが存在しない場合や、既にファイルが存在していた場合にエラーとなるようなオプションを指定していて且つ既にファイルが存在していた場合等はエラーで復帰する。
【００７７】
ＳＴＥＰ４で空きスロットの検索を行う。ＳＴＥＰ５で空きスロットが存在しない場合はＳＴＥＰ７へ分岐し、ディレクトリスロット領域を増加させる。最後のディレクトリを１つ後ろにずらす場合に領域が不足していればクラスタチェーンを追加してディレクトリ領域も増加させる。
【００７８】
ＳＴＥＰ１２でディレクトリスロット領域の増加に失敗するとＳＴＥＰ１１へ分岐してエラーで復帰する。例えば、空きクラスタが不足していてクラスタチェーンを追加できない場合やルートディレクトリのためクラスタチェーンを追加できない場合に失敗となる。ルートディレクトリは他のディレクトリと違い、領域が予め決まっていてクラスタチェーンを追加することができない。
【００７９】
ＳＴＥＰ５で空きスロットが存在した場合はＳＴＥＰ６へ分岐する。ＳＴＥＰ６では予約ディレクトリスロットのリストに紹介をして、そのスロットが既に予約されているかどうかを調べる。
【００８０】
ＳＴＥＰ８で、既に予約ディレクトリスロットリストに存在していた場合はＳＴＥＰ４に戻り、続きの空きスロットの検索を行う。ＳＴＥＰ４〜ＳＴＥＰ８を繰り返す事によって予約ディレクトリスロットのリストに存在していない空きスロットが発見されるか、存在してないことが判明し、新たに空きスロットが作成されてＳＴＥＰ９へ進んでくる。ＳＴＥＰ９で予約ディレクトリスロットのリストに割り当てる空きスロットを追加し、ＳＴＥＰ１０で正常に復帰する。
【００８１】
＜実施の形態２＞
実施の形態１ではパーソナルコンピュータで一般的なＦＡＴ方式を例に解説したが、本発明はＦＡＴ方式に依存したものでなく、他のファイルシステムにおいても有効である。
【００８２】
＜実施の形態３＞
実施の形態１ではＬＲＵアルゴリズムによるバッファリングを例に解説したが、他のアルゴリズムによってアクセス頻度を低下させる場合も同様の効果が得られる。
【００８３】
【発明の効果】
以上の説明で明らかなように、本発明によれば、複数のファイルをオープンして書き込むアプリケーション動作中に電源断等の事故でシステムを中断してしまった場合に、クローズ動作によって完全な状態で保存が終了したファイルのみ不揮発性記憶媒体に残り、書き込み中で不完全な状態のファイルは痕跡が残らずに、且つ、ファイルシステムの管理情報は破綻の無い完全な常態を保つという装置を構成することができ、しかも、従来のシステムにキャッシュを搭載したものと同等の効率で動作が可能となるという効果が得られる。
【図面の簡単な説明】
【図１】本発明のデータ構造構成図である。
【図２】オペレーティングシステムの内部構成図である。
【図３】ファイルシステム管理領域データ構造図である。
【図４】セクタキャッシュを示す図である。
【図５】ＬＲＵによって順序が変更されたキャッシュの図である。
【図６】キャッシュより上位層から見た管理領域の図である。
【図７】不揮発性記憶媒体上の脱落チェーンを示す図である。
【図８】不揮発性記憶媒体上のクロスリンク前の状態を示す図である。
【図９】不揮発性記憶媒体上のクロスリンクを示す図である。
【図１０】不揮発性記憶媒体上のクロスリンク消去後の状態を示す図である。
【図１１】空きスロット予約と不揮発性記憶媒体上の空きスロットの関係を示す図である。
【図１２】空き領域検索のフローチャートである。
【図１３】ファイルサイズ増加のフローチャートである。
【図１４】ファイルへの書き込みのフローチャートである。
【図１５】ファイルクローズのフローチャートである。
【図１６】ファイル作成のフローチャートである。
【図１】
2004272608.tif 000003
【図２】
2004272608.tif 000004
【図３】
2004272608.tif 000005
【図４】
2004272608.tif 000006
【図５】
2004272608.tif 000007
【図６】
2004272608.tif 000008
【図７】
2004272608.tif 000009
【図８】
2004272608.tif 000010
【図９】
2004272608.tif 000011
【図１０】
2004272608.tif 000012
【図１１】
2004272608.tif 000013
【図１２】
2004272608.tif 000014
【図１３】
2004272608.tif 000015
【図１４】
2004272608.tif 000016
【図１５】
2004272608.tif 000017
【図１６】
2004272608.tif 000018