首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RISC-V中的地址指定

RISC-V中的地址指定
EN

Stack Overflow用户
提问于 2020-04-01 16:32:40
回答 1查看 929关注 0票数 2

我正在QEMU中运行一个模拟的RV64GC内核,并试图更好地理解RISC-V中的虚拟内存子系统和地址转换过程。我的模拟系统使用OpenSBI、LinuxKernalv5.5和最小的rootfs运行。

在QEMU调试跟踪中,我看到有时(最常见的使用ecalls)控件被传递给SBI,并且地址从内核(虚拟?)更改。地址的偏移量为0xffffe000000000的东西看起来像真实的,物理的,地址在RAM中。例如,

...

00000073 .

IN: sbi_ecall__1_handler

0x0000000080004844: 00093603 ld a2,0(s2)

0x0000000080004848: 4785 addi a5,0,1

0x000000008000484a: 00a797b3 sll a5,a5,a0

..。

在RISC-V特权规范版本1.11,第4.1.12节中,将satp (控制和状态寄存器)定义为具有确定地址转换指定的模式字段。0的模式意味着转换是空的(地址被认为是物理的),8或9的模式分别需要基于Sv39或Sv48页面的虚拟寻址,并且保留任何其他模式值。

现在,RISC-V特权和非特权规范似乎都没有提到什么时候可以更改satp (csrrw除外),这就引出了以下问题:

当控制权交给SBI (如上面的ecall )时,satp模式是否更改为0?如果是,这是否意味着应该在u/s/mret指令上重置satp模式?是否有其他实例(csrrw除外)应该更改satp?

如果没有,是否还有其他机制来解释和指定地址为物理地址?还是这些地址(上面的0x80XXXXXX地址)被认为是虚拟的,应该经过通常的虚拟地址转换过程(如RISC-V特权规范第4.3.2节所述)?如果是这样的话,什么时候会为此创建页表条目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-08 10:33:55

RISC-V的内存模型工作方式如下:

M模式有自己的内存保护系统,在称为PMP (物理内存保护)的特权规范第3.6节中描述。这是为了将内存保护强加于较低的特权级别,以及M模式本身(如果使用锁位)。在M模式下没有虚拟内存系统。

现在在S模式中,它有基于页面的虚拟内存系统,S模式可以用来设置虚拟到物理地址映射,也可以对S模式本身和U模式施加内存限制。

因此,每个特权级别都控制着自己的资源和它下面的资源,但从来没有控制过高于它的特权级别的资源。事情就是这样运作的。

M模式可以控制M模式、S模式和U模式可以访问的内存,S模式可以控制存储器视图(虚拟内存)和S和U模式的可访问性,但不能控制M模式。因此,当移动到M模式时,satp模式甚至不会改变。由于它所指出的映射甚至不适用于M模式。它有它的内存保护单元。

如果较低的权限级别可以对更高的权限级别施加内存限制,这将是一个巨大的安全漏洞。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60975813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档