(57)【特許請求の範囲】
【請求項１】
コマンド転送、データ出力およびステータス転送の３つのアクセスで制御されるデバイスがローカル接続されたデバイスサーバと、該デバイスサーバをドライブするドライバ部とデータ制御部が搭載されたクライアントが、ネットワークを介して接続されたデバイスサーバシステムであって、
１）前記デバイスサーバは、
データバッファ部と、
前記クライアントの前記ドライバ部から、コマンド転送要求、データ出力およびステータス転送要求を受信し、前記デバイスに対して、コマンド転送、データ出力およびステータス転送を行う受信部と、
前記デバイスから、コマンド転送応答、データ出力応答およびステータス転送応答を受信し、前記クライアントの前記ドライバ部に対して、コマンド転送要求応答、データ出力応答およびステータス転送要求応答を送信する送信部と、
を備え、
前記送信部が、前記デバイスから前記コマンド転送応答を受信した後に、前記受信部が、前記デバイスに対して前記データ出力を行い、前記送信部が、前記デバイスから前記データ出力応答を受信した後に、前記受信部が、前記デバイスに対して前記ステータス転送を行い、
２）前記クライアントは、
前記データ制御部から前記ドライバ部に対して前記コマンド転送要求が出されると、前記コマンド転送が完了する前に、前記ドライバ部は、前記コマンド転送要求応答として疑似コマンド転送要求応答を前記データ制御部に返し、
前記ドライバ部が、前記デバイスサーバの前記送信部から前記コマンド転送要求応答を受信したときは、前記コマンド転送要求応答を破棄して前記データ制御部に送信せず、
前記データ制御部から前記ドライバ部に対して前記データ出力がなされると、前記データ出力が完了する前に、前記ドライバ部は、前記データ出力応答として疑似データ出力応答を前記データ制御部に返し、
前記ドライバ部が、前記デバイスサーバの前記送信部から前記データ出力応答を受信したときは、前記データ出力応答を破棄して前記データ制御部に送信せず、
前記データ制御部から前記ドライバ部に対して前記ステータス転送要求が出されると、前記ドライバ部は、前記デバイスサーバの前記送信部から前記ステータス転送要求応答を待ち、
前記クライアントにおいては、コマンド転送、データ出力およびステータス転送の内、前記ドライバ部で前記コマンド転送要求応答及び前記データ出力応答を擬制し、前記デバイスサーバにおいては、前記クライアントからのコマンド転送、データ出力、ステータス転送の一連の要求を、正しい順序で前記デバイスに要求することを特徴とするデバイスサーバシステム。
【請求項２】
コマンド転送、データ入力およびステータス転送の３つのアクセスで制御されるデバイスがローカル接続されたデバイスサーバと、該デバイスサーバをドライブするドライバ部とデータ制御部が搭載されたクライアントが、ネットワークを介して接続されたデバイスサーバシステムであって、
１）前記デバイスサーバは、
データバッファ部と、
前記クライアントの前記ドライバ部から、コマンド転送要求、データ入力要求およびステータス転送要求を受信し、前記デバイスに対して、コマンド転送、データ入力要求およびステータス転送を行う受信部と、
前記デバイスから、コマンド転送応答、データ入力応答およびステータス転送応答を受信し、前記クライアントの前記ドライバ部に対して、コマンド転送要求応答、データ入力要求応答およびステータス転送要求応答を送信する送信部と、
を備え、
前記受信部は、前記データ入力要求に対応するデータブロックが、前記データバッファ部に記憶されていない場合、前記データ入力要求に対応するデータブロックに後続するＮ個（Ｎは自然数）の次データブロックを併せて前記デバイスに対してデータ入力要求を行い、該データ入力要求に対応するＮ個の次データブロックを前記データバッファ部に記憶し、前記クライアントの前記ドライバ部から前記次データブロックに対応する前記データ入力要求を受信した場合に、前記データバッファ部に記憶された前記次データブロックを前記データ入力要求応答として、前記クライアントの前記ドライバ部に対して送信し、
２）前記クライアントは、
前記データ制御部から前記ドライバ部に対してコマンド転送要求が出されると、前記コマンド転送が完了する前に、前記ドライバ部は、前記コマンド転送要求応答として疑似コマンド転送要求応答を前記データ制御部に返し、
前記ドライバ部が、前記デバイスサーバの前記送信部から前記コマンド転送要求応答を受信したときは、前記コマンド転送要求応答を破棄して前記データ制御部に送信せず、
前記データ制御部から前記ドライバ部に対して前記データ入力要求が出されると、前記ドライバ部は、前記デバイスサーバの前記送信部から前記データ入力応答の受信を待ち、
前記データ制御部から前記ドライバ部に対して前記ステータス転送要求が出されると、前記デバイスサーバの前記送信部から前記ステータス転送要求応答の受信を待ち、
前記クライアントにおいては、コマンド転送、データ入力およびステータス転送の内、前記ドライバ部でコマンド転送応答を擬制し、前記デバイスサーバにおいては、前記クライアントからのコマンド転送、データ入力、ステータス転送の一連の要求を、正しい順序で前記デバイスに要求することを特徴とするデバイスサーバシステム。
【請求項３】
前記デバイスサーバにおいて、
前記受信部は、
前記クライアントの前記ドライバ部から前記ステータス転送要求を受信すると、前記デバイスからＮ番目の前記次データブロックに対応する前記データ入力応答を受信した後で、前記デバイスに対して前記ステータス転送を行う、
ことを特徴とする請求項２に記載のデバイスサーバシステム。
【請求項４】
前記デバイスは、ストレージデバイスであることを特徴とする請求項１〜３の何れかに記載のデバイスサーバシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントとデバイスとの間で、ネットワークを介してデータ入出力を行うデバイスサーバシステムに関するものである。
【背景技術】
【０００２】
近年、有線ＬＡＮ（Ｌｏｃａｌ Ａｒｅａ Ｎｅｔｗｏｒｋ）または無線ＬＡＮなどのＩＰネットワークはますます広がり、人々の生活のインフラとなっている。ネットワークＩ／Ｆ（インタフェース）の低価格化も進んでいる。
また、コンピュータにローカル接続されていた周辺機器は、ＩＰネットワークが周辺機器の制御データの送受信に十分耐えるほど高速化した現在において、コンピュータとＩＰネットワークを介して周辺機器の制御が可能になっている。
このような状況下、ＩＰネットワークを通じて、コンピュータの周辺機器であるＵＳＢ（Ｕｎｉｖｅｒｓａｌ Ｓｅｒｉａｌ Ｂｕｓ）デバイスを当該ネットワークに接続しているコンピュータから利用することのできるデバイスサーバシステムが知られている（特許文献１、非特許文献１を参照）。
【０００３】
デバイスサーバシステムでは、クライアントのＵＳＢデバイスドライバが発行した制御コマンド等のＵＳＢデータがＩＰパケットに変換され（カプセル化）、これがクライアントからデバイスサーバに向けて送信される。ＩＰパケットを受信したデバイスサーバは、受信したＩＰパケットに含まれる制御コマンド等のＵＳＢデータを取り出し（デカプセル化）、ＵＳＢ通信に変換してデバイスサーバ自身にローカル接続されているＵＳＢデバイスに転送する。
【０００４】
デバイスサーバとＵＳＢデバイスとの間における通信は、ＵＳＢ規格の通信に準じている。例えば、クライアントからＵＳＢデバイスへの送信の場合、クライアントからデバイスサーバを経由してＵＳＢデバイスにデータを送信するとともに、随時、ＵＳＢデバイスのステータスに関する応答をクライアントはデバイスサーバ経由で受信する。
【０００５】
ＵＳＢデバイスがストレージデバイスである場合、通常、コマンド転送、データ入力／出力およびステータス転送の３つのアクセスで制御されている。ここで、データ出力（データの書き込み）を行う場合、コマンド転送が完了するまでデータ出力は行われず、また、データ出力が完了するまでステータス転送は行われないため、システム全体としてデータ転送に時間がかかるという問題があった。
また、データ入力（データの読み込み）を行う場合、連続領域にアクセスすることが多いものの、ＵＳＢでは６４ＫＢ等の単位に細切れに転送されることから、システム全体としてデータ転送に時間がかかるという問題があった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２８７４５３号公報
【非特許文献】
【０００７】
【非特許文献１】サイレックス・テクノロジー株式会社ホームページ＜http://www.silex.jp/products/usbdeviceserver/sxds3000wan.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記状況に鑑みて、本発明は、データ入出力転送を行うデバイスがローカル接続されたデバイスサーバとクライアントとがネットワークで接続されたデバイスサーバシステムにおいて、クライアントとデバイスの間のデータ転送速度をシステム全体として向上するデバイスサーバシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成すべく、本発明のデバイスサーバシステムは、データ入出力転送を行うデバイスがローカル接続されたデバイスサーバと、該デバイスサーバをドライブするドライバ部とデータ制御部が搭載されたクライアントが、ネットワークを介して接続されたデバイスサーバシステムであって、以下の構成を有する。
１）デバイスサーバは、データバッファ部と受信部と送信部を備える。
受信部は、クライアントのドライバ部から、コマンド転送要求、データ出力およびステータス転送要求を受信する。そして、デバイスに対して、コマンド転送、データ出力およびステータス転送を行う。
送信部は、デバイスから、コマンド転送応答、データ出力応答およびステータス転送応答を受信する。そして、クライアントのドライバ部に対して、コマンド転送要求応答、データ出力応答およびステータス転送要求応答を送信する。
２）クライアントは、少なくともドライバ部とデータ制御部を備える。
データ制御部からドライバ部に対してコマンド転送要求が出されると、コマンド転送が完了する前に、ドライバ部は、コマンド転送要求応答として疑似コマンド転送要求応答をデータ制御部に返す。
また、データ制御部からドライバ部に対してデータ出力されると、データ出力が完了する前に、ドライバ部は、データ出力応答として疑似データ出力応答をデータ制御部に返す。
【００１０】
デバイスにデータ出力を行う場合、従来であれば、コマンド転送、データ出力、ステータス転送の各アクセスについて、デバイスサーバからの応答を待って次のアクセスを開始していた。これに対して、本発明のデバイスサーバシステムでは、コマンド転送およびデータ出力に関する応答をクライアントのドライバ部で擬制し、従来とは異なり応答を先回りして受け取るため、システム全体としてデータ転送速度の向上を図ることができる。
【００１１】
ここで、クライアントとは、パーソナルコンピュータ（ＰＣ）などの一般的なコンピュータ端末を意味し、ネットワークに接続され、デバイスサーバにローカル接続されたデバイスに対してデータの入出力転送を行う装置である。またデバイスとは、デバイスサーバにローカル接続され、ＵＳＢ通信規格などのデータ通信方式によって、デバイスサーバとデータ通信できる装置である。
【００１２】
本発明のデバイスサーバシステムを構成するデバイスサーバにおいて、送信部がデバイスからコマンド転送応答を受信した後に、受信部がデバイスに対してデータ出力を行い、送信部がデバイスからデータ出力応答を受信した後に、受信部がデバイスに対してステータス転送を行うことが好ましい。
これにより、デバイスサーバは、クライアントからのコマンド転送、データ出力、ステータス転送の一連の要求を、正しい順序でデバイスに要求することができるため、デバイス側で要求に対する処理が正常に行われる。すなわち、一連の要求が正しい順序で行われないことによるデバイスの挙動破綻を防ぐことができる。
【００１３】
また、本発明のデバイスサーバシステムは、データ入出力転送を行うデバイスがローカル接続されたデバイスサーバと、該デバイスサーバをドライブするドライバ部とデータ制御部が搭載されたクライアントが、ネットワークを介して接続されたデバイスサーバシステムであって、デバイスサーバが以下の構成を有する。
デバイスサーバは、データバッファ部と受信部と送信部を備える。
受信部は、クライアントのドライバ部から、コマンド転送要求、データ入力要求およびステータス転送要求を受信する。そして、デバイスに対して、コマンド転送、データ入力要求およびステータス転送を行う。
送信部は、デバイスから、コマンド転送応答、データ入力応答およびステータス転送応答を受信する。そして、クライアントのドライバ部に対して、コマンド転送要求応答、データ入力要求応答およびステータス転送要求応答を送信する。
ここで、受信部は、データ入力要求に対応するデータブロックが、データバッファ部に記憶されていない場合、データ入力要求に対応するデータブロックに後続するＮ個（Ｎは自然数）の次データブロックを併せてデバイスに対してデータ入力要求を行い、データ入力要求に対応するＮ個の次データブロックをデータバッファ部に記憶する。そして、クライアントのドライバ部から次データブロックに対応するデータ入力要求を受信した場合に、データバッファ部に記憶された次データブロックをデータ入力要求応答として、クライアントのドライバ部に対して送信する。
【００１４】
上述の如く、データ入力（データの読み込み）を行う場合、連続領域にアクセスすることが多いものの、ＵＳＢ通信では所定のデータブロック単位に細切れに転送されるため、システム全体としてデータ入力速度が遅いという問題があった。本発明のデバイスサーバシステムでは、デバイスサーバ側で、デバイスに対するコマンド内容を解釈して、デバイスには大容量のアクセスを指示して先読みしてデータ入力要求し、クライアントに対しては、先読みした入力データを応答することで、システム全体としてデータ入力速度を向上させることができる。すなわち、デバイスサーバ側で、クライアントから要求されたデータブロックよりも多くのデータブロックを先読みし、先読みしたデータブロックをデバイスサーバ側でキャッシュすることにより、データ入力のデータ転送速度の向上を図る。
【００１５】
なお、デバイスサーバ側で、１つ目のデータブロックのデータ入力応答は、クライアントからのデータ入力要求への応答として従来どおり送信し、残りのデータブロックはデバイスサーバ内部でキャッシュすることになる。つまり、データ入力要求に対応するデータブロックが、データバッファ部に記憶されている場合には、記憶されたデータブロックをデータ入力応答として、クライアントのドライバ部に対して送信し、記憶されていない場合には、次のデータブロックを併せてデバイスに対してデータ入力を行い、入力したＮ個の次データブロックをデータバッファ部に記憶する。これにより、複数のデータの先読みを繰り返し行うことが可能となる。
【００１６】
具体的には、データ入力（読み込み）コマンドが連続して発生した場合、デバイスサーバは、データ入力コマンド内のアドレスとＬｅｎｇｔｈのパラメータを参照し、応答可能なキャッシュ済みデータがデータバッファ部に存在していれば、デバイスに対してコマンド転送、データ入力要求およびステータス転送を行うことなく、クライアントに対してコマンド転送要求応答、データ入力要求応答およびステータス転送要求応答を送信する。
【００１７】
また、デバイスサーバとデバイスの間のデータ入力のアクセス途中でエラー発生した場合、取得できなかった分はキャッシュしなくてもよい。１つ目のデータブロックの応答自体が正常に行えるならば、１つ目の応答自体は正常に処理する。
なお、データ入力（読み込み）コマンド以外のコマンド転送要求が発生した場合、デバイスサーバ内部のキャッシュを破棄した上で、従来の処理を継続する。
【００１８】
本発明のデバイスサーバシステムにおいて、クライアントは、データ制御部からドライバ部に対してコマンド転送要求が出されると、コマンド転送が完了する前に、ドライバ部は、コマンド転送要求応答として疑似コマンド転送要求応答をデータ制御部に返すことが好ましい。
これにより、コマンド転送に関する応答をクライアント内で擬制し、先回りして受け取ることができるため、システム全体としてデータ転送速度の向上が図られる。
【００１９】
なお、本発明のデバイスサーバシステムを構成するデバイスサーバにおいて、送信部は、デバイスからデータ入力応答を受信すると、クライアントのドライバ部に対してデータ入力応答をすぐに送信することが好ましい。
先読みするデータブロック全ての応答が正常に行われた後ではなく、１つ目のデータブロックの応答自体が正常に行えた時点で、クライアントに対してデータ入力応答を返すことにより、ステータス転送要求を早めに受け取ることができるため、システム全体としてデータ転送速度の向上が図られる。
【００２０】
本発明のデバイスサーバシステムを構成するデバイスサーバにおいて、受信部は、クライアントのドライバ部からステータス転送要求を受信すると、デバイスからＮ番目の次データブロックに対応するデータ入力応答を受信した後で、デバイスに対してステータス転送を行うことが好ましい。
受信部がデバイスからＮ番目の次データブロックに対応するデータ入力応答を受信した後で、ステータス転送を行うことにより、ストレージデバイスの挙動が破綻することを防ぐことができる。
【００２１】
本発明のデバイスサーバシステムにおいて、デバイスは、ストレージデバイスであることが好ましい。ストレージデバイスとは、データを格納できるデバイスのことをいい、ハードディスクドライブやソリッドステートドライブ等を指す。
【発明の効果】
【００２２】
本発明によれば、データ入出力転送を行うデバイスがローカル接続されたデバイスサーバとクライアントとがネットワークで接続されたデバイスサーバシステムにおいて、クライアントとデバイスの間のデータ転送速度をシステム全体として向上させることができる。
【図面の簡単な説明】
【００２３】
【図１】デバイスサーバシステムの機能ブロック図
【図２】デバイスサーバシステムの概念図
【図３】実施例１のデバイスサーバシステムのデータフロー図
【図４】実施例２のデバイスサーバシステムのデータフロー図１
【図５】実施例２のデバイスサーバシステムのデータフロー図２
【図６】実施例３のデバイスサーバシステムのデータフロー図１
【図７】実施例３のデバイスサーバシステムのデータフロー図２
【発明を実施するための最良の形態】
【００２４】
以下、本発明の実施形態について、図面を参照しながら詳細に説明していく。なお、本発明の範囲は、以下の実施例や図示例に限定されるものではなく、幾多の変更及び変形が可能である。
【００２５】
図１は、デバイスサーバシステムの機能ブロックの一例を示している。
図１に示すデバイスサーバシステムでは、クライアント２０からネットワーク４０経由でデバイスサーバ１０にローカル接続されているストレージデバイス３０を制御する。
なお、ネットワーク４０は、有線もしくは無線のネットワークである。また図１では、クライアント２０とデバイスサーバ１０は１：１で接続されているが、それぞれ複数存在し、Ｎ：１、１：Ｎ、Ｎ：Ｍ（Ｎ，Ｍは２以上の自然数）で接続されるものでもよい。また、デバイスサーバ１０にローカル接続されるストレージデバイスは２台以上でもよい。
【００２６】
ここで、クライアント２０は、一般的なパーソナルコンピュータと同様なハードウェア構成を備えており、図示しないＣＰＵ、入力部、表示部、メモリ、外部記憶部、図示する通信インタフェース２６などが内部バスで接続されている。
このクライアント２０には、外部記憶部に格納され、ＣＰＵによる実行時にメモリに搭載されるアプリケーション２１とデバイスドライバ２２とＵＳＢクラスドライバ２３とトンネリングドライバ２４と通信制御ドライバ２５がソフトウェア部品として存在する。ここで、ＵＳＢクラスドライバ２３がデータ制御部に該当し、トンネリングドライバ２４がドライバ部に該当する。
この他、ソフトウェア部品として、ＯＳ（Operating System）、常駐モジュール、データ通信制御プログラムなどがあり、制御に必要な各種データと共に外部記憶部に格納されている。これらソフトウェア部品及び各種データは、ＣＰＵの制御に従い、メモリ上に読み出されて各種制御が実行される。
【００２７】
常駐モジュールは、ＯＳが起動している間、常に待機及び動作しているソフトウェア部品であり、ネットワーク４０を介してデバイスサーバ１０とデータ送受信を行う。また常駐モジュールは、デバイスサーバ１０にローカル接続されているストレージデバイス３０を認識して識別するためのストレージデバイス情報を受信する。さらに常駐モジュールは、受信したストレージデバイス情報に基づいて、ストレージデバイス３０とのデータ入出力に必要となるデバイスドライバ２２、ＵＳＢクラスドライバ２３を生成し、ストレージデバイス３０に対してネットワーク越しにデータ入出力制御が可能な状態にする。
【００２８】
デバイスドライバ２２は、ＯＳやアプリケーション２１、常駐モジュールなど上位プログラムからのデータ入出力要求を、データ入出力対象のストレージデバイス３０に応じたデータ形式に変換し、また、ストレージデバイス３０からの応答を上位プログラムへ渡す。
【００２９】
ＵＳＢクラスドライバ２３は、デバイスドライバ２２によって、ストレージデバイス３０に応じたデータ形式に変換されたデータ入出力要求を、ＵＳＢのデータ形式に準拠したパケットデータに変換してトンネリングドライバ２４に渡し、またトンネリングドライバ２４から送られてくるＵＳＢのデータ形式に準拠したパケットデータを、データ形式変換してデバイスドライバ２２へ渡す。
【００３０】
またトンネリングドライバ２４は、ＵＳＢクラスドライバ２３から渡されたパケットデータをＩＰパケットにカプセル化する。その一方で、トンネリングドライバ２４は、デバイスサーバ１０からＩＰパケットを受信すると、このＩＰパケットから応答パケットデータを取り出し（デカプセルして）、ＵＳＢクラスドライバ２３、デバイスドライバ２２に受け渡す。
【００３１】
通信制御ドライバ２５は、トンネリングドライバ２４からＩＰパケットを受け取り、通信インタフェース２６へ引き渡す。また通信制御ドライバ２５は、通信インタフェース２６から受け取ったＩＰパケットをトンネリングドライバ２４へ引き渡す。このように通信制御ドライバ２５は、ネットワークを介して、クライアント２０とデバイスサーバ１０との間でＩＰパケットの送受信や通信制御を行っている。
【００３２】
一方、デバイスサーバ１０には、通信インタフェース１６と通信制御ドライバ１１とトンネリングドライバ１２とＵＳＢドライバ１３、データバッファ部１４が搭載されている。トンネリングドライバ１２は、ネットワーク受信部１７およびネットワーク送信部１８から成る。
デバイスサーバ１０のトンネリングドライバ１２では、クライアント２０のトンネリングドライバ２４と同様、クラインアント２０からネットワークを介し、ＩＰパケットを受信すると、このＩＰパケットからＵＳＢのデータ形式に準拠したパケットデータを取り出し（デカプセルして）、ＵＳＢドライバ１３に送る（ネットワーク受信部１７の機能）。また、トンネリングドライバ１２は、ＵＳＢドライバ１３からＵＳＢのデータ形式に準拠したパケットデータを受け取って、ＩＰパケットにカプセル化する（ネットワーク送信部１８の機能）。さらに、クライアント２０およびデバイスサーバ１０のそれぞれのトンネリングドライバ（２４および１２）は、後述する図３〜７のフローの説明に示す如く、本発明独自の振舞を示す。
【００３３】
図２は、デバイスサーバシステムの概念図を示している。
図２に示すように、ハードディスクドライブ３２がＵＳＢ接続ケーブル３１を介してデバイスサーバ１０に接続されている。クライアント２０とデバイスサーバ１０とが無線ネットワーク４０を介して接続され、クライアント２０は、無線ネットワーク４０を介してデバイスサーバ１０とデータ送受信を行い、ハードディスクドライブ３２とデータ入出力する。
【実施例１】
【００３４】
図３は、デバイスサーバシステムのデータ出力（ストレージデバイスへの書込み）フローを示している。
図３に示すように、本実施例のデバイスサーバは、クライアント２０からストレージデバイス３０に対して、書込みを行う際に、通信の高速化を図ったものである。ストレージデバイス３０は、ハードディスクドライブであり、コマンド転送、データ出力およびステータス転送の３つのアクセスで制御されている。以下、コマンド転送、データ出力、ステータス転送の順に説明する。
【００３５】
まず、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へ、コマンド転送要求が送信される。
コマンド転送要求は、トンネリングドライバ２４から、デバイスサーバ１０へ送られ、デバイスサーバ１０に設けられたネットワーク受信部１７において受信される。
ここで、クライアント２０内のトンネリングドライバ２４は、コマンド転送ダミー応答をＵＳＢクラスドライバ２３へ送信する。すなわち、従来方法であれば、一点鎖線の矢印で示すコマンド転送応答（ストレージデバイス３０からデバイスサーバ１０を経由して受信した信号を、クライアント２０内のトンネリングドライバ２４がＵＳＢクラスドライバに向けて送信するもの）を受けて、ＵＳＢクラスドライバはデータ出力を開始するが、クライアント２０内のトンネリングドライバ２４がコマンド転送ダミー応答をＵＳＢクラスドライバ２３へ送信することにより、実際のコマンド転送応答がクライアント２０に送信される前に、クライアント２０からデバイスサーバ１０へデータ出力を行うことが可能となる。
コマンド転送要求は、ネットワーク受信部１７からストレージデバイス３０へと送られる。
これに対するコマンド転送応答は、ストレージデバイス３０からネットワーク送信部１８を介して、トンネリングドライバ２４へ送信されるが、ここで破棄されＵＳＢクラスドライバ２３には送信されない（すなわち一点鎖線の通信は存在しない）。すでにダミー応答を送信しているからである。
【００３６】
上述のように、データ出力は、実際のコマンド転送応答がデバイスサーバ１０からクライアント２０に送信される前に、開始される。これにより、従来のデバイスサーバシステムとは異なり、システム全体としてデータ出力処理速度を向上させることができる。
データ出力は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７、ストレージデバイス３０へと順に送られる。ただし、ストレージデバイス３０側では、ストレージデバイス３０がコマンド転送応答をデバイスサーバ１０へ送る前に、ストレージデバイス３０へデータ出力が送られると、エラーが発生してしまうので、ストレージデバイス３０へのデータ出力送信は、ストレージデバイス３０からコマンド転送応答がデバイスサーバ１０へ送られた後に、行われる。これにより、エラーを起こすことなく、データ出力処理速度の向上を図ることができる。
実際のデータ出力応答は、ストレージデバイス３０から、ネットワーク送信部１８を介して、トンネリングドライバ２４へと送られるが、ここで破棄されＵＳＢクラスドライバ２３には送信されない（すなわち一点鎖線の通信は存在しない）。後述するように、すでにデータ出力ダミー応答を送信しているからである。
【００３７】
データ出力が、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へと送信されると、トンネリングドライバ２４は、データ出力ダミー応答をＵＳＢクラスドライバ２３へ送信する。すなわち、従来方法であれば、一点鎖線の矢印で示すデータ出力応答を受けて、ステータス転送要求が開始されるが、データ出力ダミー応答をＵＳＢクラスドライバ２３へ送信することにより、実際のデータ出力応答がデバイスサーバ１０からクライアント２０に送信される前に、クライアント２０からデバイスサーバ１０へステータス転送要求を行うことが可能となる。これにより、従来のデバイスサーバシステムよりもシステム全体としてデータ出力処理速度を向上させることができる。
ステータス転送要求は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られ、ステータス転送要求は、ネットワーク受信部１７からストレージデバイス３０へ送られる。ただし、ストレージデバイス３０側では、ストレージデバイス３０がデバイスサーバ１０へデータ出力応答を送る前に、ストレージデバイス３０へステータス転送が送られると、エラーが発生してしまうので、ストレージデバイス３０へのステータス転送送信は、ストレージデバイス３０からデータ出力応答がデバイスサーバ１０へ送られた後に、行われる。これにより、エラーを起こすことなく、データ出力処理速度の向上を図ることができる。
ステータス転送応答は、ストレージデバイス３０から、ネットワーク送信部１８を介して、クライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送られる。
【００３８】
ハードディスクドライブにデータ出力（書き込み）を行う場合、従来であれば、コマンド転送、データ出力、ステータス転送の各アクセスについて、デバイスサーバからの応答を待って、次のアクセスを開始していたので、その分、転送が遅いという問題があった。
これに対して、上記のように、コマンド転送およびデータ出力に関する応答をクライアントのトンネリングドライバで擬制し、先回りしてＵＳＢクラスドライバが受け取ることにより、システム全体としてデータ出力処理速度を向上させるのである。
また、デバイスサーバは、クライアントからのコマンド転送、データ出力、ステータス転送の一連の要求を、正しい順序でストレージデバイスに要求する。このとき、個々の要求が前後してストレージデバイスの挙動が破綻することのないように、デバイスサーバ側で一連の要求順序を制御する。
【実施例２】
【００３９】
図４は、デバイスサーバシステムのデータ入力（ストレージデバイスからの読み込み）フローを示している。図４のデータ入力フローでは、１つ目のデータブロックのデータ入力（読み込み）時のデータフローを示している。
図４に示すように、本実施例のデバイスサーバは、クライアント２０からストレージデバイス３０に対して、読み込みを行う際に、データ入力処理の高速化を図ったものである。ストレージデバイス３０は、ハードディスクドライブであり、コマンド転送、データ入力およびステータス転送の３つのアクセスで制御されている。以下、コマンド転送、データ入力、ステータス転送の順に説明する。
【００４０】
まず、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へ、コマンド転送１要求が送信される。
コマンド転送１要求は、トンネリングドライバ２４から、デバイスサーバ１０へ送られ、デバイスサーバ１０内に設けられたネットワーク受信部１７において受信される。
ここで、トンネリングドライバ２４は、コマンド転送１要求をＵＳＢクラスドライバ２３から受信すると、コマンド転送１ダミー応答をＵＳＢクラスドライバ２３へ送信する。これにより、実際のコマンド転送１応答がデバイスサーバ１０からクライアント２０に送信されないうちに、クライアント２０からデバイスサーバ１０へのデータ入力１要求が可能となる。
コマンド転送１要求は、ネットワーク受信部１７からストレージデバイス３０へ送られる。
実際のコマンド転送１応答は、ストレージデバイス３０からネットワーク送信部１８を介して、トンネリングドライバ２４へ送信されるが、ここで破棄されＵＳＢクラスドライバ２３には送信されない。すでにダミー応答を送信しているからである。
【００４１】
データ入力１要求は、実際のコマンド転送１応答がデバイスサーバ１０からクライアント２０に送信されないうちに、ＵＳＢクラスドライバ２３から発行される。これにより、従来のデバイスサーバシステムとは異なり、ストレージデバイスからのデータ読み込み処理速度を向上させることができる。
データ入力１要求を受信したデバイスサーバ１０は、読み込みコマンド内のアドレスとＬｅｎｇｔｈのパラメータを参照し、応答可能なキャッシュ済みデータが存在していれば、クライアントにデータ入力応答を行う。すなわち、ここでは、応答可能なキャッシュ済みデータがデータバッファ部に存在していないので、データ入力１要求は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られ、ネットワーク受信部１７からストレージデバイス３０へデータ入力１要求が送られる。また、ネットワーク受信部１７がデータ入力１要求をストレージデバイス３０へ送る際には、同時に、データ入力２要求もストレージデバイス３０へ送られる。すなわち、デバイスサーバ１０は、クライアント２０からのデータ入力１要求に加えて、後続するデータの先読み分としてデータ入力２要求もストレージデバイス３０に要求する訳である。
ただし、ストレージデバイス３０側では、ストレージデバイス３０からコマンド転送１応答をデバイスサーバ１０へ送る前に、デバイスサーバ１０からストレージデバイス３０へデータ入力１要求およびデータ入力２要求が送られると、ストレージデバイス３０内部でエラーが発生してしまうので、デバイスサーバ１０からストレージデバイス３０へのデータ入力要求は、ストレージデバイス３０からコマンド転送１応答がデバイスサーバ１０へ送られた後に行われる。これにより、ストレージデバイス３０内部でエラーを起こすことなく、データ入力処理速度の向上を図る。
【００４２】
データ入力１要求およびデータ入力２要求に対応して、まずデータ入力１応答（ストレージデバイスのデータ）は、ストレージデバイス３０から、ネットワーク送信部１８を介して、クライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送られる。一方、データ入力２応答は、ストレージデバイス３０からネットワーク受信部１７へ送られ、デバイスサーバ１０内のデータバッファ部１４にキャッシュされる。
なお、データ入力２要求に応答する処理（対応するデータの読み出し処理）の途中に、ストレージデバイス３０内部でエラーが発生した場合、データ読み出しできなかった分はデータバッファ部１４にキャッシュしない。もちろん、データ入力１の応答自体が正常に行えたならば、１つ目のデータ入力要求の応答自体は正常に処理する。
【００４３】
クライアント２０内のＵＳＢクラスドライバ２３がデバイスサーバ１０からのデータ入力１応答を受けた後、ステータス転送１要求が、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。ステータス転送１要求は、データ入力２応答がキャッシュされた後に、ネットワーク受信部１７からストレージデバイス３０へ送られる。
ステータス転送１応答は、ストレージデバイス３０から、ネットワーク送信部１８を介して、クライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送られる。また同時に、ステータス転送１応答は、ネットワーク送信部１８からネットワーク受信部１７へ送られ、キャッシュされる。このキャッシュされたステータス転送１応答は、後にクライアント２０内のＵＳＢクラスドライバ２３から発行されるステータス転送２要求（ＵＳＢクラスドライバ２３が２つ目のデータ入力応答を受信した後に発行される）に対応するためのものである。
【００４４】
図５は、デバイスサーバシステムにおいて、２つ目のデータブロック（次データブロック）のデータ入力時のデータフローを示している。
図５に示すように、まず、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へ、コマンド転送２要求が送信される。
コマンド転送２要求は、トンネリングドライバ２４から、デバイスサーバ１０へ送られ、デバイスサーバ１０に設けられたネットワーク受信部１７において受信される。
ここで、トンネリングドライバ２４は、コマンド転送２ダミー応答をＵＳＢクラスドライバ２３へ送信する。コマンド転送２ダミー応答には、コマンド転送３に関するダミー応答も含まれている。
コマンド転送２要求を受信したネットワーク受信部１７は、コマンド転送２要求に対応するデータ入力２応答がキャッシュされていることを確認した後、コマンド転送２要求より１つ先のコマンド転送３要求を、ストレージデバイス３０へ送信する。
実際のコマンド転送３応答は、ストレージデバイス３０からネットワーク送信部１８を介して、クライアント２０内のトンネリングドライバ２４へと送信されるが、ここで破棄されＵＳＢクラスドライバには送信されない。
【００４５】
ＵＳＢクラスドライバ２３は、コマンド転送２ダミー応答を受けると、データ入力２要求を発行する。これにより、従来のデバイスサーバシステムとは異なり、システム全体としてデータ入力処理速度を向上させることができる。
データ入力２要求は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。
データ入力２要求を受信したデバイスサーバは、読み込みコマンド内のアドレスとＬｅｎｇｔｈのパラメータを参照し、応答可能なキャッシュ済み先読みデータが存在していれば、クライアント２０にデータ入力２応答を行う。ここでは、応答可能なキャッシュ済みデータが存在するので、キャッシュされたデータ入力２応答が、ネットワーク受信部１７からクライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送信される。このように、ストレージデバイスへのアクセスを行わずにデータ入力が完了するため、システム全体としてデータ入力処理速度の向上が図られる。
【００４６】
一方、データ入力２要求を受信したデバイスサーバ１０は、１つ先のデータ入力３要求をネットワーク送信部１８からストレージデバイス３０へ送信する。
データ入力３応答（すなわち先読みされたストレージデバイスのデータ）は、ストレージデバイス３０からネットワーク受信部１７へ送られ、デバイスサーバ１０のデータバッファ部１４にキャッシュされる。
【００４７】
クライアント２０内のＵＳＢクラスドライバ２３がデバイスサーバ１０からのデータ入力２応答を受けた後、ステータス転送２要求が、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。
ネットワーク受信部１７には、ステータス転送１応答がキャッシュされており、デバイスサーバのネットワーク受信部１７は、このステータス転送２要求をストレージデバイス３０に送信することなく、代わりにキャッシュされているステータス転送応答をネットワーク受信部１７からクライアント２０内のトンネリングドライバ２４へ送信し、さらにクライアント２０内のトンネリングドライバ２４は、これをＵＳＢクラスドライバ２３へステータス転送２応答として送信する。このように、ストレージデバイスへのアクセスを行わずにステータス転送が完了するため、システム全体としてデータ入力処理速度の向上が図られる。
【００４８】
一方、ステータス転送２要求を受信したデバイスサーバ１０は、１つ先のステータス転送３要求をネットワーク送信部１８からストレージデバイス３０へ送信する。
これに対応したステータス転送３応答は、ストレージデバイス３０からネットワーク受信部１７へ送られ、デバイスサーバ１０のデータバッファ部にキャッシュされる。
【００４９】
ストレージデバイス３０は、データ入力の際に、アドレスが連続した記憶領域にアクセスさせることが多く、ＵＳＢを介したデータ転送では６４ＫＢ等の所定サイズのデータブロック単位に細切れ転送されることが多い。そこで、本実施例のように、デバイスサーバ側で、ストレージデバイスに対するクライアントのコマンド内容を解釈して、ストレージデバイスに対しては、大容量のデータ入力を指示してデータブロックを先読みしてキャッシュしておく。一方、クライアントに対しては、先読みしたデータブロックをキャッシュから取り出してデータ入力応答することにより、システム全体としてデータ入力速度を向上させるのである。
【実施例３】
【００５０】
図６は、デバイスサーバシステムの他の態様のデータ入力（ストレージデバイスからの読み込み）フローを示している。図６のデータ入力フローでは、１つ目のデータブロックのデータ入力（読み込み）時のデータフローを示している。
本実施例のデバイスサーバは、クライアント２０からストレージデバイス３０に対して、読み込みを行う際に、複数のデータブロックを先読みすることでデータ入力処理の高速化を図る。具体的には、デバイスサーバ１０でデータ入力要求をストレージデバイス３０に対して５つ纏めて行い、データ入力処理の高速化を図る。ストレージデバイス３０は、ハードディスクドライブであり、コマンド転送、データ入力およびステータス転送の３つのアクセスで制御されている。以下、コマンド転送、データ入力、ステータス転送の順に説明する。
【００５１】
まず、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へ、コマンド転送１要求が送信される。
コマンド転送１要求は、トンネリングドライバ２４から、デバイスサーバ１０へ送られ、デバイスサーバ１０に設けられたネットワーク受信部１７において受信される。
ここで、トンネリングドライバ２４は、コマンド転送１ダミー応答をＵＳＢクラスドライバ２３へ送信する。これにより、実際のコマンド転送１応答がデバイスサーバ１０からクライアント２０に送信されないうちに、クライアント２０からデバイスサーバ１０へのデータ入力１要求が可能となる。
コマンド転送１要求は、ネットワーク受信部１７からストレージデバイス３０へと送られる。
これに対応する実際のコマンド転送１応答は、ストレージデバイス３０からネットワーク送信部１８を介して、トンネリングドライバ２４へ送信されるが、ここで破棄されＵＳＢクラスドライバ２３には送信されない。すでにコマンド転送ダミー応答が送信されているためである。
【００５２】
クライアント２０内のＵＳＢクラスドライバ２３は、コマンド転送１ダミー応答を受信すると、実際のコマンド転送１応答がクライアント２０に送信されないうちに、データ入力１要求をトンネリングドライバ２４に発行する。これにより、従来のデバイスサーバシステムとは異なり、データ入力処理速度を向上させることができる。
データ入力１要求を受信したデバイスサーバは、読込みコマンド内のアドレスとＬｅｎｇｔｈのパラメータを参照し、応答可能なキャッシュ済みデータが存在していれば、クライアントにデータ入力応答を行う。すなわち、ここでは、応答可能なキャッシュ済みデータが存在していないので、データ入力１要求は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られ、データ入力１要求は、ネットワーク受信部１７からストレージデバイス３０へと送られる。また、データ入力１要求がネットワーク受信部１７からストレージデバイス３０へ送られる際には、同時に、後続するデータを読み込むためのデータ入力２〜５要求がストレージデバイス３０へ送られる。
ただし、ストレージデバイス３０からコマンド転送１応答がデバイスサーバ１０へ送られる前に、ストレージデバイス３０へこれらのデータ入力要求が送られると、ストレージデバイス３０内部でエラーが発生してしまうので、ストレージデバイス３０へのデータ入力要求は、ストレージデバイス３０からコマンド転送１応答がデバイスサーバ１０へ送られた後に行われる。これにより、ストレージデバイス３０内部でエラーを起こすことなく、データ入力処理速度の向上を図ることができる。
【００５３】
まずデータ入力１要求に対応して、データ入力１応答は、ストレージデバイス３０から、ネットワーク送信部１８を介して、トンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送られる。一方、データ入力２〜５要求に対応したデータ入力２〜５応答は、ストレージデバイス３０からネットワーク受信部１７へ送られ、デバイスサーバ１０のデータバッファ部１４にキャッシュされる。
なお、データ入力２〜５要求に応答する処理（対応するデータの読み出し処理）の途中に、ストレージデバイス３０内部でエラーが発生した場合、データ入力できなかった分はデータバッファ部１４にキャッシュしない。もちろん、データ入力１要求の応答自体が正常に行えているならば、１つ目のデータ入力要求の応答自体は正常に処理する。
【００５４】
クライアント２０内のＵＳＢクラスドライバ２３がデバイスサーバ１０からのデータ入力１応答を受けた後、ステータス転送１要求が、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。ステータス転送１要求は、データ入力２〜５応答がキャッシュされた後に、ネットワーク受信部１７からストレージデバイス３０へと送られる。
ステータス転送１応答は、ストレージデバイス３０から、ネットワーク送信部１８を経由して、クライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送られる。また同時に、ステータス転送１応答は、ネットワーク送信部１８からネットワーク受信部１７へ送られ、キャッシュされる。
【００５５】
図７は、デバイスサーバシステムの先読みする２つ目のデータブロック（次データブロック）のデータ入力時のデータフローを示している。
図７に示すように、まず、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４へ、コマンド転送２要求が送信される。
コマンド転送２要求は、トンネリングドライバ２４からデバイスサーバ１０へ送られ、デバイスサーバ１０に設けられたネットワーク受信部１７において受信され、さらにストレージデバイス３０に送られる。
また、トンネリングドライバ２４は、コマンド転送２ダミー応答をＵＳＢクラスドライバ２３へ送信する。
一方、実際のコマンド転送２ダミー応答は、ストレージデバイス３０からデバイスサーバ１０を経てクライアント２０のトンネリングドライバ２４に達するが、ここで破棄される。
【００５６】
クライアント２０内のＵＳＢクラスドライバ２３は、実際のコマンド転送２応答がデバイスサーバ１０からクライアント２０に送信される前にデータ入力２要求を発行する。これにより、従来のデバイスサーバシステムとは異なり、システム全体としてデータ入力処理速度を向上させることができる。
データ入力２要求は、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。
データ入力２要求を受信したデバイスサーバ１０は、読み込みコマンド内のアドレスとＬｅｎｇｔｈのパラメータを参照し、応答可能なキャッシュ済みデータが存在していれば、クライアントにデータ入力応答する。ここでは、応答可能なキャッシュ済みデータが存在するので、キャッシュされたデータ入力２応答が、ネットワーク受信部１７からクライアント２０内のトンネリングドライバ２４、ＵＳＢクラスドライバ２３へと順に送信される。このように、ストレージデバイスへのアクセスを行わずにデータ入力が完了するため、システム全体としてデータ入力処理速度の向上が図られる。
【００５７】
クライアント２０内のＵＳＢクラスドライバ２３がデバイスサーバ１０からのデータ入力２応答を受けた後、ステータス転送２要求が、クライアント２０内のＵＳＢクラスドライバ２３から、クライアント２０内のトンネリングドライバ２４、デバイスサーバ１０内のネットワーク受信部１７へと順に送られる。
ネットワーク受信部１７には、ステータス転送１応答がキャッシュされており、ストレージデバイス３０にステータス転送要求を送信することなく、ネットワーク受信部１７からトンネリングドライバ２４へステータス転送１応答が送信され、トンネリングドライバ２４からＵＳＢクラスドライバ２３へステータス転送２応答として送信される。このように、ストレージデバイスへのアクセスを行わずにステータス転送が完了するため、システム全体としてデータ入力処理速度の向上が図られる。
【００５８】
図７では、２つ目のデータ読込み時のデータフロー図を示しているが、３つ目から５つ目のデータ入力時のデータフローも同様である。
【００５９】
また、クライアント２０とストレージデバイス３０との間での1つ目から５つ目までの一連のデータ読み込み処理（データ入力処理）が終了した後、６つ目のデータ読込み時においては、図６に示す１つ目のデータブロックの読込み時と同様のデータフローとなり、７〜１０個目のデータ読込み時においては、図７に示す２つ目のデータ入力時と同様のデータフローとなる。そしてさらにデータの読み込みが行われる場合は、上記フローの繰り返しとなる。
このように、２つ以上のデータをまとめて先読みすることで、システム全体としてデータ入力処理速度を向上させることができる。
また、先読み込みしたもの以外のコマンド転送要求が発生した場合、サーバ内部のキャッシュを破棄した上で、従来の処理を継続する。
【００６０】
なお、上述の実施例では、クライアントがネットワークを介してストレージデバイスを利用するデバイスサーバシステムを例に説明したが、本発明の適用範囲はこれに限定されず、ＵＳＢ通信規格と同等の通信方式、例えば、ＩＥＥＥ１３９４など別のインタフェースに準拠したものであってもよい。
【産業上の利用可能性】
【００６１】
本発明は、ハードディスクドライブなどの周辺デバイスの利便性を高めるデバイスサーバシステムに有用である。
【符号の説明】
【００６２】
１０  デバイスサーバ
１１，２５  通信制御ドライバ
１２，２４  トンネリングドライバ
１３  ＵＳＢドライバ
１４  データバッファ部
１６，２６  通信インタフェース
１７  ネットワーク受信部
１８  ネットワーク送信部
２０  クライアント
２１  アプリケーション
２２  デバイスドライバ
２３  ＵＳＢクラスドライバ
３０  ストレージデバイス
３１  ＵＳＢ接続ケーブル
３２  ハードディスクドライブ
４０  ネットワーク
【図１】
0006539874.tif 000002
【図２】
0006539874.tif 000003
【図３】
0006539874.tif 000004
【図４】
0006539874.tif 000005
【図５】
0006539874.tif 000006
【図６】
0006539874.tif 000007
【図７】
0006539874.tif 000008