(57)【要約】【課題】ブロックベースの通信方式により、ホストの利用者に仮想ファイル名を提示し、実際に記録されたファイルと同様に仮想ファイルを読み出すことができるようにする。【解決手段】ホストから読み出し要求されたアドレスがどの仮想の領域に対応するのか判断し、実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを仮想ファイル空間に変換して前記ホストに送信する。仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信する。【選択図】図１
2013045146.tif 000002
【特許請求の範囲】
【請求項１】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
前記所定の単位はセクタ単位であることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置の情報処理方法であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する工程と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御工程と、
を備えたことを特徴とする情報処理方法。
【請求項４】
請求項３に記載の情報処理方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特にブロックベースのストレージ機能を有する情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
ホストとストレージデバイスとの間の通信方法は、アクセス単位の抽象度という観点から、ブロックベースとファイルベースとの２つに分類することができる。ブロックベースでは、セクタなど所定のブロックサイズ（例えば５１２バイト）をアクセス単位とする。ホストがＲＥＡＤする場合、ホストは所望するブロックデータのアドレスをストレージデバイスに送り、ストレージデバイスは対応するブロックデータを内部記憶装置から読み出してホストに送信する。ＵＳＢマスストレージは、ブロックベースのストレージデバイス向けの規格の一例である。
【０００３】
一方、ファイルベースの通信方法では、データを指定するのにファイル名を用いる。ホストからのＲＥＡＤ処理であれば、ホストからはファイル名をストレージデバイスに送り、ストレージデバイスは受信したファイル名に対応するファイルデータを内部記憶装置から読み出してホストに送信する。この方法は例えばＮＡＳなどで用いられている。例えばＬｉｎｕｘ（登録商標）などの汎用ＯＳが動作するホストの利用者は、ファイルシステムと呼ばれるソフトウェアを介してストレージデバイスにアクセスする。ファイルシステムの利用者は、ストレージデバイスがブロックベースであっても、ファイルベースでアクセスすることができる。すなわち、ブロックベースのストレージデバイス向けに作成されたファイルシステムは、ファイル名からファイルデータのアドレスへの変換を内部的に行っている。
【０００４】
以下、ホストのファイルシステムが、ファイルとファイルデータアドレスとの対応づけに必要な情報を取得する処理を簡単に説明する。
図１４は、ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。図１４に示されるように、先頭にマスターブートレコード領域が記録され、連続して１つ以上のパーティションが記録されている。
【０００５】
図１５は、マスターブートレコード領域のパーティションテーブルを示す図である。パーティションテーブルには、パーティションの開始位置とサイズといった情報が記録されている。ホストは先頭（アドレス０）にあるマスターブートレコード領域を読み出すことで、各パーティションの先頭アドレスを指定することが可能となる。
【０００６】
図１４に示した通り、各パーティションはブートレコード領域と、管理領域と、ディレクトリ領域とファイルデータ領域とから構成されている。ブートレコード領域には、管理領域の先頭アドレスと、ディレクトリ領域及びファイルデータ領域の先頭アドレスとを算出するための情報が記録されている。管理領域やディレクトリ領域、ファイルデータ領域では、データの記録位置を示すのにセクタのアドレスではなく、クラスタ番号が用いられる。クラスタはセクタの所定倍を単位としたものであるため、クラスタ番号からセクタアドレスを算出することができる。ブートレコード領域には、このクラスタの大きさの情報も記録されている。
【０００７】
例えば、パーティションがＦＡＴ１６形式でフォーマットされているとすると、ルートディレクトリのディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭に記録されている。ホストはこのブートレコード領域を読み出すことにより、ルートディレクトリ領域の先頭アドレスを指定することが可能となる。
【０００８】
また、ディレクトリ領域には、そのディレクトリに属するサブディレクトリ及びファイルの一覧と、それぞれに対応するディレクトリ領域及びファイルデータ領域の先頭クラスタ番号が記録されている。ホストはディレクトリ領域を読み出すことにより、そのディレクトリに属するサブディレクトリのディレクトリ領域や、ファイルのファイルデータ領域の先頭アドレスを指定することが可能となる。
【０００９】
１つのファイルに対応するファイルデータを構成する各クラスタは、連続して記録される必要はない。管理領域は、クラスタチェーンと呼ばれる、各クラスタがどのように連結されているかを示すリンクドリストが記録されている。ホストはこの管理領域を適宜参照することにより、目的とするディレクトリのディレクトリ領域やファイルデータ領域の先頭アドレスから先頭クラスタ以降のアドレスを取得することが可能となる。以上より、ホストのファイルシステムはファイル名とアドレスとの対応づけを行うことが可能となる。
【００１０】
ここで、ホストの利用者は、ストレージデバイスに記憶されているファイルデータを変換するという作業を行うことがある。時としてこの作業は煩雑である。例えばテキストファイルの文字コードを変換するには、ホストへの一時的なコピーや、文字コード変換プログラムの起動、変換ファイルの命名といった手間がある。この煩雑さを解決するものとして、ファイルデータを記録する装置が、実際に記録されたファイルに加えて、それらのファイルから変換可能なファイルを重畳して利用者に提示する技術も知られている。
【００１１】
例えば特許文献１に記載の方法によれば、サーバーは、クライアントからディレクトリ内容のＲＥＡＤ要求を受信する。そして、サーバーは、この要求に応じて、内部記憶装置に実際に記録されているファイルと、そのファイルを元に生成できるファイル（以降、仮想ファイルと呼ぶ）とを重畳したリストをクライアントに送信する。そして、サーバーが仮想ファイルに対するＲＥＡＤ要求を受信した際は、元ファイルに対応するファイルデータを変換することで対応するファイルデータを生成し、クライアントに送信する。
【００１２】
このような技術を用いれば、ホスト上で変換を行うプログラムを実行する必要がなくなり、利用者の利便性が向上する。すなわち、利用者は特段の変換操作をせずとも、所望する変換された形式のファイルを利用することができる。また、仮想ファイルのファイルデータはサーバーの内部記憶装置に記録されないので、内部記憶装置の使用効率が高い。また、特許文献１に記載の技術は、ネットワーク接続されたサーバーとクライアントとに跨るファイル管理に関する技術であるが、このサーバーはファイルベースのストレージデバイスと本質的に等価である。すなわちこの技術を、ファイルベースのストレージデバイスに適用することは容易である。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開平１０−７４１５３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
ブロックベースのストレージデバイスは、ホストからはファイル名ではなくブロック番号が指定され、ブロック番号に対応するブロックデータを送受信するが、ブロックデータの内容を解釈しない。そのため、特許文献１に記載された、仮想ファイルをホストに提示する機能や、ホストの要求に応じて仮想ファイルのファイルデータを動的生成するといった機能を備えることができなかった。
【００１５】
本発明は前述の問題点に鑑み、ブロックベースの通信方式により、ホストの利用者に仮想ファイル名を提示し、実際に記録されたファイルと同様に仮想ファイルを読み出すことができるようにすることを目的としている。
【課題を解決するための手段】
【００１６】
本発明の情報処理装置は、ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、を備えたことを特徴とする。
【発明の効果】
【００１７】
本発明によれば、ブロックベースのストレージデバイスは、内部の記憶装置に記録されているファイルと、そのファイルを元に動的に生成可能な仮想ファイルとを重畳してホストに提示することが可能になる。また、ホストから仮想ファイルのファイルデータが記録されたブロックを要求された際には、仮想ファイルに対応するファイルデータを生成してホストに送信することが可能になる。これにより、ストレージデバイスの内部記憶装置の使用効率と、ホストの利用者の利便性とを向上することができる。
【図面の簡単な説明】
【００１８】
【図１】第１の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図２】第１及び第２の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図３】実施形態に係る情報処理装置が備える仮想ファイル空間を示す図である。
【図４】中間データ生成部により二次記憶装置から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
【図５】中間データの構造を示す図である。
【図６】ホストからのＲＥＡＤ要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
【図７】第１の制御部により行われる処理の手順の一例を示すフローチャートである。
【図８】第２の制御部により行われる処理の手順の一例を示すフローチャートである。
【図９】第３の制御部により行われる処理の手順の一例を示すフローチャートである。
【図１０】Ｓ７０８における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
【図１１】Ｓ７１２におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
【図１２】Ｓ８０２における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
【図１３】Ｓ８０４における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
【図１４】ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。
【図１５】マスターブートレコード領域のパーティションテーブルを示す図である。
【図１６】ブートレコード領域の一部を示す図である。
【図１７】ディレクトリ領域に属するブロックデータの一例を示す図である。
【図１８】第１の実施形態において、電源投入後にＣＰＵが実行する処理手順の一例を示すフローチャートである。
【図１９】第２の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図２０】第２の実施形態において、電源投入後にＣＰＵが実行する処理手順の一例を示すフローチャートである。
【図２１】第３の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図２２】第３の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図２３】第３の実施形態において、電源投入後にＣＰＵが実行する処理手順の一例を示すフローチャートである。
【図２４】Ｓ２３０５で中間データを更新する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
（第１の実施形態）
以下、本発明の第１の実施形態について図面を参照しながら説明する。
図１は、本実施形態に係る情報処理装置１００の機能構成例を示すブロック図である。
図１において、情報処理装置１００は、ホストからのＲＥＡＤ要求に指定されたアドレス１０１を受信すると、対応するブロックデータ１０２をホストに送信する。仮想ファイル空間１０３は、後述する二次記憶装置に実際に記録されているファイル（以降、元ファイルと呼ぶ）と、そのファイルを変換することで作成されるファイル（以降、仮想ファイルと呼ぶ）とを重畳した仮想的なファイル空間である。１０４は、二次記憶装置に記録されている実ファイル空間１０５とそれを基に予め生成された中間データ１０６とから仮想ファイル空間１０３を動的に生成し、ホストに送信する制御部である。
【００２０】
第１の制御部１０７は、仮想ファイル空間１０３のうち、実ファイル空間１０５の所定単位のブロックデータを読み取って、ブロックデータのうち実ファイル空間１０５に基づくフィールドを仮想ファイル空間に変換してホストに送信する。この処理の詳細は後述する。第２の制御部１０８は、仮想ファイル空間１０３のうち、後述する仮想管理領域や仮想ディレクトリ領域を生成してホストに送信する。この処理についても詳細は後述する。第３の制御部１０９は、仮想ファイルのファイルデータを、実ファイル空間にある元ファイルのファイルデータを変換することによって生成してホストに送信する。この処理についても詳細は後述する。
【００２１】
１１０は、実ファイル空間１０５から仮想ファイル空間１０３を生成する処理を高速化するための中間データ１０６を生成する中間データ生成部であり、詳細は後述する。
なお、本実施形態における前記所定単位は、セクタ単位である。
【００２２】
図２は、本実施形態に係る情報処理装置１００のハードウェア構成の一例を示すブロック図である。
図２において、２０１は情報処理装置１００全体を制御するプログラムを動作させるＣＰＵである。２０２はプログラムやデータを一時記憶する一次記憶装置である。２０３はストレージデバイスとしてホストから読み書きされるデータを記録するための、不揮発な二次記憶装置であり、ＦＡＴ１６形式を用いて実ファイル空間１０５が記録されている。２０４はホストとブロックベースのデータを送受信するための通信装置であり、ＵＳＢのマスストレージクラスの通信を行う。２０５はこれらの各ユニットを通信可能に接続したバスである。
【００２３】
図３は、本実施形態に係る情報処理装置１００が備える仮想ファイル空間１０３を示す図である。
図３において、３０１は実ファイル空間１０５のブートレコード領域であり、二次記憶装置２０３に記録されている。ブートレコード領域の詳細は後述するが、このパーティションの大きさなどの情報が記録されている。３０２は実ファイル空間１０５の管理領域であり、二次記憶装置２０３に記録されている。後述するディレクトリ領域及びファイルデータ領域３０３に用いられるクラスタがどのように連結されているかを示すデータが記録されている。３０３は実ファイル空間１０５のディレクトリ領域及びファイルデータ領域であり、二次記憶装置２０３に記録されている。特に、これらの各領域は、仮想ファイル空間にマッピングされていると捉えることができる。
【００２４】
３０４は仮想ファイル空間１０３のブートレコード領域であって、実ファイル空間１０５のブートレコード領域３０１に対応するものである。実ファイル空間１０５のブートレコード領域３０１に比べて、パーティションの大きさに関するフィールドは、後述する仮想管理領域３０６と後述する仮想ディレクトリ領域及び仮想ファイルデータ領域３０８の大きさを加味した値に変更されている。
【００２５】
３０５は仮想ファイル空間１０３の管理対象を示す管理領域であって、実ファイル空間１０５の管理領域３０２に対応するものである。実ファイル空間１０５の管理領域３０２に比べて、ディレクトリ領域及びファイルデータ領域は、後述する仮想管理領域３０６のサイズを加味した値に変更される。さらに実ファイル空間１０５の管理領域３０２に比べて、後述する所定の条件を満たすディレクトリ領域が、後述する仮想ディレクトリ領域と仮想ファイルデータ領域のうち仮想ディレクトリ領域に結合するようにアドレスが変更されている。
【００２６】
３０６は仮想ファイル空間１０３の仮想管理領域であって、管理領域３０５を仮想的に拡張したものである。後述する仮想ディレクトリ領域及び仮想ファイルデータ領域のうち仮想ファイルデータ領域のファイルデータのクラスタの連結を示すデータが記録されている。３０７は仮想ファイル空間１０３のディレクトリ領域及びファイルデータ領域であって、実ファイル空間１０５のディレクトリ領域及びファイルデータ領域３０３に対応するものである。実ファイル空間１０５のディレクトリ領域及びファイルデータ領域３０３に比べて、アドレスが仮想管理領域３０６のサイズを加味した値に変更されている。３０８は仮想ディレクトリ領域と仮想ファイルデータ領域である。実ファイル空間１０５には存在しない、仮想ファイルのディレクトリエントリとファイルデータが記録されている。
【００２７】
図１８は、本実施形態において、電源投入後にＣＰＵ２０１が実行する処理手順の一例を示すフローチャートである。
まず、Ｓ１８０１において、中間データ生成部１１０による処理を実行する。Ｓ１８０１の詳細は図４を用いて後述する。次に、Ｓ１８０２において、ホストが情報処理装置１００をアクセス可能となるように、通信装置２０４を制御する。そして、Ｓ１８０３において、ホストからＲＥＡＤ要求を受信するまで待機する。そして、ＲＥＡＤ要求を受信すると、Ｓ１８０４において、第１の制御部１０７〜第３の制御部１０９による処理を実行する。Ｓ１８０４の詳細は図６を用いて後述する。
【００２８】
図４は、中間データ生成部１１０により二次記憶装置２０３から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
まず、Ｓ４０１において、ブートレコード領域から、実ファイル空間を構成する各領域の範囲を読み出す。
【００２９】
図１６は、ブートレコード領域の一部を示す図である。領域１６０１には、１セクタの大きさをバイト数で示したもの（例えば、５１１）が記録されている。領域１６０２には、１クラスタのセクタ数が記録されている。ここで、クラスタはセクタをまとめたもので、ディレクトリ領域及びファイルデータ領域で用いられる記録単位である。この値を用いて、クラスタを指定するクラスタ番号から、セクタを指定するセクタアドレスを求めることができる。
【００３０】
領域１６０３には、予約セクタ数が記録されている。ブートレコード領域のアドレスにこの値を加えると管理領域のアドレスとなる。領域１６０４には、管理領域の数（例えば、２）が記録されている。領域１６０５には、ルートディレクトリのディレクトリエントリ数（例えば、５１１）が記録されている。ルートディレクトリのディレクトリ領域だけは、サイズが固定である。領域１６０６には、パーティションのセクタ数が６５５３５以下の際にそのセクタ数が記録されている。
【００３１】
領域１６０７には、管理領域の大きさが記録されている。領域１６０８は、パーティションのセクタ数が６５５３６以上の際にそのセクタ数が記録されている。すなわち、ブートレコード領域に記録されているこれらの情報を読み出すことで、管理領域、ディレクトリ領域及びファイルデータ領域の開始アドレスを算出することができる。
【００３２】
図４の説明に戻り、Ｓ４０２においては、Ｓ４０３からＳ４１３の間の処理を、二次記憶装置２０３に記録されているディレクトリ全てについて繰り返す。ルートディレクトリに対応するディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭から３２セクタ連続して記録されている。ディレクトリ領域の各ディレクトリエントリを順次判定して、全てのサブディレクトリを抽出できる。
【００３３】
図１７は、ディレクトリ領域に属するブロックデータの一例を示す図である。
図１７に示す通り、ディレクトリ領域はディレクトリエントリが連続して記録されている。領域１７０１には、ファイル名が記録されている。なお、ファイル名の先頭バイトの値が０の場合は、空きエントリである。なお、後述するファイル属性がディレクトリを示す場合、このファイル名はディレクトリ名として扱われる。
【００３４】
領域１７０２には、ファイル属性が記録されている。ファイル属性の値から、このエントリがファイルであるかディレクトリであるかを判断することができる。領域１７０３には、このエントリに対応するデータが実際に記録されている先頭クラスタ番号が記録されている。このディレクトリエントリがファイルに対応するのであればファイルデータの先頭クラスタ番号が、このディレクトリエントリがディレクトリに対応するのであればディレクトリ領域の先頭クラスタ番号が記録されている。領域１７０４には、このディレクトリエントリがファイルであった場合のファイルデータのサイズ（ファイルサイズ）が記録されている。
【００３５】
図４の説明に戻ると、Ｓ４０２は、ディレクトリを示すディレクトリエントリを逐次的に選択し、Ｓ４０３からＳ４１２の処理を繰り返す。Ｓ４０３においては、当該ディレクトリに対応する中間データエントリの記録領域を一次記憶装置に確保する。そして、さらにそこに、管理領域３０２を記録されたクラスタチェーンを適宜参照しながら、ディレクトリ領域を構成する全てのクラスタのアドレスを記録する。
【００３６】
ここで、中間データについて図５を参照しながら説明する。図５は、中間データの構造を示す図である。５０１は、図４のＳ４０３で確保される実ファイル空間の一ディレクトリに対応する中間データエントリであり、ディレクトリの数だけリストとして構成されたものである。１つの中間データエントリは、後述する属性値で構成される。５０２は、ディレクトリに関連づけられた一仮想ファイルの情報を記録する仮想ファイルエントリであり、仮想ファイルの数だけリストとして構成されたもので、中間データエントリ５０１と同様に一次記憶装置に確保される。１つの仮想ファイルエントリは、後述する属性値で構成される。
【００３７】
属性値５０３は当該ディレクトリに対応するディレクトリ領域のアドレスを記録したリストであり、Ｓ４０３で記録される。属性値５０４には、仮想ファイルに対応するディレクトリエントリを記録するために仮想ディレクトリ領域を割り当てた場合に、割り当てた仮想ディレクトリ領域のアドレスがリストとして記録される。属性値５０５には、当該ディレクトリに仮想ファイルをいくつ関連付けるかについて記録される。属性値５０６は、仮想ファイルエントリ５０２のアドレスとして記録される。
【００３８】
属性値５０７は、元ファイルに対応するディレクトリエントリの位置として記録される。詳細には、元ファイルのディレクトリエントリが記録された実ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値５０８は、仮想ファイルに対応するディレクトリエントリの位置として記録される。詳細には、仮想ファイルのディレクトリエントリを割り当てた仮想ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値５０９は、仮想ファイルに対応するファイルデータを割り当てたアドレスとして記録される。属性値５１０は、仮想ファイルに対応するファイルデータの大きさとして記録される。属性値５１１は、仮想ファイルに対応するファイルデータが、元ファイルからの変換方法を指定する情報として記録される。
【００３９】
図４の説明に戻ると、Ｓ４０３で中間データエントリ５０１を確保して属性値５０３を記録した後、Ｓ４０４に進む。Ｓ４０４では、ファイルを示すディレクトリエントリを逐次的に選択し、Ｓ４０４からＳ４１２の間の処理を繰り返す。Ｓ４０５では、当該ファイルが仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置２０３から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はＳ４０６に進み、変換可能でない場合はＳ４１２へ進む。
【００４０】
Ｓ４０６では、仮想ファイルに対応する仮想ファイルエントリ５０２の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値５０７に記録し、変換方法を属性値５１１に記録する。このとき、属性値５０５の値を１増やしたものに更新する。次に、Ｓ４０７では、属性値５１１に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値５１０に記録する。変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。
【００４１】
次に、Ｓ４０８では、Ｓ４０２で選択されたディレクトリに対応するディレクトリ領域か、属性値５０４に指定される仮想ディレクトリ領域に、当該仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はＳ４１０に進み、ない場合はＳ４０９に進む。Ｓ４０９では、仮想ディレクトリ領域のクラスタを割り当て、アドレスを属性値５０４に記録する。
【００４２】
次に、Ｓ４１０では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値５０８に位置を記録する。Ｓ４１１では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値５０９に記録する。
【００４３】
図６は、ホストからのＲＥＡＤ要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
まず、Ｓ６０１では、ホストからＲＥＡＤ要求されたアドレスが、実ファイル空間に記録された領域に対応する領域か否かを判定する。すなわち、対応するデータが、ブートレコード領域、管理領域、ディレクトリ領域またはファイルデータ領域に該当する場合はＳ６０２に進み、そうでなければＳ６０３に進む。
【００４４】
Ｓ６０２では、第１の制御部１０７による処理が行われる。この処理の詳細は後述する。一方、Ｓ６０３では、ホストからＲＥＡＤ要求されたアドレスが、仮想管理領域または仮想ディレクトリ領域に該当するアドレスであるか否かを判定する。この判定の結果、該当するアドレスである場合はＳ６０４に進み、そうでなければＳ６０５に進む。仮想ディレクトリ領域と仮想ファイルデータ領域は入り混じって割り当てられているため、仮想ディレクトリ領域に該当するかの判定には、仮想ファイルエントリ５０２に記録されている属性値５０４の値を用いる。
【００４５】
Ｓ６０４では、第２の制御部１０８による処理が行われる。この処理の詳細は後述する。一方、Ｓ６０５では、第３の制御部１０９による処理が行われる。この処理の詳細は後述する。
【００４６】
図７は、第１の制御部１０７により行われる処理の手順の一例を示すフローチャートである。前述した様に、第１の制御部１０７は、実ファイル空間１０５に記録されたブロックデータのうち、実ファイル空間１０５に基づく値を仮想ファイル空間１０３の値に変換してホストに送信する。以下、図７を参照しながら詳細を説明する。
【００４７】
まず、Ｓ７０１において、ホストからＲＥＡＤ要求されたアドレスが、仮想ファイル空間１０３におけるブートレコード領域３０４に該当するか否かを判定する。この判定の結果、ブートレコード領域３０４に該当する場合はＳ７０２に進み、そうでなければＳ７０５に進む。Ｓ７０２では、二次記憶装置２０３に記録されている、実ファイル空間１０５のブートレコード領域３０１からブロックデータを読み出す。なお、二次記憶装置２０３の読み出しに指定するアドレスは、ホストからＲＥＡＤ要求時に指定されたアドレスと同じである。
【００４８】
次に、Ｓ７０３では、Ｓ７０２で読み出したブロックデータのうち、実ファイル空間１０５の大きさが記録されたフィールドを、仮想ファイル空間１０３の大きさに書き換える。具体的には、図１６に示した領域１６０７に仮想管理領域３０６の大きさを加える。さらに、仮想ファイル空間１０３に必要なセクタ数を領域１６０６または１６０８に、値に応じてどちらか一方を書き換える。そして、Ｓ７０４では、読み出したブロックデータをホストに送信する。
【００４９】
一方、Ｓ７０５では、ホストからＲＥＡＤ要求されたアドレスが、仮想ファイル空間１０３における管理領域３０５に該当するか否かを判定する。この判定の結果、管理領域３０５に該当する場合はＳ７０６に進み、そうでなければＳ７０９に進む。Ｓ７０６では、二次記憶装置２０３に記録されている、実ファイル空間１０５の管理領域３０５からブロックデータを読み出す。なお、二次記憶装置２０３の読み出しに指定するアドレスは、ホストからＲＥＡＤ要求時に指定されたアドレスと同じである。
【００５０】
次に、Ｓ７０７では、Ｓ７０６で読み出したブロックデータのうち、実ファイル空間１０５のアドレスが記録されたフィールドを、仮想ファイル空間１０３のアドレスに書き換える。図３に示した様に、仮想ファイル空間１０３のディレクトリ領域及びファイルデータ領域３０７は、実ファイル空間１０５のディレクトリ領域及びファイルデータ領域３０３に比べて、仮想管理領域３０６だけずれて記録されている。よって、読み出した管理領域３０５のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【００５１】
次に、Ｓ７０８では、Ｓ７０６で読み出したブロックデータのうち、仮想ディレクトリ領域と連結されたディレクトリ領域の管理領域を書き換える。この処理はホストにディレクトリ領域が仮想ディレクトリ領域と結合されていることを認識させるための処理であり、詳細は後述する。
【００５２】
一方、Ｓ７０９では、ホストからＲＥＡＤ要求されたアドレスと属性値５０３に記録されたディレクトリ領域のアドレスリストとを比較し、アドレスが仮想ファイル空間１０３におけるディレクトリ領域に該当するか否かを判定する。この判定の結果、要求されたアドレスが仮想ファイル空間１０３におけるディレクトリ領域に該当する場合はＳ７１０に進み、そうでなければＳ７１３に進む。
【００５３】
Ｓ７１０では、二次記憶装置２０３に記録されている、実ファイル空間１０５のディレクトリ領域からブロックデータを読み出してＳ７０７に進む。なお、二次記憶装置２０３の読み出しに指定するアドレスは、ホストからＲＥＡＤ要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。そして、Ｓ７１１では、Ｓ７１０で読み出したブロックデータのうち、実ファイル空間１０５のアドレスが記録されたフィールドを、仮想ファイル空間１０３のアドレスに書き換える。Ｓ７０７と同様に、読み出したディレクトリ領域のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【００５４】
次に、Ｓ７１２では、Ｓ７１０で読み出したブロックデータのうち、仮想ファイルのディレクトリエントリが割り当てられたディレクトリ領域または仮想ディレクトリ領域のクラスタチェーンを書き換える。この処理はホストに仮想ファイルを認識させるための処理であり、詳細は後述する。一方、Ｓ７１３では、二次記憶装置２０３に記録されている、実ファイル空間１０５のファイルデータ領域からブロックデータを読み出す。なお、二次記憶装置２０３の読み出しに指定するアドレスは、ホストからＲＥＡＤ要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。
【００５５】
図１０は、図７のＳ７０８における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
まず、Ｓ１００１では、Ｓ１００１からＳ１００５の間の処理を、中間データとして記録されている全ての中間データエントリ５０１について繰り返す。Ｓ１００２では、Ｓ１００１で選択された中間データエントリに関して、属性値５０４に仮想ディレクトリ領域のアドレスが設定されているか否かを判定する。この判定の結果、仮想ディレクトリ領域のアドレスが設定されている場合はＳ１００３に進み、そうでなければＳ１００５に進む。
【００５６】
Ｓ１００３では、ホストからＲＥＡＤ要求されたアドレスと、属性値５０３に記録されたアドレスリストの終端のクラスタに対応する管理領域のアドレスとを比較する。この条件が真である場合はＳ１００４に進み、そうでなければＳ１００５に進む。Ｓ１００４では、Ｓ１００３の判定に用いた、当該ディレクトリに対応する管理領域クラスタチェーンの終端を、属性値５０４に記録されているアドレスのクラスタ番号に書き換える。
【００５７】
図１１は、図７のＳ７１２におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
まず、Ｓ１１０１では、Ｓ１１０１からＳ１１０７の間の処理を、中間データとして記録されている全ての中間データエントリ５０１について繰り返す。Ｓ１１０２では、ホストにＲＥＡＤ要求されたアドレスと、Ｓ１００１で選択された中間データエントリの属性値５０３に記録されたアドレスリストとを比較する。この比較の結果、一致した場合はＳ１１０３に進み、そうでなければＳ１１０７に進む。
【００５８】
Ｓ１１０３では、Ｓ１１０３からＳ１１０６の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ５０２について繰り返す。Ｓ１１０４では、Ｓ１１０３で選択された仮想ファイルのディレクトリエントリを、Ｓ７１０で読み出したブロックデータに割り当ててあるか否かについて、属性値５０８を用いて判定する。この判定の結果、割り当ててある場合はＳ１１０５に進み、そうでなければＳ１１０６に進む。
【００５９】
Ｓ１１０５では、Ｓ７１０で読み出したブロックデータに、属性値５０８に記録された位置に仮想ファイルのディレクトリエントリを追加する。ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値５１０、５１１の値を用いる。その他の属性、例えば仮想ファイルのファイル名や変更日時などの属性の決定方法は、本発明は特に限定しない。本実施形態においては、仮想ファイルのファイル名は元ファイルのファイル名に属性値５１１で指定された変換方法の文字列表現を追加したものを用い、その他の属性は元ファイルと同じものを用いる。
【００６０】
図８は、第２の制御部１０８により行われる処理の手順の一例を示すフローチャートである。前述した様に、第２の制御部１０８は、実ファイル空間１０５に記録されたブロックデータのうち、仮想管理領域または仮想ディレクトリ領域を、中間データから生成してホストに送信する。以下、図８を参照しながら詳細を説明する。
【００６１】
まず、Ｓ８０１では、ホストからＲＥＡＤ要求されたアドレスが、仮想管理領域であるか否かを判定する。この判定の結果、仮想管理領域である場合はＳ８０２に進み、そうでなければＳ８０４に進む。Ｓ８０２では、仮想管理領域のブロックデータを生成する。この処理についての詳細は後述する。一方、Ｓ８０４では、仮想ディレクトリ領域のブロックデータを生成する。この処理についても詳細は後述する。そして、Ｓ８０３では、Ｓ８０２又はＳ８０４で生成されたブロックデータをホストに送信する。
【００６２】
図１２は、図８のＳ８０２における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
まず、Ｓ１２００では、一次記憶装置２０２にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用クラスタを示す値で初期化する。次に、Ｓ１２０１では、Ｓ１２０１からＳ１２０９の間の処理を、中間データとして記録されている全ての中間データエントリ５０１について繰り返す。
【００６３】
Ｓ１２０２では、ホストにＲＥＡＤ要求されたアドレスと、Ｓ１００１で選択された中間データエントリの属性値５０４に記録されたアドレスリストの各アドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はＳ１２０３に進み、そうでなければＳ１２０４に進む。Ｓ１２０３では、属性値５０４に記録されているアドレスリストを基に、ホストからＲＥＡＤ要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをＳ１２００で確保したブロックデータに書き込む。
【００６４】
次に、Ｓ１２０８では、ホストに送信すべき管理領域のブロックデータがＳ１２０３とＳ１２０６とによって全て生成されたか否かを判定する。この処理では、ブロックデータに未使用クラスタを示す値が無いか探索することにより判定することができる。この判定の結果、全て生成された場合には、図１２に示す処理を完了し、そうでなければＳ１２０９に進む。
【００６５】
一方、Ｓ１２０４では、Ｓ１２０４からＳ１２０７の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ５０２について繰り返す。そして、Ｓ１２０５では、ホストにＲＥＡＤ要求されたアドレスと、当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はＳ１２０６に進み、そうでなければＳ１２０７に進む。なお、判定に用いる当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスは、仮想ファイルデータ領域のクラスタが連続的に割り当てられているので、属性値５０９、５１０から算出する。
【００６６】
Ｓ１２０６では、属性値５０９、５１０から算出される仮想ファイルデータ領域のアドレスリストを基に、ホストからＲＥＡＤ要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをＳ１２００で確保したブロックデータに書き込む。
【００６７】
図１３は、図８のＳ８０４における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
まず、Ｓ１３００では、一次記憶装置２０２にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用のディレクトリエントリを示す値で初期化する。次に、Ｓ１３０１では、Ｓ１３０１からＳ１３０７の間の処理を、中間データとして記録されている全ての中間データエントリ５０１について繰り返す。
【００６８】
Ｓ１３０２では、ホストにＲＥＡＤ要求されたアドレスと、Ｓ１３０１で選択された中間データエントリの属性値５０４に記録されたアドレスリストとを比較する。この結果、一致する場合はＳ１３０３に進み、そうでなければＳ１３０７に進む。Ｓ１３０３では、Ｓ１３０３からＳ１３０６の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ５０２について繰り返す。
【００６９】
Ｓ１３０４では、ホストにＲＥＡＤ要求されたアドレスが、当該仮想ファイルのディレクトリエントリを書き込むアドレスと一致するか否かについて、属性値５０８を用いて判定する。この判定の結果、一致する場合はＳ１３０５に進み、そうでなければ図１３に示す処理を完了する。Ｓ１３０５では、Ｓ１３００で確保したブロックデータに、属性値５０８に記録された位置に仮想ファイルのディレクトリエントリを追加する。図１１に示した処理と同様に、ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値５１０、５１１の値を用いる。仮想ファイルのファイル名は、元ファイルのファイル名と属性値５１１で指定された変換方法とに基づいて命名する。更新日時などは元ファイルと同じものを用いる。
【００７０】
図９は、第３の制御部１０９により行われる処理の手順の一例を示すフローチャートである。
まず、Ｓ９０１では、Ｓ９０１からＳ９０５の間の処理を、中間データとして記録されている全ての中間データエントリ５０１について繰り返す。そして、Ｓ９０２では、Ｓ９０２からＳ９０４の間の処理を、Ｓ９０１で選択された中間データエントリに属する全ての仮想ファイルエントリ５０２について繰り返す。
【００７１】
Ｓ９０３では、ホストにＲＥＡＤ要求されたアドレスが、当該仮想ファイルに割り当てた仮想ファイルデータ領域のアドレス範囲と一致するか否かを判定する。ここで、仮想ファイルに対応する仮想ファイルデータ領域のクラスタは連続して割り当てられているので、仮想ファイルデータ領域のアドレス範囲は属性値５０９を下限とし、その値に属性値５１０のブロック数を加えた値を上限とする。この判定の結果、条件が真となる場合はＳ９０６に進み、そうでなければＳ９０４に進む。
【００７２】
Ｓ９０６では、属性値５０７に記録されているＳ９０２で選択された仮想ファイルの元ファイルのエントリの位置を基に、二次記憶装置２０３から元ファイルのファイルデータを一次記憶装置２０２に読み込む。Ｓ９０７では、Ｓ９０６で読み出した元ファイルのファイルデータを、属性値５１１に指定された変換方法で変換し、指定されたアドレスに対応するブロックデータを一次記憶装置２０２に記録する。Ｓ９０８では、Ｓ９０７で変換したファイルデータの１ブロックデータをホストに送信する。
【００７３】
以上のように本実施形態に係る情報処理装置１００では、ホストとの接続が確立される前に、中間データ生成部１１０によって二次記憶装置２０３に記録された実ファイル空間から中間データを作成する。この中間データは、実ファイル空間に記録されたファイルと、そのファイルを変換した仮想ファイルとを重畳した仮想ファイル空間を生成する処理を高速化するためのものである。その後、情報処理装置１００がホストからＲＥＡＤ要求を受信すると、第１の制御部１０７〜第３の制御部１０９により、中間データに基づいて、仮想ファイル空間が提供される。これにより、ホストの利用者に仮想ファイル名を提示し、ホストの利用者が実際に記録されたファイルと同様に仮想ファイルを読み込むことが可能となる。さらには、情報処理装置１００の内部記憶装置の使用効率と、同時に、ホストの利用者の利便性とを向上することができる。
【００７４】
（第２の実施形態）
以下、本発明の第２の実施形態について、図１９及び図２０を参照しながら説明する。以下、第１の実施形態と異なる点についてのみ説明する。
図１９は、本実施形態に係る情報処理装置１９００の機能構成例を示すブロック図である。
図１９において、１９０１は、中間データ１０６を所定の形式で二次記憶装置２０３に記録したものである。図１と異なるのは、中間データ生成部１１０が生成した中間データを、二次記憶装置２０３に記録する点と、二次記憶装置２０３に記録された中間データが一次記憶装置２０２に展開される点である。これらの処理について図２０を用いて詳細を後述する。
【００７５】
図２０は、本実施形態に係る情報処理装置１９００において、電源投入後にＣＰＵ２０１が実行する処理手順の一例を示すフローチャートである。
まず、Ｓ２００１では、中間データが既に二次記憶装置２０３に記録されているか否かを判定する。この判定の結果、既に中間データが記録されている場合は、Ｓ２００２に進む。一方、中間データが記録されていない場合は、Ｓ２００３に進む。中間データが記録されているか否かを判定する方法は、本実施形態では特に限定しない。例えば、中間データのファイル名を固定しておいて、実ファイル空間からそのファイル名を検索することにより判定してもよい。あるいは、実ファイル空間が記録されたパーティションとは異なるパーティションに記録しておいて、そのパーティションの有無を判定条件としてもよい。
【００７６】
Ｓ２００２では、二次記憶装置２０３に記録された中間データを一次記憶装置２０２に展開し、Ｓ２００５に進む。一方、Ｓ２００３では、前述した中間データ生成部１１０による処理を実行する。そして、Ｓ２００４では、Ｓ２００３で生成した中間データを二次記憶装置２０３に所定の形式で記録する。
【００７７】
Ｓ２００５では、ホストがこのデバイスをアクセス可能となるように、通信装置２０４を制御する。そして、Ｓ２００６では、ホストからのＲＥＡＤ要求を受信するまで待機する。そして、ＲＥＡＤ要求を受信すると、Ｓ２００７に進み、前述した第１の制御部１０７〜第３の制御部１０９による処理を実行する。
【００７８】
以上のように本実施形態に係る情報処理装置１９００では、二次記憶装置２０３に中間データが記録されている場合に、中間データ生成処理を省略する。これにより、電源投入後からホストとの接続が確立までの時間が第１の実施形態に比べて短縮され、利用者の利便性をさらに向上することができる。
【００７９】
（第３の実施形態）
本発明の第３の実施形態について、図２１〜図２４を参照しながら説明する。本実施形態の情報処理装置の一例として、デジタルカメラを例に説明する。電源投入時は撮像モードとして起動し、利用者の操作に基づいてストレージデバイスモードに切り替えることができる。なお、撮像した画像を二次記憶装置２０３に記録するためにホストと同じ形式のファイルシステムを備えている。
【００８０】
図２１は、本実施形態に係る情報処理装置２１００の機能構成例を示すブロック図である。本実施形態では、図１と異なり、ホストと同じ形式のファイルシステムを用いて実ファイル空間に撮像した画像ファイルを追加する画像ファイル追加部２１０１を備えている。さらに、追加した画像ファイルを仮想ファイル空間に反映させるために、中間データを更新する中間データ更新部２１０２を備えている。
【００８１】
図２２は、本実施形態に係る情報処理装置２１００のハードウェア構成の一例を示すブロック図である。図２と異なり、操作インタフェース２２０１を備えている。利用者はこの操作インタフェースを介して、情報処理装置２１００を制御することができる。さらに、撮像装置２２０２を備えており、撮像した画像情報を所定の形式で一次記憶装置２０２に展開する機能を有する。
【００８２】
図２３は、本実施形態に係る情報処理装置２１００において、電源投入後にＣＰＵ２０１が実行する処理手順の一例を示すフローチャートである。
まず、Ｓ２３０１では、利用者により操作インタフェース２２０１が操作され、撮像モードからストレージデバイスモードに切り替えを行ったか否かを判定する。この判定の結果、切り替えを行った場合はＳ２３０６に進み、そうでなければＳ２３０２に進む。
【００８３】
Ｓ２３０２では、利用者により操作インタフェース２２０１が操作され、撮像操作を行ったか否かを判定する。この判定の結果、撮像操作を行った場合はＳ２３０３に進み、そうでなければＳ２３０１に戻る。Ｓ２３０３では、撮像装置２２０２を駆動して、画像情報を一次記憶装置２０２に展開し、Ｓ２３０４に進む。Ｓ２３０４では、Ｓ２３０３で展開された画像情報を、二次記憶装置２０３にファイルとして記録する。詳細に述べると、まず、二次記憶装置２０３をホストと同じ形式のファイルシステムでマウントする。次に、画像ファイル名を所定のルールに則って命名し、ファイルシステムにファイル作成命令を発行する。最後に、一次記憶装置２０２に展開されているデータを対象として、ファイルシステムにファイルデータ書き込み命令を発行する。
【００８４】
次に、Ｓ２３０５では、中間データ更新部２１０２による処理を実行する。この処理の詳細については図２４を用いて後述する。一方、Ｓ２３０６では、ストレージデバイスモードに切り替えるために、図２０に示したフローチャートと同様の処理を実行する。
【００８５】
図２４は、Ｓ２３０５で中間データを更新する処理手順の一例を示すフローチャートである。
まず、Ｓ２４０１では、追加した画像ファイルを元ファイルとして仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、画像ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置２０３から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はＳ２４０２に進み、変換可能でない場合は中間データ更新処理を終了する。
【００８６】
Ｓ２４０２では、元ファイルが属するディレクトリに対応する中間データエントリを、中間データエントリ５０１から抽出する。すなわち、Ｓ２３０４で元ファイルのディレクトリエントリを追加したディレクトリ領域のアドレスと各中間データエントリの属性値５０３に記録されたアドレスリストとを比較し、一致するものを抽出する。次に、Ｓ２４０３では、仮想ファイルに対応する仮想ファイルエントリ５０２の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値５０７に記録し、変換方法を属性値５１１に記録する。このとき、属性値５０５の値を１増やしたものに更新する。
【００８７】
Ｓ２４０４では、属性値５１１に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値５１０に記録する。このとき、変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。次に、Ｓ２４０５では、元ファイルの属するディレクトリ領域または仮想ディレクトリ領域に仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はＳ２４０７に進み、ない場合はＳ２４０６に進む。
【００８８】
Ｓ２４０６では、仮想ディレクトリ領域のクラスタを１つ割り当て、アドレスを属性値５０４に記録する。そして、Ｓ２４０７では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値５０８に位置を記録する。そして、Ｓ２４０８では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値５０９に記録する。
【００８９】
以上のように本実施形態に係る情報処理装置２１００では、デジタルカメラとしての機能を備え、利用者の操作に基づいて、撮像機能とストレージ機能が切り替えられる。そして、新規に画像が撮像されると、中間データは更新される。これにより、ホストは新規に撮像された画像ファイルに対応する仮想ファイルもアクセスすることが可能になる。
【００９０】
（その他の実施形態）
前述した第１〜第３の実施形態においては、仮想ファイルは元ファイルと同じディレクトリに重畳したが、仮想ファイル専用の仮想ディレクトリを生成して重畳してもよい。また、前述した各実施形態においては、情報処理装置とホストとの接続はＵＳＢマスストレージクラスで通信する場合について説明したが、ｉＳＣＳＩなど、他のブロックベースのストレージデバイス規格を扱ってもよい。
【００９１】
さらに、前述した各実施形態においては、１つのファイルから１つの仮想ファイルを生成したが、複数の変換方法に応じて仮想ファイルを生成してもよい。また、前述の各実施形態においては、情報処理装置の二次記憶装置２０３がローカルに接続されている場合について説明したが、ネットワーク上に存在する記憶装置を扱ってもよい。さらに、前述した各実施形態では、第１の制御部１０７〜第３の制御部１０９において、中間データを回すループを説明したが、アドレスと中間データとを対応づけるテーブルを用いて、ループを省略してもよい。
【００９２】
前述した各実施形態においては、二次記憶装置２０３がＦＡＴ１６形式である場合について説明したが、他のファイルシステムを扱ってもよい。また、ファイルの変換および変換後のファイルサイズ算出はＣＰＵ２０１で実行したが、ファイルデータ変換用のハードウェアを用いて高速化してもよい。
【００９３】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００９４】
１０７  第１の制御部
１０８  第２の制御部
１０９  第３の制御部
１１０  中間データ生成部
【図１】
2013045146.tif 000003
【図２】
2013045146.tif 000004
【図３】
2013045146.tif 000005
【図４】
2013045146.tif 000006
【図５】
2013045146.tif 000007
【図６】
2013045146.tif 000008
【図７】
2013045146.tif 000009
【図８】
2013045146.tif 000010
【図９】
2013045146.tif 000011
【図１０】
2013045146.tif 000012
【図１１】
2013045146.tif 000013
【図１２】
2013045146.tif 000014
【図１３】
2013045146.tif 000015
【図１４】
2013045146.tif 000016
【図１５】
2013045146.tif 000017
【図１６】
2013045146.tif 000018
【図１７】
2013045146.tif 000019
【図１８】
2013045146.tif 000020
【図１９】
2013045146.tif 000021
【図２０】
2013045146.tif 000022
【図２１】
2013045146.tif 000023
【図２２】
2013045146.tif 000024
【図２３】
2013045146.tif 000025
【図２４】
2013045146.tif 000026