平坦与分段内存是递归的:硬件不懂递归,程序员却离不开它
来源: humprog.org — 2026-08-25
概述
作者回顾了自己近期研究 x86 段式内存的经历,指出一个贯穿 64 位迁移与快速系统调用特性演进的趋势:细粒度内存保护的衰退。他给出的解释是 Unix——从 PDP-11/PDP-7 一路继承下来的对平坦地址空间的偏爱,让“没人想要”64 位的段式特性。他又调侃 WebAssembly 爱好者“分段内存在回归”,因为 Wasm 更像是 OS/2 之类非 Unix 系统的编程模型。真正有意思的洞见是:这个问题不该用“是/否”来框定,因为它是递归的——程序员总会在平坦内存上再施加一层子划分(arena、内存池、结构体里的字段),而硬件是有限状态、本质非递归的。CHERI 支持硬件认识这种子划分,过去的硬件则不支持(x86 段式又因特权模型太粗而做不了真正的细粒度隔离)。软件递归、硬件非递归的张力,正是问题的核心。
核心要点
- 从 286 时代就有的 x86 段式内存保护,在迁移到 64 位与快速系统调用时被逐步削弱
- Unix 及其对平坦地址空间的偏爱(源自 PDP-11/PDP-7)是段式特性无人想要 64 位版本的主要原因
- 作者调侃 WebAssembly 更像是 OS/2 之类非 Unix 系统的编程模型,分段内存正以新形式回归
- 传统 x86 段式只做到粗粒度的故障隔离,受限于四环特权模型,挡不住恶意只能挡无能
- 程序员的心理抽象永远不是平坦的,他总会在平坦内存上递归地再施加子划分,而硬件本质上不递归
金句
The programmer's mental abstraction is never flat — but hardware is very much non-recursive.(程序员的抽象从不平坦,而硬件却非常不递归。)
👍 0
👎 0
返回 Lobsters 首页