☰
计算机组成原理期末复习:Cache映射、流水线与补码浮点计算解析
2026/9/30 5:05:00 网站建设 项目流程

每年期末季,图书馆靠窗那排座位上,总有人把《计算机组成原理》摊开到第三章就再也没翻过去。这门课在多数院校是 64 到 80 学时,教材六百多页,覆盖数据表示、运算器、存储系统、指令系统、中央处理器、总线、输入输出七大块,最后压缩成一张两小时闭卷的卷子。选择题、填空题、简答题、计算题、设计题五种题型全上,计算量还不小。我自己做过几轮课程辅导,也帮人整理过计算机组成原理期末的复习题和答案,最深的体会是:这门课丢分很少是因为"题难",多数是因为答题语言不对、公式代入不写、考点权重判断错。这篇内容写给正在准备计算机组成原理期末考试的人,也写给想把这门课的底层逻辑真正理顺的人。我不打算只丢给你一堆干巴巴的答案,而是把每类题背后的推导链条、参数怎么来、步骤怎么写才能让阅卷人给分,逐块拆开讲。

1. 先把卷面结构摸清楚:考点权重与题型地图

备考最忌讳的一件事,就是从头到尾平均用力。教材七章内容,考卷上从来不是平均分配的,先把这一层看透,复习效率能翻一倍。

1.1 从课程骨架倒推分值分布

我统计过几个学校近七八年的卷子,大致的权重区间是这样的:数据表示与运算占 15% 到 20%,存储系统占 18% 到 25%,指令系统占 12% 到 18%,CPU 与流水线占 20% 到 28%,总线与 I/O 占 12% 到 18%,剩下的零散考点(性能指标、多级层次结构概念)散落在选择填空里。这个分布不是巧合,因为存储系统和流水线是这门课里既有工程意义又有计算量支撑的两块,出题人容易出大题,也容易区分层次。

真正决定及格与优秀的,通常是三道大题:一道 Cache 映射加命中率计算,一道流水线时空图加性能指标,一道指令格式或微操作序列设计。这三道题加起来往往 35 到 45 分,拿下来基本就稳了。反过来,运算器内部进位链的细节、总线仲裁的具体电路,通常只出小题,性价比低,不要死磕。

复习顺序我一般建议按"计算题优先"来排:存储系统、数据表示、流水线、指令系统,这四块先啃透,其余的概念性章节放在最后一周集中背。这个顺序的合理性在于,计算题有明确的解题模板,练三五道就能形成肌肉记忆,而概念题背早了会忘。

1.2 五类题型的答题语言差异

很多人复习时把知识点背得滚瓜烂熟,卷面得分却不高,问题出在答题语言不匹配题型。

选择题和填空题考察的是概念的精确边界。比如"Cache 与主存之间的地址映射由(硬件)完成",写成"软件"就错,写成"操作系统"也错。这类题没有商量余地,靠的是对术语的准确定位。

简答题考察的是分点能力。阅卷是按点给分的,一段话写成一坨,即使意思对了也可能漏点。我习惯的做法是先在草稿纸上写出关键词,再逐条展开,每条一句话,前面加序号。比如"简述中断处理的全过程",就老老实实列成:中断请求、中断判优、中断响应、保护现场、执行服务程序、恢复现场、中断返回,七点写全,基本满分。

计算题考察的是过程完整性。这部分我要多说一句:公式必须写出来,代入的数值必须写出来,单位必须带上,最后结果下面最好画条线。很多同学直接甩一个答案,中间过程全省,阅卷人想给分都找不到依据。哪怕算错了,公式和思路分通常也能捞回一半。

设计题考察的是规范性。指令格式图要画格子,位数要标清楚;数据通路的微操作序列要按节拍分周期写;逻辑表达式要用约定的符号。

2. 数据表示与运算:补码、溢出和浮点数的手算流程

这一章是整门课的地基,后面运算器、指令、浮点运算全都要用到它。它的特点是公式不多,但细节极多,一不留神就掉坑。

2.1 真值、原码、反码、补码的互转套路

