制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)

文章目录

  • mtvec
  • mepc
  • mcause
  • mtval
  • mstatus
  • trap 初始化
  • trap的top half(硬件完成)
  • trap的bottom half(软件完成)
  • 从trap返回
  • 代码实现

控制流:程序控制的执行流
trap分为中断和异常
在这里插入图片描述

mtvec

base:存储trap入口函数的基地址右移两位的即四字节对齐的地址
WARL:可以写任何值,但读出来的值需要是合法才行
在这里插入图片描述

mepc

异常执行完后恢复到原来执行流,
MXLEN:就是CPU处理长度
在这里插入图片描述

mcause

WLRL:读写该部分都必须是合法值
在这里插入图片描述

在这里插入图片描述

mtval

对mcause做的一个补充
在RISC-V架构中,mtval 是 Machine Trap Value 寄存器(机器陷阱值寄存器)的缩写,它是RISC-V架构定义的一部分,用于异常处理机制。

当发生硬件引发的异常,如load访问错误、store访问错误、非法指令等时,mtval 寄存器会被设置为相关的错误值。具体来说:

  • 对于 load 或 AMO (原子操作) 访问错误,mtval 保存的是导致错误的地址。
  • 对于 store 访问错误,mtval 同样保存的是试图进行非法存储操作的地址。
  • 对于指令相关异常(如非法指令),mtval 存储的是触发异常的指令的地址。

程序员或操作系统可以通过检查 mtval 寄存器的内容来确定导致异常的具体原因,这对于调试和异常处理程序非常重要。在RISC-V架构的特权模式下,不同的异常等级(如Machine、Supervisor、User等)会有对应的陷阱值寄存器,例如在Supervisor模式下,类似的寄存器可能是scausesbadaddr
在这里插入图片描述

mstatus

xPIE保持执行trap时前保持当前的xIE,trap执行后再恢复到xIE去
xPP保持陷入当前权限x之前的权限级别值,陷入到M权限之前的权限可以说M U S 所以用两个比特位表示这三种状态。陷入到S之前的权限可以是 U S 所以用一个比特位表示,陷入到U只能是U,那没有必要保存,因为执行完trap后恢复到的和执行trap时一样。
WPRI:读这个寄存器的时候忽略该部分的值,写这个寄存器的时候要保留该部分原来的值(不要变)
在这里插入图片描述

trap 初始化

设置mtvec地址为自己设置的异常处理程序的入口地址

在RISC-V架构中,mtvec 是 Machine Trap Vector Base Address Register(机器陷阱向量基地址寄存器)的缩写。此寄存器在RISC-V处理器中扮演着核心的角色,它负责决定在发生硬件异常或中断时,处理器应跳转到何处执行相应的处理代码。

mtvec 寄存器的结构通常包括两部分:

  1. Base Address(基地址):存储了一个物理地址,当发生异常或中断时,处理器会跳转到这个地址处执行异常处理程序的第一条指令。

  2. Mode(模式):

    • Direct Mode(直接模式):在这种模式下,基地址字段直接指向异常处理程序的入口地址。
    • Vectored Mode(向量化模式):这种模式下,基地址字段指向一个固定的向量表,向量表中的每一个条目对应一种特定的异常类型。当异常发生时,处理器根据异常类型从向量表中索引出相应的处理程序地址。

在这里插入图片描述

trap的top half(硬件完成)

  1. MIE复制到MPIE中,MIE清0
  2. 设置mepc,pc设置为mtvec(异常:异常程序处理完后需要重新执行异常指令 中断:执行完处理中断执行下一条指令)
  3. 设置mcause和mtval
  4. 设置MPP,权限进入M(无论啥trap都会先切换到machine模型)
    . 在这里插入图片描述

trap的bottom half(软件完成)

  1. 切换上下文
  2. 调用对应的处理函数
  3. 恢复上下文
  4. mret
    在这里插入图片描述

从trap返回

  1. 恢复权限
  2. 中断恢复,设置MPP
  3. pc恢复,设置MPIE
    在这里插入图片描述

代码实现

https://github.com/FULLK/risllkos/tree/main/Fullkenerl5

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

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

相关文章

2_8.Linux系统引导过程及引导修复

# 1.磁盘引导 # mbr主引导记录0磁道1扇区446 作用: 记录grub2引导文件的位置 当mbr数据丢失系统会因为找不到启动分区而停止启动 问题模拟方式: 系统磁盘/dev/sda dd if/dev/zero of/dev/vda bs446 count1 ##清空系统/dev/sda上的mbr数据 恢复方式: &…

图形化界面使用MQ!!!

一、docker安装 1、拉去镜像 docker pull rabbitmq:3.10-management 2、Docker运行,并设置开机自启动(第一个-p是MQ默认配置的端口,第二个-p是图形化界面配置的端口) docker run -d --restartalways --name rabbitmq -p 5672:5672…

直播系统的短视频直播源码,带有多功能后台系统的直播短视频平台 APP 源码。

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 此源码是一个直播系统,集直播、短视频等功能,根据市场趋势开发并推出思乐直播APP,APP功能丰富且可在后台管理系统进行配置,做到按需求来…

《QT实用小工具·二十二》多种样式导航按钮控件

1、概述 源码放在文章末尾 该项目实现了多种样式的导航按钮控件 可设置文字的左侧、右侧、顶部、底部间隔。 可设置文字对齐方式。 可设置显示倒三角、倒三角边长、倒三角位置、倒三角颜色。 可设置显示图标、图标间隔、图标尺寸、正常状态图标、悬停状态图标、选中状态图标…

