(57)【要約】【課題】不揮発性メモリ・システムにおけるマルチページ障害の回復を提供する。【解決手段】データ・ストレージ・システムは、コントローラと、複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイとを含む。コントローラは、論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ：ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ｔｒａｎｓｌａｔｉｏｎ）データ構造を維持し、書き込みデータを複数の物理ブロック上にストライプする第１のデータ保護スキームを実装する。データを対象ページ・ストライプから要求する読み取り要求に応答して、コントローラは対象ページ・ストライプの複数の物理ページ内のエラーを検出する。対象ページ・ストライプの複数の物理ページ内のエラーを検出することに応答して、コントローラは、ＬＰＴデータ構造をスキャンして、対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって対象ページ・ストライプの回復をトリガし、回復をトリガすることは論理アドレスのセットを上位コントローラに送信することを含む。【選択図】図１４
2019502987.tif 000002
【特許請求の範囲】
【請求項１】
コントローラによってコントロールされる不揮発性メモリ・アレイを含むデータ・ストレージ・システムにおける方法であって、前記不揮発性メモリ・アレイは、複数の物理ページを各々が含む複数のブロックを含み、
前記コントローラが前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持することと、
前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装することと、
データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記コントローラが前記対象ページ・ストライプの複数の物理ページ内のエラーを検出することと、
前記対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、前記コントローラが前記ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別することと、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガすることであって、前記論理アドレスのセットを前記上位コントローラに送信することを含む、回復をトリガすることと、を含む、方法。
【請求項２】
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定することと、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したという決定に応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置することと、をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項１に記載の方法。
【請求項４】
前記コントローラがエラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出すること、をさらに含む、請求項１に記載の方法。
【請求項５】
前記読み取り要求がホスト読み取り要求であることに応答して、前記コントローラが読み取りエラーを前記上位コントローラに送信すること、をさらに含む、請求項１に記載の方法。
【請求項６】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項１に記載の方法。
【請求項７】
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記コントローラが前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復すること、をさらに含む、請求項１に記載の方法。
【請求項８】
前記上位コントローラからの要求の受信に応答して、前記コントローラが前記上位コントローラへの前記論理アドレスのセットの送信を遂行する、請求項１に記載の方法。
【請求項９】
データ・ストレージ・システムであって、
複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイ、および前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を含むメモリに連結されるように構成されたコントローラであって、前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装するように構成され、前記コントローラが、データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出し、前記対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガするように構成され、前記コントローラが前記論理アドレスのセットを前記上位コントローラへ送信する、コントローラを含む、データ・ストレージ・システム。
【請求項１０】
前記コントローラが、前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定し、前記上位コントローラが前記対象ページ・ストライプの再構築を完了したという決定に応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置するようにさらに構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１１】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項９に記載のデータ・ストレージ・システム。
【請求項１２】
前記コントローラがエラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出するようにさらに構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１３】
前記読み取り要求がホスト読み取り要求であることに応答して、前記コントローラが読み取りエラーを前記上位コントローラに送信するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１４】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項９に記載のデータ・ストレージ・システム。
【請求項１５】
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記コントローラが前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１６】
前記上位コントローラからの要求の受信に応答して、前記コントローラが前記論理アドレスのセットを前記上位コントローラへ送信するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１７】
前記コントローラに連結された前記不揮発性メモリ・アレイをさらに含む、請求項９に記載のデータ・ストレージ・システム。
【請求項１８】
コンピュータ・プログラム製品であって、共に具現化されたプログラム命令を有するコンピュータ可読ストレージ媒体を含み、前記プログラム命令が、複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイのためのコントローラによって、
前記コントローラが前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持することと、
前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装することと、
データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記コントローラが前記対象ページ・ストライプの多数の物理ページ内のエラーを検出することと、
前記対象ページ・ストライプの複数の物理ページ内のエラーを検出することに応答して、前記コントローラが前記ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別することと、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガすることであって、前記論理アドレスのセットを前記上位コントローラに送信することを含む、回復をトリガすることと、を前記コントローラに遂行させるように実行可能である、コンピュータ・プログラム製品。
【請求項１９】
前記プログラム命令が前記コントローラに、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定することと、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したということを決定することに応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置することと、をさらに遂行させる、請求項１８に記載のプログラム製品。
【請求項２０】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項１８に記載のプログラム製品。
【請求項２１】
前記プログラム命令が前記コントローラに、
前記コントローラがエラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出すること、をさらに遂行させる、請求項１８に記載のプログラム製品。
【請求項２２】
前記プログラム命令が前記コントローラに、
前記読み取り要求がホスト読み取り要求であることに応答して、読み取りエラーを前記上位コントローラに送信すること、をさらに遂行させる、請求項１８に記載のプログラム製品。
【請求項２３】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項１８に記載のプログラム製品。
【請求項２４】
前記プログラム命令が前記コントローラに、
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記コントローラが前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復すること、をさらに遂行させる、請求項１８に記載のプログラム製品。
【請求項２５】
前記プログラム命令が前記コントローラに、前記上位コントローラからの要求の受信に応答して、前記論理アドレスのセットを前記上位コントローラへ送信すること、をさらに遂行させる、請求項１８に記載のプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理およびストレージに関し、より具体的には、マルチページ障害時のデータ回復を支援するための、フラッシュ・メモリ・システムなどの不揮発性メモリ・システムの管理に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュ・メモリは、トランジスタのフローティング・ゲートまたは同様の電荷トラップ構造上の電荷としてメモリ・セル当たり１ビット以上のデータを格納する電気的にプログラマブルで消去可能な不揮発性メモリ技術である。典型的な実装例では、ＮＡＮＤ型フラッシュ・メモリ・アレイは、物理メモリのブロック（「消去ブロック」とも称される）であって、それらの各々が、同様に多数のメモリ・セルを各々が含む複数の物理ページを含む、物理メモリのブロック内で組織化される。メモリ・セルにアクセスするために利用されるワード線およびビット線の配置によって、フラッシュ・メモリ・アレイは、概して、ページ単位でプログラムすることができるが、ブロック単位で消去される。
【０００３】
当技術分野で既知のように、ＮＡＮＤ型フラッシュ・メモリのブロックは、新しいデータでプログラムされる前に消去されなければならない。ＮＡＮＤ型フラッシュ・メモリ・セルのブロックは、高い正の消去電圧パルスを選択されたブロックのｐウェル・バルク領域に印加すること、および消去されるメモリ・セルのワード線のすべてを接地にバイアスすることによって消去される。消去パルスの印加は、接地にバイアスされたメモリ・セルのフローティング・ゲートからの電子のトンネリングを促進して、メモリ・セルに正味正電荷を付与し、それにしたがって、メモリ・セルの電圧閾値を消去状態へと遷移させる。各消去パルスの後は、概ね、消去動作が成功したか否かを、例えば、消去ブロック内の閾値数未満のメモリ・セルが消去に失敗したことを検証することによって決定するために消去ブロックを読み取る消去検証動作が続く。概ね、消去パルスは、消去検証動作が成功するまで、または所定の数の消去パルスが使用されるまで（すなわち、消去パルスのバジェットが使い果たされるまで）、消去ブロックに印加され続ける。
【０００４】
ＮＡＮＤ型フラッシュ・メモリ・セルは、高い正のプログラム電圧をプログラムされるメモリ・セルのワード線に印加すること、および中間パス電圧をプログラミングが禁止された同じストリング内のメモリ・セルに印加することによってプログラムすることができる。プログラム電圧の印加は、電子をフローティング・ゲートにトンネリングさせ、その状態を初期消去状態から正味負電荷を有するプログラムされた状態に変化させる。プログラミングに続いて、プログラムされたページは、通常、プログラム動作が成功したことを、例えば、プログラムされたページ内の閾値数未満のメモリ・セルがビット・エラーを含むことを検証することによって保証するように、読み取り検証動作内で読み取られる。概ね、プログラムおよび読み取り検証動作は、読み取り検証動作が成功するまで、または所定の数のプログラミング・パルスが使用されるまで（すなわち、プログラム・パルスのバジェットが使い果たされるまで）ページに適用される。
【０００５】
すべてのフラッシュ・ストレージ媒体を用いるエンタープライズ級のデータ・ストレージ・システムは、多くの場合、フラッシュ・カードまたはソリッド・ステート・ディスク（ＳＳＤ：ｓｏｌｉｄ  ｓｔａｔｅ  ｄｉｓｋ）内のデータを、ページ・ストライプであって、それらの中で異なるチャネル／レーンからのフラッシュ・メモリの物理ページが一緒にグループ化されて、データ冗長性を追加するか、もしくは書き込み要求の並列処理を最適化するか、またはその両方が行われる、ページ・ストライプに組織化する。例えば、ページ・ストライプは、共通のページ・インデックスを有する物理ページからメモリ・ブロックのセットにわたって形成されてもよい。ページ・ストライプを形成するデータの整合性は、パリティ・ページをページ・ストライプに付加することによって改善され、それにしたがって、ＲＡＩＤ５／６と同様のパリティ・スキームを実装することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
少なくともいくつかの事例では、選択されたＲＡＩＤパリティ・スキームがエラーなどを訂正することができないため、マルチページ障害が同じページ・ストライプ内で発生すると、フラッシュ・カードに障害が発生する。例えば、ＲＡＩＤ５では、単一ページの障害を訂正することができるが、同じページ・ストライプの２つ以上のページ内のエラーを訂正することはできない。一方、ＲＡＩＤ６では、二重ページ（ｄｏｕｂｌｅ  ｐａｇｅ）の障害を訂正することができるが、同じページ・ストライプの３つ以上のページ内のエラーを訂正することはできない。障害が発生したフラッシュ・カードに対する典型的な応答は、フラッシュ・カードのコンテンツ全体を再構築することである。フラッシュ・カードの再構築は、フラッシュ・カードのコンテンツの回復中にデータ・ストレージ・システムの性能を限定するだけでなく、フラッシュ・アレイが、回復不能なデータ損失を招く可能性がある、再構築処理中の別のフラッシュ・カードの障害に遭遇するというさらなる致命的なリスクにさらされる。
【課題を解決するための手段】
【０００７】
少なくとも１つの実施形態では、データ・ストレージ・システムにおけるマルチページ・エラーから回復するための改善された技術が提供される。
【０００８】
一態様では、データ・ストレージ・システムは、コントローラと、複数の物理ページを各々が含む複数のブロックを有する不揮発性メモリ・アレイとを含む。一方法によると、コントローラは、論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ：ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ｔｒａｎｓｌａｔｉｏｎ）データ構造を維持し、書き込みデータを複数の物理ブロック上にストライプする第１のデータ保護スキームを実装する。データを対象ページ・ストライプから要求する読み取り要求に応答して、コントローラは対象ページ・ストライプの複数の物理ページ内のエラーを検出する。第１のデータ保護スキームによって訂正することができない、対象ページ・ストライプの複数の物理ページ内のエラーを検出することに応答して、コントローラは、ＬＰＴデータ構造をスキャンして、対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって対象ページ・ストライプの回復をトリガし、回復をトリガすることは論理アドレスのセットを上位コントローラに送信することを含む。この方法の一利点は、回復性能が、読み取り障害が発生したフラッシュ・カード全体を再構築する必要がある従来技術の解決策に比べて大幅に改善されることである。
【０００９】
開示される技術はまた、コントローラを含むデータ・ストレージ・システムとして実現することができる。コントローラは、複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイ、および不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を含むメモリに連結されるように構成されている。コントローラは、書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装するように構成されている。コントローラはまた、データを複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、対象ページ・ストライプの複数の物理ページ内のエラーを検出し、第１のデータ保護スキームによって訂正することができない、対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、ＬＰＴデータ構造をスキャンして、対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって対象ページ・ストライプの回復をトリガし、回復をトリガすることは、コントローラが論理アドレスのセットを上位コントローラに送信することを含むように構成されている。このデータ・ストレージ・システムの一利点は、回復性能が、読み取り障害が発生したフラッシュ・カード全体を再構築する必要がある従来技術の解決策に比べて大幅に改善されることである。
【００１０】
開示される技術はまた、プログラムとして実現することができる。プログラムは、コントローラに、不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持することと、書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装することとを遂行させる。プログラムは、コントローラに、データを複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、対象ページ・ストライプの複数の物理ページ内のエラーを検出することと、第１のデータ保護スキームによって訂正することができない、対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、ＬＰＴデータ構造をスキャンして、対象ページ・ストライプにマッピングされた論理アドレスのセットを識別することと、第２のデータ保護スキームを実装する上位コントローラによって対象ページ・ストライプの回復をトリガすることであって、論理アドレスのセットを上位コントローラに送信することを含む、回復をトリガすることとをさらにさせる。このプログラムの一利点は、回復性能が、読み取り障害が発生したフラッシュ・カード全体を再構築する必要がある従来技術の解決策に比べて大幅に改善されることである。
【００１１】
少なくとも１つの実施形態では、コントローラは、上位コントローラが対象ページ・ストライプの再構築を完了したか否かを決定し、上位コントローラが対象ページ・ストライプの再構築を完了したということを決定することに応答して、対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを不揮発性メモリ・アレイ内に再配置する。ブロック・ストライプを再配置することによって、ブロック・ストライプ内の別の障害の可能性を低減することができ、再構築によって無効化されたページを再生利用することができる。
【００１２】
少なくとも１つの実施形態では、第１のデータ保護スキームおよび第２のデータ保護スキームは、独立ディスクの冗長アレイ（ＲＡＩＤ：ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋ）データ保護スキーム（複数可）に基づいていても、またはそれらと同様であってもよいパリティベースのデータ保護スキームを含む。したがって、周知のデータ保護スキームを用いて、開示される技術を実装することができる。
【００１３】
少なくとも１つの実施形態では、コントローラは、読み取り要求がホスト読み取り要求であることに応答して、論理アドレスのセットを上位コントローラに送信することを控える。この事例では、対象ページ・ストライプの再構築に関連付けられた準備作業（したがって遅延）を低減することができる。
【００１４】
本発明の実施形態を、添付の図面を参照して、単なる例としてここで説明する。
【図面の簡単な説明】
【００１５】
【図１】一実施形態によるデータ処理環境の高位ブロック図である。
【図２】図１のデータ・ストレージ・システムの例示的な一インターフェース・ノードのより詳細なブロック図である。
【図３】図１のデータ・ストレージ・システムのフラッシュ・カードのより詳細なブロック図である。
【図４】本開示によるＮＡＮＤ型フラッシュ・メモリ・システム内の物理メモリの例示的な一配置を説明する。
【図５】本開示によるＮＡＮＤ型フラッシュ・メモリ・システム内の物理メモリの例示的な一配置を説明する。
【図６】本開示によるＮＡＮＤ型フラッシュ・メモリ・システム内の物理メモリの例示的な一配置を説明する。
【図７】本開示によるＮＡＮＤ型フラッシュ・メモリ・システム内の物理メモリの例示的な一配置を説明する。
【図８】図８Ａは本開示によるブロック・ストライプの例示的な一実装例を示す。図８Ｂは本開示によるページ・ストライプの例示的な一実装例を示す。
【図９】本開示による各データ・ページ内に格納された例示的な一コードワードを説明する。
【図１０】本開示による各データ保護ページ内に格納された例示的な一コードワードを示す。
【図１１】一実施形態によるフラッシュ・メモリを管理するために用いられたフラッシュ管理機能およびデータ構造の高位フロー図である。
【図１２】一実施形態による例示的な一ブロック・ストライプを示す。
【図１３】一実施形態による、図１１のＬＰＴテーブルがページ・ストライプ内に格納された論理ページの論理ブロック・アドレス（ＬＢＡ：ｌｏｇｉｃａｌ  ｂｌｏｃｋ  ａｄｄｒｅｓｓ）を物理ブロック・アドレス（ＰＢＡ：ｐｈｙｓｉｃａｌ  ｂｌｏｃｋ  ａｄｄｒｅｓｓ）にどのようにマッピングするかの一例を説明する。
【図１４】データ・ストレージ・システムにおけるマルチページ・エラーから回復するための例示的な一処理の高位論理フローチャートを示す。
【発明を実施するための形態】
【００１６】
図面を参照し、特に図１を参照すると、本明細書においてさらに説明される不揮発性メモリ・アレイを有するデータ・ストレージ・システム１２０を含む例示的な一データ処理環境１００の高位ブロック図が説明されている。示されるように、データ処理環境１００は、命令およびデータを処理する１つ以上のプロセッサ１０４を有するプロセッサ・システム１０２などの１つ以上のホストを含む。プロセッサ・システム１０２は、プロセッサ（複数可）１０４によって遂行された処理のプログラム・コード、オペランド、もしくは実行結果、またはそれらのすべてを格納し得るローカル・ストレージ１０６（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）またはディスク）をさらに含むことができる。種々の実施形態では、プロセッサ・システム１０２は、例えば、モバイル・コンピューティング・デバイス（スマートフォンもしくはタブレットなど）、ラップトップもしくはデスクトップ・パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム（ＩＢＭより入手可能なＰＯＷＥＲ（ＩＢＭ社の登録商標）シリーズのうちの１つなど）、またはメインフレーム・コンピュータ・システムであってもよい。プロセッサ・システム１０２はまた、ＡＲＭ（Ｒ）、Ｐｏｗｅｒ（ＩＢＭ社の登録商標）、Ｉｎｔｅｌ（Ｒ）ｘ８６、またはメモリ・キャッシュ、メモリ・コントローラ、ローカル・ストレージ、Ｉ／Ｏバス・ハブなどと組み合わせられた任意の他のプロセッサなどの種々のプロセッサを使用する組み込みプロセッサ・システムであってもよい。
【００１７】
各プロセッサ・システム１０２は、Ｉ／Ｏチャネル１１０を介してデータ・ストレージ・システム１２０に直接的に（すなわち、介在するデバイスなしで）または間接的に（すなわち、少なくとも１つの中間デバイスを介して）連結された入出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）アダプタ１０８をさらに含む。種々の実施形態では、Ｉ／Ｏチャネル１１０は、例えば、ファイバ・チャネル（ＦＣ：Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ファイバ・チャネル・オーバー・イーサネット（Ｒ）（ＦＣｏＥ：ＦＣ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ（Ｒ））、インターネット・スモール・コンピュータ・システム・インターフェイス（ｉＳＣＳＩ：Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、インフィニバンド、トランスポート・コントロール・プロトコル／インターネット・プロトコル（ＴＣＰ：Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）、周辺機器構成要素相互接続エクスプレス（ＰＣＩｅ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などを含む既知または将来開発される通信プロトコルのいずれか１つまたはそれらの組み合わせを用いることができる。Ｉ／Ｏチャネル１１０を介して通信されるＩ／Ｏ動作（ＩＯＰ：Ｉ／Ｏ  ｏｐｅｒａｔｉｏｎ）は、読み取りＩＯＰであって、それらによってプロセッサ・システム１０２がデータをデータ・ストレージ・システム１２０から要求する、読み取りＩＯＰと、書き込みＩＯＰであって、それらによってプロセッサ・システム１０２がデータ・ストレージ・システム１２０内のデータのストレージを要求する、書き込みＩＯＰとを含む。
【００１８】
説明される実施形態では、データ・ストレージ・システム１２０は、複数のインターフェース・ノード１２２であって、それらを通じてデータ・ストレージ・システム１２０がＩ／Ｏチャネル１１０を介して入出力動作（ＩＯＰ）１０２を受信し、それらに応答する、複数のインターフェース・ノード１２２を含む。各インターフェース・ノード１２２は、フォールト・トレラントおよびロード・バランシングを容易にするために、複数の独立ディスクの冗長アレイ（ＲＡＩＤ）コントローラ１２４の各々に連結される。例えば、ＲＡＩＤコントローラ１２４は、ネストされたＲＡＩＤ（例えば、ＲＡＩＤ５０またはＲＡＩＤ６０）を含むＲＡＩＤの１つ以上のレベルをフラッシュ・カード１２６にわたって実装することができる。ＲＡＩＤコントローラ１２４の各々は、この例では、ＮＡＮＤ型フラッシュ・ストレージ媒体を含む複数のフラッシュ・カード１２６の各々に（例えば、ＰＣＩｅバスによって）順に連結される。他の実施形態では、他のまたは追加の不可逆的ストレージ媒体を用いることができる。
【００１９】
図２は、図１のデータ・ストレージ・システム１２０のインターフェース・ノード１２２のより詳細なブロック図を示す。インターフェース・ノード１２２は、Ｉ／Ｏチャネル１１０を介してプロセッサ・システム１０２へのインターフェースとして機能し、ホスト側スイッチング・ファブリック１１２に接続する１つ以上のインターフェース・カード１１１を含む。ホスト側スイッチング・ファブリック１１２は、スイッチとして作用し、インターフェース・カード１１１と、インターフェース・ノード１２２内の処理ユニット、すなわち、コントロール・プレーン汎用プロセッサ（ＧＰＰ：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｐｒｏｃｅｓｓｏｒ）１１３、データ・プレーンＧＰＰ１１６、およびデータ・プレーン・プロセッサ１１７との間のすべてのデータ転送を処理する。典型的な一実施態様では、ホスト側スイッチング・ファブリック１１２は、ＰＣＩｅスイッチを用いて実装することができるが、他のスイッチ技術も同様に使用することができる。データ・プレーン・プロセッサ１１７は、例えば、特定用途向け集積回路（ＡＳＩＣ：Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）によって実装することができる専用プロセッサである。コントロール・プレーンＧＰＰ１１３、データ・プレーンＧＰＰ１１６、およびデータ・プレーン・プロセッサ１１７はすべて、これらの構成要素間の共有メモリ、別個のメモリ、またはそれらの組み合わせとして実装され得るメモリ１１４に接続される。
【００２０】
データ・プレーン・プロセッサ１１７がＦＰＧＡで実装された実施形態では、コントロール・プレーンＧＰＰ１１３は、データ・ストレージ・システム１２０の起動中にデータ・プレーン・プロセッサ１１７をプログラムおよび構成することができる。データ・プレーンＧＰＰ１１６およびコントロール・プレーンＧＰＰ１１３は、データ・プレーン・プロセッサ１１７、ならびにデータ・プレーン・プロセッサ１１７のコントロールを介して間接的に、またはディスク側スイッチング・ファブリック１１９を介して直接的に、のいずれかによるフラッシュ・カード１２６へのアクセスをコントロールする。コントロール・プレーンＧＰＰ１１３は、システム管理機能、ならびにデータ回復、スナップショット、シン・プロビジョニング、および重複排除などの上位サービスを実行する。データ・プレーンＧＰＰ１１６は、プロトコル固有の機能を実行する。コントロール・プレーンＧＰＰ１１３、データ・プレーンＧＰＰ１１６、およびデータ・プレーン・プロセッサ１１７は、ＰＣＩｅスイッチまたは他のスイッチ技術で実装することができるディスク側スイッチング・ファブリック１１９を通じてＲＡＩＤコントローラ１２４に接続される。図２は、フェイルオーバーをサポートするか、もしくは他のデータ同期機能を遂行するか、またはその両方のために、データ・ストレージ・システム１２０内の他のインターフェース・ノード１２２に接続されたコントロール・プレーンＧＰＰ１１３およびデータ・プレーン・プロセッサ１１７をさらに説明する。
【００２１】
図３は、図１のデータ・ストレージ・システム１２０のフラッシュ・カード１２６のより詳細なブロック図を示す。フラッシュ・カード１２６は、フラッシュ・カード１２６とＲＡＩＤコントローラ１２４との間のインターフェースとして機能するゲートウェイ１３０を含む。ゲートウェイ１３０は、ゲートウェイ１３０によって受信されたＩＯＰの前処理などの種々の管理機能を遂行するか、もしくはフラッシュ・カード１２６によるＩＯＰのサービス提供をスケジューリングするか、またはその両方を行うように構成することができる汎用プロセッサ（ＧＰＰ）１３２に連結される。ＧＰＰ１３２は、その処理の過程でＧＰＰ１３２によって作成、参照、もしくは修正されるか、またはそれらのすべてが行われたデータを都合よくバッファリングすることができるＧＰＰメモリ１３４（例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）または磁気抵抗ランダム・アクセス・メモリ（ＭＲＡＭ：Ｍａｇｎｅｔｏ−ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））に連結される。
【００２２】
ゲートウェイ１３０は、複数のフラッシュ・コントローラ１４０であって、それらの各々がそれぞれのＮＡＮＤ型フラッシュ・メモリ・システム１５０をコントロールする、複数のフラッシュ・コントローラ１４０にさらに接続される。フラッシュ・コントローラ１４０は、例えば、関連付けられたフラッシュ・コントローラ・メモリ１４２（例えば、ＤＲＡＭ）を有するＡＳＩＣまたはＦＰＧＡによって実装することができる。フラッシュ・コントローラ１４０がＦＰＧＡによって実装された実施形態では、ＧＰＰ１３２は、データ・ストレージ・システム１２０の起動中にフラッシュ・コントローラ１４０をプログラムおよび構成することができる。起動後、通常動作では、フラッシュ・コントローラ１４０は、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内に格納されたデータを読み取るか、もしくはＮＡＮＤ型フラッシュ・メモリ・システム１５０内のデータを格納するか、またはその両方を行うよう要求するゲートウェイ１３０からの読み取りおよび書き込みＩＯＰを受信する。フラッシュ・コントローラ１４０は、これらのＩＯＰを、例えば、ＮＡＮＤ型フラッシュ・メモリ・システム１５０にアクセスして、ＮＡＮＤ型フラッシュ・メモリ・システム１５０からもしくはそれらに要求されたデータを読み取るかもしくは書き込むことによって、またはＮＡＮＤ型フラッシュ・メモリ・システム１５０に関連付けられた１つ以上の読み取りキャッシュ、もしくは書き込みキャッシュ、あるいはその両方（図３には説明せず）にアクセスすることによってサービス提供する。
【００２３】
フラッシュ・コントローラ１４０は、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内の特定のメモリ位置へのアクセスを可能にするための論理−物理アドレス変換を提供するフラッシュ変換レイヤ（ＦＴＬ：ｆｌａｓｈ  ｔｒａｎｓｌａｔｉｏｎ  ｌａｙｅｒ）を実装する。通常、フラッシュ・コントローラ１４０によって、プロセッサ・システム１０２などのホスト・デバイスから受信したＩＯＰは、データがアクセスされた（読み取られたか、または書き込まれた）論理ブロック・アドレス（ＬＢＡ）を含み、書き込みＩＯＰの場合、書き込みデータは、データ・ストレージ・システム１２０に書き込まれる。ＩＯＰはまた、アクセスされるデータの量（またはサイズ）を指定することができる。他の情報もまた、データ・ストレージ・システム１２０によってサポートされるプロトコルおよび機能に応じて通信されてもよい。当業者には知られているように、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内で用いられるようなＮＡＮＤ型フラッシュ・メモリは、読み取りまたは書き込みＩＯＰによってアクセスすることができる最小粒のデータが、フラッシュ・メモリの単一の物理ページのサイズ、例えば、１６キロバイト（ＫＢ：ｋｉｌｏｂｙｔｅ）で固定されるように、その構成によって制約される。ホスト・デバイスによって提供されるＬＢＡは、論理アドレス空間内の論理ページに対応し、ページは通常４キロバイトのサイズを有する。したがって、２つ以上の論理ページを物理フラッシュ・ページ内に格納することができる。フラッシュ変換レイヤは、このＬＢＡを、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内の対応する物理位置に割り当てられた物理アドレスに変換する。フラッシュ・コントローラ１４０は、フラッシュ・コントローラ・メモリ１４２内に都合よく格納することができる論理−物理変換（ＬＰＴ）テーブルなどの論理−物理変換データ構造内の論理アドレスと物理アドレスとの間のアドレス変換を遂行するか、もしくはマッピングを格納するか、またはその両方を行うことができる。
【００２４】
ＮＡＮＤ型フラッシュ・メモリ・システム１５０は、種々の実施形態において多くの形態をとることができる。ここで図４〜７を参照すると、例示的な一実施形態によるＮＡＮＤ型フラッシュ・メモリ・システム１５０内の物理メモリの一例示的配置が示される。
【００２５】
図４に示されるように、ＮＡＮＤ型フラッシュ・メモリ・システム１５０は、３２個の個々にアドレス可能なＮＡＮＤ型フラッシュ・メモリ・ストレージ・デバイスから形成することができる。説明される例では、フラッシュ・メモリ・ストレージ・デバイスＭ０ａ〜Ｍ１５ｂの各々は、セル当たり１ビット以上を格納することができるボード搭載フラッシュ・メモリ・モジュールの形態をとる。したがって、フラッシュ・メモリ・モジュールは、シングル・レベル・セル（ＳＬＣ：Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）、マルチレベル・セル（ＭＬＣ：Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ）、スリー・レベル・セル（ＴＬＣ：Ｔｈｒｅｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）、またはクアッド・レベル・セル（ＱＬＣ：Ｑｕａｄ  Ｌｅｖｅｌ  Ｃｅｌｌ）メモリで実装することができる。３２個のＮＡＮＤ型フラッシュ・メモリ・モジュールは、２つ（Ｍ０ａ、Ｍ０ｂ）〜（Ｍ１５ａ、Ｍ１５ｂ）の１６個のグループに配置される。物理アドレス指定スキームのために、２つのモジュールの各グループは、ＮＡＮＤ型フラッシュ・メモリ・システム１５０が１６個のチャネルまたはレーン（レーン０〜レーン１５）を含むように、時には「チャネル」と称されることもある「レーン」を形成する。
【００２６】
好ましい一実施形態では、個々のレーンの各々は、それを関連付けられたフラッシュ・コントローラ１４０に連結するそれぞれの関連付けられたバスを有する。したがって、その通信を特定の通信バスのうちの１つに向けることによって、フラッシュ・コントローラ１４０は、その通信をメモリ・モジュールのレーンのうちの１つに向けることができる。所与のレーンについての各通信バスが他のレーンについての通信バスとは独立しているため、フラッシュ・コントローラ１４０は、コマンドを発行し、種々の通信バスを介してデータを同時に送信または受信し、フラッシュ・コントローラ１４０が同時にまたはほぼ同時に、個々のレーンに対応するフラッシュ・メモリ・モジュールにアクセスすることを可能にすることができる。
【００２７】
ここで図５を参照すると、図４のフラッシュ・メモリ・モジュールＭ０ａ〜Ｍ１５ｂのいずれかを実装するために利用することができるフラッシュ・メモリ・モジュール３００の例示的な一実施形態が説明されている。図５に示されるように、フラッシュ・メモリ・モジュール３００によって提供される物理ストレージの位置は、チップ・イネーブル（ＣＥ：Ｃｈｉｐ  Ｅｎａｂｌｅ）を介してアドレス指定することができるか、もしくは識別することができるか、またはその両方を行うことができる物理位置にさらに細分される。図５の例では、各フラッシュ・メモリ・チップ３００の物理メモリは、フラッシュ・コントローラ１４０によってアサートされたそれぞれのＣＥラインを各々が有する４つのチップ・イネーブル（ＣＥ０、ＣＥ１、ＣＥ２、およびＣＥ３）に分割され、対応するＣＥ内の物理メモリの位置にまたは該位置からアクセスすることができる。各ＣＥは同様に、２つのプレーン（例えば、プレーン０およびプレーン１）を各々が有する複数のダイ（例えば、ダイ０およびダイ１）に細分される。各プレーンは、フラッシュ・メモリ・チップの物理レイアウトのために、互いに物理的に関連付けられ、読み取りおよび書き込み動作などの種々の動作の性能のための共通の回路（例えば、Ｉ／Ｏバッファ）を利用する（以下に説明される）ブロックの集まりを表す。
【００２８】
図６および７にさらに示されるように、図５のフラッシュ・メモリ・モジュール３００内のプレーンのいずれかを実装するために利用することができる例示的な一プレーン４００は、例えば、物理メモリの１０２４個または２０４８個のブロックを含む。いくつかのブロックが早期に障害発生する可能性があるため、製造元は多くの場合いくつかの追加のブロックを追加することに留意されたい。通常、ブロック５００は、典型的には物理的な様式で互いに関連付けられた物理ページの集まりである。この関連付けは、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内で消去することができる物理ストレージの位置の最小粒度であるとブロックが定義されるようなものである。図７の実施形態では、各ブロック５００は、物理ページが読み取りおよび書き込みアクセスのための最小の個々にアドレス可能なデータ・ユニットであると定義される、例えば、２５６個または５１２個の物理ページを含む。例示的なシステムでは、データの各物理ページは、データ・ストレージのための共通の容量（例えば、１６ｋＢ）に加えて、以下でより詳細に記載されるメタデータのための追加のストレージを有する。したがって、データは、ページ単位でＮＡＮＤ型フラッシュ・メモリ・システム１５０に書き込まれるかまたはそこから読み取られるが、ブロック単位で消去される。
【００２９】
ＮＡＮＤ型フラッシュ・メモリ・システム１５０が実装される場合、またはセルごとに複数のビットをサポートするメモリ技術である場合、各ブロック５００の複数の物理ページが同じメモリ・セルのセット内に実装されることが一般的である。例えば、図７に示されるように、ブロック５００ごとに５１２個の物理ページと、メモリ・セルごとに２ビット（すなわち、ＮＡＮＤ型フラッシュ・メモリ１５０がＭＬＣメモリ内に実装されている）と仮定すると、ページ０〜ページ２５５（下位ページ）は、所与のメモリ・セルのセットの第１のビットを利用して実装することができ、ページ２５６〜ページ５１１（上位ページ）は、所与のメモリ・セルのセットの第２のビットを利用して実装することができる。下位ページおよび上位ページの実際の順序は、インターリーブされてもよく、製造元に依存する。
【００３０】
図７にさらに示されるように、各ブロック５００は、好ましくは、そのブロック５００を含む物理ページのページ使用停止ステータスを使用停止（すなわち、もはやユーザ・データを格納するために使用されない）または使用停止ではない（すなわち、アクティブであるか、またはユーザ・データを格納するためにまだ使用可能）として示すブロック・ステータス情報（ＢＳＩ：ｂｌｏｃｋ  ｓｔａｔｕｓ  ｉｎｆｏｒｍａｔｉｏｎ）５０２を含む。種々の実装形態では、ＢＳＩ５０２を、ブロック５００内の単一のデータ構造（例えば、ベクトルまたはテーブル）に集めることができるか、もしくはデータ・ストレージ・システム１２０内の他の場所で維持することができるか、またはその両々が可能である。
【００３１】
データ・ストレージ・システム１２０によって実装されたフラッシュ変換レイヤは、ホスト・デバイスが利用可能な論理アドレス空間をＮＡＮＤ型フラッシュ・メモリ・システム１５０内の物理メモリから分離するため、ＮＡＮＤ型フラッシュ・メモリ・システム１５０のサイズは、ホスト・デバイスに提示される論理アドレス空間のサイズに等しくある必要はない。実施形態の多くでは、利用可能な物理メモリの合計未満の（すなわち、オーバープロビジョンのＮＡＮＤ型フラッシュ・メモリ・システム１５０に対する）論理アドレス空間を提示することが有益である。この様式でオーバープロビジョニングすることにより、論理アドレス空間が完全に利用されたときに、上記のように一定量の無効なデータが存在しても、物理メモリ・リソースが利用可能であることを保証する。まだ再生利用されていない無効なデータに加えて、エラー訂正コード（ＥＣＣ：Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）、巡回冗長検査（ＣＲＣ：Ｃｙｃｌｅ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）、およびパリティなどのデータ保護スキームの使用に伴うメモリ障害およびメモリ・オーバーヘッドが存在しても、オーバープロビジョニングされた空間を使用して、十分な論理空間があることを保証することができる。
【００３２】
いくつかの実施形態では、データは一度に１ページずつＮＡＮＤ型フラッシュ・メモリ・システム１５０に書き込まれる。より強固なエラー回復が望まれる他の実施形態では、データは、本明細書において「ページ・ストライプ」と称されるＮＡＮＤ型フラッシュ・メモリ・システム１５０の関連付けられた物理ページのグループに書き込まれる。好ましい一実施形態では、高い書き込み帯域幅を達成するように、ページ・ストライプのすべてのページが異なるレーンに関連付けられる。多くの実装例では、最小消去ユニットがブロックであるため、ページ・ストライプを、ブロック・ストライプ内の各ブロックが異なるレーンに関連付けられた、図８Ａに示されるようなブロック・ストライプにグループ化することができる。ブロック・ストライプが構築されると、レーンの任意の空きブロックを選択することができるが、好ましくは、同じブロック・ストライプ内のすべてのブロックは、同じまたは同様のヘルス・グレードを有する。ブロックの選択は、同じプレーン、ダイ、もしくはチップ・イネーブル、またはそれらのすべてからのものになるようにさらに制限することができることに留意されたい。ブロック・ストライプの長さは変えることができ、好ましくは、変わるが、ＮＡＮＤ型フラッシュ・メモリ・システム１５０が１６個のレーンを含む一実施形態では、各ブロック・ストライプは、２〜１６個のブロックを含み、各ブロックは異なるレーンから来る。多様な長さのブロック・ストライプの構成に関するさらなる詳細は、参照によりそれらの全体が本明細書に組み込まれる米国特許第８，１７６，２８４号、同第８，１７６，３６０号、同第８，４４３，１３６号、および同第８，６３１，２７３号に見出すことができる。
【００３３】
ブロックが各レーンから選択され、ブロック・ストライプが形成されると、ページ・ストライプが、好ましくは、ブロック・ストライプ内のブロックから同じページ番号（すなわち、物理ページ・インデックス）を有する物理ページから形成される。ＮＡＮＤ型フラッシュ・メモリ・システム１５０に格納された種々のページ・ストライプの長さは変えることができ、好ましくは、変わるが、一実施形態では、各ページ・ストライプは、（通常、ホスト・デバイスによって提供される）書き込みデータの１〜１５個のデータ・ページ、および書き込みデータのためのデータ保護情報を格納するために使用される１つの追加ページ「データ保護ページ」）を含む。例えば、図８Ｂは、Ｎ個のデータ・ページ（すなわち、Ｄページ００〜ＤページＮ−１）および１つのデータ保護ページ（すなわち、ＰページＮ）を含む例示的な一ページ・ストライプ６１０を説明する。データ保護ページは、使用停止ではないページを含むページ・ストライプの任意のレーンに配置することができるが、通常、メタデータ情報を最小限に抑えるように、ロック・ストライプのすべてのページ・ストライプに対して同じレーン上にある。説明されるようにデータ保護ページを追加するためには、ガベージ・コレクションを同じブロック・ストライプのすべてのページ・ストライプに対して同時に遂行することが必要である。ブロック・ストライプのガベージ・コレクションが完了した後、ブロック・ストライプを分解することができ、各ブロックを、以下で説明される関連の使用できる状態（ＲＴＵ：ｒｅａｄｙ−ｔｏ−ｕｓｅ）の待ち行列に配置することができる。
【００３４】
図９は、図８Ｂのページ・ストライプ６１０内の各データ・ページ内に格納されたコードワードの例示的な一フォーマットを示す。典型的には、正の整数のコードワード、例えば、２または３が各データ・ページ内に格納されるが、代替的な一実施形態もまた、単一のコードワードをデータ・ページ内に格納することができる。この例では、各コードワード７００は、データ・フィールド７０２、ならびにデータ・ページを説明するメタデータのための追加のフィールドを含む。コードワードのサイズに応じて、データ・フィールド７０２は、１つ以上の論理ページのためのデータを保持する。別の実施形態では、論理データ・ページの断片を保持することもできる。説明される例では、メタデータ・フィールドは、コードワード７００内に格納されたＬＢＡを含むＬＢＡフィールド７０４、データ・フィールド７０２およびＬＢＡフィールド７０４の組み合わせに対して計算されたＣＲＣ値を含むＣＲＣフィールド７０６、ならびに説明される例では、データ・フィールド７０２、ＬＢＡフィールド７０４、およびＣＲＣフィールド７０６のコンテンツの組み合わせから計算されたＥＣＣ値を含むＥＣＣフィールド７０８を含む。データ・フィールド７０２が論理データ・ページの断片を保持する事例では、ＬＢＡフィールド７０４は、論理データ・ページのどの断片がデータ・フィールド７０２内に格納されているかの情報をさらに保持する。
【００３５】
図１０は、図８のページ・ストライプ６１０のデータ保護ページ内のコードワードの例示的な一フォーマットを示す。一実施形態では、各データ保護ページは、正の整数のコードワードを格納するが、代替的な一実施形態では、データ保護ページは単一のコードワードを格納することができる。示される例では、データ保護コードワード８００は、ページ・ストライプ６１０内のコードワード７００のデータ・フィールド７０２のコンテンツのビット単位の排他的論理和（ＸＯＲ：Ｅｘｃｌｕｓｉｖｅ  ＯＲ）を含むデータＸＯＲフィールド８０２を含む。データ保護コードワード８００は、ページ・ストライプ６１０内のコードワード７００のＬＢＡフィールド７０４のビット単位のＸＯＲを含むＬＢＡ  ＸＯＲフィールド８０４をさらに含む。データ保護コードワード８００は、最終的に、データ保護コードワード８００のためのＣＲＣ値およびＥＣＣ値をそれぞれ格納するためのＣＲＣフィールド８０６およびＥＣＣフィールド８０８を含む。かかる保護スキームは、パリティ・フィールドが必ずしも特定のフラッシュ・プレーン上に位置するとは限らないため、一般にＲＡＩＤ５と称される。しかしながら、リード・ソロモンなどの代替的なデータ保護スキームを代替的にまたは追加的に使用することができることを理解されたい。
【００３６】
上記のデータ・ページおよびデータ保護ページのフォーマットは、複数の異なるデータ保護メカニズムを使用してページ・ストライプ内に格納されたデータを保護する。第１に、データ・ページの各コードワード内のＥＣＣビットの使用により、フラッシュ・ページ内のコードワード内のいくつかの数のビット・エラーの訂正が可能になる。使用されるＥＣＣ方法に応じて、ＮＡＮＤ型フラッシュ・ページ内の数百ビットまたは数千ビットさえも訂正することが可能である場合がある。ＥＣＣ検査および訂正が遂行された後、訂正されたＣＲＣフィールドを使用して、訂正されたデータを検証する。これらの２つのメカニズムを一緒に使用することにより、比較的良質なエラーの訂正、およびローカルのページ内の情報のみを使用したより重大なエラーの検出が可能になる。例えば、データ・ページを格納するために利用された物理ページの障害のために、訂正不可能なエラーがデータ・ページ内に発生した場合、データ・フィールドおよび障害のあるデータ・ページのＬＢＡフィールドのコンテンツは、他のデータ・ページおよびページ・ストライプのための１つ以上のデータ保護ページから再構築することができる。データをデータ・ストライプのレベルで再構築する能力に障害がある場合、データは、以下でさらに説明されるように、上位コントローラ（例えば、コントロール・プレーンＧＰＰ１１３またはＲＡＩＤコントローラ１２４）によって再構築することができる。
【００３７】
ページ・ストライプのデータ・ページおよびデータ保護ページが格納された物理メモリの位置は、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内で変わるが、一実施形態では、所与のページ・ストライプを含むデータ・ページおよびデータ保護ページは、好ましくは、データ・ストレージ・システム１２０の全体的な動作を最適化するように選択された物理メモリの位置に格納される。例えば、いくつかの実施形態では、ページ・ストライプを含むデータ・ページおよびデータ保護ページは、異なる物理レーンを利用して、データ・ページおよびデータ保護ページの各々を格納するように格納される。かかる実施形態は、フラッシュ・コントローラ１４０が、ページ・ストライプを含むデータのすべてのページに同時にまたはほぼ同時にアクセスすることができるため、ページ・ストライプへの効率的なアクセスをサポートする。レーンへのページの割り当ては、連続的である必要はなく（すなわち、データ・ページは任意のレーンに任意の順序で格納することができる）、ページ・ストライプが完全な長さのページ・ストライプ（例えば、１５個のデータ・ページおよび１つのデータ保護ページを含む）でない限り、ページ・ストライプを格納するために利用されるレーンは隣接する必要はないことに留意されたい。
【００３８】
データ・ストレージ・システム１２０の例示的な一実施形態の全般的な物理構造および動作を説明してきたが、データ・ストレージ・システム１２０のある特定の動作態様を、一実施形態によるＧＰＰ１３２もしくはフラッシュ・コントローラ１４０またはその両方によって用いられるフラッシュ管理機能およびデータ構造の高位フロー図である図１１を参照してここで説明する。
【００３９】
上述されるように、データ・ストレージ・システム１２０は、概して、外部デバイスが、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内の物理メモリの位置に直接アドレス指定するか、もしくはアクセスするか、またはその両方を行うことをさせない。その代わりに、データ・ストレージ・システム１２０は、概して、外部デバイスに単一の連続した論理アドレス空間を提示するように構成され、それに従って、ホスト・デバイスが論理アドレス空間内のＬＢＡとの間でデータを読み取りおよび書き込むことを可能にしつつ、フラッシュ・コントローラ１４０およびＧＰＰ１３２が、種々のＬＢＡに関連付けられたデータがＮＡＮＤ型フラッシュ・メモリ・システム１５０を含む物理メモリの位置に実際に存在する場所をコントロールさせる。この様式で、ＮＡＮＤ型フラッシュ・メモリ・システム１５０の性能および寿命をインテリジェントに管理および最適化することができる。説明される実施形態では、各フラッシュ・コントローラ１４０は、関連付けられたフラッシュ・コントローラ・メモリ１４２内に格納することができる論理−物理変換（ＬＰＴ）テーブル９００などの論理−物理変換データ構造を使用して論理−物理変換を管理する。
【００４０】
ＧＰＰ１３２上で実行されるフラッシュ管理コードは、例えば、ＧＰＰメモリ１３４内に格納され得る使用できる状態（ＲＴＵ）の待ち行列９０６で使用する準備ができているＮＡＮＤ型フラッシュ・メモリ・システム１５０の消去されたブロックを追跡する。示される実施形態では、ＧＰＰ１３２上で実行される管理コードは、好ましくは、チャネルごとに１つ以上のＲＴＵ待ち行列９０６を維持し、再使用される各消去されたブロックの識別子は、そのチャネルに対応するＲＴＵ待ち行列９０６のうちの１つの待ち行列に入れられる。
【００４１】
ＧＰＰ１３２上で実行されるフラッシュ管理コードによって遂行されるブロック・ストライプ構築機能９２０は、ＲＴＵ待ち行列９０６の待ち行列に入れられた消去されたブロックからのデータおよび関連付けられたパリティ情報を格納するための新しいブロック・ストライプを構築する。図８Ａを参照して上述されるように、ブロック・ストライプは、好ましくは、異なるチャネル内に存在する同じまたは同様のヘルスのブロック（すなわち、予期される残存有効寿命）で形成され、ブロック・ストライプ構築機能９２０は、新しいブロック・ストライプの各ブロックを異なるチャネルの対応するＲＴＵ待ち行列９０６から引き出すことによって、都合よくブロック・ストライプを構築することができることを意味する。次いで、新しいブロック・ストライプがデータ配置のためにフラッシュ・コントローラ１４０の行列待ちに入れられる。
【００４２】
プロセッサ・システム１０２などのホストから受信された書き込みＩＯＰに応答して、フラッシュ・コントローラ１４０のデータ配置機能９１０は、書き込み要求で示された対象ＬＢＡ（複数可）が現在、ＮＡＮＤ型フラッシュ・メモリ・システム１５０内の物理メモリ・ページ（複数可）にマッピングされているか否かをＬＰＴテーブル９００を参照して決定し、そうであれば、それがもはや有効ではないことを示すように対象ＬＢＡに現在関連付けられている各データ・ページのステータスを変更する。加えて、データ配置機能９１０は、書き込みＩＯＰの書き込みデータおよび書き込みＩＯＰの対象となる既存のページ・ストライプ（もしあれば）からの任意の更新されていないデータ（すなわち、書込み要求が論理ページよりも小さく、読み取り−修正−書き込み様式で処理される必要がある有効なデータが依然として存在する場合）を、必要に応じて格納するページ・ストライプを割り当てるか、もしくは書き込みＩＯＰの書き込みデータおよび書き込みＩＯＰの対象となる既存のページ・ストライプ（もしあれば）からの任意の更新されていない（すなわち、依然有効な）データを、空いた空間が残っている既に割り当てられたページ・ストライプに格納するか、またはその両方を行う。ページ・ストライプは、データを保持するように既に割り当てられたブロック・ストライプまたはブロック・ストライプ構築機能９２０によって構築された新しいブロック・ストライプのいずれかから割り当てられてもよい。好ましい一実施形態では、ページ・ストライプの割り当ては、割り当て用に利用可能なブロックのヘルスと、書き込みデータのＬＢＡの「ヒート」（すなわち、推定または測定された書き込みアクセスの頻度）に基づくことができる。次いで、データ配置機能９１０は、ページ・ストライプの各ページ内の各コードワードについての、メタデータ（例えば、ＣＲＣ値およびＥＣＣ値）に関連付けられた書き込みデータ、および割り当てられたページ・ストライプ内のページ・ストライプについてのパリティ情報を書き込む。関連付けられたメタデータおよびパリティ情報は、十分なホスト・データがページ・ストライプに配置されるとすぐにストレージに書き込むことができる。フラッシュ・コントローラ１４０はまた、ＬＰＴテーブル９００を更新して、書き込みデータを格納するために利用された物理ページ（複数可）を、ホスト・デバイスによって示されるＬＢＡ（複数可）に関連付ける。その後、フラッシュ・コントローラ１４０は、図１１にさらに説明されるように、データにアクセスして、ＬＰＴテーブル９００の参照によりホスト読み取りＩＯＰをサービス提供することができる。
【００４３】
ブロック・ストライプ内のすべてのページが書き込まれると、フラッシュ・コントローラ１４０は、ブロック・ストライプを、ＧＰＰ１３２上で実行されるフラッシュ管理コードを利用してガベージ・コレクションを容易にする占有されたブロック待ち行列９０２のうちの１つに配置する。上述されるように、書き込み処理を通じて、ページが無効化され、したがって、ＮＡＮＤ型フラッシュ・メモリ・システム１５０の一部が使用されなくなる。関連付けられたフラッシュ・コントローラ１４０（もしくはＧＰＰ１３２またはその両方）は、最終的に、この空間をガベージ・コレクタ９１２によって遂行されるガベージ・コレクションを通じて再生利用する必要がある。ガベージ・コレクタ９１２は、例えば、ブロック・ストライプ内のブロックのヘルスおよび消去ブロック内のデータのどの程度が無効であるかを含むいくつかの要因に基づいて、ガベージ・コレクションのための特定のブロック・ストライプを選択する。説明される例では、ガベージ・コレクションは、ブロック・ストライプ全体で遂行され、ＧＰＰ１３２上で実行されるフラッシュ管理コードは、リサイクルされる準備が整ったブロック・ストライプを、関連付けられたフラッシュ・コントローラ・メモリ１４２またはＧＰＰメモリ１３４内に都合よく実装することができる再配置待ち行列９０４に記録する。
【００４４】
ＧＰＰ１３２またはフラッシュ・コントローラ１４０によって遂行されるフラッシュ管理機能は、再配置待ち行列９０４の待ち行列に入れられたブロック・ストライプ内に保持された依然有効なデータを再配置する再配置機能９１４をさらに含む。かかるデータを再配置するために、再配置機能９１４は、再配置書き込み要求をデータ配置機能９１０に発行して、古いブロック・ストライプのデータがＮＡＮＤ型フラッシュ・メモリ・システム１５０内の新しいブロック・ストライプに書き込まれることを要求する。加えて、再配置機能９１４は、ＬＰＴテーブル９００を更新して、データの論理アドレスと物理アドレスとの間の現在の関連付けを取り除く。いったん有効なデータがすべて古いブロック・ストライプから移動されると、古いブロック・ストライプは、古いブロック・ストライプをその構成ブロックに分解して、それに従って、ブロックの関連付けを解消するブロック・ストライプ分解機能９１６に渡される。次いで、フラッシュ・コントローラ１４０は、分解されたブロック・ストライプを以前に形成していたブロックの各々を消去し、プログラム／消去（Ｐ／Ｅ：ｐｒｏｇｒａｍ／ｅｒａｓｅ）サイクル・カウント９４４内のブロックのための関連付けられたＰ／Ｅサイクル・カウントをインクリメントする。各消去されたブロックのヘルス・メトリックに基づいて、各消去されたブロックは、ＧＰＰ１３２上で実行されるフラッシュ管理機能のうちのブロック使用停止機能９１８によって使用停止（すなわち、もはやユーザ・データを格納するために使用されない）にされるか、または代替的に、ブロックの識別子を関連付けられたＧＰＰメモリ１３４内の適切な使用できる状態（ＲＴＵ）の待ち行列９０６に配置することによって再使用のために準備されるかいずれかされる。
【００４５】
図１１にさらに示されるように、ＧＰＰ１３２上で実行されるフラッシュ管理機能は、バックグラウンド・ヘルス・チェッカー９３０を含む。プロセッサ・システム１０２などのホストの要求読み取りＩＯＰおよび書き込みＩＯＰとは独立して動作するバックグラウンド・ヘルス・チェッカー９３０は、占有されたブロック待ち行列９０２に記録されたブロック・ストライプに属するブロックについての１つ以上のブロック・ヘルス・メトリック９４２（例えば、最悪ページ、もしくは平均ページ、またはその両方のビット・エラー率（ＢＥＲ：ｂｉｔ  ｅｒｒｏｒ  ｒａｔｅ）、プログラミング電圧、および読み取り電圧など）を連続的に決定する。ブロック・ヘルス・メトリック９４２のうちの１つ以上に基づいて、バックグラウンド・ヘルス・チェッカー９３０は、再配置機能９１４による処理のためにブロック・ストライプを再配置待ち行列９０４に配置することができる。
【００４６】
上記の実施形態では、データ・ストレージ・システム１２０は、複数のレベルのエラー検出および訂正を実装して、異なるタイプのフラッシュ関連およびシステムレベルの障害から保護する。説明される実施形態では、エラー検出および訂正のレベルは、少なくとも、（１）物理ページの各コードワード内のフラッシュ・メディアのエラーの検出および訂正を容易にするＥＣＣフィールド７０８内に格納されたより低いレベルのデータ保護情報（例えば、ＥＣＣ情報）、（２）ページ、ブロック、チップ、チャネル、およびプレーンの障害に対して保護するデータ保護コードワード８００内に格納された中間レベルのデータ保護情報（例えば、パリティ情報）、ならびに（３）フラッシュ・カードの障害に対して保護するフラッシュ・カード１２６の上のＲＡＩＤコントローラ１２４によって実装されたより高いレベルのデータ保護情報（例えば、パリティ情報）を含む。少なくとも１つの実施形態によれば、より低いレベルおよび中間レベルのデータ保護情報を使用してマルチページ・エラーを訂正できないことは、フラッシュ・カード１２６に障害が発生すること（およびフラッシュ・カード１２６のコンテンツの付随する再構築）を自動的にはもたらさず、その代わりに、より高いレベルのデータ保護情報から影響を受けるページ・ストライプ内の有害なデータを再構築する試みが最初になされる。
【００４７】
ここで図１２を参照すると、一実施形態による例示的な一ブロック・ストライプ１０００が示される。この例では、ブロック・ストライプ１０００は、所与のＮＡＮＤ型フラッシュ・メモリ・システム１５０のＮ＋１個の異なるレーンから取られたＮ＋１個のブロックから形成されている。示されるように、ブロック・ストライプ構築機能９２０によってブロック・ストライプ内に含めるために選択されたブロックは、任意の関連付けられたブロック・インデックス（例えば、レーン０のブロック１０、レーン１のブロック５、レーン２のブロック２０１など）を有することができる。
【００４８】
ブロックを含む物理ページを順に利用して、例えば、共通のページ・インデックス（例えば、ページ０、ページＭ、ページ２５５など）を有するすべてのページから各ページ・ストライプを形成することによって、２５６個のページ・ストライプを形成する。上述されるように、各ページ・ストライプは、ＲＡＩＤ５のようなパリティ・スキームが使用される場合、ページ・ストライプのための中間レベルのデータ保護情報を格納するために使用されるデータ保護ページを含む。明らかに、ページ・ストライプ内のデータ保護ページの数は、使用されるデータ保護スキームに依存し、ページ・ストライプごとに２つ以上のデータ保護ページを含むことができる。この例では、ページ・ストライプＭは、ＬページＡ、ＬページＢ、・・・、ＬページＺと表されるいくつかの論理ページを格納する。論理ページは、物理ページに整列されていても、整列されていなくてもよい。通常、圧縮された論理ページは、物理ページに整列されない。いくつかの事例では、ＬページＤなどの論理ページが物理ページ境界をまたぐ。したがって、この例では、ＬページＤ１として表されるＬページＤの第１の部分は、レーン０の物理ページのページＭ内に存在し、ＬページＤ２として表されるＬページＤの第２の部分は、レーン２の物理ページのページＭ内に存在する。他の実装例では、データ・ページが代わりに同じレーン内の隣接する物理ページにまたがることがある。
【００４９】
ここで図１３を参照すると、一実施形態に従って、ＬＰＴテーブル９００が図１２のページ・ストライプＭ内に格納された論理ページの論理ブロック・アドレス（ＬＢＡ）を物理ブロック・アドレス（ＰＢＡ）にどのようにマッピングするかの一例が説明されている。説明される実施形態では、ＬＰＴテーブル９００は、複数のエントリ１１００であって、それらの各々がＬＢＡフィールド１１０２およびＰＢＡフィールド１１０４を含む、複数のエントリ１１００を含む。示されるように、各エントリ１１００のＬＢＡフィールド１１０２は、特定の論理ページ（例えば、ＬページＡ、ＬページＢなど）のＬＢＡを記録し、関連付けられたＰＢＡフィールド１１０４は、レーン番号、ブロック番号、および論理ページの先頭のブロック内のオフセットの表示を含む対応するＰＢＡを記録する。加えて、ＰＢＡフィールド１１０４は、プレーン、ダイ、およびチップ・イネーブル（図１３には図示せず）の表示をさらに含む。したがって、ＬＰＴテーブル９００は、関連付けられたＮＡＮＤ型フラッシュ・メモリ・システム１５０の任意のページ・ストライプ内に存在する各論理ページの物理ストレージの位置に関する完全な情報を提供する。
【００５０】
ここで図１４を参照すると、データ・ストレージ・システム１２０などのデータ・ストレージ・システム内のマルチページ・エラーから回復するための例示的な一処理の上位論理フローチャートが示される。説明される処理は、例えば、ホスト・システムの読み取りＩＯＰに応答して遂行される要求読み取り動作中、バックグラウンド・ヘルス・チェッカー９３０によって遂行されるバックグラウンド読み取り中、または再配置機能９１４による再配置読み取り中に、フラッシュ・コントローラ１４０、もしくはＧＰＰ１３２、またはその両方（それらのいずれかもしくは両方は概して「コントローラ」と称されることがある）によって遂行することができる。本方法は、例えば、ハードウェア、またはファームウェアもしくはソフトウェアまたはその両方を実行するハードウェア、あるいはその両方で実装することができる。説明を容易にするために、図１４の処理を、以降、フラッシュ・コントローラ１４０によって遂行されるものとして説明する。
【００５１】
説明される処理は、フラッシュ・コントローラ１４０が読み取りＩＯＰ、バックグラウンド読み取り要求、またはサービス提供するための再配置読み取り要求を受信することに応答してブロック１２００から着手する。ブロック１２００で受信された読み取り要求に応答して、本処理は、関連付けられたＮＡＮＤ型フラッシュ・メモリ・システム１５０内の対象ページ・ストライプから１つ以上のページを読み取ることによって読み取り要求を処理するフラッシュ・コントローラ１４０を説明するブロック１２０２を続ける。フラッシュ・コントローラ１４０は、１つ以上のローカル読み取り要求を発行して、要求された論理ページ（複数可）を格納している物理ページを読み取る。フラッシュ・コントローラ１４０によって関連のレーンまたは複数のレーンに並列またはほぼ並列に発行され得るこれらのローカル読み取り要求（複数可）は、読み取りＩＯＰによって指定されたＬＢＡ（複数可）に基づいてＬＰＴテーブル９００から取得されるか、またはバックグラウンド・ヘルス・チェッカー９３０もしくは再配置機能９１４によって直接指定される対象ＰＢＡ（複数可）を指定する。
【００５２】
ブロック１２０４では、フラッシュ・コントローラ１４０は、要求された論理ページ（複数可）を含む物理ページ（複数可）を受信する。フラッシュ・コントローラ１４０内のＥＣＣデコーダ１４４は、ブロック１２０２でアクセスされた物理ページ内のすべてのコードワードに対してＥＣＣ復号を遂行して、検出された任意のビット・エラーの訂正を試みる。示される実施形態では、コードワード内のビット・エラー（もしあれば）が訂正可能である場合、ＥＣＣデコーダ１４４は、ビット・エラーを訂正し、かかるビット・エラーの数および訂正可能ステータスを返却する。例えば、ＥＣＣデコーダ１４４は、コードワード内にエラーのビットが５０個あり、ＥＣＣがコードワード内のエラーのビットを５０個以上修正することができる場合、ビット・エラーは訂正可能であると決定することになる。一方、コードワード内で検出されたビット・エラーが訂正不可能な場合、ＥＣＣデコーダ１４４は、そのコードワードについて訂正不可能ステータスを返却する。コードワード内のビット・エラーは、（電荷ポンプの故障など）所与のメモリ・チップ内の１つ以上の構成要素の物理的障害、メモリ・チップ全体またはそのチップのための外部サポート構造（例えば、チップに対する電源供給ラインもしくはアドレス・ラインの故障）の物理的障害、環境要因（例えば、過度の温度、磁場、湿度など）、物理デバイスの酸化物レイヤ内のトラップ電荷、メモリ・セルのフローティング・ゲート（または同様の電荷トラップ・デバイス）からの電荷漏れ、または隣接するメモリ・セルの書き込みもしくは読み取りによって加えられた電気的ノイズ、あるいはこれらのすべての結果としてのチップの全部もしくは一部の物理的障害を含むが、これらに限定されない種々の要因によって引き起こされ得ることが理解されるであろう。
【００５３】
ブロック１２０６では、フラッシュ・コントローラ１４０は、ＥＣＣデコーダ１４４が、読み取られたデータ・ページ（複数可）内に格納されたすべてのコードワードについて訂正可能ステータスを返却したか否かを決定する。そうでなければ、処理は、以下で説明されるブロック１２２０に進む。しかしながら、フラッシュ・コントローラ１４０がブロック１２０６で、ＥＣＣデコーダ１４４が、読み取られたデータ・ページ（複数可）内に格納されたすべてのコードワードについて訂正可能ステータスを返却したと決定した場合、処理はブロック１２０８に進む。ブロック１２０８は、フラッシュ・コントローラ１４０が、読み取られたデータ・ページ内に格納されたすべてのコードワードがそれらの関連付けられたＣＲＣフィールド７０６によって検証されるか否かを決定することを説明する。（ＣＲＣ情報が維持されないか、または読み取りデータの二次検証が望ましくない代替的な実施形態では、ブロック１２０８を省略することができる。）ブロック１２０８において示される決定を行う際、フラッシュ・コントローラ１４０は、読み取られたデータ・ページ内の各データ・コードワード７００について巡回冗長コードを計算し、計算されたＣＲＣを関連するＣＲＣフィールド７０６内に含まれるものと比較する。ブロック１２０８における否定的な決定に応答して、処理は以下で説明されるブロック１２２０に進む。しかしながら、フラッシュ・コントローラ１４０がブロック１２０８で、読み取りデータ内の各コードワードがその関連付けられたＣＲＣフィールド７０６によって有効にされた場合、フラッシュ・コントローラ１４０は、必要であれば、対象論理ページ（複数可）を解凍し、解凍された論理ページ（複数可）をリクエスタに送信する（ブロック１２１０）。その後、処理はブロック１２１２で終了する。
【００５４】
ブロック１２０６に戻って、ＥＣＣデコーダ１４４が読み取りデータ内のすべてのコードワードについて訂正可能ステータスを返却しなかった（すなわち、ＥＣＣデコーダが１つ以上のコードワードについて訂正不可能ステータスを返却した）という決定に応答して、処理はブロック１２０６から、フラッシュ・コントローラ１４０がページ・ストライプの残りの物理ページをすべて読み取ったことを説明するブロック１２２０に進む。ブロック１２２０では、フラッシュ・コントローラ１４０はまた、ＥＣＣデコーダ１４４がページ・ストライプの残りの物理ページの各々について訂正可能ステータスを返却したか否か（および任意選択でＣＲＣ情報を検証することができるか否か）を決定する。次に、ブロック１２２２では、フラッシュ・コントローラ１４０は、より低いレベルのデータ保護情報（例えば、ＥＣＣ情報）によって訂正不可能であったデータ・ページ（複数可）のコンテンツを、中間レベルのデータ保護情報を利用して回復することができるか否かを決定する。フラッシュ・コントローラ１４０がＲＡＩＤ５またはＲＡＩＤ６を利用する中間レベルのデータ保護スキームを実装する好ましい一実施形態では、ブロック１２２２に説明される決定は、フラッシュ・コントローラ１４０が、訂正不可能なコードワードが１つまたは２つ以上の物理ページ内に存在するか否かを決定する（ＲＡＩＤ５のパリティは最大でも１つの物理ページのコンテンツを回復することができ、ＲＡＩＤ６のパリティは最大でも２つの物理ページを回復することができるため）。ブロック１２２２での否定的な決定（例えば、訂正不可能なコードワードがＲＡＩＤ５について２つ以上のデータ・ページ内に存在したか、またはＲＡＩＤ６について３つ以上のデータ・ページ内に存在したことを意味する）に応答して、処理は、ブロック１２３０、および以下で説明されるような、フラッシュ・コントローラ１４０がより高いレベルのデータ保護情報を利用して対象ページ・ストライプの回復をトリガすることを説明する後続ブロックに進む。しかしながら、ブロック１２２２での肯定的な決定に応答して、処理はブロック１２２４に進む。
【００５５】
ブロック１２２４は、フラッシュ・コントローラ１４０が、訂正不可能なコードワード（複数可）を含む物理ページ（複数可）のコンテンツをページ・ストライプの他の物理ページのコンテンツから回復することを示す。例えば、中間レベルのデータ保護スキームがＲＡＩＤ５またはＲＡＩＤ６を利用する好ましい一実施形態では、訂正不可能なコードワード（複数可）を含む物理ページのコンテンツは、対象ページ・ストライプの他の物理ページのコンテンツのビット単位のＸＯＲを遂行することによって回復することができる。ブロック１２２６では、フラッシュ・コントローラ１４０はまた、再配置機能９１４による再配置のために対象ページ・ストライプを含むブロック・ストライプを待ち行列に入れる。（代替的な一実施形態では、影響を受けたページ・ストライプを再配置するだけでもよいし、再配置を全くトリガしなくてもよい。）次いで、処理は、説明されたブロック１２１０および１２１２に進む。
【００５６】
ここでブロック１２３０および後続ブロックを参照すると、フラッシュ・コントローラ１４０は、ＲＡＩＤコントローラ１２４によって維持されたより高いレベルのデータ保護情報を利用する、対象ページ・ストライプのコンテンツを回復するための試みをトリガする。ブロック１２３０では、フラッシュ・コントローラ１４０は、最初に、ブロック１２００で受信された読み取り要求がホスト読み取りＩＯＰであったか否かを決定する。そうでなければ、処理は、ブロック１２３４に進む。そうであれば、フラッシュ・コントローラ１４０は、読み取りエラーを、ＲＡＩＤコントローラ１２４であって、そこから読み取りＩＯＰが受信された、ＲＡＩＤコントローラ１２４に返却する（ブロック１２３２）。読み取りエラーは、より高いレベルのデータ保護情報を利用するＲＡＩＤコントローラ１２４による要求された論理ページ（複数可）の再構築を自動的にトリガする。
【００５７】
しかしながら、処理のこの時点では、ホストによって読み取られていない対象ページ・ストライプの任意の追加の障害が発生した論理ページは再構築されないことに注意することが重要である。ＲＡＩＤコントローラ内の再構成が同じＲＡＩＤストライプ内（したがって、ディスク上の隣接する位置）の隣接するページが再構築されることもたらす従来の磁気ハード・ディスク・ドライブ（ＨＤＤ：ｍａｇｎｅｔｉｃ  ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅ）のＲＡＩＤアレイとは異なり、かかる隣接するストレージ位置の自動再構成は、フラッシュ・カード１２６またはＳＳＤなどのフラッシュベースのストレージ・デバイスには適用されない。ＨＤＤを備えたＲＡＩＤアレイでは、ＲＡＩＤアレイの既知のストライピング・アルゴリズム、および隣接ディスク・セクタが（必要であれば）素早く識別、検証、および再構築されることを可能にするＨＤＤ内の追加のアドレス間接レイヤ（ａｄｄｒｅｓｓ  ｉｎｄｉｒｅｃｔｉｏｎ  ｌａｙｅｒ）の欠如により、再構築を他の隣接するＲＡＩＤストライプに容易に拡張することができる。しかしながら、正しい場所以外に書き出し、それによってＬＰＴテーブルをフラッシュベースのストレージ・デバイス内に維持する必要があるため、隣接する論理ページは、概して、隣接する物理ページ内には格納されない。したがって、ページ・ストライプ内のデータ・ページは、必ずしも隣接する論理ページを格納するとは限らない。結果として、より高いレベルのＲＡＩＤは、中間レベルのデータ保護の回復障害による影響を潜在的に受ける他の論理ページに関する必要な情報を欠く。加えて、この状況では、より高いレベルのＲＡＩＤは、読み取り動作がホストによって要求された場合のみ、フラッシュ・カード１２６によって読み取りエラーの通知を受けるが、他の場合（例えば、バックグラウンド読み取りまたは再配置読み取り動作）は受けない。ブロック１２３２の後、処理はブロック１２３４に進む。
【００５８】
ブロック１２３４は、フラッシュ・コントローラ１４０がＬＰＴテーブル９００をスキャンして、対象ページ・ストライプ内に格納された論理ページに関連付けられたすべてのＬＢＡを検索することを示す。したがって、対象ページ・ストライプのデータ・ページに対応するレーン、プレーン、ダイ、チップ・イネーブル、ブロック、およびオフセットを記録するＰＢＡフィールド１１０４を有するエントリ１１００を検出することによって、フラッシュ・コントローラ１４０は、関連付けられたＬＢＡフィールド１１０２からＬＢＡの関連するセットを取得することができる。別の実施形態では、ＬＢＡフィールドの一部は、ＬＰＴテーブル９００のスキャンを加速するために、ＰＢＡフィールドと共に格納されてもよい。かかる実施形態では、フラッシュ・コントローラ１４０は、ＬＰＴテーブル９００の全体をスキャンする必要はないが、ＰＢＡフィールドと共に格納されたＬＢＡフィールドの一部と一致するエントリのみをスキャンする必要があるであろう。ブロック１２３６では、フラッシュ・コントローラ１４０は、ブロック１２３６で決定されたＬＢＡのセットを含むかまたは参照するページ・ストライプ再構築要求を上位コントローラに送信して、対象ページ・ストライプの回復を開始する。いくつかの実施形態では、上位コントローラは、ＲＡＩＤコントローラ１２４のうちの１つであり得、他の実施形態では、上位コントローラは、図２のコントロール・プレーンＧＰＰ１１３などの別のコントローラで実装することができる。いずれの場合でも、上位コントローラは、論理アドレスのセットおよびより高いレベルのデータ保護情報を利用して、（ブロック・ストライプ全体ではない場合）少なくとも対象ページ・ストライプをＮＡＮＤ型フラッシュ・メモリ・システム１５０内の新しい位置に再構築する。ページ・ストライプの再構築要求の送信は、かかるメカニズム（例えば、優れたベンダ固有のＳＣＳＩコマンドまたはコントロール情報用の別個の通信チャネルもしくはバス）が存在する場合にフラッシュ・コントローラ１２４によって開始されてもよいし、またはＳＣＳＩログ・センス・ページ要求を使用して上位コントロールによって開始されてもよい。読み取り障害が発生した（フラッシュ・カード１２６全体ではなく）ページ・ストライプ（またはブロック・ストライプ）のみを再構成することによって、回復性能が大幅に改善される。
【００５９】
処理は、ブロック１２３６から、フラッシュ・コントローラ１４０が、上位コントローラによる対象ページ・ストライプの再構築が完了したか否かを決定することを説明するブロック１２３８に進む。一実施形態では、上位コントローラは、対象ページ・ストライプの再構築の完了を示す特別なコマンドを送信することによって、対象データ・ストライプの再構築の完了をフラッシュ・コントローラ１４０に伝達する。代替的な一実施形態では、フラッシュ・コントローラ１４０は、そのＮＡＮＤ型フラッシュ・メモリ・システム１５０についてのすべての書き込みステータス通知を処理して、上位コントローラに渡されたＬＢＡのセット内のすべてのＬＢＡが新しい物理位置に書き込まれたか否かを検出する。フラッシュ・コントローラ１４０がブロック１２３８で、対象ブロック・ストライプが上位コントローラによって首尾よく再構築されたことに応答して、処理は、フラッシュ・コントローラ１４０が後続の再配置のために再配置待ち行列９０４に対象データ・ストライプを含むブロック・ストライプ全体を待ち行列に入れることを説明する任意選択のブロック１２２６に進む。ブロック・ストライプのすべての有効な論理ページが既に上位コントローラによって再構築され、再配置されている場合、ブロック・ストライプは、それがもはや有効なデータを保持しないため、代わりに、ブロック・ストライプ分解機能９１６によって単に分解することができる。ブロック１２２６に示される再配置は、図１４の処理を再度遂行させるブロック・ストライプについて別の読み取り障害をトリガする場合があることに留意されたい。ブロック１２２６に続いて、処理は、説明されたブロック１２１０および１２１２に進む。
【００６０】
少なくともいくつかの実施形態では、図１４の処理のさらに改良されたものを実装することができる。例えば、フラッシュ・コントローラ１４０がブロック１２２２で、対象ページ・ストライプが訂正不可能なコードワードを含む複数の物理ページを含み、これらの物理ページのうちの１つがパリティ・ページ（例えば、ＲＡＩＤ５が用いられる場合）または中間レベルのデータ保護スキームの複数のパリティ・ページのうちの１つ（例えば、ＲＡＩＤ６が用いられる場合）であると決定した場合、パリティ・ページは、それに関連付けられたＬＢＡを有していないため、上位コントローラによって再構築することができない。したがって、障害のあるデータ・ページ上のＬＢＡだけを再構築用の上位コントローラに送る必要がある。
【００６１】
加えて、図１４に示される例示的な実施形態は、１つ以上の物理ページの回復を開始する前に、物理ページが訂正不可能なエラーを含む１つ以上のコードワードを有するまで待機する。しかしながら、ある特定の実装例は、かかる回復を訂正不可能状態（ｕｎｃｏｒｒｅｃｔａｂｉｌｉｔｙ）前のある時点で開始することを選択することができる。例えば、一実施形態では、フラッシュ・コントローラ１４０は、ブロック１２０６において、訂正されたビット・エラーの数がＥＣＣ訂正閾値よりも低いビット・エラー閾値を満たす（例えば、ビット・エラー閾値以上である）か否かをさらに決定する。例えば、一実装例が約１０２４バイトにわたるＢＣＨ  ＥＣＣを使用し、エラーのビット５０個を訂正することができる場合、フラッシュ・コントローラ１４０は、訂正されたビット・エラーの数が５０個未満、例えば、４８個に達したときにページを使用停止にすることを決定することができる。かかる実装例では、処理は、ビット・エラー閾値を超えたという決定に応答して、ブロック１２０６からブロック１２０８に進む。
【００６２】
加えて、使用されるフラッシュ技術に応じて、フラッシュ・コントローラ１４０は、コードワードが真に訂正不可能であり、回復が実施されるべきであることを決定する前に、ブロック１２０６およびブロック１２２０において追加のステップを遂行することを選択することができることも当業者は理解するであろう。例えば、フラッシュの製造業者は、そのページまたはブロックについてのある特定のパラメータを変更し、データ・ページの再読み取りを遂行するためにフラッシュ・コントローラ１４０を必要とすることがある。再読み取り時に検出されたビット・エラー（もしあれば）が訂正可能である場合、フラッシュ・コントローラ１４０は、ブロック１２０６からブロック１２０８への「はい」の経路に従うことになる。このようにして、ブロック１２０６は、コードワードが真に訂正不可能なエラーを含むとの決定時に、詳細には説明されないが、遂行される多くの追加のステップを含むことができる。
【００６３】
さらに、いくつかの実施形態では、ラッシュ・コントローラ１４０が対象ページ・ストライプの残りのすべての物理ページを読み取る前に、ブロック１２３０および１２３２に示されるように、障害が発生したホスト読み取りＩＯＰが読み取りエラーを上位コントローラに返却するための再構築処理の遅延を低減することが好ましい場合がある。そうすることにより、再構築処理によるホスト読み取りＩＯＰの追加の遅延が上位コントローラの遅延まで低減する。
【００６４】
本発明は、システム、方法、もしくはコンピュータ・プログラム、またはそれらのすべてであってもよい。コンピュータ・プログラムは、コンピュータ可読ストレージ媒体（複数可）に記憶されることができる。
【００６５】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持およびストレージすることができる有形のデバイスであってもよい。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の好適な組み合わせであってもよいが、これらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の非包括的な列挙には、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｐｏｒｔａｂｌｅ  ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）、メモリ・スティック、フレキシブル・ディスク、パンチ・カードまたは命令が記録された溝内の隆起構造などの機械的に符号化されたデバイス、およびこれらの任意の好適な組み合わせが含まれる。本明細書において使用されるコンピュータ可読ストレージ媒体は、それ自体で、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を通って伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通って伝送される電気信号などの一時的な信号であると解釈されるべきではない。
【００６６】
本明細書において説明されるコンピュータ可読プログラム命令は、ネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらのすべてを介して、コンピュータ可読ストレージ媒体または外部コンピュータもしくは外部ストレージ・デバイスから、それぞれのコンピューティング／処理デバイスにダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはそれらのすべてを含むことができる。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体内にストレージするためのコンピュータ可読プログラム命令を転送する。
【００６７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ−ａｒｃｈｉｔｅｃｔｕｒｅ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続き型プログラミング言語を含む１つ以上のプログラミング言語の任意の組み合わせで書き込まれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行されてもよく、スタンドアローンのソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行されてもよく、部分的にユーザのコンピュータ上で、および部分的にリモート・コンピュータ上で実行されてもよく、または完全にリモート・コンピュータもしくはサーバ上で実行されてもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）もしくはワイド・エリア・ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよいし、または接続が外部コンピュータに（例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて）なされてもよい。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル論理アレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）を含む電子回路は、本発明の態様を遂行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路をパーソナライズすることによってコンピュータ可読プログラム命令を実行することができる。
【００６８】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラムのフローチャートの説明、もしくはブロック図、またはその両方を参照して説明される。フローチャートの説明、もしくはブロック図、またはその両方の各ブロック、およびフローチャートの説明、もしくはブロック図、またはその両方のブロックの組み合わせは、コンピュータ可読プログラム命令によって実装することができることが理解されるであろう。
【００６９】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブル・データ処理装置を介して実行される命令が、フローチャート、もしくはブロック図のブロック（複数可）、またはその両方で指定された機能／作用を実装するための手段を作成するように、汎用コンピュータ、特定用途向けコンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されて、機械を生成してもよい。これらのコンピュータ可読プログラム命令はまた、中に格納された命令を有するコンピュータ可読ストレージ媒体がフローチャート、もしくはブロック図のブロック（複数可）、またはその両方で指定された機能／動作の態様を実装する命令を含む製品を含むように、コンピュータ、プログラマブル・データ処理装置、もしくは他のデバイス、またはそれらのすべてを特定の様式で機能させるように指示することができるコンピュータ可読ストレージ媒体内に格納されてもよい。
【００７０】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行される命令がフローチャート、もしくはブロック図のブロック（複数可）、またはその両方で指定された機能／作用を実装するように、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにロードされて、一連の動作ステップをコンピュータ、他のプログラマブル装置、または他のデバイス上で遂行させて、コンピュータ実装処理を生成してもよい。
【００７１】
図のフローチャートおよびブロック図は、本発明の種々の実施形態によるシステム、方法、およびコンピュータ・プログラムの可能な実装例のアーキテクチャ、機能、および動作を説明する。これに関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能（複数可）を実装するための１つ以上の実行可能命令を含む命令のモジュール、セグメント、または一部を表すことができる。いくつかの代替的な実装例では、ブロック内に記述された機能は、図に記述された順序から外れることがある。例えば、連続して示される２つのブロックは、実際には、実質的に同時に実行されてもよく、または関連する機能に応じてブロックが時には逆の順序で実行されてもよい。また、ブロック図の角ブロック、もしくはフローチャートの説明、またはそれらのすべて、およびブロック図のブロック、もしくはフローチャートの説明、またはそれらのすべての組み合わせは、指定された機能もしくは作用を遂行するか、または特定用途向けハードウェアおよびコンピュータ命令の組み合わせを実行する特定用途向けハードウェアベースのシステムによって実装することができることにも留意されたい。
【００７２】
説明されたように、少なくとも１つの実施形態では、複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイは、コントローラによってコントロールされる。コントローラは、使用停止と考慮されるべきである複数のブロック内の物理ページのページ・インデックスの複数の異なるネストされたサブセットのうちのそれぞれの１つによって各々が定義される複数のネストされたページ使用停止クラス（ｐａｇｅ  ｒｅｔｉｒｅｍｅｎｔ  ｃｌａｓｓ）を実装する。複数のブロックのうちの各ブロックについて、コントローラは、ブロックの物理ページ内に格納されたデータ・ページ内の使用停止誘発エラー（ｒｅｔｉｒｅｍｅｎｔ−ｃａｕｓｉｎｇ  ｅｒｒｏｒ）の検出に応答して、ブロックが属するページ使用停止クラスの表示を更新する。コントローラは、ブロックのページ使用停止クラスに基づいて、複数のブロックからのデータを格納するためのブロック・ストライプを形成する。
【００７３】
少なくとも１つの実施形態では、データ・ストレージ・システムは、コントローラと、複数の物理ページを各々が含む複数のブロックを有する不揮発性メモリ・アレイとを含む。コントローラは、論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持し、書き込みデータを複数の物理ブロック上にストライプする第１のデータ保護スキームを実装する。データを対象ページ・ストライプから要求する読み取り要求に応答して、コントローラは対象ページ・ストライプの複数の物理ページ内のエラーを検出する。対象ページ・ストライプの複数の物理ページ内のエラーを検出することに応答して、コントローラは、ＬＰＴデータ構造をスキャンして、対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって対象ページ・ストライプの回復を開始し、回復を開始することは論理アドレスのセットを上位コントローラに送信することを含む。
【００７４】
本発明は、１つ以上の好ましい実施形態を参照して説明されるように特に示されているが、本発明の趣旨および範囲から逸脱することなく、その中で形態および詳細における種々の変更がなされ得ることを当業者は理解するであろう。例えば、ある特定の機能を対象とするフラッシュ・コントローラを含むデータ・ストレージ・システムに関して態様を説明してきたが、本発明は、代替的に、プロセッサによって処理することができるプログラム・コードを格納するストレージ・デバイスを含むプログラムとして実装して、かかる機能を遂行してもよいし、またはかかる機能を遂行させてもよいことを理解されたい。本明細書において用いられる際、「ストレージ・デバイス」は、法定の製品のみを含み、エネルギーそれ自体、伝送媒体それ自体、および一時的な伝播信号それ自体を排除するように具体的に定義される。
【００７５】
加えて、ＮＡＮＤ型フラッシュ・メモリの使用を含む実施形態について説明してきたが、本発明の実施形態はまた、例えば、相変化メモリ（ＰＣＭ：ｐｈａｓｅ−ｃｈａｎｇｅ  ｍｅｍｏｒｙ）およびその組み合わせを含む他のタイプの不揮発性ランダム・アクセス・メモリ（ＮＶＲＡＭ：ｎｏｎ−ｖｏｌａｔｉｌｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）と共に使用することができることを理解されたい。
【００７６】
上記の図ならびに以下の特定の構造および機能の記述は、出願人が発明したことの範囲または添付の特許請求の範囲を限定するために提示されるものではない。むしろ、図および記述は、任意の当業者が、特許保護を求める本発明を作製および使用することを教示するために提供される。本発明の商業的な一実施形態のすべての特徴が、明瞭性および理解のために説明または示されているわけではないことを当業者は理解するであろう。本発明の態様を組み込んだ実際の商業的な一実施形態の開発は、商業的な実施形態の開発者の最終目標を達成するための多数の実装固有の決定を必要とするであろうことも当業者は理解するであろう。かかる実装固有の決定には、システム関連、ビジネス関連、政府関連、ならびに特定の実装、位置、および時によって異なる場合がある他の制約の遵守が含まれていることがあり、これらの遵守である可能性があるが、これらに限定されない。開発者の取り組みは、絶対的な意味において複雑で時間を要するものであるかもしれないが、それにもかかわらず、かかる取り組みは、本開示の利益を有する当業者には日常的な業務であるであろう。本明細書において開示および教示される本発明は、多種多様な修正および代替的な形態の影響を受けやすいことが理解されねばならない。最後に、限定ではないが「ａ」などの単数の用語の使用は、項目の数を限定することを意図するものではない。
【図１】
2019502987.tif 000003
【図２】
2019502987.tif 000004
【図３】
2019502987.tif 000005
【図４】
2019502987.tif 000006
【図５】
2019502987.tif 000007
【図６】
2019502987.tif 000008
【図７】
2019502987.tif 000009
【図８】
2019502987.tif 000010
【図９】
2019502987.tif 000011
【図１０】
2019502987.tif 000012
【図１１】
2019502987.tif 000013
【図１２】
2019502987.tif 000014
【図１３】
2019502987.tif 000015
【図１４】
2019502987.tif 000016
【手続補正書】
【提出日】平成30年9月11日(2018.9.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コントローラによってコントロールされる不揮発性メモリ・アレイを含むデータ・ストレージ・システムにおける方法であって、前記不揮発性メモリ・アレイは、複数の物理ページを各々が含む複数のブロックを含み、
前記コントローラが前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持することと、
前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装することと、
データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記コントローラが前記対象ページ・ストライプの複数の物理ページ内のエラーを検出することと、
前記対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、前記コントローラが前記ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別することと、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガすることであって、前記論理アドレスのセットを前記上位コントローラに送信することを含む、回復をトリガすることと、を含む、方法。
【請求項２】
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定することと、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したという決定に応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置することと、をさらに含む、請求項１に記載の方法。
【請求項３】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項１に記載の方法。
【請求項４】
前記コントローラがエラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出すること、をさらに含む、請求項１に記載の方法。
【請求項５】
前記読み取り要求がホスト読み取り要求であることに応答して、前記コントローラが読み取りエラーを前記上位コントローラに送信すること、をさらに含む、請求項１に記載の方法。
【請求項６】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項１に記載の方法。
【請求項７】
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記コントローラが前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復すること、をさらに含む、請求項１に記載の方法。
【請求項８】
前記上位コントローラからの要求の受信に応答して、前記コントローラが前記上位コントローラへの前記論理アドレスのセットの送信を遂行する、請求項１に記載の方法。
【請求項９】
データ・ストレージ・システムであって、
複数の物理ページを各々が含む複数のブロックを含む不揮発性メモリ・アレイ、および前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を含むメモリに連結されるように構成されたコントローラであって、前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装するように構成され、前記コントローラが、データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出し、前記対象ページ・ストライプの複数の物理ページ内のエラーの検出に応答して、ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別し、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガするように構成され、前記コントローラが前記論理アドレスのセットを前記上位コントローラへ送信する、コントローラを含む、データ・ストレージ・システム。
【請求項１０】
前記コントローラが、前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定し、前記上位コントローラが前記対象ページ・ストライプの再構築を完了したという決定に応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置するようにさらに構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１１】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項９に記載のデータ・ストレージ・システム。
【請求項１２】
前記コントローラがエラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出するようにさらに構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１３】
前記読み取り要求がホスト読み取り要求であることに応答して、前記コントローラが読み取りエラーを前記上位コントローラに送信するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１４】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項９に記載のデータ・ストレージ・システム。
【請求項１５】
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記コントローラが前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１６】
前記上位コントローラからの要求の受信に応答して、前記コントローラが前記論理アドレスのセットを前記上位コントローラへ送信するように構成されている、請求項９に記載のデータ・ストレージ・システム。
【請求項１７】
前記コントローラに連結された前記不揮発性メモリ・アレイをさらに含む、請求項９に記載のデータ・ストレージ・システム。
【請求項１８】
コントローラが前記不揮発性メモリ・アレイにおいて論理アドレスを物理アドレスにマッピングする論理−物理変換（ＬＰＴ）データ構造を維持することと、
前記コントローラが書き込みデータを複数の物理ブロック上にストライプして、複数のページ・ストライプを形成する第１のデータ保護スキームを実装することと、
データを前記複数のページ・ストライプのうちの対象ページ・ストライプから要求する読み取り要求に応答して、前記コントローラが前記対象ページ・ストライプの多数の物理ページ内のエラーを検出することと、
前記対象ページ・ストライプの複数の物理ページ内のエラーを検出することに応答して、前記コントローラが前記ＬＰＴデータ構造をスキャンして、前記対象ページ・ストライプにマッピングされた論理アドレスのセットを識別することと、第２のデータ保護スキームを実装する上位コントローラによって前記対象ページ・ストライプの回復をトリガすることであって、前記論理アドレスのセットを前記上位コントローラに送信することを含む、回復をトリガすることと、を前記コントローラに遂行させる、コンピュータ・プログラム。
【請求項１９】
前記コントローラに、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したか否かを決定することと、
前記上位コントローラが前記対象ページ・ストライプの再構築を完了したということを決定することに応答して、前記対象ページ・ストライプおよび複数の他のページ・ストライプを含むブロック・ストライプのコンテンツを前記不揮発性メモリ・アレイ内に再配置することと、をさらに遂行させる、請求項１８に記載のプログラム。
【請求項２０】
前記第１のデータ保護スキームがパリティベースのデータ保護スキームを含み、
前記第２のデータ保護スキームが独立ディスクの冗長アレイ（ＲＡＩＤ）データ保護スキームを含む、請求項１８に記載のプログラム。
【請求項２１】
前記コントローラに、
エラー訂正コード（ＥＣＣ）を用いた第３のデータ保護スキームを利用して、前記対象ページ・ストライプの複数の物理ページ内のエラーを検出すること、をさらに遂行させる、請求項１８に記載のプログラム。
【請求項２２】
前記コントローラに、
前記読み取り要求がホスト読み取り要求であることに応答して、読み取りエラーを前記上位コントローラに送信すること、をさらに遂行させる、請求項１８に記載のプログラム。
【請求項２３】
前記論理アドレスのセットが前記対象ページ・ストライプの前記ページのサブセットのみにマッピングされる、請求項１８に記載のプログラム。
【請求項２４】
前記コントローラに、
前記対象ページ・ストライプの単一のデータ・ページ内の１つ以上のエラーを検出することに応答して、前記第１のデータ保護スキームを利用して、前記対象ページのコンテンツを回復すること、をさらに遂行させる、請求項１８に記載のプログラム。
【請求項２５】
前記コントローラに、前記上位コントローラからの要求の受信に応答して、前記論理アドレスのセットを前記上位コントローラへ送信すること、をさらに遂行させる、請求項１８に記載のプログラム。
【国際調査報告】
2019502987.tif 000017
2019502987.tif 000018