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模式。

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

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寄存器,暂时未知,查看QEMU和TinyEMU源码中,均是如此实现的,暂时不管。

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模式。

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

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

相关文章

PaddleVideo:onnx模型导出

本文节介绍 PP-TSM 模型如何转化为 ONNX 模型,并基于 ONNX 引擎预测。 1:环境准备 安装 Paddle2ONNX python -m pip install paddle2onnx 安装 ONNXRuntime # 建议安装 1.9.0 版本,可根据环境更换版本号 python -m pip install onnxrunti…

GEE:样本点的样式设置

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine (GEE)平台上为样本点设置样式的方法和代码,样本点可以设置成任何颜色,以及7种形状,以便更直观了解数据的分布和特征。 文章目录 一、统一设置样式1.1 示例代码1.2 示例代码链接二、每一类一个样式2.1 示例代码2.2…

7款公司电脑监控软件

7款公司电脑监控软件 研究证明,人们在家办公的效率比在办公室办公的效率低一半,其中原因是缺少监督,即便在公司办公,还存在员工偷闲的时刻,比如聊天、浏览无关网站、看剧、炒股等,企业想提高员工的工作效率…

【Java】maven传递依赖冲突解决

传递依赖的概念: 传递依赖:: A.jar 依赖 B.jar, B.jar 依赖 C.jar, 这个时候我们就说B是A的直接依赖, C是A传递依赖; 传递依赖可能会产生冲突: 联系着上面, 新导入一个jar包D.jar, D依赖C.jar, 但是B依赖的1.1版本, 而D依赖的是1.2版本, 这时候C这个j…

绝地求生:齐贺PUBG七周年!分享你的游玩感受及反馈赢惊喜道具

PUBG七周年庆典火热进行中,特殊道具、周年主题艾伦格上线!七周年期间游玩PUBG,在评论区分享你的游玩感受及反馈,即可参与活动赢取夏日浪潮宝箱奖励。 参与方式 齐贺PUBG七周年!在评论区分享分享你的七周年游玩感受及反…

鸿蒙OS实战开发:【多设备自适应服务卡片】

介绍 服务卡片的布局和使用,其中卡片内容显示使用了一次开发,多端部署的能力实现多设备自适应。 用到了卡片扩展模块接口,[ohos.app.form.FormExtensionAbility] 。 卡片信息和状态等相关类型和枚举接口,[ohos.app.form.formInf…

谷歌建站用什么程序比较好?

建网站这回事,说容易也容易,现如今市面上建站的程序多如牛毛,哪怕你不会代码也能建一个漂亮的网站,但网站搭建出来是为了什么?是为了获取流量,拉到业务,那么,建站的时候你就要考虑谷…

如何使用校园网——Win10笔记本,台式机互开热点

当我们使用校园网的时候,往往只能连接一个电脑端,但是又想两个机子同时连接WIFI怎么办呢? 当然,前提条件是你先得其中一台电脑有网络哈 1、打开想开共享热点的电脑的设置 A、点击WIN,再点击设置 2、点击网络和Inte…

JavaScript - 请你说一说对随机数的理解

难度级别:初级及以上 提问概率:40% 在前端开发中,随机数的应用场景非常多,而且也是一个常见的考点。例如网页登录的验证码,看似只有4个随机数字加字母的组合,其实这也是随机数的范畴;例如在抽奖算法中,可以用随机数确定用户中奖的概率…

TCP 三次握手与四次挥手面试题(计算机网络)

TCP 基本认识 TCP 头格式有哪些? 序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。 确认应答号&a…

Element Plus 表单校验

原理 为 rules 属性传入约定的验证规则&#xff0c;并将 form-Item 的 prop 属性设置为需要验证的特殊键值:model和:rules中字段的名称需要一致 示例&#xff1a; <template><el-form ref"ruleFormRef" :model"ruleForm" :rules"rules&q…

Spring Security——13,认证成功失败注销成功处理器

认证成功&&失败&&注销成功处理器 说明&#xff1a;一、认证成功处理器1.1 自定义成功处理器1.2 配置自定义成功处理器 二、认证失败处理器2.1 自定义失败处理器2.2 配置自定义失败处理器 三、登出成功处理器3.1 自定义登出处理器3.2 配置登出处理器 四、完结撒…

Excel全套213集教程

Excel全套213集教程 包含技术入门93集 图表17集 数据透视35集 公式函数68 基础入门 93节 https://www.alipan.com/s/cMxuPstkS1x 提取码: 77dd 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视…

【C语言】if语句选择题

前言 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 前言 关于if语句相关的选择题 题目一&#xff1a; 关于if语句说法正确是&#xff1a;( ) A .if语…

gitlab使用

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 目录 一&#xff1a…

windows下使用ZLMediaKit-API+FFmpeg+opengl拉取解码播放流媒体

ZLMediaKit简介 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;和SRS类似&#xff0c;功能强大&#xff0c;性能优异&#xff0c;提供多种支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/…

基于Springboot考研资讯平台的设计与实现(论文+源码)_kaic

摘 要 随着现在网络的快速发展&#xff0c;网络的应用在各行各业当中它很快融入到了许多学校的眼球之中&#xff0c;他们利用网络来做这个电商的服务&#xff0c;随之就产生了“考研资讯平台”&#xff0c;这样就让学生考研资讯平台更加方便简单。 对于本考研资讯平台的设计来…

Python爬虫技术快速入门

一、简介 Python爬虫是一种自动化提取互联网上数据的技术&#xff0c;它可以访问网页、解析HTML内容&#xff0c;并从中提取有用的信息。本文将介绍如何使用Python编写简单而有效的爬虫程序。 二、准备工作 在编写Python爬虫之前&#xff0c;我们需要安装一些必要的库。以下…

计算机网络 网络命令的使用

一、实验内容 1.PING网络命令的实验 ping 127.0.0.1(内部回环测试)ping 本主机的IP地址ping 默认网关地址ping远端目的地的IP地址ping localhostping域名 2.其他网络命令实验 命令用途ipconfig/all 显示当前系统网络配置&#xff0c;包括IP地址、子网掩码、默认网关等trace…

Ubuntu 22.04进行远程桌面连接

文心一言 Ubuntu 22.04进行远程桌面连接&#xff0c;无论是连接到Windows 10还是另一个Ubuntu 22.04&#xff0c;都可以通过不同的方式实现。以下是具体的步骤&#xff1a; 连接到Windows 10 在Windows 10上开启远程桌面功能&#xff1a;首先&#xff0c;需要在Windows 10上…