(57)【特許請求の範囲】
【請求項１】
プロセッサ・デバイスを使用してデータを書き込むための方法であって、
複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記複数の書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられることと、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも１つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合されること
を含み、
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用される、
方法。
【請求項２】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返し、前記複数のバッファ間隔が前記複数のバッファに対応することと、
前記複数のバッファ間隔のうちの１つの関連バッファ間隔の複数の完全チャンク間隔の数を１だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも１つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの１つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの１つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの１つを除去するときに減少すること
のうちの少なくとも１つを実行することにより、前記クリティカル・セクションの１つに入る、請求項１記載の方法。
【請求項３】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの１つにおいて定数に到達し、前記複数のバッファ間隔のうちの１つが前記スライディング書き込みウィンドウ・メカニズム内の第１の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第１のバッファ間隔がフラッシュの準備ができていることを示す、請求項２記載の方法。
【請求項４】
前記第１のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第１のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記１つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも１つを前記単一ライタにより実行することをさらに含む、請求項３記載の方法。
【請求項５】
前記クリティカル・セクションのうちの１つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの１つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、前記値がゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査（ＣＲＣ）が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数であること
のうちの少なくとも１つを前記クリティカル・セクションのうちの前記１つの外部で実行することをさらに含む、請求項１記載の方法。
【請求項６】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させることであって、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信することをさらに含む、請求項１記載の方法。
【請求項７】
コンピュータ環境においてデータを書き込むためのシステムであって、
コンピュータ環境において動作可能な少なくとも１つのプロセッサ・デバイスを含み、前記少なくとも１つのプロセッサ・デバイスが、
複数の書き込み間隔に配置された前記データを複数のバッファにロードすることであって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられることと、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも１つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達することであって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合されることと、
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用されること、
のために適合される、システム。
【請求項８】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、
前記複数のバッファ間隔のうちの１つの関連バッファ間隔の複数の完全チャンク間隔の数を１だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも１つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの１つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの１つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの１つを除去するときに減少すること
のうちの少なくとも１つを実行することにより、前記クリティカル・セクションの１つに入ることを容易にするために、前記少なくとも１つのプロセッサ・デバイスがさらに適合される、請求項７記載のシステム。
【請求項９】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの１つにおいて定数に到達し、前記複数のバッファ間隔のうちの１つが前記スライディング書き込みウィンドウ・メカニズム内の第１の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第１のバッファ間隔がフラッシュの準備ができていることを示すために、前記少なくとも１つのプロセッサ・デバイスがさらに適合される、請求項８記載のシステム。
【請求項１０】
前記第１のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第１のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記１つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも１つを前記単一ライタにより実行するために、前記少なくとも１つのプロセッサ・デバイスがさらに適合される、請求項９記載のシステム。
【請求項１１】
前記クリティカル・セクションのうちの１つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの１つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査（ＣＲＣ）が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいこと
のうちの少なくとも１つを前記クリティカル・セクションのうちの前記１つの外部で実行するために、前記少なくとも１つのプロセッサ・デバイスがさらに適合される、請求項７記載のシステム。
【請求項１２】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させ、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信するために、前記少なくとも１つのプロセッサ・デバイスがさらに適合される、請求項７記載のシステム。
【請求項１３】
プロセッサ・デバイスを使用してコンピュータ環境においてデータを書き込むコンピュータ・プログラムであって、前記コンピュータ・プログラムがそこに保管されたコンピュータ可読プログラム・コード部分を有するコンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラム・コード部分が、
複数の書き込み間隔に配置された前記データを複数のバッファにロードするための第１の実行可能部分であって、前記複数のバッファの全体が前記書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成され、前記データが順不同に前記複数のバッファに到達する可能性があるが、前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ内に順次、順序付けられる第１の実行可能部分と、
前記スライディング書き込みウィンドウ・メカニズム内に順序通りに保管された前記複数のバッファのうちの少なくとも１つに前記データを満たすと同時に前記スライディング書き込みウィンドウ・メカニズム内の前記データを単一ライタに伝達するための第２の実行可能部分であって、参照情報を使用して順次間隔の前記データを前記スライディング書き込みウィンドウ・メカニズムからストレージ環境にフラッシュすることにより、前記単一ライタがフラッシュ・メカニズムとしての機能的役割を引き受けるように適合される第２の実行可能部分と
を含み、
前記スライディング書き込みウィンドウ・メカニズム内で、バッファの除去および追加のための操作を含む、前記スライディング書き込みウィンドウの構造を変更する操作と、着信データを書き込むための前記スライディング書き込みウィンドウ・メカニズム内の位置を計算する操作との間でのみ、クリティカル・セクションを介して相互排除が適用される、
コンピュータ・プログラム。
【請求項１４】
前記単一ライタおよび前記スライディング書き込みウィンドウ・メカニズムが、
前記複数の書き込み間隔を前記スライディング書き込みウィンドウ・メカニズムに提供することであって、前記スライディング書き込みウィンドウ・メカニズムが前記複数の書き込み間隔に対応するために複数のバッファ間隔を計算して返すことと、
前記複数のバッファ間隔のうちの１つの関連バッファ間隔の複数の完全チャンク間隔の数を１だけ増分することと、
前記複数のバッファ間隔のうちの少なくとも１つを前記スライディング書き込みウィンドウ・メカニズムに追加することと除去することのうちの一方を実行することであって、前記複数のバッファ間隔のうちの１つの空のバッファ間隔の追加が順序通りに前記複数のバッファ間隔のうちの１つの既存のバッファ間隔に続く可能性があり、前記スライディング書き込みウィンドウ・メカニズムのサイズが追加時に増加し、前記複数のバッファ間隔のうちの１つを除去するときに減少すること
のうちの少なくとも１つを実行することにより、前記クリティカル・セクションの１つに入ることを容易にするための第３の実行可能部分をさらに含む、請求項１３記載のコンピュータ・プログラム。
【請求項１５】
前記複数の完全チャンク間隔の新しい値が前記複数のバッファ間隔のうちの１つにおいて定数に到達し、前記複数のバッファ間隔のうちの１つが前記スライディング書き込みウィンドウ・メカニズム内の第１の間隔である場合に、前記単一ライタに提供されるフラグを設定し、第１のバッファ間隔がフラッシュの準備ができていることを示すための第４の実行可能部分をさらに含む、請求項１４記載のコンピュータ・プログラム。
【請求項１６】
前記第１のバッファ間隔が完全であることを前記フラグが示す場合に、
前記スライディング書き込みウィンドウ・メカニズム内の前記複数のバッファ間隔をスキャンすることと、
前記複数のチャンク間隔のすべてが完全である前記複数のバッファ間隔のうちの第１のバッファ間隔から始まり、前記複数のバッファ間隔のうちの次の連続バッファ間隔に複数の参照を追加することと、
前記複数のバッファ間隔が前記スライディング書き込みウィンドウ・メカニズム内に常駐する順序に基づいて、前記複数のバッファ間隔を適切な順序でフラッシュ待ち行列内に置くことと、
前記スライディング書き込みウィンドウ・メカニズムから除去された前記複数のバッファ間隔のうちの前記１つのバッファ間隔のサイズだけ開始オフセットを増分することにより、前記スライディング書き込みウィンドウ・メカニズムを順方向に移動すること
のうちの少なくとも１つを前記単一ライタにより実行するための第５の実行可能部分をさらに含む、請求項１５記載のコンピュータ・プログラム。
【請求項１７】
前記クリティカル・セクションのうちの１つの間に入手された複数のバッファ間隔のうちの戻りバッファ間隔のそれぞれについて、
前記複数のバッファの開始オフセットに基づいて、前記複数の書き込み間隔からバッファ・コンテキストにデータをコピーすることと、
前記単一ライタにより、前記複数のバッファ間隔のうちの１つへの前記複数の書き込み間隔の書き込みが完了したことを前記スライディング書き込みウィンドウ・メカニズムに通知することと、
前記単一ライタにより、前記複数のバッファ間隔内部の複数のチャンク間隔について繰り返すことであって、前記複数のチャンク間隔のそれぞれについて、特定の操作の間中、インスタント・ロックによってアトミック操作を実装し、前記複数のチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新され、ゼロに初期設定されることと、
フラッシュ待ち行列への配置の順序で現在の実行スレッドによって前記フラッシュ待ち行列内に置かれた数の前記複数のバッファ間隔を前記フラッシュ待ち行列からフラッシュすることであって、前記複数のバッファ間隔の内容が前記ストレージ環境にフラッシュされ、前記複数のチャンク間隔に基づく着信データに基づいて巡回冗長検査（ＣＲＣ）が計算されることと、
フラッシュにより空になった前記複数のバッファ間隔を取得することであって、取得された前記複数のバッファ間隔の数が前記現在の実行スレッドによってフラッシュされる前記複数のバッファの数に等しいこと
のうちの少なくとも１つを前記クリティカル・セクションのうちの前記１つの外部で実行するための第３の実行可能部分をさらに含む、請求項１３記載のコンピュータ・プログラム。
【請求項１８】
前記単一ライタを、前記スライディング書き込みウィンドウ・メカニズムの現在位置によって反映される前記複数の書き込み間隔と同期させるための第３の実行可能部分であって、書き込むべきデータが前記スライディング書き込みウィンドウ・メカニズムの現行間隔に収まるときに前記単一ライタが前記データを前記スライディング書き込みウィンドウ・メカニズムに送信する第３の実行可能部分をさらに含む、請求項１３記載のコンピュータ・プログラム。
【請求項１９】
さらに、
もし前記スライディング書き込みウィンドウ・メカニズムが前方向に移動した後に複数のバッファの取得が行なわれていない場合には、書き込みウィンドウのサイズが低減される、請求項１記載の方法。
【請求項２０】
少なくとも１つのプロセッサ装置が、
もし前記スライディング書き込みウィンドウ・メカニズムが前方向に移動した後に複数のバッファの取得が行なわれていない場合には、書き込みウィンドウのサイズが低減されるように適合されている、請求項７記載のシステム。
【請求項２１】
もし前記スライディング書き込みウィンドウ・メカニズムが前方向に移動した後に複数のバッファの取得が行なわれていない場合には、書き込みウィンドウのサイズが低減する第４の実行可能部分をさらに含む、請求項１３記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータに関し、詳細には、スライディング書き込みウィンドウ・メカニズム（sliding write window mechanism）を使用してデータを書き込むためにプロセッサ・デバイスを使用するコンピュータ環境における方法、システム、およびコンピュータ・プログラム（computer program product）に関する。
【背景技術】
【０００２】
企業、政府機関、またはその他のエンティティで使用可能なものなどのエンタープライズ・データ処理配置では、情報はしばしばサーバ上に保管され、たとえば、ネットワークを介してユーザによってアクセスされる。この情報は、プログラムあるいは処理すべきデータまたはその両方などの任意のタイプの情報を含むことができる。自分のパーソナル・コンピュータ、ワークステーションなど（一般に「コンピュータ」）を使用するユーザは、自分のコンピュータによって、処理すべき情報を検索し、それに加えて、たとえば、リモート・サーバ上に情報を保管できるようにする。
【０００３】
一般に、サーバは、典型的にいくつかのディスク・ストレージ・ユニットを含む大容量記憶サブシステムにデータを保管する。データはファイルなどの単位で保管される。サーバでは、１つのファイルが１つのディスク・ストレージ・ユニット上に保管される場合もあれば、代わって、１つのファイルの複数部分が複数のディスク・ストレージ・ユニット上に保管される場合もある。冗長性を提供し、パフォーマンスを高めるために、多くのストレージ・デバイスは冗長ディスク・アレイ（ＲＡＩＤ）トポロジに構成することができ、その場合、ストレージ・ボリュームはＲＡＩＤランクで編成される。ある企業のコンピュータ・ネットワークは、相互に離れ、ビジネス・ユーザからも離れて位置する複数のストレージ・ネットワークを有する可能性がある。また、これらのストレージ・ネットワークは異なるタイプのシステム上で処理される場合もある。仕事を正確に実行するために、ビジネス・ユーザは、すべてのストレージ・ネットワーク内に含まれるデータに対して高速かつ確実にアクセスする必要がある場合がある。このデータへのアクセスはリアルタイムで行われるので、記憶操作（書き込みまたは読み取りなど）は可能な限り迅速に行われることが望ましい。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
当技術分野の現状を考慮して、ライタ（writer）（たとえば、スレッド／プロセス）がストレージ・システムに順次データを書き込み、その書き込み操作がそれぞれの生成順序とは異なる順序でストレージ・システムに到達する可能性があるコンピュータ環境においてストレージにデータを効率よく書き込む方法が必要である。一例は、ライタがネットワークによりストレージ・システムにデータを送信するシステムであり、ネットワーク・メッセージ・パッキング書き込み操作はそれぞれの生成順序とは異なる順序でストレージ・システムに到達する可能性がある。
【課題を解決するための手段】
【０００５】
したがって、データを書き込むための様々な実施形態が提供される。一実施形態では、一例としてのみ、複数の書き込み間隔（write interval）に配置されたデータは複数のバッファにロードされ、複数のバッファの全体は書き込み間隔に対応するための移動に適合させたスライディング書き込みウィンドウ・メカニズムとして構成される。データは順不同にストレージ・システムに到達する可能性があり、前記バッファに適切にロードすることにより、データはストレージ・メディアに書き込まれる前に順次、順序付けられる。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージ・メディアにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。
【０００６】
上記の模範的な方法実施形態に加えて、その他の模範的なシステムおよびコンピュータ・プログラム（computer product）実施形態が提供され、関連の利点を提供する。
【０００７】
本発明の利点が容易に理解されるように、添付図面に例示されている特定の諸実施形態を参照することにより、上記で簡単に記述した本発明についてより詳細な記述を提供する。これらの図面が本発明の諸実施形態を描写しており、したがって、その範囲を制限するものと見なすべきではないことを理解して、添付図面の使用により具体性および詳細さを追加して本発明について記述し説明する。
【図面の簡単な説明】
【０００８】
【図１】本発明の諸態様を実装することができる模範的なコンピューティング環境のブロック図である。
【図２】本発明の諸態様を実装することができるコンピューティング環境における模範的な処理装置のブロック図である。
【図３】本発明の諸態様を実装することができる模範的なコンピューティング環境における追加の模範的な処理装置のブロック図である。
【図４】ストレージ・システム内の模範的なスライディング書き込みウィンドウ・メカニズムのブロック図である。
【図５】ストレージ・システム内のスライディング書き込みウィンドウ・メカニズムを使用してデータを書き込むための模範的な方法の流れ図である。
【図６】ストレージ・システム内のスライディング書き込みウィンドウ・メカニズムを使用してデータを書き込むための模範的な方法の流れ図である。
【発明を実施するための形態】
【０００９】
以下の説明および請求された主題全体を通して、例示されている諸実施形態に関する以下の用語が記載されている。「ライタ（writer）」、「複数のライタ（writers）」、「単一ライタ（single writer）」、または「複数の単一ライタ（single writers）」は、ストレージ・システムに対して書き込み間隔を生成して発行することによりストレージ・システムに順次データを書き込むスレッドまたはプロセスを指すためのものである。
【００１０】
「書き込み間隔（write interval）」は、ライタによってストレージ・システムに順次書き込まれるデータ・セットからのデータの間隔を指すためのものである。書き込み間隔は順次データ・セット内のその開始オフセットおよびサイズによって指定される。順次書き込みシーケンスで生成される間、書き込み間隔は相互に交差することはない。書き込み間隔のサイズは書き込み操作間で異なる可能性がある。
【００１１】
「バッファ間隔（buffer interval）」は、スライディング書き込みウィンドウ内のメモリ・バッファに関連付けられることを指すためのものであり、書き込まれるデータ・セットに関してバッファがカバーする間隔を表す。バッファ間隔は、順次データ・セット内のその開始オフセットおよびサイズと、バッファ・コンテキストによって指定される。バッファ間隔が着信データでいっぱいになると、それをストレージにフラッシュすることができ、そのバッファ・コンテキストをリリースして他の場所で再利用することができる。バッファ間隔の境界は交差せず、このようなバッファ間隔はすべて同じサイズを有する。バッファ間隔は書き込み間隔と交差する可能性がある。
【００１２】
「チャンク間隔（chunk interval）」は、バッファ間隔の１セクションを指すためのものであり、書き込まれるデータ・セットに関してその開始オフセットおよびサイズによって指定される。チャンク間隔は、ストレージにフラッシュされる前にメモリ・バッファ内に保管されたデータに対して何らかの操作を実行するために使用することができる。本出願では、システム巡回冗長検査（ＣＲＣ）は着信データに基づいて計算され、チャンク間隔に基づいて実行される。
【００１３】
「フラッシャ（flusher）」は、その着信データ内容が完全であるメモリ・バッファをスライディング書き込みウィンドウから収集し、その内容をストレージ・メディア、ストレージ・デバイス、ストレージ環境、または記憶媒体にフラッシュするスレッドまたはプロセスを指すためのものである。単一ライタは、フラッシャのこのような機能を実行するためのフラッシャになるように適合させることができる。
【００１４】
「スライディング書き込みウィンドウ（sliding writewindow）」は、それぞれが１つのバッファ間隔に関連付けられた一定数の連続メモリ・バッファを保持することを指すためのものである。したがって、スライディング書き込みウィンドウは、その収容バッファ間隔の開始オフセットのうちの最低のものであるその開始オフセットと、その収容バッファの全サイズであるサイズによって指定された集合ウィンドウ間隔（aggregated window interval）に関連付けられる。ライタまたは単一ライタは、（おそらく、順不同に発行された）書き込み間隔に関連する書き込み操作を発行し、その書き込み間隔はウィンドウ間隔内に完全に収まる。その間隔が現行ウィンドウ間隔内に完全に収まらない書き込み操作は、ウィンドウが十分に順方向にスライドするまで、ライタによって発行することができない。ウィンドウ内の１つまたは複数の開始および連続バッファ間隔が着信データで満たされると、これらのバッファは、バッファ間隔内容をストレージ・メディア、ストレージ・デバイス、ストレージ環境、あるいは記憶媒体、またはこれらの組み合わせにフラッシュするように処理される。スライディング書き込みウィンドウはフラッシュされたバッファの全サイズに応じて空のバッファを取得し、スライディング書き込みウィンドウはフラッシュされたバッファのサイズに応じて順方向にスライドする（すなわち、その開始オフセットはフラッシュされたバッファのサイズだけ増分される）。ライタが許容書き込み操作を計算するために、スライディング書き込みウィンドウはその境界をライタに公示または伝達する。
【００１５】
例示されている諸実施形態のメカニズムは、ストレージ環境にデータを書き込むためのスライディング書き込みウィンドウ・メカニズムの効率的で最小限の相互排除実装例を提供するものである。ストレージ・システムによって使用されるスライディング書き込みウィンドウは本質的に１組のメモリ・バッファであって、着信書き込みデータを保管し、ストレージに書き込まれる前に着信データを適切に順序付けるために使用されるものである。スライディング書き込みウィンドウの開始セクションが書き込みデータで満たされると、このセクションはストレージにフラッシュされ、ライタによって書き込まれる追加データに対応するために、ウィンドウは順方向にスライドする。ライタは、スライディング書き込みウィンドウの現在位置によって反映される間隔と同期を取られ、スライディング書き込みウィンドウに書き込むべきデータがウィンドウの現行間隔に収まる場合のみ、このデータを送信する。
【００１６】
例示されている諸実施形態のメカニズムはスライディング書き込みウィンドウの実装例に関し、これは、ライタの書き込みデータを挿入するためにウィンドウのメカニズムおよびバッファにアクセスするライタ間の相互排除を効率よく最小限にするものである。したがって、スライディング書き込みウィンドウにアクセスするための相互排除を最小限にすると、スライディング書き込みウィンドウ内にボトルネックが存在する可能性を大幅に低減することができ、全体的なシステム・パフォーマンスを高めることができる。ストレージ・システムに関連して、スライディング書き込みウィンドウ・メカニズムの主な機能は、おそらくネットワークによりライタからの着信書き込みデータを順序付け、十分大きい順次間隔のデータをストレージにフラッシュできるようにすることである。例示されている諸実施形態のメカニズムは、スライディング書き込みウィンドウ・メカニズムにデータを発行する同時ライタ間の相互排除を最小限にし、このようにしてスライディング書き込みウィンドウを使用するストレージ・システムのパフォーマンスを大幅に高めるものである。加えて、例示されている諸実施形態のメカニズムは、チャンク間隔に基づいて（たとえば、巡回冗長検査「ＣＲＣ」の）効率的な同時計算を容易にし、このようにしてパフォーマンスをさらに高めるものである。
【００１７】
次に図１を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境を示すブロック図が描写されている。図１、図２、および図３は、本発明の諸実施形態を実装することができるデータ処理環境の模範的な図として提供されている。図１、図２、および図３は模範的なものに過ぎず、本発明の諸態様または諸実施形態を実装することができる環境に関する制限を断言または暗示するためのものではないことを認識されたい。本発明の精神および範囲を逸脱せずに、描写されている諸実施形態に対して多くの変更を行うことができる。
【００１８】
図１は、本発明の諸態様を実装することができるデータ処理システムのネットワークの図表現を描写している。ネットワーク・データ処理システム１００は、本発明の諸実施形態を実装することができるコンピュータのネットワークである。ネットワーク・データ処理システム１００はネットワーク１０２を含み、これは、ネットワーク・データ処理システム１００内にまとめて接続された様々なデバイスおよびコンピュータ間の通信リンクを提供するために使用される媒体である。ネットワーク１０２は、ワイヤ、ワイヤレス通信リンク、または光ファイバ・ケーブルなどの接続を含むことができる。
【００１９】
描写されている例では、サーバ１０４およびサーバ１０６はストレージ・ユニット１０８とともにネットワーク１０２に接続する。加えて、クライアント１１０、１１２、および１１４はネットワーク１０２に接続する。これらのクライアント１１０、１１２、および１１４は、たとえば、パーソナル・コンピュータまたはネットワーク・コンピュータにすることができる。描写されている例では、サーバ１０４は、ブート・ファイル、オペレーティング・システム・イメージ、およびアプリケーションなどのデータをクライアント１１０、１１２、および１１４に提供する。この例では、クライアント１１０、１１２、および１１４はサーバ１０４に対するクライアントである。ネットワーク・データ処理システム１００は、図示されていない追加のサーバ、クライアント、およびその他のデバイスを含むこともできる。
【００２０】
描写されている例では、ネットワーク・データ処理システム１００は、相互に通信するために伝送制御プロトコル／インターネット・プロトコル（ＴＣＰ／ＩＰ）というプロトコル・スイートを使用するネットワークおよびゲートウェイの世界的集合を表すネットワーク１０２を含むインターネットである。インターネットの中心には、データおよびメッセージを経路指定する数千台の商用、行政、教育、およびその他のコンピュータ・システムからなる、大ノードまたはホスト・コンピュータ間の高速データ通信回線のバックボーンがある。当然のことながら、ネットワーク・データ処理システム１００は、たとえば、イントラネット、ローカル・エリア・ネットワーク（ＬＡＮ）、または広域ネットワーク（ＷＡＮ）など、いくつかの異なるタイプのネットワークとして実装することもできる。図１は、本発明の種々の実施形態に関するアーキテクチャ上の制限としてではなく、一例として示されている。
【００２１】
図２は、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分２００を示すブロック図である。データ処理システム２００は、図１のサーバ１０４またはクライアント１０８などのコンピュータの一例であり、そこには本発明の諸実施形態に関するプロセスを実装するコンピュータ使用可能コードまたは命令が位置することができる。
【００２２】
描写されている例では、データ処理システム２００は、ノースブリッジおよびメモリ・コントローラ・ハブ（ＭＣＨ）２０８とサウスブリッジおよび入出力（Ｉ／Ｏ）コントローラ・ハブ（ＩＣＨ）２１０とを含むハブ・アーキテクチャを使用する。処理装置２０２、メイン・メモリ２０４、およびグラフィックス・プロセッサ２１８はノースブリッジおよびメモリ・コントローラ・ハブ２０８に接続されている。グラフィックス・プロセッサ２１８は、アクセラレィテッド・グラフィックス・ポート（ＡＧＰ）を介してノースブリッジおよびメモリ・コントローラ・ハブ２０８に接続することができる。
【００２３】
描写されている例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ２１２、オーディオ・アダプタ２１６、キーボードおよびマウス・アダプタ２２０、モデム２２２、読み取り専用メモリ（ＲＯＭ）２２４、ハード・ディスク（ＨＤＤ）２２６、ＣＤ−ＲＯＭドライブ２３０、ユニバーサル・シリアル・バス（ＵＳＢ）ポートおよびその他の通信ポート２３２、ならびにＰＣＩ／ＰＣＩｅデバイス２３４はバス２３８を介してサウスブリッジおよび入出力コントローラ・ハブ２１０に接続する。ＰＣＩ／ＰＣＩｅデバイスは、たとえば、ノートブック・コンピュータ用のイーサネット・アダプタ、アドイン・カード、およびＰＣカードを含むことができる。ＰＣＩはカード・バス・コントローラを使用するが、ＰＣＩｅは使用しない。ＲＯＭ２２４は、たとえば、フラッシュ・バイナリ入出力システム（ＢＩＯＳ）にすることができる。
【００２４】
ハード・ディスク２２６およびＣＤ−ＲＯＭドライブ２３０は、バス２４０を介してサウスブリッジおよび入出力コントローラ・ハブ２１０に接続する。ハード・ディスク２２６およびＣＤ−ＲＯＭドライブ２３０は、たとえば、インテグレーテッド・ドライブ・エレクトロニクス（ＩＤＥ）またはシリアル・アドバンスト・テクノロジー・アタッチメント（ＳＡＴＡ）インターフェースを使用することができる。スーパー入出力（ＳＩＯ）デバイス２３６はサウスブリッジおよび入出力コントローラ・ハブ２１０に接続することができる。
【００２５】
オペレーティング・システムは、処理装置２０２上で実行され、図２および図３のデータ処理システム２００内の様々なコンポーネントを調整し、その制御を行う。クライアントとして、オペレーティング・システムは、当業者に知られている市販のオペレーティング・システムにすることができる。サーバとして、データ処理システム２００は、たとえば、拡張対話式エグゼクティブ（ＡＩＸ（Ｒ））オペレーティング・システムまたはＬＩＮＵＸオペレーティング・システムを実行するＩＢＭ（Ｒ）のｅＳｅｒｖｅｒ（ＴＭ）ｐＳｅｒｉｅｓ（Ｒ）コンピュータ・システムにすることができる。データ処理システム２００は、処理装置２０２内の複数のプロセッサを含む対称型マルチプロセッサ（ＳＭＰ）システムにすることができる。
【００２６】
代わって、単一プロセッサ・システムを使用することもできる。オペレーティング・システム、オブジェクト指向プログラミング・システム、およびアプリケーションまたはプログラム用の命令は、ハード・ディスク２２６などのストレージ・デバイス上に位置し、処理装置２０２による実行のためにメイン・メモリ２０４にロードすることができる。本発明の諸実施形態に関するプロセスは、コンピュータ使用可能プログラム・コードを使用する処理装置２０２によって実行され、そのコードは、たとえば、メイン・メモリ２０４、読み取り専用メモリ２２４などのメモリ内、あるいは１つまたは複数の周辺装置２２６および２３０内に位置することができる。
【００２７】
当業者であれば、図１、図２、および図３のハードウェアは実装例次第で様々になる可能性があることを認識するであろう。図１、図２、および図３に描写されているハードウィーに加えてまたはその代わりに、フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどのその他の内部ハードウェアまたは周辺装置を使用することもできる。また、本発明のプロセスはマルチプロセッサ・データ処理システムに適用することもできる。いくつかの例示的な例として、データ処理システム２００は携帯情報端末（ＰＤＡ）にすることができ、これは、オペレーティング・システム・ファイルあるいはユーザ生成データまたはその両方を保管するための不揮発性メモリを提供するためにフラッシュ・メモリによって構成される。
【００２８】
バス・システムは、図２に示されているバス２３８またはバス２４０などの１つまたは複数のバスで構成することができる。当然のことながら、バス・システムは、そのファブリックまたはアーキテクチャに付加された種々のコンポーネントまたはデバイス間のデータの転送を可能にする任意のタイプの通信ファブリックまたはアーキテクチャを使用して実装することができる。通信ユニットは、図２のモデム２２２またはネットワーク・アダプタ２１２など、データを送受信するために使用される１つまたは複数のデバイスを含むことができる。メモリは、たとえば、メイン・メモリ２０４、読み取り専用メモリ２２４、または図２のノースブリッジおよびメモリ・コントローラ・ハブ２０８内で検出されるようなキャッシュにすることができる。図１、図２、および図３に描写されている例ならびに上記の諸例はアーキテクチャ上の制限を暗示するためのものではない。たとえば、データ処理システム２００は、ＰＤＡの形を取ることに加えて、タブレット・コンピュータ、ラップトップ・コンピュータ、または電話機にすることもできる。
【００２９】
次に図３を参照すると、本発明の諸態様を実装することができる模範的なコンピューティング環境の一部分５０のブロック図が描写されている。例示されている実施形態では、一部分５０は、プロセッサ５２と、ランダム・アクセス・メモリ（ＲＡＭ）などのメモリ５４とを含む。一部分５０は、便宜上例示されていない複数のコンポーネントに動作可能に結合することができ、このようなコンポーネントとしては、グラフィカル・ユーザ・インターフェース上のユーザに対してウィンドウなどの画像を提示するディスプレイ、キーボード、マウス、プリンタなどを含むがこれらに限定されない。当然のことながら、当業者であれば、上記のコンポーネントまたは任意の数の異なるコンポーネント、周辺装置、およびその他のデバイスの任意の組み合わせを図３とともに使用できることを認識するであろう。
【００３０】
例示されている実施形態では、図３のプロセッサ５２は、メモリ５４に保管されたオペレーティング・システム（ＯＳ）５６（たとえば、ＡＩＸ、ｚ／ＯＳ、ＯＳ／２、ＬＩＮＵＸ、ＵＮＩＸ、ＷＩＮＤＯＷＳ、ＭＡＣ  ＯＳ）の制御下で動作し、入力およびコマンドを受け入れて結果を提示するためにユーザとのインターフェースを取る。本発明の一実施形態では、ＯＳ５６は本発明による機能を容易にする。このために、ＯＳ５６は書き込みモジュール２２と読み取りモジュール６２とを含み、これらは上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることができる。
【００３１】
書き込みモジュール２２、読み取りモジュール６２、および単一ライタ６５は、ネットワークから送信されるデータを読み書きし、ストレージ・システムに対して書き込み間隔を生成して発行することにより順次データをストレージ・システムに書き込むスレッドまたはプロセスを読み書きするためのコマンドを実行することができる。書き込みモジュール２２、読み取りモジュール６２、および単一ライタ６５は、図４にも記載されるように、スライディング書き込みウィンドウ３０４（以下の図４）がスライディング書き込みウィンドウ３０４のバッファ６４に着信書き込みデータを保管するとき、ならびにスライディング書き込みウィンドウ３０４内の１つまたは複数の開始および連続バッファ６４（たとえば、スライディング書き込みウィンドウ３０４内の第１のバッファ６４から始まる一連のバッファ）がデータで完全に満たされたときに、スライディング書き込みウィンドウ３０４がこの情報を単一ライタ６５に伝達し、次に単一ライタ６５がフラッシャの役割を引き受けるように構成し設計することができる。また、バッファ６４は、上記の模範的な方法における様々なプロセスおよびメカニズムを実行するために適合させることもできる。バッファ６４は、着信書き込みデータおよび書き込み間隔を保管し、ストレージ・メディアまたはストレージ環境に書き込まれる前に着信データを適切に順序付けるために使用することができ、その機能については以下の図４に記載する。
【００３２】
一実施形態では、オペレーティング・システム５６、書き込みモジュール２２、読み取りモジュール、単一ライタ６５、およびバッファ６４を実装する命令はコンピュータ可読媒体に有形に実施され、そのコンピュータ可読媒体としては、Ｚｉｐドライブ、ディスク、ハード・ディスク、ＤＶＤ／ＣＤ−ＲＯＭ、デジタル・テープ、ソリッド・ステート・ドライブ（ＳＳＤ）などの１つまたは複数の固定または取り外し可能データ・ストレージ・デバイスを含むことができる。さらに、オペレーティング・システム５６、書き込みモジュール２２、読み取りモジュール、およびバッファ６４は、コンピューティング・ストレージ環境によって読み取られ実行されたときに、本発明を実装するかあるいは使用するかまたはその両方を行うために必要な諸ステップを実行するための命令を含む。また、オペレーティング・システム５６、書き込みモジュール２２、読み取りモジュール、単一ライタ６５、およびバッファ６４は、メモリ５４に有形に実施するか、あるいは様々なコンポーネントを介して図１に記載されているネットワークによって送信またはアクセスするか、またはその両方を行うことができる。このため、本明細書で使用する可能性のある「装置（article of manufacture）」、「プログラム・ストレージ・デバイス」、および「コンピュータ・プログラム」という用語は、任意のコンピュータ可読デバイスまたはメディアからアクセス可能あるいは操作可能またはその両方であるコンピュータ・プログラムを包含するためのものである。
【００３３】
例示されている諸実施形態に関するメカニズムは、たとえば、前に記載したＳＡＮまたはＮＡＳなどのコンピューティング・デバイスのネットワークを含む分散コンピュータ・システムを管理するための機能を含む、１つまたは複数の関連ソフトウェア・アプリケーション・プログラム５８を含むことができる。したがって、プロセッサ５２は１つまたは複数のストレージ管理プロセッサ（ＳＭＰ）を含むことができる。アプリケーション・プログラム５８は、単一コンピュータ内で、またはコンピューティング・デバイスのネットワークを含む分散コンピュータ・システムの一部として動作することができる。ネットワークは、ローカル・エリア・ネットワークあるいはインターネット接続（たとえば、仮想私設網（ＶＰＮ）接続を介して、公用または安全なものになる可能性がある）またはその両方を介して接続されたか、もしくは、ファイバ・チャネルＳＡＮまたは当業者によって理解されるその他の既知のネットワーク・タイプを介して接続された１つまたは複数のコンピュータを包含することができる。
【００３４】
図４は、例示されている諸実施形態の様々な態様を取り入れた模範的なスライディング書き込みウィンドウ機能３００のブロック図である。スライディング書き込みウィンドウ３０４は書き込み間隔３０２の形で着信書き込みデータをバッファ６４（図３）に保管し、バッファ６４はバッファ間隔３０６に関連付けられている。前に示した通り、バッファ間隔は順次データ・セット内のその開始オフセットおよびサイズと、バッファ・コンテキストによって指定される。したがって、各バッファ間隔３０６は、部分的に、図示の通り、バッファ・コンテキスト３０８によって指定される。同じく、前に示した通り、チャンク間隔はバッファ間隔の一セクションであり、書き込まれるデータ・セットに関してその開始オフセットおよびサイズによって指定される。複数のチャンク間隔３１０は（単一バッファ間隔に関する一例として示されている）各バッファ間隔３０６の複数セクションである。
【００３５】
１つまたは複数の開始および連続バッファ６４（すなわち、ウィンドウ内の第１のバッファ６４から始まる一連のバッファ）がデータで完全に満たされたときに、スライディング書き込みウィンドウ３０４はこの情報を単一ライタ（図３の６５）に伝達し、次に単一ライタ６５がフラッシャの役割を引き受ける。フラッシャは、入手可能な限り多くの完全バッファ６４を収集しているクリティカル・セクションに入り、これらのバッファ６４またはバッファ間隔に対する参照をバッファ６４の適切な順序でフラッシュ待ち行列（flushing queue）に挿入し、クリティカル・セクションを終了する。
【００３６】
次にフラッシャは、フラッシュ待ち行列から（バッファ６４の順序で）バッファ６４の参照を取り出し、参照されたバッファ６４の内容をストレージ・メディアまたは記憶媒体にフラッシュする。次にフラッシャは、空のバッファ６４を取得し、クリティカル・セクションに入り、これらのバッファ６４をスライディング書き込みウィンドウ３０４に追加する。スライディング書き込みウィンドウにバッファ６４を追加する操作およびそこからバッファ６４を除去する操作と、着信データを書き込むためのスライディング書き込みウィンドウ３０４内の位置を計算し、次にスライディング書き込みウィンドウ３０４とスライディング書き込みウィンドウを含むバッファ６４が満たされているレベルを示す操作との間で相互排除が適用される。したがって、クリティカル・セクション内で高速メモリ操作のみが実行されるように相互排除が最小限になる。本発明のメカニズムにより、スライディング書き込みウィンドウ・メカニズム３０４内のボトルネックの除去が可能になり、ストレージ・システムの全体的なパフォーマンスが向上する。
【００３７】
次に図５および図６を参照すると、スライディング書き込みウィンドウ・メカニズムの効率的で最小限の相互排除実装例としてデータを書き込むための模範的な方法５００の流れ図が提示されている。方法５００は始まり（ステップ５０１）、データはネットワークから書き込み間隔にロードされる（ステップ５０２）。この方法はクリティカル・セクションに入る（ステップ５０４）。この方法は、所与の書き込み間隔に対応しなければならないそのバッファ間隔を計算して返すスライディング書き込みウィンドウ・メカニズムに書き込み間隔を提供し（ステップ５０６）、次にクリティカル・セクションを出る（ステップ５０８）。次にこの方法は第１の戻りバッファ間隔を考慮する（ステップ５０９）。書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファ・コンテキストにコピーされる（ステップ５１０）。次にこの方法はバッファ間隔内の第１のチャンク間隔を考慮する（ステップ５１２）。この方法は考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する（ステップ５１４）。この方法は、考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しいかどうかを判断する（ステップ５１６）。考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しくない場合、この方法はバッファ内の追加のチャンク間隔の有無をチェックする（ステップ５２８）。バッファ内に追加のチャンク間隔がある場合、この方法は循環して戻り（ステップ５２８）、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する（ステップ５１４）。考慮したチャンク間隔内の占有バイトの新しい数がチャンク・サイズに等しい場合（ステップ５１６）、この方法はチャンクのＣＲＣ値を計算し、計算した値を考慮したチャンク間隔のプロパティに割り当てる（ステップ５１８）。
【００３８】
もう一度、この方法はクリティカル・セクションに入る（ステップ５２０）。クリティカル・セクションでは（ステップ５２０）、この方法は考慮したバッファ間隔のうちの完全チャンク間隔の数を１だけ増分する（ステップ５２１）。この方法は、バッファ間隔内の完全チャンク間隔の数の新しい値がバッファ間隔内のチャンク間隔の数に等しいかどうか、ならびに考慮したバッファ間隔がスライディング書き込みウィンドウ間隔内の第１の間隔であるかどうかを判断する（ステップ５２２）。ステップ５２２の条件が該当しない場合、この方法はクリティカル・セクションを出る（ステップ５２６）。ステップ５２２の条件が該当する場合、この方法は、正確に１つのスレッドで設定されるフラグを設定して、第１のバッファ間隔がフラッシュの準備ができていることを示し（ステップ５２４）、次にクリティカル・セクションを出る（ステップ５２６）。次に、この方法は、前述の通り、バッファ間隔内に追加のチャンク間隔があるかどうかを判断する（ステップ５２８）。バッファ間隔内に追加のチャンク間隔がある場合、この方法は循環して戻り（ステップ５２８）、考慮したチャンク間隔内の占有バイトの数を考慮したチャンク間隔に書き込まれたサイズだけアトミックに増分する（ステップ５１４）。バッファ間隔内に追加のチャンク間隔がまったくない場合、この方法は追加のバッファ間隔があるかどうかを判断する（ステップ５３０）。追加のバッファ間隔がある場合、書き込み間隔のデータはバッファ間隔の開始オフセットに応じてバッファ・コンテキストにコピーされる（ステップ５１０）。追加のバッファ間隔がまったくない場合（ステップ５３０）、この方法は第１のバッファ間隔が完全であることを示すフラグが設定されているかどうかを判断し（ステップ５３２）、設定されていない場合、この方法は終了する（ステップ５５２）。
【００３９】
フラグが設定されている場合（ステップ５３２）、この方法はクリティカル・セクションに入る（ステップ５３４）。スライディング書き込みウィンドウ内のバッファ間隔がスキャンされ、スライディング書き込みウィンドウ内の常駐順序に基づいて、第１のバッファからフラッシュ待ち行列まで、完全な連続バッファ間隔に参照が追加される（ステップ５３６）。スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけ開始オフセットを増分することにより、スライディング書き込みウィンドウが順方向に移動する（ステップ５３８）。この方法はクリティカル・セクションを出る（ステップ５４０）。バッファ間隔順序に基づいて、フラッシュ待ち行列からバッファ間隔が抽出される（ステップ５４２）。抽出されるバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しい（ステップ５４２）。新しい空のバッファ間隔が取得される（ステップ５４４）。取得されるバッファ間隔の数は現在の実行スレッドによってフラッシュされるバッファ間隔の数である。この方法はクリティカル・セクションに入り（ステップ５４６）、取得したバッファ間隔がスライディング書き込みウィンドウに追加される。スライディング書き込みウィンドウ内にいずれかのバッファ間隔が存在する場合、取得したバッファ間隔は既存のバッファ間隔の次の順序に置かれる。したがって、スライディング書き込みウィンドウのサイズは追加されたバッファ間隔の全サイズだけ増加する。この方法はクリティカル・セクションを出て（ステップ５５０）、この方法は終了する（ステップ５５２）。
【００４０】
例示されている諸実施形態の一態様では、単一ライタはクリティカル・セクションに入り、単一ライタの書き込み間隔をスライディング書き込みウィンドウに提供し、スライディング書き込みウィンドウは所与の書き込み間隔に対応することになるバッファ間隔を計算して返す。スライディング書き込みウィンドウは並行してロールフォワードされる可能性があるので、バッファ間隔を返すためにスライディング書き込みウィンドウによって実行される高速計算はクリティカル・セクションの内部で行われる。次にクリティカル・セクションを出る。
【００４１】
戻りバッファ間隔のそれぞれについて、例示されている諸実施形態のメカニズムはクリティカル・セクションの外部で操作を実行することができる。単一ライタは、バッファ間隔開始オフセットに応じて、単一ライタの書き込み間隔のデータをバッファ・コンテキストに書き込むかまたはコピーする。データ・コピーはより長い操作であるので、クリティカル・セクションの外部で実行される。単一ライタは、スライディング書き込みウィンドウの所与のバッファ間隔内への単一ライタの書き込み間隔の書き込みが完了したことをスライディング書き込みウィンドウに通知する。単一ライタは、バッファ間隔内部のチャンク間隔について繰り返し、各チャンク間隔について、このチャンク間隔への書き込みサイズによる占有バイトの数の値がアトミックに更新される（この値は事前にゼロに初期設定される）。アトミック操作は、特定の操作の間中、インスタント・ロック（instant locking）によって実装される。新しい値が一定のチャンク・サイズに到達した場合、このチャンクの巡回冗長検査「ＣＲＣ」値が計算される。これは、クリティカル・セクションの外部で行われる、より長い操作である。この計算の結果は、関連チャンク間隔のプロパティ内に設定される。
【００４２】
クリティカル・セクションの外部でいくつかの操作を実行すると、例示されている諸実施形態のメカニズムはクリティカル・セクションを再確立するかまたはそこに再び入ることができる。次に、関連バッファ間隔の完全チャンク間隔の数は１だけ増分される。完全チャンク間隔の数の新しい値が１つのバッファ間隔内のチャンク間隔の定数に到達した場合、ならびに、関連のバッファ間隔が現在のスライディング・ウィンドウ内の第１の間隔である場合、操作は、単一ライタに提供されるフラグを設定し、第１のバッファ間隔がフラッシュの準備ができていることを示す。書き込み間隔は交差しないので、正確に１つの単一ライタは、第１のバッファ間隔がフラッシュの準備ができているという指示を受信する。次にクリティカル・セクションを出る。
【００４３】
スライディング書き込みウィンドウ・メカニズムによって提供されたすべてのバッファ間隔を処理すると、単一ライタは、第１のバッファ間隔が完全であることを示すフラグが設定されているかどうかをチェックし、そうである場合、単一ライタは続行し、フラッシャの役割を引き受け、もう一度、クリティカル・セクションに入る。フラッシャは、スライディング書き込みウィンドウ内のバッファ間隔をスキャンし、そのバッファがスライディング書き込みウィンドウ内に常駐する順序で、完全な（すなわち、そのチャンク間隔がすべて完全である）第１のバッファからフラッシュ待ち行列まで、連続バッファ間隔に参照を追加する。プロセス内のこの時点では少なくとも１つの完全バッファ間隔が存在することになる。
【００４４】
次に、スライディング書き込みウィンドウは、スライディング書き込みウィンドウから抽出されたバッファ間隔の全サイズだけその開始オフセットを増分することにより、順方向に移動する。新しいバッファの取得が行われていないので、この段階でスライディング書き込みウィンドウのサイズが低減される。次にクリティカル・セクションを出る。
【００４５】
クリティカル・セクションの外部で、フラッシュ待ち行列からバッファ間隔が抽出される。現在の実行スレッドによって抽出されたバッファ間隔の数は、現在の実行スレッドによってフラッシュ待ち行列に挿入されたバッファ間隔の数に等しい。バッファ間隔は、フラッシュ待ち行列内に置かれた順序でフラッシュ待ち行列から抽出される。また、バッファ間隔の数のそれぞれについて、バッファ間隔の内容をストレージ・メディアにフラッシュすることができ、そのチャンクのＣＲＣ値は（読み取り操作の将来の検証のために）保管される。依然としてクリティカル・セクションの外部にある間に、空のバッファ間隔が取得される。取得されたバッファ間隔の数は現在の実行スレッドによってフラッシュされたバッファの数である。
【００４６】
もう一度、例示されている諸実施形態のメカニズムはクリティカル・セクションに再び入ることができる。取得された空のバッファ間隔は、スライディング書き込みウィンドウに追加され、ウィンドウ内の既存のバッファの次に置かれる。スライディング書き込みウィンドウのサイズはそれに応じて増加する。次にクリティカル・セクションを出る。
【００４７】
当業者であれば認識するように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラムとして実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェア態様とハードウェア態様を結合した実施形態の形を取ることができ、このような実施形態は一般に本明細書ではいずれも「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、コンピュータ可読プログラム・コードがそこに実施されている１つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラムの形を取ることもできる。
【００４８】
１つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体システム、装置、あるいはデバイス、もしくはこれらの任意の適切な組み合わせにすることができるが、これらに限定されないものである。コンピュータ可読記憶媒体のより具体的な例（非網羅的リスト）としては、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光記憶装置、磁気記憶装置、またはこれらの任意の適切な組み合わせを含むであろう。本書に関連して、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管可能な任意の有形媒体にすることができる。
【００４９】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語ならびに「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してユーザのコンピュータに接続される場合もあれば、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して接続が行われる場合もある。
【００５０】
本発明の諸実施形態による方法、装置（システム）、およびコンピュータ・プログラムの流れ図あるいはブロック図またはその両方に関連して、本発明の諸態様について説明してきた。流れ図あるいはブロック図またはその両方の各ブロックならびに流れ図あるいはブロック図またはその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、マシンを生産するために汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供することができ、それにより、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令は流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／動作を実装するための手段を作成することになる。
【００５１】
また、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに対して特定の方法で機能するよう指示することができるコンピュータ可読媒体に保管することもでき、それにより、コンピュータ可読媒体に保管された命令は流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／動作を実装する命令を含む装置（article of manufacture）を生産することになる。また、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードして、コンピュータによって実装されるプロセスを生成するためにコンピュータ、その他のプログラマブル装置、またはその他のデバイス上で一連の動作ステップを実行させることができ、それにより、コンピュータまたはその他のプログラマブル装置上で実行される命令は流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／動作を実装するためのプロセスを提供することになる。
【００５２】
上記の図面内の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラムについて可能な実装例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能（複数も可）を実装するための１つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実装例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている２つのブロックは、関係する機能に応じて、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックならびにブロック図あるいは流れ図またはその両方の複数ブロックの組み合わせは、指定の機能または動作を実行する特殊目的ハードウェアベースのシステムによって、または特殊目的ハードウェアとコンピュータ命令の組み合わせによって、実装可能であることも留意されるであろう。
【００５３】
本発明の１つまたは複数の実施形態について詳細に例示してきたが、当業者であれば、特許請求の範囲に明記された本発明の範囲を逸脱せずに、これらの諸実施形態に対して変更および適応が可能であることを認識するであろう。
【符号の説明】
【００５４】
３００  スライディング書き込みウィンドウ機能
３０２  書き込み間隔
３０４  スライディング書き込みウィンドウ
３０６  バッファ間隔
３０８  バッファ・コンテキスト
３１０  チャンク間隔
【図１】
0005613139.tif 000002
【図２】
0005613139.tif 000003
【図３】
0005613139.tif 000004
【図４】
0005613139.tif 000005
【図５】
0005613139.tif 000006
【図６】
0005613139.tif 000007