1.2 CPU、存储器与输入/输出
一台完整的微型计算机是一个团队:CPU 负责变换与协调,存储器负责保存,输入负责观察,输出负责行动或报告。任何一个成员都不能取代其他所有成员。
图中的箭头表示一次传送中的角色,并不是所有物理连接都永远单向。键盘通常提供数据,显示器通常接收结果,而存储器既要提供信息,也要接收信息。
CPU:执行与协调
CPU 按照指令工作。它内部包含完成运算的电路、称为寄存器的小型高速存储位置,以及组织各步骤的控制逻辑。
目前可以先使用一个简单模型:
- CPU 读取一条指令;
- 取得指令所需的数据;
- 执行某种操作;
- 保存或输出结果。
CPU 不会凭空知道温度、按下的按键或程序内容。这些值必须通过输入或存储器到达 CPU。
存储器:在有地址的位置保存比特
存储器可以看成一组带编号的位置。标识位置的编号叫作地址。每个位置保存一个比特模式,而这个模式的含义取决于系统如何使用它。
同一个存储系统可以保存:
- 指令:告诉 CPU 应执行什么操作;
- 数据:表示数字、字符、传感器读数、图像或中间结果。
观察下面三个位置:
| 地址 | 内容 | 可能的含义 |
|---|---|---|
| 20 | 00000101 | 指令码或数字 5 |
| 21 | 00000011 | 操作数或数字 3 |
| 22 | 00001000 | 结果或数字 8 |
比特本身不会贴着“指令”或“温度”的标签。所在位置、当前指令以及程序规则共同赋予它含义。
以后会反复遇到两类存储器概念:
- 易失性存储器在断电后失去内容;
- 非易失性存储器不需要持续供电也能保留内容。
现在只需抓住更基本的思想:存储器让系统能够在信息产生的瞬间之后继续使用它。
输入和输出连接物理世界与数字世界
输入设备把外部事件转换为计算机可以使用的信息;输出设备把计算结果转换为可观察的动作。
| 物理事件 | 系统角色 | 数字信息 |
|---|---|---|
| 按下一个按键 | 输入 | 键码 |
| 温度改变 | 输入 | 测量值 |
| 屏幕出现数字 | 输出 | 像素或字符命令 |
| 风扇启动 | 输出 | 电机控制信号 |
有些外设同时承担两种角色。触摸屏既显示像素也感知触摸;网络接口既接收也发送消息。应当判断当前这一次传送的方向,而不是只看设备名称。
实验 1——亲自安排每次传送
先选择任务,再逐次安排数据传送。实验会按顺序检查路线,因此能够指出依赖关系从哪一步开始出错。
请完成全部三个任务。注意,“保存”要求发生 CPU 到存储器的传送;仅仅显示一个值则不一定需要保存它。
示例:显示已保存的目标值
假设恒温器需要显示已经保存的目标温度。
1. CPU 请求目标温度地址中的值。 2. 存储器把保存的比特发送给 CPU。 3. CPU 解释或格式化这个数字。 4. CPU 把显示数据发送给输出设备。
因此,最关键的信息路径是:
存储器 → CPU → 输出如果用户用按键修改目标值,完整过程可能是:
输入 → CPU → 存储器
└→ 输出CPU 位于路径中,是因为它要应用程序规则。只有在需要读取或长期保留数值时,存储器才必须出现在路径中。
系统会因依赖缺失而失败
从部件与依赖关系出发,故障更容易定位。
| 现象 | 可能损坏的依赖 |
|---|---|
| 正确程序断电后消失 | 非易失性存储或程序装载路径 |
| 按键有反应,但看不到任何内容 | 输出路径或显示器 |
| 可以显示旧读数,但新读数始终不出现 | 输入设备或输入路径 |
| 输入与显示都工作,但结果毫无意义 | CPU 执行、程序或工作数据 |
一个现象很少能唯一确定物理原因。诊断应先找出仍然正常的功能,因为每个成功行为都会确认若干依赖仍然有效。
例如,如果复位后还能显示已保存的欢迎信息,那么至少一部分 CPU 执行、存储器读取和输出功能正在工作。这个证据可以缩小排查范围。
实验 2——通过改变系统来诊断
在维修诊所中,你可以断开或重新连接部件,实时依赖表会预测症状。请用最小的修复恢复全部必要依赖。
不要一开始就把所有部件全部打开。先预测一个部件,测试它,并把症状的变化当作证据。
检查点
面对任何简单微型计算机,你现在都应能回答四个问题:
1. 什么信息从哪个输入进入? 2. 存储器必须保留哪些指令与数据? 3. CPU 必须完成什么变换或决策? 4. 什么结果从哪个输出离开?
这些角色解释了各部件贡献的内容。下一节将沿着存储程序的指令周期,解释 CPU 在什么时刻读取和执行指令。