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

news2024/11/24 4:39:04

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地址赋值给t0

csrw 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.coloradmin.cn/o/1531808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqlserver列出表的所有字段名

1、纵向列出所有字段 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME tablename;2、横向列车所有字段,以‘,’分隔 SELECT STUFF((SELECT , column_nameFROM information_schema.columnsWHERE table_name tablenameFOR XM…

C++进阶:二叉搜索树介绍、模拟实现(递归迭代两版本)及其应用

上次介绍完多态后:C进阶:详解多态(多态、虚函数、抽象类以及虚函数原理详解) 也是要开始继续学习了 文章目录 1.二叉搜索树1.1概念1.2二叉搜索树特性1.3 二叉搜索树的操作 2.模拟实现2.1项目文件规划2.2基本结构2.3各种接口、功能…

【C语言】—— 指针三 : 参透数组传参的本质

【C语言】—— 指针三 : 参透数组传参的本质 一、数组名的理解二、使用指针访问数组2.1、指针访问数组2.2、[ ] 的深入理解2.3、数组与指针的区别 三、一维数组的传参本质四、数组指针变量4.1、数组指针变量是什么4.2、 数组指针的初始化 五、二维数组传参的本质 一…

DML - 增删改(insert into,delete,update)

引言:对比DB / 表结构 : create , drop , alter 本次记录 数据操作 语言: 1.进入 hive 数据库,再打开 ryx1 表 2. insert select 3. update select 4. delete select

外卖项目:使用AOP切面编程实现增删改查的操作日志记录(debug断点调试)

文章目录 一、问题描述二、问题分析三、断掉调试四、代码展示 一、问题描述 需求:将项目中增、删、改相关接口的操作日志记录到数据库表中。 操作日志信息包含: 操作人、操作时间、执行方法的全类名、执行方法名、方法运行时参数、返回值、方法执行时…

武汉星起航:专业团队引领,经验与创新共铸跨境电商新辉煌

在竞争激烈的跨境电商市场中,武汉星起航电商公司凭借其专业的运营团队和多年的行业经验,成功脱颖而出。这支拥有丰富经验的团队,不仅深刻了解跨境电商市场的动态,更通过持续创新和个性化解决方案,为合作伙伴提供了强有…

STM32CubeMX学习笔记26---FreeRTOS互斥量

一、互斥量简介 1、互斥量用于互锁,可以充当资源保护的令牌,当一个任务希望访问某个资源时,它必须先获取令牌,当任务使用完资源后,必须返还令牌,以便其他任务可以访问该资源。 2、互斥量一般用于临界资源…

GPT-4引领AI新纪元,Claude3、Gemini、Sora能否跟上步伐?

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚…

【XXL-JOB】分布式任务调度解决方案,XXL-JOB入门

目录 1 概念2 快速入门2.1 启动xxl-job-admin2.2 创建一个新的定时任务2.3 在调度中心新增定时任务 3 详细介绍3.1 新建执行器3.2 创建任务3.3 其他概念3.3.1 路由策略3.3.2 任务运行模式(BEAN、GLUE)3.3.3 阻塞处理策略3.3.4 子任务3.3.5 任务超时时间 3.4 高级任务用法3.4.1 …

源码编译部署LAMP

编译部署LAMP 配置apache [rootzyq ~]#: wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz --2023-12-11 14:35:57-- https://downloads.apache.org/apr/apr-1.7.4.tar.gz Resolving downloads.apache.org (downloads.apache.org)... 88.99.95.219, 135.181.214.104…

如何用 C++ 部署深度学习模型?

深度学习模型通常在诸如Python这样的高级语言中训练和验证,但在实际生产环境部署时,往往需要更高的执行效率和更低的资源占用。C作为一款性能卓越、低级别的编程语言,是部署深度学习模型的理想选择之一。本文将详细介绍如何在C环境下加载和运…

AI智能客服系统的费用

实现智能客服所需的费用取决于多个因素,包括项目的规模、所选择的技术和服务提供商、数据的获取和处理方式等。以下是一些可能影响费用的因素,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作…

使用stream流合并多个List(根据实体类特定属性合并)

开发情景 现有多个List集合,其中都是一样的实体类,这里我想根据实体类的特定属性将它们合并在一起,形成一个最终的List集合。 这里主要用到了Stream流的flatMap方法与reduce方法。 flatMap:可以将多个Stream流合并在一起,形成一个Stream流。 reduce:可以将Stram流中的元…

MySQL的概述与安装

一、数据库的基本概念: 1.1 数据: 1) 描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等 都是数据。 2)数据是以“记录”的形式按照统一的格式进行存储的,而不是…

ASA方舟生存飞升计划1.5重置版服务器搭建教程

ASA方舟生存飞升计划1.5重置版服务器搭建教程 大家好我是艾西一个做服务器租用的网络安全工程人员,以前有给大家分享过方舟生存进化的搭建架设教程。方舟这游戏出的时间也很久了,随着时间的推移官方有出新的版本命名为飞升计划,不少的玩家都…

数据库系统概论-第4章 数据库安全性

4.1 数据库安全性概述 4.2 数据库安全性控制 4.3 视图机制 4.4 审计 4.5 数据加密 4.6 其他安全性保护 4.7 小结

SVN修改已提交版本的注释

目录 一、需求分析 二、问题分析 三、解决办法 一、需求分析 ​开发过程中,在SVN提交文件后,发现注释写的不完整或不够明确,想再修改之前的注释文字​。 使用环境: SVN服务器操作系统:Ubuntu 20.04.6 LTS SVN版本&…

linux网络服务学习(2):vsftp

1.什么是vsftp vsftp是linux服务器上的一款使用ftp协议的软件,是linux上使用最广泛的ftp服务端软件 ftp协议是使用明文传输的,很不安全,一般用于局域网内的文件上传、下载 2.vsftp连接类型 ftp连接要用到2个端口:21、20端口。…

Visual Studio 2013 - 重置窗口布局

Visual Studio 2013 - 重置窗口布局 1. Microsoft Visual Studio 2013 - 重置窗口布局References 1. Microsoft Visual Studio 2013 - 重置窗口布局 窗口 -> 重置窗口布局 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

HarmonyOS定时器与定时任务

HarmonyOS 的 ArkTS 说白了 就是 TS和JS混合 加了一些新特性的语言 定时任务 就还是用 js代码就OK了 我们代码这样写 Entry Component struct Twox {build() {Row() {Column(){Button("触发定时任务").onClick(()>{setTimeout(()> {console.log(执行)},2000…