6.s081 lab3

第一个实验:打印页表

主要参考vm.c中的freewalk,

void vm_dg(pagetable_t pagetable, int depth) {
  for(int i = 0; i < 512; i++){
    pte_t pte = pagetable[i];
    if(pte & PTE_V) {
      for (int i = 0; i < depth; ++i) {
        if (i != 0) {
          printf(" ");
        }
        printf("..");
      }
      uint64 child = PTE2PA(pte);
      printf("%d: pte %p pa %p\n", i, pte, child);  
      // 判断是否是最底层 
      if ((pte & (PTE_R|PTE_W|PTE_X)) == 0) {
        vm_dg((pagetable_t)child, depth + 1);
      }
    }
  }
}

void vmprintf(pagetable_t pagetable) {
  // there are 2^9 = 512 PTEs in a page table.
  printf("page table %p\n", pagetable);
  vm_dg(pagetable, 1);
}

其中要注意的地方就是判断是否是最底层,如果是最底层,就不进行递归了。

然后在相应地方定义并在exec.c中按要求添加代码即可。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值