mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1531 字
4 分钟
计算机组成原理:从结构到流水线的一趟梳理
2026-06-28

最近在学计算机组成原理,把课上和书上反复出现的概念串成一篇笔记,方便自己以后回看,也分享给同样在学这门课的朋友。

一、计算机在干什么:结构与控制#

1. 冯·诺依曼体系结构#

现代计算机大多仍围绕两个想法展开:

  • 存储程序:程序与数据都以二进制形式放在存储器里,按地址读写。
  • 程序控制:在程序驱动下自动、顺序执行指令,各部件协同工作。

五大部件各自分工:运算器做算术与逻辑运算,控制器负责取指译码和发控制信号,存储器保存程序与数据,输入/输出设备负责与外界交换信息。

2. 一条指令要走哪些阶段#

阶段主要任务
取指(IF)按 PC 从主存取指令,PC 通常自增
间址(IND)间接寻址时再取一次有效地址
执行(EX)完成运算、数据传送等
中断(INT)响应中断,保存断点并转服务程序

并不是每条指令都会经历全部阶段:只有间接寻址才需要间址周期;只有执行结束时有中断请求才会进入中断周期。

3. 控制器:硬布线还是微程序#

  • 硬布线控制器:用组合逻辑直接产生控制信号,延迟小、速度快,但改控制逻辑要动硬件;RISC 指令规整,常采用这种方式追求性能。
  • 微程序控制器:把控制信号编成微指令放在控制存储器里,修改方便,速度相对慢一些;CISC 指令复杂,用微程序更易扩展。

4. SRAM 和 DRAM 各用在哪#

维度SRAMDRAM
存储单元触发器(约 6 管)电容 + 单管
速度较慢(需周期性刷新)
集成度与成本集成度低、成本高集成度高、成本低
常见位置Cache主存(内存)

5. Cache 怎么映射到主存#

  • 直接映射:每个主存块固定对应 Cache 中一行,电路简单,但容易发生块冲突。
  • 全相联:主存块可放进 Cache 任意行,冲突少,标记比较逻辑更复杂。
  • 组相联:先按组索引定位到某一组,再在组内多路放置,是工程里很常见的折中。

二、数据在机器里长什么样#

补码与溢出#

定点整数常用补码:正数补码即原码;负数在符号位为 1 的前提下,数值部分按位取反再加 1。判断溢出时,变形补码(双符号位) 很实用:结果高位两个符号位相同表示无溢出,不同则表示溢出。

IEEE 754 单精度浮点数#

32 位布局:1 位符号 S + 8 位阶码(偏置 127)+ 23 位尾数(规格化数隐含前导 1)。

十进制真值可写成:

(1)S×1.M×2E127(-1)^S \times 1.M \times 2^{E-127}

其中 EE 是阶码的无符号数值,MM 是尾数的小数部分。


三、Cache 与主存:几个常用关系#

分析 Cache 题目时,我一般会按这几步想:

  1. 组数
S=Cache 总块数组相联路数S = \dfrac{\text{Cache 总块数}}{\text{组相联路数}}
  1. 地址划分:标记 Tag + 组索引 Index + 块内偏移 Offset,位数加起来等于主存地址线数。
  2. 平均存取时间Tavg=HTcache+(1H)TmainT_{avg} = H \cdot T_{cache} + (1-H) \cdot T_{main}HH 为命中率。
  3. LRU 替换:命中则更新“最近使用”顺序;缺失则淘汰最久未用的那一行。

四、I/O 和 CPU 性能怎么估算#

程序中断式 I/O:每秒中断次数 ≈ 数据传输速率 ÷ 每次传输字节数;CPU 为处理该设备中断占用的比例,可粗略用(中断次数 × 每次处理周期数)÷ CPU 主频来估。

程序执行时间:执行时间 = 指令条数 IC × 平均 CPI ÷ 主频;加权平均 CPI = 各类指令条数与 CPI 乘积之和,再除以总指令条数 IC。


五、数据通路与存储器扩展#

单总线结构下的取指微操作(示例)#

MAR ← PCPC ← PC+1 并启动读主存 → MDR ← M[MAR]IR ← MDR

四步把一条指令从主存送进指令寄存器,是理解后续执行周期的基础。

用多片小容量芯片拼大容量主存#

当单片规格(如 16K×8)达不到目标(如 64K×16)时,往往需要 字扩展 + 位扩展 同时进行:位方向上并联芯片凑齐数据位宽,字方向上靠片选信号选中不同芯片组。地址线通常低位作片内地址,高位作片选或组选。


六、流水线里的数据相关#

RAW(写后读) 最常见:前一条指令写某个寄存器,后一条马上读它。例如先 SUB R3, R2, R1ADD R4, R3, R1,就是 I1→I2:R3 相关。

常见应对方式包括:前推(Forwarding) 把运算结果旁路到后面指令的输入端、插入气泡(Stall) 等待写回完成、以及编译器 指令调度 在中间插入无关指令拉开距离。


写在最后#

对我来说,这门课比较适合按一条线理解:整体结构 → 指令与控制 → 数的表示与运算 → 存储层次与 Cache → I/O 与性能 → 总线与扩展 → 流水线。中间涉及的补码与溢出、浮点格式、Cache 地址划分、CPI 与执行时间、芯片扩展与 RAW 相关,都是反复会碰到的话题。

如果你也在学计组,欢迎一起交流;文中有错漏也请在评论区指正。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

计算机组成原理:从结构到流水线的一趟梳理
https://sereinz.top/posts/post7/
作者
Serein
发布于
2026-06-28
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录