¶ lazy allocation
¶ test pgbug: FAILED
在系统调用函数(如sys_pipe)中,检测到致命错误(例如访问非法内存)时,不能直接用p->killed = 1,而是要return -1。
¶ mmap
scause 0x000000000000000d (load page fault)
sepc=0x0000000080007bb0 stval=0x0000000000000000
PANIC: kerneltrap
gdb调试了一波,发现在使用bd_malloc时跳入kerneltrap
明明实验三的时候还可以用bd_malloc,怎么现在用不了了?
看了一下代码,发现实验三中,kalloc的定义是这样的:
void *
void)
kalloc(
{return bd_malloc(PGSIZE);
}
然后实验九中是这样的:
void *
void)
kalloc(
{struct run *r;
acquire(&kmem.lock);
r = kmem.freelist;if(r)
kmem.freelist = r->next;
release(&kmem.lock);
if(r)
char*)r, 5, PGSIZE); // fill with junk
memset((return (void*)r;
}
所以实验九中不能用bd_malloc(吐血