1、学习目标

第一章先建立整机视角:计算机不是单个 CPU,也不是单个程序,而是硬件、指令、数据、存储、I/O 和软件层次共同组成的系统。

模块 要掌握的内容
计算机概念 自动、高速、可编程、通用信息处理机器
冯诺依曼体系 存储程序、二进制、五大部件
系统层次 硬件、微体系结构、指令系统、操作系统、语言与应用
硬件组织 运算器、控制器、存储器、输入设备、输出设备
性能指标 字长、主频、CPI、MIPS、带宽、吞吐率

2、计算机是什么

从组成原理角度看,计算机是能够自动执行程序的信息处理系统。它的关键特点是:

  1. 信息用二进制表示。
  2. 程序和数据都存放在存储器中。
  3. 控制器按指令序列自动取指和执行。
  4. 运算器完成算术与逻辑运算。
  5. 输入输出设备负责与外部世界交互。

这门课关心的不是“会不会使用计算机”,而是“机器如何把指令一步步执行出来”。

3、冯诺依曼体系

冯诺依曼体系的核心是存储程序思想:

1
程序以二进制形式存放在存储器中,CPU 自动按地址取指并执行。

五大部件:

部件 功能
运算器 执行算术和逻辑运算
控制器 取指、译码、产生控制信号
存储器 存放程序和数据
输入设备 把外部信息送入计算机
输出设备 把处理结果送出计算机

现代计算机已经有流水线、多核、Cache、虚拟存储等复杂结构,但“存储程序 + 指令驱动”的基本思想仍然是主线。

4、硬件系统结构

最简单的硬件关系可以理解为:

1
CPU <-> 主存 <-> I/O 子系统 <-> 外设

CPU 内部又可以拆成:

子部件 说明
ALU 算术逻辑单元
寄存器组 临时保存操作数、地址和结果
控制单元 产生时序和控制信号
PC 保存下一条指令地址
IR 保存当前指令

学习时要把“指令流”和“数据流”分清楚:指令告诉机器做什么,数据是被处理的对象。

5、计算机系统层次

计算机系统可以分层理解:

层次 说明
数字逻辑层 门电路、触发器、组合逻辑、时序逻辑
微体系结构层 数据通路、控制器、流水线
指令系统层 机器指令、寄存器、寻址方式
操作系统层 进程、内存、文件、I/O 抽象
汇编/语言层 汇编、C/C++、编译器
应用层 具体软件和服务

组成原理主要位于数字逻辑之上、操作系统之下。它解释高级语言程序最终如何落到指令和硬件部件上。

6、软硬件逻辑等价性

很多功能既可以用硬件实现,也可以用软件实现:

功能 硬件实现 软件实现
乘法 乘法器 加法循环或库函数
浮点运算 FPU 软件模拟
加密 专用加速器 通用 CPU 指令
图像处理 GPU CPU 程序

硬件快但成本高、灵活性低;软件灵活但可能较慢。计算机系统设计本质上一直在做这种权衡。

7、性能评价指标

常见指标:

指标 含义
字长 CPU 一次能处理的二进制位数
主频 时钟频率,单位 Hz
CPI 每条指令平均需要多少时钟周期
IPC 每周期平均执行多少条指令
MIPS 每秒百万条指令
FLOPS 每秒浮点运算次数
带宽 单位时间传输的数据量
延迟 完成一次操作所需时间
吞吐率 单位时间完成的任务数量

CPU 执行时间常用公式:

1
CPU Time = Instruction Count * CPI * Clock Cycle Time

或者:

1
CPU Time = Instruction Count * CPI / Clock Rate

这条公式很重要,因为性能不是只由主频决定。指令条数、CPI、编译器、Cache 命中率都会影响最终时间。

8、带宽与容量

存储和 I/O 常用两类指标:

指标 关注点
容量 能存多少数据
带宽 单位时间能传多少数据
延迟 第一个数据多久能到
访问时间 一次读写完整耗时

例子:

1
2
3
磁盘容量大,但延迟高;
Cache 容量小,但访问快;
内存介于二者之间。

这也是后面存储层次结构的基础。

9、复盘时的整机执行链

可以用一条简单链路复盘整机:

1
2
3
4
5
6
7
8
9
程序加载到内存
PC 给出指令地址
CPU 取指
控制器译码
寄存器取操作数
ALU 运算
访问存储器或 I/O
写回结果
PC 更新到下一条指令

后面的 CPU、存储、I/O 都是在展开这条链路中的某一段。

10、易错点

易错点 修正
主频越高性能一定越好 还要看 CPI、指令数和存储系统
把 CPU 当作整台计算机 计算机还包括存储和 I/O
混淆延迟和带宽 延迟是单次等待,带宽是单位时间吞吐
只背五大部件 要能说出指令如何流经这些部件
软件和硬件割裂 很多功能有软硬件两种实现

11、复盘清单

检查项 状态
能解释存储程序思想 待复盘
能画出冯诺依曼五大部件 待复盘
能说明计算机系统层次结构 待复盘
能写出 CPU 时间公式 待复盘
能区分延迟、带宽和吞吐率 待复盘
能按执行链描述一条指令的生命周期 待复盘