系统架构设计师笔记 03:CPU 结构、Cache 与总线怎么考

第 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 章第二块:进程管理、调度算法与死锁四条件。死锁的条件与破解方式对应关系更易记混,单独拆一篇。

相关推荐
2401_850122041 小时前
高温耐油热缩套管选型:材料、温度和油液要匹配
经验分享·笔记·科技·学习
Xudde.1 小时前
Me and My Girlfriend 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
imDwAaY2 小时前
Bean的生命周期
java·笔记·后端·学习·spring·dubbo
坤坤子吖2 小时前
C++11——Lambda、function、bind 与可调用对象
c++·笔记·学习
优化Henry2 小时前
LTE站点以太网光模块告警处理实践
运维·网络·笔记·学习·信息与通信
职豚求职小程序2 小时前
27届携程笔试测评|能力测评+英语测评高分过
笔记
有范先生3 小时前
常温即食米饭和自热米饭有什么区别,户外出行该怎么选
笔记
新鲜势力呀3 小时前
PHP 实战:用户登录频繁失败怎么办?从安全防护到登录系统架构优化完整方案
安全·系统架构·php
漫漫长远3 小时前
低功耗UPF介绍(一)
笔记·嵌入式硬件·学习·fpga开发