ctfshow web入门 文件上传web162--web167

web162 session文件包含条件竞争 直接包含不传马了 我们上传的文件如果不符合要求,就会被删除,导致成功上传无法访问,没有用。但是如果我们上传的速度比服务器删的速度快,就可以了。 上传.user.ini GIF89a auto_append_file/tmp/…

四、书城开发--3、书城图书部分的开发

书城图书部分 首先我们做书城首页搜索栏下面的图片展示 我们在书城首页组件中通过home请求方法中获取回来的数据中,打印出来可以看到那个banner就是我们现在要的图片 我们在data中定义一个变量banner用来存放获取回来的数据中的banner 然后把它展示出来就可以了&a…

LeetCode-84. 柱状图中最大的矩形【栈 数组 单调栈】

LeetCode-84. 柱状图中最大的矩形【栈 数组 单调栈】 题目描述:解题思路一:单调栈解题思路二:解题思路三: 题目描述: 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且…

阿赵UE学习笔记——26、动画混合空间

阿赵UE学习笔记目录   大家好,我是阿赵。   继续学习虚幻引擎的使用。之前学习了通过蓝图直接控制动画播放,或者通过动画状态机去控制播放。这次来学习一种比较细致的动画控制播放方式,叫做动画混合空间。 一、使用的情景 假设我们现在需…

ssm035基于JavaWeb的家居商城系统的设计与实现+jsp

家居商城系统 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于家居商城系统当然也不能排除在外,随着网络技术的不断成熟,带动了家居商城系统,它彻底改…

Linux操作系统安装注意事项(新手简易版)

Linux操作系统安装注意事项(新手简易版) 目录: 1、字符集安装 2、磁盘分区 3、关闭KDUMP防火墙 4、时区选择 注:事例截图是centos8的安装,其他版本是一样的 1、字符集安装 ecology运行需要用到GBK和UTF8字符…

设计模式-结构型-装饰器模式-decorator

发票基本类 public class Invoice {public void printInvoice() {System.out.println("打印发票正文");} } 发票正文类 public class Decorator extends Invoice {protected Invoice ticket;public Decorator(Invoice ticket) {this.ticket ticket;}Overridepubl…

Android获取连接到手机热点上的设备信息

主题:在手机开启热点网络的情况下,想要获取是哪个设备已经连接上了当前开启的热点。 实现思路:Android通过读取 /proc/net/arp 文件可以得到连接当前热点的设备信息,包括Mac地址、IP地址等信息。 一. 方法逻辑: /*** …

ruoyi-vue-pro 前端vue js直接import导入本地文件使用方法

我的xml文件名称叫w2101.xml 第一步,删除所有依赖,否则配置以后就会启动报错: 第二步配置对应的文件格式,我当前使用的是xml文件 config.module.rule(xml).test(/\.xml$/).use(xml-loader).loader(xml-loader).end();第三步…

你应该知道的21个html小技巧

本文翻译自 21 HTML Tips You Must Know About,作者:Shefali, 略有删改。 在这篇文章中,我将分享21个HTML技巧和代码片段,可以提高你的编码技能。 链接联系人 使用HTML创建可点击的电子邮件、电话和短信链接&#xf…

转圈游戏——快速幂

目录 题目 思路 代码 题目 思路 每个小朋友移动一次的位置为,移动 q 次的位置则为。那么题目要求移动 ,最后的位置为 。 但 的范围是,而总的移动次数是 。时间复杂度是在,因此是一定不能硬算的,肯定会超时。那么该…

长期通配符证书介绍

长期通配符证书是指有效期较长的泛域名证书,这种证书允许您使用单一证书为一个主域名及其所有相关子域名提供长期的HTTPS加密服务。获取长期通配符证书的过程与普通通配符证书相似,但需要注意选择具有较长有效期的证书产品,并确保符合CA机构及…

私域电商客户要挨一刀的“订单发货管理”,微信:必须强制接入

文丨微三云营销总监胡佳东,点击上方“关注”,为你分享市场商业模式电商干货。 - 引言:超90%的私域运营商家都见到了或者说遇到了这个问题,如果没有读懂这个微信的模型机制,一定会懵逼,微三云营销总监胡佳…

SpringBoot整合MyBatis四种常用的分页方式

目录 方式1 一、准备工作 1. 创建表结构 2. 导入表数据 3. 导入pom.xml依赖 4. 配置application.yml文件 5. 创建公用的实体类 项目结构 2. 创建controller层 3. 创建service层 4. 创建mapper层 5. 创建xml文件 6. 使用postman进行测试,测试结果如下…

DNS 各记录类型说明及规则

各记录类型使用目的 记录类型使用目的A 记录将域名指向一个 IP 地址。CNAME 记录将域名指向另一个域名,再由另一个域名提供 IP 地址。MX 记录设置邮箱,让邮箱能收到邮件。NS 记录将子域名交给其他 DNS 服务商解析。AAAA 记录将域名指向一个 IPv6 地址。…

MQTT的学习

近期构建物联网平台,学习到MQTT,这里使用的是uniapp作为连接MQTT broker的,这里使用的是国产的EMQX。 MQTT的认识 MQTT 协议入门:基础知识和快速教程 | EMQ(简单的认识) 创建 MQTT 连接时如何设置参数&am…