第12章:虚拟内存
本章概述
虚拟内存是现代操作系统最重要的抽象之一。本章将实现x86的分页机制,建立从虚拟地址到物理地址的映射。
学习目标
- 理解虚拟内存的概念和必要性
- 实现页目录和页表
- 启用分页(设置CR0和CR3)
- 处理缺页异常(Page Fault, INT 14)
- 实现内核高地址映射
前置知识
- 第11章的物理内存管理器
- 位运算
- 基本的地址转换概念
知识要点
虚拟地址翻译
虚拟地址(32位):
┌──────────┬──────────┬──────────┐
│ 页目录索引 │ 页表索引 │ 页内偏移 │
│ (10位) │ (10位) │ (12位) │
└──────────┴──────────┴──────────┘
│ │ │
↓ ↓ ↓
页目录 ──→ 页表 ──→ 物理帧 + 偏移 = 物理地址
二级页表结构
- 页目录: 1024个条目,每个指向一个页表
- 页表: 1024个条目,每个指向一个4KB物理帧
- 覆盖范围: 1024 × 1024 × 4KB = 4GB
文件结构
12-虚拟内存/
├── README.md ← 本文件
├── 理论讲解.md ← 分页理论详解
├── code/
│ ├── vmm.h ← 虚拟内存管理器接口
│ ├── vmm.c ← 分页实现
│ ├── kernel.c ← 更新:启用分页
│ ├── Makefile
│ └── [共享文件]
├── 常见错误.md
└── 练习题.md
构建与测试
cd code
make
make run本章收获
- ✅ 理解x86二级页表机制
- ✅ 能够创建和管理页映射
- ✅ 启用分页后内核正常运行
- ✅ 缺页异常处理