RV32/64 特权架构

news2024/12/23 5:27:14
  • machine mode: 运行最可信的代码;
  • supervisor mode:为 Linux,FreeBSD 和 Windows 等操作系统提供支持;
  • user mode:权限最低,应用程序的代码在此模式下运行;

这两种新模式都比user mode有着更高的权限,有更多权限的模式通常可以使用权限较低的模式的所用功能,并且它们还有一些低权限模式下不可用的额外功能,例如处理中断和执行 I/O 的功能。

处理器通常大部分时间都运行在权限最低的模式下,处理中断和异常时会将控制权移交到更高权限的模式。

machine mode

  • RISC-V 中 hart(hardware thread,硬件线 程)可以执行的最高权限模式;
  • 在 M 模式下运行的 hart 对内存,I/O 和一些对于启动和配 置系统来说必要的底层功能有着完全的使用权;
  • 它是唯一所有标准 RISC-V 处理器都 必须实现的权限模式。
  • 简单的 RISC-V 微控制器仅支持 M 模式;
  • 机器模式最重要的特性是拦截和处理异常(不寻常的运行时事件)的能力。包括exception和interrupt;
  • M mode下,可能发生的exception有:
    • access fault exception,当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。
    • Breadkpoint exception, 在执行 ebreak 指令,或者地址或数据matches debug trigger;
    • Environment call exception, 在执行 ecall 指令时发生。
    • Illegal instruction exception, 在译码阶段发现无效操作码时发生。
    • Misaligned addr exception,在有效地址不能被访问大小整除时发生,例如地址为 0x12 的 amoadd.w

三种标准的中断源:软件、时钟和外部来源。

  • 软件中断通过向内存映射寄存器中存数来触发,并通常用于由一个 hart 中断另一个 hart(在其他架构中称为处理器间中断机 制)
  • 当 hart 的时间比较器(一个名为 mtimecmp 的内存映射寄存器)大于实时计数器 mtime 时,会触发时钟中断。
  • 外部中断由平台级中断控制器(大多数外部设备连接到这个 中断控制器)引发。

机器模式下的异常处理

 八个控制状态寄存器(CSR)是机器模式下异常处理的必要部分。

  • mtvec(Machine Trap Vector)它保存发生异常时处理器需要跳转到的地址。
  • mepc(Machine Exception PC)它指向发生异常的指令。
  • mcause(Machine Exception Cause)它指示发生异常的种类。
  • mie(Machine Interrupt Enable)它指出处理器目前能处理和必须忽略的中断。
  • mip(Machine Interrupt Pending)它列出目前正准备处理的中断。
  • mtval(Machine Trap Value)它保存了陷入(trap)的附加信息:addr exception中出错的地址、发生非法指令例外的指令本身,对于其他异常,它的值为 0。
  • mscratch(Machine Scratch)它暂时存放一个字大小的数据。
  • mstatus(Machine Status)它保存全局中断使能,以及许多其他的状态,如图 10.4 所示。

 处理器在 M 模式下运行时,只有在全局中断使能位 mstatus.MIE 置 1 时才会产生中 断.此外,每个中断在控制状态寄存器 mie 中都有自己的使能位;这些位在 mie 中的位置对应于图 10.3 中的中断代码。例如,mie[7]对应于 M 模式中的时钟中断。

 控制状态寄存器 mip具有相同的布局,并且它指示当前待处理的中断。将所有三个控制状态寄存器合在一起考 虑,如果 mstatus.MIE = 1,mie[7] = 1,且 mip[7] = 1,则可以处理机器的时钟中断。

