(57)【特許請求の範囲】
【請求項１】
実行されるとデータを格納するための方法を行なう命令を含むプログラムであって、前記方法は、
データを書き込む要求を受け取るステップと、
前記要求に応答して、前記データを書き込むようＲＡＩＤグリッドにおける独立ディスク冗長アレイ（ＲＡＩＤ）グリッド位置を選択するステップと、
前記データをメモリに書き込むステップとを含み、前記データは、前記メモリに一時的に格納されており、前記方法はさらに、
前記ＲＡＩＤグリッド位置が充填されていることを示すようデータ構造を更新するステップと、
前記データ構造を使用して、前記ＲＡＩＤグリッドにおけるデータグリッドが充填されているかどうかを決定するステップとを含み、前記ＲＡＩＤグリッド位置は前記データグリッドに存在しており、前記方法はさらに、
前記データグリッドが充填されているという決定に基づいて、
前記データを使用して前記ＲＡＩＤグリッドについてのパリティ値を計算するステップを含み、前記ＲＡＩＤグリッドは、ロウＱパリティグループ、ロウＰパリティグループ、カラムＱパリティグループ、カラムＰパリティグループおよびインターセクションパリティグループを含んでおり、前記パリティ値の各々は、前記ロウＱパリティグループ、前記ロウＰパリティグループ、前記カラムＱパリティグループ、前記カラムＰパリティグループおよび前記インターセクションパリティグループからなるグループから選択されるものに関連付けられており、前記インターセクションパリティグループに関連付けられるパリティ値は、前記ロウＱパリティグループ、前記ロウＰパリティグループ、前記カラムＱパリティグループおよび前記カラムＰパリティグループからなるグループから選択される少なくとも１つからの前記パリティ値を使用して計算され、前記方法はさらに、
前記ＲＡＩＤグリッド位置に対応する持続性ストレージにおける物理アドレスを決定するステップと、
前記物理アドレスに対応する持続性ストレージにおける物理的位置に前記データを書き込むステップと、
前記持続性ストレージに前記パリティ値を書き込むステップとを含む、プログラム。
【請求項２】
前記方法はさらに、
ＲＡＩＤキューブのデータ部分が充填されているかどうかを決定するステップを含み、前記データ部分は複数のＲＡＩＤグリッドを含んでおり、前記ＲＡＩＤグリッドは前記複数のＲＡＩＤグリッドのうちの１つであり、前記方法はさらに、
前記データ部分が充填されているという決定に基づき、
前記データ部分における値を使用して前記ＲＡＩＤキューブのパリティ部分についてのパリティ値を計算するステップと、
前記パリティ部分についての前記パリティ値を持続性ストレージに書き込むステップとを含む、請求項１に記載のプログラム。
【請求項３】
前記パリティ部分はＰパリティＲＡＩＤグリッドおよびＱパリティＲＡＩＤグリッドを含む、請求項２に記載のプログラム。
【請求項４】
前記ＲＡＩＤキューブは、第１の次元、第２の次元および第３の次元を含んでおり、前記第１の次元は第１の独立した障害ドメインに関連付けられ、前記第２の次元は第２の独立した障害ドメインに関連付けられ、前記第３の次元は第３の独立した障害ドメインに関連付けられる、請求項２に記載のプログラム。
【請求項５】
前記持続性ストレージにおける前記物理的位置は、前記第１の独立した障害ドメイン、前記第２の独立した障害ドメインおよび前記第３の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項４に記載のプログラム。
【請求項６】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第１の独立した障害ドメインは前記複数のストレージモジュールであり、前記第２の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第３の独立した障害ドメインは前記複数のストレージモジュールの各々における複数のＮＡＮＤダイである、請求項４に記載のプログラム。
【請求項７】
前記パリティ値は、Ｐパリティ値、Ｑパリティ値およびインターセクションパリティ値からなるグループから選択される少なくとも１つを含む、請求項１に記載のプログラム。
【請求項８】
前記ＲＡＩＤグリッドは第１の次元および第２の次元を含んでおり、前記第１の次元は第１の独立した障害ドメインに関連付けられており、前記第２の次元は第２の独立した障害ドメインに関連付けられている、請求項１に記載のプログラム。
【請求項９】
前記持続性ストレージにおける前記物理的位置は、前記第１の独立した障害ドメインおよび前記第２の独立した障害ドメインを少なくとも部分的に使用して特定される、請求項８に記載のプログラム。
【請求項１０】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第１の独立した障害ドメインは前記複数のストレージモジュールであり、前記第２の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルである、請求項９に記載のプログラム。
【請求項１１】
前記持続性ストレージは複数のストレージモジュールを含んでおり、前記複数のストレージモジュールの各々はソリッドステートメモリを含んでおり、前記第１の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のチャンネルであり、前記第２の独立した障害ドメインは、前記複数のストレージモジュールの各々における複数のＮＡＮＤダイである、請求項９に記載のプログラム。
【請求項１２】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
第１のデータについての要求を受け取るステップと、
前記第１のデータを取得するステップとを含み、前記第１のデータは持続性ストレージにおける第１の物理的位置から取得され、前記第１の物理的位置は第１の物理アドレスに関連付けられており、前記方法はさらに、
前記第１のデータは破損および未取得からなるグループから選択されるものであるという第１の決定を行うステップを含み、
前記第１の決定に基づいて、
前記第１の物理アドレスに対応する第１の独立ディスク冗長アレイ（ＲＡＩＤ）グリッド位置を識別するステップと、
第１のＲＡＩＤグリッドが前記第１のＲＡＩＤグリッド位置に関連付けられることを識別するステップと、
前記第１のＲＡＩＤグリッドに関連付けられる、前記第１のＲＡＩＤグリッドおよび第２のＲＡＩＤグリッドを含むＲＡＩＤキューブを識別するステップと、
前記第１のＲＡＩＤグリッドにおいて少なくとも１つの値を使用して前記第１のデータを再構築する第１の試みを行うステップとを含み、前記第１の試みは失敗し、前記方法はさらに、
前記第１の試みが失敗した後、前記第２のＲＡＩＤグリッドにおいて少なくとも１つの値を使用して前記第１のデータを再構築する第２の試みを行うステップを含み、前記第２の試みは成功し、前記方法はさらに、
再構築された前記第１のデータをクライアントに提供するステップを含む、プログラム。
【請求項１３】
前記方法は、
第２のデータについての要求を受け取るステップと、
前記第２のデータを取得するステップとをさらに含み、前記第２のデータは持続性ストレージにおける第２の物理的位置から取得され、前記第２の物理的位置は、第２の物理アドレスに関連付けられており、前記方法はさらに、
前記第２のデータが破損しているという第３の決定を行うステップを含み、
前記第３の決定に基づいて、
前記第２の物理アドレスに対応する第２のＲＡＩＤグリッド位置を識別するステップと、
前記第１のＲＡＩＤグリッドが前記第２のＲＡＩＤグリッド位置に関連付けられることを識別するステップと、
前記第１のＲＡＩＤグリッドにおける少なくとも１つの値を使用して前記第２のデータを再構築する第３の試みを行うステップとを含み、前記第３の試みは失敗し、前記方法はさらに、
前記第３の試みが失敗した後、前記第２のＲＡＩＤグリッドにおいて少なくとも１つの値を使用して前記第２のデータを再構築する第４の試みを行うステップを含み、前記第４の試みは失敗し、前記方法はさらに、
前記第４の試みが失敗した後、前記ＲＡＩＤキューブのパリティ部分からの少なくとも１つの値を使用して前記第２のデータを再構築する第５の試みを行うステップを含み、前記第５の試みは成功し、前記方法はさらに、
再構築された前記第２のデータを前記クライアントに提供するステップを含む、請求項１２に記載のプログラム。
【請求項１４】
前記パリティ部分はＰパリティ値およびＱパリティ値を含む、請求項１３に記載のプログラム。
【請求項１５】
前記Ｐパリティ値は、前記第１のＲＡＩＤグリッドに関連付けられる少なくとも１つの値と前記第２のＲＡＩＤグリッドに関連付けられる少なくとも１つの値とを使用して計算される、請求項１４に記載のプログラム。
【請求項１６】
前記第１のＲＡＩＤグリッドは、前記第１のＲＡＩＤグリッドについてのロウＱパリティグループ、前記第１のＲＡＩＤグリッドについてのロウＰパリティグループ、前記第１のＲＡＩＤグリッドについてのカラムＱパリティグループ、および前記第１のＲＡＩＤグリッドについてのカラムＰパリティグループからなるグループから選択される少なくとも１つを含み、
前記第２のＲＡＩＤグリッドは、前記第２のＲＡＩＤグリッドについてのロウＱパリティグループ、前記第２のＲＡＩＤグリッドについてのロウＰパリティグループ、前記第２のＲＡＩＤグリッドについてのカラムＱパリティグループ、および前記第２のＲＡＩＤグリッドについてのカラムＰパリティグループからなるグループから選択される少なくとも１つを含む、請求項１２に記載のプログラム。
【請求項１７】
前記第１のＲＡＩＤグリッドにおける前記少なくとも１つの値は、データグリッドにおけるＲＡＩＤグリッド位置に対応する値、前記第１のＲＡＩＤグリッドについてのロウＱパリティグループに関連付けられるＲＡＩＤグリッド位置に対応する値、前記第１のＲＡＩＤグリッドについてのロウＰパリティグループに関連付けられるＲＡＩＤグリッド位置に対応する値、前記第１のＲＡＩＤグリッドについてのカラムＱパリティグループに関連付けられるＲＡＩＤグリッド位置に対応する値、および前記第１のＲＡＩＤグリッドについてのカラムＰパリティグループに関連付けられるＲＡＩＤグリッド位置に対応する値とからなるグループから選択されるものであり、前記第１のＲＡＩＤグリッドは前記データグリッドを含む、請求項１２に記載のプログラム。
【請求項１８】
前記持続性ストレージはソリッドステートメモリである、請求項１２に記載のプログラム。
【請求項１９】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
データについての要求を受け取るステップと、
前記データを取得するステップとを含み、前記データは持続性ストレージにおける物理的位置から取得され、前記物理的位置は物理アドレスに関連付けられており、前記方法はさらに、
前記データは破損および未取得からなるグループから選択されるものであるという第１の決定を行うステップを含み、
前記第１の決定に基づいて、
前記物理アドレスに対応する第１の独立ディスク冗長アレイ（ＲＡＩＤ）グリッド位置を識別するステップと、
ＲＡＩＤグリッドが前記第１のＲＡＩＤグリッド位置に関連付けられることを識別するステップと、
第２のＲＡＩＤグリッド位置における第１の値を使用して前記データを再構築する第１の試みを行うステップとを含み、前記第２のＲＡＩＤグリッド位置は、前記ＲＡＩＤグリッドにおける第１のロウおよび第１のカラムからなるグループから選択される少なくとも１つに位置しており、前記第１のＲＡＩＤグリッド位置は前記第１のロウおよび前記第１のカラムの一部であり、前記第１の試みは失敗し、前記方法はさらに、
前記第１の試みが失敗した後、前記データを再構築する第２の試みを行うステップを含み、前記第２の試みは成功し、前記第２の試みは、
前記ＲＡＩＤグリッドの再構築された部分を取得するよう、前記ＲＡＩＤグリッドにおける第２のロウおよび第２のカラムからなるグループから選択される少なくとも１つのものを再構築するステップを含み、前記ＲＡＩＤグリッドの前記再構築された部分は、前記第１のロウおよび前記第１のカラムからなるグループから選択される少なくとも１つと交差しており、前記第２の試みは、
第３のＲＡＩＤグリッド位置における第２の値を使用して、前記データを再構築するステップを含み、前記第３のＲＡＩＤグリッド位置は前記ＲＡＩＤグリッドの前記再構築された部分の一部であり、前記第３のＲＡＩＤグリッド位置は、前記第１のロウおよび前記第１のカラムからなるグループから選択されるものに位置しており、前記方法はさらに、
再構築された前記データをクライアントに提供するステップを含む、プログラム。
【請求項２０】
実行されるとデータを再構築するための方法を行なう命令を含むプログラムであって、前記方法は、
データについての要求を受け取るステップと、
持続性ストレージにおける物理的位置から前記データを取得することを試みるステップとを含み、前記物理的位置は第１の物理アドレスに関連付けられており、前記方法はさらに、
前記データは、破損および利用不可からなるグループから選択されるものであるという決定を行うステップを含み、
前記決定に基づいて、
第１の値を取得するようパリティ値を使用して、第２の物理アドレスに対応する第１の独立ディスク冗長アレイ（ＲＡＩＤ）グリッド位置を再構築するステップと、
第２の値を取得するよう前記パリティ値を使用して、第３の物理アドレスに対応する第２のＲＡＩＤグリッド位置の再構築するステップと、
第３の値を取得するよう前記第１の値を使用して、第４の物理アドレスに対応する第３のＲＡＩＤグリッド位置の再構築するステップと、
前記第２の値および前記第３の値を使用して前記データを再構築するステップとを含み、
前記第１のＲＡＩＤグリッド位置はＲＡＩＤグリッドにおける第１のストライプに存在しており、
前記第２のＲＡＩＤグリッド位置は前記ＲＡＩＤグリッドにおける第２のストライプに存在しており、
前記パリティ値は前記ＲＡＩＤグリッドにおける第４のＲＡＩＤグリッド位置に位置しており、
前記第４のＲＡＩＤグリッド位置は、前記第１のストライプおよび前記第２のストライプの一部であり、前記方法はさらに、
再構築された前記データをクライアントに提供するステップを含む、プログラム。
【請求項２１】
前記第１のストライプは前記ＲＡＩＤグリッドにおけるロウであり、前記第２のストライプは前記ＲＡＩＤグリッドにおけるカラムである、請求項２０に記載のプログラム。
【請求項２２】
前記第１のストライプは前記ＲＡＩＤグリッドにおけるカラムであり、前記第２のストライプは前記ＲＡＩＤグリッドにおけるロウである、請求項２０に記載のプログラム。
【請求項２３】
前記第４のＲＡＩＤグリッド位置は、前記ＲＡＩＤグリッドにおけるインターセクションパリティグループの一部である、請求項２０に記載のプログラム。
【請求項２４】
前記パリティ値はインターセクションパリティ値である、請求項２０に記載のプログラム。
【請求項２５】
前記パリティ値は、前記第１のストライプにおける少なくとも１つの他のパリティ値を使用して計算される、請求項２０に記載のプログラム。
【請求項２６】
前記少なくとも１つの他のパリティ値は、ロウＰパリティグループおよびロウＱパリティグループからなるグループから選択されるものの一部である、請求項２５に記載のプログラム。
【請求項２７】
前記パリティ値は、前記第２のストライプにおける少なくとも１つの他のパリティ値を使用して計算される、請求項２０に記載のプログラム。
【請求項２８】
前記少なくとも１つの他のパリティ値は、カラムＰパリティグループおよびカラムＱパリティグループからなるグループから選択されるものの部分である、請求項２７に記載のプログラム。
【請求項２９】
前記データは第５のＲＡＩＤグリッド位置に関連付けられており、前記第５のＲＡＩＤグリッド位置は前記第１のストライプの部分ではなく、前記第２のストライプの部分ではない、請求項２０に記載のプログラム。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
ストレージシステムにおけるデータの潜在的な損失に対する保護のために、複製スキームを実施することはしばしば有利である。現在の複製スキームは、ストレージシステム内のデータを読み出すことができなくなる前に、限られた量のエラーに耐えることができるだけである。
【発明の概要】
【課題を解決するための手段】
【０００２】
概要
一般に、１つの局面において、本発明はデータを格納するための方法に関する。当該方法は、データを書き込む要求を受け取るステップと、上記要求に応答して、上記データを書き込むようＲＡＩＤグリッドにおけるＲＡＩＤグリッド位置を選択するステップと、上記データをメモリに書き込むステップとを含み、上記データは、上記メモリに一時的に格納されており、上記方法はさらに、上記ＲＡＩＤグリッド位置が充填されていることを示すようデータ構造を更新するステップと、上記データ構造を使用して、上記ＲＡＩＤグリッドにおけるデータグリッドが充填されているかどうかを決定するステップとを含み、上記ＲＡＩＤグリッド位置は上記データグリッドに存在しており、上記方法はさらに、上記データグリッドが充填されているという決定に基づいて、上記データを使用して上記ＲＡＩＤグリッドについてのパリティ値を計算するステップと、上記ＲＡＩＤグリッド位置に対応する持続性ストレージにおける物理アドレスを決定するステップと、上記物理アドレスに対応する持続性ストレージにおける物理的位置に上記データを書き込むステップと、上記持続性ストレージに上記パリティ値を書き込むステップとを含む。
【０００３】
一般に、１つの局面において、本発明は、データを再構築するための方法に関する。上記方法は、第１のデータについての要求を受け取るステップと、上記第１のデータを取得するステップとを含み、上記第１のデータは持続性ストレージにおける第１の物理的位置から取得され、上記第１の物理的位置は第１の物理アドレスに関連付けられており、上記方法はさらに、上記第１のデータは破損および未取得からなるグループから選択されるものであるという第１の決定を行うステップを含み、上記第１の決定に基づいて、上記第１の物理アドレスに対応する第１のＲＡＩＤグリッド位置を識別するステップと、第１のＲＡＩＤグリッドが上記第１のＲＡＩＤグリッド位置に関連付けられることを識別するステップと、上記第１のＲＡＩＤグリッドに関連付けられる、上記第１のＲＡＩＤグリッドおよび第２のＲＡＩＤグリッドを含むＲＡＩＤキューブを識別するステップと、上記第１のＲＡＩＤグリッドにおいて少なくとも１つの値を使用して上記第１のデータを再構築する第１の試みを行うステップとを含み、上記第１の試みは失敗し、上記方法はさらに、上記第１の試みが失敗した後、上記第２のＲＡＩＤグリッドにおいて少なくとも１つの値を使用して上記第１のデータを再構築する第２の試みを行うステップを含み、上記第２の試みは成功し、上記方法はさらに、再構築された上記第１のデータを上記クライアントに提供するステップを含む。
【０００４】
一般に、１つの局面において、本発明は、データを再構築するための方法に関する。上記方法は、データについての要求を受け取るステップと、上記データを取得するステップとを含み、上記データは持続性ストレージにおける物理的位置から取得され、上記物理的位置は物理アドレスに関連付けられており、上記方法はさらに、上記第１のデータは破損および未取得からなるグループから選択されるものであるという第１の決定を行うステップを含み、上記第１の決定に基づいて、上記物理アドレスに対応する第１のＲＡＩＤグリッド位置を識別するステップと、ＲＡＩＤグリッドが上記第１のＲＡＩＤグリッド位置に関連付けられることを識別するステップと、第２のＲＡＩＤグリッド位置における第１の値を使用して上記データを再構築する第１の試みを行うステップとを含み、上記第２のＲＡＩＤグリッド位置は、上記ＲＡＩＤグリッドにおける第１のロウおよび第１のカラムからなるグループから選択される少なくとも１つに位置しており、上記第１のＲＡＩＤグリッド位置は上記第１のロウおよび上記第１のカラムの一部であり、上記第１の試みは失敗し、上記方法はさらに、上記第１の試みが失敗した後、上記データを再構築する第２の試みを行うステップを含み、上記第２の試みは成功し、上記第２の試みは、上記ＲＡＩＤグリッドの再構築された部分を取得するよう、上記ＲＡＩＤグリッドにおける第２のロウおよび第２のカラムからなるグループから選択される少なくとも１つのものを再構築するステップを含み、上記ＲＡＩＤグリッドの上記再構築された部分は、上記第１のロウおよび上記第１のカラムからなるグループから選択される少なくとも１つと交差しており、上記第２の試みは、第３のＲＡＩＤグリッド位置における第２の値を使用して上記データを再構築するステップを含み、上記第３のＲＡＩＤグリッド位置は上記ＲＡＩＤグリッドの上記再構築された部分の一部であり、上記第３のＲＡＩＤグリッド位置は、上記第１のロウおよび上記第１のカラムからなるグループから選択されるものに位置しており、上記方法はさらに、再構築された上記データを上記クライアントに提供するステップを含む。
【０００５】
本発明の他の局面は、以下の記載および添付の特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００６】
【図１】本発明の一実施形態に従ったシステムを示す図である。
【図２】本発明の一実施形態に従ったＲＡＩＤグリッドを示す図である。
【図３】本発明の一実施形態に従った、ＲＡＩＤキューブおよびＲＡＩＤキューブのさまざまな図を示す図である。
【図４】本発明の一実施形態に従ったデータ構造を示す図である。
【図５Ａ】本発明の一実施形態に従ったフローチャートを示す図である。
【図５Ｂ】本発明の一実施形態に従ったフローチャートを示す図である。
【図５Ｃ】本発明の一実施形態に従ったフローチャートを示す図である。
【図６Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図６Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図６Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【図７Ｄ】本発明の１つ以上の実施形態に従った例を示す図である。
【図８】本発明の１つ以上の実施形態に従ったフローチャートを示す図である。
【図９Ａ】本発明の１つ以上の実施形態に従った例を示す図である。
【図９Ｂ】本発明の１つ以上の実施形態に従った例を示す図である。
【図９Ｃ】本発明の１つ以上の実施形態に従った例を示す図である。
【図９Ｄ】本発明の１つ以上の実施形態に従った例を示す図である。
【発明を実施するための形態】
【０００７】
詳細な説明
ここで、本発明の特定の実施形態を添付の図面を参照して詳細に記載する。本発明の実施形態の以下の詳細な説明において、本発明のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、本発明がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の機構は詳細に記載されない。
【０００８】
図１〜図９Ｄの以下の説明では、本発明のさまざまな実施形態において図に関して記載される任意の構成要素は、任意の他の図に関して記載された同様の名称を有する１つ以上の構成要素と同等であり得る。簡潔さのために、これらの構成要素の説明は、各図に関して繰り返されない。したがって、各図の構成要素の各実施形態は、参照により援用され、同様の名称を有する１つ以上の構成要素を有する他のすべての図内に随意に存在すると想定される。さらに、本発明のさまざまな実施形態に従うと、ある図の構成要素の如何なる記載も、任意の他の図中の対応する同様の名称を有する構成要素に関して記載された実施形態に加えて、当該実施形態に関連して、または当該実施形態の代わりに実施されてもよい随意の実施形態として解釈されるべきである。
【０００９】
一般に、本発明の実施形態は、多次元ＲＡＩＤスキームを使用してデータを複製するための方法およびシステムに関する。より具体的には、本発明の実施形態は、２Ｄ ＲＡＩＤスキームおよび３Ｄ ＲＡＩＤスキームを実施するための方法およびシステムを提供する。
【００１０】
２Ｄ ＲＡＩＤスキームを使用すると、所与のＲＡＩＤストライプにおいて２つより多いエラーが存在する場合、このようなＲＡＩＤスキームを実施するＲＡＩＤグリッド内に格納されたデータが回復され得る。同様に、３Ｄ ＲＡＩＤスキームを使用すると、所与のＲＡＩＤストライプにおいて２つより多いエラーが存在する場合、このようなＲＡＩＤスキームを実施するＲＡＩＤキューブ内に格納されたデータが回復され得る。さらに、本発明のさまざまな実施形態において、１つより多い独立した障害ドメイン（independent fault domain（ＩＦＤ））に故障がある場合、すべてのデータが回復されることになる。
【００１１】
本発明の１つ以上の実施形態において、ＩＦＤは、所与の位置のデータがアクセス不能になる故障モードに対応する。各ＩＦＤは、ストレージアレイにおける故障の独立したモードに対応する。たとえば、（複数のＮＡＮＤダイを含む）ストレージモジュールの一部であるＮＡＮＤフラッシュにデータが格納される場合、ＩＦＤは、（ｉ）ストレージモジュール、（ｉｉ）チャンネル（すなわちストレージモジュールにおけるストレージモジュールコントローラ（図示せず）によって、ＮＡＮＤフラッシュにデータを書き込むよう使用されるチャンネル）、および（ｉｉｉ）ＮＡＮＤダイであり得る。
【００１２】
この発明の目的のために、本願明細書において使用される「ＲＡＩＤ」という用語は、「独立ディスク冗長アレイ（Redundant Array of Independent Disks）」を指す。「ＲＡＩＤ」は独立したディスクの任意のアレイを指しているが、本発明の実施形態は、本発明の実現例に基づいて、ＲＡＩＤグリッド位置（たとえば図２参照）が１つ以上の持続性ストレージデバイスに亘って分散され得る任意のタイプの持続的ストレージデバイスを使用して実施されてもよい（たとえば図３および図４参照）。
【００１３】
図１は、本発明の一実施形態に従ったシステムを示す。図１に示されるように、このシステムは、１つ以上のクライアント（１００Ａ，１００Ｍ）と、ＲＡＩＤコントローラ（１０４）と、メモリ（１０６）と、随意にＦＰＧＡ（１０２）と、ストレージアレイ（１０８）とを含む。
【００１４】
本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は、読出要求または書込要求をＲＡＩＤコントローラ（１０４）に発行する機能を含む任意のシステムまたはシステム上で実行するプロセスである。本発明の一実施形態において、クライアント（１００Ａ，１００Ｍ）は各々、プロセッサ（図示せず）と、メモリ（図示せず）と、持続性ストレージ（図示せず）とを含んでもよい。本発明の一実施形態において、ＲＡＩＤコントローラ（１０４）は、多次元ＲＡＩＤスキームに一致する態様でストレージアレイにデータを書き込むこと（図５Ａ〜図５Ｃ参照）と、多次元ＲＡＩＤスキームに一致する態様でストレージアレイからデータを読み出すこと（データを再構成することを含む）とを含む多次元ＲＡＩＤスキームを実施するように構成される（図８参照）。本発明の一実施形態において、ＲＡＩＤコントローラ（１０４）は、本発明の１つ以上の実施形態を実施するよう命令を実行するように構成されるプロセッサを含む。当該命令は、ＲＡＩＤコントローラ（１０４）内に位置するかまたはＲＡＩＤコントローラ（１０４）に動作可能に接続される一時的でないコンピュータ読取可能媒体（図示せず）上に格納される。代替的には、ＲＡＩＤコントローラ（１０４）は、ハードウェアを使用して実施されてもよい。当業者であれば、ＲＡＩＤコントローラ（１０４）がソフトウェアおよび／またはハードウェアの任意の組合せを使用して実施されてもよいことを理解するであろう。
【００１５】
本発明の一実施形態では、ＲＡＩＤコントローラ（１０４）は、メモリ（１０６）に動作可能に接続される。メモリ（１０６）は、任意の揮発性メモリであってもよい。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。本発明の一実施形態において、メモリ（１０６）は、（パリティデータを含む）さまざまなデータがストレージアレイに格納される前にこのようなデータを一時的に格納するように構成される。
【００１６】
本発明の一実施形態において、ＦＰＧＡ（１０２）（存在する場合）は、ストレージアレイ（１０８）にデータを格納するためにＰおよび／もしくはＱパリティ情報を計算する機能、ならびに／または多次元ＲＡＩＤスキームを使用して格納された破損データを回復するのに必要なさまざまな計算を行なう機能を含む。ＲＡＩＤコントローラ（１０４）は、本発明の１つ以上の実施形態に従って、さまざまなデータの処理をオフロードするようＦＰＧＡ（１０２）を使用し得る。本発明の一実施形態において、ストレージアレイ（１０８）は、多くの個々の持続性ストレージデバイスを含む。当該持続性ストレージデバイスは、磁気メモリデバイス、光学メモリデバイス、ソリッドステートメモリデバイス、相変化メモリデバイス、任意の他の好適なタイプの持続メモリデバイス、またはその任意の組合せを含むがこれらに限定されない。
【００１７】
図１はＦＰＧＡを示しているが、当業者であれば、本発明はＦＰＧＡがなくても実施され得るということを理解するであろう。さらに当業者であれば、本発明から逸脱することなく、ＦＰＧＡの代わりに他の構成要素が使用されてもよいことを理解するであろう。たとえば本発明は、ストレージアレイにデータを格納する目的のためにＰおよび／もしくはＱパリティ情報を計算することができならびに／または格納された破損データを多次元ＲＡＩＤスキームを使用して回復するのに必要なさまざまな計算を行うことができるＡＳＩＣ，グラフィックス・プロセッシング・ユニット（ＧＰＵ），汎用プロセッサ，任意の他のハードウェアデバイス、ストレージアレイ（１０８）にデータを格納するためにＰおよび／もしくはＱパリティ情報を計算しならびに／または格納された破損データを多次元ＲＡＩＤスキームを使用して回復するのに必要なさまざまな計算を行なうよう構成されるハードウェア，ファームウェアおよび／もしくはソフトウェアの組み合わせを含む任意のデバイス、またはその任意の組合せを使用して実施されてもよい。
【００１８】
図２は、本発明の一実施形態に従ったＲＡＩＤグリッドを示す。本発明の一実施形態において、ＲＡＩＤコントローラが２Ｄ ＲＡＩＤスキームまたは３Ｄ ＲＡＩＤスキームを実施する場合（図３を参照）、ＲＡＩＤコントローラはＲＡＩＤグリッド（２００）にデータを格納する。図２は、本発明の１つ以上の実施形態に従ったＲＡＩＤグリッドの概念部分を示す。ＲＡＩＤグリッド（２００）は、多くのＲＡＩＤグリッド位置を含んでおり、各ＲＡＩＤグリッド位置は、ストレージアレイにおけるユニークな物理アドレスに最終的に書き込まれる。ＲＡＩＤグリッド（２００）は、（ｉ）クライアントから受け取られたデータ（すなわち、クライアントがＲＡＩＤコントローラにストレージアレイに書き込みを行うよう命令したデータ）を格納するＲＡＩＤグリッド位置を含むデータグリッド（２０２）と、（ｉｉ）ＲＡＩＤグリッド位置におけるデータを使用して計算されるＰパリティ値をロウ（row）（以下に記載）に格納する、ＲＡＩＤグリッド位置を含むロウＰパリティグループ（２０４）と、（ｉｉｉ）ＲＡＩＤグリッド位置におけるデータを使用して計算されるＱパリティ値をロウ（以下に記載）に格納する、ＲＡＩＤグリッド位置を含むロウＱパリティグループ（２０６）と、（ｉｖ）ＲＡＩＤグリッド位置におけるデータを使用して計算されるＰパリティ値をカラム（column）（以下に記載）に格納する、ＲＡＩＤグリッド位置を含むカラムＰパリティグループ（２０８）と、（ｖ）ＲＡＩＤグリッド位置におけるデータを使用して計算されるＱパリティ値をカラム（以下に記載）に格納する、ＲＡＩＤグリッド位置を含むカラムＱパリティグループ（２１０）と、（ｖｉ）（ａ）ロウＰパリティグループ（２０４）中のＲＡＩＤグリッド位置からのデータ、（ｂ）ロウＱパリティグループ（２０６）中のＲＡＩＤグリッド位置からのデータ、（ｃ）カラムＰパリティグループ（２０８）中のＲＡＩＤグリッド位置からのデータ、および（ｄ）カラムＱパリティグループ（２１０）中のＲＡＩＤグリッド位置からのデータを使用して計算されたパリティ値を含むインターセクションパリティグループ（２１２）（以下に記載）とを含む。
【００１９】
ロウ（２１４）を参照して、本発明の一実施形態において、ロウ（２１４）においてＰｒとして示されるＲＡＩＤグリッド位置に格納されるデータは、データを含むロウ（２１４）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することによって計算される（たとえばＰｒ＝ｆＰ（Ｄ１，Ｄ２，Ｄ３，Ｄ４）。同様に、本発明の一実施形態において、ロウ（２１４）中のＱｒとして示されるＲＡＩＤグリッド位置に格納されるデータは、データを含むロウ（２１４）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することにより計算される（たとえばＱｒ＝ｆＱ（Ｄ１，Ｄ２，Ｄ３，Ｄ４）。
【００２０】
カラム（２１６）を参照して、本発明の一実施形態において、カラム（２１６）のＰｃとして示されるＲＡＩＤグリッド位置に格納されるデータは、データを含むカラム（２１６）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することにより計算される（たとえばＰＣ＝ｆＰ（Ｄ５，Ｄ２，Ｄ６，Ｄ７）。同様に、本発明の一実施形態において、カラム（２１６）のＱＣによって示されるＲＡＩＤグリッド位置に格納されるデータは、データを含むカラム（２１６）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することにより計算される（たとえばＱＣ＝ｆＱ（Ｄ５，Ｄ２，Ｄ６，Ｄ７）。
【００２１】
インターセクションパリティグループ（２１２）を参照して、本発明の一実施形態において、Ｉｒ１として示されるＲＡＩＤグリッド位置に格納されるデータは、ロウＰパリティグループ（２０４）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することによってか、またはカラムＰパリティグループ（２０８）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することによって計算され得る。たとえば、Ｉｒ１＝ｆＰ（Ｐｒ１，Ｐｒ２，Ｐｒ３，Ｐｒ４）またはＩｒ１＝ｆＰ（Ｐｃ５，Ｐｃ６，Ｐｃ７，Ｐｃ８）である。
【００２２】
本発明の一実施形態において、Ｉｒ２として示されるＲＡＩＤグリッド位置に格納されたデータは、ロウＱパリティグループ（２０４）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することによって、またはカラムＰパリティグループ（２０８）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することによって計算され得る。たとえば、Ｉｒ２＝ｆＰ（Ｑｒ１，Ｑｒ２，Ｑｒ３，Ｑｒ４）またはＩｒ２＝ｆＱ（Ｐｃ５，Ｐｃ６，Ｐｃ７，Ｐｃ８）である。
【００２３】
本発明の一実施形態において、Ｉｒ３として示されるＲＡＩＤグリッド位置に格納されたデータは、カラムＰパリティグループ（２１０）中のすべてのＲＡＩＤグリッド位置にＰパリティ関数を適用することによってか、またはロウＰパリティグループ（２０４）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することによって計算され得る。たとえば、Ｉｒ３＝ｆＰ（Ｑｃ５，Ｑｃ６，Ｑｃ７，Ｑｃ８）またはＩｒ３＝ｆＱ（Ｐｃ１，Ｐｃ２，Ｐｃ３，Ｐｃ４）である。
【００２４】
本発明の一実施形態において、Ｉｒ４として表示されるＲＡＩＤグリッド位置に格納されたデータは、カラムＱパリティグループ（２１０）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することによってか、またはロウＱパリティグループ（２０６）中のすべてのＲＡＩＤグリッド位置にＱパリティ関数を適用することによって計算され得る。たとえば、Ｉｒ４＝ｆＱ（Ｑｃ１，Ｑｃ２，Ｑｃ３，Ｑｃ４）またはＩｒ４＝ｆＱ（Ｑｃ５，Ｑｃ６，Ｑｃ７，Ｑｃ８）である。
【００２５】
本発明の一実施形態において、パリティグループのすべてについての値を計算するために使用されるＰおよびＱパリティ関数は、ＲＡＩＤ６を実施するために使用される任意のＰおよびＱパリティ関数に対応し得る。
【００２６】
上で論じたように、図２に示されるＲＡＩＤグリッド（２００）は、ＲＡＩＤグリッドの概念的なレイアウトを示す。しかしながら、個々のＲＡＩＤグリッド位置がストレージアレイに書き込まれると、さまざまなＲＡＩＤグリッド位置の相対位置は、ロウまたはカラムに亘って変動し得る。たとえば、ロウ（２１４）を参照して、ロウ（２１４）内のＲＡＩＤグリッド位置がストレージアレイに書き込まれると、（「Ｄ」によって示される）データを含むＲＡＩＤグリッド位置と、パリティデータを含むＲＡＩＤグリッド位置（すなわち「Ｐｒ」および「Ｑｒ」として示されるＲＡＩＤグリッド位置）との相対位置は、＜Ｄ１，Ｄ２  Ｐｒ２，Ｄ３  Ｑｒ２，Ｄ４＞、＜Ｐｒ２，Ｑｒ２，Ｄ１，Ｄ２，Ｄ３，Ｄ４＞、またはロウ（２１４）内の任意の他の構成であり得る。同様に、カラム（２１６）を参照して、データ（「Ｄ」によって示される）を含むＲＡＩＤグリッド位置と、パリティデータを含むＲＡＩＤグリッド位置（すなわち「Ｐｃ」および「Ｑｃ」として示されるＲＡＩＤグリッド位置）との相対位置は、＜Ｄ５，Ｄ２，Ｄ６，Ｐｃ６，Ｄ６，Ｑｃ６＞、＜Ｐｃ６，Ｄ５，Ｄ２，Ｑｃ６，Ｄ６，Ｄ７＞、またはカラム（２１６）内の任意の他の構成であり得る。
【００２７】
ＲＡＩＤコントローラ（またはシステムにおける別のエンティティ）は、ストレージアレイにおけるどの物理アドレスにＲＡＩＤグリッド位置の各々が書き込まれるかを決定し得る。この決定は、クライアントから特定のＲＡＩＤグリッドについて（「Ｄ」として示される）データのいずれも受け取る前になされ得る。代替的には、この決定は、ストレージアレイにＲＡＩＤグリッド位置を書き込む前になされ得る。
【００２８】
当業者であれば、図２は６×６であるＲＡＩＤグリッドを示すが、ＲＡＩＤグリッドは、本発明から逸脱することがなければ任意の他の次元を使用して実施されてもよいということを理解するであろう。
【００２９】
本発明の一実施形態において、Ｐパリティ値は、リードソロモンシンドロームであり、したがって、Ｐパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Ｐパリティ関数はＸＯＲ関数である。
【００３０】
本発明の一実施形態において、Ｑパリティ値はリードソロモンシンドロームであり、したがって、Ｑパリティ関数は、リードソロモンシンドロームを生成し得る任意の関数に対応し得る。本発明の一実施形態では、Ｑパリティ値はリードソロモン符号である。本発明の一実施形態において、Ｑ＝ｇ０・Ｄ０＋ｇ１・Ｄ１＋ｇ２・Ｄ２＋…＋ｇｎ−１・Ｄｎ−１であり、式中、Ｑは、図２に関して規定されたＱパリティ値のうちのいずれか１つに対応し、ｇはフィールドのジェネレータであり、Ｄの値は（データグリッドからの値および／またはＰもしくはＱパリティ値の両方を含む１つ以上のロウまたはカラムからの値を含み得る）データに対応する。
【００３１】
当業者であれば、図２におけるＲＡＩＤグリッドは各ロウおよびカラムごとにＰおよびＱパリティを含むが、本発明の実施形態は、本発明から逸脱することがなければ、より多いまたはより少ないパリティ値を使用して実施され得るということを理解するであろう。たとえば、各ロウおよびカラムはＰパリティ値のみを含んでもよい。別の例では、各ロウおよびカラムは３つのパリティ値を含んでもよい。上記の例は、本発明を限定するようには意図されない。本発明の一実施形態において、本発明の実現例において使用されるパリティ値の数に関わらず、パリティ値の各々はリードソロモンシンドロームである。
【００３２】
図３は、本発明の一実施形態に従った、ＲＡＩＤキューブおよびＲＡＩＤキューブのさまざまな図を示す。図３に示されるように、ＲＡＩＤキューブ（３００）は、ＲＡＩＤグリッド（３０２）の概念的なスタックに対応する。上で論じたように、ＲＡＩＤコントローラ（またはシステムにおける別のエンティティ）は、ＲＡＩＤグリッド位置の各々についてデータを格納するべきストレージアレイ内の物理アドレスを選択する。本発明の一実施形態において、物理アドレスの選択は、それに対してＲＡＩＤグリッド（またはＲＡＩＤキューブ）が保護するよう設計されるＩＦＤに従って決定され得る。換言すると、物理アドレスは、１つ以上のＩＦＤにおける故障から保護する態様で選択され得る。たとえば、図３に示されるように、所与のＲＡＩＤグリッド（３０２，３０４）についての各ＲＡＩＤグリッド位置（図示せず）は、ＩＦＤ１およびＩＦＤ２からの値のユニークな対を使用して選択されるがＩＦＤ３については同じ値を有する、ストレージアレイ（図示せず）における物理アドレスに書き込まれる（または物理アドレスに書き込まれることになる）。たとえば、（複数のＮＡＮＤダイを含む）ストレージモジュールの一部であるストレージアレイ中のデータがＮＡＮＤフラッシュに格納される場合、ＩＦＤは、（ｉ）ＩＦＤ１＝ストレージモジュール、（ｉｉ）ＩＦＤ［［１］］２＝チャンネル、および（ｉｉｉ）ＩＦＤ３＝ＮＡＮＤダイ、であり得る。したがって、所与のＲＡＩＤグリッドにおいて、各ＲＡＩＤグリッド位置におけるデータがストレージモジュール（ＩＦＤ１）およびチャンネル（ＩＦＤ２）のユニークな組合せに書き込まれるが、（ストレージモジュールの各々上の）同じＮＡＮＤダイに書き込まれる。当業者であれば、本発明が上記の３つの独立した障害ドメインに限定されないことを理解するであろう。さらに、当業者であれば、本発明がＮＡＮＤフラッシュを含むストレージアレイに限定されないことを理解するであろう。
【００３３】
図３を引き続き参照して、上で論じたように、ＲＡＩＤキューブ（３００）はＲＡＩＤグリッドの概念的なスタックである。より具体的には、本発明の一実施形態において、ＲＡＩＤキューブ（３００）は、（ｉ）２つ以上のＲＡＩＤグリッド（３０４，３０６，３０８，３１０）（図２参照）を含むデータ部分（３１６）と、ＰパリティＲＡＩＤグリッド（３１２）およびＱパリティＲＡＩＤグリッド（３１４）を含むパリティ部分（３１８）とを含み得る。
【００３４】
本発明の一実施形態において、データ部分（３１６）中のＲＡＩＤグリッド（３０４，３０６，３０８，３１０）は、ＲＡＩＤグリッド内のデータ（パリティデータを含む）のみを使用してＲＡＩＤグリッド内のデータが回復されることを可能にするパリティデータ（図２参照）を含む。本発明の一実施形態において、ＲＡＩＤキューブは、（データ部分（３１６）およびパリティ部分（３１８）の両方において）他のＲＡＩＤグリッドからのデータ（パリティデータを含む）を用いて、所与のＲＡＩＤグリッド（３０４，３０６，３０８，３１０）における所与のＲＡＩＤグリッド位置についてのデータが回復され得るように構成される。本発明の一実施形態では、ＲＡＩＤキューブのパリティ部分（３１８）は、このような回復メカニズムを可能にする。
【００３５】
本発明の一実施形態において、ＰパリティＲＡＩＤグリッド（３１２）は、存在するＲＡＩＤグリッド（３０４，３０６，３０８，３１０）と同じ次元である。データ部分（３１６）中のＲＡＩＤグリッドからのデータ（パリティデータを含む）にＰパリティ関数（たとえばＸＯＲ関数）を適用することによって、ＰパリティＲＡＩＤグリッド内のすべてのＲＡＩＤグリッド位置におけるデータが計算される（図７参照）。同様に、ＱパリティＲＡＩＤグリッド（３１４）は、存在するＲＡＩＤグリッド（３０４，３０６，３０８，３１０）と同じ次元である。データ部分（３１６）中のＲＡＩＤグリッドからのデータ（パリティデータを含む）にＱパリティ関数を適用することによって、ＱパリティＲＡＩＤグリッド内のすべてのＲＡＩＤグリッド位置におけるデータが計算される（図７参照）。
【００３６】
図４は、本発明の一実施形態に従ったデータ構造を示す。本発明の一実施形態において、ＲＡＩＤコントローラは、多次元ＲＡＩＤスキームを実施するよう１つ以上のデータ構造を含む。
【００３７】
本発明の一実施形態において、ＲＡＩＤコントローラは、クライアントによって提供されるデータとストレージアレイにおけるこのようなデータの物理アドレスとの間のマッピングをトラッキングするデータ構造を含む。本発明の一実施形態において、ＲＡＩＤコントローラは、クライアントの視点からデータを識別するたとえば＜オブジェクト，オフセット＞（４００）といった論理アドレスと、ストレージアレイ内のデータの位置を識別する物理アドレス（４０２）との間のマッピングを使用して、上記の情報をトラッキングする。本発明の一実施形態において、当該マッピングは、ハッシュ関数（たとえばＭＤ５，ＳＨＡ１）を＜オブジェクト，オフセット＞に適用することによって導出されるハッシュ値との間であり得る。当業者であれば、本発明から逸脱することがなければ、如何なる形態の論理アドレスも使用されてもよいということを理解するであろう。
【００３８】
本発明の一実施形態において、ＲＡＩＤコントローラは、各ＲＡＩＤグリッド位置（４０４）（図２参照）がどのようにストレージアレイにおける特定の物理アドレス（４０２）にマッピングされるかをトラッキングするデータ構造を含む。
【００３９】
本発明の一実施形態において、ＲＡＩＤコントローラは、（ＲＡＩＤコントローラが３Ｄ ＲＡＩＤスキームを実施していると仮定して）どのＲＡＩＤグリッド（データ部分およびパリティ部分におけるＲＡＩＤグリッドを含む）（４０８）がどのＲＡＩＤキューブ（４０６）に関連付けられるかと、さらにどのＲＡＩＤグリッド位置（４０４）が各ＲＡＩＤグリッド（４０８）に関連付けられるかとをトラッキングするデータ構造を含む。
【００４０】
本発明の一実施形態において、ＲＡＩＤコントローラは、各ＲＡＩＤグリッド位置（４０４）の状態（４１０）をトラッキングするデータ構造を含む。本発明の一実施形態において、ＲＡＩＤグリッド位置の状態（４１０）は、充填（データ（もしくはパリティデータ）がＲＡＩＤグリッド位置に書き込まれていることを示す）か、または空（データ（もしくはパリティデータ）がＲＡＩＤグリッド位置に書き込まれていないことを示す）としてセットされ得る。本発明の一実施形態において、ＲＡＩＤコントローラはまた、ＲＡＩＤコントローラがＲＡＩＤコントローラにおいてＲＡＩＤグリッド位置に書き込むべきデータを識別した場合、ＲＡＩＤグリッド位置の状態を充填にセットし得る（図５のステップ５０６を参照）。
【００４１】
本発明の一実施形態において、ＲＡＩＤコントローラは、ＲＡＩＤグリッドジオメトリをトラッキングするデータ構造を含む。本発明の一実施形態において、ＲＡＩＤグリッドジオメトリは、ＲＡＩＤグリッドのサイズと、ＲＡＩＤグリッドの各次元に関連付けられるＩＦＤとを含んでもよいがこれらに限定されない。このデータ構造（または別のデータ構造）はさらに、ＲＡＩＤキューブのサイズと、ＲＡＩＤキューブの各次元に関連付けられるＩＦＤとをトラッキングし得る。
【００４２】
本発明の一実施形態において、ＲＡＩＤコントローラは、各ＲＡＩＤグリッド内の各ロウおよび／またはカラム内において、（インターセクションパリティグループ内のパリティ値を含む（図２を参照））各ＰおよびＱパリティ値の位置をトラッキングするデータ構造を含む。
【００４３】
本発明の一実施形態において、ＲＡＩＤコントローラは、ＲＡＩＤキューブのデータ部分中のどのＲＡＩＤグリッド位置が、ＰパリティＲＡＩＤグリッドおよびＱパリティＲＡＩＤグリッド中のＰおよびＱパリティ値の各々を計算するよう使用されるかをそれぞれトラッキングするデータ構造を含む。
【００４４】
図５Ａ〜図５Ｃは、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図５Ａ〜図５Ｃは、本発明の１つ以上の実施形態に従った、ストレージアレイにデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが、異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並行に実行されてもよいことを理解するであろう。本発明の一実施形態において、図５Ａ、図５Ｂおよび図５Ｃに示される方法は並行において行なわれてもよい。
【００４５】
図５Ａを参照して、ステップ５０２において、データを書き込む要求がクライアントから受け取られる。本発明の一実施形態において、要求は、クライアントの視点からデータを識別する＜オブジェクト，オフセット＞を含む。ステップ５０４において、ＲＡＩＤコントローラは、当該要求に応答して、ＲＡＩＤコントローラメモリにおける位置にデータを書き込む。
【００４６】
ステップ５０６において、ＲＡＩＤコントローラは、データ構造の１つ以上を更新する（図４参照）。より具体的には、本発明の一実施形態において、ＲＡＩＤコントローラは、（ｉ）クライアントから受け取られたデータを書き込むべきストレージアレイにおける物理アドレスを選択し、（ｉｉ）データについての＜オブジェクト，オフセット＞と選択された物理アドレスとの間のマッピングを作成し得る。本発明の一実施形態において、データを書き込むべき物理アドレスを選択する前のある点で、ＲＡＩＤコントローラは、（ｉ）少なくとも１つのＲＡＩＤグリッドと、（ｉｉ）当該ＲＡＩＤグリッドについてのＲＡＩＤグリッド位置と、（ｉｉｉ）各ＲＡＩＤグリッド位置に関連付けられるストレージアレイにおける物理アドレスとを特定する。さらに、ＲＡＩＤコントローラは、各ＲＡＩＤグリッド位置の状態を空に初期化してもよい。
【００４７】
本発明の一実施形態において、図５Ｂは、本発明の１つ以上の実施形態に従った、ストレージアレイにＲＡＩＤグリッドを書き込むための方法を示す。図５Ｂを参照して、ステップ５０８において、所与のＲＡＩＤグリッド内のデータグリッド（たとえば図２における２０２）が充填されているかどうかについて決定がなされる。本発明の一実施形態において、この決定は、図４に関して記載されるデータ構造の１つ以上を使用してなされる。所与のＲＡＩＤグリッド内のデータグリッドが充填されている場合、当該プロセスはステップ５１０に進み、そうでなければプロセスは終了する。
【００４８】
ステップ５１０において、Ｐパリティが、データグリッドにおけるＲＡＩＤグリッド位置からの適切な値を使用してロウＰパリティグループ（たとえば図２における２０４）中の各ＲＡＩＤグリッド位置について計算される。ステップ５１２において、Ｑパリティが、データグリッドにおけるＲＡＩＤグリッド位置からの適切な値を使用してロウＱパリティグループ（たとえば図２における２０６）中の各ＲＡＩＤグリッド位置について計算される。ステップ５１４において、Ｐパリティが、データグリッドにおけるＲＡＩＤグリッド位置からの適切な値を使用してカラムＰパリティグループ（たとえば図２における２０８）中の各ＲＡＩＤグリッド位置について計算される。ステップ５１６において、Ｑパリティが、データグリッドにおけるＲＡＩＤグリッド位置からの適切な値を使用してカラムＱパリティグループ（たとえば図２における２１０）中の各ＲＡＩＤグリッド位置について計算される。
【００４９】
ステップ５１８において、インターセクションパリティグループ（たとえば図２における２１２）中のすべてのＲＡＩＤグリッド位置についてのパリティ値が、ロウＰパリティグループ（たとえば図２における２０４）、ロウＱパリティグループ（たとえば図２における２０６）、ロウＱパリティグループ（たとえば図２における２０６）、およびカラムＱパリティグループ（たとえば図２における２１０）の１つ以上において、ＲＡＩＤグリッド位置からの適切な値を使用して計算される。
【００５０】
ステップ５２０において、ＲＡＩＤグリッドについての各ＲＡＩＤグリッド位置に関連付けられるデータは、ストレージアレイにおいて適切な物理アドレスに書き込まれる。本発明の一実施形態において、ＲＡＩＤグリッド位置の各々についてデータを書き込むべき物理アドレスは、図４に関して記載されたデータ構造の１つ以上から得られる。ステップ５２２において、図４に関して記載された１つ以上のデータ構造は、ＲＡＩＤグリッドがストレージアレイに書き込まれたことを反映するよう更新される。
【００５１】
本発明の一実施形態において、ＲＡＩＤコントローラが３Ｄ ＲＡＩＤスキームを実施している場合、ＲＡＩＤコントローラは、図５Ｃに示される方法を行なってもよい。図５Ｃを参照して、ステップ５２４において、ＲＡＩＤキューブのデータ部分が充填されているかどうかに関して決定がなされる。ＲＡＩＤキューブのデータ部分が充填されていれば、プロセスはステップ５２６に進み、そうでなければプロセスは終了する。本発明の一実施形態において、この決定は、図４に関して記載されたデータ構造の１つ以上を使用してなされる。
【００５２】
ステップ５２６において、ＰパリティＲＡＩＤグリッド中の各ＲＡＩＤグリッド位置についてのＰパリティ値（たとえば図３における３１２）が計算される。本発明の一実施形態において、ＲＡＩＤグリッド位置の各々についての値が、ＲＡＩＤキューブのデータ部分（たとえば図３における３１６）におけるＲＡＩＤグリッドの各々から得られる１つの値を使用して計算される。
【００５３】
ステップ５２８において、ＱパリティＲＡＩＤグリッド（たとえば図３における３１４）中の各ＲＡＩＤグリッド位置についてのＱパリティ値が計算される。本発明の一実施形態において、ＲＡＩＤグリッド位置の各々についての値が、ＲＡＩＤキューブのデータ部分（たとえば図３における３１６）におけるＲＡＩＤグリッドの各々から得られる１つの値を使用して計算される。
【００５４】
ステップ５３０において、パリティＲＡＩＤグリッド（たとえばＰパリティＲＡＩＤグリッドおよびＱパリティＲＡＩＤグリッド）における各ＲＡＩＤグリッド位置に関連付けられるデータは、ストレージアレイにおいて適切な物理アドレスに書き込まれる。本発明の一実施形態において、ＲＡＩＤグリッド位置の各々についてデータを書き込むべき物理アドレスは、図４に関して記載されたデータ構造の１つ以上から得られる。ステップ５３２において、図４に関して記載された１つ以上のデータ構造は、ＲＡＩＤキューブがストレージアレイに書き込まれたことを反映するよう更新される。
【００５５】
図６Ａ〜図６Ｃは、本発明の１つ以上の実施形態に従った、ＲＡＩＤグリッドをポピュレートする例を示す。当該例は、本発明の範囲を限定するようには意図されない。
【００５６】
図６Ａを参照して、クライアントからのデータ（「Ｄ」として示される）が、ＲＡＩＤグリッド内のデータグリッド（６００）に書き込まれる。データグリッド（６００）が（図６Ａに示されるように）充填されると、ＲＡＩＤコントローラ（図示せず）は、ロウＰパリティグループ（６０２）、ロウＱパリティグループ（６０４）、ロウＱパリティグループ（６０６）、およびカラムＱパリティグループ（６０８）といったグループにおいてＲＡＩＤグリッド位置についての値を計算する。図６Ｂは、上記のＲＡＩＤグリッド位置についての値のすべてが計算された後のＲＡＩＤグリッドを示す。この段階では、計算すべき残存する値は、インターセクションＲＡＩＤグループ（６１０）におけるＲＡＩＤグリッド位置についての値だけである。図６Ｃは、インターセクションＲＡＩＤグループ（６１０）における値のすべてが計算された後のＲＡＩＤグリッドを示す。
【００５７】
本発明の一実施形態において、所与のＲＡＩＤグリッドに対するすべてのＲＡＩＤグリッド位置についてのすべての値は、ＲＡＩＤコントローラがＲＡＩＤグリッドをストレージアレイに書き込む前に、ＲＡＩＤコントローラメモリに格納される。
【００５８】
図７Ａ〜図７Ｄは、本発明の１つ以上の実施形態に従った、ＲＡＩＤキューブをポピュレートする例を示す。この例は、本発明の範囲を限定するようには意図されない。
【００５９】
図７Ｄに示されるＲＡＩＤキューブを考えると、当該ＲＡＩＤキューブは、ＲＡＩＤグリッドＡ（７００）と、ＲＡＩＤグリッドＢ（７０２）と、ＲＡＩＤグリッドＣ（７０４）と、ＰパリティＲＡＩＤグリッド（７０６）と、ＱパリティＲＡＩＤグリッド（７０８）とを含む。さらに、ＲＡＩＤキューブにおける各ＲＡＩＤグリッド（７００，７０２，７０４，７０６，７０８）は、ＩＦＤ１およびＩＦＤ２に亘って書き込まれるが一定の値のＩＦＤ３を有するＲＡＩＤグリッド位置を含む。したがって、本発明の一実施形態において、ＲＡＩＤグリッドにおけるＲＡＩＤグリッド位置（「ターゲットＲＡＩＤグリッド位置」）の値は、（ｉ）ターゲットＲＡＩＤグリッド位置が位置するロウまたはカラムにおけるＲＡＩＤグリッド位置の値のみか、（ｉｉ）ターゲットＲＡＩＤグリッド位置が位置するＲＡＩＤグリッド内の任意のＲＡＩＤグリッド位置の値か、または（ｉｉｉ）ターゲットＲＡＩＤグリッド位置が位置するＲＡＩＤキューブ内の任意のＲＡＩＤグリッド位置の値を使用して回復され得る。換言すると、本発明の一実施形態においては、ターゲットＲＡＩＤグリッド位置が位置するロウおよびカラムの各々において２つより多いエラーが存在する場合、ＲＡＩＤグリッドおよび／またはＲＡＩＤキューブ内におけるデータおよびパリティ値の構成によってターゲットＲＡＩＤグリッド位置における値が回復されることが可能になる。
【００６０】
図７Ａを参照して、図７Ａは、ＲＡＩＤキューブのデータ部分を構成する３つのＲＡＩＤグリッド（７００，７０２，７０４）を含む。ＲＡＩＤグリッド（７００，７０２，７０４）の各々におけるＲＡＩＤグリッド位置の各々は、ＲＡＩＤグリッド位置におけるデータが書き込まれるストレージアレイにおける位置を規定する３タプルを含む。この例において、３タプルにおける要素は、＜ＩＦＤ１，ＩＦＤ２，ＩＦＤ３＞というＩＦＤに対応する。この３タプルは、ストレージアレイにおける位置がどのようにさまざまなＩＦＤに亘って選択されるかを示す。特に、ＲＡＩＤグリッドＡにおけるＲＡＩＤグリッド位置の各々は、ＩＦＤ１およびＩＦＤ２のユニークな組合せを含むがＩＦＤ３については同じ値を含む。たとえば、ＩＦＤ１がストレージモジュールである場合、ＩＦＤ２はチャンネルであり、ＩＦＤ３はＮＡＮＤダイであり、３タプル＜４，２，１＞は、特定のＲＡＩＤグリッド位置におけるデータが、チャンネル２を使用して、ストレージモジュール４中のＮＡＮＤダイ１における物理アドレスに書き込まれることになるということを示す。同様に、３タプル＜２，３，１＞は、特定のＲＡＩＤグリッド位置におけるデータが、チャンネル３を使用して、ストレージモジュール２中のＮＡＮＤ１における物理アドレスに書き込まれることになるということを示す。
【００６１】
ＲＡＩＤグリッドＢ（７０２）およびＲＡＩＤグリッドＣ（７０４）は、ＲＡＩＤグリッドＡ（７００）と同様の態様で構成される。しかしながら、ＲＡＩＤグリッドＢ（７０２）におけるＲＡＩＤグリッド位置についての３タプル中のＩＦＤ３についての値は、ＲＡＩＤグリッドＡ（７００）についてのＲＡＩＤグリッド位置についての３タプル中のＩＦＤ３の値と異なる。さらに、ＲＡＩＤグリッドＣ（７０４）についてのＲＡＩＤグリッド位置についての３タプル中のＩＦＤ３についての値は、ＲＡＩＤグリッドＡ（７００）およびＲＡＩＤグリッドＢ（７０２）についてのＲＡＩＤグリッド位置についての３タプル中のＩＦＤ３の値と異なる。
【００６２】
図７Ｂを参照して、ＰパリティＲＡＩＤグリッド（７０６）におけるＲＡＩＤグリッド位置の各々中のデータは、ＲＡＩＤグリッドＡ（７００）、ＲＡＩＤグリッドＢ（７０２）およびＲＡＩＤグリッドＣ（７０４）と同様の態様で構成される。さらに上述したように、ＰパリティＲＡＩＤグリッド（７０６）におけるＲＡＩＤグリッド位置の各々中のデータの値は、ＲＡＩＤキューブ（すなわちＲＡＩＤグリッドＡ（７００）、ＲＡＩＤグリッドＢ（７０２）、ＲＡＩＤグリッドＣ（７０４））におけるデータグリッド各々中の１つのＲＡＩＤグリッド位置からのデータを使用して計算される。たとえば、ＰパリティＲＡＩＤグリッド（７０６）におけるＲＡＩＤグリッド位置＜１，１，４＞のデータの値は、Ｐパリティ関数（たとえばＸＯＲ関数）を、（ｉ）ＲＡＩＤグリッドＡ（７００）＜１，１，１＞からのデータ、（ｉｉ）ＲＡＩＤグリッドＢ（７０２）＜１，１，２＞からのデータ、および（ｉｉｉ）ＲＡＩＤグリッドＣ（７０４）＜１，１，３＞からのデータ、といったＲＡＩＤグリッド位置からのデータに適用することにより決定される。ＰパリティＲＡＩＤグリッド（７０６）における他のＲＡＩＤグリッド位置中のデータついての値は、同様の態様で計算される。
【００６３】
図７Ｃを参照して、ＱパリティＲＡＩＤグリッド（７０８）におけるＲＡＩＤグリッド位置の各々中のデータは、ＲＡＩＤグリッドＡ（７００）、ＲＡＩＤグリッドＢ（７０２）およびＲＡＩＤグリッドＣ（７０４）と同様の態様で構成される。さらに上述したように、ＱパリティＲＡＩＤグリッド（７０８）におけるＲＡＩＤグリッド位置の各々中のデータの値は、ＲＡＩＤキューブ（すなわちＲＡＩＤグリッドＡ（７００）、ＲＡＩＤグリッドＢ（７０２）、ＲＡＩＤグリッドＣ（７０４））におけるデータグリッド各々中の１つのＲＡＩＤグリッド位置からのデータを使用して計算される。たとえば、ＱパリティＲＡＩＤグリッド（７０８）におけるＲＡＩＤグリッド位置＜１，１，５＞でのデータの値は、（上述したように）Ｑパリティ関数を、（ｉ）ＲＡＩＤグリッドＡ（７００）＜１，１，１＞からのデータ、（ｉｉ）ＲＡＩＤグリッドＢ（７０２）＜１，１，２＞からのデータ、および（ｉｉｉ）ＲＡＩＤグリッドＣ（７０４）＜１，１，３＞からのデータ、といったＲＡＩＤグリッド位置からのデータに適用することにより決定される。ＱパリティＲＡＩＤグリッド（７０８）における他のＲＡＩＤグリッド位置中のデータついての値は、同様の態様で計算される。
【００６４】
図８は、本発明の１つ以上の実施形態に従ったフローチャートを示す。より具体的には、図８は、本発明の１つ以上の実施形態に従った、ストレージアレイからデータを取得するための方法を示す。
【００６５】
ステップ８００において、データはＲＡＩＤグリッド位置から取得される。本発明の一実施形態では、データはクライアントからの要求に応答して取得される。本発明の一実施形態において、要求は＜オブジェクト，オフセット＞を特定し得、また、ＲＡＩＤコントローラは、図４に関して記載されたデータ構造の１つ以上を使用して、要求されたデータが格納されるストレージアレイにおける物理アドレスを決定し得る。ＲＡＩＤコントローラはその後、ストレージアレイから上記要求されたデータを取得し得る。
【００６６】
ステップ８０２において、ステップ８００で取得されたデータが破損しているかどうかに関して決定がなされる。本発明の一実施形態では、ＲＡＩＤコントローラは、データが破損しているかどうかを判断するための任意の公知の方法（たとえばチェックサム）を実施し得る。当該データが破損されていなければ、プロセスはステップ８０４に進み、そうでなければ、プロセスはステップ８０６に進む。ステップ８０４において、当該データはクライアントに返され、プロセスが終了する。本発明の別の実施形態において、たとえば持続性ストレージが破損もしくはプラグが抜かれるかまたは読出コマンドが失敗したためデータが取得され得ない場合、プロセスはステップ８０６に進み得る。
【００６７】
ステップ８０６において、ＲＡＩＤコントローラは、どのＲＡＩＤグリッドからデータが取得されたのかを決定する。ステップ８０８において、ＲＡＩＤコントローラは、データを含んでいたＲＡＩＤグリッド位置が位置するロウおよび／またはカラム内の他のＲＡＩＤグリッド位置を使用して、データを再構築するよう試みる。
【００６８】
ステップ８１０において、ステップ８０８における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、ＲＡＩＤコントローラは、再構築の試みが成功したかどうかを判断するための任意の公知の方法（たとえばチェックサム）を実施し得る。ステップ８０８における再構築の試みが成功した場合、プロセスはステップ８１２に進み、そうでなければ、プロセスはステップ８１４に進む。ステップ８１２において、再構築されたデータがクライアントに返され、プロセスが終了する。
【００６９】
ステップ８１４において、ＲＡＩＤコントローラは、ＲＡＩＤグリッドの他のロウおよび／またはカラムにおける他のＲＡＩＤグリッド位置を使用して、データを再構築することを試みる。ステップ８１６において、ステップ８１４における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、ＲＡＩＤコントローラは、再構築の試みが成功したかどうか判断するための任意の公知の方法（たとえばチェックサム）を実施し得る。ステップ８１４における再構築の試みが成功した場合、プロセスはステップ８１２に進み、そうでなければ、プロセスはステップ８１８に進む。
【００７０】
ステップ８１８において、ＲＡＩＤコントローラは、ＲＡＩＤキューブにおける他のＲＡＩＤグリッドを使用してデータを再構築することを試みる。ステップ８２０において、ステップ８１８における再構築の試みが成功したかどうかに関して決定がなされる。本発明の一実施形態では、ＲＡＩＤコントローラは、再構築の試みが成功したかどうか判断するための任意の公知の方法（たとえばチェックサム）を実施し得る。ステップ８１８における再構築の試みが成功した場合、プロセスはステップ８２２に進み、そうでなければ、プロセスはステップ８２４に進む。ステップ８２２において、再構築されたデータがクライアントに返され、プロセスが終了する。ステップ８２４において、ＲＡＩＤコントローラは、要求されたデータがストレージアレイからＲＡＩＤコントローラによって抽出され得ないということを示すエラーをクライアントに返す。
【００７１】
当業者であれば、ＲＡＩＤキューブにおける他のＲＡＩＤグリッドを使用してデータを再構築することは、ＲＡＩＤコントローラが３Ｄ ＲＡＩＤスキームを実施している場合のみ行われるということを理解するであろう。
【００７２】
図９Ａ〜図９Ｄは、本発明の１つ以上の実施形態に従った例を示す。この例は、本発明の範囲を限定するようには意図されない。図９Ａを参照して、クライアントがＲＡＩＤグリッド位置（９００）からのデータを要求したシナリオを考える。しかしながら、ＲＡＩＤグリッド位置（９００）からのデータは（シェーディングによって示されたように）破損している。ＲＡＩＤコントローラはまず、ロウ（９０４）および／またはカラム（９０２）におけるＲＡＩＤグリッド位置からのデータを用いてＲＡＩＤグリッド位置（９００）中のデータを再構築することを（図８のステップ８０８によって）試みる。しかしながら、ロウ（９０４）およびカラム（９０２）の各々が、破損データを含む３つのＲＡＩＤグリッド位置を含んでいるので、ＲＡＩＤグリッド位置（９００）におけるデータは、ロウ（９０４）および／またはカラム（９０２）からのデータのみを使用して回復され得ない。
【００７３】
図９Ｂを参照して、ＲＡＩＤコントローラは、ＲＡＩＤグリッドにおける他のＲＡＩＤグリッド位置からのデータを使用して、ＲＡＩＤグリッド位置（９００）におけるデータを再構築することを（図８のステップ８１４によって）試みる。この例において、ＲＡＩＤコントローラは、ロウ（９０６）におけるすべての破損データを再構築する。図９Ｃを参照して、ロウ（９０６）における破損したデータの再構築に基づき、ＲＡＩＤコントローラは、カラム（９０８）におけるすべての破損データを再構築することができる。最後に、図９Ｄを参照して、カラム（９０８）における破損データの再構築に基づき、ＲＡＩＤコントローラは、ロウ（９１０）における他の非破損データを使用して、ＲＡＩＤグリッド位置（９００）におけるデータを再構築することができる。本発明の一実施形態において、図９Ｂ〜図９Ｄに示されるようなさまざまな破損データの再構築は、図８におけるステップ８１４の一部として行われる。
【００７４】
図９Ａ〜図９Ｄに示されていないが、ＲＡＩＤグリッドにおけるデータのみを使用してＲＡＩＤグリッド位置（９００）におけるデータが構築され得なかった場合、ＲＡＩＤコントローラが３Ｄ ＲＡＩＤスキームを実施していれば、ＲＡＩＤコントローラは、ＲＡＩＤキューブ（図示せず）内の他のＲＡＩＤグリッドにおけるデータを用いて、ＲＡＩＤグリッド位置（９００）におけるデータを再構築することを（図８におけるステップ８１８によって）試みる。
【００７５】
当業者であれば、ＩＦＤに沿ってストレージアレイにデータを格納することおよび／またはＮＡＮＤフラッシュにデータを格納することに関して本発明のさまざまな例が記載されているが、本発明の実施形態は、本発明から逸脱することがなければ、任意の多次元ディスクアレイ上で実施されてもよいということを理解するであろう。たとえば、ＲＡＩＤグリッドにおける各ＲＡＩＤグリッド位置についてのデータが別個のディスク上に格納される２次元アレイのディスク（磁気、光学、ソリッドステート、または任意の他のタイプのストレージデバイス）を使用して本発明の１つ以上の実施形態が実施され得る。
【００７６】
さらに、本発明の一実施形態において、ＲＡＩＤコントローラが、２次元アレイのディスクを使用して３Ｄ ＲＡＩＤスキームを実施している場合、ＲＡＩＤコントローラは、＜ディスクｘ，ディスクｙ，論理ブロックアドレス（ＬＢＡ）ｚ＞（ｘおよびｙはディスクアレイの次元）といったｎタプルを使用してＲＡＩＤグリッド位置の各々についてのデータを格納し得る。さらに、所与のＲＡＩＤグリッドについて、ＬＢＡは、単一のＲＡＩＤグリッドについての各ＲＡＩＤグリッド位置について一定であるが、ＬＢＡはＲＡＩＤキューブにおけるＲＡＩＤグリッドに亘って異なる。
【００７７】
２次元のディスクアレイを使用して本発明の実施形態を実施するための上記の例は、本発明の範囲を限定するようには意図されない。
【００７８】
当業者であれば、本発明は２Ｄ ＲＡＩＤスキームおよび３Ｄ ＲＡＩＤスキームに関して記載されているが、本発明の実施形態は任意の多次元のＲＡＩＤスキームまで拡張されてもよいということを理解するであろう。
【００７９】
本発明の１つ以上の実施形態は、当該システムにおける１つ以上のプロセッサによって実行される命令を使用して実施されてもよい。さらに、このような命令は、１つ以上の一時的でないコンピュータ読取可能媒体上に格納されるコンピュータ読取可能命令に対応してもよい。
【００８０】
本発明を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される本発明の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、本発明の範囲は、添付の請求の範囲によってのみ限定されるべきである。
【図１】
0005961746.tif 000002
【図２】
0005961746.tif 000003
【図３】
0005961746.tif 000004
【図４】
0005961746.tif 000005
【図５Ａ】
0005961746.tif 000006
【図５Ｂ】
0005961746.tif 000007
【図５Ｃ】
0005961746.tif 000008
【図６Ａ】
0005961746.tif 000009
【図６Ｂ】
0005961746.tif 000010
【図６Ｃ】
0005961746.tif 000011
【図７Ａ】
0005961746.tif 000012
【図７Ｂ】
0005961746.tif 000013
【図７Ｃ】
0005961746.tif 000014
【図７Ｄ】
0005961746.tif 000015
【図８】
0005961746.tif 000016
【図９Ａ】
0005961746.tif 000017
【図９Ｂ】
0005961746.tif 000018
【図９Ｃ】
0005961746.tif 000019
【図９Ｄ】
0005961746.tif 000020