RISC-V架构的三种特权模式如何切换

1、RISC-V的三种特权模式

特权模式功能描述
机器模式(M-mode)具有最高特权等级,具有访问所有资源的权限,通常运行固件和内核
用户模式(U-mode)权限要比M模式低,通常是用来运行操作系统内核
管理员模式(S-mode)级别最低的模式,它不能访问硬件资源,只能访问某些通用寄存器和通用指令,一般用于执行应用程序
  • 芯片不一定会实现三种特权模式,可以只实现其中的部分特权模式,但是M模式是必须要实现的
    • 单片机(运行RTOS):通常只有M模式和U模式,或者只有M模式
    • 通用SOC(运行linux):M、S、U模式
  • 芯片在启动时,默认是处于M模式
  • 特权级别:M模式 > S模式 > U模式

2、三种特权模式之间的切换

在这里插入图片描述

  • 从M模式返回低特权模式,使用mret命令,会返回到切换M模式之前的模式
  • 从S模式返回低特权模式,使用sret命令,会返回到切换S模式之前的模式
  • U模式可以通过ecall指令切换到高特权模式,至于是切换到M模式还是S模式,取决于是M模式还是S模式来处理U模式的系统调用,这个异常委托有关
  • medeleg是RISC-V架构定义的异常委托寄存器,默认所有异常都是M模式处理,但是可以设置medeleg寄存器把部分异常交由S模式处理

3、高特权模式切换到低特权模式

3.1、低特权模式 -> 高特权模式 -> 低特权模式

  • 这种是最常见的情况,程序运行在低特权模式,遇到中断、异常陷入到高特权模式,执行mret或者sret命令返回低特权模式
  • 执行mret指令的硬件行为与异常处理模式下执行mret指令的行为相同。切换到高特权模式时,硬件会更新相关寄存器来记录低特权模式下的运行信息,通过保存现场、恢复现场来达到从高特权模式切换到低特权模式继续执行
  • 参考博客:《RISC-V架构——中断处理和中断控制器介绍》;

3.2、高特权模式 -> 低特权模式

/ Switch Machine sub-mode to User mode /li t0, MSTATUS_MPP //MSTATUS_MPP的值为0x00001800,即对应mstatus的MPP位域csrc mstatus, t0 // 将mstatus寄存器的MPP位域清为0就,设置陷入M模式之前CPU模式是U特权模式la t0, 1f // 将前面的标签1所在的PC地址赋值给t0csrw mepc, t0 // 将t0的值赋值给CSR寄存器mepc,执行mret命令后,CPU从mepc寄存器中保存的地址处开始执行mret // 执行mret指令,则会将模式切换到UserMode,并且从前的标签1处开始执行// 程序(标签1即为mret的下一条指令的位置)1: // 标签1的位置,U模式要运行的程序
  • 芯片启动时是运行在M模式,当完成初始化操作需要切换到U模式或者S模式运行,同样是执行mret命令实现
  • 和3.1节不同,因为不是从低特权模式切换到高特权模式,不存在保存现场,自然也不存在恢复现场所以需要软件自己构建恢复现场
  • 构建恢复低特权模式的现场,就是设置相关的寄存器,指定切换到哪个低特权模式、什么地址执行等,和中断返回的恢复现场是一样的

4、低特权模式切换到高特权模式

  • 异常、响应中断或者NMI的方式,这是异步的,软件不可控
  • 执行ecall命令陷入高特权模式,这是软件主动切换到高特权模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/280262.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS常见崩溃简介

1. 崩溃 多指在移动设备(如iOS、Android设备)中或不可移动设备(如:Windows、Linux等设备), 在打开或使用应用程序时出现的突然退出中断的情况(类似于Windows的应用程序崩溃)。 多表现为&#…

2024.3.21 如何将idea的注释设置为在首字母前开始而不是句首

2024.3.21 如何将idea的注释设置为在首字母前开始而不是句首 两种写法的差异 修改办法 将右下角的勾去掉即可。

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

【Leetcode-73.矩阵置零】

题目: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

echart trigger 为 axis 的时候不显示 tooltip 解决办法

echart trigger 为 axis 的时候不显示 tooltip 解决办法 在项目 vitetsvue3 中使用 echart 显示了一个曲线图: 但当把图表的 trigger 设置成 axis 的时候,鼠标扫过并不显示具体的数值,如上图所示。 但 trigger item 的时候是正常的。 解决…

