主存储器的基本组成

主存的内部结构只有一句话:一个存放数据的存储体,加上两个用来与外界交换的寄存器,再加上把地址翻译成选中线的译码驱动电路。

这一节本身考点不多,但它定义了 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(地址寄存器):存放本次访问的地址。位数地址线根数存储单元个数MDR(数据寄存器):存放本次读出或将要写入的数据。位数数据线根数存储字长译码驱动电路把 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 区
  • 地址空间大小是容量上限,不等于实际容量

链接