Loading... # 数据存储底层原理详解 # 一、概述 ## 1. 引言 数据存储本质上是试图以日益复杂的方式捕获电子。计算机依赖内存,CPU 和 GPU 只是数据处理机器,最糟糕的情况就是浪费一个时钟周期等待数据。 ## 2. 存储层次结构 由于快速存储既昂贵又耗电,我们将存储组织成层次结构: - 距离处理单元越近,存储速度越快,但容量越小 - 距离处理单元越远,存储容量越大,但速度越慢 ```mermaid graph LR CPU[CPU] -->|1ns| L1[L1 缓存 64KB] L1 -->|3ns| L2[L2 缓存] L2 -->|10ns| L3[L3 缓存] L3 -->|100ns| RAM[DRAM 内存] RAM -->|100us| SSD[固态硬盘] SSD -->|10ms| HDD[机械硬盘] ```  # 二、静态随机存取存储器 ## 1. 基本原理 SRAM 是最快的内存,因为它最简单。它使用晶体管构建逻辑门来存储单个比特。 ### A. 晶体管 晶体管本质上是一个开关,有三个端子: - 源极 - 漏极 - 栅极 当在栅极和源极之间施加小电压时,会在源极和漏极之间诱导大电流流动。 ### B. 反相器 从晶体管可以构建逻辑门,存储器需要的是反相器或非门,它反转施加到其上的信号: - 有电压输入时返回 0V - 无电压输入时返回电压 ## 2. 存储单元 ### A. 交叉耦合反相器 存储单元需要两个反相器 A 和 B: - 将反相器 A 的输出连接到反相器 B 的输入 - 将反相器 B 的输出连接到反相器 A 的输入 这称为交叉耦合,创建了一个稳定的反馈回路。只要施加电源,反相器 A 就会持续输出 1。 ```mermaid graph LR INV1[反相器 A] -->|1| INV2[反相器 B] INV2 -->|0| INV1 style INV1 fill:#e1f5fe style INV2 fill:#e1f5fe ```  ### B. 6T 单元结构 SRAM 存储单元通过两个连接到字线的晶体管与内存其余部分隔离: - 字线晶体管控制对位线的访问 - 位线在单元两侧各有一条 读取时: - 打开访问晶体管 - 电流沿位线向下流动供 CPU 读取 写入时: - 打开访问晶体管 - 驱动两条位线的电压(一侧高压,一侧低压) - 覆盖反馈回路中的信号并翻转反相器 ## 3. SRAM 阵列 ### A. 网格排列 这些单元排列成阵列: - 列通过垂直位线连接 - 行通过水平字线连接 ### B. 读取过程 1. 根据地址计算字线位置 2. 升高该字线的电压 3. 降低其他字线的电压 4. 连接到该字线的每个单元将信号发送到位线 5. 列多路复用器过滤出 CPU 查找的列 ```mermaid graph TB WL[字线] --> Cell1[单元 1] WL --> Cell2[单元 2] WL --> Cell3[单元 3] Cell1 --> BL1[位线 1] Cell2 --> BL2[位线 2] Cell3 --> BL3[位线 3] BL1 --> MUX[列多路复用器] BL2 --> MUX BL3 --> MUX MUX --> CPU[CPU] ```  ### C. 性能特点 - SRAM 非常快,最大的速度瓶颈来自位线和字线的长度 - 这就是 L1 缓存必须保持很小的原因 - 更高级别的缓存可以增加容量 # 三、动态随机存取存储器 ## 1. 为什么需要 DRAM 如果基于晶体管的内存如 SRAM 这么好,为什么不把它用于所有内存? 如果这样做: - 计算机成本会高出十倍 - 体积会大一倍 - 功耗相当于商用烤箱 基于晶体管的内存速度很快,但空间效率非常低且制造成本高昂。 ## 2. 基本原理 DRAM 需要一种在 SRAM 速度和长期存储容量之间折衷的存储方案。 ### A. 1T1C 单元 每个 DRAM 内存单元由一个连接到晶体管的单个电容器组成: - 电容器存储静电荷 - 晶体管充当开关,允许充电和放电电容器 ```mermaid graph LR WL[字线] --> Transistor[晶体管] Transistor --> Capacitor[电容器] BL[位线] --> Transistor ```  ### B. 动态刷新 由于尺度极小,即使晶体管关闭,电荷也会缓慢从电容器泄漏。因此需要不断补充电容器中的电荷,称为动态 RAM。 刷新频率:约每 64 毫秒一次 ## 3. DRAM 阵列结构 ### A. 网格排列 - 单个 1T1C 单元排列成行 - 字线跨越整行连接所有单元 - 位线沿每列向下连接每个单元 ### B. 地址映射 32 位地址包含三个部分: - 前 5 位:指定内存所在的存储体 - 中间 16 位:指示要激活的行 - 后 10 位:指定感兴趣的列 ```mermaid graph TB Address[32 位地址] --> Bank[5 位存储体] Address --> Row[16 位行] Address --> Column[10 位列] Bank --> BankSelect[选择存储体] Row --> WordLine[激活字线] Column --> ColMux[列多路复用器] BankSelect --> Output[输出数据] WordLine --> Output ColMux --> Output ```  ## 4. DRAM 操作 ### A. 读取操作 1. 断开所有字线 2. 将所有位线预充电至约 0.5V 3. 连接正确的行 4. 检测放大器检测电压差异并放大 ### B. 写入操作 1. 同样的预充电和行激活过程 2. 列多路复用器将 8 条位线连接到写入驱动器 3. 写入驱动器覆盖检测放大器 4. 将电压改为 0V 或 1V ### C. 刷新操作 1. 关闭存储体中的所有行 2. 预充电位线至 0.5V 3. 打开单行 4. 检测放大器读取电压并驱动每条位线 5. 对存储体中的每一行重复 ## 5. 性能优化 ### A. 并行处理 - 典型有 32 个存储体 - 每个存储体都有自己的列多路复用器、驱动器和检测放大器 - 可以并行使用,任何给定时间有 32 个开放行 ### B. 内存布局 - 将相关数据安排在同一行 - 跨多个存储体安排相关数据 ```mermaid graph LR CPU[CPU] --> Bank1[存储体 1] CPU --> Bank2[存储体 2] CPU --> Bank32[存储体 32] Bank1 --> Row1[行 A] Bank2 --> Row2[行 A] Bank32 --> Row32[行 A] ```  # 四、固态硬盘 ## 1. 基本原理 SSD 解决了 DRAM 的两个问题: - 需要持续供电 - 容量成本过高 但代价是读写速度降低。 ### A. 电荷陷阱单元 SSD 的核心单元是电荷陷阱闪存单元: - 可以捕获电子的微小单元 - 使用捕获的电子数量存储数据 ```mermaid graph TB Gate[控制栅极] --> Barrier1[介电势垒] Barrier1 --> Trap[电荷陷阱] Trap --> Barrier2[介电势垒] Barrier2 --> Channel[沟道] ```  ### B. 工作机制 电荷陷阱单元有三个主要组件: 1. 栅极 2. 电荷陷阱 3. 沟道 每个组件之间被介电势垒隔开: - 防止电子在它们之间流动 - 允许电场通过 ## 2. 数据存储原理 ### A. 阈值电压 当在栅极施加正电压时: - 发出电场并在沟道中诱导电流流动 - 电压需要足够强以克服绝缘(阈值电压) 如果电荷陷阱中有带负电的电子: - 排斥这个电场 - 需要更高的电压来克服 ### B. 电子捕获 施加到栅极的正电压足够强时: - 创建吸引带负电电子的正电场 - 迫使它们穿过势垒 - 这就是量子隧穿 ## 3. 3D NAND 结构 ### A. 垂直堆叠 为了增加存储密度,SSD 将电荷陷阱单元排列在垂直柱中: - 这个垂直的连接单元列称为字符串 - 整个字符串共享相同的中心沟道 - 沟道在顶部连接到位线 ```mermaid graph TB BitLine[位线] BitLine --> String1[字符串 1] BitLine --> String2[字符串 2] String1 --> CG1[控制栅极 1] String1 --> CG2[控制栅极 2] String1 --> CG3[控制栅极 3] String2 --> CG1 String2 --> CG2 String2 --> CG3 ```  ### B. 页和块 - 页:共享相同水平控制栅极的所有单元 - 块:跨越多个位线的行组 ### C. 3D 结构 现在结构有三个维度: - 行:每列是字符串,每行是页 - 列:连接到相同位线的所有字符串的垂直切片 - 层:选择同一级别所有页的水平切片 ```mermaid graph TB Block[块] --> Row1[行 1] Block --> Row2[行 2] Block --> RowN[行 N] Row1 --> Layer1[层 1] Row1 --> Layer2[层 2] Row1 --> LayerM[层 M] ```  ## 4. SSD 性能特点 ### A. 页读取 - 页面实际宽度约 16KB - 单个页面约 50,000 个单元 - 需要 DRAM 作为缓冲内存 ### B. 并行读取 - 将文件分布到多个芯片 - 可以并行读取数据 - 使用超级页概念(跨多个芯片使用相同的物理页) ### C. 寿命限制 - 薄势垒每次强制电子穿过时都会轻微退化 - SSD 有读写限制 - 不适合极长期存储 # 五、机械硬盘 ## 1. 基本结构 ### A. 磁盘片 HDD 的核心是磁盘片: - 使用磁方向存储数据 - 通常多个磁盘片垂直堆叠 - 围绕中心主轴旋转 - 消费设备通常为 7200 rpm ```mermaid graph TB Spindle[主轴] --> Platter1[磁盘片 1] Spindle --> Platter2[磁盘片 2] Spindle --> Platter3[磁盘片 3] ```  ### B. 读写头 - 每个磁盘片两侧各有一个读写头 - 由执行臂移动 - 读写头悬浮在磁盘表面约 15nm 上方 ## 2. 数据存储机制 ### A. 磁道和扇区 磁盘表面覆盖着薄磁层,分为: - 磁道:数百个同心圆 - 扇区:每个磁道分段 ### B. 扇区结构 每个扇区包含: 1. 前导码:确保读写头知道磁盘旋转速度 2. 地址:特定磁道和扇区的地址(48 位) 3. 数据有效载荷:约 4KB 4. ECC 位:错误校正码 ## 3. 读写原理 ### A. 写入 写入头是铜线线圈: - 电流通过铜线创建磁场 - 磁场改变磁性颗粒的极性 - 电流向前时北极向下 - 电流反向时北极向上 ```mermaid graph LR Current[电流] --> Coil[铜线线圈] Coil --> Field[磁场] Field --> Grain[磁性颗粒] ```  ### B. 读取 读取头检测磁场变化: - 磁性和非磁性层根据磁场变化电阻 - 极性变化时产生最大尖峰 - 极性变化分配为 1 - 无极性变化分配为 0 ## 4. 性能特点 ### A. 缓冲内存 HDD 有板载 DRAM: - 将数据读入缓冲 - 加快后续读取 ### B. 碎片整理 HDD 的主要瓶颈是移动臂到新位置的时间: - 理想情况下数据应尽可能并置 - 碎片整理移动数据以减少间隙 ### C. 寿命 - 没有写入耐久性限制 - 受限于执行器和主轴轴承的机械磨损 - 可在磁层中保存数据数十年 # 六、存储技术对比 ## 1. 性能对比 | 存储类型 | 访问速度 | 容量 | 成本 | 持久性 | |---------|---------|------|------|-------| | SRAM | ~1ns | ~64KB | 最高 | 需要供电 | | DRAM | ~100ns | ~100GB | 高 | 需要刷新 | | SSD | ~100us | ~TB | 中 | 断电保持 | | HDD | ~10ms | ~TB | 低 | 断电保持 | ## 2. 使用场景 ### A. SRAM - CPU 缓存 - 需要极低延迟的场景 ### B. DRAM - 系统内存 - 需要高带宽和中等容量的场景 ### C. SSD - 系统盘 - 需要快速启动和高性能的场景 ### D. HDD - 数据备份 - 大容量存储 - 冷数据归档 # 七、总结 存储的圣杯是兼具 SRAM 的速度、SSD 的密度和 HDD 寿命的存储器。但由于物理定律的限制,下一最好的方案是数据在层次结构的各级之间移动的精心编排的舞蹈。 每种存储技术都在容量和读写速度之间进行不同的折衷,因此它们的底层技术也完全不同。 *** ## 参考资料 1. [Making Software: How is data stored?](https://www.makingsoftware.com/chapters/how-is-data-stored) 最后修改:2026 年 02 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