当你写下 a = b + c,计算机并不是“直接理解了这句话”。数值需要用位表示,程序需要转换为机器能够执行的指令,CPU 需要从存储系统取得指令和数据,再通过运算部件、寄存器与控制逻辑完成操作。组成原理研究的就是这些部件怎样工作、怎样连接,以及整体性能受到什么限制。
这门课的核心不是认全硬件名词,而是形成整机视角:**数据怎样表示,指令怎样描述操作,CPU 怎样执行,数据怎样在不同存储层次之间流动。**在 408 中,你需要把这种理解用于计算和分析,甚至联系 C 语言程序讨论软硬件协作。
本科目分值为 45 分,占 30%;常见题型是 11 道选择题、2 道综合应用题。不能把某一类 Cache、流水线或指令题当作未来试卷的固定题目。
学之前,先准备什么?
建议熟悉二进制、十六进制、位运算、数量级与单位换算,能读懂简单 C 程序,区分值、地址、变量类型。不了解门电路时,可以先补布尔运算和最基本的组合逻辑,不必把整门数字电路学完才开始。
特别需要建立“写前提”的习惯:机器字长是多少?按字节还是按字编址?题中的容量单位怎样约定?地址是虚拟地址还是物理地址?带宽说的是总线传输能力,还是设备实际吞吐?没有这些前提,公式即使背对,也可能代错。
知识地图:围绕指令与数据流动组织
| 大纲模块 | 内容骨架 | 学完要能完成的任务 | 本站章节 |
|---|---|---|---|
| 计算机系统概述 | 系统层次、存储程序、程序转换与执行;主频、CPI、执行时间等 | 画出系统层次,比较性能指标,说明一个指标为什么不能代表全部性能 | 计算机系统概述 |
| 数据的表示和运算 | 数制与编码、整数、ALU、补码与标志位、乘除、IEEE 754 浮点 | 在给定位宽下计算数值范围、结果和标志;区分数值与位模式 | 数据的表示和运算 |
| 存储器层次结构 | SRAM、DRAM、Flash、主存、外存、Cache、虚拟存储器、TLB | 划分地址字段,追踪命中与缺失,计算题目模型中的访问代价 | 存储器层次结构 |
| 指令系统 | 指令格式、寻址、对齐与大小端、CISC/RISC、C 与机器级表示 | 求有效地址;理解分支、循环、调用与指令的关系 | 指令系统 |
| 中央处理器 | 指令执行、数据通路、控制器、异常中断、流水线与多处理器概念 | 跟踪一条指令的数据流;画流水线时序并处理题设冒险 | 中央处理器 |
| 总线和输入输出系统 | 总线组成与事务;接口、端口;查询、中断、DMA | 区分参与部件与传输过程,分析 CPU 参与程度和性能开销 | 总线和输入输出系统 |
考试大纲将“总线和输入输出系统”合为一个一级模块,知识点目录分成两章;本页只做对应说明。
怎样学:把每一道题变成一张机器运行图
建议采用“画系统 → 标条件 → 写关系 → 代数值 → 检查单位”的顺序。
学习存储时,先画寄存器、Cache、主存和外存分别在哪里,再把访问路径放到图上。学习指令时,先确定操作数在哪里、地址怎样得到,再看执行中哪些部件工作。学习流水线时,先画时空图,说明题设是否允许转发、何时判定分支和怎样处理冲突。
计算题不要只留下一个结果。至少写出使用关系的含义,例如:CPU 时间与指令条数、平均 CPI、时钟周期之间如何联系;Cache 平均访问时间的公式中,缺失代价是否已经包含首次查询耗时。采用哪个模型,取决于题目约定。
强化时可阅读 CS:APP 的数据表示、机器级程序、存储层次、异常控制流等相关章节,理解“程序与系统”的联系。
与操作系统最容易混淆的连接点
**Cache 与虚拟内存关注的映射不同。**前者涉及主存数据在高速缓冲中的存放,后者涉及进程地址空间及地址转换。题目有时把两者放在一起,需要逐层画出地址与访问过程,而不是看到“存储”就套同一张表。
**TLB 未命中不等于缺页。**TLB 是地址转换信息的缓存;其中没有相应信息,还可能通过页表找到已驻留主存的页面。是否缺页要继续看页表等相关条件。
**中断、异常与系统调用要联系执行过程。**组成原理侧重硬件检测、响应与控制;操作系统侧重处理程序、资源管理和上下文。两门课从不同层次解释同一台机器。
分阶段训练
基础阶段不要用超大计算掩盖概念。用较小字长和简单地址先算清楚,再扩展到题目参数;每章保留一张概念图和一张单位表。
强化阶段把内容按“数据表示—指令—执行—访存—I/O”串起来,做跨章节分析。错题分成位宽错误、地址错误、时间单位错误、性能模型错误和机制理解错误,比按题号抄解析更有用。
真题阶段训练完整书面步骤。遇到不会的长题,先写已知条件、画结构并完成可独立处理的小问;不要因一个中间结果不确定就跳过整题,也不要把猜测写成没有条件的结论。
入门自测与答案
**问题 1:**采用 32 位字节编址地址、块大小 64 字节、直接映射 Cache 有 256 行时,块内偏移和行索引各需要多少位?
参考思路:偏移 6 位,行索引 8 位;在此题给定模型下,标记为剩余 18 位。先说明编址单位,再取以 2 为底的位数。
**问题 2:**两台计算机中,主频更高的一台是否一定执行某个程序更快?
参考思路:不一定,还要考虑程序实际执行的指令数量、平均 CPI 等因素;比较应针对同一任务和可比条件。
**问题 3:**发生 TLB 未命中,是否必须从磁盘把页面读入内存?
参考思路:不一定。需要继续查看页面是否已经在内存中,不能把地址转换缓存未命中直接等同于缺页。
完成本科目的最低验收
参考资料
《深入理解计算机系统》(Randal E. Bryant、David R. O'Hallaron)作者网站,可选读数据表示、机器级程序、存储层次与异常控制流相关章节。