虚拟内存核心原理
基础概念
地址翻译
页表结构
多级页表
缺页中断
什么是虚拟内存?
核心概念:
虚拟内存是操作系统提供的一种内存管理技术,它为每个进程提供一个连续、独立且看似无限的地址空间。
动画演示:虚拟内存与物理内存的映射
播放动画
重置
为什么需要虚拟内存?
内存隔离
每个进程独立地址空间
内存扩展
使用磁盘扩展内存
内存共享
共享库共用物理页
简化编程
无需关心物理布局
地址翻译过程
核心机制:
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万倍
!