正数的原码、反码、补码三者完全相同,这个不用记,理解就行。负数才是需要记忆的部分,而且我强烈建议只记补码,因为实际运算全用补码,原码反码只在概念题里出现。

负数的补码有一种口算法,比"反码加一"更快也更不容易错:从最低位往左看,找到第一个 1,这个 1 和它右边的所有位保持不变,左边所有位按位取反,符号位固定为 1。

拿 -1011(真值为 -11)举例,用 8 位表示。先写原码:符号位 1,数值位 0001011,得到 10001011。反码:除符号位外按位取反,得到 11110100。补码:反码加一,得到 11110101。用口算法验证:真值的绝对值 0001011,从右往左第一个 1 在最低位,保留它和它右边(没有),左边全部取反得 1111010,加上符号位 1,得到 11110101,一致。再验算一下数值:11110101 作为无符号数是 245,245 减 256 等于 -11,正确。

反过来,已知补码求真值,套路是两个:如果符号位是 0,直接读;如果符号位是 1,就"取反加一,再加负号",或者直接用"无符号值减 2 的 n 次方"。

注意:补码表示的范围是不对称的。8 位补码能表示 -128 到 +127,负数比正数多一个。这个多出来的 -128 是必考点,因为它没有对应的原码和反码,很多判断题就卡在这里。

2.2 定点加减运算与溢出判断

补码加法的规则很简单:符号位一起参与运算,直接相加,结果仍然是补码。减法转成加负数补码。真正容易错的是溢出判断,这里有两套方法,卷面上看题目给的条件选。

双符号位法(也叫变形补码)最直观:把符号位扩展成两位,正数用 00,负数用 11。运算结果如果两位符号位是 00,说明结果为正且不溢出;是 11,说明结果为负且不溢出;是 01,说明发生上溢(两个正数相加超出范围);是 10,说明发生下溢。

举个例子,8 位定点整数,x 等于 +100,y 等于 +100。100 的补码是 01100100。写成双符号位是 00 1100100。相加:00 1100100 加 00 1100100 等于 01 1001000。两位符号位变成 01,判定为上溢,两个正数相加得出了超出 +127 的结果。

单符号位法用进位来判断:设符号位的进位为 C0(也就是最高位产生的进位),数值最高位的进位为 C1,那么 C0 异或 C1 等于 1 就溢出,等于 0 就不溢出。上例中,数值最高位相加产生进位 C1 等于 1,符号位相加再加上这个进位又产生进位 C0 等于 0,异或得 1,同样判定溢出。

实操心得:考试里如果题目没指定用哪种方法,我建议用双符号位法,因为它的判断更像"查表",出错概率低,而且写在卷面上阅卷人一眼就能看懂你的判断依据。单符号位法的进位容易在草稿上记混。

2.3 IEEE 754 浮点数的手算三步法

浮点数几乎是每年必考,单精度格式是 1 位符号、8 位阶码、23 位尾数,阶码用移码表示,偏移量是 127;双精度是 1 位符号、11 位阶码、52 位尾数,偏移量 1023。尾数采用隐含最高位 1 的规格化表示,这一位不占空间,但还原的时候必须补上。

手算的时候我固定走三步:第一步,把十进制数转成二进制,并规格化成 1.xxxx 乘以 2 的 e 次方;第二步,算阶码字段,等于 e 加偏移量,转成二进制;第三步,把规格化后小数点右边的位依次填入尾数,不足补 0。

拿 -12.375 举例。第一步,整数部分 12 是 1100,小数部分 0.375 等于 0.25 加 0.125,也就是二进制的 .011,合并得到 1100.011,小数点左移三位规格化为 1.100011 乘以 2 的 3 次方。第二步,阶码等于 3 加 127 等于 130,二进制是 10000010。第三步,尾数取小数点后的 100011,后面补 17 个 0 填满 23 位。

拼起来就是:符号位 1,阶码 10000010,尾数 10001100000000000000000。按四位一组转成十六进制是 1100 0001 0100 0110 0000 0000 0000 0000,也就是 C1460000。

反向还原的时候最容易漏掉隐含的 1。看到阶码 10000010,先减 127 得到 3,看到尾数 100011,一定要在前面补一个 1 变成 1.100011,再乘 2 的 3 次方,才是真正的数值。这一步漏了,答案会差一倍以上,而且自己还不容易发现。

