Homework: xv6 lazy page allocation
xv6的用户程序使用sbrk()系统调用向kernel请求堆内存
int
sys_sbrk(void)
{
int addr;
int n;
if(argint(0, &n) < 0)
return -1;
addr = myproc()->sz;
myproc()->sz += n;
// if(growproc(n) < 0)
// return -1;
return addr;
}
运行:
init: starting sh
$ echo hi
pid 3 sh: trap 14 err 6 on cpu 1 eip 0x1168 addr 0x4004--kill proc
$
先把vm.c
中的mappages
函数的static声明去掉,然后在trap.c
中的trap
函数中添加:
case T_PGFLT: {
char* mem = kalloc();
if (mem != 0) {
memset(mem, 0, PGSIZE);
extern int mappages(pde_t * pgdir, void* va, uint size, uint pa, int perm);
if (mappages(myproc()->pgdir, (void*)PGROUNDDOWN(rcr2()), PGSIZE, V2P(mem), PTE_W | PTE_U) < 0) {
kfree(mem);
}
} else {
cprintf("trap(): kalloc out of memory\n");
}
break;
}
现在echo hi
正常了
MIT6.828 Fall2018 笔记 - Homework 4: xv6 lazy page allocation
原文:https://www.cnblogs.com/zsmumu/p/12624048.html