(57)【要約】      （修正有）【課題】データ追記後でもランダムアクセス時の処理速度を向上できるようにする。【解決手段】クラスタリンクキャッシュ５１は、FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、複数のクラスタのリンク情報から構成されるFATが記録されている場合、FATから抽出されたリンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクをキャッシュする。リンク情報更新部は、記録媒体上のクラスタにデータが追記されて、キャッシュリンクを更新する場合、キャッシュリンクを構成する複数のエントリのうち、更新対象のエントリについて、情報を更新する。構造変換部は、更新された更新対象のエントリを、キャッシュリンクのもとの位置から切り離して、キャッシュリンクの最後尾に繋げる。本技術は、FATファイルシステムを用いる情報処理装置に適用することができる。【選択図】図６
2013003701.tif 000002
【特許請求の範囲】
【請求項１】
FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクの保持部と、
前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクを更新する場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報を更新する情報更新部と、
前記情報更新部により更新された前記更新対象のエントリを、前記キャッシュリンクのもとの位置から切り離して、前記キャッシュリンクの最後尾に繋げる構造変換部と
を備える情報処理装置。
【請求項２】
前記エントリは、前記情報として、オフセット値、クラスタ番号、及び連続クラスタ数を含む
請求項１に記載の情報処理装置。
【請求項３】
前記キャッシュリンクの最終エントリに含まれる前記オフセット値から、追記対象のクラスタのオフセット値までの距離に基づいて、前記キャッシュリンクは更新される
請求項２に記載の情報処理装置。
【請求項４】
前記キャッシュリンクの最終エントリに含まれるオフセット値から、追記対象のクラスタのオフセット値までの距離が、前記キャッシュリンク内で隣接する前記エントリの前記オフセット値の差分の最小値の所定の倍数となった場合に、前記キャッシュリンクは更新される
請求項３に記載の情報処理装置。
【請求項５】
FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクをキャッシュする保持ステップと、
前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクを更新する場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報を更新する情報更新ステップと、
前記情報更新ステップの処理により更新された前記更新対象のエントリを、前記キャッシュリンクのもとの位置から切り離して、前記キャッシュリンクの最後尾に繋げる構造変換ステップと
を含む情報処理方法。
【請求項６】
FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクをキャッシュし、
前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクを更新する場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報を更新し、
更新された前記更新対象のエントリを、前記キャッシュリンクのもとの位置から切り離して、前記キャッシュリンクの最後尾に繋げる
ステップを含む制御処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、情報処理装置及び方法、並びにプログラムに関し、特に、データ追記後でもランダムアクセス時の処理速度を向上させる、情報処理装置及び方法、並びにプログラムに関する。
【背景技術】
【０００２】
従来から、ハードディスクなどのランダムアクセス可能な記録媒体に、各種データをファイルとして管理するFAT（File Allocation Tables）ファイルシステムが知られている（例えば、特許文献１参照）。
【０００３】
FATファイルシステムにおいては、記録媒体の記録領域はクラスタと称される記録単位に区分されており、ファイルの読み書きの管理はクラスタ単位で行われる。また、当該ファイルを構成するクラスタのリンク情報が、FATに記録される。したがって、情報処理装置は、FATを参照してクラスタを先頭から辿り、読み出し対象のデータを特定することにより、当該データをファイルから読み出すことができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−３０８２３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、FATはその構造上、情報処理装置が、逆方向のデータアクセスをする場合、FATを毎回先頭から読み直す必要があるため、順方向のデータアクセスをする場合と比較すると処理速度が著しく遅くなる。また、毎回記録媒体に記録されているFATを参照する必要があるため、データの読み書きに遅延が生じる。
【０００６】
したがって、処理速度の向上のために、記録媒体に記録されているFATをそのままRAM（Random Access Memory）等のメモリにキャッシュすることが考えられる。しかしながら、この場合、特に、メモリのサイズが限られている組み込み機器等では、FAT全体をメモリにキャッシュすることが困難な場合がある。また、FAT全体をメモリにキャッシュしたとしても、逆方向のデータアクセスをする場合には、FATを毎回先頭から読み直す必要がある。
【０００７】
さらに、データが追記されることでファイルのサイズが大きくなった場合には、ファイルを管理するFATのサイズも大きくなり、FAT全体のメモリへのキャッシュがより一層困難となる。
【０００８】
本技術は、このような状況に鑑みてなされたものであり、データ追記後でもランダムアクセス時の処理速度を向上できるようにしたものである。
【課題を解決するための手段】
【０００９】
本技術の一側面の情報処理装置は、FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクの保持部と、前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクを更新する場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報を更新する情報更新部と、前記情報更新部により更新された前記更新対象のエントリを、前記キャッシュリンクのもとの位置から切り離して、前記キャッシュリンクの最後尾に繋げる構造変換部とを備える。
【００１０】
前記エントリには、前記情報として、オフセット値、クラスタ番号、及び連続クラスタ数を含めることができる。
【００１１】
前記キャッシュリンクの最終エントリに含まれる前記オフセット値から、追記対象のクラスタのオフセット値までの距離に基づいて、前記キャッシュリンクは更新されることができる。
【００１２】
前記キャッシュリンクの最終エントリに含まれるオフセット値から、追記対象のクラスタのオフセット値までの距離が、前記キャッシュリンク内で隣接する前記エントリの前記オフセット値の差分の最小値の所定の倍数となった場合に、前記キャッシュリンクは更新されることができる。
【００１３】
本技術の一側面の情報処理方法及びプログラムは、上述した本技術の一側面の情報処理装置に対応する方法及びプログラムである。
【００１４】
本技術の一側面の情報処理装置及び方法並びにプログラムにおいては、FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクがキャッシュされ、前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクが更新される場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報が更新され、更新された前記更新対象のエントリが、前記キャッシュリンクのもとの位置から切り離されて、前記キャッシュリンクの最後尾に繋げられる。
【発明の効果】
【００１５】
以上のごとく、本技術によれば、データ追記後でもランダムアクセス時の処理速度を向上することができる。
【図面の簡単な説明】
【００１６】
【図１】ファイル管理システムの構成例を示すブロック図である。
【図２】FATの構成例を示す図である。
【図３】キャッシュリンクの構成例を示す図である。
【図４】読み出し処理の流れを説明するフローチャートである。
【図５】データ追記後のFATの構成例を示す図である。
【図６】データ追記後のキャッシュリンクの構成例を示す図である。
【図７】制御部の機能的構成例を示すブロック図である。
【図８】追記処理の流れを説明するフローチャートである。
【図９】本技術が適用される情報処理装置のハードウエアの構成例を示すブロック図である。
【発明を実施するための形態】
【００１７】
[本技術の概要]
本技術のファイルへのデータの追記の理解を容易なものとすべく、先ず、ファイルからのデータの読み出しの概略について説明する。
【００１８】
本技術に属するファイル管理システムは、各種データを、FATファイルシステムを用いてファイルとして記録媒体に記録する。FATファイルシステムを用いるファイル管理システムは、上述したように、データを読み出す場合、記録媒体に記録されたFATを参照して、FATを毎回先頭から読み直す必要がある。
【００１９】
したがって、ファイル管理システムは、データアクセスの処理速度を上げるために、FATに記録されている各クラスタの各リンク情報のうち、１以上のクラスタのリンク情報を抽出して集合させたものを、キャッシュリンクとして生成して、RAM等のメモリにキャッシュする。キャッシュリンクの生成において、FATに記録されている各クラスタの各リンク情報のうち、メモリのサイズに応じて略均等に、または任意の間隔で、抽出対象のクラスタが決定される。ファイル内の所定のデータが読み出し対象に設定された場合、ファイル管理システムは、メモリにキャッシュされたキャッシュリンクを参照して、当該所定のデータに最も近い前方のクラスタのリンク情報に基づいて、FATを途中から読み出して、当該所定のデータにアクセスすることができる。
【００２０】
このように、ファイル管理システムは、メモリにキャッシュされたキャッシュリンクを参照することで、記録媒体に記録されているFATを毎回先頭から読み直さなくても、読み出し対象のデータにアクセスすることができるようになり、ランダムアクセス時の処理速度を向上させることができる。
【００２１】
以下、図面を参照して、本技術の実施の形態について説明する。
【００２２】
[ファイル管理システムの構成例]
図１は、ファイル管理システム１の構成例を示すブロック図である。
【００２３】
図１に示されるように、ファイル管理システム１は、ファイル管理装置１０及び記録媒体１１から構成される。
【００２４】
ファイル管理装置１０は、操作部２１、制御部２２、クラスタリンクキャッシュ２３、入力部２４、書き込み部２５、読み出し部２６、及び出力部２７から構成される。
【００２５】
操作部２１は、ユーザによる操作を受け付け、当該操作に対応する操作信号を制御部２２に供給する。
【００２６】
制御部２２は、操作部２１からの操作信号を解析してユーザの操作内容を認識し、当該操作内容に応じた制御を実行する。
【００２７】
クラスタリンクキャッシュ２３は、RAM等のメモリで構成され、制御部２２の制御にしたがって、キャッシュリンクをキャッシュする。なお、キャッシュリンクの詳細については図３を用いて後述する。
【００２８】
入力部２４は、制御部２２の制御にしたがって、外部から入力されたデータを、記録媒体１１に記録可能な形態に変換して、書き込み部２５に供給する。
【００２９】
書き込み部２５は、制御部２２の制御にしたがって、入力部２４から供給されたデータを、記録媒体１１へ書き込む。このとき、書き込み部２５は、クラスタリンクキャッシュ２３にキャッシュされているキャッシュリンクと、後述する記録媒体１１が有するFAT４１を参照しながら、データを記録媒体１１へ書き込む。
【００３０】
読み出し部２６は、制御部２２の制御にしたがって、記録媒体１１からデータを読み出す。このとき、読み出し部２６は、クラスタリンクキャッシュ２３にキャッシュされているキャッシュリンクと、後述する記録媒体１１が有するFAT４１を参照しながら、記録媒体１１からデータを読み出す。
【００３１】
出力部２７は、読み出し部２６により読み出されたデータに基づいて、出力データを生成して外部に出力する。
【００３２】
記録媒体１１は、FAT４１とデータ領域４２を有している。
【００３３】
FAT４１には、所定のファイルを構成するクラスタのリンク情報が記録される。FAT４１の詳細について、図２を参照して後述する。
【００３４】
データ領域４２は複数のクラスタに区分され、所定のファイルに含まれるデータが、クラスタ単位で記録される。
【００３５】
以下、データ領域４２に記録されるデータについての、FAT４１とキャッシュリンクの詳細について、それぞれ図２と図３を用いて説明する。
【００３６】
[FAT４１の構成例]
図２はFAT４１の構成を説明する図である。
【００３７】
図２において、FAT４１は、複数の項目（長方形の枠）から構成されている。各項目の上方に記載された数字は、データ領域４２に記録される所定のファイルを構成するクラスタのクラスタ番号であり、各項目内に記載された数字は、上方に記載されたクラスタ番号のクラスタに続くクラスタのクラスタ番号である。すなわち、各項目は、上方に記載されたクラスタ番号のクラスタに対応しており、当該クラスタに続くクラスタのクラスタ番号といったリンク情報が格納される。
【００３８】
なお、以下、説明の簡略上、クラスタ番号Ｋ（Ｋは任意の整数値）のクラスタを、クラスタ［Ｋ］と記述する。また、あるクラスタに着目している場合、当該クラスタに続くクラスタを、次クラスタと称する。
【００３９】
具体的には、FAT４１の１番左の項目によれば、クラスタ［１０］の次クラスタは、クラスタ[１１]である。FAT４１の左から２番目の項目によれば、クラスタ［１１］の次クラスタは、クラスタ[１２]である。同様にしてクラスタが連続し、クラスタ［３１］の次クラスタは、クラスタ[５０]であり、クラスタ［５０］の次クラスタは、クラスタ[５２]である。そして、クラスタ[５２]に対応する項目内に「eof」と記載されていることから、クラスタ[５２]が所定のファイルの最終クラスタであることが分かる。なお、eofは、end of fileを意味する。
【００４０】
すなわち、図２のFAT４１の例では、データ領域４２に記録される所定のファイルは、クラスタ[１０]乃至[３１]，クラスタ[５０]，クラスタ[５２]から構成されている。ファイル管理装置１０は、このようなFAT４１を参照して、この順にクラスタを辿ることにより、読み出し対象のデータを所定のファイルから読み出すことができる。
【００４１】
次に、クラスタリンクキャッシュ２３にキャッシュされるキャッシュリンクの詳細について、図３を参照して説明する。
【００４２】
[キャッシュリンクの構成例]
図３は、キャッシュリンク５１の構成を説明する図である。
【００４３】
キャッシュリンク５１は、FATに記録されている各クラスタの各リンク情報から、クラスタリンクキャッシュ２３のメモリサイズに応じて略均等に、または任意の間隔にリンク情報が抽出されたクラスタのリンク情報の集合体である。本実施形態では、クラスタが抽出される位置は、ファイル先頭からの所定のオフセット値に対応する位置であるとする。
【００４４】
図３の例では、所定のファイルの先頭からのオフセット値が０，５，１０，１５，２０に位置するクラスタのリンク情報がFATから抽出されて集合されたものが、キャッシュリンク５１としてキャッシュされる。したがって、以下、キャッシュリンク５１が生成される場合に、抽出対象のクラスタのリンク情報が格納されていた位置を、所定のファイルの先頭からのオフセット値で表したものを、キャッシュポイントと称する。例えば図３の例では、０，５，１０，１５，２０のオフセットの位置がキャッシュポイントになる。
【００４５】
キャッシュリンク５１に含まれる、１つのクラスタのリンク情報には、当該クラスタについての、オフセット値、クラスタ番号、及び、それ以降に連続しているクラスタの数（以下、連続クラスタ数と称する）が含まれる。ここで、キャッシュリンク５１に含まれる各クラスタの各リンク情報を、エントリと称する。なお、各エントリに含まれる各オフセット値は、各キャッシュポイントを示すことになる。
【００４６】
図３の例では、キャッシュリンク５１は、５つのエントリＥ１乃至Ｅ５から構成されている。なお、以下、エントリＥ１乃至Ｅ５を個々に区別する必要がない場合、エントリＥ１乃至Ｅ５をエントリＥと称する。
【００４７】
具体的には、エントリＥ１に示されている「０，１０，２２」から、ファイル先頭からのオフセット値が「０」のキャッシュポイントにあるクラスタは、クラスタ[１０]であり、クラスタ[１０]からの連続クラスタ数は、「２２」であることが分かる。
【００４８】
同様に、エントリＥ２に示されている「５，１５，１７」から、ファイル先頭からのオフセット値が「５」のキャッシュポイントにあるクラスタは、クラスタ[１５]であり、クラスタ番号[１５]からの連続クラスタ数は、「１７」であることが分かる。
【００４９】
また、エントリＥ３に示されている「１０，２０，１２」から、ファイル先頭からのオフセット値が「１０」のキャッシュポイントにあるクラスタは、クラスタ[２０]であり、クラスタ[２０]からの連続クラスタ数は、「１２」であることが分かる。
【００５０】
また、エントリＥ４に示されている「１５，２５，７」から、ファイル先頭からのオフセット値が「１５」のキャッシュポイントにあるクラスタは、クラスタ[２５]であり、クラスタ[２５]からの連続クラスタ数は、「７」であることが分かる。
【００５１】
また、エントリＥ５に示されている「２０，３０，２」から、ファイル先頭からのオフセット値が「２０」のキャッシュポイントにあるクラスタは、クラスタ[３０]であり、クラスタ[３０]からの連続クラスタ数は、「２」であることが分かる。
【００５２】
さらに、各エントリＥに含まれるリンク情報としては、エントリＥ１乃至Ｅ５の上に矢印で示されるように、次のリンク先のエントリＥのポインタも含まれる。
【００５３】
ファイル管理システム１は、所定のファイルの所定のデータの読み出しが要求された場合、クラスタリンクキャッシュ２３にキャッシュされたキャッシュリンク５１を参照し、当該所定のデータに最も近いエントリＥのリンク情報に基づいて、FATを途中から辿って当該所定のデータを含むクラスタを特定して、当該所定のデータを読み出すことができる。
【００５４】
例えば、前回の読み出し対象のクラスタの位置が、所定のファイルのオフセット値が１７の位置であったとする。なお、以下、前回の読み出し対象のクラスタのオフセット値を、前回のReadポイントと称する。
【００５５】
そして、今回、所定のファイルのオフセット値が１３の位置のクラスタが読み出し対象として指示されたとする。なお、以下、今回の読み出し対象として指示されているクラスタのオフセット値を、Readオフセットと称する。
【００５６】
このように、前回のReadポイントが１７であって、Readオフセットが１３といったように、Readオフセットが前回のReadポイントよりも前の場合、キャッシュリンクを用いない従来のファイル管理装置は、再度FATを先頭（すなわち、オフセット値が０の位置）から順に読み直す必要があった。
【００５７】
これに対して、ファイル管理装置１０は、キャッシュリンク５１をクラスタリンクキャッシュ２３にキャッシュしているので、当該キャッシュリンク５１の各エントリＥに含まれる各オフセット（キャッシュポイント）のうち、Readオフセットに最も近い前方のオフセット（キャッシュポイント）の位置を、Readポイントに設定することができる。これにより、Readオフセットの視点からすると、所定のファイルの先頭よりも遥かに近傍の位置にReadポイントが移動してきたことになる。
【００５８】
したがって、ファイル管理装置１０は、従来のようにFATを先頭から辿ってReadオフセットまで辿り着くのと比較して、遥かに短い経路でReadポイントからFATを辿り、Readオフセットまで辿り着くことができる。すなわち、ファイル管理装置１０は、キャッシュリンク５１を参照することにより、FATを途中から辿ることができる。したがって、従来のようにFATを先頭から辿る場合と比較して、処理速度を向上させることが可能になる。
【００５９】
具体的には、ファイル管理装置１０は、Readオフセット（すなわち、１３）よりも前で、Readオフセットに最も近いオフセット（キャッシュポイント）を有するエントリＥ３のリンク情報に基づいて、Readポイントを設定し、当該ReadポイントからFATを参照する。すなわち、ファイル管理装置１０は、エントリＥ３に示されている「１０，２０，１２」に基づいて、オフセット値が１０の位置をReadポイントに設定し、当該Readポイントから、FATを参照する。オフセット値が１０の位置にあるクラスタ[２０]からの連続クラスタ数は１２であることから、Readオフセットの位置にあるクラスタは、クラスタ[２３]であることが特定される。したがって、ファイル管理装置１０は、クラスタ[２３]から読み出し対象のデータを読み出すことができる。
【００６０】
このようなファイル管理装置１０によるデータの読み出しの処理（以下、読み出し処理と称する）について、図４を参照して説明する。
【００６１】
なお、以下、説明の簡略上、オフセット値Ｌ（Ｌは任意の整数値であって、図３の場合、０，５，１０，１５，２０）のキャッシュポイントを、キャッシュポイント[Ｌ]と記述する。オフセット値Ｍ（Ｍは任意の整数値）のReadポイントを、Readポイント[Ｍ]と記述する。また、オフセット値Ｎ（Ｎは任意の整数値）のReadオフセットを、Readオフセット[Ｎ]と記述する。
【００６２】
[読み出し処理]
図４は、読み出し処理の流れについて説明するフローチャートである。
【００６３】
読み出し処理は、ユーザによる操作部２１の所定の操作により、開始される。
【００６４】
ステップＳ１において、制御部２２は、キャッシュがあるかを判定する。すなわち、クラスタリンクキャッシュ２３は、キャッシュリンク５１がキャッシュされているかを判定する。
【００６５】
キャッシュがある場合、ステップＳ１においてＹＥＳであると判定されて、処理はステップＳ３に進む。なお、ステップＳ３以降の処理については後述する。
【００６６】
これに対して、キャッシュがない場合、ステップＳ１においてＮＯであると判定されて、処理はステップＳ２に進む。
【００６７】
ステップＳ２において、クラスタリンクキャッシュ２３は、キャッシュを初期化する。すなわち、クラスタリンクキャッシュ２３は、キャッシュリンク５１をキャッシュするために、クラスタリンクキャッシュ２３に対する０初期化等を行う。その後、処理はステップＳ３に進む。
【００６８】
ステップＳ３において、制御部２２は、Readオフセットが、前回のReadポイントより前かを判定する。すなわち、制御部２２は、今回読み出しが指示されているクラスタのオフセット値が、前回読み出されていたクラスタのオフセット値より前かを判定する。
【００６９】
Readオフセットが、前回のReadポイントより後である（前ではない）場合、ステップＳ３においてＮＯであると判定されて、処理はステップＳ７に進む。なお、ステップＳ７以降の処理については後述する。
【００７０】
これに対して、Readオフセットが、前回のReadポイントより前である場合、ステップＳ３においてＹＥＳであると判定されて、処理はステップＳ４に進む。なお、以下では、読み出し処理の流れの理解を容易なものとすべく、Readオフセット[１３]、及び前回のReadポイント[１７]の場合を例として説明する。
【００７１】
ステップＳ４において、制御部２２は、キャッシュがあるかを判定する。すなわち、制御部２２は、ステップＳ１の判定の誤りやステップＳ２の処理による初期化の失敗に備えて、再度キャッシュがあるかを判定する。
【００７２】
キャッシュがある場合、ステップＳ４においてＹＥＳであると判定されて、処理はステップＳ６に進む。なお、ステップＳ６以降の処理については後述する。
【００７３】
これに対して、キャッシュがない場合、ステップＳ４においてＮＯであると判定されて、処理はステップＳ５に進む。
【００７４】
ステップＳ５において、制御部２２は、Readポイントを、FATの先頭のオフセット値に設定する。すなわち、キャッシュリンク５１がキャッシュされていない場合、制御部２２は、キャッシュリンク５１を参照することができない。したがって、制御部２２は、Readポイントを、FATの先頭のオフセット値が０の位置、すなわちReadポイント[０]に設定する。この場合、制御部２２は、キャッシュリンクを用いない従来のファイル管理装置と同様に、FATを先頭から辿る必要がある。ReadポイントがFATの先頭のオフセット値に設定されると、処理はステップＳ８に進む。
【００７５】
ステップＳ８において、制御部２２は、FATを辿ってReadポイントを１つ進める。例えばステップＳ５の処理でReadポイント[０]に設定された後のステップＳ８においては、制御部２２は、Readポイント[１]に設定する。
【００７６】
ステップＳ９において、制御部２２は、Readポイントが、キャッシュポイントであるかを判定する。すなわち、制御部２２は、Readポイントが、キャッシュポイント[０]，[５]，[１０]，[１５]，または[２０]であるかを判定する。
【００７７】
例えばステップＳ８の処理でReadポイント[１]に設定された場合には、ステップＳ９においてＮＯであると判定されて、処理はステップＳ１１に進む。
【００７８】
ステップＳ１１において、制御部２２は、Readポイントが、Readオフセットと等しいかを判定する。すなわち、制御部２２は、Readポイントが、Readオフセット[１３]と等しいかを判定する。
【００７９】
例えばステップＳ８の処理でReadポイント[１]に設定された場合には、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻され、それ以降の処理が繰り返される。すなわち、ReadポイントがReadオフセット[１３]と等しくなるまでの間、すなわちReadポイント［１３］になるまでの間、ステップＳ８乃至Ｓ１１のループ処理が繰り返される。
【００８０】
ここで、当該ループ処理が複数回繰り返され、所定の回のステップＳ８において、Readポイント[４]になったものとする。この場合、ステップＳ９においてＮＯであると判定され、ステップＳ１１においてＮＯであると判定されて、次の回のステップＳ８として次のような処理が実行される。
【００８１】
すなわち、ステップＳ８において、Readポイント[４]から１つ進められてReadポイント[５]に設定される。ここで、Readポイント[５]は、キャッシュポイントであるため、ステップＳ９においてＹＥＳであると判定されて、処理はステップＳ１０に進む。
【００８２】
ステップＳ１０において、制御部２２は、キャッシュにデータを保存する。すなわち、制御部２２は、キャッシュリンク５１に、当該Readポイントの位置にあるクラスタのリンク情報を保存する。この場合、Readポイント[５]であるので、「５，１５，１７」というリンク情報が、エントリＥ２に保存される。キャッシュにデータが保存されると、処理はステップＳ１１に進む。
【００８３】
例えばステップＳ８の処理でReadポイント[５]に設定された場合には、Readオフセット[１３]と等しくなく、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻される。
【００８４】
ここで、当該ループ処理が複数回繰り返され、所定の回のステップＳ８において、Readポイント[９]になったものとする。この場合、ステップＳ９においてＮＯであると判定され、ステップＳ１１においてＮＯであると判定されて、次の回のステップＳ８として次のような処理が実行される。
【００８５】
すなわち、ステップＳ８において、Readポイント[９]から１つ進められてReadポイント[１０]に設定される。ここで、Readポイント[１０]は、キャッシュポイントであるため、ステップＳ９においてＹＥＳであると判定されて、処理はステップＳ１０に進む。
【００８６】
ステップＳ１０において、制御部２２は、キャッシュにデータを保存する。この場合、Readポイント[１０]であるので、「１０，２０，１２」というリンク情報が、エントリＥ３に保存される。このように、FATを辿りながら、適宜キャッシュリンク５１内の各エントリＥにリンク情報がキャッシュされていくので、次回以降の読み出し処理において、当該キャッシュリンク５１を参照することでクラスタの適切な読み出しが可能になる。キャッシュにデータが保存されると、処理はステップＳ１１に進む。
【００８７】
例えばステップＳ８の処理でReadポイント[１０]に設定された場合には、Readオフセット[１３]と等しくなく、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻される。
【００８８】
ここで、当該ループ処理が複数回繰り返され、所定の回のステップＳ８において、Readポイント[１２]になったものとする。この場合、ステップＳ９においてＮＯであると判定され、ステップＳ１１においてＮＯであると判定されて、次の回のステップＳ８として次のような処理が実行される。
【００８９】
すなわち、ステップＳ８において、Readポイント[１２]から１つ進められてReadポイント[１３]に設定される。ここで、Readポイント[１３]は、キャッシュポイントではないため、ステップＳ９においてＮＯであると判定されて、処理はステップＳ１１に進む。
【００９０】
例えばステップＳ８の処理でReadポイント[１３]に設定された場合には、Readオフセット[１３]と等しく、ステップＳ１１においてＹＥＳであると判定されて、処理はステップＳ１２に進む。
【００９１】
ステップＳ１２において、制御部２２は、クラスタのデータを読み出す。すなわち、制御部２２は読み出し部２６を制御して、Readオフセット[１３]の位置にあるクラスタ[２３]から読み出し対象のデータを読み出す。
【００９２】
これにより、読み出し処理は終了する。なお、制御部２２は、次のデータの読み出し処理の指示があるまで待機状態となる。
【００９３】
このように、ステップＳ４の処理において、キャッシュすなわちキャッシュリンク５１がないと判定された場合、ステップＳ５以降に示されるように、制御部２２は、キャッシュリンクを用いない従来のファイル管理装置と同様に、FATを先頭から辿る必要がある。
【００９４】
一方、ステップＳ４において、キャッシュがある場合、ＹＥＳであると判定されて、処理はステップＳ６に進む。
【００９５】
ステップＳ６において、制御部２２は、キャッシュを読み、Readオフセットに近い前方のキャッシュポイントを、Readポイントに設定する。具体的には、例えば本例では、Readオフセット[１３]、及び前回のReadポイント[１７]とされているので、制御部２２は、キャッシュリンク５１を参照して、Readオフセット[１３]に近い前方のキャッシュポイントを探す。この場合、Readオフセット[１３]に近い前方のキャッシュポイントは、キャッシュポイント[１０]であることから、制御部２２は、Readポイント[１０]に設定する。すなわち、制御部２２は、オフセット値が１０の位置からFATを辿り始める。
【００９６】
ステップＳ８において、制御部２２は、FATを辿ってReadポイントを１つ進める。キャッシュがある場合にステップＳ６の処理でReadポイント[１０]に設定された後のステップＳ８においては、制御部２２は、Readポイント[１１]に設定する。
【００９７】
ステップＳ９において、制御部２２は、Readポイントが、キャッシュポイントであるかを判定する。すなわち、制御部２２は、Readポイントが、キャッシュポイント[０]，[５]，[１０]，[１５]，または[２０]であるかを判定する。
【００９８】
例えばステップＳ８の処理でReadポイント[１１]に設定された場合には、ステップＳ９においてＮＯであると判定されて、処理はステップＳ１１に進む。
【００９９】
ステップＳ１１において、制御部２２は、Readポイントが、Readオフセットと等しいかを判定する。すなわち、制御部２２は、Readポイントが、Readオフセット[１３]と等しいかを判定する。
【０１００】
例えばステップＳ８の処理でReadポイント[１１]に設定された場合には、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻され、それ以降の処理が繰り返される。すなわち、ReadポイントがReadオフセット[１３]と等しくなるまでの間、すなわちReadポイント［１３］になるまでの間、ステップＳ８乃至Ｓ１１のループ処理が繰り返される。
【０１０１】
ここで、次の回のステップＳ８において、Readポイント[１１]から１つ進められてReadポイント[１２]に設定される。この場合、ステップＳ９においてＮＯであると判定され、ステップＳ１１においてＮＯと判定されて、次の回のステップＳ８として次のような処理が実行される。
【０１０２】
すなわち、ステップＳ８において、Readポイント[１２]から１つ進められてReadポイント[１３]に設定される。ここで、Readポイント[１３]は、キャッシュポイントではないため、ステップＳ９においてＮＯであると判定されて、処理はステップＳ１１に進む。
【０１０３】
例えばステップＳ８の処理でReadポイント[１３]に設定された場合には、Readオフセット[１３]と等しく、ＹＥＳであると判定されて、処理はステップＳ１２に進む。
【０１０４】
ステップＳ１２において、制御部２２は、クラスタのデータを読み出す。すなわち、制御部２２は読み出し部２６を制御して、オフセット値[１３]の位置にあるクラスタ[２３]から読み出し対象のデータを読み出す。
【０１０５】
これにより、読み出し処理は終了する。なお、制御部２２は、次のデータの読み出し処理の指示があるまで待機状態となる。
【０１０６】
このように、ファイル管理装置１０は、キャッシュリンク５１を参照することにより、FATをReadポイントから辿ることができる。したがって、従来のようにFATを先頭から辿る場合と比較して、処理速度を向上させることが可能になる。
【０１０７】
一方、ステップＳ３において、Readオフセットが、前回のReadポイントより後である（前ではない）場合、ＮＯであると判定されて、処理はステップＳ７に進む。なお、以下では、読み出し処理の流れの理解を容易なものとすべく、Readオフセット[１７]、及び前回のReadポイント[１３]の場合を例として説明する。
【０１０８】
ステップＳ７において、制御部２２は、前回のReadポイントを、Readポイントに設定する。すなわち、制御部２２は、前回のReadポイント[１３]を、Readポイントに設定、すなわちReadポイント[１３]とする。
【０１０９】
ステップＳ８において、制御部２２は、FATを辿ってReadポイントを１つ進める。例えばステップＳ７の処理でReadポイント[１３]に設定された後のステップＳ８においては、制御部２２は、Readポイント[１４]に設定する。
【０１１０】
ステップＳ９において、制御部２２は、Readポイントが、キャッシュポイントであるかを判定する。すなわち、制御部２２は、Readポイントが、キャッシュポイントである[０]，[５]，[１０]，[１５]，または[２０]であるかを判定する。
【０１１１】
例えばステップＳ８の処理でReadポイント[１４]に設定された場合には、ステップＳ９においてＮＯであると判定されて、処理はステップＳ１１に進む。
【０１１２】
ステップＳ１１において、制御部２２は、Readポイントが、Readオフセットと等しいかを判定する。すなわち、制御部２２は、Readポイントが、Readオフセット[１７]と等しいかを判定する。
【０１１３】
例えばステップＳ８の処理でReadポイント[１４]に設定された場合には、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻され、それ以降の処理が繰り返される。すなわち、ReadポイントがReadオフセット[１７]と等しくなるまでの間、すなわちReadポイント［１３］になるまでの間、ステップＳ８乃至Ｓ１１のループ処理が繰り返される。
【０１１４】
ここで、当該ループ処理が複数回繰り返され、所定の回のステップＳ８において、Readポイント[１５]になったものとする。この場合、ステップＳ９においてＹＥＳであると判定され、ステップＳ１０の処理において、「１５，２５，７」というリンク情報が、エントリＥ４に保存される。キャッシュにデータが保存されると、処理はステップＳ１１に進み、ステップＳ１１においてＮＯであると判定されて、処理はステップＳ８に戻される。
【０１１５】
さらに、ステップＳ８乃至Ｓ１１のループ処理が複数回繰り返され、所定の回のステップＳ８において、Readポイント[１７]になったものとする。この場合、ステップＳ９においてＮＯであると判定され、処理はステップＳ１１に進む。
【０１１６】
例えばステップＳ８の処理でReadポイント[１７]に設定された場合には、Readオフセット[１７]と等しく、ステップＳ１１においてＹＥＳであると判定されて、処理はステップＳ１２に進む。
【０１１７】
ステップＳ１２において、制御部２２は、クラスタのデータを読み出す。すなわち、制御部２２は読み出し部２６を制御して、Readオフセット[１７]の位置にあるクラスタ[２７]から読み出し対象のデータを読み出す。
【０１１８】
これにより、読み出し処理は終了する。
【０１１９】
以上、説明したように、ファイル管理装置１０は、キャッシュリンク５１を参照することにより、FATをReadポイントから辿ることができる。したがって、従来のようにFATを先頭から辿る場合と比較して、処理速度を向上させることが可能になる。
【０１２０】
次に、所定のファイルに対して、データが追記された場合のFAT４１とキャッシュリンク５１について、それぞれ図５と図６を用いて説明する。
【０１２１】
[データ追記後のFAT４１の構成例]
図５はデータ追記後のFAT４１の構成を説明する図である。
【０１２２】
データ追記前の図２のFAT４１は、クラスタ[５２]が所定のファイルの最終クラスタであった。そこから、２２クラスタ分のデータが追記された場合、FAT４１は、図５に示されるようになる。
【０１２３】
具体的には、クラスタ[５２]の次クラスタは、クラスタ[５３]であり、クラスタ[５３]の次クラスタは、クラスタ[５４]である。また、クラスタ[５４]の次クラスタは、クラスタ[６０]であり、クラスタ[６０]の次クラスタは、クラスタ[６１]である。同様にしてクラスタが連続し、クラスタ［７７］の次クラスタは、クラスタ[７８]であり、クラスタ［７８］の次クラスタは、クラスタ[７９]である。そして、クラスタ[７９]に対応する項目内に「eof」と記載されていることから、クラスタ[７９]が所定のファイルの最終クラスタであることが分かる。
【０１２４】
すなわち、図５のFAT４１の例では、データ領域４２に記録されるデータ追記後の所定のファイルは、クラスタ[１０]乃至[３１]，クラスタ[５０]，クラスタ[５２]乃至[５４]，クラスタ[６０]乃至[７９]のクラスタから構成されている。ファイル管理装置１０は、このようなFAT４１を参照して、この順にクラスタを辿ることにより、読み出し対象のデータを所定のファイルから読み出すことができる。
【０１２５】
次に、ファイルへのデータ追記後に、クラスタリンクキャッシュ２３にキャッシュされるキャッシュリンク５１の詳細について、図６を参照して説明する。
【０１２６】
[データ追記後のキャッシュリンクの構成例]
図６は、データ追記後のキャッシュリンク５１の構成を説明する図である。
【０１２７】
所定のファイルに対してデータが追記され、FAT４１のサイズが大きくなっても、クラスタリンクキャッシュ２３のメモリサイズは変わらない。したがって、ファイル管理装置１０は、FAT４１のサイズが大きくなるに従い、当該FAT４１に記録されている各クラスタの各リンク情報から抽出されるクラスタの間隔、すなわち、キャッシュポイントの間隔も広くなるように、キャッシュリンク５１を生成すればよい。
【０１２８】
しかしながら、FAT４１のサイズが変わる毎に、キャッシュポイントの間隔が広くなったキャッシュリンク５１が一から生成されると、その生成時間がかかり、結果として書き込みの処理速度を低下させてしまう恐れがある。そこで、ファイル管理装置１０は、キャッシュリンク５１の生成時間を短縮すべく、データ追記前のキャッシュリンク５１の一部のエントリＥに含めるリンク情報を、データ追記後のクラスタのリンク情報に更新して、当該エントリＥを再利用して新たなキャッシュリンク５１を生成する。これにより、キャッシュリンク５１を一から生成する場合と比較して、生成時間を短縮することができる。
【０１２９】
キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングは、キャッシュポイントの間隔をどれだけ広げるかによって異なる。ここでは、キャッシュポイントの間隔を２倍にする例について説明する。すなわち、クラスタが追記される毎に、現在追記しているクラスタのオフセット値（以下、wpと称する）の、現在のキャッシュリンク５１の終端のエントリＥが有するオフセット値（以下、ceofと称する）に対する差分が算出される。この差分が、キャッシュポイントの間隔の２倍になった時点で、エントリＥ内リンク情報が更新されれば、結果として、キャッシュポイントの間隔が２倍になるキャッシュリンク５１が得られる。ここで、今現在のキャッシュリンク５１におけるキャッシュポイントの間隔は、当該今現在のキャッシュリンク５１内で隣接する各エントリＥのオフセット値の差分のうち、最小値（以下、min_diffと称する）と等価である。従って、wp−ceofが、キャッシュポイントの間隔の２倍になったタイミング、すなわち、min_diffの２倍になったタイミングが、キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングとなる。
【０１３０】
キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングになると、リンク情報が更新される対象のエントリＥ（以下、更新対象のエントリＥと称する）が決定される。具体的には、更新対象のエントリＥの候補として、各オフセット値の差分がmin_diffとなる隣接する２つのエントリＥの組のうち、キャッシュリンク５１の先頭に最も近い２つのエントリＥの組が選択される。そして、選択された２つのエントリＥの組のうち、後ろのエントリＥが、更新対象のエントリＥとして決定される。
【０１３１】
すると、更新対象のエントリＥが、キャッシュリンク５１の現在の位置から切り離され、その前後のエントリＥが繋げられる。一方、更新対象のエントリＥのリンク情報が、追記されたクラスタのリンク情報に更新される。そして、更新対象のエントリＥは、キャッシュリンク５１の最後尾に繋げられる。
【０１３２】
図６の例では、オフセット値が２９に位置するクラスタ[６３]までデータが追記された段階では、キャッシュリンク５１の更新及び再利用のタイミングとはならない。すなわち、この場合、wpの値は２９であり、ceofの値は、現在のキャッシュリンク５１の終端のエントリＥ５が有するオフセット値の２０である。したがって、wp−ceofは９となる。また、現在のキャッシュリンク５１内で隣接するエントリＥ１乃至Ｅ５のオフセット値は、それぞれ０，５，１０，１５，２０であることから、それぞれのオフセット値の差分はいずれも５となるので、オフセット値の差分の最小値も５になる。したがって、min_diffの値は、５であり、min_diffの２倍は１０となる。すなわち、オフセット値が２９に位置するクラスタ[６３]までデータが追記された段階では、wp−ceofが、キャッシュポイントの間隔の２倍にはならないので、キャッシュリンク５１の更新及び再利用のタイミングとはならない。
【０１３３】
次に、オフセット値が３０に位置するクラスタ[６４]までデータが追記されると、キャッシュリンク５１の更新及び再利用のタイミングとなる。すなわち、この場合、wpの値は３０であり、ceofの値は、現在のキャッシュリンク５１の終端のエントリＥ５が有するオフセット値の２０である。したがって、wp−ceofは１０となる。また、現在のキャッシュリンク５１内で隣接するエントリＥ１乃至Ｅ５のオフセット値は、それぞれ０，５，１０，１５，２０であることから、それぞれのオフセット値の差分はいずれも５となるので、オフセット値の差分の最小値も５になる。したがって、min_diffの値は、５であり、min_diffの２倍は１０となる。すなわち、オフセット値が３０に位置するクラスタ[６４]までデータが追記された段階で、wp−ceofが、キャッシュポイントの間隔の２倍になるので、キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングとなる。
【０１３４】
キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングになると、更新対象のエントリＥが決定される。更新対象のエントリＥの候補として、各オフセット値の差分がmin_diff（すなわち、５）となる隣接する２つのエントリＥの組として、エントリＥ１とＥ２、エントリＥ２とＥ３、エントリＥ３とエントリＥ４、エントリＥ４とエントリＥ５の４つの組がある。このうち、キャッシュリンク５１の先頭に最も近いエントリＥ１とＥ２の組が選択される。そして、エントリＥ１とＥ２の組のうち、後ろのエントリＥ２が、更新対象のエントリＥとして決定される。
【０１３５】
すると、更新対象として決定されたエントリＥ２は、キャッシュリンク５１の現在の位置から切り離され、その前後のエントリＥ１とＥ３が繋げられる。一方、更新対象のエントリＥ２のリンク情報が、追記されたクラスタ[６４]のリンク情報である「３０，６４，１６」に更新される。そして、更新対象のエントリＥ２は、キャッシュリンク５１の最後尾に繋げられて、エントリＥ６となる。この段階で、キャッシュリンク５１に含まれるエントリＥは、エントリＥ１，Ｅ３乃至Ｅ６となり、隣接する各エントリＥのオフセット値は、０，１０，１５，２０，３０となる。
【０１３６】
さらにクラスタのデータが追記され、オフセット値が３１に位置するクラスタ[６５]までデータが追記された段階では、キャッシュリンク５１の更新及び再利用のタイミングとはならない。すなわち、この場合、wpの値は３１であり、ceofの値は、現在のキャッシュリンク５１の終端のエントリＥ６が有するオフセット値の３０である。したがって、wp−ceofは１となる。また、現在のキャッシュリンク５１内で隣接するエントリＥ１，Ｅ３乃至Ｅ６のオフセット値は、それぞれ０，１０，１５，２０，３０であることから、それぞれのオフセット値の差分は５または１０となるので、オフセット値の差分の最小値は５になる。したがって、min_diffの値は、５であり、min_diffの２倍は１０となる。すなわち、オフセット値が３１に位置するクラスタ[６５]までデータが追記された段階では、wp−ceofが、キャッシュポイントの間隔の２倍にはならないので、キャッシュリンク５１の更新及び再利用のタイミングとはならない。
【０１３７】
さらにクラスタのデータが追記され、オフセット値が３９に位置するクラスタ[７３]までデータが追記された段階では、キャッシュリンク５１の更新及び再利用のタイミングとはならない。すなわち、この場合、wpの値は３９であり、ceofの値は、現在のキャッシュリンク５１の終端のエントリＥ６が有するオフセット値の３０である。したがって、wp−ceofは９となる。また、現在のキャッシュリンク５１内で隣接するエントリＥ１乃至Ｅ６のオフセット値は、それぞれ０，１０，１５，２０，３０であることから、それぞれのオフセット値の差分は５または１０となるので、オフセット値の差分の最小値は５になる。したがって、min_diffの値は、５であり、min_diffの２倍は１０となる。すなわち、オフセット値が３９に位置するクラスタ[７３]までデータが追記された段階では、wp−ceofが、キャッシュポイントの間隔の２倍にはならないので、キャッシュリンク５１の更新及び再利用のタイミングとはならない。
【０１３８】
次に、オフセット値が４０に位置するクラスタ[７４]までデータが追記されると、キャッシュリンク５１の更新及び再利用のタイミングとなる。すなわち、この場合、wpの値は４０であり、ceofの値は、現在のキャッシュリンク５１の終端のエントリＥ６が有するオフセット値の３０である。したがって、wp−ceofは１０となる。また、現在のキャッシュリンク５１内で隣接するエントリＥ１乃至Ｅ６のオフセット値は、それぞれ０，１０，１５，２０，３０であることから、それぞれのオフセット値の差分は５または１０となるので、オフセット値の差分の最小値は５になる。したがって、min_diffの値は、５であり、min_diffの２倍は１０となる。すなわち、オフセット値が４０に位置するクラスタ[７４]までデータが追記された段階で、wp−ceofが、キャッシュポイントの間隔の２倍になるので、キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングとなる。
【０１３９】
キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングになると、更新対象のエントリＥが決定される。更新対象のエントリＥの候補として、各オフセット値の差分がmin_diff（すなわち、５）となる隣接する２つのエントリＥの組として、エントリＥ３とエントリＥ４、エントリＥ４とエントリＥ５の２つの組がある。このうち、キャッシュリンク５１の先頭に最も近いエントリＥ３とエントリＥ４の組が選択される。そして、エントリＥ３とエントリＥ４の組のうち、後ろのエントリＥ４が、更新対象のエントリＥとして決定される。
【０１４０】
すると、更新対象として決定されたエントリＥ４は、キャッシュリンク５１の現在の位置から切り離され、その前後のエントリＥ３とＥ５が繋げられる。一方、更新対象のエントリＥ４のリンク情報が、追記されたクラスタ[４０]のリンク情報である「４０，７４，６」に更新される。そして、更新対象のエントリＥ４は、キャッシュリンク５１の最後尾に繋げられて、エントリＥ７となる。この段階で、キャッシュリンク５１に含まれるエントリＥは、エントリＥ１，Ｅ３，Ｅ５乃至Ｅ７となり、隣接する各エントリＥのオフセット値は、０，１０，２０，３０，４０となる。
【０１４１】
このように、キャッシュリンク５１は、データ追記によってFAT４１のサイズが大きくなるに従い、キャッシュポイントの間隔が広くなるように生成される。これにより、キャッシュリンク５１のサイズは変更されずに、新たなリンク情報を含むキャッシュリンク５１が生成される。また、データ追記前のキャッシュリンク５１の一部のエントリＥに含めるリンク情報が、データ追記後のクラスタのリンク情報に更新されて、当該エントリＥが再利用されることで、キャッシュリンク５１を一から生成する場合と比較して、生成時間を短縮することができる。
【０１４２】
次に、図１に示されるファイル管理システム１が有する機能のうち、ファイルへのデータ追記を実現させるための制御部２２の機能的構成例を、図７を用いて説明する。
【０１４３】
[制御部の機能的構成例]
図７は、制御部２２の機能的構成例を示すブロック図である。
【０１４４】
制御部２２は、更新判定部６１、更新対象決定部６２、構造変換部６３、リンク情報更新部６４、及びデータ追記部６５から構成される。
【０１４５】
更新判定部６１は、キャッシュリンク５１を更新及び再利用するタイミングになったか否かを判定する。
【０１４６】
更新対象決定部６２は、キャッシュリンク５１に含まれる複数のエントリＥの中から、更新対象のエントリＥを決定する。
【０１４７】
構造変換部６３は、更新対象決定部６２により決定された更新対象のエントリＥを、もとの位置から切り離し、キャッシュリンク５１の最後尾に繋げる。また、構造変換部６３は、更新対象のエントリＥがキャッシュリンク５１から切り離された後、その前後のエントリＥを繋げる。構造変換部６３は、キャッシュリンク５１の構造を変換する時、エントリＥが有するリンク情報のうち、次のリンク先のエントリＥのポインタの情報を更新する。
【０１４８】
リンク情報更新部６４は、更新対象決定部６２により決定された更新対象のエントリＥのリンク情報を、追記されたクラスタのリンク情報に更新する。
【０１４９】
データ追記部６５は、クラスタのデータを追記する。
【０１５０】
このような制御部２２によるデータの追記の処理（以下、追記処理と称する）について、図８を参照して説明する。
【０１５１】
[追記処理]
図８は、追記処理の流れについて説明するフローチャートである。
【０１５２】
追記処理は、ユーザによる操作部２１の所定の操作により、開始される。
【０１５３】
ステップＳ３１において、更新判定部６１は、wp−ceof≧min_diff×２になったかを判定する。すなわち、更新判定部６１は、現在追記しているクラスタのオフセット値wpの、現在のキャッシュリンク５１の終端のエントリＥが有するオフセット値ceofに対する差分が、現在のキャッシュリンク５１内で隣接するエントリＥのオフセット値の差分の最小値min_diffの２倍になったかを判定する。
【０１５４】
wp−ceof＜min_diff×２である場合、ステップＳ３１においてＮＯであると判定されて、処理はステップＳ３２に進む。
【０１５５】
ステップＳ３２において、データ追記部５は、クラスタのデータを追記する。すなわち、この場合、キャッシュリンク５１のリンク情報は更新されない。
【０１５６】
クラスタのデータが追記されると、データ追記処理は終了する。なお、制御部２２は、次のデータの追記処理の指示があるまで待機状態となる。
【０１５７】
これに対して、wp−ceof≧min_diff×２となった場合、ステップＳ３１においてＹＥＳであると判定されて、処理はステップＳ３３に進む。すなわち、wp−ceof≧min_diff×２となったタイミングが、キャッシュリンク５１のエントリＥ内のリンク情報の更新及び再利用のタイミングとなる。
【０１５８】
ステップＳ３３において、更新対象決定部６２は、更新対象のエントリＥを決定する。更新対象決定部６２は、更新対象のエントリＥの候補として、各オフセット値の差分がmin_diffとなる隣接する２つのエントリＥの組のうち、キャッシュリンク５１の先頭に最も近い２つのエントリＥの組を選択する。そして、更新対象決定部６２は、選択した２つのエントリＥの組のうち、後ろのエントリＥを、更新対象のエントリＥとして決定する。
【０１５９】
ステップＳ３４において、構造変換部６３は、更新対象のエントリＥを切り離して、前後のエントリＥを繋げる。
【０１６０】
ステップＳ３５において、リンク情報更新部６４は、更新対象のエントリＥのリンク情報を更新する。すなわち、リンク情報更新部６４は、更新対象のエントリＥのリンク情報を、追記されたクラスタのリンク情報に更新する。
【０１６１】
ステップＳ３６において、構造変換部６３は、更新対象のエントリＥをキャッシュリンク５１の最後に繋ぐ。更新対象のエントリＥがキャッシュリンク５１の最後に繋げられると、処理はステップＳ３２に進む。
【０１６２】
ステップＳ３２において、データ追記部５は、クラスタのデータを追記する。すなわち、この場合、キャッシュリンク５１が更新されるとともに、クラスタのデータが追記される。
【０１６３】
これにより、追記処理は終了する。
【０１６４】
上述の例では、所定のファイルの先頭からのオフセット値が５毎に、キャッシュリンク５１のキャッシュポイントが設定された。しかしながら、キャッシュリンク５１のキャッシュポイントの間隔はこれに限定されず、任意の間隔が採用されてもよい。また、データ追記後は、キャッシュリンク５１のキャッシュポイントの間隔が、データ追記前の２倍の間隔に設定された。しかしながら、データ追記後のキャッシュリンク５１のキャッシュポイントの間隔はこれに限定されず、データ追記前のキャッシュポイントの間隔よりも広ければ足りる。
【０１６５】
このように、データ追記によりFAT４１のサイズが大きくなっても、キャッシュリンク５１のサイズは変更されずに、新たなリンク情報を含むキャッシュリンク５１が生成される。したがって、クラスタリンクキャッシュ２３のメモリサイズが限られている場合であっても、新たなリンク情報を含むキャッシュリンク５１を記録することができる。
【０１６６】
また、新たなリンク情報を含むキャッシュリンク５１が生成される場合、データ追記前のキャッシュリンク５１の一部のエントリＥに含めるリンク情報が、データ追記後のクラスタのリンク情報に更新されて、当該エントリＥが再利用される。したがって、キャッシュリンク５１の生成時間を短縮することができ、結果として書き込みの処理速度を向上させることができる。
【０１６７】
また、データ追記後も、新たなリンク情報を含むキャッシュリンク５１を参照することにより、FATをReadポイントから辿ることができる。したがって、データ追記後でも、従来のようにFATを先頭から辿る場合と比較して、処理速度を向上させることが可能になる。
【０１６８】
[本技術のプログラムへの適用]
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウェアにより実行させることもできる。
【０１６９】
この場合、上述した情報処理装置の少なくとも一部として、例えば、図９に示されるパーソナルコンピュータを採用してもよい。
【０１７０】
図９において、CPU１０１は、ROM（Read Only Memory）１０２に記録されているプログラムにしたがって各種の処理を実行する。またはCPU１０１は、記憶部１０８からRAM（Random Access Memory）１０３にロードされたプログラムにしたがって各種の処理を実行する。RAM１０３にはまた、CPU１０１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【０１７１】
CPU１０１、ROM１０２、及びRAM１０３は、バス１０４を介して相互に接続されている。このバス１０４にはまた、入出力インタフェース１０５も接続されている。
【０１７２】
入出力インタフェース１０５には、キーボード、マウスなどよりなる入力部１０６、ディスプレイなどよりなる出力部１０７が接続されている。また、ハードディスクなどより構成される記憶部１０８、及び、モデム、ターミナルアダプタなどより構成される通信部１０９が接続されている。通信部１０９は、インターネットを含むネットワークを介して他の装置（図示せず）との間で行う通信を制御する。
【０１７３】
入出力インタフェース１０５にはまた、必要に応じてドライブ１１０が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどよりなるリムーバブルメディア１１１が適宜装着される。そして、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部１０８にインストールされる。
【０１７４】
一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
【０１７５】
このようなプログラムを含む記録媒体は、図９に示されるように、装置本体とは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク（フロッピディスクを含む）、光ディスク（CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む）、光磁気ディスク（MD（Mini-Disk）を含む）、もしくは半導体メモリなどよりなるリムーバブルメディア（パッケージメディア）１１１により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM１０２や、記憶部１０８に含まれるハードディスクなどで構成される。
【０１７６】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、その順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１７７】
本技術の実施の形態は、上述した実施の形態に限定されるものではなく、本技術の要旨を逸脱しない範囲において種々の変更が可能である。
【０１７８】
なお、本技術は、以下のような構成もとることができる。
（１）
FATファイルシステムにより、所定の記録媒体に、複数のクラスタが記録されるとともに、前記複数のクラスタのリンク情報から構成されるFATが記録されている場合、前記FATから抽出された前記リンク情報を含む情報からなるエントリが、所定間隔のクラスタ毎に配置されて構成されるキャッシュリンクをキャッシュするキャッシュリンク保持部と、
前記記録媒体上の前記クラスタにデータが追記されて、前記キャッシュリンクを更新する場合、前記キャッシュリンクを構成する複数の前記エントリのうち、更新対象のエントリについて、前記情報を更新する情報更新部と、
前記情報更新部により更新された前記更新対象のエントリを、前記キャッシュリンクのもとの位置から切り離して、前記キャッシュリンクの最後尾に繋げる構造変換部とを備える
情報処理装置。
（２）
前記エントリは、前記情報として、オフセット値、クラスタ番号、及び連続クラスタ数を含む
前記（１）に記載の情報処理装置。
（３）
前記キャッシュリンクの最終エントリに含まれる前記オフセット値から、追記対象のクラスタのオフセット値までの距離に基づいて、前記キャッシュリンクは更新される
前記（１）または（２）に記載の情報処理装置。
（４）
前記キャッシュリンクの最終エントリに含まれるオフセット値から、追記対象のクラスタのオフセット値までの距離が、前記キャッシュリンク内で隣接する前記エントリの前記オフセット値の差分の最小値の所定の倍数となった場合に、前記キャッシュリンクは更新される
前記（１）、（２）、または（３）に記載の情報処理装置。
【０１７９】
本技術は、FATファイルシステムを用いる情報処理装置に適用することができる。
【符号の説明】
【０１８０】
１  ファイル管理システム，  １０  ファイル管理装置，  １１  記録媒体，  ２１  操作部，  ２２  制御部，  ２３  クラスタリンクキャッシュ，  ２４  入力部，  ２５  書き込み部，  ２６  読み出し部，  ２７  出力部，  ４１  FAT，  ４２  データ領域，  ５１  キャッシュリンク，  ６１  更新判定部，  ６２  更新対象決定部，  ６３  構造変換部，  ６４  リンク情報更新部，  ６５  データ追記部
【図１】
2013003701.tif 000003
【図２】
2013003701.tif 000004
【図３】
2013003701.tif 000005
【図４】
2013003701.tif 000006
【図５】
2013003701.tif 000007
【図６】
2013003701.tif 000008
【図７】
2013003701.tif 000009
【図８】
2013003701.tif 000010
【図９】
2013003701.tif 000011