Память NAND[править]
Архитектура флэш-памяти NAND была представлена Toshiba в 1989 году.[93] Доступ к этим памятям осуществляется так же, как к блочным устройствам, таким как жесткие диски. Каждый блок состоит из нескольких страниц. Размер страниц обычно составляет 512,[94] 2048 или 4096 байт. С каждой страницей связано несколько байтов (обычно 1/32 размера данных), которые можно использовать для хранения контрольной суммы кода исправления ошибок (ECC).
Типичные размеры блоков включают:
32 страницы по 512+16 байт каждая для размера блока (эффективного) 16 Кб
64 страницы по 2048+64 байта каждая для блока размером 128 Кб[95]
64 страницы по 4096+128 байт каждая для блока размером 256 Кб[96]
128 страниц по 4096+128 байт каждая для блока размером 512 Кб.
В то время как чтение и программирование выполняются на основе страницы, стирание может быть выполнено только на основе блока.[97]
Устройства NAND также требуют плохого управления блоками с помощью программного обеспечения драйвера устройства или отдельного чипа контроллера. Например, SD-карты включают в себя схему контроллера для управления плохими блоками и выравнивания износа. Когда доступ к логическому блоку осуществляется высокоуровневым программным обеспечением, он сопоставляется с физическим блоком драйвером устройства или контроллером. Несколько блоков на флэш-чипе могут быть отведены для хранения таблиц сопоставления для работы с плохими блоками, или система может просто проверить каждый блок при включении питания, чтобы создать плохую карту блоков в оперативной памяти. Общий объем памяти постепенно сокращается по мере того, как все больше блоков помечаются как плохие.
NAND полагается на ECC для компенсации битов, которые могут самопроизвольно выйти из строя во время нормальной работы устройства. Типичный ECC исправит однобитовую ошибку в каждом 2048 бит (256 байт), используя 22 бита ECC, или однобитовую ошибку в каждом 4096 битах (512 байт), используя 24 бита ECC. [98] Если ECC не может исправить ошибку во время чтения, он все равно может обнаружить ошибку. При выполнении операций стирания или программирования устройство может обнаруживать блоки, которые не удалось запрограммировать или стереть, и помечать их как плохие. Затем данные записываются в другой, хороший блок, и карта плохих блоков обновляется.
Коды Хэмминга являются наиболее часто используемыми ECC для SLC NAND flash. Коды Рида-Соломона и коды BCH (коды Бозе-Чаудхури-Хоквенгема) обычно используются ECC для MLC NAND flash. Некоторые флэш-чипы MLC NAND внутренне генерируют соответствующие коды коррекции ошибок BCH.[92]
Большинство устройств NAND поставляются с завода с некоторыми плохими блоками. Они обычно маркируются в соответствии с заданной стратегией маркировки плохих блоков. Допуская некоторые плохие блоки, производители достигают гораздо более высоких урожаев, чем это было бы возможно, если бы все блоки должны были быть проверены на качество. Это значительно снижает затраты на флэш-память NAND и лишь незначительно снижает емкость памяти деталей.
При выполнении программного обеспечения из памяти NAND часто используются стратегии виртуальной памяти: содержимое памяти сначала должно быть выгружено или скопировано в ОЗУ с отображением памяти и выполнено там (что приводит к общей комбинации NAND + RAM). Блок управления памятью (MMU) в системе полезен, но это также может быть достигнуто с помощью наложений. По этой причине некоторые системы будут использовать комбинацию памяти NOR и NAND, где меньшая память NOR используется в качестве программного ПЗУ, а большая память NAND разделяется файловой системой для использования в качестве энергонезависимой области хранения данных.
NAND жертвует преимуществами произвольного доступа и выполнения на месте NOR. NAND лучше всего подходит для систем, требующих хранения данных большой емкости. Он обеспечивает более высокую плотность, большую производительность и более низкую стоимость. Он имеет более быстрое стирание, последовательную запись и последовательное чтение.
Do'stlaringiz bilan baham: |