回答:
NANDフラッシュチップには、書き込み操作と消去操作の失敗を検出するメカニズムが組み込まれており、失敗した場合はコントローラーに警告します。この場合、コントローラーは再試行するか、そのブロックを不良として扱い、ウェアレベリングアルゴリズムからマッピングします。NANDデバイスの各ページには、メインデータエリアの横にスペアエリアがあり、ECCなどのメタデータやその他の形式のフォールト検出とフォールトトレランスを目的としています。コントローラは、スペア領域を使用して独自のフォールトトレランススキームを決定できます。 単純なパリティビットやリードソロモンコードなど、いくつかありますが、ハミングコードは1つの一般的なスキームです。。読み取り操作が一致しない場合も、コントローラーは自由に実行できます。理想的には、ウェアレベリングアルゴリズムからこれらのブロックもマッピングし、「多すぎる」ブロックが失敗するまで少しずつ容量を失うだけです。「多すぎる」は、コントローラー内のアルゴリズムとハードウェア構造のサイズに依存します。多くのファーストカットコントローラーデザインは、オペレーティングシステムにエラーを宣言するだけです。
これはMLC固有の問題ではないことに注意してください。MLCセルは読み取りエラーが発生しやすくなりますが、エラーのマージンは必然的に小さいため、SLCセルはほとんど同じメカニズムで失敗し、コントローラーによって同じ方法で処理できます。
ハードディスクと同様に、オペレーティングシステムでの実装次第です。コントローラーは書き込み(消去は実際には書き込み操作です)が失敗したことを報告するだけで、オペレーティングシステムカーネルのdevideドライバーが何をするかを決定します。これまで見てきたように、MicrosoftとLinuxの実装は、呼び出し元のアプリケーションにエラーコードを返すだけなので、I / Oエラーが発生します。
つまり、ある時点で単に「壊れた」デバイスを取得します。
SSDは「ウェアレベリング」と呼ばれるものを使用します。ドライブはセクターの使用状況に関する統計を保持し、ある時点で、または問題を検出すると、通常のハードドライブで発生するように、セクターを予約セクターに移動します。