计算机硬件

这是第 1 章分量最重的一节。它给出冯·诺依曼结构的五个特点,并把五大部件里的三个(主存、运算器、控制器)拆到寄存器一级——而这些寄存器的名字会在第 3、5 章原样再出现。

本节的读法:不要把它当成”名词清单”,把它当成全书的零件目录。第 5 章讲的是这些零件怎么动,第 3 章讲的是其中存储部分怎么做大做快。

机制

冯·诺依曼结构的五个特点

#特点后面哪一章兑现
1计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成本节
2指令和数据以同等地位存于存储器,可按地址寻访3.2.3
3指令和数据都用二进制表示2.1
4指令由操作码和地址码组成4.1.2
5存储程序:程序事先存入主存,机器自动逐条执行1.2.5
6以运算器为中心见下——这一条已经过时

第 5 条「存储程序」是整个结构的灵魂,1.2.5 会说清它为什么让机器能”自动”运行。

第 2 条要小心一个陷阱:“同等地位”说的是它们在存储器里都是二进制串、都按地址访问,不是说 CPU 分不清。 CPU 靠取指周期还是取数周期来区分——同一串比特,在取指阶段被送进 IR 当指令,在取数阶段被送进运算器当数据。 这个区分机制在 5.2.1 指令周期讲透。

以运算器为中心 → 以存储器为中心

这是本节唯一一条”教材写了但已经变了”的内容,而且它是考点。

早期(冯·诺依曼原始结构)现代
中心运算器存储器
I/O 数据怎么走必须经过运算器中转可直接与主存交换(DMA)
代价所有数据都挤过运算器,运算器成为瓶颈运算器只做运算

“以存储器为中心”的直接产物就是 7.3.3 的 DMA——设备与主存之间开一条不经过 CPU 的通路。认出这一点,DMA 就不是第 7 章突然冒出来的新东西,而是这一节那条演化线的终点。

主存储器:存储体 + MAR + MDR

flowchart LR
    CPU["CPU"] -->|"地址"| MAR["MAR<br/>地址寄存器"]
    MAR --> DEC["译码驱动"]
    DEC --> BODY["存储体<br/>存储单元的集合"]
    BODY <--> MDR["MDR<br/>数据寄存器"]
    MDR <-->|"数据"| CPU
    CPU -->|"读/写命令"| CTL["读写控制电路"]
    CTL --> BODY

    classDef reg fill:#ffcdd2,stroke:#b71c1c,stroke-width:2px
    classDef body fill:#fff3e0,stroke:#e65100
    classDef cpu fill:#e3f2fd,stroke:#1565c0
    class MAR,MDR reg
    class BODY,DEC,CTL body
    class CPU cpu

三个层次的名词要分清,它们是包含关系:

名词是什么
存储元存 1 位二进制的电路
存储单元由若干存储元组成,有一个地址,一次读写的最小整体
存储体全部存储单元的集合
存储字长一个存储单元的位数的位数 位数存储单元个数主存容量位数位数

疑问点:主存储器都包括什么?主存控制器被集成到 CPU 了?南桥又是什么?

这一条问了三件事,而它们分属三章。 逐个说,并给出各自的落点。


① 主存储器包括什么 → 本节 + 3.2.3

主存储器存储体译码驱动读写电路控制电路

考试口径通常只要前三个:存储体、MAR、MDR。

一个必须点明的边界:MAR 和 MDR 在逻辑上属于主存,但在现代计算机里物理上做在 CPU 内部。 这不矛盾——它们描述的是”主存与外界交换地址和数据的那一拍”,这一拍发生在哪颗芯片上不影响它的位数含义。

考的是位数,不是位置:问”MAR 的位数由什么决定”,答案是主存地址空间的大小。


② 主存控制器被集成到 CPU 了吗 → 是的,而且这正是 6.1.3 那条主线

内存控制器原本在北桥芯片上,现在整个被搬进了 CPU 芯片。原因很直接:内存是最需要带宽、最怕延迟的部件,搬进 CPU 省掉的是一次完整的跨芯片往返。

注意这不改变 MAR/MDR 的逻辑归属——上面①说的”逻辑属主存、物理在 CPU”,正是这次集成的结果。两个问题在这里合流了。


③ 南桥是什么 → 6.1.3 讲透

老主板上有两颗芯片:

挂什么速率
北桥(离 CPU 近)内存控制器、显卡接口高
南桥(离 CPU 远)硬盘、USB、网卡、声卡、BIOS低

北桥被 CPU 吃掉了,南桥还在(Intel 叫 PCH,AMD 叫芯片组)。被吃掉的是北桥而不是南桥,因为北桥挂的是最急的设备;南桥挂的都是慢设备,多一跳无所谓。

