提交 d0347377 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

works, except no vma growing yet

上级 792497fa
......@@ -67,7 +67,8 @@ exec(char *path, char **argv)
ip = 0;
// Allocate a vmnode for the heap.
if((vmn = vmn_allocpg(1)) == 0)
// XXX pre-allocate 32 pages..
if((vmn = vmn_allocpg(32)) == 0)
goto bad;
if(vmap_insert(vmap, vmn, brk) < 0)
goto bad;
......@@ -112,7 +113,7 @@ exec(char *path, char **argv)
oldvmap = proc->vmap;
proc->pgdir = pgdir;
proc->vmap = vmap;
proc->brk = brk;
proc->brk = brk + 4; // XXX so that brk-1 points within heap vma..
proc->tf->eip = elf.entry; // main
proc->tf->esp = sp;
switchuvm(proc);
......
......@@ -116,13 +116,19 @@ growproc(int n)
uint brk = proc->brk;
uint nbrk = brk + n;
/* XXX */
if(brk / PGSIZE != nbrk / PGSIZE) {
cprintf("cannot resize heap\n");
struct vma *vma = vmap_lookup(proc->vmap, brk-1);
if(vma == 0)
return -1;
if(nbrk > vma->va_end){
/* XXX */
release(&vma->lock);
cprintf("cannot resize heap: %d -> %d\n", brk, nbrk);
return -1;
}
proc->brk = brk + n;
release(&vma->lock);
switchuvm(proc);
return 0;
}
......
......@@ -185,7 +185,7 @@ switchuvm(struct proc *p)
}
struct {
struct vmnode n[128];
struct vmnode n[1024];
} vmnodes;
struct {
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论