在DevEco Studio中第一次使用网络图片不显示问题

当我们新建项目 第一次使用网络图片 没有显示时 加这段代码就可以了 如果刷新图片还是没有显示 就重启编辑器。 "requestPermissions": [{"name": "ohos.permission.INTERNET"}],

如何构建Docker自定义镜像

说明:平常我们使用Docker运行各种容器,极大地方便了我们对开发应用的使用,如MySQL、Redis,以及各种中间件,使用时只要拉镜像,运行容器即可。本文介绍如何创建一个Demo,自定义构建一个镜像。 开…

31.HarmonyOS App(JAVA)鸿蒙系统app Service服务的用法

鸿蒙系统app Service服务的用法 后台任务调度和管控 HarmonyOS将应用的资源使用生命周期划分为前台、后台和挂起三个阶段。前台运行不受资源调度的约束,后台会根据应用业务的具体任务情况进行资源使用管理,在挂起状态时,会对应用的资源使用进…

【研发日记】,Matlab/Simulink开箱报告(十)——Requirements Toolbox

前言 见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Function)》 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开…

Python学习:注释和运算符

python 注释 在Python中,注释用于在代码中添加解释、说明或者提醒,但并不会被解释器执行。Python中的注释以#开头,直到行末为止。下面是关于Python注释的详细解释和举例: 单行注释:使用#符号在行的开头添加注释&…

Vue3:标签的ref属性用法

一、情景说明 我们在写前端页面的时候,肯定会遇到获取DOM内容的情况。 以往,我们是用原生的js方法去获取,如document.getXxxx 但是,这中方法会有个问题,如果父组件和子组件的id相同,则会出错。 在Vue3中&…

酷开科技聚焦大屏端数据研究,构建酷开系统深度挖掘大屏商业价值

中国所有的彩色大屏中,智能电视规模已经过半,OTT平台的数据价值越发引起人们关注。作为OTT行业的头部代表,酷开科技一直聚焦大屏端数据研究,目前已经形成一套基于大屏指数的智慧营销体系,让OTT大屏的数字营销化水平实现…

安装MySQL5.7.19 + 解决数据库乱码

文章目录 1.删除mysql服务 sc delete mysql2.解压到D:\mysql5.7下3.配置管理员环境变量4.D:\mysql5.7\mysql-5.7.19-winx64下创建my.ini1.创建文件2.文件内容 5.管理员打开cmd,切换到 D:\mysql5.7\mysql-5.7.19-winx64\bin6.输入 mysqld -install 安装mysql服务7.初…

2 使用GPU理解并行计算

2.1 简介 本章旨在对并行程序设计的基本概念及其与GPU技术的联系做一个宽泛的介绍。本章主要面向具有串行程序设计经验,但对并行处理概念缺乏了解的读者。我们将用GPU的基本知识来讲解并行程序设计的基本概念。 2.2 传统的串行代码 绝大多数程序员是在串行程序占据…

数学建模-邢台学院

文章目录 1、随机抽取的号码在总体的排序2、两端间隔对称模型 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,……

《圣斗士星矢》AI制作CG大电影欣赏

《圣斗士星矢》AI制作CG大电影欣赏 In the darkest corners of the universe, legends are born. 宇宙最幽暗的角落,传奇应运而生。 The gods of Olympus descend, bringing chaos and terror. 奥林匹斯众神降临,带来混乱与恐怖。 The armor of the Sain…

Java基础学习笔记二

Java的加载与执行 Java既是编译型语言又是解释型语言 question:为什么JVM可以跨平台执行 answer : Java虚拟机(JVM)之所以能够跨平台执行,是因为它在不同操作系统上提供了一个统一的运行环境,实现了Java程…

Spring Boot+Vue前后端分离项目如何部署到服务器

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

19.WEB渗透测试--抓包技术(下)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:18.WEB渗透测试--抓包技术(上)-CSDN博客 Burp含义和内容参考&…

《算法王晓东》多处最优服务次序问题

多处最优服务次序问题 题目描述 设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti, 1≤i≤n。共有s处可以提供此项服务。应如何安排n个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计:对于给定的n个顾…