(57)【要約】【課題】記録媒体に記録されているパラメータ（例えば、クラスタサイズ情報）に応じて、キャッシュの構造（例えば、キャッシュブロックのサイズ）を変更できるようにする。【解決手段】パラメータ取得部４２１は、小型メモリカードが装着されたのを検知すると、小型メモリカードから、ディレクトリキャッシュの構造を決定するのに必要なパラメータ（例えば、クラスタサイズ情報）を取得し、取得したパラメータを、キャッシュ構造決定部４２２に通知する。キャッシュ構造決定部４２２は、パラメータ取得部４２１から通知されたパラメータ（クラスタサイズ情報）に基づいて、ＲＡＭの一部の領域に確保されたディレクトリキャッシュの構造（キャッシュブロックのサイズや、キャッシュブロックの数）を決定する。キャッシュ制御部４２３は、キャッシュ構造決定部４２２によって決定されたキャッシュ構造に従って、ディレクトリキャッシュの制御を行う。【選択図】図４
2008171212.tif 000002
【特許請求の範囲】
【請求項１】
記録媒体に記録されるファイルの管理を行うファイル管理装置であって、
前記ファイルに関するデータを格納するキャッシュと、
前記記録媒体に記録されているパラメータを取得するパラメータ取得部と、
前記パラメータ取得部によって取得されたパラメータに基づいて、前記キャッシュの構造を決定するキャッシュ構造決定部と、
前記キャッシュ構造決定部によって決定された構造に従って、前記キャッシュの制御を行うキャッシュ制御部と
を備えたことを特徴とするファイル管理装置。
【請求項２】
前記パラメータは、ファイル管理単位のサイズ情報であり、
前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、前記キャッシュの構造を決定する
ことを特徴とする請求項１に記載のファイル管理装置。
【請求項３】
前記ファイル管理単位は、クラスタである
ことを特徴とする請求項２に記載のファイル管理装置。
【請求項４】
前記キャッシュは、ディレクトリエントリ・データを格納する
ことを特徴とする請求項１〜３のいずれか一項に記載のファイル管理装置。
【請求項５】
前記記録媒体は、当該ファイル管理装置に対して着脱可能であり、
前記パラメータ取得部は、前記記録媒体が当該ファイル管理装置に装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得する
ことを特徴とする請求項１〜４のいずれか一項に記載のファイル管理装置。
【請求項６】
記録媒体に記録されるファイルの管理を行うプログラムであって、コンピュータを、
前記記録媒体に記録されているパラメータを取得するパラメータ取得部、
前記パラメータ取得部によって取得されたパラメータに基づいて、キャッシュの構造を決定するキャッシュ構造決定部、及び、
前記キャッシュ構造決定部によって決定された構造に従って、キャッシュの制御を行うキャッシュ制御部
として機能させるためのプログラム。
【請求項７】
前記パラメータは、ファイル管理単位のサイズ情報であり、
前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、キャッシュの構造を決定する
ことを特徴とする請求項６に記載のプログラム。
【請求項８】
前記ファイル管理単位は、クラスタである
ことを特徴とする請求項７に記載のプログラム。
【請求項９】
前記キャッシュ制御部は、前記記録媒体からディレクトリエントリ・データを読み出して、前記キャッシュに格納する
ことを特徴とする請求項６〜８のいずれか一項に記載のプログラム。
【請求項１０】
前記パラメータ取得部は、前記記録媒体が前記コンピュータに装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得する
ことを特徴とする請求項６〜９のいずれか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、各種記録媒体（例えば、フラッシュメモリを利用した各種メモリカード）に記録されるファイルの操作（作成、削除、読み出し、書き込み等）を行うファイル管理プログラム（ファイルシステム）に関する。
【背景技術】
【０００２】
現在、様々な応用分野で組込み機器（組み込みシステム）が広く利用されているが、組込み機器で、小型メモリカード等の記録媒体にファイルを記録等しようとすると、ファイルの操作・管理を行うファイル管理プログラム（以下、ファイルシステムという）が必要となる。当該ファイルシステムは、一般のコンピュータシステムでは、オペレーティングシステムの機能の一部として提供されるが、組込み機器では、ミドルウェアとして提供されることが多い。また、組込み機器で利用されるファイルシステムの具体的な方式としては、通常のコンピュータシステムでも利用されているＦＡＴファイルシステムが挙げられる。
【０００３】
ＦＡＴファイルシステムでは、ファイルを構成するデータの管理をクラスタと呼ばれる単位で行う。一方、ファイルが格納（記録）される小型メモリカードに対するアクセスは、ハードディスク装置と同様に、セクタと呼ばれる単位で行われ、通常、１セクタ＝５１２バイトである。一つのクラスタは、一つ又は複数（２，４，８等の２のべき乗個）の連続するセクタで構成される。実際に各記録媒体において一つのクラスタをいくつのセクタで構成するかは、通常、記録媒体の容量に応じて、論理フォーマット時に適宜決定される。すなわち、クラスタのサイズ（アロケーションユニットサイズ）は、各記録媒体毎に異なり得ることになる。
【０００４】
このようなＦＡＴファイルシステムにおいて、ファイルやディレクトリに関する操作を高速化するための一つの手法として、ディレクトリキャッシュを設けることが考えられる。ディレクトリキャッシュとは、ディレクトリエントリ・データ（ファイルやディレクトリの名前、属性、更新日時、開始クラスタ番号、サイズ等の情報）を一時的に記憶する記録領域であって、例えば、メインメモリの一部の領域に確保され、記録媒体から読み出されたディレクトリエントリ・データを適宜記憶しておくことにより、ファイルやディレクトリについての操作を行う際に、ディレクトリエントリ・データを（メインメモリに比べて）アクセスに時間がかかる記録媒体からいちいち読み出すことを不要にして、アクセスの高速化を実現するものである。すなわち、ディレクトリキャッシュも、マイクロプロセッサ等が備えるキャッシュと同様に、アクセスの時間的局所性及び空間的局所性を利用してアクセスの高速化を図るものである。
【０００５】
なお、特開２００６−１２７３７７号公報には、ディレクトリ構造の解析および管理や更新を行うディレクトリエントリ操作部や、セクタサイズで区切られた複数のバッファキャッシュを、参照数、セクタ番号、過去のアクセス履歴およびデータ種別により管理するバッファキャッシュ操作部等を備えたＦＡＴファイルシステムが開示されている。
【０００６】
しかしながら、当該公報に記載のＦＡＴファイルシステムでは、バッファキャッシュはセクタサイズで区切られており、各バッファキャッシュ（キャッシュブロック）のサイズは固定であった。
【特許文献１】特開２００６−１２７３７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明の目的は、記録媒体に記録されているパラメータ（例えば、ファイルの管理単位であるクラスタのサイズ情報）に応じて、キャッシュの構造（例えば、キャッシュブロックのサイズ）を変更できるようにすることにある。
【課題を解決するための手段】
【０００８】
本発明に係るファイル管理装置は、記録媒体に記録されるファイルの管理を行うファイル管理装置であって、前記ファイルに関するデータを格納するキャッシュと、前記記録媒体に記録されているパラメータを取得するパラメータ取得部と、前記パラメータ取得部によって取得されたパラメータに基づいて、前記キャッシュの構造を決定するキャッシュ構造決定部と、前記キャッシュ構造決定部によって決定された構造に従って、前記キャッシュの制御を行うキャッシュ制御部とを備えたことを特徴とする。
【０００９】
この場合において、前記パラメータは、ファイル管理単位（例えば、クラスタ）のサイズ情報であり、前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、前記キャッシュの構造を決定するようにしてもよい。
【００１０】
また、以上の場合において、前記キャッシュは、ディレクトリエントリ・データを格納するようにしてもよい。また、前記記録媒体は、当該ファイル管理装置に対して着脱可能であり、前記パラメータ取得部は、前記記録媒体が当該ファイル管理装置に装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得するようにしてもよい。
【００１１】
本発明に係るプログラムは、記録媒体に記録されるファイルの管理を行うプログラムであって、コンピュータを、前記記録媒体に記録されているパラメータを取得するパラメータ取得部、前記パラメータ取得部によって取得されたパラメータに基づいて、キャッシュの構造を決定するキャッシュ構造決定部、及び、前記キャッシュ構造決定部によって決定された構造に従って、キャッシュの制御を行うキャッシュ制御部として機能させるためのプログラムである。
【００１２】
この場合において、前記パラメータは、ファイル管理単位（例えば、クラスタ）のサイズ情報であり、前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、キャッシュの構造を決定するようにしてもよい。
【００１３】
また、以上の場合において、前記キャッシュ制御部は、前記記録媒体からディレクトリエントリ・データを読み出して、前記キャッシュに格納するようにしてもよい。また、前記パラメータ取得部は、前記記録媒体が前記コンピュータに装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得するようにしてもよい。
【００１４】
なお、上記プログラムは、光ディスク（例えば、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ）等の可搬記録媒体や、各種ネットワークを介して頒布することができる。
【発明の効果】
【００１５】
本発明によれば、記録媒体に記録されているパラメータ（例えば、クラスタのサイズ情報）に応じて、キャッシュの構造（例えば、キャッシュブロックのサイズ）を変更することが可能になる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態について、図面を参照しつつ詳細に説明する。
【００１７】
図１は、本発明によるファイル管理装置を構成するコンピュータシステムのハードウェア構成例を示す図である。本発明によるファイル管理装置は、例えば、各種組込み機器に組み込まれて利用される。
【００１８】
同図に示すように、本発明によるファイル管理装置１００は、ＣＰＵ１０１と、ＲＯＭ１０２と、ＲＡＭ１０３と、ＲＴＣ１０４と、メモリカードインタフェース（Ｉ／Ｆ）部１０５とを備え、各構成要素１０１〜１０５は、バス１１０に接続されている。また、メモリカードインタフェース部１０５には、小型メモリカード１０６が接続される。
【００１９】
ＣＰＵ１０１は、ＲＯＭ１０２やＲＡＭ１０３に格納されたプログラムを実行することで、ファイル管理装置１００が提供する各種機能を実現する中央処理装置である。
【００２０】
ＲＯＭ１０２は、ＣＰＵ１０１が利用するプログラムやデータを記憶する読み出し専用の記憶装置（メモリ）である。
【００２１】
ＲＡＭ１０３は、ＣＰＵ１０１が利用するプログラムやデータを一時的に記憶する読み書き可能な記憶装置（メモリ）である。本実施形態においては、ＲＡＭ１０３の一部の領域が、後述するディレクトリキャッシュとして利用される。
【００２２】
ＲＴＣ１０４は、計時を行うリアルタイムクロックであり、現在時データ（日付、時刻）を提供するものである。ＣＰＵ１０１は、例えば、ファイルやディレクトリの更新を行った際に、ＲＴＣ１０４から現在時データを取得して、該当するディレクトリエントリの更新日時データを更新する。
【００２３】
メモリカードインタフェース部１０５は、ファイル管理装置１００に対して着脱可能な小型メモリカード１０６に対するデータの読み書きを可能にするものであり、例えば、小型メモリカード１０６を装着するためのスロットと、当該スロットをバス１１０に接続するためのバッファとによって構成される。
【００２４】
小型メモリカード１０６は、メモリカードインタフェース部１０５に接続されて利用される着脱可能な記録媒体（リムーバブルメディア）であって、例えば、コンパクトフラッシュ（登録商標）カードによって構成される。小型メモリカード１０６は、ＦＡＴファイルシステムが構築されるように予め論理フォーマットされている。
【００２５】
図２は、ＦＡＴファイルシステムが構築された小型メモリカード１０６の論理構成を示す図である。なお、ここでは、ＦＡＴ３２の場合を例にして説明する。
【００２６】
同図に示すように、小型メモリカード１０６は、ＭＢＲ２１０と、ＰＢＳ２２０と、ＦＡＴ領域２３０と、データ領域２４０とを備える。
【００２７】
ＭＢＲ２１０は、マスターブートレコードであり、ＭＢＲ２１０には、パーティションテーブル等が格納されている。ＰＢＳ２２０は、パーティションブートセクタであり、ＰＢＳ２２０には、ＢＰＢ２２１等が含まれている。ＢＰＢ２２１は、ＢＩＯＳパラメータブロックであり、ＢＰＢ２２１には、小型メモリカード１０６に関する各種パラメータ、例えば、セクタサイズ（１セクタあたりのバイト数）、クラスタサイズ（１クラスタあたりのセクタ数）等が記録されている。
【００２８】
ＦＡＴ領域２３０は、ファイルアロケーションテーブル（ＦＡＴ）及びそのバックアップコピーが格納される領域であり、ＦＡＴの各エントリは、小型メモリカード１０６上の各クラスタに対応している。そして、ＦＡＴの各エントリには、対応するクラスタが空きであることを示す値（０）か、対応するクラスタがファイルの最終クラスタであることを示す値（0x0FFFFFFF）（0xは16進数を表す）か、ファイルを構成する次のクラスタを示す値（クラスタ番号）のいずれかの値が格納される。
【００２９】
データ領域２４０は、ファイルやディレクトリを構成するデータが格納される領域である。なお、ディレクトリとは、概念的にはファイルを格納する入れ物であるが、その実体は、ディレクトリ属性が与えられたファイルであり、当該ファイルには、ディレクトリエントリ・データが格納される。ディレクトリエントリ・データとは、ディレクトリに格納されているファイル（ディレクトリを含む）を管理するための３２バイトのデータであり、ファイルの名前、属性（例えば、ディレクトリであることや、システムファイルであること等を示す情報）、更新日時、ファイルの開始クラスタ番号、ファイルのサイズ等を示すデータによって構成される。なお、ここでは簡単のため、ファイル名は、すべてショートファイル名（いわゆる８．３形式）であるとし、ロングファイル名（ＶＦＡＴ）については考慮しない。
【００３０】
図３は、ファイル管理装置１００のソフトウェア構成例を示す図である。
【００３１】
同図に示すように、ファイル管理装置１００は、アプリケーション３１０と、ファイルシステム３２０と、デバイスドライバ３３０とを備える。なお、アプリケーション３１０とファイルシステム３２０とデバイスドライバ３３０とはリンクされて、ＣＰＵ１０１が実行可能な一つのプログラムにされる。
【００３２】
アプリケーション３１０は、ファイルシステム３２０に対して、各種ファイル操作の指示等を行うユーザプログラムである。アプリケーション３１０は、例えば、ファイルシステム３２０が提供するＡＰＩ関数を呼び出すことで、各種ファイル操作の指示を行う。
【００３３】
ファイルシステム３２０は、アプリケーション３１０からの指示に応じて、各種ファイル操作（作成、削除、読み出し、書き込み等）を行うミドルウェアである。ファイルシステム３２０は、デバイスドライバ３３０を介して、小型メモリカード１０６を制御し、アプリケーション３１０から指示されたファイル操作を行う。また、ファイルシステム３２０は、このようなファイル操作の高速化を図るため、ＲＡＭ１０３上に確保されたディレクトリキャッシュの制御を行う。
【００３４】
デバイスドライバ３３０は、ファイルシステム３２０からの指示に応じて、小型メモリカード１０６を制御して、小型メモリカード１０６に対するデータの読み書き等を行う制御プログラムである。例えば、デバイスドライバ３３０は、小型メモリカード１０６に対して、セクタ単位のリード、セクタ単位のライト、ハードウェア初期化、マウント、アンマウント等の処理を行う。なお、デバイスドライバ３３０は、ファイルを格納する小型メモリカードその他の記憶装置（ストレージデバイス）のタイプ毎に適当なものが用意される。
【００３５】
図４は、ファイルシステム３２０の機能構成を示す図である。なお、同図では、簡単のため、ディレクトリキャッシュを制御するための機能部のみを示している。
【００３６】
同図に示すように、ファイルシステム３２０は、パラメータ取得部４２１と、キャッシュ構造決定部４２２と、キャッシュ制御部４２３とを備える。
【００３７】
パラメータ取得部４２１は、ファイル管理装置１００に、小型メモリカード１０６が装着されたのを検知すると、小型メモリカード１０６から、ディレクトリキャッシュの構造を決定するのに必要なパラメータ（例えば、ファイルを構成するデータの管理単位であるクラスタのサイズを示す情報）を取得し、取得したパラメータを、キャッシュ構造決定部４２２に通知するものである。パラメータ取得部４２１は、例えば、デバイスドライバ３３０を介して、小型メモリカード１０６の装着を検知し、デバイスドライバ３３０を介して、小型メモリカード１０６からパラメータ（クラスタサイズ情報）を取得する。
【００３８】
キャッシュ構造決定部４２２は、パラメータ取得部４２１から通知されたパラメータ（クラスタサイズ情報）に基づいて、ＲＡＭ１０３の一部の領域に確保されたディレクトリキャッシュの構造（キャッシュブロックのサイズや、キャッシュブロックの数）を決定するものである。例えば、各キャッシュブロックのサイズを、パラメータ取得部４２１から通知されるクラスタサイズに一致させる。このように、各キャッシュブロックのサイズを、ファイルの管理単位であるクラスタのサイズに一致させることにより、限られたサイズを有するディレクトリキャッシュを、効率的に利用しつつ、小型メモリカード１０６へのアクセスを最小限にすることが可能となる。
【００３９】
キャッシュ制御部４２３は、キャッシュ構造決定部４２２によって決定されたキャッシュ構造に従って、ディレクトリキャッシュの制御を行うものである。すなわち、キャッシュ構造決定部４２２によってサイズが決定されたキャッシュブロック単位で、小型メモリカード１０６からディレクトリキャッシュ上にデータを読み出したり、ディレクトリキャッシュから小型メモリカード１０６へデータを書き込んだりすること等を行う。
【００４０】
次に、以上のような構成を有するファイル管理装置１００の動作について説明する。
【００４１】
まず、小型メモリカード１０６がファイル管理装置１００に装着された際の動作について説明する。
【００４２】
図５は、小型メモリカード１０６がファイル管理装置１００に装着された際の動作を説明するためのフローチャートである。同図に示した処理は、ファイル管理装置１００が、小型メモリカード１０６が装着されたことを検知した際に実行される処理である。すなわち、ファイルシステム３２０が提供するマウント処理の中で行われる処理である。
【００４３】
ファイル管理装置１００（パラメータ取得部４２１）は、小型メモリカード１０６が装着されたことを検知すると、装着された小型メモリカード１０６のブートセクタ２２０からＢＰＢ２２１を読み込み、小型メモリカード１０６に関するパラメータを取得する（Ｓ５０１）。前述したように、当該パラメータには、クラスタサイズ情報が含まれている。クラスタサイズ情報は、１クラスタが何個のセクタで構成されているかの情報であり、例えば、１クラスタ＝４セクタの場合は、クラスタサイズ情報＝４となる。
【００４４】
次に、ファイル管理装置１００（キャッシュ構造決定部４２２）は、ＢＰＢ２２１に含まれているクラスタサイズ情報に基づいて、ディレクトリキャッシュのキャッシュブロックのサイズと数とを定める（Ｓ５０２）。例えば、クラスタサイズ＝４の場合は、キャッシュブロックのサイズがクラスタサイズと等しくなるように、キャッシュブロックサイズ＝４（セクタ）とし、キャッシュブロック数＝キャッシュサイズ／（キャッシュブロックサイズ×セクタサイズ＋制御データサイズ）とする。例えば、キャッシュサイズ＝１１Ｋバイト、キャッシュブロックサイズ＝４セクタ、セクタサイズ＝５１２バイト、制御データサイズ＝６バイトとすると、キャッシュブロック数＝１１Ｋ／（４＊５１２＋６）＝５（小数点以下切り捨て）となる。また、キャッシュサイズ＝１１Ｋバイト、キャッシュブロックサイズ＝８セクタ、セクタサイズ＝５１２バイト、制御データサイズ＝６バイトとすると、キャッシュブロック数＝１１Ｋ／（８＊５１２＋６）＝２（小数点以下切り捨て）となる。なお、制御データとは、後述するセクタ番号と優先順位データである。また、キャッシュサイズは、ディレクトリキャッシュとして利用されるメモリ領域のサイズであり、例えば、ユーザによって指定される。また、ここでは、セクタサイズ＝５１２バイト固定であるとするが、セクタサイズについても、クラスタサイズと同様に、ＢＰＢ２２１に含まれているセクタサイズ情報を利用することも考えられる。
【００４５】
以上のようにして、小型メモリカード１０６に記録されているパラメータであるクラスタサイズ情報に基づいてディレクトリキャッシュの構造が決められる。
【００４６】
このように、ファイル管理装置１００（ファイルシステム３２０）では、小型メモリカード１０６が装着されたこと検知すると、装着された小型メモリカード１０６から、小型メモリカード１０６に関するパラメータ（クラスタサイズ情報）を取得し、取得したパラメータに基づいて、ディレクトリキャッシュの構造を自動的に決定するようにしているので、複数の小型メモリカード１０６を抜き差ししながら利用する場合等であっても、ディレクトリキャッシュの構造を、現在、装着されている小型メモリカード１０６に適したものにすることが可能となる。また、当該処理は、ファイルシステム３２０が提供するマウント処理の中で自動的に行われるので、例えば、ユーザ（アプリケーション３１０）は、ディレクトリキャッシュとして利用するメモリ領域（先頭アドレス及びサイズ）を予め指定をするだけで、ディレクトリキャッシュに割り当てた限られた大きさのメモリ領域を、各小型メモリカード１０６に適した形態で利用することが可能となる。
【００４７】
図６は、小型メモリカード１０６に記録されているクラスタサイズ情報に基づいて決定されたディレクトリキャッシュの構造を示す図である。なお、同図（ａ）は、クラスタサイズ情報＝４，キャッシュブロック数＝５の場合について示しており、同図（ｂ）は、クラスタサイズ情報＝８，キャッシュブロック数＝２の場合について示している。
【００４８】
同図に示すように、ディレクトリキャッシュ６００ａ，６００ｂは、セクタ番号領域６１０ａ，６１０ｂと、キャッシュデータ領域６２０ａ，６２０ｂと、優先順位領域６３０ａ，６３０ｂとから構成される。
【００４９】
キャッシュデータ領域６２０ａ，６２０ｂは、キャッシュ対象のデータ（本実施形態では、ディレクトリエントリ・データ）を格納する領域であり、キャッシュ構造決定部４２２によって決定されたキャッシュブロック数に等しい個数（同図（ａ）では５つ、同図（ｂ）では２つ）の領域（以下、キャッシュブロックという）６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂによって構成されている。そして、各キャッシュブロック６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂは、１クラスタ（同図（ａ）では４セクタ、同図（ｂ）では８セクタ）分のデータを格納可能なサイズを有している。
【００５０】
セクタ番号領域６１０ａ，６１０ｂは、キャッシュデータ領域６２０ａ，６２０ｂに格納されているキャッシュデータのセクタ番号を格納する領域である。すなわち、セクタ番号領域６１０ａ，６１０ｂには、キャッシュデータ領域６２０ａ，６２０ｂにキャッシュされている各クラスタの先頭セクタの論理セクタ番号が格納される。セクタ番号領域６１０ａ，６１０ｂも、キャッシュデータ領域６２０ａ，６２０ｂと同様に、キャッシュブロック数に等しい個数の領域６１１ａ〜６１５ａ，６１１ｂ〜６１２ｂによって構成されており、各領域６１１ａ〜６１５ａ，６１１ｂ〜６１２ｂは、キャッシュブロック６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂと一対一に対応づけられている。
【００５１】
例えば、セクタ番号領域６１１ａ，６１１ｂには、キャッシュブロック６２１ａ，６２１ｂに格納されているキャッシュデータ（クラスタ）の先頭セクタの論理セクタ番号（以下、先頭セクタ番号という）が格納され、セクタ番号領域６１２ａ，６１２ｂには、キャッシュブロック６２２ａ，６２２ｂに格納されているキャッシュデータ（クラスタ）の先頭セクタ番号が格納される。セクタ番号領域６１３ａ〜６１５ａについても同様である。
【００５２】
また、各領域６１１ａ〜６１５ａ，６１１ｂ〜６１２ｂのサイズは４バイトである。但し、このうち、下位２８ビットがセクタ番号の格納に利用され、上位４ビット（より具体的には最上位ビット）は、当該領域６１１ａ〜６１５ａ，６１１ｂ〜６１２ｂに対応するキャッシュブロックの内容が変更されていることを示す変更フラグとして利用される。
【００５３】
優先順位領域６３０ａ，６３０ｂは、キャッシュデータ領域６２０ａ，６２０ｂに格納されているキャッシュデータの優先順位データを格納する領域である。優先順位データとは、キャッシュデータ領域６２０ａ，６２０ｂのキャッシュブロック６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂがすべて使用中であるときに、新たに、ディレクトリエントリ・データの読み出しが行われた場合に、新たに読み出されるディレクトリエントリ・データを格納するキャッシュブロックを選択するために利用されるデータである。優先順位データは、キャッシュブロック６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂに対するアクセスが発生するたびに適宜更新されて、ＬＲＵ（Least Recently Used）アルゴリズムに従ったキャッシュブロックの選択（キャッシュデータの置き換え）を実現するために利用される。
【００５４】
優先順位領域６３０ａ，６３０ｂも、キャッシュデータ領域６２０ａ，６２０ｂと同様に、キャッシュブロック数に等しい個数の領域６３１ａ〜６３５ａ，６３１ｂ〜６３２ｂによって構成されており、各領域６３１ａ〜６３５ａ，６３１ｂ〜６３２ｂは、キャッシュブロック６２１ａ〜６２５ａ，６３１ｂ〜６３２ｂと一対一に対応づけられている。
【００５５】
例えば、優先順位領域６３１ａ，６３１ｂには、キャッシュブロック６２１ａ，６２１ｂに格納されているキャッシュデータの優先順位データが格納され、優先順位領域６３２ａ，６３２ｂには、キャッシュブロック６２２ａ，６２２ｂに格納されているキャッシュデータの優先順位データが格納される。優先順位領域６３３ａ〜６３５ａについても同様である。また、各領域６３１ａ〜６３５ａ，６３１ｂ〜６３２ｂのサイズは２バイトである。
【００５６】
次に、以上のようにしてディレクトリキャッシュ構造が決定されたファイル管理装置１００の動作について説明する。
【００５７】
以下では、ディレクトリ作成時の動作について説明する。
【００５８】
図７は、ディレクトリ作成時のファイル管理装置１００の動作を説明するためのフローチャートである。ここでは、アプリケーション３１０から、"Ａ：￥ＤＩＲ"というディレクトリの作成を指示された場合の処理について説明する。
【００５９】
同図に示すように、まず、アプリケーション３１０から指定されたディレクトリ（"ＤＩＲ"）と同じ名前のファイル又はディレクトリが、既に、作成場所に指定されたルートディレクトリに存在するか否かを調べるため、ディレクトリ検索処理を行う（Ｓ７０１）。当該処理の詳細については後述する。
【００６０】
ディレクトリ検索処理の結果、既に同じ名前のファイル又はディレクトリが存在する場合は（Ｓ７０２：Ｙｅｓ）、アプリケーション３１０にエラーを通知し（Ｓ７０７）、処理を終了する。
【００６１】
一方、同じ名前のファイルやディレクトリが存在しない場合は（Ｓ７０２：Ｎｏ）、次に、ＦＡＴを参照して、空きクラスタを検索する（Ｓ７０３）。
【００６２】
検索の結果、空きクラスタがなければ（Ｓ７０４：Ｎｏ）、アプリケーション３１０にエラー（DISKFULL）を通知し（Ｓ７０７）、処理を終了する。
【００６３】
一方、空きクラスタが見つかった場合は（Ｓ７０４：Ｙｅｓ）、見つかった空きクラスタを指定ディレクトリ（"ＤＩＲ"）に割り当て、作成場所に指定されたルートディレクトリに、指定ディレクトリ（"ＤＩＲ"）のディレクトリエントリを作成するため、ディレクトリエントリ作成処理を行う（Ｓ７０５）。当該処理の詳細については後述する。
【００６４】
ディレクトリエントリ作成処理が終了すると、次に、今回作成したディレクトリの初期化処理を行う（Ｓ７０６）。すなわち、指定ディレクトリ（"ＤＩＲ"）に割り当てられたクラスタを、ゼロクリアするとともに、当該クラスタに、ドット（.）及びドットドット（..）のディレクトリエントリを作成する。ドット（.）は、自分自身を指し示すディレクトリであり、ドットドット（..）は、自分の親ディレクトリ（この場合、ルートディレクトリ）を指し示すディレクトリである。なお、当該初期化処理では、クラスタデータの書き込み時に、キャッシュブロックの割り当ては行われず、小型メモリカード１０６に対して直接書き込みが行われる。
【００６５】
以上のようにして、ファイル管理装置１００において、ディレクトリの作成が行われる。
【００６６】
次に、前述したディレクトリ検索処理Ｓ７０１の詳細について説明する。
【００６７】
図８は、ディレクトリ検索処理Ｓ７０１を説明するためのフローチャートである。前述したように、当該処理は、指定ディレクトリ（"ＤＩＲ"）と同じ名前のファイル又はディレクトリが、既に、作成場所に指定されたルートディレクトリに存在するか否かを調べる処理である。すなわち、当該処理では、ルートディレクトリのディレクトリデータ（ルートディレクトリに格納されているファイルやディレクトリのディレクトリエントリ・データ）が必要になる。
【００６８】
そのため、まず、同図に示すように、ルートディレクトリのディレクトリデータを１クラスタ分読み込むディレクトリ読み込み処理を行う（Ｓ８０１）。ディレクトリ読み込み処理は、必要なディレクトリデータがディレクトリキャッシュ上に存在するか否かを調べ、存在しない場合は、小型メモリカード１０６からディレクトリキャッシュ上に必要なディレクトリデータを１クラスタ分読み込む処理である。当該処理の詳細については後述する。
【００６９】
ディレクトリ読み込み処理が終了すると、次に、当該処理で読み出されたルートディレクトリの先頭クラスタデータを検索して、指定ディレクトリ（"ＤＩＲ"）と同じ名前のファイル又はディレクトリが存在するか否かを調べる（Ｓ８０２）。すなわち、クラスタデータの先頭から３２バイト毎にディレクトリエントリ・データを切り出して、各ディレクトリエントリの名前フィールドに格納されている名前と、指定ディレクトリの名前（"ＤＩＲ"）とを比較して、一致するものがあるか否かを調べる。
【００７０】
検索の結果、一致するものが存在した場合は（Ｓ８０３：Ｙｅｓ）、ルートディレクトリには、既に、指定ディレクトリと同じ名前のファイル又はディレクトリが存在していると判定して（Ｓ８０４）、処理を終了する。
【００７１】
一方、一致するものが存在しなかった場合は（Ｓ８０３：Ｎｏ）、ルートディレクトリのすべてのディレクトリエントリについて処理を終了したか否かを判別する（Ｓ８０５）。全ディレクトリエントリについて処理を終了したか否かは、例えば、ディレクトリキャッシュ上に読み出したクラスタに、第一バイトが0x00のディレクトリエントリが存在するか否かや、当該クラスタが最終クラスタであるか否かによって判別される。
【００７２】
判別の結果、未だすべてのディレクトリエントリについて処理を終了していない場合は、（Ｓ８０５：Ｎｏ）、ＦＡＴを参照して、ルートディレクトリを構成する次のクラスタを特定し（Ｓ８０６）、当該クラスタデータの読み込みを行うため、再度、前述したディレクトリ読み込み処理を行う（Ｓ８０１）。そして、当該処理によって読み出されたクラスタデータを解析して、指定ディレクトリ（"ＤＩＲ"）と同じ名前のファイル又はディレクトリが存在するか否かを調べる（Ｓ８０２）。このようなディレクトリ読み込み処理Ｓ８０１及び名前検索処理Ｓ８０２は、指定ディレクトリの名前（"ＤＩＲ"）と同名のファイル又はディレクトリが見つかるまで順次行われる。その結果、ルートディレクトリのすべてのディレクトリエントリについて調べても、指定ディレクトリ（"ＤＩＲ"）と同じ名前のファイルやディレクトリが見つからなかった場合は（Ｓ８０５：Ｙｅｓ）、ルートディレクトリには、指定ディレクトリと同じ名前のファイルやディレクトリは存在しないと判定して（Ｓ８０７）、処理を終了する。
【００７３】
以上のようにして、ディレクトリ検索処理Ｓ７０１が行われる。
【００７４】
次に、前述したディレクトリ読み込み処理Ｓ８０１の詳細について説明する。
【００７５】
図９は、ディレクトリ読み込み処理Ｓ８０１を説明するためのフローチャートである。前述したように、当該処理は、読み込み対象ディレクトリであるルートディレクトリのディレクトリデータを１クラスタ分読み込む処理である。なお、読み込み対象となるクラスタは、当該処理を呼び出す際に指定されるものとする。より具体的には、読み込み対象となるクラスタの先頭セクタ番号が指定されて、当該処理が呼び出される。
【００７６】
同図に示すように、まず、ルートディレクトリの読み込み対象クラスタが、ディレクトリキャッシュ上に存在するか否か、すなわち、キャッシュヒットしているか否かを調べる（Ｓ９０１）。具体的には、読み込み対象クラスタの先頭セクタ番号が、ディレクトリキャッシュのセクタ番号領域に存在するか否か調べる。
【００７７】
その結果、読み込み対象クラスタが、ディレクトリキャッシュ上に存在していた場合は（Ｓ９０１：Ｙｅｓ）、読み込み対象クラスタのデータが格納されているキャッシュブロックの位置を、当該処理を呼び出した処理（上位関数）に通知して（Ｓ９０８）、処理を終了する。
【００７８】
一方、読み込み対象クラスタが、ディレクトリキャッシュ上に存在しなかった場合は（Ｓ９０１：Ｎｏ）、小型メモリカード１０６から、読み込み対象クラスタを読み出して、ディレクトリキャッシュに格納することが必要となる。そのためには、まず、小型メモリカード１０６から読み出されるクラスタデータを格納するキャッシュブロックを選定する（Ｓ９０２）。当該選定は、ＬＲＵアルゴリズムに従って行われる。すなわち、ディレクトリキャッシュの優先順位領域を参照して、未使用（優先順位データ＝０）又は優先順位の一番低いキャッシュブロックを選択する。
【００７９】
次に、選定されたキャッシュブロックに格納されているクラスタデータが変更されているか否かを調べるため、選定されたキャッシュブロックに対応するセクタ番号領域から変更フラグを読み出し、変更フラグがセットされているか否かを判別する（Ｓ９０３）。
【００８０】
判別の結果、変更フラグがセットされていた場合、すなわち、選定されたキャッシュブロックに変更されたクラスタデータが格納されている場合は（Ｓ９０３：Ｙｅｓ）、まず、選定されたキャッシュブロックに格納されているクラスタデータを、小型メモリカード１０６に書き込んで（Ｓ９０４）、変更内容を小型メモリカード１０６へ反映させた後に、小型メモリカード１０６から読み込み対象のクラスタデータを読み出して、空いたキャッシュブロックに格納する（Ｓ９０５）。一方、選定されたキャッシュブロックに格納されているデータが変更されていない場合は（Ｓ９０３：Ｎｏ）、そのまま、小型メモリカード１０６から読み込み対象のクラスタデータを読み出して、選定されたキャッシュブロックに格納する（Ｓ９０５）。
【００８１】
以上のようにして、選定されたキャッシュブロックへの読み出しが終了すると、今回クラスタデータを格納したキャッシュブロックに対応するセクタ番号領域（の下位２８ビット）に、当該クラスタの先頭セクタ番号を格納するとともに（Ｓ９０６）、優先順位データを適宜更新する（Ｓ９０７）。そして、読み込み対象クラスタのデータが格納されたキャッシュブロックの位置を、当該処理を呼び出した処理（上位関数）に通知して（Ｓ９０８）、処理を終了する。
【００８２】
以上のようにして、ディレクトリ読み込み処理Ｓ８０１が行われる。
【００８３】
次に、前述したディレクトリエントリ作成処理Ｓ７０５の詳細について説明する。
【００８４】
図１０は、ディレクトリエントリ作成処理Ｓ７０５を説明するためのフローチャートである。当該処理は、前述したように、指定ディレクトリ（"ＤＩＲ"）の作成場所に指定されたルートディレクトリに、指定ディレクトリ（"ＤＩＲ"）のディレクトリエントリを作成する処理である。
【００８５】
同図に示すように、まず、指定ディレクトリのディレクトリエントリを書き込むための空き位置（空きエントリ）を見つけるため、作成場所となるルートディレクトリのディレクトリデータを１クラスタ分読み込むディレクトリ読み込み処理を行う（Ｓ１００１）。当該処理は、図９に示したディレクトリ読み込み処理Ｓ８０１と同様の処理である。
【００８６】
ディレクトリ読み込み処理が終了すると、次に、当該処理で読み出されたルートディレクトリの先頭クラスタデータを解析して、指定ディレクトリのディレクトリエントリを書き込むための空き位置を探す（Ｓ１００２）。すなわち、クラスタデータの先頭から３２バイト毎にディレクトリエントリ・データを切り出して、第一バイトの値が0x00又は0xE5であるディレクトリエントリ・データが存在するか否かを調べる。
【００８７】
その結果、空き位置が見つからなかった場合は（Ｓ１００３：Ｎｏ）、ＦＡＴを参照して、ルートディレクトリを構成する次のクラスタを特定し（Ｓ１００４）、当該クラスタデータの読み込みを行うため、再度、前述したディレクトリ読み込み処理を行う（Ｓ１００１）。そして、読み出されたクラスタデータを解析して、空き位置を探す。このようなルートディレクトリを構成する各クラスタデータの読み出し及び解析は、指定ディレクトリのディレクトリエントリを書き込むための空き位置が見つかるまで順次行われる。なお、途中で、その時点での最終クラスタに達した場合は、空きクラスタの割り当てが適宜行われる。
【００８８】
以上のようにして、指定ディレクトリのディレクトリエントリを書き込むための空き位置が見つかると（Ｓ１００３：Ｙｅｓ）、当該空き位置に、指定ディレクトリのディレクトリエントリ・データを書き込む（Ｓ１００５）。この場合、ディレクトリエントリ・データを書き込むクラスタはディレクトリキャッシュ上に存在するので、実際は、ディレクトリキャッシュへの書き込みが行われる。当該書き込みとともに、該当するキャッシュブロックが書き換えられたことを示す変更フラグをセットする（Ｓ１００６）。すなわち、該当するキャッシュブロックに対応するセクタ番号領域の最上位ビットをセットする。更に、キャッシュブロックへの書き込み（アクセス）が発生したことに伴い、優先順位データを適宜更新し（Ｓ１００７）、処理を終了する。
【００８９】
このように、本実施形態では、いわゆるライトバック方式を採用し、ディレクトリキャッシュへの書き込み時点では、該当するキャッシュブロックが書き換えられたことを示す変更フラグをセットするだけで、小型メモリカード１０６への書き込みは行わずに、書き込み処理の高速化を実現している。なお、変更されたキャッシュブロックデータが小型メモリカード１０６に書き込まれるのは、当該変更されたクラスタデータを格納するキャッシュブロックに別のクラスタデータを読み込むことが必要となった場合（キャッシュブロックデータの置き換えが発生する場合）と、ユーザ（アプリケーション３１０）からの明示的な指示がされた場合のみである。ユーザからの明示的な指示は、例えば、小型メモリカード１０６を取り外す前に行われる。
【００９０】
以上のようにして、ディレクトリエントリ作成処理Ｓ７０５が行われる。
【００９１】
以上説明したように、上述した実施形態によれば、小型メモリカード等の記録媒体に記録されているパラメータ（クラスタサイズ情報）に基づいて、ディレクトリキャッシュの構造を決定することができるので、各記録媒体に適したディレクトリキャッシュ構造をとることが可能となり、ディレクトリキャッシュに割り当てられたメモリ領域を効率的に利用しつつ、処理速度の向上を図ることが可能となる。
【００９２】
以上、本発明の実施形態について説明したが、当然のことながら、本発明の実施形態は上記のものに限られない。例えば、上述した実施形態では、ファイルを格納する記憶装置（ストレージデバイス）として、小型メモリカードを利用していたが、他の記憶装置（例えば、ハードディスク装置）を利用することも考えられる。
【図面の簡単な説明】
【００９３】
【図１】本発明によるファイル管理装置を構成するコンピュータシステムのハードウェア構成例を示す図である。
【図２】小型メモリカード１０６の論理構成を示す図である。
【図３】ファイル管理装置１００のソフトウェア構成例を示す図である。
【図４】ファイルシステム３２０の機能構成を示す図である。
【図５】小型メモリカード１０６がファイル管理装置１００の装着された際の動作を説明するためのフローチャートである。
【図６】ディレクトリキャッシュの構造を示す図である。
【図７】ディレクトリ作成時のファイル管理装置１００の動作を説明するためのフローチャートである。
【図８】ディレクトリ検索処理Ｓ７０１を説明するためのフローチャートである。
【図９】ディレクトリ読み込み処理Ｓ８０１を説明するためのフローチャートである。
【図１０】ディレクトリエントリ作成処理Ｓ７０５を説明するためのフローチャートである。
【符号の説明】
【００９４】
１００    ファイル管理装置
１０１    ＣＰＵ
１０２    ＲＯＭ
１０３    ＲＡＭ
１０４    リアルタイムクロック
１０５    メモリカードインタフェース部
１０６    小型メモリカード
１１０    バス
２１０    マスターブートレコード
２２０    パーティションブートセクタ
２２１    ＢＩＯＳパラメータブロック
２３０    ＦＡＴ領域
２４０    データ領域
３１０    アプリケーション
３２０    ファイルシステム
３３０    デバイスドライバ
４２１    パラメータ取得部
４２２    キャッシュ構造決定部
４２３    キャッシュ制御部
６００ａ，６００ｂ    ディレクトリキャッシュ
６１０ａ〜６１５ａ，６１０ｂ〜６１２ｂ    セクタ番号領域
６２０ａ，６２０ｂ    キャッシュデータ領域
６２１ａ〜６２５ａ，６２１ｂ〜６２２ｂ    キャッシュブロック
６３０ａ〜６３５ａ，６３０ｂ〜６３２ｂ    優先順位領域
【図１】
2008171212.tif 000003
【図２】
2008171212.tif 000004
【図３】
2008171212.tif 000005
【図４】
2008171212.tif 000006
【図５】
2008171212.tif 000007
【図６】
2008171212.tif 000008
【図７】
2008171212.tif 000009
【図８】
2008171212.tif 000010
【図９】
2008171212.tif 000011
【図１０】
2008171212.tif 000012