【发布时间】:2010-07-22 00:46:38
【问题描述】:
我正在尝试了解为什么您必须先擦除单元格,然后再写入关于 SSD 的单元格,以及它们如何随着时间的推移而变慢。
【问题讨论】:
我正在尝试了解为什么您必须先擦除单元格,然后再写入关于 SSD 的单元格,以及它们如何随着时间的推移而变慢。
【问题讨论】:
以下是写入 NAND 和擦除的工作原理:
擦除块时,所有位都设置为 1。要将位从 1 更改为 0,需要对位进行编程(写入)。程序无法将位从 0 更改为 1。
假设您必须存储 11001100。首先需要擦除块以获得全 1 (11111111),然后对特定位进行编程 (11001100)。现在,无法将相同的内存位置编程为 11111100,因为编程无法将 0 更改为 1。
这就是 NAND 找到一个全为 1 的空闲/空页面然后将特定位从 1 更改为 0 的原因。写入可以将 1 更改为 0 并将 0 更改为 1 的传统想法对于 NAND 闪存来说是不正确的。事实上,NAND 程序操作只能将位从 1 变为 0,这意味着我们在开始写入之前需要所有 1 块内存。
来源:
https://flashdba.com/2014/06/20/understanding-flash-blocks-pages-and-program-erases/ https://www.micron.com/~/media/documents/products/technical-note/nand-flash/tn2919_nand_101.pdf
【讨论】:
我试图理解为什么你必须在写入之前擦除单元格
在写入闪存单元之前,您不必擦除它。但是,您一次只能写入一个完整的单元格块。通常,这些单元块的大小至少为 128KB。
假设您正在向 SSD 写入一个 4KB 的文件。好吧,您必须一次写入一个 128KB 的块。如果该 128KB 块中已有数据,则驱动器固件必须将 128KB 块读入其内存,修改您正在写入的 4KB 部分,然后将整个 128KB 块写回闪存。
【讨论】:
Wikipedia article 似乎至少暗示了答案。似乎“隧道注入”用于写入,“隧道释放”用于擦除。我会留给物理学家来解释这究竟意味着什么。
【讨论】:
按照现代闪存芯片的设计方式,在一个方向上对单元进行编程比在另一个方向上更容易。如果一个芯片在 256 个 65,536 字节的块中保存 16,777,216 字节只能作为一个单元擦除,那么它将需要约 1.28 亿个“小”电路来允许对各个位进行编程,并需要 256 个“大”电路来擦除这些块.对于允许擦除 256 字节页面的芯片,需要 65,536 个这些“大”电路。我不确定这么多页擦除电路会用掉多少芯片,但这很重要。使用更大的擦除块可以更便宜地制造芯片;对于许多应用而言,具有大擦除块的更便宜的芯片比具有更小擦除块的更昂贵的芯片更可取。
【讨论】: