虚拟内存核心原理

基础概念
地址翻译
页表结构
多级页表
缺页中断

什么是虚拟内存?

核心概念:虚拟内存是操作系统提供的一种内存管理技术,它为每个进程提供一个连续、独立且看似无限的地址空间。

动画演示:虚拟内存与物理内存的映射

为什么需要虚拟内存?

内存隔离
每个进程独立地址空间
内存扩展
使用磁盘扩展内存
内存共享
共享库共用物理页
简化编程
无需关心物理布局

地址翻译过程

核心机制:CPU生成的虚拟地址需要通过页表翻译成物理地址才能访问物理内存。

动画演示:地址翻译流程

逐步说明(点击下一步)

步骤1:生成虚拟地址
CPU生成虚拟地址 0x12345678
VPN=0x12345,Offset=0x678
步骤2:查询页表
MMU用VPN查页表,获取PPN
页表项地址 = CR3 + VPN × PTE大小
步骤3:构造物理地址
物理地址 = PPN << 12 | Offset
0x6789 << 12 | 0x678 = 0x6789678
步骤4:访问物理内存
使用物理地址访问物理内存
✓ 翻译完成!

页表原理

页表(Page Table):存储虚拟页到物理页映射关系的数据结构。

动画演示:页表查找过程

页表项(PTE)关键字段

字段作用
有效位该页是否在物理内存中(1=在,0=缺页)
物理页号(PPN)对应的物理页框号
访问位是否被访问过(用于置换算法)
修改位是否被修改过(换出时是否写回)
保护位读/写/执行权限

多级页表设计

为什么多级?单级页表占用太大!多级页表只为使用的地址分配页表,大幅节省内存。

动画演示:两级页表地址翻译

示例(32位系统):
地址 = [高10位:L1索引 | 中10位:L2索引 | 低12位:Offset]
优点:未使用的区域不需要分配二级页表!

缺页中断(Page Fault)

缺页中断:访问的页面不在物理内存中时触发,OS需要从磁盘加载页面。

动画演示:缺页中断处理流程

处理流程(点击下一步)

步骤1:访问缺页
进程访问的页面不在物理内存中
步骤2:触发缺页中断
CPU切换到内核态,执行缺页处理程序
步骤3:OS处理缺页
从磁盘读页面→分配物理页→更新页表
步骤4:重新执行
CPU切回用户态,重新执行指令
✓ 处理完成!
⚠️ 性能警告:缺页中断需要磁盘I/O,比内存访问慢10万倍