点击运行程序之后,源代码并不会直接进入 CPU。操作系统需要创建进程、映射可执行文件,CPU 才能从入口地址开始读取并执行机器指令。
这一集沿着一段程序的真实执行路径,讲清指令、寄存器、流水线、缓存、分支预测和进程调度如何协作,以及为什么 CPU 很忙不等于程序正在高效工作。
重点内容:
- 源代码如何变成机器指令
- Linux 如何装载可执行文件并按需读取页面
- CPU 如何取指、译码和执行
- 乱序执行为什么不会打乱程序结果
- 缓存未命中为什么会让 CPU 等待
- 分支预测错误为什么代价昂贵
- 多个程序如何轮流使用 CPU
- 如何用 perf 理解周期、指令和缓存未命中
英文词对照:
- Machine Instruction:机器指令
- Program Counter:程序计数器
- Register:寄存器
- Pipeline:流水线
- Out-of-order Execution:乱序执行
- Cache Miss:缓存未命中
- Branch Prediction:分支预测
- Context Switch:上下文切换
- Instructions Per Cycle:每周期执行指令数
