01 · 系统概述与基本模型
来源:第 1 讲课件 pp.16~42;第 4 讲 pp.12~24;教材第 1 章。第 1 讲的课程历史、组织与成绩说明列于文末,以免与技术内容混淆。
信息就是位加上解释#
同一串比特可以解释为整数、浮点数、字符、地址或指令。例如 0x3F800000 按 IEEE binary32 是 1.0,按无符号整数是 1065353216。机器不会凭位串自动知道程序员“本来想要”的类型;指令、数据布局和语言规则共同决定意义。
源文件通常是文本,字符用编码表示;机器代码、目标文件和可执行文件含二进制结构。ASCII 数字 '0' 是 0x30,并非整数 0。字符串结尾的 \0 是零字节,不等于字符 '0'。
从 C 到执行#
源代码 .c → 预处理 .i → 编译 .s → 汇编 .o → 链接 可执行文件
宏/头文件 汇编文本 机器码 符号解析/重定位
- 预处理展开
#include、宏和条件编译;编译进行语法与类型检查、优化并生成汇编。 - 汇编器把指令编码为字节,目标文件还含符号、节、重定位记录,通常不能直接运行。
- 链接器合并目标文件与库,解析跨文件的符号引用并调整地址。加载与链接是不同步骤。
- 操作系统装入程序并建立进程的执行环境;处理器执行机器指令。
gcc -E看预处理,gcc -Og -S生成汇编,gcc -c生成目标文件,objdump -d反汇编。不同编译器版本和优化级别可能产生不同但等价的代码。- 反汇编的一行通常包含:指令地址、机器码字节、助记符、操作数;标签和调试信息不是每条机器指令必须包含的内容。
处理器与内存#
CPU 中,程序计数器 PC(x86-64 为 %rip)指向执行位置,寄存器保存临时数据,ALU 完成算术和逻辑运算,条件码记录部分结果性质。内存是按字节寻址的存储空间,程序通过地址访问数据。总线传递地址、数据和控制信号。
以 addq %rdx,(%rcx) 为例:取指并译码 → 读 %rcx 得到地址 → 读该地址的 8 字节 → 读 %rdx → ALU 做 64 位加法 → 把低 64 位写回内存 → 更新条件码。额外的进位由 CF 记录,不会自动多写第 9 字节。此处描述的是体系结构语义,不规定现代 CPU 内部必须按这些步骤串行实现。
**ISA 与微体系结构:**ISA 规定软件可见的指令、寄存器、编码和行为;微体系结构决定流水线、执行单元、预测与缓存如何实现这些行为。不同 CPU 可以实现同一个 ISA。
五个贯穿全课的问题#
| 问题 | 具体后果 |
|---|---|
| 机器整数不是数学整数 | 固定位宽会丢失高位;类型转换改变比较结果 |
| 浮点不是实数 | 0.1 可能无法精确表示;结合律、分配律可能失效 |
| 必须理解机器代码 | 定位性能瓶颈、调试、理解栈和调用、识别内存错误 |
| 内存影响正确性与性能 | 越界、悬空指针、内存泄漏;访问局部性改变速度 |
| 渐近复杂度不等于运行时间 | 相同 O(n²) 算法因访问顺序、常数、缓存而不同 |
C 的数组越界会造成未定义行为,不保证“恰好改坏紧邻的变量”。课件用结构体中的越界写演示浮点变量被破坏,是具体机器布局下的后果,不是可靠的语言语义。
层次、抽象与性能#
寄存器 → L1/L2/L3 缓存 → 主存 → 本地持久存储 → 远程存储,通常越向后容量越大、每字节成本越低、访问越慢。时间局部性是近期用过的内容可能再次使用,空间局部性是附近内容可能很快使用。C 的行优先矩阵按行访问通常比按列访问具有更好的空间局部性。
操作系统提供进程、虚拟内存、文件等抽象:进程是正在运行的程序及其状态;虚拟内存提供每个进程看到的地址空间;文件把多种 I/O 对象表现为字节序列。网络使程序还需要处理消息、延迟、协议和并发。
并发表示多个任务的执行在时间上重叠;并行表示同一时刻实际执行多个操作。可通过多核、指令级并行、SIMD 等层次实现并行。不能把“多线程”直接等同于“更快”。
Amdahl 定律:若原时间中比例 α 的部分加速 k 倍,总加速比为 1 / ((1-α)+α/k)。α=0.8、k=4 时总加速比是 2.5;即使 k 无穷大,上限也只有 5。
不属于计算题但课件出现的内容#
课程源于 CMU 从程序员视角理解系统的教学路线;北大采用大班与小班研讨结合。课件列出 Data、Bomb、Attack、Arch、Cache、Shell、Malloc、Proxy 等实验及其对应主题。课程组织、实验节点与成绩构成是教学安排,复习时查当前课件和通知,不从历史仓库推断今年政策。第 1 讲技术部分之外的页码均在覆盖索引保留。
自检#
能否分别说明编译、汇编、链接与加载做什么?为什么更高主频不能单独保证更快?为什么两个相同复杂度的矩阵遍历会有性能差异?为什么地址相同的位串能有完全不同的解释?