3. 存储系统:Cache 映射、命中率与主存扩展的完整算路

存储系统是整张卷子里分值最高、也最容易拿满的一块,因为它的题型极其固定,公式就那几个,练熟了就是送分题。

3.1 三种映射方式的地址字段划分

无论哪种映射,主存地址本质上都是被切成三段:标记、位置索引、块内地址。区别只在于中间那一段叫什么、有多少位。

直接映射里,中间段叫行号,行号位数等于以 2 为底 Cache 行数的对数,地址划分是"标记 + 行号 + 块内地址"。它的特点是硬件简单,但冲突多,因为每一块主存只能放进唯一一行。

全相联映射里,中间段消失了,地址划分是"标记 + 块内地址"。任何主存块可以放到任意一行,冲突最少,但查找时要和所有标记并行比较,硬件成本高,只适合小容量 Cache。

组相联映射是前两者的折中,中间段叫组号,位数等于以 2 为底组数的对数,地址划分是"标记 + 组号 + 块内地址"。组间直接映射,组内全相联。

举个例子,主存地址 32 位,块大小 64 字节,Cache 数据区容量 32KB,采用 4 路组相联。块内地址位数等于 log2(64) 等于 6 位。总行数等于 32KB 除以 64B 等于 512 行。4 路组相联说明每组 4 行,所以组数等于 512 除以 4 等于 128 组,组号位数等于 log2(128) 等于 7 位。标记位数等于 32 减 7 减 6 等于 19 位。

这套算法里,唯一容易错的地方是"Cache 容量"指的到底是数据区还是包括标记在内的总容量。绝大多数题目给的容量是数据区,按数据区算就行;但如果题目特意说明"包含标记和有效位",那就要先扣除每个块附加的标记位和有效位再算行数。这个坑我见过太多人踩。

3.2 命中率与平均访问时间的计算

命中率计算的题型一般是给一段访问序列,让你数命中次数。这里的关键是先把"块"的概念落实,因为一次不命中会把整块调入。

举个完整例子。块大小为 4 个字,Cache 共 4 行,直接映射。那么块号就是字地址除以 4 取整,块号对 4 取模得到行号。访问序列是 0、1、2、3、4、1、2、3、4、5、6、7、4、5、6、7,共 16 次访问。

逐条推:访问 0,属于块 0,映射到第 0 行,未命中,调入整块(含字 0 到 3)。访问 1、2、3,都属于块 0,全部命中。访问 4,属于块 1,映射到第 1 行,未命中,调入。访问 1、2、3,仍在第 0 行,命中。访问 4、5,属于块 1,命中。访问 6、7,属于块 2,映射到第 2 行,未命中,调入。访问 4(命中)、5(命中)、6(命中)、7(命中)。

统计下来不命中 3 次,命中 13 次,命中率等于 13 除以 16,约 81.25%。

平均访问时间的公式要分清两种情形。如果 Cache 和主存是同时访问(并行查找),那么 Ta 等于 H 乘以 Tc 加(1 减 H)乘以 Tm。如果是不命中时才去访问主存(串行),那么 Ta 等于 Tc 加(1 减 H)乘以 Tm。前者是后者的下界,很多同学公式混用,结果差出一大截。

还有一种考法是算访问效率,公式是 e 等于 Tc 除以 Ta。这个指标衡量的是实际访问时间有多接近理想的 Cache 访问时间,数值越大越好。

注意:题目给的主存存取时间有时是"存取周期",有时是"访问时间",两者不完全一样。存取周期通常比访问时间略长,因为要算上恢复时间。做计算题时先看清楚题目用词,不要想当然。

3.3 主存容量的芯片数量与地址线计算

主存扩展题的解法极其机械,就两个步骤:位扩展算数据位需求,字扩展算容量需求,两者相乘就是总片数。

比如用 1M 乘 8 位的存储芯片,构成 4M 乘 32 位的主存,需要多少片?位方向,32 除 8 等于 4 片组成一组;字方向,4M 除 1M 等于 4 组;总共 4 乘 4 等于 16 片。

