【问题标题】:How the RISC-V HW can determine the privilege level?RISC-V HW 如何确定权限级别?
【发布时间】:2020-06-02 17:28:22
【问题描述】:

RISC-V 当前的 SW 特权级别未在任何 CSR 中设置。尽管如此,规范声明“尝试在没有适当特权级别的情况下访问 CSR ......引发非法指令”。那么(在硬件中)如何实现?

【问题讨论】:

  • 硬件可以(当然确实)具有不通过寄存器暴露给软件的状态。

标签: riscv


【解决方案1】:

特权级别反映在 mstatus 寄存器的 MPP 位中。

【讨论】:

    【解决方案2】:

    好吧,在中断上——“xPP 保持以前的特权模式(x=M,S 或 U)。xPP 字段只能保持最高 x 的特权模式,所以 MPP 是两位宽,SPP 是一位宽,并且 UPP 隐含为零。”

    实际上,我现在发现的是 xRET 指令使处理器能够(内部)存储当前模式 - “MRET、SRET 或 URET 指令用于从 M-mode、S-mode 中的陷阱返回, 或 U-mode. 当执行 xRET 指令时, 假设 xPP 保持值 y, x IE 设置为 x PIE; 特权模式更改为 y; x PIE 设置为 1; xPP 设置为 U (如果不支持用户模式,则为 M)。”

    【讨论】:

      【解决方案3】:

      我们有 mstatus.mPP。持有以前的特权模式。当前特权模式对软件不可见。

      在中断时 mstatus.mPP 被保存到 mcause.mPP.. 在 mrwt 上,它只是写回 mstatus.mPP。

      【讨论】:

        【解决方案4】:

        当我在寻找相同的问题时,我从五个论坛中发现这个答案很有帮助。

        RISC-V 故意不让代码轻松发现什么 模式它正在运行它,因为这是一个虚拟化漏洞。作为一个 一般原则,代码应该被设计并隐含地知道 它将在什么模式下运行。应用程序代码应该假设它在 U 模式。操作系统应该假定它处于 S 模式(它可能在 实际上是虚拟化并在 U 模式下运行,具有 U 模式不能做的事情 由管理程序捕获和模拟)。

        https://forums.sifive.com/t/how-to-determine-the-current-execution-privilege-mode/2823

        【讨论】:

          猜你喜欢
          • 2012-05-26
          • 1970-01-01
          • 2021-01-31
          • 1970-01-01
          • 2020-02-05
          • 1970-01-01
          • 2013-06-09
          • 2019-10-09
          • 2011-06-24
          相关资源
          最近更新 更多