MIT 6.S081 操作系统课程系列5 lazy page allocation

MIT 6.S081 操作系统课程系列5 lazy page allocation


https://pdos.csail.mit.edu/6.828/2020/labs/lazy.html
本次实验需要读xv6手册第4章,主要是4.6缺页异常。看相关kernel代码。
实现lazy分配。


缺页异常

COW fork


做题

本次实验从sbrk开始做一系列修改,最终实现lazy分配。

  1. 如果扩大内存,sbrk的n大于0。去掉growproc,直接更新sz。
  2. usertrap(trap.c)里r_scause()为13或15时是缺页异常。r_stval()获取缺页的地址。
  3. 缺页时模拟一下growproc的流程,即uvmalloc里,先分配一页内存,再做好映射。
  4. uvmunmap里PTE无效时直接continue,不再panic。

到此echo可以正常完成。

  1. 如果缩小内存,sbrk的n小于0。走原始的growproc(n)。
  2. 如果缺页地址大于进程的sz,设为killed。
  3. 缺页分配内存时如果失败,设为killed。
  4. fork的uvmcopy里如果PTE无效直接continue,不再panic。

lazytests

测试程序lazytests有三个函数sparse_memory,sparse_memory_unmap,oom。

此时lazytests可过

usertests测试


总结

上次更新 2021-02-04