南京大学 操作系统 (JYY) 学习笔记:持久化的黑魔法——从磁铁、刻坑到闪存电荷

南京大学 操作系统 (JYY) 学习笔记:持久化的黑魔法------从磁铁、刻坑到闪存电荷

写在前面:这是本系列的第二十一篇。

在计算机硬件五花八门的设备中,有一类专门负责持久化数据的存储设备。而"文件系统"正是在这些存储设备上实现的,使我们的计算机能可靠地保存宝贵的数据。

在短短几十年间,我们见证了存储器从 KB 到 TB 的恐怖跨越。本讲内容:我们将化身底层黑客,拆解存储设备是如何持久保存数据的,以及操作系统是如何将其抽象为 Block Device(块设备)的。

课前复习:设备和驱动程序

概念很简单
  • 它就是实现了 struct file_operations 的一个"东西",把底层的硬件寄存器操作封装成标准的 read/write 接口。
实现很复杂
  • 打印机、扫描仪、显卡、KVM......
  • 每种设备背后都有一整个产业链

正式进入持久化 (Persistence) 阶段

Persistence: "A firm or obstinate continuance in a course of action in spite of difficulty or opposition."(在困难或反对面前坚定或固执地坚持某一行动过程。)

  • 我们的祖先早就希望数据能永久留存
  • 在石头上刻字就行啦(呃,但我们还想修改数据,石头可不好擦)。

1-Bit 的存储:磁铁 (正 v.s. 反)

"持久化"可能没有想象的那么困难

  • 本质上就是需要一个**"能反复改写的物理状态"**。
  • 当然,前提是这个状态必须能被寻址,并且能用电路快速改写。
  • 比如:磁极的方向,State = 1 (正) or 0 (反)。

电磁感应:物理世界与虚拟世界的桥梁

1D 存储设备:把 Bits "卷起来" (磁带,1928年)
  • 在纸带(今天是塑料带)上均匀粘上铁磁性颗粒。
  • 只需要一个机械部件(转动)进行一维的定位。
    • 读取: 放大感应电流。
    • 写入: 电磁头(电磁铁)改变磁畴的磁化方向。

密度可高,可不高

  • 这是一个典型的一维存储材料。

磁带:作为存储设备的分析

  • 价格低: 廉价塑料材料,几乎不涉及大规模集成电路。
  • 容量高。
  • 可靠性高: 适当封装后,寿命极长。
  • 读写性能: 顺序读写勉强(需要花很长时间卷带定位),随机读写几乎完全不行
  • 应用场景: 大厂机房冷数据的终极存档和备份。

磁鼓(Magnetic Drum)

  • 1D \\rightarrow 1.5D (1D x n):
  • 用旋转的二维曲面存储数据(虽然无法内卷导致总容量变小)。
  • 优势:读写延迟绝对不会超过旋转一个周期,随机读写速度大幅提升!

疯狂内卷:机械磁盘 (Hard Disk, 1956)

  • 1.5D \\rightarrow 2.5D (2D x n):
  • 既然一个盘面容量不够,那就在垂直方向上叠加无数个盘片(磁带平摊)。

磁盘:克服各种工程挑战的工业奇迹

磁盘:作为存储设备的分析

  • 价格低: 高密度、低成本。
  • 容量高: 2.5D 结构,上万个磁道。
  • 可靠性较高: 但里面是高速运转的机械部件,跌落或剧烈震动是致命威胁。
  • 读写性能: 顺序读写较高;随机读写依然勉强(需要等待机械臂寻道)。
  • 应用场景: 计算机系统长期的主力数据存储库。

磁盘:性能调优的极限

既然随机读写慢,如何想办法压榨出它的极限速度?

延迟剖析:读/写一个扇区需要经历什么?
  1. 寻道时间 (Seek Time): 机械读写头需要移动到对应的磁道。
  2. 旋转延迟 (Rotational Latency): 转轴将盘片旋转,使得读写头恰好悬停在目标扇区的上方。
    • 7200 rpm \\rightarrow 每秒 120 转 \\rightarrow 平均等待半圈的旋转延迟约为 4.16ms,加上寻道通常需要 8ms 左右。
操作系统的神级缓解策略:
  • 电梯调度算法 (SCAN): 把磁头想象成电梯,顺着一个方向把顺路的读写请求全部处理完再掉头,极大地减少了机械臂的折返跑。(虽在 SSD 时代已成历史尘埃)。
  • 硬件级的 NCQ (Native Command Queuing, 原生指令队列): 允许硬盘内部自行对排队的指令进行优化排序。

软盘(Floppy Disk)

  • 把读写头和盘片分开------实现数据的物理移动!
  • 计算机上装一个固定驱动器(Drive),盘片可以随时拔插带走。
  • 尺寸演进:8" (1971) \\rightarrow 5.25" (1975) \\rightarrow 3.5" (1981)。
  • 最初的软盘真的很"软",外壳就是个纸壳子。后来 3.5 英寸为了可靠性做成了硬塑料壳。
