闪存
基本简介
是一种非易失性存储器,存储性能相当于硬盘
DRAM和SRAM都是属于易失性存储器。
易失性:停止供电内存中的数据无法保持。
特点
单位面积容量更大、集成度更高。
写入速度快 。
只能按块(block)擦写。
抗震、无噪声、速度快、耗电低。
Flash基本单元
用浮栅捕获的电荷表示位
Flash类型
NOR flash
读取快,擦除慢(1 sec)。
每一个擦除周期10K到100K
因为读取快,但是写入速度特别慢用于手机系统的指令内存。
NAND flash
更密集,每GB更便宜
读取,写,擦除都慢,但是擦除是毫秒级,读写是微秒级别。
每个擦除周期100K到1M
读写擦之间相对比较平衡,用于数据存储
两种类型在一系列写/擦除周期后会被损坏。(存在寿命)
Flash基本结构
芯片结构
芯片由一个个的Block组成,每个Block又由Page组成。(Block > Page)
块是最小的擦除单元,Page是最小的读写单元。
Flash基本操作
读取一页内容
20-50微妙
写入一页内容
将1转变为0
擦除块中的每一位
将0变为1。(也许原本设计是想用1表示空闲空间,可以写入?)
Flash的可靠性
磨损
读写一定时间后会损坏
写串扰
写入一个页面的时候可能会改变一个block中其他的页。
读串扰
读写的时候因为感应电影响周边单元,可能改变周边单元的值。
MLC和SLC
MLC-Multi-Level-Cell
在存储容量中根据电荷的数量可以细分为两位,表示四个状态。(需要更高精度的探测器)
精度越高,寿命越低。因为划分更多的时候,单个cell能表示多个位,被访问次数也会增加,使用更加频繁,老化速度更快。
密度高,但是慢,可靠性低,更便宜,作为用户级
SLC-Single-Level-Cell
在存储容量中根据电荷的数量可以细分为一位,表示两个状态。
速度快,但是密度低,更高可靠性,更贵,作为企业级
Flash Translation Layer(FTL)
产生原因
Flash因为接口很差,规则繁琐,所以一般使用中介管理
作用
-
-
- 地址映射,将用户层逻辑块地址 转换为 闪存中的物理地址
- 在闪存中,维持写的过程,擦除/写颗粒的管理,老化的管理。
- 老化平衡
- 资源回收
-
集中式FTL
基本结构
包括一个映射表,块信息表,写指针
读操作
读取LBA
找到映射的块和页
闪存操作
写操作——块内写
目标:将写到LBA 2k中
初始:写指针指向Block2,Page5,在映射表中,逻辑块地址2k处记录均为初始值0。此时块信息表中,块0有效页有15个(块0用于记录总的可用空闲页),块2有效页为4,块2的页够用了。
注意:写入指针是单向往下移动的。
现在将写写指针位置处,写指针下移动到Block2,Page6,同时逻辑块地址2k部分记录上一次写指针的位置Block2,Page5。
同时更新块信息表,块0有效页变为14(块0记录总的可用空闲页),块2有效页为5。
写操作——跨块写
目标:将写到LBA 2k中
初始:写指针指向Block2,Page63,映射表逻辑块地址2k处记录为Block0 Page5。此时块信息表中,块0有效页有15(块0记录总的可用空闲页),块2有效页为4。
但是指针的下一个就是第二个块了。当前块是block2,下一个块是block1,根据实际情况跨块。这里是从block2向block1写。
现在将写在写指针位置处,写指针下移动到Block1,Page0,同时映射表中逻辑块地址2k部分记录上一次写指针的位置Block2,Page63。
同时更新块信息表,块0有效页变为14(块0记录空闲页),块2有效页为5。
继续写,将写到LBA 4k中,上次写完,写指针跳到了Block1,Page0,4k部分初始值为Block0,Page2,
写入到指针指向的Block1,Page0位置,指针下移,逻辑块地址中4k部分记录上次写指针位置Block1,Page0,更新块信息表,因为原本块1是刚擦除过,记录为T,但是写入了后擦除记录就变为了F,同时有效页变为1,块0的有效页减1.同时更新Sequence Number。
擦除操作(移动有效页再擦)
假设要擦除Block2,块信息表中,Block2由3个有效页。
移动有效页,将块2中的有效页位置内容移动到另一个块。
更新快信息表,擦除记录设为True,擦除次数加1,有效页设置为0,序号重置。
分布式FTL
略...(不是重点)
FTL的选择
映射
按页映射:灵活度高,但是表大。
按块映射:表小,粒度大。
基于日志的系统
用Log记录页的变化。
本文来自博客园,作者:Laplace蒜子,转载请注明原文链接:https://www.cnblogs.com/RedNoseBo/p/17182525.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律