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

本文主要是介绍制作一个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

这篇关于制作一个RISC-V的操作系统十-Trap和Exception(流 mtvec mepc mcause mtval mstatus trap完整流程)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/889894

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载