(57)【要約】      （修正有）【課題】性質の異なる複数のストレージ装置を用いて、データ書込処理の性能や信頼性等を向上させる。【解決手段】ターゲット記憶装置に対するデータ書込命令を一時格納用記憶装置に対するデータ書込命令に変換し、このデータ書込命令を用いて一時格納用記憶装置にデータを書き込む。これにより、ターゲット記憶装置に対するデータ書込処理の少なくとも一部を一時格納用記憶装置に分散させ、データ書き込み処理の性能や信頼性等を向上させることができる。【選択図】図１
2010287097.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置を制御する方法であって、
前記複数の記憶装置のうち１つの記憶装置をターゲット記憶装置として選択するとともに他の記憶装置を一時格納用記憶装置として選択するステップと、
前記一時格納用記憶装置上に一時格納用記憶領域を確保するステップと、
前記ターゲット記憶装置に対するデータ書込命令の少なくとも一部を転送して受け取るステップと、
前記ターゲット記憶装置に対するデータ書込命令を前記一時格納用記憶領域に対するデータ書込命令に変換する命令変換ステップと、
前記一時格納用記憶領域に対するデータ書込命令を用いて、前記ターゲット記憶装置に書き込まれるべきデータを前記一時格納用記憶領域に書き込む一時書込ステップと、
を有することを特徴とする記憶装置制御方法。
【請求項２】
前記一時格納用記憶領域を確保する際にそのデータ書込アドレスを記憶しておき、
前記一時書込ステップでは、
前記一時格納用記憶領域に対するデータ書込命令および前記一時格納用記憶領域上のデータ書込アドレスを用いて、前記ターゲット記憶装置に書き込まれるべきデータを前記一時格納用記憶領域に書き込む
ことを特徴とする請求項１記載の記憶装置制御方法。
【請求項３】
前記ターゲット記憶装置に対するデータ書込命令を前記ターゲット記憶装置に対して送信せずに転送して前記一時格納用記憶領域に対するデータ書込命令に変換するか否かを指定するステップを有する
ことを特徴とする請求項１記載の記憶装置制御方法。
【請求項４】
前記ターゲット記憶装置上におけるデータ書込アドレスと前記一時格納用記憶装置上のデータ書込アドレスの対応関係を記憶するステップを有し、
前記ターゲット記憶装置上におけるデータ書込アドレスを用いて前記ターゲット記憶装置に対するデータ書込命令を生成するステップと、
そのデータ書込命令を用いて前記一時格納用記憶領域に格納されているデータを前記ターゲット記憶装置に書き込むステップと、
を有することを特徴とする請求項１記載の記憶装置制御方法。
【請求項５】
前記ターゲット記憶装置に書き込まれるべきデータを前記一時格納用記憶領域に書き込む間は前記ターゲット記憶装置を省電力モードに移行させるステップを有する
ことを特徴とする請求項１記載の記憶装置制御方法。
【請求項６】
前記ターゲット記憶装置上におけるデータ書込アドレスと前記一時格納用記憶領域上のデータ書込アドレスの対応関係を記憶するステップと、
前記一時格納用記憶領域に格納されているデータ容量をカウントするステップと、
前記データ容量が所定のデータ容量閾値以上となったときに前記ターゲット記憶装置を省電力モードから復帰させるステップと、
前記ターゲット記憶装置上におけるデータ書込アドレスを用いて前記ターゲット記憶装置に対するデータ書込命令を生成するステップと、
そのデータ書込命令を用いて前記一時格納用記憶領域に格納されているデータを前記ターゲット記憶装置に書き込むステップと、
を有することを特徴とする請求項５記載の記憶装置制御方法。
【請求項７】
前記ターゲット記憶装置に対するデータ書込要求レートを算出するステップと、
前記データ書込要求レートが所定のデータ書込要求レート閾値以上となったときに前記ターゲット記憶装置に対するデータ書込命令の少なくとも一部を転送して前記一時格納用記憶領域に対するデータ書込命令に変換するステップと、
を有することを特徴とする請求項１記載の記憶装置制御方法。
【請求項８】
前記データ書込要求レートが所定値以下まで低下したときに前記ターゲット記憶装置に対するデータ書込命令を転送して前記一時格納用記憶領域に対するデータ書込命令に変換することを中止するステップと、
前記ターゲット記憶装置上におけるデータ書込アドレスを用いて前記ターゲット記憶装置に対するデータ書込命令を生成するステップと、
そのデータ書込命令を用いて前記一時格納用記憶領域に格納されているデータを前記ターゲット記憶装置に書き込むステップと、
を有することを特徴とする請求項７記載の記憶装置制御方法。
【請求項９】
前記ターゲット記憶装置が電力源として使用するバッテリー残量を取得するステップと、
前記ターゲット記憶装置がバッテリー動作をしており、かつ前記バッテリー残量が所定のバッテリー残量閾値以下になったときに、前記ターゲット記憶装置に対するデータ書込命令の少なくとも一部を転送して前記一時格納用記憶領域に対するデータ書込命令に変換するステップと、
を有することを特徴とする請求項１記載の記憶装置制御方法。
【請求項１０】
前記複数の記憶装置のうち、バッテリー動作をしており、かつ他の記憶装置よりも消費電力の低い記憶装置を特定する特定ステップと、
前記特定ステップで特定した記憶装置を前記一時格納用記憶装置として選択するステップと、
を有することを特徴とする請求項９記載の記憶装置制御方法。
【請求項１１】
前記ターゲット記憶装置における処理エラーを検出するステップと、
前記処理エラーを検出したときに前記ターゲット記憶装置に対するデータ書込命令の少なくとも一部の複製を転送して前記一時格納用記憶領域に対するデータ書込命令に変換するステップと、
を有することを特徴とする請求項１記載の記憶装置制御方法。
【請求項１２】
前記ターゲット記憶装置に書き込まれるべきデータを前記ターゲット記憶装置にそのまま書き込むとともに前記一時格納用記憶装置にも書き込む
ことを特徴とする請求項１１記載の記憶装置制御方法。
【請求項１３】
請求項１から請求項１２までのいずれか１項に記載の記憶装置制御方法をコンピューターに実行させることを特徴とする記憶装置制御プログラム。
【請求項１４】
前記一時格納用記憶領域を確保するステップでは、前記コンピューターに、
前記一時格納用記憶領域を前記コンピューターのオペレーティングシステムのファイルシステムが介在しない領域に確保させる
ことを特徴とする請求項１３記載の記憶装置制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の記憶装置を制御する方法およびそのプログラムに関するものである。
【背景技術】
【０００２】
ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）やＡＶ機器などには、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）やＩＥＥＥ１３９４など複数のインターフェースを備えているものがある。それらのインターフェースにストレージ装置を接続することにより、機器本体が内蔵するストレージ装置とは別にストレージ装置を使用することができる。
【０００３】
上記のインターフェースを通して接続可能なストレージ装置には、たとえば、ＵＳＢフラッシュメモリドライブ、ＳＤカード、光ディスク装置などがある。これらのストレージ装置は、データ転送速度、消費電力の点でそれぞれ異なった特徴を持っている。
【０００４】
近年、上記のような異なる特徴をもつストレージ装置を連携動作させることで、Ｉ／Ｏ性能を向上させる方法が検討されている。たとえば、マイクロソフト社が開発したＲｅａｄｙＢｏｏｓｔという技術では、高速な読み出し速度をもつＵＳＢフラッシュメモリドライブやＳＤカードを、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）とともに仮想メモリとして使用する。下記特許文献１及び非特許文献１に、ＲｅａｄｙＢｏｏｓｔに関する事項が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＵＳ  ２００６／００９００３１  Ａ１
【非特許文献】
【０００６】
【非特許文献１】Microsoft  Corporation，Windows  PC  Accelerators，2006
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記従来技術では、外部接続された複数のストレージ装置の１つを仮想メモリとして機能させることにより、仮想メモリに係る処理の高速化を図る制御方法が記載されている。
【０００８】
一方で、複数のストレージ装置を用いて、データ書込処理の性能や信頼性等を向上させることに対する要求がある。上記従来技術では、異なった性質を持つ複数のストレージ装置を用いて仮想メモリに係る処理の性能を向上させることはできるが、データ書込処理に関する性能や信頼性等を全般的に向上させることについては記載されていない。
【０００９】
本発明は、上記のような課題を解決するためになされたものであり、性質の異なる複数のストレージ装置を用いて、データ書込処理の性能や信頼性等を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る記憶装置制御方法では、ターゲット記憶装置に対するデータ書込命令を一時格納用記憶装置に対するデータ書込命令に変換し、このデータ書込命令を用いて一時格納用記憶装置にデータを書き込む。
【発明の効果】
【００１１】
本発明に係る記憶装置制御方法では、ターゲット記憶装置に対するデータ書込命令の少なくとも一部を一時格納用記憶装置に転送する。これにより、ターゲット記憶装置に対するデータ書込処理の少なくとも一部を一時格納用記憶装置に分散させ、データ書き込み処理の性能や信頼性等を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る記憶装置制御プログラムの構成図である。
【図２】バッファ用記憶装置３２０にバッファ用記憶領域３２１用の領域を確保するためのパーティション設定画面である。
【図３】各記憶装置上の記憶領域を設定した結果を示す図である。
【図４】実施の形態２に係る記憶装置制御プログラムの構成図である。
【図５】実施の形態４に係る記憶装置制御プログラムの構成図である。
【図６】書込レート算出部２４０の処理フロー図である。
【図７】実施の形態５に係る記憶装置制御プログラムの構成図である。
【図８】バッテリー残量取得部１７０がバッテリー残量を取得する処理に係るフローチャートである。
【図９】バッファ用記憶装置３２０に書き込まれたデータをターゲット記憶装置３１０に書き戻す際の動作フローである。
【図１０】実施の形態６に係る記憶装置制御プログラムの構成図である。
【図１１】ターゲット記憶装置３１０のエラー検出に伴うコマンド複製処理に係る処理フローである。
【発明を実施するための形態】
【００１３】
（実施の形態１）
図１は、本発明の実施の形態１に係る記憶装置制御プログラムの構成図である。
【００１４】
本実施の形態１に係る記憶装置制御プログラムは、ＰＣやＡＶ機器などのコンピューターが備えるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などの演算装置によって実行されるソフトウェアプログラムである。演算装置は、同プログラムが規定する動作にしたがって、後述の動作を行う。上記記憶装置制御プログラムは、ＰＣなどのコンピューターに実装されている。
【００１５】
本発明の実施の形態１に係る記憶装置制御プログラムを実行するコンピューターは、ターゲット記憶装置３１０、およびバッファ用記憶装置３２０に、適当な入出力インターフェースを介して接続されている。本実施の形態１に係る記憶装置制御プログラムは、このコンピューターの演算装置によって実行され、ターゲット記憶装置３１０とバッファ用記憶装置３２０を制御する。
【００１６】
ターゲット記憶装置３１０は、上記コンピューターが備える主要な記憶装置である。バッファ用記憶装置３２０は、一時格納用記憶装置として用いられる。詳細は後述する。
【００１７】
また、上記コンピューターは、本実施の形態１に係る記憶装置制御プログラムの他に、ターゲット記憶装置３１０に対して制御コマンドを発行するためのデバイスドライバ群（上位デバイスドライバ４１０、中間デバイスドライバ４２０、物理デバイスドライバ４３０）と、バッファ用記憶装置３２０に対して制御コマンドを発行するためのデバイスドライバ群（上位デバイスドライバ４４０、中間デバイスドライバ４５０、物理デバイスドライバ４６０）と、を有する。
【００１８】
これらのデバイスドライバ群は、ソフトウェアプログラムとして実装されている。当該コンピューターの演算装置は、これらのデバイスドライバが規定する動作にしたがって、ターゲット記憶装置３１０およびバッファ用記憶装置３２０に対して制御コマンドを発行する。
【００１９】
なお、これらのデバイスドライバ群は、必要に応じて、コンピューターのＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が備えるＩＯマネージャー４７０を介して、制御コマンドを実行する。
【００２０】
本実施の形態１に係る記憶装置制御プログラムは、デバイス連携アプリケーション１００、フィルタドライバ２００を有する。これらはいずれも、当該コンピューターの演算装置が実行するソフトウェアプログラムである。
【００２１】
フィルタドライバ２００は、ターゲット記憶装置３１０に対する物理デバイスドライバ４３０と中間デバイスドライバ４２０の間に介在する。
【００２２】
デバイス連携アプリケーション１００は、上記各デバイスドライバやフィルタドライバ２００よりも上位のプリケーションプログラムとして実装されている。デバイス連携アプリケーション１００は、これらのソフトウェアプログラムが提供する機能を利用して後述の動作を行う。
【００２３】
デバイス連携アプリケーション１００、フィルタドライバ２００、およびこれらプログラムが備える各機能部は、本実施の形態１に係る記憶装置制御プログラムを実行する演算装置の動作を規定する。演算装置はその規定にしたがって動作する。以下の説明では、記載の簡易のため、上記各プログラムまたはその各機能部が動作を実行するものとして記載するが、コンピューター上で実際に動作を実行するハードウェアは演算装置であることを付言しておく。
【００２４】
フィルタドライバ２００は、データ書込コマンド転送部２１０を備える。データ書込コマンド転送部２１０は、フィルタドライバ２００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【００２５】
データ書込コマンド転送部２１０は、各デバイスドライバを介してターゲット記憶装置３１０に対して発行されたデータ書込コマンドの少なくとも一部をキャプチャし、ターゲット記憶装置３１０に送信することなく、デバイス連携アプリケーション１００に転送する。
【００２６】
デバイス連携アプリケーション１００は、データ書込コマンド生成部１１０、バッファ領域確保部１２０、アドレス管理部１３０、コマンド変換部１４０を備える。これら各部は、デバイス連携アプリケーション１００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【００２７】
コマンド変換部１４０は、フィルタドライバ２００が転送した制御コマンドを、バッファ用記憶装置３２０に対する制御コマンドに変換する。
【００２８】
バッファ領域確保部１２０は、バッファ用記憶装置３２０上に、ブロック単位でアクセス可能なバッファ用記憶領域３２１を一時格納用記憶領域として確保する。
【００２９】
アドレス管理部１３０は、バッファ領域確保部１２０がバッファ用記憶領域３２１を確保する際に、データを書き込むための書込開始アドレスを記憶する。書込開始アドレスの記憶先は、当該コンピューターが備えるメモリ装置などの記憶装置を用いればよい。
【００３０】
データ書込コマンド生成部１１０は、ターゲット記憶装置３１０にデータを書き込むための制御コマンドを生成する。
【００３１】
以上、本実施の形態１に係る記憶装置制御プログラムと周辺装置の構成を説明した。
【００３２】
次に、本実施の形態１に係る記憶装置制御プログラムの動作を、下記（ステップ１）〜（ステップ６）にしたがって説明する。
【００３３】
（ステップ１）バッファ用記憶領域３２１のパーティション設定
図２は、バッファ用記憶装置３２０にバッファ用記憶領域３２１用の領域を確保するためのパーティション設定画面である。
【００３４】
ユーザーは、上述のコンピューターを操作して、図２に示すパーティション設定画面を表示するよう当該コンピューターに要求する。
【００３５】
デバイス連携アプリケーション１００は、上記要求を受けると、バッファ用記憶装置３２０として用いることのできる記憶装置を検索する。例えば、データ書込速度が所定の基準値を満たしているか否かを、バッファ用記憶装置３２０として用いることができるか否かの基準とすればよい。デバイス連携アプリケーション１００は、バッファ用記憶装置３２０としてアクセス可能な記憶装置を検出すると、その記憶装置のバッファ用の領域として割り当て不可能な記憶領域と割り当て可能な記憶領域を、区別して扱う。バッファ用の記憶領域として割り当て可能な領域とは、自由にデータを書き込み可能な空き領域のことであり、割り当てが済んでいない領域や、割り当てが済んだ領域であってデータの書き込み可能な領域のことである。
【００３６】
図２は、ユーザーが未使用の記憶装置（したがってすべての記憶領域はバッファ用の領域として割り当て可能）上に、ストレージ用記憶領域とバッファ用の記憶領域をそれぞれ設定し、それらのサイズを設定した場合の例を示している。
【００３７】
（ステップ２）バッファ用記憶領域３２１を確保する
図３は、図２の画面を通してユーザーがバッファ用の記憶装置にストレージの記憶領域とバッファ用の記憶領域を設定した結果をバッファ用の記憶装置に反映した時の結果の例を示す図である。
【００３８】
デバイス連携アプリケーション１００のバッファ領域確保部１２０は、図２のパーティション設定画面で設定した内容にしたがって、バッファ用記憶装置３２０上にバッファ用記憶領域３２１を確保する。
【００３９】
（ステップ３）バッファ用記憶領域３２１の書込開始アドレスを記憶する
デバイス連携アプリケーション１００のアドレス管理部１３０は、バッファ領域確保部１２０が確保したバッファ用記憶領域３２１の開始アドレス、すなわちバッファ用記憶領域３２１にデータを書き込む際の書込開始アドレスを記憶する。
【００４０】
（ステップ４）データ書込コマンドを転送する
ターゲット記憶装置３１０に対するデータ書込コマンドは、例えば当該コンピューター上の他のソフトウェアアプリケーションなどがターゲット記憶装置３１０にデータを書き込もうとする際に、各層のデバイスドライバによって発行される。
【００４１】
フィルタドライバ２００のデータ書込コマンド転送部２１０は、ターゲット記憶装置３１０に対するデータ書込コマンドが発行されると、これを抽出し、ターゲット記憶装置３１０に対して出力せずに、デバイス連携アプリケーション１００へ転送する。
【００４２】
（ステップ５）データ書込コマンドを変換する
デバイス連携アプリケーション１００のコマンド変換部１４０は、フィルタドライバ２００より転送されたデータ書込コマンドを、バッファ用記憶装置３１０に対するデータ書込コマンドに変換する。ターゲット記憶装置３１０のデバイスドライバが使用するデータ書込コマンドの形式と、バッファ用記憶装置３２０のデバイスドライバが使用するデータ書込コマンドの形式とが異なる場合は、コマンド形式の変換も併せて行う。コマンド変換部１４０は、変換して得たデータ書込コマンドを、バッファ用記憶装置３２０の中間デバイスドライバ４５０にセットする。
【００４３】
なお、コマンド変換部１４０は、コマンド変換を行う際に、アドレス管理部１３０が記憶したバッファ用記憶領域３２１の書込開始アドレスを用いて、各記憶装置上における書込アドレスの変換も行う。具体的には、ターゲット記憶装置３１０上のＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）を、バッファ用記憶装置３２０のバッファ用記憶領域３２１内のＬＢＡアドレスに変換する。
【００４４】
（ステップ６）バッファ用記憶領域３２１へデータを書き込む
バッファ用記憶装置３２０の各層のデバイスドライバは、ステップ５で生成されたデータ書込コマンドを用いて、ターゲット記憶装置３１０に書き込まれる予定であったデータをバッファ用記憶領域３２１内に書き込む。
【００４５】
以上、本実施の形態１に係る記憶装置制御プログラムの動作を説明した。
【００４６】
本実施の形態１では、ターゲット記憶装置３１０に対するデータ書込コマンドを抽出するため、コマンドを捕捉しやすいように、中間デバイスドライバ４２０と物理デバイスドライバ４３０の間にフィルタドライバ２００というモジュールを導入した。しかし、ターゲット記憶装置３１０に対するデータ書込コマンドを捕捉することができるのであれば、本実施の形態１におけるフィルタドライバ２００以外の仕組みを用いることもできる。他の実施の形態においても同様である。
【００４７】
以上のように、本実施の形態１によれば、ターゲット記憶装置３１０に対するデータ書込コマンドとその書込アドレスは、バッファ用記憶装置３２０のバッファ用記憶領域３２１に対するデータ書込コマンドとその書込アドレスに変換される。
【００４８】
これにより、ターゲット記憶装置３１０とは別の記憶装置を、バッファ用記憶装置３２０として使用することができる。たとえば、複数の記憶装置が混在する環境下において、いずれかの記憶装置に、他の記憶装置へ書き込まれるべきデータを一時的に退避させることができる。
【００４９】
また、本実施の形態１によれば、バッファ用記憶装置３２０は、ターゲット記憶装置３１０と同様の不揮発性の記憶装置、例えばＵＳＢメモリやＳＤカード、ＨＤＤなどを用いて構成することができる。
【００５０】
これにより、いずれ削除することを前提とした揮発性の記憶装置などの予備的なデータ領域とは異なり、バッファ用記憶領域３２１に格納されたデータは、ターゲット記憶装置３１０に格納されたデータと同等に取り扱うこともできる。
【００５１】
したがって、複数の記憶装置で構成されたストレージ環境を、より柔軟かつ多用途に取り扱うことができる。
【００５２】
また、本実施の形態１において、コマンド変換部１４０が制御コマンドの形式を変換する場合は、それぞれ異なるデバイスドライバで制御される複数の記憶装置を連携動作させることができる。
【００５３】
（実施の形態２）
本発明の実施の形態２では、ターゲット記憶装置３１０に対するデータ書込コマンドを転送するか否かを指定することのできる構成と動作例を説明する。また、バッファ用記憶領域３２１に格納されているデータをターゲット記憶装置３１０に書き戻す構成と動作についても併せて説明する。その他の構成は、実施の形態１と同様である。
【００５４】
図４は、本実施の形態２に係る記憶装置制御プログラムの構成図である。
【００５５】
本実施の形態２において、デバイス連携アプリケーション１００は、実施の形態１で説明した構成に加え、フィルタＯＮ部１５０、フィルタＯＦＦ部１６０を備える。これら各部は、データ連携アプリケーション１００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【００５６】
フィルタＯＮ部１５０は、後述のＯＮ部２２０に対して、データ書込コマンド転送部２１０の動作開始を指示する。フィルタＯＦＦ部１６０は、後述のＯＦＦ部２３０に対して、データ書込コマンド転送部２１０の動作停止を指示する。
【００５７】
本実施の形態２において、フィルタドライバ２００は、実施の形態１で説明した構成に加え、ＯＮ部２２０、ＯＦＦ２３０を備える。これら各部は、フィルタドライバ２００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【００５８】
ＯＮ部２２０およびＯＦＦ部２３０は、それぞれ、フィルタＯＮ部１５０、フィルタＯＦＦ部１６０より、データ書込コマンド転送部２１０の動作開始／動作停止の指示を受け取るためのソフトウェア上のインターフェースである。
【００５９】
本実施の形態２において、アドレス管理部１３０は、バッファ用記憶領域３２１上の書込開始アドレスを記憶する際に、この書込開始アドレスに対応するターゲット記憶装置３１０上の書込開始アドレスを記憶する。両者の対応関係については後述する。
【００６０】
本実施の形態２において、データ書込コマンド設定部１１０は、アドレス管理部１３０が記憶しているターゲット記憶装置３１０上の書込開始アドレスを用いて、バッファ用記憶領域３２１内に格納されているデータをターゲット記憶装置３１０に書き戻すためのデータ書込コマンドを生成する。また、生成したデータ書込コマンドをターゲット記憶装置３１０の中間デバイスドライバ４２０にセットする。詳細は後述する。
【００６１】
以上、本実施の形態２に係る記憶装置制御プログラムの構成を説明した。
【００６２】
次に、本実施の形態２に係る記憶装置制御プログラムの動作を、下記（ステップ１）〜（ステップ９）にしたがって説明する。
【００６３】
（ステップ１）〜（ステップ３）
これらのステップは、実施の形態１の（ステップ１）〜（ステップ３）と同様である。
【００６４】
（ステップ４）フィルタドライバ１０１をＯＮにする
デバイス連携アプリケーション１００のフィルタＯＮ部１５０は、データ書込コマンド転送部２１０の動作を開始するため、ＯＮ部２２０に対してその旨を指示する。ＯＮ部２２０は、上記指示を受け取ると、データ書込コマンド転送部２１０の動作を開始させる。
【００６５】
（ステップ５）〜（ステップ６）
これらのステップは、実施の形態１の（ステップ４）〜（ステップ５）と同様である。
【００６６】
（ステップ７）書込アドレスのセットを記憶する
デバイス連携アプリケーション１００のアドレス管理部１３０は、上記（ステップ６）におけるコマンド変換前のターゲット記憶装置３１０上の書込アドレスと、コマンド変換後のバッファ用記憶装置３２１上の書込アドレスとのセットを、管理情報として記憶する。
【００６７】
（ステップ８）バッファ用記憶領域３２１へデータを書き込む
本ステップは、実施の形態１の（ステップ６）と同様である。
【００６８】
（ステップ９）ターゲット記憶装置３１０へデータを戻す
デバイス連携アプリケーション１００は、バッファ用記憶領域３２１内に書き込んだデータをターゲット記憶装置３１０へ戻す場合は、以下の動作を実行する。
【００６９】
（ステップ９：その１）
データ書込コマンド生成部１１０は、アドレス管理部１３０が記憶した上述の書込アドレスのセットを用いて、バッファ用記憶領域３２１が格納しているデータを、同領域の先頭アドレスから順次読み出す。
【００７０】
（ステップ９：その２）
書込コマンド生成部１１０は、アドレス管理部１３０が記憶した上述の書込アドレスのセットを用いて、ターゲット記憶装置３１０上の書込アドレスを取得する。
【００７１】
（ステップ９：その３）
書込コマンド生成部１１０は、上記（その１）〜（その２）の結果を用いて、バッファ用記憶領域３２１が格納しているデータをターゲット記憶装置３１０に書き込むためのデータ書込コマンドを生成する。このときのデータ書込コマンドは、バッファ用記憶装置３２０に対して発行されたデータ書込コマンドを変換して生成するわけではないので、コマンド変換を行う必要はない。
【００７２】
（ステップ９：その４）
フィルタＯＦＦ部１６０は、フィルタドライバ２００のＯＦＦ部２３０に対して、データ書込コマンド転送部２１０の動作をＯＦＦするよう指示する。ＯＦＦ部２３０は、その指示にしたがって、データ書込コマンド転送部２１０の動作をＯＦＦする。
【００７３】
（ステップ９：その５）
書込コマンド生成部１１０は、上記（その３）で生成したデータ書込コマンドを、ターゲット記憶装置３１０の中間デバイスドライバ４２０にセットする。ターゲット記憶装置３１０の中間デバイスドライバ４２０は、そのデータ書込コマンドを実行し、ターゲット記憶装置３１０にデータを書き込む。
【００７４】
以上、本実施の形態２に係る記憶装置制御プログラムの動作を説明した。
【００７５】
本実施の形態２では、フィルタドライバ２００はＯＮ部２２０とＯＦＦ部２３０を備えていることを説明したが、データ書込コマンド転送部２１０の動作をＯＮ／ＯＦＦすることができるのであれば、その他の構成を用いることもできる。他の実施の形態においても同様である。
【００７６】
以上のように、本実施の形態２によれば、データ書込コマンド転送部２１０の動作をＯＮ／ＯＦＦすることができるので、ターゲット記憶装置３１０に対するデータ書込コマンドを、任意のタイミングでデータ連携アプリケーション１００に転送することができる。
【００７７】
また、本実施の形態２によれば、バッファ用記憶領域３２１に格納されているデータをターゲット記憶装置３１０に書き戻すことができる。これにより、ターゲット記憶装置３１０とは別の記憶装置を、一時格納用のバッファとして使用することができるので、記憶装置の構成の柔軟性が増し、複数種類の記憶装置を多様な用途で利用することができる。
【００７８】
（実施の形態３）
本発明の実施の形態３では、バッファ用記憶装置３２０を利用してターゲット記憶装置３２０の省電力動作を図る動作について説明する。なお、本実施の形態３に係る記憶装置制御プログラムおよび周辺装置の構成は、実施の形態２と同様である。
【００７９】
以下、本実施の形態３に係る記憶装置制御プログラムの動作を説明する。
【００８０】
（ステップ１）〜（ステップ８）
これらのステップにおける動作は、実施の形態２で説明した（ステップ１）〜（ステップ８）と同様である。
【００８１】
（ステップ９）ターゲット記憶装置３１０を省電力モードへ移行する
ターゲット記憶装置３１０に対し、データ書込コマンドばかりが発行されている状況を仮定する。この場合、ターゲット記憶装置３１０に対する制御コマンドは、全てフィルタドライバ２００によってフィルタリングされ、デバイス連携アプリケーション１００に転送されることになる。すなわち、ターゲット記憶装置３１０は実質的には動作していないかのような状況となる。
【００８２】
本実施の形態３では、この状況を利用し、ターゲット記憶装置３１０を省電力モード（スリープモード）に移行して消費電力を抑制することを図る。具体的には、例えば以下のような手法を用いることができる。
【００８３】
（ステップ９：手法その１）
デバイス連携アプリケーション１００またはフィルタドライバ２００は、ターゲット記憶装置３１０に対して発行される制御コマンドを監視しておく。例えばデータ書込コマンドばかりが所定時間連続して発行されているような状況を検知すると、デバイス連携アプリケーション１００またはフィルタドライバ２００は、ターゲット記憶装置３１０に対して省電力モードに移行すべき旨の制御コマンドを発行する。
【００８４】
（ステップ９：手法その２）
ターゲット記憶装置３１０が自ら、自己に対する制御コマンドが所定時間発行されていないことを検知し、自律的に省電力モードに移行する。
【００８５】
（ステップ１０）バッファ用記憶装置３２０に書き込むデータ量をカウントする
デバイス連携アプリケーション１００は、例えばコマンド変換部１４０がバッファ用記憶装置３２０の中間デバイスドライバ４５０にデータ書込コマンドをセットする際に、そのデータ書込コマンドがバッファ用記憶領域３２１に書き込むデータ量を積算しておく。
【００８６】
（ステップ１１）ターゲット記憶装置３１０を通常モードに戻す
デバイス連携アプリケーション１００は、バッファ用記憶領域３２１に書き込んだデータ量が所定のデータ容量閾値以上となったときなどを基準として、ターゲット記憶装置３１０をスリープモードから通常モードに復帰させる。具体的には、例えば以下のような手法を用いることができる。
【００８７】
（ステップ１１：手法その１）
デバイス連携アプリケーション１００は、ターゲット記憶装置３１０に対して通常モードに移行すべき旨の制御コマンドを発行する。
【００８８】
（ステップ１１：手法その２）
デバイス連携アプリケーション１００は、上記のような制御コマンドは発行せず、次の（ステップ１２）を直接実行する。ターゲット記憶装置３１０は、データ書込コマンドを受け付けると、自律的に通常モードに復帰する。
【００８９】
（ステップ１２）ターゲット記憶装置３１０へデータを戻す
本ステップは、実施の形態２で説明した（ステップ９）と同様である。
【００９０】
以上、本実施の形態３に係る記憶装置制御プログラムの動作を説明した。
【００９１】
なお、省電力化の観点からは、バッファ用記憶装置３２０は消費電力が低い記憶装置を選択することが好ましい。例えば、あらかじめ各記憶装置の仕様を調べておき、好ましい記憶装置をバッファ用記憶装置３２０として選択するように、デバイス連携アプリケーション１００を設定しておくとよい。
【００９２】
以上のように、本実施の形態３によれば、バッファ用記憶装置３２０にデータ書込コマンドを発行している間は、ターゲット記憶装置３１０を省電力モード（スリープモード）に移行することができる。
【００９３】
これにより、ターゲット記憶装置３１０の省電力化を図ることができる。特に、データ書込時の消費電力が高いターゲット記憶装置３１０への書き込み頻度があまり高くない場合に本実施の形態３の手法を用いると、効果的である。
【００９４】
（実施の形態４）
本発明の実施の形態４では、ターゲット記憶装置３１０に対するデータ書込処理の一部をバッファ用記憶装置３２０にも分散する動作例を説明する。
【００９５】
図５は、本実施の形態４に係る記憶装置制御プログラムの構成図である。
【００９６】
本実施の形態４におけるフィルタドライバ２００は、実施の形態２または３で説明した構成に加えて、書込レート算出部２４０を備える。なお図５では、図４の構成に加えて書込レート算出部２４０を設けた例を図示した。その他の構成は、実施の形態２または３と同様である。
【００９７】
書込レート算出部２４０は、ターゲット記憶装置３１０に対する単位時間あたりのデータ書込要求速度（データ書込要求レート）を算出する。書込レート算出部２４０は、フィルタドライバ２００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【００９８】
図６は、書込レート算出部２４０の処理フロー図である。以下、図６の各ステップについて説明する。なお、フィルタドライバ２００のデータ書込コマンド転送部２１０は、既に動作を開始済みであるものとする。
【００９９】
（図６：ステップＳ６００）
書込レート算出部２４０は、例えば所定の時間間隔毎に、本動作フローを開始する。
【０１００】
（図６：ステップＳ６０１）
書込レート算出部２４０は、所定時間内に処理されたデータ書込コマンドのデータ転送要求量を計算する。これは、ターゲット記憶装置３１０に対する同時間内の平均データ書込要求レートを計算していることに相当する。
【０１０１】
（図６：ステップＳ６０２）
書込レート算出部２４０は、ステップＳ６０１で計算したデータ転送要求量が所定のデータ転送要求量閾値以上である場合は、ステップＳ６０３へ進む。データ転送要求量閾値以上ではない場合は、本動作フローを終了する。本ステップは、上記データ書込要求レートが所定のデータ書込要求レート閾値以上であるか否かを判定しているということもできる。
【０１０２】
（図６：ステップＳ６０３）
フィルタドライバ２００のデータ書込コマンド転送部２１０は、ターゲット記憶装置３１０に対するデータ書込コマンドの一部を、デバイス連携アプリケーション１００に転送する。以後の動作は実施の形態１の（ステップ５）の該当部分以後と同様である。
【０１０３】
以上、書込レート算出部２４０の処理フローを説明した。
【０１０４】
なお、データ書込コマンド転送部２１０がデータ書込コマンドの転送を開始した後に、上記図６のステップＳ６０１で計算したデータ書込要求レートが一定の転送レート（例えばデータ転送要求量閾値）以下に低下した際は、以下の追加処理を実行してもよい。
【０１０５】
（追加処理：ステップ１）
デバイス連携アプリケーション１００のフィルタＯＦＦ部１６０は、フィルタドライバ２００のデータ書込コマンド転送部２１０の動作を停止するため、ＯＦＦ部２３０に対してその旨を指示する。ＯＦＦ部２３０は、上記指示を受け取ると、データ書込コマンド転送部２１０の動作を停止させる。
【０１０６】
（追加処理：ステップ２）
デバイス連携アプリケーション１００は、バッファ用記憶領域３２１が格納しているデータを、ターゲット記憶装置３１０に戻す。本ステップの具体的な処理内容は、例えば実施の形態２で説明した（ステップ９）と同様でよい。
【０１０７】
本実施の形態４では、データ書込要求レートが所定の閾値以上となったときに、ターゲット記憶装置３１０に対して大きなデータ書込負荷がかかるものと判断し、データ書込コマンドの一部をバッファ用記憶装置３２０に転送することを説明した。
【０１０８】
一方、データ書込要求レートのみならず、データ読込要求レートなどその他の処理負荷も総和して、ターゲット記憶装置３１０に対して全体的に負荷がかかっているか否かを基準に、コマンドを転送するか否かを判定してもよい。この場合は、図６のステップＳ６０１において、データ書込要求レートに加えてその他の処理要求レートも併せて計算し、ステップＳ６０２では、その総和が所定閾値以上であるか否かを判断するようにするとよい。
【０１０９】
また、本実施の形態４では、データ書込コマンドを転送する例を説明したが、例えばバッファ用記憶装置３２０とターゲット記憶装置３１０の双方に同一の読込対象データが存在しているときは、データ読込コマンドの一部を転送して、データ読込処理の高速化を図ることも考えられる。
【０１１０】
また、本実施の形態４では、実際のデータ書込処理ではなく、データ書込「要求」レートなどを判定基準とした。これは、ストレージ装置の仕様によっては、データ書込「要求」受領後、ＨＤＤ側にデータを転送した時点（ＨＤＤ内部のバッファへのデータ転送が終了しただけでディスクにデータが書き込まれていない状態）でコマンド処理が終了したとみなされる場合があるため、データ書込「要求」が発行された時点での書き込み要求量を基に負荷を求めたものである。実際のデータ書込完了（ディスクへのデータ書き込みの完了）をストレージ装置の外部から把握することができれば、必ずしもデータ書込「要求」レートなどを判定基準としなくともよい。
【０１１１】
以上のように、本実施の形態４によれば、ターゲット記憶装置３１０の処理負荷（例えばデータ書込負荷）が高まったときに、ターゲット記憶装置３１０に対する制御コマンドの一部を、デバイス連携アプリケーション１００を介してバッファ用記憶装置３２０に転送することができる。
【０１１２】
これにより、例えば映像コンテンツのような大容量データをダウンロードして書き込むような負荷の高い処理をターゲット記憶装置３１０が実行する際に、その処理の一部をバッファ用記憶装置３２０に分散することができる。したがって、同処理を複数の記憶装置に分散して高速に処理することができる。
【０１１３】
この手法は、特にモバイル機器のように、機器外部からのデータの移動を高速に行う必要のある機器において有効である。
【０１１４】
（実施の形態５）
本発明の実施の形態５では、ターゲット記憶装置３１０が使用するバッテリー残量に応じて、ターゲット記憶装置３１０に対するデータ書込処理をバッファ用記憶装置３２０に転送する動作例を説明する。これにより、ターゲット記憶装置３１０が電源から切断されてバッテリー動作をしている間に、データ書込が失敗することを防ぐことを図る。
【０１１５】
本実施の形態５では、例えばノートＰＣのようにバッテリー動作を行う可能性のあるコンピューターの記憶装置としてターゲット記憶装置３１０が用いられている状況を想定する。ただし、本実施の形態５はこれに限られるものではなく、ターゲット記憶装置３１０がバッテリー動作をする状況が発生し得る任意の環境において、適用することができる。
【０１１６】
なお、ターゲット記憶装置３１０、またはターゲット記憶装置３１０を備えているコンピューターは、ターゲット記憶装置３１０が使用するバッテリー残量および自己が電源に接続されているか否かを表す信号やデータを外部に提示する機能を有するものとする。
【０１１７】
図７は、本実施の形態５に係る記憶装置制御プログラムの構成図である。本実施の形態５において、デバイス連携アプリケーション１００は、実施の形態１〜４いずれかで説明した構成に加え、バッテリー残量取得部１７０を備える。その他の構成は、実施の形態１〜４いずれかと同様である。なお、図７では、実施の形態２で説明した構成に加えてバッテリー残量取得部１７０を備える構成を図示した。
【０１１８】
バッテリー残量取得部１７０は、ターゲット記憶装置３１０が電力源として使用するバッテリー残量と、各記憶装置の消費電力とを取得する機能を備える。バッテリー残量取得部１７０は、データ連携アプリケーション１００の一部を構成するソフトウェアモジュールなどの形態で実装することができる。
【０１１９】
ここでいうバッテリーとは、ターゲット記憶装置３１０本体が備えているものでもよいし、ターゲット記憶装置３１０を備えるコンピューターが使用するバッテリーでもよい。後者の場合、ターゲット記憶装置３１０は、当該コンピューターから電力供給を受けて動作する。
【０１２０】
各記憶装置の消費電力は、各記憶装置の仕様に基づきあらかじめ適当なファイルなどに各記憶装置の平均消費電力値を記録しておく、などの手法で把握すればよい。
【０１２１】
図８は、バッテリー残量取得部１７０がバッテリー残量を取得する処理に係るフローチャートである。以下、図８の各ステップについて説明する。なお、フィルタドライバ２００のデータ書込コマンド転送部２１０は、既に動作を開始済みであるものとする。
【０１２２】
（図８：ステップＳ８００）
バッテリー残量取得部１７０は、例えば所定の時間間隔毎に本動作フローを開始する。
【０１２３】
（図８：ステップＳ８０１）
バッテリー残量取得部１７０は、ターゲット記憶装置３１０が使用するバッテリー残量を取得する。取得したバッテリー残量が所定のバッテリー残量閾値以下である場合は、ステップＳ８０２へ進む。バッテリー残量閾値以下ではない場合、あるいはバッテリー残量閾値以下であってもターゲット記憶装置３１０が電源に接続されている場合は、本動作フローを終了する。
【０１２４】
（図８：ステップＳ８０２）
フィルタドライバ２００のデータ書込コマンド転送部２１０は、ターゲット記憶装置３１０に対するデータ書込コマンドを、デバイス連携アプリケーション１００に転送する。また、バッテリー残量取得部１７０は、各記憶装置の消費電力を、デバイス連携アプリケーション１００に報告する。
【０１２５】
デバイス連携アプリケーション１００は、消費電力の最も少ないバッファ用記憶装置３２０を選択する。
【０１２６】
デバイス連携アプリケーション１００は、上記選択したバッファ用記憶装置３１０に対して、実施の形態１の（ステップ５）の該当部分以後と同様の手順を実行する。
【０１２７】
以上、バッテリー残量取得部１７０がバッテリー残量を取得する処理に係るフローチャートを説明した。なお、バッファ用記憶装置３２０が電源に接続されていることが明らかである場合は、ステップＳ８０２において、必ずしも消費電力の低いバッファ用記憶装置３２０を選択する必要はない。
【０１２８】
図９は、バッファ用記憶装置３２０に書き込まれたデータをターゲット記憶装置３１０に書き戻す際の動作フローである。以下、図９の各ステップについて説明する。
【０１２９】
（図９：ステップＳ９００）
バッテリー残量取得部１７０は、例えば所定の時間間隔毎に本動作フローを開始する。
【０１３０】
（図９：ステップＳ９０１）
バッテリー残量取得部１７０は、図８の動作の後、ターゲット記憶装置３１０が再び電源に接続されたか否かを判定する。必ずしもターゲット記憶装置３１０本体が直接電源に接続されている必要はなく、バッテリーを使用せずに動作し得る状態にあるか否かを判定すればよい。ターゲット記憶装置３１０、またはターゲット記憶装置３１０を備えるコンピューターは、バッテリー残量取得部１７０に対し、ターゲット記憶装置３１０がバッテリー動作をしているか否かを返答する。ターゲット記憶装置３１０が電源に接続されている場合はステップＳ９０２へ進む。接続されていない場合は、本動作フローを終了する。
【０１３１】
（図９：ステップＳ９０２）
デバイス連携アプリケーション１００は、バッファ用記憶領域３２１が格納しているデータをターゲット記憶装置３１０へ戻す。本ステップの具体的な処理内容は、実施の形態２で説明した（ステップ９）と同様である。
【０１３２】
以上、ターゲット記憶装置３１０が再び電源に接続された際の動作フローを説明した。本実施の形態５では、ノートＰＣのような単一のコンピューターにターゲット記憶装置３１０とバッファ用記憶装置３２０が接続され、ノートＰＣがバッテリー動作を開始するとこれらの記憶装置もバッテリー動作を行う状況を想定した。本実施の形態５の適用対象はこれに限られるものではなく、例えばネットワーク接続型の記憶装置が電源から切断されてバッテリー動作をするような状況でも、適用することができる。
【０１３３】
以上のように、本実施の形態５によれば、ターゲット記憶装置３１０が電源から切断されてバッテリー動作をしている間は、バッファ用記憶装置３２０にデータを書き込むことができる。これにより、ターゲット記憶装置３１０が急に電源から切断されてバッテリー動作を開始したような場合でも、書込データが消失する懸念が減少するので、ターゲット記憶装置３１０の信頼性を高めることができる。
【０１３４】
また、本実施の形態５によれば、デバイス連携アプリケーション１００は、ターゲット記憶装置３１０が再び電源に接続されたときは、バッファ用記憶領域３２１に書き込まれているデータをターゲット記憶装置３１０に戻す。
【０１３５】
これにより、ターゲット記憶装置３１０の電源状態が復帰した時点で、速やかにデータを元の状態に戻すことができるので、ターゲット記憶装置３１０内のデータの時間的連続性を保つことができる。
【０１３６】
（実施の形態６）
本発明の実施の形態６では、ターゲット記憶装置３１０にエラーが発生した際に、ターゲット記憶装置３１０に書き込むデータをバッファ用記憶装置３２０にも同時に書き込んで信頼性の向上を図る動作例を説明する。
【０１３７】
図１０は、本実施の形態６に係る記憶装置制御プログラムの構成図である。
【０１３８】
本実施の形態６において、フィルタドライバ２００は、実施の形態１〜５いずれかで説明した構成に加え、エラー検出部２５０、コマンド複製部２６０を備える。その他の構成は、実施の形態１〜５いずれかと同様である。なお、図１０では、実施の形態２で説明した構成に加えてエラー検出部２５０とコマンド複製部２６０を備える構成を図示した。
【０１３９】
エラー検出部２５０は、ターゲット記憶装置３１０にエラーが発生したときに、これを検出する。例えば、データ書込コマンドがエラー終了した場合などが相当する。
【０１４０】
エラー検出部２５０は、ターゲット記憶装置３１０に任意の種類のエラーが１度でも発生すればこれをエラーとして取り扱ってもよいし、ある特定の種類のエラー、例えばデータ書込コマンドのエラーのみを監視してもよい。また、エラーが１回発生したのみの時点ではこれをエラーとして取り扱わず、所定時間内のエラー発生回数が任意の閾値以上となったときなど、エラーがある程度連続して発生しているときに、初めてエラーが発生しているものと判定してもよい。
【０１４１】
コマンド複製部２６０は、ターゲット記憶装置３１０に対する制御コマンドを複製し、デバイス連携アプリケーション１００に転送する。
【０１４２】
コマンド複製部２６０は、ターゲット記憶装置３１０に対する任意の制御コマンドを複製するようにしてもよいし、特定種類の制御コマンド、例えばデータ書込コマンドのみを複製するようにしてもよい。以下の説明では、データ書込コマンドのみを複製するものとする。
【０１４３】
図１１は、ターゲット記憶装置３１０のエラー検出に伴うコマンド複製処理に係る処理フローである。以下、図１１の各ステップについて説明する。
【０１４４】
（図１１：ステップＳ１１００）
フィルタドライバ２００は、例えば所定の時間間隔毎に本動作フローを開始する。
【０１４５】
（図１１：ステップＳ１１０１）
フィルタドライバ２００のエラー検出部２５０は、ターゲット記憶装置３１０にエラーが発生しているか否かを判定する。エラーが発生している場合はステップＳ１１０２へ進む。エラーが発生していない場合は、本動作フローを終了する。
【０１４６】
（図１１：ステップＳ１１０２）
コマンド複製部２６０は、ターゲット記憶装置３１０に対するデータ書込コマンドを複製し、デバイス連携アプリケーション１００に転送する。
【０１４７】
（図１１：ステップＳ１１０３）
デバイス連携アプリケーション１００のコマンド変換部１４０は、実施の形態１の（ステップ５）以降と同様の処理を実行する。また、データ連携アプリケーション１００は、複製元のデータ書込コマンドを、ターゲット記憶装置３１０の中間デバイスドライバ４２０にセットする。
【０１４８】
以上、ターゲット記憶装置３１０のエラー検出に伴うコマンド複製処理に係るフローを説明した。
【０１４９】
以上の動作によって、ターゲット記憶装置３１０に対するデータ書込コマンドは、そのままターゲット記憶装置３１０に対して実行されるとともに、バッファ用記憶装置３２０に対しても同時に実行されることになる。
【０１５０】
以上のように、本実施の形態６によれば、ターゲット記憶装置３１０にエラーが発生した際は、ターゲット記憶装置３１０に対するデータ書込コマンドは、バッファ用記憶装置３２０に対しても同時に発行されることになる。
【０１５１】
これにより、エラー終了する可能性のあるデータ書込コマンドを実行する際は、その書込対象データをバッファ用記憶装置３２０へミラーリングすることができるので、ターゲット記憶装置３１０の信頼性を高めることができる。
【０１５２】
（実施の形態７）
本発明の実施の形態７では、バッファ用記憶領域３２１を確保する際の別動作例について説明する。その他の構成は、実施の形態１〜６のいずれかと同様である。
【０１５３】
本実施の形態７において、データ連携アプリケーション１００のバッファ領域確保部１２０は、バッファ用記憶装置３２０を備えるコンピューターのファイルシステムを介さずに、バッファ用記憶領域３２１を確保する。これにより、バッファ用記憶装置３２０を備えるコンピューターのＯＳは、データ連携アプリケーション１００を介することなくバッファ用記憶領域３２１にデータを書き込むことができなくなる。
【０１５４】
上記の結果、バッファ用記憶装置３２０を備えるコンピューター上の他のアプリケーションが、バッファ用記憶領域３２１に書き込まれているデータを上書きしたり、バッファ用記憶領域３２１に他のデータを書き込んでバッファ用記憶領域３２１の容量を消費したりすることがなくなる。そのため、バッファ用記憶領域３２１は、データ連携アプリケーション１００以外のアプリケーションからのデータ書込による影響を受けることはない。
【０１５５】
なお、書き込み効率の観点から、バッファ領域確保部１２０は、ブロック単位でアクセス可能な領域をバッファ用記憶領域３２１として確保することが好適であるが、必ずしもこれに限られるものではない。
【０１５６】
以上のように、本実施の形態７において、バッファ領域確保部１２０は、ＯＳのファイルシステムを介さずにバッファ用記憶領域３２１を確保する。これにより、データ連携アプリケーション１００は、バッファ用記憶装置３２０に接続されたコンピューター上で他のアプリケーション等が動作している場合でも、バッファ用記憶領域３２１を確実に確保することができる。
【０１５７】
（実施の形態８）
以上の実施の形態１〜７では、中間デバイスドライバ４２０および４５０が取り扱うレベルの制御コマンドについて、転送したりコマンド形式を変換したりする例を説明した。本発明の対象はこれに限られるものでなく、各記憶装置に対する任意のレベルのコマンドを対象とすることができることを付言しておく。
【０１５８】
（実施の形態９）
以上の実施の形態１〜８において、バッファ用記憶領域３２１が格納しているデータをターゲット記憶装置３１０に書き戻した後は、バッファ用記憶領域３２１内のデータを削除してもよい。また、これに代えてもしくはこれと平行して、バッファ用記憶領域３２１を解放してもよい。これにより、バッファ用記憶装置３２０の記憶容量の消費を抑えることができる。
【実施例】
【０１５９】
以上の実施の形態１〜９では、本発明に係る記憶装置制御プログラムを実行するコンピューターが、ターゲット記憶装置３１０とバッファ用記憶装置３２０に接続されている例を説明した。以下では、当該コンピューターと各記憶装置の構成について、具体例を挙げる。
【０１６０】
（構成具体例１：ノートＰＣ）
本発明に係る記憶装置制御プログラムを実行するコンピューターとして、ノートＰＣを用いることができる。
【０１６１】
ターゲット記憶装置３１０は、当該ノートＰＣが備えるＨＤＤである。バッファ用記憶装置３２０として、当該ノートＰＣが備える他のＨＤＤ、例えば１つ目のＨＤＤとは異なるインターフェースで当該ノートＰＣに接続された内蔵ＨＤＤを用いることが考えられる。あるいは、ＵＳＢメモリなどの外付け記憶装置をバッファ用記憶装置３２０として用いることも考えられる。
【０１６２】
（構成具体例２：ネットワーク接続記憶装置）
ターゲット記憶装置３１０およびバッファ用記憶装置３２０として、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）を用いることも考えられる。この場合、本発明に係る記憶装置制御プログラムを実行するコンピューターとして、ネットワークを介してＮＡＳと接続されたコンピューターを用いることができる。
【０１６３】
（構成具体例３：ＳＡＮ）
ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を構成する各ストレージ装置をターゲット記憶装置３１０およびバッファ用記憶装置３２０として用いることも考えられる。この場合、本発明に係る記憶装置制御プログラムを実行するコンピューターとして、ＳＡＮのコントローラーを用いることができる。
【０１６４】
（構成例４：ＵＰＳ（無停電電源装置））
上記実施の形態５において、バッテリー動作する記憶装置の１例として、ＵＰＳから電力の供給を受けて動作しているＮＡＳ等の記憶装置が考えられる。例えば、ターゲット記憶装置３１０、バッファ用記憶装置３２０がともに使用する電源が故障によって遮断されてＵＰＳにより動作している状況を想定する。
【０１６５】
全ての記憶装置がＵＰＳによって動作をしている場合、できる限りＵＰＳの消耗を抑えるため、極力消費電力の少ない記憶装置をバッファ用記憶装置３２０として選択することが望ましい。実施の形態５で説明した手法は、このような状況下で有用である。
【０１６６】
この場合、ターゲット記憶装置３１０としてのＮＡＳが使用する電源が故障等から復帰した時点で、バッファ用記憶装置３２０からターゲット記憶装置３１０にデータを書き戻すことになる。
【符号の説明】
【０１６７】
１００：デバイス連携アプリケーション、１１０：データ書込コマンド生成部、１２０：バッファ領域確保部、１３０：アドレス管理部、１４０：コマンド変換部、１５０：フィルタＯＮ部、１６０：フィルタＯＦＦ部、１７０：バッテリー残量取得部、２００：フィルタドライバ、２１０：データ書込コマンド転送部、２２０：ＯＮ部、２３０：ＯＦＦ部、２４０：書込レート算出部、２５０：エラー検出部、２６０：コマンド複製部、３１０：ターゲット記憶装置、３２０：バッファ用記憶装置、３２１：バッファ用記憶領域、４１０：上位デバイスドライバ、４２０：中間デバイスドライバ、４３０：物理デバイスドライバ、４４０：上位デバイスドライバ、４５０：中間デバイスドライバ、４６０：物理デバイスドライバ、４７０：ＩＯマネージャー。
【図１】
2010287097.tif 000003
【図２】
2010287097.tif 000004
【図３】
2010287097.tif 000005
【図４】
2010287097.tif 000006
【図５】
2010287097.tif 000007
【図６】
2010287097.tif 000008
【図７】
2010287097.tif 000009
【図８】
2010287097.tif 000010
【図９】
2010287097.tif 000011
【図１０】
2010287097.tif 000012
【図１１】
2010287097.tif 000013