第11章:物理内存管理
本章概述
内存是操作系统管理的最重要资源之一。本章将实现物理内存管理器——检测可用内存、跟踪内存使用状态,并提供 kmalloc/kfree 接口。
学习目标
- 理解物理内存的组织方式
- 通过多种方式检测可用内存
- 实现位图(Bitmap)内存分配器
- 实现
kmalloc和kfree - 理解内存碎片问题
前置知识
- 基本的数据结构概念(位图、链表)
- 位运算
- 前几章的内核基础设施
知识要点
物理内存布局(典型PC)
0x00000000 ┌─────────────────────────┐
│ 实模式IVT + BIOS数据 │ 1 KB
0x00000400 ├─────────────────────────┤
│ 可用内存 │
0x00007C00 ├─────────────────────────┤
│ bootloader │ 512 bytes
0x00007E00 ├─────────────────────────┤
│ 可用内存 │
0x00001000 ├─────────────────────────┤
│ 内核加载位置 │
│ ... │
0x0009FC00 ├─────────────────────────┤
│ 扩展BIOS数据区 │ ~1 KB
0x000A0000 ├─────────────────────────┤
│ VGA显存 │ 128 KB
0x000C0000 ├─────────────────────────┤
│ BIOS ROM │ 256 KB
0x00100000 ├─────────────────────────┤
│ 扩展内存(可用) │ ← 大部分可用内存在这里
│ ... │
└─────────────────────────┘
分配策略
我们使用位图分配器:
- 将物理内存划分为4KB大小的页帧(page frame)
- 每个页帧用1个bit表示使用状态
- 128MB内存只需要 128MB / 4KB / 8 = 4KB 的位图
文件结构
11-物理内存管理/
├── README.md ← 本文件
├── 理论讲解.md ← 内存管理理论
├── code/
│ ├── pmm.h ← 物理内存管理器接口
│ ├── pmm.c ← 位图分配器实现
│ ├── kernel.c ← 更新:集成PMM
│ ├── Makefile
│ └── [共享文件]
├── 常见错误.md
└── 练习题.md
构建与测试
cd code
make
make run本章收获
- ✅ 物理内存检测与映射
- ✅ 页帧级别的内存分配与释放
- ✅
kmalloc/kfree内核内存分配接口