文章插图
SSD控制器芯片负责向所有的NAND Flash芯片执行读写任务 , 同样也就通过指令的方式来运作 , 因为地址信息和数据信息都在这8位的总线上传送 , 加上总线位宽太窄 , 所以一个简单的寻址都需要多个时钟周期才能仅完成 。
我们知道芯片容量越大 , 地址就会越长 , 寻址时间也就会越长 , 对小块随机IO , Flash会随着容量的增加而变得越来越低效 。

文章插图
读写数据流程
下面来看一下读写操作都需要做哪些工作?
如何读数据
当需要读某个Page时 , Flash控制器将这个Page的字线组电势置为0 , 可以将电势值解码成1或者0 , 放到SSD的RAM Buffer中 。
从上述过程就可以看出SSD的最小IO单位为1个Page

文章插图
如何写数据
Flash芯片要求在修改一个Cell中的位之前 , 必须擦除这个Cell 。 其实这个擦除动作就是将一个Block一下全放电 。 也就是每次擦除只能一下擦除整个Block , 将所有的Cell全置1 。
这就是SSD的一个非常致命的缺点 , 它不能单独擦除某个Page或者Cell
擦除完毕以后 , SSD会以Page为单位进行写入 。

文章插图
SSD的问题SSD天然的缺陷
Flash芯片在写入数据的时候有很多效率低下的地方 , 这是Flash芯片的通病
- 擦除前需要将整个Block清掉(Erase before overwrite)
- 上面我们讲到过如果要写入数据 , 必须先Erase整个Block , 而不只是把一个Page或者Cell给清掉 。 相比于机械磁盘 , 多了擦除的这个步骤 。
- 在擦除之前 , 先将Block的数据读入RAM中 ,
- 然后擦除整个Block ,
- 再更新RAM中的对应Page , 写回Flash芯片中
这就叫做写扩大 , 我们姑且称之为写惩罚
这个时候我们会问 , 为什么如果只需要修改一个Cell , 却需要把Block放电?
因为Cell之间是存在干扰的 , 如果有的在充电 , 有的在放电 , 则会产生不可控的干扰问题 。 所以不如直接将所有的先放电 。
那 为什么需要一次擦一个Block , 而不是一个Page?
这是管理粒度的问题 , 粒度越小 , 管理开销越大 , 所以一次擦一个Block是一种比较折中的方案 。
不过幸好 , 向Free Space写入数据时 , 因为里面没有被写过 , 所以不需要擦除 , 当然没有写惩罚 。
但是另一个问题又来了 , SSD如何知道哪些是Free Space?
我们知道只有文件系统才知道硬盘上哪些数据是有用的 , 它会使用元数据来进行记录 , 即使是删除一份数据也只是修改了元数据 , 而不是把数据真正的删除掉 。
这样看来 , SSD其实是不知道硬盘上哪些地方是所谓的Free Space , 它只会把数据往从来没修过的地方写 , 所以Free Space会越来越少 。
- 网页有错误是什么原因 网页有错误解决方法吗
- 梭子蟹水煮好吃还是清蒸好吃呢 梭子蟹蒸的好吃还是炒的好吃
- 连接打印机无法打印是什么问题 打印机无法连接原因及解决方法怎么办
- 小儿捏脊是否需要每日进行?为什么呢?
- 三国杀神郭嘉技能是什么 三国杀郭嘉技能介绍
- 空气炸锅烤红薯要放油吗 空气炸锅烤红薯直接放锅里还是加烤盘
- 渡劫是什么意思通俗点 渡劫是什么意思什么?简单点
- 郑州哪里有学化妆的学校 郑州最好的化妆学校是哪家
- 什么是消防工程师 消防工程师
- 火影辉夜姬结局 辉夜姬到底是什么人
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
