MIT6.828_HW4_xv6 lazy page allocation

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

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()偷过程。


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值