(57)【要約】【課題】  メモリ容量の少ないシステムにおいても、階層構造を持つファイルシステムへのアクセスを高速化する。【解決手段】  一度アクセスしたディレクトリのエントリ情報と該ディレクトリにおいて最後にサクセスしたデータの記録位置を保持しておき、同一ディレクトリに対するアクセス要求があった場合に、保持した情報を利用してアクセスを制御する。【選択図】図１
2007109181.tif 000002
【特許請求の範囲】
【請求項１】
外部装置と接続し、データを階層構造において保持する不揮発性記憶媒体を装着可能なデータ処理装置であって、
前記外部装置からの前記不揮発性記憶媒体へのアクセス要求を受け付ける受付手段と、
前記アクセス要求に含まれる、アクセス対象を特定するための階層情報を抽出する抽出手段と、
前記不揮発性記憶媒体において、所定の階層に属するデータの記憶位置に関する記憶位置情報を記憶する記憶手段と、
抽出された前記階層情報と、前記記憶位置情報とに基づいて、前記不揮発性記憶媒体における前記アクセス対象の記憶位置を含むエントリ情報を、前記不揮発性記憶媒体から取得するエントリ情報取得手段と、
前記エントリ情報に基づいて、前記不揮発性記憶媒体に記録された前記アクセス対象のデータにアクセスするアクセス手段と
を備え、
前記エントリ情報取得手段は、
前記アクセス対象が属する第１の階層についての第１の記憶位置情報が前記記憶手段に記憶されているか否かを判定する第１の判定手段と、
前記第１の判定手段により前記第１の記憶位置情報が記憶されていないと判定された場合に、前記階層情報において前記第１の階層より上位で、かつ、前記記憶手段に前記記憶位置情報が記憶されている階層のうち、前記第１の階層に最も近い第２の階層を探索する探索手段と、
前記探索手段により前記第２の階層が探索された場合に、該第２の階層の第２の記憶位置情報を利用して、該第２の階層に属する第３の階層の前記エントリ情報を取得し、取得したエントリ情報に基づいて前記第３の階層の第３の記憶位置情報を生成し、前記記憶手段に書き込む書込手段とを備え、
前記探索手段及び前記書込手段における処理は、前記第１の記憶位置情報が、前記第３の記憶位置情報として前記記憶手段に書き込まれるまで繰り返され、
前記記憶手段に記憶された前記第１の記憶位置情報に基づいて、前記アクセス対象の前記エントリ情報を前記不揮発性記憶媒体から取得することを特徴とするデータ処理装置。
【請求項２】
前記探索手段において、前記第２の階層が探索できなかった場合に、
前記書込手段は、前記不揮発性記憶媒体のルートディレクトリに記憶されたデータのうち、前記階層情報において前記ルートディレクトリの直下に属する階層のエントリ情報を取得し、該エントリ情報に基づいて前記第３の記憶位置情報を生成することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記記憶位置情報には、前記所定の階層に属するデータの前記エントリ情報が前記不揮発性記憶媒体において記録されている位置の情報と、該エントリ情報のうち、最後に利用されたエントリ情報を特定するための情報とが含まれることを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記書込手段は、前記第３の階層の前記エントリ情報を取得する際に、前記第２の記憶位置情報に含まれる前記最後に利用されたエントリ情報を特定するための情報に基づいて、該情報に対応する前記エントリ情報の周辺を探索し、該周辺に前記第３の階層のエントリ情報が含まれない場合に、前記第２の記憶位置情報に基づき取得される全てのエントリ情報について探索を行うことを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記記憶位置情報には、新たなエントリ情報の書き込みを開始可能な位置の情報が更に含まれ、
前記アクセス要求には、少なくともデータの読み出し、書き込み、新規作成及び削除のいずれかが含まれ、前記アクセス要求がデータの新規作成要求であった場合に、
前記エントリ情報取得手段は、前記第１の記憶位置情報と、前記新たなエントリ情報の書き込みを開始可能な位置の情報とに基づいて、エントリ情報を新規に作成可能な領域を確保し、
前記アクセス手段は、該領域に初期状態のエントリ情報を作成することを特徴とする請求項３又は４に記載のデータ処理装置。
【請求項６】
前記記憶手段では、所定数の前記記憶位置情報が、前記書込手段において前記利用または前記書込がなされた順に順番が割り当てられて記憶され、
前記書込手段は、新たな書込により前記所定数を超えることとなる場合に、前記順番の古い記憶位置情報を削除して、該新たな書込を行うことを特徴とする請求項１乃至５のいずれかに記載のデータ処理装置。
【請求項７】
前記第１の判定手段により、前記第１の記憶位置情報が記憶されていると判定された場合に、前記第１の記憶位置情報には最も新しい記憶位置情報について与えられる順番が割り当てられることを特徴とする請求項６に記載のデータ処理装置。
【請求項８】
外部装置と接続し、データを階層構造において保持する不揮発性記憶媒体を装着可能で、該不揮発性記憶媒体において、所定の階層に属するデータの記憶位置に関する記憶位置情報を記憶する記憶部を備えるデータ処理装置の制御方法であって、
前記外部装置からの前記不揮発性記憶媒体へのアクセス要求を受け付ける受付工程と、
前記アクセス要求に含まれる、アクセス対象を特定するための階層情報を抽出する抽出工程と、
抽出された前記階層情報と、前記記憶位置情報とに基づいて、前記不揮発性記憶媒体における前記アクセス対象の記憶位置を含むエントリ情報を、前記不揮発性記憶媒体から取得するエントリ情報取得工程と、
前記エントリ情報に基づいて、前記不揮発性記憶媒体に記録された前記アクセス対象のデータにアクセスするアクセス工程と
を備え、
前記エントリ情報取得工程では、
前記アクセス対象が属する第１の階層についての第１の記憶位置情報が前記記憶部に記憶されているか否かを判定する第１の判定工程と、
前記第１の判定工程において前記第１の記憶位置情報が記憶されていないと判定された場合に、前記階層情報において前記第１の階層より上位で、かつ、前記記憶部に前記記憶位置情報が記憶されている階層のうち、前記第１の階層に最も近い第２の階層を探索する探索工程と、
前記探索工程において前記第２の階層が探索された場合に、該第２の階層の第２の記憶位置情報を利用して、該第２の階層に属する第３の階層の前記エントリ情報を取得し、取得したエントリ情報に基づいて前記第３の階層の第３の記憶位置情報を生成し、前記記憶部に書き込む書込工程とを備え、
前記探索工程及び書込工程における処理は、前記第１の記憶位置情報が、前記第３の記憶位置情報として前記記憶部に書き込まれるまで繰り返され、
前記記憶部に記憶された前記第１の記憶位置情報に基づいて、前記アクセス対象の前記エントリ情報が前記不揮発性記憶媒体から取得されることを特徴とするデータ処理装置の制御方法。
【請求項９】
前記探索工程において、前記第２の階層が探索できなかった場合に、
前記書込工程では、前記不揮発性記憶媒体のルートディレクトリに記憶されたデータのうち、前記階層情報において前記ルートディレクトリの直下に属する階層のエントリ情報を取得し、該エントリ情報に基づいて前記第３の記憶位置情報を生成することを特徴とする請求項８に記載のデータ処理装置の制御方法。
【請求項１０】
前記記憶位置情報には、前記所定の階層に属するデータの前記エントリ情報が前記不揮発性記憶媒体において記録されている位置の情報と、該エントリ情報のうち、最後に利用されたエントリ情報を特定するための情報とが含まれることを特徴とする請求項８又は９に記載のデータ処理装置の制御方法。
【請求項１１】
前記書込工程では、前記第３の階層の前記エントリ情報を取得する際に、前記第２の記憶位置情報に含まれる前記最後に利用されたエントリ情報を特定するための情報に基づいて、該情報に対応する前記エントリ情報の周辺を探索し、該周辺に前記第３の階層のエントリ情報が含まれない場合に、前記第２の記憶位置情報に基づき取得される全てのエントリ情報について探索を行うことを特徴とする請求項１０に記載のデータ処理装置の制御方法。
【請求項１２】
前記記憶位置情報には、新たなエントリ情報の書き込みを開始可能な位置の情報が更に含まれ、
前記アクセス要求には、少なくともデータの読み出し、書き込み、新規作成及び削除のいずれかが含まれ、前記アクセス要求がデータの新規作成要求であった場合に、
前記エントリ情報取得工程では、前記第１の記憶位置情報と、前記新たなエントリ情報の書き込みを開始可能な位置の情報とに基づいて、エントリ情報を新規に作成可能な領域を確保し、
前記アクセス工程では、該領域に初期状態のエントリ情報を作成することを特徴とする請求項１０又は１１に記載のデータ処理装置の制御方法。
【請求項１３】
前記記憶部には、所定数の前記記憶位置情報が、前記書込工程において前記利用または前記書込がなされた順に順番が割り当てられて記憶され、
前記書込工程では、新たな書込により前記所定数を超えることとなる場合に、前記順番の古い記憶位置情報を削除して、該新たな書込を行うことを特徴とする請求項８乃至１２のいずれかに記載のデータ処理装置の制御方法。
【請求項１４】
前記第１の判定工程において、前記第１の記憶位置情報が記憶されていると判定された場合に、前記第１の記憶位置情報には最も新しい記憶位置情報について与えられる順番が割り当てられることを特徴とする請求項１３に記載のデータ処理装置の制御方法。
【請求項１５】
請求項８乃至１４のいずれかに記載のデータ処理装置の制御方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項１６】
請求項１５に記載のコンピュータプログラムを記憶したコンピュータで読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置及びその制御方法、コンピュータプログラム、及び記憶媒体に関する。
【背景技術】
【０００２】
従来、階層（ディレクトリ）構造を持つファイルシステムを不揮発性メモリ上に構築してアクセスする場合、アクセスの度に階層を順番に検索し、順に潜って目的のファイルを見つける必要があった。また、同じ階層に存在する別のファイルにアクセスする場合でも階層を順番に検索し、順に潜るという同じ処理を繰り返す必要があった。
【０００３】
階層検索の繰り返しを抑える方法として、各階層の情報をシステム上に常駐化したものが提案されている（特許文献１を参照。）。
【０００４】
しかし、この方法では、各階層の情報をシステム内のメモリで全て確保しておかなければならないので、メモリ容量の少ないシステムには向かない。また、最初に階層内の情報を全検索しなくてはならないため初期動作が重くなるという問題がある。
【特許文献１】特開平５−３２４４３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そこで、本発明はメモリ容量の少ないシステムにおいても、階層構造を持つファイルシステムへのアクセスを高速化することを可能とすることを目的とする。
【課題を解決するための手段】
【０００６】
上記の目的を達成するための本発明は、外部装置と接続し、データを階層構造において保持する不揮発性記憶媒体を装着可能なデータ処理装置であって、前記外部装置からの前記不揮発性記憶媒体へのアクセス要求を受け付ける受付手段と、前記アクセス要求に含まれる、アクセス対象を特定するための階層情報を抽出する抽出手段と、前記不揮発性記憶媒体において、所定の階層に属するデータの記憶位置に関する記憶位置情報を記憶する記憶手段と、抽出された前記階層情報と、前記記憶位置情報とに基づいて、前記不揮発性記憶媒体における前記アクセス対象の記憶位置を含むエントリ情報を、前記不揮発性記憶媒体から取得するエントリ情報取得手段と、前記エントリ情報に基づいて、前記不揮発性記憶媒体に記録された前記アクセス対象のデータにアクセスするアクセス手段とを備え、前記エントリ情報取得手段は、前記アクセス対象が属する第１の階層についての第１の記憶位置情報が前記記憶手段に記憶されているか否かを判定する第１の判定手段と、前記第１の判定手段により前記第１の記憶位置情報が記憶されていないと判定された場合に、前記階層情報において前記第１の階層より上位で、かつ、前記記憶手段に前記記憶位置情報が記憶されている階層のうち、前記第１の階層に最も近い第２の階層を探索する探索手段と、前記探索手段により前記第２の階層が探索された場合に、該第２の階層の第２の記憶位置情報を利用して、該第２の階層に属する第３の階層の前記エントリ情報を取得し、取得したエントリ情報に基づいて前記第３の階層の第３の記憶位置情報を生成し、前記記憶手段に書き込む書込手段とを備え、前記書込手段における前記探索及び前記書き込みは、前記第１の記憶位置情報が、前記第３の記憶位置情報として前記記憶手段に書き込まれるまで繰り返され、前記記憶手段に記憶された前記第１の記憶位置情報に基づいて、前記アクセス対象の前記エントリ情報を前記不揮発性記憶媒体から取得することを特徴とする。
【発明の効果】
【０００７】
以上説明したように、本発明によれば、メモリ容量の少ないシステムにおいても、不揮発性メモリ上に構築された階層構造を持つファイルシステムへのアクセスを高速化することができる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施形態を説明する。
【０００９】
図１は、本発明の実施形態の構成を示す図である。
【００１０】
図１において、１はデータ処理装置である。２は着脱可能なメモリカード（不揮発性メモリ）である。３は外部装置である。データ処理装置１はメモリカード２上にファイルシステムを構築し、外部装置３からのファイルアクセス要求に応える。データ処理装置１は、メモリーカード２のリーダ／ライタ装置として構成され、メモリカード２へのデータの書き込み及び読み出しを行うことができる。また、メモリカード２は、例えばコンパクトフラッシュ（登録商標）やＳＤカードのようなカード状の記録媒体であり、データ処理装置１に対し着脱可能である。外部装置３は、例えば汎用のパーソナルコンピュータで構成されても良く、データ処理装置１に対しデータの書き込みや読み出しを命令する。
【００１１】
データ処理装置１の内部構成の内、１０は、外部装置３からのファイルアクセス要求を受け取り、ファイルシステムのフォーマットに従ってメモリカード２へのメディアアクセスを行うためのデータ処理部である。１１は、データ処理部１０、揮発性メモリ１２及びコネクタ１３の間でデータを送受信するためのバスである。１２は、揮発性メモリである。該揮発性メモリ１２は、メモリカード２上のデータ（エントリ情報や本体データ）を一時退避する一時退避領域や、ファイルシステムの階層（ディレクトリ）の情報を保持するためのディレクトリ情報保持用領域を有する。ディレクトリ情報保持領域には、親ディレクトリ情報テーブルが保持されており、ＬＲＵ（Least Recently Used）アルゴリズムに従って親ディレクトリ情報が登録されている。即ち、親ディレクトリ情報テーブルでは、未使用時間の短い順に登録データが順位付けされている。１３は、バス１１を介してメモリカード２とデータを送受信するためのコネクタである。１４は、データ処理装置１と外部装置３との間でデータの送受信を行うためのコネクタである。コネクタ１４は、ＵＳＢやＩＥＥＥ１３９４等に対応する。
【００１２】
なお、本実施形態では不揮発性メモリを着脱可能なメモリカード２として説明しているが、メモリカード２は着脱不可能な不揮発性メモリとして構成してもよい。また、メモリカード２は、不揮発性メモリとして有線／無線で接続された外部ストレージとして構成されても良い。
【００１３】
次に、図１３及び１４を参照して、メモリカード２上に構築されるファイルシステムの一例を説明する。図１３は、メモリカード２上のデータ構造の一例を簡略的に示す図であり、図１４は、エントリ情報のデータ構成の一例を示す図である。
【００１４】
図１３において、１３０１は、マスタブートレコーダ(ＭＢＲ)である。１３０２はブートセクタであり、１３０３はＦＡＴである。ＦＡＴには、メモリカード２上の全クラスタに対応したＦＡＴエントリの表が格納されている。ＦＡＴエントリは各クラスタについて、空き領域であるか（０）、ファイルの最終クラスタであるか、または、ファイルがそのクラスタの次にどこに格納されているかを示すいずれかの値となる。
【００１５】
ＦＡＴ１３０３の次には、ルートディレクトリが位置する。図１３の場合、ルートディレクトリには、ファイル１、ファイル２及びディレクトリ１のエントリ情報１３０４乃至１３０６が格納されており、空きエントリ情報１３０７が１つ含まれている。なお、図１３はあくまで一例として示したモノであって、ルートディレクトリにはより多くのエントリ情報を格納することが可能である。エントリ情報とは、アクセス対象となるファイル、ディレクトリ等の不揮発性記憶媒体であるメモリカード２における記憶位置を含む情報であり、その詳細は図１４に一例として示す通りである。
【００１６】
図１４において、１４００はエントリ情報全体を示す。１４０１は、データ名（ファイル名或いはディレクトリ名）を格納する領域である。１４０２は、データの拡張子を格納する領域である。１４０３は、データの属性を格納する領域である。この属性には、少なくともファイル、ディレクトリ、空き領域が含まれる。１４０４は、データが作成された時刻（作成時刻）を格納する領域である。１４０５は、データが作成された日（作成日）を格納する領域である。１４０６は、データが最後にアクセスされた日（最終アクセス日）を格納する領域である。１４０７は、データが最後に更新された時刻（更新時刻）を格納する領域である。１４０８は、データが最後に更新された日（更新日）を格納する領域である。１４０９は、エントリ情報１４００に対応するデータを格納するクラスタのうち先頭のクラスタの番号（開始クラスタ番号）を格納する領域である。１４１０はエントリ情報１４００に対応する本体データのサイズを格納する領域である。また、エントリ情報１４００は、所定のサイズ（例えば、３２バイト）を有している。
【００１７】
図１３において、エントリ情報１３０４及び１３０５の属性は“ファイル”であり、エントリ情報１３０６の属性は“ディレクトリ”であり、エントリ情報１３０７の属性は“空き領域”ということになる。
【００１８】
また、ファイル１についてのエントリ情報１３０４の開始クラスタ番号１４０９には、ファイル１の本体データ１３０８が格納されているクラスタの内、先頭のクラスタ番号が格納されていることととなる。この開始クラスタ番号１４０９と、ＦＡＴ１３０３におけるクラスタチェーン、更にはデータサイズ１４１０に基づいて、ファイル１の本体データ１３０８にアクセスすることができる。
【００１９】
更に、ディレクトリ１についてのエントリ情報１３０６の開始クラスタ番号１４０９には、ディレクトリ１に含まれるデータのエントリ情報の開始クラスタ番号が格納されている。この開始クラスタ番号１４０９と、ＦＡＴ１３０３におけるクラスタチェーン、更にはデータサイズ１４１０に基づいて、ディレクトリ１に含まれる全データのエントリ情報にアクセスすることができる。図１３の場合、ディレクトリ１の本体データとして、ファイル３のエントリ情報１３１０、ファイル４のエントリ情報１３１１、サブディレクトリ１のエントリ情報１３１２及びサブディレクトリ２のエントリ情報１３１３が格納されていることになる。
【００２０】
ここで、ファイル３及びファイル４については、上記のファイル１と同様にして本体データ１３１４及び１３１５にアクセスすることができる。また、ディレクトリ１と同様にしてサブディレクトリ１及びサブディレクトリ２に含まれるエントリ情報１３１６及び１３１７にアクセスすることができる。
【００２１】
次に、図１５を参照して、本実施形態に対応するメモリカード２に格納されたデータのディレクトリ構造の一例を説明する。図１５において、ルートディレクトリ下には、ＤＩＲ１０００とＤＩＲ２０００の各ディレクトリが格納されている。また、ＤＩＲ１０００には、ＤＩＲ１１００とＤＩＲ１２００の各ディレクトリが格納され、そのうちＤＩＲ１１００には、ＤＩＲ１１１０とＤＩＲ１１２０の各ディレクトリが格納されている。ＤＩＲ１１１０にはＦＩＬ１１１０Ａ．ＴＸＴとＦＩＬ１１１０Ｂ．ＴＸＴのテキストファイルが格納されている。一方、ＤＩＲ１１２０には、ＦＩＬ１１２０Ａ．ＴＸＴとＦＩＬ１１２０Ｂ．ＴＸＴのテキストファイルが格納されている。
【００２２】
ＤＩＲ１２００には、ＤＩＲ１２１０が格納され、該ＤＩＲ１２１０には、ＤＩＲ１２１１とＤＩＲ１２１２がそれぞれ格納されている。ＤＩＲ１２１１には、ＦＩＬ１２１１Ａ．ＴＸＴとＦＩＬ１２１１Ｂ．ＴＸＴが格納され、ＤＩＲ１２１２にはＦＩＬ１２１２Ａ．ＴＸＴとＦＩＬ１２１２Ｂ．ＴＸＴとが格納されている。
【００２３】
また、ＤＩＲ２０００には、ＤＩＲ２１００が格納され、該ＤＩＲ２１００には、ＦＩＬ２１００Ａ．ＴＸＴからＦＩＬ２１００Ｚ．ＴＸＴまでが格納されている。
【００２４】
次に、図１６を参照して、ディレクトリ情報保持領域に保持される親ディレクトリ情報テーブルのデータ構造の一例を説明する。
【００２５】
図１６において、親ディレクトリ情報テーブル１５００には、所定のディレクトリに属するデータの記憶位置に関する情報が、ディレクトリ毎に親ディレクトリ情報として登録される。この親ディレクトリ情報は、ＬＲＵ１６０１、ディレクトリ名１６０２、クラスタチェーン１６０３、空きエントリ１６０４、及び、最終アクセスエントリ１６０５からなる。
【００２６】
ＬＲＵ１６０１は、登録された親ディレクトリ情報の新しさを示しており、番号が若い情報ほど、最新に登録されたこととなる。例えば、ディレクトリ名１６０２が"／ＤＩＲ１０００"の親ディレクトリ情報と"／ＤＩＲ１０００／ＤＩＲ１１００"の親ディレクトリ情報とを比較すると、"／ＤＩＲ１０００"の方が先にテーブル１６００に登録されたことが分かる。このようにして、新しく登録されるたびにＬＲＵ１６０１が繰り上がっていき、古いものから順に、親ディレクトリ情報テーブル１６００から削除されていくこととなる。
【００２７】
ディレクトリ名１６０２は、フルパスのディレクトリ名を登録している。たとえば、"ＤＩＲ１１１０"についてディレクトリ名１６０２を登録する場合には、フルパスで"／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０"と登録される。クラスタチェーン１６０３は、ディレクトリの本体データを記録しているクラスタのチェーンであり、開始クラスタ番号１４０９とＦＡＴ１３０３に登録されているクラスタチェーンとを組み合わせたものが登録される。即ち、このクラスタチェーン１６０３を利用することで、メモリカード２自体のＦＡＴ１３０３を参照しなくとも、目的とするディレクトリ内のエントリをメモリカード２から読み出すことが可能となる。
【００２８】
空きエントリ１６０４には、ディレクトリ名１６０２のディレクトリに含まれる空きエントリのうち最初の空きエントリの番号が登録される。尚、エントリ情報１４００は３２バイトのデータとして格納されるので、この番号により、最初の空きエントリの開始位置を特定することができる。また、最終アクセスエントリ１６０５には、ディレクトリ内で最後にアクセスされたエントリの番号が登録される。この番号により、空きエントリの開始位置と同様に最終アクセスエントリの開始位置を特定することができる。
【００２９】
次に、本発明の実施形態に対応するデータ処理装置１における処理を説明する。
【００３０】
＜全体処理＞
図２は、データ処理装置１において実行されるメインルーチンのフローチャートである。まず、ステップＳ１００において、外部装置３からのアクセス要求を受け付ける。ステップＳ１０１では、アクセス要求を受け付けたか否かを監視し、もしアクセス要求を受け付けた場合には（ステップＳ１０１において「ＹＥＳ」）、ステップＳ１０２に移行する。一方、受け付けない場合には（ステップＳ１０１において「ＮＯ」）、ステップＳ１００に戻る。
【００３１】
なお、ステップＳ１００において受け付けるアクセス要求には、要求対象となるデータのフルパス情報としての階層情報が含まれる。ここで、受け付けた要求が例えば、“ＦＩＬ１１１０Ａ．ＴＸＴ”というファイルを読み出す要求であったとする。このとき、該ファイルがメモリカード２内で格納されている位置は、フルパスで“／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０／ＦＩＬ１１１０Ａ．ＴＸＴ”と表され、これが階層情報となる。
【００３２】
ステップＳ１０２では、受け付けた要求がデータの読み出し要求であったか否かを判定する。もし読み出し要求であった場合には（ステップＳ１０２で「ＹＥＳ」）、ステップＳ１０８に移行して、メモリカード２からデータの読み出しを行う。一方、読み出し要求でなかった場合には（ステップＳ１０２で「ＮＯ」）、ステップＳ１０３に移行する。
【００３３】
ステップＳ１０３では、受け付けた要求がデータの書き込み要求であったか否かを判定する。もし書き込み要求であった場合には（ステップＳ１０３で「ＹＥＳ」）、ステップＳ１０９に移行する。ステップＳ１０９では、外部装置３から送信された書き込み用のデータをメモリカード２に書き込む処理を行う。一方、書き込み要求でなかった場合には（ステップＳ１０３で「ＮＯ」）、ステップＳ１０４に移行する。
【００３４】
ステップＳ１０４では、受け付けた要求がデータの新規作成要求であったか否かを判定する。もし新規作成要求であった場合には（ステップＳ１０４で「ＹＥＳ」）、ステップＳ１１０に移行する。ステップＳ１１０では、外部装置３からの要求に基づき新規作成処理を行う。一方、新規作成要求でなかった場合には（ステップＳ１０４で「ＮＯ」）、ステップＳ１０５に移行する。
【００３５】
ステップＳ１０５では、受け付けた要求がデータの削除要求であったか否かを判定する。もし削除要求であった場合には（ステップＳ１０５で「ＹＥＳ」）、ステップＳ１１１に移行する。ステップＳ１１１では、外部装置３からの要求に基づき削除要求対象のデータの削除処理を行う。一方、削除要求でなかった場合には（ステップＳ１０５で「ＮＯ」）、ステップＳ１０６に移行する。
【００３６】
ステップＳ１０６では、受け付けた要求がデータ処理装置１が対応できない要求であるとして、ステップＳ１０７でエラーを外部装置３に返す。また、ステップＳ１０８からステップＳ１１１までの処理を行った場合、ステップＳ１０７において処理結果を外部装置３に返す。
【００３７】
＜読み出し処理＞
次に、ステップＳ１０８におけるデータの読み出し処理について図３を参照して説明する。図３は、サブルーチンとしてのデータの読み出し処理の詳細の一例を示すフローチャートである。
【００３８】
図３において、ステップＳ２００では、外部装置３から読み出しが要求されたデータのエントリ情報１４００を取得する。もし、読み出しが要求されたデータのエントリ情報１４００が存在せず、取得できなかった場合には（ステップＳ２０１において「ＮＯ」）、ステップＳ２０６に移行する。ステップＳ２０６では、要求に係るデータが存在しない旨の通知（不存在通知）を、本サブルーチンの呼び出し元に返す。
【００３９】
一方、読み出しが要求されたデータのエントリ情報１４００が存在し、取得できた場合には（ステップＳ２０１において「ＹＥＳ」）、ステップＳ２０２に移行する。ステップＳ２０２では、取得したエントリ情報１４００に基づいて、メモリカード２から、要求に係るデータの本体データを揮発性メモリ１２に読み出す。
【００４０】
次に、ステップＳ２０３では、ステップＳ２０２におけるデータの読み出しが正常に行われたか否かを判定する。ここでの判定は、例えば、揮発性メモリ１２に読み出したデータサイズが、エントリ情報１４００におけるデータサイズ１４１０に登録されているデータサイズと一致するか否かによって行うことができる。もし、正常に読み出しが行われたと判定された場合には（ステップＳ２０３において「ＹＥＳ」）、ステップＳ２０４に移行する。一方、正常に読み出しを行うことができなかったと判定された場合には（ステップＳ２０３で「ＮＯ」）、ステップＳ２０５に移行する。
【００４１】
ステップＳ２０４では、揮発性メモリ１２に読み出された要求対象のデータと、要求された読出処理が成功した旨の通知を、本サブルーチンの呼び出し元に返す。ステップＳ２０５では、要求された読み出しが正常に行えなかった旨のエラー通知（読出エラー通知）を本サブルーチンの呼び出し元に返す。
【００４２】
＜書き込み処理＞
次に、ステップＳ１０９におけるデータの書き込み処理について図４を参照して説明する。図４は、サブルーチンとしてのデータの書き込み処理の詳細の一例を示すフローチャートである。
【００４３】
図４において、ステップＳ３００では、外部装置３から書き込みが要求されたデータのエントリ情報１４００を取得する。もし、書き込みが要求されたデータのエントリ情報１４００が存在せず、取得できなかった場合には（ステップＳ３０１において「ＮＯ」）、ステップＳ３０６に移行する。ステップＳ３０６では、要求に係るデータが存在しない旨の通知（不存在通知）を、本サブルーチンの呼び出し元に返す。
【００４４】
一方、書き込みが要求されたデータのエントリ情報１４００が存在し、取得できた場合には（ステップＳ３０１において「ＹＥＳ」）、ステップＳ３０２に移行する。ステップＳ３０２では、外部装置３から書き込みのために取得したデータを、エントリ情報１４００から判断したメモリカード２のメディアアクセス位置に書き込む。この際、メモリカード２に保持されているエントリ情報１４００の内容も更新される。
【００４５】
次に、ステップＳ３０３では、ステップＳ３０２におけるデータの書き込みが正常に行われたか否かを判定する。ここでの判定は、例えば、書き込みによる更新後のエントリ情報１４００のデータサイズ１４１０に登録されているデータサイズが、外部装置３から書き込みのために取得したデータのサイズと一致するかにより、行うことができる。もし、正常に書き込みが行われたと判定された場合には（ステップＳ３０３において「ＹＥＳ」）、ステップＳ３０４に移行する。一方、正常に書き込みを行うことができなかったと判定された場合には（ステップＳ３０３で「ＮＯ」）、ステップＳ３０５に移行する。
【００４６】
ステップＳ３０４では、要求された書き込み処理が成功した旨の通知を、本サブルーチンの呼び出し元に返す。ステップＳ３０５では、要求された書き込みが正常に行えなかった旨のエラー通知（書込エラー通知）を本サブルーチンの呼び出し元に返す。
【００４７】
＜新規作成処理＞
次に、ステップＳ１１０におけるデータの新規作成処理について図５を参照して説明する。図５は、サブルーチンとしてのデータの新規作成処理の詳細の一例を示すフローチャートである。
【００４８】
ステップＳ４００において、外部装置３から新規作成を要求されたデータ用のエントリ情報１４００のために、空きエントリをメモリカード２上で確保する。ここで、「空きエントリ」とは、初期状態のエントリ情報１４００を格納可能な空き領域のことである。また新規作成が要求されるデータは、ファイル又はディレクトリのいずれかとなる。もし、空きエントリを確保できなかった場合には（ステップＳ４０１において「ＮＯ」）、ステップＳ４０５に移行して、要求に係る新規作成処理に失敗した旨の通知（処理失敗通知）を、本サブルーチンの呼び出し元に返す。
【００４９】
一方、空きエントリを確保できた場合には（ステップＳ４０１において「ＹＥＳ」）、ステップＳ４０２に移行して、初期状態のエントリ情報１４００を作成する。具体的に、要求が新規ファイル作成の場合は、データサイズ１４１０を０の状態として生成する。また、要求が新規ディレクトリの場合は、空ディレクトリ状態にする。
【００５０】
初期状態のエントリ情報１４００の作成に成功した場合は（ステップＳ４０３において「ＹＥＳ」）、ステップＳ４０４において新規作成処理が成功した旨の通知を、本サブルーチンの呼び出し元に返す。一方、初期状態のエントリ情報１４００の作成に失敗した場合は（ステップＳ４０３において「ＮＯ」）、ステップＳ４０５に移行して、処理失敗通知を本サブルーチンの呼び出し元に返す。
【００５１】
＜削除処理＞
次に、ステップＳ１１１におけるデータの削除処理について図６を参照して説明する。図６は、サブルーチンとしてのデータの削除処理の詳細の一例を示すフローチャートである。
【００５２】
図６において、ステップＳ５００では、外部装置３から削除が要求されたデータ（ファイル又はディレクトリ）のエントリ情報１４００をメモリカード２から取得する。もし、削除が要求されたデータのエントリ情報１４００が存在せず、取得できなかった場合には（ステップＳ５０１において「ＮＯ」）、ステップＳ５０８に移行して、外部装置３に対し要求に係るデータが存在しない旨の通知（不存在通知）を行う。
【００５３】
一方、削除が要求されたデータのエントリ情報１４００が存在し、取得できた場合には（ステップＳ５０１において「ＹＥＳ」）、ステップＳ５０２に移行する。ステップＳ５０２では、削除要求に係るデータの本体データをメモリカード２から消去する。更に、ステップＳ５０３に移行して、メモリカード２内に保持されている対応するエントリ情報を空き状態に変更する。この変更は、エントリ情報１４００における属性１４０３の値を“空き状態”を示す値に変更することにより行うことができる。また、削除要求の対象がディレクトリの場合には、ステップＳ５０４において揮発性メモリ１２の親ディレクトリ情報テーブル１６００に登録されている該ディレクトリの親ディレクトリ情報も併せて消去する。
【００５４】
上記のステップＳ５０２からステップＳ５０４までの処理が正常に終了した場合には（ステップＳ５０５において「ＹＥＳ」）、ステップＳ５０６に移行して、削除処理が成功した旨の通知（削除処理成功通知）を本サブルーチンの呼び出し元に返す。一方、該処理が正常に終了しなかった場合は（ステップＳ５０５において「ＮＯ」）、ステップＳ５０７に移行して、削除処理が失敗した旨の通知（削除処理失敗通知）を本サブルーチンの呼び出し元に返す。
【００５５】
＜エントリ情報１４００の取得処理＞
次に、本実施形態に対応するエントリ情報１４００の取得処理について図７を参照して説明する。図７は、本実施形態に対応するエントリ情報１４００の取得処理のためのサブルーチンの一例を示すフローチャートである。また、このエントリ情報１４００の取得処理は、図３のステップＳ２００、図４のステップＳ３００及び図６のステップＳ５００において行われるものである。
【００５６】
図７において、ステップＳ６００では、外部装置３からの要求に含まれる階層情報に基づいて、要求対象データの親ディレクトリについて、親ディレクトリ情報テーブル１６００から親ディレクトリ情報を取得する。具体的には、要求対象データをディレクトリ“／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０”にあるファイル“ＦＩＬ１１１０Ａ．ＴＸＴ”とすると、親ディレクトリは“ＤＩＲ１１１０”となる。ここで、親ディレクトリ情報が取得できない場合には（ステップＳ６０１において「ＮＯ」）、ステップＳ６０５に移行する。ステップＳ６０５では、本サブルーチンの呼び出し元に対して、要求対象のデータのエントリ情報１４００が存在しない旨の通知（不存在通知）を返す。
【００５７】
一方、親ディレクトリ情報が取得できた場合には（ステップＳ６０１において「ＹＥＳ」）、ステップＳ６０２に移行する。ステップＳ６０２では、親ディレクトリ情報に基づいて該ディレクトリ内のデータを一時退避領域に読み出し、要求対象データのエントリ情報１４００を検索する。検索の結果、該エントリ情報１４００が発見された場合には（ステップＳ６０３において「ＹＥＳ」）、ステップＳ６０４において、本サブルーチンの呼び出し元に該エントリ情報１４００を返す。一方、該エントリ情報１４００が存在しない場合には（ステップＳ６０３において「ＮＯ」）、ステップＳ６０５において、本サブルーチンの呼び出し元に不存在通知を返す。
【００５８】
＜エントリ情報１４００の検索処理＞
次に、図８を参照して、エントリ情報１４００の検索処理について説明する。図８は、該処理のサブルーチンのフローチャートである。このエントリ情報１４００の検索処理は、図７のステップＳ６０２及び後述する図１１のステップＳ１００６において行われるものである。
【００５９】
まず、ステップＳ７００では、該親ディレクトリ情報に含まれるデータのうち、最終アクセスエントリ１６０５付近（例えば、前後２エントリ分）のデータを揮発性メモリ１２の一時退避領域に読み出して検索する。この検索の結果、目的とするファイル（上記例の場合は、ＦＩＬ１１１０Ａ．ＴＸＴ）のエントリ情報１４００を発見した場合には（ステップＳ７０１において「ＹＥＳ」）、ステップＳ７０２に移行する。ステップＳ７０２では、そのエントリ情報１４００を、本サブルーチンの呼び出し元に返す。このとき、該目的のエントリ情報１４００に基づき、親ディレクトリ情報テーブル１６００における該親ディレクトリ情報の最終アクセスエントリ１６０５を更新する。これにより、ステップＳ７０１において発見されたエントリ情報１４００が、新たな最終アクセスエントリ１６０５となる。
【００６０】
一方、エントリ情報１４００を発見できない場合は（ステップＳ７０１において「ＮＯ」）、ステップＳ７０３に移行する。なお、最終アクセスエントリ１６０５が未登録の場合も、ステップＳ７０３に移行する。ステップＳ７０３では、親ディレクトリ情報に基づき、該親ディレクトリ内の全てのエントリ情報１４００を揮発性メモリ１２の一時退避領域に読み出して、検索を行う。ここで、目的のエントリ情報１４００を発見できた場合は（ステップＳ７０４において「ＹＥＳ」）、ステップＳ７０２においてそのエントリ情報１４００を本サブルーチンの呼び出し元に返す。また、親ディレクトリ情報の最終アクセスエントリ１６０５が、該目的のエントリ情報１４００に基づいて更新される。また、空きエントリ１６０４が未登録の場合には、ステップＳ７０３における全エントリ走査の結果に基づいて、空きエントリ１６０４が更新される。一方、全エントリ情報を検索しても発見できない場合は（ステップＳ７０４において「ＮＯ」）、ステップＳ７０５において該当するエントリ情報１４００が存在しない旨の通知（不存在通知）を本サブルーチンの呼び出し元に返す。
【００６１】
＜空きエントリ確保のための処理＞
次に、図９を参照して、空きエントリ確保のための処理について説明する。図９は、該処理のサブルーチンのフローチャートである。この空きエントリ確保のための処理は、図５のステップＳ４００において行われるものである。
【００６２】
図９において、ステップＳ８００では、外部装置３からの要求に含まれる階層情報に基づいて、親ディレクトリ情報を親ディレクトリ情報テーブル１６００から取得する。ここで、親ディレクトリ情報が取得できない場合には（ステップＳ８０１において「ＮＯ」）、ステップＳ８０９に移行する。ステップＳ８０９では、本サブルーチンの呼び出し元に対して、空きエントリが確保できない旨を通知（確保失敗通知）する。
【００６３】
一方、親ディレクトリ情報を取得できた場合には（ステップＳ８０１において「ＹＥＳ」）、ステップＳ８０２に移行し、親ディレクトリを走査して空きエントリを検索する。もし、空きエントリが見つかった場合には（ステップＳ８０３において「ＹＥＳ」）、ステップＳ８０４において該空きエントリを本サブルーチンの呼び出し元に返す。
【００６４】
一方、空きエントリが見つからなかった場合は（ステップＳ８０３において「ＮＯ」）、ステップＳ８０６に移行する。ステップＳ８０６では、メモリカード２上の親ディレクトリの領域を拡張する。もし、親ディレクトリの領域を拡張できた場合には（Ｓ８０６において「ＹＥＳ」）、ステップＳ８０７においてディレクトリを走査して空きエントリを検索し直す。ここで見つけた空きエントリは、ステップＳ８０４において本サブルーチンの呼び出し元に返される。
【００６５】
一方、親ディレクトリ領域を拡張できなかった場合（ステップＳ８０６において「ＮＯ」）、ステップＳ８０８に移行する。ステップＳ８０８では、親ディレクトリの拡張に失敗し、空きエントリが確保できない旨の通知（拡張失敗通知）を、本サブルーチンの呼び出し元に返す。
【００６６】
＜空きエントリ検索処理＞
次に、図１０を参照して、空きエントリ検索処理について説明する。図１０は、該処理のサブルーチンのフローチャートである。この空きエントリ検索処理は、図９のステップＳ８０２及びＳ８０７において行われるものである。
【００６７】
図１０において、ステップＳ９００では、親ディレクトリ情報テーブル１６００の空きエントリ１６０４に基づいて、親ディレクトリ内の空きエントリを検索する。
【００６８】
もし、空きエントリ１６０４が登録されている場合は（ステップＳ９０１において「ＹＥＳ」）、ステップＳ９０２において、該空きエントリを本サブルーチンの呼び出し元に返す。一方、空きエントリ１６０４が登録されていない場合は（ステップＳ９０１において「ＮＯ」）、ステップＳ９０３において空きエントリが存在しない旨の通知（空きエントリ不存在通知）を本サブルーチンの呼び出し元に返す。
【００６９】
＜親ディレクトリ情報の取得処理＞
次に、親ディレクトリ情報の取得のため処理の一例を、図１１を参照して説明する。図１１は親ディレクトリ情報の取得処理のためのサブルーチンの一例を示すフローチャートである。この親ディレクトリ情報の取得処理は、図７のステップＳ６００において行われるものである。
【００７０】
図１１において、ステップＳ１０００では、対応する親ディレクトリ情報が親ディレクトリ情報テーブル１６００に保持されているか否かを調べる。
【００７１】
このとき、目的とするディレクトリの属する階層数をＮとする。例えば、“／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０／”の”ＤＩＲ１１１０”が親ディレクトリ情報を取得しようとするディレクトリとすると、階層数Ｎは”３”となる。なお、階層数Ｎは、ルートディレクトリ直下のディレクトリを”１”としてカウントする。
【００７２】
ステップＳ１００１では、親ディレクトリ情報を取得しようとするＮ（上記の例では”３”）階層目のディレクトリ（上記の例では”ＤＩＲ１１１０”）について、親ディレクトリ情報テーブル１６００を探索する。もし、目的とする親ディレクトリ情報が保持されている場合には（ステップＳ１００１において「ＹＥＳ」）、ステップＳ１００２に移行する。ステップＳ１００２では、該親ディレクトリ情報のＬＲＵ１６０１が最小となるように、テーブルの登録順位を変更する。これにより、該親ディレクトリ情報の未使用時間が最短のものに設定される。また、同一の親ディレクトリについて親ディレクトリ情報を保持しているか否かを次回検索する際の時間を短縮することができる。ステップＳ１００３では、取得された親ディレクトリ情報を、本サブルーチンの呼び出し元に返す。
【００７３】
一方、該Ｎ階層目のディレクトリの親ディレクトリ情報がテーブル１６００に登録されていない場合には（ステップＳ１００１において「ＮＯ」）、ステップＳ１００４に移行する。ステップＳ１００４では、階層数Ｎが１であるか否かを判定する。Ｎが１の場合（ステップＳ１００４において「ＹＥＳ」）、ステップＳ１０１０に移行する。一方、Ｎが１でない場合（ステップＳ１００４において「ＮＯ」）、ステップＳ１００５に移行する。
【００７４】
ステップＳ１００５では、図１１に示す「親ディレクトリ情報取得」の処理を、Ｎ−１（上記の例では”２”）階層目のディレクトリ（上記の例では”ＤＩＲ１１００”）について実行する。このようにして、上の階層のディレクトリの親ディレクトリ情報の取得処理が再帰的に実行される。
【００７５】
ステップＳ１００５において、該Ｎ−１上階層目の親ディレクトリ情報が取得できた場合には（ステップＳ１００６において「ＹＥＳ」）、ステップＳ１００７に移行する。ステップＳ１００７では、取得した親ディレクトリ情報に基づいてディレクトリ（上記の例では”ＤＩＲ１１００”）内のエントリ情報１４００を揮発性メモリ１２の一時退避領域に読み出す。そして、Ｎ（上記の例では”３”）階層目のディレクトリ（上記の例では”ＤＩＲ１１１０”）のエントリ情報１４００を検索する。これにより該Ｎ階層目のディレクトリについてエントリ情報１４００が取得できた場合は（ステップＳ１００８において「ＹＥＳ」）、ステップＳ１００９に移行する。ステップＳ１００９では、該エントリ情報１４００に基づいて、親ディレクトリ情報の親ディレクトリ情報テーブル１６００への登録を行う。その後、ステップＳ１００３に移行して、取得した親ディレクトリ情報を、本サブルーチンの呼び出し元に返す。
【００７６】
なお、ステップＳ１００５においてＮ−１（上記の例では”２”）階層目の親ディレクトリ情報が取得できない場合、及び、ステップＳ１００８においてエントリ情報１４００がない場合は、ステップＳ１０１２に移行する。
【００７７】
ステップＳ１００４においてＮ＝１と判定された場合、１階層目のディレクトリ（上記の例では”ＤＩＲ１０００”）、即ちルート直下のディレクトリについて親ディレクトリ情報が、テーブル１６００に登録されていないこととなる。その場合には、メモリカード２のルートディレクトリからエントリ情報１４００を読み出して、該１階層目のディレクトリのエントリ情報１４００を検索する。もし、該エントリ情報１４００が取得された場合には（ステップＳ１０１１において「ＹＥＳ」）、ステップＳ１００９に移行する。ステップＳ１００９では、該エントリ情報１４００に基づいて１階層目のディレクトリについて親ディレクトリ情報をテーブル１６００に登録する。一方、エントリ情報１４００が取得できなかった場合には、ステップＳ１０１２に移行して、親ディレクトリ情報が存在しない旨の通知（不存在通知）を本サブルーチンの呼び出し元に返す。
【００７８】
＜親ディレクトリ情報の登録処理＞
次に、親ディレクトリ情報をテーブル１６００に登録する処理の一例を、図１２を参照して説明する。図１２は親ディレクトリ情報を登録する処理のサブルーチンの一例を示すフローチャートである。この親ディレクトリ情報の登録処理は、図１１のステップＳ１００９において行われるものである。
【００７９】
図１２において、ステップＳ１１００では、揮発性メモリ１２上の親ディレクトリ情報テーブル１６００に空きがあるかを調べる。ここで、該テーブル１６００に空きがある場合には（ステップＳ１１０１において「ＹＥＳ」）、ステップＳ１１０２に移行して、取得されたエントリ情報１４００に基づき親ディレクトリ情報をテーブル１６００に登録する。その際、新たに登録される親ディレクトリ情報はＬＲＵ１６０１は最小、即ち”１”となり、他の親ディレクトリ情報のＬＲＵ１６０１は一つずつ繰り上がる。
【００８０】
一方、該テーブル１６００に空きがない場合は（ステップＳ１１０１において「ＮＯ」）、ステップＳ１１０３に移行して、ＬＲＵ１６０１の最大が最大の親ディレクトリ情報をテーブル１６００から削除する。その後、ステップＳ１１０２において、新たに登録される親ディレクトリ情報に最小のＬＲＵ１６０１を割り当てて登録し、他の親ディレクトリ情報のＬＲＵ１６０１は一つずつ繰り上げる。
【００８１】
＜親ディレクトリ情報取得の具体例＞
以下、図１１における親ディレクトリ情報取得処理をより具体的に説明する。
【００８２】
＜具体例１＞
図１５のデータ構造において、／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０／ＦＩＬ１１１０Ａ．ＴＸＴを読み出す場合を考える。このとき、親ディレクトリ情報テーブル１６００に、親ディレクトリ情報が全く登録されていないとする。親ディレクトリ情報テーブル１６００の登録状況は図１７に示す。なお、図１７では簡単のために、ＬＲＵ１６０１とディレクトリ名１６０２のみを示す。図１７（ａ）では、未登録状態の親ディレクトリ情報テーブル１６００を示している。
【００８３】
まず、ステップＳ１０００では、ディレクトリ”ＤＩＲ１１１０”の親ディレクトリ情報が親ディレクトリ情報テーブル１６００に保持されているかが探索される。この探索は、フルパスに対応する”／ＤＩＲ１０００／ＤＩＲ１１００／ＤＩＲ１１１０”をディレクトリ名１６０２とする親ディレクトリ情報が存在するか否かに基づいて行うことができる。
【００８４】
親ディレクトリ情報テーブル１６００には親ディレクトリ情報が登録されていないので、ステップＳ１００１では当然に親ディレクトリ情報が無いと判定される。よって、ステップＳ１００４に移行して、親ディレクトリ情報を得ようとしているディレクトリの階層数：Ｎが１であるか否かを判定する。ＤＩＲ１１１０は、ルートディレクトリ直下のＤＩＲ１０００を１階層目として３階層目に当たるので、階層数：Ｎは３であり、１ではない。よって、ステップＳ１００５に移行する。
【００８５】
ステップＳ１００５では、Ｎ−１階層目、即ち、１階層上のディレクトリを対象として、親ディレクトリ情報の取得処理を行う。ここで、Ｎ階層目のディレクトリがＤＩＲ１１１０であり、その親ディレクトリであるＤＩＲ１１００がＮ−１階層目のディレクトリとなる。
【００８６】
ステップＳ１００５における親ディレクトリ情報の取得処理は、図１１の全体の処理を、ＤＩＲ１１００をＮ階層目のディレクトリとして実行する処理である。ＤＩＲ１１００についても同様にステップＳ１０００、Ｓ１００１、Ｓ１００４を実行すると、親ディレクトリ情報テーブル１６００は未登録状態であり、Ｎは１でないので、ステップＳ１００５にたどり着く。ここで、”ＤＩＲ１１００”の更に１階層上の”ＤＩＲ１０００”について親ディレクトリ情報の取得処理が実行されることとなる。
【００８７】
”ＤＩＲ１０００”についてもステップＳ１００１までは同様に処理されるが、”ＤＩＲ１０００”はルートディレクトリ直下のディレクトリであるので、階層数：Ｎは１である。従って、ステップＳ１００４からステップＳ１０１０に移行する。ステップＳ１０１０では、メモリカード２のルートディレクトリ内のエントリ情報１４００が揮発性メモリ１２の一時退避領域に読み出され、ＤＩＲ１０００のエントリ情報１４００が検索される。ここでＤＩＲ１０００のエントリ情報１４００が見つかると、ステップＳ１００９に移行して、親ディレクトリ情報が、親ディレクトリ情報テーブル１６００に登録される（図１７（ｂ））。そして、ステップＳ１００３で、”ＤＩＲ１０００”の親ディレクトリ情報が、”ＤＩＲ１０００”の親ディレクトリ情報取得ルーチンの呼び出し元に返される。
【００８８】
該呼び出し元とは、”ＤＩＲ１１００”の親ディレクトリ情報取得ルーチンにおけるステップＳ１００５である。ステップＳ１００５で”ＤＩＲ１０００”の親ディレクトリ情報を取得すると（ステップＳ１００６において「ＹＥＳ」）、ステップＳ１００７に移行する。ステップＳ１００７では、”ＤＩＲ１０００”の親ディレクトリ情報に基づいて、”ＤＩＲ１０００”内のエントリ情報１４００が揮発性メモリ１２の一時退避領域に読み出され、”ＤＩＲ１１００”のエントリ情報１４００が検索される。
【００８９】
ここで、”ＤＩＲ１１００”のエントリ情報１４００が見つかれば（ステップＳ１００８において「ＹＥＳ」）、ステップＳ１００９に移行する。ステップＳ１００９では、該エントリ情報１４００に基づいて、”ＤＩＲ１１００”の親ディレクトリ情報が親ディレクトリ情報テーブル１６００に登録される（図１７（ｃ））。このとき、先に登録されていた”ＤＩＲ１０００”の親ディレクトリ情報は、ＬＲＵ１６０１の値が変更され、”ＤＩＲ１１００”の親ディレクトリ情報よりも古い情報となる。
【００９０】
次に、ステップＳ１００３で、”ＤＩＲ１１００”の親ディレクトリ情報が、”ＤＩＲ１１００”の親ディレクトリ情報取得ルーチンの呼び出し元に返される。ここでの呼び出し元とは、”ＤＩＲ１１１０”の親ディレクトリ情報取得ルーチンにおけるステップＳ１００５である。ステップＳ１００５で”ＤＩＲ１１００”の親ディレクトリ情報を取得すると（ステップＳ１００６において「ＹＥＳ」）、ステップＳ１００７に移行する。ステップＳ１００７では、”ＤＩＲ１１００”の親ディレクトリ情報に基づいて、”ＤＩＲ１１００”内のエントリ情報１４００が揮発性メモリ１２の一時退避領域に読み出され、”ＤＩＲ１１１０”のエントリ情報１４００が検索される。
【００９１】
”ＤＩＲ１１１０”のエントリ情報１４００が見つかれば（ステップＳ１００８において「ＹＥＳ」）、ステップＳ１００９に移行する。ステップＳ１００９では、該エントリ情報１４００に基づいて、”ＤＩＲ１１１０”の親ディレクトリ情報が親ディレクトリ情報テーブル１６００に登録される（図１７（ｄ））。このとき、先に登録されていた”ＤＩＲ１０００”及び”ＤＩＲ１１００”の親ディレクトリ情報は、ＬＲＵ１６０１の値が変更され、”ＤＩＲ１１１０”の親ディレクトリ情報よりも古い情報となる。
【００９２】
次に、ステップＳ１００３で、”ＤＩＲ１１００”の親ディレクトリ情報が、”ＤＩＲ１１００”の親ディレクトリ情報取得ルーチンの呼び出し元に返される。ここでの呼び出し元とは、例えば図７のエントリ情報１４００取得ルーチンにおけるステップＳ６００である。
【００９３】
なお、”ＦＩＬ１１１０Ａ．ＴＸＴ”について、例えば読み出しを行う場合を更に説明する。図７では、”ＤＩＲ１１１０”の親ディレクトリ情報に基づき、”ＤＩＲ１１１０”内のエントリ情報１４００を検索し、”ＦＩＬ１１１０Ａ．ＴＸＴ”のエントリ情報１４００を取得することができる。ここで得られた”ＦＩＬ１１１０Ａ．ＴＸＴ”のエントリ情報１４００は、図７のエントリ情報取得処理の呼び出し元である、図３の読出処理に返される。図３の読み出し処理では、ステップＳ２０２において、得られたエントリ情報１４００に基づいて”ＦＩＬ１１１０Ａ．ＴＸＴ”の本体データを読み出すことができる。
【００９４】
以上のように、親ディレクトリ情報テーブル１６００に、親ディレクトリ情報が全く格納されていない場合でも、図１１の処理を再帰的に実行することで目的の親ディレクトリ情報を取得し、目的のファイルデータを取得することができる。ここで、再帰的な処理を実行する過程で得られたエントリ情報１４００に基づいて、親ディレクトリ情報がテーブル１６００に登録される。これにより、以下に示す＜具体例２＞のように、ルートディレクトリまで遡らなくても、目的の親ディレクトリ情報を効率的に取得することが可能となる。
【００９５】
＜具体例２＞
＜具体例１＞におけるディレクトリ探索履歴等を利用して、他のディレクトリに格納されているファイルを読み出す場合を説明する。例えば、”／ＤＩＲ１０００／ＤＩＲ１２００／ＤＩＲ１２１０／ＤＩＲ１２１１／ＦＩＬ１２１１Ａ．ＴＸＴ”を読み出す場合を考える。ここで、”ＤＩＲ１２００”、”ＤＩＲ１２１０”、”ＤＩＲ１２１１”の親ディレクトリ情報は、親ディレクトリ情報テーブル１６００に保持されていない（図１８（ａ））。しかし、”ＤＩＲ１０００”については、上記の＜具体例１＞において親ディレクトリ情報テーブル１６００に保持されたので、メモリカード２にアクセスする必要なく親ディレクトリ情報を取得することができる。この”ＤＩＲ１０００”の親ディレクトリ情報に従い、＜具体例１＞と同様に”ＤＩＲ１２００”、”ＤＩＲ１２１０”、”ＤＩＲ１２１１”の親ディレクトリ情報を取得することができる（図１８（ｂ）、（ｃ）、（ｄ））。
【００９６】
ここで取得された親ディレクトリ情報が親ディレクトリ情報テーブル１６００に登録されることにより、それ以前に登録された古い親ディレクトリ情報がテーブル１６００から消去される。例えば、図１８（ｃ）で、ＬＲＵ１６０１が”８”の親ディレクトリ情報は、ＤＩＲ１２１１の親ディレクトリ情報が登録されることにより、テーブル１６００から消去されている。
【００９７】
また、取得された”ＤＩＲ１２１１”の親ディレクトリ情報に基づき、”ＦＩＬ１２１１Ａ．ＴＸＴ”のエントリ情報１４００も上記と同様に取得でき、最終的に目的とするファイルの本体データを取得できる。
【００９８】
このように、目的のファイルのフルパスのうち、いずれかのディレクトリの親ディレクトリ情報が親ディレクトリ情報テーブル１６００登録されている場合には、これを利用して効率的に目標のファイルを取得することができる。
【００９９】
以上のように本実施形態によれば、着脱可能な記憶媒体としてのメモリカードにデータの読み出し、書き込み、新規作成、又は、削除を行う場合に、アクセス済みのディレクトリのエントリ情報を利用することができる。よって、各階層の情報を予めメモリ内に全て確保しておく必要もなく、メモリ容量の小さなシステムであっても、効率的にメモリカードへのアクセスを行うことができる。
【０１００】
また、アクセス対象のデータは、同一ディレクトリ内で最後にアクセスされたデータが記録されている位置を利用して探索を行うことができる。これにより、ディレクトリ内の全データに順にアクセスするよりも、高速に目的とするデータにたどり着くことが可能となる。
【０１０１】
［その他の実施形態］
なお、本発明は、複数の機器（例えばホストコンピュータ、インタフェイス機器、リーダ、プリンタなど）から構成されるシステムに適用しても、一つの機器からなる装置（例えば、複写機、ファクシミリ装置など）に適用してもよい。
【０１０２】
また、本発明の目的は、前述した機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システムに供給し、そのシステムがプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現し、そのプログラムコードを記憶した記憶媒体は本発明を構成する。また、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した機能が実現される場合も含まれる。
【０１０３】
さらに、以下の形態で実現しても構わない。すなわち、記憶媒体から読み出されたプログラムコードを、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込む。そして、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行って、前述した機能が実現される場合も含まれる。
【０１０４】
本発明を上記記憶媒体に適用する場合、その記憶媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１０５】
【図１】本発明の実施形態に対応するデータ処理システムの構成の一例を示す図である。
【図２】本発明の実施形態に対応するデータ処理装置１での全体処理の一例を示すフローチャートである。
【図３】本発明の実施形態に対応する読み出し処理のサブルーチン一例を示すフローチャートである。
【図４】本発明の実施形態に対応する書き込み処理のサブルーチンの一例を示すフローチャートである。
【図５】本発明の実施形態に対応する新規作成処理のサブルーチンの一例を示すフローチャートである。
【図６】本発明の実施形態に対応する削除処理のサブルーチンの一例を示すフローチャートである。
【図７】本発明の実施形態に対応するエントリ情報の取得処理のサブルーチンの一例を示すフローチャートである。
【図８】本発明の実施形態に対応するエントリ情報検索処理のサブルーチンの一例を示すフローチャートである。
【図９】本発明の実施形態に対応する空きエントリ確保の処理のサブルーチンの一例を示すフローチャートである。
【図１０】本発明の実施形態に対応する空きエントリ検索処理のサブルーチンの一例を示すフローチャートである。
【図１１】本発明の実施形態に対応する親ディレクトリ情報取得処理のサブルーチンの一例を示すフローチャートである。
【図１２】本発明の実施形態に対応するディレクトリ情報を保持する処理のサブルーチンの一例を示すフローチャートである。
【図１３】本発明の実施形態に対応するメモリカード２内におけるデータ構造の一例を簡略的に示す図である。
【図１４】本発明の実施形態に対応するエントリ情報のデータ構成の一例を示す図である。
【図１５】本発明の実施形態に対応するメモリカード２に格納されたデータのディレクトリ構造の一例を示す図である。
【図１６】本発明の実施形態に対応する親ディレクトリ情報テーブルのデータ構造の一例を示す図である。
【図１７】本発明の実施形態に対応する、親ディレクトリ情報テーブルの登録状態の一例を示す図である。
【図１８】本発明の実施形態に対応する、親ディレクトリ情報テーブルの登録状態の他の一例を示す図である。
【図１】
2007109181.tif 000003
【図２】
2007109181.tif 000004
【図３】
2007109181.tif 000005
【図４】
2007109181.tif 000006
【図５】
2007109181.tif 000007
【図６】
2007109181.tif 000008
【図７】
2007109181.tif 000009
【図８】
2007109181.tif 000010
【図９】
2007109181.tif 000011
【図１０】
2007109181.tif 000012
【図１１】
2007109181.tif 000013
【図１２】
2007109181.tif 000014
【図１３】
2007109181.tif 000015
【図１４】
2007109181.tif 000016
【図１５】
2007109181.tif 000017
【図１６】
2007109181.tif 000018
【図１７】
2007109181.tif 000019
【図１８】
2007109181.tif 000020