- 初始化物理内存页管理器框架pmm_manager;
- 建立空闲的page链表,这样就可以分配以页(4KB)为单位的空闲内存了;
- 检查物理内存页分配算法;
- 为确保切换到分页机制后,代码能够正常执行,先建立一个临时二级页表;
- 使能分页机制;
- 从新设置全局段描述符表;
- 取消临时二级页表;
- 检查页表建立是否正确;
- boot/bootasm.S中探测内存部分(从probe_memory到finish_probe的代码);
- 管理每个物理页的Page数据结构(在mm/memlayout.h中),这个数据结构也是实现连续物理内存分配算法的关键数据结构,可通过此数据结构来完成空闲块的链接和信息存储,而基于这个数据结构的管理物理页数组起始地址就是全局变量pages,具体初始化此数组的函数位于page_init函数中;
- 用于实现连续物理内存分配算法的物理内存页管理器框架pmm_manager,这个数据结构定义了实现内存分配算法的关键函数指针,而同学需要完成这些函数的具体实现;
- 设定二级页表和建立页表项以完成虚实地址映射关系,这与硬件相关,且用到不少内联函数,源代码相对难懂一些。具体完成页表和页表项建立的重要函数是boot_map_segment函数,而get_pte函数是完成虚实映射关键的关键。