(57)【特許請求の範囲】
【請求項１】
上位装置と、前記上位装置とＵＳＢ接続可能なストレージ機器とがＵＳＢ転送路を介して接続され、前記上位装置と前記ストレージ機器との間でＵＳＢデータ転送を行うＵＳＢストレージシステムであって、
前記ストレージ機器に対する転送データがバッファリングされるバッファメモリ部と、
前記ＵＳＢデータ転送に先立ち、前記ストレージ機器に挿入された記憶媒体の種別に基づいて、その記憶媒体がバッファリングの対象であるか否かを判定するとともに、前記記憶媒体がバッファリングの対象であると判定された場合、前記上位装置から書込み指令を受信したとき、前記書込み指令が前記ストレージ機器の前回書込み領域と連続した領域への書込みであるか否かを判定するコマンド・ステイタス処理部と、
前記コマンド・ステイタス処理部で前記記憶媒体がバッファリングの対象でないと判定された場合、前記転送データを前記ストレージ機器に転送し、
前記コマンド・ステイタス処理部で前記書込み指令が前回書込み領域とは連続しない領域への書込みであると判定された場合、前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送し、前回書き込み領域と連続する領域への書込みであると判定された場合、前記バッファメモリ部の空き領域を判定し、空き領域があると判定されたときに前記転送データを前記バッファメモリ部にバッファリングし、空き領域が無いと判定されたときに前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するデータ転送制御部と、
を備えたことを特徴とするＵＳＢストレージシステム。
【請求項２】
前記コマンド・ステイタス処理部は、
前記上位装置から発行される構成情報取得要求に対して前記ストレージ機器から応答される応答メッセージに含まれる特定のフィールドの値を参照して、前記ストレージ機器に挿入される記憶媒体の種別を判定し、前記記憶媒体の書き込み対象領域に対するトラックの情報を取得する要求への応答に含まれるトラック情報の特定のフィールドが示す値を参照して、前記記憶媒体がバッファリングの対象であるか否かを判定することを特徴とする請求項１に記載のＵＳＢストレージシステム。
【請求項３】
前記コマンド・ステイタス処理部は、
前記書込み指令に付属の書込み先アドレスを参照することにより、前記書込み指令が、前記ストレージ機器の前回書き込み領域に連続した領域への書き込みであるか否かを判定することを特徴とする請求項１または２に記載のＵＳＢストレージシステム。
【請求項４】
上位装置と、前記上位装置とＵＳＢ接続可能なストレージ機器とがＵＳＢ転送路を介して接続され、前記上位装置とストレージ機器との間でＵＳＢデータ転送を行うＵＳＢストレージシステムに用いられるデータ転送制御用のプログラムであって、
前記ＵＳＢデータ転送に先立ち、前記ストレージ機器に挿入された記憶媒体の種別に基づいて、その記憶媒体がバッファリングの対象であるか否かを判定するバッファリング対象判定手順と、
前記バッファリング対象判定手順で前記記憶媒体がバッファリングの対象でないと判定された場合、転送データを前記ストレージ機器に転送する手順と、
前記バッファリング対象判定手順で前記記憶媒体がバッファリングの対象であると判定された場合、
前記上位装置から書込み指令が発行されると、前記書込み指令が前記ストレージ機器の前回書込み領域と連続した領域への書込みであるか否かを判定するアクセス領域判定手順と、
前記アクセス領域判定手順で前回書込み領域とは連続しない領域への書込みであると判定された場合、バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するデータ転送手順と、
前記アクセス領域判定手順で前回書き込み領域と連続する領域への書込みであると判定された場合に前記記憶装置に割当てられた前記バッファメモリ部の空き領域を判定する空き領域判定手順と、
前記空き領域判定手順で前記バッファメモリ部に空き領域があると判定されたときに前記転送データを前記バッファメモリ部にバッファリングし、空き領域が無いと判定されたときに前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するテータ転送手順と、
を前記上位装置のコンピュータに実行させるためのデータ転送制御用のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、上位装置とＵＳＢ（Universal Serial Bus）接続可能なＤＶＤ（Digital Versatile Disc）ドライブ等のストレージ装置とがＵＳＢ転送路を介して接続され、上位装置とストレージ装置との間でＵＳＢデータ転送を行う、ＵＳＢストレージシステムおよびデータ転送制御用のプログラムに関する。
【背景技術】
【０００２】
ＵＳＢは、共通のコネクタで様々な周辺デバイスを接続可能なインタフェース規格であり、ＵＳＢ２．０は、ＵＳＢ１．ｘと互換性を維持しながら４００ＭＨｚのバス動作を実現することから、多くの外付けストレージ機器の標準インタフェースとして多用されるようになった。
【０００３】
ところで、前記したストレージ機器が上位装置（Ｗｉｎｄｏｗｓ（登録商標）を搭載したＰＣ等）に接続されるＵＳＢストレージシステムにおいて、通常、１回のＷＲＩＴＥコマンドで転送されるデータのサイズは、アプリケーションにも依存するが概ね６４Ｋバイトになっている。このため、例えば、５１２Ｋバイトのファイルをストレージ機器に書き込むためには、ＰＣからＷＲＩＴＥコマンドが８回発行され、その都度、一連のデータ転送動作、およびステイタス（ＡＣＫ、ＮＡＫ、ＮＹＥＴ等）応答が行われる。
このため、先読みキャッシュを用いて読み出し速度の改善をはかるとともに、上位デバイスドライバと物理デバイスドライバの中間に位置するフィルタドライバでデータ転送長を最大１ＭＢ（０ｘ１０００００）に拡大する処理を行い、１回のデータ転送のコマンドおよびステイタス応答にかかる時間を最大で１／１６に縮小する技術が知られている。
【０００４】
すなわち、書込みについては連続した領域への書込みデータをバッファリングし、それを纏めて書込むことによりシーケンシャルライト（連続領域への書込み）のパフォーマンスを向上させ、読込みについては先読みによりシーケンシャルリード（連続領域の読出し）のパフォーマンスを向上させている。
【０００５】
また、前記したように、データ転送長を拡大し、コマンド・ステイタス応答を纏めることでデータ転送処理にかかるオーバヘッドを削減する技術の他に、ＨＤＤ（Hard Disc Drive）等のストレージ機器にディスクキャッシュを内蔵し、ディスクキャッシュ内に先読みしたデータを一時保存し、ヒットした場合に比較的応答速度の遅いドライブから読み出すことなくディスクキャッシュに一時保存された連続領域の先読みしたデータを用いることでパフォーマンスの向上をはかる技術も知られている（例えば、特許文献１〜３参照）。
【特許文献１】特開平７−３３４４２６号公報（段落「００１５」〜「００１６」、図１）
【特許文献２】特開平７−７３１０７号公報（段落「００３７」〜「００３８」、図１）
【特許文献３】特開平７−１２１３０８号公報（段落「００２０」〜「００２９」、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、ＵＳＢでは、ＳＯＦ（Start Of Flame）と呼ばれるパケットをホストコントローラが１２５μ秒毎に発行し、その間にデータを転送する仕様になっている。通常のデータ転送ではＳＯＦからＳＯＦまでの間に８〜１０個のトランザクションを排出することができるようになっているが、コマンドやステイタスは、ＳＯＦからＳＯＦまでの間に、１個のトランザクションしが排出できない。このため、ストレージ機器の処理速度が遅く、ＮＡＫ応答の回数が多い場合、ＵＳＢバスを占有する期間が長い上、前記したステイタス処理はデータ転送とは無縁であることからＵＳＢバスの転送レートを低下させることになり、かなりのオーバヘッドが発生し、パフォーマンスに悪影響を及ぼしている。
【０００７】
このため、前記したフィルタドライバでコマンド・ステイタス応答を纏める処理を実行することにより、少なくとも削減されたコマンド・ステイタス応答にかかる時間分はパフォーマンスが向上する。しかしながら、連続領域へのアクセス（シーケンシャルアクセス）、不連続領域へのアクセス（ランダムアクセス）の区別なく前記した処理が実行されるため、ランダムアクセス時に不要なデータ転送処理（書込み時の不要なメモリコピー処理、読出し時の先読みによる不要なデータ転送）がオーバヘッドになり、この場合、逆にパフォーマンスに悪影響を与える。
【０００８】
本発明は前記した課題を解決するためになされたものであり、ランダムアクセス時のバッファリングおよび先読みによるオーバヘッドを極力回避し、システム全体としてのパフォーマンスの向上をはかった、ＵＳＢストレージシステムおよびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記した課題を解決するために本発明のＵＳＢストレージシステムは、上位装置と、前記上位装置とＵＳＢ接続可能なストレージ機器とがＵＳＢ転送路を介して接続され、前記上位装置と前記ストレージ機器との間でＵＳＢデータ転送を行うＵＳＢストレージシステムであって、前記ストレージ機器に対する転送データがバッファリングされるバッファメモリ部と、前記ＵＳＢデータ転送に先立ち、前記ストレージ機器に挿入された記憶媒体の種別に基づいて、その記憶媒体がバッファリングの対象であるか否かを判定するとともに、前記記憶媒体がバッファリングの対象であると判定された場合、前記上位装置から書込み指令を受信したとき、前記書込み指令が前記ストレージ機器の前回書込み領域と連続した領域への書込みであるか否かを判定するコマンド・ステイタス処理部と、前記コマンド・ステイタス処理部で前記記憶媒体がバッファリングの対象でないと判定された場合、前記転送データを前記ストレージ機器に転送し、前記コマンド・ステイタス処理部で前記書込み指令が前回書込み領域とは連続しない領域への書込みであると判定された場合、前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送し、前回書き込み領域と連続する領域への書込みであると判定された場合、前記バッファメモリ部の空き領域を判定し、空き領域があると判定されたときに前記転送データを前記バッファメモリ部にバッファリングし、空き領域が無いと判定されたときに前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するデータ転送制御部と、を備えたものである。
【００１０】
また、本発明のＵＳＢストレージシステムにおいて、前記コマンド・ステイタス処理部は、前記上位装置から発行される構成情報取得要求に対して前記ストレージ機器から応答される応答メッセージに含まれる特定のフィールドの値を参照して、前記ストレージ機器に挿入される記憶媒体の種別を判定し、前記記憶媒体の書き込み対象領域に対するトラックの情報を取得する要求への応答に含まれるトラック情報の特定のフィールドが示す値を参照して、前記記憶媒体がバッファリングの対象であるか否かを判定してもよい。
【００１１】
また、本発明のＵＳＢストレージシステムにおいて、前記コマンド・ステイタス処理部は、前記書込み指令に付属の書込み先アドレスを参照することにより、前記書込み指令が、前記ストレージ機器の前回書き込み領域に連続した領域への書き込みであるか否かを判定してもよい。
【００１２】
上記した課題を解決するために本発明のプログラムは、上位装置と、前記上位装置とＵＳＢ接続可能なストレージ機器とがＵＳＢ転送路を介して接続され、前記上位装置とストレージ機器との間でＵＳＢデータ転送を行うＵＳＢストレージシステムに用いられるデータ転送制御用のプログラムであって、前記ＵＳＢデータ転送に先立ち、前記ストレージ機器に挿入された記憶媒体の種別に基づいて、その記憶媒体がバッファリングの対象であるか否かを判定するバッファリング対象判定手順と、前記バッファリング対象判定手順で前記記憶媒体がバッファリングの対象でないと判定された場合、転送データを前記ストレージ機器に転送する手順と、前記バッファリング対象判定手順で前記記憶媒体がバッファリングの対象であると判定された場合、前記上位装置から書込み指令が発行されると、前記書込み指令が前記ストレージ機器の前回書込み領域と連続した領域への書込みであるか否かを判定するアクセス領域判定手順と、前記アクセス領域判定手順で前回書込み領域とは連続しない領域への書込みであると判定された場合、バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するデータ転送手順と、前記アクセス領域判定手順で前回書き込み領域と連続する領域への書込みであると判定された場合に前記記憶装置に割当てられた前記バッファメモリ部の空き領域を判定する空き領域判定手順と、前記空き領域判定手順で前記バッファメモリ部に空き領域があると判定されたときに前記転送データを前記バッファメモリ部にバッファリングし、空き領域が無いと判定されたときに前記バッファメモリ部にバッファリングされた転送データを前記ストレージ機器へ転送するテータ転送手順と、を前記上位装置のコンピュータに実行させるものである。
【発明の効果】
【００１３】
本発明のＵＳＢストレージシステムおよびデータ転送制御用のプログラムによれば、ランダムアクセス時のバッファリングおよび先読みによるオーバヘッドを極力回避し、システム全体としてのパフォーマンスの向上がはかれる。
【発明を実施するための最良の形態】
【００１４】
図１は、本発明の実施の形態に係るＵＳＢストレージシステムのシステム構成の一例を示すブロック図である。
【００１５】
図１に示されるように、本発明の実施の形態に係るＵＳＢストレージシステムは、ＰＣ等の上位装置１と、ストレージ機器２とがＵＳＢケーブル３（ＵＳＢ転送路）を介して接続される。ストレージ機器２として、ここでは、ＤＶＤドライブ２４が例示されている。
【００１６】
上位装置１は、ＣＰＵ（Central Processing Unit）１０が、主記憶装置１１に格納されたプログラムに基づきシステムバス１３を介して接続される不図示の周辺制御デバイスを制御する。また、ＣＰＵ１０は、システムバス１３に更に不図示のバスブリッジを介して接続されるＰＣＩ（Peripheral Components Interconnect）バス１４に接続されたＵＳＢホストコントローラ１２等の周辺制御デバイスもコントロールする。
ここで、ＵＳＢホストコントローラ１２は、ＥＨＣＩ（Enhanced Host Controller Interface）の仕様に準拠したものとし、不図示のＵＳＢポートに接続されるストレージ機器２との間で上位装置１との通信を制御する。なお、主記憶装置１１には、ＯＳ（Operating System）、アプリケーションプログラムの他に、デバイスドライバとして後記するフローチャートにその処理手順が示されるフィルタドライバがあらかじめインストールされてあるものとする。
【００１７】
ストレージ機器２は、ＵＳＢ−ＡＴＡＰＩ変換部２０を制御中枢とし、ＵＳＢインタフェース２１によりＵＳＢケーブル３を経由して上位装置１に接続され、かつ、ＡＴＡＰＩ（AT Attachment Packet Interface）バス２２、ＡＴＡＰＩインタフェース２３経由で接続されるＤＶＤドライブ２４を含む。
ＤＶＤドライブ２４と上位装置１との間の通信は、ＵＳＢ−ＡＴＡＰＩ変換部２０を介して行われる。すなわち、ＵＳＢ−ＡＴＡＰＩ変換部２０は、ＡＴＡＰＩインタフェース２３を介して取得される情報（ＤＶＤ読出しデータ）をＵＳＢプロトコルに則した情報に変換し、ＵＳＢインタフェース２１、ＵＳＢケーブル３を介して上位装置１に転送し、ＵＳＢケーブル３、ＵＳＢインタフェース２１経由で到来する上位装置１からの情報（書込みデータ）をＡＴＡＰＩプロトコルに則した情報に変換し、ＡＴＡＰＩインタフェース２３を介してＤＶＤドライブ２４に転送する。なお、ＵＳＢ−ＡＴＡＰＩ変換部２０には、ストレージ機器２のパフォーマンスの悪さを吸収するためにキャッシュが内蔵されてもよい
そして、メディア２５は、記憶媒体であり、例えば、ＤＶＤ−Ｒなどである。
【００１８】
図２は、本発明の実施の形態に係るプログラムを上位装置１の主記憶装置１１上に展開して示した機能ブロック図である（適宜図１参照）。
ここでは、ファイルシステム等の上位デバイスドライバとホストコントローラドライバとの中間に位置する中間デバイスドライバ（フィルタドライバ）のうち、本発明と関係する機能ブロックのみ抽出して示してある。
【００１９】
図２に示されるように、フィルタドライバは、バッファメモリ部１１０と、コマンド・ステイタス処理部１１１と、データ転送制御部１１２と、バッファリング非対象メディアフラグ１１３と、バッファリング無効フラグ１１４とにより構成される。
【００２０】
バッファメモリ部１１０は、主記憶装置１１の所定の領域に確保されたデータ領域であり、ここに上位装置１により生成される転送データが一時保持（バッファリング）される。コマンド・ステイタス処理部１１１は、上位装置１により発行されるコマンドを解読し、また、ストレージ機器２から転送されるステイタス応答を受信してコマンド処理を行う機能を有する。コマンド・ステイタス処理部１１１はまた、
上位装置１から書込み指令を受信した場合、その書込み指令が、ストレージ機器２の前回書込み領域と連続した領域への書込みであるか否かを判定してデータ転送制御部１１３によるデータ転送処理を制御する機能も有する。
【００２１】
データ転送制御部１１２は、コマンド・ステイタス処理部１１１で書込み指令が前回書込み領域とは連続しない領域への書込みであると判定された場合、バッファメモリ部１１０に書込まれた転送データをストレージ機器２へ転送する機能を有する。データ転送制御部１１２は、コマンド・ステイタス処理部１１１で書込み指令が前回書き込み領域と連続する領域への書込みであると判定された場合、更に、バッファメモリ部１１０の空き領域を判定し、空き領域があると判定されたときに転送データをバッファメモリ部１１０に書込み、空き領域が無いと判定されたときにバッファメモリ部１１０に書込まれた転送データをストレージ機器２へ転送する機能を有する。
【００２２】
なお、バッファリング非対象メディアフラグ１１３と、バッファリング無効フラグ１１４は、バッファメモリ部１１０同様、主記憶装置１１の所定の領域に割当てられ、フィルタドライバが処理の対象とするＤＶＤドライブ２４にメディア２５が挿入されているか否か、そのメディア２５がバッファリングの対象か否か、についてのそれぞれフラグを格納する。
これらフラグ１１３、１１４は、コマンド・ステイタス処理部１１１により参照され、更新される。
【００２３】
図３、図４は、本発明の実施の形態に係るＵＳＢストレージシステムの動作を示すフローチャートであり、それぞれ、ＯＳ（Operating System）やアプリケーションプログラムによるメディアチェック処理手順（図３）、フィルタドライバによるライトコマンド処理手順（図４）を示す。
【００２４】
以下、図３、図４のフローチャートを参照しながら、図１に示す本発明の実施の形態に係るＵＳＢストレージシステムの動作について詳細に説明する（適宜図２参照）。
【００２５】
まず、図３のフローチャートから説明する。ＯＳ、あるいはメディア２５に対してリードライトを行いたいアプリケーションプログラムは、最初にそのための準備処理（メディアチェック処理）を行う。すなわち、メディア２５のＤＶＤドライブ２４への挿入を監視し、挿入が検知されたらメディア２５の種類やトラックの状態等を判定するのがメディアチェック処理である。
【００２６】
具体的に、コマンド・ステイタス処理部１１１は、まず、主記憶装置１１の所定の領域に割当てられ記憶されるバッファリング非対象メディアフラグ１１３、およびバッファリング無効フラグ１１４をリセットする（ステップＳ３０１）。
また、コマンド・ステイタス処理部１１１は、常にコマンド監視を行っており（ステップＳ３０２）、メディア挿入確認コマンドの到来を待って（ステップＳ３０３“Ｙｅｓ”）、ＤＶＤドライブ２４にメディア２５（ＤＶＤ−Ｒ）が挿入されたか否かを判定する（ステップＳ３０４）。ここで、メディア２５が挿入されたことを検知すると、次のコマンド監視（ステップＳ３０５）のタイミングにおいて、更に、メディアタイプ識別コマンドの到来を待つ（ステップＳ３０６）。
なお、メディア挿入確認コマンドが到来していない場合（ステップＳ３０３“Ｎｏ”）およびメディア２５が挿入されていない場合（ステップＳ３０４“Ｎｏ”）には、ステップＳ３０２の処理に戻って、コマンド監視を続ける。
【００２７】
コマンド・ステイタス処理部１１１は、メディアタイプ識別コマンドを受信すると（ステップＳ３０６“Ｙｅｓ”）、次に、ＤＶＤドライブ２４に挿入されたメディア２５がバッファリング対象メディアか否かを判定する（ステップＳ３０７）。一方、メディアタイプ識別コマンドを受信していない場合（ステップＳ３０６“Ｎｏ”）には、ステップＳ３０５の処理に戻って、コマンド監視を続ける。
ステップＳ３０６からステップＳ３０７の流れにおいて、具体的には、ＤＶＤドライブ２４は、フィルタドライバから発行される「GET CONFIGURATION」コマンドに対する応答として、「FEATURE HEADER」と、「FEATURE DISCRIPTER」を返送する。コマンド・スタイテス処理部１１１は、この「FEATURE HEADER」の「Current Profile」フィールドの値をチェックすることにより、ＤＶＤドライブ２４に現在挿入されているメディア２５の種類を判別することができる。
【００２８】
ここで、フィルタドライバが処理の対象とするＤＶＤドライブ２４にメディア２５が挿入されていなかった場合（ステップＳ３０７“Ｎｏ”）、コマンド・スタイテス処理部１１１は、バッファリング非対象フラグ１１３をセットし（ステップＳ３０９）、一方、フィルタドライバが処理の対象とするＤＶＤドライブ２４にメディア２５が挿入されていた場合（ステップＳ３０７“Ｙｅｓ”）、コマンド・スタイテス処理部１１１は、次のコマンド監視（ステップＳ３０８）のタイミングにおいて、トラック情報取得コマンドの到来を待つ（ステップＳ３１０）。
【００２９】
コマンド・スタイテス処理部１１１は、トラック情報取得コマンドを受信した場合（ステップＳ３１０“Ｙｅｓ”）には、メディア２５の書き込み対象領域のトラックの情報を参照することにより、前回書き込み領域に連続したアクセスであるか否か、所謂、シーケンシャルアクセストラックか否かを判定する（ステップＳ３１１）。一方、トラック情報取得コマンドを受信していない場合（ステップＳ３１０“Ｎｏ”）には、ステップＳ３０８の処理に戻って、コマンド監視を続ける。
ステップＳ３１０からステップＳ３１１への流れにおいて、具体的には、書込み対象トラックの情報を取得するために発行されるトラック情報取得コマンド「READ TRACK INFORMATION」に対し、ＤＶＤドライブ２４は、「Track Information」を返送する。
【００３０】
コマンド・ステイタス処理部１１１は、この「Track Information」内の「Blank」フィールドと、「Packet/Inc」フィールドの値をチェックすることによりランダムアクセスが発生するメディアか否かを判定することができる。具体例で示すと、「Blank」が“１”の場合にはシーケンシャルアクセス、「Blank」が“０”で「Packet/Inc」が“０”の場合にはシーケンシャルアクセス、「Blank」が“０”で「Packet/Inc」が“１”の場合にはランダムアクセス、と判定することができる。
コマンド・ステイタス処理部１１１が、不連続なランダム領域に対するアクセスであると判定した場合（ステップＳ３１１“Ｎｏ”）には、バッファリング無効フラグ１１４をセットして（ステップＳ３１２）、本メディアチェック処理を終了する。また、ステップＳ３１１の処理においてシーケンシャルアクセストラックである場合（ステップＳ３１１“Ｙｅｓ”）には、本メディアチェック処理を終了する。
【００３１】
前記した一連の処理によれば、上位装置１から発行される構成情報取得要求（「GET CONFIGURATION」）に対して、ストレージ機器から応答される応答メッセージ（「FEATURE HEADER」）に含まれる特定のフィールド（「Current Profile」）の値を参照して、ストレージ機器２（ＤＶＤドライブ２４）に挿入される記憶媒体（メディア２５）の種別を判定する。そして、記憶媒体の書き込み対象領域のトラックの情報を取得する要求（「READ TRACK INFORMATION」）に対する応答に含まれるトラック情報（「Track Information」）の特定のフィールド（「Blank」および「Packet/Inc」）が示す値を参照して、バッファリングの対象であるか否かを事前に判定する。このことにより、以降発生するアクセスがシーケンシャルアクセスかランダムアクセスかを事前に知り、ランダムアクセスが発生すると考えられるメディア２５に対しては、オーバヘッドの要因である無駄なバッファリング、あるいは先読みを行なわないように制御することが可能になる。
【００３２】
なお、前記したコマンド仕様は、ＡＮＳＩ（American National Standards Institute）の業界団体であるＩＮＣＩＴＳ／Ｔ１０（International Committee for Information Technology Standard）のワーキングドラフト「Multi Media Command Set 5(MMC-5)」（http://www.t10.org/ftp/t10/drafts/mmc5/mmc5r04.pdf）により公開されている。
【００３３】
次に、前記したメディアチェック処理を経て上位装置１（アプリケーションプログラム）からＷＲＩＴＥコマンドを受信した場合の動作について図４のフローチャートを参照しながら説明する。
なお、
動作説明に先立ち、図４に示すフローチャートには図示していないが、フィルタドライバは、ＯＳの管理下で主記憶装置１１の所定の領域に、所定の転送単位分のデータが蓄積される、例えば、１Ｍバイト容量のバッファメモリ部１１０のデータ領域を事前に確保してあるものとする。
【００３４】
まず、コマンド・ステイタス処理部１１１は、アプリケーションプログラムからＷＲＩＴＥコマンド受信時に、その転送データをバッファメモリ部１１０に書き込む前に、ストレージ機器２（ＤＶＤドライブ２４）に装填されたメディア２５（ＤＶＤ−Ｒ）がバッファリング対象メディア（記憶媒体）であるか否かを、前記したバッファリング非対象メディアフラグ１１３およびバッファリング無効フラグ１１４を参照することにより判定する（ステップＳ４０１）。
ここで、バッファリング非対象メディアフラグ１１３とバッファリング無効フラグ１１４とのいずれかがＯＮとなっておりバッファリング対象メディアでないと判定された場合（ステップＳ４０１“Ｎｏ”）には、その転送データを下位のホストコントローラドライバにそのまま転送して処理を委ねる（ステップＳ４０２）。そして、本ＷＲＩＴＥコマンド処理を終了する。
一方、バッファリング非対象メディアフラグ１１３およびバッファリング無効フラグ１１４がともにＯＦＦになっており、バッファリング対象メディアであると判定された場合（ステップＳ４０１“Ｙｅｓ”）、コマンド・ステイタス処理部１１１は、受信したＷＲＩＴＥコマンドに添付されたパラメータの書込み先アドレスを参照し、そのアドレスが、現在バッファメモリ部１１０にバッファリングされているデータの書込み先アドレス領域の直後のアドレスであるか否か（すなわち、メディア２５の前回書き込み領域に連続した領域への書き込みであるか）、もしくは初回の書込みであるか否か（すなわち、バッファメモリ部１１０が空か）を判定する（ステップＳ４０３）。
【００３５】
ここで、コマンド・ステイタス処理部１１１が、書込み先アドレスが連続した領域への書き込みでない、もしくは初回書込みでないと判定した場合（ステップＳ４０３“Ｎｏ”）には、データ転送制御部１１２に制御が移り、このときデータ転送制御部１１２は、バッファメモリ部１１０に書込まれた転送データをストレージ機器２（ＤＶＤドライブ２４）に転送するバッファフラッシュ処理を行う（ステップＳ４０５）。そして、ステップＳ４０１の処理へ戻る。一方、コマンド・ステイタス処理部１１１で連続した領域への書き込みである、もしくは初回書込みであると判定された場合（ステップＳ４０３“Ｙｅｓ”）、データ転送制御部１１２は、バッファメモリ部１１０にその転送データを書込むべき十分な空き領域があるか否かを判定する（ステップＳ４０４）。
【００３６】
ここで、バッファメモリ部１１０に十分な空き領域ありと判定されたとき（ステップＳ４０４“Ｙｅｓ”）、データ転送制御部１１２は、その転送データをバッファメモリ部１１０に書き込むべくコピーする。また、バッファメモリ部１１０に空き領域がない状態と判定された場合（ステップＳ４０４“Ｎｏ”）、データ転送制御部１１２は、バッファメモリ部１１０に書込まれた転送データをストレージ機器２（ＤＶＤドライブ２４）に転送するバッファフラッシュ処理を行う（ステップＳ４０５）。そして、ステップＳ４０１の処理へ戻る。
【００３７】
以上説明したように本発明の実施の形態に係るＵＳＢストレージシステムによれば、ランダムアクセスが発生すると考えられるメディア２５に対し、バッファリング、あるいは先読みを行なわないように制御することで、不要なメモリコピーやデータ転送が回避され、したがってシステム全体としてのパフォーマンスが向上する。このとき、上位装置１やストレージ機器２のハードウェアに手を加えることは特に必要がない。
なお、シーケンシャルアクセス時には、書込み時、連続した領域への転送データをバッファリングし、纏めてストレージ機器２へ転送することによりパフォーマンスが向上し、また、読込みについては先読みによりパフォーマンスが向上することはいうまでもない。
【００３８】
なお、本発明の実施の形態に係るプログラム（上位装置１の主記憶装置１１にインストールされＣＰＵ１０により実行されるフィルタドライバ）は、例えば、図１に示す、上位装置１とストレージ機器２とがＵＳＢ転送路（ＵＳＢケーブル３）を介して接続され、前記上位装置１とストレージ機器２との間でデータ転送を行うＵＳＢストレージシステムにおける、上位装置１のコンピュータ（ＣＰＵ１０）において実行されるものである。そして、そのプログラムは、図３のフローチャートにおいて、前記データ転送に先立ち、前記ストレージ機器２に挿入される記憶媒体（メディア２５）がバッファリングの対象であるか否かを判定するバッファリング対象判定処理を行う（ステップＳ３０１〜Ｓ３１２）。続いて、前記バッファリング判定処理で記憶媒体がバッファリングの対象であると判定された場合、上位装置１から書込み指令が発行されると、図４のフローチャートに示されるように、前記書込み指令がストレージ機器２の前回書込み領域と連続した領域への書込みであるか否かを判定するアクセス領域判定処理（ステップＳ４０３）を実行する。また、前記アクセス領域判定処理（ステップＳ４０３）において、前回書込み領域とは連続しない領域への書込みであると判定された場合（ステップＳ４０３“Ｎｏ”）には、前記バッファに書込まれた転送データを前記ストレージ機器２へ転送するバッファフラッシュ処理（ステップＳ４０５）を実行する。一方、アクセス領域判定処理（ステップＳ４０３）において、前回書き込み領域と連続する領域への書込みであると判定された場合には、バッファメモリ部１１０に割当てられたバッファの空き領域を判定する空き領域判定処理（ステップＳ４０４）を実行する。そして、空き領域判定処理（ステップＳ４０４）において、前記バッファに空き領域があると判定されたとき（ステップＳ４０４“Ｙｅｓ”）には、前記転送データを前記バッファに書込み（ステップＳ４０６）、空き領域が無いと判定されたとき（ステップＳ４０４“Ｎｏ”）には、前記バッファに書込まれた転送データをストレージ機器２へ転送するバッファフラッシュ処理（ステップＳ４０５）を実行する。
【００３９】
また、前記した本発明の実施の形態に係るプログラム（上位装置１の主記憶装置１１にインストールされＣＰＵ１０により実行されるフィルタドライバ）は、上位装置１において実行されるアプリケーションプログラムによって発行される書き込み指令が、連続した領域への書き込みであると判定された場合に、バッファメモリ部１１０にその転送データを書込むべき空き領域があるか否かを判定する（ステップＳ４０４）。そして、空き領域が無いと判定されたとき（ステップＳ４０４“Ｎｏ”）にバッファフラッシュ制御を行う（ステップＳ４０５）。
また、前記した本発明の実施の形態に係るプログラム（上位装置１の主記憶装置１１にインストールされＣＰＵ１０により実行されるフィルタドライバ）は、フィルタドライブにおいて、上位装置１において実行されるアプリケーションプログラムによって発行される書き込み指令が、連続した領域への書き込みでないと判定された場合（ステップＳ４０３“Ｎｏ”）には、即座にバッファフラッシュ制御を行う（ステップＳ４０５）。
【００４０】
以上説明したように本発明の実施の形態に係るプログラムによれば、ランダムアクセスが発生すると考えられるメディア２５に対し、バッファリング、あるいは先読みを行なわないように制御することで、不要なメモリコピーやデータ転送が回避され、したがってシステム全体としてのパフォーマンスが向上する。このとき、上位装置１やストレージ機器２のハードウェアに手を加えることは特に必要がない。
なお、シーケンシャルアクセス時には、書込み時、連続した領域への書込みをバッファリングし、纏めてストレージ機器２へ転送することによりパフォーマンスが向上し、読込みについては先読みによりパフォーマンスが向上することはいうまでもない。
【００４１】
なお、前記した本発明の実施の形態に係るＵＳＢストレージシステムにおいて、ストレージ機器２としてＤＶＤドライブ２４のみ例示したが、他に、ＨＤＤ（Hard Disk Drive）、ＦＤ（Flexible Disc Drive）、フラッシュメモリ等のＵＳＢストレージ機器であれば代替が可能である。
また、図２に示すフィルタドライバが有する各構成ブロックの機能は、全てをソフトウェアによって実現しても、あるいはその少なくとも一部をハードウェアで実現してもよい。例えば、コマンド・ステイタス処理部１１１、連続領域アクセス判定部１１２、データ転送制御部１１３におけるデータ処理は、１または複数のプログラムによりコンピュータ上で実現してもよく、また、その少なくとも一部をハードウェアで実現してもよい。
【図面の簡単な説明】
【００４２】
【図１】本発明の実施の形態に係るＵＳＢストレージシステムのシステム構成の一例を示すブロック図である。
【図２】本発明の実施の形態に係るプログラムを上位装置の主記憶装置上に展開して示した機能ブロック図である。
【図３】本発明の実施の形態に係るＵＳＢストレージシステムの動作（メディアチェック処理）を示すフローチャートである。
【図４】本発明の実施の形態に係るＵＳＢストレージシステムの動作（ＷＲＩＲＥコマンド処理）を示すフローチャートである。
【符号の説明】
【００４３】
１    上位装置
２    ストレージ機器
３    ＵＳＢケーブル（ＵＳＢ転送路）
１０  ＣＰＵ
１１  主記憶装置
１２  ＵＳＢホストコントローラ
１３  システムバス
１４  ＰＣＩバス
２０  ＵＳＢ−ＡＴＡＰＩ変換部
２１  ＵＳＢインタフェース
２２  ＡＴＡＰＩバス
２３  ＡＴＡＰＩインタフェース
２４  ＤＶＤドライブ
２５  メディア（ＤＶＤ−Ｒ）
１１０  バッファメモリ部
１１１  コマンド・ステイタス処理部
１１２  データ転送制御部
１１３  バッファリング非対象メディアフラグ
１１４  バッファリング無効フラグ
【図１】
0005291311.tif 000002
【図２】
0005291311.tif 000003
【図３】
0005291311.tif 000004
【図４】
0005291311.tif 000005