説明

ファイル管理装置及びプログラム

【課題】記録媒体に記録されているパラメータ(例えば、クラスタサイズ情報)に応じて、キャッシュの構造(例えば、キャッシュブロックのサイズ)を変更できるようにする。
【解決手段】パラメータ取得部421は、小型メモリカードが装着されたのを検知すると、小型メモリカードから、ディレクトリキャッシュの構造を決定するのに必要なパラメータ(例えば、クラスタサイズ情報)を取得し、取得したパラメータを、キャッシュ構造決定部422に通知する。キャッシュ構造決定部422は、パラメータ取得部421から通知されたパラメータ(クラスタサイズ情報)に基づいて、RAMの一部の領域に確保されたディレクトリキャッシュの構造(キャッシュブロックのサイズや、キャッシュブロックの数)を決定する。キャッシュ制御部423は、キャッシュ構造決定部422によって決定されたキャッシュ構造に従って、ディレクトリキャッシュの制御を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、各種記録媒体(例えば、フラッシュメモリを利用した各種メモリカード)に記録されるファイルの操作(作成、削除、読み出し、書き込み等)を行うファイル管理プログラム(ファイルシステム)に関する。
【背景技術】
【0002】
現在、様々な応用分野で組込み機器(組み込みシステム)が広く利用されているが、組込み機器で、小型メモリカード等の記録媒体にファイルを記録等しようとすると、ファイルの操作・管理を行うファイル管理プログラム(以下、ファイルシステムという)が必要となる。当該ファイルシステムは、一般のコンピュータシステムでは、オペレーティングシステムの機能の一部として提供されるが、組込み機器では、ミドルウェアとして提供されることが多い。また、組込み機器で利用されるファイルシステムの具体的な方式としては、通常のコンピュータシステムでも利用されているFATファイルシステムが挙げられる。
【0003】
FATファイルシステムでは、ファイルを構成するデータの管理をクラスタと呼ばれる単位で行う。一方、ファイルが格納(記録)される小型メモリカードに対するアクセスは、ハードディスク装置と同様に、セクタと呼ばれる単位で行われ、通常、1セクタ=512バイトである。一つのクラスタは、一つ又は複数(2,4,8等の2のべき乗個)の連続するセクタで構成される。実際に各記録媒体において一つのクラスタをいくつのセクタで構成するかは、通常、記録媒体の容量に応じて、論理フォーマット時に適宜決定される。すなわち、クラスタのサイズ(アロケーションユニットサイズ)は、各記録媒体毎に異なり得ることになる。
【0004】
このようなFATファイルシステムにおいて、ファイルやディレクトリに関する操作を高速化するための一つの手法として、ディレクトリキャッシュを設けることが考えられる。ディレクトリキャッシュとは、ディレクトリエントリ・データ(ファイルやディレクトリの名前、属性、更新日時、開始クラスタ番号、サイズ等の情報)を一時的に記憶する記録領域であって、例えば、メインメモリの一部の領域に確保され、記録媒体から読み出されたディレクトリエントリ・データを適宜記憶しておくことにより、ファイルやディレクトリについての操作を行う際に、ディレクトリエントリ・データを(メインメモリに比べて)アクセスに時間がかかる記録媒体からいちいち読み出すことを不要にして、アクセスの高速化を実現するものである。すなわち、ディレクトリキャッシュも、マイクロプロセッサ等が備えるキャッシュと同様に、アクセスの時間的局所性及び空間的局所性を利用してアクセスの高速化を図るものである。
【0005】
なお、特開2006−127377号公報には、ディレクトリ構造の解析および管理や更新を行うディレクトリエントリ操作部や、セクタサイズで区切られた複数のバッファキャッシュを、参照数、セクタ番号、過去のアクセス履歴およびデータ種別により管理するバッファキャッシュ操作部等を備えたFATファイルシステムが開示されている。
【0006】
しかしながら、当該公報に記載のFATファイルシステムでは、バッファキャッシュはセクタサイズで区切られており、各バッファキャッシュ(キャッシュブロック)のサイズは固定であった。
【特許文献1】特開2006−127377号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
本発明の目的は、記録媒体に記録されているパラメータ(例えば、ファイルの管理単位であるクラスタのサイズ情報)に応じて、キャッシュの構造(例えば、キャッシュブロックのサイズ)を変更できるようにすることにある。
【課題を解決するための手段】
【0008】
本発明に係るファイル管理装置は、記録媒体に記録されるファイルの管理を行うファイル管理装置であって、前記ファイルに関するデータを格納するキャッシュと、前記記録媒体に記録されているパラメータを取得するパラメータ取得部と、前記パラメータ取得部によって取得されたパラメータに基づいて、前記キャッシュの構造を決定するキャッシュ構造決定部と、前記キャッシュ構造決定部によって決定された構造に従って、前記キャッシュの制御を行うキャッシュ制御部とを備えたことを特徴とする。
【0009】
この場合において、前記パラメータは、ファイル管理単位(例えば、クラスタ)のサイズ情報であり、前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、前記キャッシュの構造を決定するようにしてもよい。
【0010】
また、以上の場合において、前記キャッシュは、ディレクトリエントリ・データを格納するようにしてもよい。また、前記記録媒体は、当該ファイル管理装置に対して着脱可能であり、前記パラメータ取得部は、前記記録媒体が当該ファイル管理装置に装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得するようにしてもよい。
【0011】
本発明に係るプログラムは、記録媒体に記録されるファイルの管理を行うプログラムであって、コンピュータを、前記記録媒体に記録されているパラメータを取得するパラメータ取得部、前記パラメータ取得部によって取得されたパラメータに基づいて、キャッシュの構造を決定するキャッシュ構造決定部、及び、前記キャッシュ構造決定部によって決定された構造に従って、キャッシュの制御を行うキャッシュ制御部として機能させるためのプログラムである。
【0012】
この場合において、前記パラメータは、ファイル管理単位(例えば、クラスタ)のサイズ情報であり、前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、キャッシュの構造を決定するようにしてもよい。
【0013】
また、以上の場合において、前記キャッシュ制御部は、前記記録媒体からディレクトリエントリ・データを読み出して、前記キャッシュに格納するようにしてもよい。また、前記パラメータ取得部は、前記記録媒体が前記コンピュータに装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得するようにしてもよい。
【0014】
なお、上記プログラムは、光ディスク(例えば、CD−ROMやDVD−ROM)等の可搬記録媒体や、各種ネットワークを介して頒布することができる。
【発明の効果】
【0015】
本発明によれば、記録媒体に記録されているパラメータ(例えば、クラスタのサイズ情報)に応じて、キャッシュの構造(例えば、キャッシュブロックのサイズ)を変更することが可能になる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の実施の形態について、図面を参照しつつ詳細に説明する。
【0017】
図1は、本発明によるファイル管理装置を構成するコンピュータシステムのハードウェア構成例を示す図である。本発明によるファイル管理装置は、例えば、各種組込み機器に組み込まれて利用される。
【0018】
同図に示すように、本発明によるファイル管理装置100は、CPU101と、ROM102と、RAM103と、RTC104と、メモリカードインタフェース(I/F)部105とを備え、各構成要素101〜105は、バス110に接続されている。また、メモリカードインタフェース部105には、小型メモリカード106が接続される。
【0019】
CPU101は、ROM102やRAM103に格納されたプログラムを実行することで、ファイル管理装置100が提供する各種機能を実現する中央処理装置である。
【0020】
ROM102は、CPU101が利用するプログラムやデータを記憶する読み出し専用の記憶装置(メモリ)である。
【0021】
RAM103は、CPU101が利用するプログラムやデータを一時的に記憶する読み書き可能な記憶装置(メモリ)である。本実施形態においては、RAM103の一部の領域が、後述するディレクトリキャッシュとして利用される。
【0022】
RTC104は、計時を行うリアルタイムクロックであり、現在時データ(日付、時刻)を提供するものである。CPU101は、例えば、ファイルやディレクトリの更新を行った際に、RTC104から現在時データを取得して、該当するディレクトリエントリの更新日時データを更新する。
【0023】
メモリカードインタフェース部105は、ファイル管理装置100に対して着脱可能な小型メモリカード106に対するデータの読み書きを可能にするものであり、例えば、小型メモリカード106を装着するためのスロットと、当該スロットをバス110に接続するためのバッファとによって構成される。
【0024】
小型メモリカード106は、メモリカードインタフェース部105に接続されて利用される着脱可能な記録媒体(リムーバブルメディア)であって、例えば、コンパクトフラッシュ(登録商標)カードによって構成される。小型メモリカード106は、FATファイルシステムが構築されるように予め論理フォーマットされている。
【0025】
図2は、FATファイルシステムが構築された小型メモリカード106の論理構成を示す図である。なお、ここでは、FAT32の場合を例にして説明する。
【0026】
同図に示すように、小型メモリカード106は、MBR210と、PBS220と、FAT領域230と、データ領域240とを備える。
【0027】
MBR210は、マスターブートレコードであり、MBR210には、パーティションテーブル等が格納されている。PBS220は、パーティションブートセクタであり、PBS220には、BPB221等が含まれている。BPB221は、BIOSパラメータブロックであり、BPB221には、小型メモリカード106に関する各種パラメータ、例えば、セクタサイズ(1セクタあたりのバイト数)、クラスタサイズ(1クラスタあたりのセクタ数)等が記録されている。
【0028】
FAT領域230は、ファイルアロケーションテーブル(FAT)及びそのバックアップコピーが格納される領域であり、FATの各エントリは、小型メモリカード106上の各クラスタに対応している。そして、FATの各エントリには、対応するクラスタが空きであることを示す値(0)か、対応するクラスタがファイルの最終クラスタであることを示す値(0x0FFFFFFF)(0xは16進数を表す)か、ファイルを構成する次のクラスタを示す値(クラスタ番号)のいずれかの値が格納される。
【0029】
データ領域240は、ファイルやディレクトリを構成するデータが格納される領域である。なお、ディレクトリとは、概念的にはファイルを格納する入れ物であるが、その実体は、ディレクトリ属性が与えられたファイルであり、当該ファイルには、ディレクトリエントリ・データが格納される。ディレクトリエントリ・データとは、ディレクトリに格納されているファイル(ディレクトリを含む)を管理するための32バイトのデータであり、ファイルの名前、属性(例えば、ディレクトリであることや、システムファイルであること等を示す情報)、更新日時、ファイルの開始クラスタ番号、ファイルのサイズ等を示すデータによって構成される。なお、ここでは簡単のため、ファイル名は、すべてショートファイル名(いわゆる8.3形式)であるとし、ロングファイル名(VFAT)については考慮しない。
【0030】
図3は、ファイル管理装置100のソフトウェア構成例を示す図である。
【0031】
同図に示すように、ファイル管理装置100は、アプリケーション310と、ファイルシステム320と、デバイスドライバ330とを備える。なお、アプリケーション310とファイルシステム320とデバイスドライバ330とはリンクされて、CPU101が実行可能な一つのプログラムにされる。
【0032】
アプリケーション310は、ファイルシステム320に対して、各種ファイル操作の指示等を行うユーザプログラムである。アプリケーション310は、例えば、ファイルシステム320が提供するAPI関数を呼び出すことで、各種ファイル操作の指示を行う。
【0033】
ファイルシステム320は、アプリケーション310からの指示に応じて、各種ファイル操作(作成、削除、読み出し、書き込み等)を行うミドルウェアである。ファイルシステム320は、デバイスドライバ330を介して、小型メモリカード106を制御し、アプリケーション310から指示されたファイル操作を行う。また、ファイルシステム320は、このようなファイル操作の高速化を図るため、RAM103上に確保されたディレクトリキャッシュの制御を行う。
【0034】
デバイスドライバ330は、ファイルシステム320からの指示に応じて、小型メモリカード106を制御して、小型メモリカード106に対するデータの読み書き等を行う制御プログラムである。例えば、デバイスドライバ330は、小型メモリカード106に対して、セクタ単位のリード、セクタ単位のライト、ハードウェア初期化、マウント、アンマウント等の処理を行う。なお、デバイスドライバ330は、ファイルを格納する小型メモリカードその他の記憶装置(ストレージデバイス)のタイプ毎に適当なものが用意される。
【0035】
図4は、ファイルシステム320の機能構成を示す図である。なお、同図では、簡単のため、ディレクトリキャッシュを制御するための機能部のみを示している。
【0036】
同図に示すように、ファイルシステム320は、パラメータ取得部421と、キャッシュ構造決定部422と、キャッシュ制御部423とを備える。
【0037】
パラメータ取得部421は、ファイル管理装置100に、小型メモリカード106が装着されたのを検知すると、小型メモリカード106から、ディレクトリキャッシュの構造を決定するのに必要なパラメータ(例えば、ファイルを構成するデータの管理単位であるクラスタのサイズを示す情報)を取得し、取得したパラメータを、キャッシュ構造決定部422に通知するものである。パラメータ取得部421は、例えば、デバイスドライバ330を介して、小型メモリカード106の装着を検知し、デバイスドライバ330を介して、小型メモリカード106からパラメータ(クラスタサイズ情報)を取得する。
【0038】
キャッシュ構造決定部422は、パラメータ取得部421から通知されたパラメータ(クラスタサイズ情報)に基づいて、RAM103の一部の領域に確保されたディレクトリキャッシュの構造(キャッシュブロックのサイズや、キャッシュブロックの数)を決定するものである。例えば、各キャッシュブロックのサイズを、パラメータ取得部421から通知されるクラスタサイズに一致させる。このように、各キャッシュブロックのサイズを、ファイルの管理単位であるクラスタのサイズに一致させることにより、限られたサイズを有するディレクトリキャッシュを、効率的に利用しつつ、小型メモリカード106へのアクセスを最小限にすることが可能となる。
【0039】
キャッシュ制御部423は、キャッシュ構造決定部422によって決定されたキャッシュ構造に従って、ディレクトリキャッシュの制御を行うものである。すなわち、キャッシュ構造決定部422によってサイズが決定されたキャッシュブロック単位で、小型メモリカード106からディレクトリキャッシュ上にデータを読み出したり、ディレクトリキャッシュから小型メモリカード106へデータを書き込んだりすること等を行う。
【0040】
次に、以上のような構成を有するファイル管理装置100の動作について説明する。
【0041】
まず、小型メモリカード106がファイル管理装置100に装着された際の動作について説明する。
【0042】
図5は、小型メモリカード106がファイル管理装置100に装着された際の動作を説明するためのフローチャートである。同図に示した処理は、ファイル管理装置100が、小型メモリカード106が装着されたことを検知した際に実行される処理である。すなわち、ファイルシステム320が提供するマウント処理の中で行われる処理である。
【0043】
ファイル管理装置100(パラメータ取得部421)は、小型メモリカード106が装着されたことを検知すると、装着された小型メモリカード106のブートセクタ220からBPB221を読み込み、小型メモリカード106に関するパラメータを取得する(S501)。前述したように、当該パラメータには、クラスタサイズ情報が含まれている。クラスタサイズ情報は、1クラスタが何個のセクタで構成されているかの情報であり、例えば、1クラスタ=4セクタの場合は、クラスタサイズ情報=4となる。
【0044】
次に、ファイル管理装置100(キャッシュ構造決定部422)は、BPB221に含まれているクラスタサイズ情報に基づいて、ディレクトリキャッシュのキャッシュブロックのサイズと数とを定める(S502)。例えば、クラスタサイズ=4の場合は、キャッシュブロックのサイズがクラスタサイズと等しくなるように、キャッシュブロックサイズ=4(セクタ)とし、キャッシュブロック数=キャッシュサイズ/(キャッシュブロックサイズ×セクタサイズ+制御データサイズ)とする。例えば、キャッシュサイズ=11Kバイト、キャッシュブロックサイズ=4セクタ、セクタサイズ=512バイト、制御データサイズ=6バイトとすると、キャッシュブロック数=11K/(4*512+6)=5(小数点以下切り捨て)となる。また、キャッシュサイズ=11Kバイト、キャッシュブロックサイズ=8セクタ、セクタサイズ=512バイト、制御データサイズ=6バイトとすると、キャッシュブロック数=11K/(8*512+6)=2(小数点以下切り捨て)となる。なお、制御データとは、後述するセクタ番号と優先順位データである。また、キャッシュサイズは、ディレクトリキャッシュとして利用されるメモリ領域のサイズであり、例えば、ユーザによって指定される。また、ここでは、セクタサイズ=512バイト固定であるとするが、セクタサイズについても、クラスタサイズと同様に、BPB221に含まれているセクタサイズ情報を利用することも考えられる。
【0045】
以上のようにして、小型メモリカード106に記録されているパラメータであるクラスタサイズ情報に基づいてディレクトリキャッシュの構造が決められる。
【0046】
このように、ファイル管理装置100(ファイルシステム320)では、小型メモリカード106が装着されたこと検知すると、装着された小型メモリカード106から、小型メモリカード106に関するパラメータ(クラスタサイズ情報)を取得し、取得したパラメータに基づいて、ディレクトリキャッシュの構造を自動的に決定するようにしているので、複数の小型メモリカード106を抜き差ししながら利用する場合等であっても、ディレクトリキャッシュの構造を、現在、装着されている小型メモリカード106に適したものにすることが可能となる。また、当該処理は、ファイルシステム320が提供するマウント処理の中で自動的に行われるので、例えば、ユーザ(アプリケーション310)は、ディレクトリキャッシュとして利用するメモリ領域(先頭アドレス及びサイズ)を予め指定をするだけで、ディレクトリキャッシュに割り当てた限られた大きさのメモリ領域を、各小型メモリカード106に適した形態で利用することが可能となる。
【0047】
図6は、小型メモリカード106に記録されているクラスタサイズ情報に基づいて決定されたディレクトリキャッシュの構造を示す図である。なお、同図(a)は、クラスタサイズ情報=4,キャッシュブロック数=5の場合について示しており、同図(b)は、クラスタサイズ情報=8,キャッシュブロック数=2の場合について示している。
【0048】
同図に示すように、ディレクトリキャッシュ600a,600bは、セクタ番号領域610a,610bと、キャッシュデータ領域620a,620bと、優先順位領域630a,630bとから構成される。
【0049】
キャッシュデータ領域620a,620bは、キャッシュ対象のデータ(本実施形態では、ディレクトリエントリ・データ)を格納する領域であり、キャッシュ構造決定部422によって決定されたキャッシュブロック数に等しい個数(同図(a)では5つ、同図(b)では2つ)の領域(以下、キャッシュブロックという)621a〜625a,621b〜622bによって構成されている。そして、各キャッシュブロック621a〜625a,621b〜622bは、1クラスタ(同図(a)では4セクタ、同図(b)では8セクタ)分のデータを格納可能なサイズを有している。
【0050】
セクタ番号領域610a,610bは、キャッシュデータ領域620a,620bに格納されているキャッシュデータのセクタ番号を格納する領域である。すなわち、セクタ番号領域610a,610bには、キャッシュデータ領域620a,620bにキャッシュされている各クラスタの先頭セクタの論理セクタ番号が格納される。セクタ番号領域610a,610bも、キャッシュデータ領域620a,620bと同様に、キャッシュブロック数に等しい個数の領域611a〜615a,611b〜612bによって構成されており、各領域611a〜615a,611b〜612bは、キャッシュブロック621a〜625a,621b〜622bと一対一に対応づけられている。
【0051】
例えば、セクタ番号領域611a,611bには、キャッシュブロック621a,621bに格納されているキャッシュデータ(クラスタ)の先頭セクタの論理セクタ番号(以下、先頭セクタ番号という)が格納され、セクタ番号領域612a,612bには、キャッシュブロック622a,622bに格納されているキャッシュデータ(クラスタ)の先頭セクタ番号が格納される。セクタ番号領域613a〜615aについても同様である。
【0052】
また、各領域611a〜615a,611b〜612bのサイズは4バイトである。但し、このうち、下位28ビットがセクタ番号の格納に利用され、上位4ビット(より具体的には最上位ビット)は、当該領域611a〜615a,611b〜612bに対応するキャッシュブロックの内容が変更されていることを示す変更フラグとして利用される。
【0053】
優先順位領域630a,630bは、キャッシュデータ領域620a,620bに格納されているキャッシュデータの優先順位データを格納する領域である。優先順位データとは、キャッシュデータ領域620a,620bのキャッシュブロック621a〜625a,621b〜622bがすべて使用中であるときに、新たに、ディレクトリエントリ・データの読み出しが行われた場合に、新たに読み出されるディレクトリエントリ・データを格納するキャッシュブロックを選択するために利用されるデータである。優先順位データは、キャッシュブロック621a〜625a,621b〜622bに対するアクセスが発生するたびに適宜更新されて、LRU(Least Recently Used)アルゴリズムに従ったキャッシュブロックの選択(キャッシュデータの置き換え)を実現するために利用される。
【0054】
優先順位領域630a,630bも、キャッシュデータ領域620a,620bと同様に、キャッシュブロック数に等しい個数の領域631a〜635a,631b〜632bによって構成されており、各領域631a〜635a,631b〜632bは、キャッシュブロック621a〜625a,631b〜632bと一対一に対応づけられている。
【0055】
例えば、優先順位領域631a,631bには、キャッシュブロック621a,621bに格納されているキャッシュデータの優先順位データが格納され、優先順位領域632a,632bには、キャッシュブロック622a,622bに格納されているキャッシュデータの優先順位データが格納される。優先順位領域633a〜635aについても同様である。また、各領域631a〜635a,631b〜632bのサイズは2バイトである。
【0056】
次に、以上のようにしてディレクトリキャッシュ構造が決定されたファイル管理装置100の動作について説明する。
【0057】
以下では、ディレクトリ作成時の動作について説明する。
【0058】
図7は、ディレクトリ作成時のファイル管理装置100の動作を説明するためのフローチャートである。ここでは、アプリケーション310から、"A:¥DIR"というディレクトリの作成を指示された場合の処理について説明する。
【0059】
同図に示すように、まず、アプリケーション310から指定されたディレクトリ("DIR")と同じ名前のファイル又はディレクトリが、既に、作成場所に指定されたルートディレクトリに存在するか否かを調べるため、ディレクトリ検索処理を行う(S701)。当該処理の詳細については後述する。
【0060】
ディレクトリ検索処理の結果、既に同じ名前のファイル又はディレクトリが存在する場合は(S702:Yes)、アプリケーション310にエラーを通知し(S707)、処理を終了する。
【0061】
一方、同じ名前のファイルやディレクトリが存在しない場合は(S702:No)、次に、FATを参照して、空きクラスタを検索する(S703)。
【0062】
検索の結果、空きクラスタがなければ(S704:No)、アプリケーション310にエラー(DISKFULL)を通知し(S707)、処理を終了する。
【0063】
一方、空きクラスタが見つかった場合は(S704:Yes)、見つかった空きクラスタを指定ディレクトリ("DIR")に割り当て、作成場所に指定されたルートディレクトリに、指定ディレクトリ("DIR")のディレクトリエントリを作成するため、ディレクトリエントリ作成処理を行う(S705)。当該処理の詳細については後述する。
【0064】
ディレクトリエントリ作成処理が終了すると、次に、今回作成したディレクトリの初期化処理を行う(S706)。すなわち、指定ディレクトリ("DIR")に割り当てられたクラスタを、ゼロクリアするとともに、当該クラスタに、ドット(.)及びドットドット(..)のディレクトリエントリを作成する。ドット(.)は、自分自身を指し示すディレクトリであり、ドットドット(..)は、自分の親ディレクトリ(この場合、ルートディレクトリ)を指し示すディレクトリである。なお、当該初期化処理では、クラスタデータの書き込み時に、キャッシュブロックの割り当ては行われず、小型メモリカード106に対して直接書き込みが行われる。
【0065】
以上のようにして、ファイル管理装置100において、ディレクトリの作成が行われる。
【0066】
次に、前述したディレクトリ検索処理S701の詳細について説明する。
【0067】
図8は、ディレクトリ検索処理S701を説明するためのフローチャートである。前述したように、当該処理は、指定ディレクトリ("DIR")と同じ名前のファイル又はディレクトリが、既に、作成場所に指定されたルートディレクトリに存在するか否かを調べる処理である。すなわち、当該処理では、ルートディレクトリのディレクトリデータ(ルートディレクトリに格納されているファイルやディレクトリのディレクトリエントリ・データ)が必要になる。
【0068】
そのため、まず、同図に示すように、ルートディレクトリのディレクトリデータを1クラスタ分読み込むディレクトリ読み込み処理を行う(S801)。ディレクトリ読み込み処理は、必要なディレクトリデータがディレクトリキャッシュ上に存在するか否かを調べ、存在しない場合は、小型メモリカード106からディレクトリキャッシュ上に必要なディレクトリデータを1クラスタ分読み込む処理である。当該処理の詳細については後述する。
【0069】
ディレクトリ読み込み処理が終了すると、次に、当該処理で読み出されたルートディレクトリの先頭クラスタデータを検索して、指定ディレクトリ("DIR")と同じ名前のファイル又はディレクトリが存在するか否かを調べる(S802)。すなわち、クラスタデータの先頭から32バイト毎にディレクトリエントリ・データを切り出して、各ディレクトリエントリの名前フィールドに格納されている名前と、指定ディレクトリの名前("DIR")とを比較して、一致するものがあるか否かを調べる。
【0070】
検索の結果、一致するものが存在した場合は(S803:Yes)、ルートディレクトリには、既に、指定ディレクトリと同じ名前のファイル又はディレクトリが存在していると判定して(S804)、処理を終了する。
【0071】
一方、一致するものが存在しなかった場合は(S803:No)、ルートディレクトリのすべてのディレクトリエントリについて処理を終了したか否かを判別する(S805)。全ディレクトリエントリについて処理を終了したか否かは、例えば、ディレクトリキャッシュ上に読み出したクラスタに、第一バイトが0x00のディレクトリエントリが存在するか否かや、当該クラスタが最終クラスタであるか否かによって判別される。
【0072】
判別の結果、未だすべてのディレクトリエントリについて処理を終了していない場合は、(S805:No)、FATを参照して、ルートディレクトリを構成する次のクラスタを特定し(S806)、当該クラスタデータの読み込みを行うため、再度、前述したディレクトリ読み込み処理を行う(S801)。そして、当該処理によって読み出されたクラスタデータを解析して、指定ディレクトリ("DIR")と同じ名前のファイル又はディレクトリが存在するか否かを調べる(S802)。このようなディレクトリ読み込み処理S801及び名前検索処理S802は、指定ディレクトリの名前("DIR")と同名のファイル又はディレクトリが見つかるまで順次行われる。その結果、ルートディレクトリのすべてのディレクトリエントリについて調べても、指定ディレクトリ("DIR")と同じ名前のファイルやディレクトリが見つからなかった場合は(S805:Yes)、ルートディレクトリには、指定ディレクトリと同じ名前のファイルやディレクトリは存在しないと判定して(S807)、処理を終了する。
【0073】
以上のようにして、ディレクトリ検索処理S701が行われる。
【0074】
次に、前述したディレクトリ読み込み処理S801の詳細について説明する。
【0075】
図9は、ディレクトリ読み込み処理S801を説明するためのフローチャートである。前述したように、当該処理は、読み込み対象ディレクトリであるルートディレクトリのディレクトリデータを1クラスタ分読み込む処理である。なお、読み込み対象となるクラスタは、当該処理を呼び出す際に指定されるものとする。より具体的には、読み込み対象となるクラスタの先頭セクタ番号が指定されて、当該処理が呼び出される。
【0076】
同図に示すように、まず、ルートディレクトリの読み込み対象クラスタが、ディレクトリキャッシュ上に存在するか否か、すなわち、キャッシュヒットしているか否かを調べる(S901)。具体的には、読み込み対象クラスタの先頭セクタ番号が、ディレクトリキャッシュのセクタ番号領域に存在するか否か調べる。
【0077】
その結果、読み込み対象クラスタが、ディレクトリキャッシュ上に存在していた場合は(S901:Yes)、読み込み対象クラスタのデータが格納されているキャッシュブロックの位置を、当該処理を呼び出した処理(上位関数)に通知して(S908)、処理を終了する。
【0078】
一方、読み込み対象クラスタが、ディレクトリキャッシュ上に存在しなかった場合は(S901:No)、小型メモリカード106から、読み込み対象クラスタを読み出して、ディレクトリキャッシュに格納することが必要となる。そのためには、まず、小型メモリカード106から読み出されるクラスタデータを格納するキャッシュブロックを選定する(S902)。当該選定は、LRUアルゴリズムに従って行われる。すなわち、ディレクトリキャッシュの優先順位領域を参照して、未使用(優先順位データ=0)又は優先順位の一番低いキャッシュブロックを選択する。
【0079】
次に、選定されたキャッシュブロックに格納されているクラスタデータが変更されているか否かを調べるため、選定されたキャッシュブロックに対応するセクタ番号領域から変更フラグを読み出し、変更フラグがセットされているか否かを判別する(S903)。
【0080】
判別の結果、変更フラグがセットされていた場合、すなわち、選定されたキャッシュブロックに変更されたクラスタデータが格納されている場合は(S903:Yes)、まず、選定されたキャッシュブロックに格納されているクラスタデータを、小型メモリカード106に書き込んで(S904)、変更内容を小型メモリカード106へ反映させた後に、小型メモリカード106から読み込み対象のクラスタデータを読み出して、空いたキャッシュブロックに格納する(S905)。一方、選定されたキャッシュブロックに格納されているデータが変更されていない場合は(S903:No)、そのまま、小型メモリカード106から読み込み対象のクラスタデータを読み出して、選定されたキャッシュブロックに格納する(S905)。
【0081】
以上のようにして、選定されたキャッシュブロックへの読み出しが終了すると、今回クラスタデータを格納したキャッシュブロックに対応するセクタ番号領域(の下位28ビット)に、当該クラスタの先頭セクタ番号を格納するとともに(S906)、優先順位データを適宜更新する(S907)。そして、読み込み対象クラスタのデータが格納されたキャッシュブロックの位置を、当該処理を呼び出した処理(上位関数)に通知して(S908)、処理を終了する。
【0082】
以上のようにして、ディレクトリ読み込み処理S801が行われる。
【0083】
次に、前述したディレクトリエントリ作成処理S705の詳細について説明する。
【0084】
図10は、ディレクトリエントリ作成処理S705を説明するためのフローチャートである。当該処理は、前述したように、指定ディレクトリ("DIR")の作成場所に指定されたルートディレクトリに、指定ディレクトリ("DIR")のディレクトリエントリを作成する処理である。
【0085】
同図に示すように、まず、指定ディレクトリのディレクトリエントリを書き込むための空き位置(空きエントリ)を見つけるため、作成場所となるルートディレクトリのディレクトリデータを1クラスタ分読み込むディレクトリ読み込み処理を行う(S1001)。当該処理は、図9に示したディレクトリ読み込み処理S801と同様の処理である。
【0086】
ディレクトリ読み込み処理が終了すると、次に、当該処理で読み出されたルートディレクトリの先頭クラスタデータを解析して、指定ディレクトリのディレクトリエントリを書き込むための空き位置を探す(S1002)。すなわち、クラスタデータの先頭から32バイト毎にディレクトリエントリ・データを切り出して、第一バイトの値が0x00又は0xE5であるディレクトリエントリ・データが存在するか否かを調べる。
【0087】
その結果、空き位置が見つからなかった場合は(S1003:No)、FATを参照して、ルートディレクトリを構成する次のクラスタを特定し(S1004)、当該クラスタデータの読み込みを行うため、再度、前述したディレクトリ読み込み処理を行う(S1001)。そして、読み出されたクラスタデータを解析して、空き位置を探す。このようなルートディレクトリを構成する各クラスタデータの読み出し及び解析は、指定ディレクトリのディレクトリエントリを書き込むための空き位置が見つかるまで順次行われる。なお、途中で、その時点での最終クラスタに達した場合は、空きクラスタの割り当てが適宜行われる。
【0088】
以上のようにして、指定ディレクトリのディレクトリエントリを書き込むための空き位置が見つかると(S1003:Yes)、当該空き位置に、指定ディレクトリのディレクトリエントリ・データを書き込む(S1005)。この場合、ディレクトリエントリ・データを書き込むクラスタはディレクトリキャッシュ上に存在するので、実際は、ディレクトリキャッシュへの書き込みが行われる。当該書き込みとともに、該当するキャッシュブロックが書き換えられたことを示す変更フラグをセットする(S1006)。すなわち、該当するキャッシュブロックに対応するセクタ番号領域の最上位ビットをセットする。更に、キャッシュブロックへの書き込み(アクセス)が発生したことに伴い、優先順位データを適宜更新し(S1007)、処理を終了する。
【0089】
このように、本実施形態では、いわゆるライトバック方式を採用し、ディレクトリキャッシュへの書き込み時点では、該当するキャッシュブロックが書き換えられたことを示す変更フラグをセットするだけで、小型メモリカード106への書き込みは行わずに、書き込み処理の高速化を実現している。なお、変更されたキャッシュブロックデータが小型メモリカード106に書き込まれるのは、当該変更されたクラスタデータを格納するキャッシュブロックに別のクラスタデータを読み込むことが必要となった場合(キャッシュブロックデータの置き換えが発生する場合)と、ユーザ(アプリケーション310)からの明示的な指示がされた場合のみである。ユーザからの明示的な指示は、例えば、小型メモリカード106を取り外す前に行われる。
【0090】
以上のようにして、ディレクトリエントリ作成処理S705が行われる。
【0091】
以上説明したように、上述した実施形態によれば、小型メモリカード等の記録媒体に記録されているパラメータ(クラスタサイズ情報)に基づいて、ディレクトリキャッシュの構造を決定することができるので、各記録媒体に適したディレクトリキャッシュ構造をとることが可能となり、ディレクトリキャッシュに割り当てられたメモリ領域を効率的に利用しつつ、処理速度の向上を図ることが可能となる。
【0092】
以上、本発明の実施形態について説明したが、当然のことながら、本発明の実施形態は上記のものに限られない。例えば、上述した実施形態では、ファイルを格納する記憶装置(ストレージデバイス)として、小型メモリカードを利用していたが、他の記憶装置(例えば、ハードディスク装置)を利用することも考えられる。
【図面の簡単な説明】
【0093】
【図1】本発明によるファイル管理装置を構成するコンピュータシステムのハードウェア構成例を示す図である。
【図2】小型メモリカード106の論理構成を示す図である。
【図3】ファイル管理装置100のソフトウェア構成例を示す図である。
【図4】ファイルシステム320の機能構成を示す図である。
【図5】小型メモリカード106がファイル管理装置100の装着された際の動作を説明するためのフローチャートである。
【図6】ディレクトリキャッシュの構造を示す図である。
【図7】ディレクトリ作成時のファイル管理装置100の動作を説明するためのフローチャートである。
【図8】ディレクトリ検索処理S701を説明するためのフローチャートである。
【図9】ディレクトリ読み込み処理S801を説明するためのフローチャートである。
【図10】ディレクトリエントリ作成処理S705を説明するためのフローチャートである。
【符号の説明】
【0094】
100 ファイル管理装置
101 CPU
102 ROM
103 RAM
104 リアルタイムクロック
105 メモリカードインタフェース部
106 小型メモリカード
110 バス
210 マスターブートレコード
220 パーティションブートセクタ
221 BIOSパラメータブロック
230 FAT領域
240 データ領域
310 アプリケーション
320 ファイルシステム
330 デバイスドライバ
421 パラメータ取得部
422 キャッシュ構造決定部
423 キャッシュ制御部
600a,600b ディレクトリキャッシュ
610a〜615a,610b〜612b セクタ番号領域
620a,620b キャッシュデータ領域
621a〜625a,621b〜622b キャッシュブロック
630a〜635a,630b〜632b 優先順位領域

