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.hqwc.cn/news/601921.html

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

相关文章

PANet网络

PANet(Path Aggregation Network)是一种用于语义分割任务的神经网络结构,旨在解决多尺度特征融合的问题。该网络结构由中国科学院计算技术研究所提出,在2018年的论文中首次提出。 PANet的主要目标是解决语义分割任务中多尺度信息…

4.8作业

1、使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是…

Linux虚拟网络设备全景解析:定义、工作模式与实践应用

在深入探索Linux操作系统的强大功能时,我们不可避免地会遇到虚拟网络设备的概念。这些设备扮演着构建和维护虚拟化环境中网络通信的关键角色。本文旨在详细介绍Linux虚拟网络设备的定义、工作模式以及它们的多样化用途。 1. Linux虚拟网络设备的定义 Linux虚拟网络…

LeetCode 24.两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出:[2,1,4…

MindSporeLite之converter_lite模型转换工具和benchmark模型推理工具

一、参考资料 MindSporeLite官方文档 二、准备工作 0. 系统环境 Environment Operating System Version: Ubuntu 16.04 CPU Type: AMD Ryzen 5 5600X 6-Core Processor3.7GHz RAM: 32GB MindSporeLite Version: r2.0 Python Version (if applicable): 3.9.5 PyTorch Ver…

IP网络对讲广播系统审计

前言 这个系统是前两年在一个内网遇到的,当时顺手试了一个admin登陆之后再没有然后了,最近发现有大佬分享关于这个系统的漏洞,于是就把自己当初看的几个漏洞分享一下,系统比较简单,漏洞点很多,不要做坏事哦…

蓝桥杯刷题-12-公因数匹配-数论(分解质因数)不是很理解❓❓

蓝桥杯2023年第十四届省赛真题-公因数匹配 给定 n 个正整数 Ai&#xff0c;请找出两个数 i, j 使得 i < j 且 Ai 和 Aj 存在大于 1 的公因数。 如果存在多组 i, j&#xff0c;请输出 i 最小的那组。如果仍然存在多组 i, j&#xff0c;请输出 i 最小的所有方案中 j 最小的那…

K8s学习九(配置与存储_存储)

存储管理 Volumes HostPath 将节点上的文件或目录挂载到 Pod 上&#xff0c;此时该目录会变成持久化存储目录&#xff0c;即使 Pod 被删除后重启&#xff0c;也可以重新加载到该目录&#xff0c;该目录下的文件不会丢失 效果就是容器里的数据和主机里的数据进行共享 配置文…

【grpc】二、grpc入门,基本使用方法

上篇介绍了使用protobuf生成grpc相关代码&#xff0c;并实现了服务端方法&#xff0c;本篇介绍下具体的使用。 一、服务端 // server.gopackage mainimport ("google.golang.org/grpc""grpcDemo/calc""net" )func startServer(addr string) {//…

鸿蒙ArkUI声明式学习:【UI资源管理】

OpenHarmony 应用的资源分类和资源的访问以及应用开发使用的像素单位以及各单位之间相互转换的方法。 资源分类 移动端应用开发常用到的资源比如图片&#xff0c;音视频&#xff0c;字符串等都有固定的存放目录&#xff0c;OpenHarmony 把这些应用的资源文件统一放在 resourc…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

AI资讯2024-04-08 | 斯坦福大学推出手机端运行大模型—Octopus v2,性能超越GPT-4

关注文章底部公众号可获取每日AI新闻,还有更多好玩使用的黑科技工具分享 斯坦福大学推出可在手机端运行大模型—Octopus v2 Octopus-V2-2B 是一个拥有 20 亿参数的开源语言模型,专为 Android API 量身定制,旨在在 Android 设备上无缝运行,并将实用性扩展到从 Android 系统…