理解了Cache、主存、辅存的三级存储体系是如何解决“速度、容量、价格”的平衡难题后,你对计算机的存储层次应该有了一个宏观的认识。这篇文章,我们来聊聊另一个紧密相关的核心概念——四种存储存取方式。这是理解不同存储设备工作机理的关键。
一、四种存储存取方式是什么?
- 顺序存取(Sequential Access):必须严格按照物理顺序从前往后(或从后往前)逐个寻找目标数据,越靠后的数据访问时间越长。典型代表:磁带。
- 直接存取(Direct Access):可以先直接“跳到”目标数据所在的大致区域(例如磁盘的某个磁道),然后在该区域内进行顺序查找。访问时间是可变的,但比纯顺序存取快得多。典型代表:磁盘。
- 随机存取(Random Access):任何一个存储单元都可以在“与位置无关、且基本相同”的时间内被直接访问。只要给出地址,就能立即定位。典型代表:主存(RAM)。
- 相联存取(Associative Access / 按内容访问):访问时“按内容”而非“按地址”。存储器会对全部或部分存储单元进行并行比较,快速找出与给定内容匹配的一个或多个单元。典型代表:CAM(内容寻址存储器)、Cache中的标志比较电路。
简单来说,前三种(顺序、直接、随机)都属于 “按地址访问” 的范畴,而相联存取则是独特的 “按内容访问”。
二、四种存取方式详解
1. 顺序存取(Sequential Access)
- 特征:
- 数据按记录或块进行组织,访问必须遵循某个线性顺序,无法随意“跳转”到任意位置。
- 存取时间与目标数据在存储介质中的物理位置强相关:位置越靠后,访问所需时间越长。
- 工作方式:
- 通常只有一个共享的读写头。要访问目标数据,读写头必须从介质的一端开始顺序移动(如磁带绕卷、旋转),经过所有位于它之前的数据才能到达目标位置。
- 生活化比喻:就像一卷老式录音带,你想听第10首歌,就必须先快进或倒带,卷过前面的9首。
- 例子:
- 优缺点:
- 优点:机械结构相对简单,单位存储成本极低,非常适合用于顺序的批量备份或数据归档。
- 缺点:随机访问性能极差,完全不适合作为需要高频随机读写的主存储器。
2. 直接存取(Direct Access)
- 特征:
- 介于“随机存取”和“顺序存取”之间。访问分两步:先直接定位到目标所在的较大区域(块、柱面或磁道),再在这个区域内进行顺序搜索。
- 访问时间是可变的,取决于目标位置与读写装置当前位置的相对关系,但其整体效率远高于纯顺序存取。
- 工作方式(以磁盘为例):
- 每个数据块(扇区)都有唯一的地址标识。
- 读写一个数据的典型步骤:
- 寻道(Seek):移动磁头臂,使磁头直接定位到目标数据所在的磁道。
- 旋转等待(Rotational Latency):等待盘片旋转,将目标扇区转到磁头下方。
- 数据传输:在该磁道上顺序读取或写入目标扇区及相邻扇区的数据。
- 可以看到,前两步(寻道和选择大致区域)具有“直接跳跃”的性质,而在磁道内定位具体扇区时,又带有“顺序”的特性。
- 例子:
- 优缺点:
- 优点:支持海量数据存储,访问灵活性远高于磁带,访问时间虽不恒定但已能满足大多数辅存需求。
- 缺点:仍然依赖物理机械运动(磁头移动、盘片旋转),速度远远慢于半导体存储;访问时间存在波动。
3. 随机存取(Random Access)
- 特征:
- 存储器的每个可寻址单元都拥有独立的访问电路或寻址路径。只要给出地址,就能在基本相同的、极短的时间内直接访问任意单元,访问时间与单元的物理位置无关。
- 地址一旦给出,通过地址译码器就能“直通车”般地选中目标单元,无需经历任何中间数据的扫描过程。
- 工作方式(以半导体主存为例):
- 地址总线将目标地址送入地址译码器。
- 译码器输出直接选中对应的存储单元(行和列)。
- 所有单元共享数据总线,但具体哪个单元参与读写,完全由地址译码结果控制。
- 对任意地址的访问时间(存取周期)几乎是一致的。
- 例子:
- 主存(DRAM)、SRAM Cache、ROM等。
- 优缺点:
- 优点:访问速度极快,且延迟稳定,这是它能够作为计算机主存储器的核心原因。
- 缺点:单位容量的成本历史上高于磁介质,不过随着技术进步,价格已大幅下降。
4. 相联存取(Associative Access / 按内容访问)
- 特征:
- 不依赖地址,而是根据“内容(或内容的一部分)”来查找和访问数据。它将输入的关键字与存储器中所有单元(或指定字段)进行并行比较,瞬时找出匹配项,然后对该单元进行读写。
- 虽然也能在常数或很短的时间内完成访问,但其硬件实现非常复杂,需要为每个存储单元配备比较电路。
- 工作方式:
- 每个存储单元除了保存数据,还附带存储一个“标签”或“关键字”。
- 访问时,将待查找的关键字送到存储器的比较输入端。
- 存储器内部,所有单元的“标签”部分同时与输入关键字进行比较。
- 输出一个或多个匹配单元的地址或其中存储的数据本身。
- 例子:
- 内容寻址存储器(CAM):专门为这种访问模式设计的硬件。
- Cache中的“标记比较”电路:CPU给出内存地址后,Cache控制器并不是按这个地址去找,而是用地址中的一部分(Tag)去并行比较Cache行中的标记,判断是否命中。这本质上就是相联存取思想的应用。
- 优缺点:
- 优点:查找速度无与伦比,特别适合路由表查找、TLB(快表)、Cache标记匹配等需要“按内容快速检索”的场景。
- 缺点:硬件成本高、功耗大,因此容量通常做得很小,用于关键的速度瓶颈处。
三、生活化比喻对比
为了帮你建立更直观的感受,我们可以用一些常见的物品来类比:
- 顺序存取:像一盘老式录音带。
- 想听第8首歌?你必须老老实实地快进,听完“滋啦滋啦”的前7首才能到达。
- 直接存取:像一张黑胶唱片或CD。
- 想听第8首歌?你可以直接把唱臂或激光头移到唱片上大概第8首歌所在的纹路区域附近,然后等待唱片旋转一圈,让那首歌的起始点转到唱针或光头下。(先直接定位区域,再顺序等待)
- 随机存取:像你手里的一本书。
- 想看第100页?直接翻过去,所需时间和你翻到第10页差不多。
- 相联存取:像一个拥有“全书内容瞬时索引”的超级管理员。
- 你说:“帮我找出所有标题里带‘操作系统’的书。”管理员瞬间(并行)核对所有书籍的索引卡,马上告诉你结果,而不是一本一本地去翻书架。
四、核心特性对比表格
| 维度 |
顺序存取(Sequential) |
直接存取(Direct) |
随机存取(Random) |
相联存取(Associative) |
| 访问依据 |
按记录顺序线性访问 |
先直接定位区域,再区域内顺序找 |
按地址直接定位 |
按内容(关键字)并行匹配 |
| 访问时间特性 |
与位置强相关,越靠后越慢 |
可变,取决于磁头位置、旋转延迟等,但远快于顺序 |
与位置无关,基本为常数 |
也可视为常数,取决于比较电路的并行度 |
| 是否需要机械移动 |
多数需要(如磁带绕卷) |
需要(磁盘寻道+旋转) |
通常不需要(纯电路译码) |
不需要,但并行比较电路复杂 |
| 共享读写装置 |
单个读写装置,必须顺序扫过所有中间数据 |
单个或少量磁头,先移动到区域,再顺序扫描 |
每个单元在逻辑上可独立、并行地寻址访问 |
所有单元同时参与内容比较 |
| 典型设备 |
磁带 |
磁盘(HDD) |
主存(DRAM)、SRAM Cache、ROM |
CAM、Cache的标志比较电路 |
| 典型应用场景 |
数据归档、备份、顺序流处理 |
大容量辅存(文件系统、数据库) |
计算机主存、各级高速缓存 |
路由器转发表、CPU TLB、Cache命中判断 |
五、关系示意图
下图从“访问机制”的角度,展示了这四种方式之间的关系(注意:这不是具体的硬件结构图)。