所以修电脑视频里说的”南桥”,就是主板上现在还剩的那颗芯片组——硬盘、USB、网口都从它走,它被”干穿”意味着这些接口全废,但 CPU 和内存往往还是好的。这个现象本身正好印证了南北桥的分工。


这条提问的三问跨了三章,恰好说明第 1 章是什么:它把全书的零件先摆一遍,每个零件的细节在后面各章。1.2.2 只负责让你知道”主存里有 MAR 和 MDR 这两个寄存器”,至于它们的位数怎么算(3.2.3)、内存控制器搬到哪去了(6.1.3),是后面的事。

运算器:ALU 加四个寄存器

部件全称干什么
ALU算术逻辑单元真正做运算的电路(2.2.1)
ACC累加器存操作数和运算结果
MQ乘商寄存器乘法存乘数、除法存商
X操作数寄存器存另一个操作数
PSW程序状态字寄存器存标志位:溢出 OF、符号 SF、零 ZF、进位 CF

乘除法中三个寄存器的分工是考点,完整推导在 2.2.4:

运算ACCMQX
加/减被加数 → 和——加数
乘部分积 → 乘积高位乘数 → 乘积低位被乘数
除被除数 → 余数→ 商除数

PSW 是唯一会跨章反复出现的:2.2.3 用它判溢出,4.3.2 用它做条件转移,5.5.3 中断隐指令要把它和 PC 一起保存。

控制器:CU + IR + PC

部件干什么位数由什么决定
PC 程序计数器存下一条指令的地址;有自动加 1 的功能存储单元的个数(与 MAR 相同)
IR 指令寄存器存当前正在执行的指令指令字长
CU 控制单元分析指令、发出控制信号——

三点边界:

第一,PC 存的是”下一条”还是”当前这条”? ——取指开始时,PC 里是本次要取的指令地址;取指完成后立刻 +1,于是变成下一条的地址。 所以两种说法都对,只是时刻不同。题目问”取指结束后 PC 的内容”,答的是下一条。

第二,PC 的位数与 MAR 相同,IR 的位数与指令字长相同。 这两个”位数由什么决定”是送分题。

第三,PC 有自动加 1 的功能,IR 没有。 “PC 是一个计数器”这句话是字面意义上的。

五大部件的信息流

flowchart LR
    IN["输入设备"] -->|"数据"| MEM["主存储器"]
    MEM -->|"数据"| ALU["运算器"]
    ALU -->|"结果"| MEM
    MEM -->|"输出数据"| OUT["输出设备"]
    MEM -.->|"指令"| CU["控制器"]
    CU -.->|"控制信号"| IN
    CU -.->|"控制信号"| MEM
    CU -.->|"控制信号"| ALU
    CU -.->|"控制信号"| OUT

    classDef ctrl fill:#ffcdd2,stroke:#b71c1c,stroke-width:2px
    classDef data fill:#c8e6c9,stroke:#1b5e20
    classDef mem fill:#fff3e0,stroke:#e65100
    class CU ctrl
    class IN,OUT,ALU data
    class MEM mem

实线是数据流,虚线是控制流。 控制器只发控制信号,不碰数据——这条分工在 5.1.2 会被写成 CPU 的正式结构。

边界

说法判断理由
”指令和数据在存储器中地位同等,所以 CPU 无法区分”❌靠取指周期/取数周期区分
”现代计算机仍以运算器为中心”❌以存储器为中心
”MAR、MDR 属于 CPU”⚠️逻辑属主存,物理在 CPU;考位数不考位置
”PC 存放当前正在执行的指令地址”⚠️取指前是,取指后已 +1;看题目问的时刻
”IR 的位数等于存储字长”❌等于指令字长
”PC 的位数等于指令字长”❌等于 MAR 位数
”存储单元和存储元是一回事”❌存储元存 1 位,存储单元有一个地址
”运算器只有 ALU”❌还有 ACC、MQ、X、PSW
”控制器负责搬运数据”❌只发控制信号

对照速查

主存容量位数位数
寄存器在哪位数取决于
MAR主存(物理在 CPU)存储单元个数
MDR主存(物理在 CPU)存储字长
PC控制器存储单元个数(同 MAR)
IR控制器指令字长
ACC / MQ / X运算器机器字长
三层名词含义
存储元存 1 位
存储单元有 1 个地址
存储体全部单元

考点

  • 冯·诺依曼五个特点,尤其”以运算器为中心”已变为”以存储器为中心”。
  • MAR / MDR / PC / IR 的位数由什么决定——年年考。
  • 主存容量公式。
  • 乘除运算中 ACC / MQ / X 的分工。
  • PC 在取指前后的内容。

链接