情報処理装置、情報処理方法及びプログラム
【課題】ブロックベースの通信方式により、ホストの利用者に仮想ファイル名を提示し、実際に記録されたファイルと同様に仮想ファイルを読み出すことができるようにする。
【解決手段】ホストから読み出し要求されたアドレスがどの仮想の領域に対応するのか判断し、実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを仮想ファイル空間に変換して前記ホストに送信する。仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信する。
【解決手段】ホストから読み出し要求されたアドレスがどの仮想の領域に対応するのか判断し、実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを仮想ファイル空間に変換して前記ホストに送信する。仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特にブロックベースのストレージ機能を有する情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
ホストとストレージデバイスとの間の通信方法は、アクセス単位の抽象度という観点から、ブロックベースとファイルベースとの2つに分類することができる。ブロックベースでは、セクタなど所定のブロックサイズ(例えば512バイト)をアクセス単位とする。ホストがREADする場合、ホストは所望するブロックデータのアドレスをストレージデバイスに送り、ストレージデバイスは対応するブロックデータを内部記憶装置から読み出してホストに送信する。USBマスストレージは、ブロックベースのストレージデバイス向けの規格の一例である。
【0003】
一方、ファイルベースの通信方法では、データを指定するのにファイル名を用いる。ホストからのREAD処理であれば、ホストからはファイル名をストレージデバイスに送り、ストレージデバイスは受信したファイル名に対応するファイルデータを内部記憶装置から読み出してホストに送信する。この方法は例えばNASなどで用いられている。例えばLinux(登録商標)などの汎用OSが動作するホストの利用者は、ファイルシステムと呼ばれるソフトウェアを介してストレージデバイスにアクセスする。ファイルシステムの利用者は、ストレージデバイスがブロックベースであっても、ファイルベースでアクセスすることができる。すなわち、ブロックベースのストレージデバイス向けに作成されたファイルシステムは、ファイル名からファイルデータのアドレスへの変換を内部的に行っている。
【0004】
以下、ホストのファイルシステムが、ファイルとファイルデータアドレスとの対応づけに必要な情報を取得する処理を簡単に説明する。
図14は、ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。図14に示されるように、先頭にマスターブートレコード領域が記録され、連続して1つ以上のパーティションが記録されている。
【0005】
図15は、マスターブートレコード領域のパーティションテーブルを示す図である。パーティションテーブルには、パーティションの開始位置とサイズといった情報が記録されている。ホストは先頭(アドレス0)にあるマスターブートレコード領域を読み出すことで、各パーティションの先頭アドレスを指定することが可能となる。
【0006】
図14に示した通り、各パーティションはブートレコード領域と、管理領域と、ディレクトリ領域とファイルデータ領域とから構成されている。ブートレコード領域には、管理領域の先頭アドレスと、ディレクトリ領域及びファイルデータ領域の先頭アドレスとを算出するための情報が記録されている。管理領域やディレクトリ領域、ファイルデータ領域では、データの記録位置を示すのにセクタのアドレスではなく、クラスタ番号が用いられる。クラスタはセクタの所定倍を単位としたものであるため、クラスタ番号からセクタアドレスを算出することができる。ブートレコード領域には、このクラスタの大きさの情報も記録されている。
【0007】
例えば、パーティションがFAT16形式でフォーマットされているとすると、ルートディレクトリのディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭に記録されている。ホストはこのブートレコード領域を読み出すことにより、ルートディレクトリ領域の先頭アドレスを指定することが可能となる。
【0008】
また、ディレクトリ領域には、そのディレクトリに属するサブディレクトリ及びファイルの一覧と、それぞれに対応するディレクトリ領域及びファイルデータ領域の先頭クラスタ番号が記録されている。ホストはディレクトリ領域を読み出すことにより、そのディレクトリに属するサブディレクトリのディレクトリ領域や、ファイルのファイルデータ領域の先頭アドレスを指定することが可能となる。
【0009】
1つのファイルに対応するファイルデータを構成する各クラスタは、連続して記録される必要はない。管理領域は、クラスタチェーンと呼ばれる、各クラスタがどのように連結されているかを示すリンクドリストが記録されている。ホストはこの管理領域を適宜参照することにより、目的とするディレクトリのディレクトリ領域やファイルデータ領域の先頭アドレスから先頭クラスタ以降のアドレスを取得することが可能となる。以上より、ホストのファイルシステムはファイル名とアドレスとの対応づけを行うことが可能となる。
【0010】
ここで、ホストの利用者は、ストレージデバイスに記憶されているファイルデータを変換するという作業を行うことがある。時としてこの作業は煩雑である。例えばテキストファイルの文字コードを変換するには、ホストへの一時的なコピーや、文字コード変換プログラムの起動、変換ファイルの命名といった手間がある。この煩雑さを解決するものとして、ファイルデータを記録する装置が、実際に記録されたファイルに加えて、それらのファイルから変換可能なファイルを重畳して利用者に提示する技術も知られている。
【0011】
例えば特許文献1に記載の方法によれば、サーバーは、クライアントからディレクトリ内容のREAD要求を受信する。そして、サーバーは、この要求に応じて、内部記憶装置に実際に記録されているファイルと、そのファイルを元に生成できるファイル(以降、仮想ファイルと呼ぶ)とを重畳したリストをクライアントに送信する。そして、サーバーが仮想ファイルに対するREAD要求を受信した際は、元ファイルに対応するファイルデータを変換することで対応するファイルデータを生成し、クライアントに送信する。
【0012】
このような技術を用いれば、ホスト上で変換を行うプログラムを実行する必要がなくなり、利用者の利便性が向上する。すなわち、利用者は特段の変換操作をせずとも、所望する変換された形式のファイルを利用することができる。また、仮想ファイルのファイルデータはサーバーの内部記憶装置に記録されないので、内部記憶装置の使用効率が高い。また、特許文献1に記載の技術は、ネットワーク接続されたサーバーとクライアントとに跨るファイル管理に関する技術であるが、このサーバーはファイルベースのストレージデバイスと本質的に等価である。すなわちこの技術を、ファイルベースのストレージデバイスに適用することは容易である。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開平10−74153号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
ブロックベースのストレージデバイスは、ホストからはファイル名ではなくブロック番号が指定され、ブロック番号に対応するブロックデータを送受信するが、ブロックデータの内容を解釈しない。そのため、特許文献1に記載された、仮想ファイルをホストに提示する機能や、ホストの要求に応じて仮想ファイルのファイルデータを動的生成するといった機能を備えることができなかった。
【0015】
本発明は前述の問題点に鑑み、ブロックベースの通信方式により、ホストの利用者に仮想ファイル名を提示し、実際に記録されたファイルと同様に仮想ファイルを読み出すことができるようにすることを目的としている。
【課題を解決するための手段】
【0016】
本発明の情報処理装置は、ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、を備えたことを特徴とする。
【発明の効果】
【0017】
本発明によれば、ブロックベースのストレージデバイスは、内部の記憶装置に記録されているファイルと、そのファイルを元に動的に生成可能な仮想ファイルとを重畳してホストに提示することが可能になる。また、ホストから仮想ファイルのファイルデータが記録されたブロックを要求された際には、仮想ファイルに対応するファイルデータを生成してホストに送信することが可能になる。これにより、ストレージデバイスの内部記憶装置の使用効率と、ホストの利用者の利便性とを向上することができる。
【図面の簡単な説明】
【0018】
【図1】第1の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図2】第1及び第2の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図3】実施形態に係る情報処理装置が備える仮想ファイル空間を示す図である。
【図4】中間データ生成部により二次記憶装置から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
【図5】中間データの構造を示す図である。
【図6】ホストからのREAD要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
【図7】第1の制御部により行われる処理の手順の一例を示すフローチャートである。
【図8】第2の制御部により行われる処理の手順の一例を示すフローチャートである。
【図9】第3の制御部により行われる処理の手順の一例を示すフローチャートである。
【図10】S708における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
【図11】S712におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
【図12】S802における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
【図13】S804における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
【図14】ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。
【図15】マスターブートレコード領域のパーティションテーブルを示す図である。
【図16】ブートレコード領域の一部を示す図である。
【図17】ディレクトリ領域に属するブロックデータの一例を示す図である。
【図18】第1の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図19】第2の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図20】第2の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図21】第3の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図22】第3の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図23】第3の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図24】S2305で中間データを更新する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0019】
(第1の実施形態)
以下、本発明の第1の実施形態について図面を参照しながら説明する。
図1は、本実施形態に係る情報処理装置100の機能構成例を示すブロック図である。
図1において、情報処理装置100は、ホストからのREAD要求に指定されたアドレス101を受信すると、対応するブロックデータ102をホストに送信する。仮想ファイル空間103は、後述する二次記憶装置に実際に記録されているファイル(以降、元ファイルと呼ぶ)と、そのファイルを変換することで作成されるファイル(以降、仮想ファイルと呼ぶ)とを重畳した仮想的なファイル空間である。104は、二次記憶装置に記録されている実ファイル空間105とそれを基に予め生成された中間データ106とから仮想ファイル空間103を動的に生成し、ホストに送信する制御部である。
【0020】
第1の制御部107は、仮想ファイル空間103のうち、実ファイル空間105の所定単位のブロックデータを読み取って、ブロックデータのうち実ファイル空間105に基づくフィールドを仮想ファイル空間に変換してホストに送信する。この処理の詳細は後述する。第2の制御部108は、仮想ファイル空間103のうち、後述する仮想管理領域や仮想ディレクトリ領域を生成してホストに送信する。この処理についても詳細は後述する。第3の制御部109は、仮想ファイルのファイルデータを、実ファイル空間にある元ファイルのファイルデータを変換することによって生成してホストに送信する。この処理についても詳細は後述する。
【0021】
110は、実ファイル空間105から仮想ファイル空間103を生成する処理を高速化するための中間データ106を生成する中間データ生成部であり、詳細は後述する。
なお、本実施形態における前記所定単位は、セクタ単位である。
【0022】
図2は、本実施形態に係る情報処理装置100のハードウェア構成の一例を示すブロック図である。
図2において、201は情報処理装置100全体を制御するプログラムを動作させるCPUである。202はプログラムやデータを一時記憶する一次記憶装置である。203はストレージデバイスとしてホストから読み書きされるデータを記録するための、不揮発な二次記憶装置であり、FAT16形式を用いて実ファイル空間105が記録されている。204はホストとブロックベースのデータを送受信するための通信装置であり、USBのマスストレージクラスの通信を行う。205はこれらの各ユニットを通信可能に接続したバスである。
【0023】
図3は、本実施形態に係る情報処理装置100が備える仮想ファイル空間103を示す図である。
図3において、301は実ファイル空間105のブートレコード領域であり、二次記憶装置203に記録されている。ブートレコード領域の詳細は後述するが、このパーティションの大きさなどの情報が記録されている。302は実ファイル空間105の管理領域であり、二次記憶装置203に記録されている。後述するディレクトリ領域及びファイルデータ領域303に用いられるクラスタがどのように連結されているかを示すデータが記録されている。303は実ファイル空間105のディレクトリ領域及びファイルデータ領域であり、二次記憶装置203に記録されている。特に、これらの各領域は、仮想ファイル空間にマッピングされていると捉えることができる。
【0024】
304は仮想ファイル空間103のブートレコード領域であって、実ファイル空間105のブートレコード領域301に対応するものである。実ファイル空間105のブートレコード領域301に比べて、パーティションの大きさに関するフィールドは、後述する仮想管理領域306と後述する仮想ディレクトリ領域及び仮想ファイルデータ領域308の大きさを加味した値に変更されている。
【0025】
305は仮想ファイル空間103の管理対象を示す管理領域であって、実ファイル空間105の管理領域302に対応するものである。実ファイル空間105の管理領域302に比べて、ディレクトリ領域及びファイルデータ領域は、後述する仮想管理領域306のサイズを加味した値に変更される。さらに実ファイル空間105の管理領域302に比べて、後述する所定の条件を満たすディレクトリ領域が、後述する仮想ディレクトリ領域と仮想ファイルデータ領域のうち仮想ディレクトリ領域に結合するようにアドレスが変更されている。
【0026】
306は仮想ファイル空間103の仮想管理領域であって、管理領域305を仮想的に拡張したものである。後述する仮想ディレクトリ領域及び仮想ファイルデータ領域のうち仮想ファイルデータ領域のファイルデータのクラスタの連結を示すデータが記録されている。307は仮想ファイル空間103のディレクトリ領域及びファイルデータ領域であって、実ファイル空間105のディレクトリ領域及びファイルデータ領域303に対応するものである。実ファイル空間105のディレクトリ領域及びファイルデータ領域303に比べて、アドレスが仮想管理領域306のサイズを加味した値に変更されている。308は仮想ディレクトリ領域と仮想ファイルデータ領域である。実ファイル空間105には存在しない、仮想ファイルのディレクトリエントリとファイルデータが記録されている。
【0027】
図18は、本実施形態において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S1801において、中間データ生成部110による処理を実行する。S1801の詳細は図4を用いて後述する。次に、S1802において、ホストが情報処理装置100をアクセス可能となるように、通信装置204を制御する。そして、S1803において、ホストからREAD要求を受信するまで待機する。そして、READ要求を受信すると、S1804において、第1の制御部107〜第3の制御部109による処理を実行する。S1804の詳細は図6を用いて後述する。
【0028】
図4は、中間データ生成部110により二次記憶装置203から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
まず、S401において、ブートレコード領域から、実ファイル空間を構成する各領域の範囲を読み出す。
【0029】
図16は、ブートレコード領域の一部を示す図である。領域1601には、1セクタの大きさをバイト数で示したもの(例えば、511)が記録されている。領域1602には、1クラスタのセクタ数が記録されている。ここで、クラスタはセクタをまとめたもので、ディレクトリ領域及びファイルデータ領域で用いられる記録単位である。この値を用いて、クラスタを指定するクラスタ番号から、セクタを指定するセクタアドレスを求めることができる。
【0030】
領域1603には、予約セクタ数が記録されている。ブートレコード領域のアドレスにこの値を加えると管理領域のアドレスとなる。領域1604には、管理領域の数(例えば、2)が記録されている。領域1605には、ルートディレクトリのディレクトリエントリ数(例えば、511)が記録されている。ルートディレクトリのディレクトリ領域だけは、サイズが固定である。領域1606には、パーティションのセクタ数が65535以下の際にそのセクタ数が記録されている。
【0031】
領域1607には、管理領域の大きさが記録されている。領域1608は、パーティションのセクタ数が65536以上の際にそのセクタ数が記録されている。すなわち、ブートレコード領域に記録されているこれらの情報を読み出すことで、管理領域、ディレクトリ領域及びファイルデータ領域の開始アドレスを算出することができる。
【0032】
図4の説明に戻り、S402においては、S403からS413の間の処理を、二次記憶装置203に記録されているディレクトリ全てについて繰り返す。ルートディレクトリに対応するディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭から32セクタ連続して記録されている。ディレクトリ領域の各ディレクトリエントリを順次判定して、全てのサブディレクトリを抽出できる。
【0033】
図17は、ディレクトリ領域に属するブロックデータの一例を示す図である。
図17に示す通り、ディレクトリ領域はディレクトリエントリが連続して記録されている。領域1701には、ファイル名が記録されている。なお、ファイル名の先頭バイトの値が0の場合は、空きエントリである。なお、後述するファイル属性がディレクトリを示す場合、このファイル名はディレクトリ名として扱われる。
【0034】
領域1702には、ファイル属性が記録されている。ファイル属性の値から、このエントリがファイルであるかディレクトリであるかを判断することができる。領域1703には、このエントリに対応するデータが実際に記録されている先頭クラスタ番号が記録されている。このディレクトリエントリがファイルに対応するのであればファイルデータの先頭クラスタ番号が、このディレクトリエントリがディレクトリに対応するのであればディレクトリ領域の先頭クラスタ番号が記録されている。領域1704には、このディレクトリエントリがファイルであった場合のファイルデータのサイズ(ファイルサイズ)が記録されている。
【0035】
図4の説明に戻ると、S402は、ディレクトリを示すディレクトリエントリを逐次的に選択し、S403からS412の処理を繰り返す。S403においては、当該ディレクトリに対応する中間データエントリの記録領域を一次記憶装置に確保する。そして、さらにそこに、管理領域302を記録されたクラスタチェーンを適宜参照しながら、ディレクトリ領域を構成する全てのクラスタのアドレスを記録する。
【0036】
ここで、中間データについて図5を参照しながら説明する。図5は、中間データの構造を示す図である。501は、図4のS403で確保される実ファイル空間の一ディレクトリに対応する中間データエントリであり、ディレクトリの数だけリストとして構成されたものである。1つの中間データエントリは、後述する属性値で構成される。502は、ディレクトリに関連づけられた一仮想ファイルの情報を記録する仮想ファイルエントリであり、仮想ファイルの数だけリストとして構成されたもので、中間データエントリ501と同様に一次記憶装置に確保される。1つの仮想ファイルエントリは、後述する属性値で構成される。
【0037】
属性値503は当該ディレクトリに対応するディレクトリ領域のアドレスを記録したリストであり、S403で記録される。属性値504には、仮想ファイルに対応するディレクトリエントリを記録するために仮想ディレクトリ領域を割り当てた場合に、割り当てた仮想ディレクトリ領域のアドレスがリストとして記録される。属性値505には、当該ディレクトリに仮想ファイルをいくつ関連付けるかについて記録される。属性値506は、仮想ファイルエントリ502のアドレスとして記録される。
【0038】
属性値507は、元ファイルに対応するディレクトリエントリの位置として記録される。詳細には、元ファイルのディレクトリエントリが記録された実ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値508は、仮想ファイルに対応するディレクトリエントリの位置として記録される。詳細には、仮想ファイルのディレクトリエントリを割り当てた仮想ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値509は、仮想ファイルに対応するファイルデータを割り当てたアドレスとして記録される。属性値510は、仮想ファイルに対応するファイルデータの大きさとして記録される。属性値511は、仮想ファイルに対応するファイルデータが、元ファイルからの変換方法を指定する情報として記録される。
【0039】
図4の説明に戻ると、S403で中間データエントリ501を確保して属性値503を記録した後、S404に進む。S404では、ファイルを示すディレクトリエントリを逐次的に選択し、S404からS412の間の処理を繰り返す。S405では、当該ファイルが仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置203から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はS406に進み、変換可能でない場合はS412へ進む。
【0040】
S406では、仮想ファイルに対応する仮想ファイルエントリ502の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値507に記録し、変換方法を属性値511に記録する。このとき、属性値505の値を1増やしたものに更新する。次に、S407では、属性値511に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値510に記録する。変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。
【0041】
次に、S408では、S402で選択されたディレクトリに対応するディレクトリ領域か、属性値504に指定される仮想ディレクトリ領域に、当該仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はS410に進み、ない場合はS409に進む。S409では、仮想ディレクトリ領域のクラスタを割り当て、アドレスを属性値504に記録する。
【0042】
次に、S410では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値508に位置を記録する。S411では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値509に記録する。
【0043】
図6は、ホストからのREAD要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
まず、S601では、ホストからREAD要求されたアドレスが、実ファイル空間に記録された領域に対応する領域か否かを判定する。すなわち、対応するデータが、ブートレコード領域、管理領域、ディレクトリ領域またはファイルデータ領域に該当する場合はS602に進み、そうでなければS603に進む。
【0044】
S602では、第1の制御部107による処理が行われる。この処理の詳細は後述する。一方、S603では、ホストからREAD要求されたアドレスが、仮想管理領域または仮想ディレクトリ領域に該当するアドレスであるか否かを判定する。この判定の結果、該当するアドレスである場合はS604に進み、そうでなければS605に進む。仮想ディレクトリ領域と仮想ファイルデータ領域は入り混じって割り当てられているため、仮想ディレクトリ領域に該当するかの判定には、仮想ファイルエントリ502に記録されている属性値504の値を用いる。
【0045】
S604では、第2の制御部108による処理が行われる。この処理の詳細は後述する。一方、S605では、第3の制御部109による処理が行われる。この処理の詳細は後述する。
【0046】
図7は、第1の制御部107により行われる処理の手順の一例を示すフローチャートである。前述した様に、第1の制御部107は、実ファイル空間105に記録されたブロックデータのうち、実ファイル空間105に基づく値を仮想ファイル空間103の値に変換してホストに送信する。以下、図7を参照しながら詳細を説明する。
【0047】
まず、S701において、ホストからREAD要求されたアドレスが、仮想ファイル空間103におけるブートレコード領域304に該当するか否かを判定する。この判定の結果、ブートレコード領域304に該当する場合はS702に進み、そうでなければS705に進む。S702では、二次記憶装置203に記録されている、実ファイル空間105のブートレコード領域301からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスと同じである。
【0048】
次に、S703では、S702で読み出したブロックデータのうち、実ファイル空間105の大きさが記録されたフィールドを、仮想ファイル空間103の大きさに書き換える。具体的には、図16に示した領域1607に仮想管理領域306の大きさを加える。さらに、仮想ファイル空間103に必要なセクタ数を領域1606または1608に、値に応じてどちらか一方を書き換える。そして、S704では、読み出したブロックデータをホストに送信する。
【0049】
一方、S705では、ホストからREAD要求されたアドレスが、仮想ファイル空間103における管理領域305に該当するか否かを判定する。この判定の結果、管理領域305に該当する場合はS706に進み、そうでなければS709に進む。S706では、二次記憶装置203に記録されている、実ファイル空間105の管理領域305からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスと同じである。
【0050】
次に、S707では、S706で読み出したブロックデータのうち、実ファイル空間105のアドレスが記録されたフィールドを、仮想ファイル空間103のアドレスに書き換える。図3に示した様に、仮想ファイル空間103のディレクトリ領域及びファイルデータ領域307は、実ファイル空間105のディレクトリ領域及びファイルデータ領域303に比べて、仮想管理領域306だけずれて記録されている。よって、読み出した管理領域305のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【0051】
次に、S708では、S706で読み出したブロックデータのうち、仮想ディレクトリ領域と連結されたディレクトリ領域の管理領域を書き換える。この処理はホストにディレクトリ領域が仮想ディレクトリ領域と結合されていることを認識させるための処理であり、詳細は後述する。
【0052】
一方、S709では、ホストからREAD要求されたアドレスと属性値503に記録されたディレクトリ領域のアドレスリストとを比較し、アドレスが仮想ファイル空間103におけるディレクトリ領域に該当するか否かを判定する。この判定の結果、要求されたアドレスが仮想ファイル空間103におけるディレクトリ領域に該当する場合はS710に進み、そうでなければS713に進む。
【0053】
S710では、二次記憶装置203に記録されている、実ファイル空間105のディレクトリ領域からブロックデータを読み出してS707に進む。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。そして、S711では、S710で読み出したブロックデータのうち、実ファイル空間105のアドレスが記録されたフィールドを、仮想ファイル空間103のアドレスに書き換える。S707と同様に、読み出したディレクトリ領域のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【0054】
次に、S712では、S710で読み出したブロックデータのうち、仮想ファイルのディレクトリエントリが割り当てられたディレクトリ領域または仮想ディレクトリ領域のクラスタチェーンを書き換える。この処理はホストに仮想ファイルを認識させるための処理であり、詳細は後述する。一方、S713では、二次記憶装置203に記録されている、実ファイル空間105のファイルデータ領域からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。
【0055】
図10は、図7のS708における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
まず、S1001では、S1001からS1005の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。S1002では、S1001で選択された中間データエントリに関して、属性値504に仮想ディレクトリ領域のアドレスが設定されているか否かを判定する。この判定の結果、仮想ディレクトリ領域のアドレスが設定されている場合はS1003に進み、そうでなければS1005に進む。
【0056】
S1003では、ホストからREAD要求されたアドレスと、属性値503に記録されたアドレスリストの終端のクラスタに対応する管理領域のアドレスとを比較する。この条件が真である場合はS1004に進み、そうでなければS1005に進む。S1004では、S1003の判定に用いた、当該ディレクトリに対応する管理領域クラスタチェーンの終端を、属性値504に記録されているアドレスのクラスタ番号に書き換える。
【0057】
図11は、図7のS712におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
まず、S1101では、S1101からS1107の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。S1102では、ホストにREAD要求されたアドレスと、S1001で選択された中間データエントリの属性値503に記録されたアドレスリストとを比較する。この比較の結果、一致した場合はS1103に進み、そうでなければS1107に進む。
【0058】
S1103では、S1103からS1106の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。S1104では、S1103で選択された仮想ファイルのディレクトリエントリを、S710で読み出したブロックデータに割り当ててあるか否かについて、属性値508を用いて判定する。この判定の結果、割り当ててある場合はS1105に進み、そうでなければS1106に進む。
【0059】
S1105では、S710で読み出したブロックデータに、属性値508に記録された位置に仮想ファイルのディレクトリエントリを追加する。ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値510、511の値を用いる。その他の属性、例えば仮想ファイルのファイル名や変更日時などの属性の決定方法は、本発明は特に限定しない。本実施形態においては、仮想ファイルのファイル名は元ファイルのファイル名に属性値511で指定された変換方法の文字列表現を追加したものを用い、その他の属性は元ファイルと同じものを用いる。
【0060】
図8は、第2の制御部108により行われる処理の手順の一例を示すフローチャートである。前述した様に、第2の制御部108は、実ファイル空間105に記録されたブロックデータのうち、仮想管理領域または仮想ディレクトリ領域を、中間データから生成してホストに送信する。以下、図8を参照しながら詳細を説明する。
【0061】
まず、S801では、ホストからREAD要求されたアドレスが、仮想管理領域であるか否かを判定する。この判定の結果、仮想管理領域である場合はS802に進み、そうでなければS804に進む。S802では、仮想管理領域のブロックデータを生成する。この処理についての詳細は後述する。一方、S804では、仮想ディレクトリ領域のブロックデータを生成する。この処理についても詳細は後述する。そして、S803では、S802又はS804で生成されたブロックデータをホストに送信する。
【0062】
図12は、図8のS802における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
まず、S1200では、一次記憶装置202にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用クラスタを示す値で初期化する。次に、S1201では、S1201からS1209の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。
【0063】
S1202では、ホストにREAD要求されたアドレスと、S1001で選択された中間データエントリの属性値504に記録されたアドレスリストの各アドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はS1203に進み、そうでなければS1204に進む。S1203では、属性値504に記録されているアドレスリストを基に、ホストからREAD要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをS1200で確保したブロックデータに書き込む。
【0064】
次に、S1208では、ホストに送信すべき管理領域のブロックデータがS1203とS1206とによって全て生成されたか否かを判定する。この処理では、ブロックデータに未使用クラスタを示す値が無いか探索することにより判定することができる。この判定の結果、全て生成された場合には、図12に示す処理を完了し、そうでなければS1209に進む。
【0065】
一方、S1204では、S1204からS1207の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。そして、S1205では、ホストにREAD要求されたアドレスと、当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はS1206に進み、そうでなければS1207に進む。なお、判定に用いる当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスは、仮想ファイルデータ領域のクラスタが連続的に割り当てられているので、属性値509、510から算出する。
【0066】
S1206では、属性値509、510から算出される仮想ファイルデータ領域のアドレスリストを基に、ホストからREAD要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをS1200で確保したブロックデータに書き込む。
【0067】
図13は、図8のS804における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
まず、S1300では、一次記憶装置202にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用のディレクトリエントリを示す値で初期化する。次に、S1301では、S1301からS1307の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。
【0068】
S1302では、ホストにREAD要求されたアドレスと、S1301で選択された中間データエントリの属性値504に記録されたアドレスリストとを比較する。この結果、一致する場合はS1303に進み、そうでなければS1307に進む。S1303では、S1303からS1306の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。
【0069】
S1304では、ホストにREAD要求されたアドレスが、当該仮想ファイルのディレクトリエントリを書き込むアドレスと一致するか否かについて、属性値508を用いて判定する。この判定の結果、一致する場合はS1305に進み、そうでなければ図13に示す処理を完了する。S1305では、S1300で確保したブロックデータに、属性値508に記録された位置に仮想ファイルのディレクトリエントリを追加する。図11に示した処理と同様に、ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値510、511の値を用いる。仮想ファイルのファイル名は、元ファイルのファイル名と属性値511で指定された変換方法とに基づいて命名する。更新日時などは元ファイルと同じものを用いる。
【0070】
図9は、第3の制御部109により行われる処理の手順の一例を示すフローチャートである。
まず、S901では、S901からS905の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。そして、S902では、S902からS904の間の処理を、S901で選択された中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。
【0071】
S903では、ホストにREAD要求されたアドレスが、当該仮想ファイルに割り当てた仮想ファイルデータ領域のアドレス範囲と一致するか否かを判定する。ここで、仮想ファイルに対応する仮想ファイルデータ領域のクラスタは連続して割り当てられているので、仮想ファイルデータ領域のアドレス範囲は属性値509を下限とし、その値に属性値510のブロック数を加えた値を上限とする。この判定の結果、条件が真となる場合はS906に進み、そうでなければS904に進む。
【0072】
S906では、属性値507に記録されているS902で選択された仮想ファイルの元ファイルのエントリの位置を基に、二次記憶装置203から元ファイルのファイルデータを一次記憶装置202に読み込む。S907では、S906で読み出した元ファイルのファイルデータを、属性値511に指定された変換方法で変換し、指定されたアドレスに対応するブロックデータを一次記憶装置202に記録する。S908では、S907で変換したファイルデータの1ブロックデータをホストに送信する。
【0073】
以上のように本実施形態に係る情報処理装置100では、ホストとの接続が確立される前に、中間データ生成部110によって二次記憶装置203に記録された実ファイル空間から中間データを作成する。この中間データは、実ファイル空間に記録されたファイルと、そのファイルを変換した仮想ファイルとを重畳した仮想ファイル空間を生成する処理を高速化するためのものである。その後、情報処理装置100がホストからREAD要求を受信すると、第1の制御部107〜第3の制御部109により、中間データに基づいて、仮想ファイル空間が提供される。これにより、ホストの利用者に仮想ファイル名を提示し、ホストの利用者が実際に記録されたファイルと同様に仮想ファイルを読み込むことが可能となる。さらには、情報処理装置100の内部記憶装置の使用効率と、同時に、ホストの利用者の利便性とを向上することができる。
【0074】
(第2の実施形態)
以下、本発明の第2の実施形態について、図19及び図20を参照しながら説明する。以下、第1の実施形態と異なる点についてのみ説明する。
図19は、本実施形態に係る情報処理装置1900の機能構成例を示すブロック図である。
図19において、1901は、中間データ106を所定の形式で二次記憶装置203に記録したものである。図1と異なるのは、中間データ生成部110が生成した中間データを、二次記憶装置203に記録する点と、二次記憶装置203に記録された中間データが一次記憶装置202に展開される点である。これらの処理について図20を用いて詳細を後述する。
【0075】
図20は、本実施形態に係る情報処理装置1900において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S2001では、中間データが既に二次記憶装置203に記録されているか否かを判定する。この判定の結果、既に中間データが記録されている場合は、S2002に進む。一方、中間データが記録されていない場合は、S2003に進む。中間データが記録されているか否かを判定する方法は、本実施形態では特に限定しない。例えば、中間データのファイル名を固定しておいて、実ファイル空間からそのファイル名を検索することにより判定してもよい。あるいは、実ファイル空間が記録されたパーティションとは異なるパーティションに記録しておいて、そのパーティションの有無を判定条件としてもよい。
【0076】
S2002では、二次記憶装置203に記録された中間データを一次記憶装置202に展開し、S2005に進む。一方、S2003では、前述した中間データ生成部110による処理を実行する。そして、S2004では、S2003で生成した中間データを二次記憶装置203に所定の形式で記録する。
【0077】
S2005では、ホストがこのデバイスをアクセス可能となるように、通信装置204を制御する。そして、S2006では、ホストからのREAD要求を受信するまで待機する。そして、READ要求を受信すると、S2007に進み、前述した第1の制御部107〜第3の制御部109による処理を実行する。
【0078】
以上のように本実施形態に係る情報処理装置1900では、二次記憶装置203に中間データが記録されている場合に、中間データ生成処理を省略する。これにより、電源投入後からホストとの接続が確立までの時間が第1の実施形態に比べて短縮され、利用者の利便性をさらに向上することができる。
【0079】
(第3の実施形態)
本発明の第3の実施形態について、図21〜図24を参照しながら説明する。本実施形態の情報処理装置の一例として、デジタルカメラを例に説明する。電源投入時は撮像モードとして起動し、利用者の操作に基づいてストレージデバイスモードに切り替えることができる。なお、撮像した画像を二次記憶装置203に記録するためにホストと同じ形式のファイルシステムを備えている。
【0080】
図21は、本実施形態に係る情報処理装置2100の機能構成例を示すブロック図である。本実施形態では、図1と異なり、ホストと同じ形式のファイルシステムを用いて実ファイル空間に撮像した画像ファイルを追加する画像ファイル追加部2101を備えている。さらに、追加した画像ファイルを仮想ファイル空間に反映させるために、中間データを更新する中間データ更新部2102を備えている。
【0081】
図22は、本実施形態に係る情報処理装置2100のハードウェア構成の一例を示すブロック図である。図2と異なり、操作インタフェース2201を備えている。利用者はこの操作インタフェースを介して、情報処理装置2100を制御することができる。さらに、撮像装置2202を備えており、撮像した画像情報を所定の形式で一次記憶装置202に展開する機能を有する。
【0082】
図23は、本実施形態に係る情報処理装置2100において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S2301では、利用者により操作インタフェース2201が操作され、撮像モードからストレージデバイスモードに切り替えを行ったか否かを判定する。この判定の結果、切り替えを行った場合はS2306に進み、そうでなければS2302に進む。
【0083】
S2302では、利用者により操作インタフェース2201が操作され、撮像操作を行ったか否かを判定する。この判定の結果、撮像操作を行った場合はS2303に進み、そうでなければS2301に戻る。S2303では、撮像装置2202を駆動して、画像情報を一次記憶装置202に展開し、S2304に進む。S2304では、S2303で展開された画像情報を、二次記憶装置203にファイルとして記録する。詳細に述べると、まず、二次記憶装置203をホストと同じ形式のファイルシステムでマウントする。次に、画像ファイル名を所定のルールに則って命名し、ファイルシステムにファイル作成命令を発行する。最後に、一次記憶装置202に展開されているデータを対象として、ファイルシステムにファイルデータ書き込み命令を発行する。
【0084】
次に、S2305では、中間データ更新部2102による処理を実行する。この処理の詳細については図24を用いて後述する。一方、S2306では、ストレージデバイスモードに切り替えるために、図20に示したフローチャートと同様の処理を実行する。
【0085】
図24は、S2305で中間データを更新する処理手順の一例を示すフローチャートである。
まず、S2401では、追加した画像ファイルを元ファイルとして仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、画像ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置203から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はS2402に進み、変換可能でない場合は中間データ更新処理を終了する。
【0086】
S2402では、元ファイルが属するディレクトリに対応する中間データエントリを、中間データエントリ501から抽出する。すなわち、S2304で元ファイルのディレクトリエントリを追加したディレクトリ領域のアドレスと各中間データエントリの属性値503に記録されたアドレスリストとを比較し、一致するものを抽出する。次に、S2403では、仮想ファイルに対応する仮想ファイルエントリ502の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値507に記録し、変換方法を属性値511に記録する。このとき、属性値505の値を1増やしたものに更新する。
【0087】
S2404では、属性値511に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値510に記録する。このとき、変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。次に、S2405では、元ファイルの属するディレクトリ領域または仮想ディレクトリ領域に仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はS2407に進み、ない場合はS2406に進む。
【0088】
S2406では、仮想ディレクトリ領域のクラスタを1つ割り当て、アドレスを属性値504に記録する。そして、S2407では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値508に位置を記録する。そして、S2408では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値509に記録する。
【0089】
以上のように本実施形態に係る情報処理装置2100では、デジタルカメラとしての機能を備え、利用者の操作に基づいて、撮像機能とストレージ機能が切り替えられる。そして、新規に画像が撮像されると、中間データは更新される。これにより、ホストは新規に撮像された画像ファイルに対応する仮想ファイルもアクセスすることが可能になる。
【0090】
(その他の実施形態)
前述した第1〜第3の実施形態においては、仮想ファイルは元ファイルと同じディレクトリに重畳したが、仮想ファイル専用の仮想ディレクトリを生成して重畳してもよい。また、前述した各実施形態においては、情報処理装置とホストとの接続はUSBマスストレージクラスで通信する場合について説明したが、iSCSIなど、他のブロックベースのストレージデバイス規格を扱ってもよい。
【0091】
さらに、前述した各実施形態においては、1つのファイルから1つの仮想ファイルを生成したが、複数の変換方法に応じて仮想ファイルを生成してもよい。また、前述の各実施形態においては、情報処理装置の二次記憶装置203がローカルに接続されている場合について説明したが、ネットワーク上に存在する記憶装置を扱ってもよい。さらに、前述した各実施形態では、第1の制御部107〜第3の制御部109において、中間データを回すループを説明したが、アドレスと中間データとを対応づけるテーブルを用いて、ループを省略してもよい。
【0092】
前述した各実施形態においては、二次記憶装置203がFAT16形式である場合について説明したが、他のファイルシステムを扱ってもよい。また、ファイルの変換および変換後のファイルサイズ算出はCPU201で実行したが、ファイルデータ変換用のハードウェアを用いて高速化してもよい。
【0093】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0094】
107 第1の制御部
108 第2の制御部
109 第3の制御部
110 中間データ生成部
【技術分野】
【0001】
本発明は、特にブロックベースのストレージ機能を有する情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
ホストとストレージデバイスとの間の通信方法は、アクセス単位の抽象度という観点から、ブロックベースとファイルベースとの2つに分類することができる。ブロックベースでは、セクタなど所定のブロックサイズ(例えば512バイト)をアクセス単位とする。ホストがREADする場合、ホストは所望するブロックデータのアドレスをストレージデバイスに送り、ストレージデバイスは対応するブロックデータを内部記憶装置から読み出してホストに送信する。USBマスストレージは、ブロックベースのストレージデバイス向けの規格の一例である。
【0003】
一方、ファイルベースの通信方法では、データを指定するのにファイル名を用いる。ホストからのREAD処理であれば、ホストからはファイル名をストレージデバイスに送り、ストレージデバイスは受信したファイル名に対応するファイルデータを内部記憶装置から読み出してホストに送信する。この方法は例えばNASなどで用いられている。例えばLinux(登録商標)などの汎用OSが動作するホストの利用者は、ファイルシステムと呼ばれるソフトウェアを介してストレージデバイスにアクセスする。ファイルシステムの利用者は、ストレージデバイスがブロックベースであっても、ファイルベースでアクセスすることができる。すなわち、ブロックベースのストレージデバイス向けに作成されたファイルシステムは、ファイル名からファイルデータのアドレスへの変換を内部的に行っている。
【0004】
以下、ホストのファイルシステムが、ファイルとファイルデータアドレスとの対応づけに必要な情報を取得する処理を簡単に説明する。
図14は、ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。図14に示されるように、先頭にマスターブートレコード領域が記録され、連続して1つ以上のパーティションが記録されている。
【0005】
図15は、マスターブートレコード領域のパーティションテーブルを示す図である。パーティションテーブルには、パーティションの開始位置とサイズといった情報が記録されている。ホストは先頭(アドレス0)にあるマスターブートレコード領域を読み出すことで、各パーティションの先頭アドレスを指定することが可能となる。
【0006】
図14に示した通り、各パーティションはブートレコード領域と、管理領域と、ディレクトリ領域とファイルデータ領域とから構成されている。ブートレコード領域には、管理領域の先頭アドレスと、ディレクトリ領域及びファイルデータ領域の先頭アドレスとを算出するための情報が記録されている。管理領域やディレクトリ領域、ファイルデータ領域では、データの記録位置を示すのにセクタのアドレスではなく、クラスタ番号が用いられる。クラスタはセクタの所定倍を単位としたものであるため、クラスタ番号からセクタアドレスを算出することができる。ブートレコード領域には、このクラスタの大きさの情報も記録されている。
【0007】
例えば、パーティションがFAT16形式でフォーマットされているとすると、ルートディレクトリのディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭に記録されている。ホストはこのブートレコード領域を読み出すことにより、ルートディレクトリ領域の先頭アドレスを指定することが可能となる。
【0008】
また、ディレクトリ領域には、そのディレクトリに属するサブディレクトリ及びファイルの一覧と、それぞれに対応するディレクトリ領域及びファイルデータ領域の先頭クラスタ番号が記録されている。ホストはディレクトリ領域を読み出すことにより、そのディレクトリに属するサブディレクトリのディレクトリ領域や、ファイルのファイルデータ領域の先頭アドレスを指定することが可能となる。
【0009】
1つのファイルに対応するファイルデータを構成する各クラスタは、連続して記録される必要はない。管理領域は、クラスタチェーンと呼ばれる、各クラスタがどのように連結されているかを示すリンクドリストが記録されている。ホストはこの管理領域を適宜参照することにより、目的とするディレクトリのディレクトリ領域やファイルデータ領域の先頭アドレスから先頭クラスタ以降のアドレスを取得することが可能となる。以上より、ホストのファイルシステムはファイル名とアドレスとの対応づけを行うことが可能となる。
【0010】
ここで、ホストの利用者は、ストレージデバイスに記憶されているファイルデータを変換するという作業を行うことがある。時としてこの作業は煩雑である。例えばテキストファイルの文字コードを変換するには、ホストへの一時的なコピーや、文字コード変換プログラムの起動、変換ファイルの命名といった手間がある。この煩雑さを解決するものとして、ファイルデータを記録する装置が、実際に記録されたファイルに加えて、それらのファイルから変換可能なファイルを重畳して利用者に提示する技術も知られている。
【0011】
例えば特許文献1に記載の方法によれば、サーバーは、クライアントからディレクトリ内容のREAD要求を受信する。そして、サーバーは、この要求に応じて、内部記憶装置に実際に記録されているファイルと、そのファイルを元に生成できるファイル(以降、仮想ファイルと呼ぶ)とを重畳したリストをクライアントに送信する。そして、サーバーが仮想ファイルに対するREAD要求を受信した際は、元ファイルに対応するファイルデータを変換することで対応するファイルデータを生成し、クライアントに送信する。
【0012】
このような技術を用いれば、ホスト上で変換を行うプログラムを実行する必要がなくなり、利用者の利便性が向上する。すなわち、利用者は特段の変換操作をせずとも、所望する変換された形式のファイルを利用することができる。また、仮想ファイルのファイルデータはサーバーの内部記憶装置に記録されないので、内部記憶装置の使用効率が高い。また、特許文献1に記載の技術は、ネットワーク接続されたサーバーとクライアントとに跨るファイル管理に関する技術であるが、このサーバーはファイルベースのストレージデバイスと本質的に等価である。すなわちこの技術を、ファイルベースのストレージデバイスに適用することは容易である。
【先行技術文献】
【特許文献】
【0013】
【特許文献1】特開平10−74153号公報
【発明の概要】
【発明が解決しようとする課題】
【0014】
ブロックベースのストレージデバイスは、ホストからはファイル名ではなくブロック番号が指定され、ブロック番号に対応するブロックデータを送受信するが、ブロックデータの内容を解釈しない。そのため、特許文献1に記載された、仮想ファイルをホストに提示する機能や、ホストの要求に応じて仮想ファイルのファイルデータを動的生成するといった機能を備えることができなかった。
【0015】
本発明は前述の問題点に鑑み、ブロックベースの通信方式により、ホストの利用者に仮想ファイル名を提示し、実際に記録されたファイルと同様に仮想ファイルを読み出すことができるようにすることを目的としている。
【課題を解決するための手段】
【0016】
本発明の情報処理装置は、ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、を備えたことを特徴とする。
【発明の効果】
【0017】
本発明によれば、ブロックベースのストレージデバイスは、内部の記憶装置に記録されているファイルと、そのファイルを元に動的に生成可能な仮想ファイルとを重畳してホストに提示することが可能になる。また、ホストから仮想ファイルのファイルデータが記録されたブロックを要求された際には、仮想ファイルに対応するファイルデータを生成してホストに送信することが可能になる。これにより、ストレージデバイスの内部記憶装置の使用効率と、ホストの利用者の利便性とを向上することができる。
【図面の簡単な説明】
【0018】
【図1】第1の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図2】第1及び第2の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図3】実施形態に係る情報処理装置が備える仮想ファイル空間を示す図である。
【図4】中間データ生成部により二次記憶装置から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
【図5】中間データの構造を示す図である。
【図6】ホストからのREAD要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
【図7】第1の制御部により行われる処理の手順の一例を示すフローチャートである。
【図8】第2の制御部により行われる処理の手順の一例を示すフローチャートである。
【図9】第3の制御部により行われる処理の手順の一例を示すフローチャートである。
【図10】S708における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
【図11】S712におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
【図12】S802における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
【図13】S804における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
【図14】ストレージデバイスの内部記憶装置に記録されている内容の概略を示す図である。
【図15】マスターブートレコード領域のパーティションテーブルを示す図である。
【図16】ブートレコード領域の一部を示す図である。
【図17】ディレクトリ領域に属するブロックデータの一例を示す図である。
【図18】第1の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図19】第2の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図20】第2の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図21】第3の実施形態に係る情報処理装置の機能構成例を示すブロック図である。
【図22】第3の実施形態に係る情報処理装置のハードウェア構成の一例を示すブロック図である。
【図23】第3の実施形態において、電源投入後にCPUが実行する処理手順の一例を示すフローチャートである。
【図24】S2305で中間データを更新する処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0019】
(第1の実施形態)
以下、本発明の第1の実施形態について図面を参照しながら説明する。
図1は、本実施形態に係る情報処理装置100の機能構成例を示すブロック図である。
図1において、情報処理装置100は、ホストからのREAD要求に指定されたアドレス101を受信すると、対応するブロックデータ102をホストに送信する。仮想ファイル空間103は、後述する二次記憶装置に実際に記録されているファイル(以降、元ファイルと呼ぶ)と、そのファイルを変換することで作成されるファイル(以降、仮想ファイルと呼ぶ)とを重畳した仮想的なファイル空間である。104は、二次記憶装置に記録されている実ファイル空間105とそれを基に予め生成された中間データ106とから仮想ファイル空間103を動的に生成し、ホストに送信する制御部である。
【0020】
第1の制御部107は、仮想ファイル空間103のうち、実ファイル空間105の所定単位のブロックデータを読み取って、ブロックデータのうち実ファイル空間105に基づくフィールドを仮想ファイル空間に変換してホストに送信する。この処理の詳細は後述する。第2の制御部108は、仮想ファイル空間103のうち、後述する仮想管理領域や仮想ディレクトリ領域を生成してホストに送信する。この処理についても詳細は後述する。第3の制御部109は、仮想ファイルのファイルデータを、実ファイル空間にある元ファイルのファイルデータを変換することによって生成してホストに送信する。この処理についても詳細は後述する。
【0021】
110は、実ファイル空間105から仮想ファイル空間103を生成する処理を高速化するための中間データ106を生成する中間データ生成部であり、詳細は後述する。
なお、本実施形態における前記所定単位は、セクタ単位である。
【0022】
図2は、本実施形態に係る情報処理装置100のハードウェア構成の一例を示すブロック図である。
図2において、201は情報処理装置100全体を制御するプログラムを動作させるCPUである。202はプログラムやデータを一時記憶する一次記憶装置である。203はストレージデバイスとしてホストから読み書きされるデータを記録するための、不揮発な二次記憶装置であり、FAT16形式を用いて実ファイル空間105が記録されている。204はホストとブロックベースのデータを送受信するための通信装置であり、USBのマスストレージクラスの通信を行う。205はこれらの各ユニットを通信可能に接続したバスである。
【0023】
図3は、本実施形態に係る情報処理装置100が備える仮想ファイル空間103を示す図である。
図3において、301は実ファイル空間105のブートレコード領域であり、二次記憶装置203に記録されている。ブートレコード領域の詳細は後述するが、このパーティションの大きさなどの情報が記録されている。302は実ファイル空間105の管理領域であり、二次記憶装置203に記録されている。後述するディレクトリ領域及びファイルデータ領域303に用いられるクラスタがどのように連結されているかを示すデータが記録されている。303は実ファイル空間105のディレクトリ領域及びファイルデータ領域であり、二次記憶装置203に記録されている。特に、これらの各領域は、仮想ファイル空間にマッピングされていると捉えることができる。
【0024】
304は仮想ファイル空間103のブートレコード領域であって、実ファイル空間105のブートレコード領域301に対応するものである。実ファイル空間105のブートレコード領域301に比べて、パーティションの大きさに関するフィールドは、後述する仮想管理領域306と後述する仮想ディレクトリ領域及び仮想ファイルデータ領域308の大きさを加味した値に変更されている。
【0025】
305は仮想ファイル空間103の管理対象を示す管理領域であって、実ファイル空間105の管理領域302に対応するものである。実ファイル空間105の管理領域302に比べて、ディレクトリ領域及びファイルデータ領域は、後述する仮想管理領域306のサイズを加味した値に変更される。さらに実ファイル空間105の管理領域302に比べて、後述する所定の条件を満たすディレクトリ領域が、後述する仮想ディレクトリ領域と仮想ファイルデータ領域のうち仮想ディレクトリ領域に結合するようにアドレスが変更されている。
【0026】
306は仮想ファイル空間103の仮想管理領域であって、管理領域305を仮想的に拡張したものである。後述する仮想ディレクトリ領域及び仮想ファイルデータ領域のうち仮想ファイルデータ領域のファイルデータのクラスタの連結を示すデータが記録されている。307は仮想ファイル空間103のディレクトリ領域及びファイルデータ領域であって、実ファイル空間105のディレクトリ領域及びファイルデータ領域303に対応するものである。実ファイル空間105のディレクトリ領域及びファイルデータ領域303に比べて、アドレスが仮想管理領域306のサイズを加味した値に変更されている。308は仮想ディレクトリ領域と仮想ファイルデータ領域である。実ファイル空間105には存在しない、仮想ファイルのディレクトリエントリとファイルデータが記録されている。
【0027】
図18は、本実施形態において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S1801において、中間データ生成部110による処理を実行する。S1801の詳細は図4を用いて後述する。次に、S1802において、ホストが情報処理装置100をアクセス可能となるように、通信装置204を制御する。そして、S1803において、ホストからREAD要求を受信するまで待機する。そして、READ要求を受信すると、S1804において、第1の制御部107〜第3の制御部109による処理を実行する。S1804の詳細は図6を用いて後述する。
【0028】
図4は、中間データ生成部110により二次記憶装置203から読み取って中間データを生成する処理手順の一例を示すフローチャートである。
まず、S401において、ブートレコード領域から、実ファイル空間を構成する各領域の範囲を読み出す。
【0029】
図16は、ブートレコード領域の一部を示す図である。領域1601には、1セクタの大きさをバイト数で示したもの(例えば、511)が記録されている。領域1602には、1クラスタのセクタ数が記録されている。ここで、クラスタはセクタをまとめたもので、ディレクトリ領域及びファイルデータ領域で用いられる記録単位である。この値を用いて、クラスタを指定するクラスタ番号から、セクタを指定するセクタアドレスを求めることができる。
【0030】
領域1603には、予約セクタ数が記録されている。ブートレコード領域のアドレスにこの値を加えると管理領域のアドレスとなる。領域1604には、管理領域の数(例えば、2)が記録されている。領域1605には、ルートディレクトリのディレクトリエントリ数(例えば、511)が記録されている。ルートディレクトリのディレクトリ領域だけは、サイズが固定である。領域1606には、パーティションのセクタ数が65535以下の際にそのセクタ数が記録されている。
【0031】
領域1607には、管理領域の大きさが記録されている。領域1608は、パーティションのセクタ数が65536以上の際にそのセクタ数が記録されている。すなわち、ブートレコード領域に記録されているこれらの情報を読み出すことで、管理領域、ディレクトリ領域及びファイルデータ領域の開始アドレスを算出することができる。
【0032】
図4の説明に戻り、S402においては、S403からS413の間の処理を、二次記憶装置203に記録されているディレクトリ全てについて繰り返す。ルートディレクトリに対応するディレクトリ領域は、ディレクトリ領域及びファイルデータ領域の先頭から32セクタ連続して記録されている。ディレクトリ領域の各ディレクトリエントリを順次判定して、全てのサブディレクトリを抽出できる。
【0033】
図17は、ディレクトリ領域に属するブロックデータの一例を示す図である。
図17に示す通り、ディレクトリ領域はディレクトリエントリが連続して記録されている。領域1701には、ファイル名が記録されている。なお、ファイル名の先頭バイトの値が0の場合は、空きエントリである。なお、後述するファイル属性がディレクトリを示す場合、このファイル名はディレクトリ名として扱われる。
【0034】
領域1702には、ファイル属性が記録されている。ファイル属性の値から、このエントリがファイルであるかディレクトリであるかを判断することができる。領域1703には、このエントリに対応するデータが実際に記録されている先頭クラスタ番号が記録されている。このディレクトリエントリがファイルに対応するのであればファイルデータの先頭クラスタ番号が、このディレクトリエントリがディレクトリに対応するのであればディレクトリ領域の先頭クラスタ番号が記録されている。領域1704には、このディレクトリエントリがファイルであった場合のファイルデータのサイズ(ファイルサイズ)が記録されている。
【0035】
図4の説明に戻ると、S402は、ディレクトリを示すディレクトリエントリを逐次的に選択し、S403からS412の処理を繰り返す。S403においては、当該ディレクトリに対応する中間データエントリの記録領域を一次記憶装置に確保する。そして、さらにそこに、管理領域302を記録されたクラスタチェーンを適宜参照しながら、ディレクトリ領域を構成する全てのクラスタのアドレスを記録する。
【0036】
ここで、中間データについて図5を参照しながら説明する。図5は、中間データの構造を示す図である。501は、図4のS403で確保される実ファイル空間の一ディレクトリに対応する中間データエントリであり、ディレクトリの数だけリストとして構成されたものである。1つの中間データエントリは、後述する属性値で構成される。502は、ディレクトリに関連づけられた一仮想ファイルの情報を記録する仮想ファイルエントリであり、仮想ファイルの数だけリストとして構成されたもので、中間データエントリ501と同様に一次記憶装置に確保される。1つの仮想ファイルエントリは、後述する属性値で構成される。
【0037】
属性値503は当該ディレクトリに対応するディレクトリ領域のアドレスを記録したリストであり、S403で記録される。属性値504には、仮想ファイルに対応するディレクトリエントリを記録するために仮想ディレクトリ領域を割り当てた場合に、割り当てた仮想ディレクトリ領域のアドレスがリストとして記録される。属性値505には、当該ディレクトリに仮想ファイルをいくつ関連付けるかについて記録される。属性値506は、仮想ファイルエントリ502のアドレスとして記録される。
【0038】
属性値507は、元ファイルに対応するディレクトリエントリの位置として記録される。詳細には、元ファイルのディレクトリエントリが記録された実ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値508は、仮想ファイルに対応するディレクトリエントリの位置として記録される。詳細には、仮想ファイルのディレクトリエントリを割り当てた仮想ファイル空間のアドレスと、そのアドレスに対応するブロックデータにおけるオフセットとが記録される。属性値509は、仮想ファイルに対応するファイルデータを割り当てたアドレスとして記録される。属性値510は、仮想ファイルに対応するファイルデータの大きさとして記録される。属性値511は、仮想ファイルに対応するファイルデータが、元ファイルからの変換方法を指定する情報として記録される。
【0039】
図4の説明に戻ると、S403で中間データエントリ501を確保して属性値503を記録した後、S404に進む。S404では、ファイルを示すディレクトリエントリを逐次的に選択し、S404からS412の間の処理を繰り返す。S405では、当該ファイルが仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置203から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はS406に進み、変換可能でない場合はS412へ進む。
【0040】
S406では、仮想ファイルに対応する仮想ファイルエントリ502の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値507に記録し、変換方法を属性値511に記録する。このとき、属性値505の値を1増やしたものに更新する。次に、S407では、属性値511に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値510に記録する。変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。
【0041】
次に、S408では、S402で選択されたディレクトリに対応するディレクトリ領域か、属性値504に指定される仮想ディレクトリ領域に、当該仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はS410に進み、ない場合はS409に進む。S409では、仮想ディレクトリ領域のクラスタを割り当て、アドレスを属性値504に記録する。
【0042】
次に、S410では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値508に位置を記録する。S411では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値509に記録する。
【0043】
図6は、ホストからのREAD要求に応じて、対応するブロックデータをホストに送信する処理手順の一例を示すフローチャートである。
まず、S601では、ホストからREAD要求されたアドレスが、実ファイル空間に記録された領域に対応する領域か否かを判定する。すなわち、対応するデータが、ブートレコード領域、管理領域、ディレクトリ領域またはファイルデータ領域に該当する場合はS602に進み、そうでなければS603に進む。
【0044】
S602では、第1の制御部107による処理が行われる。この処理の詳細は後述する。一方、S603では、ホストからREAD要求されたアドレスが、仮想管理領域または仮想ディレクトリ領域に該当するアドレスであるか否かを判定する。この判定の結果、該当するアドレスである場合はS604に進み、そうでなければS605に進む。仮想ディレクトリ領域と仮想ファイルデータ領域は入り混じって割り当てられているため、仮想ディレクトリ領域に該当するかの判定には、仮想ファイルエントリ502に記録されている属性値504の値を用いる。
【0045】
S604では、第2の制御部108による処理が行われる。この処理の詳細は後述する。一方、S605では、第3の制御部109による処理が行われる。この処理の詳細は後述する。
【0046】
図7は、第1の制御部107により行われる処理の手順の一例を示すフローチャートである。前述した様に、第1の制御部107は、実ファイル空間105に記録されたブロックデータのうち、実ファイル空間105に基づく値を仮想ファイル空間103の値に変換してホストに送信する。以下、図7を参照しながら詳細を説明する。
【0047】
まず、S701において、ホストからREAD要求されたアドレスが、仮想ファイル空間103におけるブートレコード領域304に該当するか否かを判定する。この判定の結果、ブートレコード領域304に該当する場合はS702に進み、そうでなければS705に進む。S702では、二次記憶装置203に記録されている、実ファイル空間105のブートレコード領域301からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスと同じである。
【0048】
次に、S703では、S702で読み出したブロックデータのうち、実ファイル空間105の大きさが記録されたフィールドを、仮想ファイル空間103の大きさに書き換える。具体的には、図16に示した領域1607に仮想管理領域306の大きさを加える。さらに、仮想ファイル空間103に必要なセクタ数を領域1606または1608に、値に応じてどちらか一方を書き換える。そして、S704では、読み出したブロックデータをホストに送信する。
【0049】
一方、S705では、ホストからREAD要求されたアドレスが、仮想ファイル空間103における管理領域305に該当するか否かを判定する。この判定の結果、管理領域305に該当する場合はS706に進み、そうでなければS709に進む。S706では、二次記憶装置203に記録されている、実ファイル空間105の管理領域305からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスと同じである。
【0050】
次に、S707では、S706で読み出したブロックデータのうち、実ファイル空間105のアドレスが記録されたフィールドを、仮想ファイル空間103のアドレスに書き換える。図3に示した様に、仮想ファイル空間103のディレクトリ領域及びファイルデータ領域307は、実ファイル空間105のディレクトリ領域及びファイルデータ領域303に比べて、仮想管理領域306だけずれて記録されている。よって、読み出した管理領域305のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【0051】
次に、S708では、S706で読み出したブロックデータのうち、仮想ディレクトリ領域と連結されたディレクトリ領域の管理領域を書き換える。この処理はホストにディレクトリ領域が仮想ディレクトリ領域と結合されていることを認識させるための処理であり、詳細は後述する。
【0052】
一方、S709では、ホストからREAD要求されたアドレスと属性値503に記録されたディレクトリ領域のアドレスリストとを比較し、アドレスが仮想ファイル空間103におけるディレクトリ領域に該当するか否かを判定する。この判定の結果、要求されたアドレスが仮想ファイル空間103におけるディレクトリ領域に該当する場合はS710に進み、そうでなければS713に進む。
【0053】
S710では、二次記憶装置203に記録されている、実ファイル空間105のディレクトリ領域からブロックデータを読み出してS707に進む。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。そして、S711では、S710で読み出したブロックデータのうち、実ファイル空間105のアドレスが記録されたフィールドを、仮想ファイル空間103のアドレスに書き換える。S707と同様に、読み出したディレクトリ領域のブロックデータに用いられている全てのクラスタ番号を、仮想管理領域の大きさをクラスタ数に変換した値を加え、上書きする。
【0054】
次に、S712では、S710で読み出したブロックデータのうち、仮想ファイルのディレクトリエントリが割り当てられたディレクトリ領域または仮想ディレクトリ領域のクラスタチェーンを書き換える。この処理はホストに仮想ファイルを認識させるための処理であり、詳細は後述する。一方、S713では、二次記憶装置203に記録されている、実ファイル空間105のファイルデータ領域からブロックデータを読み出す。なお、二次記憶装置203の読み出しに指定するアドレスは、ホストからREAD要求時に指定されたアドレスから、仮想管理領域のセクタ数を引いた値である。
【0055】
図10は、図7のS708における管理領域を書き換えて、ディレクトリ領域と仮想ディレクトリ領域とを結合させる処理手順の一例を示すフローチャートである。
まず、S1001では、S1001からS1005の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。S1002では、S1001で選択された中間データエントリに関して、属性値504に仮想ディレクトリ領域のアドレスが設定されているか否かを判定する。この判定の結果、仮想ディレクトリ領域のアドレスが設定されている場合はS1003に進み、そうでなければS1005に進む。
【0056】
S1003では、ホストからREAD要求されたアドレスと、属性値503に記録されたアドレスリストの終端のクラスタに対応する管理領域のアドレスとを比較する。この条件が真である場合はS1004に進み、そうでなければS1005に進む。S1004では、S1003の判定に用いた、当該ディレクトリに対応する管理領域クラスタチェーンの終端を、属性値504に記録されているアドレスのクラスタ番号に書き換える。
【0057】
図11は、図7のS712におけるディレクトリ領域を書き換えて、実ファイル空間のディレクトリと仮想ファイルを関連付ける処理手順の一例を示すフローチャートである。
まず、S1101では、S1101からS1107の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。S1102では、ホストにREAD要求されたアドレスと、S1001で選択された中間データエントリの属性値503に記録されたアドレスリストとを比較する。この比較の結果、一致した場合はS1103に進み、そうでなければS1107に進む。
【0058】
S1103では、S1103からS1106の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。S1104では、S1103で選択された仮想ファイルのディレクトリエントリを、S710で読み出したブロックデータに割り当ててあるか否かについて、属性値508を用いて判定する。この判定の結果、割り当ててある場合はS1105に進み、そうでなければS1106に進む。
【0059】
S1105では、S710で読み出したブロックデータに、属性値508に記録された位置に仮想ファイルのディレクトリエントリを追加する。ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値510、511の値を用いる。その他の属性、例えば仮想ファイルのファイル名や変更日時などの属性の決定方法は、本発明は特に限定しない。本実施形態においては、仮想ファイルのファイル名は元ファイルのファイル名に属性値511で指定された変換方法の文字列表現を追加したものを用い、その他の属性は元ファイルと同じものを用いる。
【0060】
図8は、第2の制御部108により行われる処理の手順の一例を示すフローチャートである。前述した様に、第2の制御部108は、実ファイル空間105に記録されたブロックデータのうち、仮想管理領域または仮想ディレクトリ領域を、中間データから生成してホストに送信する。以下、図8を参照しながら詳細を説明する。
【0061】
まず、S801では、ホストからREAD要求されたアドレスが、仮想管理領域であるか否かを判定する。この判定の結果、仮想管理領域である場合はS802に進み、そうでなければS804に進む。S802では、仮想管理領域のブロックデータを生成する。この処理についての詳細は後述する。一方、S804では、仮想ディレクトリ領域のブロックデータを生成する。この処理についても詳細は後述する。そして、S803では、S802又はS804で生成されたブロックデータをホストに送信する。
【0062】
図12は、図8のS802における仮想管理領域のブロックデータを生成する処理手順の一例を示すフローチャートである。
まず、S1200では、一次記憶装置202にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用クラスタを示す値で初期化する。次に、S1201では、S1201からS1209の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。
【0063】
S1202では、ホストにREAD要求されたアドレスと、S1001で選択された中間データエントリの属性値504に記録されたアドレスリストの各アドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はS1203に進み、そうでなければS1204に進む。S1203では、属性値504に記録されているアドレスリストを基に、ホストからREAD要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをS1200で確保したブロックデータに書き込む。
【0064】
次に、S1208では、ホストに送信すべき管理領域のブロックデータがS1203とS1206とによって全て生成されたか否かを判定する。この処理では、ブロックデータに未使用クラスタを示す値が無いか探索することにより判定することができる。この判定の結果、全て生成された場合には、図12に示す処理を完了し、そうでなければS1209に進む。
【0065】
一方、S1204では、S1204からS1207の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。そして、S1205では、ホストにREAD要求されたアドレスと、当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスとを比較する。この結果、一致する場合はS1206に進み、そうでなければS1207に進む。なお、判定に用いる当該仮想ファイルのファイルデータ領域のアドレスに対応する管理領域のアドレスは、仮想ファイルデータ領域のクラスタが連続的に割り当てられているので、属性値509、510から算出する。
【0066】
S1206では、属性値509、510から算出される仮想ファイルデータ領域のアドレスリストを基に、ホストからREAD要求されたアドレスに対応するブロックデータに含まれるクラスタチェーンをS1200で確保したブロックデータに書き込む。
【0067】
図13は、図8のS804における仮想ディレクトリ領域を生成する処理手順の一例を示すフローチャートである。
まず、S1300では、一次記憶装置202にブロックデータの大きさの領域を確保し、確保した領域全体を、未使用のディレクトリエントリを示す値で初期化する。次に、S1301では、S1301からS1307の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。
【0068】
S1302では、ホストにREAD要求されたアドレスと、S1301で選択された中間データエントリの属性値504に記録されたアドレスリストとを比較する。この結果、一致する場合はS1303に進み、そうでなければS1307に進む。S1303では、S1303からS1306の間の処理を、当該中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。
【0069】
S1304では、ホストにREAD要求されたアドレスが、当該仮想ファイルのディレクトリエントリを書き込むアドレスと一致するか否かについて、属性値508を用いて判定する。この判定の結果、一致する場合はS1305に進み、そうでなければ図13に示す処理を完了する。S1305では、S1300で確保したブロックデータに、属性値508に記録された位置に仮想ファイルのディレクトリエントリを追加する。図11に示した処理と同様に、ファイルサイズ、ファイルデータ領域のアドレスは、それぞれ属性値510、511の値を用いる。仮想ファイルのファイル名は、元ファイルのファイル名と属性値511で指定された変換方法とに基づいて命名する。更新日時などは元ファイルと同じものを用いる。
【0070】
図9は、第3の制御部109により行われる処理の手順の一例を示すフローチャートである。
まず、S901では、S901からS905の間の処理を、中間データとして記録されている全ての中間データエントリ501について繰り返す。そして、S902では、S902からS904の間の処理を、S901で選択された中間データエントリに属する全ての仮想ファイルエントリ502について繰り返す。
【0071】
S903では、ホストにREAD要求されたアドレスが、当該仮想ファイルに割り当てた仮想ファイルデータ領域のアドレス範囲と一致するか否かを判定する。ここで、仮想ファイルに対応する仮想ファイルデータ領域のクラスタは連続して割り当てられているので、仮想ファイルデータ領域のアドレス範囲は属性値509を下限とし、その値に属性値510のブロック数を加えた値を上限とする。この判定の結果、条件が真となる場合はS906に進み、そうでなければS904に進む。
【0072】
S906では、属性値507に記録されているS902で選択された仮想ファイルの元ファイルのエントリの位置を基に、二次記憶装置203から元ファイルのファイルデータを一次記憶装置202に読み込む。S907では、S906で読み出した元ファイルのファイルデータを、属性値511に指定された変換方法で変換し、指定されたアドレスに対応するブロックデータを一次記憶装置202に記録する。S908では、S907で変換したファイルデータの1ブロックデータをホストに送信する。
【0073】
以上のように本実施形態に係る情報処理装置100では、ホストとの接続が確立される前に、中間データ生成部110によって二次記憶装置203に記録された実ファイル空間から中間データを作成する。この中間データは、実ファイル空間に記録されたファイルと、そのファイルを変換した仮想ファイルとを重畳した仮想ファイル空間を生成する処理を高速化するためのものである。その後、情報処理装置100がホストからREAD要求を受信すると、第1の制御部107〜第3の制御部109により、中間データに基づいて、仮想ファイル空間が提供される。これにより、ホストの利用者に仮想ファイル名を提示し、ホストの利用者が実際に記録されたファイルと同様に仮想ファイルを読み込むことが可能となる。さらには、情報処理装置100の内部記憶装置の使用効率と、同時に、ホストの利用者の利便性とを向上することができる。
【0074】
(第2の実施形態)
以下、本発明の第2の実施形態について、図19及び図20を参照しながら説明する。以下、第1の実施形態と異なる点についてのみ説明する。
図19は、本実施形態に係る情報処理装置1900の機能構成例を示すブロック図である。
図19において、1901は、中間データ106を所定の形式で二次記憶装置203に記録したものである。図1と異なるのは、中間データ生成部110が生成した中間データを、二次記憶装置203に記録する点と、二次記憶装置203に記録された中間データが一次記憶装置202に展開される点である。これらの処理について図20を用いて詳細を後述する。
【0075】
図20は、本実施形態に係る情報処理装置1900において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S2001では、中間データが既に二次記憶装置203に記録されているか否かを判定する。この判定の結果、既に中間データが記録されている場合は、S2002に進む。一方、中間データが記録されていない場合は、S2003に進む。中間データが記録されているか否かを判定する方法は、本実施形態では特に限定しない。例えば、中間データのファイル名を固定しておいて、実ファイル空間からそのファイル名を検索することにより判定してもよい。あるいは、実ファイル空間が記録されたパーティションとは異なるパーティションに記録しておいて、そのパーティションの有無を判定条件としてもよい。
【0076】
S2002では、二次記憶装置203に記録された中間データを一次記憶装置202に展開し、S2005に進む。一方、S2003では、前述した中間データ生成部110による処理を実行する。そして、S2004では、S2003で生成した中間データを二次記憶装置203に所定の形式で記録する。
【0077】
S2005では、ホストがこのデバイスをアクセス可能となるように、通信装置204を制御する。そして、S2006では、ホストからのREAD要求を受信するまで待機する。そして、READ要求を受信すると、S2007に進み、前述した第1の制御部107〜第3の制御部109による処理を実行する。
【0078】
以上のように本実施形態に係る情報処理装置1900では、二次記憶装置203に中間データが記録されている場合に、中間データ生成処理を省略する。これにより、電源投入後からホストとの接続が確立までの時間が第1の実施形態に比べて短縮され、利用者の利便性をさらに向上することができる。
【0079】
(第3の実施形態)
本発明の第3の実施形態について、図21〜図24を参照しながら説明する。本実施形態の情報処理装置の一例として、デジタルカメラを例に説明する。電源投入時は撮像モードとして起動し、利用者の操作に基づいてストレージデバイスモードに切り替えることができる。なお、撮像した画像を二次記憶装置203に記録するためにホストと同じ形式のファイルシステムを備えている。
【0080】
図21は、本実施形態に係る情報処理装置2100の機能構成例を示すブロック図である。本実施形態では、図1と異なり、ホストと同じ形式のファイルシステムを用いて実ファイル空間に撮像した画像ファイルを追加する画像ファイル追加部2101を備えている。さらに、追加した画像ファイルを仮想ファイル空間に反映させるために、中間データを更新する中間データ更新部2102を備えている。
【0081】
図22は、本実施形態に係る情報処理装置2100のハードウェア構成の一例を示すブロック図である。図2と異なり、操作インタフェース2201を備えている。利用者はこの操作インタフェースを介して、情報処理装置2100を制御することができる。さらに、撮像装置2202を備えており、撮像した画像情報を所定の形式で一次記憶装置202に展開する機能を有する。
【0082】
図23は、本実施形態に係る情報処理装置2100において、電源投入後にCPU201が実行する処理手順の一例を示すフローチャートである。
まず、S2301では、利用者により操作インタフェース2201が操作され、撮像モードからストレージデバイスモードに切り替えを行ったか否かを判定する。この判定の結果、切り替えを行った場合はS2306に進み、そうでなければS2302に進む。
【0083】
S2302では、利用者により操作インタフェース2201が操作され、撮像操作を行ったか否かを判定する。この判定の結果、撮像操作を行った場合はS2303に進み、そうでなければS2301に戻る。S2303では、撮像装置2202を駆動して、画像情報を一次記憶装置202に展開し、S2304に進む。S2304では、S2303で展開された画像情報を、二次記憶装置203にファイルとして記録する。詳細に述べると、まず、二次記憶装置203をホストと同じ形式のファイルシステムでマウントする。次に、画像ファイル名を所定のルールに則って命名し、ファイルシステムにファイル作成命令を発行する。最後に、一次記憶装置202に展開されているデータを対象として、ファイルシステムにファイルデータ書き込み命令を発行する。
【0084】
次に、S2305では、中間データ更新部2102による処理を実行する。この処理の詳細については図24を用いて後述する。一方、S2306では、ストレージデバイスモードに切り替えるために、図20に示したフローチャートと同様の処理を実行する。
【0085】
図24は、S2305で中間データを更新する処理手順の一例を示すフローチャートである。
まず、S2401では、追加した画像ファイルを元ファイルとして仮想ファイルを生成可能であるか否かについて、予め定められた条件に基づいて判定する。例えば、画像ファイル名が特定の文字列を含むか否かによって判定してもよいし、対応するファイルデータを二次記憶装置203から読み出して所定のバイト列が含まれるか否かにより判定してもよく、本実施形態において変換方法は限定されない。この判定の結果、変換可能である場合はS2402に進み、変換可能でない場合は中間データ更新処理を終了する。
【0086】
S2402では、元ファイルが属するディレクトリに対応する中間データエントリを、中間データエントリ501から抽出する。すなわち、S2304で元ファイルのディレクトリエントリを追加したディレクトリ領域のアドレスと各中間データエントリの属性値503に記録されたアドレスリストとを比較し、一致するものを抽出する。次に、S2403では、仮想ファイルに対応する仮想ファイルエントリ502の記憶領域を確保し、元ファイルのディレクトリエントリの位置を属性値507に記録し、変換方法を属性値511に記録する。このとき、属性値505の値を1増やしたものに更新する。
【0087】
S2404では、属性値511に記録した変換方法で変換した場合の、仮想ファイルのファイルサイズを算出し、属性値510に記録する。このとき、変換処理を一旦行うことによって算出しても、他の方法で算出してもよく、特に限定されない。次に、S2405では、元ファイルの属するディレクトリ領域または仮想ディレクトリ領域に仮想ファイルを割り当てる空きエントリがあるか否かを判定する。この判定の結果、当該ディレクトリに属する全ての仮想ファイルに十分な数の空きエントリがある場合はS2407に進み、ない場合はS2406に進む。
【0088】
S2406では、仮想ディレクトリ領域のクラスタを1つ割り当て、アドレスを属性値504に記録する。そして、S2407では、当該ディレクトリのディレクトリ領域または仮想ディレクトリ領域から空きエントリを割り当てて、属性値508に位置を記録する。そして、S2408では、当該ファイルのファイルデータを仮想ファイルデータ領域のクラスタを連続的に割り当て、先頭クラスタのアドレスを属性値509に記録する。
【0089】
以上のように本実施形態に係る情報処理装置2100では、デジタルカメラとしての機能を備え、利用者の操作に基づいて、撮像機能とストレージ機能が切り替えられる。そして、新規に画像が撮像されると、中間データは更新される。これにより、ホストは新規に撮像された画像ファイルに対応する仮想ファイルもアクセスすることが可能になる。
【0090】
(その他の実施形態)
前述した第1〜第3の実施形態においては、仮想ファイルは元ファイルと同じディレクトリに重畳したが、仮想ファイル専用の仮想ディレクトリを生成して重畳してもよい。また、前述した各実施形態においては、情報処理装置とホストとの接続はUSBマスストレージクラスで通信する場合について説明したが、iSCSIなど、他のブロックベースのストレージデバイス規格を扱ってもよい。
【0091】
さらに、前述した各実施形態においては、1つのファイルから1つの仮想ファイルを生成したが、複数の変換方法に応じて仮想ファイルを生成してもよい。また、前述の各実施形態においては、情報処理装置の二次記憶装置203がローカルに接続されている場合について説明したが、ネットワーク上に存在する記憶装置を扱ってもよい。さらに、前述した各実施形態では、第1の制御部107〜第3の制御部109において、中間データを回すループを説明したが、アドレスと中間データとを対応づけるテーブルを用いて、ループを省略してもよい。
【0092】
前述した各実施形態においては、二次記憶装置203がFAT16形式である場合について説明したが、他のファイルシステムを扱ってもよい。また、ファイルの変換および変換後のファイルサイズ算出はCPU201で実行したが、ファイルデータ変換用のハードウェアを用いて高速化してもよい。
【0093】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0094】
107 第1の制御部
108 第2の制御部
109 第3の制御部
110 中間データ生成部
【特許請求の範囲】
【請求項1】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、
を備えたことを特徴とする情報処理装置。
【請求項2】
前記所定の単位はセクタ単位であることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置の情報処理方法であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する工程と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御工程と、
を備えたことを特徴とする情報処理方法。
【請求項4】
請求項3に記載の情報処理方法の各工程をコンピュータに実行させるためのプログラム。
【請求項1】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する手段と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御手段と、
を備えたことを特徴とする情報処理装置。
【請求項2】
前記所定の単位はセクタ単位であることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
ファイルシステムを備えたホストと接続され、データを所定の単位で送受信する情報処理装置の情報処理方法であって、
記録されている実ファイル空間に、ファイルを変換した仮想ファイルを含めて管理対象とするための仮想の管理領域、ディレクトリ領域、及びファイルデータ領域を加えた仮想ファイル空間を生成する工程と、
前記ホストから読み出し要求されたアドレスがいずれの仮想の領域に対応するのか判断し、前記実ファイル空間に該当するアドレスである場合は、前記アドレスのデータを前記実ファイル空間のアドレスに変換して記憶装置から読み出し、前記読み出したデータのうち前記実ファイル空間に基づくデータを前記仮想ファイル空間に変換して前記ホストに送信し、前記仮想の管理領域またはディレクトリ領域に該当するアドレスである場合は、前記ホストから要求されたアドレスに該当するデータを生成して送信し、前記仮想のファイルデータ領域に該当するアドレスである場合は、前記記憶装置に記録された前記ファイルデータ領域から元のファイルデータを読み出して変換して送信するように制御する制御工程と、
を備えたことを特徴とする情報処理方法。
【請求項4】
請求項3に記載の情報処理方法の各工程をコンピュータに実行させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2013−45146(P2013−45146A)
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願番号】特願2011−180475(P2011−180475)
【出願日】平成23年8月22日(2011.8.22)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成25年3月4日(2013.3.4)
【国際特許分類】
【出願日】平成23年8月22日(2011.8.22)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]