1.5 存储系统
计算机存储体系全解析:从分级架构到磁盘调度
本文系统梳理计算机存储体系的核心知识点,涵盖分级存储设计思想、存储器多维度分类、局部性原理、Cache映射机制、虚拟存储技术以及磁盘调度算法,并辅以通俗易懂的生活化示例帮助理解。
一、分级存储体系:为什么不能只有一种存储器?
1.1 核心矛盾
计算机存储面临一个"不可能三角"——速度、容量、成本三者无法同时兼顾:
| 存储层级 | 速度 | 容量 | 单位成本 |
|---|---|---|---|
| 寄存器 | 极快(~0.1ns) | 极小(KB级) | 极高 |
| Cache | 很快(1~10ns) | 很小(MB级) | 很高 |
| 内存 | 较快(~100ns) | 中等(GB级) | 中等 |
| SSD | 中等(~100μs) | 较大(TB级) | 较低 |
| HDD | 较慢(~10ms) | 很大(TB级) | 很低 |
| 磁带 | 很慢(秒级) | 超大(PB级) | 极低 |
分级存储的设计目标就是:用低成本的大容量存储兜底,用高成本的小容量存储提速,实现"接近最快的速度、接近最大的容量、接近最低的成本"的最优平衡。
通俗示例:开一家餐厅——厨房操作台(寄存器/Cache)空间小但伸手就能拿食材,出餐最快;前台储物架(内存)容量中等,拿食材需要走两步;地下仓库(硬盘)能存几百斤食材,但拿一次要跑下楼。三者配合才能让餐厅既不用花天价租大厨房,又能快速出餐、备足所有食材。
1.2 两级存储体系
分级存储落地为两套经典的两级体系:
- Cache-主存体系:解决CPU运算速度(纳秒级)远快于内存读写速度(几十~百纳秒级)的矛盾,由硬件自动管理,对程序员完全透明。
- 主存-辅存体系(虚拟存储):解决内存容量不足的问题,由操作系统管理,让用户感觉拥有比实际物理内存大得多的可用空间。
通俗示例:你的书桌(内存)只有8㎡,但有个大仓库(硬盘)。你只把当前要用的书放在书桌上,需要时从仓库搬过来,不用的就放回去——对你来说就像拥有一张无限大的书桌。
二、存储器的多维度分类
2.1 按所处位置分类
| 类型 | 特点 | 典型代表 |
|---|---|---|
| 内存 | CPU可直接访问,断电数据丢失,临时存放运行中的程序和数据 | DRAM内存条 |
| 外存 | CPU不能直接访问(需先调入内存),断电数据不丢失,长期存储 | 硬盘、U盘、光盘 |
通俗示例:内存是你的办公桌,放正在处理的文件;外存是办公室的文件柜,放长期保存的资料。
2.2 按构成材料分类
- 磁存储器:通过磁信号记录数据,如机械硬盘(HDD)、磁带。
- 半导体存储器:通过电子信号记录数据,如内存(DRAM)、Cache(SRAM)、U盘/SSD(Flash)。
- 光存储器:通过激光读写数据,如CD、DVD、蓝光光盘。
通俗示例:磁存储像用磁铁记录笔记的笔记本,半导体像电子便签,光存储像CD唱片。
2.3 按工作方式分类
RAM(随机存取存储器)——可读可写
断电后数据丢失,是日常所说的"内存"。
ROM(只读存储器)家族——只能读或有限写入
| 类型 | 写入能力 | 擦除方式 |
|---|---|---|
| ROM | 出厂固化,不可写入 | 无法擦除 |
| PROM | 用户可写入一次 | 无法擦除 |
| EPROM | 可多次写入 | 紫外线照射擦除 |
| EEPROM | 可多次写入 | 电信号擦除,支持字节级修改 |
| Flash | 可多次写入 | 电信号擦除,支持块级擦写,速度更快、成本更低 |
通俗示例:PROM像刻了字的石碑,只能看不能改;EPROM像用紫外线橡皮擦可以擦掉重写的便签;EEPROM像电子便签,直接点删除就能重写;Flash是EEPROM的"批量版",一次擦一整块,所以U盘和SSD都用它。
2.4 按访问方式分类
- 按地址访问:通过指定地址找到对应数据,如内存、硬盘。
- 按内容访问(相联存储器):通过匹配数据内容找到对应地址,如Cache的Tag匹配机制。
通俗示例:地址访问像按门牌号找住户;内容访问像按名字找人,不用知道门牌号。
2.5 按寻址方式分类
| 类型 | 特点 | 典型代表 |
|---|---|---|
| 随机存储器 | 访问任意存储单元的时间相同 | 内存(DRAM/SRAM) |
| 顺序存储器 | 必须从头按顺序访问 | 磁带 |
| 直接存储器 | 先随机定位到目标区域,再顺序访问区域内数据 | 机械硬盘(磁盘) |
通俗示例:随机访问像翻书,随便翻到哪页都一样快;顺序访问像看录像带,必须从头放;直接访问像听黑胶唱片,先下针到对应曲目(随机定位),然后顺着曲目听(顺序读取)。
三、局部性原理:Cache工作的理论基石
程序运行时,访问的数据会集中在较小的地址空间内,分为两个维度:
3.1 时间局部性
定义:如果一个数据项正在被访问,那么在近期它很可能会再次被访问——即在相邻的时间里会访问同一个数据项。
通俗示例:你反复翻看同一页错题,每次考试前都要看一遍——同一个知识点在短期内被反复访问。
3.2 空间局部性
定义:在最近的将来会用到的数据,其地址和当前正在访问的数据地址很可能是相近的——即相邻的空间地址会被连续访问。
通俗示例:你看书看完第5行马上会看第6行;遍历数组时,访问了
arr[0]后大概率会接着访问arr[1]、arr[2]……
四、高速缓存Cache:CPU与内存之间的"加速器"
4.1 基本定位
Cache是位于CPU和内存之间的高速小容量存储器,由SRAM(静态随机存取存储器)构成,速度是内存的10~100倍(L1 Cache最快,比内存快约100倍;L3 Cache慢一些,比内存快约10倍)。其内容是内存中热点数据的副本拷贝,对程序完全透明。
4.2 工作流程
Cache由控制部分和存储部分组成:
- CPU要访问数据时,控制部分先查Cache中是否存在该数据(命中)。
- 命中:直接从Cache读取数据,速度极快。
- 未命中:从内存加载数据到Cache,同时按替换算法(如LRU)淘汰Cache中的旧数据块。
4.3 三种地址映射方式
CPU工作时送出的是主存地址,但需要转换为Cache地址来读写,这种转换称为地址映像,由硬件自动完成。
直接映像
- 主存和Cache都等分为块,主存块只能映射到Cache中固定位置(块号取模)。
- 优点:地址变换简单,硬件成本低。
- 缺点:不灵活,容易发生块冲突,造成资源浪费。
通俗示例:像固定停车位——你的车只能停对应的车位,即使旁边空着也不能停。
全相联映像
- 主存中的任意一块可以放入Cache的任意位置。
- 优点:最不容易发生块冲突,只有Cache满了才会冲突。
- 缺点:地址变换复杂,需要并行比较所有Cache块的Tag,硬件成本高、速度较慢。
通俗示例:像随便停的空地——灵活但找车的时候需要一辆一辆看。
组相联映像
- Cache先分块再分组,组间采用直接映像(主存组号与Cache组号对应),组内采用全相联映像(组内块可任意调换)。
- 优点:兼顾灵活性和硬件复杂度,是目前最常用的方式。
通俗示例:像分区的停车场——先找到对应的区(直接映像),区里的车位随便停(全相联)。
4.4 命中率与平均访问时间
Cache容量一般为KB~MB级,很小但最快(仅次于CPU中的寄存器)。根据局部性原理,被循环执行的数据不用每次都去内存读取,从而大幅提升CPU工作效率。
平均访问时间公式:
T = H × tc + (1 - H) × tm
其中:
- H = 命中率
- tc = Cache访问时间
- tm = 内存访问时间
计算示例:设Cache读取时间为1ns,内存读取时间为100ns,命中率为90%,则:
T = 0.9 × 1 + 0.1 × 100 = 0.9 + 10 = 10.9 ns
对比不命中时的100ns,平均访问时间降低了近90%,这就是Cache的巨大价值。
五、虚拟存储技术:让程序"以为"拥有无限内存
5.1 核心思想
将很大的程序数据分成许多小块,全部存储在外存中。运行时,将当前用到的数据调入主存,马上要用到的数据预置于缓存中,一边运行一边进行所需数据块的调入/调出。
对应用程序来说,就好像有一个比实际主存空间大得多的虚拟主存空间。
5.2 层级结构
CPU → Cache → 主存 → 外存(虚拟存储)
与"CPU → Cache → 主存"的原理类似,但虚拟存储中程序无需考虑地址映像关系,由操作系统自动完成,因此对程序是透明的。
5.3 管理方式
| 方式 | 特点 |
|---|---|
| 页式 | 将逻辑地址空间和物理地址空间都分为固定大小的页/页框 |
| 段式 | 按程序的逻辑结构划分段(代码段、数据段等) |
| 段页式 | 先分段再分页,结合两者优点 |
通俗示例:你的手机只有128G,但可以装几百G的应用——系统自动把不用的数据放到云端(外存),用的时候拉下来,对你来说就像有无限大的存储空间。
六、磁盘结构与调度算法
6.1 磁盘物理结构
磁盘有正反两个盘面,每个盘面有多个同心圆磁道,每个磁道被划分为多个扇区,数据就存放在一个个扇区中。
6.2 存取时间公式
存取时间 = 寻道时间 + 等待时间
- 寻道时间:磁头移动到目标磁道所需的时间(耗时最长,是调度重点)。
- 等待时间(旋转延迟):等待目标扇区转到磁头下方所需的时间。
6.3 四种磁盘调度算法
磁盘数据读取时间 = 寻道时间 + 旋转时间。先找到对应磁道,再旋转到对应扇区才能读取。其中寻道时间耗时最长,是调度优化的重点。
FCFS(先来先服务)
按进程请求访问磁盘的先后顺序进行调度。
- 优点:公平,无饥饿。
- 缺点:寻道效率低,磁头来回大幅移动。
通俗示例:像排队打饭,谁先来谁先打,不管距离远近。
SSTF(最短寻道时间优先)
优先调度离当前磁头位置最近的请求,使每次寻道时间最短。
- 优点:平均寻道时间短,效率高。
- 缺点:可能产生饥饿现象——远处的请求可能长时间得不到服务。
通俗示例:像食堂阿姨先给离她最近的人打饭,远处的人可能一直等不到。
SCAN(扫描算法/电梯算法)
磁头在磁盘上双向移动,选择离当前磁道最近且与移动方向一致的请求进行服务。磁头从里向外(或从外向里)一直移动到底才掉头。
- 优点:避免饥饿,等待时间较均匀。
- 缺点:两端磁道的等待时间比中间磁道长。
通俗示例:像电梯从1楼到10楼,一路停靠最近的请求,到顶后再下来。
CSCAN(循环扫描算法)
与SCAN不同的是,磁头只做单向移动(如只从里向外),到达最外端后直接返回最里端,不服务返回途中的请求。
- 优点:等待时间比SCAN更均匀。
- 缺点:返回时不做服务,有一定时间浪费。
通俗示例:像单向电梯,只从1楼上到10楼,然后直接回1楼再上,不停反向的请求。
总结
| 知识点 | 核心要点 |
|---|---|
| 分级存储 | 解决速度、容量、成本三者矛盾 |
| 两级体系 | Cache-主存(硬件管理)、主存-辅存(OS管理) |
| 局部性原理 | 时间局部性 + 空间局部性,是Cache工作的理论基础 |
| Cache映射 | 直接映像(简单不灵活)、全相联(灵活复杂)、组相联(折中最常用) |
| 虚拟存储 | 让程序拥有比物理内存更大的地址空间,管理方式:页式/段式/段页式 |
| 磁盘调度 | FCFS(公平低效)→ SSTF(高效但饥饿)→ SCAN(电梯)→ CSCAN(循环单向) |
理解存储体系的层次结构和各层级的协作机制,是掌握计算机组成原理的关键一步。希望本文的通俗示例能帮助你建立直觉,在面对更底层的硬件设计问题时游刃有余。

浙公网安备 33010602011771号