1. 别急着翻书,先给这门课画一张“知识地图”
每年期末都会遇到一堆这样的同学:打开教材从第一章开始,把“计算机系统概述”里的名词解释背了两天,结果到考前一周发现流水线还没看,CPU没看,Cache不会算,整个人直接慌掉。作为一门让不少软件方向学生“咬牙切齿”的硬课,计算机组成原理的内容量确实大,但不代表期末复习应该从头啃到尾。这门课的知识体系非常稳定,教材不同、大纲不同,核心骨架却永远是那么几条线。
1.1 这门课的“主干”其实是六条线
- 数怎么表示:进制、原码/反码/补码、IEEE 754浮点数。
- 数怎么算:ALU里的加减乘除、加法器进位方式、补码运算规则。
- 数据存在哪:主存、Cache、虚拟存储器,以及容量计算、映射策略、替换算法。
- 指令长什么样:指令格式、寻址方式、操作码扩展。
- CPU怎么执行:指令周期、数据通路、硬布线/微程序控制器、流水线。
- 外部设备怎么接入:总线仲裁、I/O接口、中断、DMA。
我建议你第一件事不是看笔记,而是找一张A4白纸,把上面六条主线列出来,然后凭记忆往每条线后面补充你能想到的术语和公式。这个过程非常暴露真实水平:有的人能一口气写下几十个关键词,有人只能写出来“二进制”“Cache”就断片。断片的地方就是你复习的重点区域,后面所有时间都围绕这张纸展开,而不是跟着目录走。
1.2 期末试卷的“出题权重画像”
不同学校试卷风格有差异,但从常见题型和大题分布来看,出题比例基本维持在一个相对固定的区间:
| 内容板块 | 常见题型 | 估分占比 |
|---|---|---|
| 数据表示与运算 | 选择、填空、补码/浮点数计算 | 15%~20% |
| 存储系统 | 主存容量计算、Cache映射、替换策略 | 15%~25% |
| 指令系统 | 寻址方式辨析、指令格式、扩展操作码 | 15%~20% |
| CPU与控制器 | 指令周期、控制器类型、数据通路 | 15%~20% |
| 流水线 | 流水线原理、相关冲突、性能计算 | 10%~15% |
| 总线与I/O | 总线仲裁、中断流程、DMA | 10%~15% |
这张表的主要作用是分配时间。数据表示、存储系统占比高、套路固定,属于复习性价比最高的板块;流水线和扩展操作码虽然占比不一定最大,但几乎年年考,而且一旦出成计算大题就是“区分题”。手里掌握这张权重表,你就不用在冷门知识点上反复纠结了。
2. 数据表示:补码、溢出判断、浮点数转换
2.1 补码为什么是“按位取反再加1”
很多同学背结论很溜,“正数补码不变,负数补码取反加一”,但一遇到“-0”或者“为什么补码能多表示一个数”就懵。补码真正的设计动机是:让符号位一起参与运算,把减法变成加法,从而使加减法统一。
以8位为例:
- [+7]原 = 0000 0111,[+7]补 = 0000 0111。
- [-7]原 = 1000 0111,按位取反得到1111 1000,再末位加1变成1111 1001。
注意一个细节:补码的符号位仍然是最高位。负数补码转回真值的时候,最快的方法是“从右往左找第一个1,这个1左边所有位取反”,比如1111 1001,右起第一个1在第0位,前面的1111 100都取反,得到1000 0110,这是-7的原码。多练两遍就不会依赖死记硬背了。
另一个高频考点是8位补码的表示范围:-128到+127。为什么比原码多一个数?因为原码和反码都有“+0”和“-0”两个零,而补码的0只有0000 0000一个,把省下来的1000 0000用来表示-128。
2.2 溢出判断的三种方法,考场上任选
定点数加减法溢出是期末计算题的常客。溢出只在“同号相加”或“异号相减”时可能发生,但如果题目让你判断,最稳妥的还是以下三种方法:
方法一,单符号位进位判断:最高数值位的进位和符号位的进位不同,则溢出。也就是教科书中的表达式“C1 ⊕ Cout = 1”。算出两个进位后异或一下,结果1就是溢出。
方法二,双符号位判断:用00表示正数,11表示负数,运算结果符号位出现01或10就分别对应正溢出和负溢出。比如X=+1101,Y=+1010,变形补码分别是00 1101和00 1010,相加得到01 0111,符号位是01,说明正溢出。
方法三,根据操作数和结果符号判断:两个正数相加得到负数,或两个负数相加得到正数,必然溢出。
考试建议优先用双符号位,因为它不仅告诉你“有没有溢出”,还告诉你“是正还是负溢出”,答题最完整。
2.3 IEEE 754单精度浮点数:送分题,别失分
浮点数转换几乎是每年必考,步骤非常固定。单精度共32位:1位符号位、8位阶码、23位尾数。阶码采用移码,偏置值是127。
以十进制-13.25为例走一遍:
- 转二进制:13.25 = 1101.01。
- 规格化:1101.01 = 1.10101 × 2^3。
- 阶码 = 3 + 127 = 130,写成二进制1000 0010。
- 符号位是1。
- 尾数部分从小数点后开始取23位:10101 00000000000000000000。
- 拼接结果:1 10000010 10101000000000000000000。
还有一个高频选择题方向:浮点数比大小,不能直接把32位当普通整数比。规则是先看符号位,正数大于负数;正数之间先比阶码,阶码大的数就大;阶码相同再比尾数。负数正好反过来。0的问题也要注意:IEEE 754里有+0和-0,比较时它们相等。
3. 运算器核心:进位链和补码乘除法
3.1 一位全加器是所有加法器的地基
很多软件背景的同学看到“门电路”就头大,其实运算器部分只要抓住一个公式,后面就能推出一大片。一位全加器的核心表达式是:
Si = Ai ⊕ Bi ⊕ C(i-1) Ci = Ai·Bi + (Ai⊕Bi)·C(i-1)Ai、Bi是两个加数位,C(i-1)是低一位的进位,Si是本位和,Ci是向高一位的进位。第一个式子容易理解,第二个式子记住“只要本位的两个输入都是1,必产生进位;或者两个输入有一位是1且低位有进位,也能产生进位”就行。
期末可能让你画全加器逻辑图,也可能不画,但一定会考“加法器速度”。要理解为什么串行进位慢、并行进位快,就得回到这个公式。
3.2 串行进位、并行进位、组间串行进位到底差在哪
如果每一位的进位都要等低一位先算出来,就像排队结账,前面的人没付完,后面一个人也不能动。这种逐位传递的方式叫串行进位(也叫行波进位),n位加法器的进位延迟大约相当于n倍的单级进位延迟,位数一多就非常慢。
并行进位(先行进位)的思路是“不要等到低位算完”,而是直接用原始输入A、B推导出所有进位。这里有两个关键信号:
- 生成函数 Gi = Ai · Bi:只要两个输入都是1,这一位一定产生进位。
- 传输函数 Pi = Ai ⊕ Bi:只要有一个输入是1,低位进位的“1”就能通过这一位传上去。
4位先行进位加法器的进位递推公式可以一口气写出来:
C1 = G0 + P0·C0 C2 = G1 + P1·G0 + P1·P0·C0 C3 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0 C4 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0但如果做16位、32位加法,把所有进位都写成这样的“与或式”,逻辑会爆炸。工程上常用的折中方案正是组间串行进位:把一个16位加法器分成4组,每组内部用4位先行进位,组与组之间再串联起来。这样,组内不再逐位传递进位,组间的数据传递也缩短到只剩四段。相比16位全串行,速度快好几倍;相比16位全并行,电路又简单很多。
考场上遇到“比较串行进位和组间串进位的速度”这个简答,核心答题句是:组间串行进位在组内利用生成函数和传输函数提前形成进位,缩短了关键路径,但组与组之间仍需逐级传递,因此速度介于串行进位与全先行进位之间。
3.3 补码一位乘(Booth算法):期末大题里的固定角色
定点乘法在期末里最常考补码一位乘法,也就是Booth算法。很多同学卡在“为什么要比较相邻两位”,其实思路很直接:把乘数从低位到高位扫描,根据当前位与上一位的差异决定是加被乘数、减被乘数还是不动。
具体规则可以整理成一张表:
| 相邻两位Y[i]Y[i+1] | 操作 |
|---|---|
| 0 0 | 不加不减,部分积右移一位 |
| 0 1 | 部分积加被乘数X,右移一位 |
| 1 0 | 部分积减被乘数X,右移一位 |
| 1 1 | 不加不减,部分积右移一位 |
手算步骤很简单:写出被乘数X的双符号位补码,再写出-X的补码,然后从乘数最低位右边的附加位0开始,逐对扫描。每次做完加/减操作后,将部分积和乘数联合右移一位。这里要特别强调:右移是算术右移,符号位参与右移且保持不变,不是逻辑右移。
考生最常犯的两个错误:
- 乘数的符号位没有参与运算,补码乘法恰恰要求符号位一起参与。
- 右移方向搞反。记住是“向右移”,所谓右移相当于乘机除以二,这样才能保证部分积逐步向低位靠拢。
3.4 定点除法:恢复余数和加减交替法
除法题出现的频率没有乘法高,但偶尔在填空或簡答里冒出来。定点原码除法有两种思路:
- 恢复余数法:每一步试商,如果余数为负,说明商大了,要加回除数恢复余数,然后再左移。
- 加减交替法(不恢复余数法):余数为负时不恢复,直接让它左移,然后下一步改成“加除数”。
两种方法得到的商相同,但加减交替法每一轮只做一次加法或减法,速度更快。答题时抓住一句规则:余数为正,下一步减除数;余数为负,下一步加除数。最后如果余数仍然为负,需要再加上一次除数修正成正确余数。
4. 存储系统:容量计算、Cache三映射、虚拟存储
4.1 主存容量和地址线、数据线,必须先算清楚
存储系统是整份试卷里的“大题集中营”,而最基础的容量换算很多人却会丢分。核心公式是:
主存容量 = 存储单元个数 × 存储字长
一块存储芯片标称64K×8位,也就是说它有64K个存储单元,每个单元8位,总容量是64KB。地址线根数决定存储单元个数,数据线根数决定每个单元的位数。64K = 2^16,需要16根地址线;8位数据需要8根数据线。
这里最常见的陷阱是“编址方式”。如果某机字长32位,存储器容量1MB,按字节编址,那么地址总数是1MB/1B = 2^20,需要20位地址线。但如果改成“按字编址(一个字32位)”,地址总数变成2^20/4 = 2^18,只需18位地址线。题目一旦出现“编址方式”四个字,务必停下来确认是字节、字还是半字。
4.2 Cache三种映射方式的地址划分套路
Cache映射题每年必考,核心是“主存地址如何分段”。三种方式对比如下:
| 映射方式 | 缓存中的位置 | 主存地址划分 | 优点 | 缺点 |
|---|---|---|---|---|
| 直接映射 | 每个块只能去固定位置 | 标记 + Cache块号 + 块内地址 | 硬件简单、查表快 | 冲突率最高 |
| 全相联映射 | 可以放任意位置 | 标记 + 块内地址 | 命中率最高 | 硬件比较电路复杂 |
| 组相联映射 | 组内随意放,组位置固定 | 标记 + 组号 + 块内地址 | 折中方案 | 硬件略复杂 |
以一道典型题为例:主存容量256KB,Cache容量4KB,块大小32B,采用4路组相联。请问主存地址分几段,每段几位?
解题步骤:
- 块内地址位数 = log2(32) = 5位。
- Cache块数 = 4KB / 32B = 128块。因为是4路组相联,组数 = 128 / 4 = 32组,组号位数 = log2(32) = 5位。
- 主存地址总位数 = log2(256KB) = 18位。
- 标记位数 = 18 - 5 - 5 = 8位。
地址格式就是:高8位标记 + 5位组号 + 5位块内地址。凡是这类题,统一顺序是:先求块内偏移,再求Cache块/组号,最后用总位数减去它们得到标记位。掌握这一个顺序,直接映射和全相联都能套。
4.3 替换算法与写策略,简答题常客
Cache满了之后要替换旧块,三种经典算法必须分清:
- FIFO:先进先出,实现简单,但可能把常访问的块换出去。
- LRU:最近最久未使用,利用局部性原理,命中率通常最高,是考试中的标准答案选项。
- LFU:按使用频率淘汰,需要计数器,实现开销大。
写策略也要分清两个维度:
- 写直达:每次写都同时更新Cache和主存,简单但访存多。
- 写回:只更新Cache,替换时才写回主存,速度快但状态复杂。
- 写不命中时,还分“写分配”(先把块调进来再写)和“非写分配”(不调入Cache直接写主存)。
如果简答题问“为什么Cache能提高系统性能”,核心是局部性原理:程序在时间上最近访问的数据很可能再次访问,在空间上相邻地址的数据很可能被一起访问。Cache把最近使用的数据放到高速存储中,命中时可以显著降低平均访存时间。
4.4 虚拟存储器:页表、缺页中断、TLB一条链路
虚拟存储的核心是“主存+磁盘”的层次结构。考试常考页式管理的地址变换过程:
- CPU给出逻辑地址,由虚页号和页内偏移两部分组成。
- 通过页表基址寄存器找到当前进程的页表,查页表项得到物理页框号。
- 如果页不在主存,产生缺页中断,从磁盘调页。
- 更新页表后重新执行指令。
TLB(快表)就是页表的“小缓存”:利用局部性原理,把最近访问的页表项放进TLB,命中时不用再去内存查页表。这里要特别分清楚:Cache命中失败和TLB命中失败是两条独立链路,不要混在一起。Cache缓存的是内存数据块,TLB缓存的是页表项,二者级别不同。
5. 指令系统:寻址方式、指令格式与扩展操作码
5.1 六种寻址方式,答题要“算”不要“背”
寻址方式本质上回答一个问题:指令里给的形式地址,如何变成真正想访问的地址。常见的六种高频寻址方式整理如下:
| 寻址方式 | 有效地址/操作数位置 | 高频出题点 |
|---|---|---|
| 立即寻址 | 操作数就在指令里 | 取指快,但地址码字段大小限制操作数 |
| 直接寻址 | EA = 地址码A | 简单,寻址范围受地址字段位数限制 |
| 间接寻址 | EA = (A),A指向存储单元 | 灵活但要多次访存 |
| 寄存器寻址 | 操作数在寄存器 | 不访存,速度最快 |
| 寄存器间接寻址 | EA = (R) | 寄存器速度快,还能间接访问 |
| 变址寻址 | EA = (R) + A | 适合数组、字符串遍历 |
一个高频选择题:数组遍历适合哪种寻址方式?答案是变址寻址。因为可以把数组首地址放进变址寄存器,然后循环修改寄存器内容,实现连续访问。
5.2 指令格式设计:地址码不够怎么办
很多题目会给出“指令字长16位,操作码4位,地址码4位”之类条件,问能设计多少条指令、寻址范围多大。
例如:操作码4位,最多表示2^4=16种操作码,但如果有三地址指令和两地址指令共用,就要小心操作码长度不固定。如果一条指令是三地址的,地址码总共12位,每个地址4位;直接寻址时每个地址只能覆盖16个单元,这显然不够用。
常见的解决办法有:
- 用双字长指令,第二个字放完整地址;
- 用基址寄存器或变址寄存器,通过基数寻址扩大范围;
- 用寄存器间接寻址,用寄存器里的16位地址覆盖更大空间。
答题时先算清楚“地址码位数能表示多少个地址”,然后再说明解决办法,不要只写结论不写推理。
5.3 扩展操作码设计:期末“性价比之王”
扩展操作码是每年区分度很高的设计题。常见题干是:某机指令字长16位,每个地址码占4位,要求设计三地址、二地址、一地址、零地址指令,且各条数尽量多。
设计思路是:操作码长度不固定,某些码被用作指令后,剩下的码作为“扩展标志”进入下一级。
典型答案:
- 4位操作码最多16种,三地址指令用15种,剩余一个码(如1111)作为扩展前缀;
- 扩展到8位操作码,可以再表示16种二地址指令,用掉15种,剩余一个码继续扩展;
- 扩展到12位操作码,表示15种一地址指令,剩余一个码继续扩展;
- 扩展到16位操作码,此时地址码为0,可以表示16种零地址指令。
所以常见分配是:三地址指令15条、二地址指令15条、一地址指令15条、零地址指令16条。计算时注意不要重复计数:前面用掉的码要排除,后一级是在剩余扩展标志基础上重新编码。
6. CPU实现:指令周期、数据通路、控制器风格对比
6.1 指令周期:取指、间址、执行、中断
CPU执行一条指令不是一步完成的,而是一组微操作序列。完整的指令周期包括:
取指周期 → 间址周期(如果需要) → 执行周期 → 中断周期(如果有中断请求)
考试常出判断题:“所有指令都有间址周期。”答案错,只有间接寻址的指令才需要间址周期。还有“每条指令都一定包含执行周期”,从严格意义来说不一定,比如空操作指令虽走过执行周期,但本质不产生任何运算。建议答题时以教材定义为准,你手里教材怎么定义就怎么写。
6.2 数据通路与微操作序列
数据通路大题看着吓人,得分点却很固定。给你CPU内部结构图后,常考的是“取指周期的微操作序列”:
PC → MAR M(MAR) → MDR MDR → IR (PC) + 1 → PC执行周期的序列就要看指令,比如加法指令ADD R0, R1可能要写:
R0 → ALU的A端 R1 → ALU的B端 ALU输出 → R0答题时每一行都要完整写出数据从哪个部件出发、经过什么总线、最终进入哪个寄存器,少一段都可能扣分。如果问“单总线数据通路有什么缺点”,答案是“任意两个部件之间传送数据都必须经过唯一总线,同一时刻只能有一个设备占用总线,吞吐量受限”。
6.3 硬布线控制器 vs 微程序控制器
控制器两种风格的对比是必考简答:
| 对比维度 | 硬布线控制器 | 微程序控制器 |
|---|---|---|
| 本质 | 组合逻辑电路直接产生控制信号 | 微指令存放在控制存储器中,逐条读取 |
| 速度 | 快 | 较慢 |
| 灵活性 | 加指令要改电路 | 增加微指令即可 |
| 典型场景 | RISC、高性能CPU | CISC、复杂指令集CPU |
问“为什么RISC多用硬布线控制器”,可以从指令数量少、格式规整、逻辑不复杂,以及硬布线速度快这两个角度回答。
7. 流水线冲突:结构相关、数据相关、控制相关
7.1 三种相关各是什么,一句话说清
流水线是提高指令级并行的重要手段,但它有三个“敌人”。结构相关(资源相关)是多条指令在同一时钟周期争用同一硬件资源,典型例子是单一存储器接口下,IF阶段要取指令,MEM阶段要访存数据,直接冲突。数据相关是指令之间存在数据依赖,后面的指令要用前面指令的结果,但结果还没算出来。控制相关是遇到转移指令时,后续指令是否执行取决于分支结果,而分支结果要等执行阶段才能确定。
考辨析时最直观的例子:
- 两条指令要同时写同一个寄存器,这是结构相关。
- 第二条指令要读第一条指令的运算结果,但第一条还没算完,这是数据相关。
- 分支指令后预取的指令可能作废,这是控制相关。
数据相关再往下分,常考三种:
- RAW(写后读):后面指令要读前面指令写的结果,这是真相关,最严重。
- WAR(读后写):后面指令写一个前面指令刚读过的寄存器/内存。
- WAW(写后写):两条指令写同一个目标,后者晚写会覆盖前者。
7.2 数据相关的三种解决手段
处理数据相关常见三种办法:
- 转发(旁路)技术:ALU刚算出的结果直接送到需要它的功能单元,不必等写入寄存器再读出来。现代处理器几乎都用这个。
- 插入停顿(气泡):相关指令之间插入NOP,等到结果真正写好再继续。
- 编译优化:调整指令顺序,把互不依赖的指令插在两条相关指令之间,软件层面消除停顿。
考试如果给一段汇编让你分析“哪些指令之间有数据相关”,先找“上一条写、下一条读同一寄存器”的模式,这往往是RAW,再考虑是否需要停顿或可否转发。
7.3 流水线性能参数:一行公式拿下
经典计算题:四级流水线,各段时间分别是t1、t2、t3、t4,流水线周期取最大段耗时t_max。执行n条指令的总时间:
T = 4 × t_max + (n - 1) × t_max
前半部分是第一条指令完成要花的时间,后半部分是剩余n-1条指令每条再花一个周期。理想情况下吞峰率 = n/T,加速比 = 顺序执行时间 / 流水线时间 = n × (t1+t2+t3+t4) / T。当n足够大时,加速比趋近于流水线级数4。
有冲突时,就要在公式基础上加气泡周期数。画时空图也很直接:横轴是时钟周期,纵轴是流水线段,每条指令按序占格子,冲突位置插入空段即可。建议考场上先把时空图画出来,再数格子,比纯套公式稳妥。
8. 总线与I/O:仲裁、中断、DMA
8.1 总线判优的三种方式
总线是一个共享资源,同一时刻只允许一个设备占用。谁能用,就要靠判优逻辑。三种经典方式:
| 判优方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 链式查询 | 请求信号从高优先设备向低优先设备逐级传递 | 控制简单、易扩展 | 优先级固定、链路故障影响大 |
| 计数器定时查询 | 计数器轮流扫描设备 | 优先级可由计数器初值调整 | 需要计数器、查询次数多 |
| 独立请求 | 每个设备有独立请求线和允许线 | 响应快、优先级可软件控制 | 连线数量多 |
问“哪种判优方式优先级最灵活”,答案是独立请求,因为它可以在总线控制器中通过寄存器设置每台设备的优先级。
8.2 中断的完整流程,按五步答
中断处理流程是简答题的高频考点:
- 中断请求:设备发送中断请求信号。
- 中断判优:多个请求到来时选优先级最高的。
- 中断响应:CPU在一条指令执行结束后,发出中断响应信号。
- 中断处理:保护现场(PC、PSW等),取中断向量,跳转到中断服务程序。
- 中断返回:恢复现场,返回断点继续执行。
考试常问“为什么中断响应必须发生在指令结束时?”回答要点是:保证当前指令执行的原子性和现场完整性,如果一个动作执行到一半被打断,现场不完整就没法正确恢复。
8.3 DMA为什么比中断更适合高速外设
DMA(直接存储器访问)与外设传送数据的核心是在外设和主存之间建一条直接数据通路,CPU只在开始和结束时介入。
DMA传送一个数据块的流程:
- CPU初始化DMA控制器:外设地址、主存起始地址、传送字数、操作类型。
- DMA控制器申请并取得总线控制权。
- 每传送一个字节/字,DMA控制器自动更新地址和计数器。
- 全部传完,DMA控制器向CPU发中断请求,CPU做结束处理。
对比“DMA与程序中断方式的区别”可以从四方面展开:数据传送路径不同(中断经过CPU转发,DMA直达主存);CPU参与程度不同(中断全程参与,DMA两头参与);响应时机不同(中断在指令结束时响应,DMA在总线空闲周期响应);适用设备不同(DMA适合磁盘、网卡等高速设备)。
9. 期末做题策略:把“背过”变成“写得出来”
9.1 计算题优先拿分
剩余时间不充裕时,复习顺序建议是:浮点数转换 → 补码加减及溢出 → Cache地址划分 → 扩展操作码 → 流水线参数计算 → 寻址方式计算。这些题型步骤明确,每类刷三道左右就能形成肌肉记忆,性价比极高。像“IEEE 754格式转换”这种题,只要流程熟练两分钟就能写完,纯粹是送分题,绝对不允许丢。
9.2 简答题别背原文,背“关键词链”
简答题死背原句很容易考场断片。更有效的做法是把答案缩成关键词链。比如“局部性原理”的答题结构只有三层:时间局部性(最近访问过的数据很可能再访问)+ 空间局部性(附近地址的数据很可能被访问)+ 应用场景(Cache、TLB、虚拟存储)。把关键词按顺序写全,再补一两句解释,分数就到手了。每道简答考前都做一遍“五个关键词能不能串成一段话”的练习。
9.3 考前自测清单
下面这份自测清单是我平时带复习时反复用的,既能检验掌握程度,也基本覆盖了期末的高频得分点。你如果不看书能全部答出来,这门课基本稳了:
- 8位补码能表示的范围是多少?为什么比原码多一个数?
- 双符号位怎么判断溢出?01和10分别代表什么?
- IEEE 754单精度阶码为什么用移码而不是补码?
- 串行进位、组间串行进位、全先行进位三者的速度为什么有差异?
- Cache三种映射方式下,主存地址的分段分别是怎样的?
- LRU替换算法为什么命中率高?FIFO为什么可能误换高频块?
- 扩展操作码设计时,“扩展标志”应该怎么留?
- 硬布线控制器和微程序控制器的主要区别有哪些?
- 数据相关里的RAW、WAR、WAW分别是什么?哪个是“真相关”?
- 流水线吞吐率和加速比怎么算?理想情况下加速比上限是多少?
- 三种总线判优方式各自优缺点是什么?
- DMA与程序中断在数据传送路径上有什么本质区别?
自测的正确姿势是“把答案写在纸上”,而不是“我在脑子里过一遍很顺畅”。看得懂和写得出来完全是两码事。写完之后再对照教材或笔记核查漏项,漏掉的点就是考前最后要补的部分。几十份期末卷看下来,我能明显感觉到:那些最后能拿高分的学生,复习阶段几乎都在拿笔算、拿笔写,而不是捧着笔记干瞪眼。