引言
本次实验将编写操作系统的内存管理代码,分为两个部分:
- 第一部分是内核的物理内存分配器,使内核能够分配和释放内存。 你的分配器将以4096字节为单位工作,称为page。 你的任务是
- 维持一个记录page分配状态的数据结构
- 多少进程正在共享每一个分配的page
- 编写分配和释放page的程序
- 第二部分是虚拟内存,它将内核和用户软件使用的虚拟地址映射到物理内存中的地址。 当指令使用内存时,x86硬件的内存管理单元(MMU)执行映射,查询一组page table。 您需要根据我们提供的规格修改JOS设置MMU的页面
|
|
Lab2 包含以下新文件:
inc/memlayout.h
kern/pmap.c
kern/pmap.h
kern/kclock.h
kern/kclock.c
inc/memlayout.h
描述了必须通过修改 pmap.c
来实现的虚拟地址的布局
memlayout.h
和 pmap.h
定义了PageInfo
,用于跟踪哪些物理内存页面是free的
kclock.c
和 kclock.h
操纵PC的电池供电时钟和CMOS RAM硬件,其内部的BIOS记录PC包含的物理内存大小等信息
pmap.c
需要读取设备硬件以计算物理内存大小,但这部分已经完成了:你不需要知道CMOS硬件的工作细节。
请特别注意 memlayout.h
和 pmap.h
,因为本实验要求您使用并理解它们包含的许多定义。 您可能也想查看 inc
/ mmu.h
,因为它还包含许多对本实验有用的定义。