最近在学计算机组成原理,把课上和书上反复出现的概念串成一篇笔记,方便自己以后回看,也分享给同样在学这门课的朋友。
一、计算机在干什么:结构与控制
1. 冯·诺依曼体系结构
现代计算机大多仍围绕两个想法展开:
- 存储程序:程序与数据都以二进制形式放在存储器里,按地址读写。
- 程序控制:在程序驱动下自动、顺序执行指令,各部件协同工作。
五大部件各自分工:运算器做算术与逻辑运算,控制器负责取指译码和发控制信号,存储器保存程序与数据,输入/输出设备负责与外界交换信息。
2. 一条指令要走哪些阶段
| 阶段 | 主要任务 |
|---|---|
| 取指(IF) | 按 PC 从主存取指令,PC 通常自增 |
| 间址(IND) | 间接寻址时再取一次有效地址 |
| 执行(EX) | 完成运算、数据传送等 |
| 中断(INT) | 响应中断,保存断点并转服务程序 |
并不是每条指令都会经历全部阶段:只有间接寻址才需要间址周期;只有执行结束时有中断请求才会进入中断周期。
3. 控制器:硬布线还是微程序
- 硬布线控制器:用组合逻辑直接产生控制信号,延迟小、速度快,但改控制逻辑要动硬件;RISC 指令规整,常采用这种方式追求性能。
- 微程序控制器:把控制信号编成微指令放在控制存储器里,修改方便,速度相对慢一些;CISC 指令复杂,用微程序更易扩展。
4. SRAM 和 DRAM 各用在哪
| 维度 | SRAM | DRAM |
|---|---|---|
| 存储单元 | 触发器(约 6 管) | 电容 + 单管 |
| 速度 | 快 | 较慢(需周期性刷新) |
| 集成度与成本 | 集成度低、成本高 | 集成度高、成本低 |
| 常见位置 | Cache | 主存(内存) |
5. Cache 怎么映射到主存
- 直接映射:每个主存块固定对应 Cache 中一行,电路简单,但容易发生块冲突。
- 全相联:主存块可放进 Cache 任意行,冲突少,标记比较逻辑更复杂。
- 组相联:先按组索引定位到某一组,再在组内多路放置,是工程里很常见的折中。
二、数据在机器里长什么样
补码与溢出
定点整数常用补码:正数补码即原码;负数在符号位为 1 的前提下,数值部分按位取反再加 1。判断溢出时,变形补码(双符号位) 很实用:结果高位两个符号位相同表示无溢出,不同则表示溢出。
IEEE 754 单精度浮点数
32 位布局:1 位符号 S + 8 位阶码(偏置 127)+ 23 位尾数(规格化数隐含前导 1)。
十进制真值可写成:
其中 是阶码的无符号数值, 是尾数的小数部分。
三、Cache 与主存:几个常用关系
分析 Cache 题目时,我一般会按这几步想:
- 组数:
- 地址划分:标记 Tag + 组索引 Index + 块内偏移 Offset,位数加起来等于主存地址线数。
- 平均存取时间:, 为命中率。
- LRU 替换:命中则更新“最近使用”顺序;缺失则淘汰最久未用的那一行。
四、I/O 和 CPU 性能怎么估算
程序中断式 I/O:每秒中断次数 ≈ 数据传输速率 ÷ 每次传输字节数;CPU 为处理该设备中断占用的比例,可粗略用(中断次数 × 每次处理周期数)÷ CPU 主频来估。
程序执行时间:执行时间 = 指令条数 IC × 平均 CPI ÷ 主频;加权平均 CPI = 各类指令条数与 CPI 乘积之和,再除以总指令条数 IC。
五、数据通路与存储器扩展
单总线结构下的取指微操作(示例)
MAR ← PC → PC ← PC+1 并启动读主存 → MDR ← M[MAR] → IR ← MDR
四步把一条指令从主存送进指令寄存器,是理解后续执行周期的基础。
用多片小容量芯片拼大容量主存
当单片规格(如 16K×8)达不到目标(如 64K×16)时,往往需要 字扩展 + 位扩展 同时进行:位方向上并联芯片凑齐数据位宽,字方向上靠片选信号选中不同芯片组。地址线通常低位作片内地址,高位作片选或组选。
六、流水线里的数据相关
RAW(写后读) 最常见:前一条指令写某个寄存器,后一条马上读它。例如先 SUB R3, R2, R1 再 ADD R4, R3, R1,就是 I1→I2:R3 相关。
常见应对方式包括:前推(Forwarding) 把运算结果旁路到后面指令的输入端、插入气泡(Stall) 等待写回完成、以及编译器 指令调度 在中间插入无关指令拉开距离。
写在最后
对我来说,这门课比较适合按一条线理解:整体结构 → 指令与控制 → 数的表示与运算 → 存储层次与 Cache → I/O 与性能 → 总线与扩展 → 流水线。中间涉及的补码与溢出、浮点格式、Cache 地址划分、CPI 与执行时间、芯片扩展与 RAW 相关,都是反复会碰到的话题。
如果你也在学计组,欢迎一起交流;文中有错漏也请在评论区指正。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





