闪存

基本简介

是一种非易失性存储器,存储性能相当于硬盘

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因为接口很差,规则繁琐,所以一般使用中介管理

作用

      1. 地址映射,将用户层逻辑块地址 转换为 闪存中的物理地址
      2. 在闪存中,维持写的过程,擦除/写颗粒的管理,老化的管理。
      3. 老化平衡
      4. 资源回收

集中式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记录页的变化。

 

posted @   Laplace蒜子  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示