lab5 是lazy page allocationi相关,主要解决页面错误问题。O/S可以对页表硬件使用的许多巧妙技巧之一是延迟分配用户空间堆内存。Xv6应用程序使用sbrk()系统调用向内核请求堆内存。在我们给出的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。内核为一个较大的请求分配和映射内存可能需要很长时间。例如,考虑一个gb由262,144 4096字节的页组成;即使每一种都很便宜,这也是一笔巨大的投资。此外,一些程序分配的内存比实际使用的要多(例如,实现稀疏数组),或者在使用之前就分配好内存。为了让sbrk()在这些情况下更快地完成,复杂的内核会延迟分配用户内存。也就是说,sbrk()不分配物理内存,而只是记住分配了哪些用户地址,并在用户页表中将这些地址标记为无效。当进程第一次尝试使用惰性分配内存的任何给定页面时,CPU会生成一个页面错误,内核会通过分配物理内存、将其置零和映射来处理该错误。在这个实验中,您将向xv6添加这个惰性分配特性。
Eliminate allocation from sbrk()
sbrk里只只增加p->sz不分配物理内存
实现:
Lazy allocation
在usertrap里添加缺页中断时的处理,主要是对缺页的虚拟内存增加映射