RISC-V特权架构 - 模式切换与委托

RISC-V特权架构 - 模式切换与委托

  • 1 导致模式切换的常见动作
  • 2 异常处理规则
  • 3 异常处理时模式切换
    • 3.1 在U模式下,发生异常
    • 3.2 在S模式下,发生异常
    • 3.3 在M模式下,发生异常
  • 4 系统调用时模式切换
  • 5 中断处理时模式切换

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。

1 导致模式切换的常见动作

RISC-V指令架构中,模式切换通常与异常处理、系统调用或程序流程管理有关。以下是导致RISC-V模式切换的一些常见动作:

  • 异常处理
    当RISC-V处理器遇到异常(如中断、非法指令等)时,它会根据异常类型跳转到相应的异常处理程序。这个跳转过程往往涉及从当前模式(如用户模式U)切换到更高特权的模式(如监督模式S或机器模式M),以便执行必要的异常处理代码。

  • 中断处理
    当中断发生时(如定时器中断、外部设备中断等),处理器会暂停当前任务,保存现场,并跳转到中断处理程序。这个过程通常涉及模式切换,以确保中断处理代码在适当的特权级别下执行。

  • 系统调用
    用户模式程序有时需要执行一些特权操作,如访问硬件资源或执行某些管理任务。这些操作不能直接在用户模式下完成,因此程序会发起系统调用。系统调用会导致处理器从用户模式切换到监督模式或机器模式,以便内核或特权代码可以执行所需的操作。RISCV提供ECALL指令,来实现系统调用。

  • 模式切换指令
    RISC-V提供了一些特权指令,用于在模式之间显式切换。例如,mret指令用于从机器模式返回到先前的模式,sret指令用于从监督模式返回到先前的模式。当异常处理程序或系统调用处理完成后,这些指令会被用来恢复之前的执行模式。

总之,导致RISC-V模式切换的动作包括异常处理、系统调用、使用模式切换指令以及中断处理等。这些动作确保了处理器能够在不同的执行模式之间灵活切换,以满足不同任务的需求。

2 异常处理规则

RISC-V架构指出,有如下的,异常处理规则:

  • M模式下发生中断,只能在M模式下处理
  • S模式下发生中断,默认在M模式下处理,也可以委托到S模式下处理
  • U模式下发生中断,默认在M模式下处理,也可以委托到S模式下处理

也就是说,只能把低级模式中断,委托给高级模式处理;而不能把高级模式中断,委托给低级模式处理。

不能把M模式产生的中断,委托给S模式;这意味着在M模式下发生的中断,通常需要在M模式下处理,而不能直接委托给S模式。

其实,还有一种迂回的方法,可以将M模式下中断,“委托”到S模式处理,那就是下节要讲的中断注入机制。

处理器,在某时刻,只会处于某一个模式下,但是会根据当前的执行上下文和任务需求,在不同的模式之间进行切换。

3 异常处理时模式切换

中断、异常、系统调用,他们都属于广义上的异常。
但是,在RISCV体系结构中,委托机制,使用2个寄存器实现委托:

  • 将中断归为一类,使用mideleg寄存器,以便将中断,委托给S模式处理;
  • 将异常与系统调用归为一类,使用medeleg寄存器,以便将异常,委托给S模式处理。

进行异常处理时,模式转换图,如下:
在这里插入图片描述

  • 权限模式,切换到权限模式
    通常是,由异常/中断/系统调用(ecall指令)触发了异常,需要切换到更高权限模式,进行异常处理。此时,才会发生由低到高模式的切换。

  • 权限模式,切换到权限模式
    通常是,在异常处理程序结束后,使用xret指令,返回到之前的模式。此时,才会发生由高到低模式的切换。

3.1 在U模式下,发生异常

在这里插入图片描述

  • 若medeleg中该异常对应bit为1,表示该异常,需要委托给S模式处理,则更新scause、sepc、stval、mstatus、pc这些S模式寄存器,并切换到S模式;异常服务程序执行完毕后,通过sret指令返回到之前的模式。

  • 若bit为0,表示不委托,则更新mcause、mepc、mtval、mstatus、pc这些M模式寄存器,并切换到M模式,异常服务程序执行完毕后,通过mret指令返回到之前的模式。

  • 寄存器具体如何更新,可参考《RISC-V特权架构 - 机器模式下的异常处理》。
  • 至于为何在S模式下,仍然更新mstatus寄存器,而不是sstatus寄存器,其原因为:sstatus可以看成mstatus的一个部分字段限制访问的镜像,它不包含M模式下的字段。对sstatus所做的更改会反映在mstatus中,对mstatus所做的更改也会反映在sstatus中。
    因此,更改mstatus中S模式字段,sstatus中对应字段自动被修改,故全部操作mstatus就可以了。

