(57)【要約】  障害が生じたデータ記憶機構を検出し、置き換えるための装置、システム及び方法を提供する。読出しモジュール１００２が、メモリデバイス９０２、及びメモリデバイス９０２からのパリティ情報を格納する予備メモリデバイス９０４を含む、メモリデバイス９０２、９０４から成るアレイからデータを読み出す。ＥＣＣモジュール１００４が、誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に誤りがあるか否か、及びその誤りがＥＣＣを用いて訂正可能であるか否かを判断する。テストされるデータは読出しモジュール１００２によって読み出されるデータを含む。ＥＣＣモジュール１００４が、読出しモジュール１００２によって読み出されるデータ内に誤りがあること、及びその誤りが訂正不可能であると判断するのに応答して、分離モジュール１００６がメモリデバイス９０２を選択する。分離モジュール１００６は、選択されたメモリデバイス９０２から読み出されるデータを、置換データ及び利用可能データで置き換え、テストされるデータは、置換データと結合される利用可能データをさらに含む。
2011521397.tif 000002
【特許請求の範囲】
【請求項１】
障害が生じたデータ記憶機構を検出して置き換える装置であって、該装置は、
メモリデバイスのアレイからデータを読み出す読出しモジュールであって、該アレイは２以上のメモリデバイス及び１又は複数の予備メモリデバイスを含み、該予備メモリデバイスは前記メモリデバイスからのパリティ情報を格納する、読出しモジュールと、
誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及び該ＥＣＣを用いて該誤りが訂正可能であるか否かを判断するＥＣＣモジュールであって、テストされるデータは前記読出しモジュールによって読み出されるデータである、ＥＣＣモジュールと、
分離モジュールであって、
前記ＥＣＣモジュールが、前記読出しモジュールによって読み出されるデータ内に誤りがあること、及び該誤りが前記ＥＣＣを用いて訂正不可能であることを判断した場合に、前記メモリデバイスのアレイから１つのメモリデバイスを選択し、
前記選択されたメモリデバイスから読み出されるデータを、前記１又は複数の予備メモリデバイス上に格納される前記パリティデータから生成されるデータ（「置換データ」）及び選択されない前記メモリデバイスから読み出されるデータ（「利用可能データ」）で置き換える
よう構成された分離モジュールと
を備え、前記テストされるデータは、前記置換データと結合される前記利用可能データをさらに含むことを特徴とする装置。
【請求項２】
請求項１記載の装置において、前記分離モジュールは、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが前記ＥＣＣを用いて訂正可能でない誤りを含むと判断した場合、テストのための次のメモリデバイスを選択し、前記次のメモリデバイスは前記メモリデバイスのアレイから選択され、前記分離モジュールは、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが誤りを含まないか、又は前記ＥＣＣを用いて訂正可能である誤りを含むと判断するまで、テストのために前記メモリデバイスのそれぞれを選択するよう構成されていることを特徴とする装置。
【請求項３】
請求項１記載の装置において、該装置はさらに、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが誤りを含まないか、又は前記ＥＣＣを用いて訂正可能である誤りを含むと判断した場合に、リタイアメントポリシーに基づいて、前記選択されたメモリデバイス、及び該選択されたメモリデバイス上の１又は複数の記憶領域のうちの１つをリタイアさせるリタイアメントモジュールを備え、前記１又は複数の記憶領域は１又は複数の誤りを含み、前記記憶領域は、前記選択されたメモリデバイスの少なくとも一部を構成することを特徴とする装置。
【請求項４】
請求項１記載の装置において、該装置はさらに、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが誤りを含まないか又は前記ＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、選択された前記メモリデバイスを識別するメモリデバイス再構成モジュールを備え、データを生成して、将来の動作のために前記選択されたメモリデバイスから読み出されるデータが置き換えられるようにすることを特徴とする装置。
【請求項５】
請求項１記載の装置において、該装置は、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが誤りを含まないか、又は前記ＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、
前記選択されたメモリデバイスの識別情報を記録すること、及び
１又は複数の誤りを含む１又は複数の記憶領域を指定するメモリロケーションデータを記録することであって、該領域は前記選択されたメモリデバイスの少なくとも一部を構成する、記録すること
の一方又は両方を実施するロギングモジュールを備えることを特徴とする装置。
【請求項６】
請求項５記載の装置において、前記ロギングモジュールは、１又は複数の誤りを有する記憶領域を含むメモリロケーションデータを記録することなく、前記選択されたメモリデバイスの前記識別情報を記録することを特徴とする装置。
【請求項７】
請求項６記載の装置において、該装置はさらに、前記選択されたメモリデバイス内の誤りを含む１又は複数の記憶領域を特定する記憶領域テストモジュールを備え、前記ロギングモジュールはさらに、前記記憶領域テストモジュールによって特定された前記１又は複数の記憶領域を含むメモリロケーションデータを記録することを特徴とする装置。
【請求項８】
請求項７記載の装置において、前記記憶領域テストモジュールは、前記読出しモジュールによる後続の読出しによって１又は複数の誤りを有する記憶領域を特定し、前記ＥＣＣモジュール及び前記分離モジュールを用いて、訂正不可能な誤りであるが、置換データと利用可能データとを結合することによって訂正可能である誤りを有する記憶領域を特定することを特徴とする装置。
【請求項９】
請求項５記載の装置において、前記ロギングモジュールは１又は複数の誤りを含む１又は複数の記憶領域を記録し、該ロギングモジュールは、前記読出しモジュールによって後続の読出しが実施され、前記ＥＣＣモジュール及び前記分離モジュールを用いて、訂正不可能な誤りであるが、置換データと利用可能データとを結合することによって訂正可能である誤りを有する記憶領域が特定されるのに応答して、前記選択されたメモリデバイス内の１又は複数の誤りを含む１又は複数のさらなる記憶領域を指定するメモリロケーションデータをさらに記録することを特徴とする装置。
【請求項１０】
請求項９記載の装置において、後続の読出しは、記憶領域テストモジュールによって開始される読出し、及び読出し要求からの読出しの一つを含むことを特徴とする装置。
【請求項１１】
請求項５記載の装置において、該装置はさらにエリア再構成モジュールを備え、該エリア再構成モジュールは、前記選択されたメモリデバイス内の前記１又は複数の記憶領域内のデータを、将来の動作のための１又は複数の予備メモリデバイスからの置換データで置き換えるが、前記選択されたメモリデバイス内の前記１又は複数の記憶領域外のデータは置き換えられないようにすることを特徴とする装置。
【請求項１２】
請求項１１記載の装置において、前記エリア再構成モジュールは、前記選択されたメモリデバイス上の前記１又は複数の記憶領域からのデータを、前記１又は複数の予備メモリデバイスからの置換データで置き換えると共に、同じ選択されたメモリデバイス又は異なる選択されたメモリデバイス上の１又は複数のさらなる記憶領域からのデータを、同じ１又は複数のメモリデバイスからの置換データで置き換え、前記１又は複数のさらなる記憶領域はそれぞれ１又は複数の誤りを含み、前記１又は複数の記憶領域及び前記１又は複数のさらなる記憶領域は共通の論理ページを共用しないことを特徴とする装置。
【請求項１３】
請求項１１記載の装置において、前記エリア再構成モジュールは、前記１又は複数の記憶領域からのデータを、前記１又は複数の予備メモリデバイスからの置換データで置き換えると共に、１又は複数のさらなる記憶領域を、１又は複数の異なるメモリデバイスからの置換データで置き換え、前記１又は複数のさらなる記憶領域はそれぞれ１又は複数の誤りを含み、前記１又は複数の記憶領域及び前記１又は複数のさらなる記憶領域は共通の論理ページを共用することを特徴とする装置。
【請求項１４】
請求項５記載の装置において、記憶領域は、１又は複数のＥＣＣチャンク、１又は複数の物理ページ、１又は複数の論理ページ、１又は複数の物理消去ブロック、１又は複数の論理消去ブロック、チップ、チップの一部、１又は複数のダイの一部、及び１又は複数のダイの１又は複数を含むことを特徴とする装置。
【請求項１５】
請求項５記載の装置において、該装置はさらに、前記記録を解析して、データ誤りを有する前記選択されたメモリデバイス内のエリア、及び誤りタイプの１又は複数を特定する解析モジュールを備えることを特徴とする装置。
【請求項１６】
請求項１記載の装置において、該装置はさらに、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが誤りを含まないか、又は前記ＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、将来にデータを記憶するための消去ブロックを準備するために、前記１又は複数の誤りを有する消去ブロックを消去する誤り記憶回復モジュールを備えることを特徴とする装置。
【請求項１７】
請求項１６記載の装置において、前記リタイアメントモジュールは、前記消去ブロックをリタイアさせて、
前記記憶誤り回復モジュールが前記消去ブロックを消去し、
その後、さらなるデータを前記消去ブロックに書き込み、
その後、前記読出しモジュールによって前記さらなるデータを読み出し、
前記ＥＣＣモジュール及び前記分離モジュールを用いて、前記消去ブロックが訂正不可能な誤りであるが、置換データと利用可能データとを結合することによって訂正可能である誤りを含むと判断するのに応答して、
前記消去ブロックからのデータの代わりに、前記１又は複数の予備メモリデバイスからの置換データを使用することを特徴とする装置。
【請求項１８】
請求項１記載の装置において、前記読出しモジュールは論理ページの少なくとも一部から前記データを読み出し、前記論理ページは前記メモリデバイスのアレイに及び、前記メモリデバイスのアレイは、Ｎ＋Ｐ個の記憶素子から成るアレイを含み、該記憶素子のアレイは、それぞれがＥＣＣチャンクの一部を格納するＮ個の記憶素子、及びパリティデータを格納するＰ個の記憶素子を含み、該ＥＣＣチャンクは、格納されるデータと、該格納されるデータから生成されるＥＣＣとを含み、該ＥＣＣは前記格納されるデータに及び、前記Ｐ個の記憶素子は、前記Ｎ個の記憶素子内に格納される前記ＥＣＣチャンクから生成されるパリティデータを格納することを特徴とする装置。
【請求項１９】
請求項１記載の装置において、該装置はさらに、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが前記ＥＣＣを用いて訂正可能でない誤りを含むと判断するのに応答して、訂正されたデータを返す訂正データモジュールを備えることを特徴とする装置。
【請求項２０】
請求項１記載の装置において、該装置はさらに、前記ＥＣＣモジュールが、前記置換データと結合される前記利用可能データが前記ＥＣＣを用いて訂正可能でない誤りを含むと判断するのに応答して、誤りと報告する報告モジュールを備えることを特徴とする装置。
【請求項２１】
請求項１記載の装置において、前記メモリデバイスはそれぞれ不揮発性固体記憶機構を含むことを特徴とする装置。
【請求項２２】
障害が生じたデータ記憶機構を検出し、かつ置き換えるシステムであって、該システムは、
メモリデバイスのアレイであって、該アレイは２つ以上のメモリデバイス及び１又は複数の予備メモリデバイスを含み、該予備メモリデバイスは前記メモリデバイスからのパリティ情報を格納する、メモリデバイスのアレイと、
前記アレイを制御するためのコントローラと、
前記メモリデバイスのアレイからデータを読み出す読出しモジュールと、
誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及び該ＥＣＣを用いて該誤りが訂正可能であるか否かを判断するＥＣＣモジュールであって、前記テストされるデータは前記読出しモジュールによって読み出されるデータを含む、ＥＣＣモジュールと、
分離モジュールであって、
前記ＥＣＣモジュールが、前記読出しモジュールによって読み出されるデータ内に誤りがあること、及び該誤りが前記ＥＣＣを用いて訂正不可能であることを判断するのに応答して、前記メモリデバイスのアレイから１つのメモリデバイスを選択し、
前記選択されたメモリデバイスから読み出されるデータを、前記１又は複数の予備メモリデバイス上に格納される前記パリティデータから生成されるデータ（「置換データ」）及び選択されない前記メモリデバイスから読み出されるデータ（「利用可能データ」）で置き換える
分離モジュールと
を備え、前記テストされるデータは、前記置換データと結合される前記利用可能データをさらに含むことを特徴とするシステム。
【請求項２３】
障害が生じた故障したデータ記憶機構を検出し、置き換えるための動作を実行するために実行可能であるコンピュータ使用可能プログラムコードを有するコンピュータ可読媒体を含むコンピュータプログラム製品であって、
メモリデバイスのアレイからデータを読み出すステップであって、該アレイは２つ以上のメモリデバイスと、１又は複数の予備メモリデバイスとを含み、該予備メモリデバイスは前記メモリデバイスからのパリティ情報を格納する、読み出すステップと、
誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及び該ＥＣＣを用いて該誤りが訂正可能であるか否かを判断するステップであって、前記テストされるデータは前記メモリデバイスのアレイから読み出されるデータを含む、判断するステップと、
前記ＥＣＣモジュールが、データ内に誤りがありかつ該誤りが前記ＥＣＣを用いて訂正不可能であると判断するのに応答して、前記メモリデバイスのアレイから１つのメモリデバイスを選択するステップと、
前記選択されたメモリデバイスから読み出されるデータを、前記１又は複数の予備メモリデバイス上に格納される前記パリティデータから生成されるデータ（「置換データ」）及び選択されない前記メモリデバイスから読み出されるデータ（「利用可能データ」）を含むデータで置き換えるステップと、
前記テストされたデータが、誤りを含まないか又は前記ＥＣＣを用いて訂正可能であるような誤りを含むか否かを判断するステップであって、前記テストされるデータは、前記置換データと結合される前記利用可能データをさらに含む、判断するステップと
実行することを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ記憶機構に関し、より詳細には、メモリデバイスのアレイ内の故障したデータ記憶機構を検出し、置き換えることに関する。
【０００２】
なお、本出願は、David Flynn他によって２００８年５月１６日に出願された「Apparatus, System, and Method for Detecting and Replacing Failed Data Storage」と題する米国仮特許出願第６１／０５４，０５５号に対する優先権を主張し、その仮特許出願は参照により本明細書に援用される。
【背景技術】
【０００３】
固体記憶機構及び他の形態のデータ記憶媒体は、その固体記憶機構内の特定の領域において故障を生じるか、又はデータ誤りを受ける。他の例では、デバイス、又はチップ全体に欠陥があり、機能しない。分散型の独立ドライブの冗長アレイ（「ＲＡＩＤ」）又は他の冗長データシステム等では、多くの場合に、複数のメモリデバイス又は記憶素子が用いられる。ＲＡＩＤシステムのようなメモリデバイスのアレイは、アレイ内に格納されるパリティデータを用いて、破損したデータを置き換えることができるので、データ誤り及びデバイス故障に対して保護を提供することができる。
【０００４】
しかしながら、アレイ内に格納されるデータが任意の特定の物理的なハードウエア境界に合わせられないときに、誤りを引き起こしたメモリデバイス又は記憶素子を特定するのは難しい。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
これまでの検討から、故障したデータ記憶機構を検出し、置き換える装置、システム及び方法に対する需要が存在することが明らかであるはずである。都合のよいことに、そのような装置、システム及び方法は、アレイのメモリデバイスを個別にテストして、データ誤りを検出する。
【課題を解決するための手段】
【０００６】
本発明は現在の最新技術に応えて、詳細には、現時点で利用可能なデータ記憶システムではまだ十分には解決されていない当該技術分野における問題及び要求に応えて開発された。したがって、本発明は、当該技術分野における上記の短所のうちの多く又は全てを克服する、故障したデータ記憶機構を検出し、置き換えるための装置、システム及び方法を提供するために開発された。
【０００７】
故障したデータ記憶機構を検出し、置き換えるための装置は、メモリデバイスのアレイからデータを読み出すステップ、誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及びＥＣＣを用いて誤りが訂正可能であるか否かを判断するステップ、メモリデバイスのアレイから１つのメモリデバイスを選択するステップ、及び選択されたメモリデバイスから読み出されたデータを置き換えるステップから成る必要なステップを機能的に実行するように構成される複数のモジュールを設けられる。上記の実施形態におけるこれらのモジュールは、読出しモジュールと、ＥＣＣモジュールと、分離モジュールとを含む。
【０００８】
読出しモジュールは、メモリデバイスのアレイからデータを読み出す。該アレイは、２つ以上のメモリデバイス及び１又は複数の予備メモリデバイスを含む。該予備メモリデバイスは、メモリデバイスからのパリティ情報を格納する。一実施形態では、読出しモジュールは論理ページの少なくとも一部からデータを読み出す。論理ページはメモリデバイスのアレイに及ぶ。メモリデバイスのアレイは、Ｎ＋Ｐ個の記憶素子から成るアレイを含む。該記憶素子のアレイは、それぞれがＥＣＣチャンクの一部を格納するＮ個の記憶素子、及びパリティデータを格納するＰ個の記憶素子を含む。ＥＣＣチャンクは、格納されるデータと、該格納されるデータから生成される誤り訂正符号（「ＥＣＣ」）とを含み、ＥＣＣは格納されるデータに及ぶ。Ｐ個の記憶素子は、Ｎ個の記憶素子内に格納されるＥＣＣチャンクから生成されるパリティデータを格納する。特定の実施形態では、各メモリデバイスは不揮発性固体記憶機構を含む。
【０００９】
ＥＣＣモジュールは、誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及び誤りがＥＣＣを用いて訂正可能であるか否かを判断し、テストされるデータは、読出しモジュールによって読み出されるデータを含む。
【００１０】
該分離モジュールは、ＥＣＣモジュールが、読出しモジュールによって読み出されるデータ内に誤りがあること、及び該誤りがＥＣＣを用いて訂正不可能であることを判断するのに応答して、メモリデバイスのアレイから１つのメモリデバイスを選択する。分離モジュールは、選択されたメモリデバイスから読み出されるデータを、１又は複数の予備メモリデバイス上に格納されるパリティデータから生成されるデータ（「置換データ」）及び選択されないメモリデバイスから読み出されるデータ（「利用可能データ」）で置き換え、ＥＣＣモジュールによってテストされるデータはまた、置換データと結合される利用可能データをさらに含む。一実施形態では、分離モジュールは、ＥＣＣモジュールが、置換データと結合される利用可能データがＥＣＣを用いて訂正可能でない誤りを含むと判断するのに応答して、テストのための次のメモリデバイスを選択する。次のメモリデバイスはメモリデバイスのアレイから選択される。分離モジュールは、ＥＣＣ１００４モジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するまで、テストのためにメモリデバイスのそれぞれを選択する。
【００１１】
一実施形態では、装置は、ＥＣＣモジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、リタイアメントポリシーに基づいて、選択されたメモリデバイス、及び該選択されたメモリデバイス上の１又は複数の記憶領域の１つをリタイアさせるリタイアメントモジュールを備える。１又は複数の記憶領域は１又は複数の誤りを含む。記憶領域は、選択されたメモリデバイスの少なくとも一部を構成する。
【００１２】
別の実施形態では、記憶誤り回復モジュールが消去ブロックを消去するのに応答して、リタイアメントモジュールが消去ブロックをリタイアさせて、消去ブロックからのデータの代わりに１又は複数の予備メモリデバイスからの置換データを使用し、その後、その消去ブロックにさらなるデータを書き込み、その後、その別のデータを読出しモジュールによって読み出し、ＥＣＣモジュール及び分離モジュールを用いて、その消去ブロックが、訂正不可能な誤りであるが、置換データと利用可能データとを結合することにより訂正可能である誤りを含むことを判断する。
【００１３】
一実施形態では、装置は、ＥＣＣモジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、選択されたメモリデバイスを識別するメモリデバイス再構成モジュールをさらに備え、データを生成して、将来の動作のために選択されたメモリデバイスから読み出されるデータが置き換えられるようにする。
【００１４】
一実施形態では、装置は、ＥＣＣモジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、選択されたメモリデバイスの識別情報を記録すること、及び１又は複数の誤りを含む１又は複数の記憶領域を指定するメモリロケーションデータを記録することのうちの一方又は両方を実施するロジングモジュールを備える。領域は選択されたメモリデバイスの少なくとも一部を構成する。
【００１５】
いくつかの実施形態では、ロギングモジュールは、１又は複数の誤りを有する記憶領域を含むメモリロケーションデータを記録することなく、選択されたメモリデバイスの識別情報を記録する。別の実施形態では、ロギングモジュールは１又は複数の誤りを含む１又は複数の記憶領域を記録し、該ロギングモジュールは選択されたメモリデバイス内の１又は複数の誤りを含む１又は複数の別の記憶領域を指定するメモリロケーションデータをさらに記録する。読出しモジュールによって後続の読出しが実施され、ＥＣＣモジュール及び分離モジュールを用いて、訂正不可能な誤りであるが、置換データを利用可能データとを結合することによって訂正可能である誤りを有する記憶領域を特定されるのに応答して、ロギングモジュールは、１又は複数の記憶領域及び別の記憶領域を記録する。
【００１６】
他の実施形態では、後続の読出しは、記憶領域テストモジュールによって開始される読出し及び読出し要求からの読出しの一方を含む。一実施形態では、記憶領域は、１又は複数のＥＣＣチャンク、１又は複数の物理ページ、１又は複数の論理ページ、１又は複数の物理消去ブロック、１又は複数の論理消去ブロック、チップ、チップの一部、１又は複数のダイの一部、及び１又は複数のダイの１又は複数を含む。
【００１７】
一実施形態では、本装置は、選択されたメモリデバイス内の誤りを含む１又は複数の記憶領域を特定する記憶領域テストモジュールをさらに備える。ロギングモジュールは、記憶領域テストモジュールによって特定された１又は複数の記憶領域を含むメモリロケーションデータをさらに記録する。他の実施形態では、記憶領域テストモジュールは、読出しモジュールによる後続の読出しによって１又は複数の誤りを有する記憶領域を特定し、ＥＣＣモジュール及び分離モジュールを用いて、訂正不可能な誤りであるが、置換データを利用可能データとを結合することによって訂正可能である誤りを有する記憶領域を特定する。
【００１８】
一実施形態では、装置は、エリア再構成モジュールを備え、該エリア再構成モジュールは、選択されたメモリデバイス内の１又は複数の記憶領域内のデータを、将来の動作のための１又は複数の予備メモリデバイスからの置換データで置き換えるが、選択されたメモリデバイス内の１又は複数の記憶領域外のデータは置き換えられないようにする。別の実施形態では、エリア再構成モジュールは、選択されたメモリデバイス上の１又は複数の記憶領域からのデータを、１又は複数の予備メモリデバイスからの置換データで置き換え、かつ同じ選択されたメモリデバイス又は異なる選択されたメモリデバイス上の１又は複数の他の記憶領域からのデータを、同じ１又は複数のメモリデバイスからの置換データで置き換える。１又は複数の他の記憶領域はそれぞれ１又は複数の誤りを含み、１又は複数の記憶領域及び１又は複数の他の記憶領域は共通の論理ページを共用しない。
【００１９】
別の実施形態では、エリア再構成モジュールは、１又は複数の記憶領域からのデータを、１又は複数の予備メモリデバイスからの置換データで置き換え、かつ１又は複数の他の記憶領域を、１又は複数の異なるメモリデバイスからの置換データで置き換える。１又は複数の他の記憶領域はそれぞれ１又は複数の誤りを含み、１又は複数の記憶領域及び１又は複数の他の記憶領域は共通の論理ページを共用する。
【００２０】
一実施形態では、本装置は、記録を解析して、データ誤りを有する選択されたメモリデバイス内のエリア、及び誤りタイプのうちの１又は複数を特定する解析モジュールを備える。
【００２１】
一実施形態では、本装置は、ＥＣＣモジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、将来にデータを記憶するための消去ブロックを準備するために、１又は複数の誤りを有する消去ブロックを消去する誤り記憶回復モジュールを備える。
【００２２】
一実施形態では、本装置は、ＥＣＣモジュールが、置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して、訂正されたデータを返す訂正データモジュールを備える。
【００２３】
障害のあるたデータ記憶機構を検出し、置き換える本発明のシステムも提示される。該システムは、メモリデバイスのアレイ、そのアレイを制御する記憶コントローラ、及び本装置に関連して上記で説明されたモジュールと同様のモジュールにおいて具現される場合がある。詳細には、そのシステムは、一実施形態において、読出しモジュールと、ＥＣＣモジュールと、分離モジュールとを含む。読出しモジュールはメモリデバイスのアレイからデータを読み出す。そのアレイは、２つ以上のメモリデバイスと、１又は複数の予備メモリデバイスとを含む。予備メモリデバイスは、メモリデバイスからのパリティ情報を格納する。
【００２４】
ＥＣＣモジュールは、テストされるデータ内に１又は複数の誤りがあるか否か、及びその誤りがＥＣＣを用いて訂正可能であるか否かを判断し、テストされるデータは、読出しモジュールによって読み出されるデータを含む。ＥＣＣモジュールが、読出しモジュールによって読み出されたデータ内に誤りが存在し、その誤りがＥＣＣを用いて訂正不可能であると判断するのに応答して、分離モジュールは、メモリデバイスのアレイから１つのメモリデバイスを選択する。また、分離モジュールは、選択されたメモリデバイスから読み出されたデータを、１又は複数の予備メモリデバイス上に格納されるパリティデータから生成されるデータ（「置換データ」）及び選択されないメモリデバイスから読み出されるデータ（「利用可能データ」）を含むデータで置き換え、テストされるデータは、置換データと結合される利用可能データをさらに含む。
【００２５】
障害のあるデータ記憶機構を検出し、置き換えるための動作を実行するために実行可能なコンピュータ使用可能プログラムコードを有するコンピュータ可読媒体を含むコンピュータプログラム製品が提供される。そのコンピュータプログラム製品は、メモリデバイスのアレイからデータを読み出すことを含む。そのアレイは２つ以上のメモリデバイスと、１又は複数の予備メモリデバイスとを含む。予備メモリデバイスは、メモリデバイスからのパリティ情報を格納する。また、そのコンピュータプログラム製品は、誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りが存在するか否か、及びその誤りがＥＣＣを用いて訂正可能であるか否かを判断し、テストされるデータはメモリデバイスのアレイから読み出されるデータを含む。
【００２６】
上記のコンピュータプログラム製品は、ＥＣＣモジュールが、データ内に誤りが存在すること、及びその誤りがＥＣＣを用いて訂正不可能であることを判断するのに応答して、メモリデバイスのアレイから１つのメモリデバイスを選択することを含む。また、そのコンピュータプログラム製品は、選択されたメモリデバイスから読み出されるデータを、１又は複数の予備メモリデバイス上に格納されるパリティデータから生成されるデータ（「置換データ」）及び選択されないメモリデバイスから読み出されるデータ（「利用可能データ」）を含むデータで置き換えることを含む。また、そのコンピュータプログラム製品は、テストされるデータが、誤りを含まないか、又はＥＣＣを用いて訂正可能であるような誤りを含むか否かを判断することを含み、テストされるデータは、置換データと結合される利用可能データをさらに含む。
【００２７】
本明細書全体を通じて、特徴、利点又は類似の言葉を参照することは、本発明で実現される場合がある特徴及び利点の全てが、本発明の任意の単一の実施形態の中にあるべきであること、又はあることを暗示しない。むしろ、特徴及び利点を参照する言葉は、１つの実施形態に関連して記述される具体的な特徴、利点又は特性が本発明の少なくとも１つの実施形態に含まれることを意味するものと理解されたい。したがって、本明細書全体を通じて、特徴、利点又は類似の言葉が検討される際に、同じ実施形態が参照される場合があるが、必ずしも同じ実施形態でなくてもよい。
【００２８】
さらに、本発明の上記の特徴、利点及び特性は、１又は複数の実施形態において任意の適切な方法で組み合わせられる場合がある。特定の実施形態の具体的な特徴又は利点のうちの１又は複数を用いることなく本発明が実施される場合があることは当業者には理解されよう。他の事例では、特定の実施形態において、さらなる特徴及び利点が認識される場合があるが、本発明の全ての実施形態の中に存在するとは限らない場合がある。
【００２９】
本発明のこれらの特徴及び利点は、以下の説明及び添付の特許請求の範囲からさらに十分に明らかになるはずであるか、又は以下に記述されるように本発明を実践することから習得される場合がある。
【００３０】
本発明の利点が容易に理解されるようにするために、上記で略述された本発明のさらに詳細な説明が、添付の図面において示される具体的な実施形態を参照しながら行なわれるであろう。これらの図面が本発明の典型的な実施形態を示すにすぎないこと、それゆえ、その範囲を制限するものと見なされるべきでないことを理解した上で、添付の図面を用いて、本発明がさらに具体的、かつ詳細に記述され、説明されるであろう。
【図面の簡単な説明】
【００３１】
【図１】本発明による、固体記憶デバイス内のデータ管理のためのシステムの一実施形態を示す概略ブロック図である。
【図２】本発明による、固体記憶デバイス内の固体記憶デバイスコントローラの一実施形態を示す概略ブロック図である。
【図３】本発明による、固体記憶デバイス内の書込みデータパイプライン及び読出しデータパイプラインを備える固体記憶コントローラの一実施形態を示す概略ブロック図である。
【図４Ａ】本発明による、記憶素子のアレイの一実施形態を示す概略ブロック図である。
【図４Ｂ】本発明による、記憶素子のアレイの別の実施形態を示す概略ブロック図である。
【図５】本発明による、冗長記憶システム内のデータ完全性を高める装置の一実施形態を示す概略ブロック図である。
【図６】本発明による、冗長記憶システム内のデータ完全性を高める装置の別の実施形態を示す概略ブロック図である。
【図７】本発明による、冗長記憶システム内のデータ完全性を高める方法の一実施形態を示す概略フロー図である。
【図８】本発明による、冗長記憶システム内のデータ完全性を高める方法の別の実施形態を示す概略フロー図である。
【図９Ａ】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための装置の一実施形態を示す概略ブロック図である。
【図９Ｂ】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための装置の別の実施形態を示す概略ブロック図である。
【図１０】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための装置の別の実施形態を示す概略ブロック図である。
【図１１】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための装置の別の実施形態を示す概略ブロック図である。
【図１２】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための方法の一実施形態を示す概略フロー図である。
【図１３】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための方法の別の実施形態を示す概略フロー図である。
【図１４】本発明による、障害のあるデータ記憶機構を検出し、置き換えるための方法の別の実施形態を示す概略フロー図である。
【図１５Ａ】本発明による、誤りを有する記憶領域を記録するための方法の一実施形態を示す概略フロー図である。
【図１５Ｂ】本発明による、誤りを有する記憶領域を記録するための方法の別の実施形態を示す概略フロー図である。
【図１６】本発明による、消去ブロックをリタイアさせるための方法の一実施形態を示す概略フロー図である。
【図１７】本発明による、パリティデータを用いて保護される固体記憶素子のアレイを再構成する装置の一実施形態を示す概略ブロック図である。
【図１８】本発明による、パリティデータを用いて保護される固体記憶素子のアレイを再構成する装置の別の実施形態を示す概略ブロック図である。
【図１９】本発明による、パリティデータを用いて保護される固体記憶素子のアレイを再構成する方法の一実施形態を示す概略フロー図である。
【図２０】本発明による、さらなる利用不可能な記憶素子を特定するための方法の一実施形態を示す概略フロー図である。
【発明を実施するための形態】
【００３２】
本明細書において記述される機能単位の多くは、それらの機能単位の実現の独立性を特に強調するために、モジュールと表示されている。例えば、モジュールは、カスタムＶＬＳＩ回路若しくはゲートアレイを含むハードウエア回路、論理チップ、トランジスタのような既製の半導体、又は他の個別部品として実現される場合がある。また、モジュールは、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブル論理デバイス等のようなプログラマブルハードウエアデバイスにおいて実現される場合もある。
【００３３】
また、モジュールは、種々のタイプのプロセッサによって実行するためのソフトウエアにおいて実現される場合もある。例えば、実行可能コードから成る識別されたモジュールが、コンピュータ命令から成る１又は複数の物理ブロック又は論理ブロックを含む場合があり、それらのブロックは、例えば、オブジェクト、手順又は関数として編成される場合がある。それにもかかわらず、識別されたモジュールの実行可能コードは物理的に一緒に配置される必要はなく、異なるロケーションに格納される異種の命令を含む場合があり、論理的に結合されるときに、それらの命令はモジュールを構成し、そのモジュールのための所定の目的を果たす。
【００３４】
実際には、実行可能コードのモジュールは単一の命令、又は多数の命令とすることができ、いくつかの異なるコードセグメントにわたって、異なるプログラム間で、さらには複数のメモリデバイスにわたって分散される場合もある。同様に、モジュール内で演算データが識別され、示される場合があり、任意の適切な形において具現され、任意の適切なタイプのデータ構造内に編成される場合がある。それらの演算データは、単一のデータセットとして集められる場合があるか、又は異なる記憶デバイスを含む、異なるロケーションにわたって分散される場合があり、少なくとも部分的には、システム又はネットワーク上に単なる電子信号として存在する場合もある。１つのモジュール又は１つのモジュールの複数の部分がソフトウエアにおいて実現される場合、それらのソフトウエア部分は１又は複数のコンピュータ可読媒体上に格納される。
【００３５】
本明細書全体を通じて、「一実施形態」、「１つの実施形態」又は類似の言葉に言及することは、その実施形態に関連して記述される特定の特徴、構造又は特性が本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書全体を通じて、「一実施形態において」、「１つの実施形態において」という語句又は類似の言葉が現れるとき、全て同じ実施形態を参照する場合があるが、必ずしも同じ実施形態を参照しなくてもよい。
【００３６】
コンピュータ可読媒体への参照は、デジタル処理装置上に機械可読命令を格納することができる任意の形をとる場合がある。コンピュータ可読媒体は、伝送線路、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ、磁気ディスク、パンチカード、フラッシュメモリ、集積回路、又は他のデジタル処理装置メモリデバイスによって具現される場合がある。
【００３７】
さらに、本発明の上記の特徴、構造又は特性は、１又は複数の実施形態において任意の適切な方法で組み合わせることができる。以下の説明において、本発明の実施形態を完全に理解してもらうために、プログラミング、ソフトウエアモジュール、ユーザ選択、ネットワークトランザクション、データベース問い合わせ、データベース構造、ハードウエアモジュール、ハードウエア回路、ハードウエアチップ等の例のような多数の具体的な細部が提供される。しかしながら、本発明が、それらの具体的な細部のうちの１又は複数を用いることなく実施されるか、又は他の方法、構成要素、材料等を用いて実施される場合があることは、当業者には理解されよう。他の事例では、本発明の態様を分かりにくくするのを避けるために、既知の構造、材料又は動作は詳しく示されないか、又は説明されない。
【００３８】
本明細書に含まれる概略フロー図は、包括的には、論理フロー図として記述される。したがって、図示される順序及び表示されるステップは、本発明の方法の一実施形態を示す。示される方法の１又は複数のステップ、又はその部分に対する機能、論理、又は効果において等価である他のステップ及び方法が考えられるであろう。さらに、用いられるフォーマット及び記号は、その方法の論理ステップを説明するために提供されており、その方法の範囲を制限するものではない。フロー図において種々の矢印タイプ及びラインタイプが用いられるが、それらは、対応する方法の範囲を制限するものではない。実際には、いくつかの矢印及び他の結合子は、その方法の論理的な流れを指示するためにのみ用いられる。例えば、矢印が、図示される方法の列挙されるステップ間の明示されていない持続時間の待機又はモニタリング期間を指示する。さらに、特定の方法が行なわれる順序は、図示される対応するステップの順序に厳密に従う場合も、従わない場合もある。
【００３９】
固体記憶システム
図１は、本発明による、固体記憶デバイスにおけるデータ管理のためのシステム１００の一実施形態を示す概略ブロック図である。システム１００は、固体記憶デバイス１０２と、固体記憶コントローラ１０４と、書込みデータパイプライン１０６と、読出しデータパイプライン１０８と、固体記憶機構１１０と、コンピュータ１１２と、クライアント１１４と、コンピュータネットワーク１１６とを含み、それらは以下に説明される。さらに、種々の実施形態において、システム１００は、リダクション装置１１６と、検出装置１１８と、再構成装置１２０とを含む。
【００４０】
システム１００は、少なくとも１つの固体記憶デバイス１０２を含む。別の実施形態では、システム１００は、２つ以上の固体記憶デバイス１０２を含む。各固体記憶デバイス１０２は、フラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭ又はＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）、相変化ＲＡＭ（「ＰＲＡＭ」）、レーストラックメモリ、メムリスタメモリ等の不揮発性固体記憶機構１１０を含むことができる。固体記憶デバイス１０２は、コンピュータネットワーク１１６を通じてクライアント１１４に接続されるコンピュータ１１２内に示される。一実施形態では、固体記憶デバイス１０２は、コンピュータ１１２の内部にあり、周辺コンポーネント相互接続エクスプレス（「ＰＣＩｅ」）バス、シリアルアドバンストテクノロジアタッチメント（「シリアルＡＴＡ」）バス等のようなシステムバスを用いて接続される。別の実施形態では、固体記憶デバイス１０２はコンピュータ１１２の外部にあり、ユニバーサルシリアスバス（「ＵＳＢ」）接続、電気電子技術者学会（「ＩＥＥＥ」）１３９４バス（「FireWire」）等によって接続される。他の実施形態では、周辺コンポーネント相互接続（「ＰＣＩ」）エクスプレスバスを用い、又は、インフィニバンド若しくはＰＣエクスプレスアドバンストスイッチング（「ＰＣＩｅ−ＡＳ」）等のような外部の電気的若しくは光学的なバス延長又はバスネットワーキングソリューションを用いて、コンピュータ１１２に接続される。
【００４１】
種々の実施形態において、固体記憶デバイス１０２は、デュアルインラインメモリモジュール（「ＤＩＭＭ」）、ドータカード、又はマイクロモジュールの形をとる場合がある。別の実施形態では、固体記憶デバイス１０２は、ラックマウント型ブレード内の素子である。別の実施形態では、固体記憶デバイス１０２は、さらに上位のアセンブリ（例えば、マザーボード、ラップトップ、グラフィックスプロセッサ）上に直接集積されるパッケージ内に収容される。別の実施形態では、固体記憶デバイス１０２を含む個別の構成要素が、中間的なパッケージングを用いることなく、上位のアセンブリ上に直接集積される。
【００４２】
固体記憶デバイス１０２は、１又は複数の固体記憶コントローラ１０４を含み、固体記憶コントローラはそれぞれ書込みデータパイプライン１０６及び読出しデータパイプライン１０８を含み、それぞれ固体記憶機構１１０を含み、それらは図２及び図３に関して以下でさらに詳細に説明される。
【００４３】
システム１００は、固体記憶デバイス１０２に接続される１又は複数のコンピュータ１１２を含む。コンピュータ１１２は、ホスト、サーバ、ストレージエリアネットワーク（「ＳＡＮ」）の記憶コントローラ、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータ又は機器、データベース又は記憶機器、データ収集又はデータ捕捉システム、診断システム、テストシステム、ロボット、ポータブル電子デバイス、無線デバイス等とすることができる。別の実施形態では、コンピュータ１１２はクライアントとすることができ、固体記憶デバイス１０２は、コンピュータ１１２から送信されるデータ要求をサービスするように自律的に動作する。この実施形態では、コンピュータ１１２及び固体記憶デバイス１０２は、コンピュータネットワーク、システムバス、又はコンピュータ１１２と自律的な固体記憶デバイス１０２との間を接続するのに適している他の通信手段を用いて接続されてもよい。
【００４４】
一実施形態では、システム１００は、１又は複数のコンピュータネットワーク１１６を通じて、１又は複数のコンピュータ１１２に接続される１又は複数のクライアント１１４を含む。クライアント１１４は、ホスト、サーバ、ＳＡＮの記憶コントローラ、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドコンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータ又は機器、データベース又は記憶機器、データ収集又はデータ捕捉システム、診断システム、テストシステム、ロボット、ポータブル電子デバイス、無線デバイス等とすることができる。コンピュータネットワーク１１６は、インターネット、ワイドエリアネットワーク（「ＷＡＮ」）、メトロポリタンエリアネットワーク（「ＭＡＮ」）、ローカルエリアネットワーク（「ＬＡＮ」）、トークンリング、無線ネットワーク、ファイバチャネルネットワーク、ＳＡＮ、ネットワークアタッチトストレージ（「ＮＡＳ」）、ＥＳＣＯＮ等、或いは任意のネットワークの組み合わせを含む。また、コンピュータネットワーク１１６は、イーサネット（登録商標） 、トークンリング、ＷｉＦｉ、ＷｉＭａｘ等の一群のＩＥＥＥ８０２ネットワーク技術からのネットワークを含む。
【００４５】
コンピュータネットワーク１１６は、サーバ、スイッチ、ルータ、ケーブリング、無線通信機、及びコンピュータ１１２及びクライアント１１４のネットワーク接続を容易にするために用いられる他の装置を含む場合がある。一実施形態では、システム１００は、コンピュータネットワーク１１６を介して、ピアとして通信する複数のコンピュータ１１２を含む。別の実施形態では、システム１００は、コンピュータネットワーク１１６を介してピアとして通信する複数の固体記憶デバイス１０２を含む。当業者は、１又は複数のクライアント１１４の間に単一又は冗長な接続を備える１又は複数のコンピュータネットワーク１１６及び関連する装置を含む他のコンピュータネットワーク１１６、或いは１又は複数の固体記憶デバイス１０２を備える他のコンピュータ、或いは１又は複数のコンピュータ１１２に接続される１又は複数の固体記憶デバイス１０２を理解されよう。一実施形態では、システム１００は、コンピュータ１１２を用いることなく、コンピュータネットワーク１１８を通じてクライアント１１６に接続される２つ以上の固体記憶デバイス１０２を含む。
【００４６】
システム１００はリダクション装置１１６を含む。リダクション装置１１６は図１において固体記憶デバイス１０２内に示されるが、固体記憶コントローラ１０４、固体記憶機構１１０、コンピュータ１０８等の中に存在してもよい。リダクション装置１１６は、一緒に、又は分散して配置される。当業者は、他の形のリダクション装置１１６を理解するであろう。リダクション装置１１６は以下でさらに詳細に説明される。
【００４７】
システム１００は検出装置１１８も含む。検出装置１１８は、図１において固体記憶デバイス１０４内に示されるが、固体記憶コントローラ１０４、固体記憶機構１０６、コンピュータ１０８等の中に存在してもよい。検出装置１１８は、一緒に、又は分散して配置される。当業者は、他の形の検出装置１１８を理解するであろう。検出装置１１８は以下でさらに詳細に説明される。
【００４８】
システム１００は再構成装置１２０も含む。再構成装置１２０は、図１において固体記憶デバイス１０４内に示されるが、固体記憶コントローラ１０４、固体記憶機構１０６、コンピュータ１０８等の中に存在してもよい。再構成装置１２０は、一緒に、又は分散して配置される場合がある。当業者は、他の形の再構成装置１２０を理解するであろう。再構成装置１２０は以下でさらに詳細に説明される。
【００４９】
固体記憶デバイス
図２は、本発明による、固体記憶デバイス１０２内の書込みデータパイプライン１０６及び読出しデータパイプライン１０８を含む固体記憶デバイスコントローラ２０２の一実施形態２０１を示す概略ブロック図である。固体記憶デバイスコントローラ２０２は、それぞれが固体記憶機構１１０を制御する、複数の固体記憶コントローラ０〜Ｎ  １０４ａ〜ｎを含む。図示の実施形態では、２つの固体コントローラ：固体コントローラ０  １０４ａ及び固体記憶コントローラＮ  １０４ｎが示されており、それぞれ固体記憶機構１１０ａ〜ｎを制御する。図示の実施形態では、固体記憶コントローラ０  １０４ａは、付属の固体記憶機構１１０ａがデータを格納するようにデータチャネルを制御する。固体記憶コントローラＮ  １０４ｎは、格納されるデータに関連付けられるインデックスメタデータチャネルを制御し、関連する固体記憶機構１１０ｎがインデックスメタデータを格納する。代替の実施形態では、固体記憶デバイスコントローラ２０２は、単一の固体記憶機構１１０ａと共に単一の固体コントローラ１０４ａを含む。別の実施形態では、複数の固体記憶コントローラ１０４ａ〜ｎ及び関連する固体記憶機構１１０ａ〜ｎが存在する。一実施形態では、その関連する固体記憶機構１１０ａ〜ｎ−１に結合される１又は複数の固体コントローラ１０４ａ〜ｎ−１がデータを制御し、一方、その関連する固体記憶機構１１０ｎに結合される少なくとも１つの固体記憶コントローラ１０４ｎが、インデックスメタデータを制御する。
【００５０】
一実施形態では、少なくとも１つの固体コントローラ１０４はフィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）であり、コントローラ機能はＦＰＧＡ内にプログラムされる。特定の実施形態では、ＦＰＧＡは、Ｘｉｌｉｎｘ（登録商標）ＦＰＧＡである。別の実施形態では、固体記憶コントローラ１０４は、特定用途向け集積回路（「ＡＳＩＣ」）又はカスタムロジックソリューションのような、固体記憶コントローラ１０４として具体的に設計される構成要素を含む。各固体記憶コントローラ１０４は、典型的には、書込みデータパイプライン１０６及び読出しデータパイプライン１０８を含み、それらは図３に関連してさらに説明される。別の実施形態では、少なくとも１つの固体記憶コントローラ１０４が、ＦＰＧＡ、ＡＳＩＣ及びカスタムロジック構成要素の組み合わせから構成される。
【００５１】
固体記憶機構
固体記憶機構１１０は、バンク２１４内に配置され、双方向記憶入力／出力（「Ｉ／Ｏ」）バス２１０を通じて並列にアクセスされる不揮発性固体記憶素子２１６、２１８、２２０のアレイである。一実施形態では、記憶Ｉ／Ｏバス２１０は、どの時点においても単方向通信することができる。例えば、データが固体記憶機構１１０に書き込まれているとき、その固体記憶機構１１０からデータを読み出すことはできない。別の実施形態では、データは両方向に同時に流れることができる。しかしながら、データバスに関して本明細書において用いられるときに、双方向は、一度に一方向にのみデータを流すことができるデータ経路を指しているが、双方向データバス上を一方向に流れているデータが停止されると、データは双方向データバス上を逆方向に流れることができる。
【００５２】
固体記憶素子（例えば、ＳＳＳ０．０  ２１６ａ）は典型的には、回路基板上の１つのチップ（１又は複数のダイから成る１つのパッケージ）又は１つのダイとして構成される。図示のように、これらのいくつかの素子が１つのチップパッケージ内に、チップパッケージのスタック内に、又はいくつかの他のパッケージ要素内に一緒にパッケージされる場合であっても、固体記憶素子（例えば、２１６ａ）は、他の固体記憶素子（例えば、２１８ａ）から独立して、又は部分的に独立して動作する。図示のように、固体記憶素子２１６、２１８、２２０の列はバンク２１４として示される。図示されるように、固体記憶機構１１０内のｎ×ｍのアレイ２１６、２１８、２２０内に、「ｎ」個のバンク  ２１４ａ〜ｎ、及びバンク毎に「ｍ」個の固体記憶素子２１６ａ〜ｍ、２１８ａ〜ｍ、２２０ａ〜ｍが存在する場合がある。一実施形態では、固体記憶機構１１０ａは、８個のバンク２１４を有し、各バンク２１４当たり２０個の固体記憶素子２１６、２１８、２２０を含み、固体記憶素子１１０ｎは、１つのバンク２１４を有し、バンク２１４当たり２つの固体記憶素子２１６、２１８を含む。一実施形態では、各固体記憶素子２１６、２１８、２２０はシングルレベルセル（「ＳＬＣ」）デバイスから構成される。別の実施形態では、各固体記憶素子２１６、２１８、２２０はマルチレベルセル（「ＭＬＣ」）デバイスから構成される。
【００５３】
一実施形態では、共通の記憶Ｉ／Ｏバス２１０ａ行を共用する多数のバンクのための固体記憶素子（例えば、２１６ｂ、２１８ｂ、２２０ｂ）が一緒にパッケージされる。一実施形態では、固体記憶素子２１６、２１８、２２０が、垂直に積み重ねられた１又は複数のチップを有し、チップ当たり１又は複数のダイを有し、各ダイが独立してアクセスされる。別の実施形態では、固体記憶素子（例えば、ＳＳＳ０．０  ２１６ａ）が、垂直に積み重ねられた１又は複数のチップを有し、チップ当たり１又は複数のダイを有し、ダイ当たり１又は複数の仮想ダイを有して、各仮想ダイが独立してアクセスされる。別の実施形態では、固体記憶素子ＳＳＳ０．０  ２１６ａが、チップ当たり１又は複数のダイを有し、１又は複数のダイのいくつか又は全てが垂直に積み重ねられており、ダイ当たり１又は複数の仮想ダイを有する場合があり、各仮想ダイが独立してアクセスされる。
【００５４】
一実施形態では、２つのダイが垂直に積み重ねられ、グループ当たり４つのスタックを有し、別個のバンク２１４〜ｎ内にそれぞれ８個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．８）２１６ａ〜２２０ａを形成する。別の実施形態では、２０個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ２０．０）２１６が１つの論理バンク２１４ａを形成するため、８個の論理バンクがそれぞれ２０個の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ２０．８）２１６、２１８、２２０を有する。特定のグループの記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．８）２１６ａ、２１８ａ、２２０ａの全ての記憶素子への記憶Ｉ／Ｏバス２１０を介して、固体記憶機構１１０にデータが送信される。記憶制御バス２１２ａを用いて特定のバンク（例えば、バンク−０  ２１４ａ）を選択し、全てのバンク２１４に接続される記憶Ｉ／Ｏバス２１０を介して受信されるデータが、選択されたバンク２１４ａだけに書き込まれるようにする。
【００５５】
好ましい実施形態では、記憶Ｉ／Ｏバス２１０は、１又は複数の独立したＩ／Ｏバス（２１０ａ．ａ〜ｍ、２１０ｎ．ａ〜ｍを含む「ＩＩＯＢａ〜ｍ」）から構成され、各行内の固体記憶素子は独立したＩ／Ｏバスのうちの１つのＩ／Ｏバスを共用し、そのバスは各固体記憶素子２１６、２１８、２２０に並列にアクセスし、全てのバンク２１４が同時にアクセスされるようにする。例えば、記憶Ｉ／Ｏバス２１０の１つのチャネルは、各バンク２１４ａ〜ｎの第１の固体記憶素子２１６ａ、２１８ａ、２２０ａに同時にアクセスする場合がある。記憶Ｉ／Ｏバス２１０の第２のチャネルは、各バンク２１４ａ〜ｎの第２の固体記憶素子２１６ｂ、２１８ｂ、２２０ｂに同時にアクセスする場合がある。固体記憶素子２１６、２１８、２２０の各行は同時にアクセスされる。一実施形態では、固体記憶素子２１６、２１８、２２０がマルチレベルである（物理的に積み重ねられる）場合、固体記憶素子２１６、２１８、２２０の全ての物理レベルが同時にアクセスされる。本明細書において用いられるときに、「同時に」は、実質的に同時のアクセス、すなわち、スイッチング雑音を避けるためにデバイスがわずかに異なる時間間隔においてアクセスされる場合も含む。この文脈において、「同時に」は、コマンド及び／又はデータが次々に個別に送信される順次又はシリアルアクセスと区別するために用いられる。
【００５６】
典型的には、バンク２１４ａ〜ｎは、記憶制御バス２１２を用いて独立して選択される。一実施形態では、バンク２１４は、チップイネーブル又はチップセレクトを用いて選択される。チップセレクト及びチップイネーブルがいずれも利用可能である場合、記憶制御バス２１２は、マルチレベル固体記憶素子２１６、２１８、２２０の１つのレベルを選択することができる。他の実施形態では、記憶制御バス２１２によって他のコマンドが用いられ、マルチレベル固体記憶素子２１６、２１８、２２０の１つのレベルを個別に選択する。固体記憶素子２１６、２１８、２２０は、記憶Ｉ／Ｏバス２１０及び記憶制御バス２１２上で送信される制御情報及びアドレス情報の組み合わせを通じて選択される。
【００５７】
一実施形態では、各固体記憶素子２１６、２１８、２２０は消去ブロックに分割され、各消去ブロックはページに分割される。固体記憶素子２１６、２１８、２２０上の消去ブロックは、物理消去ブロック又は「ＰＥＢ」と呼ばれる。典型的なページは２０００バイト（「２ｋＢ」）である。一例では、固体記憶素子（例えば、ＳＳＳ０．０）は２つのレジスタを含み、２レジスタ固体記憶素子２１６、２１８、２２０が４ｋＢの容量を有するように２つのページをプログラムすることができる。その際、２０個の固体記憶素子２１６、２１８、２２０から成るバンク２１４は８０ｋＢのページ容量を有することになり、それらのページは、記憶Ｉ／Ｏバス２１０のチャネルを出る同じアドレスでアクセスされる。
【００５８】
８０ｋＢの固体記憶素子２１６、２１８、２２０から成るバンク２１４内のこのページ群は、論理ページ又は仮想ページと呼ばれる。同様に、バンク２１４ａの各記憶素子２１６ａ〜ｍの消去ブロックをグループ化して、論理消去ブロック又は仮想消去ブロックを形成することができる。好ましい実施形態では、１つの固体記憶素子２１６、２１８、２２０内のページの消去ブロックは、１つの固体記憶素子２１６、２１８、２２０内で１つの消去コマンドが受信されるときに消去される。固体記憶素子２１６、２１８、２２０内の消去ブロック、ページ、プレーン又は他の論理的及び物理的分割のサイズ及び数は、技術が進歩するのに応じて時間と共に変化することが予想されるが、新たな構成と一致する数多くの実施形態が可能であり、本明細書における概要と一致することが予想される。
【００５９】
典型的には、固体記憶素子２１６、２１８、２２０内の或る特定のロケーションにパケットが書き込まれるときに、そのパケットが特定のバンクの特定の記憶素子の特定の物理消去ブロックに固有である特定のページ内の１つのロケーションに書き込まれることが意図される場合、１つの物理アドレスが記憶Ｉ／Ｏバス２１０上に送出され、それにパケットが続く。その物理アドレスは、そのページ内の指定されたロケーションにパケットを送るために、固体記憶素子２１６、２１８、２２０に関する十分な情報を含む。適切なページに到達し、かつデータパケットを１つの行の記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）内の同じようにアドレス指定されるページに書き込むのを避けるように、記憶素子の行内の全ての記憶素子（例えば、ＳＳＳ０．０〜ＳＳＳ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）が記憶Ｉ／Ｏバス２１０ａ．ａ内の適切なバスによって同時にアクセスされるので、データパケットが書き込まれるべき正しいページを有する固体記憶素子ＳＳＳ０．０  ２１６ａを含むバンク２１４ａは、記憶制御バス２１２によって同時に選択される。
【００６０】
同様に、単一のバンク２１４ａ、及びそのバンク２１４ａ内の適切なページを選択するために、記憶Ｉ／Ｏバス２１２上の読出しコマンドは、記憶制御バス２１２上に同時のコマンドを必要とする。好ましい実施形態では、読出しコマンドはページ全体を読み出し、バンク２１４内に複数の固体記憶素子２１６、２１８、２２０が並列に存在するので、１つの読出しコマンドを用いて、１つの論理ページ全体が読み出される。しかしながら、バンクインターリーブに関して以下で説明されるように、読出しコマンドはサブコマンドに分割される場合がある。書込み動作において１つの論理ページがアクセスされる。
【００６１】
或る消去ブロックを消去するために、特定の消去ブロックを消去するための特定の消去ブロックアドレスを有する消去ブロック消去コマンドが記憶Ｉ／Ｏバス２１０上に送出される。典型的には、それぞれ特定の消去ブロックを消去するための特定の消去ブロックアドレスを有する消去ブロック消去コマンドを記憶Ｉ／Ｏバス２１０の並列の経路上に送出して、１つの論理消去ブロックを消去することができる。同時に、記憶制御バス２１２を介して特定のバンク（例えば、バンク−０  ２１４ａ）を選択して、全てのバンク（バンク１〜Ｎ  ２１４ｂ〜ｎ）内の同じようにアドレス指定される消去ブロックが消去されないようにする。記憶Ｉ／Ｏバス２１０及び記憶制御バス２１２の組み合わせを用いて、他のコマンドが特定のロケーションに送出される場合もある。当業者は、双方向記憶Ｉ／Ｏバス２１０及び記憶制御バス２１２を用いて特定の記憶ロケーションを選択する他の方法を理解するであろう。
【００６２】
一実施形態では、パケットが固体記憶機構１１０に順次に書き込まれる。例えば、パケットが記憶素子２１６のバンク２１４ａの記憶書込みバッファに流し込まれ、バッファがフル（満杯）であるときに、それらのパケットは指定された論理ページにプログラムされる。その後、パケットが記憶書込みバッファを再び満たし、フルになるときに、それらのパケットは次の論理ページに書き込まれる。次の論理ページは同じバンク２１４ａ内にあっても、別のバンク（例えば、２１４ｂ）内にあってもよい。このプロセスは、典型的には論理消去ブロックが満たされるまで、論理ページ単位で次々に続けられる。別の実施形態では、そのプロセスを論理消去ブロック単位で次々に続けることによって、論理消去ブロック境界を越えてパケットが流し続けられる。
【００６３】
読出し・変更・書込み動作において、オブジェクトに関連付けられるデータパケットが位置特定され、読出し動作において読み出される。変更されている変更後のオブジェクトのデータセグメントは、そのセグメントが読み出されたロケーションには書き込まれない。代わりに、変更後のデータセグメントは再びデータパケットに変換され、その後、現在書き込まれている論理ページ内の次に利用可能なロケーションに順次に書き込まれる。個々のデータパケットのためのオブジェクトインデックスエントリは、変更後のデータセグメントを含むパケットを指すように変更される。変更されていない同じオブジェクトに関連付けられるデータパケットのためのオブジェクトインデックス内の１又は複数のエントリは、変更されていないデータパケットの元のロケーションへのポインタを含む。こうして、例えば、オブジェクトの先行するバージョンを保持するために、元のオブジェクトが保持される場合には、元のオブジェクトは、そのオブジェクトインデックス内に、当初に書き込まれたような全てのデータパケットへのポインタを有する。新たなオブジェクトは、そのオブジェクトインデックス内に、元のデータパケットのいくつかへのポインタと、現在書き込まれている論理ページ内の変更後のデータパケットへのポインタとを有する。
【００６４】
コピー動作では、オブジェクトインデックスは、固体記憶機構１１０内に格納される複数のパケットにマッピングされる元のオブジェクトのためのエントリを含む。コピーが行なわれるとき、新たなオブジェクトが作成され、オブジェクトインデックス内に、新たなオブジェクトを元のパケットにマッピングする新たなエントリが作成される。また、新たなオブジェクトは固体記憶機構１１０にも書き込まれ、そのロケーションがオブジェクトインデックス内の新たなエントリにマッピングされる。新たなオブジェクトパケットを用いて、元のオブジェクトにおいてコピーに伝搬されなかった変更が行なわれており、オブジェクトインデックスが失われるか又は破損する場合に参照される、元のオブジェクト内のパケットを識別することができる。
【００６５】
都合のよいことに、パケットを順次に書き込むことは、固体記憶機構１１０をより均等に使用するのを容易にし、固体記憶デバイスコントローラ２０２が、固体記憶機構１１０内の記憶ホットスポット及び種々の論理ページ内の均等な使用をモニターすることができるようにする。また、パケットを順次に書き込むことは、強力で効率的なガーベージコレクションシステムを容易にし、それについては以下で詳細に説明される。当業者は、データパケットの順次記憶に関する他の利点も理解するであろう。
【００６６】
固体記憶デバイスコントローラ
種々の実施形態において、固体記憶デバイスコントローラ２０２は、データバス２０４と、ローカルバス２０６と、バッファコントローラ２０８と、バッファ０〜Ｎ  ２２２ａ〜ｎと、マスタコントローラ２２４と、ダイレクトメモリアクセス（「ＤＭＡ」）コントローラ２２６と、メモリコントローラ２２８と、ダイナミックメモリアレイ２３０と、スタティックランダムメモリアレイ２３２と、管理コントローラ２３４と、管理バス２３６と、システムバス２４０へのブリッジ２３８と、種々雑多のロジック２４２とを含み、それらは以下で説明される。他の実施形態では、システムバス２４０は、そのうちのいくつかがリモートＤＭＡ（「ＲＤＭＡ」）コントローラ２４６を含む場合がある１又は複数のネットワークインターフェースカード（「ＮＩＣ」）２４４と、１又は複数の中央処理ユニット（「ＣＰＵ」）２４８と、１又は複数の外部メモリコントローラ２５０及び関連する外部メモリアレイ２５２と、１又は複数の記憶コントローラ２５４と、ピアコントローラ２５６と、特定用途向けプロセッサ２５８とに結合され、それらは以下で説明される。システムバス２４０に接続される構成要素２４４〜２５８は、コンピュータ１１２内に配置されるか、又は他のデバイス内に配置される。
【００６７】
通常、固体記憶コントローラ（複数可）１０４は、記憶Ｉ／Ｏバス２１０を介して固体記憶機構１１０にデータを通信する。固体記憶機構がバンク２１４内に配置され、各バンク２１４が並列にアクセスされる複数の記憶素子２１６、２１８、２２０を含む典型的な実施形態では、記憶Ｉ／Ｏバス２１０はバスのアレイであり、記憶素子２１６、２１８、２２０の行毎に１つのバスがバンク２１４に及ぶ。本明細書において用いられるときに、用語「記憶Ｉ／Ｏバス」は、１つの記憶Ｉ／Ｏバス２１０、又は独立したデータバス２０４のアレイを指す。好ましい実施形態では、記憶素子（例えば、２１６ａ、２１８ａ、２２０ａ）の行にアクセスする各記憶Ｉ／Ｏバス２１０は、記憶素子２１６ａ、２１８ａ、２２０ａの行内でアクセスされる記憶部（例えば、消去ブロック）のための論理−物理マッピングを含む。このマッピング（又は不良ブロックリマッピング）によって、第１の記憶部が故障するか、又は部分的に故障するか、又はアクセスすることができないか、又は他の何らかの問題を有する場合には、１つの記憶部の物理アドレスにマッピングされる論理アドレスを異なる記憶部にリマッピングすることができるようになる。
【００６８】
データは、要求側デバイス１５５から、システムバス２４０、ブリッジ２３８、ローカルバス２０６、バッファ（複数可）２２２を通り、そして最終的にデータバス２０４を介して固体記憶コントローラ（複数可）１０４に通信される。データバス２０４は典型的には、バッファコントローラ２０８によって制御される１又は複数のバッファ２２２ａ〜ｎに接続される。バッファコントローラ２０８は典型的には、ローカルバス２０６からバッファ２２２へのデータの転送、さらにはデータバス２０４を通ってパイプライン入力バッファ３０６及び出力バッファ３３０へのデータの転送を制御する。バッファコントローラ２２２は典型的には、異なるクロック領域を考慮する、データ衝突を避ける等のために、要求側デバイスから到着するデータをいかにしてバッファ２２２に一時的に格納し、その後、データバス２０４に転送することができるかを、又はその逆の流れを制御する。バッファコントローラ２０８は典型的には、マスタコントローラ２２４と共に機能して、データフローを調整する。データが到着すると、データはシステムバス２４０に到着し、ブリッジ２３８を通じて、ローカルバス２０６に転送される。
【００６９】
典型的には、データは、マスタコントローラ２２４及びバッファコントローラ２０８によって指示されるように、ローカルバス２０６から１又は複数のデータバッファ２２２に転送される。その後、データはバッファ（複数可）２２２からデータバス２０４に流れ、固体コントローラ１０４を通って、ＮＡＮＤフラッシュ又は他の記憶媒体のような固体記憶機構１１０に流れる。好ましい実施形態では、データ、及びデータと共に到着する関連するバンド外メタデータ（「オブジェクトメタデータ」）が、１又は複数の固体記憶コントローラ１０４ａ〜１０４ｎ−１及び関連する固体記憶機構１１０ａ〜１１０ｎ−１を含む１又は複数のデータチャネルを用いて通信され、一方、少なくとも１つのチャネル（固定記憶コントローラ１０４ｎ、固体記憶機構１１０ｎ）が、インデックス情報及び固体記憶デバイス１０２の内部で生成される他のメタデータのようなバンド内メタデータに専用化される。
【００７０】
ローカルバス２０６は典型的には双方向バス又は１組のバスであり、固体記憶デバイスコントローラ２０２内部のデバイス間、及び固体記憶デバイス１０２内部のデバイスとシステムバス２４０に接続されるデバイス２４４〜２５８との間でデータ及びコマンドを通信することができるようにする。ブリッジ２３８は、ローカルバス２０６とシステムバス２４０との間の通信を容易にする。当業者は、バス２４０、２０６、２０４、２１０及びブリッジ２３８のリング型構造又は交換式のスター型構成及び機能のような他の実施形態を理解するであろう。
【００７１】
システムバス２４０は、典型的にはコンピュータ１１２のバスであるか、或いは固体記憶デバイス１０２が設置又は接続される他のデバイスである。一実施形態では、システムバス２４０はＰＣＩ−ｅバス、シリアルアドバンストテクノロジーアタッチメント（「シリアルＡＴＡ」）バス、パラレルＡＴＡ等とすることができる。別の実施形態では、システムバス２４０は、スモールコンピュータシステムインターフェース（「ＳＣＳＩ」）、ファイヤワイヤ、ファイバチャネル、ＵＳＢ、ＰＣＩｅ−ＡＳ等のような外部バスである。固体記憶デバイス１０２は、デバイス内部に納まるように、又は外部に接続されるデバイスとしてパッケージされる。
【００７２】
固体記憶デバイスコントローラ２０２は、固体記憶デバイス１０２内の上位の機能を制御するマスタコントローラ２２４を含む。種々の実施形態において、マスタコントローラ２２４は、オブジェクト要求又は他の要求を解釈することによってデータフローを制御し、データと関連付けられるオブジェクト識別子を関連するデータの物理的なロケーションにマッピングするためにインデックスの作成を指示し、ＤＭＡ要求等を調整する。本明細書において記述される機能の多くは、マスタコントローラ２２４によって全体として、又は部分的に制御される。
【００７３】
一実施形態では、マスタコントローラ２２４は、埋込コントローラ（複数可）を用いる。別の実施形態では、マスタコントローラ２２４はダイナミックメモリアレイ２３０（ダイナミックランダムアクセスメモリ「ＤＲＡＭ」）、スタティックメモリアレイ３２３（スタティックランダムアクセスメモリ「ＳＲＡＭ」）等のようなローカルメモリを用いる。一実施形態では、ローカルメモリは、マスタコントローラ２２４を用いて制御される。別の実施形態では、マスタコントローラは、メモリコントローラ２２８を介して、ローカルメモリにアクセスする。別の実施形態では、マスタコントローラはＬｉｎｕｘサーバを動作させ、ワールドワイドウェブ、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）等のような種々の共通サーバインターフェースをサポートする。別の実施形態では、マスタコントローラ２２４はナノプロセッサを用いる。マスタコントローラ２２４は、プログラマブルロジック又は標準ロジックを用いて、又は上記で列挙されたコントローラタイプの任意の組み合わせを用いて構成される。当業者は、マスタコントローラのための数多くの実施形態を理解するであろう。
【００７４】
一実施形態では、記憶デバイス１５２／固体記憶デバイスコントローラ２０２が複数のデータ記憶デバイス／固体記憶機構１１０ａ〜ｎを管理する場合、マスタコントローラ２２４は、固体記憶コントローラ１０４ａ〜ｎのような内部コントローラ間で作業負荷を分割する。例えば、マスタコントローラ２２４は、付属のデータ記憶デバイスのそれぞれにオブジェクトの一部が格納されるように、書き込まれるオブジェクトをデータ記憶デバイス（例えば、固体記憶機構１１０ａ〜ｎ）に分割することができる。この特徴は、より迅速に記憶し、オブジェクトにアクセスすることができるようにする性能改善である。一実施形態では、マスタコントローラ２２４はＦＰＧＡを用いて実現される。別の実施形態では、マスタコントローラ２２４内のファームウエアは、管理バス２３６を通じて、ＮＩＣ２４４に接続されるネットワークを介してシステムバス２４０を通じて、又はシステムバス２４０に接続される他のデバイスを通じて更新される。
【００７５】
一実施形態では、オブジェクトを管理するマスタコントローラ２２４は、ブロック記憶をエミュレートし、それにより、コンピュータ１０２、或いは記憶デバイス１５２／固体記憶デバイス１０２に接続される他のデバイスが、記憶デバイス１５２／固体記憶デバイス１０２をブロック記憶デバイスと見なし、データを記憶デバイス１５２／固体記憶デバイス１０２内の固有の物理アドレスに送信するようにする。その際、マスタコントローラ２２４はブロックを分割し、オブジェクトと同様にデータブロックを格納する。その後、マスタコントローラ２２４は、ブロック、及びそのブロックと共に送信される物理アドレスを、マスタコントローラ２２４によって特定される実際のロケーションにマッピングする。そのマッピングは、オブジェクトインデックスに格納される。典型的には、ブロックをエミュレートするために、コンピュータ１１２、クライアント１１４、又は記憶デバイス１５２／固体記憶デバイス１０２をブロック記憶デバイスとして使用することを望む他のデバイス内のドライバ内にブロックデバイスアプリケーションプログラムインターフェース（「ＡＰＩ」）が設けられる。
【００７６】
別の実施形態では、マスタコントローラ２２４は、ＮＩＣコントローラ２４４及び埋込ＲＤＭＡコントローラ２４６と協調して、データ及びコマンドセットのジャストインタイムＲＤＭＡ転送を送達する。ＮＩＣコントローラ２４４は、非透過ポートに隠され、カスタムドライバを使用することができるようにする。また、クライアント１１４上のドライバが、標準的なスタックＡＰＩを使用し、ＮＩＣ２４４と共に動作するＩ／Ｏメモリドライバを通じて、コンピュータネットワーク１１８にアクセスする。
【００７７】
一実施形態では、マスタコントローラ２２４は、独立ドライブの冗長アレイ（「ＲＡＩＤ」）コントローラでもある。データ記憶デバイス／固体記憶デバイス１０２が１又は複数の他のデータ記憶デバイス／固体記憶デバイス１０２とネットワーク接続される場合、マスタコントローラ２２４は、シングルティアＲＡＩＤ、マルチティアＲＡＩＤ、プログレッシブＲＡＩＤ等のためのＲＡＩＤコントローラとすることができる。また、マスタコントローラ２２４は、いくつかのオブジェクトをＲＡＩＤアレイに格納することができるようにし、他のオブジェクトを、ＲＡＩＤを用いることなく格納することができるようにする。別の実施形態では、マスタコントローラ２２４は分散ＲＡＩＤコントローラ素子とすることができる。別の実施形態では、マスタコントローラ２２４は、多数のＲＡＩＤ、分散ＲＡＩＤ、及び他の箇所で記述されるような他の機能を含む場合がある。一実施形態では、マスタコントローラ２２４は、ＲＡＩＤのような構造内のデータの記憶を制御し、その構造では、パリティ情報が論理ページの１又は複数の記憶素子２１６、２１８、２２０内に格納され、パリティ情報が同じ論理ページの他の記憶素子２１６、２１８、２２０内に格納されるデータを保護する。
【００７８】
一実施形態では、マスタコントローラ２２４は、単一又は冗長ネットワークマネージャ（例えば、スイッチ）と協調して、ルーティングの確立、帯域幅利用の均衡化、フェイルオーバ等を実行する。別の実施形態では、マスタコントローラ２２４は、特定用途向け集積ロジック（ローカルバス２０６経由）及び関連するドライバソフトウエアと協調する。別の実施形態では、マスタコントローラ２２４は、付属の特定用途向けプロセッサ２５８又はロジック（外部システムバス２４０経由）及び関連するドライバソフトウエアと協調する。別の実施形態では、マスタコントローラ２２４は遠隔した特定用途向けロジック（コンピュータネットワーク１１８経由）及び関連するドライバソフトウエアと協調する。別の実施形態では、マスタコントローラ２２４は、ローカルバス２０６又は外部バス付属ハードディスクドライブ（「ＨＤＤ」）記憶コントローラと協調する。
【００７９】
一実施形態では、マスタコントローラ２２４は、１又は複数の記憶コントローラ２５４と通信し、記憶デバイス／固体記憶デバイス１０２は、ＳＣＳＩバス、インターネットＳＣＳＩ（「ｉＳＣＳＩ」）、ファイバチャネル等を通じて接続される記憶デバイスとして現れる。その一方で、記憶デバイス／固体記憶デバイス１０２は自律的にオブジェクトを管理することができ、オブジェクトファイルシステム又は分散オブジェクトファイルシステムとして現れる。マスタコントローラ２２４は、ピアコントローラ２５６及び／又は特定用途向けプロセッサ２５８によってアクセスされる。
【００８０】
別の実施形態では、マスタコントローラ２２４は自律統合管理コントローラと協調して、ＦＰＧＡコード及び／又はコントローラソフトウエアを周期的に検証し、実行（リセット）中にＦＰＧＡコードを検証し、かつ／又はパワーオン（リセット）中にコントローラソフトウエアを検証し、外部リセット要求をサポートし、ウォッチドッグタイムアウトに起因するリセット要求をサポートし、電圧、電流、電源、温度及び他の環境測定及びしきい値割込みの設定をサポートする。別の実施形態では、マスタコントローラ２２４は、再利用のために消去ブロックを解放するガーベージコレクションを管理する。別の実施形態では、マスタコントローラ２２４はウェアレベリングを管理する。別の実施形態では、マスタコントローラ２２４によって、データ記憶デバイス／固体記憶デバイス１０２を複数の論理デバイスに分割することができるようになり、分割に基づいて媒体を暗号化することができるようになる。さらなる実施形態では、マスタコントローラ２２４は、高度な多ビットＥＣＣによる訂正を用いる固体記憶コントローラ１０４をサポートする。当業者は、記憶コントローラ１５２内、さらに具体的には固体記憶デバイス１０２内のマスタコントローラ２２４の他の特徴及び機能を理解するであろう。
【００８１】
一実施形態では、固体記憶デバイスコントローラ２０２はメモリコントローラ２２８を含み、メモリコントローラは、ダイナミックランダムメモリアレイ２３０及び／又はスタティックランダムメモリアレイ２３２を制御する。上記のように、メモリコントローラ２２８は、マスタコントローラ２２４から独立しているか、又は一体化されている。メモリコントローラ２２８は典型的には、ＤＲＡＭ（ダイナミックランダムメモリアレイ２３０）及びＳＲＡＭ（スタティックランダムメモリアレイ２３２）のような或るタイプの揮発性メモリを制御する。他の例では、メモリコントローラ２２８は、電気的消去可能なプログラマブルリードオンリーメモリ（「ＥＥＰＲＯＭ」）等のような他のメモリタイプも制御する。他の実施形態では、メモリコントローラ２２８は、２つ以上のメモリタイプを制御し、メモリコントローラ２２８は２つ以上のコントローラを含む場合もある。典型的には、メモリコントローラ２２８は、実現可能である程度までＳＲＡＭ２３２を制御し、ＤＲＡＭ２３０によってＳＲＡＭ２３２を補う。
【００８２】
一実施形態では、オブジェクトインデックスはメモリ２３０、２３２に格納され、その後、固体記憶機構１１０ｎ又は他の不揮発性メモリのチャネルに周期的にオフロード(off-load:アンロード)される。当業者は、メモリコントローラ２２８、ダイナミックメモリアレイ２３０及びスタティックメモリアレイ２３２の他の使用及び構成を理解するであろう。
【００８３】
一実施形態では、固体記憶デバイスコントローラ２０２は、ＤＭＡコントローラ２２６を含み、ＤＭＡコントローラは、記憶デバイス／固体記憶デバイス１０２と、１又は複数の外部メモリコントローラ２５０及び関連する外部メモリアレイ２５２及びＣＰＵ２４８との間のＤＭＡ動作を制御する。外部メモリコントローラ２５０及び外部メモリアレイ２５２は、それらが記憶デバイス／固体記憶デバイス１０２の外部にあることから外部と呼ばれることに留意されたい。さらに、ＤＭＡコントローラ２２６は、ＮＩＣ２４４及び関連するＲＤＭＡコントローラ２４６を通じて、要求側デバイスと共にＲＤＭＡ動作を制御する。
【００８４】
一実施形態では、固体記憶デバイスコントローラ２０２は、管理バス２３６に接続される管理コントローラ２３４を含む。典型的には、管理コントローラ２３４は、記憶デバイス／固体記憶デバイス１０２の環境的なメトリクス及びステータスを管理する。管理コントローラ２３４は、管理バス２３６を介して、デバイス温度、ファン速度、電源設定等をモニターすることができる。管理コントローラは、ＦＰＧＡコード及びコントローラソフトウエアを格納するための消去可能なプログラマブルリードオンリーメモリ（「ＥＥＰＲＯＭ」）の読出し及びプログラミングをサポートすることができる。典型的には、管理バス２３６は、記憶デバイス／固体記憶デバイス１０２内の種々の構成要素に接続される。管理コントローラ２３４は、ローカルバス２０６を介して、警報、割込み等を通信するか、或いは、システムバス２４０又は他のバスへの別の接続を含む。一実施形態では、管理バス２３６は集積回路間（「Ｉ２Ｃ」）バスである。当業者は、管理バス２３６によって記憶デバイス／固体記憶デバイス１０２の構成要素に接続される管理コントローラ２３４の他の関連する機能及び使用を理解するであろう。
【００８５】
一実施形態では、固定記憶デバイスコントローラ２０２は、種々雑多のロジック２４２を含み、それらのロジックは特定用途向けにカスタマイズされる。典型的には、固体記憶デバイスコントローラ２０２又はマスタコントローラ２２４がＦＰＧＡ又は他の構成可能なコントローラを用いて構成される場合、特定の用途、顧客の要件、格納要件等に基づいて、カスタムロジックが含まれる。
【００８６】
データパイプライン
図３は、本発明による、固体記憶デバイス１０２内の書込みデータパイプライン１０６及び読出しデータパイプライン１０８を有する固体記憶コントローラ１０４の一実施形態３００を示す概略ブロック図である。実施形態３００は、データバス２０４と、ローカルバス２０６と、バッファ制御部２０８とを含み、それらは図２の固体記憶デバイスコントローラ２０２に関連して説明したのと実質的に同様である。書込みデータパイプラインは、パケッタイザ３０２と、誤り訂正符号（「ＥＣＣ」）生成器３０４とを含む。他の実施形態では、書込みデータパイプラインは、入力バッファ３０６と、書込み同期バッファ３０８と、書込みプログラムモジュール３１０と、圧縮モジュール３１２と、暗号化モジュール３１４と、ガーベージコレクタバイパス３１６（読出しデータパイプライン内に一部を有する）と、媒体暗号化モジュール３１８と、書込みバッファ３２０とを含む。読出しデータパイプライン１０８は、読出し同期バッファ３２８と、ＥＣＣ訂正モジュール３２２と、デパッケタイザ３２４と、アライメントモジュール３２６と、出力バッファ３３０とを含む。他の実施形態では、読出しデータパイプライン１０８は、媒体暗号解読モジュール３３２と、ガーベージコレクタバイパス３１６の一部と、暗号解読モジュール３３４と、解凍モジュール３３６と、読出しプログラムモジュール３３８とを含む。固体記憶コントローラ１０４は、制御及びステータスレジスタ３４０及び制御キュー３４２と、バンクインターリーブコントローラ３４４と、同期バッファ３４６と、記憶バスコントローラ３４８と、マルチプレクサ（「ＭＵＸ」）３５０とを含む。固体記憶コントローラ１０４並びに関連する書込みデータパイプライン１０６及び読出しデータパイプライン１０８の構成要素は以下で説明される。他の実施形態では、同期固体記憶機構１１０が用いられる場合があり、同期バッファ３０８、３２８は不要とすることができる。
【００８７】
書込みデータパイプライン
書込みデータパイプライン１０６は、パケッタイザ３０２を含み、パケッタイザは、固体記憶機構に書き込まれるデータ又はメタデータセグメントを直接、又は別の書込みデータパイプライン１０６ステージを通じて間接的に受信し、固体記憶機構１１０のサイズに合わせた１又は複数のパケットを生成する。データ又はメタデータセグメントは典型的にはオブジェクトの一部であるが、オブジェクト全体を含む場合もある。別の実施形態では、データセグメントはデータのブロックの一部であるが、データのブロック全体を含む場合もある。典型的には、オブジェクトはコンピュータ１１２、クライアント１１４、又は他のコンピュータ又はデバイスから受信され、固体記憶デバイス１０２又はコンピュータ１１２に対して流されるデータセグメントにおいて固体記憶デバイス１０２に送信される。また、データセグメントは、データパーセル等の別の名称によって知られている場合もあるが、本明細書において参照されるように、オブジェクト又はデータブロックの全体又は一部を含む。
【００８８】
各オブジェクトは１又は複数のパケットとして格納される。各オブジェクトは、１又は複数のコンテナパケットを有する場合がある。各パケットはヘッダを含む。ヘッダは、ヘッダタイプフィールドを含む。タイプフィールドは、データと、オブジェクト属性と、メタデータと、データセグメントデリミタ（マルチパケット）と、オブジェクト構造と、オブジェクトリンケージ等を含む。また、ヘッダは、そのパケットに含まれるデータのバイト数のような、パケットサイズに関する情報を含む。パケットの長さはパケットタイプによって確立される。ヘッダは、オブジェクトに対するパケットの関係を確立する情報を含む。一例として、オブジェクト内のデータセグメントのロケーションを識別するために、データパケットヘッダ内でオフセットを使用する。当業者は、パケッタイザ３０２によってデータに追加されるヘッダ内に含まれる他の情報、及びデータパケットに追加される他の情報を理解するであろう。
【００８９】
各パケットは、ヘッダと、データ又はメタデータセグメントからの可能なデータとを含む。各パケットのヘッダは、パケットと、そのパケットが属するオブジェクトとを関連付ける関連情報を含む。例えば、ヘッダは、そのデータパケットが形成されたデータセグメント、オブジェクト又はデータブロックを指示するオブジェクト識別子及びオフセットを含む場合がある。また、ヘッダは、パケットを格納するために記憶バスコントローラ３４８によって用いられる論理アドレスを含む。また、ヘッダは、パケット内に含まれるバイト数のような、パケットサイズに関する情報を含む。また、ヘッダは、データセグメント又はオブジェクトを再構成するときに、オブジェクト内の他のパケットに対してそのデータセグメントが属するロケーションを識別するシーケンス番号を含む。ヘッダはヘッダタイプフィールドを含む。タイプフィールドは、データと、オブジェクト属性と、メタデータと、データセグメントデリミタ（マルチパケット）と、オブジェクト構造と、オブジェクトリンケージ等を含む。当業者は、パケッタイザ３０２によってデータ又はメタデータに追加されるヘッダ内に含まれる他の情報、及びパケットに追加される他の情報を理解するであろう。
【００９０】
書込みデータパイプライン１０６は、ＥＣＣ生成器３０４を含み、ＥＣＣ生成器は、パケッタイザ３０２から受信される１又は複数のパケットのための１又は複数の誤り訂正符号（「ＥＣＣ」）を生成する。ＥＣＣ生成器３０４は典型的には或る誤り訂正アルゴリズムを用いて、そのパケットと共に格納されるＥＣＣを生成する。そのパケットと共に格納されるＥＣＣは典型的には、伝送及び格納を通じてデータ内に導入される誤りを検出し、訂正する。一実施形態では、パケットは、長さＮの符号化されていないブロックとして、ＥＣＣ生成器３０４内に流される。長さＳのシンドロームが計算され、追加され、長さＮ＋Ｓの符号化されたブロックとして出力される。シンドロームＳと組み合わせられた長さＮのデータパケットは、ＥＣＣチャンク又はＥＣＣブロックを形成する。Ｎ及びＳの値は、特定の性能、効率及びロバストネスメトリクスを達成するために選択されるアルゴリズムの特性に依存する。好ましい実施形態では、ＥＣＣチャンクとパケットとの間に決まった関係はない。パケットは２つ以上のＥＣＣチャンクを含む場合があり、ＥＣＣチャンクは２つ以上のパケットを含む場合があり、第１のパケットはＥＣＣチャンク内のいずれかの場所において終了する場合があり、第２のパケットは、同じＥＣＣチャンク内の第１のパケットの終了後に開始する場合がある。好ましい実施形態では、ＥＣＣアルゴリズムは動的には変更されない。好ましい実施形態では、データパケットと共に格納されるＥＣＣは、３ビット以上の誤りを訂正するだけの頑強性を有する。
【００９１】
頑強なＥＣＣアルゴリズムを用いて、単一以上のビット訂正又は二重ビットを訂正することができるようにすることによって、固体記憶機構１１０の寿命を延ばすことができる。例えば、固体記憶機構１１０内の記憶媒体としてフラッシュメモリが用いられる場合には、フラッシュメモリは、消去サイクル当たり、誤りを生じることなく約１００，０００回書き込まれる場合がある。この使用限界は、頑強なＥＣＣアルゴリズムを用いて延長される。固体記憶デバイス１０２上にＥＣＣ生成器３０４及び対応するＥＣＣ訂正モジュール３２２を有するとき、その固体記憶デバイス１０２は内部で誤りを訂正することができ、単一ビット訂正のような頑強性がより低いＥＣＣアルゴリズムが用いられる場合よりも長い耐用寿命を有する。しかしながら、他の実施形態では、ＥＣＣ生成器３０４は、頑強性がより低いアルゴリズムを用いる場合があり、単一ビット又は二重ビット誤りを訂正することができる。別の実施形態では、固体記憶デバイス１１０は、容量を高めるために、マルチレベルセル（「ＭＬＣ」）フラッシュのような信頼性の低い記憶機構を含む場合があり、その記憶機構は、頑強性がより高いＥＣＣアルゴリズムを用いなければ、十分な信頼性を得られない場合がある。
【００９２】
一実施形態では、書込みパイプライン１０６は入力バッファ３０６を含み、入力バッファは固体記憶機構１１０に書き込まれるデータセグメントを受信し、パケッタイザ３０２のような書込みデータパイプライン１０６の次のステージ（又は、さらに複雑な書込みデータパイプライン１０６の場合には他のステージ）が次のデータセグメントを処理する準備することができるまで、入ってくるデータセグメントを格納する。入力バッファ３０６は典型的には、適切なサイズのデータバッファを用いて、データセグメントが受信される速度と、書込みデータパイプライン１０６によって処理される速度とが異なることができるようにする。データバス２０４の動作の効率を改善するために、入力バッファ３０６によって、データバス２０４は、書込みデータパイプライン１０６が対応することができる速度よりも速い速度で書込みデータパイプライン１０６にデータを転送することができるようにもなる。典型的には、書込みデータパイプライン１０６が入力バッファ３０６を含まないとき、バッファリング機能は、他の場所、例えば、固体記憶デバイス１０２内であるが、書込みデータパイプライン１０６の外部において、又はネットワークインターフェースカード（「ＮＩＣ」）内のようなコンピュータ１１２において、又は、例えばリモートダイレクトメモリアクセス（「ＲＤＭＡ」）を用いるときには別のデバイスにおいて実行される。
【００９３】
別の実施形態では、書込みデータパイプライン１０６は書込み同期バッファ３０８も含み、書込み同期バッファは、固体記憶機構１１０にパケットを書き込む前に、ＥＣＣ生成器３０４から受信されたパケットをバッファリングする。書込み同期バッファ３０８は、ローカルクロック領域と固体記憶クロック領域との間の境界に配置され、クロック領域の差を考慮するためにバッファリングを提供する。他の実施形態では、同期固体記憶機構１１０が用いられる場合があり、同期バッファ３０８、３２８は不要とすることができる。
【００９４】
一実施形態では、書込みデータパイプライン１０６は媒体暗号化モジュール３１８も含み、媒体暗号化モジュールは、パケッタイザ３０２から１又は複数のパケットを直接、又は間接的に受信し、それらのパケットをＥＣＣ生成器３０４に送信する前に、固体記憶デバイス１０２に固有の暗号キーを用いて、１又は複数のパケットを暗号化する。典型的には、ヘッダを含むパケット全体が暗号化される。別の実施形態では、ヘッダは暗号化されない。本明細書では、暗号キーは、実施形態が暗号化による保護を必要とする場合に、固体記憶機構１１０を統合する実施形態の外部において管理される秘密暗号キーを意味するものと理解されたい。媒体暗号化モジュール３１８及び対応する媒体暗号解読モジュール３３２は、固体記憶機構１１０内に格納されるデータのための或る程度のセキュリティを提供する。例えば、媒体暗号化モジュール３１８を用いてデータが暗号化される場合、固体記憶機構１１０が、異なる固体記憶コントローラ１０４、固体記憶デバイス１０２又はコンピュータ１１２に接続されても、固体記憶機構１１０へのデータの書込み中に用いられたのと同じ暗号キーを使用しない限り、固体記憶機構１１０の内容は典型的には読み出すことはできない。
【００９５】
典型的な実施形態では、固体記憶デバイス１０２は、不揮発性記憶機構内に暗号キーを格納しないので、外部から暗号キーにアクセスすることができない。暗号キーは、初期化中に、固体記憶コントローラ１０４に与えられる。固体記憶デバイス１０２は非秘密の暗号用のノンスを使用及び格納する場合があり、そのノンスは暗号キーと共に用いられる。パケット毎に異なるノンスを用いて、格納することができる。暗号化アルゴリズムによる保護を改善するために、固有のノンスを用いて、複数のパケット間でデータセグメントを分割することができる。暗号キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、又は固体記憶コントローラ１０４によって用いられることになる暗号キーを管理する他のデバイスから受信される。別の実施形態では、固体記憶機構１１０は２つ以上の区画を有し、固体記憶コントローラ１０４は、それぞれが固体記憶機構１１０内の単一の区画において動作する２つ以上の固体記憶コントローラ１０４であるかのように機能する。この実施形態では、区画毎に固有の媒体暗号キーが用いられる。
【００９６】
別の実施形態では、書込みデータパイプライン１０６は暗号化モジュール３１４を含み、暗号化モジュールは、パケッタイザ３０２にデータセグメントを送信する前に、入力バッファ３０６から直接、又は間接的に受信されるデータ又はメタデータセグメントを暗号化し、データセグメントは、そのデータセグメントと共に受信される暗号キーを用いて暗号化される。データを暗号化するために暗号化モジュール３１８によって用いられる暗号キーは固体記憶デバイス１０２内に格納される全てのデータに共通ではなく、オブジェクト毎に異なる場合があり、以下に説明されるようにデータセグメントの受信と共に受信される場合があるという点で、暗号化モジュール３１４は媒体暗号化モジュール３１８とは異なる。例えば、暗号化モジュール３１８によって暗号化されるデータセグメントのための暗号キーは、データセグメントと共に受信される場合があるか、又はデータセグメントが属するオブジェクトを書き込むためのコマンドの一部として受信される場合がある。固体記憶デバイス１０２は、オブジェクトパケット毎に１つの非秘密の暗号用のノンスを使用及び格納することができ、そのノンスは暗号キーと共に用いられる。どのパケットも、異なるノンスを用いて格納することができる。暗号化アルゴリズムによる保護を改善するために、固有のノンスを用いて、複数のパケット間でデータセグメントを分割することができる。一実施形態では、媒体暗号化モジュール３１８によって用いられるノンスは、暗号化モジュール３１４によって用いるノンスと同じである。
【００９７】
暗号キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、又はデータセグメントを暗号化するために用いられることになる暗号キーを保持する他のデバイスから受信される場合がある。一実施形態では、暗号キーは、固体記憶デバイス１０２、コンピュータ１１２、クライアント１１４、又は秘密キー及び公開キーを確実に転送及び保護する業界標準の方法を実行する能力を有する他の外部エージェントのうちの１つから固体記憶コントローラ１０４に転送される。
【００９８】
一実施形態では、暗号化モジュール３１８は、第１のパケットを、そのパケットと共に受信される第１の暗号キーで暗号化し、第２のパケットを、その第２のパケットと共に受信される第２の暗号キーで暗号化する。別の実施形態では、暗号化モジュール３１８は第１のパケットを、そのパケットと共に受信される第１の暗号キーで暗号化し、第２のデータパケットを、暗号化することなく、次のステージに渡す。都合のよいことに、固体記憶デバイス１０２の書込みデータパイプライン１０６に収容される暗号化モジュール３１８によって、単一ファイルシステム又は他の外部システムを用いることなく、オブジェクト毎に、又はセグメント毎にデータを暗号化して、対応するオブジェクト又はデータセグメントを格納するために用いられる別の暗号キーを追跡することができるようになる。各要求側デバイス１５５又は関連するキーマネージャが、要求側デバイス１５５によって送信されるオブジェクト又はデータセグメントだけを暗号化するために用いられる暗号キーを別々に管理する。
【００９９】
別の実施形態では、書込みデータパイプライン１０６は圧縮モジュール３１２を含み、圧縮モジュールは、パケッタイザ３０２にデータセグメントを送信する前に、メタデータセグメントのためのデータを圧縮する。圧縮モジュール３１２は典型的には、当業者に知られている圧縮ルーチンを用いて、データ又はメタデータセグメントを圧縮し、セグメントの記憶サイズを縮小する。例えば、データセグメントが５１２個の０から成るストリングを含む場合には、圧縮モジュール３１２は５１２個の０を、５１２個の０を指示するコード又はトークンに置き換えることができ、そのコードは、５１２個の０によって占有される空間よりもはるかにコンパクトである。
【０１００】
一実施形態では、圧縮モジュール３１２は、第１のセグメントを第１の圧縮ルーチンを用いて圧縮し、第２のセグメントを圧縮することなく渡す。別の実施形態では、圧縮モジュール３１２は第１のセグメントを第１の圧縮ルーチンを用いて圧縮し、第２のセグメントを第２の圧縮ルーチンを用いて圧縮する。固体記憶デバイス１０２にデータを書き込むクライアント１１４又は他のデバイスがそれぞれ圧縮ルーチンを指定することができるか、或いは或るセグメントは圧縮ルーチンを指定することができ、別のセグメントは圧縮しないことを指定することができるように、固体記憶デバイス１０２内にこのような自由度を有することは好都合である。圧縮ルーチンの選択は、オブジェクトタイプ又はオブジェクトクラスに基づくデフォルト設定に従って選択される。例えば、特定のオブジェクトの第１のオブジェクトはデフォルト圧縮ルーチン設定を無効にすることができ、同じオブジェクトクラス及びオブジェクトタイプの第２のオブジェクトはデフォルト圧縮ルーチンを用いることができ、同じオブジェクトクラス及びオブジェクトタイプの第３のオブジェクトは圧縮を使用しない。
【０１０１】
一実施形態では、書込みデータパイプライン１０６はガーベージコレクタバイパス３１６を含み、ガーベージコレクタバイパスは、ガーベージコレクションシステム内のデータバイパスの一部として、読出しデータパイプライン１０８からデータセグメントを受信する。ガーベージコレクションシステムは典型的には、もはや有効でないパケットをマークする。なぜなら、典型的には、そのパケットは消去するためにマークされるか、又は変更されており、変更されたデータは異なるロケーションに格納されるためである。或る時点において、ガーベージコレクションシステムは、論理消去ブロックのような、記憶機構の特定のセクションが回復されるであろうと判断する。この判断は、利用可能な記憶容量の不足、無効としてマークされたデータの割合がしきい値に達すること、有効データの連結、記憶機構のそのセクションのための誤り検出率がしきい値に達すること、又はデータ分布に基づいて性能を改善すること等に起因する。ガーベージコレクションアルゴリズムによって多数の要因が考慮され、記憶機構のセクションが回復されるべき時点を特定することができる。
【０１０２】
記憶機構の１つのセクションが回復するためにマークされると、典型的には、そのセクション内の有効パケットが再配置されなければならない。ガーベージコレクタバイパス３１６によって、パケットを読出しデータパイプライン１０８に読み込み、固体記憶コントローラ１０４によって経路選択されることなく、書込みデータパイプライン１０６に直接転送することができるようになる。一実施形態では、回復される論理消去ブロックから回復される有効パケットが、クライアント１１６から到来するパケットと混合される。別の実施形態では、回復される論理消去ブロックから回復される有効パケットが、到来するデータパケットを差し込まれることなく、一緒に格納される。好ましい実施形態では、ガーベージコレクタバイパス３１６は、固体記憶デバイス１０２内で動作する自律ガーベージコレクタシステムの一部である。これにより、固体記憶デバイス１０２はデータを管理することができるようになり、それにより、データが系統的に固体記憶機構１１０全体にわたって拡散されるので、性能及びデータ信頼性が改善され、固体記憶機構１１０のいずれかの１つのロケーション又はエリアの過剰利用又は利用不足が回避され、固体記憶機構１１０の耐用寿命が延長される。
【０１０３】
ガーベージコレクタバイパス３１６は、クライアント１１６又は他のデバイスによって書き込まれる他のセグメントと共に、書込みデータパイプライン１０６へのセグメントの挿入を調整する。図示の実施形態では、ガーベージコレクタバイパス３１６は、書込みデータパイプライン１０６においてパケッタイザ３０２の前に、かつ読出しデータパイプライン１０８においてデパケッタイザ３２４の後にあるが、読出しデータパイプライン１０８及び書込みデータパイプライン１０６内の他の場所に配置されてもよい。固体記憶機構１１０内の記憶効率を改善し、それによりガーベージコレクションの頻度を少なくするために、書込みパイプライン１０６のフラッシュ中にガーベージコレクタバイパス３１６を用いて、論理ページの残りの部分を満たすことができる。
【０１０４】
一実施形態では、書込みデータパイプライン１０６は書込みバッファ３２０を含み、書込みバッファは、効率的に書込み動作を行うためにデータをバッファリングする。典型的には、書込みバッファ３２０は、固体記憶機構１１０内の少なくとも１つの論理ページを満たすだけの十分なパケット容量を含む。これにより、書込み動作が、中断することなく、データの全ページを固体記憶機構１１０に送信することができるようになる。書込みデータパイプライン１０６の書込みバッファ３２０及び読出しデータパイプライン１０８内のバッファのサイズを、固体記憶機構１１０内の記憶書込みバッファ以上の容量にすることによって、複数のコマンドではなく、単一の書込みコマンドを用いて、データの１つの論理ページ全体を固体記憶機構１１０に送信するように巧みに構成することができるので、データの書込み及び読出しがさらに効率的である。
【０１０５】
書込みバッファ３２０が満たされている間に、固体記憶機構１１０は他の読出し動作のために用いられる場合がある。書込みバッファがより小さいか、又は書込みバッファを備えない他の固体記憶デバイスが、データが記憶書込みバッファに書き込まれ、記憶書込みバッファに流れ込むデータが滞るときに、その固体記憶機構を連携することができるので、これは好都合である。記憶書込みバッファ全体が満たされ、プログラムされるまで、読出し動作は阻止される。書込みバッファを用いないか、又は小さな書込みバッファを有するシステムのための別の手法は、読出しを可能にするために、フルでない記憶書込みバッファをフラッシュすることである。再び、ページを満たすために複数の書込み／プログラムサイクルが必要とされるので、これは非効率的である。
【０１０６】
書込みバッファ３２０が論理ページよりも大きなサイズを有する図示の実施形態の場合、多数のサブコマンドを含む単一の書込みコマンドと、それに続く単一のプログラムコマンドによって、各固体記憶素子２１６、２１８、２２０内の記憶書込みバッファから各固体記憶素子２１６、２１８、２２０内の指定されたページにデータのページを転送することができる。この技法は、データ信頼性及び永続性を下げることがわかっている部分的なページプログラミングを排除し、かつバッファが満たされているときに、読出し及び他のコマンドのための宛先バンクを解放するという利点を有する。
【０１０７】
一実施形態では、書込みバッファ３２０はピンポンバッファであり、バッファの一方の側が満たされ、その後、ピンポンバッファの他方の側が満たされている間の適切な時点において、満たされた一方が転送するように指示される。別の実施形態では、書込みバッファ３２０は先入れ先出し（「ＦＩＦＯ」）レジスタを含み、その容量はデータセグメントの論理ページよりも大きい。当業者は、データを固体記憶機構１１０に書き込む前に、データの論理ページを格納することができるようにする他の書込みバッファ３２０の構成を理解するであろう。
【０１０８】
別の実施形態では、書込みバッファ３２０は、論理ページよりも小さいサイズを有し、１ページより少ない情報を固体記憶機構１１０内の記憶書込みバッファに書き込むことができるようになる。その実施形態では、書込みデータパイプライン１０６が滞って読出し動作を遅らせるのを防ぐために、ガーベージコレクションシステムを用いて、ガーベージコレクションプロセスの一部として１つのロケーションから別のロケーションに移動される必要があるデータがキューに入れられる。書込みデータパイプライン１０６内でデータが滞る場合、データはガーベージコレクタバイパス３１６を通じて書込みバッファ３２０に送られることができ、その後、固体記憶機構１１０内の記憶書込みバッファに送られ、データをプログラムする前に論理ページのページを満たすことができる。このようにして、書込みデータパイプライン１０６においてデータが滞っても、固体記憶デバイス１０６からの読出しは滞らないであろう。
【０１０９】
別の実施形態では、書込みデータパイプライン１０６は、書込みデータパイプライン１０６内に、１又は複数のユーザ定義可能な機能を有する書込みプログラムモジュール３１０を含む。書込みプログラムモジュール３１０によって、ユーザは書込みデータパイプライン１０６をカスタマイズすることができるようになる。ユーザは、特定のデータ要件又は用途に基づいて、書込みデータパイプライン１０６をカスタマイズする場合がある。固体記憶コントローラ１０４がＦＰＧＡである場合、ユーザは、カスタムコマンド及び機能を用いて、比較的容易に書込みデータパイプライン１０６をプログラムすることができる。また、ユーザは、書込みプログラムモジュール３１０を用いて、ＡＳＩＣによってカスタム機能を含むこともできるが、ＡＳＩＣをカスタマイズすることは、ＦＰＧＡの場合よりも難しい場合がある。書込みプログラムモジュール３１０は、バッファ及びバイパス機構を含む場合があり、それにより、第１のデータセグメントが書込みプログラムモジュール３１０において実行し、その間に、第２のデータセグメントが書込みデータパイプライン１０６の中を進み続けることができるようにする。別の実施形態では、書込みプログラムモジュール３１０は、ソフトウエアを通じてプログラムすることができるプロセッサコアを含む。
【０１１０】
書込みプログラムモジュール３１０は、入力バッファ３０６と圧縮モジュール３１２との間に示されるが、書込みプログラムモジュール３１０は、書込みデータパイプライン１０６内のどの場所に置くこともでき、種々のステージ３０２〜３２０の間で分散させることもできることに留意されたい。さらに、複数の書込みプログラムモジュール３１０を種々のステージ３０２〜３２０の間で分散させて、個別にプログラムし、動作させることもできる。さらに、ステージ３０２〜３２０の順序は変更可能である。当業者は、特定のユーザ要件に基づくステージ３０２〜３２０の順序に対する実現可能な変更を理解するであろう。
【０１１１】
読出しデータパイプライン
読出しデータパイプライン１０８は、ＥＣＣ訂正モジュール３２２を含み、ＥＣＣ訂正モジュールは、要求されたパケットの各ＥＣＣチャンクと共に格納されるＥＣＣを用いることによって、固体記憶機構１１０から受信される要求されたパケットのためのＥＣＣチャンク内にデータ誤りがあるか否かを判断する。その際、任意の誤りがあり、その誤りがＥＣＣを用いて訂正可能である場合には、ＥＣＣ訂正モジュール３２２は、要求されたパケット内の誤りを訂正する。例えば、ＥＣＣが６ビットにおいて誤りを検出することができるが、３ビットの誤りしか訂正することができない場合には、ＥＣＣ訂正モジュール３２２は、３ビットまでの誤りを有する要求されたパケットのＥＣＣチャンクを訂正する。要求されたデータパケットが、固体記憶機構１１０に書き込まれ、そのパケットのためのＥＣＣが生成された時点と同じになるように、ＥＣＣ訂正モジュール３２２は、誤りのあるビットを正しい１又は０の状態に変更することによって、誤りのあるビットを訂正する。
【０１１２】
ＥＣＣ訂正コントローラ３２２が、要求されたパケットが、ＥＣＣが訂正することができる誤りよりも多くの誤ったビットを含むと判断する場合には、ＥＣＣ訂正モジュール３２２は、要求されたパケットの破損したＥＣＣチャンク内の誤りを訂正することができないので、中断を送信する。一実施形態では、ＥＣＣ訂正モジュール３２２は、要求されたパケットに誤りがあることを指示するメッセージと共に中断を送信する。そのメッセージは、ＥＣＣ訂正モジュール３２２が誤りを訂正することができないという情報、又はＥＣＣ訂正モジュール３２２が誤りを訂正する能力がないことを暗示することができる情報を含む。別の実施形態では、ＥＣＣ訂正モジュール３２２は、中断及び／又はメッセージと共に、要求されたパケットの破損したＥＣＣチャンクを送信する。
【０１１３】
好ましい実施形態では、ＥＣＣ訂正モジュール３２２によって訂正することができない要求されたパケットの破損したＥＣＣチャンク、又は破損したＥＣＣチャンクの一部がマスタコントローラ２２４によって読み出され、訂正され、読出しデータパイプライン１０８によってさらに処理するためにＥＣＣ訂正モジュール３２２に返される。一実施形態では、要求されたパケットの破損したＥＣＣチャンク、又は破損したＥＣＣチャンクの一部が、そのデータを要求するデバイスに送信される。要求側デバイス１５５はそのＥＣＣチャンクを訂正することができるか、又はバックアップ又はミラーコピーのような別のコピーを用いてそのデータを置き換え、その後、要求されたデータパケットの置換データを使用することができるか、又はその置換データを読出しデータパイプライン１０８に返すことができる。要求側デバイス１５５は、誤りのある要求されたパケット内のヘッダ情報を用いて、破損した要求されたパケットを置き換えるか、又はそのパケットが属するオブジェクトを置き換えるために必要とされるデータを識別することができる。別の好ましい実施形態では、固体記憶コントローラ１０４は、或るタイプのＲＡＩＤを用いてデータを格納し、破損したデータを回復することができる。別の実施形態では、ＥＣＣ訂正モジュール３２２は中断及び／又はメッセージを送信し、受信側デバイスが、要求されたデータパケットに関連付けられる読出し動作を失敗する。当業者は、ＥＣＣ訂正モジュール３２２が要求されたパケットの１又は複数のＥＣＣチャンクが破損したと判断する結果として、さらにはＥＣＣ訂正モジュール３２２が誤りを訂正することができないと判断する結果として取るべき他のオプション及び動作を理解するであろう。
【０１１４】
読出しデータパイプライン１０８は、デパケッタイザ３２４を含み、該デパケッタイザは、ＥＣＣ訂正モジュール３２２から、要求されたパケットのＥＣＣチャンクを直接、又は間接的に受信し、１又は複数のパケットヘッダを調べて、除去する。デパケッタイザ３２４は、ヘッダ内のパケット識別子、データ長、データロケーション等を調べることによってパケットヘッダを検証することができる。一実施形態では、ヘッダは、読出しデータパイプライン１０８に送られるパケットが要求されたパケットであることを検証するために用いることができるハッシュ符号を含む。デパッケタイザ３２４は、要求されたパケットから、パケッタイザ３０２によって追加されたヘッダを除去する。デパケッタイザ３２４は、或る特定のパケットを処理するのではなく、変更することなく、これらのパケットを先に送るように指示される場合がある。一例は、再構築プロセスにおいて要求されるコンテナラベルとすることができ、そのプロセスでは、オブジェクトインデックス再構成モジュール２７２によってヘッダ情報が要求される。別の例では、固体記憶デバイス１０２内で用いることになっている種々のタイプのパケットの転送を行う。別の実施形態では、デパケッタイザ３２４の動作は、パケットタイプに依存する。
【０１１５】
読出しデータパイプライン１０８は、アライメントモジュール３２６を含み、アライメントモジュールは、デパケッタイザ３２４からデータを受信し、不要なデータを除去する。一実施形態では、固体記憶機構１１０に送信される読出しコマンドは、データのパケットを検索する。そのデータを要求するデバイスは、検索されたパケット内の全てのデータを必要としない場合、アライメントモジュール３２６は不要なデータを除去する。検索されるページ内の全てのデータが要求されたデータである場合には、アライメントモジュール３２６は全くデータを除去しない。
【０１１６】
アライメントモジュール３２６は、データセグメントを次のステージに転送する前に、オブジェクトのデータセグメントとしてのデータを、データセグメントを要求するデバイスに適合する形に再フォーマットする。典型的には、データが読出しデータパイプライン１０８によって処理されるのに応じて、種々のステージにおいて、データセグメント又はパケットのサイズが変化する。アライメントモジュール３２６は、受信されたデータを用いて、そのデータを、要求側デバイス１５５に送信され、かつ応答を形成するために結合されるのに適したデータセグメントにフォーマットする。例えば、第１のデータパケットケットの一部からのデータを、第２のデータパケットの一部からのデータと組み合わせることができる。データセグメントが要求側デバイスによって要求されるデータよりも大きい場合には、アライメントモジュール３２６は不要なデータを破棄することができる。
【０１１７】
一実施形態では、読出しデータパイプライン１０８は、読出し同期バッファ３２８を含み、読出し同期バッファは、読出しデータパイプライン１０８によって処理する前に、固体記憶機構１１０から読み出される１又は複数の要求されたパケットをバッファリングする。読出し同期バッファ３２８は、固体記憶機構クロック領域とローカルバスクロック領域との間の境界にあり、クロック領域の差を考慮するためにバッファリングを提供する。
【０１１８】
別の実施形態では、読出しデータパイプライン１０８は、出力バッファ３３０を含み、出力バッファは、要求されたパケットをアライメントモジュール３２６から受信し、要求側デバイスに送信する前にパケットを格納する。出力バッファ３３０は、データセグメントが読出しデータパイプライン１０８のステージから受信されるときと、データセグメントが固体記憶コントローラ１０４の他の部分に又は要求側デバイスに送信されるときとの間の差を考慮する。また、データバス２０４の動作効率を改善するために、出力バッファ３３０によって、データバス２０４は、読出しデータパイプライン１０８が対応することができる速度よりも速い速度で、読出しデータパイプライン１０８からデータを受信することができるようになる。
【０１１９】
一実施形態では、読出しデータパイプライン１０８は媒体暗号解読モジュール３３２を含み、媒体暗号解読モジュールは、ＥＣＣ訂正モジュール３２２から１又は複数の暗号化された要求されたパケットを受信し、１又は複数の要求されたパケットをデパケッタイザ３２４に送信する前に、固体記憶デバイス１０２に固有の暗号キーを用いて１又は複数の要求されたパケットの暗号を解読する。典型的には、媒体暗号解読モジュール３３２によってデータの暗号を解読するために用いられる暗号キーは、媒体暗号化モジュール３１８によって用いられる暗号キーと同じである。別の実施形態では、固体記憶機構１１０は２つ以上の区画を有する場合があり、固体記憶コントローラ１０４は、それぞれが固体記憶機構１１０内の単一の区画において動作する２つ以上の固体記憶コントローラ１０４であるかのように機能する。この実施形態では、区画毎に固有の媒体暗号キーが用いられる場合がある。
【０１２０】
別の実施形態では、読出しデータパイプライン１０８は暗号解読モジュール３３４を含み、暗号解読モジュールは、データセグメントを出力バッファ３３０に送信する前に、デパケッタイザ３２４によってフォーマットされたデータセグメントの暗号を解読する。データセグメントは、読出し同期バッファ３２８によって受信される要求されたパケットの検索を開始する読出し要求と共に受信される暗号キーを用いて暗号解読される。暗号解読モジュール３３４は、第１のパケットのための読出し要求と共に受信される暗号キーを用いて第１のパケットの暗号を解読することができ、その後、異なる暗号キーを用いて第２のパケットの暗号を解読するか、又は暗号解読することなく、読出しデータパイプライン１０８の次のステージに第２のパケットを渡す。典型的には、暗号解読モジュール３３４は、媒体暗号解読モジュール３３２が要求されたパケットの暗号を解読するために用いるのとは異なる暗号キーを用いて、データセグメントの暗号を解読する。パケットが非秘密の暗号用のノンスと共に格納されたとき、そのノンスを暗号キーと共に用いて、データパケットの暗号を解読する。暗号キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、又は固体記憶コントローラ１０４によって用いられる暗号キーを管理する他のデバイスから受信される。
【０１２１】
別の実施形態では、読出しデータパイプライン１０８は解凍モジュール３３６を含み、解凍モジュールは、デパケッタイザ３２４によってフォーマットされたデータセグメントを解凍する。好ましい実施形態では、解凍モジュール３３６は、パケットヘッダ及びコンテナラベルのうちの一方又は両方に格納される圧縮情報を用いて、圧縮モジュール３１２によってデータを圧縮するために用いられるルーチンに対して相補的なルーチンを選択する。別の実施形態では、解凍モジュール３３６によって用いられる解凍ルーチンは、解凍されるデータセグメントを要求するデバイスによって指示される。別の実施形態では、解凍モジュール３３６は、オブジェクトタイプ又はオブジェクトクラスに基づくデフォルト設定に従って、解凍ルーチンを選択する。第１のオブジェクトの第１のパケットはデフォルト解凍ルーチンを無効にすることができ、同じオブジェクトクラス及びオブジェクトタイプの第２のオブジェクトの第２のパケットはデフォルト解凍ルーチンを用いることができ、同じオブジェクトクラス及びオブジェクトタイプの第３のオブジェクトの第３のパケットは解凍を使用しない場合がある。
【０１２２】
別の実施形態では、読出しデータパイプライン１０８は、読出しプログラムモジュール３３８を含み、読出しプログラムモジュールは、読出しデータパイプライン１０８内の１又は複数のユーザ定義可能な機能を含む。読出しプログラムモジュール３３８は、書込みプログラムモジュール３１０と同じような特徴を有し、ユーザが読出しデータパイプライン１０８にカスタム機能を与えることができるようにする。読出しプログラムモジュール３３８は、図３において示されるように配置されるか、読出しデータパイプライン１０８内の別の位置に配置されるか、又は読出しデータパイプライン１０８内の複数のロケーション内に複数の部分を含む。さらに、読出しデータパイプライン１０８内の複数のロケーションに、独立して動作する複数の読出しプログラムモジュール３３８が存在する場合がある。当業者は、読出しデータパイプライン１０８内の読出しプログラムモジュール３３８の他の形を理解するであろう。書込みデータパイプライン１０６と同様に、読出しデータパイプライン１０８のステージは入れ替えることができ、当業者は、読出しデータパイプライン１０８内のステージの他の順序を理解するであろう。
【０１２３】
固体記憶コントローラ１０４は、制御及びステータスレジスタ３４０と、対応する制御キュー３４２とを含む。制御及びステータスレジスタ３４０及び制御キュー３４２は、書込みデータパイプライン１０６及び読出しデータパイプライン１０８において処理されるデータに関連付けられる制御、並びにコマンド及びサブコマンドの順序付けを容易にする。例えば、パケッタイザ３０２内のデータセグメントは、ＥＣＣ生成器に関連付けられる制御キュー３４２内に１又は複数の対応する制御コマンド又は命令を有する。データセグメントがパケット化されるのに応じて、それらの命令又はコマンドのうちのいくつかがパケッタイザ３０２内で実行される。データセグメントから作成される新たに形成されたデータパケットが次のステージに渡されるのに応じて、他のコマンド又は命令が、制御及びステータスレジスタ３４０を通じて次の制御キュー３４２に渡される。
【０１２４】
書込みデータパイプライン１０６に転送されるパケットのためのコマンド又は命令が制御キュー３４２内に同時にロードされ、個々のパケットがそのステージによって実行されるのに応じて、各パイプラインステージが適切なコマンド又は命令を実行する。同様に、読出しデータパイプライン１０８から要求されるパケットのためのコマンド又は命令が制御キュー３４２内に同時にロードされ、個々のパケットがそのステージによって実行されるのに応じて、各パイプラインステージが適切なコマンド又は命令を実行する。当業者は、制御及びステータスレジスタ３４０並びに制御キュー３４２の他の機構及び機能を理解するであろう。
【０１２５】
固体記憶コントローラ１０４及び／又は固体記憶デバイス１０２は、バンクインターリーブコントローラ３４４、同期バッファ３４６、記憶バスコントローラ３４８及びマルチプレクサ（「ＭＵＸ」）３５０も含む。
【０１２６】
記憶素子構成
図４Ａは、本発明による、Ｎ＋Ｐ個の記憶素子４０２から成るアレイの一実施形態４００を示す概略ブロック図である。記憶素子４０２のアレイ４００は、Ｎ個の記憶素子４０２ａ、４０２ｂ、．．．、４０２ｎと、Ｎ個の記憶素子４０２ａ、．．．、４０２ｎ上に格納されるデータから生成されるパリティデータを格納するＰ個の記憶素子４０２ｐとを含む。パリティデータ４０２ｐを格納する記憶素子４０２は、パリティデータだけを格納することができる専用のパリティ記憶素子４０２とすることができる。さらに、パリティデータは、以下で説明されるように、記憶素子４０２間で交替する(rotate)場合がある。単一のパリティ記憶素子４０２ｐが示されるが、複数のパリティ記憶素子４０２ｐが用いられることを当業者は理解するであろう。何度か失敗した後にデータを回復することができるように設計される複雑なパリティ方式を使用する、簡単なパリティを使用するが、２つ以上の記憶素子４０２が同じパリティデータのコピーを有する等のような、種々の形において、さらなるパリティデータが、さらなる記憶素子４０２（図示せず）に格納される場合がある。各記憶素子４０２は、デバイス、チップ、チップの一部、ダイ等を含む。
【０１２７】
さらに、一実施形態では、各記憶素子４０２は物理消去ブロック（「ＰＥＢ」）４０４を含む。例えば、記憶素子１  ４０２ａはＰＥＢ１  ４０４ａを含む。物理消去ブロックは典型的には１つのダイ、チップ又は他の記憶素子４０２上に位置する消去ブロックである。各ＰＥＢ４０４はｍ個の物理ページ４０６を含む。例えば、ＰＥＢ１はページ０  ４０６ａ、ページ１  ４１０ａ、．．．、ページｍ  ４１２ａを含む。各物理ページ４０６ａは、データの一部と、データ（「Ｄ」）４０８と共に分散される誤り訂正符号（「ＥＣＣ」）とを格納する。さらに、パリティ記憶素子４０２ｐ上の物理ページ４０６ｐ、４１０ｐ、．．．、４１２ｐは、パリティデータ４０８ｐを格納する。
【０１２８】
一実施形態では、一群のＰＥＢが論理消去ブロック（「ＬＥＢ」）を形成する。ＬＥＢ４１４が、パリティ記憶素子４０２ｐを含むＮ＋Ｐ個の記憶素子から成るアレイ４００に及ぶ。さらに、一実施形態では、論理ページ（「ＬＰ」）４１６が、パリティ記憶素子４０２ｐ上の物理ページ４１０ｐを含む、１つの行内の複数の物理ページ４１０に及ぶ。別の実施形態では、論理ページ４１６が、パリティ記憶素子４０２ｐを用いることなく、Ｎ個の記憶素子４０２ａ〜４０２ｎに及び、パリティデータが、データがＮ個の記憶素子４０２ａ〜４０２ｎに格納されるのとは別個のステップにおいてパリティデータと共に記憶素子４０２ｐに格納されるようにする。
【０１２９】
一実施形態では、ＥＣＣは、データと共に分散されるブロック符号である。さらに、データ及びＥＣＣは、任意の特定の物理的なハードウエア境界には揃えられない場合がある。結果として、ＥＥＣを用いる誤り訂正は、特定のハードウエア構成には依存しない。それゆえ、ＥＣＣ及び対応するデータはＥＣＣチャンクを形成する場合があり、そのＥＣＣチャンクがＮ個の記憶素子４０２ａ〜４０２ｎのうちの１又は複数に分割され、格納される場合がある。ＥＣＣチャンク４１８は典型的には、論理ページ４１６の複数の物理ページ４０６のうちの少なくとも一部に及び、データ及びデータ４０８ａ、４０８ｂ、．．．、４０８ｍから生成されるＥＣＣは、パリティ記憶素子４０２ｐ上のパリティデータ４０８ｐを含まない、Ｎ個の記憶素子４０２ａ〜４０２ｎにわたって拡散される。パリティデータを含む記憶素子４０２ｐは、記憶素子４０２のアレイ４００を構成する記憶素子間で動的に交替する。好ましい実施形態では、ＬＰ４１６が複数のＥＣＣチャンク４１８を含む。物理ページ４０６はＥＣＣチャンク４１８のうちの１又は複数のデータバイトを含む。ＥＣＣチャンク４１８が、物理ページ４０６内の複数の行に及ぶ場合があり、物理ページ４１８が、複数のＥＣＣチャンク４１８を含む場合がある。
【０１３０】
図４Ｂは、本発明による、分散されたパリティを有するＮ＋Ｐ個の記憶素子から成るアレイの別の実施形態４５０を示す概略ブロック図である。図示の実施形態では、パリティデータ４０８ｐが分散される。それゆえ、パリティデータ４０８ｐを格納する論理ページ４５４の記憶素子４０２は交互になる。例えば、ＬＰ４５４は、或る特定のデータ行のための記憶素子３  ４０２ｃ上にパリティデータ４０８ｐを含み、別のデータ行のための記憶素子２  ４０２ｂ上にパリティデータ４０８ｐを含む。この実施形態では、ＥＣＣチャンク４５６は依然としてパリティデータから独立している。別の実施形態では、パリティ情報は、ＬＰ４５４内の全てのＥＣＣチャンク４５６のための同じ記憶素子４０２内に格納され、ＬＰ４５４境界においてのみ変化する。別の実施形態では、パリティのロケーションがＬＥＢ４５２内の同じ記憶素子４０２内に格納され、ＬＥＢ４５２境界においてのみ変化する。
【０１３１】
高められるデータ完全性
図５は、本発明による、冗長記憶システムにおいてデータ完全性を高めるための装置の一実施形態５００を示す概略ブロック図である。装置５００はリダクション装置１１６の一実施形態を含み、一実施形態において、受信モジュール５０２と、データ読出しモジュール５０４と、再生モジュール５０６と、ＥＣＣモジュール５０８とを含み、それらは以下で説明される。また、装置５００は、Jonathan Thatcher他によって２００９年５月１８日に出願された「Apparatus, System, and Method to Increase Data Integrity in a Redundant Storage System」と題する米国特許出願第 号においても記述されており、その出願は参照により本明細書に援用される。
【０１３２】
一実施形態では、装置５００は受信モジュール５０２を含み、受信モジュールは、論理ページ４１６からデータ（「要求されたデータ」）を読み出すための読出し要求を受信する。論理ページ４１６はＮ＋Ｐ個の記憶素子４０２から成るアレイ４００に及び、１又は複数のＥＣＣチャンク４１８を含む。一実施形態では、受信モジュール５０２は、複数の論理ページ４１６からデータを読み出すための要求を受信する。Ｎ及びＰはそれぞれ記憶素子４０２の数を表す。
【０１３３】
Ｎ個の記憶素子４０２はそれぞれＥＣＣチャンク４１８の一部を格納し、Ｐ個の記憶素子４０２はパリティデータを格納する。図４Ａ及び図４Ｂに示されるように、パリティデータ４０８ｐを格納する実際の記憶素子４０２は、ページ４０６、４１０、４１２、ＬＥＢ４１４、又は他の記憶分割によって異なる場合がある。１又は複数のＥＣＣチャンク４１８に格納されるデータは、要求されたデータを含む場合がある。さらに、Ｐ個の記憶素子４０２に格納されるパリティデータは、各ＥＣＣチャンク４１８内に格納されるデータから生成される。例えば、ＥＣＣチャンク４１８からのデータ及びＥＣＣが失われるか、又は破損する場合には、そのデータ又はＥＣＣは、残りのデータ及びＥＣＣを用いることによって回復され、復元される。パリティデータは単純なＸＯＲパリティ情報を含むか、又はさらに複雑にすることができ、当該技術分野において知られているように、複数の記憶素子４０２がパリティデータを格納することに関与する。一実施形態では、Ｎ個の各記憶素子４０２上に格納されるＥＣＣチャンク４１８の部分が、各記憶素子４０２の物理ページ４０６の少なくとも一部に格納される。
【０１３４】
一実施形態では、パリティデータを格納するＰ個の記憶素子４０２は、パリティデータの代わりに、Ｎ個の記憶素子４０２内に格納されるデータのコピーを含むデータミラーを含む。それゆえ、Ｎ個の記憶素子のためのデータを復元する前に、パリティ計算で処理される代わりに、ミラーリングされたデータを有するＰ個のデバイスからのデータを直接代用することができる。別の実施形態では、各論理「１」がミラーにおいて対応する論理「０」を有し、論理「０」がミラーにおいて論理「１」を有するように、データミラーはデータの反転を含む。
【０１３５】
一実施形態では、装置５００はデータ読出しモジュール５０４を含み、データ読出しモジュールは、Ｎ＋Ｐ個の記憶素子４０２のうちのＸ個の各記憶素子４０２上の物理ページ４０６の少なくとも一部からデータ（「読み出されるデータ」）を読み出す。ただし、ＸはＮに等しい。Ｘはデータ読出しモジュール５０４によって読み出される記憶素子４０２の数を表しており、データを回復するのに十分である。それゆえ、データ読出しモジュール５０４は、アレイ４００内の記憶素子４０２のサブセット（Ｘ）を読み出す場合があり、サブセット（Ｘ）は、記憶素子４０２の全数（Ｎ＋Ｐ）からパリティデータを格納する記憶素子４０２の数（Ｐ）を引いた値に等しい。
【０１３６】
データ読出しモジュール５０４は、受信モジュール５０２が読出し要求を受信するのに応答して、データを読み出す。一実施形態では、データ読出しモジュール５０４は、読出し要求毎に、Ｘ個の各記憶素子４０２上の物理ページ４０６の少なくとも一部を読み出す。データ読出しモジュール５０４によって読み出される物理ページ４０６は、読出し要求によって要求される論理ページ４１６の一部を含む。
【０１３７】
一実施形態では、データ読出しモジュール５０４は、読出し毎に同じ記憶素子４０２からデータを読み出す。データ読出しモジュール５０４によって読み出される記憶素子４０２は、ＥＣＣチャンク４１８の一部を含む場合があるか、又はＥＣＣチャンク４１８からのデータとパリティデータ４０８ｐとの組み合わせを含む。同じ記憶素子４０２から読み出すことによって、データ読出しモジュール５０４は、最初に読み出されない記憶素子４０２上のデータ完全性を最大にする。読出し要求の一部として読み出されない記憶素子４０２内のデータは、１又は複数の誤りを訂正するために後に用いられるデータを含む。
【０１３８】
一実施形態では、データ読出しモジュール５０４は、ＥＣＣチャンク４１８の少なくとも一部を格納するＮ個の記憶素子４０２からデータを読み出し、パリティデータを格納するＰ個の記憶素子４０２からデータを読み出さない。結果として、パリティデータを格納する記憶素子４０２は、他の記憶素子４０２よりも読出し回数が少なく、パリティデータは、より高いデータ完全性を有する。パリティデータを格納する記憶素子４０２は、非パリティ記憶素子４０２よりも信頼性が高くなる。なぜなら、パリティ記憶素子４０２の「故障までの平均時間」が、非パリティ記憶素子４０２よりも長くなるためである。したがって、データを代用するためにパリティデータが必要とされるとき、より良好な品質のデータが代用される。
【０１３９】
一実施形態では、データ読出しモジュール５０４は、どの記憶素子４０２が読み出されるかを特定する。データ読出しモジュール５０４は、パリティデータを格納する記憶素子４０２上の物理ページ４０６から読み出すか、パリティデータを含まない物理ページ４０６から完全に読み出すか、又は以下で詳細に説明されるように、ユーザによって構成されたパターンに従って記憶素子４０２から読み出すかを判断することができる。読み出す度に記憶素子４０２の全てを読み出すのではなく、要求されたデータを得るために必要とされる量の記憶素子４０２だけを読み出すことによって、アレイ４００のための全読出し回数が減少する。それゆえ、記憶素子４０２は、それほど早く消耗することはなく、記憶素子４０２上のデータは、読出しによる外乱を受けにくい、すなわち、隣接するビットが読み出されるときに起動されるビットが少なくて済む。
【０１４０】
一実施形態では、装置５００は再生モジュール５０６を含み、再生モジュールは紛失データを再生する。データ読出しモジュール５０４はＸ個の記憶素子４０２からの物理ページ４０６からだけ読み出すので、データ読出しモジュール５０４によって読み出される記憶素子４０２のうちの１又は複数は、パリティデータを含む場合があり、結果としてＥＣＣチャンク４１８全体よりも少ないデータが読み出されるので、結果として「紛失データ」が生じる。再生モジュール５０６は、データ読出しモジュール５０６によって読み出されるパリティデータと、パリティデータでない読み出されるデータの残りの部分とを用いて、紛失データを再生する。
【０１４１】
再生モジュール５０６は、紛失データをＥＣＣチャンク４１８に代入し、この紛失データと、読み出されるデータの残りの部分とを組み合わせることによって、ＥＣＣチャンク４１８が構成される。データ読出しモジュール５０４がパリティデータを読み出さない事例では、紛失データを再生するのに再生モジュール５０６は必要とされない。再生モジュール５０６は、例えば、読み出されるデータの一部がパリティデータを含むのに応答して、又はパリティデータが読み出された読出しデータモジュール５０４からの信号によって、紛失データを再生する。
【０１４２】
一実施形態では、装置５００はＥＣＣモジュール５０８を含み、ＥＣＣモジュールは、１又は複数のＥＣＣチャンク４１８が誤りを含むか否かを判断する。ＥＣＣモジュール５０８は、各ＥＣＣチャンク４１８内のＥＣＣを用いて、そのＥＣＣチャンク４１８内のデータが誤りを含むか否かを判断することができる。ＥＣＣチャンク４１８は、読み出されるデータと、任意の再生された紛失データとを含む場合がある。各ＥＣＣチャンク４１８内のＥＣＣを用いて、伝送及び格納を通じてＥＣＣチャンク４１８のデータ内に導入された誤りを検出し、訂正することができる。典型的には、ＥＣＣは、或る特定の数（amount）の誤りを検出することができ、ＥＣＣが検出することができる誤りの数よりも少ない数を訂正することができる。例えば、ＥＣＣは６ビットにおいて誤りを検出することができるが、ビット誤りのうちの３つしか訂正することができない。大量のデータを含むデータチャンクを有する記憶システムは典型的には、多ビットＥＣＣ訂正を用いる高度なＥＣＣを使用する。高度な多ビットＥＣＣ訂正を用いるＥＣＣは、１６ビットにおいて誤りを検出し、ビット誤りのうちの８ビットを訂正することができる。ＥＣＣモジュール５０８は、誤りのあるビットを正しい１又は０の状態に変更することによって、誤りのあるビットを訂正し、それにより、ＥＣＣチャンク４１８が、固体記憶機構１１０に書き込まれ、そのＥＣＣチャンク４１８のためにＥＣＣが生成された時点と同じになるようにする。
【０１４３】
図６は、本発明による、冗長記憶システム内のデータ完全性を高めるための装置の別の実施形態６００を示す概略ブロック図である。装置６００は、受信モジュール５０２と、データ読出しモジュール５０４と、再生モジュール５０６と、ＥＣＣモジュール５０８とを備える代替の不良ブロックマッピング装置１１４を含み、それらのモジュールは図５の装置５００に関して説明されたモジュールと実質的に同じである。種々の実施形態において、装置６００は、ＥＣＣチェックモジュール６０２と、代用モジュール６０４と、デバイス誤り特定モジュール６０６と、周期的読出しモジュール６０８と、パリティ交替モジュール６１０と、読出し交替モジュール６１２と、ＥＣＣ訂正モジュール６１４とを含む場合もあり、それらのモジュールが以下で説明される。
【０１４４】
一実施形態では、装置６００は、ＥＣＣチェックモジュール６０２を含む。ＥＣＣモジュール５０８が、ＥＣＣチャンク４１８が誤りを含むと判断する場合には、ＥＣＣチェックモジュール６０２は、その誤りがＥＣＣチャンク４１８内に格納されるＥＣＣを用いて訂正可能であるか否かを判断するＥＣＣを用いて訂正することができる誤りの数は、ＥＣＣを生成するために用いられるＥＣＣアルゴリズムの頑強性によって決定される。ＥＣＣチャンク４１８内の誤りがＥＣＣチャンク４１８内に格納される特定のＥＣＣを用いて訂正することができる誤りよりも多い場合には、ＥＣＣチェックモジュール６０２は、それらの誤りがＥＣＣチャンク４１８に格納されている特定のＥＣＣを用いて訂正不可能であると判断する。ＥＣＣチャンク４１８がデータと共に格納されるＥＣＣを用いて訂正可能である誤りよりも多くの誤りを有するという条件は、記憶素子４０２内の障害を示している。
【０１４５】
一実施形態では、装置６００は代用モジュール６０４を含む。ＥＣＣチェックモジュール６０２が、それらの誤りがＥＣＣチャンク４１８と共に格納されるＥＣＣを用いて訂正不可能であると判断する場合には、代用モジュール６０４は、データ読出しモジュール５０４によって読み出されない記憶素子４０２からデータ（「代用データ」）を読み出し、その代用データ及び読み出されるデータを用いて、誤りを有する記憶素子４０２からのデータを置き換えてＥＣＣチャンク４１８（「代用ＥＣＣチャンク４１８」）を生成し、代用ＥＣＣチャンクは、誤りを含まないか又は代用ＥＣＣチャンク４１８内のＥＣＣを用いて後に訂正可能である複数の誤りを含む。ＥＣＣチャンク４１８内の誤りは、ＥＣＣチャンク４１８内のＥＣＣを用いて訂正することができないので、代用モジュール６０４は、データ読出しモジュール５０４によって以前に読み出されなかったデータを読み出す。
【０１４６】
一実施形態では、データ読出しモジュール５０４によって読み出されない記憶素子４０２は、パリティデータを格納する記憶素子４０２である。代用モジュール６０４は、パリティデータを格納する記憶素子４０２を読み出し、代用データを生成することができる。別の実施形態では、データ読出しモジュール５０４によって読み出されない記憶素子４０２は、パリティデータ以外のＥＣＣチャンク４１８の部分を格納する記憶素子４０２である。代用モジュール４０２は、ＥＣＣチャンク４１８のその部分を格納する記憶素子４０２を読み出し、ＥＣＣチャンク４１８のその部分を代用データとして用いるか、又はデータ読出しモジュール５０４によって読み出されるデータ（パリティデータを含む）と共に代用データを用いて、誤りを有する記憶素子５０２上のデータを置き換える。
【０１４７】
一実施形態では、装置６００はＥＣＣ訂正モジュール６１４を含み、ＥＣＣ訂正モジュールは、ＥＣＣチャンク４１８からのＥＣＣ及びデータを用いて、そのデータ内の誤りを訂正する。ＥＣＣチェックモジュール６０２が、それらの誤りがＥＣＣチャンク４１８において訂正可能であると判断する場合には、ＥＣＣ訂正モジュール６１４は、ＥＣＣチャンク４１８内のＥＣＣを用いて、それらの誤りを訂正することができる。
【０１４８】
別の実施形態では、ＥＣＣチェックモジュール６０２は、ＥＣＣチャンク４１８内の誤りが訂正することができないと判断すると、誤りを有すると判断された記憶素子４０２がパリティデータを格納する場合には、データ読出しモジュール５０４によって読み出される他の記憶素子４０２からのデータと、代用記憶素子４０２からのＥＣＣチャンクデータとを合わせて、ＥＣＣチャンク４１８を構成し、その後、ＥＣＣ訂正モジュール６１４は、そのＥＣＣチャンク４１８を使用し、代用ＥＣＣチャンク４１８内に格納されるデータ内にある任意の誤りを訂正する。パリティデータを格納しない記憶素子が誤りを有すると識別される場合には、代用モジュール６０４は、代用データと、読出しデータモジュール５０４によって読み出されるデータからのパリティデータとを用いて、誤りを有すると判断された記憶素子上のデータを置き換え、一実施形態において、ＥＣＣチェックモジュール６０２が訂正可能な誤りを有するか、又は誤りがないと判断することができる代用ＥＣＣチャンク４１８を生成する。代用ＥＣＣチャンクのデータ内に訂正可能な誤りがある場合には、ＥＣＣ訂正モジュール６１４は、代用ＥＣＣチャンク４１８からのデータを用いて、代用ＥＣＣチャンク４１８内のデータの誤りを訂正する。
【０１４９】
一実施形態では、装置６００はデバイス誤り特定モジュール６０６を含み、デバイス誤り特定モジュールは、ＥＣＣチェックモジュール６０２及び代用モジュール６０４と共に機能して、どの記憶素子４０２が誤りを有するデータを含むかを特定する。それらの誤りは、ＥＣＣチャンク４１８内のＥＣＣを用いて訂正不可能である誤りである場合がある。ＥＣＣを用いて訂正不可能である誤りは、障害がある記憶素子４０２の表れである場合があり、それは障害がある記憶素子４０２のリタイアメントを必要とする。さらに、以下でさらに詳細に説明されるように、ＥＣＣチャンク４１８は複数の記憶素子４０２に及ぶので、誤りが生じた記憶素子４０２は、そのＥＣＣだけでは特定することができない。デバイス誤り特定モジュール６０６は、以下でさらに詳細に説明される検出装置１１８の一実施形態を含む。
【０１５０】
別の実施形態では、ＥＣＣチャンク４１８内のＥＣＣは、特定の記憶素子４０２内の誤りのある多数のビット又は全てのビットを訂正することができる。この実施形態では、この専用ＥＣＣ符号は、代用される必要がある記憶素子４０２を直接特定することができる。その実施形態では、デバイス誤り特定モジュール６０６は、訂正されたデータの出力を解析し、ＥＣＣ訂正モジュール６１４から与えられる情報から、記憶素子４０２のうちのいずれが故障しているかを特定する。
【０１５１】
一実施形態では、装置６００は、周期的読出しモジュール６０８を含み、周期的読出しモジュールは、データ読出しモジュール５０４によって読み出されない１又は複数の記憶素子４０２から周期的にデータを読み出す。データ読出しモジュール５０４によって記憶素子４０２が読み出されないとき、それらの記憶素子内の潜在的な欠陥又は障害が発見されなくなる可能性が極めて高い。欠陥のあるデバイスが必要とされるまで、潜在的な故障が発見されないままになる。典型的には、潜在的な故障は、或る特定の数の故障に耐える冗長性及び能力を有するシステムでは特に重要である。潜在的な故障によって、見掛け上は冗長性があるが、それが間違っており、次の故障によってシステムが動作しなくなる可能性があるという状況が生み出される。逆に、障害が発見されていた場合には、次にさらなる障害が生じる前に、修理又は再構成を通じて、その障害が回避されていたであろう。
【０１５２】
通常、潜在的な障害は標準的な周期的読出しを用いて検出される。ただし、データ読出しモジュール５０４が或る特定の記憶素子４０２を定期的に読み出さないときに、周期的読出しモジュール６０８は、それらの記憶素子４０２からデータを周期的に読み出すことができる。
【０１５３】
周期的読出しモジュール６０８は、所定の、若しくはユーザによって構成されたパターンに従って、又は或るしきい値に基づいて、使用頻度の低い記憶素子４０２からデータを読み出すことができる。例えば、周期的読出しモジュール６０８は、或る記憶素子４０２が読み出されてから経過した時間、又はその記憶素子４０２に対する読出しを含まない、記憶素子アレイ４００に対する全読出し回数を追跡する。経過時間又は全読出し回数がしきい値を満たす場合には、周期的読出しモジュール６０８は、記憶素子４０２を読み出す。当業者は、周期的読出しモジュール６０８が、使用頻度の低い記憶素子４０２から読み出す時点を特定する他の方法を理解するであろう。
【０１５４】
一実施形態では、装置６００は、パリティ交替モジュール６１０を含み、パリティ交替モジュールは、各記憶素子４０２の記憶サブセットのためのパリティデータを格納する論理ページ４１６の記憶素子４０２を交互にする。各記憶サブセットは、記憶素子４０２の少なくとも一部を含み、論理記憶サブセットが、アレイ４００の各記憶素子４０２上に記憶サブセットを含む。記憶サブセットは、物理ページ４０６の一部、物理ページ４０６、物理消去ブロック４０４の一部、物理消去ブロック４０４、デバイス、チップ、又は１又は複数のダイを含む、記憶素子の物理的又は論理的部分を含む。
【０１５５】
パリティデータを交替させることによって、１つの専用記憶素子４０２がパリティデータを読み出し、書き込むために絶えず使用されていないときに、パリティ交替モジュール６１０は、ウェアレベリングを促進する。それゆえ、パリティデータは、いくつかのデータ記憶レベルにおいて交替することができる。例えば、論理ページ４１６が物理ページ４０６の１つの行（例えば、４０６ａ〜ｍ、ｐ）を含む。ただし、パリティデータ４０８ｐは、第１の記憶素子４０２ａのための物理ページ４０６ａに格納される。次の論理ページ４１６の次の物理ページ行４１０ａ〜ｍ、ｐ内のパリティデータ４０８ｐは、第２の記憶素子４０２ｂのための物理ページ４１０ｂ上に格納される。このパターンは、論理ページ４１６毎に続けられる。種々の実施形態において、パリティ交替モジュール６１０は、例えば、ページ４０６、４１０、４１２によって、ＰＥＢ４０４によって、パリティデータ４０８ｐを交替させる。
【０１５６】
一実施形態では、論理記憶サブセットに関して、パリティ交替モジュール６１０は、記憶空間回復動作後に、パリティデータを格納する記憶素子４０２を交互にする。記憶空間回復動作は、論理記憶サブセットからの有効データをコピーすること、及びその論理記憶サブセットを消去して、新たに書き込まれるデータを格納するために論理記憶サブセットを準備することを含む。記憶空間回復動作の一例は、ガーベージコレクションである。この実施形態では、パリティ交替モジュール６１０は、各ＥＣＣチャンク４１８のパリティデータ４０８ｐがＬＥＢ４１４の１つのＰＥＢ（例えば、ＰＥＢ１  ４０４ａ）に格納されるようにし、その後、ガーベージコレクションプロセス後に、同じＬＥＢ４１４の異なるＰＥＢ（例えば、ＰＥＢ２  ４０４ｂ）に交替させることができる。ガーベージコレクションプロセスでは、有効データがＬＥＢ４１４からコピーされ、ＬＥＢ４１４がデータを記憶するために再び利用することができるようになる。
【０１５７】
一実施形態では、データ読出しモジュール５０４は、読み出す度に同じ記憶素子４０２からデータを読み出し、パリティ交替モジュール６１０は、パリティデータを格納する記憶素子４０２を交互にする。データ読出しモジュール５０４によって読み出される度に、パリティ交替モジュール４１０が、パリティデータ４０８ｐが記憶素子４０２に格納されるようにするとき、結果として、データ読出しモジュール５０４はパリティデータ４０８ｐを読み出すことになる。
【０１５８】
一実施形態では、データ読出しモジュール５０４は、読出し交替モジュール６１２を含み、読出し交替モジュールは、データ読出しモジュール５０４がデータを読み出すＮ＋Ｐ個の記憶素子４０２のうちのＸ個の記憶素子４０２を交替させる。Ｎ個の記憶素子４０２がデータを格納し、単一のＰ個の記憶素子４０２がパリティデータを格納する場合の特定の読出しに対する一実施形態では、データ読出しモジュール５０４は、ＥＣＣチャンクを格納するＮ個の記憶素子４０２の中からＮ−１個の記憶素子４０２を読み出し、パリティデータ４０８ｐを格納する記憶素子４０２を読み出す。別の読出し時に、データ読出しモジュール５０４は、ＥＣＣチャンク４１８を格納するＮ個の記憶素子４０２ａ〜ｎを読み出す場合がある。異なる読出し動作中に、読出し交替モジュール６１２は、データ読出しモジュール５０４が同じ論理ページ４１６の異なる記憶素子４０２を読み出すようにする。読出し交替モジュール６１２は、ウェハレベリングのために、及び潜在的な故障が検出されなくなるのを低減するために、Ｎ＋Ｐ個の記憶素子４０２の中から読み出されるＸ個の記憶素子４０２を交替させる。当業者は、読出し交替モジュール６１２が、データ読出しモジュール５０４がデータを読み出す記憶素子４０２をいかに交替させるかを特定する他の方法を理解するであろう。
【０１５９】
一実施形態では、パリティ交替モジュール６１０は、各記憶素子４０２の記憶サブセットに関してパリティデータ４０８ｐを格納する論理ページ４１６の記憶素子４０２を交互にし、読出し交替モジュール６１２は、データ読出しモジュール５０４がデータを読み出すＸ個の記憶素子４０２の記憶素子４０２を交替させる。特定の実施形態では、パリティデータを格納する記憶素子４０２がどこで交替するかに関係なく、読出し交替モジュール６１２は、記憶素子４０２を交替させて、データ読出しモジュール５０４がＥＣＣチャンク４１８の少なくとも一部を格納するＮ個の記憶素子４０２からデータを読み出し、パリティデータを格納するＰ個の記憶素子４０２からデータを読み出さないようにする。それゆえ、パリティデータは交替するが、パリティデータはそれでも読み出されない。その後、周期的読出しモジュール６０８は、パリティデータを格納する記憶素子４０２を周期的に読み出す。当業者は、パリティ交替モジュール６１０及び読出し交替モジュール６１２が、読み出される記憶素子４０２を交替させるために互いにインタラクトして動作することができる種々の方法を理解するであろう。
【０１６０】
図７は、本発明による、冗長記憶システム内のデータ完全性を高める方法７００の一実施形態を示す概略フロー図である。方法７００が開始し、受信モジュール５０２がＮ＋Ｐ個の記憶素子から成るアレイ４００に亘る論理ページ４１６から、要求されたデータを読み出すための読出し要求を受信する（７０２）。記憶素子のアレイ４００は、ＥＣＣチャンク４１８の一部を格納するＮ個の記憶素子４０２と、パリティデータを格納するＰ個の記憶素子４０２とを含む。
【０１６１】
受信モジュール５０２が読出し要求を受信する（７０２）のに応答して、データ読出しモジュール５０４が、Ｎ＋Ｐ個の記憶素子４０２のＸ個の各記憶素子４０２上の物理ページ４０６の少なくとも一部からデータを読み出す（７０４）。ただし、ＸはＮに等しい。それゆえ、データ読出しモジュール５０４は、記憶素子４０２の全数よりも少ない数の記憶素子を読み出す。
【０１６２】
読み出されたデータの一部がパリティデータを含むのに応答して、再生モジュール５０６が、データ読出しモジュール５０４によって読み出されたパリティデータ及びパリティデータでない読み出されたデータの残りの部分を用いて、必要に応じて、紛失データを再生する（７０６）。再生モジュール５０６によって生成されるデータは、紛失データの代わりに再生されたデータを代用して、ＥＣＣモジュール５０８に代用ＥＣＣチャンク４１８を与える。ＥＣＣモジュール５０８が、読み出されたデータ及び任意の再生された紛失データを含むＥＣＣチャンク４１８が誤りを有するか否かを判断し、方法７００は終了する。
【０１６３】
図８は、本発明による、冗長記憶システムにおいてデータ完全性を高める方法の別の実施形態８００を示す概略フロー図である。方法８００が開始し、受信モジュール５０２がＮ＋Ｐ個の記憶素子から成るアレイ４００に及ぶ論理ページ４１６から、要求されたデータを読み出すための読出し要求を受信する（８０２）。記憶素子のアレイ４００は、ＥＣＣチャンク４１８の一部を格納するＮ個の記憶素子４０２と、パリティデータを格納するＰ個の記憶素子４０２とを含む。さらに、パリティ交替モジュール６１０が、アレイ４００上の各記憶素子４０２の記憶サブセットに関して、パリティデータを格納する論理ページ１６の記憶素子４０２を交互にする。
【０１６４】
受信モジュール５０２が読出し要求を受信する（８０２）と、データ読出しモジュール５０４が、読み出すべきＸ個の記憶素子４０２を決定する（８０４）。データ読出しモジュール５０４は、パリティデータを格納しない記憶素子４０２だけを読み出すことを決定する。データ読出しモジュール５０４は、読出し交替モジュール６１２を通じて、所定の読出しスケジュール又はアルゴリズムを参照し、データを読み出すべきＸ個の記憶素子４０２を決定する。
【０１６５】
データ読出しモジュール５０４が、Ｎ＋Ｐ個の記憶素子４０２のＸ個の各記憶素子４０２上の物理ページ４０６の少なくとも一部からデータを読み出す（８０６）。ただし、ＸはＮに等しい。再生モジュール５０６が、読み出されたデータの一部がパリティデータを含むか否かを判断する（８０８）。再生モジュール５０６が、読み出されたデータの一部がパリティデータを含むと判断する場合には（８０８）、再生モジュール５０６は、紛失データを再生し（８１０）、それにより、読み出されなかったＥＣＣチャンク４１８の部分を補償する。再生モジュール５０６が、読み出されたデータの一部がパリティデータを含まないと判断する場合には（８０８）、再生モジュール５０６はデータを再生しない。
【０１６６】
ＥＣＣモジュール５８０が、ＥＣＣチャンク４１８が任意の誤りを含むか否かを判断する（８１２）。ＥＣＣチャンク４１８は、読み出されたデータと、任意の再生された紛失データとを含む。ＥＣＣモジュール５８０が、ＥＣＣチャンク４１８が誤りを含まないと判断する場合には（８１２）、方法８００は終了する。代わりに、ＥＣＣモジュール５８０が、ＥＣＣチャンク４１８が誤りを含むと判断する場合には（８１２）、ＥＣＣチェックモジュール６０２が、ＥＣＣチャンク４１８に格納されるＥＣＣを用いて、それらの誤りが訂正可能であるか否かを判断する（８１４）。ＥＣＣチェックモジュール６０２が、ＥＣＣを用いて誤りが訂正可能であると判断する場合には（８１４）、ＥＣＣモジュール５８０が、ＥＣＣを用いて誤りを訂正し（８１６）、方法８００は終了する。
【０１６７】
逆に、ＥＣＣチェックモジュール６０２が、誤りがＥＣＣを用いて訂正不可能であると判断する場合には（８１４）、デバイス誤り特定モジュール６０６が、読出しデータモジュール５０４によって読み出されない１又は複数の記憶素子４０２からデータを読み出す（８１８）。デバイス誤り特定モジュール４０２は、検出装置１１８に関連する説明において以下で説明されるように、どの記憶素子４０２が誤りを引き起こし、ＥＣＣチャンク４１８の誤りを訂正することができないほど多くしているかを特定する（８２０）。代用モジュール６０４が、ＥＣＣチャンク４１８内のデータに訂正することができないほどの誤りを引き起こした記憶素子４０２からのデータに代用データを代入し（８２２）、その方法８００は戻り、ＥＣＣモジュール５０８が、代用ＥＣＣチャンク４１８が誤りを有するか否かを判断する（８１２）。一実施形態では（図示せず）、デバイス誤り特定モジュール６０６は、どの記憶素子４０２が誤りを有するかを特定することができず、エラーメッセージを送出する。
【０１６８】
図７の方法７００及び図８の方法８００によれば、障害、誤動作等の場合にデータを回復するために必要とされない限り、Ｐ個の記憶素子４０２が通常読み出されないように、ＥＣＣチャンク４１８を読み出すために必要とされる数の記憶素子４０２だけからデータを読み出すことができるようになる。方法７００、８００は、読み出されるデータに隣接するデータに影響を及ぼす、読出しによる外乱の回数を少なくことによって、固体記憶デバイス１０２の寿命を延ばし、デバイス１０２に格納されるデータの品質を改善することができる。
【０１６９】
障害が生じたデータ記憶機構の検出
図９Ａは、本発明による、故障した記憶機構を検出し、置き換えるための装置の一実施形態９００を示す概略ブロック図である。装置９００は検出装置１１８の一実施形態を含む。その装置は、固体記憶機構１１０又は任意のタイプの揮発性若しくは不揮発性メモリチップを含む、データ記憶機構内の故障を検出することができる。ＮＡＮＤフラッシュメモリのような固体記憶機構１１０は、高い故障率を有することが、最近になって固体デバイス製造業者によって確認されている。さらに、上記のように、ＥＣＣチャンク４１８が複数の記憶素子４０２に及ぶとき、多くの場合、誤りを引き起こした記憶素子４０２をＥＣＣだけによって特定することができないこともある。
【０１７０】
装置９００は、メモリデバイス９０２のアレイ内の障害が生じたメモリチップ（「メモリデバイス９０２」）又はチップの一部を位置特定し、その後、別のメモリデバイス９０４又はメモリデバイス９０４の一部からのデータを代用する。そのアーキテクチャは、メモリデバイス９０２のアレイを含み、１又は複数の予備デバイス９０４を備える。一実施形態では、メモリデバイス９０２、９０４は固体記憶機構であり、メモリデバイス９０２、９０４は記憶素子４０２と呼ばれることもある。これ以降、「メモリデバイス」及び「記憶素子」は交換可能に用いられ、他に指示されない限り、メモリデバイス９０２、９０４及び記憶素子４０２はいずれも、固体記憶機構、又は他のタイプの揮発性若しくは不揮発性記憶機構とする。各メモリデバイス９０２は上記のような記憶素子４０２を含む。さらに、メモリデバイス９０２ａ〜ｎのアレイは、上記のようなＮ＋Ｐ個の記憶素子から成るアレイ４００を含む。具体的には、記憶素子のアレイ４００は、それぞれがＥＣＣチャンク４１８の一部を格納するＮ個の記憶素子４０２と、パリティデータを格納するＰ個の記憶素子４０２とを含む。上記のように、ＥＣＣチャンク４１８はデータと、そのデータから生成されるＥＣＣとを格納する。ＥＣＣチェック／訂正回路９１０は、ＥＣＣチャンク４１８に格納されるＥＣＣを用いて、そのデータの中に誤りがあるか否かを判断する。ＥＣＣチェック／訂正回路は、上記のＥＣＣチェックモジュール６０２及び／又はＥＣＣ訂正モジュール６１４の一実施形態を含む。
【０１７１】
メモリデバイス９０２、９０４は、構造、サイズ等に関して同じ場合がある。典型的には、メモリデバイス９０２、９０４はメモリチップであるが、一群のチップ、ＤＩＭＭ等とすることもできる。メモリデバイス９０２は、上記のようなＮ個の記憶素子４０２を含む。予備メモリデバイス９０４にパリティ情報が格納される。さらに、予備メモリデバイス９０４は、上記のような、パリティデータを格納するＰ個の記憶素子４０２を含む。単一の予備メモリデバイス９０４ａが含まれる場合には、予備メモリデバイス９０４ａは典型的には、メモリデバイス９０２ａ〜ｎのアレイから生成される単純なパリティ情報を含む。複数の予備メモリデバイス９０４ａ〜ｍが用いられる場合には、予備メモリデバイス９０４ａ〜ｍに多次元パリティ又は他のさらに複雑なパリティ情報が格納される。別の実施形態では、複数の予備メモリデバイス９０４ａ〜ｍは単純なパリティデータを格納する。例えば、各予備メモリデバイス９０４が同じパリティデータを含む場合がある。メモリデバイス９０２、９０４は、スタティックランダムアクセスメモリ（「スタティックＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）等のような揮発性メモリとすることができるか、又はフラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭ又はＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、相変化ＲＡＭ（「ＰＲＡＭ」）、レーストラックメモリ、メムリスタメモリ等のような不揮発性メモリとすることができる。
【０１７２】
予備メモリデバイス（複数可）９０４に格納されるパリティ情報は、典型的には、入力としてメモリデバイス９０２ａ〜ｎからのデータを用いる排他的ＯＲ（「ＸＯＲ」）演算を用いて導出される。アレイ９０２、９０４からデータが読み出されるとき、典型的には並列に読み出されるので、データの一部がアレイの各メモリモジュール９０２から読み出される。簡単にするために、本実施形態は、メモリアレイ９０２、９０４内の全てのデータを読み出す。この設計は、上記のようにデータ完全性を高めるために、メモリデバイスの全数よりも少ない数のメモリデバイスを読み出すことができる。
【０１７３】
ＥＣＣ（パリティ情報を含まない）を用いて、メモリデバイス１０２から読み出されるデータが有効であるか否かを判断する。ＥＣＣは複数のＥＣＣチャンク４１８内に配置され、各ＥＣＣチャンク４１８内のＥＣＣは、ＥＣＣチャンク４１８内のデータに対応する。さらに、ＥＣＣチャンク４１８は、複数のメモリデバイス９０２ａ〜ｎに及ぶ場合がある。データが有効であることを判断するために、又はデータがＥＣＣを用いて訂正可能である誤りを含むか否かを特定するために、ＥＣＣチェック／訂正回路９１０によってＥＣＣが用いられる場合には、有効データ又は訂正されたデータは、装置９００によって何も処理されることなく渡される。
【０１７４】
しかしながら、ＥＣＣチェック／訂正回路９１０が、データが無効であり、リダクション装置１１６に関連して上記で説明された状況と同じようにＥＣＣによって訂正することができる誤りよりも多くの誤りがあることを確認する場合には、メモリデバイス９０２ａ〜ｎのうちの１又は複数のメモリデバイスの全て又は一部が故障している確率が高い。この場合、どのメモリデバイス９０２が機能していないか、又は誤りのあるデータを大量に含むかを見つけるために、メモリデバイス９０２ａ〜ｎ毎に１つずつ、予備メモリデバイス（複数可）９０４からのパリティ情報が代用される。データ回復部９０６は、ＸＯＲロジックを含み、そのロジックによってパリティ情報を代用することができ、テストされるメモリデバイス９０２のための有効データが、予備パリティデバイス９０４から導出されるデータによって置き換えられるようになる。
【０１７５】
一例では、４つのメモリデバイス９０２ａ〜ｄが、パリティデータＰを有する１つの予備メモリデバイス９０４ａと共にアレイを構成し、それぞれデータＡ、Ｂ、Ｃ、Ｄを格納している。パリティ情報Ｐを生成するために、データのＸＯＲ演算が行われ：Ｐ＝Ａ＾Ｂ＾Ｃ＾Ｄ（図には示されないが、「＾」はＸＯＲ演算である）、Ｐが予備メモリデバイス９０４ａに格納される。例えば、第３のメモリデバイス９０２ｃが不良であり、データＡ、Ｂ、Ｃ、ＤをＥＣＣで訂正することができないと仮定する。破損したデータＣ’が読み出されることになり、ＥＣＣチェック／訂正回路９１０がＥＣＣを用いて、データＡ、Ｂ、Ｃ’、Ｄが破損しているが、訂正することができないと判断することになる。ＥＣＣチャンク４１８がメモリデバイス９０２ａ〜ｎに及び、ＥＣＣチャンク４１８の一部が各メモリデバイス９０２上に格納されるようにデータＡ、Ｂ、Ｃ’、Ｄが格納される場合、装置９００は、ＥＣＣだけでは、第３のメモリデバイス９０２ｃの全て若しくは一部が故障しているか、又は訂正することができないほど多くの誤りを有することを検出することができない場合がある。
【０１７６】
図９Ａに示される実施形態では、ＭＵＸ９１２及びＸＯＲロジック９１４が各メモリデバイス９０２に含まれる。各ＭＵＸ９１２は、そのメモリデバイス９０２からのデータ、又は関連するＸＯＲ９１４からのデータを選択することができる。各ＸＯＲ９１４は、読み出されたデータと、データ回復部９０６からのパリティデータとを結合する。データ回復部９０６は、読み出されたデータとのＸＯＲ演算が行われたパリティ情報を含む。読み出されたデータは典型的にはバッファリングされ（９０８）、メモリデバイス９０２、９０４に誤りがあっても変化しないようにする。ＭＵＸ９１２及びＸＯＲ９１４は、再生モジュール５０６及び／又は代用モジュール６０４の一部又は全ての一実施形態を含む。
【０１７７】
メモリデバイス９０２、９０４の選択を解除しておくための制御信号は図示されていない。選択されないとき、読み出されないメモリデバイス９０２のための関連するＭＵＸ９１２は同時に選択されることになり、データ回復部９０６によって紛失データが再生されることになる。
【０１７８】
装置９００は、メモリデバイス９０２から読み出されるデータの代わりに、ＸＯＲ９１４からのデータを選択することによって、各メモリデバイス９０２ａ〜ｎをテストする。そのプロセスは、ＥＣＣチャンクが訂正可能である判断されるまで、メモリデバイス９０２ａ〜ｎ毎に繰り返される。装置９００は、制御部９１６を通じて、データ及びメモリデバイス９０２の選択を制御することができる。制御部９１６は、データを選択／選択解除するロジックを制御し、故障したメモリデバイス９０２又はメモリデバイス９０２の一部を分離するために繰り返すことができる。さらに、制御部９１６は、デバイス誤り特定モジュール６０６、パリティ交替モジュール６１０及び読出し交替モジュール６１２の一実施形態を含む。
【０１７９】
上記の例において、第１のメモリデバイス９０２ａが最初にテストされる場合には、第１のＭＵＸ９１２ａはＸＯＲ９１４ａデータを選択する。この例では、データ回復部９０６は、Ａ＾Ｂ＾Ｃ’＾Ｄ＾Ｐになる。Ｐが表すものを代入すると、データ回復部９０６は、Ａ＾Ｂ＾Ｃ’＾Ｄ＾Ａ＾Ｂ＾Ｃ＾Ｄ＝（Ａ＾Ａ）＾（Ｂ＾Ｂ）＾（Ｃ’＾Ｃ）＾（Ｄ＾Ｄ）＝０＾０＾Ｃ＾Ｃ’＾０＝Ｃ＾Ｃ’である。これは、第１のメモリデバイスから読み出されたデータＡとＸＯＲ演算される：Ａ＾Ｃ＾Ｃ’。Ｃ及びＣ’は相殺しないので、その結果はＡ’であり、その結果は破損していることになり、ＥＣＣ９１０は依然として訂正不可能な誤りを検出することになる。このプロセスは、メモリデバイス９０２毎に繰り返される。
【０１８０】
第３のメモリデバイス９０２ｃがテストされるときに、破損したデータＣ’が第３のメモリデバイス９０２ｃから読み出され、他のメモリデバイス９０２ａ、９０２ｂ、９０２ｄと共にＸＯＲ演算される：データ回復部９０６＝Ａ＾Ｂ＾Ｃ’＾Ｄ＾Ｐである。Ｐが表すものを代入すると、データ回復部９０６＝Ａ＾Ｂ＾Ｃ’＾Ｄ＾Ａ＾Ｂ＾Ｃ＾Ｄ＝（Ａ＾Ａ）＾（Ｂ＾Ｂ）＾（Ｃ’＾Ｃ）＾（Ｄ＾Ｄ）である。自らとＸＯＲ演算されるデータは０であるので、ＸＯＲ＝０＾０＾Ｃ’＾Ｃ＾０＝Ｃ’＾Ｃである。第３のＭＵＸ９１２ｃが第３のメモリデバイス９０２ｃから直接データを選択する代わりに、第３のＸＯＲ９１４ｃデータを選択する場合には、ＭＵＸ９１２ｃにおけるデータは第３のメモリデバイス９０２ｃのデータＣ’と、データ回復部ＸＯＲ９０６の出力とのＸＯＲである：Ｃ’＾（Ｃ’＾Ｃ）＝Ｃ。したがって、正しいデータＣが無効データＣ’の代わりに代用される。この時点において、ＥＣＣチェック／訂正回路９１０は典型的には、データが有効であるか又は訂正可能であると判断する。
【０１８１】
データが有効であるか又は訂正可能であると判断されると、データがＥＣＣによって訂正可能であると判断される時点において選択されたメモリデバイス９０２ｃが、故障したメモリデバイス９０２ｃであると特定される。この時点において、故障したメモリデバイス９０２ｃのためのＭＵＸ９１２ｃが永続的に選択され、パリティ情報を有する予備メモリデバイス９０４ａを利用して、故障したメモリデバイス９０２ｃに代わって、故障しているメモリデバイス９０２ｃの少なくとも１つの領域のためのデータを与える。その領域は、ページ、複数のページ、ＰＥＢ、複数のＰＥＢ、ダイ、チップ若しくはメモリデバイス９０２ｃ内の任意の他の分割とすることができるか、又はメモリデバイス９０２ｃ全体を含む場合もある。パリティデータが依然として予備メモリデバイス９０２ｃに格納され、上記のプロセスを用いて、予備メモリデバイス９０４ａから、破損したデータＣ’の代わりに用いられる正しいデータＣを導出する。
【０１８２】
上記の例において、装置９００が、メモリデバイス９０２ｃが誤りのあるデータを含むと判断すると、破損したデータＣ’を有するメモリデバイス９０２ｃからのデータは、予備メモリデバイス９０４ａから導出される訂正済みのデータで代用される。このプロセスは誤りのあるデータを訂正するが、それは別のデバイス９０２に代わって１つのメモリモジュール９０４を代用する。本発明は、以下で説明されるように、誤りのあるメモリロケーションを解析することによって、メモリデバイス９０２内の記憶ロケーションの任意のサブセット（領域）を予備メモリデバイス９０４からの一致するデータで代用することも含む。
【０１８３】
例えば、装置９００がＥＣＣ９１０を用いて訂正不可能な誤りを検出し、その誤りを分離し、データを確定すると、装置９００はメモリロケーションのような情報と共に誤りを記録する場合がある。誤りが生じる度に、誤り情報が記録され、その後、解析されて、その誤りを特定のページ、ブロック、論理消去ブロック等に分離する。メモリデバイス９０２内の或るエリアが特定されると、故障したエリアを有するメモリデバイス９０２が置き換えられるまで、その装置は、そのエリアを閉鎖し、予備メモリデバイス（複数可）９０４からのデータを代用する。誤りの記録は以下でさらに詳細に説明される。
【０１８４】
本発明は、訂正不可能な誤りを検出するステップ、パリティデータを用いて誤りを選択的に分離するステップ、その後、予備メモリデバイス９０４内のデータを用いて、誤りのあるデータを訂正するステップを成し遂げる数多くの他の方法を予想する。図９Ａ及び図９Ｂに示される例は８ビットのデータバスを示すが、本発明は、それよりも広い、又は狭いデータバスを用いる他のアレイにも適用可能である。
【０１８５】
図９Ｂは、本発明による、故障したデータ記憶機構を検出し、置き換えるための装置の別の実施形態９５０を示す概略ブロック図である。装置の実施形態９５０では、ＭＵＸ９１２の上方のＸＯＲ９１４が取り除かれ、データ回復部９０６からのデータはＭＵＸ９１２に直接入力される。第２の１組のＭＵＸ９５２が、メモリデバイス９０２から、及び論理「０」を与えるために接地される１組のデータ線から、読み出されるデータを受信する。
【０１８６】
誤りを分離するとき、１組のＭＵＸ（例えば、９５２ａ、９１２ａ）が、適切なメモリデバイス（例えば、９０２ａ）からデータを選択しないように設定される。上記の例に戻ると、再び、アレイがデータＡ、Ｂ、Ｃ、Ｄ及びパリティＰを含み、パリティは図９Ａの場合と同じようにして生成される（例えば、Ｐ＝Ａ＾Ｂ＾Ｃ＾Ｄ）。再び、第３のメモリデバイス９０２ｃが破損しているので、Ｃ’が読み出されると仮定する。分離のために第１のメモリデバイス９０２ａが選択される場合には、メモリデバイス９０２ａの下にある第１のＭＵＸ９５２ａは全て０を読み出す。その後、データ回復ブロックは、データとパリティとをＸＯＲ演算する：データ回復部９０６＝０＾Ｂ＾Ｃ’＾Ｄ＾Ｐ＝０＾Ｂ＾Ｃ’＾Ｄ＾Ａ＾Ｂ＾Ｃ＾Ｄ＝（０＾Ａ）＾（Ｂ＾Ｂ）＾（Ｃ’＾Ｃ）＾（Ｄ＾Ｄ）＝Ａ＾０＾Ｃ’＾Ｃ＾０＝Ａ＾Ｃ’＾Ｃ＝Ａ’。その後、これは第２のＭＵＸ１１２ａに与えられる。ＥＣＣチェック／訂正回路９１０は、訂正不可能な誤りを検出し続ける。
【０１８７】
第３のメモリデバイス９０２ｃが選択されるとき、データ回復部出力はＡ＾Ｂ＾０＾Ｄ＾Ｐ＝Ａ＾Ｂ＾０＾Ｄ＾Ａ＾Ｂ＾Ｃ＾Ｄ＝（Ａ＾Ａ）＾（Ｂ＾Ｂ）＾（０＾Ｃ）＾（Ｄ＾Ｄ）＝０＾０＾０＾Ｃ＾０＝Ｃである。その後、第３のメモリデバイス９０２ｃライン内の第２のＭＵＸ１１２ｃは、データ回復部９０６出力を選択し、それはＣであるので、ＥＣＣチェック／訂正回路９１０は典型的には有効データＡ、Ｂ、Ｃ及びＤを検出する。その後、解析及びガーベージコレクションのために、その誤りが記録される場合があるか、又は第３のメモリデバイス９０２ｃの選択が解除され、予備メモリデバイス（複数可）９０４からのデータを用いて、訂正されたデータを与えることができる。
【０１８８】
当業者は、ＥＣＣチェック／訂正回路９１０及びＥＣＣチャンク４１８に格納されるＥＣＣを用いて訂正不可能な誤りを検出するステップと、メモリデバイス９０２を順次に選定し、パリティデータを用いて訂正されたデータを代用することによって誤りを分離するステップと、その後、メモリデバイス９０２が選択され、ＥＣＣチェック／訂正回路９１０が、データが有効であるか又は訂正可能であると判断すると、誤りを訂正するステップとを成し遂げる他の回路を理解されよう。さらに、本明細書において記述される発明は、複数のメモリデバイス９０２が故障しているか、又は不良データを含み、複数の予備メモリデバイス９０４からのデータと共に複雑な代用パターンを用いて、故障したメモリデバイス９０２を位置特定する実施形態も可能である。その実施形態では、ＥＣＣチャンク４１８内の任意の誤りが訂正可能であるようなメモリデバイス９０２が見つけられるまで、複数の予備メモリデバイス９０４からのパリティデータを用いてデータを作成し、対応する数のメモリデバイス９０２のデータの代わりに交替方式において代用する。
【０１８９】
図１０は、本発明による、障害が生じたデータ記憶機構を検出し、置き換えるための装置の別の実施形態１０００を示す概略ブロック図である。装置１０００は、検出装置１１８の一実施形態を含み、一実施形態において、読出しモジュール１００２と、ＥＣＣモジュール１００４と、分離モジュール１００６とを含み、それらのモジュールは以下で説明される。
【０１９０】
一実施形態では、装置１０００は読出しモジュール１００２を含み、該読出しモジュールはメモリデバイスのアレイからデータを読み出す。そのアレイは２つ以上のメモリデバイス９０２と、メモリデバイス９０２からのパリティ情報を格納する１又は複数の予備メモリデバイス９０４とを備える。いくつかの実施形態では、読出しモジュール１００２は、メモリデバイス９０２、９０４のアレイに及ぶ論理ページ４１６の少なくとも一部からデータを読み出す。さらに、メモリデバイス９０２、９０４のアレイは、Ｎ＋Ｐ個の記憶素子４０２から成るアレイ４００も含む。上記のように、記憶素子４０２のアレイは、それぞれがＥＣＣチャンク４１８の一部を格納するＮ個の記憶素子４０２と、パリティデータを格納するＰ個の記憶素子４０２とを含む。
【０１９１】
分離モジュール１００６に関して以下でさらに詳細に説明されるように、選択された被テストメモリデバイスからのデータは用いられず、置き換えられる。それゆえ、一実施形態では、読出しモジュール１００２は、Ｎ＋Ｐ個の記憶素子４０２のＸ個の各記憶素子４０２上の物理ページ４０６の少なくとも一部から読み出す。ただし、Ｘは（Ｎ＋Ｐ）−１に等しい。読み出されない記憶素子４０２は、選択された被テスト記憶素子４０２である。
【０１９２】
一実施形態では、装置１０００はＥＣＣモジュール１００４を含み、ＥＣＣモジュールは、誤り訂正符号（「ＥＣＣ」）を用いて、テストされるデータ内に１又は複数の誤りがあるか否か、及びその誤りがＥＣＣを用いて訂正可能であるか否かを判断する。テストされるデータは、読出しモジュール１００２によって読み出されるデータを含む。いくつかの実施形態では、ＥＣＣは、読出しモジュール１００２によって読み出されるデータと共にＥＣＣチャンク４１８に格納される。そのデータを用いて、ＥＣＣチャンク４１８内にそのデータと共に格納されるＥＣＣを生成する。それゆえ、テストデータは、読出しモジュール１００２によって読み出されるか、又は以下でさらに詳細に説明される分離モジュール１００６によって生成されるような、ＥＣＣチャンク４１８を含む。
【０１９３】
一実施形態では、装置１０００は分離モジュール１００６を含み、ＥＣＣモジュール１００４が、読出しモジュール１００２によって読み出されるデータ内に誤りがあり、かつそれらの誤りがＥＣＣを用いて訂正不可能であると判断するのに応じて、分離モジュール１００６は、メモリデバイスのアレイから１つのメモリデバイス９０２を選択する。データ内に存在する訂正不可能な誤りは、故障しているメモリデバイス９０２／記憶素子４０２を指示するであろう。
【０１９４】
分離モジュール１００６は、選択されたメモリデバイス９０２から読み出されるデータを、１又は複数の予備メモリデバイス９０４上に格納されるパリティデータから生成されるデータ（「置換データ」）及び選択されないメモリデバイス９０２から読み出されるデータ（「利用可能データ」）を含むデータで置き換える。一実施形態では、分離モジュール１００６はＸＯＲロジックを用いて、テストされる選択されたメモリデバイス９０２のためのデータを、置換データ及び利用可能データから導出されるデータで代用する。
【０１９５】
別の実施形態では、ＥＣＣチャンク４１８内のＥＣＣは、特定のメモリデバイス９０２内の誤りのある多数のビットないし全てのビットを訂正することができる。この実施形態では、この専用ＥＣＣ符号が、誤りを引き起こしたメモリデバイス９０２を直接特定することができる。その実施形態では、分離モジュール１００６は、訂正されたデータの出力を解析し、ＥＣＣモジュール１００４から与えられる情報から、どのメモリデバイス９０２が故障しているかを特定する。
【０１９６】
さらに、分離モジュール１００６は複数のメモリデバイス９０２において繰り返し、訂正不可能な誤りが生じるメモリデバイス９０２を見つける。具体的には、以下でさらに詳細に説明されるように、選択されたメモリデバイス９０２が訂正不可能な誤りを検出されないのに応答して、分離モジュール１００６は、テストするための次のメモリデバイス９０２を選択する。次のメモリデバイス９０２は、テストされたメモリデバイス９０２の選択を解除した後に選択し、テストするためのメモリデバイスを含む場合がある。それゆえ、誤りのあるメモリデバイス９０２が見つけられるまで、又は全てのメモリデバイス９０２がテストされるまで、分離モジュール１００６は、テストするための各メモリデバイス９０２を選択する。一実施形態では、故障したメモリデバイス９０２を検出することなく、全てのメモリデバイス９０２が選択され、テストされた場合には、分離モジュール１００６は戻るか、又は誤りを報告する。そのような場合には、複数のメモリデバイス９０２に誤りがある場合があり、ユーザによるさらなる措置が必要とされる場合がある。一実施形態では、分離モジュール１００６は、以前に故障したメモリデバイス９０２の識別情報を格納することができ、分離モジュール１００６が、それらのメモリデバイス９０２において後に繰り返す必要がないようにする。分離モジュール１００６は、図９Ａ及び図９Ｂにおいて示される制御部９１６を含む。
【０１９７】
ＥＣＣモジュール１００４は、テストデータ、ここでは置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能であるような誤りを含むか否かを判断する。置換データと結合される利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能であるような誤りを含むという事実は、そのデータが置き換えられた選択されたメモリデバイス９０２が、誤りが生じたメモリデバイスであったことを指示することになる。
【０１９８】
データが有効であるか又は訂正可能であると判断されると、データがＥＣＣによって訂正可能であると判断される時点において選択されたメモリデバイス９０２は、装置１０００によって、障害が生じたメモリデバイスであると判断され、これ以降、「誤りのある選択されたメモリデバイス９０２」である。置換データと結合された利用可能データが有効であり、誤りを含まない場合には、分離モジュール１００６がデータを置き換えた、誤りのある選択されたメモリデバイス９０２が、誤りの原因である。同様に、残存する誤りのみがＥＣＣを用いて訂正可能である場合には、訂正不可能な誤りは、典型的には、分離モジュール１００６がデータを置き換えた、選択されたメモリデバイス９０２から生じたものである。
【０１９９】
図９Ａ及び図９Ｂは、リダクション装置１１６に関して上記で説明されたように、データを格納する特定のメモリデバイス９０２及びパリティデータを格納する特定のメモリデバイス９０４を示すが、パリティデータはページ、消去ブロック他によって交替する場合があるので、或るページに関して、予備メモリデバイス９０４はアレイの最後にある場合があり、次のページに関して、予備メモリデバイス９０４はアレイ内の最初のデバイスである場合があり、他にも同様に考えられる。パリティデータを格納するメモリデバイス９０４は、図９Ａ及び図９Ｂにおいて示されるようなパリティ交替方式及び回路に基づいてシフトされる場合があるか、又は類似の回路を用いることによって、アレイ内の任意のデバイスが用いられるパリティデータを格納することができるようにし、それにより別のメモリデバイス９０２の代わりをする。
【０２００】
図１１は、本発明による、障害が生じたデータ記憶機構を検出し、置き換えるための装置のさらなる実施形態１１００を示す概略ブロック図である。装置１１００は読出しモジュール１１００と、ＥＣＣモジュール１００４と、分離モジュール１００６とを含み、それらのモジュールは、図１０の装置１０００に関して上記で説明されたのと実質的に同じである。種々の実施形態において、装置１１００は、さらに、リタイアメントモジュール１１０２と、メモリデバイス再構成モジュール１１０４と、ロギングモジュール１１０６と、記憶領域テストモジュール１１０８と、エリア再構成モジュール１１１０と、解析モジュール１１１２と、誤り記憶回復モジュール１１１４と、訂正データモジュール１１１６と、報告モジュール１１１８とを含み、これらのモジュールは以下で説明される。
【０２０１】
一実施形態では、装置１１００はリタイアメントモジュール１１０２を含む。ＥＣＣモジュール１１０４が誤りのある選択されたメモリデバイスを特定するのに応答して、リタイアメントモジュール１１０２は、選択されたメモリデバイス９０２を、又は選択されたメモリデバイス９０２上の１又は複数の記憶領域をリタイアさせる。それらの記憶領域は、メモリデバイス９０２上の物理的エリア又は論理的エリアを含み、選択されたメモリデバイスの少なくとも一部を含み、それらの領域が１又は複数の誤りを含む場合には、それらの領域をリタイアさせることができる。記憶領域は、１又は複数のＥＣＣチャンク４１８、１又は複数の物理ページ４０６、１又は複数の論理ページ４１６、１又は複数の物理消去ブロック４０４、１又は複数の論理消去ブロック４１４、チップ、チップの一部、１又は複数のダイの一部、１又は複数のダイ、若しくはメモリデバイス９０２／記憶素子４０２の任意の他の部分の１若しくは複数の部分を含む。
【０２０２】
リタイアメントモジュール１１０２は、リタイアした記憶機構を標準的な使用から永久に又は一時的に除外することによって、選択されたメモリデバイス９０２又は記憶領域（「リタイアした記憶機構」）をリタイアさせる。一実施形態では、リタイアメントモジュール１１０２は、リタイアする記憶機構が標準的な読出し及び書込みのためにもはや利用することができないことを記憶コントローラに通知することによって、リタイアする記憶機構をリタイアさせる。その後、リタイアした記憶機構はさらにテストされる場合があるか、永久に閉鎖される場合があるか、又はリタイアメントポリシーに基づいて追跡される場合がある。リタイアメントモジュール１１０２は、リタイアした記憶機構を消去する場合もあり、さらに誤りを見つけるためにリタイアした記憶機構をモニターしながら、リタイアした記憶機構において引き続き演算することができるようにする。当業者は、記憶機構をリタイアさせる他の方法を理解するであろう。
【０２０３】
リタイアメントモジュール１１０２は、リタイアメントポリシーに基づいてリタイアメントを判断する場合がある。一実施形態では、リタイアメントポリシーは、規則、ユーザプリファレンス、リタイアする記憶機構がリタイアする時点を特定する論理、リタイアする記憶機構がリタイアする方法等を含む。リタイアメントポリシーは、リタイアメントのための判定基準、種々のリタイアメントレベル、リタイアメントのための戦略を含む。例えば、リタイアメントポリシーは、或る特定の量の誤り、又は或るレベル若しくは深刻度の誤りの後に、リタイアした記憶機構が標準的な動作を一時的に停止され、テストプロトコルのためにマークされることを指定する。別の例では、リタイアメントポリシーは、或る特定の量の誤りの後に、ユーザに警報が送信されることを指定する。
【０２０４】
特定の実施形態では、リタイアメントモジュール１１０２は、誤りの後に記憶領域をマークするが、その後、ガーベージコレクションのような記憶空間回復動作を用いて、その記憶領域を回復することができるようにする。例えば、誤りを有する消去ブロックが消去され、後続のデータがその消去ブロックに書き込まれる。ＥＣＣモジュール１１０４及び分離モジュール１１０６を用いて、その消去ブロックにおいてさらに誤りが特定される場合には、その消去ブロックを永久にリタイアさせる。
【０２０５】
一実施形態では、リタイアメントポリシーは、リタイアする記憶機構に対するマクロリタイアメント戦略、すなわち「トップダウン」手法を指定する。具体的には、マクロリタイアメントは、初期エリアに欠陥があり、その初期エリアは、実際の欠陥よりも大きな記憶エリアを含むものと仮定する。初期エリアは、誤りのある選択されたメモリデバイス９０２上の記憶領域、又はデバイス全体を含む。その後、マクロリタイアメントは、さらにテストを実施して、その初期エリアを、実際に欠陥がある記憶領域まで小さくすることができる。一実施形態では、マクロリタイアメントは、選択されたメモリデバイス９０２に誤りがあるときに、メモリデバイス９０２全体がリタイアすることを指定する。この時点において、リタイアメントモジュール１１０２は、さらにテストを実施して、メモリデバイス９０２上の誤りの範囲を特定することができる。リタイアメントモジュール１１０２は、それらの誤りを、メモリデバイス９０２上の記憶領域にさらに分離することができる。誤りによって影響を及ぼされないメモリデバイス９０２上の記憶領域は、標準的な使用に戻される。それゆえ、マクロリタイアメント下では、リタイアする記憶領域が絞り込まれ、さらにテストを通じて分離される。
【０２０６】
別の実施形態では、リタイアメントポリシーは、リタイアする記憶機構に対するミクロリタイアメント戦略、すなわち「ボトムアップ」手法を指定する。具体的には、ミクロリタイアメントは、欠陥があることがわかっているか、又は欠陥があると仮定される初期エリアから開始し、その初期エリアを、欠陥がある他の記憶領域を含むように拡大することができる。ミクロリタイアメント下での一実施形態では、メモリデバイス９０２全体の代わりに、誤りを有する記憶領域だけを最初にリタイアさせる。リタイアメントモジュール１１０２は、さらに誤りを見つけるために、隣接する記憶領域においてさらにテストするか、又は標準的な読出しをモニターすることができる。さらなる誤りが見つけられる場合には、リタイアメントモジュール１１０２は、メモリデバイス９０２上のさらなる記憶領域をさらにリタイアさせる場合があるか、又はリタイアする記憶領域のサイズを大きくすることができる。リタイアメントモジュール１１０２は、メモリデバイス９０２上の誤りを位置特定すると共に、メモリデバイス９０２をモニターするために、以下でさらに説明されるような他のモジュールと協調して動作することができる。
【０２０７】
一実施形態では、装置１１００はメモリデバイス再構成モジュール１１０４を含み、該メモリデバイス再構成モジュールは、誤りのある選択されたメモリデバイスを識別し、それによってデータを生成して、将来の動作のために、選択されたメモリデバイス９０２から読み出されたデータを置き換える。上記のように、誤りのある選択されたメモリデバイスは、ＥＣＣモジュール１００４が、置換データと結合された利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能である誤りを含むと判断するのに応答して選択されたメモリデバイスとすることができる。メモリデバイス再構成モジュール１１０４は、リタイアメントモジュール１１０２と協調して、図９Ａ及び図９Ｂにおいて示されるように、リタイアしたメモリデバイス９０２からのデータを、置換パリティデータと結合された利用可能データで永久に、又は一時的に置き換えることができる。
【０２０８】
一実施形態では、装置１１００はロギングモジュール１１０６を含む。誤りのある選択されたメモリデバイスに応答して、ロギングモジュールは、選択されたメモリデバイス９０２の識別情報を記録し、かつ／又は１又は複数の誤りを含む１又は複数の記憶領域を指定するメモリロケーションデータを記録する。誤りが生じる度に、ロギングモジュール１１０６によって誤り情報が記録され、その後、解析されて、その誤りをページ、ブロック、消去ブロック等のような特定の記憶領域に分離することができる。メモリデバイス９０２内の記憶領域が特定されると、装置１１００は、そのエリアを分離して、誤りのある選択されたメモリデバイスが置き換えられるまで、予備メモリデバイス（複数可）９０４からのデータを代用することができる。
【０２０９】
ロギングモジュール１１０６は、リタイアメントモジュール１１０２と協調して動作し、メモリデバイス９０２又は記憶領域内の誤りを追跡することができる。例えば、マクロリタイアメントに従って、ロギングモジュール１１０２は、誤りのある選択されたメモリデバイスの識別情報を記録する場合があるが、１又は複数の誤りを有する記憶領域を含むメモリロケーションデータは記録しない。なぜなら、ロギングモジュール１１０２は、より大きなエリアから開始して、その後、誤りを分離するためである。誤りがあることがわかっているメモリデバイス９０２の領域を小さくするために、以下で説明されるように、ロギングモジュール１１０６は、記憶領域テストモジュール１１０８によって記憶領域をさらにテストすることによって特定される１又は複数の記憶領域のためのメモリロケーションデータを記録することもできる。
【０２１０】
別の実施形態では、ロギングモジュール１１０６は、誤りのある選択されたメモリデバイスの識別情報を記録する代わりに、ミクロリタイアメントに従って、メモリデバイス９０２上の１又は複数の誤りを含む１又は複数の記憶領域を記録する。それゆえ、メモリデバイス９０２全体が、誤りがあるとして記録されるのではなく、誤りを含む記憶領域だけが記録される。さらに、読出しモジュール１００２によって後続の読出しが実施され、ＥＣＣモジュール１００４及び分離モジュール１００６を用いて、訂正不可能な誤りであるが、置換データと利用可能データとを結合することによって訂正可能である誤りを有するさらなる記憶領域が特定されるのに応答して、ロギングモジュール１１０６は、選択されたメモリデバイス９０２内の１又は複数の誤りを含む１又は複数のさらなる記憶領域を指定するメモリロケーションデータを記録する場合もある。後続の読出しは、以下に説明されるように、テスト対象とする特定のさらなる記憶領域を設定するために記憶領域テストモジュール１１０８によって開始される読出しを含む。さらに、後続の読出しは、読出し要求からの標準的な読出しを含む。
【０２１１】
一実施形態では、装置１１００は、記憶領域テストモジュール１１０８を含み、記憶領域テストモジュールは、選択されたメモリデバイス９０２内の誤りを含む１又は複数の記憶領域を特定する。記憶領域テストモジュール１１０８は、マクロリタイアメントに従ってロギングモジュール１１０２によって記録されるメモリデバイス９０２内の記憶領域をテストする。それゆえ、記憶領域テストモジュール１１０８は、特定の被テスト記憶領域に関して上記で説明されたように、読出しモジュール１００２による後続の読出しを用いて１又は複数の誤りを有する記憶領域を特定し、ＥＣＣモジュール１００４及び分離モジュール１００６を用いて、テストされる記憶領域上のデータを置き換え、訂正不可能な誤りであるが、置換データと利用可能データとを結合することによって訂正可能である誤りを有する記憶領域を特定することによって、誤りを含むメモリデバイス９０２上のエリアをさらに分離することができる。
【０２１２】
例えば、ロギングモジュール１１０２は、マクロリタイアメントに従って、誤りのあるメモリデバイス９０２の識別情報を記録し、リタイアメントモジュール１１０２は、選択されたメモリデバイス９０２を標準的な使用から除外することによって、誤りのある選択されたメモリデバイス９０２をリタイアさせて、さらにテストするために選択されたメモリデバイス９０２を割り当て、記憶領域テストモジュール１１０８は、誤りのあるメモリデバイス９０２内の記憶領域を識別する。記憶領域テストモジュール１１０８は、誤りのある記憶領域に隣接する記憶領域のような、テスト対象とする特定の記憶領域を設定することができる。さらに、記憶領域テストモジュール１１０８は、テスト下にあるか、又は誤りを含むことがわかっている記憶領域を拡大又は縮小することができる。
【０２１３】
一実施形態では、ミクロリタイアメントに従って、ロギングモジュール１１０２が誤りのある記憶領域を識別したとき、記憶領域テストモジュール１１０８は、さらなる記憶領域をテストして、メモリデバイス９０２内の誤りの範囲を特定することができる。データ誤りがメモリデバイス９０２の或る特定のエリア内に限定することができるとき、記憶領域テストモジュール１１０８は、誤りのある領域に隣接するさらなる記憶領域をテストすることができる。当業者は、記憶領域テストモジュール１１０８がさらなる記憶領域をテストすることができる種々の方法を理解するであろう。
【０２１４】
一実施形態では、装置１１００はエリア再構成モジュール１１１０を含み、エリア再構成モジュール１１１０は、選択されたメモリデバイス９０２内の１又は複数の記憶領域内のデータを、将来の動作のための１又は複数の予備メモリデバイスからの置換データで置き換えるが、選択されたメモリデバイス９０２内のその１又は複数の記憶領域外のデータは置き換えられないようにする。例えば、ミクロリタイアメントに従って、誤りのあるそれらの記憶領域だけを最初にリタイアさせる。それゆえ、エリア再構成モジュール１１１０は、メモリデバイス９０２の残りの部分のデータを置き換えることなく、誤りのある記憶領域内のデータを置き換えることができる。このようにして、さらにテストが行なわれない限り、メモリデバイス９０２全体をリタイアせずに済む。
【０２１５】
特定の実施形態では、エリア再構成モジュール１１１０は、同じ予備メモリデバイス９０４を用いて、いくつかの記憶領域上のデータを置き換えることができる。エリア再構成モジュール１１１０は、選択されたメモリデバイス９０２上の記憶領域からのデータを予備メモリデバイス９０４からの置換データで置き換え、それらの記憶領域及びさらなる記憶領域が共通の論理ページ４１６を共用しない場合には、さらなる記憶領域からのデータを同じ予備メモリデバイス９０４からの置換データで置き換える。さらなる記憶領域は、同じ選択されたメモリデバイス９０２上に、又は異なる選択されたメモリデバイス９０２上に存在する。
【０２１６】
例えば、装置１１００は、第１のメモリデバイス９０２ａ内のエリアＸに誤りがあり、第２のメモリデバイス９０２ｂ内のエリアＹに誤りがあり、第３のメモリデバイス９０２ｃ内のエリアＺに誤りがある等と特定する場合を考える。それらのエリア（Ｘ、Ｙ、Ｚ等）のメモリアドレスが重複しない（例えば、エリアＸ内のアドレスがエリアＹ、Ｚ内のメモリアドレスと共通していない）限り、エリア再構成モジュール１１１０は、第１のメモリデバイス９０２ａ内のエリアＸからのデータを訂正されたデータで置き換え、第２のメモリデバイス９０２ｂ内のエリアＹからのデータを訂正されたデータで置き換え、第３のメモリデバイス９０２ｃ内のエリアＺからのデータを同じ予備メモリデバイスからの訂正されたデータで置き換えることができる。
【０２１７】
記憶領域及びさらなる記憶領域が、共通の論理ページ４１６又は共通のメモリアドレスを共用する場合には、エリア再構成モジュール１１１０は、１又は複数の記憶領域からのデータを予備メモリデバイス９０４からの置換データで置き換え、さらなる記憶領域内のデータを１又は複数の異なる予備メモリデバイス９０４からのデータで置き換える。
【０２１８】
一実施形態では、装置１１００は、解析モジュール１１１２を含み、解析モジュールは記録を解析して、データ誤りを有する選択されたメモリデバイス９０２内のエリアを特定する。誤りのあるメモリデバイス９０２ａ〜ｎ内のエリアのサイズは、記録された誤りを解析することによって個別に判断することができる。さらに、解析モジュール１１１２は、その故障に関するさらなる詳細と共に誤りタイプを特定することもできる。例えば、訂正不可能な誤りが検出されると、さらに解析することによって、誤りが消去障害、プログラム障害、読出し障害、診断障害、ＰＯＳＴ障害及び記録に起因することを指示することができる。
【０２１９】
一実施形態では、装置１１００は、誤り記憶回復モジュール１１１４を含み、該誤り記憶回復モジュールは、誤りのある選択されたメモリデバイスに応答して、１又は複数の誤りを有する消去ブロックを消去し、将来にデータを記憶するためにその消去ブロックを準備する。フラッシュメモリにおいて、プログラムによる外乱（書込みによる外乱）及び読出しによる外乱が一時的な誤りを引き起こす可能性がある。特定のメモリロケーションに関して、そのメモリロケーションの周囲のデータがプログラムされるか、又は読み出されるとき、データ線と他のプログラムされる／読み出されるロケーションとが接近していることに起因して、そのメモリロケーションのデータが外乱を受ける可能性がある。この誤りは一時的な誤りであり、ガーベージコレクション（記憶空間回復）動作中にそのメモリロケーションをリフレッシュすることによって解消することができる。
【０２２０】
ガーベージコレクション動作では、典型的には、有効データが、消去ブロック又はメモリの他のエリアから別のロケーションに移動され、その消去ブロックは消去される。フラッシュメモリの場合、これは、その消去ブロック内の全てのメモリセルに「１」を書き込むこと、すなわち、セルを充電することを伴う。その後、その消去ブロックは再利用することができ、その消去ブロックに新たなデータを格納することができる。その後、装置１１００は誤りを記録し続けることができ、ガーベージコレクション動作の前に誤りのあるメモリロケーションに再び誤りがある場合には、そのメモリロケーションをリタイアさせて、永久に使用不可能としてマークすることができ、予備メモリデバイス（複数可）９０４内のそのメモリロケーションに対応するデータを、故障したメモリロケーションの代わりに代用することができる。
【０２２１】
一実施形態では、装置１１００は訂正データモジュール１１１６を含み、訂正データモジュールは、誤りのある選択されたメモリデバイスに応答して、訂正されたデータを返す。一実施形態では、訂正されたデータは、分離モジュール１００６が誤りのある選択されたメモリデバイス９０２を識別したときに、分離モジュール１００６によって利用可能データと結合された置換データである。上記のように、置換データと結合された利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能であるような誤りを含むときに、誤りのある選択されたメモリデバイス９０２が特定される。
【０２２２】
一実施形態では、装置１１００は報告モジュール１１１８を含み、報告モジュールは、誤りのある選択されたメモリデバイスに応答して、誤りを報告する。報告モジュール１１１８は誤りを報告して、潜在的なメモリデバイス９０２に障害があることをユーザに警告するか、又は誤り診断を助けることができる。さらに、報告モジュール１１１８は、リタイアメントのためにユーザが選択することができる潜在的なメモリデバイス９０２又は記憶領域を報告することもできる。
【０２２３】
図１２は、本発明による、障害が生じたデータ記憶機構を検出し、置き換えるための方法の一実施形態１２００を示す概略フロー図である。方法１２００が開始すると、読出しモジュール１００２が、２つ以上のメモリデバイス９０２と、メモリデバイス９０２からのパリティ情報を格納する１又は複数の予備メモリデバイス９０４とを有するメモリデバイスのアレイからデータを読み出す（１２０２）。
【０２２４】
ＥＣＣモジュール１００４が、テストされるデータ内に１又は複数の誤りがあるか否か、及びそれらの誤りがＥＣＣを用いて訂正可能であるか否か判断する（１２０４）。テストされるデータは、読出しモジュール１００２によって読み出されるデータを含む。ＥＣＣは、読出しモジュール１００２によって読み出されるデータと共に、ＥＣＣチャンク４１８内に格納される場合がある。ＥＣＣモジュール１００４が、読出しモジュール１００２によって読み出されるデータ内に誤りがあると判断し、かつそれらの誤りがＥＣＣを用いて訂正不可能であると判断するのに応答して、分離モジュール１００６が、メモリデバイスのアレイからメモリデバイス９０２を選択する（１２０６）。
【０２２５】
分離モジュール１００６が、選択されたメモリデバイス９０２からのデータを、置換データで、すなわち、１又は複数の予備メモリデバイス９０４上に格納されるパリティデータから生成されるデータで置き換える（１２０８）。分離モジュール１００６は、置換データを利用可能データ、すなわち選択されないメモリデバイス９０２から読み出されるデータと結合する。ＥＣＣモジュール１００４が、その選択されたメモリデバイス９０２に関して、置換データと結合された利用可能データが誤りを含まないか、又はＥＣＣを用いて訂正可能であるような誤りを含むか否かを判断し（１２０８）、その方法１２００は終了する。
【０２２６】
図１３は、本発明による、故障したデータ記憶機構を検出し、置き換えるための方法の一実施形態を示す概略フロー図である。その方法１３００は、分離モジュール１００６が各メモリデバイス９０２において繰り返すことを示す。方法１３００が開始し、ＥＣＣモジュール１００４が、読み出されたデータにおいて誤りを検出する（１３０２）。その際、方法１３００は、メモリデバイス９０２ａを選択し（１３０４）、どのメモリデバイス９０２が不良であるかを特定するために繰り返す。この例では、変数が０に設定される（ｉ＝０）。テストされるメモリデバイス９０２がデータ回復部９０６からデータを読み出すために選択されるＭＵＸ９１２を有することを除いて、その後、読出しモジュール１００２が、メモリデバイス９０２からデータを読み出す（１３０６）。選択されないメモリデバイス９０２に関して、訂正されていないデータが読み出される（１３０８）。その方法１３００を最初に通る場合に、ｉ＝０であり、第１のメモリデバイス９０２ａが選択される。選択されたメモリデバイス９０２ａに関して、訂正されていないデータは、データ回復部９０６の出力（例えば、Ｃ’Ｃ）とＸＯＲ演算され読み出されたデータ（例えば、Ａ）になる。その後、ＥＣＣモジュール１００４は、データが訂正可能であるか否かを判断する（１３１２）。
【０２２７】
データが訂正可能である場合には、分離モジュール１００６が選択されたデバイス（ｉ）を戻し（１３１６）、方法１３００は完了する。ＥＣＣモジュール１００４が、データが依然として訂正不可能であると判断する場合には（１３１２）、分離モジュール１００６が変数ｉをインクリメントする（１３１４）。その後、分離モジュール１００６が、変数ｉが最大値にあり、全てのメモリデバイス９０２がテストされたことを指示するか否かを判断する（１３１８）。分離モジュール１００６が、変数ｉが最大値にあると判断する場合には（１３１８）、分離モジュール１００６は、２つ以上のメモリデバイス９０２に誤りがあること、又は装置９００によって訂正することができない何らかの他の誤りがあることを指示する故障のメッセージを返す（１３２０）。
【０２２８】
分離モジュール１００６が、変数ｉが最大値にないと判断する場合には（１３１８）、分離モジュール１００６は戻り、次のメモリデバイス９０２をテストする。装置９００が、誤りが訂正可能であると判断するか（１３１２）、又は全てのメモリデバイス９０２がテストされ、装置が「障害」を返す（１３２０）まで、方法１３００は続けられる。
【０２２９】
方法１３００は、本発明の一実施形態にすぎず、当業者は、メモリデバイスを選択的にテストして、メモリデバイス９０２のデータを予備メモリデバイス９０４からのデータで置き換える他の方法を理解するであろう。
【０２３０】
図１４は、本発明による、障害発生のデータ記憶機構を検出し、置き換えるための方法の別の実施形態を示す概略フロー図である。方法１４００は、誤りを解析し、それによりメモリデバイスをどのようにセグメント化、又は分割して誤りを訂正するかを特定することに関連する。最初に、図１３の方法１３００が実行され、装置１０００が誤りを分離し、どのメモリデバイス９０２に誤りがあるか、及びメモリロケーション情報を返す。方法１４００が開始し、ロギングモジュール１１０６によって記録される誤りデータが解析モジュール１１１２によって解析され、どのタイプの誤りが生じたかを判断する。例えば、別のＥＣＣ９１０によって訂正不可能な誤り１４０２が検出されると、さらに解析することによって、誤りが消去障害１４０４、プログラム障害１４０６、読出し障害１４０８、診断障害１４１０、ＰＯＳＴ障害１４１２等に起因することが指示される。記録された誤りデータを用いて、その誤りを、メモリデバイス９０２内の特定のエリアに分離することができる。
【０２３１】
その解析に基づいて、方法１４００は、最低でも特定の不良メモリデバイスを特定するが（１４１４）、解析によって、不良であるメモリデバイス９０２内の特定のエリアを分離することができる場合もある。方法１４００は、不良メモリデバイス９０２が分離されたか否かを特定する（１４１６）。分離されたと判断する場合には、メモリデバイス再構成モジュール１１０４が、装置９００、９５０を再構成し（１４１８）、それにより、不良メモリデバイス９０２の代わりに、予備メモリデバイス９０４からのデータを代用し、さらに、方法１４００は、誤りが最初に検出されたときの動作を再試行することができる（１４２０）。分離されていないと判断する場合には、方法１４００は障害メッセージを返す（１４２２）。
【０２３２】
図１５Ａは、本発明による、誤りを有する記憶領域を記録するための方法の一実施形態を示す概略フロー図である。該方法１５００はマクロリタイアメントによる一実施形態であり、選択されたメモリデバイス９０２において誤りが検出された後に行なわれる。方法１５００が開始し、ロギングモジュール１１０６が、選択されたメモリデバイス９０２の識別情報を記録する（１５０２）。別の実施形態では、ロギングモジュール１１０６が、誤りのあるメモリデバイス９０２上のエリアの上位集合を含む初期エリアを記録する。
【０２３３】
記憶領域テストモジュール１１０８が、選択されたメモリデバイス９０２内の誤りを含む記憶領域を識別する（１５０４）。別の実施形態では、記憶領域テストモジュール１１０８は、誤りのあるエリアの上位集合である初期エリア内の誤りを含む記憶領域を識別する。
【０２３４】
ロギングモジュール１１０６が、記憶領域テストモジュール１１０８によって識別された１又は複数の記憶領域のためのメモリロケーションデータを記録する（１５０６）。さらに、記憶領域テストモジュール１１０８は、読出しモジュール１００２による後続の読出しを用いて１又は複数の誤りを有する記憶領域を識別し（１５０８）、上記のように、ＥＣＣモジュール１００４及び分離モジュール１００６を用いて、訂正不可能な誤りを有する記憶領域を特定し、方法１５００は終了する。
【０２３５】
記憶領域テストモジュール１１０８は、メモリデバイス９０２内の記憶領域を全体として、又はさらに大きな記憶領域を連続してテストし、誤りを分離することができる。このようにして、トップダウン手法において被テストエリアが繰り返し絞り込まれる。さらに、方法１５００がリタイアメントポリシーに従って実行されるとき、リタイアメントモジュール１１０２はそのメモリデバイスを標準的な動作からリタイアさせることができる。
【０２３６】
図１５Ｂは、本発明による、誤りを有する記憶領域を記録するための方法の別の実施形態を示す概略フロー図である。該方法１５５０はミクロリタイアメントによる一実施形態であり、選択されたメモリデバイス９０２において誤りが検出された後に行なわれる。方法１５５０が開始し、ロギングモジュール１１０６が、１又は複数の誤りを含む１又は複数の記憶領域を記録する（１５５２）。ＥＣＣモジュール１００４及び分離モジュール１００６が、上記のように、後続の読出しを用いて、誤りを有するさらなる記憶領域を特定する（１５５４）。後続の読出しは、誤りを含むことがわかっている記憶領域を拡大するために、隣接する記憶領域のような、対象とする特定の記憶領域を設定するために記憶領域テストモジュール１１０８によって開始される読出しを含む場合がある。例えば、リタイアメントモジュール１１０２がその記憶領域を標準的な動作からリタイアさせない場合には、後続の読出しは、読出し要求からの標準的な読出しである場合もある。
【０２３７】
ロギングモジュール１１０６が、誤りを有するこれらの１又は複数のさらなる記憶領域を指定するメモリロケーションデータを記録し（１５５６）、方法１５５０は終了する。記憶領域テストモジュール１１０８は、記憶領域を連続してテストし、１又は複数の被テスト記憶領域を拡大することができる。このようにして、ボトムアップ手法において、被テストエリア、又は誤りを含むことがわかっているエリアを繰り返し拡大して、さらなる誤りを位置特定する。さらに、方法１５５０がリタイアメントポリシーに従って実行されるとき、リタイアメントモジュール１１０２はそれらの記憶領域を標準的な動作からリタイアさせることができる。
【０２３８】
図１６は、本発明による、消去ブロックをリタイアさせるための方法の一実施形態を示す概略ブロック図である。該方法１６００が開始すると、ＥＣＣモジュール１００４及び分離モジュール１００６が、上記のように、メモリデバイス９０２内の誤りを検出する（１６０２）。ロギングモジュール１１０６が、上記のように、リタイアメントポリシーに従って誤りを記録する（１６０４）。リタイアメントモジュール１１０２が、リタイアメントポリシーに従って、メモリデバイス９０２、又はメモリデバイス９０２内の記憶領域をリタイアさせる（１６０６）。以下に説明されるように、その後、再構成装置１２０が、メモリデバイス９０２を再構成して（１６０８）、データを誤りのないエリアに書き込み、方法１６００は終了する。
【０２３９】
記憶素子の再構成
図１７は、本発明による、パリティデータを用いて保護される固体記憶素子４０２のアレイを再構成する装置の一実施形態を示す概略ブロック図である。該装置１７００は、再構成装置１２０の一実施形態を含み、一実施形態において、記憶素子誤りモジュール１７０２と、再構成データ読出しモジュール１７０４と、データ再生モジュール１７０６と、データ再構成モジュール１７０８と、新構成モジュール１７１０とを含み、それらのモジュールは以下で説明される。また、装置１７００は、David Flynn他によって２００９年５月１８日に出願された「Apparatus, System, and Method for Recofiguring an Array to Operate with Less Storage Elements」と題する米国特許出願第      号にも記述されており、その特許出願は参照により本明細書に援用される。
【０２４０】
一実施形態では、装置１７００は記憶素子誤りモジュール１７０２を含み、記憶素子誤りモジュールは、１又は複数の記憶素子４０２がデータを格納するために利用不可能である（「利用不可能な記憶素子」）と判断する。記憶素子４０２は、３つ以上の記憶素子４０２から成るアレイ内に存在する。さらに、アレイ内の各記憶素子４０２は、不揮発性固体記憶機構１１０を含む。上記の記憶素子４００のアレイと同様に、データがアレイ４００の論理ページ４１６に書き込まれ、論理ページはアレイ４００内の各記憶素子４０２上のページを含む。利用不可能な記憶素子４０２は、利用不可能である、ページ、消去ブロック等のような記憶素子４０２の１つの領域だけを有する場合があり、利用不可能である領域以外の領域では記憶素子４０２は利用可能であるようにされることに留意されたい。記憶素子４０２の性能を改善し、かつ耐用寿命を延ばすために、できる限り多くの容量をサービスすることができるようにしておくことが好都合である。
【０２４１】
アレイ４００は、第１のＥＣＣチャンク４１８を格納するＮ個の記憶素子４０２と、第１のＥＣＣチャンク４１８から生成される第１のパリティデータを格納するＰ個の記憶素子４０２とを含む。Ｎ個の記憶素子４０２は、複数のＥＣＣチャンク４１８を格納し、Ｐ個の記憶素子４０２は、複数のＥＣＣチャンク４１８から生成されるパリティデータを格納する。第１のＥＣＣチャンク４１８の一部が、Ｎ個の各記憶素子４０２上に格納される。ＥＣＣチャンク４１８は、データ（「格納されるデータ」）と、格納されるデータから生成されるＥＣＣとを含み、第１のＥＣＣチャンク４１８の一部がＮ個の各記憶素子４０２上に格納される。一実施形態では、アレイ４００の各記憶素子４０２は１又は複数の追加点を含み、データは記憶素子４００のアレイ上に順次に格納される。
【０２４２】
データは、追加点に書き込まれるように順次に格納される。順次記憶は、読出し・変更・書込み動作において、データが１つのロケーションから読み出され、変更され、その後、データが現在書き込まれている追加点に書き込まれるという点で、ランダムアクセス記憶とは異なる。データが書き込まれると、追加点が新たに書き込まれたデータの最後に移動し、次のデータが新たな追加点に書き込まれるための準備をする。
【０２４３】
一実施形態では、利用不可能な記憶素子４０２は、誤りを有する記憶素子４０２、又は、上記のように検出装置１１９によって識別されるか又はリタイアした記憶素子４０２である。特定の実施形態では、記憶素子誤りモジュール１７０２は、第１のＥＣＣチャンク４１８内の誤りが第１のＥＣＣチャンク４１８と共に格納されるＥＣＣを用いて訂正不可能であると判断することによって、記憶素子４０２に誤りがあるか、又は記憶素子４０２が利用不可能であることを特定する。記憶素子誤りモジュール１７０２は、複数のＥＣＣチャンク４１８を用いて記憶素子４０２に誤りがあることを判断する。ＥＣＣを用いて訂正不可能である誤りは、その記憶素子４０２が読出し又は書込みによる外乱よりも大きな問題を抱えていることを指示する。さらに、ユーザが、利用不可能な記憶素子４０２を指定する場合がある。
【０２４４】
一実施形態では、記憶素子誤りモジュール１７０２は、機能している記憶素子４０２が置換しきい値に達したと判断することによって、記憶素子４０２に誤りがある（「故障しそうな記憶素子」）と判断する。例えば、記憶素子４０２が依然として機能する場合があっても、故障しそうであるか、性能が劣化しつつあるか、又は故障することが避けられない場合がある。置換しきい値は、記憶素子４０２の正常な状態の指示子とすることができる。置換しきい値は、故障しそうな記憶素子４０２に格納されるデータの誤り率、故障しそうな記憶素子４０２に格納されるデータの誤り数、故障しそうな記憶素子４０２上の読出し及び／又は書込み演算の回数、故障しそうな記憶素子４０２内の環境条件等を含む。
【０２４５】
記憶素子誤りモジュール１７０２が、１又は複数の利用不可能な記憶素子４０２を特定した後に、記憶素子誤りモジュール１７０２は、以下でさらに詳細に説明されるように、１又は複数のさらなる利用不可能な記憶素子４０２を特定する。
【０２４６】
一実施形態では、装置１７００は再構成データ読出しモジュール１７０４を含み、該再構成データ読出しモジュールは、利用不可能な記憶素子４０２以外の記憶素子４０２からのデータ（「利用可能データ」）を読み出す。一実施形態では、利用可能データは、論理ページ４１６からのデータを含む。再構成データ読出しモジュール１７０４は、故障しそうな記憶素子からのデータではなく、利用可能データを読み出して、誤りがないか、又はデータと共に格納されるＥＣＣを用いて訂正可能である数の誤りを有するデータが得られるようにする。典型的には、故障しそうな記憶素子からのデータが用いられる場合よりも、利用可能データは誤りを含む可能性が低い。さらに、利用不可能な記憶素子４０２が機能しない場合には、利用不可能な記憶素子４０２は、再構成データ読出しモジュール１７０４によってアクセスされない。
【０２４７】
一実施形態では、再構成データ読出しモジュール１７０４は、記憶空間回復動作のようなバックグラウンドプロセスにおいて動作する。記憶空間回復動作の一例が、ガーベージコレクションプロセスを含む。バックグラウンドプロセスにおいて動作することによって、再構成データ読出しモジュール１７０４は、固体記憶デバイス１０２の動作への妨害を最小限に抑えることができる。
【０２４８】
一実施形態では、装置１７００はデータ再生モジュール１７０６を含む。利用可能データが第１のパリティデータを含むのに応答して、データ再生モジュールは第１のパリティデータを用いて、第１のＥＣＣチャンク４１８からの紛失データ（「紛失データ」）を再生する。別の実施形態では、利用可能データがＥＣＣチャンク４１８を含むのに応答して、データ再生モジュール１７０６は、第１のパリティデータを再生する。第１のパリティデータは、単純なＸＯＲパリティ情報を含むか、又はパリティデータを格納する複数の記憶素子４０２を伴ってさらに複雑である。第１のパリティデータは、検出装置１１８によって与えられる。同様に、データ再生モジュール１７０６は、図９Ａ及び図９Ｂに示されるようなＸＯＲ演算を用いて、又は当該技術分野において知られている他の類似のパリティ演算を用いて、紛失データを再生することができる。データ再生モジュール１７０６は、ＥＣＣチャンク４１８のためのパリティデータを用いて、複数のＥＣＣチャンク４１８のための紛失データを再生することもできる。一実施形態では、データ再生モジュール１７０６は、記憶空間回復動作のようなバックグラウンドプロセスにおいて動作する。
【０２４９】
一実施形態では、装置１７００はデータ再構成モジュール１７０８を含み、該データ再構成モジュールは、利用可能データ、紛失データ、及び記憶コントローラによって受信されるデータ（「新たなデータ」）のうちの１又は複数から第２のＥＣＣを生成する。第２のＥＣＣは、第２のＥＣＣを作成するために用いられるデータと共に、第２のＥＣＣチャンク４１８を形成する。さらに、データ再構成モジュール１７０８は、第２のＥＣＣチャンク４１８から第２のパリティデータを生成し、第２のＥＣＣチャンク４１８内のデータを保護することもできる。
【０２５０】
一実施形態では、データ再構成モジュール１７０８は、第１のＥＣＣが第２のＥＣＣと同じであり、第１のＥＣＣチャンク４１８が第２のＥＣＣチャンク４１８と同じであるように、第１のＥＣＣチャンク４１８とは別個の新たなデータを保持する。別の実施形態では、新たなデータは第１のＥＣＣチャンク４１８からのデータと混合され、それにより、データ再構成モジュール１７０８は、新たなデータ、及び第１のＥＣＣチャンク４１８からのデータの一部のための第２のＥＣＣを生成する。一実施形態では、データ再構成モジュール１７０８は、記憶空間回復動作（ガーベージコレクション）のようなバックグラウンドプロセスにおいて動作する。
【０２５１】
一実施形態では、装置１７００は新構成モジュール１７１０を含み、新構成モジュールは、（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に、第２のＥＣＣチャンク４１８の少なくとも一部と、関連する第２のパリティデータとを格納する。ただし、１≦Ｚ≦Ｐである。それゆえ、第２のＥＣＣチャンク４１８及び任意のさらなる再構成されたＥＣＣチャンク４１８は、少ない数の記憶素子４０２を有するアレイ内に格納されるように再構成される。Ｚは利用不可能な記憶素子４０２の数である。
【０２５２】
簡単な事例では、Ｚ＝１であり、新構成モジュール１７１０は、第１のＥＣＣチャンク４１８が格納されたデバイスよりも１だけ少ないデバイス内に第２のＥＣＣチャンク４１８を格納するようにする。記憶素子４０２、又は記憶素子４０２の領域が利用不可能になる度に、再構成装置１２０は記憶デバイス４０２のアレイ４００内に格納されるデータを再構成し、それにより、少なくとも１つの領域がリタイアした場合に、新構成モジュール１７１０が、１だけ少ない記憶素子４０２上にデータを格納する。一実施形態では、或る特定の記憶領域の場合に、ＥＣＣチャンク４１８がＮ＋Ｐ個の記憶素子４０２上に格納され、他の記憶領域では、他のＥＣＣチャンク４１８が、（Ｎ＋Ｐ）−１個の記憶領域上に格納され、他の記憶領域では、他のＥＣＣチャンク４１８が（Ｎ＋Ｐ）−２個の記憶領域上に格納され、他も同様である。
【０２５３】
一実施形態では、アレイ４００の各記憶素子４０２は、１又は複数の追加点含み、データが記憶素子のアレイ４００上に順次に格納される。この実施形態では、新構成記憶モジュール１７１０は、（Ｎ＋Ｐ）−Ｚ個の各記憶素子４０２上の追加点において第２のＥＣＣチャンク４１８及び関連するパリティデータを格納する。各追加点は、追加点が移動する直前に格納されたデータの終わりに移動される。
【０２５４】
新構成記憶モジュール１７１０が第２のＥＣＣチャンク４１８及び第２のパリティデータを格納するとき、データは、１だけ少ないパリティデバイス、又は１だけ少ないデータデバイスのいずれかで再構成することができる。例えば、第１のＥＣチャンク４１８がＮ個の記憶素子４０２上に格納され、２つ以上の記憶素子４０２においてパリティデータで保護された場合には（すなわち、Ｐ≧２）、新構成モジュール１７１０は、第２のＥＣＣチャンク４１８は依然としてＮ個の記憶素子４０２上に格納されるが、パリティ情報はＰ−１個の記憶素子４０２上に格納されるように、第２のＥＣＣチャンク４１８及び第２のパリティデータを生成することができる。この事例では、アレイ４００の性能は影響を及ぼされないが、データは、パリティ保護に関して１だけ少ない階層を有することになり、１だけ少ない記憶素子４０２の障害を許容することができる。
【０２５５】
Ｐ＝１である場合、又はパリティ保護が変化しないままである場合には、新構成記憶モジュール１７１０は、第２のＥＣＣチャンクがＮ−１個の記憶素子４０２上に格納されることができ、かつパリティ情報がＰ個の記憶素子４０２上に格納されることができるように、第２のＥＣＣチャンク及び第２のパリティデータを生成することができる。この場合、データを格納している記憶素子４０２が少ないので、アレイ４００の性能は劣化するが、パリティ保護は変化しないままである。
【０２５６】
アクセスされる論理ページ４１６のロケーション及びパリティデータの交替に応じて、利用不可能な記憶素子４０２は、データを格納する記憶素子４０２又はパリティデータを格納する記憶素子４０２のいずれかである。しかしながら、利用不可能な記憶デバイス４０２上に格納されるデータの性質は、新構成記憶モジュール１７１０によって格納されるデータの構成に対していかなる関連性も有する必要はない。それゆえ、利用不可能な記憶素子４０２がパリティデータを格納する場合には、新構成記憶モジュール１７１０は、一実施形態では、（Ｎ−Ｚ）個の記憶素子４０２上に第２のＥＣＣチャンク４１８の一部を格納すると共に、Ｐ個の記憶素子４０２上に関連する第２のパリティデータを格納するか、又は別の実施形態では、新構成記憶モジュール１７１０は、Ｎ個の記憶素子４０２上に第２のＥＣＣチャンク４１８の一部を格納すると共に、Ｐ−Ｚ個の記憶素子４０２上に関連する第２のパリティデータを格納する。ただし、Ｐ＞１である。
【０２５７】
一実施形態では、新構成記憶モジュール１７１０は、以前にパリティデータを格納する記憶素子４０２であった記憶素子上に、第２のＥＣＣチャンク４１８の一部を格納する。同様に、別の実施形態では、新構成記憶モジュール１７１０は、以前にＥＣＣチャンク４１８からのデータを格納する記憶素子４０２であった記憶素子上に、第２のＥＣＣチャンク４１８に関連付けられるパリティデータを格納する。論理消去ブロック４１４のような記憶領域が消去され、再びデータを格納する準備ができると、再構成装置１２０は、任意の都合のよい組み合わせにおいて、データ及びパリティデータを格納することができる。好ましい実施形態では、第２のＥＣＣチャンク４１８は、第１のＥＣＣチャンク４１８を得るために読み出された論理消去ブロック４１４とは異なる論理消去ブロック４１４に格納される。記憶機構の再構成は、論理消去ブロック４１４を再構成する場合があり、さらに、ＥＣＣチャンク４１８が論理消去ブロック４１４内に格納される方法を再構成する場合がある。これは、記憶素子４０２上に格納されるＥＣＣチャンク４１８内からのバイト数を変更する場合がある。別の実施形態では、ＥＣＣチャンク４１８のサイズを変更して、ＥＣＣチャンク４１８によって記憶素子４０２上に格納される同じバイト数を保持することができる。
【０２５８】
或る特定の数のデータ又はパリティ記憶素子４０２が故障する場合であっても、ＲＡＩＤシステムのような冗長記憶システムがデータ保護を提供する。データがＲＡＩＤと同じようにストライピングされ、パリティデータで保護されるので、アレイ４００はＲＡＩＤと同じように保護される。これらの記憶素子４０２が置き換えられない場合に、欠陥があるか、又は利用不可能な記憶素子４０２の数が、ＲＡＩＤシステムが対応する一定の故障した記憶素子４０２の数を下回る場合には、データは失われる。しかしながら、データをＮ＋Ｐ個の記憶素子アレイ４００から（Ｎ＋Ｐ）−Ｚ個の記憶素子アレイ４００に再構成することによって、記憶素子４０２が置き換えられない場合であっても、アレイ４００はデータ保護のレベルを保持することができる。都合のよいことに、従来のＲＡＩＤ構成とは異なり、故障した記憶素子４０２は置き換えられる必要はない。ＲＡＩＤ化されたデータを再構成することによって、残りの機能している記憶素子４０２を再構成して、故障した記憶素子４０２に対応することができる。
【０２５９】
上記のようにマクロリタイアメント方法が利用される場合には、再構成を無効にして（Ｎ＋Ｐ）−１から（Ｎ＋Ｐ）に状態を戻すことが必要とされる場合がある。このプロセスは上記で説明されたのと実質的に同じであり、当業者は、第２のＥＣＣチャンク４１８がＮ＋Ｐ個の記憶素子４１８上に格納されるようにさらに再構成される場合があることを理解するであろう。
【０２６０】
さらに、装置１７００は、さらに多くの記憶素子４０２が故障するか、又は利用不可能になる場合には、ＥＣＣチャンク４１８を再構成し続けることができる。記憶素子誤りモジュール１７０２が１又は複数の利用不可能な記憶素子４０２を識別し、再構成データ読出しモジュール１７０４、データ再生モジュール１７０６、データ再構成モジュール１７０８及び新構成記憶モジュール１７１０が、（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に１又は複数のＥＣＣチャンク４１８を格納するように動作した後に、記憶素子誤りモジュール１７０２がさらに多くの利用不可能な記憶素子４０２を識別する。その結果として、再構成データ読出しモジュール１７０４、データ再生モジュール１７０６、データ再構成モジュール１７０８及び新構成記憶モジュール１７１０が、（（Ｎ＋Ｐ）−Ｚ）−Ｙ個の記憶素子４０２上に１又は複数のＥＣＣチャンク４１８を格納するように動作する。Ｙは、最後の再構成後に特定される利用不可能な記憶素子４０２の数とすることができる。
【０２６１】
図１８は、本発明による、パリティデータを用いて保護される固体記憶素子４０２のアレイを再構成する装置の別の実施形態１８００を示す概略ブロック図である。装置１８００は、記憶素子誤りモジュール１７０２と、再構成データ読出しモジュール１７０４と、データ再生モジュール１７０６と、データ再構成モジュール１７０８と、新構成モジュール１７１０とを含み、それらのモジュールは図１７の装置１７００に関して説明されたのと実質的に同じである。装置１８００は、種々の実施形態において、再構成ログモジュール１８０２及び記憶素子誤り位置特定モジュール１８０４を含き、それらのモジュールが以下に説明される。
【０２６２】
一実施形態では、装置１８００は再構成ログモジュール１８０２を含み、該再構成ログモジュールは、データが（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２に格納される、記憶素子のアレイ４００内の１又は複数の領域を識別する。再構成ログモジュール１８０２は、ログファイル内に、その領域のロケーション、再構成されたデータがその領域に最初に格納された時刻に関するタイムスタンプ又はシーケンス情報等のような、その領域に関するデータを記録することによって領域を識別することができる。１又は複数の領域は、１又は複数の記憶素子４０２上の物理エリア又は論理エリアを含む。領域は、論理ページ４１６の一部、論理ページ４１６、一群の論理ページ４１６、消去ブロックの一部、消去ブロック、一群の消去ブロック、１又は複数のダイ、又は１又は複数のチップを含む。一実施形態では、再構成ログモジュール１８０２は、論理−物理マップを用いて、ログ内の領域を特定する。記憶コントローラ１０４がどの記憶素子４０２にアクセスすべきかがわかるように、ログファイルは、読出し動作、プログラミング動作中に等に用いられる。
【０２６３】
一実施形態では、再構成ログモジュール１８０２は、利用不可能な記憶素子４０２上のデータ記憶のために利用不可能である記憶領域を追跡する。記憶素子４０２の一部が利用不可能ではなく、機能している場合には、その利用可能な部分に依然としてデータが格納可能である。それゆえ、利用不可能な領域の場合には、データが（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に格納され、利用不可能な記憶領域外のロケーションの場合には、Ｎ＋Ｐ個の記憶素子４０２上に格納されるように、再構成ログモジュール１８０２は利用不可能な記憶領域を追跡する。記憶領域は、Ｎ＋Ｐ個の各記憶素子４０２の一部を含み、論理ページ４１６の一部、論理ページ４１６、複数の論理ページ４１６、論理消去ブロック４１４の一部、論理消去ブロック４１４、複数の論理消去ブロック４１４、ダイ、複数のダイ、チップ、及び／又は複数のチップを含む。再構成ログモジュール１８０２は、記憶素子４０２の機能している部分が無駄にならないようにする。
【０２６４】
一実施形態では、再構成ログモジュール１８０２は、種々の数の記憶素子４０２を有する利用不可能な記憶領域を追跡する。具体的には、再構成ログモジュール１８０２は、データが（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２内に格納される１又は複数の利用不可能な記憶領域、及びデータが（（Ｎ＋Ｐ）−Ｚ）−Ｘ個の記憶素子４０２内に格納される１又は複数のさらなる利用不可能な記憶領域を追跡することができる。利用不可能な記憶領域以外の記憶領域では、データはＮ＋Ｐ個の記憶素子４０２内に格納される。
【０２６５】
典型的には、利用可能な記憶素子４０２の数が多い記憶領域は、利用可能な記憶素子４０２が少ない記憶領域よりも高い性能を有する。一実施形態では、データが記憶素子のアレイ４００内に格納され、データの性能要件によって分離される。一実施形態では、より高い性能要件を有するデータは、より高い性能を有する記憶領域内に格納される高い優先度を与えられる。例えば、頻繁にアクセスされる或る特定のデータは、より高い性能を有する記憶領域内に格納される。上記のように、Ｎ個の記憶素子４０２の数が多い記憶素子のアレイ４００ほど、高い性能を有する。
【０２６６】
一実施形態では、記憶素子誤りモジュール１７０２は、第１のＥＣＣチャンク４１８内の誤りが第１のＥＣＣチャンク４１８と共に格納されるＥＣＣを用いることによって訂正不可能であると判断することによって、記憶素子４０２に誤りがあると判断する。例えば、記憶素子誤りモジュール１７０２は、検出装置１１８を用いて、第１のＥＣＣチャンク４１８内の誤りが訂正不可能であると判断することができる。さらなる実施形態では、記憶素子誤りモジュール１７０２は、記憶素子誤り位置特定モジュール１８０４を含み、該記憶素子誤り位置特定モジュールは、１又は複数のＥＣＣチャンク４１８を格納する記憶素子４０２及び関連するパリティデータを格納する記憶素子４０２のうちの１又は複数に格納されるデータを用いて、データを格納するために利用不可能である記憶素子４０２を識別する。記憶素子誤り位置特定モジュール１８０４は、利用不可能である記憶素子を特定するために、上記の検出装置１１８の一実施形態を含むことができる。一実施形態では、記憶素子誤り位置特定モジュール１８０４は、ハードウエアゲート及びロジックを用いて、１又は複数のＥＣＣチャンク４１８を格納する記憶素子４０２のうちの１又は複数に格納されるデータを代用する。
【０２６７】
図１９は、本発明による、パリティデータを用いて保護される固体記憶素子４０２のアレイ４００を再構成する方法の一実施形態を示す概略フロー図である。該方法１９００が開始すると、記憶素子誤りモジュール１７０２が、１又は複数の記憶素子４０２がデータを格納するために利用不可能である（「利用不可能な記憶素子」）と判断する（１９０２）。記憶素子４０２は、３つ以上の記憶素子４０２から成るアレイの一部であり、データはアレイ４００の論理ページ４１６に書き込まれる。さらに、アレイ４００は第１のＥＣＣチャンク４１８を格納するＮ個の記憶素子４０２と、第１のＥＣＣチャンク４１８から生成される第１のパリティデータを格納するＰ個の記憶素子４０２とを含む。
【０２６８】
再構成データ読出しモジュール１７０４が、利用不可能な記憶素子４０２以外の記憶素子４０２からデータ（「利用可能データ」）を読み出す（１９０４）。利用可能データは、論理ページ４１６からのデータを含む。利用可能データが第１のパリティデータを含む場合には、データ再生モジュール１７０６が第１のパリティデータを用いて、第１のＥＣＣチャンク４１８からの紛失データ（「紛失データ」）を再生する（１９０６）。
【０２６９】
データ再構成モジュール１７０８が、利用可能データ、紛失データ、及び／又は記憶コントローラによって受信されるデータ（「新たなデータ」）から第２のＥＣＣを生成する（１９０８）。第２のＥＣＣ及びデータがデータ再構成モジュール１７０８によって用いられ、第２のＥＣＣチャンク４１８が生成される。また、データ再構成モジュール１７０８は、第２のＥＣＣチャンク４１８から第２のパリティデータを生成する。一実施形態では、データ再構成モジュール１７０８は新たなデータを含まないので、第２のＥＣＣは第１のＥＣＣチャンク４１８のデータから生成され、それゆえ、典型的には第１のＥＣＣと同じである。この場合、第２のＥＣＣチャンク４１８は第１のＥＣＣチャンク４１８と同じである。新たなデータが第１のＥＣＣチャンク４１８のデータと混合される場合、第２のＥＣＣチャンク４１８のデータは、第１のＥＣＣチャンク４１８のデータとは異なることになるので、第２のＥＣＣは第１のＥＣＣとは異なることになり、第２のＥＣＣチャンク４１８は第１のＥＣＣチャンク４１８とは異なることになる。
【０２７０】
新構成記憶モジュール１７１０が、（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に第２のＥＣＣチャンク４１８の一部及び関連する第２のパリティデータを格納し（１９１０）、方法１９００は終了する。ただし、１≦Ｚ≦Ｐである。一実施形態では、少なくとも再構成データ読出しモジュール１７０４、データ再生モジュール１７０８及びデータ再構成モジュール１７０８がバックグラウンドプロセスにおいて動作する。さらに、バックグラウンドプロセスは、ガーベージコレクションとの関連において動作する場合もある。
【０２７１】
図２０は、本発明による、さらなる利用不可能な記憶素子４０２を特定するための方法の一実施形態を示す概略フロー図である。該方法２０００が開始し、記憶素子誤りモジュール１７０２が、１又は複数の記憶素子４０２が利用不可能な記憶素子４０２であると判断する（２００２）。再構成データモジュール１７０４、データ再生モジュール１７０６、データ再構成モジュール１７０８、新構成記憶モジュール１７１０が、（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に１又は複数のＥＣＣチャンク４１８を格納するように動作する（２００４）。ただし、Ｚは、利用不可能であることがわかった記憶素子４０２の数である。
【０２７２】
再び、記憶素子誤りモジュール１７０２が、１又は複数のさらなる記憶素子４０２が利用不可能であると判断する（２００６）。その後、再構成データモジュール１７０４、データ再生モジュール１７０６、データ再構成モジュール１７０８、新構成記憶モジュール１７１０が、（（Ｎ＋Ｐ）−Ｚ）−Ｙ個の記憶素子４０２上に１又は複数のさらなるＥＣＣチャンク４１８を格納するように動作する（２００８）。ただし、Ｙは、利用不可能であることがわかったさらなる記憶素子４０２の数である。再構成ログモジュール１８０２が、データが（Ｎ＋Ｐ）−Ｚ個の記憶素子４０２上に格納される１又は複数の利用不可能な記憶領域、及びデータが（（Ｎ＋Ｐ）−Ｚ）−Ｙ個の記憶素子４０２上に格納される１又は複数のさらなる利用不可能な記憶領域を追跡し（２０１０）、方法２０００は終了する。
【０２７３】
本発明は、その精神及び不可欠な特徴から逸脱することなく、他の具体的な形で具現される場合がある。上記の実施形態は、全ての点において例示にすぎず、限定するものと見なされるべきではない。それゆえ、本発明の範囲は、上記の説明によってではなく、添付の特許請求の範囲によって指示される。特許請求の範囲の均等物の意味及び範囲内にある全ての変更が、その範囲に包含されるべきである。
【図１】
2011521397.tif 000003
【図２】
2011521397.tif 000004
【図３】
2011521397.tif 000005
【図４Ａ】
2011521397.tif 000006
【図４Ｂ】
2011521397.tif 000007
【図５】
2011521397.tif 000008
【図６】
2011521397.tif 000009
【図７】
2011521397.tif 000010
【図８】
2011521397.tif 000011
【図９Ａ】
2011521397.tif 000012
【図９Ｂ】
2011521397.tif 000013
【図１０】
2011521397.tif 000014
【図１１】
2011521397.tif 000015
【図１２】
2011521397.tif 000016
【図１３】
2011521397.tif 000017
【図１４】
2011521397.tif 000018
【図１５Ａ】
2011521397.tif 000019
【図１５Ｂ】
2011521397.tif 000020
【図１６】
2011521397.tif 000021
【図１７】
2011521397.tif 000022
【図１８】
2011521397.tif 000023
【図１９】
2011521397.tif 000024
【図２０】
2011521397.tif 000025
【国際調査報告】
2011521397.tif 000026
2011521397.tif 000027
2011521397.tif 000028