(57)【特許請求の範囲】
【請求項１】
複数のホスト装置からの記憶システムへの書込みを制御する記憶コントローラが実行する書込み制御方法であって、
ネットワークを介して接続されたホスト装置から書込み操作の宛先の位置ＩＤを取得するステップと、
書込み操作中の宛先位置を維持する配列であるアレイ中の複数のアレイ項目のうち次に使用可能な項目を示す第１の値を有し、インデックス値として用いられるアレイ・ポインタであって、現在書き込み中および書き込み済みの位置ＩＤを保管している複数のアレイ項目がスタックを形成するデータ構造におけるスタック・インデックス項目に保管された当該アレイ・ポインタによって、前記次に使用可能な項目を識別するステップと、
識別された前記次に使用可能な項目に、前記取得するステップで取得された書込み操作の宛先の位置ＩＤを保管し、前記アレイ中の前記スタックの末尾の次のアレイ項目を前記スタックでの変更後次に使用可能なアレイ項目として識別するため、前記インデックス値を増分することにより、前記複数のアレイ項目がスタックを形成した前記データ構造におけるスタック・インデックス項目に保管された前記アレイ・ポインタの前記第１の値を第２の値に変更するステップと、
前記書込み操作の完了時に、前記アレイ・ポインタの前記インデックス値を減分して、前記複数のアレイ項目のスタックから、前記完了した書込み操作の宛先の前記位置ＩＤを除去して前記複数のアレイ項目のスタックのサイズを低減するステップと
を含み、
前記低減するステップは、前記アレイ中の前記スタックの末尾の項目を前記アレイ中の低減後、次に使用可能な項目として識別するために前記アレイ・ポインタのインデックス値を減分した後、書込み操作中のインデックス値と位置ＩＤとを維持するキャッシュ・メモリ内の前記インデックス値と、前記減分されたインデックス値とを比較し、前記インデックス値と前記減分されたインデックス値とが一致していない場合には、前記キャッシュ・メモリ内に維持されたアレイ・ポインタで識別される位置ＩＤを前記位置ＩＤを削除した前記アレイ項目に移動することにより、前記スタックから書込み操作が完了した前記複数のアレイ項目のうちの最後の項目を除去するステップと
を含む、方法。
【請求項２】
書込み操作の完了時に、前記複数のアレイ項目のスタックの前記最後の項目に保管された前記位置ＩＤおよび前記インデックス値を前記キャッシュ・メモリのフィールドに移動し、前記移動した位置ＩＤで前記完了した書込み操作の前記位置ＩＤを上書きするステップと、前記アレイの前記前の項目を前記アレイの前記次に使用可能な項目として識別するために前記アレイ・ポインタのインデックス値を減分し、前記複数のアレイ項目のスタックの前記最後の項目を除去するステップと、
をさらに有する、請求項１に記載の方法。
【請求項３】
前記低減したスタックの内容の論理冗長検査を更新するステップをさらに有する、請求項１に記載の方法。
【請求項４】
前記アレイは、不揮発性記憶メモリを含むディジタル・データ処理装置の論理的なデータ構造である、請求項１に記載の方法。
【請求項５】
ディジタル・データ処理装置が、請求項１〜４のいずれか１項に記載の方法の各ステップを実行するための装置実行可能なプログラム。
【請求項６】
複数のホスト装置からの記憶システムへの書込みを制御するシステムであって、
書込み操作中の宛先位置を維持する配列であるアレイ中の使用可能な項目を識別する第１の値を有し、インデックス値として用いられるアレイ・ポインタを、現在書き込み中および書き込み済みの位置ＩＤを保管している複数のアレイ項目がスタックを形成するデータ構造におけるスタック・インデックス項目に保管するように適合された記憶装置と、
前記記憶装置に結合されたディジタル・データ処理装置であって、前記ディジタル・データ処理装置が、
ネットワークを介して接続された前記ホスト装置から書込み操作の宛先の位置ＩＤを取得し、
前記アレイの複数のアレイ項目のうち、次に使用可能なアレイ項目を前記第１の値を有するアレイ・ポインタによって識別し、
識別された前記次に使用可能な項目に、取得された書込み操作の宛先の位置ＩＤを保管し、前記アレイ中の前記スタックの末尾の次のアレイ項目を前記スタックでの変更後次に使用可能なアレイ項目として識別するため、前記インデックス値を増分することにより、前記複数のアレイ項目がスタックを形成した前記データ構造におけるスタック・インデックス項目に保管された前記アレイ・ポインタの前記第１の値を第２の値に変更し、
前記書込み操作の完了時に、前記アレイ・ポインタの前記インデックス値を減分して、前記複数のアレイ項目のスタックから、前記完了した書込み操作の宛先の前記位置ＩＤを除去して前記複数のアレイ項目のスタックのサイズを低減し、
前記低減では、前記アレイ中の前記スタックの末尾の項目を前記アレイ中の低減後次に使用可能な項目として識別するために前記アレイ・ポインタのインデックス値を減分した後、書込み操作中のインデックス値と位置ＩＤとを維持するキャッシュ・メモリ内の前記インデックス値と、前記減分されたインデックス値とを比較し、前記インデックス値と前記減分されたインデックス値とが一致していない場合には、前記キャッシュ・メモリ内に維持されたアレイ・ポインタで識別される位置ＩＤを前記位置ＩＤを削除した前記アレイ項目に移動することにより、前記スタックから書込み操作が完了した前記複数のアレイ項目のうちの最後の項目を除去する
システム。
【請求項７】
前記アレイ・ポインタがインデックス値で指定され、前記変更が、前記アレイの次の項目を前記アレイの前記次の使用可能な項目として識別するために前記アレイ・ポインタのインデックス値を増分することを含む、請求項６に記載のシステム。
【請求項８】
前記ディジタル・データ処理装置が、書込み操作の完了時に、前記複数のアレイ項目のスタックの前記最後の項目に保管された前記位置ＩＤおよび前記インデックス値を前記キャッシュ・メモリのフィールドに移動し、前記移動した位置ＩＤで前記完了した書込み操作の前記位置ＩＤを上書きし、前記アレイの前記前の項目を前記アレイの前記次の使用可能な項目として識別するために前記アレイ・ポインタのインデックス値を減分し、前記複数のアレイ項目のスタックの前記最後の項目を除去するようにさらに構成される、請求項６に記載のシステム。
【請求項９】
前記ディジタル・データ処理装置が、前記低減したスタックの内容の論理冗長検査を更新するようにさらに構成される、請求項６に記載のシステム。
【請求項１０】
前記記憶装置が不揮発性記憶メモリである、請求項６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置への書込み処理を管理するための方法、システム、およびプログラムに関する。
【背景技術】
【０００２】
コンピューティング・システムは、データを処理し、アプリケーション・プログラムを実行するための１つまたは複数のホスト・コンピュータ（「ホスト」）と、データを保管するための直接アクセス記憶装置（ＤＡＳＤ）と、ホストとＤＡＳＤとの間のデータの転送を制御するための記憶コントローラとを含む場合が多い。制御ユニットまたは記憶ディレクタとも呼ばれる記憶コントローラは、さもなければ直接アクセス記憶装置（ＤＡＳＤ）と呼ばれる、ループ・アーキテクチャ内に接続された多数のハード・ディスク・ドライブからなる場合が多い記憶空間へのアクセスを管理する。ホストは、記憶コントローラにより記憶空間に入出力（Ｉ／Ｏ）要求を伝達することができる。
【０００３】
ディスク状の記憶媒体は複数の物理的部分に細分することができ、そのそれぞれは「パイ状」になっており、「セクタ」と呼ばれることが多い。その円形の媒体をパイ・スライスに分割することは、ドライブの読取り／書込みヘッドによるデータの位置特定を容易にする。また、ディスケットまたはディスクは、概して、いくつかの同心円またはトラックに分割される。各トラックは、概して、読取りまたは書込み操作のためにアドレス可能な最小記憶単位を表す、いくつかのクラスタに分割される。概して、１つのクラスタは２５６または５１２バイトの長さである。したがって、データは、そのデータが保管されているセクタ、同心トラック、およびクラスタのうちの１つまたは複数を識別することによって位置を特定することができる。
【０００４】
書込み操作において、データを記憶媒体に書き込むことができる。電源障害または装置の誤動作によって書込み操作が中断された場合、記憶媒体に書き込まれたデータは破壊されるか、さもなければ不完全なものになる可能性がある。したがって、記憶コントローラは、データが書き込まれている宛先位置のリストを頻繁に維持する。書込み操作中の場合の宛先位置のリストは、電力が失われた場合でもリスト情報が維持されるように、不揮発性記憶（ＮＶＳ）メモリ内に保持される場合が多い。
【０００５】
特定の宛先位置への書込み操作が完了すると、その特定の書込み操作の宛先位置はリストから除去することができる。しかし、完了前に書込み操作が中断された場合、書込み操作中の場合の宛先位置のリストを検査して、不完全なまたは破壊されたデータを収容している可能性のある書込み宛先位置を識別することができる。
【０００６】
図１は、典型的な従来技術の書込み操作中の宛先位置のリスト１０の一例を示している。図１の例では、リスト１０は複数の項目１２ａ、１２ｂ、・・・１２ｎを有し、そのぞれぞれは書込み操作中の宛先位置を保管することができる。図１の例では、宛先位置は、たとえば、リスト項目１２ｃによって示す通り、トラック識別子（「トラックＩＤ」）によって識別される。リスト項目１２ａ、１２ｂ、・・・１２ｎのうちの１つへの各トラックＩＤの入力後、リスト１０の内容について論理的冗長検査を実行することができ、その検査結果は項目１４に保管することができる。
【０００７】
書込み操作の完了時に、その書込み操作の宛先位置のトラックＩＤは、たとえば、リスト項目１２ｂによって示す通り、リスト１０から除去することができる。図１の例では、リスト項目１２ｂ、１２ｄ、１２ｅ、および１２ｎは、トラックＩＤを保管するために使用可能であるものとして示されている。この場合も、リスト項目１２ａ、１２ｂ、・・・１２ｎのうちの１つからのトラックＩＤの除去後、リスト１０の内容について論理的冗長検査を実行することができ、その検査結果は論理的冗長検査項目１４に保管することができる。
【０００８】
リスト１０の使用可能リスト項目の迅速な識別を容易にするために、リスト１０の使用可能な項目のリストが維持される場合が多い。図１の例では、たとえば、項目１２ｂ、１２ｄ、１２ｅなどの使用可能リスト項目は、それぞれ、リスト項目１２ａ、１２ｂ、・・・１２ｎのうちの次の使用可能リスト項目の位置を識別するポインタを収容している。このようなポインタは、たとえば、アドレス・オフセットの形を取ることができる。しかし、たとえば、項目１２ｎなど、リスト１０の最後の使用可能な項目は、その最後の項目の後に次の使用可能な項目がまったくないので、ポインタを収容していない可能性がある。書込み操作の開始の前の初期設定時には、リスト１０のリスト項目１２ａ、１２ｂ、・・・１２ｎのそれぞれが使用可能である可能性がある。このため、リスト１０が初期設定されると、リスト１０は、最後の項目１２ｎを除くリスト項目１２ａ、１２ｂ、・・・のそれぞれのためのポインタを収容している可能性がある。
【０００９】
動作に際しては、書込み操作中という状態がその完了前に中断された場合、書込み操作中の場合、即ち未完の書込み操作のトラックＩＤのリスト１０をトラバースすることができる。このように、書込み操作中の宛先位置のトラックＩＤは、不完全なまたは破壊されたデータを収容している可能性があり、識別することができる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
書込み操作中の場合の宛先位置ＩＤのリストが、アレイの次の使用可能な項目を識別するアレイ・ポインタを有するアレイ内に維持される、書込み処理を管理するための方法、システム、およびプログラムが提供される。
【課題を解決するための手段】
【００１１】
本発明によれば、書込み操作の宛先の位置ＩＤを取得するステップと、アレイの使用可能な項目に前記位置ＩＤを保管するステップであって、前記項目が第１の値を有するアレイ・ポインタによって識別されるステップと、他の使用可能なアレイ項目を識別するために前記アレイ・ポインタの前記第１の値を第２の値に変更するステップとを有する方法が提供される。
【００１２】
一実施形態では、そのアレイは可変サイズのスタックを含む。書込み操作中の宛先位置ＩＤを追加すると、スタックのサイズが増加する。完了した書込み操作の宛先位置ＩＤを除去すると、スタックのサイズが低減する。スタック・インデックスは、書込み操作の宛先位置ＩＤが追加されると増分することができ、書込み操作の宛先位置ＩＤがスタックから除去されると減分することができる。
【００１３】
次に図面を参照するが、図面全体を通して同様の参照番号は対応する部分を表している。
【発明を実施するための最良の形態】
【００１４】
以下の説明では、本明細書の一部を形成し、いくつかの実施形態を図示する添付図面を参照する。他の諸実施形態を使用することができ、この説明の範囲を逸脱せずに構造上および操作上の変更を行うことができることは言うまでもないことである。
【００１５】
図２は、図示した諸実施形態の諸態様が実現されるコンピューティング・アーキテクチャを示している。１つまたは複数のホスト１０２ａ、１０２ｂ、・・・１０２ｎは、記憶コントローラ１０６を介して、ＤＡＳＤまたは当技術分野で知られている任意のその他の記憶システムなどの記憶システム１０４とデータ通信状態にある。ホスト１０２は、サーバ、メインフレーム、ワークステーション、パーソナル・コンピュータ、ハンドヘルド・コンピュータ、ラップトップ、電話装置、ネットワーク・アプライアンスなど、当技術分野で知られている任意のコンピューティング・デバイスにすることができる。記憶コントローラ１０６とホスト・システム（複数も可）１０２はネットワーク１０８を介して通信するが、このネットワークはストレージ・エリア・ネットワーク（Storage Area Network：ＳＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、イントラネット、インターネット、広域ネットワーク（ＷＡＮ）などを含むことができる。記憶システム１０４は、ハード・ディスク・ドライブ、テープ・カートリッジ・ライブラリ、光ディスク、または当技術分野で知られている任意の適切な不揮発性記憶媒体で構成することができる。記憶システム１０４は、ＪＢＯＤ（Justa Bunch of Disks，単なるディスクの束）、ＤＡＳＤ、ＲＡＩＤ（Redundant Array of Independent Disks）アレイ、仮想化装置（virtualizationdevice）などの記憶装置のアレイとして配置することができる。記憶コントローラ１０６は、ＩＢＭエンタープライズ・ストレージ・サーバ（EnterpriseStorage Server：ＥＳＳ，ＩＢＭは登録商標）または当技術分野で知られている任意のその他の記憶コントローラなど、当技術分野で知られている任意の記憶コントローラまたはサーバを含むことができる。特定の実現例では、記憶コントローラ１０４内の記憶空間は、複数の論理装置（ＬＤ）１１０ａ、１１０ｂ、・・・１１０ｎとして構成される。
【００１６】
記憶コントローラ１０６は、可用性改善のための冗長性を提供するために、複数のハードウェア・コンポーネントからなる２つの個別のクラスタ１２０ａ、１２０ｂを含む。図示した実施形態はクラスタを有する記憶コントローラに関して記載されているが、本発明は、１つまたは複数のプロセッサを使用する様々なシステムに適用可能であることは認識されている。
【００１７】
図示した実施形態の各クラスタ１２０ａ、１２０ｂは、個別の電力境界上で維持することができ、プロセッサ複合体１２２ａ、１２２ｂと、キャッシュ１２４ａ、１２４ｂと、不揮発性記憶装置（ＮＶＳ）１２６ａ、１２６ｂとを含む。ＮＶＳ１２６ａ、１２６ｂは、バッテリ・バックアップ付きＲＡＭ、あるいはキャッシュにデータをバックアップするために使用される任意のその他のタイプの不揮発性または揮発性バックアップ・キャッシュを含むことができる。ホスト１０２ａ、１０２ｂ、・・・１０２ｎは、ターゲット論理装置（ＬＤ）１１０ａ、１１０ｂ、・・・１１０ｎが割り当てられているクラスタ１２０ａ、１２０ｂに対し、書込みデータを含む、ターゲット論理装置（ＬＤ）１１０ａ、１１０ｂ、・・・１１０ｎに向けられたアプリケーションＩ／Ｏ要求を提示することができる。一方のクラスタ１２０ａ、１２０ｂ内のＮＶＳ１２６ａ、１２６ｂは、もう一方のクラスタ１２０ｂ、１２０ａ内のキャッシュ１２４ｂ、１２４ａ内の書込みデータをバックアップするために使用され、たとえば、ＮＶＳ１２６ａはキャッシュ１２４ｂ内の書込みデータをバックアップする。
【００１８】
図３は、書込み操作中の場合の宛先位置のリストを維持することができる論理構造３００の一例を示している。この構造３００は、複数項目３０４ａ、３０４ｂ、・・・３０４ｎのアレイ３０２を含み、その項目のそれぞれは書込み操作中の宛先位置を保管することができる。図示した実施形態では、書込み操作の宛先位置はトラックＩＤで識別される。シリンダ、セクタ、クラスタ、アドレスなどを含む、その他の宛先位置ＩＤを使用できることは認識されている。
【００１９】
記載した諸実施形態の一態様によれば、この構造３００は、書込み操作中の宛先位置を保管することができるアレイ３０４の次の使用可能な項目を識別するアレイ・ポインタ３０６をさらに含む。図示した実施形態では、複数項目３０４ａ、３０４ｂ、・・・３０４ｎのアレイ全体の一部分３０４は、複数の隣接リスト項目３０４ａ、３０４ｂ、・・・３０４ｉのスタックを提供し、そこではトラックＩＤなどの宛先位置が各スタック項目３０４ａ、３０４ｂ、・・・３０４ｉに保管される。アレイ・ポインタ３０６は、アレイ３０２の次の使用可能な項目を指し示し、したがって、保管されたトラックＩＤのスタック３０４の末尾の後の最初の項目を示すスタック・インデックスを有する。図３の例では、スタック３０４の最後の項目は項目３０４ｉであり、最初の使用可能な項目は複数項目３０４ａ、３０４ｂ、・・・３０４ｎのアレイのうちの項目３０４ｊである。
【００２０】
このような論理構造の一応用例では、書込み操作中の宛先位置を決定するための複数のアレイ項目のトラバーサルは、空のまたは無効な項目３０４ｊ・・・３０４ｎを含む複数項目３０４ａ、３０４ｂ、・・・３０４ｎのアレイ３０２全体ではなく、実際にトラックＩＤを収容している複数項目３０４ａ、３０４ｂ、・・・３０４ｉのスタックに限定することができる。このような論理構造３００の他の応用例では、アレイ３０２に対する変更後の複数のアレイ項目の論理的冗長検査は、空のまたは無効な項目３０４ｊ・・・３０４ｎを含む複数項目３０４ａ、３０４ｂ、・・・３０４ｎのアレイ全体ではなく、実際に有効なトラックＩＤを収容している複数項目３０４ａ、３０４ｂ、・・・３０４ｉのスタックに限定することができる。この論理的冗長検査は項目３１０に保管することができる。スタックと、複数項目のアレイと、使用可能な項目へのアレイ・ポインタがその他の形式で配置できることは認識されている。
【００２１】
図５は、書込み操作中の場合、宛先位置のリストを維持する、図３の構造３００などの論理構造を初期設定する際の記憶コントローラ１０６の動作を示している。図５の実施形態では、論理構造のためのアレイ・ポインタが初期設定される（ブロック４０２）。図示した実施形態では、図４に示す通り、スタック３０２をゼロに初期設定することにより、これを容易に達成することができる。この例では、スタック・インデックス３０６は、空である最初のアレイ項目３０４ａを指し示すように、リセットされる。したがって、論理構造３００が図４に示す通りに初期設定されると、スタック３０４はいかなる項目も持たなくなる。
【００２２】
加えて、論理的冗長検査を初期設定することができる（図５のブロック４０４）。この場合も、図示した実施形態では、検査３１０の内容をゼロに設定することにより、図４の論理的冗長検査３１０を容易に初期設定することができる。
【００２３】
図６は、データが記憶装置１０４などの記憶装置に書き込まれる書込み操作中の宛先の位置ＩＤを、図３の論理構造３００などの論理構造に保管する際の記憶コントローラ１０６の動作を示している。図６の実施形態では、記憶コントローラ１０６は、書込み操作から宛先の位置ＩＤを取得する（ブロック５０２）。図示した実施形態では、書込み操作のための宛先位置ＩＤは、図７に示すデータ構造６０２ａ、６０２ｂ、・・・６０２ｎのうちの１つなどのデータ構造へのポインタの形で記憶コントローラ１０６に提供される。各書込み操作中は、関連データ構造６０２ａ、６０２ｂ、・・・６０２ｎをキャッシュ・メモリ１２４ａ、１２４ｂ内に維持する。各データ構造はいくつかのフィールドを有し、そのそれぞれは書込み操作に使用される様々なパラメータの１つを保管する。このようなパラメータの１つは、書込み操作によって記憶装置１０４に書き込まれるデータの宛先の位置を識別するトラックＩＤである。トラックＩＤは、関連データ構造のフィールド６０４に保管される。したがって、データ構造６０２ａ、６０２ｂ、・・・６０２ｎのうちの１つへのポインタの受領に応答して、記憶コントローラ１０６は、書込み操作で書き込まれるデータの宛先のトラックＩＤを、示されたデータ構造から取得する（ブロック５０２）。書込み操作の宛先の位置ＩＤが、書込み操作によって直接、宛先位置ＩＤが提供されることを含む様々な方法で取得可能であることは認識されている。
【００２４】
記憶コントローラ１０６は、アレイ・ポインタによって識別される使用可能アレイ項目に取得した位置ＩＤを保管する（ブロック５０４）。図３の実施形態では、アレイ・ポインタは、アレイ３０２のうちの次の使用可能な項目を指し示すスタック・インデックス３０６によって実現される。図３の例では、スタック項目３０４ａ〜３０４ｉのそれぞれは、すでに関連書込み操作のためのトラックＩＤで充填されている。このため、スタック・インデックス３０６は、次の使用可能アレイ項目３０４ｊを指し示す。したがって、記憶コントローラ１０６は、スタック・インデックス３０６によって識別された使用可能アレイ項目３０４ｊに取得したトラックＩＤを保管する（ブロック５０４）。書込み操作の宛先位置ＩＤで充填されると、アレイ項目３０４ｊはスタック３０４の一部になる。
【００２５】
また、アレイ・ポインタの値は、位置ＩＤが当初、そこから取得されたデータ構造に保管される（ブロック５０６）。図３の例では、スタック・インデックス３０６の値は、アレイ項目３０４ｊを指し示すオフセットである。このオフセット値は、アレイ項目３０４ｊに保管されたトラックＩＤがそこから取得されたデータ構造６０２ａ、６０２ｂ、・・・６０２ｎのフィールド６０６に保管される（ブロック５０６）。
【００２６】
さらに、アレイ・ポインタの内容は、使用可能なアレイ項目を識別するために変更される（ブロック５０８）。図３の例では、スタック・インデックス３０６は、アレイ項目３０４ｊがトラックＩＤで充填された後にアレイ項目３０４ｋになる次の使用可能アレイ項目を指し示すように増分される。アレイ項目３０４ｋは、アレイ３０２内のアレイ項目３０４ｊに直接隣接している。
【００２７】
また、論理構造３００の内容の論理的冗長検査は更新することができる（ブロック５１０）。図示した実施形態では、スタック・インデックス３０６の内容とともに、スタック３０４の内容について論理的冗長検査を実行することができ、これは図３の例では（アレイ項目３０４ｊがトラックＩＤで充填された後に）アレイ項目３０４ａ〜３０４ｊの内容になる。更新された論理的冗長検査は論理的冗長検査３１０に保管することができる（ブロック５１０）。したがって、応用例によっては、アレイ項目３０４ｋ〜３０４ｎなどの空のアレイ項目は、トラバースする必要がなく、事実上、論理的冗長検査中に無視することができる。
【００２８】
図８は、完了した書込み操作のための宛先位置ＩＤ、すなわち、その書込み操作のデータのすべてが記憶装置１０４内の適切な宛先位置に正常に書き込まれた後の書込み操作のための宛先位置ＩＤを、図３の論理構造３００などの論理構造から除去する際の記憶コントローラ１０６の動作を示している。書込み操作の完了の通知を受領すると（ブロック７０２）、記憶コントローラ１０６は、スタック３０４内で完了した書込み操作の位置ＩＤを突き止め、スタック３０４からその位置ＩＤを除去する（ブロック７０４）。
【００２９】
スタック３０４から位置ＩＤを除去すると、ブランクのまたは空の項目を残すことができる。一実施形態では、スタック３０４のサイズを低減する（ブロック７０６）ために、スタック３０４内の空のまたはブランクのアレイ項目を除去することができる。このようなサイズ低減は、論理的冗長検査更新中またはエラー回復中にスタックのトラバーサルを容易にすることができる。
【００３０】
スタック・サイズの低減後、論理構造３００の内容の論理的冗長検査を更新することができる（ブロック７１０）。この場合も、スタック・インデックス３０６の内容とともに、スタック３０４の内容について論理的冗長検査を実行することができ、これは図３の例では（アレイ項目３０４ｊが次の使用可能な項目であるときに）アレイ項目３０４ａ〜３０４ｊの内容になる。更新された論理的冗長検査は論理的冗長検査３１０に保管することができる（ブロック７１０）。したがって、応用例によっては、書込み操作中のための位置ＩＤを収容しておらず、スタック３０４の一部ではないアレイ項目３０４ｊ〜３０４ｎなどのアレイ項目は、トラバースする必要がなく、事実上、論理的冗長検査中に無視することができる。
【００３１】
図示した実施形態では、記憶コントローラは、完了した書込み操作のデータ構造６０２ａ、６０２ｂ、・・・６０２ｎのうちの特定のデータ構造へのポインタを受領する（図９のブロック８０２）ことにより、特定の書込み操作の完了が通知される。次に、記憶コントローラ１０６は、特定のデータ構造のフィールド６０６に保管されたスタック・インデックスの値を取得し（ブロック８０４）、それにより、完了した書込み操作のためのトラックＩＤが保管される特定のスタック項目の位置を特定することができる。次に、完了した書込み操作のためのデータ構造から取得したスタック・インデックスの値によって識別されたスタック項目に保管されたトラックＩＤは、後述の通り、スタック３０４から除去することができる。
【００３２】
書込み操作の完了の通知が多種多様な方法で取得できることは認識されている。さらに、宛先位置ＩＤを収容しているアレイ項目の位置が様々な方法で決定できることも認識されている。たとえば、書込み操作は、完了した書込み操作のトラックＩＤを直接提供する場合もあれば、そのトラックＩＤ用のアレイ項目位置を記憶コントローラ１０６に直接提供する場合もある。
【００３３】
図示した実施形態では、記憶コントローラ１０６は、最後の項目をスタック３０４から除去する（ブロック８０６）ことにより、スタック３０４のサイズを低減する。図示した例では、これは、スタック３０４の前のアレイ項目を指し示すようにスタック・インデックス３０６を減分することによって達成される。図３の例では、スタック・インデックス３０６を減分すると、スタック・インデックス３０６はアレイ項目３０４ｊではなくアレイ項目３０４ｉを指し示すようになる。したがって、スタック３０４の最後のアレイ項目は前のアレイ項目３０４ｈになる。アレイ項目３０４ｉはもはやスタック３０４の一部ではなくなるが、その代わりに、スタック・インデックス３０６が示す通り、次の使用可能なアレイ項目として示されることになる。
【００３４】
また、除去した最後の項目が、スタック３０４から除去すべき完了した書込み操作の宛先位置ＩＤを収容しているかどうかの判定（ブロック８０８）が行われる。収容している場合、ブロック８１０に示す通り、スタック３０４から最後のアレイ項目を除去すると、完了した書込み操作の宛先位置ＩＤが事実上、スタック３０４からすでに除去されている。図示した実施形態では、除去した最後の項目が完了した書込み操作の宛先位置ＩＤを収容しているかどうかの判定（ブロック８０８）は、完了した書込み操作によって供給されたポインタによって識別されたデータ構造のフィールド６０６から取得した（ブロック８０４）スタック・インデックスの値を、減分したスタック・インデックスの値と比較することによって、行うことができる。一致している場合、すなわち、２つのインデックス値が同じである場合、除去した最後の項目が、その最後の項目をスタック３０４から除去することによってスタック３０４から除去される完了した書込み操作の宛先位置ＩＤを収容していると判定される。
【００３５】
図３に示した例では、スタック３０４の最後の項目は、上記の通り、アレイ項目３０４ｉであるものとして示されている。スタック・インデックス３０６を減分すると、スタック・インデックス３０６は、アレイ項目３０４ｊの代わりに、新しい位置ＩＤを書き込むために使用可能な次の項目としてアレイ項目３０４ｉを指し示すことになる。このため、スタック３０４の最後の項目は前のアレイ項目３０４ｈになる。完了した書込み操作によって供給されたポインタによって識別されたデータ構造のフィールド６０６から取得した（ブロック８０４）スタック・インデックスの値が同じアレイ項目３０４ｉを指し示す場合、正しい位置ＩＤはすでにスタック３０４から除去されていることになる。換言すれば、一致している場合、すなわち、２つのインデックス値が同じである場合、除去した最後の項目が、その最後の項目をスタック３０４から除去することによってスタック３０４から除去される完了した書込み操作の宛先位置ＩＤを収容していると判定される。
【００３６】
これに対して、除去した最後の項目が完了した書込み操作の宛先位置ＩＤを収容していないと判定された場合（ブロック８０８）、除去したアレイ項目は書込み操作中のための有効な位置ＩＤを収容している。したがって、スタック３０４から除去されたアレイ項目からの書込み操作の宛先位置ＩＤは、完了した書込み操作の位置ＩＤを収容していたスタック項目に移動する（ブロック８１２）。除去したアレイ項目から、完了した書込み操作の位置ＩＤを収容しているアレイ項目に、有効な位置ＩＤを移動することにより、完了した書込み操作の位置ＩＤは上書きされ、事実上、スタック３０４から除去される。
【００３７】
上記の通り、図示した実施形態では、除去した最後の項目が完了した書込み操作の宛先位置ＩＤを収容しているかどうかの判定（ブロック８０８）は、完了した書込み操作によって供給されたポインタによって識別されたデータ構造のフィールド６０６から取得した（ブロック８０４）スタック・インデックスの値を、減分したスタック・インデックスの値と比較することによって、行うことができる。一致していない場合、すなわち、２つのインデックス値が同じではない場合、除去した最後の項目が、依然として完了していない書込み操作の有効な宛先位置ＩＤを収容しており、したがって、その最後の項目をスタック３０４から除去することによってスタック３０４から除去してはならないと判定される。したがって、スタック３０４から除去されたアレイ項目からの書込み操作の宛先位置ＩＤは、完了した書込み操作によって供給されたポインタによって識別されたデータ構造のフィールド６０６から取得した（ブロック８０４）スタック・インデックスの値によって識別される通り、完了した書込み操作の位置ＩＤを収容していたスタック項目に移動する（ブロック８１２）。
【００３８】
書込み操作の宛先位置ＩＤが他のスタック項目に移動するので、その宛先位置ＩＤの書込み操作中のためのデータ構造は、宛先位置ＩＤの移動先である異なるスタック項目の位置を示すように更新される（ブロック８１４）。図示した実施形態では、スタック３０４から除去されたアレイ項目からの書込み操作の宛先位置ＩＤは、完了した書込み操作によって供給されたポインタによって識別されたデータ構造のフィールド６０６から取得した（ブロック８０４）スタック・インデックスの値によって識別される通り、完了した書込み操作の位置ＩＤを収容していたスタック項目に移動する（ブロック８１２）。このため、取得したスタック・インデックス値は、移動した宛先位置ＩＤに関する書込み操作中のデータ構造のフィールド６０６に保管される。
【００３９】
このように、図示した実施形態では、書込み操作中のための位置ＩＤがスタック３０４に追加されるたびに、アレイ項目がスタック３０４に追加される。逆に、書込み操作が完了し、完了した書込み操作の位置ＩＤがスタックから除去されるたびに、アレイ項目がスタック３０４から除去される。その結果、一応用例では、論理的冗長検査を効率よく実行することができる。加えて、他の応用例では、エラー回復操作中に、アレイ３０２のトラバーサルをスタック３０４のアレイ項目に限定することができる。スタックの一部ではないアレイ項目は、書込み操作中のための宛先位置ＩＤを収容しておらず、一応用例では無視することができる。スタックの一部ではないアレイ項目が無視されるので、スタック外のアレイ項目内にある完了した書込み操作のための宛先位置は消去する必要がない。
【００４０】
追加の実現例の詳細
書込み処理管理のための上述の技法は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生産するための標準的なプログラミングおよび／またはエンジニアリング技法を使用して、方法、装置、または製品として実現することができる。本明細書で使用する「製品」という用語は、ハードウェア・ロジック（たとえば、集積回路チップ、プログラマブル・ゲート・アレイ（ＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）など）または磁気記憶媒体（たとえば、ハード・ディスク・ドライブ、フレキシブル・ディスク、テープなど）、光学記憶装置（ＣＤ−ＲＯＭ、光ディスクなど）、揮発性および不揮発性メモリ・デバイス（たとえば、ＥＥＰＲＯＭ、ＲＯＭ、ＰＲＯＭ、ＲＡＭ、ＤＲＡＭ、ＳＲＡＭ、ファームウェア、プログラマブル・ロジックなど）などのコンピュータ可読媒体に実現されたコードまたはロジックを指す。コンピュータ可読媒体内のコードは、プロセッサ複合体によってアクセスされ、実行される。好ましい諸実施形態が実現されるコードは、伝送媒体により、またはネットワークを介したファイル・サーバから、さらにアクセス可能である。このような場合、そのコードが実現される製品は、ネットワーク伝送回線、ワイヤレス伝送媒体、空間を伝搬する信号、電波、赤外線信号などの伝送媒体を有することができる。したがって、「製品」は、そのコードが実施される媒体を有することができる。さらに、「製品」は、そのコードが実施され、処理され、実行される、ハードウェア・コンポーネントとソフトウェア・コンポーネントの組合せを有することができる。当然のことながら、当業者であれば、本発明の範囲を逸脱せずに、この構成に対して多くの変更が可能であること、ならびに製品が当技術分野で知られている任意の情報担持媒体を有することができることを認識するであろう。
【００４１】
上述の実現例では、特定の動作は、プロセッサ複合体１２２ａおよび１２２ｂによって実行されるものとして記載されている。代替実現例では、プロセッサ複合体によって実行されるものとして記載されている特定の動作は、様々なコンピュータ、プロセッサ、およびコントローラによって実行することができる。
【００４２】
上述の実現例では、特定の動作は、インデックスまたはカウンタを増分および減分するものとして記載されている。カウンタの「カウント」は正である場合もあれば負である場合もあり、カウントを「増分」または「減分」すると、その特定の応用例に応じて、実際のカウントの負または正の程度がより大きくなる場合もあれば小さくなる場合もあることは認識されている。
【００４３】
図５、図６、図８、および図９の図示したロジックは、特定の順序で発生する特定のイベントを示している。代替実現例では、特定の動作は、異なる順序で実行するか、変更するか、または除去することができる。その上、いくつかの動作を上述のロジックに追加することができ、このような動作は依然として上述の実現例に適合するものである。さらに、本明細書に記載した動作は順次発生する場合もあれば、特定の動作が並行して処理される場合もある。さらに、動作は単一処理装置によってまたは複数の分散処理装置によって実行することができる。
【００４４】
変数Ｎは、上述の諸要素のうちのいくつかに関する任意の整数変数を示すために使用されており、異なる事例で使用する場合は同じ整数値を示す場合もあれば、異なる整数値を示す場合もある。
【００４５】
図１０は、図２に示すホストおよび記憶コントローラ・クラスタなどのネットワーク・コンポーネントからなるコンピュータ・アーキテクチャ９００の一実現例を示している。アーキテクチャ９００は、プロセッサ９０２（たとえば、マイクロプロセッサ）と、メモリ９０４（たとえば、揮発性メモリ・デバイス）と、記憶装置９０６（たとえば、磁気ディスク・ドライブ、光ディスク・ドライブ、テープ・ドライブなどの不揮発性記憶装置）とを含むことができる。記憶装置９０６は、内部記憶装置あるいは付加記憶装置またはネットワーク・アクセス可能記憶装置を含むことができる。記憶装置９０６内のプログラムは、当技術分野で知られている方法で、メモリ９０４にロードされ、プロセッサ９０２によって実行される。このアーキテクチャは、ネットワークとの通信を可能にするためにネットワーク・カード９０８をさらに含む。入力装置９１０は、プロセッサ９０２にユーザ入力を提供するために使用され、キーボード、マウス、ペンスタイラス、マイクロホン、タッチ検知表示画面、あるいは当技術分野で知られている任意のその他の起動または入力メカニズムを含むことができる。出力装置９１２は、プロセッサ９０２から、または表示モニタ、プリンタ、記憶装置などのその他のコンポーネントから伝送される情報を表現することができる。
【００４６】
様々な実現例に関する上記の記述は、例示および説明のために提示されたものである。網羅的にするか、または開示された正確な形式に範囲を限定するためのものではない。上記の教示を考慮すると、多くの変更および変形が可能である。
【図面の簡単な説明】
【００４７】
【図１】書込み操作中即ち未完の書込み操作を追跡するための従来技術の論理構造の概略図である。
【図２】図示した諸実施形態の諸態様を実現可能なコンピューティング環境の一例を示す図である。
【図３】図示した諸実施形態の一態様により未完の書込み操作を追跡するための論理構造の概略図である。
【図４】図示した諸実施形態の一態様により未完の書込み操作を追跡するための論理構造の概略図である。
【図５】図３の構造などの論理構造を初期設定する際の記憶コントローラの動作を示す図である。
【図６】データが記憶装置に書き込まれている未完の書込み操作の宛先の位置ＩＤを図３の論理構造などの論理構造に保管する際の記憶コントローラの動作を示す図である。
【図７】書込み操作で使用される様々なパラメータを保管するデータ構造の一例を示す図である。
【図８】完了した書込み操作のための宛先位置ＩＤを図３の論理構造などの論理構造から除去する際の記憶コントローラの動作を示す図である。
【図９】完了した書込み操作のための宛先位置ＩＤを論理構造から除去する際の記憶コントローラの動作のより詳細な一例を示す図である。
【図１０】ホスト、記憶コントローラ、クラスタ、および任意のその他のコンピューティング・デバイスなど、ネットワーク環境内のコンピューティング・コンポーネントのアーキテクチャを示す図である。
【符号の説明】
【００４８】
１０２ａ  ホスト
１０２ｂ  ホスト
１０２ｎ  ホスト
１０４  記憶システム
１０６  記憶コントローラ
１０８  ネットワーク
１１０ａ  論理装置（ＬＤ）
１１０ｂ  論理装置（ＬＤ）
１１０ｎ  論理装置（ＬＤ）
１２０ａ  クラスタ
１２０ｂ  クラスタ
１２２ａ  プロセッサ
１２２ｂ  プロセッサ
１２４ａ  キャッシュ
１２４ｂ  キャッシュ
１２６ａ  不揮発性記憶装置（ＮＶＳ）
１２６ｂ  不揮発性記憶装置（ＮＶＳ）
【図１】
0004667925.tif 000002
【図２】
0004667925.tif 000003
【図３】
0004667925.tif 000004
【図４】
0004667925.tif 000005
【図５】
0004667925.tif 000006
【図６】
0004667925.tif 000007
【図７】
0004667925.tif 000008
【図８】
0004667925.tif 000009
【図９】
0004667925.tif 000010
【図１０】
0004667925.tif 000011