系列文章目录
一、SSD主控
二、PCIe和NVMe控制器前端子系统
文章目录
- 系列文章目录
- 三、闪存基本原理
- 1.结构
- 2.衍生问题
三、闪存基本原理
闪存是SSD的存储介质(NAND Flash),它是一种非易失性存储器(Non-volatile memory),所谓非易失性,也就是掉电以后数据也还是在的。
相对应的,也有易失性存储器,我们叫它RAM,也可以说是内存,在通电时可以保存数据,掉电时数据丢失。我们常见的电脑内存DRAM就是 RAM的一种,还有一种叫做SRAM
DRAM 动态内存
SRAM 静态内存
1.结构
传统的2D闪存的基本存储单元叫做Cell,是一种类NMOS的浮栅晶体管,也叫做Floating gate
结构图如下:
浮栅层用于存储电子,假设有电子为0,无电子为1,那就可以表示最基本的两种状态了
衬底和控制栅分别控制擦与写,不可覆写,只能擦掉旧的再写新的
写操作:在控制栅施加大的正电压,将游离于衬底的电子透过二氧化硅层吸到浮栅层,完成写操作
擦除操作:与写操作相反,需要在衬底施加一个正电压,将浮栅层的电子吸出来,完成数据擦除动作
这里引入一个概念是,衬底与浮栅层之间的二氧化硅层的构造类一个有洞的橡胶,平时的时候,电子很难透过它来往于浮栅层和衬底,但是当我们进行擦写操作的时候就像是再用力扯这块橡皮,使得孔洞变大,电子得以穿过。但是呢,我们重复的擦写操作,循环去拉扯它,会导致这个二氧化硅层老化,从而没办法很好的约束电子的游动,所以闪存是有擦写上限的,当我们擦写上限到了,浮栅层的电子没办法很好的保存,反应到SSD端就是我们存储的数据丢失
读操作:控制栅加电压进行读取动作,这里的电压是低于写操作的电压的,也就是有一个电压阈值。
同样引用上面带孔洞橡胶的说法,我的理解是,本身二氧化硅层隔绝了通路,当我在控制栅加电压时,相当于把原本趋于封闭的二氧化硅层,也就是这个带孔洞的橡胶层慢慢拉开,这里的阈值就是,当我拉开这块橡胶到我能看到浮栅层是否有电子,或者说电子刚好可以进入浮栅层时,我就知道里面有没有数据了,此时通路导通,我们读取到数据
疑问是:假设这种理解是正确的,那么当我读取的时候,假设我偶尔偷跑电子进浮栅层,在进行N次读取后,浮栅层的电子越来越多。是造成read disturb的根因
对于存储在浮栅层的电子来说,一直关闭在封闭的空间中,长时间不去读取,就会有电子流失的风险,还是刚刚那个比喻,浮栅层与衬底间的二氧化硅层类似一块带洞的橡皮,虽然平时紧绷状态可以防止电子流失,但他始终带洞,也是有可能随着时间推移不小心放跑电子的。所以保存的电子会有遗失的风险,久而久之,里面存储的电子可能就遗失过多无法判断是0还是1了。这就是 Data Retention,而擦写次数越多的闪存,其数据保持力就越差,就越容易触发Data Retention
2.衍生问题
1.闪存类型:
SLC 一个Cell只能存储1位数据
MLC 一个Cell可以存储2位数据
TLC 一个Cell可以存储3位数据
QLC 一个Cell可以存储4位数据
SLC只用关心有电子还是没有电子
后面的几种就是,在有没有电子的情况下还要关注它有多少,透过有多少电子的范围判断其数据状态
2.read disturb:
多次读取后造成过多电子进入浮栅层,扰乱了判断,浮栅层电子越多,读取时的阈值电压也相对变大,按照原有的阈值电压去读取就可能造成误判,造成数据错误
3.data retention:
存入浮栅层的电子在长时间没人管的情况下,偷偷跑掉了,电子遗失导致阈值电压减小,读取数据时造成误判,数据丢失
4.固件如何防止:
SSD固件在应对read disturb和data retention问题的时候,通常的做法就是设定一个阈值,当我读数据比较容易发生误判,需要多次尝试的时候,把数据再重新写一遍
好,那问题来了,data retention是电子流失,假如我把装满学习资料的SSD,断电保存当传家宝,若干时间后再拿出来恐怕就啥也没了吧?