存储系统为什么要分层:寄存器、缓存、内存与硬盘
围绕存储器层次结构、SRAM、DRAM、SSD 和 HDD ,解释不同存储设备为什么在速度、容量、成本和断电持久性上各不相同。
相关工具
为什么一台计算机需要这么多种存储器
程序运行时既需要极快地取得当前正在计算的数据,也需要把大量内容长期保存下来。一个存储设备很难同时满足极高速度、巨大容量、低成本和断电不丢失这几项要求。于是计算机把存储系统分成多个层次,让不同设备各自承担适合自己的任务。
靠近处理器的存储器速度快、容量小、成本高;离处理器更远的存储器速度慢、容量大、单位成本低。系统通过缓存和分层访问,把近期最可能使用的数据放在更快的层次中,把不常用或需要长期保存的数据放在更大的层次中。
越靠近 CPU 的层次越快但容量越小,越靠近持久化设备的层次容量越大但访问更慢。
寄存器:处理器眼前的数据
寄存器位于处理器内部,保存当前指令执行过程中最直接需要的数据和状态。处理器访问寄存器的速度非常快,程序计数器、通用寄存器和状态寄存器都属于这一层。它们的容量很小,不适合保存大量数据,却决定了处理器能否快速推进当前计算。
寄存器中的内容通常随着任务切换而变化。操作系统保存和恢复进程或线程运行现场时,寄存器状态是重要的一部分。寄存器越靠近当前指令,越适合服务即时计算;但要把更大范围的数据保存下来,就必须依赖后面的缓存、内存或磁盘。
CPU Cache:用更近的空间减少等待
CPU Cache 通常使用 SRAM 芯片,速度比主内存快,但容量和成本也更受限制。现代处理器常见多级缓存,越靠近处理器核心的缓存越快、容量越小;更远的缓存容量更大,但访问代价也更高。
缓存能够发挥作用,依赖程序访问数据时的局部性。程序刚刚访问过的数据,之后可能还会再次使用;与当前数据相邻的位置,也可能很快被访问。系统把这些近期或相邻的数据暂存在更快的缓存层,下一次访问命中时就不必立即等待更慢的内存。
内存:程序主要工作的空间
主内存通常使用 DRAM。与 SRAM 相比,DRAM 单位面积可以提供更大的容量,成本也更低,但访问速度更慢,并且需要周期性刷新来维持数据。程序运行时,代码、数据、堆和栈等内容通常会被加载或映射到内存中,处理器再通过地址转换访问它们。
内存的特点是易失性:断电后其中保存的内容会消失。它适合承担正在运行的程序和近期数据,却不适合作为长期存档。系统需要在速度、容量和内存压力之间做管理,必要时还要把暂时不活跃的页面放到更慢的持久化设备上。
处理器先检查更近的缓存,未命中时逐层向更大的存储层查找数据。
SSD 与 HDD:长期保存数据
SSD 使用闪存保存数据,没有机械磁头和旋转盘片,随机访问通常比 HDD 更快,抗震性也更好。它断电后仍能保留数据,因此适合存放系统、应用和文件。SSD 的速度和寿命会受到控制器、闪存类型、写入放大和剩余空间等因素影响。
HDD 通过机械结构读写盘片上的数据,容量和单位成本具有优势,但需要等待盘片旋转和磁头移动,随机访问延迟更高。它适合容量大、访问频率相对低或需要长期保存的内容。SSD 和 HDD 并不是简单的互相替代,而是根据速度、容量、成本和持久化要求分工。
速度、容量与成本为什么总要取舍
存储层次越靠近 CPU,制造成本通常越高,能够提供的容量越小。寄存器和缓存必须在有限的芯片面积中追求极低延迟;内存需要在容量和速度之间平衡;SSD 与 HDD 则把重点放在持久保存和单位容量成本上。每一层都不是绝对更好,而是服务不同的访问距离。
这种取舍也解释了为什么操作系统和硬件要不断做缓存。把所有数据都放到最快的层次既不现实,也没有必要;把所有数据都放到最便宜的层次又会让处理器频繁等待。分层的目标,是让最常用的数据尽量靠近处理器,让大部分数据仍然拥有足够的保存空间。
速度、容量、成本和断电持久性在不同存储层之间形成不同组合。
缓存为什么会命中或失效
处理器访问数据时,通常先检查更近的缓存。如果缓存中已有对应内容,就是命中,可以较快返回;如果没有,就是未命中,需要继续查找更低层的缓存或主内存。未命中不仅增加本次访问时间,还可能把其他缓存内容挤出去。
进程切换、数据访问范围变化和多个核心之间的共享都会影响缓存效果。一个任务频繁访问很大的数据区域,可能让缓存不断被新内容替换;不同任务反复切换,也可能降低原有数据的命中率。理解缓存时,不能只看缓存容量,还要看程序访问数据的时间和空间局部性。
存储层次与虚拟内存怎样联系起来
虚拟内存为进程提供地址空间,存储层次则决定这些地址对应的数据当前位于哪一层。活跃页面可能驻留在物理内存中,暂时不用的页面可能只保存在磁盘或交换区域;处理器访问某个地址时,系统要检查映射、权限和页面是否已经准备好。
因此,程序变慢不一定只是 CPU 计算量增加,也可能是缓存未命中、内存访问等待,甚至需要从 SSD 或 HDD 重新取回页面。沿着寄存器、缓存、内存、持久化设备这条路径观察,能把“存储慢”拆解成更具体的等待环节。
用一条主线记住存储系统
存储系统采用分层结构:寄存器服务当前指令,CPU Cache 保存近期高频数据,DRAM 作为程序运行的主要工作空间,SSD 和 HDD 负责更大容量的长期保存。越靠近 CPU,访问越快但容量越小;越靠近持久化设备,容量越大但访问延迟越高。
学习存储层次时,可以依次问三个问题:数据现在在哪一层,访问是否命中更快的层次,如果没有命中需要向下走多远。把速度、容量、成本和断电持久性放在同一张图里,缓存、内存和磁盘的分工就会清晰起来。
常见问题
CPU Cache 和内存有什么根本区别?
CPU Cache 通常更快但容量更小,主要保存近期或邻近的高频数据;内存容量更大,是程序运行时的主要工作空间,但访问延迟高于缓存。
SSD 断电后为什么还能保存数据?
SSD 使用非易失性的闪存保存数据,断电后内容不会像寄存器、缓存和 DRAM 中的数据一样立即消失。
缓存未命中为什么会让程序变慢?
未命中时,处理器需要继续到更低层的缓存或内存中寻找数据,等待距离更长;如果数据还需要从持久化设备取回,延迟会进一步增加。