当一个 hart 发生异常时,硬件自动经历如下的状态转换

  • 异常指令的 PC 被保存在 mepc 中,PC 被设置为 mtvec。
  • 对于同步异常,mepc 指向导致异常的指令;对于中断,它指向中断处理后应该恢复执行的位置
  • 根据异常来源设置 mcause(如图 10.3 所示),并将 mtval 设置为出错的地址或 者其它适用于特定异常的信息字。
  • 把控制状态寄存器 mstatus 中的 MIE 位置零以禁用中断,并把先前的 MIE 值保 留到 MPIE 中
  • 发生异常之前的权限模式保留在 mstatus 的 MPP 域中,再把权限模式更改为 M。图 10.5 显示了 MPP 域的编码(如果处理器仅实现 M 模式,则有效地跳过这 个步骤)。

              

        为避免覆盖整数寄存器中的内容,中断处理程序先在最开始用 mscratch 和整数 寄存器(例如 a0)中的值交换。通常,软件会让 mscratch 包含指向附加临时内存空 间的指针,处理程序用该指针来保存其主体中将会用到的整数寄存器。在主体执行之 后,中断程序会恢复它保存到内存中的寄存器,然后再次使用 mscratch 和 a0 交换, 将两个寄存器恢复到它们在发生异常之前的值。最后,处理程序用 mret 指令(M 模 式特有的指令)返回。mret 将 PC 设置为 mepc,通过将 mstatus 的 MPIE 域复制到 MIE 来恢复之前的中断使能设置,并将权限模式设置为 mstatus 的 MPP 域中的值。 这基本是前一段中描述的逆操作。

        有时需要在处理异常的过程中转到处理更高优先级的中断。唉,mepc, mcause,mtval 和 mstatus 这些控制寄存器只有一个副本,处理第二个中断的时候 如果软件不进行一些帮助的话,这些寄存器中的旧值会被破坏,导致数据丢失。可抢 占的中断处理程序可以在启用中断之前把这些寄存器保存到内存中的栈,然后在退出 之前,禁用中断并从栈中恢复寄存器。

        除了上面介绍的 mret 指令之外,M 模式还提供了另外一条指令:wfi(Wait For Interrupt)。wfi 通知处理器目前没有任何有用的工作,所有它应该进入低功耗模式, 直到任何使能有效的中断等待处理,即mie&mip ≠ 0。RISC-V 处理器以多种方式实现 该指令,包括到中断待处理之前都停止时钟。有的时候只把这条指令当作 nop 来执 行。因此,wfi 通常在循环内使用。

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

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

相关文章

C/C++ 快乐数: 编写一个算法来判断一个数n是不是快乐数

题目: 编写一个算法来判断一个数n是不是快乐数。 快乐数的定义: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过…

数字中台建设指南(大数据平台)

制定数字中台战略规划:制定符合企业实际情况的数字中台战略规划,明确建设目标、重点任务和时间表。确定数字中台架构:根据企业业务需求和特点,确定数字中台的架构,包括技术架构、应用架构和数据架构。搭建数字中台基础…

制作Windows 11的U盘启动工具的两种方法,以及如何使用它来安装

本文介绍了如何创建Windows 11的U盘启动工具,以及如何使用它来安装Windows 11。 Windows 11 Media Creation Tool 微软网站上提供的Windows 11 Media Creation Tool可以帮助你创建Windows 11的U盘启动工具。它真的很容易使用,因为它可以引导你完成所有的步骤。 1、访问Mic…

接口测试要测试什么?怎么测?

本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系 第二部分:主要介绍为什么要做接口测试,并简单总结接口持续集成和接口质量评估…

textarea 网页文本框在光标处添加内容

在前端研发中我们经常需要使用脚本在文本框中插入内容。如果产品要求不能直接插入开始或者尾部,而是要插入到光标位置,此时我们就需要获取光标/光标选中的位置。 很多时候,我在格式化文本处需要选择选项,将选择的信息输入到光标位…

Nginx【通俗易懂】《中篇》

目录 1.Url重写rewrite 2.防盗链 3.静态资源压缩 4.跨域问题 1.Url重写rewrite 🤩🤩🤩 1.1.rewrite书写格式 rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到rep…

Jetpack Startup 优雅完成库的初始化和方法接口简化

目录 1.Startup组件是什么2.Startup组件能做啥2.1 startup组件可以简化用户使用我们提供的库的流程。2.2 简化库提供给使用者的API接口 3.如何使用Startup组件3.1 引入依赖3.2 创建一个初始化的类继承Initializer3.3 在我们库的AndroidManifest.xml中加入配置 4.使用Startup组件…

Windows mysql5.7 执行查询/开启/测试binlog---简易记录

