「这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战」
Lab: xv6 lazy page allocation
pdos.csail.mit.edu/6.S081/2020…
新的 2020 版哦。
1 | sh复制代码$ git fetch |
Eliminate allocation from sbrk()
这道题就是把 sys_sbrk 里的 growproc 调用删了,等用到的时候再去分配内存。如果是空间减小,要取消分配。
1 | c复制代码uint64 |
Lazy allocation
在 vm.c
里面实现惰性分配(莫忘在 defs.h 中声明函数):
1 | c复制代码#include "spinlock.h" //(+) |
在 usertrap (trap.c
) 里处理缺页错误,尝试惰性分配(掉上面写的那个函数,失败就杀掉进程):
1 | c复制代码void |
最后改一点点细节,把各种缺页会爆出的 panic 干掉(vm.c里)。以前这些情况正常是不会发生的,但现在惰性分配会带来缺页,所以要告诉操作系统遇到这些事情时 don’t panic,继续往下跑就行了:
(这里的代码我懒得改结构就上goto了,但你应该去改if结构,而不是goto)
1 | c复制代码// vm.c |
测试
写的时候可以按题目跑这些测试:
1 | sh复制代码xv6-labs-2020 $ make qemu |
diff
详细的 git diff (可以用来做 patch 喔):
1 | diff复制代码diff --git a/kernel/defs.h b/kernel/defs.h |
结果
最后 make grade 看成绩了:
1 | sh复制代码xv6-labs-2020 $ make grade |
CDFMLR
顶部图片来自于网络,系随机选取的图片,仅用于检测屏幕显示的机械、光电性能,与文章的任何内容及观点无关,也并不代表本人局部或全部同意、支持或者反对其中的任何内容及观点。如有侵权,联系删除。
本文转载自: 掘金