Arquitectura de Las Memorias NAND Flash
El acceso a los datos es por bloques (como en los hdd). Cada bloque se compone de un número de páginas. Las páginas son típicamente de 512, 2.048 o 4.096 bytes. Cada página tiene asociado un conjunto de bytes (normalmente de 1/32 del tamaño de los datos) que se utilizan para almacenar el ECC (Error Correcting Code o en español el Código de Corrección de Errores).
Los tamaños típicos de bloque son:
- 32 páginas de 512 + 16 bytes (del ECC) cada uno que resulta en un tamaño de bloque de 16kB.
- 64 páginas de 2.048 + 64 bytes cada uno que resulta en un tamaño de bloque de 128kB.
- 64 páginas de 4.096 + 128 bytes cada uno que resulta en un tamaño de bloque de 256kB.
- 128 páginas de 4.096 + 128 bytes cada uno que resulta en un tamaño de bloque de 512kB.
Por ejemplo, en el primero: 32 páginas de 512. Si hacemos 512 dividido 32 nos da los 16 bytes del ECC.
Mientras que la lectura y la programación se lleva a cabo sobre una base de páginas, el borrado sólo puede realizarse sobre una base de bloques.
Los dispositivos NAND también requieren gestión de bloques malos por el software de controlador de dispositivo, o por un chip controlador separado. Las tarjetas SD, por ejemplo, incluyen circuitos de control para realizar gestión de bloques malos y el desgaste de nivelación. Cuando un bloque lógico se accede con software de alto nivel, que se asigna a un bloque físico por el controlador de dispositivo. Un número de bloques en el chip flash puede ser reservado para el almacenamiento de tablas de asignación para hacer frente a los bloques dañados, o el sistema puede simplemente marcar cada bloque en el arranque para crear un mapa de bloques defectuosos en la memoria RAM. La capacidad total de memoria se reduce gradualmente a medida que más bloques son marcados como no válidos.
NAND se basa en ECC para compensar los bits que pueden fallar de forma espontánea durante el funcionamiento normal del dispositivo. Un ECC típico corrige un error de un bit cada 2048 bits (256 bytes) usando 22 bits de ECC, o un error de un bit en cada 4096 bits (512 bytes) usando 24 bits de ECC. Si la ECC no puede corregir el error durante la lectura, todavía puede detectar el error. Al hacer las operaciones de borrado o programación, el dispositivo puede detectar bloques que no puede programar o borrar y marcarlos como malos. Los datos se escriben en un bloque bueno, y el mapa de bloques defectuosos se actualiza.
El código de Hamming es el que más se usa en la ECC para las SLC NAND flash y los códigos de Reed-Solomon y de Bose-Chaudhuri-Hocquenghem son los que se utilizan en la ECC para MLC NAND flash. Algunos chips de memoria flash MLC NAND generan internamente los códigos de corrección de errores BCH apropiados.
La mayoría de los dispositivos NAND son enviados desde la fábrica con algunos bloques defectuosos. Por lo general son marcados de acuerdo con una estrategia preestablecida que los marca como bloques incorrectos. Al permitir que algunos bloques sean marcados como defectuosos, los fabricantes pueden alcanzar rendimientos más elevados de lo que sería posible si todos los bloques tuvieran que estar correctos. Esto reduce significativamente los costes de flash NAND y sólo disminuye ligeramente la capacidad de almacenamiento de las memorias.
Cuando se ejecuta el software de memorias NAND, las estrategias de memoria virtual se utilizan a menudo: el contenido de la memoria en primer lugar debe paginarse o copiarse en la memoria RAM y se ejecutan allí (que conduce a la combinación común de NAND + RAM). Una unidad de gestión de memoria (MMU) en el sistema es útil, pero esto también se puede lograr con superposiciones. Por esta razón, algunos sistemas utilizan una combinación de Memorias NOR y NAND, donde una memoria NOR pequeña es utilizada por el software como memoria ROM y una memoria NAND más grande se utiliza con el sistema de archivos para el uso de un área de almacenamiento de datos no volátil.
Añadir nuevo comentario