地址线的问题要分清两组数字:总主存的地址线是 log2(4M) 等于 22 根,单片芯片的地址线是 log2(1M) 等于 20 根,多出来的 2 根用于片选译码。数据线是 32 根。如果题目再问需要几根片选信号线,按字方向的组数算,4 组需要 2 位译码输出 4 个片选信号。

还有一种变体是给地址范围让你判断用了多少芯片,比如"某主存地址空间为 0000H 到 3FFFH",先算出容量是 16K,再按位宽换算片数。这类题的处理逻辑和上面完全一致。

4. 指令系统与 CPU 数据通路:从寻址方式到微操作序列

这一块的概念密度大,但出题方式很稳定:要么考寻址方式的有效地址计算,要么考指令格式设计,要么考数据通路的微操作序列。

4.1 寻址方式与有效地址

寻址方式的本质是回答一个问题:操作数到底在哪里。梳理成一句话就是——立即寻址的操作数就在指令里,直接寻址的操作数在主存里且地址就是形式地址 A,间接寻址的操作数在主存里且地址存在 A 指向的单元里,寄存器寻址的操作数在寄存器里,寄存器间接寻址的操作数在主存里且地址在寄存器里,相对寻址的有效地址是 PC 加 A,基址寻址是基址寄存器加 A,变址寻址是变址寄存器加 A。

计算题里最容易错的是相对寻址。关键在于 PC 的值指的是哪一条指令的地址。绝大多数教材约定 PC 在取指完成后已经指向下一条指令,所以计算时要用"当前指令地址加指令长度",而不是当前指令地址本身。

举例,某指令存放在地址 2000H,长度为 2 字节,采用相对寻址,形式地址字段为 30H(补码表示的偏移量),那么有效地址等于 2002H 加 0030H 等于 2032H。如果形式地址是负数,比如 F0H,补码表示的是 -16,那么有效地址就是 2002H 减 0010H 等于 1FF2H。这一步的符号扩展特别容易漏,形式地址通常只有 8 位,加到 16 位的 PC 上必须先把符号位扩展到高位。

基址寻址和变址寻址的区别也常考:基址寻址主要面向操作系统,基址寄存器的内容由系统给定,指令里的 A 是偏移,程序运行中基址一般不变,适合程序重定位;变址寻址面向用户,变址寄存器的内容用户可改,A 是基准,适合数组遍历。理解了用途,选择题就不会选反。

4.2 数据通路与指令周期的微操作

微操作序列的写法有一条铁律:按机器周期分段,每段内按节拍写,每个微操作写成"源到目的"的形式,涉及主存访问的必须带上读或写控制信号。

取指周期的标准写法是:PC 送 MAR,发出读命令,主存内容送 MDR,MDR 送 IR,同时 PC 加一(或加指令长度)送 PC。写成箭头形式就是 PC 到 MAR,Read,M 到 MDR,MDR 到 IR,PC 加 1 到 PC。

如果是间接寻址,还要加一个间址周期:指令的地址字段送 MAR,Read,主存内容送 MDR,MDR 送指令的地址字段(或者送一个暂存寄存器)。

执行周期的微操作取决于具体指令。以 ADD R1, (R2) 为例,它要把 R2 指向的主存单元内容取出来和 R1 相加,结果放回 R1。执行周期写出来就是:R2 送 MAR,Read,M 到 MDR,MDR 送暂存器,暂存器与 R1 送 ALU 做加法,ALU 结果送 R1。

实操心得:写微操作序列时,我习惯在每个操作后面用小括号加注"这一步在干什么"。比如"PC 到 MAR(准备取指令地址)"。阅卷时这不是必须的,但能帮你自己理清逻辑,也能在写错某一步时让阅卷人看出你的思路,捞回部分分数。

4.3 硬布线控制器与微程序控制器的取舍

这两种控制器的对比是标准简答题。硬布线控制器用组合逻辑电路直接产生控制信号,速度快,但设计复杂、修改困难,一旦电路定型,加一条新指令几乎要重做;微程序控制器把控制信号存在控制存储器里,用微指令解释机器指令,速度慢一些,但规整、易修改、易扩展,适合指令系统复杂的机器。