前言:基于虚拟机mysql版本为5.7,增量备份测试那就要用到binlog… 简述:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。 binlog是记录所有数据库表结构变更(例如CREATE、ALTER…

C++相关闲碎记录(9)

1、非修改型算法 for_each()对每个元素执行某种操作count()返回元素个数count_if()返回满足某一条件的元素的个数min_element()返回最小值元素max_element()返回最大值元素minmax_element()返回最小值和最大值元素find()查找某个数值find_if()查找满足条件的元素find_if_not()…

03 Temporal 详细介绍

前言 在后端开发中,大家是否有遇到如下类型的开发场景 需要处理较多的异步事件需要的外部服务可靠性较低需要记录保存某个对象的复杂状态 在以往的开发过程中,可能更多的直接使用数据库、定时任务、消息队列等作为基础,来解决上面的问题。然…

【概率方法】MCMC 之 Gibbs 采样

上一篇文章讲到,MCMC 中的 HM 算法,它可以解决拒绝采样效率低的问题,但是实际上,当维度高的时候 HM 算法还是在同时处理多个维度,以两个变量 x [ x , y ] \mathbf{x} [x,y] x[x,y] 来说,也就是同时从联合…

Nyquist Theorem(取样定理)

取样定理,又称为奈奎斯特定理(Nyquist Theorem),是信号处理领域中一项至关重要的基本原理。它规定了对于连续时间信号,为了能够完全准确地还原出原始信号,即使是在离散时间下进行采样和再构建,都…

算法基础之树的重心

树的重心 无向图: 边没有方向 有向图:边有方向 只能单向询问 无向图建立双向的边 要求输出每种情况连通块个数最大值的最小值**(最小的最大值)** #include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace s…

2023-12-13 VsCode + CMake + Qt环境搭建

点击 <C 语言编程核心突破> 快速C语言入门 VsCode CMake Qt环境搭建 前言一、前期准备二、具体设置总结 前言 要解决问题: 最近研究 Qt, 使用 qtcreator, 发现在搭建 UI 界面时候很方便, 但到编码和调试就比较有问题了. 想到的思路: 用 VSCode 进行编码及调试. 其它…

003 FeedForward前馈层

一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17torch 1.13.1cu117torchvision 0.14.1cu117 二、前馈层原理 Transformer模型中的前馈层&#xff08;Feed Forward Layer&#xff09;是其关键组件之一&#xff0c;对于模型的性能起着重要作用。下面将用900字对…

postman接口测试系列: 时间戳和加密

在使用postman进行接口测试的时候&#xff0c;对于有些接口字段需要时间戳加密&#xff0c;这个时候我们就遇到2个问题&#xff0c;其一是接口中的时间戳如何得到&#xff1f;其二就是对于现在常用的md5加密操作如何在postman中使用代码实现呢&#xff1f; 下面我们以一个具体的…

【EXCEL】数据透视实例

相关链接&#xff1a;Excel数据透视表全攻略 数据样例&#xff1a; 透视结果&#xff1a;

分析某款go端口扫描器之三

一、概述 前两篇主要分析些工具集&#xff0c;已经针对web服务的指纹和端口指纹信息进行识别&#xff0c;并没有真正开始扫描。本篇主要分析如何进行IP存活探测以及tcp扫描实现。 项目来源&#xff1a;https://github.com/XinRoom/go-portScan/blob/main/util/file.go 二、/…

云架构俭约之道七法则(The Frugal Architect)

文章目录 一、前言关于 Law 与 Rule 的区别 二、云架构俭约之道七法则Design&#xff08;设计方面&#xff09;Law 1&#xff1a;把成本作为非功能性需求Law 2&#xff1a;可持续性系统需要将成本与业务相匹配Law 3&#xff1a;架构设计是一系列权衡的取舍 Measure&#xff08;…

Unity | 渡鸦避难所-2 | 搭建场景并添加碰撞器

1 规范项目结构 上期中在导入一系列的商店资源包后&#xff0c;Assets 目录已经变的混乱不堪 开发过程中&#xff0c;随着资源不断更新&#xff0c;遵循一定的项目结构和设计规范是非常必要的。这可以增加项目的可读性、维护性、扩展性以及提高团队协作效率 这里先做下简单的…