结论:分段把地址空间按逻辑单位(代码段、数据段、栈段)划分,每段长度可变、独立保护;分页把虚拟和物理内存都切成固定大小的页/页框,按页映射。现代系统以分页为主,因为它用固定粒度换来了无外部碎片和简单的换出管理;分段的长可变性正是外部碎片和复杂分配的根源。
展开:对比三个维度:1)碎片——分页消除了外部碎片(任何空闲页框都能用),只剩页内最多一页的内部碎片;分段恰好相反。2)共享与保护——分段的粒度天然贴合逻辑模块(共享代码段、只读数据段),语义清晰;分页的保护粒度是页,跨段同页时语义粗糙,实际用页表项的权限位实现。3)对程序员可见性——分段可见(段地址 + 偏移),分页完全透明。x86 历史包袱是分段硬件强制存在,Linux 的做法是把所有段基址设为 0、界限设为最大,等于绕过段机制只用分页。易错点:段页式结合(先分段、段内分页)曾用于兼得两者优点,现代 64 位系统基本纯分页。
追问方向:多级页表为何必要(页表本身的内存开销)、TLB 的工作原理与上下文切换时的刷新(PCID/ASID 优化)。