当前位置: 首页 > news >正文

RISC-V h拓展

https://tinylab.org/riscv-kvm-virt-mode-switch/
https://tinylab.org/riscv-kvm-virt-trap/

特权模式

指令集中约定用虚拟化模式 V (virtualization mode) 来标记当前是否是在 Guest 系统中运行。V=1 表示当前确实运行在 Guest 系统中,V=0 则表示不运行在 Guest 中。

V虚拟化(H-Level Arch.)V虚拟化特例名义特权级运行的程序
1VU-mode0U-modeU-0Guest OS的应用程序
1VS-modeS-1Guest OS
0HS-mode0HS-modeS-1宿主OS / Hypervisor
0M-mode0M-modeM-3opensbi

在上述表格中,虚拟化特例指 hart 所指示的应用程序以 U-mode 直接运行在一个运行于 HS-mode 的 OS 上。

名义特权级(Nominal Privilege)是在 S-mode 基础上的特权级约定,分为 U, S, M 三级,分别用 0,1,3 表示,各类指令集模拟器均以此标准实现。

相关CSR

mstatus寄存器

在这里插入图片描述

  • MIE、SIE:当前中断使能
  • SPIE、MPIE:(previous) 记录trap之前的中断使能
  • SPP、MPP:记录trap之前的特权级别
  • TSR(Trap SRet):拦截supervisor异常返回指令sret。TSR=1,在S-mode下支持sret会导致illegal instruction exception。TSR=0,则允许S-mode下执行sret。

hstatus寄存器

在这里插入图片描述

  • SPV(supervisor previous Virtualization):sstatus.SPP 在 trap 时会被设置为 trap 对应的名义特权级,此时 hstatus.SPV 就会被设置为 trap 时的 V 值;当 V=0 时执行 sret 指令,SPV 置为 V。
  • SPVP (Supervisor Previous Virtual Privilege):V=1 时,行为与 sstatus.SPP 相同,即置为 trap 时的名义特权级;V=0 时,保持不变。
  • GVA (Guest Virtual Address):trap 到 HS-mode 时写入:对于写虚拟地址到 stval 的寄存器的 trap(breakpoint, address misaligned, access fault, page fault, or guest-page fault),hstatus.GVA 置 1,对于其他 trap 置 0。

sstatus

在这里插入图片描述
sstatus 是 mstatus 的一个子集。

  • SPP:用于标识 trap 进入 S-mode 之前 hart 所在的特权级:来自 U-mode 则置 0,否则为 1。
  • trap 处理过程中 sstatus 的行为
    trap to S-mode: SPIE=SIE, SIE=0
    sret: SIE=SPIE, SPIE=1

vsstatus

和sstauts一样。
V=1 时,vsstatus 用于替代 sstatus,所以通常针对 sstatus 的操作会替换为 vsstatus。

中断处理流程

在这里插入图片描述

中断委托

在这里插入图片描述
从上图可知,正常情况下 trap 都会导致 hart 的控制转移至 M-mode,处理之后通过 mret 指令返回到原来的模式。

特殊情况下 trap 会经由 mdeleg 或 mideleg 委派从 HS-mode 或 VS-mode 转移至 HS-mode,或再经由 hedeleg 或 hideleg 委派从 VU-mode 转移至 VS-mode。

被委派至 HS-mode 和 VS-mode 的 trap 在处理完毕后,将通过 sret 指令返回至 trap 之前的模式。

相关文章:

  • 使用nhdeep目录套打工具打印备考表
  • ELK 和 OpenShift 中的 EFK
  • c++中的set容器介绍及操作
  • 动,静态库
  • 智能生成分析报告系统在危化安全生产监测预警评估中的应用
  • 【麻省理工】《how to speaking》笔记
  • Kubernetes安全
  • 亚矩云手机赋能Vinted矩阵运营:破解二手电商多账号与本地化困局
  • idea 报错:java: 非法字符: ‘\ufeff‘
  • 回归任务与分类任务的区别
  • 合并table
  • Java后端与Vue前端项目部署全流程:从环境配置到Nginx反向代理
  • 【基础篇-消息队列】——详解 RocketMQ 和 Kafka 的消息模型
  • vue组件转html
  • qt常用控件--02
  • 互联网大数据求职面试:从Zookeeper到Flink的技术探讨
  • Docker 永久换源步骤
  • 四核 A53+工业级存储:移远 SC200L 与 pSLC SD NAND 如何重构 T-BOX 性能边界?
  • APO:自动化技术提升大语言模型在各类任务中的表现
  • Python基础之函数
  • 微信小程序开发介绍/seo网站优化推荐
  • 建网站方法/郑州高端网站建设
  • 自己做网站有何意义/南京网站设计公司大全
  • 企业如何做网站推广/网络营销策划推广公司
  • magento外贸网站建设/为什么不建议去外包公司上班
  • 邯郸网站建设多少钱/微信营销号