第 2 章我是硬着头皮啃的。翻开全是名词:ALU、AC、DR、PSW、MAR、MDR、IR、组相联、PCI-E......每个字都认识,连起来不知道要干嘛。第一遍读完做选择题,错了一多半。
后来摸清它的出题方式,发现很规矩:不考设计 CPU,只考认零件、算两个数。 认零件是"这寄存器归运算器还是控制器""哪个对用户透明";算数是 Cache 平均访问时间和总线带宽,两个公式各三十秒。想明白这点,第 2 章从背诵题变成识别题。
一、先立骨架:冯诺依曼和哈佛不是一回事
教材开篇给的冯诺依曼结构,五大部件是运算器、控制器、存储器、输入设备、输出设备,其中运算器和控制器后来塞进同一块芯片,就成了 CPU。
真正容易栽的是冯诺依曼和哈佛的区别,两者核心分歧只有一条:指令和数据放不放在一起。
| 对比项 | 冯诺依曼结构 | 哈佛结构 |
|---|---|---|
| 指令与数据 | 同一存储器、同一总线 | 独立的指令与数据存储器 |
| 取指与取数 | 不能同时,分时复用总线 | 可并行,吞吐更高 |
| 硬件成本 | 低,一根总线搞定 | 高,两套存储与总线 |
| 典型应用 | 通用计算机、PC、服务器 | DSP、单片机、嵌入式实时处理 |
| 常考点 | 瓶颈在"取指-执行"串行 | 现代 CPU 的 L1 分 I/D Cache,即哈佛化 |
记忆方法:冯诺依曼是"一条路走两趟车",哈佛是"修了两条路"。所以现代 CPU 外面看着是冯诺依曼,里面 L1 Cache 已经拆成 I-Cache 和 D-Cache 了------这个"外冯内哈"的说法几乎年年有选择题在考。
二、CPU 拆开:运算器和控制器各有哪些零件
教材把 CPU 分成运算器、控制器、寄存器组和内部总线四块。考点集中在前两块里那几个英文缩写。
运算器负责算:ALU(算术逻辑单元)是核心,配 AC(累加寄存器)存中间结果、DR(数据缓冲寄存器)暂存进出内存的数据、PSW(状态条件寄存器)记录进位与溢出等标志。
控制器负责指挥:PC(程序计数器)指向下一条指令地址、IR(指令寄存器)存当前指令、ID(指令译码器)翻译指令、MAR(地址寄存器)存要访问的内存地址,再加时序部件产生节拍。
真正拉开分差的是下面这张表。软考十几年反复考"哪个寄存器对用户透明",答案几乎每次都是 IR。
| 寄存器 | 归属 | 对用户是否可见 | 为什么这么判 |
|---|---|---|---|
| 通用寄存器 | 寄存器组 | 可见 | 程序员能用指令直接读写 |
| AC 累加寄存器 | 运算器 | 可见 | 汇编里直接操作累加器 |
| PSW 状态寄存器 | 运算器 | 可见 | 条件转移指令要读标志位 |
| PC 程序计数器 | 控制器 | 有争议,多判可见 | 转移指令会改它的值 |
| IR 指令寄存器 | 控制器 | 不可见(透明) | 硬件自动装入,无指令可访问 |
| MAR 地址寄存器 | 控制器 | 不可见(透明) | 内部暂存,程序摸不到 |
| MDR/DR 数据缓冲 | 运算器/控制器 | 不可见(透明) | 同上 |
这里有个坑:PC 和 PSW 在不同教材里口径不一致,有的书把 PC 划成不可见。选择题通常把 IR、MAR、MDR 当作"确定透明"的答案项,含混时选最保守的。
口诀:算(ALU)加(AC)缓(DR)状(PSW),控(PC)指(IR)译(ID)地(MAR)
前半句是运算器,后半句是控制器。透明寄存器记"译码、指令、地址,三个看不见"------IR、ID、MAR 都在搬运和翻译,程序碰不到。
三、存储层次:三层是为了同时骗过速度和成本
寄存器最快最贵最小,辅存最慢最便宜最大。层次从高到低是:寄存器 → Cache → 主存 → 联机磁盘 → 脱机光盘磁带,这个顺序要能正着背也能倒着背。
它靠什么成立?局部性原理:时间局部性(刚用过的数据马上还会用)和空间局部性(用了这个地址,旁边的地址大概率也要用)。Cache 就是拿局部性在赌,赌对了命中,赌错了去主存取。
Cache 平均访问时间,两个公式别混
教材给的公式是 t3 = h × t1 + (1 - h) × t2,其中 t1 是 Cache 存取时间、t2 是主存存取时间、h 是命中率。
算一遍:Cache 存取 1ns,主存 10ns,命中率 95%,则
t3 = 0.95 × 1 + 0.05 × 10 = 0.95 + 0.5 = 1.45ns,相对纯主存的加速比约 6.9 倍。
命中率掉到 90% 时:t3 = 0.9 × 1 + 0.1 × 10 = 1.9ns。只掉 5 个点,平均时间涨了三成多。
有些辅导书写成 t1 + (1-h) × t2,把未命中开销拆成"先查 Cache 再去主存"。两种写法取决于 t2 定义成"主存单独访问时间"还是"未命中总开销"。考场认准教材那个式子 ,题干没特殊说明就用 h × t1 + (1-h) × t2。
三种地址映像方式
| 映像方式 | 规则 | 优点 | 缺点 | 冲突率 |
|---|---|---|---|---|
| 直接映像 | 主存块固定映射到唯一 Cache 行 | 硬件最简单、查表最快 | 常用块抢同一行会反复置换 | 最高 |
| 全相联映像 | 主存块可放任意 Cache 行 | 冲突最少、命中率最高 | 要全表比较,电路复杂 | 最低 |
| 组相联映像 | 先分组,组内全相联 | 折中,实际最常用 | 复杂度居中 | 中等 |
记法:直接是"一个萝卜一个坑",全相联是"哪有空坐哪",组相联是"先分车厢再随便坐"。
再顺一个对比:SRAM 用触发器,快、贵、不用刷新,做 Cache;DRAM 用电容,慢、便宜、要定时刷新,做主存。记"刷 DRAM、不刷 SRAM"就够了。
四、总线:三条线各管什么,带宽怎么算
总线按传的内容分三类:数据总线传数据、地址总线传地址、控制总线传读写中断等信号。
地址总线宽度直接决定寻址空间,这是高频考点:32 位地址总线寻址 2^32 字节 = 4GB,32 位系统内存上限卡在 4GB 就卡在这儿。
带宽公式:带宽 = (总线宽度 / 8) × 总线工作频率 × 每周期传输次数。两个算例,建议动手算一遍:
- 32 位宽、33MHz、每周期传 1 次 →
4B × 33MHz = 132 MB/s(这就是经典 PCI) - 64 位宽、66MHz、每周期传 1 次 →
8B × 66MHz = 528 MB/s(PCI 64 位版本)
常见总线标准速查:
| 总线 | 典型位宽/频率 | 主要用途 |
|---|---|---|
| ISA / EISA | 8/16 位、8MHz | 早期 PC 扩展槽,已淘汰 |
| PCI | 32/64 位、33/66MHz | 老式通用扩展槽 |
| AGP | 32 位、66MHz 起 | 专供显卡,已被 PCI-E 取代 |
| PCI-E | 串行,x1/x4/x8/x16 | 显卡、固态都走它 |
| SATA / SCSI | 串行 | 硬盘等存储设备 |
五、这章值几分,论文能不能用
考频判断:第 2 章在综合知识里稳定占 3~5 分,属于必须拿的部分。透明寄存器、Cache 命中率计算、总线带宽计算、地址总线寻址范围是四个最稳的得分点。案例分析不单独考硬件,但"性能瓶颈分析"类案例偶尔要你判断升级 CPU 还是加缓存,这时局部性原理和命中率就能用上。
论文可用性:直接写不合适,论文要的是架构实践。但 Cache 的层次思想可以平移成"本地缓存 → 分布式缓存 → 数据库"的三级缓存论述,写性能优化类论文时作理论铺垫提一两句,比空喊"我们加了 Redis"有层次。
速记收尾 :CPU 记"算加缓状、控指译地",透明记"IR 和 MAR",Cache 记 h×t1+(1-h)×t2,总线记 位宽/8 × 频率。四句话够用。
下一篇讲第 2 章第二块:进程管理、调度算法与死锁四条件。死锁的条件与破解方式对应关系更易记混,单独拆一篇。