- 从左到右,数据访问的“随机性”和“直接性”逐渐增强。
- 相联存取是一种特殊的“按内容”访问方式,它常常与随机存取存储器配合使用。例如在Cache中,用随机存取的方式根据索引找到一组Cache行,然后用相联存取的方式并行比较这些行的标记(Tag)来判断是否命中。
六、具体访问过程举例
假设我们要在某种存储介质上“读取第N条记录”,看看不同存取方式会怎么做。
1. 顺序存取(以磁带为例)
- 步骤:
- 将磁带倒回起始位置。
- 开始顺序读取:读记录1,计数+1;读记录2,计数+1;……
- 当计数等于N时,停止并返回当前记录的数据。
- 特点:时间复杂度大致是O(N),N越大,等待时间越长。
2. 直接存取(以磁盘为例)
- 步骤:
- 根据记录的逻辑地址,计算出其物理位置:位于哪个磁道(柱面)、哪个扇区。
- 磁头臂移动,寻道至目标磁道。
- 盘片旋转,等待目标扇区转到磁头下方。
- 读取该扇区中的数据(目标记录)。
- 特点:总时间 ≈ 寻道时间 + 旋转延迟 + 数据传输时间。它避免了从第一条记录开始的线性扫描。
3. 随机存取(以主存DRAM为例)
- 步骤:
- CPU将欲访问的内存地址放到地址总线上。
- 内存的地址译码器接收地址,并直接选中对应的存储单元(某一行,某一列)。
- 控制逻辑将选中单元中的数据读出,放到数据总线上传给CPU。
- 特点:无论访问地址是0x0000还是0xFFFF,从发出地址到获取数据的延迟几乎完全相同。
4. 相联存取(以CAM存储路由表为例)
假设CAM每一行存储一个“目标网络IP前缀 -> 下一跳端口”的映射。我们要查找目标IP地址K对应的端口。
- 步骤:
- 将IP地址
K送入CAM的比较输入端口。
- CAM内部,所有行的“IP前缀”字段同时与
K进行比较(按最长前缀匹配规则)。
- 匹配成功的那一行(或多行中最优的一行)会立即激活其匹配信号。
- 输出该行所存储的“下一跳端口”数据。
- 特点:查找速度极快,理想情况下在一个时钟周期内即可完成,且查找时间不随表项数量增加而线性增长。
七、重点归纳与辨析
-
顺序、直接、随机的根本区别:
- 访问时间是否与位置有关:
- 顺序存取、直接存取:有关。
- 随机存取:无关(恒定时间)。
- 是否共享单一的读写装置:
- 顺序存取:是,必须共享一个读写头顺序扫描。
- 直接存取:是,但读写头可以先“跳”到大致区域。
- 随机存取:否,每个单元都有独立的寻址路径,可视为并行访问。
-
直接存取的特殊性:
- 它融合了“随机”(直接选择磁道)和“顺序”(在磁道内顺序旋转查找扇区)两种特性。这是理解磁盘工作原理的关键。
-
相联存取的本质区别:
- 前三种(顺序、直接、随机)归根结底都是 “按地址访问” 。你必须知道或算出数据的“门牌号”。
- 相联存取是 “按内容访问” 。你只需要说出“我要找的东西长这样”,它就能从一堆东西里瞬间给你找出来。
- 这种特性使其在需要极速查找的场合不可替代,例如CPU的TLB(快表)、Cache的命中判断以及网络路由器的转发表查找。理解相联存取,是深入理解现代计算机体系结构,尤其是内存管理与缓存机制的重要一环。
八、总结
- 顺序存取:老老实实排队,从头找起,越往后越慢。代表:磁带。
- 直接存取:先坐电梯到大概楼层,再挨户找门牌号。代表:磁盘。
- 随机存取:有精确的GPS坐标,瞬间直达任意地点。代表:主存(RAM)。
- 相联存取:不靠地址,那靠什么来定位数据呢?靠“人脸识别”,在人群中瞬间找出目标。代表:CAM及Cache的比较电路。
希望这篇关于存储存取方式的详解,能帮助你更清晰地把握不同存储设备的工作逻辑。这些计算机基础知识的干货,是构建更高阶技术理解的坚实基石。如果你对某个细节有更深的兴趣,欢迎在技术社区深入探讨。
|