跳转至

页表实现提示

理解监控程序中的页表机制

请先阅读以下内容:

  • 监控程序文档
  • (非必须)RISC-V Privileged, 3.1.16 Machine Trap Value Register (mtval)
  • RISC-V Privileged, 4.1.12 Supervisor Address Translation and Protection (satp) Register
  • RISC-V Privileged, 4.3 Sv32: Page-Based 32-bit Virtual-Memory Systems

在开始实现之前,请确认可以回答下面的问题,正确理解监控程序如何使用页表机制之后,再开始实现。

  1. 监控程序使用的是动态页表映射还是静态的?
  2. 监控程序本身使用的地址是虚拟地址吗?
  3. G 指令指定的用户程序地址应为虚拟地址还是物理地址?A 指令呢?
  4. (非必须)缺页异常处理程序应该如何获得发生缺页的虚拟地址?

查询页表

  • 在 IF 段和 MEM 段的访存状态机中,根据 RISC-V Privileged, 4.3 小节中的状态机查询页表,检查权限。
  • 如果在 EX 段处理异常,则需要在 EX 段提前查询页表,检查缺页异常。这可能需要一个额外的 wishbone master。
  • 如果在 MEM 段处理异常,则需要在检查完页表之前,阻拦潜在的 EX 段跳转和 CSR 写入。
  • 拼出来的 34 位物理地址可以直接去掉最高的两位当作 32 位地址进行使用。
  • 不需要实现 RSW,D,A,G 位的相关内容。

实现完成之后,将用户程序写入 0x80100000 的物理地址,并在 G 命令中指定运行地址为 0x0 应该可以正常执行用户程序。到此,我们已经完成一个支持第三版本监控程序的 CPU 的实现。


最后更新: 2023年7月11日
作者:cuibst