主存储器的基本组成
主存的内部结构只有一句话:一个存放数据的存储体,加上两个用来与外界交换的寄存器,再加上把地址翻译成选中线的译码驱动电路。
这一节本身考点不多,但它定义了 MAR 与 MDR 的位数,而这两个位数是后面所有容量计算题的起点。几乎每一道”主存最大容量是多少""需要多少芯片”的题,第一步都是在数 MAR 有多少位、MDR 有多宽。
机制
三个部件
flowchart LR CPU["CPU"] -- 地址 --> MAR["MAR<br/>地址寄存器<br/>位数 = 地址线根数"] MAR --> DEC["译码器 + 驱动电路"] DEC --> BODY["存储体(存储矩阵)<br/>存储单元的集合"] BODY <--> RW["读写电路"] RW <--> MDR["MDR<br/>数据寄存器<br/>位数 = 存储字长"] MDR <-- 数据 --> CPU CPU -- 读/写命令 --> CTRL["控制电路"] CTRL --> BODY classDef reg fill:#d6eaf8,stroke:#2874a6 classDef body fill:#fdebd0,stroke:#e67e22 class MAR,MDR reg class BODY body
存储体(存储矩阵):存储单元的集合,是真正存数据的地方。存储单元由若干存储元组成,一个存储元存一位。
MAR(地址寄存器):存放本次访问的地址。
MAR 与 MDR 在哪
逻辑上它们是主存的接口寄存器,物理上现代计算机把它们做在 CPU 内部。 这不是矛盾:MAR/MDR 描述的是”主存与外界交换地址和数据的那一拍”,这一拍发生在哪个芯片上不影响它的位数含义。
考点在于位数,不在于位置。 一道题若问”MAR 的位数由什么决定”,答案是主存地址空间的大小,与 MAR 做在哪里无关。
疑问点:主存储器都包括哪些部分
上面那张图里的五个部件——存储体、MAR、MDR、译码驱动电路、读写与控制电路——就是主存储器的完整组成。这是一个逻辑模型,不是对一块主板的描述。
落到实物上: “内存条”是存储体的物理载体,一条内存条上是若干片 DRAM 芯片(见 3.3.2的位扩展)。 译码驱动、读写时序、刷新调度由存储器控制器完成——它在早期主板上位于北桥芯片,从酷睿 i 系列和 Opteron 开始已集成进 CPU 内部。 南桥(今天叫 PCH)负责的是低速外设:SATA、USB、网卡、BIOS 芯片的连接,与主存的读写通路无关。
所以”主存包括内存条和南桥”是记混了:内存条对应存储体,控制逻辑对应存储器控制器(曾在北桥、现在 CPU 内),南桥从来不在主存的通路上。 408 不考南北桥的具体分工,它们出现在 第 6 章 总线的系统总线结构里,作为”总线为什么要分层”的背景。
广义的主存包含 ROM 区
一台机器的主存地址空间通常同时包含 RAM 区和 ROM 区:ROM 区放引导程序,RAM 区放运行时的指令和数据。两者由片选译码分开,在 CPU 看来是同一个连续的地址空间。这正是 3.1.1中”RAM 与 ROM 可以统一编址”那条判断题的实现方式。
边界
“存储单元”和”存储字长”要分清。 存储单元是按地址访问的最小单位,它的位数就是存储字长。按字节编址时存储字长可以仍是 32 位——此时一个地址对应一个字节,但主存一次读出 32 位(4 个字节),多余的部分由 CPU 按字节选择。这个区别是 3.2.4中”一个存取周期能不能读完一个 double”的判断依据。
MAR 位数决定的是”可寻址的单元数”,不是”字节数”。 只有在按字节编址时两者才相等。编址单位没给就必须从数据总线宽度反推,见 3.3.2。
主存容量与地址空间大小不是一回事。 地址空间由地址线根数决定,是上限;实际装了多少内存是另一回事。题目问”主存最大容量”用地址线算,问”实际容量”要看装了几片。
对照速查
| 量 | 由什么决定 | 公式 |
|---|---|---|
| MAR 位数 | 地址线根数 | |
| MDR 位数 | 数据线根数 | = 存储字长 |
| 主存容量 | 两者相乘 | |
| 存储元 | 存一位 | — |
| 存储单元 | 按地址访问的最小单位 | 位数 = 存储字长 |
考点
- 主存 = 存储体 + MAR + MDR + 译码驱动 + 读写控制电路
- MAR 位数 = 地址线根数,MDR 位数 = 存储字长 = 数据线根数
- 主存容量
- MAR/MDR 物理上在 CPU 内,逻辑上属于主存接口;考点是位数不是位置
- 存储元存一位,存储单元按地址访问,两者不能混
- 主存地址空间可同时含 RAM 区和 ROM 区
- 地址空间大小是容量上限,不等于实际容量
链接
- 🏠 返回总览:计算机组成原理第 3 章:存储系统总览
- ⬅️ 上一节:3.2.2 只读存储器
- ➡️ 下一节:3.2.4 多模块存储器
- 🔗 3.3.1 连接原理(三类总线如何对接这三个部件)
- 🔗 3.3.2 主存容量的扩展(容量公式的直接应用)
- 📖 名词库:第 3 章名词库