O/S使用页表硬件可以使用的许多巧妙技巧之一是延迟分配用户空间堆内存。 Xv6应用程序使用sbrk()系统调用向内核请求堆内存。 在我们给出的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。 内核为大型请求分配和映射内存可能需要很长时间。 例如,考虑一个千兆字节由262,144个4096字节的页组成; 这是一个巨大的分配数量,即使每一个都是便宜的。 此外,一些程序分配的内存比它们实际使用的内存要多(例如,实现稀疏数组),或者在使用之前分配内存。 为了让sbrk()在这些情况下更快地完成,复杂的内核会延迟分配用户内存。 也就是说,sbrk()不分配物理内存,只是记住分配了哪些用户地址,并在用户页表中将这些地址标记为无效。 当进程第一次尝试使用任何给定的惰性分配内存页时,CPU会生成一个页错误,内核会通过分配物理内存、置零和映射来处理这个错误。 在本实验中,您将向xv6添加这个惰性分配特性。O/S使用页表硬件可以使用的许多巧妙技巧之一是延迟分配用户空间堆内存。 Xv6应