曾经那个"软件 == 软盘"的时代

早期的硬盘是冷插拔的,系统运行时绝对不能拔硬盘,否则直接报废。

但软盘的出现,让"移动数据"和"贩卖软件"成为了可能。

软盘分析:

  • 价格低: 塑料片成本极低。
  • 容量极低: 裸露介质,密度受限(经典的 1.44MB)。
  • 可靠性极低: 防磁防尘极差,随时准备损坏。
  • 读写性能: 极低。
  • 应用场景: 它现在最大的作用,就是变成了 Word 和 Excel 里的"保存"图标。

1-Bit 的存储:挖坑 (坑 v.s. 平)

坑:天然容易"阅读"的数据存储

跨越千年的持久化存储方法:雕刻。

但现代工业可以挖出纳米级精度的坑。假设:挖坑表示 0,平整表示 1。

Compact Disk(CD 光盘)

  • 在反光的塑料平面上,挖出粗糙的坑。
  • 激光扫过表面,遇到平整面反射光线 (1),遇到坑洼产生散射 (0),这样就能瞬间读出海量二进制数据。
  • 飞利浦与索尼的杰作:44.1kHz, 16-bit, 2 声道刚好能装下 74 分钟的贝多芬第九交响曲(约 700MB)。

光盘最有趣的特性:极其容易低成本复制!

这在很大程度上促进了前互联网时代盗版软件和影音的疯狂传播。只要造一个母盘,剩下的只需像印章一样往下压即可。

  • "压盘"后镀上反射膜。
  • 工业流水线:3 秒钟就能压出一张 100GB 的蓝光光盘(相当于 33,000MB/s 的恐怖写入速度!)。

光盘:作为存储设备的分析

  • 价格极低。
  • 容量高(在那个年代)。
  • 可靠性高: 你划伤的其实是没有数据的那一面(数据层在标签面底下),且双面不对称。
  • 读写性能: 顺序读较好,随机读极低。写入极度困难(刻录机其实是在用高功率激光"烧"坏染料层,不可逆)。
  • 应用场景: 统治了一个时代的数字内容实体分发。

Project Silica:回归 Rosetta Stone (石碑)

微软的黑科技:用飞秒激光在极其耐用的石英玻璃内部写入 3D 立体数据。保质期高达上万年。


1-Bit 的存储:电荷 (充电 v.s. 放电)

以上所有的物理存储都有致命缺陷:

  • 磁: 存在机械部件(无法避免的毫秒级机械延迟)。
  • 光: 挖坑效率极低,填坑(复写)几乎不可能。

Solid State Drive (固态驱动器)

我们真正想要的是:电子的密度,加上纯电路的光速!

  • Flash Memory (闪存) 登场。
  • 如何在微观电路中持久保持 1-bit?
    • 在硅片里挖个"坑"(浮栅极)。
    • 用高压把电子强行塞进去 = 状态 0。
    • 把电子放跑 = 状态 1。

1-Bit Flash Memory 原理

闪存:近乎完美的存储介质

  • 价格低: 纯大规模集成电路。
  • 容量高: 目前已经可以做到 200 层以上的 3D 堆叠。
  • 可靠性高: 没有机械部件,完全不怕摔。
  • 读写性能极高: 天然的电路并行。
    • 极为离谱的优点:容量越大,速度越快!(因为更多的芯片可以同时拉起并发读写)。

Jim Gray (图灵奖得主, 2006):

"Tape is Dead, Disk is Tape, Flash is Disk, RAM Locality is King."

(磁带已死,磁盘沦为磁带,闪存成为磁盘,内存局部性才是王道。)

开启"优盘"时代

但是!Flash Memory 会面临"物理磨损" (Wear Out)

  • 闪存的"放电 (Erase)"做不到 100% 把电子全清干净。
  • 当同一个单元被擦写数千/数万次以后,由于绝缘层的损毁,它就像漏水一样,永远呈现"充电"状态了。这就是 Dead cell。
  • 听到这里有没有觉得有点害怕?如果操作系统还像操作磁盘那样,频繁在同一个位置更新系统日志,你的 U 盘不出一天就会直接暴毙报废!

终极答案:软件定义磁盘 (FTL)

你的 SSD、优盘,甚至是小小的 TF 卡里,其实都藏了一台完整的计算机系统 (SoC)

  • FTL (Flash Translation Layer - 闪存转换层):
    • 固态硬盘主控芯片里运行的一套"微型操作系统"。
    • Wear Leveling (磨损均衡): 当你以为你在覆写 0x01 地址时,FTL 其实偷偷在物理颗粒上找了一块全新的干净区域写下数据,然后悄悄修改了内部的映射表。它用极其复杂的软件算法,保证了整块硬盘的物理磨损是极其均匀的。

