(57)【要約】【課題】データ・ストレージ・ネットワークにおいてサーバフリー・データ転送操作を求める要求を作成し処理する際に仮想ターゲットおよび抽象的コピー命令を利用するシステムおよび方法を提供すること。【解決手段】抽象的コピー命令は仮想ターゲットと実装置の間のデータ転送を表す。これを用いると、送信元ターゲット・コピー命令を宛先ターゲット・コピー命令とは別個に作成することが可能になる。次いで、この抽象的コピー命令を、サーバフリー・データ転送操作を実施するデータ・ムーバが実行できるように、実装置ターゲットだけが関与する具体的コピー命令に変換することができる。【選択図】図１
2004272901.tif 000002
【特許請求の範囲】
【請求項１】
データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施するシステムであって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成するように適合された１つまたは複数の抽象的コピー命令ジェネレータと、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換するように適合された具体的コピー命令ジェネレータとを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令ジェネレータがそれをマージすることができるシステム。
【請求項２】
前記仮想ターゲットが仮想ＦＩＦＯである、請求項１に記載のシステム。
【請求項３】
前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すために必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、請求項１に記載のシステム。
【請求項４】
前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、請求項３に記載のシステム。
【請求項５】
前記具体的コピー命令ジェネレータが、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合わせて１つの具体的コピー命令を形成することによって、抽象的コピー命令を具体的コピー命令に変換するように適合されている、請求項１に記載のシステム。
【請求項６】
前記具体的コピー命令ジェネレータが、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けし、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージすることによって抽象的コピー命令を具体的コピー命令に変換するように適合されている、請求項１に記載のシステム。
【請求項７】
前記抽象的コピー命令ジェネレータが、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成するように適合されている、請求項１に記載のシステム。
【請求項８】
サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、請求項７に記載のシステム。
【請求項９】
前記具体的コピー命令ジェネレータが、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解するように適合されている、請求項７に記載のシステム。
【請求項１０】
前記具体的コピー命令ジェネレータが、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割するように適合されている、請求項１に記載のシステム。
【請求項１１】
前記具体的コピー命令ジェネレータが、実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成するように適合されている、請求項１に記載のシステム。
【請求項１２】
データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施する方法であって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成するステップと、
前記抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換するステップとを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、それを前記具体的コピー命令にマージすることができる方法。
【請求項１３】
前記仮想ターゲットが仮想ＦＩＦＯである、請求項１２に記載の方法。
【請求項１４】
前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すために必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、請求項１２に記載の方法。
【請求項１５】
前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、請求項１４に記載の方法。
【請求項１６】
前記抽象的コピー命令が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合わせて１つの具体的コピー命令を形成することによって、具体的コピー命令に変換される、請求項１２に記載の方法。
【請求項１７】
前記抽象的コピー命令が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けすると共に、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージすることによって具体的コピー命令に変換される、請求項１２に記載の方法。
【請求項１８】
仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成するステップをさらに含む、請求項１２に記載の方法。
【請求項１９】
サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、請求項１８に記載の方法。
【請求項２０】
前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解するステップをさらに含む、請求項１８に記載の方法。
【請求項２１】
データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割するステップをさらに含む、請求項１２に記載の方法。
【請求項２２】
実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成するステップをさらに含む、請求項１２に記載の方法。
【請求項２３】
データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を前記ネットワーク内のデータ・ムーバと協働して実施するストレージ・マネージャ・サーバであって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成する抽象的コピー命令生成手段と、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換する具体的コピー命令生成手段とを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令生成手段がそれをマージすることができるストレージ・マネージャ・サーバ。
【請求項２４】
前記仮想ターゲットが仮想ＦＩＦＯである、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項２５】
前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すのに必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項２６】
前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、請求項２５に記載のストレージ・マネージャ・サーバ。
【請求項２７】
前記具体的コピー命令生成手段が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって、各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合せて１つの具体的コピー命令を形成する手段を含む、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項２８】
前記具体的コピー命令生成手段が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けする手段と、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令にリンクされるように各リストの先頭で抽象的コピー命令の対をマージする手段とを含む、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項２９】
前記抽象的コピー命令生成手段が、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成する手段を含む、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項３０】
サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、請求項２９に記載のストレージ・マネージャ・サーバ。
【請求項３１】
前記具体的コピー命令生成手段が、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解する手段を含む、請求項２９に記載のストレージ・マネージャ・サーバ。
【請求項３２】
前記具体的コピー命令生成手段が、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割する手段を含む、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項３３】
前記具体的コピー命令生成手段が、実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成する手段を含む、請求項２３に記載のストレージ・マネージャ・サーバ。
【請求項３４】
データ・ストレージ・ネットワークにおけるデータ記憶装置間サーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施するコンピュータ・プログラム製品であって、
１つまたは複数のデータ記憶媒体と、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成する、前記データ記憶媒体上に記録された抽象的コピー命令生成手段と、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換する、前記データ記憶媒体上に記録された具体的コピー命令生成手段とを含み、
実送信元ターゲットが関与する抽象的コピー命令を、実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令生成手段がそれをマージすることができるコンピュータ・プログラム製品。
【請求項３５】
前記仮想ターゲットが仮想ＦＩＦＯである、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３６】
前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すのに必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３７】
前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、請求項３６に記載のコンピュータ・プログラム製品。
【請求項３８】
前記具体的コピー命令生成手段が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって、各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットを組み合せて１つの具体的コピー命令を形成する前記データ記憶媒体上に記録された手段を含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項３９】
前記具体的コピー命令生成手段が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けする前記データ記憶媒体上に記録された手段と、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージする前記データ記憶媒体上に記録された手段とを含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項４０】
前記抽象的コピー命令生成手段が、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成する前記データ記憶媒体上に記憶された手段を含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項４１】
サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、請求項４０に記載のコンピュータ・プログラム製品。
【請求項４２】
前記具体的コピー命令生成手段が、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信先ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解する前記データ記憶媒体上に記憶された手段を含む、請求項４０に記載のコンピュータ・プログラム製品。
【請求項４３】
前記具体的コピー命令生成手段が、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割する前記データ記憶媒体上に記録された手段を含む、請求項３４に記載のコンピュータ・プログラム製品。
【請求項４４】
前記具体的コピー命令生成手段が、実宛先ターゲットへのデータ転送が実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成する前記データ記憶媒体上に記録された手段を含む、請求項３４に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ・ストレージ・ネットワークに関し、特に、ＳＡＮ（ストレージ・エリア・ネットワーク）機能などを実施するネットワークに関する。より詳細には、本発明は、データ・ストレージ・ネットワーク環境における記憶装置間のサーバフリー・（server-free）データ転送に関する。
【背景技術】
【０００２】
背景として、ＳＡＮシステムなどのデータ・ストレージ・ネットワークは、データ記憶専用の高速ネットワーク内でデータ記憶周辺装置を管理する環境を提供する。そうしたネットワークはしばしば、データ・ストレージ・マネージャ・サーバを含み、このサーバは従来のＬＡＮ（ローカル・エリア・ネットワーク）またはＷＡＮ（広域ネットワーク）を介してそのストレージ・マネージャ・サーバに接続されたデータ・クライアント・ノード（データ・クライアント）からのデータ記憶要求（例えばコピー、バックアップなど）を処理する。データ・ストレージ・ネットワーク内では、ストレージ・マネージャ・サーバは、一般に、周辺記憶装置プール内のすべての装置にアクセスでき、このプールには、相互接続された磁気ディスク・ドライブ・アレイ、光ディスク・ドライブ・アレイ、磁気テープ・ライブラリなどが何台でも含まれ得る。最小のものを除くすべてのデータ・ストレージ・ネットワークは、必要な相互接続はアービトレーテッド・ループ（arbitrated loop）構成またはスイッチング・ファブリックによって提供され、後者の方がより一般的である。
【０００３】
データ・ストレージ・ネットワーク環境内には、従来から、ストレージ・マネージャ・サーバが、記憶装置間でのデータ移動作業を代行させるために使用してきた機能がある。例えば、ＳＣＳＩ−３（小型コンピュータ記憶インターフェイス）拡張コピー・コマンドは、データ・ストレージ・ネットワーク内の１組の論理記憶ユニットからストレージ・マネージャ・サーバの制御下にある別の１組の論理記憶ユニットにデータをコピーする手段を提供するが、実際のデータ転送操作はそのデータ・ストレージ・ネットワーク内の「データ・ムーバ」エンティティによって実施される。この「サーバフリー」データ移動は、ストレージ・マネージャ・サーバの要求によりデータ・ムーバが実施する。ストレージ・マネージャ・サーバに必要とされることは、データ送信元装置および宛先装置を用意し、次いで、拡張コピー・コマンドを作成しそれをデータ・ムーバに発行することだけである。ストレージ・マネージャ・サーバは、実際のデータ転送操作を実施しないので、より多くの同時クライアント接続およびサーバ操作を自由に処理することができる。
【０００４】
ＳＣＳＩ−３拡張コピー・コマンドは、従来のやり方では、送信元記憶装置と宛先記憶装置（ターゲット）を指定する多くの「コピー命令」、および各送信元ターゲットから各宛先ターゲットに転送されるデータ・ブロックからなる。この環境で発生する１つの問題は、送信元ターゲットを知るエンティティが宛先ターゲットを知るエンティティと同じでないことがあり得ることである。第３のエンティティが、圧縮、暗号化、チェック・データ生成などのデータ操作を行うこともあり得る。これらのエンティティは、１つのプログラムの異なる部分とすることもでき、異なるコンピュータ・システム上に位置することもできる。一方の当事者はもう一方の当事者が何を知っているか知らないことがあり、両当事者は必ずしも相互に信頼し合っているとは限らない。このため、転送される各データ・ブロックごとに送信元ターゲットと宛先ターゲットの両方を指定する必要のあるコピー命令の作成が難しくなる。もう１つの問題は、前述のデータ操作を提供することが難しいことである。現行の機能を用いると、各データ送信元および宛先ターゲットごとに別々にそうした変換を指定しなければならないはずである。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、前述の問題を解決することを対象とする。具体的には、必ずしも送信元ターゲットと宛先ターゲットの両方について完全には知らないエンティティがデータ・コピー・コマンドを作成することができる、サーバフリー・データ転送を処理する代替システムおよび方法が必要とされている。別の目的は、そのデータ転送に関与する両ターゲットの特徴を知らずに、圧縮、暗号化、チェック・データ生成などのデータ変換を提供できるシステムおよび方法を提供することである。
【課題を解決するための手段】
【０００６】
データ・ストレージ・ネットワークにおけるサーバフリー・データ転送操作を求める要求を作成し処理する際に、仮想ターゲットおよび抽象的コピー命令を利用するシステムおよび方法によって、前述の問題が解決され、当技術分野での前進が得られる。抽象的コピー命令とは、仮想ターゲットと実装置の間のデータ転送を表す。抽象的コピー命令は送信元ターゲット・コピー命令を宛先ターゲット・コピー命令とは別個に作成できるようにする。次いで、この抽象的コピー命令を、サーバフリー・データ転送操作を実施するデータ・ムーバが実行できるように、実装置ターゲットだけが関与する具体的コピー命令に変換することができる。
【０００７】
本発明の例示的実施形態では、仮想ターゲットは仮想ＦＩＦＯであり、具体的コピー命令は、一例にすぎないが、ＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である。共通の仮想ターゲットを参照する抽象的コピー命令の各対をそれぞれの送信元ターゲットおよび宛先ターゲットとマージし、それによって、各抽象的コピー命令対ごとに、送信元ターゲットと宛先ターゲットとを組み合わせて具体的コピー命令を形成することによって、抽象的コピー命令を具体的コピー命令に変換することができる。このプロセスは、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ化すること、および抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する送信元ターゲットがその対のうち他方の抽象的コピー命令に関連する宛先ターゲットにリンクされるように各リストの先頭で抽象的コピー命令の対をマージすることを含むことができる。また、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成できることも望ましい。この仮想ターゲット間抽象的コピー命令を使って、サーバフリー・データ転送を実施するときにデータ再配列またはインライン・データ挿入に対応することができる。各仮想ターゲット間抽象的コピー命令は、実送信元ターゲットから仮想送信元ターゲットにデータを供給する抽象的コピー命令と、仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解する（collapse）ことができる。また、データのデッドロック状態に対応するために、抽象的コピー命令を、より小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割できることも望ましい。最後に、実宛先ターゲットへのデータ転送が実施できるようになるまでデータ・ムーバがデータをバッファし、それによってその実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成できることが望ましい。
【０００８】
本発明では、さらに、データ・ストレージ・ネットワーク用のストレージ・マネージャ・サーバ、および、データ・ストレージ・ネットワーク装置上で前述のサーバフリー・データ転送機能を実行できるようにするコンピュータ・プログラム製品が企図されている。
【０００９】
本発明の上記その他の特徴および利点は、添付の図面に示す本発明の好ましい実施形態の、以下のより詳細な説明を読めば明らかになるであろう。
【発明を実施するための最良の形態】
【００１０】
次に図を見ると、これら複数の図のすべてにおいて、類似の参照番号は類似の要素を表す。図１に、本発明によるサーバフリー・データ転送操作を実施するように適合されたストレージ・マネージャ・サーバ２を示す。ストレージ・マネージャ・サーバ２は、アービトレーテッド・ループ構成、スイッチング・ファブリックその他の適当なネットワーク接続方式によって複数のデータ記憶装置と相互接続されたストレージ・エリア・ネットワーク（ＳＡＮ）４とやりとりする。これらの記憶装置には、それだけに限らないが例として、ディスク記憶システム６およびテープ・ライブラリ記憶システム８が含まれ得る。ストレージ・マネージャ・サーバ２は、クライアント・システム１２など１つまたは複数のデータ処理クライアントを含むローカル・エリア・ネットワーク（ＬＡＮ）１０ともやりとりする。クライアント・システム１２に関連するデータ・セットは、（データ・セット１４Ａを記憶する）ディスク・システム６または（データ・セット１４Ｂを記憶する）テープ・ライブラリ・システム８あるいはその両方など、ＳＡＮ４内の記憶リソース上にあると想定される。クライアント・システム１２は最初に、ＳＡＮ４へのそれ自体の接続によって、またはストレージ・マネージャ・サーバ２を介して、これらのデータ・セットをそれぞれの記憶リソースに保管することができる。
【００１１】
設計上の好みに応じて、ＳＡＮ４を構成する様々な要素を実施するために使用できる様々なシステム構成要素がある。ＳＡＮ設計の基礎を成すのは、ファイバ・チャネル、イーサネット（Ｒ）、ＳＣＳＩなどの適切な通信および媒体技術の選択であろう。これらの中核的技術の１つを選択することにより、ＳＡＮスイッチング要素を実施するために使用する装置、ならびにＳＡＮに接続される装置内に備えるネットワーク・インターフェイスの選択が決定される。
【００１２】
ストレージ・マネージャ・サーバ２は、クライアント・システム１２への適切なアクセス・インターフェイスを提供するＳＡＮアプリケーション・サーバとして構成されるものとする。これは、必要とされるデータ転送機能を実施するために必要なハードウェアおよびソフトウェア・リソースを用いて構成された従来のプログラム可能なコンピュータ・プラットフォームから構築することができる。コンピュータ・プラットフォームの例には、ＩＢＭ（Ｒ）ＯＳ／３９０（Ｒ）オペレーティング・システムが稼動するＩＢＭ（Ｒ）Ｓ／３９０（Ｒ）システムなどのメインフレーム・コンピュータ、ＩＢＭ（Ｒ）ＯＳ／４００（Ｒ）オペレーティング・システムが稼動するＩＢＭ（Ｒ）ＡＳ／４００（Ｒ）システムなどの中型コンピュータ、ＩＢＭ（Ｒ）拡張対話式エグゼクティブ（ＡＩＸ（Ｒ））オペレーティング・システムが稼動するＩＢＭ  ＲＩＳＣ  ＳＹＳＴＥＭ／６０００（Ｒ）システムなどのワークステーション・コンピュータ、あるいはＷＩＮＤＯＷＳ（Ｒ）オペレーティング・システム、ＵＮＩＸ（Ｒ）またはＵＮＩＸ（Ｒ）系のオペレーティング・システムまたはオペレーティング・システム・カーネルが稼動する、任意の数のマイクロプロセッサ・ベースのパーソナル・コンピュータが含まれる。ストレージ・マネージャ・サーバ２を実施するために使用できるサーバ・アプリケーション・ソフトウェア環境の一例としては、ＩＢＭ（Ｒ）ＴＩＶＯＬＩ（Ｒ）ストレージ・マネージャ製品がある。
【００１３】
ストレージ・マネージャ・サーバ２はさらに、ファイバ・チャネル・ホスト・バス・アダプタ（ＨＢＡ）など、適当なネットワーク・インターフェイスを含み、これは、（ＳＡＮ４がファイバ・チャネル・ネットワークである場合は）ストレージ・マネージャ・サーバ２がＳＡＮ４を介してやりとりできるようにする。一般には、（ＬＡＮ１０がイーサネット（Ｒ）・ネットワークである場合は）ＬＡＮ１０を介したデータ通信を容易にするために、イーサネット（Ｒ）・カードなど別のネットワーク・インターフェイスも存在することになる。
【００１４】
ＳＡＮ４内の記憶装置間で、周期的に、クライアント・システム１２のデータ・セットを転送する必要があることもある。例えば、クライアント・システム１２は、ディスク・システム６からテープ・ライブラリ・システム８にデータ・セット１４Ａを転送したいと望むことがある。クライアント・システム１２は、ストレージ・マネージャ・サーバ２にデータ・バックアップ、アーカイブまたは移行要求を発行することによって、そうした転送を開始することができる。実施形態の詳細によっては、この転送要求には、ＳＡＮ４の１つまたは複数の送信元記憶装置ターゲット上に位置する１つまたは複数のファイル、ボリュームその他のデータ・セットが関与することがあり、そうしたデータをＳＡＮの１つまたは複数の宛先記憶装置ターゲットに転送する必要があることもある。
【００１５】
ＳＡＮの効率を高めるために、ストレージ・マネージャ・サーバ２は、前述のタイプのデータ転送要求を「サーバフリー」で処理するように適合される。本発明の普遍性を制限するものではないが、議論を容易にするために、ストレージ・マネージャ・サーバ２はＳＣＳＩ−３拡張コピー・コマンドを使ってサーバフリー・データ転送を実施するものとする。前述の背景技術で簡単に述べたように、ＳＣＳＩ−３拡張コピー・コマンドは、コマンド開始プログラムの最小限の関与で、１組の記憶装置ターゲットから別の１組の記憶装置ターゲットへのデータ・セットの転送を可能にする。コマンド開始プログラムは拡張コピー・コマンドを生成し、次いで、「データ・ムーバ」と呼ばれる別のエンティティを呼び出して、送信元ターゲットと宛先ターゲットとの間の実際のデータ転送を処理させる。ＳＡＮ４では、ストレージ・マネージャ・サーバ２はＳＣＳＩ−３拡張コピー・コマンド開始プログラムとして機能するようにプログラムされるものとする。データ・ムーバの一例を参照番号１６で示す。これは、ストレージ・マネージャ・サーバ２によって発行されたＳＣＳＩ−３拡張コピー・コマンドを実行できるＳＣＳＩ−３ＳＡＮルータ／ブリッジまたは他の任意のＳＣＳＩ−３装置として実施することができる。公知のように、データ・ムーバはディスク・システム６、テープ・ライブラリ・システム８その他への追加構成要素として実施することもできる。
【００１６】
ＳＣＳＩ−３拡張コピー・コマンド・パラメータ・リストのフォーマットを図２に参照番号２０で示す。このリストは、特に、ターゲット記述子２２のリスト、セグメント記述子２４のリストおよびインライン・データ２６を含む。ターゲット記述子２２はデータ転送操作に関与する送信元ターゲットおよび宛先ターゲットを識別する。セグメント記述子２４は、読取り書込みを行うブロック数、処理するバイト数、および処理の性格を含む、各送信元ターゲットおよび宛先ターゲットごとに転送されるデータを識別する。インライン・データ２６は、送信元装置と宛先装置の間で転送されるデータに挿入されているメタ・データを表す。
【００１７】
図３に、ＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子３０の一例を示す。本発明の操作を示す後続の実施例を理解しやすくするために、このセグメント記述子３０は、ディスク・ドライブなどのブロック装置と、テープ・ドライブなどのストリーミング装置との間のデータ転送を示すように選択されている。この（ブロック／ストリーミング）セグメント記述子３０は、３２で送信元ターゲットを、３４で宛先ターゲットを、３６でストリーム装置転送長を、３８でブロック装置ブロック数を、３９でブロック装置論理ブロック・アドレス（データ位置決め情報）を識別する。図４にストリーミング装置へのインライン・データの転送のためのセグメント記述子４０の一例を示す。これもやはり、本明細書の後段で述べる実施例を理解しやすくするために選択されている。このインライン／ストリーム・セグメント記述子４０は、４２で宛先ターゲットを、４４でストリーム装置転送長を、４６でインライン・データ・オフセット（データ位置決め情報）を、４８でインライン・データ・バイト数を識別することに留意されたい。当分野で公知のように、ＳＣＳＩ拡張コピー・コマンドを使用する他のタイプのデータ転送に他のセグメント記述子を使用することもできる。
【００１８】
ＳＣＳＩ−３拡張コピー・コマンド中に指定されたセグメント記述子は、コピー命令と呼ばれることもある。図３および図４を見ればわかるように、各コピー命令は送信元ターゲットおよび宛先ターゲットの知識を必要とする。しかし、前述の背景技術で示したように、ＳＣＳＩ−３拡張コピー・コマンドを生成するソフトウェアが一方のターゲットの知識だけしか持たない別々のソフトウェアからなる場合もある。例えば、ＴＩＶＯＬＩ（Ｒ）ストレージ・マネージャでは、それぞれが送信元ターゲット・データと宛先ターゲット・データを処理する別々の実行プロセス・スレッドを使ってデータ転送要求を処理することができる。この状況では、これら別々のソフトウェアの作業を調整してコピー命令を作成できるようにするために、追加のオーバーヘッド処理が必要になる。さらに、圧縮、暗号化、チェック・データ生成などのデータ変換を提供することも困難である。というのは、各ターゲットがそうした操作を処理するやり方に違いがあるために、通常は、各送信元および宛先ターゲットごとの変換を別々に指定することができないからである。
【００１９】
本発明が提供する解決策は、送信元ターゲットおよび宛先ターゲットのためのデータ転送を、別個のソフトウェアが別々に指定できるようにすると共に、実装置ターゲット間で転送されるデータの直接の利用側および供給側として仮想ターゲットを使用するものである。仮想ターゲットは具体的な実装置には対応せず、一時的なデータの保持場所を表す。それにもかかわらず、仮想ターゲットは、あたかも実装置であるかのように、最初は実送信元ターゲットからデータを送信する１つのコピー命令中の宛先ターゲットとして、後には実宛先ターゲットにデータを転送する別のコピー命令中の送信元ターゲットとして扱われる。「抽象的コピー命令」または「ＡＣＯ」の概念は、実装置と仮想ターゲットの間の、またはある仮想ターゲットと別の仮想ターゲットとの間のデータ転送を表すコピー命令を記述するための手段（vehicle）としても導入される。本発明のＳＣＳＩ−３実施形態では、実装置の代わりに仮想ターゲットが指定されることを除くあらゆる点で、ＡＣＯは、ＳＣＳＩ−３拡張コピー・コマンドで使用される従来のコピー命令と同様のものとすることができる。便宜上、実装置だけが関与する従来のコピー命令を、これ以降、具体的コピー命令または「ＣＣＯ」と呼ぶことにする。
【００２０】
仮想ターゲットは２つの理由で使用される。第１に、仮想ターゲットは送信元側用および宛先側用のＡＣＯを別々に構築できるようにする。第２に、要求されたデータ操作が、送信元ターゲットおよび宛先ターゲット上のブロック境界上で開始、終了しないとき、ＳＣＳＩ−３拡張コピー・コマンドは、隠れた状態（あるセグメント記述子から次のセグメント記述子まで保留されたデータ）を伴う厄介な状態を提示する。この厄介な状態をカプセル化するために、ＡＣＯをブロック境界上で開始、終了するように設計して、あるＡＣＯから次のＡＣＯにデータが暗黙的に繰り越されないようにする。
【００２１】
仮想ターゲットの概念を使用すれば、実送信元装置の知識を有する「データ供給側」ソフトウェア・アプリケーションが、その送信元装置から仮想ターゲットにデータをコピーするためのＡＣＯを含むコピー・コマンドを作成することが可能である。実宛先装置の知識を有する「データ利用側」ソフトウェア・アプリケーション（このアプリケーションは異なるプログラムとすることも、異なるコンピュータ・システム上に常駐させることもできる）も、同様に、その仮想ターゲットから宛先装置にデータをコピーするためのＡＣＯを含むコピー・コマンドを作成することができる。これらのコマンドを組み合わせ、ＡＣＯをＣＣＯに変換することによって、従来のサーバフリー・データ転送操作に関連する第１の問題を克服することができる。データ供給側アプリケーションが実送信元データだけを管理し、宛先を仮想ターゲットとして指定すればよいということは、このアプリケーションは、それが作成するＡＣＯで使用されるデータ変換（すなわち、圧縮、暗号化、チェック・データ）を指定することもできることを意味する。同じことがデータ利用側アプリケーションにも当てはまる。データ転送に関与する実際の実送信元ターゲットおよび実宛先ターゲットによって使用されるデータ変換方式のどんな違いも、仮想ターゲットを媒介として使用すれば処理することができる。これによって従来のサーバフリー・データ転送操作に関連する第２の問題が解決される。
【００２２】
本発明に従って使用できる仮想ターゲットの一例に、仮想無制限ＦＩＦＯ（先入れ、先出し）バッファがある。典型的な使用法は、すべての送信元データが１つの仮想ＦＩＦＯに供給され、次いで、すべての宛先データがその同じ仮想ＦＩＦＯから導出されるものであろう。あるいは、複数の仮想ＦＩＦＯを参照することが有用である場合もあり得る。例えば、送信元データを第１の仮想ＦＩＦＯに供給し、次いで、それを第２のＦＩＦＯに転送することができ、すべての宛先データをその第２の仮想ＦＩＦＯから導出することもできる。
【００２３】
次に図７を見ると、データ転送操作に使用されるＡＣＯを生成し処理するストレージ・マネージャ・サーバ２の構成要素が示されている。従来型の設計および動作のセッション・マネージャ５０は、クライアント・システム１２などのＬＡＮホストからデータ転送要求（バックアップ、アーカイブ、移行要求など）を受け取るように適合される。データ転送要求に応答して、セッション・マネージャ５０は、そのデータ転送要求を処理するためにデータ供給側アプリケーション５２とデータ利用側アプリケーション５４を別々に呼び出す２つのセッション・プロセス・スレッドを生成する。データ供給側アプリケーション５２は、そのデータ転送要求に関与する実送信元装置の知識を有し、その送信元装置から仮想ＦＩＦＯにデータを転送するための送信元ＡＣＯを生成するように適合される。データ利用側アプリケーション５４も、同様に、データ転送要求に関与する実宛先装置の知識を有し、仮想ＦＩＦＯからその宛先装置にデータを転送するための宛先ＡＣＯを生成するように適合される。コピー・マネージャ５６はこれらの送信元ＡＣＯおよび宛先ＡＣＯを受け取る。コピー・マネージャ５６は、セッション識別トークンなどセッション・マネージャ５０が提供するコピー調整情報５７を使って、そのデータ転送要求に関連する送信元ＡＣＯと宛先ＡＣＯとを結合する「抽象的コピー・コマンド」または「ＡＣＣ」を生成するように適合される。本発明のＳＣＳＩ−３実施形態では、ＡＣＣは、仮想ＦＩＦＯとの間の転送を伴うことを除くあらゆる点で、従来のＳＣＳＩ−３拡張コピー・コマンドと同一のものとすることができる。これは、一般に、クライアント・データおよびインライン・データ（制御およびリテラル情報など）を含む。コピー・エージェント５８は、コピー・マネージャ５６からＡＣＣを受け取る。コピー・エージェントの仕事は、各ＡＣＣとそれに関連するＡＣＯを変換して、１つまたは複数の対応する「具体的コピー・コマンド」または「ＣＣＣ」とそれに関連するＣＣＯを生成することである。これらのＡＣＣが、仮想ＦＩＦＯが関与するＳＣＳＩ−３拡張コピー・コマンドを表す場合は、そのＣＣＣは実装置だけが関与する標準のＳＣＳＩ−３拡張コピー・コマンドになる。これは、従来の方式で実行できるようにデータ・ムーバ１６に送られるＣＣＣである。
【００２４】
仮想ターゲットの定義特性は（ＦＩＦＯであれそれ以外のものであれ）、それが、データの中間記憶のための抽象的機能を、その機能を提供する具体的サービスを指定せずに定義することである。指定された結果を生じさせるための具体的処理および機能を見つけることは、コピー・エージェント５８の仕事である。仮想ＦＩＦＯバッファは厳密に先入れ先出しのバイトのストリーミングをサポートする。これを使って、複数の送信元からのデータの１つの出力ストリームへの組立て、または複数の出力装置への１つのストリームの配布、あるいはその両方を容易にする。例を挙げると、ＳＣＳＩ−３拡張コピー・コマンドの組込みＦＩＦＯバッファリング（ＣＡＴ＝１のとき）、および内蔵ＦＩＦＯリソースを明示的にアドレス指定するためのコピー・エージェントの機能を使って、これらの結果を得ることができる。
【００２５】
仮想ＦＩＦＯに関してコピー・エージェント５８に定義された挙動は、実ターゲット上でのデータ移動が、各仮想ＦＩＦＯの具現化が実ターゲットとして使用可能でありそれが使用された場合と同じになるように、コピー操作を実施することである。これは、同じ仮想ターゲットを送信元と宛先として参照するＡＣＯを組み合わせて仮想ターゲットへの参照を取り除くことによって、あるいはコピー・エージェント５８の内部または外部の一時記憶を、その仮想ターゲットの特性を近似する実ターゲットとして使用することによって実施することができる。
【００２６】
コピー・エージェント５８で使用する好ましい実施原理は、（所与の仮想ＦＩＦＯを宛先として指定する）「供給側」ＡＣＯが（同じ仮想ＦＩＦＯを送信元として指定する）対応する「利用側」ＡＣＯに一致するまで、仮想ＦＩＦＯを参照するＡＣＯを保持することである。一致した後では、それらのＡＣＯは、実送信元装置から実宛先装置への１つまたは複数のＣＣＯとして理想的に実施することができる。仮想ＦＩＦＯの順次的性格は、供給側ＡＣＯが受信順に保持され、利用側ＡＣＯが使用可能になったときにそれと組み合わされることを示唆する。コピー・エージェントの作業は、それが単に（補助ディスク・スペースなどの）実記憶を使って仮想ＦＩＦＯの内容を保持する場合は、より単純になるはずである。実際、ＳＣＳＩ−３拡張コピーの単純な実施形態を使用すると別の中間記憶を使用しない限り実現できないが、仮想ＦＩＦＯを使用すれば指定できるコピー操作がある（例えば、テープからテープに異なる順序でブロックをコピーするなど）。しかし、本発明の目的は、パフォーマンスに影響があるので、補助記憶の使用を最小限にすることである。したがって、コピー・エージェント５８は、ＡＣＯを組み合わせて送信元から宛先へのＣＣＯにできるようになるまで、実際にはデータを転送せずにＡＣＯを保持しようとする。
【００２７】
図５および図６に、それぞれ、データ・バックアップ操作およびデータ管理操作のために仮想ＦＩＦＯをどのように使用できるかを示す。図５のデータ・バックアップ操作では、サイズがそれぞれ１８００バイトと６３００バイトの２つのファイルからのディスク・ブロック（各５１２バイト）をテープ（６４ＫＢレコード・サイズ）にバックアップする。テープには、バックアップ・ヘッダ（ＢＨ１）およびファイル・ヘッダ（ＦＨ１およびＦＨ２）を表すリテラル（メタ）データも挿入される。２つの仮想ＦＩＦＯ（ＦＩＦＯ  ＡおよびＦＩＦＯ  Ｂ）（図示せず）を使ってこのデータ・バックアップ操作を実施するために、以下の順序のＡＣＯを生成することができる。
全ディスク・ブロックからＦＩＦＯ  Ａに：（ファイル１＝「１〜４」とラベル付けされた４ブロック、ファイル２＝「５〜９」および「１０〜１７」とラベル付けされた１３ブロック）
リテラルからＦＩＦＯ  Ｂに：ＢＨ１、ＦＨ１
ＦＩＦＯ  ＡからＦＩＦＯ  Ｂに（ファイル１＝１８００バイト）
ＦＩＦＯ  Ａから廃棄に（２４８バイト［＝（４＊５１２）−１８００］）
リテラルからＦＩＦＯ  Ｂに：ＦＨ２
ＦＩＦＯ  ＡからＦＩＦＯ  Ｂに（６３００バイト）
ＦＩＦＯ  Ａから廃棄に（３５６バイト［＝（１３＊５１２）−６３００］）
ＦＩＦＯ  Ｂから（パディングと共に）テープに
図６のデータ管理操作では、ＦＨ１によって識別されたファイルをテープから除去する。２つの仮想ＦＩＦＯ（ＦＩＦＯ  ＡおよびＦＩＦＯ  Ｂ）（図示せず）を使ってこのデータ管理操作を実施するために以下の順序のＡＣＯを生成することができる。
テープ・ブロックからＦＩＦＯ  Ａに（全レコード）
リテラルからＦＩＦＯ  Ｂに：ＢＨ１’
ＦＩＦＯ  Ａから廃棄に（ＢＨ１、ＦＨ１、ファイル１データ）
ＦＩＦＯ  ＡからＦＩＦＯ  Ｂに（ＦＨ２のサイズ＋６３００バイト）
ＦＩＦＯ  Ｂから（パディングと共に）テープに
ＦＩＦＯ  Ａをクリアする
【００２８】
前述の操作は比較的簡単なものであるが、そうした操作は、バイト順序および細分性という２つの理由で、複雑になることがある。まず、ＡＣＯの順序は保存しなければならないバイト順を示唆する。ＦＩＦＯからＦＩＦＯへの転送が許可されるとき、あるＦＩＦＯ（Ａ）の待ち行列先頭の利用側ＡＣＯ（ｘ）を、別のＦＩＦＯ（Ｂ）の供給側ＡＣＯとすることができ、異なる供給側ＡＣＯ（ｗ）の後ろに並ばせることができる。その場合ＡＣＯ（ｘ）は、ＡＣＯ（ｗ）が実施されるまで実施することができない。しかし、別の装置上の順序要件が、ＡＣＯ（ｗ）がＡＣＯ（ｘ）に先行することもできないと示唆することもあり得る。この（まさに再配列ブロックのテープ・コピーの際に起こる）デッドロックは、ＡＣＯ順序で正しい最終結果（ｘ１、ｗ、ｘ２）が得られるように、中間記憶を使って一部のＡＣＯ（例えばｘ）を複数の構成要素（ｘ１、ｘ２）に分割することによって、打開する必要がある。バイト順序を実行すると共に、生じ得るデッドロックを検出し打開することが、第１の設計上の課題である。細分性の課題は、ディスク装置およびテープ装置上では完全なブロックの読取りおよび書込みを行う必要があるが、ＦＩＦＯからＦＩＦＯへの操作では任意のバイト長を選択できることである。したがって、ＡＣＯを組み合わせると、テープから読み取った１ブロックの一部を（１つまたは複数のＦＩＦＯを介して）ある宛先装置上の１ブロックの一部に送信し、その残りを他の場所で使用することが必要になることもある。
【００２９】
これは仮想ＦＩＦＯを使用する際のキーとなる値である。コピー・エージェント５８はこの細分性の制約という厄介な問題をカプセル化する。その結果、データを読み込むときに、データ・ムーバ１６の内部バッファに一部の結果を残しておくことができる。コピー・エージェント５８は、ＣＣＯを作成するときには、そのＣＣＯが実行されるときにそれらのバッファ内にどのデータがあることになるか判別し、それを考慮に入れる必要がある。
【００３０】
コピー・エージェント５８によって実施されるプロシージャは、これらの問題を解決し、ＡＣＯのシーケンスを対応するＣＣＯのシーケンスに変換しようと試みるものである。その全体的な戦略は、ＡＣＯのシーケンスを読み取り、その制約を再配列に反映する１組のＡＣＯの待ち行列を構築するものである。ＡＣＯのグループを可能な限り早く待機解除してＣＣＯを放出する、すなわち、各ＣＣＯのパラメータを定義しそれを後で実行するために出力リストに付加する。これは、１つまたは複数のＡＣＯを、同じ結果を生み出す１組のＣＣＯおよびＡＣＯで置き換える変換ステップでなされる。一部の変換はＣＣＯを生成せず、ＣＣＯへの変換をより容易にまたは可能にするようにＡＣＯを調整する。ＣＣＯを放出するこれらの変換は、その組合せを元のＡＣＯセットと等価にするために、放出されたＣＣＯに続く新規のＡＣＯを生成することもできる。これがよく見られるのは、細分性の不一致によって、データ・ムーバ１６の内部バッファに残余データが残されたときである。ＣＣＯが放出された後で、それらを実行した場合と同様にそれらの副次作用を判定する。ＣＣＯは、放出後には、変更されない。
【００３１】
次に図８を見ると、コピー・エージェント５８によって実施されるＡＣＯからＣＣＯへの変換プロセスが流れ図形式で示されている。前述のように、ＡＣＣを処理する際には、ＡＣＯを順に検査し、可能なときに各装置に対して読取りおよび書込み操作を実施することによってそれぞれを完了する。この方法では、仮想ＦＩＦＯを宛先として指定する「供給側」ＡＣＯのすべてを、同じ仮想ＦＩＦＯを送信元として指定する、対応する「利用側」ＡＣＯと組み合わせることができるまで、各ＡＣＯを保持する。前述のように、供給側ＡＣＯと利用側ＡＣＯを組み合わせることによって一時記憶が不要になる。
【００３２】
図８に示す最初のステップ６０は、コピー・エージェント５８がコピー・マネージャ５６から１組のＡＣＯを受け取るためのものである。ステップ６２では、コピー・エージェント５８は、それらのＡＣＯで識別された仮想ＦＩＦＯを定義し、各仮想ＦＩＦＯごとに、保持された供給側ＡＣＯと保持された利用側ＡＣＯの別個のリストを設定する。ステップ６４では、コピー・エージェント５８は、送信元として使用される各実順次装置（テープなど）ごとに、供給側ＡＣＯのリストを設定し、宛先として使用される各実順次装置ごとに、利用側ＡＣＯのリストを設定する。これらのＡＣＯリストのすべては、ＡＣＯが検査された順序で保持される。ステップ６６では、コピー・エージェント５８は、実装置間の転送を表すＡＣＯを探す。可能な場合は、それらをＣＣＯに変換する。ステップ６８では、コピー・エージェント５８は、仮想ＦＩＦＯ間の転送を表すＡＣＯを探す。それらを実装置が関与するＡＣＯに分解し、次いで、ステップ７０では、さらに処理すべきＡＣＯがある場合は、ステップ６６に戻る。
【００３３】
仮想ＦＩＦＯ間転送は、ＡＣＯが、そのＡＣＯの送信元ターゲットを表す第１の仮想ＦＩＦＯの利用側リストとそのＡＣＯの宛先ターゲットを表す第２の仮想ＦＩＦＯのための供給側リストなど、異なる仮想ＦＩＦＯに関連する２つのリスト上に現れるときに指示される。これは、仮想ＦＩＦＯ間トランザクションを指示し、これを不要にすれば、ＡＣＯをＣＣＯに変えるという全体目標の達成が容易になる。第１の仮想ＦＩＦＯの利用側リストおよび第２の仮想ＦＩＦＯの供給側リスト上に見られる第１のＡＣＯが検出されると、ステップ６８で、コピー・エージェント５８は、可能な場合には、第１の仮想ＦＩＦＯの供給側リストの先頭にある第２のＡＣＯと、第２の仮想ＦＩＦＯの利用側リストの先頭にある第３のＡＣＯを処理することによって、第１のＡＣＯを不要にする。図９は例示的なものである。この図に、第１の仮想ＦＩＦＯ  Ｆ１と第２の仮想ＦＩＦＯ  Ｆ２の間のデータ転送を表す第１のＡＣＯ  Ａを示す。したがって、ＡＣＯ  Ａは、仮想ＦＩＦＯ  Ｆ１の利用側リスト上と仮想ＦＩＦＯ  Ｆ２の供給側リスト上に現れる。第２のＡＣＯ  Ｂは、実装置ＤＥＶ１から仮想ＦＩＦＯ  Ｆ１への転送を表す。第３のＡＣＯ  Ｃは、仮想ＦＩＦＯ  Ｆ２から実装置ＤＥＶ２への転送を表す。コピー・エージェント５８は、ＡＣＯ  Ａを、ＤＥＶ１とＤＥＶ２の間の転送を表す新規のＡＣＯ  Ｄで置き換えようと試みることによって、これを分解する。
【００３４】
各ＡＣＯは、一般に、異なるデータ長をもつことに留意されたい。場合によっては、長さが一致するように、より大きいＡＣＯ命令を２つのＡＣＯに分割することもできる。別の場合には、ＡＣＯを分割することはできず、そのデータを中間バッファに読み込んでそこに保持する。これは、図８のステップ６６で実施されるプロセスの一部である。どのようにＡＣＯを組み合わせるかの詳細は、データ・ムーバ１６の機能に依存し、実送信元装置（テープやディスク）の性質にも依存する。しかし、その究極の目標は、前述のプロシージャを使ってＡＣＯを減らし続けてＣＣＯだけを残すことである。図８のステップ７０で、ＡＣＯが処理されたと判定すると、制御権がステップ７２に移り、プロシージャが終了する。
【実施例】
【００３５】
以下は、ディスク装置からテープ装置へのデータ・バックアップのためのＡＣＯからＣＣＯへの変換の一例である。宛先Ａ、Ｂ、Ｃ、Ｄ…を使って各ＡＣＯの名前を表す。宛先Ｆ１、Ｆ２、Ｆ３、Ｆ４を使って各仮想ＦＩＦＯの名前を表す。ディスク・データの間にメタ・データを挿入し、次いで、挿入後のデータをテープにバックアップすることも望まれることに留意されたい。コピー・マネージャ５６は、コピー・エージェント５８に以下のＡＣＯセットを提供するものとする。
コピー・マネージャから受け取るＡＣＯセット
Ａ：ディスク−＞Ｆ１  ０ｘ６００００バイトの顧客データをディスクからＦ１に読み込む
Ｂ：リテラル−＞Ｆ２  ０ｘ１７４バイトのメタ・データ１をＦ２に提供する
Ｃ：リテラル−＞Ｆ３  ０ｘ８０バイトのメタ・データ２をＦ３に提供する
Ｄ：Ｆ３−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ３からＦ４に移動する
Ｅ：Ｆ２−＞Ｆ４  ０ｘ１７４バイトのメタ・データ１をＦ２からＦ４に移動する
Ｆ：Ｆ１−＞Ｆ４  ０ｘ３ＦＥ６Ｃバイトの顧客データをＦ１からＦ４に移動する
Ｇ：Ｆ３−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ３からＦ４に移動する
Ｈ：Ｆ１−＞Ｆ４  ０ｘ１ＦＦＥ０バイトの顧客データをＦ１からＦ４に移動する
Ｉ：Ｆ３−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ３からＦ４に移動する
Ｊ：Ｆ１−＞Ｆ４  ０ｘ１Ｂ４バイトの顧客データをＦ１からＦ４に移動する
Ｋ：Ｆ３−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ３からＦ４に移動する
Ｌ：Ｆ４−＞テープ  ０ｘ６００００バイトの顧客データをＦ４からテープに書き込む
Ｍ：Ｆ４−＞テープ  ０ｘ１Ｆ４バイトをＦ４からテープに書き込む
【００３６】
図７のデータ供給側アプリケーション５２は、実装置から仮想ＦＩＦＯへのデータ転送を伴うすべてのＡＣＯ、すなわちＡＣＯ  Ａ、Ｂ、Ｃを生成することに留意されたい。図７のデータ利用側アプリケーション５４は、仮想ＦＩＦＯから実装置へのデータ転送を伴うすべてのＡＣＯ、すなわちＡＣＯ  Ｌ、Ｍを生成する。図７のコピー・マネージャ５６は、データ供給側アプリケーション５２とデータ利用側アプリケーション５４によって生成されるＡＣＯを組み合わせるその機能の一部として、またメタ・データを挿入するために、仮想ＦＩＦＯ間のデータ転送を伴うＡＣＯ、すなわちＡＣＯ  Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｉ、Ｊ、Ｋを生成する。
【００３７】
コピー・エージェント５８によって実施される処理プロシージャは、前述のＡＣＯを、テープ利用側リスト、ＦＩＦＯ利用側リストおよびＦＩＦＯ供給側リストの待ち行列に入れる。これらのＡＣＯは、その検査順に様々なリストに加えられる。送信元ディスクは直接アクセス装置であるので、実行順序は重要でなく、その装置のための利用側リストは不要である。これらのＡＣＯリストは以下のとおりであり、その図式を図１０に示す。
Ｆ１供給側リスト：Ａ
Ｆ１利用側リスト：Ｆ  Ｈ  Ｊ
Ｆ２供給側リスト：Ｂ
Ｆ２利用側リスト：Ｅ
Ｆ３供給側リスト：Ｃ
Ｆ３利用側リスト：Ｄ  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト：Ｄ  Ｅ  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト：Ｌ  Ｍ
宛先テープ供給側リスト：Ｌ  Ｍ
【００３８】
実装置間のデータ転送を指定するＡＣＯはないことに留意されたい。したがって、コピー・エージェント処理プロシージャは１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯに転送を行うＡＣＯを選択し、そうしたＡＣＯそれぞれを実装置が関与するＡＣＯに変えようとし、その後でＣＣＯへの変換を行う。コピー・マネージャ５６から受け取ったＡＣＯセットのうちのＡＣＯ  Ｄ〜ＫはＦＩＦＯ間転送を伴うものであることに留意されたい。ＡＣＯ  ＤはＦ３からＦ４への転送であり、Ｆ３利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  ＣはＦ３供給側リストの先頭にあり、ＡＣＯ  ＬはＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＤをＡＣＯ  ＣおよびＬが関与する転送に解消（resolve）しようとする。処理されるＣ、Ｄ、およびＬの各バイト・ブロックは以下のとおりである。
Ｃ＝０ｘ８０バイト
Ｄ＝０ｘ２０バイト
Ｌ＝０ｘ６００００バイト
Ｃ＞Ｄであることに留意されたい。したがって、ＣはＣ１とＣ２に分割され、そこで、
Ｃ１＝０ｘ２０バイト
Ｃ２＝０ｘ６０バイト
である。
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ２供給側リスト  Ｂ
Ｆ２利用側リスト  Ｅ
Ｆ３供給側リスト  Ｃ１  Ｃ２
Ｆ３利用側リスト  Ｄ  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｄ  Ｅ  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
【００３９】
次に、処理プロシージャは、Ｃ１、Ｄ、およびＬの組合せを処理のため選択する。
Ｃ１＝０ｘ２０バイト
Ｄ＝０ｘ２０バイト
Ｌ＝０ｘ６００００バイト
処理プロシージャは、Ｃ１、ＤおよびＬを分解してＣ１ＤおよびＬにする。これはＡＣＯ  ＤのＦＩＦＯ間操作を不要にし、それをＣ１Ｄで置き換える。これは以下のように解釈される。
Ｃ１Ｄ  ：リテラル−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ４に提供する。
処理されるＣ１ＤおよびＬの各バイト・ブロックは以下のとおりである。
Ｃ１Ｄ＝０ｘ２０バイト（Ｃ１Ｄは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｌ＝０ｘ６００００バイト
Ｃ１Ｄの下で転送される合計バイト・サイズは０ｘ２０バイトであり、これはＬの宛先テープ・ブロック・サイズより小さい。ＡＣＯ  Ｌは分割されない。
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ２供給側リスト  Ｂ
Ｆ２利用側リスト  Ｅ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｃ１Ｄ  Ｅ  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
【００４０】
この時点で、ＡＣＯ  Ｃ１ＤおよびＬは、実送信元（メタ・データ）および実宛先（テープ装置）を有する操作である。コピー・エージェント５８は、データ・ムーバ１６が０ｘ２０バイトのメタ・データ２を読み取りそれをデータ・ムーバの宛先バッファに移動することによって実施する、１つのＣＣＯを生成することができる。ＡＣＯ  Ｃ１Ｄはこの操作の最後に除去することができる。
図１１に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ２供給側リスト  Ｂ
Ｆ２利用側リスト  Ｅ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｅ  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００４１】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＡＣＯに変え、その後でＣＣＯへの変換を行おうと試みる。先に列挙したＡＣＯセットを見ると、ＡＣＯ  ＥはＦＩＦＯ間転送を伴う次のＡＣＯであることがわかる。それはＦ２からＦ４への転送であり、Ｆ２利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  ＢはＦ２供給側リストの先頭にあること、およびＡＣＯ  ＬはＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＥをＡＣＯ  ＢおよびＬが関与する転送に解消しようとする。
処理されるＢ、Ｅ、およびＬの各バイト・ブロックは以下のとおりである。
Ｂ＝０ｘ１７４バイト
Ｅ＝０ｘ１７４バイト
Ｌ＝０ｘ６００００バイト
処理プロシージャは、Ｂ、Ｅ、およびＬを分解してＢＥおよびＬにする。これは、ＡＣＯ  ＥのＦＩＦＯ間操作を不要にし、それをＢＥで置き換える。これは以下のように解釈される。
ＢＥ：リテラル−＞Ｆ４  ０ｘ１７４バイトのメタ・データ１をＦ４に提供する。
処理されるＢＥおよびＬの各バイト・ブロックは以下のとおりである。
ＢＥ＝０ｘ１７４バイト（ＢＥは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｌ＝０ｘ６００００バイト
ＡＣＯ  ＢＥ内の合計バイト数は０ｘ１７４バイトであり、宛先テープ・ブロック・サイズより小さい。ＡＣＯ  Ｌは分割されない。
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  ＢＥ  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００４２】
この時点で、ＡＣＯ  ＢＥおよびＬは、実送信元（メタ・データ）および実宛先（テープ装置）を有する操作である。したがって、コピー・エージェント５８は、データ・ムーバ１６が０ｘ１７４バイトのメタ・データ１を読み取り、それをデータ・ムーバの宛先バッファに移動してデータ・ムーバ宛先バッファ＝０ｘ２０バイト＋０ｘ１７４バイト＝０ｘ１９４バイトになるようにすることによって実施する、１つのＣＣＯを生成することができる。次いで、コピー・エージェントは、この操作の最後にＡＣＯ  ＢＥを除去する。
図１２に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
データ・ムーバ宛先バッファ＝０ｘ１９４バイト
【００４３】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＡＣＯに変えようとし、その後でＣＣＯへの変換を行う。先に列挙したＡＣＯセットを見ると、ＡＣＯ  ＦはＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ１からＦ４への転送であり、Ｆ１利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  ＡはＦ１供給側リストの先頭にあること、およびＡＣＯ  ＬはＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＦをＡＣＯ  ＡおよびＬが関与する転送に解消しようとする。
処理されるＡ、Ｆ、およびＬの各バイト・ブロックは以下のとおりである。
Ａ＝０ｘ６００００バイト
Ｆ＝０ｘ３ＦＥ６Ｃバイト
Ｌ＝０ｘ６００００バイト
Ａ＞Ｆであることに留意されたい。したがって、ＡはＡ１とＡ２に分割され、そこで、
Ａ１＝０ｘ３ＦＥ６Ｃバイト
Ａ２＝０ｘ２０１９４バイト
である。
図１３に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ１  Ａ２
Ｆ１利用側リスト  Ｆ  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
データ・ムーバ宛先バッファ＝０ｘ１９４バイト
【００４４】
次に、コピー・エージェント処理プロシージャは、Ａ１、ＦおよびＬの組合せを処理するように選択する。
Ａ１＝０ｘ３ＦＥ６Ｃバイト
Ｆ＝０ｘ３ＦＥ６Ｃバイト
Ｌ＝０ｘ６００００バイト
処理プロシージャは、Ａ１、ＦおよびＬを分解してＡ１ＦおよびＬにする。これは、ＡＣＯ  ＦのＦＩＦＯ間操作を不要にし、それをＡ１Ｆで置き換える。これは以下のように解釈される。
Ａ１Ｆ：ディスク−＞Ｆ４  ０ｘ３ＦＥ６Ｃバイトの顧客データをディスクからＦ４に読み込む。
処理されるＡ１ＦおよびＬの各バイト・ブロックは以下のとおりである。
Ａ１Ｆ＝０ｘ３ＦＥ６Ｃバイト（Ａ１Ｆは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｌ＝０ｘ６００００バイト
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ａ１Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ  Ｍ
宛先テープ供給側リスト  Ｌ  Ｍ
データ・ムーバ宛先バッファ＝０ｘ１９４バイト
Ａ１Ｆ＜Ｌであることに留意されたい。したがって、ＬはＬ１とＬ２に分割され、ここで、
Ｌ１＝０ｘ４００００バイト
Ｌ２＝０ｘ２００００バイト
である。
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ａ１Ｆ  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ１  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ１  Ｌ２  Ｍ
データ・ムーバ宛先バッファ＝０ｘ１９４バイト
【００４５】
この時点で、ＡＣＯ  Ａ１ＦおよびＬ１は実送信元（ディスク装置）および実宛先（テープ装置）を有する操作である。したがって、コピー・エージェント５８は、データ・ムーバ１６が０ｘ３ＦＥ６Ｃバイトのデータを送信元ディスクから読み取り、まず、データ・ムーバの宛先バッファにあるデータ（０ｘ１９４バイト）を、次いでそのディスク・データ（０ｘ３ＦＥ６Ｃバイト）を宛先テープ装置に移動することによって実施する、１つのＣＣＯを生成することができる（書き込まれる合計テープ・データは０ｘ１９４＋０ｘ３ＦＥ６Ｃ＝０ｘ４００００バイト）。次いで、コピー・エージェント５８は、この操作の最後にＡＣＯ  Ａ１ＦおよびＬ１を除去することができる。
図１４に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ２
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
【００４６】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＡＣＯに変えようとし、その後でＣＣＯへの変換を行う。先に列挙したＡＣＯセットを見ると、ＡＣＯ  ＧはＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ３からＦ４への転送であり、Ｆ３利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  Ｃ２はＦ３供給側リストの先頭にあること、およびＡＣＯ  Ｌ２はＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＧをＡＣＯ  Ｃ２およびＬ２が関与する転送に解消しようとする。処理されるＣ２、Ｇ、およびＬ２の各バイト・ブロックは以下のとおりである。
Ｃ２＝０ｘ６０バイト
Ｇ＝０ｘ２０バイト
Ｌ２＝０ｘ２００００バイト
Ｃ２＞Ｇであることに留意されたい。したがって、Ｃ２はＣ３とＣ４に分割され、ここで、
Ｃ３＝０ｘ２０バイト
Ｃ４＝０ｘ４０バイト
である。
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ３  Ｃ４
Ｆ３利用側リスト  Ｇ  Ｉ  Ｋ
Ｆ４供給側リスト  Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
【００４７】
次に、処理プロシージャは、Ｃ３、Ｇ、およびＬ２の組合せを処理するように選択する。
Ｃ３＝０ｘ２０バイト
Ｇ＝０ｘ２０バイト
Ｌ２＝０ｘ２００００バイト
処理プロシージャは、Ｃ３、Ｇ、およびＬ２を分解してＣ３ＧおよびＬ２にする。これは、ＡＣＯ  ＧのＦＩＦＯ間操作を不要にし、それをＣ３Ｇで置き換える。これは以下のように解釈される。
Ｃ３Ｇ：リテラル−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ４に提供する。
処理されるＣ３ＧおよびＬ２の各バイト・ブロックは以下のとおりである。
Ｃ３Ｇ＝０ｘ２０バイト（Ｃ３Ｇは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｌ２＝０ｘ２００００バイト
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ４
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ｃ３Ｇ  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
【００４８】
この時点で、ＡＣＯ  Ｃ３ＧおよびＬ２は、実送信元（メタ・データ）および実宛先（テープ装置）を有する操作である。コピー・エージェント５８は、データ・ムーバ１６が０ｘ２０バイトのメタ・データ２を読み取りそれをデータ・ムーバの宛先バッファに移動することによって実施する、１つのＣＣＯを生成することになる。次いで、コピー・エージェント５８は、この操作の最後にＡＣＯ  Ｃ３Ｇを除去することができる。
図１５に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ２
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ４
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００４９】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＡＣＯに変えようとし、その後でＣＣＯへの変換を行う。先に列挙したＡＣＯセットを見ると、ＡＣＯ  Ｈは、ＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ１からＦ４への転送であり、Ｆ１利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  Ｃ２はＦ１供給側リストの先頭にあること、およびＡＣＯ  Ｌ２はＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＨをＡＣＯ  Ａ２およびＬ２が関与する転送に解消しようとする。処理されるＡ２、Ｈ、およびＬ２の各バイト・ブロックは以下のとおりである。
Ａ２＝０ｘ２０１９４バイト
Ｈ＝０ｘ１ＦＦＥ０バイト
Ｌ２＝０ｘ２００００バイト
Ａ２＞Ｈであることに留意されたい。したがって、Ａ２はＡ３とＡ４に分割され、ここで、
Ａ３＝０ｘ１ＦＦＥ０バイト
Ａ４＝０ｘ１Ｂ４バイト
である。
図１６に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ３  Ａ４
Ｆ１利用側リスト  Ｈ  Ｊ
Ｆ３供給側リスト  Ｃ４
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００５０】
次に、処理プロシージャは、Ａ３、Ｈ、およびＬ２の組合せを処理するように選択する。
Ａ３＝０ｘ１ＦＦＥ０バイト
Ｈ＝０ｘ１ＦＦＥ０バイト
Ｌ２＝０ｘ２００００バイト
処理プロシージャは、Ａ３、Ｈ、およびＬ２を分解してＡ３ＨおよびＬ２にする。これは、ＡＣＯ  ＨのＦＩＦＯ間操作を不要にし、それをＡ３Ｈで置き換える。これは以下のように解釈される。
Ａ３Ｈ  ディスク−＞Ｆ４  ０ｘ１ＦＦＥ０バイトの顧客データをディスクからＦ４に読み込む。
処理されるＡ３ＨおよびＬ２の各バイト・ブロックは以下のとおりである。
Ａ３Ｈ＝０ｘ１ＦＦＥ０バイト（Ａ３Ｈは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｌ２＝０ｘ２００００バイト
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ４
Ｆ１利用側リスト  Ｊ
Ｆ３供給側リスト  Ｃ４
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ａ３Ｈ  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｌ２  Ｍ
宛先テープ供給側リスト  Ｌ２  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００５１】
この時点で、ＡＣＯ  Ａ３ＨおよびＬ２は、実送信元（ディスク装置）および実宛先（テープ装置）を有する操作である。コピー・エージェント５８は、データ・ムーバ１６が送信元ディスクから０ｘ１ＦＦＥ０バイトのデータを読み取り、まずデータ・ムーバの宛先バッファにあるメタ・データ２を（０ｘ２０バイト）、次いでそのディスク・データ（０ｘ１ＦＦＥ０バイト）を宛先テープ装置に移動することによって実施する、１つのＣＣＯを生成することができる。書き込まれる合計テープ・データは、０ｘ２０＋０ｘ１ＦＦＥ０＝０ｘ２００００バイトである。次いで、コピー・エージェント５８は、この操作の最後にＡＣＯ  Ａ３ＨおよびＬ２を除去することができる。
図１７に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ４
Ｆ１利用側リスト  Ｊ
Ｆ３供給側リスト  Ｃ４
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｍ
宛先テープ供給側リスト  Ｍ
【００５２】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＣＣＯに変えようとする。先に列挙したＡＣＯセットから、ＡＣＯ  ＩはＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ３からＦ４への転送であり、Ｆ３利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  Ｃ４がＦ３供給側リストの先頭にあること、およびＡＣＯ  ＭがＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャは、ＡＣＯ  ＩをＡＣＯ  Ｃ４およびＭが関与する転送に解消しようとする。処理されるＣ４、Ｉ、およびＭの各バイト・ブロックは以下のとおりである。
Ｃ４＝０ｘ４０バイト
Ｉ＝０ｘ２０バイト
Ｍ＝０ｘ１Ｆ４バイト
Ｃ４＞Ｉであることに留意されたい。したがって、Ｃ４はＣ５とＣ６に分割され、ここで、
Ｃ５＝０ｘ２０バイト
Ｃ６＝０ｘ２０バイト
である。
図１８に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ４
Ｆ１利用側リスト  Ｊ
Ｆ３供給側リスト  Ｃ５  Ｃ６
Ｆ３利用側リスト  Ｉ  Ｋ
Ｆ４供給側リスト  Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｍ
宛先テープ供給側リスト  Ｍ
【００５３】
次に、処理プロシージャは、Ｃ５、Ｉ、Ｍの組合せを処理するように選択する。
Ｃ５＝０ｘ２０バイト
Ｉ＝０ｘ２０バイト
Ｍ＝０ｘ１Ｆ４バイト
処理プロシージャはＣ５、Ｉ、およびＭの組合せを分解してＣ５ＩおよびＭにする。これは、ＡＣＯ  ＩのＦＩＦＯ間操作を不要にし、それをＣ５Ｉで置き換える。これは以下のように解釈される。
Ｃ５Ｉ：リテラル−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ４に提供する。
処理されるＣ５ＩおよびＭの各バイト・ブロックは以下のとおりである。
Ｃ５Ｉ＝０ｘ２０バイト（Ｃ５Ｉは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｍ＝０ｘ１Ｆ４バイト
このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ４
Ｆ１利用側リスト  Ｊ
Ｆ３供給側リスト  Ｃ６
Ｆ３利用側リスト  Ｋ
Ｆ４供給側リスト  Ｃ５Ｉ  Ｊ  Ｋ
Ｆ４利用側リスト  Ｍ
宛先テープ供給側リスト  Ｍ
【００５４】
この時点で、ＡＣＯ  Ｃ５ＩおよびＭは、実送信元（メタ・データ）および実宛先（テープ装置）を有する操作である。したがって、コピー・エージェント５８は、データ・ムーバ１６が０ｘ２０バイトのメタ・データ２を読み取りそれをデータ・ムーバの宛先バッファに移動することによって実施する、１つのＣＣＯを生成することができる。次いでコピー・エージェント５８は、この操作の最後に、ＡＣＯ  Ｃ５Ｉを除去することができる。
図１９に示すように、このときＡＣＯリストは以下のようになる。
Ｆ１供給側リスト  Ａ４
Ｆ１利用側リスト  Ｊ
Ｆ３供給側リスト  Ｃ６
Ｆ３利用側リスト  Ｋ
Ｆ４供給側リスト  Ｊ  Ｋ
Ｆ４利用側リスト  Ｍ
宛先テープ供給側リスト  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００５５】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＣＣＯに変えようとする。前述のＡＣＯリストを見ると、ＡＣＯ  ＪはＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ１からＦ４への転送であり、Ｆ１利用側リストとＦ４供給側リストの先頭にある。また、ＡＣＯ  Ａ４がＦ１供給側リストの先頭にあること、およびＭがＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャはＡＣＯ  Ｊを、ＡＣＯ  Ａ４およびＭが関与する転送に解消しようとする。処理されるＡ４、Ｊ、およびＭの各バイト・ブロックは以下のとおりである。
Ａ４＝０ｘ１Ｂ４バイト
Ｊ＝０ｘ１Ｂ４バイト
Ｍ＝０ｘ１Ｆ４バイト
処理プロシージャはＡ４、Ｊ、およびＭを分解してＡ４ＪおよびＭにする。これは、ＡＣＯ  ＪのＦＩＦＯ間操作を不要にし、それをＡ４Ｊで置き換える。これは以下のように解釈される。
Ａ４Ｊ  ディスク−＞Ｆ４  ０ｘ１Ｂ４バイトの顧客データをディスクからＦ４に読み込む。
処理されるＡ４ＪおよびＭの各バイト・ブロックは以下のとおりである。
Ａ４Ｊ＝０ｘ１Ｂ４バイト（Ａ４Ｊは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｍ＝０ｘ１Ｆ４バイト
このときＡＣＯリストは以下のようになる。
Ｆ３供給側リスト  Ｃ６
Ｆ３利用側リスト  Ｋ
Ｆ４供給側リスト  Ａ４Ｊ  Ｋ
Ｆ４利用側リスト  Ｍ
宛先テープ供給側リスト  Ｍ
データ・ムーバ宛先バッファ＝０ｘ２０バイト
【００５６】
この時点で、ＡＣＯ  Ａ４ＪおよびＭは実送信元（ディスク装置）および実宛先（テープ装置）を有する操作である。したがって、コピー・エージェント５８は、データ・ムーバ１６が送信元ディスクから０ｘ１Ｂ４バイトのデータを読み取りこのデータをデータ・ムーバ宛先バッファに移動することによって実施する、１つのＣＣＯを生成することができる。次いで、コピー・エージェント５８は、この操作の最後にＡＣＯ  Ａ４Ｊを除去することができる。
図２０に示すように、このときコピーリストは以下のようになる。
Ｆ３コピー命令供給側リスト  Ｃ６
Ｆ３コピー命令利用側リスト  Ｋ
Ｆ４コピー命令供給側リスト  Ｋ
Ｆ４コピー命令利用側リスト  Ｍ
宛先テープ供給側コピー命令リスト  Ｍ
データ・ムーバ宛先バッファ＝０ｘ１Ｄ４バイト
【００５７】
次に、処理プロシージャは、１つの仮想ＦＩＦＯから別の仮想ＦＩＦＯへの転送を行う次のＡＣＯを選択して、それを実装置が関与するＣＣＯに変えようとする。先に列挙したＡＣＯセットを見ると、ＡＣＯ  ＫはＦＩＦＯ間転送が関与する次のＡＣＯであることがわかる。それはＦ３からＦ４への転送であり、Ｆ３の利用側リストとＦ４の供給側リストの先頭にある。また、ＡＣＯ  Ｃ６はＦ３供給側リストの先頭にあり、ＡＣＯ  ＭはＦ４利用側リストの先頭にあることもわかる。したがって、処理プロシージャはＡＣＯ  Ｋを、ＡＣＯ  Ｃ６およびＭが関与する転送に解消しようとする。処理されるＣ６、Ｋ、およびＭの各バイト・ブロックは以下のとおりである。
Ｃ６＝０ｘ２０バイト
Ｋ＝０ｘ２０バイト
Ｍ＝Ｏｘ１Ｆ４バイト
処理プロシージャはＡＣＯ  Ｃ６、ＫおよびＭを分解してＣ６ＫおよびＭにする。これはＡＣＯ  ＫのＦＩＦＯ間操作を不要にし、それをＣ６Ｋで置き換える。これは以下のように解釈される。
Ｃ６Ｋ  リテラル−＞Ｆ４  ０ｘ２０バイトのメタ・データ２をＦ４に提供する。
処理されるＣ６ＫおよびＭの各バイト・ブロックは以下のとおりである。
Ｃ６Ｋ＝０ｘ２０バイト（Ｃ６Ｋは実送信元および仮想ＦＩＦＯ宛先を有する）
Ｍ＝０ｘ１Ｆ４バイト
【００５８】
この時点で、ＡＣＯ  Ｃ６ＫおよびＭは実送信元（メタ・データ）および実宛先（テープ装置）を有する操作である。したがって、コピー・エージェント５８は、データ・ムーバ１６が０ｘ２０バイトのメタ・データ２を読み取り、まず、データ・ムーバの宛先バッファにあるデータ（０ｘ１Ｄ４バイト）を、次いで、そのメタ・データ２（０ｘ２０バイト）を移動することによって実施する、１つのＣＣＯを生成することができる。書き込まれる合計テープ・データは、０ｘ２０＋０ｘ１Ｄ４＝０ｘ１Ｆ４バイトである。この時点で、すべてのＡＣＯが処理されたことになり、データ・ムーバのバッファにはそれ以上のデータはなくなる。したがって、この拡張コピー操作が完了する。結果を図２１に示す。
【００５９】
コピー・エージェント・アーキテクチャの例
次に図２２を見ると、図７のコピー・エージェント５８の例示的一実施形態１００が、ＳＡＮ１０４内に様々に位置することができる複数のデータ・ムーバ１０２ａ、１０２ｂ、１０２ｃと共に示されている。図２２のコピー・エージェント１００では、コピー・エージェントは、前述のＡＣＯからＣＣＯへの変換機能を実施するコピー・コマンド・トランスレータ１０６を含む。さらに、コピー・エンジン１０８、コピー・グループ・マネージャ１１０、コピー・リソース・マネージャ１１２、ミニＮＡＲ（名前／アドレス・レジストリ）１１４もある。ＳＡＮ１０４につながるドライバ・ブロック１１８および通過ブロック１２０へのインターフェイスを提供するＳＣＳＩラッパ機能１１６が示されている。
【００６０】
コピー・コマンド・トランスレータ１０６は、指定された送信元ターゲットと宛先ターゲットの間でＡＣＯを処理してＣＣＯにするためのオブジェクト指向プログラミング・エンティティとして実施することができる。その各インスタンスは、複数のデータ・レコードを設定してそれを維持し、１組の処理関数を実施する。このデータ・レコードは、送信元ターゲットおよび宛先ターゲットに関する情報をそれぞれ保持する送信元範囲ターゲット・レコードおよび宛先範囲ターゲット・レコードと、データ・ムーバに関連する送信元バッファおよび宛先バッファをそれぞれ識別する送信元バッファ・ターゲット・レコードおよび宛先バッファ・ターゲット・レコードと、（ディスクを除く）実ターゲットおよび仮想ターゲットに関連する供給側待ち行列および利用側待ち行列と、データ・ムーバの送信元バッファおよび宛先バッファ内のバイト数を追跡する送信元バッファ・バイト・レコードおよび宛先バッファ・バイト・レコードとを含む。コピー・コマンド・トランスレータ１０６によって実施される処理関数には以下のものが含まれ得る。
・  buildACompleteChain()；／＊入力ＡＣＯからＣＣＯの完全な連鎖を構築する＊／
・  buildAChainFromDB()；／＊データ・ムーバの宛先バッファからＣＣＯ連鎖を構築する＊／
・  buildAChainFromSB()；／＊データ・ムーバの送信元バッファからＣＣＯ連鎖を構築する＊／
・  collapseSFintoS；／＊送信元ＦＩＦＯターゲットを実送信元ターゲットに分解する＊／
・  collapseDFintoD；／＊宛先ＦＩＦＯターゲットを実宛先ターゲットに分解する＊／
【００６１】
コピー・エンジン１０８は、コピー・エージェントの操作を管理する状態マシンである。最初に、コピー・エンジンは、ＳＡＮ１０４内のデータ・ムーバおよび実ターゲットの状況および機能を調べるためのディスカバリー・モードを取る。ディスカバリー・プロセスが成功の結果で完了した場合、コピー・エンジン１０８は、呼出し元１２２からのコピー要求を処理可能な状態である作動可能モードに入る。ディスカバリー・プロセスが成功裏に完了しなかった場合、コピー・エンジンは作動不能状態を呈する。コピー・エンジン１０８が作動可能状態になったものとして、コピー・エンジン１０８は、そのコピー要求と共にコピー・エージェント１００に渡されるＡＣＣに基づくＣＣＣを生成するよう求める、呼出し元１２２からのコピー要求に応答する。最初に、コピー・エンジン１０８は、各ＡＣＯの送信元および宛先ターゲット用の名前／アドレス・テーブル索引を取得し、そのＡＣＣに関連する送信側および受信側関数（インライン・データ）があればそれを復号化して送信側／受信側関数属性を取得し、転送される合計バイト数を計算し、以上をコピー・エージェント１００が所有する専用情報として記憶することによってＡＣＣを前処理する。次いで、コピー・エンジン１０８は、コピー・コマンド・トランスレータ１０６のインスタンスを作成し、ＡＣＣからＣＣＣへの変換を実施するためにコピー・コマンド・トランスレータ・インスタンスを呼び出す変換タスクを待ち行列に入れる。次いで、コピー・エンジン１０８は、１つまたは複数のＣＣＣを構築しそれらをデータ・ムーバ１０２ａ、１０２ｂ、または１０２ｃに渡して実行させる発行タスクを実施する。その後コピー・エンジン１０８は、呼出し元１２２に戻ってコピー要求操作の結果を報告する。
【００６２】
コピー・グループ・マネージャ１１０は、コピー・エンジン１０８によってインスタンス化される、各インスタンスが単一のＡＣＣと１対１対応関係にあるようなオブジェクト指向プログラミング・エンティティとして実施することができる。各コピー・グループ・マネージャ・インスタンスは、それに関連するＡＣＣの変換の間だけ存続し、その後削除される。コピー・グループ・マネージャ・インスタンスは、ＡＣＣから生成されたＣＣＣのリストを指し示す。それはまた、すべての送信側および受信側関数データを追跡する送信側関数テーブルおよび受信側関数テーブルを所有し、送信側および受信側データのコピーのためのバッファを所有し、それらのバッファが参照された回数を追跡してそれらのバッファをいつ空けるか判断し、各送信側および受信側関数が確実に１度だけ呼び出されるようにもする。
【００６３】
コピー・リソース・マネージャ１１２は、コピー・エージェント１００が呼び出されたときにインスタンス化され初期設定されるオブジェクト指向プログラミング・エンティティとして実施することができる。これは、ＡＣＯのプールを事前割り振りし、コピー・エンジン・インスタンスをインスタンス化し、いくつかのテーブルおよび待ち行列を設定するためのものである。そのテーブルおよび待ち行列には、コピー・エージェント１００が呼び出されたときに知らされるすべてのターゲットを含むリソース・テーブルと、すべてのコピー・エンジン・インスタンスを保持するためのコピー・エンジン・テーブルと、そのコピー・エージェントの処理スレッドを所有するサービス作業待ち行列と、コピー・エージェント１００が生成するＣＣＣで使用される最も望ましいターゲット記述子タイプを事前設定するための好ましいターゲット記述子アレイとが含まれる。
【００６４】
ミニＮＡＲ１１４は、すべての実装置経路情報（例えば実送信元ターゲットおよび実宛先ターゲット、データ・ムーバなど）のデータベースを所有する。これは、グローバルＮＡＲ１２４に記憶されたデータベース情報の一部を含む。各装置は、実経路情報に対応する１つまたは複数のハンドルによってミニＮＡＲ１１４（およびＮＡＲ１２４）中で識別される。したがって、実装置は、コピー・エージェント１００中で別々の記述子を介して処理する必要はなく、各ＡＣＯ内のミニＮＡＲハンドルによって識別することができる。これらのハンドルを使って、生成されたＣＣＯ用のターゲット記述子を生成する必要に応じてミニＮＡＲ１１４から情報を得ることができる。
【００６５】
ＳＣＳＩラッパ１１６は、コピー・エージェント１００によって生成されたＣＣＯを、そのコピー要求に関与する実装置のＳＣＳＩフォーマット要件に適合させるために使用される。同様に、ドライバ・ブロック１１８は、それを要求するＣＣＯのための装置レベルのフォーマッティングを提供し、通過ブロック１２０は、そうしたフォーマッティングを必要としないＣＣＯを処理する。
【００６６】
本発明の例示的一実施形態では、コピー・エージェント１００は、以下の関数（付随する「Ｃ」言語コメントはその関数の目的を記述する）を含むＡＰＩ（アプリケーション・プログラミング・インターフェイス）を用いて実施することができる。
・  void sxcInitialization()；／＊コピー・リソース・マネージャをインスタンス化しＳＣＳＩラッパ・データ構造を初期設定する＊／
・  sxcRc queryEngine(narEngineAdr*EngineAdrP)；／＊入力アドレス情報を使ってコピー・エンジンを発見する＊／
・  narRc sxcInitializeNaInCa(narEngineAdr*EngineAdrListP, narTargetinfo* TargetinfoListP)；／＊コピー・エンジン・タイプが「サーバフリー」でありコピー・エージェントがミニＮＡＲ１１４内にそのタイプをもたない場合は、入力アドレス・エンジン・リストを使ってコピー・エンジン発見を実施する＊／
・  sxcRc sxcOpenSession(void** sessionPPtr,narScopeHandle copyEngineHandle)；／＊copyEngineHandleが有効でありコピー・エンジンが作動可能であることを確認し、次いで、SxcCopySessionをインスタンス化し、sessionPPtr内のセッション・ポインタをロードする＊／
・  sxcRc sxcPerformCopy(sxcAbsCopyCommand*commandP, void* sessionP)；／＊commandPに指定された個々のＡＣＯに基づいてコピー要求を開始する（下記参照）＊／
・  sxcRc sxcAbortCopy(sxcAbsCopyCommand* commandP,void* sessionP)；／＊コピー要求を終了する＊／
・  sxcRc sxcCloseSession(void* SessionP)；／＊SxcCopySessionインスタンスを削除する＊／
【００６７】
sxcPerformCopy()関数の「commandP」パラメータで指定されるようにＡＣＣを構築する際に使用するために、様々なＡＣＯタイプを定義することができる。このコマンド・パラメータは、ＡＣＯのアレイおよびそれらのカウントを指すポインタを含むデータ構造を指すポインタである。ＡＣＯは、コピー・エージェント１００の基本操作を記述する固定サイズの構造として実施することができる。前述のように、主なＡＣＯは、送信元ターゲット上にある連続したデータ単位の、宛先ターゲット上にある連続した位置範囲への転送を表す。それはまた、順次に行われる一定の非データ操作も含む。一部のＡＣＯは、仮想ＦＩＦＯに「マーカ」を挿入するものとして定義することができ、このマーカは、そのマーカの前にあるデータが利用されるとイベントを「作動（fire)」させる。データが利用されることは、そのデータを供給するのに必要な実入出力ステップが実施されたことを示唆し、したがって、これらの入出力を生じさせるために発行されたどんなＣＣＣも戻された状態であるはずである。さらに別のＡＣＯタイプは、ＡＣＯの残りが（不透明に）ＣＣＯを含むことを示すことができる。ＡＣＯは、固定サイズのＡＣＯ構造に適合する情報よりも多くの情報を必要とする程度まで、そのＡＣＯは、データ・ポインタ、ハンドル、または追加のデータにアクセスするための関数ポインタ、あるいはそれらの組合せの形で参照を含むことができる。例えば、このようにしてＡＣＯにリテラル・データを提供することができる。
【００６８】
以下に、本発明による仮想ターゲットを使ったサーバフリー機能を実施するために使用できる、sxcPerformCopy()コマンドが理解するＡＣＯタイプの例を挙げる。設計上の好みに応じて、他にも多くのＡＣＯタイプを開発することができるであろう。
【００６９】
仮想ＦＩＦＯとの間の全体ブロック仮想ＦＩＦＯおよび部分ブロックの転送
以下のＡＣＯ関数の例を使って、複数のブロックまたは単一ブロック内の一範囲を仮想ＦＩＦＯに読み込ませ、あるいはそれを仮想ＦＩＦＯから抽出されたデータを使って書き込ませることができる。これらの関数名は実施されるＡＣＯ操作を表す。
・sxcOpDiskToFifo()；
・sxcOpTapeToFifo()；
・sxcOpFifoToDisk()；
・sxcOpFifoToTape()；
・sxcOpDiskPartToFifo()；
・sxcOpTapePartToFifo()；
・sxcOpFifoToDiskPart()。
【００７０】
上記の各ＡＣＯでは、実装置上のブロック数またはバイト範囲によって決まるバイト数によって、その仮想ＦＩＦＯに付加され、あるいはそこから除去されるバイト数が決まる。部分ブロック書込みでは、コピー・エンジン１０８が読取り／変更／書込みサイクルを実施することを必要とし、これを基本機能として実施することはできない。したがって、全体ブロックだけを書き込むようにＡＣＣを作成した方がよい。部分ブロック読取りでは、指定された範囲中にないデータは廃棄し、テープ装置では、後続ブロックの先頭に読取り位置を残しておく。そのブロック内の他のデータを、再読取りをせずに他のＡＣＯに使用する場合は、そのブロックを仮想ＦＩＦＯに読み込み、ＦＩＦＯ間ＡＣＯタイプを用いて必要な部分を取り出す必要がある。
【００７１】
仮想ＦＩＦＯとの間のバイト転送
以下のＡＣＯ関数の例を使って、仮想ＦＩＦＯ間でデータをコピーさせ、または移動させることができる。この場合も、関数名は実施されるＡＣＯ操作を表す。
・sxcOpLiteralToFifo；
・sxcOpFifoToDiscard；
・sxcOpFifoToFifoMove；
・sxcOpFifoToFifoCopy；
・sxcOpFifoToApplication。
【００７２】
最初の４つのＡＣＯを使用すると、仮想ＦＩＦＯ間でデータをコピーまたは移動することができ、仮想ＦＩＦＯにデータを付加することができ、仮想ＦＩＦＯから先行データを除去することができる。５番目のＡＣＯを使用すると、仮想ＦＩＦＯ内のデータを抽出し、コールバックを介して呼出し元に戻すこともできる。必要な場合は、バイト数を指定せずに仮想ＦＩＦＯの全内容をコピーし、移動し、あるいは廃棄できるように、前述のＡＣＯを実施することもできる。
【００７３】
したがって、以上、データ・ストレージ・ネットワークにおいてサーバフリー・データ転送操作を求める要求を作成し処理するために仮想ターゲットを使用するシステムおよび方法を開示してきた。前述の説明から、本発明のシステムを、サーバフリー・データ転送操作用に適合された既存のデータ・ネットワーク・ストレージ・マネージャ・サーバへのソフトウェア修正として実施することができ、修正されたサーバ内でその方法を実施できることが理解されるであろう。別の態様では、本発明は、本発明の各関数を実施するのに必要なソフトウェアが、１つまたは複数の携帯式（または携帯不能な）磁気または光ディスクなどのデータ記憶媒体上にオブジェクト・コードまたはソース・コードの形で記憶された、コンピュータ・プログラム製品として実施することもできる。
【００７４】
図２３に、その記憶媒体が１つまたは複数の光ディスクを含むコンピュータ・プログラム製品２００の一例を示す。ストレージ・ネットワーク管理者は、このコンピュータ・プログラム製品２００を使って、従来型のストレージ・マネージャ・サーバに本発明による仮想ターゲット・ベースのサーバフリー・データ転送機能を付加することができる。典型的なシナリオでは、コンピュータ・プログラム製品２００上にあるコードのコピーをストレージ・マネージャ・サーバ２上にインストールして、そのコードをローカルのデータ記憶媒体上にコピーできるようにする。コードがバイナリ形式である場合は、そのコードは実行可能な状態である。そうでない場合は、そのコードを必要に応じてコンパイルし、実行可能な形式に変形することができる。
【００７５】
以上、本発明の様々な実施形態を記述してきたが、本発明による多くの変形形態および代替実施形態を実施できることは明らかなはずである。したがって、本発明は、添付の特許請求の範囲およびその等価物による以外には、いかなる形でも制限されないと理解すべきものである。
【００７６】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００７７】
（１）データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施するシステムであって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成するように適合された１つまたは複数の抽象的コピー命令ジェネレータと、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換するように適合された具体的コピー命令ジェネレータとを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令ジェネレータがそれをマージすることができるシステム。
（２）前記仮想ターゲットが仮想ＦＩＦＯである、上記（１）に記載のシステム。
（３）前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すために必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、上記（１）に記載のシステム。
（４）前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、上記（３）に記載のシステム。
（５）前記具体的コピー命令ジェネレータが、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合わせて１つの具体的コピー命令を形成することによって、抽象的コピー命令を具体的コピー命令に変換するように適合されている、上記（１）に記載のシステム。
（６）前記具体的コピー命令ジェネレータが、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けし、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージすることによって抽象的コピー命令を具体的コピー命令に変換するように適合されている、上記（１）に記載のシステム。
（７）前記抽象的コピー命令ジェネレータが、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成するように適合されている、上記（１）に記載のシステム。
（８）サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、上記（７）に記載のシステム。
（９）前記具体的コピー命令ジェネレータが、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解するように適合されている、上記（７）に記載のシステム。
（１０）前記具体的コピー命令ジェネレータが、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割するように適合されている、上記（１）に記載のシステム。
（１１）前記具体的コピー命令ジェネレータが、実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成するように適合されている、上記（１）に記載のシステム。
（１２）データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施する方法であって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成するステップと、
前記抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換するステップとを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、それを前記具体的コピー命令にマージすることができる方法。
（１３）前記仮想ターゲットが仮想ＦＩＦＯである、上記（１２）に記載の方法。
（１４）前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すために必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、上記（１２）に記載の方法。
（１５）前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、上記（１４）に記載の方法。
（１６）前記抽象的コピー命令が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合わせて１つの具体的コピー命令を形成することによって、具体的コピー命令に変換される、上記（１２）に記載の方法。
（１７）前記抽象的コピー命令が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けすると共に、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージすることによって具体的コピー命令に変換される、上記（１２）に記載の方法。
（１８）仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成するステップをさらに含む、上記（１２）に記載の方法。
（１９）サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、上記（１８）に記載の方法。
（２０）前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解するステップをさらに含む、上記（１８）に記載の方法。
（２１）データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割するステップをさらに含む、上記（１２）に記載の方法。
（２２）実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成するステップをさらに含む、上記（１２）に記載の方法。
（２３）データ・ストレージ・ネットワークにおけるデータ記憶装置間のサーバフリー・データ転送を前記ネットワーク内のデータ・ムーバと協働して実施するストレージ・マネージャ・サーバであって、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成する抽象的コピー命令生成手段と、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換する具体的コピー命令生成手段とを含み、
実送信元ターゲットが関与する抽象的コピー命令を実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令生成手段がそれをマージすることができるストレージ・マネージャ・サーバ。
（２４）前記仮想ターゲットが仮想ＦＩＦＯである、上記（２３）に記載のストレージ・マネージャ・サーバ。
（２５）前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すのに必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、上記（２３）に記載のストレージ・マネージャ・サーバ。
（２６）前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、上記（２５）に記載のストレージ・マネージャ・サーバ。
（２７）前記具体的コピー命令生成手段が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって、各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットとを組み合せて１つの具体的コピー命令を形成する手段を含む、上記（２３）に記載のストレージ・マネージャ・サーバ。
（２８）前記具体的コピー命令生成手段が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けする手段と、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令にリンクされるように各リストの先頭で抽象的コピー命令の対をマージする手段とを含む、上記（２３）に記載のストレージ・マネージャ・サーバ。
（２９）前記抽象的コピー命令生成手段が、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成する手段を含む、上記（２３）に記載のストレージ・マネージャ・サーバ。
（３０）サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、上記（２９）に記載のストレージ・マネージャ・サーバ。
（３１）前記具体的コピー命令生成手段が、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信元ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解する手段を含む、上記（２９）に記載のストレージ・マネージャ・サーバ。
（３２）前記具体的コピー命令生成手段が、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割する手段を含む、上記（２３）に記載のストレージ・マネージャ・サーバ。
（３３）前記具体的コピー命令生成手段が、実宛先ターゲットへのデータ転送を実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成する手段を含む、上記（２３）に記載のストレージ・マネージャ・サーバ。
（３４）データ・ストレージ・ネットワークにおけるデータ記憶装置間サーバフリー・データ転送を、前記ネットワーク内のデータ・ムーバと協働して実施するコンピュータ・プログラム製品であって、
１つまたは複数のデータ記憶媒体と、
仮想ターゲットが関与するデータ転送を表す抽象的コピー命令を生成する、前記データ記憶媒体上に記録された抽象的コピー命令生成手段と、
抽象的コピー命令を、前記データ・ムーバが実行できるよう、実装置ターゲットだけが関与する具体的コピー命令に変換する、前記データ記憶媒体上に記録された具体的コピー命令生成手段とを含み、
実送信元ターゲットが関与する抽象的コピー命令を、実宛先ターゲットが関与する抽象的コピー命令とは別個に作成し、その後、前記具体的コピー命令生成手段がそれをマージすることができるコンピュータ・プログラム製品。
（３５）前記仮想ターゲットが仮想ＦＩＦＯである、上記（３４）に記載のコンピュータ・プログラム製品。
（３６）前記抽象的コピー命令が、（ａ）少なくとも一方が仮想である送信元ターゲットおよび宛先ターゲットと、（ｂ）どちらかが実である場合は前記送信元ターゲットまたは宛先ターゲット上のデータを探し出すのに必要なデータ位置決め情報と、（ｃ）データ・サイズ情報とを指定するデータ転送要求である、上記（３４）に記載のコンピュータ・プログラム製品。
（３７）前記具体的コピー命令がＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子である、上記（３６）に記載のコンピュータ・プログラム製品。
（３８）前記具体的コピー命令生成手段が、共通の仮想ターゲットを参照する抽象的コピー命令の対をそれぞれの実送信元ターゲットおよび実宛先ターゲットとマージし、それによって、各抽象的コピー命令対ごとに前記実送信元ターゲットと前記実宛先ターゲットを組み合せて１つの具体的コピー命令を形成する前記データ記憶媒体上に記録された手段を含む、上記（３４）に記載のコンピュータ・プログラム製品。
（３９）前記具体的コピー命令生成手段が、共通の仮想ターゲットが関与する抽象的コピー命令を供給側リストと利用側リストにグループ分けする前記データ記憶媒体上に記録された手段と、抽象的コピー命令の１つの対のうち一方の抽象的コピー命令に関連する実送信元ターゲットが前記対のうち他方の抽象的コピー命令に関連する実宛先ターゲットにリンクされるように抽象的コピー命令の対を各リストの先頭でマージする前記データ記憶媒体上に記録された手段とを含む、上記（３４）に記載のコンピュータ・プログラム製品。
（４０）前記抽象的コピー命令生成手段が、仮想送信元ターゲットと仮想宛先ターゲットの間のデータ転送を伴う仮想ターゲット間抽象的コピー命令を生成する前記データ記憶媒体上に記憶された手段を含む、上記（３４）に記載のコンピュータ・プログラム製品。
（４１）サーバフリー・データ転送を実施する際に、前記仮想ターゲット間抽象的コピー命令を使ってデータ再配列またはインライン・データ挿入に対応する、上記（４０）に記載のコンピュータ・プログラム製品。
（４２）前記具体的コピー命令生成手段が、前記仮想ターゲット間抽象的コピー命令のそれぞれを、実送信元ターゲットから前記仮想送信先ターゲットにデータを供給する抽象的コピー命令と、前記仮想宛先ターゲットから実宛先ターゲットにデータを提供する抽象的コピー命令に分解する前記データ記憶媒体上に記憶された手段を含む、上記（４０）に記載のコンピュータ・プログラム製品。
（４３）前記具体的コピー命令生成手段が、データのデッドロック状態に対応するために、前記抽象的コピー命令をより小さいサイズのデータ転送を伴う別々の抽象的コピー命令に分割する前記データ記憶媒体上に記録された手段を含む、上記（３４）に記載のコンピュータ・プログラム製品。
（４４）前記具体的コピー命令生成手段が、実宛先ターゲットへのデータ転送が実施できるようになるまで前記データ・ムーバがデータをバッファし、それによって前記実宛先ターゲットを指定する抽象的コピー命令を除去することが可能になるデータ・バッファ・コマンドを生成する前記データ記憶媒体上に記録された手段を含む、上記（３４）に記載のコンピュータ・プログラム製品。
【図面の簡単な説明】
【００７８】
【図１】本発明を実施できるデータ・ストレージ・ネットワークを示す機能構成図である。
【図２】従来のＳＣＳＩ−３拡張コピー・コマンド・パラメータ・リストのフォーマットを示す表である。
【図３】ブロック装置からストリーミング装置に顧客データを転送するための、従来のＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子（コピー命令）のフォーマットを示す表である。
【図４】ストリーミング装置にインライン・データを転送するための、従来のＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子（コピー命令）のフォーマットを示す表である。
【図５】仮想ＦＩＦＯを使ったデータ・バックアップ操作を示す図である。
【図６】仮想ＦＩＦＯを使ったデータ管理操作を示す図である。
【図７】本発明による、サーバフリー・データ転送操作のために構成されたストレージ・マネージャ・サーバを示す機能構成図である。
【図８】本発明による、抽象的コピー命令を具体的コピー命令に変換するために実施される処理ステップを示す流れ図である。
【図９】本発明によるサーバフリー・データ転送を実施するために使用できる仮想ＦＩＦＯの図である。
【図１０】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１１】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１２】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１３】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１４】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１５】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１６】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１７】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１８】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図１９】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図２０】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図２１】本発明の例示的一実施形態による、抽象的コピー命令が具体的コピー命令に変換されるときの抽象的コピー命令の供給側リストおよび利用側リストの図である。
【図２２】本発明による、コピー・エージェントの例示的一実施形態を示す機能構成図である。
【図２３】本発明による、サーバフリー・データ転送を容易にするコンピュータ・プログラム情報を記憶するコンピュータ・プログラム製品媒体を示す図である。
【符号の説明】
【００７９】
２  ストレージ・マネージャ・サーバ
４  ストレージ・エリア・ネットワーク
６  ディスク記憶システム
８  テープ・ライブラリ記憶システム
１０  ローカル・エリア・ネットワーク（ＬＡＮ）
１２  クライアント・システム
１４Ａ  データ・セット
１４Ｂ  データ・セット
１６  データ・ムーバ
２０  ＳＣＳＩ−３拡張コピー・コマンド・パラメータ・リスト
２２  ターゲット記述子
２４  セグメント記述子
２６  インライン・データ
３０  ＳＣＳＩ−３拡張コピー・コマンド・セグメント記述子
３２  送信元ターゲット
３４  宛先ターゲット
３６  ストリーム装置転送長
３８  ブロック装置ブロック数
３９  ブロック装置論理ブロック・アドレス
４０  インライン／ストリーム・セグメント記述子
４２  宛先ターゲット
４４  ストリーム装置転送長
４６  インライン・データ・オフセット
４８  インライン・データ・バイト数
５０  セッション・マネージャ
５２  データ供給側アプリケーション
５４  データ利用側アプリケーション
５６  コピー・マネージャ
５７  コピー調整情報
５８  コピー・エージェント
１００  コピー・エージェント
１０２ａ、１０２ｂ、１０２ｃ  データ・ムーバ
１０４  ＳＡＮ
１０６  コピー・コマンド・トランスレータ
１０８  コピー・エンジン
１１０  コピー・グループ・マネージャ
１１２  コピー・リソース・マネージャ
１１４  ミニＮＡＲ
１１６  ＳＣＳＩラッパ
１１８  ドライバ・ブロック
１２０  通過ブロック
１２２  呼出し元
１２４  グローバルＮＡＲ
２００  コンピュータ・プログラム製品
【図１】
2004272901.tif 000003
【図２】
2004272901.tif 000004
【図３】
2004272901.tif 000005
【図４】
2004272901.tif 000006
【図５】
2004272901.tif 000007
【図６】
2004272901.tif 000008
【図７】
2004272901.tif 000009
【図８】
2004272901.tif 000010
【図９】
2004272901.tif 000011
【図１０】
2004272901.tif 000012
【図１１】
2004272901.tif 000013
【図１２】
2004272901.tif 000014
【図１３】
2004272901.tif 000015
【図１４】
2004272901.tif 000016
【図１５】
2004272901.tif 000017
【図１６】
2004272901.tif 000018
【図１７】
2004272901.tif 000019
【図１８】
2004272901.tif 000020
【図１９】
2004272901.tif 000021
【図２０】
2004272901.tif 000022
【図２１】
2004272901.tif 000023
【図２２】
2004272901.tif 000024
【図２３】
2004272901.tif 000025