プロセッサデバイスを使用してデータを書き込むための方法であって、複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記複数の書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウメカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ内に順次、順序付けられることと、前記スライディング書き込みウィンドウメカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウメカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウメカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュメカニズムとしての機能的役割を引き受けるように適合されることを含む、方法。前記スライディング書き込みウィンドウメカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウメカニズム内の位置を計算する操作との間でのみ、クリティカルセクションを介して相互排除が適用される、請求項1記載の方法。前記単一ライタおよび前記スライディング書き込みウィンドウメカニズムが、前記複数の書き込み間隔を前記スライディング書き込みウィンドウメカニズムに提供することであって、前記スライディング書き込みウィンドウメカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返し、前記複数のバッファ間隔が前記複数のバッファに対応することと、前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウメカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウメカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少することのうちの少なくとも1つを実行することにより、前記クリティカルセクションの1つに入る、請求項2記載の方法。前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウメカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示す、請求項3記載の方法。前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ間隔をスキャンすることと、前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、前記複数のバッファ間隔が前記スライディング書き込みウィンドウメカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、前記スライディング書き込みウィンドウメカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウメカニズムを順方向に移動することのうちの少なくとも1つを前記単一ライタにより実行することをさらに含む、請求項4記載の方法。前記クリティカルセクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファコンテキストにデータをコピーすることと、前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウメカニズムに通知することと、前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタントロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、前記値がゼロに初期設定されることと、フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査CRCが計算されることと、フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数であることのうちの少なくとも1つを前記クリティカルセクションのうちの前記1つの外部で実行することをさらに含む、請求項2記載の方法。前記単一ライタを、前記スライディング書き込みウィンドウメカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させることであって、書き込むべきデータが前記スライディング書き込みウィンドウメカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウメカニズムに送信することをさらに含む、請求項1記載の方法。コンピュータ環境においてデータを書き込むためのシステムであって、コンピュータ環境において動作可能な少なくとも1つのプロセッサデバイスを含み、前記少なくとも1つのプロセッサデバイスが、複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウメカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ内に順次、順序付けられることと、前記スライディング書き込みウィンドウメカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウメカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウメカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュメカニズムとしての機能的役割を引き受けるように適合されることのために適合される、システム。前記スライディング書き込みウィンドウメカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウメカニズム内の位置を計算する操作との間でのみ、クリティカルセクションを介して相互排除が適用される、請求項8記載のシステム。前記単一ライタおよび前記スライディング書き込みウィンドウメカニズムが、前記複数の書き込み間隔を前記スライディング書き込みウィンドウメカニズムに提供することであって、前記スライディング書き込みウィンドウメカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウメカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウメカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少することのうちの少なくとも1つを実行することにより、前記クリティカルセクションの1つに入ることを容易にするために、前記少なくとも1つのプロセッサデバイスがさらに適合される、請求項9記載のシステム。前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウメカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示すために、前記少なくとも1つのプロセッサデバイスがさらに適合される、請求項10記載のシステム。前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ間隔をスキャンすることと、前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、前記複数のバッファ間隔が前記スライディング書き込みウィンドウメカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、前記スライディング書き込みウィンドウメカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウメカニズムを順方向に移動することのうちの少なくとも1つを前記単一ライタにより実行するために、前記少なくとも1つのプロセッサデバイスがさらに適合される、請求項11記載のシステム。前記クリティカルセクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファコンテキストにデータをコピーすることと、前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウメカニズムに通知することと、前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタントロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査CRCが計算されることと、フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいことのうちの少なくとも1つを前記クリティカルセクションのうちの前記1つの外部で実行するために、前記少なくとも1つのプロセッサデバイスがさらに適合される、請求項9記載のシステム。前記単一ライタを、前記スライディング書き込みウィンドウメカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させ、書き込むべきデータが前記スライディング書き込みウィンドウメカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウメカニズムに送信するために、前記少なくとも1つのプロセッサデバイスがさらに適合される、請求項8記載のシステム。プロセッサデバイスを使用してコンピュータ環境においてデータを書き込むコンピュータプログラムであって、前記コンピュータプログラムがそこに保管されたコンピュータ可読プログラムコード部分を有するコンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラムコード部分が、複数の書き込み間隔に配置された前記データを複数のバッファにロードするための第1の実行可能部分であって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウメカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ内に順次、順序付けられる第1の実行可能部分と、前記スライディング書き込みウィンドウメカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも1つに前記データを満たすと同時に前記スライディング書き込みウィンドウメカニズム内の前記データを単一ライタに伝達するための第2の実行可能部分であって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウメカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュメカニズムとしての機能的役割を引き受けるように適合される第2の実行可能部分とを含む、コンピュータプログラム。前記スライディング書き込みウィンドウメカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウメカニズム内の位置を計算する操作との間でのみ、クリティカルセクションを介して相互排除が適用される、請求項15記載のコンピュータプログラム。前記単一ライタおよび前記スライディング書き込みウィンドウメカニズムが、前記複数の書き込み間隔を前記スライディング書き込みウィンドウメカニズムに提供することであって、前記スライディング書き込みウィンドウメカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、前記複数のバッファ間隔のうちの1つの関連バッファ間隔の複数の完全チャンク間隔の数を1だけ増分することと、前記複数のバッファ間隔のうちの少なくとも1つを前記スライディング書き込みウィンドウメカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの1つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの1つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウメカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの1つを除去するときに減少することのうちの少なくとも1つを実行することにより、前記クリティカルセクションの1つに入ることを容易にするための第3の実行可能部分をさらに含む、請求項16記載のコンピュータプログラム。前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの1つにおいて定数に到達し、前記複数のバッファ間隔のうちの1つが前記スライディング書き込みウィンドウメカニズム内の第1の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示すための第4の実行可能部分をさらに含む、請求項17記載のコンピュータプログラム。前記第1のバッファ間隔が完全であることを前記フラグが示す場合に、前記スライディング書き込みウィンドウメカニズム内の前記複数のバッファ間隔をスキャンすることと、前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第1のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、前記複数のバッファ間隔が前記スライディング書き込みウィンドウメカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、前記スライディング書き込みウィンドウメカニズムから除去された前記複数のバッファ間隔のうちの前記1つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウメカニズムを順方向に移動することのうちの少なくとも1つを前記単一ライタにより実行するための第5の実行可能部分をさらに含む、請求項18記載のコンピュータプログラム。前記クリティカルセクションのうちの1つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファコンテキストにデータをコピーすることと、前記単一ライタにより、前記複数のバッファ間隔のうちの1つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウメカニズムに通知することと、前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタントロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査CRCが計算されることと、フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいことのうちの少なくとも1つを前記クリティカルセクションのうちの前記1つの外部で実行するための第3の実行可能部分をさらに含む、請求項16記載のコンピュータプログラム。前記単一ライタを、前記スライディング書き込みウィンドウメカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させるための第3の実行可能部分であって、書き込むべきデータが前記スライディング書き込みウィンドウメカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウメカニズムに送信する第3の実行可能部分をさらに含む、請求項15記載のコンピュータプログラム。当技術分野の現状を考慮して、ライタwriterたとえば、スレッド/プロセスがストレージシステムに順次データを書き込み、その書き込み操作がそれぞれの生成順序とは異なる順序でストレージシステムに到達する可能性があるコンピュータ環境においてストレージにデータを効率よく書き込む方法が必要である。一例は、ライタがネットワークによりストレージシステムにデータを送信するシステムであり、ネットワークメッセージパッキング書き込み操作はそれぞれの生成順序とは異なる順序でストレージシステムに到達する可能性がある。したがって、データを書き込むための様々な実施形態が提供される。一実施形態では、一例としてのみ、複数の書き込み間隔writeintervalに配置されたデータは複数のバッファにロードされ、複数のバッファの全体は書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウメカニズムとして構成される。データは順不同にストレージシステムに到達する可能性があり、前記バッファに適切にロードすることにより、データはストレージメディアに書き込まれる前に順次、順序付けられる。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージメディアにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。上記の模範的な方法実施形態に加えて、その他の模範的なシステムおよびコンピュータプログラムcomputerproduct実施形態が提供され、関連の利点を提供する。本発明の利点が容易に理解されるように、添付図面に例示されている特定の諸実施形態を参照することにより、上記で簡単に記述した本発明についてより詳細な記述を提供する。これらの図面が本発明の諸実施形態を描写しており、したがって、その範囲を制限するものと見なすべきではないことを理解して、添付図面の使用により具体性および詳細さを追加して本発明について記述し説明する。以下の説明および請求された主題全体を通して、例示されている諸実施形態に関する以下の用語が記載されている。ライタwriter、複数のライタwriters、単一ライタsinglewriter、または複数の単一ライタsinglewritersは、ストレージシステムに対して書き込み間隔を生成して発行することによりストレージシステムに順次データを書き込むスレッドまたはプロセスを指すためのものである。書き込み間隔writeintervalは、ライタによってストレージシステムに順次書き込まれるデータセットからのデータの間隔を指すためのものである。書き込み間隔は順次データセット内のその開始オフセットおよびサイズによって指定される。順次書き込みシーケンスで生成される間、書き込み間隔は相互に交差することはない。書き込み間隔のサイズは書き込み操作間で異なる可能性がある。バッファ間隔bufferintervalは、スライディング書き込みウィンドウ内のメモリバッファに関連付けられることを指すためのものであり、書き込まれるデータセットに関してバッファがカバーする間隔を表す。バッファ間隔は、順次データセット内のその開始オフセットおよびサイズと、バッファコンテキストによって指定される。バッファ間隔が着信データでいっぱいになると、それをストレージにフラッシュすることができ、そのバッファコンテキストをリリースして他の場所で再利用することができる。バッファ間隔の境界は交差せず、このようなバッファ間隔はすべて同じサイズを有する。バッファ間隔は書き込み間隔と交差する可能性がある。チャンク間隔chunkintervalは、バッファ間隔の1セクションを指すためのものであり、書き込まれるデータセットに関してその開始オフセットおよびサイズによって指定される。チャンク間隔は、ストレージにフラッシュされる前にメモリバッファ内に保管されたデータに対して何らかの操作を実行するために使用することができる。本出願では、システム巡回冗長検査CRCは着信データに基づいて計算され、チャンク間隔に基づいて実行される。フラッシャflusherは、その着信データ内容が完全であるメモリバッファをスライディング書き込みウィンドウから収集し、その内容をストレージメディア、ストレージデバイス、ストレージ環境、または記憶媒体にフラッシュするスレッドまたはプロセスを指すためのものである。単一ライタは、フラッシャのこのような機能を実行するためのフラッシャになるように適合させることができる。スライディング書き込みウィンドウslidingwritewindowは、それぞれが1つのバッファ間隔に関連付けられた一定数の連続メモリバッファを保持することを指すためのものである。したがって、スライディング書き込みウィンドウは、その収容バッファ間隔の開始オフセットのうちの最低のものであるその開始オフセットと、その収容バッファの全サイズであるサイズによって指定された集合ウィンドウ間隔aggregatedwindowintervalに関連付けられる。ライタまたは単一ライタは、おそらく、順不同に発行された書き込み間隔に関連する書き込み操作を発行し、その書き込み間隔はウィンドウ間隔内に完全に収まる。その間隔が現行ウィンドウ間隔内に完全に収まらない書き込み操作は、ウィンドウが十分に順方向にスライドするまで、ライタによって発行することができない。ウィンドウ内の1つまたは複数の開始および連続バッファ間隔が着信データで満たされると、これらのバッファは、バッファ間隔内容をストレージメディア、ストレージデバイス、ストレージ環境、あるいは記憶媒体、またはこれらの組み合わせにフラッシュするように処理される。スライディング書き込みウィンドウはフラッシュされたバッファの全サイズに応じて空のバッファを取得し、スライディング書き込みウィンドウはフラッシュされたバッファのサイズに応じて順方向にスライドするすなわち、その開始オフセットはフラッシュされたバッファのサイズだけ増分される。ライタが許容書き込み操作を計算するために、スライディング書き込みウィンドウはその境界をライタに公示または伝達する。例示されている諸実施形態のメカニズムは、ストレージ環境にデータを書き込むためのスライディング書き込みウィンドウメカニズムの効率的で最小限の相互排除実装例を提供するものである。ストレージシステムによって使用されるスライディング書き込みウィンドウは本質的に1組のメモリバッファであって、着信書き込みデータを保管し、ストレージに書き込まれる前に着信データを適切に順序付けるために使用されるものである。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、スライディング書き込みウィンドウに書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。例示されている諸実施形態のメカニズムはスライディング書き込みウィンドウの実装例に関し、これは、ライタの書き込みデータを挿入するためにウィンドウのメカニズムおよびバッファにアクセスするライタ間の相互排除を効率よく最小限にするものである。したがって、スライディング書き込みウィンドウにアクセスするための相互排除を最小限にすると、スライディング書き込みウィンドウ内にボトルネックが存在する可能性を大幅に低減することができ、全体的なシステムパフォーマンスを高めることができる。ストレージシステムに関連して、スライディング書き込みウィンドウメカニズムの主な機能は、おそらくネットワークによりライタからの着信書き込みデータを順序付け、十分大きい順次間隔のデータをストレージにフラッシュできるようにすることである。例示されている諸実施形態のメカニズムは、スライディング書き込みウィンドウメカニズムにデータを発行する同時ライタ間の相互排除を最小限にし、このようにしてスライディング書き込みウィンドウを使用するストレージシステムのパフォーマンスを大幅に高めるものである。加えて、例示されている諸実施形態のメカニズムは、チャンク間隔に基づいてたとえば、巡回冗長検査CRCの効率的な同時計算を容易にし、このようにしてパフォーマンスをさらに高めるものである。次に図1を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境を示すブロック図が描写されている。図1、図2、および図3は、本発明の諸実施形態を実装することができるデータ処理環境の模範的な図として提供されている。図1、図2、および図3は模範的なものに過ぎず、本発明の諸態様または諸実施形態を実装することができる環境に関する制限を断言または暗示するためのものではないことを認識されたい。本発明の精神および範囲を逸脱せずに、描写されている諸実施形態に対して多くの変更を行うことができる。図1は、本発明の諸態様を実装することができるデータ処理システムのネットワークの図表現を描写している。ネットワークデータ処理システム100は、本発明の諸実施形態を実装することができるコンピュータのネットワークである。ネットワークデータ処理システム100はネットワーク102を含み、これは、ネットワークデータ処理システム100内にまとめて接続された様々なデバイスおよびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク102は、ワイヤ、ワイヤレス通信リンク、または光ファイバケーブルなどの接続を含むことができる。描写されている例では、サーバ104およびサーバ106はストレージユニット108とともにネットワーク102に接続する。加えて、クライアント110、112、および114はネットワーク102に接続する。これらのクライアント110、112、および114は、たとえば、パーソナルコンピュータまたはネットワークコンピュータにすることができる。描写されている例では、サーバ104は、ブートファイル、オペレーティングシステムイメージ、およびアプリケーションなどのデータをクライアント110、112、および114に提供する。この例では、クライアント110、112、および114はサーバ104に対するクライアントである。ネットワークデータ処理システム100は、図示されていない追加のサーバ、クライアント、およびその他のデバイスを含むこともできる。描写されている例では、ネットワークデータ処理システム100は、相互に通信するために伝送制御プロトコル/インターネットプロトコルTCP/IPというプロトコルスイートを使用するネットワークおよびゲートウェイの世界的集合を表すネットワーク102を含むインターネットである。インターネットの中心には、データおよびメッセージを経路指定する数千台の商用、行政、教育、およびその他のコンピュータシステムからなる、大ノードまたはホストコンピュータ間の高速データ通信回線のバックボーンがある。当然のことながら、ネットワークデータ処理システム100は、たとえば、イントラネット、ローカルエリアネットワークLAN、または広域ネットワークWANなど、いくつかの異なるタイプのネットワークとして実装することもできる。図1は、本発明の種々の実施形態に関するアーキテクチャ上の制限としてではなく、一例として示されている。図2は、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分200を示すブロック図である。データ処理システム200は、図1のサーバ104またはクライアント108などのコンピュータの一例であり、そこには本発明の諸実施形態に関するプロセスを実装するコンピュータ使用可能コードまたは命令が位置することができる。描写されている例では、データ処理システム200は、ノースブリッジおよびメモリコントローラハブMCH208とサウスブリッジおよび入出力I/OコントローラハブICH210とを含むハブアーキテクチャを使用する。処理装置202、メインメモリ204、およびグラフィックスプロセッサ218はノースブリッジおよびメモリコントローラハブ208に接続されている。グラフィックスプロセッサ218は、アクセラレィテッドグラフィックスポートAGPを介してノースブリッジおよびメモリコントローラハブ208に接続することができる。描写されている例では、ローカルエリアネットワークLANアダプタ212、オーディオアダプタ216、キーボードおよびマウスアダプタ220、モデム222、読み取り専用メモリROM224、ハードディスクHDD226、CD-ROMドライブ230、ユニバーサルシリアルバスUSBポートおよびその他の通信ポート232、ならびにPCI/PCIeデバイス234はバス238を介してサウスブリッジおよび入出力コントローラハブ210に接続する。PCI/PCIeデバイスは、たとえば、ノートブックコンピュータ用のイーサネットアダプタ、アドインカード、およびPCカードを含むことができる。PCIはカードバスコントローラを使用するが、PCIeは使用しない。ROM224は、たとえば、フラッシュバイナリ入出力システムBIOSにすることができる。ハードディスク226およびCD-ROMドライブ230は、バス240を介してサウスブリッジおよび入出力コントローラハブ210に接続する。ハードディスク226およびCD-ROMドライブ230は、たとえば、インテグレーテッドドライブエレクトロニクスIDEまたはシリアルアドバンストテクノロジーアタッチメントSATAインターフェースを使用することができる。スーパー入出力SIOデバイス236はサウスブリッジおよび入出力コントローラハブ210に接続することができる。オペレーティングシステムは、処理装置202上で実行され、図2および図3のデータ処理システム200内の様々なコンポーネントを調整し、その制御を行う。クライアントとして、オペレーティングシステムは、当業者に知られている市販のオペレーティングシステムにすることができる。サーバとして、データ処理システム200は、たとえば、拡張対話式エグゼクティブAIXRオペレーティングシステムまたはLINUXオペレーティングシステムを実行するIBMRのeServerTMpSeriesRコンピュータシステムにすることができる。データ処理システム200は、処理装置202内の複数のプロセッサを含む対称型マルチプロセッサSMPシステムにすることができる。代わって、単一プロセッサシステムを使用することもできる。オペレーティングシステム、オブジェクト指向プログラミングシステム、およびアプリケーションまたはプログラム用の命令は、ハードディスク226などのストレージデバイス上に位置し、処理装置202による実行のためにメインメモリ204にロードすることができる。本発明の諸実施形態に関するプロセスは、コンピュータ使用可能プログラムコードを使用する処理装置202によって実行され、そのコードは、たとえば、メインメモリ204、読み取り専用メモリ224などのメモリ内、あるいは1つまたは複数の周辺装置226および230内に位置することができる。当業者であれば、図1、図2、および図3のハードウェアは実装例次第で様々になる可能性があることを認識するであろう。図1、図2、および図3に描写されているハードウィーに加えてまたはその代わりに、フラッシュメモリ、同等の不揮発性メモリ、または光ディスクドライブなどのその他の内部ハードウェアまたは周辺装置を使用することもできる。また、本発明のプロセスはマルチプロセッサデータ処理システムに適用することもできる。いくつかの例示的な例として、データ処理システム200は携帯情報端末PDAにすることができ、これは、オペレーティングシステムファイルあるいはユーザ生成データまたはその両方を保管するための不揮発性メモリを提供するためにフラッシュメモリによって構成される。バスシステムは、図2に示されているバス238またはバス240などの1つまたは複数のバスで構成することができる。当然のことながら、バスシステムは、そのファブリックまたはアーキテクチャに付加された種々のコンポーネントまたはデバイス間のデータの転送を可能にする任意のタイプの通信ファブリックまたはアーキテクチャを使用して実装することができる。通信ユニットは、図2のモデム222またはネットワークアダプタ212など、データを送受信するために使用される1つまたは複数のデバイスを含むことができる。メモリは、たとえば、メインメモリ204、読み取り専用メモリ224、または図2のノースブリッジおよびメモリコントローラハブ208内で検出されるようなキャッシュにすることができる。図1、図2、および図3に描写されている例ならびに上記の諸例はアーキテクチャ上の制限を暗示するためのものではない。たとえば、データ処理システム200は、PDAの形を取ることに加えて、タブレットコンピュータ、ラップトップコンピュータ、または電話機にすることもできる。次に図3を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分50のブロック図が描写されている。例示されている実施形態では、一部分50は、プロセッサ52と、ランダムアクセスメモリRAMなどのメモリ54とを含む。一部分50は、便宜上例示されていない複数のコンポーネントに動作可能に結合することができ、このようなコンポーネントとしては、グラフィカルユーザインターフェース上のユーザに対してウィンドウなどの画像を提示するディスプレイ、キーボード、マウス、プリンタなどを含むがこれらに限定されない。当然のことながら、当業者であれば、上記のコンポーネントまたは任意の数の異なるコンポーネント、周辺装置、およびその他のデバイスの任意の組み合わせを図3とともに使用できることを認識するであろう。例示されている実施形態では、図3のプロセッサ52は、メモリ54に保管されたオペレーティングシステムOS56たとえば、AIX、z/OS、OS/2、LINUX、UNIX、WINDOWS、MACOSの制御下で動作し、入力およびコマンドを受け入れて結果を提示するためにユーザとのインターフェースを取る。本発明の一実施形態では、OS56は本発明による機能を容易にする。このために、OS56は書き込みモジュール22と読み取りモジュール62とを含み、これらは上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることができる。書き込みモジュール22、読み取りモジュール62、および単一ライタ65は、ネットワークから送信されるデータを読み書きし、ストレージシステムに対して書き込み間隔を生成して発行することにより順次データをストレージシステムに書き込むスレッドまたはプロセスを読み書きするためのコマンドを実行することができる。書き込みモジュール22、読み取りモジュール62、および単一ライタ65は、図4にも記載されるように、スライディング書き込みウィンドウ304以下の図4がスライディング書き込みウィンドウ304のバッファ64に着信書き込みデータを保管するとき、ならびにスライディング書き込みウィンドウ304内の1つまたは複数の開始および連続バッファ64たとえば、スライディング書き込みウィンドウ304内の第1のバッファ64から始まる一連のバッファがデータで完全に満たされたときに、スライディング書き込みウィンドウ304がこの情報を単一ライタ65に伝達し、次に単一ライタ65がフラッシャの役割を引き受けるように構成し設計することができる。また、バッファ64は、上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることもできる。バッファ64は、着信書き込みデータおよび書き込み間隔を保管し、ストレージメディアまたはストレージ環境に書き込まれる前に着信データを適切に順序付けるために使用することができ、その機能については以下の図4に記載する。一実施形態では、オペレーティングシステム56、書き込みモジュール22、読み取りモジュール、単一ライタ65、およびバッファ64を実装する命令はコンピュータ可読媒体に有形に実施され、そのコンピュータ可読媒体としては、Zipドライブ、ディスク、ハードディスク、DVD/CD-ROM、デジタルテープ、ソリッドステートドライブSSDなどの1つまたは複数の固定または取り外し可能データストレージデバイスを含むことができる。さらに、オペレーティングシステム56、書き込みモジュール22、読み取りモジュール、およびバッファ64は、コンピューティングストレージ環境によって読み取られ実行されたときに、本発明を実装するかあるいは使用するかまたはその両方を行うために必要な諸ステップを実行するための命令を含む。また、オペレーティングシステム56、書き込みモジュール22、読み取りモジュール、単一ライタ65、およびバッファ64は、メモリ54に有形に実施するか、あるいは様々なコンポーネントを介して図1に記載されているネットワークによって送信またはアクセスするか、またはその両方を行うことができる。このため、本明細書で使用する可能性のある装置articleofmanufacture、プログラムストレージデバイス、およびコンピュータプログラムという用語は、任意のコンピュータ可読デバイスまたはメディアからアクセス可能あるいは操作可能またはその両方であるコンピュータプログラムを包含するためのものである。例示されている諸実施形態に関するメカニズムは、たとえば、前に記載したSANまたはNASなどのコンピューティングデバイスのネットワークを含む分散コンピュータシステムを管理するための機能を含む、1つまたは複数の関連ソフトウェアアプリケーションプログラム58を含むことができる。したがって、プロセッサ52は1つまたは複数のストレージ管理プロセッサSMPを含むことができる。アプリケーションプログラム58は、単一コンピュータ内で、またはコンピューティングデバイスのネットワークを含む分散コンピュータシステムの一部として動作することができる。ネットワークは、ローカルエリアネットワークあるいはインターネット接続たとえば、仮想私設網VPN接続を介して、公用または安全なものになる可能性があるまたはその両方を介して接続されたか、もしくは、ファイバチャネルSANまたは当業者によって理解されるその他の既知のネットワークタイプを介して接続された1つまたは複数のコンピュータを包含することができる。図4は、例示されている諸実施形態の様々な態様を取り入れた模範的なスライディング書き込みウィンドウ機能300のブロック図である。スライディング書き込みウィンドウ304は書き込み間隔302の形で着信書き込みデータをバッファ64図3に保管し、バッファ64はバッファ間隔306に関連付けられている。前に示した通り、バッファ間隔は順次データセット内のその開始オフセットおよびサイズと、バッファコンテキストによって指定される。したがって、各バッファ間隔306は、部分的に、図示の通り、バッファコンテキスト308によって指定される。同じく、前に示した通り、チャンク間隔はバッファ間隔の一セクションであり、書き込まれるデータセットに関してその開始オフセットおよびサイズによって指定される。複数のチャンク間隔310は単一バッファ間隔に関する一例として示されている各バッファ間隔306の複数セクションである。1つまたは複数の開始および連続バッファ64すなわち、ウィンドウ内の第1のバッファ64から始まる一連のバッファがデータで完全に満たされたときに、スライディング書き込みウィンドウ304はこの情報を単一ライタ図3の65に伝達し、次に単一ライタ65がフラッシャの役割を引き受ける。フラッシャは、入手可能な限り多くの完全バッファ64を収集しているクリティカルセクションに入り、これらのバッファ64またはバッファ間隔に対する参照をバッファ64の適切な順序でフラッシュ待ち行列flushingqueueに挿入し、クリティカルセクションを終了する。次にフラッシャは、フラッシュ待ち行列からバッファ64の順序でバッファ64の参照を取り出し、参照されたバッファ64の内容をストレージメディアまたは記憶媒体にフラッシュする。次にフラッシャは、空のバッファ64を取得し、クリティカルセクションに入り、これらのバッファ64をスライディング書き込みウィンドウ304に追加する。スライディング書き込みウィンドウにバッファ64を追加する操作およびそこからバッファ64を除去する操作と、着信データを書き込むためのスライディング書き込みウィンドウ304内の位置を計算し、次にスライディング書き込みウィンドウ304とスライディング書き込みウィンドウを含むバッファ64が満たされているレベルを示す操作との間で相互排除が適用される。したがって、クリティカルセクション内で高速メモリ操作のみが実行されるように相互排除が最小限になる。本発明のメカニズムにより、スライディング書き込みウィンドウメカニズム304内のボトルネックの除去が可能になり、ストレージシステムの全体的なパフォーマンスが向上する。次に図5および図6を参照すると、スライディング書き込みウィンドウメカニズムの効率的で最小限の相互排除実装例としてデータを書き込むための模範的な方法500の流れ図が提示されている。方法500は始まりステップ501、データはネットワークから書き込み間隔にロードされるステップ502。この方法はクリティカルセクションに入るステップ504。この方法は、所与の書き込み間隔に対応しなければならないそのバッファ間隔を計算して返すスライディング書き込みウィンドウメカニズムに書き込み間隔を提供しステップ506、次にクリティカルセクションを出るステップ508。次にこの方法は第1の戻りバッファ間隔を考慮するステップ509。書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファコンテキストにコピーされるステップ510。次にこの方法はバッファ間隔内の第1のチャンク間隔を考慮するステップ512。この方法は考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分するステップ514。この方法は、考慮したチャンク間隔内の占有バイトの新しい数がチャンクサイズに等しいかどうかを判断するステップ516。考慮したチャンク間隔内の占有バイトの新しい数がチャンクサイズに等しくない場合、この方法はバッファ内の追加のチャンク間隔の有無をチェックするステップ528。バッファ内に追加のチャンク間隔がある場合、この方法は循環して戻りステップ528、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分するステップ514。考慮したチャンク間隔内の占有バイトの新しい数がチャンクサイズに等しい場合ステップ516、この方法はチャンクのCRC値を計算し、計算した値を考慮したチャンク間隔のプロパティに割り当てるステップ518。もう一度、この方法はクリティカルセクションに入るステップ520。クリティカルセクションではステップ520、この方法は考慮したバッファ間隔のうちの完全チャンク間隔の数を1だけ増分するステップ521。この方法は、バッファ間隔内の完全チャンク間隔の数の新しい値がバッファ間隔内のチャンク間隔の数に等しいかどうか、ならびに考慮したバッファ間隔がスライディング書き込みウィンドウ間隔内の第1の間隔であるかどうかを判断するステップ522。ステップ522の条件が該当しない場合、この方法はクリティカルセクションを出るステップ526。ステップ522の条件が該当する場合、この方法は、正確に1つのスレッドで設定されるフラグを設定して、第1のバッファ間隔がフラッシュの準備ができていることを示しステップ524、次にクリティカルセクションを出るステップ526。次に、この方法は、前述の通り、バッファ間隔内に追加のチャンク間隔があるかどうかを判断するステップ528。バッファ間隔内に追加のチャンク間隔がある場合、この方法は循環して戻りステップ528、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分するステップ514。バッファ間隔内に追加のチャンク間隔がまったくない場合、この方法は追加のバッファ間隔があるかどうかを判断するステップ530。追加のバッファ間隔がある場合、書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファコンテキストにコピーされるステップ510。追加のバッファ間隔がまったくない場合ステップ530、この方法は第1のバッファ間隔が完全であることを示すフラグが設定されているかどうかを判断しステップ532、設定されていない場合、この方法は終了するステップ552。フラグが設定されている場合ステップ532、この方法はクリティカルセクションに入るステップ534。スライディング書き込みウィンドウ内のバッファ間隔がスキャンされ、スライディング書き込みウィンドウ内の常駐順序に基づいて、第1のバッファからフラッシュ待ち行列まで、完全な連続バッファ間隔に参照が追加されるステップ536。スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけ開始オフセットを増分することにより、スライディング書き込みウィンドウが順方向に移動するステップ538。この方法はクリティカルセクションを出るステップ540。バッファ間隔順序に基づいて、フラッシュ待ち行列からバッファ間隔が抽出されるステップ542。抽出されるバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しいステップ542。新しい空のバッファ間隔が取得されるステップ544。取得されるバッファ間隔の数は現在の実行スレッドによってフラッシュされるバッファ間隔の数である。この方法はクリティカルセクションに入りステップ546、取得したバッファ間隔がスライディング書き込みウィンドウに追加される。スライディング書き込みウィンドウ内にいずれかのバッファ間隔が存在する場合、取得したバッファ間隔は既存のバッファ間隔の次の順序に置かれる。したがって、スライディング書き込みウィンドウのサイズは追加されたバッファ間隔の全サイズだけ増加する。この方法はクリティカルセクションを出てステップ550、この方法は終了するステップ552。例示されている諸実施形態の一態様では、単一ライタはクリティカルセクションに入り、単一ライタの書き込み間隔をスライディング書き込みウィンドウに提供し、スライディング書き込みウィンドウは所与の書き込み間隔に対応することになるバッファ間隔を計算して返す。スライディング書き込みウィンドウは並行してロールフォワードされる可能性があるので、バッファ間隔を返すためにスライディング書き込みウィンドウによって実行される高速計算はクリティカルセクションの内部で行われる。次にクリティカルセクションを出る。戻りバッファ間隔のそれぞれについて、例示されている諸実施形態のメカニズムはクリティカルセクションの外部で操作を実行することができる。単一ライタは、バッファ間隔開始オフセットに応じて、単一ライタの書き込み間隔のデータをバッファコンテキストに書き込むかまたはコピーする。データコピーはより長い操作であるので、クリティカルセクションの外部で実行される。単一ライタは、スライディング書き込みウィンドウの所与のバッファ間隔内への単一ライタの書き込み間隔の書き込みが完了したことをスライディング書き込みウィンドウに通知する。単一ライタは、バッファ間隔内部のチャンク間隔について繰り返し、各チャンク間隔について、このチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新されるこの値は事前にゼロに初期設定される。アトミック操作は、特定の操作の間中、インスタントロックinstantlockingによって実装される。新しい値が一定のチャンクサイズに到達した場合、このチャンクの巡回冗長検査CRC値が計算される。これは、クリティカルセクションの外部で行われる、より長い操作である。この計算の結果は、関連チャンク間隔のプロパティ内に設定される。クリティカルセクションの外部でいくつかの操作を実行すると、例示されている諸実施形態のメカニズムはクリティカルセクションを再確立するかまたはそこに再び入ることができる。次に、関連バッファ間隔の完全チャンク間隔の数は1だけ増分される。完全チャンク間隔の数の新しい値が1つのバッファ間隔内のチャンク間隔の定数に到達した場合、ならびに、関連のバッファ間隔が現在のスライディングウィンドウ内の第1の間隔である場合、操作は、単一ライタに提供されるフラグを設定し、第1のバッファ間隔がフラッシュの準備ができていることを示す。書き込み間隔は交差しないので、正確に1つの単一ライタは、第1のバッファ間隔がフラッシュの準備ができているという指示を受信する。次にクリティカルセクションを出る。スライディング書き込みウィンドウメカニズムによって提供されたすべてのバッファ間隔を処理すると、単一ライタは、第1のバッファ間隔が完全であることを示すフラグが設定されているかどうかをチェックし、そうである場合、単一ライタは続行し、フラッシャの役割を引き受け、もう一度、クリティカルセクションに入る。フラッシャは、スライディング書き込みウィンドウ内のバッファ間隔をスキャンし、そのバッファがスライディング書き込みウィンドウ内に常駐する順序で、完全なすなわち、そのチャンク間隔がすべて完全である第1のバッファからフラッシュ待ち行列まで、連続バッファ間隔に参照を追加する。プロセス内のこの時点では少なくとも1つの完全バッファ間隔が存在することになる。次に、スライディング書き込みウィンドウは、スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけその開始オフセットを増分することにより、順方向に移動する。新しいバッファの取得が行われていないので、この段階でスライディング書き込みウィンドウのサイズが低減される。次にクリティカルセクションを出る。クリティカルセクションの外部で、フラッシュ待ち行列からバッファ間隔が抽出される。現在の実行スレッドによって抽出されたバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しい。バッファ間隔は、フラッシュ待ち行列内に置かれた順序でフラッシュ待ち行列から抽出される。また、バッファ間隔の数のそれぞれについて、バッファ間隔の内容をストレージメディアにフラッシュすることができ、そのチャンクのCRC値は読み取り操作の将来の検証のために保管される。依然としてクリティカルセクションの外部にある間に、空のバッファ間隔が取得される。取得されたバッファ間隔の数は現在の実行スレッドによってフラッシュされたバッファの数である。もう一度、例示されている諸実施形態のメカニズムはクリティカルセクションに再び入ることができる。取得された空のバッファ間隔は、スライディング書き込みウィンドウに追加され、ウィンドウ内の既存のバッファの次に置かれる。スライディング書き込みウィンドウのサイズはそれに応じて増加する。次にクリティカルセクションを出る。当業者であれば認識するように、本発明の諸態様は、システム、方法、またはコンピュータプログラムとして実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態ファームウェア、常駐ソフトウェア、マイクロコードなどを含む、またはソフトウェア態様とハードウェア態様を結合した実施形態の形を取ることができ、このような実施形態は一般に本明細書ではいずれも回路、モジュール、またはシステムと呼ぶことができる。さらに、本発明の諸態様は、コンピュータ可読プログラムコードがそこに実施されている1つまたは複数のコンピュータ可読媒体に実施されたコンピュータプログラムの形を取ることもできる。1つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体システム、装置、あるいはデバイス、もしくはこれらの任意の適切な組み合わせにすることができるが、これらに限定されないものである。コンピュータ可読記憶媒体のより具体的な例非網羅的リストとしては、1つまたは複数のワイヤを有する電気接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、読み取り専用メモリROM、消去可能プログラム可能読み取り専用メモリEPROMまたはフラッシュメモリ、光ファイバ、ポータブルコンパクトディスク読み取り専用メモリCD-ROM、光記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを含むであろう。本書に関連して、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管可能な任意の有形媒体にすることができる。コンピュータ可読媒体上に実施されたプログラムコードは、無線、有線、光ファイバケーブル、RFなど、またはこれらの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。本発明の諸態様に関する動作を実行するためのコンピュータプログラムコードは、Java、Smalltalk、Cなどのオブジェクト指向プログラミング言語ならびにCプログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。このプログラムコードは、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、一部分はユーザのコンピュータ上でしかも一部分はリモートコンピュータ上で、あるいは完全にリモートコンピュータまたはサーバ上で実行することができる。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワークLANまたは広域ネットワークWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続される場合もあれば、たとえば、インターネットサービスプロバイダを使用してインターネットを介して外部コンピュータに対して接続が行われる場合もある。本発明の諸実施形態による方法、装置システム、およびコンピュータプログラムの流れ図あるいはブロック図またはその両方に関連して、本発明の諸態様について説明してきた。流れ図あるいはブロック図またはその両方の各ブロックならびに流れ図あるいはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータプログラム命令によって実装可能であることが理解されるであろう。これらのコンピュータプログラム命令は、マシンを生産するために汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブルデータ処理装置のプロセッサに提供することができ、それにより、コンピュータまたはその他のプログラマブルデータ処理装置のプロセッサを介して実行される命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装するための手段を作成することになる。また、これらのコンピュータプログラム命令は、コンピュータ、その他のプログラマブルデータ処理装置、またはその他のデバイスに対して特定の方法で機能するよう指示することができるコンピュータ可読媒体に保管することもでき、それにより、コンピュータ可読媒体に保管された命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装する命令を含む装置articleofmanufactureを生産することになる。また、これらのコンピュータプログラム命令は、コンピュータ、その他のプログラマブルデータ処理装置、またはその他のデバイス上にロードして、コンピュータによって実装されるプロセスを生成するためにコンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させることができ、それにより、コンピュータまたはその他のプログラマブル装置上で実行される命令は流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/動作を実装するためのプロセスを提供することになる。上記の図面内の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータプログラムについて可能な実装例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能複数も可を実装するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実装例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている2つのブロックは、関係する機能に応じて、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックならびにブロック図あるいは流れ図またはその両方の複数ブロックの組み合わせは、指定の機能または動作を実行する特殊目的ハードウェアベースのシステムによって、または特殊目的ハードウェアとコンピュータ命令の組み合わせによって、実装可能であることも留意されるであろう。本発明の1つまたは複数の実施形態について詳細に例示してきたが、当業者であれば、特許請求の範囲に明記された本発明の範囲を逸脱せずに、これらの諸実施形態に対して変更および適応が可能であることを認識するであろう。