计算机组成原理
程序要运行,处理器需要取到指令和数据、完成运算,并把结果写回寄存器或内存。
一句话: 程序要运行,处理器需要取到指令和数据、完成运算,并把结果写回寄存器或内存。
本章导航#
系统结构 · 指令执行 · 存储层次 · I/O 与互连 · 性能
学习目标#
- 建立 CPU、内存、I/O 设备协作的整体模型。
- 理解寄存器、Cache、RAM、存储设备之间的层次关系。
- 用指令数、CPI 和时钟频率估算 CPU 时间,并知道其局限。
1. 计算机系统由什么组成#
应用程序 / 操作系统 / 编译器 ↕ 指令、数据、系统调用处理器(控制逻辑、运算单元、寄存器、缓存) ↕ 内存访问与 I/O 互连主存(RAM) 设备控制器(磁盘、网卡、显示器等)常见的冯·诺依曼模型把指令和数据存放在可读写的存储器中,处理器按程序顺序取指执行。现代系统也会在不同层次采用分离的指令/数据缓存或专用设备;“五大部件”是教学模型,不是所有芯片内部的固定框图。
2. 处理器怎样执行指令#
处理器围绕程序计数器 PC循环工作:
- 取出 PC 指向的指令;
- 译码得到操作、源寄存器、目的寄存器和立即数;
- 执行算术/逻辑运算,或发起 load/store/控制转移;
- 写回结果,并选择顺序地址或分支/跳转目标作为下一 PC。
在概念图中,控制器决定数据如何流动,ALU完成整数运算与比较,寄存器保存正在处理的值。真实 CPU 可能把这些模块流水化或拆成多级;这是微架构实现,不改变 ISA 给软件的可见结果。
3. 存储层次与 Cache#
| 层级 | 典型容量/速度关系 | 用途 |
|---|---|---|
| 寄存器 | 最小、访问最快 | 当前指令直接使用的操作数 |
| L1/L2/L3 Cache | 小于主存、通常更快 | 缓存近期内存数据/指令 |
| RAM | 容量较大、断电后数据消失 | 正在运行的程序与数据 |
| SSD/HDD | 容量大、非易失、访问延迟更高 | 文件与持久数据 |
Cache 利用两种常见规律:
- 时间局部性: 最近访问的值很可能很快再次访问,例如循环变量。
- 空间局部性: 某地址附近的数据很可能随后被访问,例如顺序扫描数组。
for (int i = 0; i < n; i++) { sum += a[i]; // 连续访问数组,通常有较好的空间局部性}注意: Cache 命中/未命中、写回策略和一致性会影响性能;程序看到的内存语义由架构和系统共同约束。
4. 总线互连与输入输出#
传统教学图把连接部件的通路分为地址、数据、控制信号。现代芯片通常使用分层互连、片上网络或专用总线协议,但基本问题仍是:谁访问哪个地址、传输什么数据、进行读/写还是发出中断?
外设可通过设备控制器与 CPU/内存通信。常见方式包括:
- 内存映射 I/O(MMIO): 把设备寄存器放在地址空间,通过 load/store 访问。
- 中断: 设备通知处理器有事件需要处理。
- DMA: 设备可在受控条件下直接与内存交换数据。
5. 性能怎么看#
常用近似关系:
CPU 时间 = 指令数 × 平均 CPI ÷ 时钟频率
其中 CPI(Cycles Per Instruction)表示平均每条指令消耗的周期数。指令数受程序与编译影响,CPI 受微架构和工作负载影响,频率也不是“每秒执行的指令条数”。
MIPS(每秒百万条指令)容易受指令集和程序影响,不能单独用于公平比较不同处理器。比较时应使用相同任务、相同输入、可复现的计时方法,并同时考虑吞吐量、延迟、功耗和正确性。
6. 与 RISC-V 的关系#
RISC-V 描述处理器对软件公开的指令与状态;计算机组成说明这些指令如何在某个处理器中被实现。学习时可以依次追问:
- 指令编码表示什么操作?
- 哪些寄存器或内存位置参与?
- 处理器怎样完成运算和地址转换?
- 结果如何写回,或为何触发异常?
核心结论: 寄存器、Cache、主存和设备是不同层次;指令执行不是孤立的“算一个数”,而是处理器与整个存储/I/O系统的协作。
下一篇: 02 · 二进制与补码 → 03 · RISC-V 寄存器