固态硬盘

前三节讲的全是机械硬盘,它的一切特性——寻道、旋转延迟、调度算法——都建立在”有一个磁臂要移动”这个前提上。

固态硬盘取消了这个前提:它没有任何机械部件。因此本节的正确读法是问:前面那些结论,哪些还成立、哪些整个作废。

机制

组成结构

固态硬盘基于闪存技术,由闪存翻译层和存储介质两部分组成。

存储介质由若干闪存芯片组成,每个芯片包含若干块,每个块又包含若干页。

**闪存翻译层(FTL)**是一个软硬件结合的层,它的作用是把操作系统发来的逻辑块号翻译成实际的物理页地址。

FTL 的存在是理解 SSD 的钥匙:它对操作系统伪装成一块普通的磁盘,向上提供”读第 N 块、写第 N 块”这样的接口,而内部数据究竟放在哪个物理页、换过多少次位置,操作系统完全不知道。

这与 5.3.2 中”扇区备用对操作系统透明”是同一种思路的极致化。

读写的不对称性

这是固态硬盘最重要、也最反直觉的特性:

读和写都以”页”为单位,一页通常几 KB。

但擦除必须以”块”为单位,一块包含若干页。

而闪存的物理特性决定了:一个页只有在被擦除之后才能被写入。

三条合起来产生了一个严重的后果:要修改一页中的数据,不能就地改写,必须先把整个块读出来、擦除整个块、再把修改后的内容连同块中其他页一起写回。

这就是”写放大”现象——写入几 KB 的数据,实际引发了整块的擦写。 它解释了为什么固态硬盘的随机小块写入性能明显弱于顺序写入,也解释了下面的磨损问题。

磨损均衡

闪存块的擦除次数是有限的,超过次数后该块就会损坏。

若不加干预,问题会非常严重:文件系统的元数据区(如位示图、目录)会被极其频繁地改写,对应的那几个块很快就会被擦坏,而磁盘的其余部分几乎全新。

磨损均衡就是设法让所有块的擦除次数尽量接近,有两种策略:

动态磨损均衡——写入数据时,优先选择擦除次数少的空闲块。它只在”正要写”的时候起作用。

静态磨损均衡——在动态的基础上更进一步:系统会主动监测并迁移那些长期存放冷数据、很少被擦写的块,把冷数据搬到已经磨损较多的块上,从而把那些”一直很新”的块腾出来投入使用。

两者的差别在于处理对象:动态磨损均衡只能均衡”正在被写的那部分数据”所占的块;静态磨损均衡把那些从不被改写的冷数据块也拉进了均衡范围。

边界

关于固态硬盘的正确说法

疑问点:关于固态硬盘的正确表述

  1. 下列关于固态硬盘的说法中,正确的是( )。 A. 固态硬盘的写速度比较慢,性能甚至弱于常规硬盘 B. 相比常规硬盘,固态硬盘优势主要体现在连续存取的速度 C. 静态磨损均衡算法通常比动态磨损均衡算法的表现更优秀 D. 写入时,静态磨损均衡算法每次选择使用长期存放数据而很少擦写的存储块

答案 C。

C 对:如上所述,静态磨损均衡把冷数据块也纳入了均衡范围,覆盖面更广,因此整体磨损更均匀、寿命更长。

A 错:固态硬盘的写入虽然受写放大影响、不如读快,但总体性能仍远强于机械硬盘,尤其在随机访问上。

B 错在”主要体现在连续存取”。固态硬盘最大的优势恰恰是随机存取——机械硬盘的随机访问要付出寻道和旋转延迟,动辄数毫秒;固态硬盘没有机械部件,随机访问与顺序访问的延迟差距小得多。在连续大文件读写上,两者的差距反而没那么悬殊。

D 错在”每次”。静态磨损均衡不是每次写入都去挑冷数据块——那样反而会不停地搬运数据。它是周期性地检查并迁移冷数据,属于后台维护动作,不是每次写入时的选块策略。每次写入时选择擦除次数少的空闲块,那是动态磨损均衡的做法。

这道题的四个选项恰好覆盖了本节的四个要点,值得整题记住。

机械硬盘的哪些结论在固态硬盘上作废

这是本节最值得整理的一条,因为它把 5.3 前三节全部串了起来:

作废的:寻道时间、旋转延迟这两个概念在固态硬盘上根本不存在——没有磁臂也没有盘片。因此所有磁盘调度算法(SSTF、SCAN、C-SCAN)在固态硬盘上都失去意义,它们优化的那个东西不存在了。“磁臂黏着”自然也不存在。

仍然成立的:逻辑格式化那一套(根目录、空闲空间管理、引导块)完全不变——因为那属于文件系统层,FTL 已经把固态硬盘伪装成了一块普通磁盘。

新增的:擦除以块为单位、写前必须擦除、擦除次数有限、需要磨损均衡——这四条是机械硬盘完全没有的问题。

一句话概括:物理层的结论全变了,文件系统层的结论全没变——这正是 FTL 这一层抽象的价值所在。

固态硬盘与机械硬盘各自的”最小单位”

这组对照容易混,列出来一目了然:

机械硬盘:读写的最小单位是扇区,没有”擦除”这个动作——写入就是直接改写磁性方向。

固态硬盘:读写的最小单位是页,擦除的最小单位是块,且写之前必须先擦。

“读写单位与擦除单位不一致”是固态硬盘一切复杂性的根源:写放大、磨损均衡、FTL 的地址映射,全都是为了应付这一条。

对照速查

固态硬盘的组成作用
闪存翻译层 FTL把逻辑块号翻译成物理页地址,对操作系统伪装成普通磁盘
存储介质若干闪存芯片 → 若干块 → 若干页
操作最小单位约束
读页—
写页必须先擦除所在的块
擦除块次数有限
动态磨损均衡静态磨损均衡
何时起作用写入时选块周期性后台迁移
选什么擦除次数少的空闲块迁移冷数据块
覆盖范围只覆盖被改写的数据把冷数据块也纳入均衡
效果—通常更优
与机械硬盘对照机械硬盘固态硬盘
机械部件有(磁臂、盘片)无
寻道 / 旋转延迟有不存在
磁盘调度算法有意义失去意义
随机访问慢(毫秒级)快,与顺序访问差距小
擦除无此动作以块为单位,写前必擦
寿命限制机械磨损擦除次数有限
文件系统层结论完全相同(FTL 屏蔽了差异)

考点

  • FTL 把逻辑块号翻译成物理页地址,对操作系统伪装成普通磁盘
  • 读写以页为单位,擦除以块为单位,写前必须先擦除——一切复杂性的根源
  • 静态磨损均衡通常优于动态,因为它把冷数据块也纳入均衡(真题答案 C)
  • 静态磨损均衡是周期性迁移,不是”每次写入都选冷块”(选项 D 的错处)
  • 固态硬盘的优势主要在随机存取,不是连续存取(选项 B 的错处)
  • 磁盘调度算法在固态硬盘上失去意义;但文件系统层的结论完全不变

链接