Flash Disk 和 NAND Flash 的参差

U盘、SD卡、高端 SSD 本质都是 NAND Flash,但软件/硬件系统的复杂程度天差地别:

  • 高端 SSD: 拥有强大的多核 CPU 控制器、板载 DRAM 缓存、Store Buffer 以及极其聪明的 FTL 固件。正常使用可以达到上千年的寿命。
  • 廉价 U 盘 / SD 卡: 为了省钱,控制器极度简陋,甚至没有正规的损耗均衡。高频读写分分钟暴毙。

极客警示:一定不要买过度便宜的 U 盘保存重要数据!

  • 还记得什么是"设备"吗?设备只是一个对外通信的接口。
  • 设备是完全可以被"伪造"的! 它可以假装自己是金士顿,它更可以向操作系统谎报自己有 1TB 容量(实际只有 8GB 物理芯片)。
  • 当你写入超过 8GB 的数据时,黑心主控会直接把数据丢进黑洞,依然向操作系统返回 Write Success

学了《操作系统》底层的 FTL 原理,你完全可以自己刷写主控固件去当扩容奸商。但这挣钱的途径已经被写在了《刑法》第一百四十条里。


存储设备在操作系统中的抽象

从 1-Bit 到 1-TB 的代价

要实现对 TB 级海量数据的精确定位寻址,硬件代价是巨大的(磁盘需要扇区头,电路需要行/列选通信号线)。

解决之道:按块访问 (Block Devices)

  • 不再允许按 Byte 寻址,读写的最小物理单位被强制设定为 Block(块,通常为 512B 或 4KB)
  • 一整个块共享同一份 metadata(纠错码 ECC 等),极大地节省了硬件开销。
  • 所以在 Linux 中,硬盘被称为 Block devices(如 ls -l /dev/sd* 中第一列的 b)。

块设备抽象的代价:读写放大 (Write Amplifications)

  • 这种"只能按块操作"的底层限制导致了读写放大。
  • 如果你只想修改文件里的 1 个字节?对不起,底层硬件必须把这 1 个字节所在的整个 4KB 块全部读入内存,修改那 1 个字节,然后再把这 4KB 完整写回硬盘!
  • 这也意味着,文件系统的软件设计者,必须在代码层面深深地感知到底层"块"的存在。

Linux Bio 子系统 (Spicy 🌶️)

面对成百上千个杂乱的读写请求,操作系统内核(Bio + Driver)是如何在底层进行调度的?

  • Request/response 接口: 上层应用任意乱丢请求。
  • Multi-queue block I/O queuing: 内核通过多队列技术,把请求打散、重排、合并。

核心数据结构(你可以通过让 AI 阅读这些 Linux 内核源码感受极客之美):

  • struct request
  • struct bio
  • struct bvec_iter (真正的 I/O vector,记录扇区号)

总结

Take-away messages:

无论是高贵的内存还是持久存储,最终在底层胜出的依然是电(电荷)------它的密度和光速般的传输是其他机械/光学介质绝对难以比拟的。

但 NAND Flash 也是有妥协的,巨大的"写入寿命"缺陷曾让它备受质疑。幸运的是,人类的工业界敢于试制这样跨时代的半导体产品,用强大的软件层(FTL)硬生生弥补了硬件的短板,让 SSD 终究在争议中成为了今天存储的绝对主角。

如果未来有一天,比 Flash 更快、且永不磨损的 Non-volatile Memory (非易失性内存,如 3D XPoint) 彻底普及,我们的计算机底层架构是否又会发生翻天覆地的洗牌?

强烈建议大家在 AI 的帮助下阅读经典的 Coding for SSDs 系列文章。海量的底层阅读,将帮助你建立起极其硬核的"计算机科学世界观"。

相关推荐
翼龙云_cloud1 小时前
腾讯云国际站代理商: COS 对象存储 + CDN加速 从创建到加速完成
运维·服务器·云计算·腾讯云
aFakeProgramer1 小时前
Linux版本兼容问题及RTA-VRTE环境配置笔记
linux·笔记
Embedded-Xin2 小时前
Rust学习——Cargo工具
linux·学习·架构·rust·嵌入式
weixin_435776112 小时前
2026年长沙托育vi设计从风格定位到元素运用的设计方法
linux·运维·服务器·python
龙仔7253 小时前
RustDesk 完整笔记
运维·笔记·rust·远程工具·rustdesk
恣逍信点3 小时前
《凌微经 · 理悖相涵》导论:“我思”事实——知识理论之根基
人工智能·科技·学习·生活·量子计算·交友·哲学
minglie13 小时前
Linux 文本处理常用命令
学习
benjiangliu3 小时前
LINUX系统-19-库制作与原理(一)
linux·运维·服务器
HJX_07243 小时前
嵌入式软件C语言八股文复习笔记5——编译、链接与底层硬核机制
c语言·开发语言·笔记