PA3.2

时间:2021-08-05
本文章向大家介绍PA3.2,主要包括PA3.2使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

目录

思考题

1. ⼀些问题

  1. 因为自身存在低12位的偏移量
  2. 物理地址是必须的,否则使用虚拟地址会陷入死循环
  3. 使用多级页表可以使得页表在内存中离散存储;使用多级页表可以节省页表内存。

2. 空指针真的是'空'的吗?

空指针应该也表示一个虚拟地址,只不过在虚拟地址转换为物理地址后,对应的物理地址会触发空指针解引用的错误。

3. 理解 _map 函数

先取页目录基地址,然后根据虚拟地址和基地址得到页目录项,判断是否需要新的页表,如果需要,就 申请一个新的页表,并且把这个页表的地址和其他的标志位一起存到一个页目录项里面,并且根据虚拟 地址就得到了一个页表项,最后把物理地址和标志位一起放到一个页表项里面写入。

4. 内核映射的作⽤

pd_val.present报错。因为没有进行内核映射拷贝,所以没有页表来存放对应的内核区的虚拟地址,就会出现这种报错。

5. git log 和 远程仓库截图

git log

仓库截图

操作题

1.添加分页控制相关寄存器

首先打开HAS_PTE宏(nano-lites/src/main.c

之后找到nemu/include/memory/mm.hCR3,CR0 寄存器进行初始化

然后在restart() 函数中对CR0 进行初始化为0x60000011 ,z在nemu/src/monitor/monitor.c

2.修改访存函数

修改vaddr_read()vaddr_write() 函数(nemu/src/memory/memory.c

3.page_translate()

然后编写 page_translate() 函数

先声明paddr_t page_translate(vaddr_t vaddr,bool w);

之后补全函数

之后修改nanos-lite/src/main.c

最后发现指令还未实现完全还需要实现mov_r2cr() mov_cr2r()

填表:

/* 0x20 */	IDEX(mov_G2E,mov_cr2r), EMPTY, IDEX(mov_E2G,mov_r2cr), EMPTY,

实现make_EHelper(mov_r2cr)

make_EHelper(mov_r2cr) {//给cr寄存器赋值
  switch (id_dest->reg)
  {
    case 0:
      cpu.cr0.val = id_src->val;
      break;
    case 3:
      cpu.cr3.val = id_src->val;
      break;
    default:
      assert(0);
      break;
  }

  print_asm("movl %%%s,%%cr%d", reg_name(id_src->reg, 4), id_dest->reg);
	}

实现make_EHelper(mov_cr2r)

make_EHelper(mov_cr2r) {//给寄存器赋值
  switch (id_dest->reg)
  {
    case 0:
      id_src->val = cpu.cr0.val;
      break;
    case 3:
      id_src->val = cpu.cr3.val;
      break;
    default:
      assert(0);
      break;
  }

  print_asm("movl %%cr%d,%%%s", id_src->reg, reg_name(id_dest->reg, 4));

#ifdef DIFF_TEST
  diff_test_skip_qemu();
#endif
}

4.修改 loader()

首先修改navy-apps/Makefile.compile 中的链接地址为 0x8048000 并重新编译,nanoslite/src/loader.c 中的 DEFAULT_ENTRY 也要作相应的修改。

之后修改loader 函数如图所示

5.在分页上运行仙剑奇侠传

修改syscall.c 文件中的sys_brk 函数为

之后在PUTTY 中运行仙剑奇侠传即可,结果如图

新的故事:

实验心得

本次实验主要了解了分页的机制问题, 实现了在分页上运行仙剑奇侠传,通过前面多次实验的学些,本次实验可以大体知道出现错误时的错误来源和解决方案,实现基本独立解决问题,同时也对计算机组成原理这门课的理解更进一步。

备注

原文地址:https://www.cnblogs.com/shangjin2001/p/15102207.html