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.mzph.cn/news/759216.shtml

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

相关文章

MyBatis3源码深度解析(十七)MyBatis缓存(一)一级缓存和二级缓存的实现原理

文章目录 前言第六章 MyBatis缓存6.1 MyBatis缓存实现类6.2 MyBatis一级缓存实现原理6.2.1 一级缓存在查询时的使用6.2.2 一级缓存在更新时的清空 6.3 MyBatis二级缓存的实现原理6.3.1 实现的二级缓存的Executor类型6.3.2 二级缓存在查询时使用6.3.3 二级缓存在更新时清空 前言…

2024年第六届区块链与物联网国际会议(BIOTC 2024)即将召开!

2024年第六届区块链与物联网国际会议(简称:BIOTC 2024)将于2024 年 7 月 19 日至 21 日在日本福冈召开,旨在为来自行业、学术界和政府的研究人员、从业者和专业人士提供一个论坛,就研发区块链和物联网的专业实践进行交…

简介:使用TensorFlow实现python简版神经网络模型

如果你想进一步深入AI编程的魔法世界,那么TensorFlow和PyTorch这两个深度学习框架将是你的不二之选。它们可以帮助你构建更加复杂的神经网络模型,实现图像识别、语音识别等高级功能。 模型原理:神经网络是一种模拟人脑神经元结构的计算模型&a…

python 基于 websocket 的简单将视频推流到网页

本来有一台设备是要搞成无线的形式的,设备的摄像头的数据可以在一台局域网连接的平板上查看,因为试着使用 RTMP 推流,感觉延时太大了,而 Webrtc 感觉有太麻烦了,所以一开始看到这篇文章使用 UDP 协议进行推流&#xff…

stable diffusion webui ubuntu 安装

1.git clone 下来 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UIStable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.https://github.com/AUTOMATIC1111/stable-diffus…

数据仓库相关概述

数据仓库概述 数据仓库概念 数据仓库是一个为数据分析而设计的企业级数据管理系统。数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。同时,随着时间的推移,数据仓…

期刊如何反击一波可疑图像

出版商正在部署基于人工智能的工具来检测可疑图像,但生成式人工智能威胁着他们的努力。 期刊正在努力检测用于分析蛋白质和DNA的凝胶的操纵图像。图片来源:Shutterstock 似乎每个月都会有一系列针对研究人员的新高调指控,这些研究人员的论文…

Go --- Go语言垃圾处理

概念 垃圾回收(GC-Garbage Collection)暂停程序业务逻辑SWT(stop the world)程序根节点:程序中被直接或间接引用的对象集合,能通过他们找出所有可以被访问到的对象,所以Go程序的根节点通常包括…

完全理解ARM启动流程:Uboot-Kernel

内容共计5W字数,但是我还是很多地方说的不够尽兴。那么下次聊! 前言 bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Bo…

openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整

文章目录 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整247.1 SQL调优关键参数调整 openGauss学习笔记-247 openGauss性能调优-SQL调优关键参数调整 247.1 SQL调优关键参数调整 本节将介绍影响openGauss SQL调优性能的关键数据库主节点配置参数,配…

【JVM】为对象分配内存的方式,死亡对象判断方法

目录 为对象分配内存的方式 指针碰撞 空闲列表 TLAB 死亡对象判断方法 引用计数法 可达性分析算法 为对象分配内存的方式 指针碰撞 一般情况下,JVM的对象都放在堆内存中(发生逃逸分析除外)。当类加载检查通过后,JVM为新生…

python 中怎样使用任意关键词实参?

在 Python 中,可以使用任意数量的关键字实参和任意关键字实参,也被称为 kwargs。 这允许你在函数调用时传递任意数量的关键字参数。 你可以使用任意数量的关键字实参(Keyword Arguments)和任意关键字实参(Arbitrary Ke…

sonar接入maven项目

1、介绍 sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。他有如下特性 (1) 检查代码是否遵循编程标准:如命…

走迷宫---dfs在矩阵图里的应用模板

题目描述如下: dfs算法解决迷宫问题的一个标准模板 ,通过递归与回溯暴力遍历所有能走的点,并比较找出所有可行方案的最优解 解决这道问题的核心思想和组合数如出一辙,可以说是组合数的升级版 结合注释看dfs更清晰易懂&#xff0…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识: 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架,springcloud继承了spring一直以来的风格——不重复造轮子,里面很多的…

测试平台——前端框架

一、创建vue项目 npm init vitelatest web_class wylWYLdeMacBook-Air testplatform % npm init vitelatest web_class ✔ Select a framework: › Vue ✔ Select a variant: › JavaScriptScaffolding project in /Users/wyl/workspace/testplatform/web_class...Done. Now…

IoT 物联网场景中如何应对安全风险?——青创智通

工业物联网解决方案-工业IOT-青创智通 ​随着物联网(IoT)技术的快速发展,越来越多的设备、系统和应用被连接到互联网上,从而构建了一个庞大的物联网生态系统。然而,这种连接性也带来了前所未有的安全风险。在物联网场景…

Android Studio实现内容丰富的安卓校园公告助手

获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 093校园助手 1.开发环境 android stuido3.6 jak1.8 eclipse mysql tomcat 2.功能介绍 具体往下看第三节,功能截图 安卓端: 1.注册登录 2.校园公告列表…

持续集成平台 02 jenkins plugin 插件

拓展阅读 Devops-01-devops 是什么? Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 代码质量管理 SonarQube-01-入门介绍 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业…

【pip 安装pymssql报错】 Failed to build pymssql

在使用pip install pymssql安装pymssql时报如下图的错误&#xff1b; 报错截图 2&#xff09;查找资料说pip<3.0版本 &#xff0c;我也试了&#xff0c;不行。 你们也可以试一试&#xff1a;pip install"pymssql<3.0" 3&#xff09;我的成功方式&#xff1…