3.2 在S模式下,发生异常

与U模式下,完全一致。判断medeleg中该异常对应bit:

  • 为0时,更新对应M模式寄存器,切到M模式,之后通过mret返回;
  • 为1时,更新对应S模式寄存器,保持在S模式。

3.3 在M模式下,发生异常

不再关心medeleg寄存器值,仅能在M模式下处理,并会更新对应M模式寄存器。

4 系统调用时模式切换

在这里插入图片描述

系统调用,其实就是medeleg寄存器定义的异常之一,只不过这种异常,是由U或S模式下,程序通过ecall指令,软件触发的异常,主要用于系统调用,实现一些底层调用,例如输出打印信息到串口等。

因此,系统调用,这种异常的处理,与《2.1 异常处理时模式切换》完全一致,不再赘述。

5 中断处理时模式切换

进行中断处理时,模式转换图,如下:
在这里插入图片描述
与异常处理时,模式转换是类似的。
只是在异常处理中,我们判断medeleg寄存器,确定是否委托;而这里判断mideleg寄存器,来确定是否委托。

整体上,异常与中断的处理过程,非常相似。

更新寄存器,进入模式,以及返回指令,与异常处理时,完全一致,不再赘述。

本文描述的更详细内容,可阅读TinyEMU源码,riscv_cpu.c中raise_exception2函数。

综上,只有异常或中断,发生在U或S模式下时,才能委托给S模式处理;发生在M模式下时,只能在M模式处理,无法委托给S模式。

换句话说,委托的目的地一定是S模式,而被委托异常的源头,可以是U或S模式。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第6章 6.3.1 正则表达式的语法(MATLAB入门课程)

讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 正则表达式可以由一般的字符、转义字符、元字符、限定符等元素组…

三十 超级数据查看器 教程 详情界面的便捷功能

三十 超级数据查看器 教程 详情界面的便捷功能 ​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 豌豆荚 下载地址 大家好,今天我们讲一下超级数据查看器的便捷功能。 便捷功能为了在详情界面快速操作 首先,我们打开超级数据查看器&…

Android Studio开发学习(七)———RelativeLayout(相对布局)

在上期中我们对LinearLayout进行了详细的解析,LinearLayout也是我们用的比较多的一个布局,更多的时候更钟情于它的 weight(权重) 属性,等比例划分,对屏幕适配还是 帮助蛮大的;但是使用LinearLayout的时候也有一个问题,就是当界面比…

FPGA在医疗的应用,以4K医疗内窥镜为例

前言 随着技术的发展,医学影像作为科学技术的主要成就之一,在无创诊断和治疗领域已经有了多种应用。其中一个应用是内窥镜,在20世纪90年代,当利用电荷耦合装置将图像传输到显示器上成为可能时,内窥镜变得更加广泛。为…

K8S node节点执行kubectl get pods报错

第一个问题是由第二个问题产生的,第二个问题也是最常见的 网上找的都是从master节点把文件复制过来,这样确实可以解决,但是麻烦,有一个node节点还好,如果有多个呢?每个都复制吗?下面是我从外网…

洛谷-P2089 烤鸡

P2089 烤鸡 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N30; //const int M1e3*310; const int Mpow(3,10); int n; int arr[N]; //存临时方案 int res; //存方案数 int ans[M][N]; //存所有方案//x表示当前到…

会话跟踪技术基础:Cookie和Session

久违了&#xff0c;之前忙碌了一周赶毕设&#xff0c;今天抽空更新~ 一.理论知识 1.会话&#xff1a;用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应~ 2.会话跟…

uniapp的h5项目 用命令起这个项目(vue-cli)

这里其实就相当于给uniapp h5套了一个vue-cli的壳&#xff08;纯属个人感觉&#xff09; 首先需要安装vue-cli 脚手架 npm install -g vue/cli然后创建项目&#xff08;这里需要在hbuilder创建&#xff09; vue create -p dcloudio/uni-preset-vue uniapp安装成功后它的结构…

远程控制软件免费