微指令的编码方式也是常考点:直接编码方式用每一位对应一个控制信号,速度最快但微指令字长最长;字段直接编码方式把互斥的控制信号分组,每组用译码输出,字长缩短但要多一级译码延迟;字段间接编码方式还要再查一次表,字长最短但最慢。这里有个隐含前提——同一字段内的微命令必须互斥,也就是不能同时有效。判断哪些微命令互斥,看它们是否作用于同一个部件或同一个数据通路节点。

微指令格式分水平型和垂直型。水平型微指令并行能力强,一条微指令能完成多个微操作,微程序短但字长长;垂直型微指令类似机器指令,并行能力弱,微程序长但字长短。理解了"并行度与字长的权衡"这个核心矛盾,所有相关的选择题都能推出来。

5. 流水线:结构相关、数据相关与组间串行进位的处理

流水线是整门课里综合性最强的一章,它把指令、数据通路、时序全部缝在了一起,也是最能拉开分数的地方。

5.1 三类相关的识别与消除

结构相关又叫资源冲突,本质是同一个硬件部件在同一时刻被两条指令争用。最典型的场景是指令存储器与数据存储器不分离,取指和访存同时要访问主存。解决办法有三种:让指令和数据分开用不同的存储器,或者增设缓存,或者在冲突时插入停顿。

数据相关是指令之间存在数据依赖,后一条指令要用前一条还没写回的结果。它细分为写后读、读后写、写后写三种,其中最常见的是写后读。解决办法是转发(也叫旁路),把 ALU 的输出直接引到下一级需要的输入端,不必等写回;如果转发解决不了(比如装载指令后紧跟使用),就插入气泡;编译器层面还可以做指令调度,把无关指令插到空隙里。

控制相关由转移指令引起,因为要等转移地址和转移条件确定,后面已经取进来的指令可能作废。解决办法是分支预测,包括静态预测和动态预测;也可以用延迟槽,把一条必然执行的指令放进转移指令后面的槽位里。

识别相关的实操方法是画时空图,把每条指令的五个阶段按节拍列出来,然后逐条比对寄存器的读写时刻。前一条指令的写寄存器时刻如果晚于后一条的读寄存器时刻,就存在写后读冲突,需要转发或停顿。

5.2 流水线性能三大指标的计算

三个指标:吞吐率、加速比、效率。设流水线有 k 段,每段耗时都是 Δt,连续执行 n 条指令。

流水线的总时间等于 (k 加 n 减 1) 乘以 Δt。吞吐率 TP 等于 n 除以总时间。加速比 S 等于顺序执行时间除以流水线时间,也就是 n 乘 k 乘 Δt 除以 (k 加 n 减 1) 乘 Δt,化简为 n 乘 k 除以 (k 加 n 减 1)。效率 E 等于加速比除以段数 k,也就是 n 除以 (k 加 n 减 1)。

代入一组具体数字。k 等于 5,n 等于 100,Δt 等于 1 纳秒。总时间等于 (5 加 100 减 1) 乘 1,等于 104 纳秒。吞吐率等于 100 除以 104,约 0.96 条每纳秒。加速比等于 500 除以 104,约 4.81。效率等于 100 除以 104,约 96.2%。可以看到,n 越大,加速比越接近段数 k,效率越接近 1,这体现了流水线"填满才有收益"的特性。

如果题目额外给出存在数据相关需要插入停顿,处理方式是把停顿周期加到总时间里。比如每 10 条指令插一个停顿周期,100 条指令多出 10 个周期,总时间变成 114 纳秒,所有指标按新时间重算。这类题的关键是不漏算,建议在时空图上把气泡也画成空格,一眼就能数出来。

5.3 组内并行、组间串行的进位结构与流水线的结合

这个考点看起来冷门,实际上是加法器和流水线的交叉点,出题人喜欢在这里设一个综合题。

