• xv6-----lazy page allocation


    本文转载是网络,只叙述方法,,,

    第一问:Turn off page allocation in xv6

    修改sysproc.c中的sys_sbrk()函数即可:

     1 int sys_sbrk(void)
     2 {
     3       int addr;
     4       int n;
     5       if(argint(0, &n) < 0)
     6         return -1;
     7       addr = proc->sz;
     8       proc->sz += n;
     9       //if(growproc(n) < 0)
    10       //  return -1;
    11       return addr;
    12 }

    重新编译后就OK了。

    第二问:Implement lazy page allocation

    1.由于我们需要在trp.c中调用vm.c中的int mappages(pde_t pgdir, voidva, uint size, uint pa, int perm)函数,所以要去除原本的static!!!

    2..在trp.c中声明int mappages(pde_t pgdir, voidva, uint size, uint pa, int perm)函数,注意要在调用之前声明!

    3.在trap.c中的void trap(struct trapframe *tf)的defaut部分添加以下代码,注意要在放在原本就存在的if模块后!

     1 char *mem;
     2 uint a;
     3 a = PGROUNDDOWN(rcr2());   //rcr2() is the call to get the start memory address of this process
     4 uint newsz = proc->sz;   //newsz is the cheated memory address (the amount of memory needed by the process)
     5 for(; a < newsz; a += PGSIZE){
     6     mem = kalloc();
     7     memset(mem, 0, PGSIZE);
     8     mappages(proc->pgdir, (char*)a, PGSIZE, v2p(mem), PTE_W|PTE_U);
     9 }
    10 return;

    重新编译,大功告成!

  • 相关阅读:
    元数据 缓存 池 模式
    ContractPattern 面向面向契约模式
    第三方登录 ----转载自简书,作者 <<碧霄问鼎>>
    证书那些事
    导航(NavanavigationController)push和pop
    iOS app上传错误集锦(转载)
    Block 的基本用法
    正则表达式的用法 转载
    UIView
    UIDate(时间)
  • 原文地址:https://www.cnblogs.com/tjulym/p/4976163.html
Copyright © 2020-2023  润新知