为什么 sstatus 和 mstatus 虽然是同一个寄存器的不同视图,但它们的寄存器地址不同?

问题描述 投票:0回答:1

sstatus 寄存器是 mstatus 寄存器的子集。 在简单的实现中,读取或写入 sstatus 中的任何字段相当于 读取或写入 mstatus 中的同名字段。

这取自 riscv-privledged-20211203.pdf。 我们有两个寄存器,并且为

status
S
模式使用不同的地址空间。另外,将信息存储在两个不同的寄存器中似乎更全面(我猜)。 那么使用
M
作为
sstatus
的子集而不是单独的寄存器的原因是什么?这方面有性能优化吗?
如果是优化的方式,为什么规范要分配不同的寄存器地址?

cpu-architecture privileges riscv instruction-set
1个回答
0
投票

在第2.2节中,您可以看到

mstatus

具有权限SRW,这意味着它可以从主管(S)模式读写。另一方面,

sstatus
是MRW,因此可以从机器模式(M)读取和写入,这显然是更高的特权级别。
因此,这意味着 S 模式仅允许访问 

mstatus

中的部分位。

实现此目的的另一种方法是使 

mstatus

在两个级别均可访问,但添加额外的微代码,以便如果从级别 S 访问它,则更敏感的位将被屏蔽。但这会稍微复杂一些。必须已经有一种机制来检查对任何 CSR 寄存器的访问权限级别,因此通过将

mstatus
视为具有自己地址的自己的寄存器,我们可以使用这个现有机制。一旦通过此检查,对
sstatus
的访问就可以简单地视为对
sstatus
的访问,并无条件地
屏蔽敏感位。

© www.soinside.com 2019 - 2024. All rights reserved.