先行进位加法器的思路是:每一位的进位不再等低位传来,而是用生成函数 G 和传播函数 P 直接算出来。G 等于 A 与 B,表示本位一定产生进位;P 等于 A 异或 B,表示本位会把低位进位传上去。有了这两个函数,进位可以写成 Ci 加 1 等于 Gi 或(Pi 与 Ci)的形式,逐级展开就能得到与低位进位无关的表达式,用两级与或门就能实现,这就是组内并行进位。

但位数一多,展开式的扇入会大到不现实,所以要分组。常见做法是 4 位一组,组内用先行进位网络并行产生进位,组间再把进位串起来传递,这就是"组内并行、组间串行"的混合结构。

延迟怎么估?具体系数各教材取值不同,按题目给定的值代就行,但思路是一致的。假设每个 4 位先行进位组产生进位输出的延迟是 2t,16 位加法器用 4 个这样的组串联,最坏情况下最高位所在组的进位要等前三个组的进位依次传过来,就是 4 乘 2t 等于 8t,再加上末级异或产生和所需要的 1t,总共约 9t。如果改成组间也先行进位,用专门的组进位生成逻辑算出各组进位,那么组间那一层只要 2t,加上组内的 2t 和求和的 1t,总共约 5t,几乎快了一倍。

这个结论和流水线的联系在于:加法器的进位延迟决定了组合逻辑的关键路径长度,而关键路径又决定了流水线时钟周期可以压到多短。如果一条流水线里放了一个 16 位组间串行进位的加法器,那它的时钟周期就被这 9t 卡死了;想要提频,要么把进位链改成组间先行,要么把加法器拆成两级,中间插寄存器,也就是把运算本身也流水化。这是很多设计题的标准答案思路。

注意:把加法器拆成两级流水会带来新的数据相关问题——相邻两条指令如果都要用加法器,就会争用同一个部件,产生结构相关。所以拆流水不是免费的,要么复制一份加法器,要么插入停顿,这个权衡就是设计题想让你写出来的东西。

6. 总线与 I/O:最容易被低估的得分区

总线与 I/O 通常被认为"分值不高、背一背就行",但恰恰因为很多人放弃,这里反而成了拉分点。它的计算题难度低,简答题套路固定,投入产出比非常高。

6.1 总线带宽与传输时间的计算

总线带宽的核心公式只有一个:带宽等于总线工作频率乘以每个总线周期传输的数据量。难的是判断"每个总线周期能传几次"。

看一个典型题。总线时钟频率 100MHz,数据总线宽度 32 位,每个时钟周期在数据线上传输一次数据,那么带宽等于 100 乘 10 的 6 次方乘以 4 字节,等于 400MB 每秒。但如果题目补充说明"总线周期包含一个地址期和一个数据期,各占一个时钟周期",那实际每两个时钟才传一次数据,带宽腰斩成 200MB 每秒。这一个条件的有无,答案差一倍,读题时务必圈出来。

还有一种考法是从存储器角度算。设存储器存取周期为 100 纳秒,一次能读出 4 字节,那么存储器的最大数据传输率等于 4 字节除以 100 纳秒,等于 40MB 每秒。把两条线放在一起比较,实际系统传输率由慢的一方决定——这就是为什么很多题会让你判断"系统瓶颈在哪里"。

总线定时方式的对比也是常客。同步定时用统一时钟,速度快、接口简单,但必须按最慢的设备设计周期,效率低;异步定时用握手信号,灵活性好、能兼容不同速度的设备,但控制复杂、速度慢;半同步定时是折中,在同步基础上增加一条等待信号线。三者的取舍逻辑是"速度与兼容性的权衡",记住这条主线,选择题不会做错。

6.2 中断处理流程与 DMA 的对比选择

中断处理的完整流程我建议背成固定的七步:中断请求、中断判优、中断响应、保护现场、执行中断服务程序、恢复现场、中断返回。其中"中断响应"阶段由硬件完成的工作叫中断隐指令,它做三件事:关中断、保存断点(把 PC 压栈)、取出中断服务程序的入口地址。

多重中断的考点是中断屏蔽字。为了实现优先级,每个中断源配一个屏蔽字,屏蔽字里对应位为 1 表示屏蔽该中断源。设计屏蔽字的原则只有一条:优先级高的可以屏蔽优先级低的,优先级低的不可以屏蔽优先级高的,同级之间视题目约定,通常自己屏蔽自己。写过两三次就会发现它有固定规律,从高优先级到低优先级,屏蔽字里 1 的个数依次增加。

