尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

计算机组成原理重点框架与高频公式:Cache、流水线、总线带宽一网打尽

计算机组成原理重点框架与高频公式:Cache、流水线、总线带宽一网打尽 计算机组成原理这门课在计算机专业里属于典型的“看着不难、考着要命”的课程。很多软件方向的同学一开始都会问一句我以后又不写驱动、不画板子学这玩意儿干嘛但学到后面你会发现程序为什么快、为什么慢、为什么并发会出问题、为什么内存爆了根子都在这门课里。我当年复习这门课的时候也踩过不少坑教材翻了三四遍最后才总结出来一套适合应试又兼顾理解的“地图公式”打法。这篇笔记就是我从期末备考和考研复习双视角整理出来的重点框架与高频计算公式尽量用大白话把考点讲透尤其把那些容易在计算题里丢分的细节单独拎出来。如果你正准备期末冲刺、考研一轮复习或者刚自学到存储和CPU部分觉得吃力这篇应该能帮你省下不少找重点的时间。1. 这门课到底在讲什么先搭框架再谈记忆1.1 计算机组成原理的核心主线是“一条指令的生命周期”很多同学复习计算机组成原理最大的问题不是知识点难而是知识点太散。今天讲数制明天讲存储器后天讲CPU每章拿出来都能看懂合上书本就全乱了。建议你从一开始就抓住一条主线索一条高级语言写出来的语句最终是怎么变成机器指令然后被CPU一步步取回来、解析、执行完的。围绕这条主线整门课其实就分成五大块运算器负责算控制器负责指挥存储器负责存输入输出设备负责和外部打交道总线负责把所有这些部件连起来通信。考试里百分之八十的大题本质都是在问“某个数据在这条链路上是怎么流动的”。比如运算题考的是数据在ALU里怎么被处理存储题考的是数据在主存和Cache之间怎么换CPU题考的是控制器怎么产生控制信号让数据通路完成指令。你脑子里有这条主线之后再看每章的细节就不会觉得它们是一堆孤立知识点而是一个完整系统的不同侧面。1.2 软件方向为什么要学硬件以及复习顺序建议软件方向的同学对硬件有天然的抵触情绪这很正常。但如果你把视角拉高一点就会发现这门课其实是给你看“硬件这张底牌”的。你写的每一行代码编译器会翻译成指令集架构下的机器指令而指令集架构正好落在计算机组成原理的研究范围里。你要是理解CPU是乱序执行还是顺序执行理解Cache的命中率对性能的影响理解分支预测失败为什么要清空流水线回头再看那些性能调优的经验就有一种“原来如此”的通透感。复习顺序上我的建议是不要按目录一章章啃而是按逻辑依赖关系走先看数制和运算因为后面讲指令、讲ALU都要用到再看存储系统这部分的Cache计算是考试大热门然后进入指令系统和CPU这里会用到前面所有的知识最后看总线和I/O把整台机器怎么协作收尾。每章第一遍只抓主干不要陷进细节比如微指令的编码方式第一遍能看懂概念就行回头第二遍再抠。这样一轮下来你对全局有把握第二轮再逐个击破就容易很多。2. 数据的表示与运算数字电路的味道从这里开始2.1 原码、反码、补码别死记范围要理解“模”的思想数据表示这块补码是绝对的重点也是后面所有运算的基础。很多人只记住“正数补码不变负数取反加一”却不明白为什么要取反加一。其实补码的核心思想来自“模”就像时钟上3点可以表示-9点一样。在n位二进制下减去一个数和加上它的补码是等价的这样减法就能统一用加法电路来实现硬件的成本就大大降低了。考试中经常出现的范围表整理成下面这个形式比较好记编码方式n位定点整数的表示范围原码-(2^(n-1)-1) ~ (2^(n-1)-1)反码-(2^(n-1)-1) ~ (2^(n-1)-1)补码-2^(n-1) ~ (2^(n-1)-1)注意补码比原码和反码能多表示一个最小负数因为补码里的“0”只有一种表示省出来的那个编码就让给了最左边的负值。这个边界点是选择题和填空题的高频陷阱比如“8位补码能表示的最小负数是多少”答案是-128而不是-127。补码运算的溢出判断我推荐掌握两个方法。第一个最直观两个同号数相加结果符号变了那必然溢出。比如两个正数相加得到负数或者两个负数相加得到正数。第二个是变形补码法也叫双符号位法运算前把符号位复制成两位00表示正数、11表示负数运算完后看结果最高两位为01是正溢出为10是负溢出为00或11则无溢出。举个例子4位补码范围是-8到7计算63溢出用变形补码表示就是00 110 00 011 01 001结果符号位变成01正溢出考试写这个判断过程既规范又不容易错。2.2 定点数、浮点数规格化、IEEE 754和浮点加减定点数就是小数点位置固定的数计算机里一般用整数运算来近似处理。浮点数则是为了解决数值范围问题而生的相当于把小数点“浮动”起来。一个浮点数可以写成数值 (-1)^S × 尾数 × 2^阶码 的形式其中S是符号位阶码决定范围尾数决定精度。IEEE 754标准里单精度浮点数用32位表示最左边1位符号位中间8位阶码右边23位尾数。阶码用移码表示偏移量是127尾数最高位默认为1叫隐含位。举一个考的特别多的例子把-12.5写成IEEE 754单精度格式。先转二进制12.5 1100.1规格化成1.1001×2^3符号位为1阶码为3127130二进制10000010尾数部分为10010000000000000000000。拼接起来就是1 10000010 10010000000000000000000转成十六进制是0xC1480000。这类题只要按“符号位、阶码、尾数”三步走基本不会错关键是阶码别忘了加偏移量。浮点数加减运算的步骤也是固定套路先对阶也就是把小阶码向大阶码看齐然后尾数相加减接着规格化处理保证尾数在规格化范围再考虑舍入最后判断溢出。考试中常考的规格化条件是原码表示时尾数的最高位必须为1补码表示时符号位和尾数最高位必须不同。你要是把这一步和“对阶时阶码变几次”理解清楚浮点计算题基本就拿稳了。2.3 进位链考点组间串行进位、组内并行进位热搜里出现了“计算机组成原理组间串行进位”这是加法器设计里的经典考点。加法器做加法时每一位的进位如果都要等低一位算完才能得到那速度会非常慢这就是串行进位加法器。并行进位也叫先行进位通过逻辑电路同时生成多位进位速度快很多但电路复杂。实际设计时常用折中方案把若干位分成一组组内用并行进位组与组之间再用串行方式连接这就是组间串行进位。考试喜欢让你分析这种进位结构下计算n位加法需要几级门延迟。你只要记住组内并行只需要固定的几级延迟组间每串联一组就多一级进位延迟。这种题要先看清分了几组再分“组内延迟组间延迟”两部分算别一上来就当作纯串行处理。理解了这个结构其实也就理解了为什么现代CPU的ALU都强调“进位链设计”因为加法是所有运算的基础快一点整体就快一点。3. 存储系统开局一套Cache考试全是计算3.1 主存计算必考题容量、地址线、数据线、芯片扩展存储系统这章的计算密度非常高第一类必考题就是主存容量与芯片扩展。核心公式很简单主存总容量 存储单元个数 × 存储字长每位宽度。地址线的根数由存储单元个数决定也就是地址线根数 以2为底存储单元个数取对数数据线的根数则由存储字长决定。一个64K×8位的主存64K 2^16所以需要16根地址线8位字长需要8根数据线。用芯片扩展成大容量主存是每年的常规题分两种情况。位扩展多个芯片并联来加宽数据位比如用16K×4位的芯片组成16K×8位需要2片地址线共用数据线分别接高8位和低8位。字扩展多个芯片串联来增加存储单元数比如用16K×8位的芯片组成64K×8位需要4片每片地址线一样靠片选信号来选择哪一片工作。把这两种结合比如用16K×4位芯片组成64K×8位就先做位扩展两片合成一组16K×8位再做字扩展四组总共8片。片选信号常用译码器产生比如2-4译码器把两位高地址变成四个片选信号这个考点经常和地址分配图一起出要能把地址范围划分和片选一一对应。3.2 Cache命中率与平均访问时间开篇一个公式所有题型全拿下Cache这一章几乎所有计算题都能归结到两个公式上。第一个是命中率命中率 访问Cache命中的次数 / 总访问次数。第二个是平均访问时间平均访问时间 命中率×命中时的访问时间 (1-命中率)×未命中时的访问时间。未命中时的访问时间通常等于主存访问时间加上Cache访问时间因为CPU先查Cache没查到再去主存取数据。举例CPU访问Cache命中时间为2个时钟周期访问主存的时间为20个时钟周期假设Cache命中率为95%则平均访问时间 0.95×2 0.05×(202) 1.9 1.1 3个时钟周期。这个结果可以直观说明Cache的意义如果没有Cache每次访问都是20个周期加了Cache之后即使有5%没命中平均也只要3个周期。要是题目给的是“缺失代价”那公式就写成平均访问时间 命中时间 缺失率×缺失代价。这两种写法本质一样做题前先看题目给的条件是“未命中时间”还是“缺失代价”别把两者重复算了。Cache映射方式的选择题和计算题也常考。直接映射下一个主存块只能进Cache里固定的一行行号 块号 mod Cache行数全相联映射可以进任意一行组相联映射则是按组分组号 块号 mod Cache组数组内又有多行。举例Cache有4组主存第12块采用二路组相联映射12 mod 4 0所以它只能进入第0组中的两个Cache行之一。这三种映射的优缺点总结成一句话从直接映射到全相联冲突率越来越低但查找电路越来越复杂组相联是中间的折中方案。3.3 替换算法与写策略LRU怎么算、写直达和写回怎么区分Cache满了之后要腾地方这就涉及替换算法。常见的有随机替换RAND、先进先出FIFO、最近最少用LRU。考试考查最多的是LRU因为它利用局部性原理性能最好。分析LRU时你只要维护一个“最近使用时间”的序列每次命中某个块就把它提到最前面每次缺失时淘汰最后面的块。很多题目会给出一串访问序列让你填Cache状态变化表这类题没有捷径老老实实画表格按行推演。关键词高级语言里的循环访问模式用LRU效果通常非常好就是因为循环有局部性。写策略也容易出概念题。写直达法CPU写Cache的同时也写主存好处是主存数据总是最新的缺点是写操作慢、总线流量大。写回法CPU只写Cache当Cache块被淘汰时才写回主存好处是写操作快缺点是主存数据可能过时。很多同学在这里会混淆“写缺失时是否要先调入Cache块”建议把“写命中”和“写缺失”分开记写缺失一般按写分配法先把块调入Cache再更新或不写分配法直接写主存不调入Cache两种策略处理两者常和写直达配对是“不写分配”和写回配对是“写分配”。考试如果问某个场景选哪种写策略答案往往看应用对一致性和性能的要求别只答一句话展开说两句更容易拿满步骤分。4. 指令系统与CPU从指令到微操作的旅程4.1 指令格式与寻址方式有效地址计算是小题高频区指令系统这章的“硬骨头”是指令格式和寻址方式。一条指令通常包含操作码和地址码两部分操作码开几个字段、地址码占几位会直接决定指令最多能支持多少条、能访问多大地址空间。扩展操作码是一个常考方向让短指令的操作码短、地址码长长指令操作码长、地址码短。比如一个16位指令地址码字段有多个短操作码4位可以支持15条三地址指令留一个前缀扩展成8位再支持更多的二地址指令。这类题考的是分类讨论要数清楚每一种扩展后还剩多少编码空间。寻址方式的有效地址计算是选择填空和简答的高频区。立即寻址的操作数直接放在指令里不用访存。直接寻址EA等于形式地址A只需访存一次。间接寻址EA等于A所在存储单元的内容要访存两次取操作数。寄存器寻址和寄存器间接寻址区别在于操作数是在寄存器里还是寄存器存的是操作数地址。变址寻址EA (变址寄存器) A适合数组循环访问基址寻址EA (基址寄存器) A适合程序重定位相对寻址EA (PC) A常用于转移指令。考试特别爱考变址和基址的区别一句话记忆变址面向用户、处理数组基址面向系统、解决程序浮动。4.2 指令周期、机器周期与控制器微程序和硬布线的选择逻辑控制器负责把指令翻译成一系列微操作这也是“计算机组成原理”最像硬件的一章。一个完整的指令周期通常包括取指周期、间址周期、执行周期、中断周期四个阶段不是所有指令都有后两个。机器周期也叫CPU周期一般以访问一次存储器的时间为基准一个指令周期由若干个机器周期组成一个机器周期又由若干个时钟周期节拍组成。考试中让你数“这条指令需要几个机器周期”时先判断它是否需要访存取操作数、是否需要响应中断再逐项加。控制器设计有两条路线。硬布线控制器用逻辑门电路直接生成控制信号速度极快但设计复杂、不易修改典型的RISC处理器常用。微程序控制器把控制信号按步骤编码成微指令存到控制存储器里执行时逐条读出微指令设计灵活、容易扩展适合CISC。两者的对比题经常问“为什么RISC用硬布线多”原因就是RISC指令简单规整用硬布线能充分发挥速度优势而复杂指令用微程序更划算。微指令的编码方式还有水平型和垂直型之分水平型并行能力强但指令长垂直型类似机器指令、编码紧凑但并行能力弱记住这个对比就能应付大部分题。4.3 流水线经典计算完成时间、加速比、吞吐率一锅端流水线是CPU章节里性价比最高的考点公式固定练几道题就能拿分。一条k段流水线处理n条指令总时间 (k n - 1) × 时钟周期。为什么要加k-1因为第一条指令要经过全部k段才能完成之后每个周期完成一条。举例5段流水线时钟周期10ns执行100条指令总时间 (5 100 - 1) × 10 1040ns。如果不用流水线每条指令都要5个周期完成则耗时 100 × 5 × 10 5000ns加速比 5000 / 1040 ≈ 4.8。吞吐率 完成的指令数 / 总时间上面例子就是100 / 1040ns ≈ 9.6×10^7条/秒。这里有两类陷阱一是题目有时会告诉你流水线有“建立时间”和“排空时间”其实它们就是公式里的k-1部分别额外加二是如果指令中有分支流水线可能需要清空重取实际加速比会下降题目可能会让你分析分支指令的影响。流水线冲突的三类结构冲突、数据冲突、控制冲突也常考数据冲突的解决办法包括转发技术、插入空操作、编译调度重排指令记住每个手段的原理和代价简答题就够写了。5. 总线与输入输出带宽计算、中断与DMA5.1 总线带宽计算公式别把频率和带宽搞混总线这章计算题集中在总线带宽上。总线带宽是指单位时间内总线上可传输的数据量单位是B/s字节每秒。基本公式总线带宽 总线宽度(字节) × 总线频率(Hz)。这里的频率要理解成每秒能完成多少次数据传输如果每个时钟周期能传一次数据那就等于总线时钟频率如果每两个时钟周期才传一次那实际频率要除以2。举个例子总线数据线32位总线时钟频率66MHz每个时钟周期传输一次。总线宽度换算成字节就是4B带宽 4B × 66×10^6Hz 264MB/s。如果题目改成“每3个时钟周期传输一次”带宽就是4B × 66×10^6/3 ≈ 88MB/s。很多同学丢分在单位换算上题目给的是MB/s计算时要把bit和Byte分清楚1字节等于8位32位总线等于4字节而不是4位。这类题只要把“一次传多少数据”和“一秒传多少次”这两个量找对答案就不会偏。5.2 中断处理和DMA传输的计算套路I/O方式里程序查询方式最耗CPU因为它要不断循环检查状态位中断方式在设备准备好后主动通知CPUCPU不必一直等待DMA方式更进一步数据传送由DMA控制器接管直接在主存和设备之间搬数据只是在开始前和结束后打断CPU。考试经常会让你算DMA方式下的数据传送时间或CPU被占用时间。DMA的典型场景是磁盘读取。假设磁盘转速为7200转/分平均寻道时间为8ms每磁道存储容量为64KB要读取一个4KB的数据块。平均旋转延迟 转一圈时间的一半 60/7200/2 ≈ 4.17ms到达目标扇区后传输时间根据数据传输率计算如果数据传输率为50MB/s4KB需要约0.08ms。平均存取时间 ≈ 寻道8ms 旋转延迟4.17ms 传输0.08ms ≈ 12.25ms。这类计算题的关键是区分“定位时间”和“传输时间”定位时间一般远大于传输时间这是磁盘性能的瓶颈考题爱在这个地方埋比较大小的问题。中断相关的计算题相对简单常考的是中断响应过程排序中断请求、中断判优、中断响应、保护断点和现场、执行中断服务程序、恢复现场、返回断点。嵌套中断时优先级高的可以打断优先级低的所以算总耗时先要识别哪些中断会被阻塞。向量中断的“向量地址”指的是中断服务程序的入口地址存放地址不是入口地址本身这个细节出选择题的时候很容易把人绕进去。5.3 程序查询、中断、DMA三种I/O方式对比表三种I/O方式每个期末都爱考一道对比简答直接用表格对答案最省事比较项程序查询方式中断方式DMA方式CPU参与程度全程参与不断查询只在数据准备好后响应中断只在传输开始和结束时参与数据传输单位字/字节字/字节数据块传输速度最慢中等最快适用场景简单低速设备中速设备高速设备如磁盘、网卡对CPU的负担最高中等最低答题时要学会“看场景下菜”低速键盘鼠标用程序查询和中断都行磁盘这种高速块设备必须DMADMA虽然效率高但需要专门的控制器和更复杂的地址管理。I/O这块不需要背特别多理论把表格里这几行的逻辑搞清楚问什么都能答到位。6. 考前必背公式速查一页纸搞定计算题6.1 核心公式整理期末和考研都靠这一张表复习到最后阶段建议把散落在各章里的公式集中抄到一张纸上考前反复默写。我整理了一份高频公式表你直接按这个框架补充记忆考点核心公式n位补码范围-2^(n-1) ~ 2^(n-1)-1溢出判断变形补码双符号位为01正溢出10负溢出IEEE 754单精度真值(-1)^S × 1.M × 2^(E-127)主存容量存储单元个数 × 存储字长地址线数log2(存储单元个数)Cache平均访问时间H×t_c (1-H)×(t_mt_c) 或 t_c缺失率×缺失代价直接映射行号/组相联组号块号 mod Cache行数/组数流水线完成时间(k n - 1) × 时钟周期流水线加速比顺序执行时间 / 流水线执行时间流水线吞吐率n / 完成总时间总线带宽总线宽度(字节) × 实际传输频率磁盘平均存取时间平均寻道 平均旋转延迟 传输时间平均旋转延迟转一圈时间 / 2这张表覆盖了期末考试中绝大多数计算大题的得分点。背公式的时候一定连带着记每个变量的单位和前提条件比如总线宽度要用字节还是位、Cache平均访问时间的t_c和t_m分别指什么这些细节才是拉分的关键。6.2 计算题的标准答题套路单位、公式、中间过程复习后期做题我给自己定了一个三步走的答题规范建议你也试试。第一步把题目给的已知条件列清楚统一单位该把MB换成B、把位换成字节的都提前换好。第二步写出对应的原始公式再代入数字不要跳步这样万一结果算错步骤分还能保住。第三步在最终答案里写清单位并回看一遍结果是否在合理范围内比如平均访问时间不可能比主存访问时间还大总线带宽不可能是负的。这个习惯在考场上作用非常大。计算题最怕的就是“心里觉得会但是过程一团乱”有的同学直接用计算器算答案不写中间过程结果错一个小数点整题报废。你只要按“已知条件 → 公式 → 代入 → 结果带单位”的流程写阅卷老师能顺着你的思路给分你自己检查的时候也容易发现哪一步出了问题。这个方法不限于组成原理所有理工科计算类考试都适用。7. 复习时踩过的坑和避坑建议7.1 别在没理解数据通路之前硬背微指令格式我第一遍复习组成原理最痛苦的章节就是控制器和微程序。当时的错误做法是把水平型微指令、垂直型微指令的各种格式背下来但完全不知道它们解决什么问题。后来我把教材上的CPU数据通路图当成一张“地图”来读从PC取指令到IR再经译码器生成控制信号控制信号打开哪些门数据就从哪个寄存器流向哪个寄存器。有了这张图打底微指令的每一个位段代表什么意思就豁然开朗了。如果你现在也觉得微指令这节像天书建议先放下公式把数据通路图反复看到能自己画出来再回头看控制器效率会翻倍。7.2 三个特别容易记混的公式场景第一个是Cache的平均访问时间。很多同学会把未命中时的时间直接写成t_m但忽略了CPU在访问主存之前已经先访问过Cache所以未命中时总时间该是t_c t_m。如果题目直接给出缺失代价那缺失代价本身已经包含了这个等待开销公式就不要再加t_c否则重复计算。第二个是扩展操作码的编码空间分配。定长操作码没有分支问题变长操作码要特别注意“保留编码作为扩展标志”有的同学最后算指令数时忘了留出扩展前缀导致多算。第三个是总线带宽里“宽度”的单位。32位总线到底是4字节还是32字节粗心的话能把答案差出8倍我的办法是见到总线宽度第一反应先除以8转成字节再进公式。7.3 考前一周的复习安排与考场小技巧临近考试的那一周不建议再大量刷新题重点是做三件事第一把第6节那张公式表默写一遍任何一条卡住了都说明有盲区立刻翻书补。第二把教材或笔记中的课后计算题重新算一遍不求快但求每个步骤都对得上。第三把错题本翻出来只看标记过的“踩坑点”和“审题陷阱”比如大小写B、Cache写策略、流水线分支代价。每天保持2小时左右的专注复习就够别熬夜这门课考的是思路清晰不是突击强度。考场上的小技巧也分享两个。拿到卷子先扫一眼计算大题心里有个数遇到数据量大的题先写公式再慢慢代数字如果某道小题卡住果断先跳过等整卷做完再回头。计算题如果答案非常“整”或者非常“丑”都要警惕是不是算错了比如总线带宽算出个非整数还带着负指数大概率是单位出了问题。这些都是实际考场上很容易救命的经验比多背一段概念有用得多。
返回列表