1. HW4_xv6 lazy page allocation
操作系统可以与页表硬件一起使用的许多巧妙技巧之一是堆内存的惰性分配。Xv6应用程序使用sbrk()系统调用向内核请求堆内存。 在我们给你的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。 有些程序分配到内存但从不使用它,例如实现大稀疏数组。精妙的内核延迟每页内存的分配,直到应用程序尝试使用该页面 - 如页面错误所示。
1.1. Part One: Eliminate allocation from sbrk()
你的新sbrk(n)应该只用n增加进程的大小(myproc() - > sz)并返回旧的大小。
if(argint(0, &n) < 0)
return -1;
addr = myproc()->sz;
myproc()->sz += n;
return addr;
$ echo hi
pid 3 sh: trap 14 err 6 on cpu 0 eip 0x112c addr 0x4004--kill proc
"pid 3 sh:trap …"消息来自trap.c中的陷入内核处理程序; 它捕获了页面错误(陷入14或T_PGFLT),xv6内核不知道如何处理。addr 0x4004表示导致页面错误的虚拟地址为0x4004。
1.2. Part Two: Lazy allocation
根据提示来做就比较明了了。主要需要从vm.c中的allocuvm()偷过程。

这篇博客探讨了MIT6.828课程作业HW4中的Xv6操作系统如何实现懒页分配,旨在消除sbrk()的内存分配,并在实际使用前延迟物理内存的分配。内容分为两部分,第一部分讲解了如何修改sbrk(),使其仅增加进程大小而不立即分配内存。第二部分介绍了如何实现懒惰分配,避免对未使用页面的预先分配,从而提高效率。
最低0.47元/天 解锁文章
4265

被折叠的 条评论
为什么被折叠?



