MIT6.828-Lab2-Part1-物理内存页管理

 

Intro

内存管理分成两部分:

  • 物理内存分配器:使得内核可以分配和释放内存。分配器以4096 bytes,即 为单位进行操作,另外还需要维护一个数据结构记录页面的相关信息:空闲、谁占用等。
  • 内存映射:将内核和软件使用的虚拟内存地址映射为实际的物理内存地址。x86硬件的内存管理单元(memory management unit, MMU)在指令使用内存时执行映射,并查阅一组页表。

Lab2增加了一些新的源文件:

  • inc/memlayout.h: 描述了必须通过修改 pmap.c 来实现的虚拟地址空间分布
  • kern/pmap.c: 修改它实现虚拟地址空间分布
  • kern/pmap.h: 和 memlayout.h 一起定义了 struct PageInfo,其用于跟踪哪些物理内存页面是空闲的
  • kern/kclock.h, kern/kclock.c: 操纵PC的电池供电时钟和CMOS RAM硬件,这其中的 BIOS 记录 PC 包含的物理内存量等。

pmap.c 中的代码需要读取此设备硬件以计算出有多少物理内存,但这部分代码已经写好了,不需要再去了解CMOS硬件的工作细节。

物理内存页管理

操作系统必须跟踪记录物理内存是空闲还是使用中,此课程的JOS使用 作为管理内存的 粒度,以便它可以使用MMU来映射和保护每一块分配的内存。

Exercise1:

  1. 完善 kern/pmap.c 中的函数:boot_alloc(), mem_init(), page_init(), page_alloc(), page_free()check_page_free_list()check_page_alloc() 两个函数将会检测你写的页分配器代码是否正确。

参考资料

  1. cnblog-fatsheep9146