RISCV中的内存映射部分是什么

moo*_*834 2 memory cpu operating-system mmu riscv

熟悉MIPS架构,知道MIPS有kseg0、kseg1等内存段。这决定了该段是否可以被缓存或映射。例如,您应该将一些 I/O 设备(如 UART)定位到未缓存的段。

但是我在 RISCV arch 中没有找到任何相关的东西。那么RISCV OS如何知道地址是否应该被映射呢?

顺便说一句:我知道 satp CSR 中的值描述了翻译模式。当操作系统运行时,该值必须设置为“Bare(disabled MMU)”以外的值,以便操作系统可以支持虚拟内存。那么如果CPU访问UART地址,satp中的值仍然不是“Bare”?但应该是“Bare”吧?

Jam*_*cks 5

RISC-V 是一系列指令集,范围从没有内存映射和内存保护机制的 MCU 风格处理器(物理内存保护是可选的)。

根据您的问题,我假设您在谈论支持用户和主管级别 ISA 的处理器,如 RISC-V 特权规范中所述。

听起来您想要一个描述哪些物理地址可缓存的规范。查看 CSR 列表,我相信此信息不在 CSR 中,因为它是特定于平台的。在我使用过的系统中,它要么在平台驱动程序中硬编码,要么通过设备树传递。

对于 Linux,设备树条目不是 RISC-V 特定的:有指定内存物理地址范围的设备树条目。此外,每个 I/O 设备都有一个指定其物理地址范围的设备树条目。