JP2004362092A - Fatキャッシュ機能付きファイルシステム - Google Patents
Fatキャッシュ機能付きファイルシステム Download PDFInfo
- Publication number
- JP2004362092A JP2004362092A JP2003157537A JP2003157537A JP2004362092A JP 2004362092 A JP2004362092 A JP 2004362092A JP 2003157537 A JP2003157537 A JP 2003157537A JP 2003157537 A JP2003157537 A JP 2003157537A JP 2004362092 A JP2004362092 A JP 2004362092A
- Authority
- JP
- Japan
- Prior art keywords
- file
- fat
- data
- disk
- cluster
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】FAT型ディスク上のファイルを読み出し、または書き込み操作する場合に、操作するデータの含まれるディスクブロックを高速に、かつ多くのメモリリソースを使用せずとも求めることが可能な方法を提供する。
【解決手段】ファイルのオープン/クローズ処理や、ファイルポインタの操作などを行なうファイル操作手段と、ディスク上に保存されている各ファイルのディレクトリエントリ情報の解析や、その構成の編集操作を行うディレクトリエントリ操作手段と、読み書きするファイル上で目的とするデータの存在するクラスタ番地を取得して、これをFATキャッシュデータとして記憶したり、またはその目的とするデータの存在するクラスタ番地を該FATキャッシュデータを参照して、もしくは直接FAT領域の情報を解析して取得したり、或はファイルのクラスタチェインを正しく形成する。
【選択図】 図1
【解決手段】ファイルのオープン/クローズ処理や、ファイルポインタの操作などを行なうファイル操作手段と、ディスク上に保存されている各ファイルのディレクトリエントリ情報の解析や、その構成の編集操作を行うディレクトリエントリ操作手段と、読み書きするファイル上で目的とするデータの存在するクラスタ番地を取得して、これをFATキャッシュデータとして記憶したり、またはその目的とするデータの存在するクラスタ番地を該FATキャッシュデータを参照して、もしくは直接FAT領域の情報を解析して取得したり、或はファイルのクラスタチェインを正しく形成する。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明はFAT型ディスクに記録されたファイル群を扱うためのFATファイルシステムに関する。特にFAT型ディスクに記録されたあるファイルデータに対して、割り当てられているクラスタのディスク上の位置番号と、そのクラスタがファイルの先頭クラスタから何番目にあたるかを示す順序番号をメモリ上にヒント情報として記憶し、ファイルデータの読み出しや書き込みの際には、この記憶されたヒント情報を利用して、読み出しや書き込みするディスク上のブロック位置を求める方法に関する。
【0002】
【従来の技術】
(FATファイルシステム)
ファイル割り当て表(FAT:File Allocation Table)を使用してファイルを管理するファイルシステムは一般にFATファイルシステムと呼ばれている。また、FATファイルシステムで使用されることを前提にフォーマットされたディスク媒体は一般にFAT型ディスクと呼ばれている(例えば、特許文献1を参照)。
【0003】
図7は、主にMicrosoft社の提供するオペレーティングシステム(OS)であるところのMS−DOS(商標)で使用されることを前提としたFAT型ディスクの記録フォーマットの例を示したものである。
【0004】
FAT型ディスクに限らず、「ディスク」と呼ばれる媒体は、セクタと呼ばれる単位で複数のブロックに分割され、ディスク上に記録されたデータはセクタ単位で読み出し、または書き込みが行われる。
【0005】
701は先頭の1セクタ(論理セクタ番号0)を示しており、一般にブートセクタと呼ばれている。ブートセクタ(701)にはオペレーティングシステムをロードするためのブートプログラム、後述するクラスタ1つあたりに含まれるセクタの数(以降、「セクタ/クラスタ数」と呼ぶ)、ルートディレクトリエントリ項目の個数、後述するFAT領域に使用されているセクタの数、などの情報が記録されている。
【0006】
702はFAT領域であり、ファイルへのクラスタの割り当て(アロケーション)状況を記録する領域である(その詳細については後述する)。現在広く使用されているFAT型ディスクでは、1クラスタ分のFATを表すのに、12bit,16bit、または32bitを使用するのが一般的である。FAT領域(702)は図7に示すように2重化され(図7のFAT1とFAT2)、ディスク上に連続して配置されている。つまりFAT1とFAT2には常に同じ内容のものが記録されている。
【0007】
703はルートディレクトリエントリである(詳細は後述する)。
【0008】
704はデータ領域であり、実際のファイルの内容(データ本体)やルートディレクトリ以下に属するディレクトリに関する情報を記録する領域である。
【0009】
データ領域(704)はクラスタと呼ばれる単位で管理されている。クラスタとは連続する複数のセクタを一つの単位とするもので、1クラスタは2のべき乗(1,2,4,8,16,...)で表される個数のセクタで構成されている。以降では説明を簡単にするために1クラスタは1セクタで構成されているものとする。
【0010】
図8は、図7のルートディレクトリエントリ(703)中にあるディレクトリエントリの1項目を抜粋して、その構成を詳細に記した図である。ルートディレクトリエントリ(703)の1つの項目は32バイトで構成され、各項目にはFAT型ディスクのルートディレクトリ上に存在するファイルやディレクトリ(サブディレクトリ)の名前、拡張子、属性、最終更新時日、ファイルの大きさ(バイト単位で表されたファイルのサイズ)、後述するデータ領域においてディレクトリエントリ上に記されたファイルに対応する実際のファイルの内容(データ本体)が記録されているクラスタ群の内、ファイルの先頭部にあたるデータが記録されたクラスタの番号(以下、開始クラスタ番号)などの情報が記録されている。
【0011】
ディレクトリエントリの先頭バイト、つまり図8を参照すれば「名前」の先頭にあたるバイトの値が00hであった場合には、そのエントリが未使用であることを示し、またその値がE5hであった場合には、以前に存在していたファイルが削除されたことを示している。いずれにせよ先頭のバイトにこれらの値が記されているエントリは空きエントリであることを示している。
【0012】
ファイルの属性には、主要な物として、それがボリュームラベルであることを示すビット(ビット位置3)や、それがディレクトリエントリ情報であることを示すビット(ビット位置4)がある。
【0013】
ディレクトリエントリの構成は、現在市販されているMS−DOSの最新版においては、「ファイル名として名前8文字+拡張子3文字までの11文字数分が使用可能である」という従来の制限を拡張して、従来との互換性を保ちつつ、「VFAT」と称する11文字以上の長さのファイル名を扱えるような規格になっているが、本発明と直接関わる部分ではないため、その説明は省略する。
【0014】
また、図9は、ディレクトリエントリ全体を表し、前述の個々の1ファイルに対するディレクトリエントリ情報が1セクタのデータ上にどのように配置されているかの一例である。
【0015】
図10は、図7のFAT領域(702)に記録された内容を概念的に図に示したものである。FAT領域(702)の各項目(1002)は、データ領域(704)のクラスタ番地(1003)と1対1に対応するようになっている。FAT領域(702)の各項目(1002)はファイルの読み出し時に正しい順番でそのファイルを構成するクラスタ群の読み出しが行えるように、クラスタ群の並び順(クラスタチェイン)を記録するために使用される。つまりFAT領域(702)の各項目(1002)の内容には、次に読み出すべきクラスタ番地の値を順に記録して行き、データの最後となるクラスタにはそれが最後のクラスタであることを表す値(例えば1クラスタを16bitで表現するとすれば、FFFFh)を記録する。以上によりファイルを構成するクラスタ群の順番を正しくつなげることができる。
【0016】
なお、データ領域(704)のクラスタの内、どのファイルにも使用されていないクラスタ(未使用クラスタ)に対応するFAT項目(1002)には、未使用であることを表す値として0000hが書かれている。
【0017】
図10を参照してさらに具体的に説明すれば、例えばルートディレクトリエントリ(703)に存在している、あるファイルの開始クラスタ番地(1001)がルートディレクトリエントリ(703)に記録された情報より0004h番地であったとすると、FAT項目(1002)の0004h番目の項目には0005hと書かれているので、1003の’a’部で示されたクラスタに記されたデータ続くデータ(1003の’b’部)がデータ領域(704)の0005h番目のクラスタ番地に記録されていることが分かる。同様にしてFAT項目(1002)の0005h番目の項目には000Ahと書かれているので、さらに’b’部に続くデータ(1003の’c’部)が000Ah番目のクラスタ番地に記録されていることが分かる。FAT項目(1002)の000Ah番目の項目には、クラスタチェインの終了を示すFFFFhが書かれているので、データ領域(704)の000Ah番目のクラスタ(1003の’c’部)が注目するファイルの最後のデータが含まれているクラスタとなる。
【0018】
すなわち、一般的にあるファイルに注目して、そのファイルの内容とクラスタの割り当て状況を対比して図示すると、図11の様になる。これはファイルの先頭からのデータ位置が分かると、それがどのクラスタに含まれているのかが分かることを示している。
【0019】
(従来のFATファイルシステムにおけるデータの読み書き処理)
以降では、従来のFATファイルシステムにおいてFAT型ディスク上にファイルをオープンし、そのファイルのデータを読み書きする場合の処理について、本発明と関わりのある部分の処理の概略を説明する。説明を簡単にするため、読み書きを行おうとするファイルはルートディレクトリエントリ(703)上のものを対象とし、エラー処理の説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ(701)からセクタ/クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【0020】
(ファイルからのデータ読み出し処理)
ファイルからのデータ読み出し処理の手順について図12を参照して説明する。
【0021】
まずステップS1201で、ユーザプログラムからデータを読み出す対象のファイルがオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値(ファイルディスクリプタ)がユーザプログラムへと返る。またファイルオープンの処理では、同時にそのファイルの開始クラスタの番号(nextと表記する)を該当するルートディレクトリエントリ(703)から得る。
【0022】
次にステップS1202において、ステップS1201で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【0023】
次のステップS1203ではステップS1202で指定されたファイルデータの読み出し位置とあらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ/クラスタ数から次式を計算する。
【外1】
【0024】
上式(1)の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本説明ではこれをnと表記する。
【0025】
次にステップS1204で、クラスタの順序番号の累積m(初期値は1)とステップS1203で求めたnを比較する。mとnが一致していれば、ステップS1207に進み、一致していない場合にはステップS1205に進む。
【0026】
ステップS1205では、上記nextに対応するFAT項目の書かれたブロックをFAT領域(702)から1セクタ分読み出し、さらにステップS1206でFAT項目nextに着目して、図10の説明であったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びnextに代入するとともに、クラスタの順序番号の累積mに1を加算する。
【0027】
ステップS1204からステップS1206の間の処理は、クラスタの順序番号の累積mとステップS1203で求めたクラスタ番号nが一致するまで繰り返し実行され、最終的にステップS1207へと進む。
【0028】
以上までのステップにより、ステップS1202で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがnextに代入されている。したがって、ステップS1207では該当するブロック番号(next)のデータをディスクから読み出す。
【0029】
ステップS1208では、ステップS1207で読み出したデータから目的とするデータを抽出し、ステップS1202でユーザプログラムから指定されたバッファにコピーする。
【0030】
最後に、ステップS1209でオープンされていたファイルのクローズ処理を行う。
【0031】
以上により、ファイルデータの読み出し処理が終了する。
【0032】
(ファイルへのデータ書き込み処理)
ファイルへのデータ書き込みの処理の手順は、図13の様になる。
【0033】
ステップS1301からステップS1306までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【0034】
以上のステップにより、目的のブロックがnextに代入されている。したがってステップS1307では、ステップS1302でユーザプログラムから指定されたバッファに格納されたデータをディスク上のブロック番号(next)へと書き込む。
【0035】
最後に、ステップS1308でオープンされていたファイルのクローズ処理を行う。
【0036】
以上により、ファイルデータの書き込み処理が終了する。
【0037】
【特許文献1】
特開2001−101046号公報
【0038】
【発明が解決しようとする課題】
しかしながら、上記のような従来のFATファイルシステムの場合、読み出しまたは書き込みを行うディスク上のブロック番号を求めるためには、クラスタチェインをデータの開始クラスタから順に追って行く必要がある。ここでFAT型ディスクの特徴である、「FAT領域で各ファイルへのクラスタの割り当て状況を管理する」という仕組みから、1つのファイルが使用しているクラスタの情報はFAT領域に散在しているという特徴がある。そのため、あるファイルのクラスタチェイン情報を取り出すためには、いくつかのFAT領域のブロックを読み出す必要がある場合がある。また、ファイルサイズの大きなファイルを扱う場合、そのファイルの末尾のデータを操作したい時には、該当するクラスタを求めるために、多くのFAT領域のブロックの読み出しが必要になり、かつ該当するクラスタを求めるために繰り返し実行される計算量が多くなって、その分だけ処理に時間を要するという問題にもなってくる。
【0039】
FAT領域のブロックの読み出しに関しては、一度読み出したFATデータを、一時的にメモリ上に蓄えておくことで、ディスクからデータを読み出す際に要する時間のオーバーヘッドを低減させる方法が考えられるが、組込み機器の様に使用可能なメモリリソース量が限られている環境下では、この様な解決策が必ずしも有効では無いこともあり得る。
【0040】
本発明は上記の様な実情に艦みてなされたものであり、FAT型ディスク上のファイルを読み出し、または書き込み操作する場合に、操作するデータの含まれるディスクブロックを高速に、かつ多くのメモリリソースを使用せずとも求めることが可能な方法を提供することを目的とする。
【0041】
【課題を解決するための手段】
本発明は、ユーザープログラムからの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、ユーザプログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、或はファイルやディレクトリへの操作によって更新されたファイルの属性やファイルのサイズ、最終アクセス時日などの最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作を行うディレクトリエントリ操作手段と、読み書きの対象となるファイル上のデータの位置、およびFAT情報からデータの存在するディスク上のクラスタ番地を取得して、これをFATキャッシュデータとして記憶したり、または読み書きの対象となるファイル上のデータの位置から、そのデータの存在するディスク上のクラスタ番地を該FATキャッシュデータを参照して、もしくは直接ディスクから読み出されたFAT領域の情報を解析して、FAT領域の対応するFAT項目から取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うFAT操作手段とを有することを特徴とする。
【0042】
以上の構成により、あるファイルに対して指定されたファイル空間上の位置にあるデータを読み出し、または書き込みの操作を行う際に、そのデータの含まれるディスク上のクラスタ番地をFATキャッシュデータから求めるといった動作を行う。
【0043】
【発明の実施の形態】
(システム構成)
本実施例の説明で使用するFAT型ディスクの記録フォーマット、ディレクトリエントリの構成、およびFAT領域の構成は、従来例で述べた図7、図8、図10と同じものであるので、その説明は省略する。
【0044】
図1は本実施例の説明で使用するFATファイルシステムのソフトウエア構成図である。101は本FATファイルシステムを利用するユーザープログラム、102は本発明によるFATファイルシステムを実現するFATファイルシステムプログラムである。
【0045】
103はユーザープログラム(101)からの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの管理などを行なうファイル操作部である。
【0046】
104はディスクから読み出されたディレクトリエントリ情報を解析して、ユーザープログラム(101)から指示されたファイルの存在を検索したり、また、ファイルの先頭にあたるデータの含まれるクラスタを取得したり、或はファイルへの書き込み処理などの操作によって変化したファイルのサイズや、ファイルへの最終アクセス時日を更新し、これらをディレクトリエントリへ記録するなど、最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリ構造の解析、および管理や更新を行うディレクトリエントリ操作部、105は後述するFATキャッシュデータを動的に確保したメモリに構築、更新、削除するなどの管理をしたり、または読み書きの対象となるファイル上のデータの位置からディスク上のクラスタ番地を、FATキャッシュデータを参照して、もしくはディスクから読み出されたFATの情報を解析して、FAT領域(702)の対応するFAT項目から取得したり、ファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うFAT操作部である。
【0047】
106はデータの格納領域となる図示しないフロッピー(登録商標)ディスクやハードディスク、またはフラッシュメモリカードといったディスク記憶媒体からの実際データの読み出し、またはこれらの媒体へのデータの書き込み処理を行うディスクドライバ部である。
【0048】
図2は上述の機能構成を実現するための概略のハードウエア構成を示すブロック図である。同図において、201はCPUであり、上述のユーザープログラム(101)やFATファイルシステムプログラム(102)をロードして実行する。202はRAMであり、上述のユーザープログラム(101)やFATファイルシステムプログラム(102)を格納するほか、ディスク上にあるデータの読み出し、または書き込みの際にバッファ領域として使用されたり、本発明によるFATファイルシステムを含む各プログラムの動作時に使用する各種変数の退避、或は保存用のワークエリアとして使用される。203はデータ格納領域となるディスク装置である。204はCPU(201)、RAM(202)、ディスク装置(203)を接続するシステムバスである。
【0049】
図3は、FAT操作部(105)が操作するFATキャッシュの構成を示すものである。FATキャッシュに保存されているデータにはディスク上に存在するファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するディスク上のクラスタ番地が含まれている。また、次のFATキャッシュデータの存在するメモリ番地を保存することで、動的に確保されたFATキャッシュデータが鎖状を成し、FATキャッシュデータの組を順に追って検索できるような構造になっている。
【0050】
(詳細動作説明)
次に、本実施例におけるFATファイルシステムの動作について、添付のフローチャートを参照しながら説明する。説明を簡単にするため、読み出し、または書き込み操作を行うファイルは、FAT型ディスクのルートディレクトリ上にあるものを対象とし、エラー処理の詳細説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ(701)からセクタ/クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【0051】
(ファイルのオープン処理)
まず、ファイルをオープンする際の処理手順について図4を参照して説明する。
【0052】
ユーザープログラム(101)がファイルオープンの要求を発行すると、ステップS401でファイル操作部(103)はそのオープンしようとするファイルを数値として表すためのファイルディスクリプタを確保する。続いてディスク上にユーザープログラム(101)で指定された名前のファイルが存在することを検索するステップS402からの手順に移る。
【0053】
ファイル検索のための手順は、まずステップS402でルートディレクトリエントリ(703)の先頭の1セクタ分のディレクトリエントリデータをRAM(202)上に確保されたメモリバッファに読み込む。1つのファイルに対するディレクトリエントリ情報は一般的に1セクタ分のデータに十分収まる量であり、したがってこのバッファにはいくつかのファイル数分のディレクトリエントリ情報が読み込まれていることになる。
【0054】
次に、最初のディレクトリエントリ情報に注目し、ステップS403においてディレクトリ操作部(104)はディレクトリエントリ項目の先頭の1バイトを比較し、先頭1バイトの値が00h(未使用エントリ)でないか、あるいはE5h(削除エントリ)で無いかを調べる。未使用でも削除エントリでも無かった場合には(ステップS403のYES)、次にステップS404でファイルの属性情報を調べる。ファイルの属性がディレクトリやボリュームラベルであった場合(ステップS404のYES)はこのエントリを無視して、ステップS407に進む。
【0055】
ステップS407では1セクタに含まれる分のディレクトリエントリを全て解析したかを調べる。ディレクトリエントリがまだ残っていればステップS408でポインタを進めて(すなわち次のエントリ情報の先頭バイトに注目し)、ステップS403に戻って次のエントリの解析に移る。
【0056】
また、ステップS407で1セクタ分のエントリを処理し終えていたならば、ステップS409でルートディレクトリエントリ(703)にある全てのエントリを解析し終えたかを判断する。全てのエントリを処理していれば最終的に一致するファイル名が見つからなかったという結果を返し、オープン処理を終了する(ステップS409のYES)。まだ全てのエントリを解析し終えていなければ(ステップS409のNO)、ステップS402に戻ってエントリ情報の続きの1セクタ分のデータを読み出し、ステップS403からの処理を継続する。
【0057】
一方、ステップS404で通常のファイルとして有効なエントリであると判断されれば、ステップS405でディレクトリエントリ情報から得られるファイル名、ファイルの開始クラスタ番号、ファイルのサイズ等の情報を変数に記憶するとともに、所望の手段により、このファイルをディスク上に唯一に特定できるインデックス値を算出し、これを記憶する。
【0058】
その後ステップS406に進み、現在注目しているディレクトリエントリに記されたファイル名とユーザープログラム(101)から与えられたファイル名とが一致するものであるかを判断する。一致してはいなかった場合(ステップS406のNO)には、ステップS407に進み、ファイル名が一致していればステップS401で取得したファイルディスクリプタを返してファイルオープンの処理を終了する。
【0059】
(ファイルからのデータ読み出し処理)
次にファイルのデータを読み出す際の処理手順について図5を参照して説明する。
【0060】
基本的な手順は従来のFATファイルシステムと同様にして、まず、ステップS501でユーザープログラム(101)から、データを読み出す対象のファイルが上述のファイルオープンの手順にしたがってオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値(ファイルディスクリプタ)がユーザープログラム(101)へと返る。また、ファイルオープンの処理では同時にそのファイルの開始クラスタの番号(nextと表記する)をルートディレクトリエントリ(703)から得る。
【0061】
次にステップS502において、ステップS501で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【0062】
次のステップS503では、ステップS502で指定されたファイルデータの読み出し位置と、あらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ/クラスタ数から次式を計算する。
【外2】
【0063】
上式(2)の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本実施例の説明ではこれをnと表記する。
【0064】
次にステップS504で、図3で示したFATキャッシュデータを順を追って参照し、該当するファイルのインデックス値に一致するデータの中から、クラスタ順序番号がステップS503で算出したnに最も近く、かつnを超えないキャッシュデータを検索する。ステップS504の処理を行った後、条件に相当するキャッシュデータがあれば(ステップS505のYES)、ステップS506ではそのキャッシュデータの累積値をmに、クラスタ番地をnextにそれぞれ代入する。
【0065】
キャッシュデータがなければ(ステップS505のNO)、累積mとクラスタ番地nextの値(mはその初期値1、nextは開始クラスタ番地)は変化しないままステップS507へと進む。
【0066】
ステップS507では、クラスタの順序番号の累積mとステップS503で求めたnを比較する。mとnが一致していれば、ステップS511に進み、一致していない場合にはステップS508に進む。
【0067】
ステップS508では、上記nextに対応するFAT項目の書かれたブロックをFAT領域(702)から1セクタ分読み出し、さらにステップS509でFAT項目nextに着目して、図10の説明にあったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びnextに代入するとともに、クラスタの順序番号の累積mに1を加算する。
【0068】
ステップS510では、ステップS509で得られたクラスタ番地next、累積m、およびファイルのインデックス値を図3で示したFATキャッシュへと保存する。このときFATキャッシュの数が制限された値を超えていなければ、新たに動的に確保したメモリ領域へと図3の構成を成すFATキャッシュデータを追加し、FATキャッシュ数が既に制限値以上であった場合には、既存のFATキャッシュデータに上書きされる。どのFATキャッシュデータに上書きするかは任意の方法で決めることができるが、例えば時間的にもっとも過去に更新されたデータを上書きの対象とする方法が考えられる。
【0069】
ステップS507からステップS510の間の処理は、クラスタの順序番号の累積mとステップS503で求めたクラスタ番号nが一致するまで繰り返し実行され、最終的にステップS511へと進む。
【0070】
以上までのステップにより、ステップS502で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがnextに代入されている。したがって、ステップS511では該当するブロック番号(next)のデータをディスクから読み出す。
【0071】
ステップS512では、ステップS511で読み出したデータから目的とするデータを抽出し、ステップS502でユーザープログラム(101)から指定されたバッファにコピーする。
【0072】
この後、ステップS513でユーザープログラム(101)からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部(103)に返却され、同時にこのファイルが使用していたFATキャッシュデータが格納されていたメモリを解放する。
【0073】
以上により、ファイルデータの読み出し処理が終了する。
【0074】
(ファイルへのデータ書き込み処理)
ファイルへのデータ書き込みの処理の手順は、図6の様になる。
【0075】
ステップS601からステップS610までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【0076】
以上のステップにより、目的のブロックがnextに代入されている。したがってステップS611では、ステップS602でユーザープログラム(101)から指定されたバッファのデータをディスク上のブロック番号(next)へと書き込む。
【0077】
この後、ステップS612でユーザープログラム(101)からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部(103)に返却され、同時にこのファイルが使用していたFATキャッシュデータが格納されていたメモリを解放する。
【0078】
以上により、ファイルへのデータ書き込み処理が終了する。
【0079】
【発明の効果】
以上で説明したように、本発明によるFATキャッシュ機能付きファイルシステムは、ディスク上のファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するデータが存在するディスク上のクラスタ番地、次のFATキャッシュデータの格納されたメモリ番地、の以上の情報を含むFATキャッシュデータをメモリ中に記憶しておくことにより、指定されたファイル空間上の位置にあるデータの存在するディスクのクラスタ番地を求める際には、まずこのFATキャッシュ情報を検索し、該当するキャッシュデータがあればこれを利用することによって、ユーザプログラムが読み出しや書き込みの操作を行うデータが存在するディスク上のブロック番号を従来の方法に比較して高速に求めることができるといった効果がある。
【図面の簡単な説明】
【図1】本発明の実施例におけるFATファイルシステムのソフトウエア構成図。
【図2】図1で示したFATファイルシステムを動作させるためのハードウエアの概略ブロック図。
【図3】本発明の実施例におけるFATキャッシュの構成図。
【図4】本発明の実施例におけるファイルオープン時の手順を示すフローチャート。
【図5】本発明の実施例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図6】本発明の実施例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【図7】従来例、および本発明の実施例におけるFAT型ディスクの記録フォーマット。
【図8】従来例、および本発明の実施例における1つのファイルに対応するディレクトリエントリの構成図。
【図9】従来例、および本発明の実施例におけるディレクトリエントリ全体の構成図。
【図10】従来例、および本発明の実施例におけるFAT型ディスクのFAT領域の概念図。
【図11】従来例、および本発明の実施例におけるファイルへのクラスタ割り当ての例。
【図12】従来例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図13】従来例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【符号の説明】
101 ユーザープログラム
102 FATファイルシステムプログラム
103 ファイル操作部
104 ディレクトリ操作部
105 FAT操作部
106 ディスクドライバ部
201 CPU
202 RAM
203 ディスク装置
204 システムバス
【発明の属する技術分野】
本発明はFAT型ディスクに記録されたファイル群を扱うためのFATファイルシステムに関する。特にFAT型ディスクに記録されたあるファイルデータに対して、割り当てられているクラスタのディスク上の位置番号と、そのクラスタがファイルの先頭クラスタから何番目にあたるかを示す順序番号をメモリ上にヒント情報として記憶し、ファイルデータの読み出しや書き込みの際には、この記憶されたヒント情報を利用して、読み出しや書き込みするディスク上のブロック位置を求める方法に関する。
【0002】
【従来の技術】
(FATファイルシステム)
ファイル割り当て表(FAT:File Allocation Table)を使用してファイルを管理するファイルシステムは一般にFATファイルシステムと呼ばれている。また、FATファイルシステムで使用されることを前提にフォーマットされたディスク媒体は一般にFAT型ディスクと呼ばれている(例えば、特許文献1を参照)。
【0003】
図7は、主にMicrosoft社の提供するオペレーティングシステム(OS)であるところのMS−DOS(商標)で使用されることを前提としたFAT型ディスクの記録フォーマットの例を示したものである。
【0004】
FAT型ディスクに限らず、「ディスク」と呼ばれる媒体は、セクタと呼ばれる単位で複数のブロックに分割され、ディスク上に記録されたデータはセクタ単位で読み出し、または書き込みが行われる。
【0005】
701は先頭の1セクタ(論理セクタ番号0)を示しており、一般にブートセクタと呼ばれている。ブートセクタ(701)にはオペレーティングシステムをロードするためのブートプログラム、後述するクラスタ1つあたりに含まれるセクタの数(以降、「セクタ/クラスタ数」と呼ぶ)、ルートディレクトリエントリ項目の個数、後述するFAT領域に使用されているセクタの数、などの情報が記録されている。
【0006】
702はFAT領域であり、ファイルへのクラスタの割り当て(アロケーション)状況を記録する領域である(その詳細については後述する)。現在広く使用されているFAT型ディスクでは、1クラスタ分のFATを表すのに、12bit,16bit、または32bitを使用するのが一般的である。FAT領域(702)は図7に示すように2重化され(図7のFAT1とFAT2)、ディスク上に連続して配置されている。つまりFAT1とFAT2には常に同じ内容のものが記録されている。
【0007】
703はルートディレクトリエントリである(詳細は後述する)。
【0008】
704はデータ領域であり、実際のファイルの内容(データ本体)やルートディレクトリ以下に属するディレクトリに関する情報を記録する領域である。
【0009】
データ領域(704)はクラスタと呼ばれる単位で管理されている。クラスタとは連続する複数のセクタを一つの単位とするもので、1クラスタは2のべき乗(1,2,4,8,16,...)で表される個数のセクタで構成されている。以降では説明を簡単にするために1クラスタは1セクタで構成されているものとする。
【0010】
図8は、図7のルートディレクトリエントリ(703)中にあるディレクトリエントリの1項目を抜粋して、その構成を詳細に記した図である。ルートディレクトリエントリ(703)の1つの項目は32バイトで構成され、各項目にはFAT型ディスクのルートディレクトリ上に存在するファイルやディレクトリ(サブディレクトリ)の名前、拡張子、属性、最終更新時日、ファイルの大きさ(バイト単位で表されたファイルのサイズ)、後述するデータ領域においてディレクトリエントリ上に記されたファイルに対応する実際のファイルの内容(データ本体)が記録されているクラスタ群の内、ファイルの先頭部にあたるデータが記録されたクラスタの番号(以下、開始クラスタ番号)などの情報が記録されている。
【0011】
ディレクトリエントリの先頭バイト、つまり図8を参照すれば「名前」の先頭にあたるバイトの値が00hであった場合には、そのエントリが未使用であることを示し、またその値がE5hであった場合には、以前に存在していたファイルが削除されたことを示している。いずれにせよ先頭のバイトにこれらの値が記されているエントリは空きエントリであることを示している。
【0012】
ファイルの属性には、主要な物として、それがボリュームラベルであることを示すビット(ビット位置3)や、それがディレクトリエントリ情報であることを示すビット(ビット位置4)がある。
【0013】
ディレクトリエントリの構成は、現在市販されているMS−DOSの最新版においては、「ファイル名として名前8文字+拡張子3文字までの11文字数分が使用可能である」という従来の制限を拡張して、従来との互換性を保ちつつ、「VFAT」と称する11文字以上の長さのファイル名を扱えるような規格になっているが、本発明と直接関わる部分ではないため、その説明は省略する。
【0014】
また、図9は、ディレクトリエントリ全体を表し、前述の個々の1ファイルに対するディレクトリエントリ情報が1セクタのデータ上にどのように配置されているかの一例である。
【0015】
図10は、図7のFAT領域(702)に記録された内容を概念的に図に示したものである。FAT領域(702)の各項目(1002)は、データ領域(704)のクラスタ番地(1003)と1対1に対応するようになっている。FAT領域(702)の各項目(1002)はファイルの読み出し時に正しい順番でそのファイルを構成するクラスタ群の読み出しが行えるように、クラスタ群の並び順(クラスタチェイン)を記録するために使用される。つまりFAT領域(702)の各項目(1002)の内容には、次に読み出すべきクラスタ番地の値を順に記録して行き、データの最後となるクラスタにはそれが最後のクラスタであることを表す値(例えば1クラスタを16bitで表現するとすれば、FFFFh)を記録する。以上によりファイルを構成するクラスタ群の順番を正しくつなげることができる。
【0016】
なお、データ領域(704)のクラスタの内、どのファイルにも使用されていないクラスタ(未使用クラスタ)に対応するFAT項目(1002)には、未使用であることを表す値として0000hが書かれている。
【0017】
図10を参照してさらに具体的に説明すれば、例えばルートディレクトリエントリ(703)に存在している、あるファイルの開始クラスタ番地(1001)がルートディレクトリエントリ(703)に記録された情報より0004h番地であったとすると、FAT項目(1002)の0004h番目の項目には0005hと書かれているので、1003の’a’部で示されたクラスタに記されたデータ続くデータ(1003の’b’部)がデータ領域(704)の0005h番目のクラスタ番地に記録されていることが分かる。同様にしてFAT項目(1002)の0005h番目の項目には000Ahと書かれているので、さらに’b’部に続くデータ(1003の’c’部)が000Ah番目のクラスタ番地に記録されていることが分かる。FAT項目(1002)の000Ah番目の項目には、クラスタチェインの終了を示すFFFFhが書かれているので、データ領域(704)の000Ah番目のクラスタ(1003の’c’部)が注目するファイルの最後のデータが含まれているクラスタとなる。
【0018】
すなわち、一般的にあるファイルに注目して、そのファイルの内容とクラスタの割り当て状況を対比して図示すると、図11の様になる。これはファイルの先頭からのデータ位置が分かると、それがどのクラスタに含まれているのかが分かることを示している。
【0019】
(従来のFATファイルシステムにおけるデータの読み書き処理)
以降では、従来のFATファイルシステムにおいてFAT型ディスク上にファイルをオープンし、そのファイルのデータを読み書きする場合の処理について、本発明と関わりのある部分の処理の概略を説明する。説明を簡単にするため、読み書きを行おうとするファイルはルートディレクトリエントリ(703)上のものを対象とし、エラー処理の説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ(701)からセクタ/クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【0020】
(ファイルからのデータ読み出し処理)
ファイルからのデータ読み出し処理の手順について図12を参照して説明する。
【0021】
まずステップS1201で、ユーザプログラムからデータを読み出す対象のファイルがオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値(ファイルディスクリプタ)がユーザプログラムへと返る。またファイルオープンの処理では、同時にそのファイルの開始クラスタの番号(nextと表記する)を該当するルートディレクトリエントリ(703)から得る。
【0022】
次にステップS1202において、ステップS1201で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【0023】
次のステップS1203ではステップS1202で指定されたファイルデータの読み出し位置とあらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ/クラスタ数から次式を計算する。
【外1】
【0024】
上式(1)の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本説明ではこれをnと表記する。
【0025】
次にステップS1204で、クラスタの順序番号の累積m(初期値は1)とステップS1203で求めたnを比較する。mとnが一致していれば、ステップS1207に進み、一致していない場合にはステップS1205に進む。
【0026】
ステップS1205では、上記nextに対応するFAT項目の書かれたブロックをFAT領域(702)から1セクタ分読み出し、さらにステップS1206でFAT項目nextに着目して、図10の説明であったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びnextに代入するとともに、クラスタの順序番号の累積mに1を加算する。
【0027】
ステップS1204からステップS1206の間の処理は、クラスタの順序番号の累積mとステップS1203で求めたクラスタ番号nが一致するまで繰り返し実行され、最終的にステップS1207へと進む。
【0028】
以上までのステップにより、ステップS1202で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがnextに代入されている。したがって、ステップS1207では該当するブロック番号(next)のデータをディスクから読み出す。
【0029】
ステップS1208では、ステップS1207で読み出したデータから目的とするデータを抽出し、ステップS1202でユーザプログラムから指定されたバッファにコピーする。
【0030】
最後に、ステップS1209でオープンされていたファイルのクローズ処理を行う。
【0031】
以上により、ファイルデータの読み出し処理が終了する。
【0032】
(ファイルへのデータ書き込み処理)
ファイルへのデータ書き込みの処理の手順は、図13の様になる。
【0033】
ステップS1301からステップS1306までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【0034】
以上のステップにより、目的のブロックがnextに代入されている。したがってステップS1307では、ステップS1302でユーザプログラムから指定されたバッファに格納されたデータをディスク上のブロック番号(next)へと書き込む。
【0035】
最後に、ステップS1308でオープンされていたファイルのクローズ処理を行う。
【0036】
以上により、ファイルデータの書き込み処理が終了する。
【0037】
【特許文献1】
特開2001−101046号公報
【0038】
【発明が解決しようとする課題】
しかしながら、上記のような従来のFATファイルシステムの場合、読み出しまたは書き込みを行うディスク上のブロック番号を求めるためには、クラスタチェインをデータの開始クラスタから順に追って行く必要がある。ここでFAT型ディスクの特徴である、「FAT領域で各ファイルへのクラスタの割り当て状況を管理する」という仕組みから、1つのファイルが使用しているクラスタの情報はFAT領域に散在しているという特徴がある。そのため、あるファイルのクラスタチェイン情報を取り出すためには、いくつかのFAT領域のブロックを読み出す必要がある場合がある。また、ファイルサイズの大きなファイルを扱う場合、そのファイルの末尾のデータを操作したい時には、該当するクラスタを求めるために、多くのFAT領域のブロックの読み出しが必要になり、かつ該当するクラスタを求めるために繰り返し実行される計算量が多くなって、その分だけ処理に時間を要するという問題にもなってくる。
【0039】
FAT領域のブロックの読み出しに関しては、一度読み出したFATデータを、一時的にメモリ上に蓄えておくことで、ディスクからデータを読み出す際に要する時間のオーバーヘッドを低減させる方法が考えられるが、組込み機器の様に使用可能なメモリリソース量が限られている環境下では、この様な解決策が必ずしも有効では無いこともあり得る。
【0040】
本発明は上記の様な実情に艦みてなされたものであり、FAT型ディスク上のファイルを読み出し、または書き込み操作する場合に、操作するデータの含まれるディスクブロックを高速に、かつ多くのメモリリソースを使用せずとも求めることが可能な方法を提供することを目的とする。
【0041】
【課題を解決するための手段】
本発明は、ユーザープログラムからの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、ユーザプログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、或はファイルやディレクトリへの操作によって更新されたファイルの属性やファイルのサイズ、最終アクセス時日などの最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作を行うディレクトリエントリ操作手段と、読み書きの対象となるファイル上のデータの位置、およびFAT情報からデータの存在するディスク上のクラスタ番地を取得して、これをFATキャッシュデータとして記憶したり、または読み書きの対象となるファイル上のデータの位置から、そのデータの存在するディスク上のクラスタ番地を該FATキャッシュデータを参照して、もしくは直接ディスクから読み出されたFAT領域の情報を解析して、FAT領域の対応するFAT項目から取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うFAT操作手段とを有することを特徴とする。
【0042】
以上の構成により、あるファイルに対して指定されたファイル空間上の位置にあるデータを読み出し、または書き込みの操作を行う際に、そのデータの含まれるディスク上のクラスタ番地をFATキャッシュデータから求めるといった動作を行う。
【0043】
【発明の実施の形態】
(システム構成)
本実施例の説明で使用するFAT型ディスクの記録フォーマット、ディレクトリエントリの構成、およびFAT領域の構成は、従来例で述べた図7、図8、図10と同じものであるので、その説明は省略する。
【0044】
図1は本実施例の説明で使用するFATファイルシステムのソフトウエア構成図である。101は本FATファイルシステムを利用するユーザープログラム、102は本発明によるFATファイルシステムを実現するFATファイルシステムプログラムである。
【0045】
103はユーザープログラム(101)からの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、あるいはファイル空間上のどの位置から読み出し、または書き込み操作を行うかを示すファイルポインタの管理などを行なうファイル操作部である。
【0046】
104はディスクから読み出されたディレクトリエントリ情報を解析して、ユーザープログラム(101)から指示されたファイルの存在を検索したり、また、ファイルの先頭にあたるデータの含まれるクラスタを取得したり、或はファイルへの書き込み処理などの操作によって変化したファイルのサイズや、ファイルへの最終アクセス時日を更新し、これらをディレクトリエントリへ記録するなど、最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリ構造の解析、および管理や更新を行うディレクトリエントリ操作部、105は後述するFATキャッシュデータを動的に確保したメモリに構築、更新、削除するなどの管理をしたり、または読み書きの対象となるファイル上のデータの位置からディスク上のクラスタ番地を、FATキャッシュデータを参照して、もしくはディスクから読み出されたFATの情報を解析して、FAT領域(702)の対応するFAT項目から取得したり、ファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うFAT操作部である。
【0047】
106はデータの格納領域となる図示しないフロッピー(登録商標)ディスクやハードディスク、またはフラッシュメモリカードといったディスク記憶媒体からの実際データの読み出し、またはこれらの媒体へのデータの書き込み処理を行うディスクドライバ部である。
【0048】
図2は上述の機能構成を実現するための概略のハードウエア構成を示すブロック図である。同図において、201はCPUであり、上述のユーザープログラム(101)やFATファイルシステムプログラム(102)をロードして実行する。202はRAMであり、上述のユーザープログラム(101)やFATファイルシステムプログラム(102)を格納するほか、ディスク上にあるデータの読み出し、または書き込みの際にバッファ領域として使用されたり、本発明によるFATファイルシステムを含む各プログラムの動作時に使用する各種変数の退避、或は保存用のワークエリアとして使用される。203はデータ格納領域となるディスク装置である。204はCPU(201)、RAM(202)、ディスク装置(203)を接続するシステムバスである。
【0049】
図3は、FAT操作部(105)が操作するFATキャッシュの構成を示すものである。FATキャッシュに保存されているデータにはディスク上に存在するファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するディスク上のクラスタ番地が含まれている。また、次のFATキャッシュデータの存在するメモリ番地を保存することで、動的に確保されたFATキャッシュデータが鎖状を成し、FATキャッシュデータの組を順に追って検索できるような構造になっている。
【0050】
(詳細動作説明)
次に、本実施例におけるFATファイルシステムの動作について、添付のフローチャートを参照しながら説明する。説明を簡単にするため、読み出し、または書き込み操作を行うファイルは、FAT型ディスクのルートディレクトリ上にあるものを対象とし、エラー処理の詳細説明も省略する。また、あらかじめディスクのセクタサイズ、およびブートセクタ(701)からセクタ/クラスタ数を読み出し、その数値がメモリへと記憶されているものとする。
【0051】
(ファイルのオープン処理)
まず、ファイルをオープンする際の処理手順について図4を参照して説明する。
【0052】
ユーザープログラム(101)がファイルオープンの要求を発行すると、ステップS401でファイル操作部(103)はそのオープンしようとするファイルを数値として表すためのファイルディスクリプタを確保する。続いてディスク上にユーザープログラム(101)で指定された名前のファイルが存在することを検索するステップS402からの手順に移る。
【0053】
ファイル検索のための手順は、まずステップS402でルートディレクトリエントリ(703)の先頭の1セクタ分のディレクトリエントリデータをRAM(202)上に確保されたメモリバッファに読み込む。1つのファイルに対するディレクトリエントリ情報は一般的に1セクタ分のデータに十分収まる量であり、したがってこのバッファにはいくつかのファイル数分のディレクトリエントリ情報が読み込まれていることになる。
【0054】
次に、最初のディレクトリエントリ情報に注目し、ステップS403においてディレクトリ操作部(104)はディレクトリエントリ項目の先頭の1バイトを比較し、先頭1バイトの値が00h(未使用エントリ)でないか、あるいはE5h(削除エントリ)で無いかを調べる。未使用でも削除エントリでも無かった場合には(ステップS403のYES)、次にステップS404でファイルの属性情報を調べる。ファイルの属性がディレクトリやボリュームラベルであった場合(ステップS404のYES)はこのエントリを無視して、ステップS407に進む。
【0055】
ステップS407では1セクタに含まれる分のディレクトリエントリを全て解析したかを調べる。ディレクトリエントリがまだ残っていればステップS408でポインタを進めて(すなわち次のエントリ情報の先頭バイトに注目し)、ステップS403に戻って次のエントリの解析に移る。
【0056】
また、ステップS407で1セクタ分のエントリを処理し終えていたならば、ステップS409でルートディレクトリエントリ(703)にある全てのエントリを解析し終えたかを判断する。全てのエントリを処理していれば最終的に一致するファイル名が見つからなかったという結果を返し、オープン処理を終了する(ステップS409のYES)。まだ全てのエントリを解析し終えていなければ(ステップS409のNO)、ステップS402に戻ってエントリ情報の続きの1セクタ分のデータを読み出し、ステップS403からの処理を継続する。
【0057】
一方、ステップS404で通常のファイルとして有効なエントリであると判断されれば、ステップS405でディレクトリエントリ情報から得られるファイル名、ファイルの開始クラスタ番号、ファイルのサイズ等の情報を変数に記憶するとともに、所望の手段により、このファイルをディスク上に唯一に特定できるインデックス値を算出し、これを記憶する。
【0058】
その後ステップS406に進み、現在注目しているディレクトリエントリに記されたファイル名とユーザープログラム(101)から与えられたファイル名とが一致するものであるかを判断する。一致してはいなかった場合(ステップS406のNO)には、ステップS407に進み、ファイル名が一致していればステップS401で取得したファイルディスクリプタを返してファイルオープンの処理を終了する。
【0059】
(ファイルからのデータ読み出し処理)
次にファイルのデータを読み出す際の処理手順について図5を参照して説明する。
【0060】
基本的な手順は従来のFATファイルシステムと同様にして、まず、ステップS501でユーザープログラム(101)から、データを読み出す対象のファイルが上述のファイルオープンの手順にしたがってオープンされる。ファイルのオープンに成功すると、そのファイルをプログラムの実行単位毎にユニークな数値として表すための数値(ファイルディスクリプタ)がユーザープログラム(101)へと返る。また、ファイルオープンの処理では同時にそのファイルの開始クラスタの番号(nextと表記する)をルートディレクトリエントリ(703)から得る。
【0061】
次にステップS502において、ステップS501で得られたファイルディスクリプタ、および読み出したデータを格納するためのバッファ、読み出すバイト数、ファイルデータの読み出し位置が指定される。
【0062】
次のステップS503では、ステップS502で指定されたファイルデータの読み出し位置と、あらかじめ記憶しておいたディスクのセクタサイズ、およびセクタ/クラスタ数から次式を計算する。
【外2】
【0063】
上式(2)の商を求めることにより、読み出しを行うデータがクラスタチェインの何番目のクラスタに相当するのかが求められる。本実施例の説明ではこれをnと表記する。
【0064】
次にステップS504で、図3で示したFATキャッシュデータを順を追って参照し、該当するファイルのインデックス値に一致するデータの中から、クラスタ順序番号がステップS503で算出したnに最も近く、かつnを超えないキャッシュデータを検索する。ステップS504の処理を行った後、条件に相当するキャッシュデータがあれば(ステップS505のYES)、ステップS506ではそのキャッシュデータの累積値をmに、クラスタ番地をnextにそれぞれ代入する。
【0065】
キャッシュデータがなければ(ステップS505のNO)、累積mとクラスタ番地nextの値(mはその初期値1、nextは開始クラスタ番地)は変化しないままステップS507へと進む。
【0066】
ステップS507では、クラスタの順序番号の累積mとステップS503で求めたnを比較する。mとnが一致していれば、ステップS511に進み、一致していない場合にはステップS508に進む。
【0067】
ステップS508では、上記nextに対応するFAT項目の書かれたブロックをFAT領域(702)から1セクタ分読み出し、さらにステップS509でFAT項目nextに着目して、図10の説明にあったように、ファイルのクラスタチェインを構成する次のクラスタ番号を求める。この結果を再びnextに代入するとともに、クラスタの順序番号の累積mに1を加算する。
【0068】
ステップS510では、ステップS509で得られたクラスタ番地next、累積m、およびファイルのインデックス値を図3で示したFATキャッシュへと保存する。このときFATキャッシュの数が制限された値を超えていなければ、新たに動的に確保したメモリ領域へと図3の構成を成すFATキャッシュデータを追加し、FATキャッシュ数が既に制限値以上であった場合には、既存のFATキャッシュデータに上書きされる。どのFATキャッシュデータに上書きするかは任意の方法で決めることができるが、例えば時間的にもっとも過去に更新されたデータを上書きの対象とする方法が考えられる。
【0069】
ステップS507からステップS510の間の処理は、クラスタの順序番号の累積mとステップS503で求めたクラスタ番号nが一致するまで繰り返し実行され、最終的にステップS511へと進む。
【0070】
以上までのステップにより、ステップS502で指定された読み出し位置のデータがディスク上のどのクラスタにあるのかがnextに代入されている。したがって、ステップS511では該当するブロック番号(next)のデータをディスクから読み出す。
【0071】
ステップS512では、ステップS511で読み出したデータから目的とするデータを抽出し、ステップS502でユーザープログラム(101)から指定されたバッファにコピーする。
【0072】
この後、ステップS513でユーザープログラム(101)からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部(103)に返却され、同時にこのファイルが使用していたFATキャッシュデータが格納されていたメモリを解放する。
【0073】
以上により、ファイルデータの読み出し処理が終了する。
【0074】
(ファイルへのデータ書き込み処理)
ファイルへのデータ書き込みの処理の手順は、図6の様になる。
【0075】
ステップS601からステップS610までの処理の説明は、ファイルからデータを読み出す場合の処理とほぼ同様であるため省略する。
【0076】
以上のステップにより、目的のブロックがnextに代入されている。したがってステップS611では、ステップS602でユーザープログラム(101)から指定されたバッファのデータをディスク上のブロック番号(next)へと書き込む。
【0077】
この後、ステップS612でユーザープログラム(101)からオープンされたファイルのクローズが指示されると、それまでオープンされていたファイルで使用されていたファイルディスクリプタがファイル操作部(103)に返却され、同時にこのファイルが使用していたFATキャッシュデータが格納されていたメモリを解放する。
【0078】
以上により、ファイルへのデータ書き込み処理が終了する。
【0079】
【発明の効果】
以上で説明したように、本発明によるFATキャッシュ機能付きファイルシステムは、ディスク上のファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、クラスタ順序番号に対応するデータが存在するディスク上のクラスタ番地、次のFATキャッシュデータの格納されたメモリ番地、の以上の情報を含むFATキャッシュデータをメモリ中に記憶しておくことにより、指定されたファイル空間上の位置にあるデータの存在するディスクのクラスタ番地を求める際には、まずこのFATキャッシュ情報を検索し、該当するキャッシュデータがあればこれを利用することによって、ユーザプログラムが読み出しや書き込みの操作を行うデータが存在するディスク上のブロック番号を従来の方法に比較して高速に求めることができるといった効果がある。
【図面の簡単な説明】
【図1】本発明の実施例におけるFATファイルシステムのソフトウエア構成図。
【図2】図1で示したFATファイルシステムを動作させるためのハードウエアの概略ブロック図。
【図3】本発明の実施例におけるFATキャッシュの構成図。
【図4】本発明の実施例におけるファイルオープン時の手順を示すフローチャート。
【図5】本発明の実施例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図6】本発明の実施例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【図7】従来例、および本発明の実施例におけるFAT型ディスクの記録フォーマット。
【図8】従来例、および本発明の実施例における1つのファイルに対応するディレクトリエントリの構成図。
【図9】従来例、および本発明の実施例におけるディレクトリエントリ全体の構成図。
【図10】従来例、および本発明の実施例におけるFAT型ディスクのFAT領域の概念図。
【図11】従来例、および本発明の実施例におけるファイルへのクラスタ割り当ての例。
【図12】従来例におけるファイルデータ読み出し時の手順を示すフローチャート。
【図13】従来例におけるファイルへのデータ書き込み時の手順を示すフローチャート。
【符号の説明】
101 ユーザープログラム
102 FATファイルシステムプログラム
103 ファイル操作部
104 ディレクトリ操作部
105 FAT操作部
106 ディスクドライバ部
201 CPU
202 RAM
203 ディスク装置
204 システムバス
Claims (6)
- ファイルアロケーションテーブルを使用してファイルの管理を行うFATファイルシステムにおいて、
ユーザープログラムからの要求を受け付け、ファイル名などで指定されたファイルをオープン、またはクローズする処理や、新規ファイルの作成、或はファイル空間上のどの位置からデータを読み出し、または書き込み操作を行うかを示すファイルポインタの操作などを行なうファイル操作手段と、
ユーザープログラムからの指示により、ディスク上に保存されている各ファイル、またはディレクトリのディレクトリエントリ情報を読み出し、さらにこれを解析して、ユーザープログラムから指示されたファイルやディレクトリの存在を検索したり、またファイルの先頭にあたるデータの含まれるディスク上のクラスタ番地を取得したり、或はファイルやディレクトリへの操作によって更新された最新のディレクトリエントリ情報をディスクに書き込むといったディレクトリエントリ構成の編集操作、およびファイルやディレクトリの各種属性の編集操作を行うディレクトリエントリ操作手段と、
読み書きの対象となるファイル上のデータの位置、およびFAT領域から読み出されるFAT情報から、データの存在するディスク上のクラスタ番地を取得して、これをFATキャッシュデータとして記憶したり、または読み書きの対象となるファイル上のデータの位置から、そのデータの存在するディスク上のクラスタ番地を該FATキャッシュデータを参照して、もしくは直接ディスク上のFAT領域から読み出されたFAT情報を解析して、対応するFAT項目から取得したり、或はファイルのクラスタチェインを正しく形成してディスクに書き込む処理などを行うFAT操作手段とを有することを特徴とするFATファイルシステム。 - 請求項1に記載のFATファイルシステムにおいて、該FAT操作手段が扱うFATキャッシュデータは、本FATファイルシステムが動作するシステム上のメモリに動的に任意の制限数に達するまで複数組確保されることを特徴とする。
- 請求項1に記載のFATファイルシステムにおいて、前記FATキャッシュデータが前記任意の制限数に達するまで複数組確保された後、更に異なる組のキャッシュデータを記録する際は、既存のFATキャッシュデータに上書きして行くことを特徴とする。
- 請求項1に記載のFATファイルシステムにおいて、該FAT操作手段が扱うFATキャッシュデータはオープンされるファイル毎に管理されることを特徴とする。
- 請求項1に記載のFATファイルシステムにおいて、該ファイル操作手段は、ユーザプログラムからのファイルのクローズ指示と同時に、そのオープンされていたファイルがFATキャッシュデータとして使用していたメモリエリア解放することを特徴とする。
- 請求項1に記載のFATファイルシステムにおいて、該FAT操作手段が扱うFATキャッシュデータには、少なくともディスク上に存在するファイルを唯一に特定することのできる任意長のインデックス値、任意長のクラスタ順序番号、前記クラスタ順序番号に対応するディスク上のクラスタ番地を含み、また複数組あるFATキャッシュデータの内、次に参照するFATキャッシュデータの存在するメモリ番地を含むことで、動的に確保されたFATキャッシュデータが鎖状を成して管理されることを特徴とする。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003157537A JP2004362092A (ja) | 2003-06-03 | 2003-06-03 | Fatキャッシュ機能付きファイルシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003157537A JP2004362092A (ja) | 2003-06-03 | 2003-06-03 | Fatキャッシュ機能付きファイルシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004362092A true JP2004362092A (ja) | 2004-12-24 |
Family
ID=34051207
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003157537A Withdrawn JP2004362092A (ja) | 2003-06-03 | 2003-06-03 | Fatキャッシュ機能付きファイルシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2004362092A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007004326A (ja) * | 2005-06-22 | 2007-01-11 | Kobe Steel Ltd | データアクセス方法及びそのプログラム |
JP2007087063A (ja) * | 2005-09-21 | 2007-04-05 | Canon Inc | Fatファイルシステム、ファイル管理方法、プログラムおよび記憶媒体 |
JP2008210288A (ja) * | 2007-02-27 | 2008-09-11 | Fujitsu Ltd | ファイル処理プログラム、ファイル処理方法、ファイル処理装置および関数プログラム |
US9851927B2 (en) | 2015-09-01 | 2017-12-26 | International Business Machines Corporation | File management in a file system |
-
2003
- 2003-06-03 JP JP2003157537A patent/JP2004362092A/ja not_active Withdrawn
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007004326A (ja) * | 2005-06-22 | 2007-01-11 | Kobe Steel Ltd | データアクセス方法及びそのプログラム |
JP4540556B2 (ja) * | 2005-06-22 | 2010-09-08 | 株式会社神戸製鋼所 | データアクセス方法及びそのプログラム |
JP2007087063A (ja) * | 2005-09-21 | 2007-04-05 | Canon Inc | Fatファイルシステム、ファイル管理方法、プログラムおよび記憶媒体 |
JP2008210288A (ja) * | 2007-02-27 | 2008-09-11 | Fujitsu Ltd | ファイル処理プログラム、ファイル処理方法、ファイル処理装置および関数プログラム |
US9851927B2 (en) | 2015-09-01 | 2017-12-26 | International Business Machines Corporation | File management in a file system |
US10223038B2 (en) | 2015-09-01 | 2019-03-05 | International Business Machines Corporation | File management in a file system |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11573701B2 (en) | Memory device and host device | |
JP4434379B2 (ja) | 情報処理装置及びその方法、記録媒体 | |
US7987190B2 (en) | Filesystem having a filename cache | |
US20080140905A1 (en) | Magnetic disk unit, file management system, and file management method | |
US10048884B2 (en) | Method for erasing data entity in memory module | |
US20050270930A1 (en) | Disk drive, control method thereof and disk-falsification detection method | |
US7350049B1 (en) | Method and apparatus for managing access to a file allocation table | |
JP2006285669A (ja) | ホスト機器 | |
JPS63244243A (ja) | フアイルをオープンする方法 | |
JPH08195093A (ja) | 不揮発性メモリのファイル管理装置 | |
JP2004362092A (ja) | Fatキャッシュ機能付きファイルシステム | |
JP2006313531A (ja) | ファイル管理システム | |
JP2006127377A (ja) | Fatファイルシステム | |
US11789908B2 (en) | Offloading memory maintenance for a log-structured file system | |
JP4920937B2 (ja) | Fatファイルシステム、ファイル管理方法、プログラムおよび記憶媒体 | |
JP2008134777A (ja) | ファイル割当テーブルのキャッシュ方法 | |
JP5376551B2 (ja) | フラッシュメモリシステム、電子機器、および携帯端末装置 | |
JP3904182B2 (ja) | データ管理システムおよびそれを用いたデータ管理方法 | |
JP7262977B2 (ja) | 記録装置及びその制御方法、並びにプログラム | |
JP2014137749A (ja) | ストレージ装置、書込制御方法、および書込制御プログラム | |
CN107608636B (zh) | 一种基于fat文件系统的设计方法及其应用的数据采集装置 | |
JP2008171212A (ja) | ファイル管理装置及びプログラム | |
JP5697398B2 (ja) | ファイル管理装置、ファイル管理方法、及びコンピュータプログラム | |
JP2006277268A (ja) | ファイル管理装置、ファイル管理方法、ファイル管理プログラムおよびコンピュータに読み取り可能な記録媒体 | |
JP2005032114A (ja) | データ処理システムにおける主記憶管理方法及び装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20060905 |