前言
在一些系统中,物理地址空间存在许多的空洞——无效区域
内核需要管理有效区域,只为或尽量只为有效区域中的页框建立page结构,避免物理内存的浪费
如何管理有效区域?
- 以页框为粒度?如位向量、…………
空间复杂度同页框(无效+有效)个数线性相关,扩展性差 - 以若干长度不等的有效或空洞区域为粒度?如线段树、…………
时间复杂度差,和有效区域个数成log关系
Linux内核以section为粒度
时间和空间的折中,并牺牲了一定的准确性,理论上
Linux内核将物理地址空间划分成若干个section
- 每个section大小一样,拥有PAGES_PER_SECTION(0x8000)个页框,即128MB
- 物理地址划分:
- bit0—bit11:页内字节偏移量
- bit12—bit26:section内的页框偏移量
- bit12—bit45:页框号
- bit27—bit45:section号
- 共计NR_MEM_SECTIONS(0x80000)个section
- 内核使用mem_section描述一个section
struct mem_section {
un