远程控制软件免费&#xff1a;选择、价值与安全性探讨 随着科技的进步和互联网的普及&#xff0c;远程控制软件在日常生活和工作中的应用越来越广泛。这类软件允许用户通过网络远程访问和控制另一台计算机&#xff0c;为远程办公、技术支持和在线教育等提供了极大的便利。本文…

2、JVM内存模型深度解析

JVM整体结构及内存模型 根据 JVM 规范&#xff0c;JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 JVM分为五大模块&#xff1a; 类装载器子系统 、 运行时数据区 、 执行引擎 、 本地方法接口 和 垃圾收集模块 。 方法区Java8之后的变化 移除了 Pe…

上位机图像处理和嵌入式模块部署(qmacvisual缺失的光源控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有些场景下面&#xff0c;是不需要光源和光源控制的&#xff0c;比如说利用摄像头识别对应区域的库位&#xff0c;这部分直接利用红外光采集对应的…

FPGA - 以太网UDP通信(二)

一&#xff0c;引言 前文链接&#xff1a;FPGA - 以太网UDP通信&#xff08;一&#xff09; 在上文章中介绍了以太网简介&#xff0c;以太网UDP通信硬件结构&#xff0c;以及PHY芯片RGMII接口-GMII接口转换逻辑&#xff0c;接下来介绍UDP通信结构框图以及数据链路层&#xff…

ActiveMQ + MQTT 集群搭建(虚机版本) + Springboot使用配置

文章目录 前言一、ActiveMQ、 MQTT是什么&#xff1f;1.ActiveMQ介绍2.MQTT介绍 二、集群搭建步骤1.下载apache-activemq-5.15.12-bin.tar.gz2.上传apache-activemq-5.15.12-bin.tar.gz到服务器并解压文件到文件夹clusters、master、slave三个文件夹下面形成三个节点&#xff0…

【cocos creator】【TS】贝塞尔曲线,地图之间显示曲线,顺着曲线移动

参考&#xff1a; https://blog.csdn.net/Ctrls_/article/details/108731313 https://blog.csdn.net/qq_28299311/article/details/104009804 const { ccclass, property } cc._decorator;ccclass export default class mapPanel extends cc.Component {property(cc.Node)pla…

Oracle 常用命令总结

文章目录 一、数据库启动 & 关闭&查看1、启动数据库2、关闭数据库3、连接数据库4、查看数据库名5、查看实例 二、用户1、创建用户2、重置密码3、账户解锁4、账号赋权5、账户撤销权限6、删除用户7、查询所有用户&#xff08;DBA账号执行&#xff09;8、查看当前用户连接…

vue3 依赖-组件tablepage-vue3说明文档,列表页快速开发,使用思路及范例(Ⅰ)配置项文档

配置项API 引入思路介绍TablePage-vue3 API汇总属性插槽Exposes自定义对象searchConfig(array<object\> 类型)searchConfig-type当typetimes时当type不为时间类型时的 bind默认值&#xff08;Object类型&#xff09;当type为时间类型时的 bind默认值&#xff08;Object类…

【MySQL】数据库节点的平滑扩容方案

一、背景 众所周知&#xff0c;数据库很容易成为应用系统的瓶颈。单机数据库的资源和处理能力有限&#xff0c;在高并发的分布式系统中&#xff0c;可采用分库分表突破单机局限。本文来探讨下数据库节点的平滑扩容方案 二、节点扩容 2.1、什么是节点扩容 扩容一般是指水平分…

02 SQL基础 -- 初识SQL

一、初识 SQL 1.1 概念介绍 数据库中存储的表结构类似于 excel 中的行和列,在数据库中,行称为记录,它相当于一条结论,列称为字段,它代表了表中存储的数据项目 行和列交汇的地方称为单元格,一个单元格只能输入一条记录 SQL是为操作数据库而开发的语言。国际标准化组织(…

java数据结构与算法刷题-----LeetCode268. 丢失的数字

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 数学位运算 数学 解题思路&#xff1a;时间复杂度O( n n n)&…

EFcore 6 连接oracle19 WinForm vs2022

用EFcore访问Oracle&#xff0c;终于不需要Oracle的什么安装包了&#xff0c;直接在VS2022中就可以轻松搞定。在csdn上看到一哥们的帖子&#xff0c;测试了一下&#xff0c;发现很方便。使用的场景是&#xff1a;VS2022中EFcore6。经过测试&#xff0c;同 Navicat Premium 16比…