页表实现提示
理解监控程序中的页表机制
请先阅读以下内容:
- 监控程序文档
- (非必须)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
在开始实现之前,请确认可以回答下面的问题,正确理解监控程序如何使用页表机制之后,再开始实现。
- 监控程序使用的是动态页表映射还是静态的?
- 监控程序本身使用的地址是虚拟地址吗?
- G 指令指定的用户程序地址应为虚拟地址还是物理地址?A 指令呢?
- (非必须)缺页异常处理程序应该如何获得发生缺页的虚拟地址?
查询页表
- 在 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日
作者: