关于固态硬盘的寻址原理和寻址速度的一个疑问?

2017-04-20 11:08:23 +08:00
 aiqier

我从书中大概了解到固态硬盘。使用闪存而不是像机械硬盘那样要旋转磁头,所以读取速度很快。

但是我很难理解,固态硬盘是如何找到某个地址的,我看到有一些文章提到它和内存寻址基本一样,还有文章提到它和内存寻址是一个数量级的。

查阅了了相关资料。要么是太专业完全看不懂,要么也只是简单的说固态硬盘没有磁头,使用电门寻址要快很多。但是我还是无法想象它到底是如何寻址(随机读写)的。

5323 次点击
所在节点    编程
6 条回复
BOYPT
2017-04-20 11:18:21 +08:00
SSD 并不需要“寻址”,和内存一样,他的存储空间的地址都是一一对应的;
但是为了兼容接口,需要模拟一个协议层的寻址指令,当接收到一个寻址指令时候马上会回应准备完成,所以很快。

不过实际产品当中,不同 SSD 的厂商都有自己的技术,为了最大化磁盘效益,平均化读写单元寿命,利用冗余空间等过程,在 SSD 的内置固件里面会有非线性的寻址映射,跟内存的一一对应也不是完全一回事。
kokutou
2017-04-20 11:23:43 +08:00
机械,找地址要磁头转个角度,然后再读。而且盘片速度就那么多,最快也就 7200 转,速度上不去,随机读就更惨,磁头不停地移动。

固态,直接对着地址读就行了,不需要等。
aiqier
2017-04-20 11:34:58 +08:00
@BOYPT 是“不是完全一回事”,还是“完全不是一回事”。。。
liuhaotian
2017-04-20 11:44:17 +08:00
SSD 的结构和内存确实是很像的,实质上是 Flash Chip Block
http://www.extremetech.com/wp-content/uploads/2015/07/2006640.jpg

@BOYPT 说的非线性寻址映射就是因为 SSD 的擦写次数有限制,为了避免某一些 chip 被过度擦写坏掉,增加整体可靠性,来做的一个操作,实际上就是损耗均衡 ( wear leveling )。

常见的有两类 wear leveling 算法, dynamic 和 static 。 dynamic 就是动态的把数据请求地址映射到擦写次数少的地址, static 是把擦写次数少的地址中的数据和热数据进行交换。

具体的算法就有很多了,比如 LAST, FAST, BAST 等等等等。
Halry
2017-04-20 12:12:33 +08:00
有一个 ftl ,读取的时候直接从数片 nand 里面读取
helloallen
2017-05-22 11:28:40 +08:00
固态盘一般以 nand flash 为介质存储数据。

你可以了解一下 NAND 芯片的引脚定义还有编程接口,这个现在都是标准的。

NANDflash 不同于传统磁性介质。没有寻到这个概念。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/356104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX