C++ / a working model

150 / 163   ·   C11   ·   约 8 分钟

持久性总结对话

先记住这句话

本对话回顾了操作系统持久性存储的核心难点:崩溃后数据必须存活、更新过程需要可靠恢复,以及磁盘调度、RAID、校验和与设备感知文件系统设计。这些思想在闪存时代依然适用。

本篇内容
  1. 持久性为何远比内存管理困难
  2. 调度、保护与设备感知设计
  3. 闪存时代这些思想为何仍然有效
  4. 运行示例
  5. 动手练习

官方章节 PDF

持久性为何远比内存管理困难

内存中的数据在断电或崩溃后立即消失,而文件系统中的数据必须长期保留。任何对持久介质的修改都必须考虑中途失败的可能,因此崩溃恢复从一开始就成为设计的核心,而不是事后补丁。

调度、保护与设备感知设计

磁盘调度减少磁头移动,RAID 与校验和提供冗余与完整性检测。FFS 与 LFS 等系统针对旋转磁盘的几何与顺序写入特性进行优化,充分利用局部性。深入理解硬件约束才能做出高效且可靠的存储系统。

闪存时代这些思想为何仍然有效

即使底层介质变成闪存,Flash Translation Layer 内部仍采用日志结构来处理擦除块与磨损均衡。局部性思考、崩溃一致性与恢复协议并未过时,只是被重新应用到新的约束上。

常见误区

  • 以为崩溃只是罕见事件而忽略恢复路径
  • 误认为闪存出现后传统磁盘感知技术已完全失效

运行一个例子

最低标准 C11 · 完整程序 · 下载 .c

#include <stdio.h>

int main(void) {
    printf("Memory contents disappear on crash.\n");
    printf("File-system data must outlive the crash.\n");
    return 0;
}

在本地编译

gcc -std=c11 -Wall -Wextra -Wpedantic -Werror ostep-46-persistence-summary.c -o example && ./example

预期结果

Memory contents disappear on crash.
File-system data must outlive the crash.

CHECK YOUR UNDERSTANDING

合上答案,试着解释。

为什么日志结构的思想在闪存 SSD 的 FTL 中仍然被广泛使用?

查看参考答案

因为闪存必须以块为单位擦除且有磨损限制,日志方式可以把随机写转化为顺序追加,同时便于垃圾回收与磨损均衡,从而同时提升性能与寿命。

继续查证

标准草案与官方章节会更新;版本标记只说明示例最低要求。

回到目录