(57)【要約】  ＣＰＵ８０は、第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行う。メインメモリ９０は、第一のデバイスから第二のデバイスへ転送されるデータを記憶する。ＣＰＵ８０は、第一のデバイスを制御する第一デバイス制御手段８１と、第二のデバイスを制御する第二デバイス制御手段と、第一のデバイスから読み取ったデータをメインメモリ３に記憶させる指示である読み取り指示を第一デバイス制御手段８１に対して行い、メインメモリ３に記憶されたデータを第二のデバイスに書き込む指示である書き込み指示を第二デバイス制御手段８２に対して行うデータ転送制御手段８３とを含む。
2012117701.tif 000002
【特許請求の範囲】
【請求項１】
第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵと、
前記第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリとを備え、
前記ＣＰＵは、
前記第一のデバイスを制御する第一デバイス制御手段と、
前記第二のデバイスを制御する第二デバイス制御手段と、
前記第一のデバイスから読み取ったデータを前記メインメモリに記憶させる指示である読み取り指示を前記第一デバイス制御手段に対して行い、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示である書き込み指示を前記第二デバイス制御手段に対して行うデータ転送制御手段とを含む
ことを特徴とするデータ制御システム。
【請求項２】
データ転送制御手段は、第二のデバイスに書き込む指示を行う前に、メインメモリに記憶されたデータに対して予め定められた処理を行う
請求項１記載のデータ制御システム。
【請求項３】
データ転送制御手段は、第一のデバイスから第二のデバイスへのデータ転送要求が行われたときに、要求されたデータ量の転送が完了するまで、第一デバイス制御手段に対する読み取り指示および第二のデバイスに対する書き込み指示を繰り返す
請求項１または請求項２記載のデータ制御システム。
【請求項４】
メインメモリに、転送されるデータを記憶する領域を確保する領域確保手段と、
前記領域を解放する領域解放手段とを備えた
請求項１から請求項３のうちのいずれか１項に記載のデータ制御システム。
【請求項５】
メインメモリは、
読み取り指示を示す読み取り指示コマンドおよび書き込み指示を示す書き込み指示コマンドを記憶する指示コマンド記憶手段と、
メインメモリ内における転送データの記憶先を示すリストである記憶先リストを記憶する記憶先リスト記憶手段とを含み、
データ転送制御手段は、前記読み取り指示コマンドおよび前記書き込み指示コマンドを作成して前記指示コマンド記憶手段に記憶させ、前記記憶先リストを作成して前記記憶先リスト記憶手段に記憶させ、
第一デバイス制御手段は、前記指示コマンド記憶手段に記憶された読み取り指示コマンドおよび記憶先リストに基づいて、第一のデバイスから読み取ったデータを当該記憶先リストが示す記憶先に記憶させ、
第二デバイス制御手段は、前記指示コマンド記憶手段に記憶された書き込み指示コマンドおよび記憶先リストに基づいて、当該記憶先リストが示す記憶先から読み取ったデータを第二のデバイスに書き込む
請求項１から請求項４のうちのいずれか１項に記載のデータ制御システム。
【請求項６】
第一のデバイスおよび第二のデバイスの管理情報が記憶された位置を示すアドレスである管理情報アドレスを、当該第一のデバイスおよび第二のデバイスの名前と対応付けて記憶する管理情報アドレス記憶手段を備え、
データ転送制御手段は、前記管理情報アドレスが示す位置に記憶された管理情報に基づいて、読み取り指示コマンドおよび書き込み指示コマンドを作成する
請求項５記載のデータ制御システム。
【請求項７】
メインメモリは、転送データを記憶する複数のバッファを含み、
データ転送制御手段は、前記バッファごとに第一デバイス制御手段に対する読み取り指示を並列に行い、前記バッファごとに第二デバイス制御手段に対する書き込み指示を並列に行う
請求項１から請求項６のうちのいずれか１項に記載のデータ制御システム。
【請求項８】
ＣＰＵは、第一のストレージデバイスから第二のストレージデバイスへのデータコピー制御をカーネルモードで行い、
メインメモリは、前記第一のストレージデバイスから第二のストレージデバイスへコピーされるデータを記憶し、
第一デバイス制御手段は、前記第一のストレージデバイスを制御し、
第二デバイス制御手段は、前記第二のストレージデバイスを制御する
請求項１から請求項７のうちのいずれか１項に記載のデータ制御システム。
【請求項９】
第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵが、当該第一のデバイスから読み取ったデータをメインメモリに記憶させる指示を、自ＣＰＵに備えた当該第一のデバイスを制御する第一デバイス制御手段に対して行い、
前記ＣＰＵが、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示を、自ＣＰＵに備えた当該第二のデバイスを制御する第二デバイス制御手段に対して行う
ことを特徴とするデータ制御方法。
【請求項１０】
第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵおよび前記第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリを備えたコンピュータに適用されるデータ制御用プログラムであって、
前記コンピュータに、
前記第一のデバイスを制御する第一デバイス制御処理、
前記第二のデバイスを制御する第二デバイス制御処理、および、
前記第一のデバイスから読み取ったデータを前記メインメモリに記憶させる指示である読み取り指示を前記第一デバイス制御処理で実行させ、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示である書き込み指示を前記第二デバイス制御処理で実行させるデータ転送制御処理
を実行させるためのデータ制御用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２つのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイス間で高速にデータ移動させる制御を行うデータ制御システム、データ制御方法およびデータ制御用プログラムに関する。
【背景技術】
【０００２】
特許文献１には、主記憶を介さずにＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）インタフェースからＤＶＤデコーダへ直接的に動画データを転送できるコンピュータシステムが記載されている。特許文献１に記載されたコンピュータシステムでは、ＤＶＤデコーダにＩ／Ｏリードトランザクションを開始できるマスタトランザクション制御部を設け、さらに、ＤＶＤ制御ドライバによってＤＶＤデコーダとＤＶＤインタフェースの両方を制御する。このような構成により、主メモリを経由せず、ＤＶＤインタフェースからＤＶＤデコーダに動画データがダイレクトに転送される。【０００３】
特許文献２には、複数のデバイスに対する複数の入出力コマンドを１回の入出力命令で実行できる計算機システムが記載されている。特許文献２に記載された計算機システムでは、入出力アダプタがＣＰＵからの入出力コマンドを受け取ることで入出力動作を開始する。入出力アダプタは、データ送信の場合に、記憶ユニットから指定されたデータを該当する入出力制御装置に転送し、データ受信の場合に、その入出力制御装置から記憶ユニットの指定エリアにデータを転送する。ここで、入出力制御装置はデータを格納するためのバッファを備えている。【０００４】
なお、特許文献３には、業務を停止することなくファームウェア置換を行うストレージサブシステムが記載されている。特許文献３に記載されたシステムでは、ＣＰＵがメモリ領域にデータキャッシュ領域を確保し、ディスク制御部を制御することにより、論理ディスクからデータを読み出す。そして、ＣＰＵは、読み出したデータをメモリ領域のデータキャッシュ領域に格納する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−１４３４３７号公報
【特許文献２】特開平８−４４６５２号公報
【特許文献３】特開２００９−２３０４８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載されたコンピュータシステムを利用した一般的なシステムの例を説明する。図１５は、特許文献１に記載されたコンピュータシステムを利用した一般的なデータ転送システムの例を示す説明図である。図１５に例示するシステムは、ＣＰＵ１と、メインメモリ３と、ＤＶＤデコーダ４０６と、ＤＶＤインタフェース４０７と、それぞれのデバイスを接続するブリッジ２とを備えている。【０００７】
ＤＶＤデコーダ４０６と、ＤＶＤインタフェース４０７とは、ＰＣＩ（Peripheral Component Interconnect ）エクスプレスバス５０１およびＰＣＩエクスプレスバス５０２により、それぞれブリッジ２に接続されている。【０００８】
メインメモリ３は、プログラム３０５を記憶している。プログラム３０５は、ＣＰＵ１に読み込まれ、アプリケーション動作部１１１、オペレーティングシステム動作部１１２およびＤＶＤ制御ドライバ動作部１１３として動作する。また、アプリケーション１１１動作部は、動画データの再生を行うプログラムに従って動作する。ＤＶＤ制御ドライバ動作部１１３は、ＤＶＤデコーダ４０６と、ＤＶＤインタフェース４０７とを制御する。このような構成を有する一般的なシステムは、次のように動作する。【０００９】
すなわち、アプリケーション動作部１１１が動画データの再生要求を行うと、ＤＶＤ制御ドライバ動作部１１３は、ＤＶＤインタフェース４０７にデータ転送の準備を指示する。続いて、ＤＶＤ制御ドライバ動作部１１３は、ＤＶＤインタフェース４０７から動画データをリードするためのＩ／ＯトランザクションをＤＶＤデコーダ４０６に開始する指示を行う。これにより、動画データがＤＶＤインタフェース４０７からＤＶＤデコーダ４０６に直接転送される。【００１０】
この一般的なシステムでは、ＤＶＤインタフェース４０７からＤＶＤデコーダ４０６にメインメモリ３を介さず直接データ転送が行われることにより、バストラフィックを削減できる。また、この一般的なシステムでは、ソフトウェアを仲介するデータ転送が行われないため、高速なデータ転送を実現している。【００１１】
しかし、特許文献１に記載されたシステムの場合、直接データ転送を行う動作に対応していない２つのＩ／Ｏデバイスの間では、高速なデータ転送が実現できないという問題がある。すなわち、特許文献１に記載されたシステムのように、ＰＣＩエクスプレスバスに接続される２つのＩ／Ｏデバイスが直接データ転送を行う場合、Ｉ／Ｏデバイスがその転送処理に対応しなければならないという問題がある。通常、Ｉ／Ｏデバイスは、ＣＰＵで動作するデバイスドライバに制御され、メインメモリとの間でのみデータ転送を行うため、２つのＩ／Ｏデバイスの間で直接データ転送を行う動作に対応していないからである。【００１２】
また、特許文献２に記載された計算機システムでは、あるＩ／Ｏデバイスから別のＩ／Ｏデバイスにデータを移動させる場合、Ｉ／Ｏデバイスの処理を代替させる入出力アダプタのような別デバイスをシステムに導入する必要がある。【００１３】
そのため、特許文献２に記載された計算機システムのように、直接データ転送を行う動作に対応していないＩ／Ｏデバイス間の転送処理においても、オーバヘッドを削減し高速にデータ転送を行えることが望ましい。【００１４】
そこで、本発明は、直接データ転送を行う動作に対応していない２つのＩ／Ｏデバイスの間で高速にデータ転送を行うことができるデータ制御システム、データ制御方法およびデータ制御用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明によるデータ制御システムは、第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵと、第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリとを備え、ＣＰＵが、第一のデバイスを制御する第一デバイス制御手段と、第二のデバイスを制御する第二デバイス制御手段と、第一のデバイスから読み取ったデータをメインメモリに記憶させる指示である読み取り指示を第一デバイス制御手段に対して行い、メインメモリに記憶されたデータを第二のデバイスに書き込む指示である書き込み指示を第二デバイス制御手段に対して行うデータ転送制御手段とを含むことを特徴とする。【００１６】
本発明によるデータ制御方法は、第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵが、その第一のデバイスから読み取ったデータをメインメモリに記憶させる指示を、自ＣＰＵに備えたその第一のデバイスを制御する第一デバイス制御手段に対して行い、ＣＰＵが、メインメモリに記憶されたデータを第二のデバイスに書き込む指示を、自ＣＰＵに備えたその第二のデバイスを制御する第二デバイス制御手段に対して行うことを特徴とする。【００１７】
本発明によるデータ制御用プログラムは、第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵおよび第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリを備えたコンピュータに適用されるデータ制御用プログラムであって、コンピュータに、第一のデバイスを制御する第一デバイス制御処理、第二のデバイスを制御する第二デバイス制御処理、および、第一のデバイスから読み取ったデータをメインメモリに記憶させる指示である読み取り指示を第一デバイス制御処理で実行させ、メインメモリに記憶されたデータを第二のデバイスに書き込む指示である書き込み指示を第二デバイス制御処理で実行させるデータ転送制御処理を実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、直接データ転送を行う動作に対応していない２つのＩ／Ｏデバイスの間で高速にデータ転送を行うことができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態におけるデータ制御システムの例を示すブロック図である。
【図２】Ｉ／Ｏデータ転送ドライバ動作部の例を示すブロック図である。
【図３】データメモリの例を示す説明図である。
【図４】第１の実施形態におけるデータ制御システムの動作例を示すフローチャートである。
【図５】第１の実施形態におけるデータ制御システムの他の動作例を示すフローチャートである。
【図６】第１の実施形態におけるデータ制御システムの他の動作例の一部を示すフローチャートである。
【図７】本発明の第２の実施形態におけるデータ制御システムの例を示すブロック図である。
【図８】Ｉ／Ｏデータ転送ドライバ動作部の例を示すブロック図である。
【図９】本発明の第３の実施形態におけるデータ制御システムの例を示すブロック図である。
【図１０】ストレージコピードライバ動作部の例を示すブロック図である。
【図１１】第３の実施形態におけるデータ制御システムの動作例を示すフローチャートである。
【図１２】第３の実施形態におけるデータ制御システムの他の動作例を示すフローチャートである。
【図１３】第３の実施形態におけるデータ制御システムの他の動作例の一部を示すフローチャートである。
【図１４】本発明によるデータ制御システムの最小構成の例を示すブロック図である。
【図１５】一般的なデータ転送システムの例を示す説明図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施形態を図面を参照して説明する。
【００２１】
実施形態１．
図１は、本発明の第１の実施形態におけるデータ制御システムの例を示すブロック図である。本実施形態におけるデータ制御システムは、ＣＰＵ１と、メインメモリ３と、第１のＩ／ＯデバイスであるＩ／Ｏデバイス４０１と、第２のＩ／ＯデバイスであるＩ／Ｏデバイス４０２と、それぞれのＩ／Ｏデバイスを接続するブリッジ２とを含む。なお、本実施形態では、Ｉ／Ｏデバイス４０１からＩ／Ｏデバイス４０２へデータ転送が行われるものとする。
【００２２】
Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２は、例えば、ＳＣＳＩ（Small Computer System Interface ）やＳＡＴＡ（Serial Advanced Technology Attachment ）に代表される規格に従うストレージデバイスや、ネットワークインタフェースなどであり、ＰＣＩエクスプレスに準拠するインタフェースを保持するＩ／Ｏデバイスである。Ｉ／Ｏデバイス４０１はＰＣＩエクスプレスバス５０１を介して、また、Ｉ／Ｏデバイス４０２はＰＣＩエクスプレスバス５０２を介して、それぞれブリッジ２に接続される。
【００２３】
メインメモリ３は、Ｉ／Ｏデータ転送メモリ３０１を含む。Ｉ／Ｏデータ転送メモリ３０１は、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２との間のデータ転送のために使用される。
【００２４】
Ｉ／Ｏデータ転送メモリ３０１は、Ｉ／Ｏコマンドメモリ３０１１と、ＤＭＡリストメモリ３０１２と、データメモリ３０１３とを有する。Ｉ／Ｏコマンドメモリ３０１１は、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２とに発行するＩ／Ｏコマンドを記憶する領域である。データメモリ３０１３は、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２との間で転送するデータのバッファ領域である。ＤＭＡリストメモリ３０１２は、Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２がデータメモリ３０１３に対し、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によってデータ通信を行うために、データメモリ３０１３におけるアドレスをリスト化した情報を記憶する領域である。
【００２５】
また、メインメモリ３は、プログラム３０２を記憶する。プログラム３０２は、ＣＰＵ１に読み込まれ、後述するＩ／Ｏデータ転送アプリケーション動作部１０１と、オペレーティングシステム動作部１０２と、Ｉ／Ｏデータ転送ドライバ動作部１０３と、Ｉ／Ｏデバイス４０１を制御するＩ／Ｏデバイスドライバ動作部１０４と、Ｉ／Ｏデバイス４０２を制御するＩ／Ｏデバイスドライバ動作部１０５として動作する。
【００２６】
ＣＰＵ１は、Ｉ／Ｏデータ転送アプリケーション動作部１０１と、オペレーティングシステム動作部１０２と、Ｉ／Ｏデータ転送ドライバ動作部１０３と、Ｉ／Ｏデバイスドライバ動作部１０４と、Ｉ／Ｏデバイスドライバ動作部１０５と、Ｉ／Ｏデバイステーブル記憶部１１４とを含む。
【００２７】
Ｉ／Ｏデバイステーブル記憶部１１４は、データ転送を行う対象であるＩ／Ｏデバイス４０１とＩ／Ｏデバイス４０２の情報を記憶する。具体的には、Ｉ／Ｏデバイステーブル記憶部１１４は、Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２の名前を、オペレーティングシステム動作部１０２が保持するＩ／Ｏデバイス４０１およびＩ／Ｏデバイス２の管理情報が記憶された位置を示すアドレス（以下、管理情報アドレスと記す。）に対応づけて記憶する。なお、デバイスの管理情報には、例えば、デバイスの属性やアクセスモードなどが含まれる。
【００２８】
Ｉ／Ｏデータ転送アプリケーション動作部１０１は、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２との間のデータ転送要求をＩ／Ｏデータ転送ドライバ動作部１０３に行う。データ転送要求は、例えば、ユーザや他の装置等により指示される。
【００２９】
オペレーティングシステム動作部１０２は、Ｉ／Ｏデータ転送ドライバ動作部１０３と、Ｉ／Ｏデバイスドライバ動作部１０４と、Ｉ／Ｏデバイスドライバ動作部１０５とを、ドライバソフトウェアとして動作させる。また、オペレーティングシステム動作部１０２は、デバイス名と管理情報アドレスとを対応づけた情報をＩ／Ｏデバイステーブル記憶部１１４に作成する。オペレーティングシステム動作部１０２は、例えば、Ｉ／Ｏデバイスが接続されたときに、その接続されたＩ／Ｏデバイスのデバイス名と、そのデバイスの管理情報を記憶したアドレスとを対応づけてＩ／Ｏデバイステーブル記憶部１１４に記憶させてもよい。
【００３０】
Ｉ／Ｏデータ転送ドライバ動作部１０３は、Ｉ／Ｏデバイス４０１からＩ／Ｏデバイス４０２へのデータ転送制御を行う。図２は、Ｉ／Ｏデータ転送ドライバ動作部１０３の例を示すブロック図である。本実施形態におけるＩ／Ｏデータ転送ドライバ動作部１０３は、転送制御プログラム動作部１０３１と、メモリ確保プログラム動作部１０３２と、メモリ解放プログラム動作部１０３３と、Ｉ／Ｏデータ処理プログラム動作部１０３４とを含む。
【００３１】
なお、本実施形態では、オペレーティングシステム動作部１０２とＩ／Ｏデータ転送ドライバ動作部１０３とが、それぞれ別に実装されている場合を例示している。この実装の一例は、Ｉ／Ｏデータ転送ドライバ動作部１０３をデバイスドライバとして実装する方式である。この実装により、オペレーティングシステム動作部１０２への機能追加に伴う変更を小規模に抑えることが可能になる。また、Ｉ／Ｏデータ転送ドライバ動作部１０３とオペレーティングシステム動作部１０２とが一体に実装されていてもよい。この場合、１つのソフトウェアとして管理することができるため、開発や管理が容易となる。
【００３２】
転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２にＩ／Ｏコマンドを発行することで、Ｉ／Ｏデバイス間のデータ転送を行う。転送制御プログラム動作部１０３１は、ＣＰＵ１が転送制御用プログラムを読み込むことにより動作する。
【００３３】
メモリ確保プログラム動作部１０３２は、転送制御プログラム動作部１０３１から呼び出され、メインメモリ３におけるＩ／Ｏデータ転送メモリ３０１を確保する。メモリ確保プログラム動作部１０３２は、ＣＰＵ１がメモリ確保用プログラムを読み込むことにより動作する。
【００３４】
メモリ解放プログラム動作部１０３３は、転送制御プログラム動作部１０３１から呼び出され、Ｉ／Ｏデータ転送メモリ３０１を解放する。メモリ解放プログラム動作部１０３３は、ＣＰＵ１がメモリ解放用プログラムを読み込むことにより動作する。
【００３５】
Ｉ／Ｏデータ処理プログラム動作部１０３４は、転送制御プログラム動作部１０３１から呼び出され、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２との間で転送されるデータに対して処理を行う。Ｉ／Ｏデータ処理プログラム動作部１０３４は、ＣＰＵ１がＩ／Ｏデータ処理用プログラムを読み込むことにより動作する。
【００３６】
このように、Ｉ／Ｏデータ転送ドライバ動作部１０３は、転送制御用プログラム、メモリ確保用プログラム、メモリ解放用プログラムおよびＩ／Ｏデータ処理用プログラムを読み込み、これらのプログラムに従って動作する。その際、Ｉ／Ｏデータ転送ドライバ動作部１０３は、ＣＰＵ１のカーネルモードで動作する。なお、転送制御用プログラム、メモリ確保用プログラム、メモリ解放用プログラムおよびＩ／Ｏデータ処理用プログラムを含むプログラムを、データ制御用プログラムと記すこともある。
【００３７】
以下、Ｉ／Ｏデータ転送ドライバ動作部１０３におけるそれぞれの動作部について詳しく説明する。転送制御プログラム動作部１０３１は、Ｉ／Ｏデータ転送アプリケーション動作部１０１からの要求を受け付け、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２との間のデータ転送を行う。
【００３８】
具体的には、転送制御プログラム動作部１０３１は、メモリ確保プログラム動作部１０３２を呼出し、メインメモリ３にＩ／Ｏデータ転送メモリ３０１を確保する。また、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイステーブル記憶部１１４を参照し、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２の名前から、これらのデバイスに対してオペレーティングシステム動作部１０２が保持する管理情報のアドレスを検索する。
【００３９】
さらに、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１に対するデータリードコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。また、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１から読み取る（以下、リードする、と記す。）データの書き込み先であるデータメモリ３０１３のアドレスリストをＤＭＡリストメモリ３０１２に作成する。そして、転送制御プログラム動作部１０３１は、それらのデータ（具体的には、データリードコマンドおよびＤＭＡリスト）をＩ／Ｏデバイスドライバ動作部１０４に渡すことでＩ／Ｏリード要求を行う。なお、転送制御プログラム動作部１０３１は、オペレーティングシステム動作部１０２が保持する管理情報のアドレスを用いてデータリードコマンドを作成する。
【００４０】
このようにして、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１から読み取ったデータをデータメモリ３０１３に記憶させる指示をＩ／Ｏデバイスドライバ動作部１０４に対して行う。
【００４１】
また、転送制御プログラム動作部１０３１は、必要に応じ、Ｉ／Ｏデバイス４０１からリードされデータメモリ３０１３に記憶されたデータに対して、フォーマット変換や圧縮など、予め定められたデータ処理をＩ／Ｏデータ処理プログラム動作部１０３４に要求してもよい。なお、フォーマット変換や圧縮などは、予め定められたデータ処理の例示であり、転送制御プログラム動作部１０３１が要求するデータ処理は、フォーマット変換や圧縮以外の他のデータ処理であってもよい。
【００４２】
さらに、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０２に対するデータライトコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。また、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０２に書き込む（以下、ライトする、と記す。）データの書き込み先であるデータメモリ３０１３のアドレスリストをＤＭＡリストメモリ３０１２に作成する。そして、転送制御プログラム動作部１０３１は、それらのデータ（具体的には、データライトコマンドおよびＤＭＡリスト）をＩ／Ｏデバイスドライバ動作部１０５に渡すことでＩ／Ｏライト要求を行う。なお、転送制御プログラム動作部１０３１は、オペレーティングシステム動作部１０２が保持する管理情報のアドレスを用いてデータライトコマンドを作成する。
【００４３】
このようにして、転送制御プログラム動作部１０３１は、データメモリ３０１３に記憶されたデータをＩ／Ｏデバイス４０２に書き込む指示をＩ／Ｏデバイスドライバ動作部１０５に対して行う。
【００４４】
以降、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１からのデータリード処理およびＩ／Ｏデバイス４０２へのデータライト処理の一連の処理を、Ｉ／Ｏデータ転送アプリケーション動作部１０１に要求された量のデータ転送が完了するまで繰り返す。なお、データリード処理とデータライト処理の間に、Ｉ／Ｏデータ処理プログラム動作部１０３４が、Ｉ／Ｏデバイス４０１からリードされたデータに対するデータ処理を行ってもよい。このように、データリード処理とデータライト処理の間（すなわち、データライトが行われる前）にフォーマット変換や圧縮などのデータ処理を行うことで、全体の処理時間を短くすることが可能になる。
【００４５】
また、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１に対するリード要求やＩ／Ｏデバイス４０２に対するライト要求を多重化して行ってもよい。図３は、データメモリ３０１３の例を示す説明図である。図３に示す例では、転送制御プログラム動作部１０３１がデータメモリ３０１３に複数のバッファ３０１３１を確保したことを示す。
【００４６】
転送制御プログラム動作部１０３１は、各バッファ３０１３１を利用して、Ｉ／Ｏデバイス４０１からのデータリード処理およびＩ／Ｏデバイス４０２へのデータライト処理を並行して行う。また、このとき、Ｉ／Ｏデータ処理プログラム動作部１０３４は、Ｉ／Ｏデバイス４０１からリードされたデータに対するデータ処理を並行して行ってもよい。この場合も、転送制御プログラム動作部１０３１は、データ転送量の総和がＩ／Ｏデータ転送アプリケーション動作部１０１から要求されたデータ転送量に達するまでデータリード処理およびデータライト処理を繰り返せばよい。
【００４７】
次に、本実施形態のデータ制御システムの動作を説明する。まず、Ｉ／Ｏデバイス４０１に対するリード要求やＩ／Ｏデバイス４０２に対するライト要求が多重化して行われない場合の動作を説明する。図４は、本実施形態におけるデータ制御システムの動作例を示すフローチャートである。初めに、Ｉ／Ｏデータ転送アプリケーション動作部１０１は、Ｉ／Ｏデバイス間のデータ転送をＩ／Ｏデータ転送ドライバ動作部１０３に要求する（ステップＡ１）。
【００４８】
Ｉ／Ｏデータ転送ドライバ動作部１０３の転送制御プログラム動作部１０３１は、データ転送の要求を受け、メモリ確保プログラム動作部１３０２を呼出し、メモリ確保プログラム動作部１３０２がメインメモリ３にＩ／Ｏデータ転送メモリ３０１を確保する（ステップＡ２）。
【００４９】
続いて、転送制御プログラム動作部１０３１は、Ｉ／ＯコマンドをＩ／Ｏコマンドメモリ３０１１に、ＤＭＡリストをＤＭＡリストメモリ３０１２にそれぞれ作成する。そして、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイスドライバ動作部１０４にそれら（すなわち、Ｉ／ＯリードコマンドおよびＤＭＡリスト）のデータを渡すことでＩ／Ｏリード要求を行い、Ｉ／Ｏデバイス４０１からＩ／Ｏデータをリードしてデータメモリ３０１３にリードしたデータを記憶させる（ステップＡ３）。
【００５０】
続いて、転送制御プログラム動作部１０３１は、必要であれば、Ｉ／Ｏデータ処理プログラム動作部１０３４を呼出し、データメモリ３０１３に記憶されたデータに対し、フォーマット変換や圧縮などのデータ処理を行う（ステップＡ４）。
【００５１】
続いて、転送制御プログラム動作部１０３１は、Ｉ／ＯコマンドをＩ／Ｏコマンドメモリ３０１１に、ＤＭＡリストをＤＭＡリストメモリ３０１２にそれぞれ作成する。そして、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイスドライバ動作部１０５にそれらのデータを渡すことでＩ／Ｏライト要求を行い、Ｉ／Ｏデバイス４０２にデータメモリ３０１３に記憶されたデータをライトする（ステップＡ５）。
【００５２】
その後、転送制御プログラム動作部１０３１は、要求されたデータ量の転送が完了したか否かを判断する（ステップＡ６）。要求されたデータ量の転送が完了していない場合（ステップＡ６におけるＮｏ）、Ｉ／Ｏデータ転送ドライバ動作部１０３は、ステップＡ３〜ステップＡ５の処理を繰り返す。一方、要求されたデータ量の転送が完了した場合（ステップＡ６におけるＹｅｓ）、転送制御プログラム動作部１０３１は、メモリ解放プログラム動作部１０３３を呼出し、メモリ解放プログラム動作部１０３３がＩ／Ｏデータ転送メモリ３０１を解放する（ステップＡ７）。このように、Ｉ／Ｏデータ転送ドライバ動作部１０３は、Ｉ／Ｏデータ転送アプリケーション動作部１０１から要求されたデータ量の転送処理が完了するまでステップＡ３〜Ａ５の処理を繰り返す。
【００５３】
次に、Ｉ／Ｏデバイス４０１に対するリード要求やＩ／Ｏデバイス４０２に対するライト要求が多重化して行われる場合の動作を説明する。図５および図６は、本実施形態におけるデータ制御システムの他の動作例を示すフローチャートである。Ｉ／Ｏデータ転送アプリケーション動作部１０１がＩ／Ｏデバイス間のデータ転送をＩ／Ｏデータ転送ドライバ動作部１０３に要求し、メモリ確保プログラム動作部１３０２がＩ／Ｏデータ転送メモリ３０１を確保するまでのステップＡ１〜ステップＡ２までの処理は、図４に例示する処理と同様である。
【００５４】
転送制御プログラム動作部１０３１は、データメモリ３０１３内における複数のバッファ３０１３１にデータを書き込むための複数のＩ／ＯリードコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。あわせて、転送制御プログラム動作部１０３１は、それぞれのＩ／Ｏリードコマンドに対応するＤＭＡリストをＤＭＡリストメモリ３０１２に作成する。そして、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイスドライバ動作部１０４に対し、それら（すなわち、Ｉ／ＯリードコマンドおよびＤＭＡリスト）を用いて複数のＩ／Ｏデータのリード要求を行う（図５におけるステップＡ８）。
【００５５】
その後、転送制御プログラム動作部１０３１は、発行したＩ／Ｏデバイスへの要求が完了するまで待機する。１つのＩ／Ｏ要求の完了後（ステップＡ９）、転送制御プログラム動作部１０３１は、完了したＩ／Ｏ要求がリード要求か否かを判断する（ステップＡ１０）。完了したＩ／Ｏ要求がリード要求の場合（ステップＡ１０におけるＹｅｓ）、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１からリードしてデータメモリ３０１上のバッファに記憶させたデータに対し、Ｉ／Ｏ要求を多重しない場合の動作と同様、ステップＡ４〜ステップＡ５の処理を行う。その後、転送制御プログラム動作部１０３１は、再びＩ／Ｏ要求が完了するまで待機する。
【００５６】
次に、ステップＡ１０において、完了したＩ／Ｏ要求がリード要求でない（すなわち、ライト要求である）場合について説明する。ステップＡ１０において、完了したＩ／Ｏ要求がライト要求の場合（ステップＡ１０におけるＮｏ）、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイス４０１に対してそれまで行ったリード要求により読みとったデータ量が、Ｉ／Ｏデータ転送アプリケーション動作部１０１から要求されたデータ量に達している否かを判定する（ステップＡ１１）。
【００５７】
要求されたデータ量に達していない場合（ステップＡ１１におけるＮｏ）、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイスドライバ動作部１０４にＩ／Ｏリード要求を行い、データメモリ３０１３にリードしたデータを記憶させるステップＡ３と同様の処理を行う。その後、転送制御プログラム動作部１０３１は、再びＩ／Ｏ要求が完了するまで待機する。
【００５８】
一方、ステップＡ１１において、要求されたデータ量に達している場合（ステップＡ１１におけるＹｅｓ）、転送制御プログラム動作部１０３１は、Ｉ／Ｏデバイスドライバ動作部１０５に発行したライト要求が全て完了したか否かを判定する（ステップＡ１２）。ライト要求が全て完了していない場合（ステップＡ１２におけるＮｏ）、転送制御プログラム動作部１０３１は、再びＩ／Ｏ要求が完了するまで待機する。一方、ライト要求が全て完了した場合（ステップＡ１２におけるＹｅｓ）、メモリ解放プログラム動作部１０３３は、Ｉ／Ｏデータ転送メモリ３０１を解放する（ステップＡ７）。
【００５９】
本実施形態では、ブリッジ２とＩ／Ｏデバイス４０１、ブリッジ２とＩ／Ｏデバイス４０２とを接続するバスとして、ＰＣＩエクスプレスバスを例示した。他にも、ＰＣＩバス、ＰＣＩ−Ｘバスなど、その他のバスを用いて、ブリッジ２とＩ／Ｏデバイス４０１，４０２を接続してもよい。同様に、Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２が準拠するバスの規格は、ＰＣＩであってもよく、ＰＣＩ−Ｘであっても良い。
【００６０】
また、本実施形態では、データをリードするＩ／Ｏデバイス４０１とデータをライトするＩ／Ｏデバイス４０２が、それぞれ別のＩ／Ｏデバイスである場合を例示して説明した。ただし、Ｉ／Ｏデバイス４０１とＩ／Ｏデバイス４０２とは、同一のＩ／Ｏデバイスであってもよい。このとき、２つのデバイス間のデータ転送が、同一のＩ／Ｏデバイス上の異なるモジュール間で行われてもよく、同一のＩ／Ｏデバイスにおける同一モジュールの異なるアドレス間で行われてもよい。
【００６１】
以上のように、本実施形態によれば、Ｉ／Ｏデバイス４０１からＩ／Ｏデバイス４０２へのデータ転送制御をカーネルモードで行うＩ／Ｏデータ転送ドライバ動作部１０３（より詳しくは、転送制御プログラム動作部１０３１）が、Ｉ／Ｏデバイス４０１からリードしたデータをデータメモリ３０１３に記憶させる指示をＩ／Ｏデバイスドライバ動作部１０４に対して行う。そして、Ｉ／Ｏデータ転送ドライバ動作部１０３（より詳しくは、転送制御プログラム動作部１０３１）が、データメモリ３０１３に記憶されたデータをＩ／Ｏデバイス４０２に書き込む指示を、Ｉ／Ｏデバイスドライバ動作部１０５に対して行う。
【００６２】
すなわち、本実施形態におけるデータ制御システムは、Ｉ／Ｏデータ転送ドライバ動作部１０３がＣＰＵのカーネルモードで動作し、Ｉ／Ｏデバイスドライバ動作部１０４を仲介して第１のＩ／Ｏデバイス４０１からリードしたデータを、Ｉ／Ｏデバイスドライバ動作部１０５を仲介して第２のＩ／Ｏデバイス４０２にライトする。このため、Ｉ／Ｏデバイスの間で直接データを転送する動作に対応していない２つのＩ／Ｏデバイスの間で高速にデータの転送を行うことができる。
【００６３】
また、通常のコンピュータシステムのように、データ処理がユーザモードで行われると、データのコピーやコンテキストスイッチなどの処理を行う際、オーバヘッドが発生する。しかし、本実施形態では、データ処理がカーネルモードで行われるため、データの転送を高速に行うことができる。
【００６４】
また、本実施形態におけるデータ制御システムは、Ｉ／Ｏデバイス４０１からリードしたデータに対し、フォーマット変換や圧縮など、予め定められたデータ処理を行ってから第２のＩ／Ｏデバイス４０２にデータをライトする。このため、転送データに対する処理機能を有しない２つのＩ／Ｏデバイスの間で、転送するデータに対して各種の処理を行いながらデータ転送を行うため、全体の処理時間を短くすることができる。
【００６５】
また、第１のＩ／Ｏデバイス４０１に対するリード要求と、第２のＩ／Ｏデバイス４０２に対するライト要求を多重して行ってもよい。このような構成にすることで、Ｉ／Ｏ要求を多重しない場合と比較して、直接データを転送する動作に対応していない２つのＩ／Ｏデバイスの間でさらに高速にデータの転送を行うことができる。
【００６６】
実施形態２．
図７は、本発明の第２の実施形態におけるデータ制御システムの例を示すブロック図である。なお、第１の実施形態と同様の構成については、図１と同一の符号を付し、説明を省略する。本実施形態におけるデータ制御システムは、ＣＰＵ１と、メインメモリ３と、第１のＩ／ＯデバイスであるＩ／Ｏデバイス４０１と、第２のＩ／ＯデバイスであるＩ／Ｏデバイス４０２と、Ｉ／Ｏデバイス４０３と、それぞれのＩ／Ｏデバイスを接続するブリッジ２とを含む。すなわち、第２の実施形態におけるデータ制御システムは、Ｉ／Ｏデバイス４０３を備える点において、第１の実施形態におけるデータ制御システムと異なる。
【００６７】
メインメモリ３は、Ｉ／Ｏデータ転送メモリ３０１を含む。また、Ｉ／Ｏデータ転送メモリ３０１は、Ｉ／Ｏコマンドメモリ３０１１と、ＤＭＡリストメモリ３０１２とを有する。また、Ｉ／Ｏデバイス４０３は、データメモリ４０３１を含む。データメモリ４０３１はコンピュータの物理アドレスにマップされ、データバッファとして、ＣＰＵ１からデータのリードおよびライトの目的で使用される。すなわち、データメモリ４０３１は、第１の実施形態におけるデータメモリ３０１３に相当する。
【００６８】
ＣＰＵ１は、Ｉ／Ｏデータ転送アプリケーション動作部１０１と、オペレーティングシステム動作部１０２と、Ｉ／Ｏデータ転送ドライバ動作部１０６と、Ｉ／Ｏデバイスドライバ動作部１０４と、Ｉ／Ｏデバイスドライバ動作部１０５と、Ｉ／Ｏデバイステーブル記憶部１１４とを含む。
【００６９】
また、メインメモリ３は、プログラム３０３を記憶する。プログラム３０３は、ＣＰＵ１に読み込まれ、Ｉ／Ｏデータ転送アプリケーション動作部１０１と、オペレーティングシステム動作部１０２と、Ｉ／Ｏデータ転送ドライバ動作部１０６と、Ｉ／Ｏデバイス４０１を制御するＩ／Ｏデバイスドライバ動作部１０４と、Ｉ／Ｏデバイス４０２を制御するＩ／Ｏデバイスドライバ動作部１０５として動作する。
【００７０】
Ｉ／Ｏ転送ドライバ１０６動作部は、第１の実施形態におけるＩ／Ｏ転送ドライバ１０３動作部と同様の動作を行う。ただし、Ｉ／Ｏ転送ドライバ動作部１０６がＩ／Ｏデータ転送のデータバッファとしてデータメモリ４０３１を用いる点において、第１の実施形態におけるＩ／Ｏ転送ドライバ１０３動作部と異なる。
【００７１】
図８は、Ｉ／Ｏデータ転送ドライバ動作部１０６の例を示すブロック図である。本実施形態におけるＩ／Ｏデータ転送ドライバ動作部１０６は、転送制御プログラム動作部１０３１と、メモリ確保プログラム動作部１０６１と、メモリ解放プログラム動作部１０６２と、Ｉ／Ｏデータ処理プログラム動作部１０３４とを含む。
【００７２】
メモリ確保プログラム動作部１０６１は、転送制御プログラム動作部１０３１から呼び出され、データメモリ４０３１における転送用メモリ領域を確保する。また、メモリ解放プログラム動作部１０６２は、転送制御プログラム動作部１０３１から呼び出され、データメモリ４０３１における転送用メモリ領域を解放する。なお、メモリ確保プログラム動作部１０６１は、ＣＰＵ１がメモリ確保用プログラムを読み込むことにより動作する。また、メモリ解放プログラム動作部１０６２は、ＣＰＵ１がメモリ解放用プログラムを読み込むことにより動作する。
【００７３】
その他の構成および動作については、第１の実施形態と同様である。
【００７４】
以上のように、本実施形態におけるデータ制御システムでは、Ｉ／Ｏ転送ドライバ１０６動作部がＩ／Ｏデータの転送を仲介するデータバッファとして第３のＩ／Ｏデバイスが保持するメモリ領域（すなわち、データメモリ４０３１）を用いる。これにより、２つのＩ／Ｏデバイス間のデータ転送において、メインメモリ３をデータバッファとして使用する必要がなくなるため、第１の実施形態における効果に加え、メインメモリ資源とメインメモリバス資源の消費を削減できる。
【００７５】
実施形態３．
次に、第３の実施形態について説明する。第３の実施形態におけるデータ制御システムは、第１の実施形態においてデータ転送を行うＩ／Ｏデバイスがストレージデバイスになったものである。ここで、ストレージデバイスとは、ＳＣＳＩやＳＡＳ（Serial Attached ＳＣＳＩ）、ＳＡＴＡなどを始めとする、ストレージの規格に準拠するデータ記憶デバイスである。本実施形態では、ストレージコピーの際に行われるデータ転送について詳しく説明する。
【００７６】
図９は、本発明の第３の実施形態におけるデータ制御システムの例を示すブロック図である。なお、第１の実施形態と同様の構成については、図１と同一の符号を付し、説明を省略する。本実施形態におけるデータ制御システムは、ＣＰＵ１と、メインメモリ３と、第１のストレージデバイスであるストレージデバイス４０４と、第２のストレージデバイスであるストレージデバイス４０５と、それぞれのストレージデバイスを接続するブリッジ２とを含む。
【００７７】
ＣＰＵ１は、ストレージコピーアプリケーション動作部１０７と、オペレーティングシステム動作部１０２と、ストレージコピードライバ動作部１０８と、ストレージデバイスドライバ動作部１０９と、ストレージデバイスドライバ動作部１１０と、Ｉ／Ｏデバイステーブル記憶部１１４とを含む。
【００７８】
すなわち、第３の実施形態におけるストレージコピーアプリケーション動作部１０７、ストレージコピードライバ動作部１０８、ストレージデバイスドライバ動作部１０９、ストレージデバイスドライバ動作部１１０、ストレージデバイス４０４およびストレージデバイス４０５は、それぞれ、第１の実施形態におけるＩ／Ｏデータ転送アプリケーション動作部１０１、Ｉ／Ｏデータ転送ドライバ動作部１０３、Ｉ／Ｏデバイスドライバ動作部１０４、Ｉ／Ｏデバイスドライバ動作部１０５、Ｉ／Ｏデバイス４０１およびＩ／Ｏデバイス４０２に相当する。
【００７９】
メインメモリ３は、Ｉ／Ｏデータ転送メモリ３０１を含む。なお、Ｉ／Ｏデータ転送メモリ３０１の内容は、第１の実施形態と同様である。また、メインメモリ３は、プログラム３０４を記憶する。プログラム３０４は、第１の実施形態におけるプログラム３０２に相当する。プログラム３０４は、ＣＰＵ１に読み込まれ、ストレージコピーアプリケーション動作部１０７と、オペレーティングシステム動作部１０２と、ストレージコピードライバ動作部１０８と、ストレージデバイスドライバ動作部１０９と、ストレージデバイスドライバ動作部１１０として動作する。
【００８０】
ストレージコピードライバ動作部１０８は、ストレージデバイス４０４からストレージデバイス４０５へのコピー制御を行う。図１０は、ストレージコピードライバ動作部１０８の例を示すブロック図である。本実施形態におけるストレージコピードライバ動作部１０８は、ストレージコピー制御プログラム動作部１０８１と、メモリ確保プログラム動作部１０３２と、メモリ解放プログラム動作部１０３３とを含む。
【００８１】
ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４およびストレージデバイス４０５にＩ／Ｏコマンドを発行することで、ストレージデバイス間のデータコピーを行う。ストレージコピー制御プログラム動作部１０８１は、ＣＰＵ１がストレージコピー制御プログラムを読み込むことにより動作する。
【００８２】
なお、メモリ確保プログラム動作部１０３２およびメモリ解放プログラム動作部１０３３については、第１の実施形態と同様である。
【００８３】
このように、ストレージコピードライバ動作部１０８は、ストレージコピー制御プログラム、メモリ確保用プログラムおよびメモリ解放用プログラムを読み込み、これらのプログラムに従って動作する。その際、ストレージコピードライバ動作部１０８は、ＣＰＵ１のカーネルモードで動作する。
【００８４】
以下、ストレージコピードライバ動作部１０８におけるそれぞれの動作部について詳しく説明する。ストレージコピー制御プログラム動作部１０８１は、ストレージコピーアプリケーション動作部１０７からの要求を受け付け、ストレージデバイス４０４とストレージデバイス４０５との間のデータコピーを行う。
【００８５】
具体的には、ストレージコピー制御プログラム動作部１０８１は、メモリ確保プログラム動作部１０３２を呼出し、メインメモリ３にＩ／Ｏデータ転送メモリ３０１を確保する。また、ストレージコピー制御プログラム動作部１０８１は、Ｉ／Ｏデバイステーブル記憶部１１４を参照し、ストレージデバイス４０４とストレージデバイス４０５の名前から、これらのデバイスに対してオペレーティングシステム動作部１０２が保持する管理情報のアドレスを検索する。
【００８６】
さらに、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４に対するデータリードコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。また、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４からリードするデータの書き込み先であるデータメモリ３０１３のアドレスリストをＤＭＡリストメモリ３０１２に作成する。そして、ストレージコピー制御プログラム動作部１０８１は、それらのデータ（具体的には、データリードコマンドおよびＤＭＡリスト）をストレージデバイスドライバ動作部１０９に渡すことでＩ／Ｏリード要求を行う。なお、ストレージコピー制御プログラム動作部１０８１は、オペレーティングシステム動作部１０２が保持する管理情報のアドレスを用いてデータリードコマンドを作成する。
【００８７】
また、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０５に対するデータライトコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。さらに、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０５にライトするデータの書き込み先であるデータメモリ３０１３のアドレスリストをＤＭＡリストメモリ３０１２に作成する。そして、ストレージコピー制御プログラム動作部１０８１は、それらのデータ（具体的には、データライトコマンドおよびＤＭＡリスト）をストレージデバイスドライバ動作部１１０に渡すことでＩ／Ｏライト要求を行う。なお、ストレージコピー制御プログラム動作部１０８１は、オペレーティングシステム動作部１０２が保持する管理情報のアドレスを用いてデータライトコマンドを作成する。
【００８８】
以降、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４からのデータリード処理およびストレージデバイス４０５へのデータライト処理の一連の処理を、ストレージコピーアプリケーション動作部１０７に要求された量のデータ転送が完了するまで繰り返す。
【００８９】
また、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４に対するリード要求やストレージデバイス４０５に対するライト要求を多重化して行ってもよい。このとき、データメモリ３０１３は、図３に例示するように、複数のバッファ３０１３１を確保してもよい。
【００９０】
具体的には、ストレージコピー制御プログラム動作部１０８１は、各バッファ３０１３１を利用して、ストレージデバイス４０４からのデータリード処理およびストレージデバイス４０５へのデータライト処理を並行して行う。そして、ストレージコピー制御プログラム動作部１０８１は、データ転送量の総和がストレージコピーアプリケーション動作部１０７から要求されたデータ転送量に達するまでデータリード処理およびデータライト処理を繰り返す。
【００９１】
次に、本実施形態のデータ制御システムの動作を説明する。まず、ストレージデバイス４０４に対するリード要求やストレージデバイス４０５に対するライト要求が多重化して行われない場合の動作を説明する。図１１は、本実施形態におけるデータ制御システムの動作例を示すフローチャートである。初めに、ストレージコピーアプリケーション動作部１０７は、ストレージデバイス間のデータコピーをストレージコピードライバ動作部１０８に要求する（ステップＢ１）。
【００９２】
ストレージコピードライバ動作部１０８のストレージコピー制御プログラム動作部１０８１は、データコピーの要求を受け、メモリ確保プログラム動作部１３０２を呼出し、メモリ確保プログラム動作部１３０２がメインメモリ３にＩ／Ｏデータ転送メモリ３０１を確保する（ステップＢ２）。
【００９３】
続いて、ストレージコピー制御プログラム動作部１０８１は、Ｉ／ＯコマンドをＩ／Ｏコマンドメモリ３０１１に、ＤＭＡリストをＤＭＡリストメモリ３０１２にそれぞれ作成する。そして、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイスドライバ動作部１０９にそれら（すなわち、Ｉ／ＯリードコマンドおよびＤＭＡリスト）のデータを渡すことでＩ／Ｏリード要求を行い、ストレージデバイス４０４からＩ／Ｏデータをリードしてデータメモリ３０１３にリードしたデータを記憶させる（ステップＢ３）。
【００９４】
続いて、ストレージコピー制御プログラム動作部１０８１は、Ｉ／ＯコマンドをＩ／Ｏコマンドメモリ３０１１に、ＤＭＡリストをＤＭＡリストメモリ３０１２にそれぞれ作成する。そして、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイスドライバ動作部１１０にそれらのデータを渡すことでＩ／Ｏライト要求を行い、ストレージデバイス４０５にデータメモリ３０１３に記憶されたデータをライトする（ステップＢ４）。
【００９５】
その後、ストレージコピー制御プログラム動作部１０８１は、要求されたデータ量のコピー処理が完了したか否かを判断する（ステップＢ５）。要求されたデータ量のコピー処理が完了していない場合（ステップＢ５におけるＮｏ）、ストレージコピー制御プログラム動作部１０８１は、ステップＢ３〜ステップＢ４の処理を繰り返す。一方、要求されたデータ量のコピー処理が完了した場合（ステップＢ５におけるＹｅｓ）、ストレージコピー制御プログラム動作部１０８１は、メモリ解放プログラム動作部１０３３を呼出し、メモリ解放プログラム動作部１０３３がＩ／Ｏデータ転送メモリ３０１を解放する（ステップＢ６）。このように、ストレージコピー制御プログラム動作部１０８１は、ストレージコピーアプリケーション動作部１０７から要求されたデータ量のコピー処理が完了するまでステップＢ３〜Ｂ４の処理を繰り返す。
【００９６】
次に、ストレージデバイス４０４に対するリード要求やストレージデバイス４０５に対するライト要求が多重化して行われる場合の動作を説明する。図１２および図１３は、本実施形態におけるデータ制御システムの他の動作例を示すフローチャートである。ストレージコピーアプリケーション動作部１０７がストレージデバイス間のデータコピーをストレージコピードライバ動作部１０８に要求し、メモリ確保プログラム動作部１３０２がＩ／Ｏデータ転送メモリ３０１を確保するまでのステップＢ１〜ステップＢ２までの処理は、図１１に例示する処理と同様である。
【００９７】
ストレージコピー制御プログラム動作部１０８１は、データメモリ３０１３内における複数のバッファ３０１３１にデータを書き込むための複数のＩ／ＯリードコマンドをＩ／Ｏコマンドメモリ３０１１に作成する。あわせて、ストレージコピー制御プログラム動作部１０８１は、それぞれのＩ／Ｏリードコマンドに対応するＤＭＡリストをＤＭＡリストメモリ３０１２に作成する。そして、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイスドライバ動作部１０９に対し、それら（すなわち、Ｉ／ＯリードコマンドおよびＤＭＡリスト）を用いて複数のＩ／Ｏデータのリード要求を行う（ステップＢ７）。
【００９８】
その後、ストレージコピー制御プログラム動作部１０８１は、発行したストレージデバイスへの要求が完了するまで待機する。１つのＩ／Ｏ要求の完了後（ステップＢ８）、ストレージコピー制御プログラム動作部１０８１は、完了したＩ／Ｏ要求がリード要求か否かを判断する（ステップＢ９）。完了したＩ／Ｏ要求がリード要求の場合（ステップＢ９におけるＹｅｓ）、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４からリードしてデータメモリ３０１上のバッファに記憶させたデータに対し、Ｉ／Ｏ要求を多重しない場合の動作と同様、ステップＢ４の処理（すなわち、ストレージデバイス４０５にデータのライト）を行う。その後、ストレージコピー制御プログラム動作部１０８１は、再びＩ／Ｏ要求が完了するまで待機する。
【００９９】
次に、ステップＢ９において、完了したＩ／Ｏ要求がリード要求でない（すなわち、ライト要求である）場合について説明する。ステップＢ９において、完了したＩ／Ｏ要求がライト要求の場合（ステップＢ９におけるＮｏ）、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイス４０４に対してそれまで行ったリード要求により読みとったデータ量が、ストレージコピーアプリケーション動作部１０７から要求されたデータ量に達している否かを判定する（ステップＢ１０）。
【０１００】
要求されたデータ量に達していない場合（ステップＢ１０におけるＮｏ）、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイスドライバ動作部１０９にＩ／Ｏリード要求を行い、データメモリ３０１３にリードしたデータを記憶させるステップＢ３と同様の処理を行う。その後、ストレージコピー制御プログラム動作部１０８１は、再びＩ／Ｏ要求が完了するまで待機する。
【０１０１】
一方、ステップＢ１０において、要求されたデータ量に達している場合（ステップＢ１０におけるＹｅｓ）、ストレージコピー制御プログラム動作部１０８１は、ストレージデバイスドライバ動作部１１０に発行したライト要求が全て完了したか否かを判定する（ステップＢ１１）。ライト要求が全て完了していない場合（ステップＢ１１におけるＮｏ）、ストレージコピー制御プログラム動作部１０８１は、再びＩ／Ｏ要求が完了するまで待機する。一方、ライト要求が全て完了した場合（ステップＢ１１におけるＹｅｓ）、メモリ解放プログラム動作部１０３３は、Ｉ／Ｏデータ転送メモリ３０１を解放する（ステップＢ６）。
【０１０２】
なお、第１の実施形態と同様、ストレージコピー制御プログラム動作部１０８１は、データコピーの途中に、例えば、フォーマット変換や圧縮など、予め定められたデータ処理を行ってもよい。
【０１０３】
以上のように、本実施形態によれば、ストレージデバイス４０４からストレージデバイス４０５へのデータコピーを、カーネルモードで行うストレージコピードライバ動作部１０８（より詳しくは、ストレージコピー制御プログラム動作部１０８１）が、ストレージデバイス４０４からリードしたデータをデータメモリ３０１３に記憶させる指示をストレージデバイスドライバ動作部１０９に対して行う。そして、ストレージコピードライバ動作部１０８（より詳しくは、ストレージコピー制御プログラム動作部１０８１）が、データメモリ３０１３に記憶されたデータをストレージデバイス４０５に書き込む指示を、ストレージデバイスドライバ動作部１１０に対して行う。よって、直接データコピーを行う動作に対応していない２つのストレージデバイスの間で高速にデータコピーを行うことができる。
【０１０４】
次に、本発明の最小構成の例を説明する。図１４は、本発明によるデータ制御システムの最小構成の例を示すブロック図である。本発明によるデータ制御システムは、第一のデバイス（例えば、Ｉ／Ｏデバイス４０１）から第二のデバイス（例えば、Ｉ／Ｏデバイス４０２）へのデータ転送制御をカーネルモードで行うＣＰＵ８０（例えば、ＣＰＵ１）と、第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリ９０（例えば、メインメモリ３）とを備えている。
【０１０５】
ＣＰＵ８０は、第一のデバイスを制御する第一デバイス制御手段８１（例えば、Ｉ／Ｏデバイスドライバ動作部１０４）と、第二のデバイスを制御する第二デバイス制御手段（例えば、Ｉ／Ｏデバイスドライバ動作部１０５）と、第一のデバイスから読み取ったデータをメインメモリ３に記憶させる指示である読み取り指示を第一デバイス制御手段８１に対して行い、メインメモリ３に記憶されたデータを第二のデバイスに書き込む指示である書き込み指示を第二デバイス制御手段８２に対して行うデータ転送制御手段８３（例えば、Ｉ／Ｏデータ転送ドライバ動作部１０３）とを含む。
【０１０６】
そのような構成により、直接データ転送を行う動作に対応していない２つのＩ／Ｏデバイスの間で高速にデータ転送を行うことができる。
【０１０７】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１０８】
（付記１）第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵと、前記第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリとを備え、前記ＣＰＵは、前記第一のデバイスを制御する第一デバイス制御手段と、前記第二のデバイスを制御する第二デバイス制御手段と、前記第一のデバイスから読み取ったデータを前記メインメモリに記憶させる指示である読み取り指示を前記第一デバイス制御手段に対して行い、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示である書き込み指示を前記第二デバイス制御手段に対して行うデータ転送制御手段とを含むことを特徴とするデータ制御システム。
【０１０９】
（付記２）データ転送制御手段は、第二のデバイスに書き込む指示を行う前に、メインメモリに記憶されたデータに対して予め定められた処理を行う付記１記載のデータ制御システム。
【０１１０】
（付記３）データ転送制御手段は、第一のデバイスから第二のデバイスへのデータ転送要求が行われたときに、要求されたデータ量の転送が完了するまで、第一デバイス制御手段に対する読み取り指示および第二のデバイスに対する書き込み指示を繰り返す付記１または付記２記載のデータ制御システム。
【０１１１】
（付記４）メインメモリに、転送されるデータを記憶する領域を確保する領域確保手段と、前記領域を解放する領域解放手段とを備えた付記１から付記３のうちのいずれか１つに記載のデータ制御システム。
【０１１２】
（付記５）メインメモリは、読み取り指示を示す読み取り指示コマンドおよび書き込み指示を示す書き込み指示コマンドを記憶する指示コマンド記憶手段と、メインメモリ内における転送データの記憶先を示すリストである記憶先リストを記憶する記憶先リスト記憶手段とを含み、データ転送制御手段は、前記読み取り指示コマンドおよび前記書き込み指示コマンドを作成して前記指示コマンド記憶手段に記憶させ、前記記憶先リストを作成して前記記憶先リスト記憶手段に記憶させ、第一デバイス制御手段は、前記指示コマンド記憶手段に記憶された読み取り指示コマンドおよび記憶先リストに基づいて、第一のデバイスから読み取ったデータを当該記憶先リストが示す記憶先に記憶させ、第二デバイス制御手段は、前記指示コマンド記憶手段に記憶された書き込み指示コマンドおよび記憶先リストに基づいて、当該記憶先リストが示す記憶先から読み取ったデータを第二のデバイスに書き込む付記１から付記４のうちのいずれか１つに記載のデータ制御システム。
【０１１３】
（付記６）第一のデバイスおよび第二のデバイスの管理情報が記憶された位置を示すアドレスである管理情報アドレスを、当該第一のデバイスおよび第二のデバイスの名前と対応付けて記憶する管理情報アドレス記憶手段を備え、データ転送制御手段は、前記管理情報アドレスが示す位置に記憶された管理情報に基づいて、読み取り指示コマンドおよび書き込み指示コマンドを作成する付記５記載のデータ制御システム。
【０１１４】
（付記７）メインメモリは、転送データを記憶する複数のバッファを含み、データ転送制御手段は、前記バッファごとに第一デバイス制御手段に対する読み取り指示を並列に行い、前記バッファごとに第二デバイス制御手段に対する書き込み指示を並列に行う付記１から付記６のうちのいずれか１つに記載のデータ制御システム。
【０１１５】
（付記８）ＣＰＵは、第一のストレージデバイスから第二のストレージデバイスへのデータコピー制御をカーネルモードで行い、メインメモリは、前記第一のストレージデバイスから第二のストレージデバイスへコピーされるデータを記憶し、第一デバイス制御手段は、前記第一のストレージデバイスを制御し、第二デバイス制御手段は、前記第二のストレージデバイスを制御する付記１から付記７のうちのいずれか１つに記載のデータ制御システム。
【０１１６】
（付記９）第一のデバイスから第二のデバイスへ転送されるデータを記憶する第三のデバイスを備え、データ転送制御手段は、第一のデバイスから読み取ったデータを前記第三のデバイスに記憶させる読み取り指示を第一デバイス制御手段に対して行い、前記第三のデバイスに記憶されたデータを第二のデバイスに書き込む書き込み指示を第二デバイス制御手段に対して行う付記１から付記８のうちのいずれか１つに記載のデータ制御システム。
【０１１７】
（付記１０）第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵが、当該第一のデバイスから読み取ったデータをメインメモリに記憶させる指示を、自ＣＰＵに備えた当該第一のデバイスを制御する第一デバイス制御手段に対して行い、前記ＣＰＵが、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示を、自ＣＰＵに備えた当該第二のデバイスを制御する第二デバイス制御手段に対して行うことを特徴とするデータ制御方法。
【０１１８】
（付記１１）ＣＰＵが、第二のデバイスに書き込む指示を行う前に、メインメモリに記憶されたデータに対して予め定められた処理を行う付記１０記載のデータ制御方法。
【０１１９】
（付記１２）ＣＰＵが、第一のデバイスから第二のデバイスへのデータ転送要求が行われたときに、要求されたデータ量の転送が完了するまで、第一デバイス制御手段に対する読み取り指示および第二のデバイスに対する書き込み指示を繰り返す付記１０または付記１１記載のデータ制御方法。
【０１２０】
（付記１３）ＣＰＵが、メインメモリに、転送されるデータを記憶する領域を確保し、ＣＰＵが、前記領域を解放する付記１０から付記１２のうちのいずれか１つに記載のデータ制御方法。
【０１２１】
（付記１４）ＣＰＵが、読み取り指示を示す読み取り指示コマンドおよび書き込み指示を示す書き込み指示コマンドを作成して、メインメモリが備える指示コマンド記憶手段に記憶させ、ＣＰＵが、メインメモリ内における転送データの記憶先を示すリストである記憶先リストを作成して、メインメモリが備える記憶先リスト記憶手段に記憶させ、ＣＰＵが、前記指示コマンド記憶手段に記憶された読み取り指示コマンドおよび記憶先リストに基づいて、第一のデバイスから読み取ったデータを当該記憶先リストが示す記憶先に記憶させ、ＣＰＵが、前記指示コマンド記憶手段に記憶された書き込み指示コマンドおよび記憶先リストに基づいて、当該記憶先リストが示す記憶先から読み取ったデータを第二のデバイスに書き込む付記１０から付記１３のうちのいずれか１つに記載のデータ制御方法。
【０１２２】
（付記１５）ＣＰＵが、第一のデバイスおよび第二のデバイスの管理情報が記憶された位置を示すアドレスである管理情報アドレスを、当該第一のデバイスおよび第二のデバイスの名前と対応付けて記憶する管理情報アドレス記憶手段を参照し、前記管理情報アドレスが示す位置に記憶された管理情報に基づいて、読み取り指示コマンドおよび書き込み指示コマンドを作成する付記１４記載のデータ制御方法。
【０１２３】
（付記１６）ＣＰＵが、メインメモリが備える複数のバッファごとに第一デバイス制御手段に対する読み取り指示を並列に行い、前記バッファごとに第二デバイス制御手段に対する書き込み指示を並列に行う付記１０から付記１５のうちのいずれか１つに記載のデータ制御方法。
【０１２４】
（付記１７）第一のストレージデバイスから第二のストレージデバイスへのデータ転送制御をカーネルモードで行うＣＰＵが、当該第一のストレージデバイスから読み取ったデータをメインメモリに記憶させる指示を、第一デバイス制御手段に対して行い、前記ＣＰＵが、前記メインメモリに記憶されたデータを前記第二のストレージデバイスに書き込む指示を、第二デバイス制御手段に対して行う付記１０から付記１６のうちのいずれか１つに記載のデータ制御方法。
【０１２５】
（付記１８）第一のデバイスから読み取ったデータを、第一のデバイスから第二のデバイスへ転送されるデータを記憶する第三のデバイスに記憶させる読み取り指示を第一デバイス制御手段に対して行い、前記第三のデバイスに記憶されたデータを第二のデバイスに書き込む書き込み指示を第二デバイス制御手段に対して行う
付記１０から付記１７のうちのいずれか１項に記載のデータ制御システム。
【０１２６】
（付記１９）第一のデバイスから第二のデバイスへのデータ転送制御をカーネルモードで行うＣＰＵおよび前記第一のデバイスから第二のデバイスへ転送されるデータを記憶するメインメモリを備えたコンピュータに適用されるデータ制御用プログラムであって、前記コンピュータに、前記第一のデバイスを制御する第一デバイス制御処理、前記第二のデバイスを制御する第二デバイス制御処理、および、前記第一のデバイスから読み取ったデータを前記メインメモリに記憶させる指示である読み取り指示を前記第一デバイス制御処理で実行させ、前記メインメモリに記憶されたデータを前記第二のデバイスに書き込む指示である書き込み指示を前記第二デバイス制御処理で実行させるデータ転送制御処理を実行させるためのデータ制御用プログラム。
【０１２７】
（付記２０）コンピュータに、データ転送制御処理で、第二のデバイスに書き込む指示を行う前に、メインメモリに記憶されたデータに対して予め定められた処理を行わせる付記１９記載のデータ制御用プログラム。
【０１２８】
（付記２１）コンピュータに、データ転送制御処理で、第一のデバイスから第二のデバイスへのデータ転送要求が行われたときに、要求されたデータ量の転送が完了するまで、第一デバイス制御処理における読み取り指示および第二のデバイスにおける書き込み処理を繰り返し実行させる付記１９または付記２０記載のデータ制御用プログラム。
【０１２９】
（付記２２）コンピュータに、メインメモリに、転送されるデータを記憶する領域を確保する領域確保処理、および、前記領域を解放する領域解放処理を実行させる付記１９から付記２１のうちのいずれか１つに記載のデータ制御用プログラム。
【０１３０】
（付記２３）コンピュータに、データ転送制御処理で、読み取り指示を示す読み取り指示コマンドおよび書き込み指示を示す書き込み指示コマンドを作成させて、メインメモリが備える指示コマンド記憶手段に記憶させ、メインメモリ内における転送データの記憶先を示すリストである記憶先リストを作成させて、メインメモリが備える記憶先リスト記憶手段に記憶させ、第一デバイス制御処理で、前記指示コマンド記憶手段に記憶された読み取り指示コマンドおよび記憶先リストに基づいて、第一のデバイスから読み取ったデータを当該記憶先リストが示す記憶先に記憶させ、第二デバイス制御処理で、前記指示コマンド記憶手段に記憶された書き込み指示コマンドおよび記憶先リストに基づいて、当該記憶先リストが示す記憶先から読み取ったデータを第二のデバイスに書き込ませる付記１９から付記２２のうちのいずれか１つに記載のデータ制御用プログラム。
【０１３１】
（付記２４）コンピュータに、データ転送制御処理で、第一のデバイスおよび第二のデバイスの管理情報が記憶された位置を示すアドレスである管理情報アドレスを、当該第一のデバイスおよび第二のデバイスの名前と対応付けて記憶する管理情報アドレス記憶手段が記憶する当該管理情報アドレスが示す位置に記憶された管理情報に基づいて、読み取り指示コマンドおよび書き込み指示コマンドを作成させる付記２３記載のデータ制御用プログラム。
【０１３２】
（付記２５）コンピュータに、データ転送制御処理で、メインメモリが備える複数のバッファごとに第一デバイス制御処理における読み取り指示を並列に実行させ、前記バッファごとに第二デバイス制御処理における書き込み指示を並列に実行させる付記１９から付記２４のうちのいずれか１つに記載のデータ制御用プログラム。
【０１３３】
（付記２６）第一のストレージデバイスから第二のストレージデバイスへのデータ転送制御をカーネルモードで行うＣＰＵおよび前記第一のストレージデバイスから第二のストレージデバイスへ転送されるデータを記憶するメインメモリを備えたコンピュータに適用されるデータ制御用プログラムであって、前記コンピュータに、第一デバイス制御処理で、前記第一のストレージデバイスを制御させ、第二デバイス制御処理で、前記第二のストレージデバイスを制御させる付記１９から付記２５のうちのいずれか１つに記載のデータ制御用プログラム。
【０１３４】
（付記２７）コンピュータに、データ転送制御処理で、第一のデバイスから読み取ったデータを、第一のデバイスから第二のデバイスへ転送されるデータを記憶する第三のデバイスに記憶させる読み取り指示を第一デバイス制御処理で実行させ、前記第三のデバイスに記憶されたデータを第二のデバイスに書き込む書き込み指示を第二デバイス制御処理で実行させる付記１９から付記２６のうちのいずれか１つに記載のデータ制御用プログラム。
【０１３５】
以上、実施形態及び実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０１３６】
この出願は、２０１１年３月２日に出願された日本特許出願２０１１−０４４９５１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１３７】
本発明は、２つのＩ／Ｏデバイス間で高速にデータ移動させる制御を行うコンピュータシステムに好適に適用される。また、本発明は、２つのＩ／Ｏデバイスの間で転送するデータに対し、処理を行いながら高速にデータ転送を行うコンピュータシステムにも好適に適用される。
【符号の説明】
【０１３８】
１  ＣＰＵ
２  ブリッジ
３  メインメモリ
１０１  Ｉ／Ｏデータ転送アプリケーション動作部
１０２  オペレーティングシステム動作部
１０３  Ｉ／Ｏデータ転送ドライバ動作部
１０４，１０５  Ｉ／Ｏデバイスドライバ動作部
１０６  Ｉ／Ｏデータ転送ドライバ動作部
１０７  ストレージコピーアプリケーション動作部
１０８  ストレージコピードライバ動作部
１０９，１１０  ストレージデバイスドライバ動作部
３０１  Ｉ／Ｏデータ転送メモリ
３０２，３０３，３０４  プログラム
４０１，４０２，４０３  Ｉ／Ｏデバイス
４０４，４０５  ストレージデバイス
５０１，５０２  ＰＣＩエクスプレスバス
【図１】
2012117701.tif 000003
【図２】
2012117701.tif 000004
【図３】
2012117701.tif 000005
【図４】
2012117701.tif 000006
【図５】
2012117701.tif 000007
【図６】
2012117701.tif 000008
【図７】
2012117701.tif 000009
【図８】
2012117701.tif 000010
【図９】
2012117701.tif 000011
【図１０】
2012117701.tif 000012
【図１１】
2012117701.tif 000013
【図１２】
2012117701.tif 000014
【図１３】
2012117701.tif 000015
【図１４】
2012117701.tif 000016
【図１５】
2012117701.tif 000017
【国際調査報告】
2012117701.tif 000018
2012117701.tif 000019