(57)【要約】【課題】  ＦＡＴファイルシステムにおいて、ディスクの読み書き速度を向上させるバッファキャッシュの操作方法を提供する。【解決手段】  ファイルディスクリプタの管理、およびファイルポインタの操作などを行なうファイル操作手段と、各ファイルのディレクトリエントリ情報の解析や、その構成の編集操作を行うディレクトリエントリ操作手段と、ファイル上の指定する位置のデータが記されたクラスタ番地を取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作手段と、セクタサイズで区切られた複数のバッファキャッシュを管理して、指定されたセクタのデータを含むバッファキャッシュを返したり、または未使用なバッファキャッシュを選択して、そのバッファキャッシュへのデータの読み込み、または書き込みを行うバッファキャッシュ操作手段とを有する。【選択図】  図１
2006127377.tif 000002
【特許請求の範囲】
【請求項１】
ファイルアロケーションテーブルを使用してファイルの管理を行うＦＡＴファイルシステムにおいて、ファイル操作の対象となるデータディスクのセクタサイズやセクタ／クラスタサイズを取得するディスク操作手段と、ユーザープログラムからの要求を受け付け、ファイルディスクリプタを管理してファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、或はファイル空間上のどの位置からデータを読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、ユーザープログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルやディレクトリの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、またファイルのサイズを取得したり、或はファイルやディレクトリへの操作によって更新された最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作、およびファイルやディレクトリの各種属性の編集操作を行うディレクトリエントリ操作手段と、読み書きの対象となるファイル上のデータの位置、およびＦＡＴ領域から読み出されるＦＡＴ情報から、目的とするデータの存在するディスク上のクラスタ番地を取得したり、或はファイルデータのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作手段とセクタサイズで区切られた複数のバッファキャッシュを、参照数、セクタ番号、過去のアクセス履歴、およびデータ種別をもって管理し、前記ディスク操作手段、ファイル操作手段、ディレクトリエントリ操作手段、ＦＡＴ操作手段からの指示により指定されたセクタのデータを含むバッファキャッシュを返したり、または未使用なバッファキャッシュを選択したり、或はディスクからバッファキャッシュへとデータを読み出したり、バッファキャッシュへのデータの書き込みを行うバッファキャッシュ操作手段とを有することを特徴とするＦＡＴファイルシステム。
【請求項２】
請求項１に記載のＦＡＴファイルシステムの該バッファキャッシュ操作手段においては、未使用なバッファを検索する際に、ＬＲＵアルゴリズムに併用して、ＦＡＴ領域の以外のデータが含まれているバッファから優先的に選択することを特徴とする。
【請求項３】
請求項１に記載のＦＡＴファイルシステムの該バッファキャッシュ操作手段においては、未使用なバッファを検索する際に、全てのバッファがＦＡＴ領域のデータであった場合には、ＬＲＵアルゴリズムにより、参照された時刻の最も古いデータの含まれているバッファを選択することを特徴とする。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はＦＡＴ型ディスクに記録されたファイル群を扱うためのＦＡＴファイルシステムに関する。特にＦＡＴ型ディスク上のデータへのアクセスを高速化するため  のバッファキャッシュの操作方法に関する。
【背景技術】
【０００２】
（ＦＡＴファイルシステム）
ファイル割り当て表（ＦＡＴ：ＦｉｌｅＡｌｌｏｃａｔｉｏｎＴａｂｌｅ）を使用してファイルを管理するファイルシステムは一般にＦＡＴファイルシステムと呼ばれている。また、ＦＡＴファイルシステムで使用されることを前提にフォーマットされたディスク媒体は一般にＦＡＴ型ディスクと呼ばれている。
【０００３】
図５は、主にＭｉｃｒｏｓｏｆｔ社の提供するオペレーティング・システム（ＯＳ）であるところのＭＳ−ＤＯＳ（米国マイクロ・ソフト社のディスク基準オペレーティング・システム：同社の登録商標）で使用されることを前提としたＦＡＴ型ディスクの  記録フォーマットの例を示したものである。
【０００４】
ＦＡＴ型ディスクに限らず、「ディスク」と呼ばれる媒体は、セクタと呼ばれる単位で複数のブロックに分割され、ディスク上に記録されたデータはセクタ単位で読み出し、または書き込みが行われる。
【０００５】
５０１は先頭の１セクタ（論理セクタ番号０）を示しており、一般にブートセクタと呼ばれている。ブートセクタ（５０１）にはオペレーティング・システムをロードするためのブートプログラム、後述するクラスタ１つあたりに含まれるセクタの数（以降、「セクタ／クラスタ数」と呼ぶ）、ルートディレクトリエントリ項目の個数、後述するＦＡＴ領域に使用されているセクタの数、などの情報が記録されている。
【０００６】
５０２はＦＡＴ領域であり、ファイルへのクラスタの割り当て（アロケーション）状況を記録する領域である（その詳細については後述する）。現在広く使用されているＦＡＴ型ディスクでは、１クラスタ分のＦＡＴを表すのに、１２ｂｉｔ，１６ｂｉｔ、または３２ｂｉｔを使用するのが一般的である。ＦＡＴ領域（５０２）は図５に示すように２重化され（図５のＦＡＴ１とＦＡＴ２）、ディスク上に連続して配置されている。つまりＦＡＴ１とＦＡＴ２には常に同じ内容のものが記録されている。
【０００７】
５０３は後述するルートディレクトリエントリである。
【０００８】
５０４はデータ領域であり、実際のファイルの内容（データ本体）やルートディレクトリ以下に属するディレクトリに関する情報を記録する領域である。
【０００９】
データ領域（５０４）はクラスタと呼ばれる単位で管理されている。クラスタとは連続する複数のセクタを一つの単位とするもので、１クラスタは２のべき乗（１，２，４，８，１６，…）で表される個数のセクタで構成されている。以降では説明を簡単にするために１クラスタは１セクタで構成されているものとする。
【００１０】
図６は、図５のルートディレクトリエントリ（５０３）中にあるディレクトリエントリの１項目を抜粋して、その構成を詳細に記した図である。ルートディレクトリエントリ（５０３）の１つの項目は３２バイトで構成され、各項目にはＦＡＴ型ディスクのルートディレクトリ上に存在するファイルやディレクトリ（サブディレクトリ）の名前、拡張子、属性、最終更新時日、ファイルの大きさ（バイト単位で表されたファイルのサイズ）、後述するデータ領域においてディレクトリエントリ上に記されたファイルに対応する実際のファイルの内容（データ本体）が記録されているクラスタ群の内、ファイルの先頭部にあたるデータが記録されたクラスタの番号（以下、開始クラスタ番号）などの情報が記録されている。
【００１１】
図７は、図５のＦＡＴ領域（５０２）に記録された内容を概念的に図に示したものである。ＦＡＴ領域（５０２）の各項目（７０２）は、データ領域（５０４）のクラスタ番地（７０３）と１対１に対応するようになっている。ＦＡＴ領域（５０２）の各項目（７０２）はファイルの読み出し時に正しい順番でそのファイルを構成するクラスタ群の読み出しが行えるように、クラスタ群の並び順（クラスタチェイン）を記録するために使用される。つまりＦＡＴ領域（５０２）の各項目（７０２）の内容には、次に読み出すべきクラスタ番地の値を順に記録して行き、データの最後となるクラスタにはそれが最後のクラスタであることを表す値（例えば１クラスタを１６ｂｉｔで表現するとすれば、ＦＦＦＦｈ）を記録する。
【００１２】
以上によりファイルを構成するクラスタ群の順番を正しくつなげることができる。
【００１３】
なお、データ領域（５０４）のクラスタの内、どのファイルにも使用されていないクラスタ（未使用クラスタ）に対応するＦＡＴ項目（７０２）には、未使用であることを表す値として００００ｈが書かれている。
【００１４】
図７を参照してさらに具体的に説明すれば、例えばルートディレクトリエントリ（５０３）に存在している、あるファイルの開始クラスタ番地（７０１）がルートディレクトリエントリ（５０３）に記録された情報より０００４ｈ番地であったとすると、ＦＡＴ項目（７０２）の０００４ｈ番目の項目には０００５ｈと書かれているので、７０３の‘ａ’部で示されたクラスタに記されたデータ続くデータ（７０３の‘ｂ’部）がデータ領域（５０４）の０００５ｈ番目のクラスタ番地に記録されていることが分かる。同様にしてＦＡＴ項目（７０２）の０００５ｈ番目の項目には０００Ａｈと書かれているので、さらに‘ｂ’部に続くデータ（７０３の‘ｃ’部）が０００Ａｈ番目のクラスタ番地に記録されていることが分かる。ＦＡＴ項目（７０２）の０００Ａｈ番目の項目には、クラスタチェインの終了を示すＦＦＦＦｈが書かれているので、データ領域（５０４）の０００Ａｈ番目のクラスタ（７０３の‘ｃ’部）が注目するファイルの最後のデータが含まれているクラスタとなる。
【００１５】
すなわち、一般的にあるファイルに注目して、そのファイルの内容とクラスタの割り当て状況を対比して図示すると、図８の様になる（１セクタ／クラスタの場合）。これはファイルの先頭からのデータ位置が分かると、それがどのクラスタに含まれているのかが分かることを示している。
【００１６】
（従来のＦＡＴファイルシステムにおけるデータの読み書き処理）
以降では、従来のＦＡＴファイルシステムにおいてＦＡＴ型ディスク上にファイルをオープンし、そのファイルのデータを読み書きする場合の処理について、概略  を説明する。説明を簡単にするため、これから読み書きを行うファイルはルートディレクトリエントリ（５０３）上に存在するものを指定し、またエラー処理の説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ（５０１）からセクタ／クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【００１７】
（ソフトウエア構成例）
図１は、ユーザープログラムがＦＡＴ型ディスク上のデータの読み書きを行う場合の、ソフトウエアの一構成例を示したものである。図示するように大きく分けて、１０１ユーザープログラム、１０３ファイル操作部、１０４ディレクトリ操作部、１０５ＦＡＴ操作部、１０６バッファキャッシュ操作部、１０７ディスクドライバ部に分けることができる。通常、バッファキャッシュ操作部（１０６）が使用するバッファキャッシュ用のメモリは、高速化のために半導体メモリ上に確保される。ユーザープログラム（１０１）はＦＡＴファイルシステムプログラム（１０２）が提供するインターフェイスを利用して、ディスクドライバ部（１０７）配下の記憶装置にあるファイル対しての読み書きなどの操作を行う。
【００１８】
（ファイルからのデータ読み出し処理）
最初に、ファイルからのデータ読み出し処理の手順について図９を参照して説明する。
【００１９】
まずステップＳ９０１で、ユーザープログラム（１０１）からデータを読み出す対象のファイルのオープン指示が出される。ルートディレクトリエントリ（５０３）をバッファキャッシュ用のメモリに読み出してこれを解析した結果、指定されたファイルが存在し、ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値（ファイルディスクリプタ）がユーザープログラム（１０１）へと返る。またファイルオープンの処理では、同時にそのファイルの開始クラスタの番号（ｎｅｘｔと表記する）を該当するルートディレクトリエントリ（５０３）から得る。
【００２０】
次にステップＳ９０２において、ステップＳ９０１で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置がユーザープログラム（１０１）より指定される。
【００２１】
次のステップＳ９０３ではステップＳ９０２で指定されたファイルデータの読み出し位置とあらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ／クラスタ数から読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかを求める。本説明ではこれをｎと表記する。
【００２２】
次にステップＳ９０４で、クラスタの順序番号の累積ｍ（初期値は１）とステップＳ９０３で求めたｎを比較する。ｍとｎが一致していれば、ステップＳ９０７に進み、一致していない場合にはステップＳ９０５に進む。
【００２３】
ステップＳ９０５では、上記ｎｅｘｔに対応するＦＡＴ項目の書かれたセクタをＦＡＴ領域（５０２）から１セクタ分バッファキャッシュ用のメモリに読み出し、さらにステップＳ９０６でＦＡＴ項目ｎｅｘｔに着目して、図７の説明であったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びｎｅｘｔに代入するとともに、クラスタの順序番号の累積ｍに１を加算する。
【００２４】
ステップＳ９０４からステップＳ９０６の間の処理は、クラスタの順序番号の累積ｍとステップＳ９０３で求めたクラスタ番号ｎが一致するまで繰り返し実行され、最終的にステップＳ９０７へと進む。
【００２５】
以上までのステップにより、ステップＳ９０２で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがｎｅｘｔに代入されている。したがって、ステップＳ９０７では該当するクラスタ番地（ｎｅｘｔ）のデータをディスクからバッファキャッシュへと読み出す。
【００２６】
ステップＳ９０８では、ステップＳ９０７で読み出したデータから目的とするデータを抽出し、ステップＳ９０２でユーザープログラム（１０１）から指定されたバッファに、同じく指定されたバイト数だけコピーする。
【００２７】
最後に、ステップＳ９０９でオープンされていたファイルのクローズ処理を行う。
【００２８】
以上により、ファイルデータの読み出し処理が終了する。
【００２９】
（ファイルへのデータ書き込み処理）
ファイルへのデータ書き込みの処理の手順は、図１０の様になる。
【００３０】
ステップＳ１００１からステップＳ１００７までの処理の説明は、ファイルからデータを読み出す場合の対応する処理と同様であるため省略する。
【００３１】
以上のステップにより、目的のクラスタ番地のデータがバッファキャッシュ用のメモリに読み出されている。ステップＳ１００８では、ステップＳ１００２でユーザープログラム（１０１）から指定されたバッファに格納されたデータをこのバッファキャッシュの一部または全部に上書きする。
【００３２】
最後に、ステップＳ１００９でオープンされていたファイルのクローズ処理を行う。
【００３３】
以上により、ファイルデータの書き込み処理が終了する。
【００３４】
（バッファキャッシュ操作部の処理）
以上で説明したように、ディスクのデータの読み出し／書き込みを行う場合には、通常ディスク上のデータを一旦バッファキャッシュ用のメモリに読み込む必要がある。バッファキャッシュ操作部（１０６）の役割は、ディスクのセクタサイズを区切りとしてバッファキャッシュ用のメモリに読み出したデータのうち、必要な部分を切り出してユーザーのバッファにコピーしたり、または変更しようとするデータの部分のみ、若しくは全体をユーザーのバッファからバッファキャッシュにコピーすることである。さらにセクタサイズで区切られたバッファキャシュを幾つか準備し、これをセクタ番号毎に管理することにより、一度読み出したデータを一定の期間記憶して、ユーザープログラム（１０１）やＦＡＴ操作部（１０５）が過去に読み出したデータと同じセクタ番号のデータを再度読み出そうとするときには、ディスク媒体よりもアクセス速度の早い媒体（半導体メモリ）から読み出して、ユーザープログラム（１０１）の動作の高速化を図ることである。
【００３５】
この様子を図１１を用いて簡単に説明する。
【００３６】
今、何個かのセクタサイズで区切られたバッファキャッシュがあるとする。この時、ファイルシステムから読み出し、または書き込みのセクタが指定されたとするとステップＳ１１０１ではまず、全てのバッファキャッシュの中から該当するセクタのデータが含まれたバッファキャッシュを検索する。
【００３７】
バッファキャッシュの中に該当するものがあれば（ステップＳ１１０２のＹＥＳ）これを返す。該当するものが無かった場合（ステップＳ１１０２のＮＯ）には、ステップＳ１１０３，Ｓ１１０４で使われていない、つまり他のプログラムから参照されていないバッファを検索し、そのうちの１つを選択する。この時、他のプログラムから参照されていないバッファを検索する手法としては、通常ＬＲＵ （Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）と呼ばれるアルゴリズムが使用される。
【００３８】
最後に選択されたバッファに対してディスクからの読み出し、または書き込みの操作を行う（ステップＳ１１０５）。
【００３９】
又、別の従来例としては、光磁気ディスク装置にＦＡＴ（ファイル管理テーブル）を格納するキャッシュバッファを設け、情報の記録及び再生のアクセス時間を短縮し、情報記録再生装置の作業効率の向上を図る装置（例えば特許文献１参照）をあげることが出来る。
【特許文献１】特開平８−１１０８６８号公報
【発明の開示】
【発明が解決しようとする課題】
【００４０】
上記バッファキャッシュ操作部の処理で説明した、未使用バッファの中から適当なバッファを選択する方法として例に上げたＬＲＵアルゴリズムとは、『参照された時間が最も古いバッファから順に捨てていく』というものである。
【００４１】
ＲＵアルゴリズムによってバッファキャッシュのデータが捨てられてしまった後、再び同じセクタ番号のデータを読み出す時には、アクセス速度の遅いディスクから読み出すことになる。しかしながら、ＦＡＴファイルシステムの場合には、その性質上、ＦＡＴ領域を参照する回数が多くなることが容易に想像できる。したがって、ＦＡＴ領域のデータが頻繁にバッファキャッシュから捨てられてしまうような場合には、その分だけファイルの読み書き速度が遅くなるという欠点がある。特にプログラム実行用のメモリ容量が制限され、バッファキャッシュに多くのメモリを使用できない組み込み機器では、ＦＡＴ領域のバッファキャッシュが短時間の内に捨てられる確立が高くなる。
【００４２】
本発明は上記の様な実情に艦みてなされたものであり、ＦＡＴファイルシステムにおいて、ディスクの読み書き速度を向上させるバッファキャッシュの操作方法を提供することを目的とする。
【課題を解決するための手段】
【００４３】
本発明は、ファイル操作の対象となるデータディスクのセクタサイズやセクタ／クラスタサイズを取得するディスク操作手段と、ユーザープログラムからの要求を受け付け、ファイルディスクリプタを管理してファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、ユーザープログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、またファイルのサイズを取得したり、或はファイルやディレクトリへの操作によって更新されたファイルの属性やファイルのサイズ、最終アクセス時日などの最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作を行うディレクトリエントリ操作手段と、読み書きの対象となるファイル上のデータの位置、およびディスクから読み出されたＦＡＴ領域の情報から、そのデータの存在するディスク上のクラスタ番地を取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作手段と、セクタサイズで区切られた複数のバッファキャッシュを、参照数、セクタ番号、過去のアクセス履歴、およびデータ種別をもって管理し、上記ディスク操作手段、ファイル操作手段、ディレクトリエントリ操作手段、ＦＡＴ操作手段からの指示により指定されたセクタのデータを含むバッファキャッシュを返したり、または未使用なバッファキャッシュを選択したり、或はディスクからバッファキャッシュへとデータを読み出したり、バッファキャッシュへのデータの書き込みを行うバッファキャッシュ操作手段とを有することを特徴とする。
【００４４】
以上の構成により、ＦＡＴ領域のデータが含まれるバッファキャッシュを他のデータのバッファキャッシュと区別して扱い、あるファイルに対してデータを読み出し、または書き込みの操作を行う際に、ＦＡＴ領域のデータが含まれるバッファキャッシュを通常のデータよりも長期間バッファキャッシュに保存しておくといった動作を行う。
【発明の効果】
【００４５】
以上で説明したように、本発明によるＦＡＴファイルシステム、およびそのバッファキャッシュ操作手法では、ＦＡＴ領域のデータが含まれるバッファキャッシュを、その他のデータが含まれるバッファキャッシュと区別して扱い、あるファイルに対してデータを読み出し、または書き込みの操作を行う際に、ＦＡＴ領域のデータが含まれるバッファキャッシュを通常のデータよりも長期間バッファキャッシュに保存しておくといった動作を行う。その結果ＦＡＴ領域のデータのキャッシュヒット率を向上させ、バッファキャッシュ用に多くのメモリ容量を使用せずともディスクの読み書き速度の高速化を図れるという効果がある。
【発明を実施するための最良の形態】
【００４６】
（システム構成）
本実施例の説明で使用するＦＡＴ型ディスクの記録フォーマット、ディレクトリエントリの構成、およびＦＡＴ領域の構成は、従来例で述べた図５、図６、図７と同じものであるので、その説明は省略する。
【００４７】
図１は本実施例の説明で使用するＦＡＴファイルシステムのソフトウエア構成図である。１０１は本ＦＡＴファイルシステムを利用するユーザープログラム、１０２は本発明によるＦＡＴファイルシステムを実現するＦＡＴファイルシステムプログラムである。
【００４８】
１０３はユーザープログラム（１０１）からの要求を受け付け、ファイルディスクリプタを管理してファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの管理などを行なうファイル操作部である。
【００４９】
１０４はディスクから読み出されたディレクトリエントリ情報を解析して、ユーザープログラム（１０１）から指示されたファイルの存在を検索したり、また、ファイルの先頭にあたるデータの含まれるクラスタを取得したり、またファイルのサイズを取得したり、或はファイルへの書き込み処理などの操作によって変化したファイルのサイズや、ファイルへの最終アクセス時日を更新し、これらをディレクトリエントリへ記録するなど、最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリ構造の解析、および管理や更新を行うディレクトリエントリ操作部、１０５は読み書きの対象となるファイル上のデータの位置ならびにディスクから読み出されたＦＡＴ項目から、目的のデータが記録されているディスク上のクラスタ番地を取得したり、ファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作部である。
【００５０】
１０６はセクタサイズで区切られた複数のバッファキャッシュを、参照数、セクタ番号、過去のアクセス履歴、およびデータ種別により管理し、前記ファイル操作部、ディレクトリエントリ操作部、ＦＡＴ操作部からの指示により指定されたセクタのデータを含むバッファキャッシュがあればそれを返したり、それがなければ、プログラムから参照されていないバッファキャッシュをＬＲＵアルゴリズム、ならびにバッファキャッシュのデータ種別を併用して選択し、以前のバッファキャシュの内容を捨てて、新たにそのバッファキャッシュへとデータを読み出したり、あるいはバッファキャッシュへとデータの書き込みを行うバッファキャッシュ操作部である。
【００５１】
１０７はデータの格納領域となる図示しないフロッピー（登録商標）ディスクやハードディスク、またはフラッシュメモリカードといったディスク記憶媒体からの実際データの読み出し、またはこれらの媒体へのデータの書き込み処理を行うディスクドライバ部である。
【００５２】
図２は上述の機能構成を実現するための概略のハードウエア構成を示すブロック図である。同図において、２０１はＣＰＵであり、上述のユーザープログラム（１０１）やＦＡＴファイルシステムプログラム（１０２）をロードして実行する。２０２はＲＡＭであり、上述のユーザープログラム（１０１）やＦＡＴファイルシステムプログラム（１０２）を格納するほか、ディスク上にあるデータの読み出し、または書き込みの際のバッファキャッシュ領域（２０３）として使用されたり、本発明によるバッファキャッシュ管理部を含む各プログラムの動作時に使用する各種変数の退避、或は保存用のワークエリアとして使用される。２０４はデータ格納領域となるディスク装置である。２０５はＣＰＵ（２０１）、ＲＡＭ（２０２）、ディスク装置（２０４）を接続するシステムバスである。
【００５３】
図３は、本実施例の説明で使用するバッファキャッシュの一構成例を示したものである。３０１は参照数、３０２はセクタ番号、３０３はそのバッファキャッシュがＦＡＴ領域のデータであるか（本説明では１とする）否か（本説明ではでは０とする）のデータ種別を示すフラグである。
【００５４】
３０４にはチェイン構造を成すバッファキャシュの次のバッファキャッシュアドレスを特定するメモリ番地等の値が記録され、これによりバッファキャッシュのチェイン構造を変更することで、バッファキャッシュへのアクセス履歴を管理する。
【００５５】
３０５は実際のデータを格納する部分である。
【００５６】
（詳細動作説明）
次に、本実施例におけるＦＡＴファイルシステムの動作について説明する。説明を簡単にするため、読み出し、または書き込み操作を行うファイルは、ＦＡＴ型ディスクのルートディレクトリ上にあるものを対象とし、エラー処理の詳細説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ（５０１）からセクタ／クラスタ数を読み出し、その数値がメモリ（２０２）へと記憶されているものとする。また、ファイルからのデータ読み出し／書き込み処理についても従来例と同様であるのでここでの説明は省略し、以降では図４のフローチャートを参照しながらバッファキャッシュ管理部の処理を説明する。
【００５７】
今、図３の構成を成すｎ個のバッファキャッシュがあるとする。ユーザープログラム（１０１）、ファイル操作部（１０３）、ディレクトリ操作部（１０４）、ＦＡＴ操作部（１０５）などから読み出し、または書き込みのセクタが指定されたとすると、ステップＳ４０１ではまずｎ個のバッファを検索し、その中から図３のセクタ番号（３０２）を参照して、該当するセクタのデータが含まれたバッファキャッシュの検索を開始する。バッファキャッシュの中に該当するものがあれば（ステップＳ４０２のＹＥＳ）これを返す。
【００５８】
すべてのバッファを検索した結果、該当するものが無かった場合（ステップＳ４０２のＮＯ）には、次にステップＳ４０３からの処理により、未使用な（つまり他のプログラムからは参照されていない）バッファキャッシュを検索する手順に移る。
【００５９】
ステップＳ４０３，Ｓ４０４では、参照数（３０１）、およびデータ種別（３０３）を参照して、ｎ個のバッファキャッシュの中から、参照数が零でかつＦＡＴ領域以外のデータを含むバッファキャッシュをＬＲＵアルゴリズムを併用して検索する。条件に沿うバッファキャッシュがあれば（ステップＳ４０４のＹＥＳ）これを返す。
【００６０】
ステップＳ４０４の条件に沿うバッファキャッシュがなかった場合には（ステップＳ４０４のＮＯ）、ステップＳ４０５，Ｓ４０６でｎ個のバッファキャッシュの中から参照数が零の条件を満たすバッファキャッシュをＬＲＵアルゴリズムにより検索し、これを返す。
【００６１】
最後に、ステップＳ４０１からＳ４０６の処理により選択されたバッファキャシュについて、ステップＳ４０７でＬＲＵアルゴリズムにしたがって次のバッファキャッシュのメモリ番地（３０４）で指示されるバッファキャッシュのチェインを再構成するとともに、該当するバッファキャッシュへの読み出し／書き込みの操作を行う（ステップＳ４０８）。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施例、および従来例におけるＦＡＴファイルシステムのソフトウエア構成図。
【図２】図１で示したＦＡＴファイルシステムを動作させるためのハードウエアの概略ブロック図。
【図３】本発明の実施例におけるバッファキャッシュの構成図。
【図４】本発明の実施例におけるバッファキャッシュ操作部での処理手順を示すフローチャート。
【図５】本発明の実施例、および従来例におけるＦＡＴ型ディスクの記録フォーマット。
【図６】本発明の実施例、および従来例における１つのファイルに対応するディレクトリエントリの構成図。
【図７】本発明の実施例、および従来例におけるＦＡＴ型ディスクのＦＡＴ領域の概念図。
【図８】本発明の実施例、および従来例におけるファイルへのクラスタ割り当ての例。
【図９】本発明の実施例、および従来例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図１０】本発明の実施例、および従来例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【図１１】従来例におけるバッファキャッシュ操作部での処理手  順を示すフローチャート。
【符号の説明】
【００６３】
１０１  ユーザープログラム
１０２  ＦＡＴファイルシステムプログラム
１０３  ファイル操作部
１０４  ディレクトリ操作部
１０５  ＦＡＴ操作部
１０６  バッファキャッシュ操作部
１０７  ディスクドライバ部
２０１  ＣＰＵ
２０２  ＲＡＭ
２０３  バッファキャッシュメモリ
２０４  ディスク装置
２０５  システムバス
【図１】
2006127377.tif 000003
【図２】
2006127377.tif 000004
【図３】
2006127377.tif 000005
【図４】
2006127377.tif 000006
【図５】
2006127377.tif 000007
【図６】
2006127377.tif 000008
【図７】
2006127377.tif 000009
【図８】
2006127377.tif 000010
【図９】
2006127377.tif 000011
【図１０】
2006127377.tif 000012
【図１１】
2006127377.tif 000013