1. 结构设计
内核需要管理哪些物理页是空闲的。xv6 使用了一个简单的数据结构:自由链表 (Free List)。
- kmem 结构体:包含一个自旋锁(保证多核安全)和一个指向
run结构体的链表头。 - run 结构体:其实就是空闲页本身。由于物理页此时没人在用,内核直接在页的开头存一个
next指针。
2. 核心操作
- kalloc():从链表头部弹出一个物理页,将其填满垃圾数据(防止残留信息泄露),并返回指针。
- kfree():将一个物理页重新压入链表头部,等待再次分配。
内核需要管理哪些物理页是空闲的。xv6 使用了一个简单的数据结构:自由链表 (Free List)。
run 结构体的链表头。next 指针。