虚拟内存与物理内存管理x86-64 四级分页 · 缺页 · 伙伴系统 · 页面回收 · 教学示意缩比
t = 0 ns
程序 0 / 0
目标状态 —— 这个子系统存在的唯一理由:进程能按被允许的方式访问它的虚拟地址,并读到应有的字节
本次访问执行0步
其中改变目标状态0步
本次耗时—
累计 步数 / 改变目标0 / 0
占比—
速度
场景
物理帧
手动访问
内核连续分配
虚拟地址位域分解 —— 48 位有效地址被硬件切成 4 个 9 位索引加 12 位页内偏移
进程地址空间(VMA)
未映射
匿名页
文件页
只读共享(待 CoW)
已换出
数据损坏
物理内存帧
空闲
匿名
文件
页表页
内核连续块
回写中
主链路与支线 —— 中间是主流程;只有黄色那一步真正改变了目标状态,其余全是配套设施
括号内为累计次数
交换区 / 页缓存
页缓存(文件页 → 物理帧)
页缓存被两个进程共享:同一文件页只占一个物理帧,各进程页表分别指向它。
这也是为什么回收它之前必须先通过反向映射找到所有指向它的页表项。
拆掉它试试 —— 同一程序、同一随机种子,跑完整个访问序列
点上方任意机制旁的「对比」按钮。
预期:关掉只影响性能的机制,最终结果仍然正确,只是慢得多;
关掉影响正确性的机制,会出现具体的错误现象(进程读到不属于它的物理页)。