zoukankan      html  css  js  c++  java
  • 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;

    重新编译,大功告成!

  • 相关阅读:
    C语言中for循环的使用
    详解C语言的main函数
    计算机语言的发展(the history of computer's language)
    hdu 1001
    hoj 1002
    hdu 1000
    POJ 1000(水题)
    hoj 1001
    code hunt题解(1)
    《C和指针》学习笔记(3)
  • 原文地址:https://www.cnblogs.com/tjulym/p/4976163.html
Copyright © 2011-2022 走看看