Memory RISCV负载比剩余内存宽时会发生什么情况?

Memory RISCV负载比剩余内存宽时会发生什么情况?,memory,assembly,riscv,Memory,Assembly,Riscv,以下程序的行为是什么 li t0, 0xFFFFFFFF lw t1, 0(t0) 是否定义了此实现(MMU或执行环境)?我在RISC-V规范中找不到任何提及这种情况的地方。RISC-V特权ISA将物理内存分为三种类型:主内存、I/O和空内存 空区域也被分类为I/O区域,但具有属性 指定不支持任何访问 该文档继续说,与主内存(总是支持R/W)相反,I/O区域(因此是空区域)可以指定支持哪些访问 I/O区域可以指定对哪些数据宽度的读、写或执行访问的组合 支持 每个区域都有一个或多个物理内存属性(

以下程序的行为是什么

li t0, 0xFFFFFFFF
lw t1, 0(t0)

是否定义了此实现(MMU或执行环境)?我在RISC-V规范中找不到任何提及这种情况的地方。

RISC-V特权ISA将物理内存分为三种类型:主内存、I/O和空内存

空区域也被分类为I/O区域,但具有属性 指定不支持任何访问

该文档继续说,与主内存(总是支持R/W)相反,I/O区域(因此是空区域)可以指定支持哪些访问

I/O区域可以指定对哪些数据宽度的读、写或执行访问的组合 支持

每个区域都有一个或多个物理内存属性(PMA),说明该区域是否缓存、是否支持原子操作、是否排序以及支持的数据大小

硬件必须检查区域的PMA,如果违反任何约束,则报告陷阱或中断:

检查PMA对物理内存的任何访问,包括经过虚拟到物理内存转换的访问。为了帮助系统调试,我们强烈建议在可能的情况下使用RISC-V 处理器精确捕获PMA检查失败的物理内存访问。精确的PMA陷阱可能并不总是可能的,例如,当探测使用访问故障作为发现机制一部分的传统总线体系结构时。在这种情况下,从设备的错误响应将报告为不精确的总线错误中断


该规范没有对空区域施加任何PMA,也没有定义任何PMA值,它明确指出

由于PMA与给定物理平台的组织紧密相连,因此许多细节本质上都是特定于平台的,事实上也是如此 软件学习平台PMA值的方法

当访问一个不存在的RAM地址时,会发生什么情况,留给实现所定义的特定微体系结构处理

通常,内存总线具有上拉/下拉电阻器。在这种情况下,从一个不存在的地址读取将导致一个由1或0组成的单词,写入将被忽略


根据硬件的不同,结果可能是任何情况,甚至是总线上发出失败事务信号的异常。

RISC-V特权规范也定义了MMU,这种情况也会影响MMU。在这种情况下,必须明确指定应该发生什么,否则可能会导致安全问题。@fsasm感谢您指出ISA特权规范。除非我误解了这个问题,否则我认为这并不涉及MMU,因为在所有MMU操作之后都会访问物理内存。检查规格似乎也证实了我的说法:检查PMA需要硬件,但PMA是特定于平台的,报告PMA检查失败的方法也是如此。中断也被清楚地表示为访问空区域的可能结果。我不知道访问空区域会产生什么安全问题。如果地址未对齐,处理器需要访问两个连续的数据字。如果处理不当,程序可以访问不应该访问的字节。现在想象一下,您可以访问页表或其他关键数据结构的第一个字节。@fasm我相信CPU将丢弃更大负载中所有不需要的字节,并且在可能的情况下,是软件处理负载拆分,所有结构都正确对齐(因为一个词对于一个特定的程序是可访问的或不可访问的)。