上一篇文章简述了HDD和SSD的区别以及为什么SSD那么快?这篇文章来聊聊SSD究竟把数据存到了什么物质里面。

简单说,SSD的数据就存在一小块名叫 “闪存(NAND FLASH)” 的芯片里。这块芯片的核心秘密,是一种特殊的“电子开关”,叫 “浮栅晶体管”。

1. 这个“开关”有多特殊? 普通的电子开关,就像家里墙上的电灯开关,一按就开,一按就关。但一断电,开关的状态就没了,你不知道它上次是开是关。

而浮栅晶体管这个“开关”厉害的地方在于:它能“记住”自己的状态,而且断电了也不会忘。

2. 它怎么“记住”的?

你可以把它想象成一个超级微型的“电子水桶”。这个水桶放在一个完全密封的绝缘材料(隧穿层)里。

正如下图所示:浮栅晶体管比普通场效应管多出来浮栅层和隧穿层,隧穿层也是绝缘的,电子被高压吸入,通过隧穿层之后进浮栅层,断电之后电子被锁在两绝缘层中间逃不出去,因此掉电也不会丢失。

写数据(写入1或0):当我们想往里面“写”一个“0”的时候,就用电泵(高压)往这个“水桶”里“泵”进去一些电子。由于水桶是密封的,电子进去了就出不来,被关在里面了。
读数据:当我们想“读”数据的时候,就去检测这个“水桶”的“重量”(其实是电压)。如果水桶很“重”(电子多,电压高),我们就认为它存的是“0”。如果水桶很“轻”(电子少,电压低),我们就认为它存的是“1”。
断电也不怕:因为电子被物理性地困在绝缘的“水桶”里,所以就算彻底断电,它们也跑不掉,数据也就保存下来了。
擦除数据:如果想清空这个“水桶”(把“0”变成“1”),就需要用一个反向的力,把里面的电子“吸”出来。
简单看下浮栅晶体管的物理模型和符号。

3. 存储海量数据,一个“水桶”不够用,怎么办?组织起来!

一个“电子水桶”只能存一个“0”或“1”(一个比特),这太少了。所以,工程师们就把成千上万个这样的“水桶”用电路串联起来,像串珍珠一样连成一长串(这叫 NAND串,也叫作NAND String)。如下图所示。

再把成千上万条这样的“珍珠串”整整齐齐地排列在一起,就组成了一张巨大的、立体的“电子存储网”(这叫 NAND阵列,NAND ARRAY)。我们现在买到的SSD,比如1TB的,里面就有上千亿个这样的“电子水桶”。如下图所示。

为了方便管理,我们给这些“水桶”编了组:

字线(Wordline):横着的一排“水桶”一起操作。
块(Block):一大组“NAND串”捆在一起,是擦除数据的最小单位(要清空就一整块清)。
逻辑页(logical page):属于同一条字线的一小撮“水桶”,是写入和读取数据的最小单位。

4. 怎么在一个“水桶”里存更多数据?—— 加水要精准

最早的“水桶”(SLC)很简单,只区分“水多”(0)和“水少”(1)两种状态。 为了降低成本、增加容量,工程师想:能不能让一个水桶存更多信息?

于是就有了:

MLC:把一个水桶的“水量”精细地分成4档,分别代表 11, 10, 01, 00。这样,一个水桶就能存2个比特了。
TLC:分得更细,分成8档,存3个比特。
QLC:分成16档,存4个比特。

但是,问题来了: 分的档位越细,对“泵水”和“检测水量”的精密度要求就越高。稍微有点误差,就可能把 01 误判成 00。更重要的是,每次“泵水”和“抽水”,都会对那个密封的“绝缘层”(隧穿层)造成一点点磨损。反复操作成千上万次后,这个“绝缘层”就会老化、产生“漏缝”,导致里面的电子慢慢漏掉。

一旦电子漏多了,“水量”就变了,原来存的 00 可能慢慢就变成了 01,这就是数据错误(比特翻转)。这就是为什么TLC、QLC的SSD寿命(可擦写次数)普遍低于SLC、MLC的原因。

最后: SSD把照片、电影、文档,统统变成了 “0”和“1”,然后用电泵把这些数字“刻”在了上亿个微型的“电子水桶”里。这些水桶被巧妙地组织成一张大网,通过精准控制每个水桶里的“水量”来存储信息。它不掉电、速度快,但每个“水桶”的寿命是有限的,用久了就会“漏水”,这就是SSD存储中浮栅晶体管的全部秘密。