虚拟内存
虚拟内存 一句话本质:虚拟内存是硬件(MMU)+ 操作系统共同提供的一块“每人独享整片地址空间”的幻觉——程序以为自己霸占了从 0 到 4GB/256TB 的全部内存,实际上物理内存被所有进程切片共享,地址翻译由 MMU 在每条指令取数时悄悄完成。 CS61C 站在机器/架构视角看虚拟内存:我们关心的是「一条 lw 指令里的地址是怎么变成内存条上某个字节的物理位置的」「为什么要分页」「TLB 为什么能让翻译几乎免费」。至于缺页时操作系统怎么换页、怎么选受害者页,那是 CS162 的主场(本文只在末尾点到为止并附对照)。 1. 为什么需要虚拟内存没有虚拟内存的裸机世界里,所有程序直接操作物理地址,会带来三个老大难: 隔离性为零:进程 A 写错一个指针就可能踩烂进程 B 的数据,甚至改掉内核。 地址空间碎片:程序加载时得去找一块足够大的连续物理内存,内存用久了就「东一块西一块」。 无法超配(overcommit):物理内存只有 8GB,程序却想用 16GB?直接没门。 虚拟内存用一层地址抽象同时解决这三点: 每个进程拿到一个独立的虚拟地址空间(virtua...