DMA 和中断的区别是必考简答。中断方式是程序切换,每次传输都要执行服务程序、保护恢复现场,适合处理突发事件和少量数据;DMA 方式由硬件控制器直接在内存和外设之间搬数据,只在传输开始和结束时才打断 CPU,适合大批量高速数据块传输。从响应时间看,中断在指令执行结束后响应,DMA 在一个存储周期结束时就可以占用总线。

DMA 的三种工作方式也要分清:停止 CPU 访存方式周期最长但控制简单;周期挪用方式在 CPU 不使用总线的周期里插入 DMA 传输,效率高但可能争用;交替访存方式把存储周期分成两半,一半给 CPU 一半给 DMA,两者互不干扰但硬件要求最高。三种方式的速度排序和硬件复杂度排序是一致的,理解了这一点就不需要死记。

7. 常见问题排查与答题避坑清单

复习到后期,比"多学一点"更重要的是"少丢一点"。下面这些坑,几乎每一届都有人踩。

7.1 高频错误速查表

易错点典型错误正确做法
补码范围认为 8 位补码范围是 -127 到 127应为 -128 到 127,负数多一个
浮点还原尾数直接当小数用,漏掉隐含的 1尾数前面必须补 1. 再乘 2 的阶次方
Cache 映射组相联的组号位数按行数算组号位数按组数算,组数等于行数除以路数
命中率计算只数不命中次数,忽略调入整块一次不命中调入整块,块内后续访问全是命中
平均访问时间串行和并行公式混用先判断 Cache 和主存是同时还是先后访问
相对寻址PC 用当前指令地址PC 一般已指向下一条指令
微操作序列漏写读或写控制信号访存类微操作必须带上读写命令
流水线加速比直接用段数 k 当加速比加速比等于 n 乘 k 除以 (k 加 n 减 1)
总线带宽忽略地址期占用时钟看清一个总线周期包含几个时钟
中断屏蔽字低优先级屏蔽高优先级只能高屏蔽低,不能反过来

这张表我是从历年错题里归出来的,考前半小时扫一遍,比再看一章新内容有用得多。

还有一个非常隐蔽的失分点:单位。Cache 容量用 KB 还是 B,主存时间用纳秒还是皮秒,阶码偏移量是 127 还是 128,这些地方写错,整道题的数值就全错。我自己的习惯是在草稿纸最上方写一行"单位检查",做完题回头扫一眼。

7.2 实验环节与期末考试的衔接

很多院校这门课配有实验,比如用配套的 CPU 模拟器搭建数据通路、观察指令执行过程、验证流水线冲突。这部分和期末卷面的关系比你想的更紧密。

实验里让你连线的数据通路,其实就是卷面上微操作序列的物理版本。你在实验里把 PC 输出接到 MAR,在卷面上就写成"PC 到 MAR"。反过来,如果你实验做得扎实,卷面上的微操作序列几乎不用背,顺着数据通路一看就出来了。我知道有位同学实验报告写得极简,但因为他把每一根线的走向都摸清了,期末的数据通路题答得比谁都顺。

流水线实验更有价值。模拟器里可以设置指令序列,观察发生数据相关时流水线停顿了几个周期,这个数字就是计算题里"插入停顿周期数"的直观来源。做过实验的人算这类题,脑子里是时空图在动,而不是公式在飞。

提示:如果实验课提供了 CPU 模拟器的使用手册,不要只当工具书看,翻到"指令执行时序"那一章,把它和教材的指令周期章节对照着读一遍。这两份材料是同一件事的两种描述方式,对照着看一遍的效果,胜过分别看两遍。

最后分享一个我自己复习时最有效的做法:把整门课的公式集中抄在一张 A4 纸上,不超过三十行,考前只看这张纸。抄的过程本身就是筛选和压缩,抄完你会发现这门课真正需要"记"的东西其实很少,剩下的全是推导。那些推导链条只要在草稿纸上推过两三遍,考场上就是条件反射,用不着背。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询