【特許請求の範囲】
【請求項1】
記録媒体に記録されるファイルの管理を行うファイル管理装置であって、
前記ファイルに関するデータを格納するキャッシュと、
前記記録媒体に記録されているパラメータを取得するパラメータ取得部と、
前記パラメータ取得部によって取得されたパラメータに基づいて、前記キャッシュの構造を決定するキャッシュ構造決定部と、
前記キャッシュ構造決定部によって決定された構造に従って、前記キャッシュの制御を行うキャッシュ制御部と
を備えたことを特徴とするファイル管理装置。
【請求項2】
前記パラメータは、ファイル管理単位のサイズ情報であり、
前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、前記キャッシュの構造を決定する
ことを特徴とする請求項1に記載のファイル管理装置。
【請求項3】
前記ファイル管理単位は、クラスタである
ことを特徴とする請求項2に記載のファイル管理装置。
【請求項4】
前記キャッシュは、ディレクトリエントリ・データを格納する
ことを特徴とする請求項1〜3のいずれか一項に記載のファイル管理装置。
【請求項5】
前記記録媒体は、当該ファイル管理装置に対して着脱可能であり、
前記パラメータ取得部は、前記記録媒体が当該ファイル管理装置に装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得する
ことを特徴とする請求項1〜4のいずれか一項に記載のファイル管理装置。
【請求項6】
記録媒体に記録されるファイルの管理を行うプログラムであって、コンピュータを、
前記記録媒体に記録されているパラメータを取得するパラメータ取得部、
前記パラメータ取得部によって取得されたパラメータに基づいて、キャッシュの構造を決定するキャッシュ構造決定部、及び、
前記キャッシュ構造決定部によって決定された構造に従って、キャッシュの制御を行うキャッシュ制御部
として機能させるためのプログラム。
【請求項7】
前記パラメータは、ファイル管理単位のサイズ情報であり、
前記キャッシュ構造決定部は、前記キャッシュのブロックサイズが、前記ファイル管理単位のサイズと等しくなるように、キャッシュの構造を決定する
ことを特徴とする請求項6に記載のプログラム。
【請求項8】
前記ファイル管理単位は、クラスタである
ことを特徴とする請求項7に記載のプログラム。
【請求項9】
前記キャッシュ制御部は、前記記録媒体からディレクトリエントリ・データを読み出して、前記キャッシュに格納する
ことを特徴とする請求項6〜8のいずれか一項に記載のプログラム。
【請求項10】
前記パラメータ取得部は、前記記録媒体が前記コンピュータに装着されたことを検知すると、当該記録媒体に記録されているパラメータを取得する
ことを特徴とする請求項6〜9のいずれか一項に記載のプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate