(57)【要約】【課題】ＦＡＴ型ディスク上のファイルを読み出し、または書き込み操作する場合に、操作するデータの含まれるディスクブロックを高速に、かつ多くのメモリリソースを使用せずとも求めることが可能な方法を提供する。【解決手段】ファイルのオープン／クローズ処理や、ファイルポインタの操作などを行なうファイル操作手段と、ディスク上に保存されている各ファイルのディレクトリエントリ情報の解析や、その構成の編集操作を行うディレクトリエントリ操作手段と、読み書きするファイル上で目的とするデータの存在するクラスタ番地を取得して、これをＦＡＴキャッシュデータとして記憶したり、またはその目的とするデータの存在するクラスタ番地を該ＦＡＴキャッシュデータを参照して、もしくは直接ＦＡＴ領域の情報を解析して取得したり、或はファイルのクラスタチェインを正しく形成する。【選択図】        図１
2004362092.tif 000002
【特許請求の範囲】
【請求項１】
ファイルアロケーションテーブルを使用してファイルの管理を行うＦＡＴファイルシステムにおいて、
ユーザープログラムからの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、或はファイル空間上のどの位置からデータを読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、
ユーザープログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルやディレクトリの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、或はファイルやディレクトリへの操作によって更新された最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作、およびファイルやディレクトリの各種属性の編集操作を行うディレクトリエントリ操作手段と、
読み書きの対象となるファイル上のデータの位置、およびＦＡＴ領域から読み出されるＦＡＴ情報から、データの存在するディスク上のクラスタ番地を取得して、これをＦＡＴキャッシュデータとして記憶したり、または読み書きの対象となるファイル上のデータの位置から、そのデータの存在するディスク上のクラスタ番地を該ＦＡＴキャッシュデータを参照して、もしくは直接ディスク上のＦＡＴ領域から読み出されたＦＡＴ情報を解析して、対応するＦＡＴ項目から取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作手段とを有することを特徴とするＦＡＴファイルシステム。
【請求項２】
請求項１に記載のＦＡＴファイルシステムにおいて、該ＦＡＴ操作手段が扱うＦＡＴキャッシュデータは、本ＦＡＴファイルシステムが動作するシステム上のメモリに動的に任意の制限数に達するまで複数組確保されることを特徴とする。
【請求項３】
請求項１に記載のＦＡＴファイルシステムにおいて、前記ＦＡＴキャッシュデータが前記任意の制限数に達するまで複数組確保された後、更に異なる組のキャッシュデータを記録する際は、既存のＦＡＴキャッシュデータに上書きして行くことを特徴とする。
【請求項４】
請求項１に記載のＦＡＴファイルシステムにおいて、該ＦＡＴ操作手段が扱うＦＡＴキャッシュデータはオープンされるファイル毎に管理されることを特徴とする。
【請求項５】
請求項１に記載のＦＡＴファイルシステムにおいて、該ファイル操作手段は、ユーザプログラムからのファイルのクローズ指示と同時に、そのオープンされていたファイルがＦＡＴキャッシュデータとして使用していたメモリエリア解放することを特徴とする。
【請求項６】
請求項１に記載のＦＡＴファイルシステムにおいて、該ＦＡＴ操作手段が扱うＦＡＴキャッシュデータには、少なくともディスク上に存在するファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、前記クラスタ順序番号に対応するディスク上のクラスタ番地を含み、また複数組あるＦＡＴキャッシュデータの内、次に参照するＦＡＴキャッシュデータの存在するメモリ番地を含むことで、動的に確保されたＦＡＴキャッシュデータが鎖状を成して管理されることを特徴とする。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＦＡＴ型ディスクに記録されたファイル群を扱うためのＦＡＴファイルシステムに関する。特にＦＡＴ型ディスクに記録されたあるファイルデータに対して、割り当てられているクラスタのディスク上の位置番号と、そのクラスタがファイルの先頭クラスタから何番目にあたるかを示す順序番号をメモリ上にヒント情報として記憶し、ファイルデータの読み出しや書き込みの際には、この記憶されたヒント情報を利用して、読み出しや書き込みするディスク上のブロック位置を求める方法に関する。
【０００２】
【従来の技術】
（ＦＡＴファイルシステム）
ファイル割り当て表（ＦＡＴ：Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ）を使用してファイルを管理するファイルシステムは一般にＦＡＴファイルシステムと呼ばれている。また、ＦＡＴファイルシステムで使用されることを前提にフォーマットされたディスク媒体は一般にＦＡＴ型ディスクと呼ばれている（例えば、特許文献１を参照）。
【０００３】
図７は、主にＭｉｃｒｏｓｏｆｔ社の提供するオペレーティングシステム（ＯＳ）であるところのＭＳ−ＤＯＳ（商標）で使用されることを前提としたＦＡＴ型ディスクの記録フォーマットの例を示したものである。
【０００４】
ＦＡＴ型ディスクに限らず、「ディスク」と呼ばれる媒体は、セクタと呼ばれる単位で複数のブロックに分割され、ディスク上に記録されたデータはセクタ単位で読み出し、または書き込みが行われる。
【０００５】
７０１は先頭の１セクタ（論理セクタ番号０）を示しており、一般にブートセクタと呼ばれている。ブートセクタ（７０１）にはオペレーティングシステムをロードするためのブートプログラム、後述するクラスタ１つあたりに含まれるセクタの数（以降、「セクタ／クラスタ数」と呼ぶ）、ルートディレクトリエントリ項目の個数、後述するＦＡＴ領域に使用されているセクタの数、などの情報が記録されている。
【０００６】
７０２はＦＡＴ領域であり、ファイルへのクラスタの割り当て（アロケーション）状況を記録する領域である（その詳細については後述する）。現在広く使用されているＦＡＴ型ディスクでは、１クラスタ分のＦＡＴを表すのに、１２ｂｉｔ，１６ｂｉｔ、または３２ｂｉｔを使用するのが一般的である。ＦＡＴ領域（７０２）は図７に示すように２重化され（図７のＦＡＴ１とＦＡＴ２）、ディスク上に連続して配置されている。つまりＦＡＴ１とＦＡＴ２には常に同じ内容のものが記録されている。
【０００７】
７０３はルートディレクトリエントリである（詳細は後述する）。
【０００８】
７０４はデータ領域であり、実際のファイルの内容（データ本体）やルートディレクトリ以下に属するディレクトリに関する情報を記録する領域である。
【０００９】
データ領域（７０４）はクラスタと呼ばれる単位で管理されている。クラスタとは連続する複数のセクタを一つの単位とするもので、１クラスタは２のべき乗（１，２，４，８，１６，．．．）で表される個数のセクタで構成されている。以降では説明を簡単にするために１クラスタは１セクタで構成されているものとする。
【００１０】
図８は、図７のルートディレクトリエントリ（７０３）中にあるディレクトリエントリの１項目を抜粋して、その構成を詳細に記した図である。ルートディレクトリエントリ（７０３）の１つの項目は３２バイトで構成され、各項目にはＦＡＴ型ディスクのルートディレクトリ上に存在するファイルやディレクトリ（サブディレクトリ）の名前、拡張子、属性、最終更新時日、ファイルの大きさ（バイト単位で表されたファイルのサイズ）、後述するデータ領域においてディレクトリエントリ上に記されたファイルに対応する実際のファイルの内容（データ本体）が記録されているクラスタ群の内、ファイルの先頭部にあたるデータが記録されたクラスタの番号（以下、開始クラスタ番号）などの情報が記録されている。
【００１１】
ディレクトリエントリの先頭バイト、つまり図８を参照すれば「名前」の先頭にあたるバイトの値が００ｈであった場合には、そのエントリが未使用であることを示し、またその値がＥ５ｈであった場合には、以前に存在していたファイルが削除されたことを示している。いずれにせよ先頭のバイトにこれらの値が記されているエントリは空きエントリであることを示している。
【００１２】
ファイルの属性には、主要な物として、それがボリュームラベルであることを示すビット（ビット位置３）や、それがディレクトリエントリ情報であることを示すビット（ビット位置４）がある。
【００１３】
ディレクトリエントリの構成は、現在市販されているＭＳ−ＤＯＳの最新版においては、「ファイル名として名前８文字＋拡張子３文字までの１１文字数分が使用可能である」という従来の制限を拡張して、従来との互換性を保ちつつ、「ＶＦＡＴ」と称する１１文字以上の長さのファイル名を扱えるような規格になっているが、本発明と直接関わる部分ではないため、その説明は省略する。
【００１４】
また、図９は、ディレクトリエントリ全体を表し、前述の個々の１ファイルに対するディレクトリエントリ情報が１セクタのデータ上にどのように配置されているかの一例である。
【００１５】
図１０は、図７のＦＡＴ領域（７０２）に記録された内容を概念的に図に示したものである。ＦＡＴ領域（７０２）の各項目（１００２）は、データ領域（７０４）のクラスタ番地（１００３）と１対１に対応するようになっている。ＦＡＴ領域（７０２）の各項目（１００２）はファイルの読み出し時に正しい順番でそのファイルを構成するクラスタ群の読み出しが行えるように、クラスタ群の並び順（クラスタチェイン）を記録するために使用される。つまりＦＡＴ領域（７０２）の各項目（１００２）の内容には、次に読み出すべきクラスタ番地の値を順に記録して行き、データの最後となるクラスタにはそれが最後のクラスタであることを表す値（例えば１クラスタを１６ｂｉｔで表現するとすれば、ＦＦＦＦｈ）を記録する。以上によりファイルを構成するクラスタ群の順番を正しくつなげることができる。
【００１６】
なお、データ領域（７０４）のクラスタの内、どのファイルにも使用されていないクラスタ（未使用クラスタ）に対応するＦＡＴ項目（１００２）には、未使用であることを表す値として００００ｈが書かれている。
【００１７】
図１０を参照してさらに具体的に説明すれば、例えばルートディレクトリエントリ（７０３）に存在している、あるファイルの開始クラスタ番地（１００１）がルートディレクトリエントリ（７０３）に記録された情報より０００４ｈ番地であったとすると、ＦＡＴ項目（１００２）の０００４ｈ番目の項目には０００５ｈと書かれているので、１００３の’ａ’部で示されたクラスタに記されたデータ続くデータ（１００３の’ｂ’部）がデータ領域（７０４）の０００５ｈ番目のクラスタ番地に記録されていることが分かる。同様にしてＦＡＴ項目（１００２）の０００５ｈ番目の項目には０００Ａｈと書かれているので、さらに’ｂ’部に続くデータ（１００３の’ｃ’部）が０００Ａｈ番目のクラスタ番地に記録されていることが分かる。ＦＡＴ項目（１００２）の０００Ａｈ番目の項目には、クラスタチェインの終了を示すＦＦＦＦｈが書かれているので、データ領域（７０４）の０００Ａｈ番目のクラスタ（１００３の’ｃ’部）が注目するファイルの最後のデータが含まれているクラスタとなる。
【００１８】
すなわち、一般的にあるファイルに注目して、そのファイルの内容とクラスタの割り当て状況を対比して図示すると、図１１の様になる。これはファイルの先頭からのデータ位置が分かると、それがどのクラスタに含まれているのかが分かることを示している。
【００１９】
（従来のＦＡＴファイルシステムにおけるデータの読み書き処理）
以降では、従来のＦＡＴファイルシステムにおいてＦＡＴ型ディスク上にファイルをオープンし、そのファイルのデータを読み書きする場合の処理について、本発明と関わりのある部分の処理の概略を説明する。説明を簡単にするため、読み書きを行おうとするファイルはルートディレクトリエントリ（７０３）上のものを対象とし、エラー処理の説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ（７０１）からセクタ／クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【００２０】
（ファイルからのデータ読み出し処理）
ファイルからのデータ読み出し処理の手順について図１２を参照して説明する。
【００２１】
まずステップＳ１２０１で、ユーザプログラムからデータを読み出す対象のファイルがオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値（ファイルディスクリプタ）がユーザプログラムへと返る。またファイルオープンの処理では、同時にそのファイルの開始クラスタの番号（ｎｅｘｔと表記する）を該当するルートディレクトリエントリ（７０３）から得る。
【００２２】
次にステップＳ１２０２において、ステップＳ１２０１で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【００２３】
次のステップＳ１２０３ではステップＳ１２０２で指定されたファイルデータの読み出し位置とあらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ／クラスタ数から次式を計算する。
【外１】
2004362092.tif 000003
【００２４】
上式（１）の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本説明ではこれをｎと表記する。
【００２５】
次にステップＳ１２０４で、クラスタの順序番号の累積ｍ（初期値は１）とステップＳ１２０３で求めたｎを比較する。ｍとｎが一致していれば、ステップＳ１２０７に進み、一致していない場合にはステップＳ１２０５に進む。
【００２６】
ステップＳ１２０５では、上記ｎｅｘｔに対応するＦＡＴ項目の書かれたブロックをＦＡＴ領域（７０２）から１セクタ分読み出し、さらにステップＳ１２０６でＦＡＴ項目ｎｅｘｔに着目して、図１０の説明であったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びｎｅｘｔに代入するとともに、クラスタの順序番号の累積ｍに１を加算する。
【００２７】
ステップＳ１２０４からステップＳ１２０６の間の処理は、クラスタの順序番号の累積ｍとステップＳ１２０３で求めたクラスタ番号ｎが一致するまで繰り返し実行され、最終的にステップＳ１２０７へと進む。
【００２８】
以上までのステップにより、ステップＳ１２０２で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがｎｅｘｔに代入されている。したがって、ステップＳ１２０７では該当するブロック番号（ｎｅｘｔ）のデータをディスクから読み出す。
【００２９】
ステップＳ１２０８では、ステップＳ１２０７で読み出したデータから目的とするデータを抽出し、ステップＳ１２０２でユーザプログラムから指定されたバッファにコピーする。
【００３０】
最後に、ステップＳ１２０９でオープンされていたファイルのクローズ処理を行う。
【００３１】
以上により、ファイルデータの読み出し処理が終了する。
【００３２】
（ファイルへのデータ書き込み処理）
ファイルへのデータ書き込みの処理の手順は、図１３の様になる。
【００３３】
ステップＳ１３０１からステップＳ１３０６までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【００３４】
以上のステップにより、目的のブロックがｎｅｘｔに代入されている。したがってステップＳ１３０７では、ステップＳ１３０２でユーザプログラムから指定されたバッファに格納されたデータをディスク上のブロック番号（ｎｅｘｔ）へと書き込む。
【００３５】
最後に、ステップＳ１３０８でオープンされていたファイルのクローズ処理を行う。
【００３６】
以上により、ファイルデータの書き込み処理が終了する。
【００３７】
【特許文献１】
特開２００１−１０１０４６号公報
【００３８】
【発明が解決しようとする課題】
しかしながら、上記のような従来のＦＡＴファイルシステムの場合、読み出しまたは書き込みを行うディスク上のブロック番号を求めるためには、クラスタチェインをデータの開始クラスタから順に追って行く必要がある。ここでＦＡＴ型ディスクの特徴である、「ＦＡＴ領域で各ファイルへのクラスタの割り当て状況を管理する」という仕組みから、１つのファイルが使用しているクラスタの情報はＦＡＴ領域に散在しているという特徴がある。そのため、あるファイルのクラスタチェイン情報を取り出すためには、いくつかのＦＡＴ領域のブロックを読み出す必要がある場合がある。また、ファイルサイズの大きなファイルを扱う場合、そのファイルの末尾のデータを操作したい時には、該当するクラスタを求めるために、多くのＦＡＴ領域のブロックの読み出しが必要になり、かつ該当するクラスタを求めるために繰り返し実行される計算量が多くなって、その分だけ処理に時間を要するという問題にもなってくる。
【００３９】
ＦＡＴ領域のブロックの読み出しに関しては、一度読み出したＦＡＴデータを、一時的にメモリ上に蓄えておくことで、ディスクからデータを読み出す際に要する時間のオーバーヘッドを低減させる方法が考えられるが、組込み機器の様に使用可能なメモリリソース量が限られている環境下では、この様な解決策が必ずしも有効では無いこともあり得る。
【００４０】
本発明は上記の様な実情に艦みてなされたものであり、ＦＡＴ型ディスク上のファイルを読み出し、または書き込み操作する場合に、操作するデータの含まれるディスクブロックを高速に、かつ多くのメモリリソースを使用せずとも求めることが可能な方法を提供することを目的とする。
【００４１】
【課題を解決するための手段】
本発明は、ユーザープログラムからの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、ユーザプログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、或はファイルやディレクトリへの操作によって更新されたファイルの属性やファイルのサイズ、最終アクセス時日などの最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作を行うディレクトリエントリ操作手段と、読み書きの対象となるファイル上のデータの位置、およびＦＡＴ情報からデータの存在するディスク上のクラスタ番地を取得して、これをＦＡＴキャッシュデータとして記憶したり、または読み書きの対象となるファイル上のデータの位置から、そのデータの存在するディスク上のクラスタ番地を該ＦＡＴキャッシュデータを参照して、もしくは直接ディスクから読み出されたＦＡＴ領域の情報を解析して、ＦＡＴ領域の対応するＦＡＴ項目から取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作手段とを有することを特徴とする。
【００４２】
以上の構成により、あるファイルに対して指定されたファイル空間上の位置にあるデータを読み出し、または書き込みの操作を行う際に、そのデータの含まれるディスク上のクラスタ番地をＦＡＴキャッシュデータから求めるといった動作を行う。
【００４３】
【発明の実施の形態】
（システム構成）
本実施例の説明で使用するＦＡＴ型ディスクの記録フォーマット、ディレクトリエントリの構成、およびＦＡＴ領域の構成は、従来例で述べた図７、図８、図１０と同じものであるので、その説明は省略する。
【００４４】
図１は本実施例の説明で使用するＦＡＴファイルシステムのソフトウエア構成図である。１０１は本ＦＡＴファイルシステムを利用するユーザープログラム、１０２は本発明によるＦＡＴファイルシステムを実現するＦＡＴファイルシステムプログラムである。
【００４５】
１０３はユーザープログラム（１０１）からの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの管理などを行なうファイル操作部である。
【００４６】
１０４はディスクから読み出されたディレクトリエントリ情報を解析して、ユーザープログラム（１０１）から指示されたファイルの存在を検索したり、また、ファイルの先頭にあたるデータの含まれるクラスタを取得したり、或はファイルへの書き込み処理などの操作によって変化したファイルのサイズや、ファイルへの最終アクセス時日を更新し、これらをディレクトリエントリへ記録するなど、最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリ構造の解析、および管理や更新を行うディレクトリエントリ操作部、１０５は後述するＦＡＴキャッシュデータを動的に確保したメモリに構築、更新、削除するなどの管理をしたり、または読み書きの対象となるファイル上のデータの位置からディスク上のクラスタ番地を、ＦＡＴキャッシュデータを参照して、もしくはディスクから読み出されたＦＡＴの情報を解析して、ＦＡＴ領域（７０２）の対応するＦＡＴ項目から取得したり、ファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うＦＡＴ操作部である。
【００４７】
１０６はデータの格納領域となる図示しないフロッピー（登録商標）ディスクやハードディスク、またはフラッシュメモリカードといったディスク記憶媒体からの実際データの読み出し、またはこれらの媒体へのデータの書き込み処理を行うディスクドライバ部である。
【００４８】
図２は上述の機能構成を実現するための概略のハードウエア構成を示すブロック図である。同図において、２０１はＣＰＵであり、上述のユーザープログラム（１０１）やＦＡＴファイルシステムプログラム（１０２）をロードして実行する。２０２はＲＡＭであり、上述のユーザープログラム（１０１）やＦＡＴファイルシステムプログラム（１０２）を格納するほか、ディスク上にあるデータの読み出し、または書き込みの際にバッファ領域として使用されたり、本発明によるＦＡＴファイルシステムを含む各プログラムの動作時に使用する各種変数の退避、或は保存用のワークエリアとして使用される。２０３はデータ格納領域となるディスク装置である。２０４はＣＰＵ（２０１）、ＲＡＭ（２０２）、ディスク装置（２０３）を接続するシステムバスである。
【００４９】
図３は、ＦＡＴ操作部（１０５）が操作するＦＡＴキャッシュの構成を示すものである。ＦＡＴキャッシュに保存されているデータにはディスク上に存在するファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するディスク上のクラスタ番地が含まれている。また、次のＦＡＴキャッシュデータの存在するメモリ番地を保存することで、動的に確保されたＦＡＴキャッシュデータが鎖状を成し、ＦＡＴキャッシュデータの組を順に追って検索できるような構造になっている。
【００５０】
（詳細動作説明）
次に、本実施例におけるＦＡＴファイルシステムの動作について、添付のフローチャートを参照しながら説明する。説明を簡単にするため、読み出し、または書き込み操作を行うファイルは、ＦＡＴ型ディスクのルートディレクトリ上にあるものを対象とし、エラー処理の詳細説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ（７０１）からセクタ／クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【００５１】
（ファイルのオープン処理）
まず、ファイルをオープンする際の処理手順について図４を参照して説明する。
【００５２】
ユーザープログラム（１０１）がファイルオープンの要求を発行すると、ステップＳ４０１でファイル操作部（１０３）はそのオープンしようとするファイルを数値として表すためのファイルディスクリプタを確保する。続いてディスク上にユーザープログラム（１０１）で指定された名前のファイルが存在することを検索するステップＳ４０２からの手順に移る。
【００５３】
ファイル検索のための手順は、まずステップＳ４０２でルートディレクトリエントリ（７０３）の先頭の１セクタ分のディレクトリエントリデータをＲＡＭ（２０２）上に確保されたメモリバッファに読み込む。１つのファイルに対するディレクトリエントリ情報は一般的に１セクタ分のデータに十分収まる量であり、したがってこのバッファにはいくつかのファイル数分のディレクトリエントリ情報が読み込まれていることになる。
【００５４】
次に、最初のディレクトリエントリ情報に注目し、ステップＳ４０３においてディレクトリ操作部（１０４）はディレクトリエントリ項目の先頭の１バイトを比較し、先頭１バイトの値が００ｈ（未使用エントリ）でないか、あるいはＥ５ｈ（削除エントリ）で無いかを調べる。未使用でも削除エントリでも無かった場合には（ステップＳ４０３のＹＥＳ）、次にステップＳ４０４でファイルの属性情報を調べる。ファイルの属性がディレクトリやボリュームラベルであった場合（ステップＳ４０４のＹＥＳ）はこのエントリを無視して、ステップＳ４０７に進む。
【００５５】
ステップＳ４０７では１セクタに含まれる分のディレクトリエントリを全て解析したかを調べる。ディレクトリエントリがまだ残っていればステップＳ４０８でポインタを進めて（すなわち次のエントリ情報の先頭バイトに注目し）、ステップＳ４０３に戻って次のエントリの解析に移る。
【００５６】
また、ステップＳ４０７で１セクタ分のエントリを処理し終えていたならば、ステップＳ４０９でルートディレクトリエントリ（７０３）にある全てのエントリを解析し終えたかを判断する。全てのエントリを処理していれば最終的に一致するファイル名が見つからなかったという結果を返し、オープン処理を終了する（ステップＳ４０９のＹＥＳ）。まだ全てのエントリを解析し終えていなければ（ステップＳ４０９のＮＯ）、ステップＳ４０２に戻ってエントリ情報の続きの１セクタ分のデータを読み出し、ステップＳ４０３からの処理を継続する。
【００５７】
一方、ステップＳ４０４で通常のファイルとして有効なエントリであると判断されれば、ステップＳ４０５でディレクトリエントリ情報から得られるファイル名、ファイルの開始クラスタ番号、ファイルのサイズ等の情報を変数に記憶するとともに、所望の手段により、このファイルをディスク上に唯一に特定できるインデックス値を算出し、これを記憶する。
【００５８】
その後ステップＳ４０６に進み、現在注目しているディレクトリエントリに記されたファイル名とユーザープログラム（１０１）から与えられたファイル名とが一致するものであるかを判断する。一致してはいなかった場合（ステップＳ４０６のＮＯ）には、ステップＳ４０７に進み、ファイル名が一致していればステップＳ４０１で取得したファイルディスクリプタを返してファイルオープンの処理を終了する。
【００５９】
（ファイルからのデータ読み出し処理）
次にファイルのデータを読み出す際の処理手順について図５を参照して説明する。
【００６０】
基本的な手順は従来のＦＡＴファイルシステムと同様にして、まず、ステップＳ５０１でユーザープログラム（１０１）から、データを読み出す対象のファイルが上述のファイルオープンの手順にしたがってオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値（ファイルディスクリプタ）がユーザープログラム（１０１）へと返る。また、ファイルオープンの処理では同時にそのファイルの開始クラスタの番号（ｎｅｘｔと表記する）をルートディレクトリエントリ（７０３）から得る。
【００６１】
次にステップＳ５０２において、ステップＳ５０１で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【００６２】
次のステップＳ５０３では、ステップＳ５０２で指定されたファイルデータの読み出し位置と、あらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ／クラスタ数から次式を計算する。
【外２】
2004362092.tif 000004
【００６３】
上式（２）の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本実施例の説明ではこれをｎと表記する。
【００６４】
次にステップＳ５０４で、図３で示したＦＡＴキャッシュデータを順を追って参照し、該当するファイルのインデックス値に一致するデータの中から、クラスタ順序番号がステップＳ５０３で算出したｎに最も近く、かつｎを超えないキャッシュデータを検索する。ステップＳ５０４の処理を行った後、条件に相当するキャッシュデータがあれば（ステップＳ５０５のＹＥＳ）、ステップＳ５０６ではそのキャッシュデータの累積値をｍに、クラスタ番地をｎｅｘｔにそれぞれ代入する。
【００６５】
キャッシュデータがなければ（ステップＳ５０５のＮＯ）、累積ｍとクラスタ番地ｎｅｘｔの値（ｍはその初期値１、ｎｅｘｔは開始クラスタ番地）は変化しないままステップＳ５０７へと進む。
【００６６】
ステップＳ５０７では、クラスタの順序番号の累積ｍとステップＳ５０３で求めたｎを比較する。ｍとｎが一致していれば、ステップＳ５１１に進み、一致していない場合にはステップＳ５０８に進む。
【００６７】
ステップＳ５０８では、上記ｎｅｘｔに対応するＦＡＴ項目の書かれたブロックをＦＡＴ領域（７０２）から１セクタ分読み出し、さらにステップＳ５０９でＦＡＴ項目ｎｅｘｔに着目して、図１０の説明にあったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びｎｅｘｔに代入するとともに、クラスタの順序番号の累積ｍに１を加算する。
【００６８】
ステップＳ５１０では、ステップＳ５０９で得られたクラスタ番地ｎｅｘｔ、累積ｍ、およびファイルのインデックス値を図３で示したＦＡＴキャッシュへと保存する。このときＦＡＴキャッシュの数が制限された値を超えていなければ、新たに動的に確保したメモリ領域へと図３の構成を成すＦＡＴキャッシュデータを追加し、ＦＡＴキャッシュ数が既に制限値以上であった場合には、既存のＦＡＴキャッシュデータに上書きされる。どのＦＡＴキャッシュデータに上書きするかは任意の方法で決めることができるが、例えば時間的にもっとも過去に更新されたデータを上書きの対象とする方法が考えられる。
【００６９】
ステップＳ５０７からステップＳ５１０の間の処理は、クラスタの順序番号の累積ｍとステップＳ５０３で求めたクラスタ番号ｎが一致するまで繰り返し実行され、最終的にステップＳ５１１へと進む。
【００７０】
以上までのステップにより、ステップＳ５０２で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがｎｅｘｔに代入されている。したがって、ステップＳ５１１では該当するブロック番号（ｎｅｘｔ）のデータをディスクから読み出す。
【００７１】
ステップＳ５１２では、ステップＳ５１１で読み出したデータから目的とするデータを抽出し、ステップＳ５０２でユーザープログラム（１０１）から指定されたバッファにコピーする。
【００７２】
この後、ステップＳ５１３でユーザープログラム（１０１）からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部（１０３）に返却され、同時にこのファイルが使用していたＦＡＴキャッシュデータが格納されていたメモリを解放する。
【００７３】
以上により、ファイルデータの読み出し処理が終了する。
【００７４】
（ファイルへのデータ書き込み処理）
ファイルへのデータ書き込みの処理の手順は、図６の様になる。
【００７５】
ステップＳ６０１からステップＳ６１０までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【００７６】
以上のステップにより、目的のブロックがｎｅｘｔに代入されている。したがってステップＳ６１１では、ステップＳ６０２でユーザープログラム（１０１）から指定されたバッファのデータをディスク上のブロック番号（ｎｅｘｔ）へと書き込む。
【００７７】
この後、ステップＳ６１２でユーザープログラム（１０１）からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部（１０３）に返却され、同時にこのファイルが使用していたＦＡＴキャッシュデータが格納されていたメモリを解放する。
【００７８】
以上により、ファイルへのデータ書き込み処理が終了する。
【００７９】
【発明の効果】
以上で説明したように、本発明によるＦＡＴキャッシュ機能付きファイルシステムは、ディスク上のファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するデータが存在するディスク上のクラスタ番地、次のＦＡＴキャッシュデータの格納されたメモリ番地、の以上の情報を含むＦＡＴキャッシュデータをメモリ中に記憶しておくことにより、指定されたファイル空間上の位置にあるデータの存在するディスクのクラスタ番地を求める際には、まずこのＦＡＴキャッシュ情報を検索し、該当するキャッシュデータがあればこれを利用することによって、ユーザプログラムが読み出しや書き込みの操作を行うデータが存在するディスク上のブロック番号を従来の方法に比較して高速に求めることができるといった効果がある。
【図面の簡単な説明】
【図１】本発明の実施例におけるＦＡＴファイルシステムのソフトウエア構成図。
【図２】図１で示したＦＡＴファイルシステムを動作させるためのハードウエアの概略ブロック図。
【図３】本発明の実施例におけるＦＡＴキャッシュの構成図。
【図４】本発明の実施例におけるファイルオープン時の手順を示すフローチャート。
【図５】本発明の実施例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図６】本発明の実施例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【図７】従来例、および本発明の実施例におけるＦＡＴ型ディスクの記録フォーマット。
【図８】従来例、および本発明の実施例における１つのファイルに対応するディレクトリエントリの構成図。
【図９】従来例、および本発明の実施例におけるディレクトリエントリ全体の構成図。
【図１０】従来例、および本発明の実施例におけるＦＡＴ型ディスクのＦＡＴ領域の概念図。
【図１１】従来例、および本発明の実施例におけるファイルへのクラスタ割り当ての例。
【図１２】従来例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図１３】従来例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【符号の説明】
１０１  ユーザープログラム
１０２  ＦＡＴファイルシステムプログラム
１０３  ファイル操作部
１０４  ディレクトリ操作部
１０５  ＦＡＴ操作部
１０６  ディスクドライバ部
２０１  ＣＰＵ
２０２  ＲＡＭ
２０３  ディスク装置
２０４  システムバス
【図１】
2004362092.tif 000005
【図２】
2004362092.tif 000006
【図３】
2004362092.tif 000007
【図４】
2004362092.tif 000008
【図５】
2004362092.tif 000009
【図６】
2004362092.tif 000010
【図７】
2004362092.tif 000011
【図８】
2004362092.tif 000012
【図９】
2004362092.tif 000013
【図１０】
2004362092.tif 000014
【図１１】
2004362092.tif 000015
【図１２】
2004362092.tif 000016
【図１３】
2004362092.tif 000017