RISC-V(2)——特权级及特权指令集
目录
1. 特权级
2. 控制和状态寄存器(CSR)
2.1 分类
2.2 分析
1. 特权级
一个 RISC-V 硬件线程(hart)是运行在某个特权级上的,这个特权级被编码到一个或者多个 CSR(control and status register,控制和状态寄存器)中的一种模式。
当前定义了四种特权级,如下所示。
| 级别 | 编码 | 名字 | 缩写 |
| 0 | 00 | 用户模式 | U |
| 1 | 01 | 管理员/监管者模式 | S |
| 2 | 10 | 保留 | H |
| 3 | 11 | 机器模式 | M |
- 特权级的作用:被用于在不同的软件栈部件之间提供保护;
- 现象:试图执行当前特权模式不允许的操作, 将导致一个异常的产生。这些异常通常会导致下层执行环境或者 HAL 产生自陷(trap)。
机器级是最高级特权,也是 RISC-V 硬件平台唯一必须的特权级。
- 机器模式(M-mode):代码是固有可信的(inherently trusted),因为它可以在低层次访问机器的实现;
- 用户模式(U-mode):被用于传统应用程序;
- 管理员模式(S-mode):被分别用于操作系统;
所有硬件实现必须提供M-mode,因为这是唯一的模式,可以不受限制地访问整个机器。 最简单的RISC-V实现可以仅提供M-mode,虽然这样做不能为防止不正确的、恶意应用代码提供保护。许多RISC-V实现还支持至少一个用户模式(U-mode),以对系统的其他部分进行保护,防止被应用程序代码破坏。管理员模式(S-mode)可被加入,以在管理员级操作系统和SEE、HAL之间提供隔离。
一个 hart(硬件线程)通常在 U-mode 下运行应用程序,直到某些自陷(例如一个管理 员调用或者一个定时器中断)强制切换到一个自陷处理函数(trap handler),这个自陷处理 函数通常运行在更特权的模式下。然后这个线程将执行这个自陷处理器函数,它最终在 U-mode 下,在引起自陷的指令处或之后,继续线程执行。提升特权基级别的自陷称为垂直 自陷(vertical trap),而保持在同样特权级别的自陷称为水平自陷(horizontal trap)。RISC-V 特权体系结构提供了将自陷灵活地路由到不同的特权层。
2. 控制和状态寄存器(CSR)
2.1 分类
用户级:


管理员级:

机器级:


2.2 分析
高权限模式通常可以使用权限较低的模式的所用功能,并且它们还有一些低权限模式下不可用的额外功能,例如:
- 处理中断和执行 I/O 的功能
- 处理器通常大部分时间都运行在权限最低的模式下
- 处理中断和异常时会将控制权移交到更高权限的模式
RISC-V 特权体系结构定义的所有指令的指令集:
(1)mret、sret、uret

mret、sret或uret指令用于从m模式中的自陷重定向。
(2)sfence.vma
supervisor-mode fence.virtual memory addreee,刷新当前CPU下的TLB,在多核系统中,如果一个hart修改了页表,执行sfence.vma之后,仅仅是刷新了当前hart的TLB,无法刷新其他hart的TLB。
(3) wfi
等待中断指令。
等待中断指令(WFI)用于提供提示,即当前的hart可以暂停,直到有需要处理的中断。WFI指令的执行也可以用于通知硬件平台适当的中断应该优先路由到该hart。WFI可在所有特权模式下使用,也可选择在U模式下使用。
当在mstatus中TW=1时,此指令可能引发非法指令异常。

如果当硬件线程被暂停时,出现一个使能的中断或者后来出现了一个,将会在下一条指 令处执行中断异常,即自陷处理函数继续执行,并且 mepc=pc+4。
(4)寄存器操纵
csrr,读取一个 CSR 的值到通用寄存器。如:csrr t0, mstatus,读取mstatus的值到t0中。csrw,把一个通用寄存器中的值写入 CSR 中。如:csrw mstatus, t0,将t0的值写入mstatus。csrs,把 CSR 中指定的 bit 置 1。如:csrsi mstatus, (1 << 2),将mstatus的右起第 3 位置 1。csrc,把 CSR 中指定的 bit 置 0。如:csrci mstatus, (1 << 2),将mstatus的右起第 3 位置 0。csrrw,读取一个 CSR 的值到通用寄存器,然后把另一个值写入该 CSR。如:csrrw t0, mstatus, t0,将mstatus的值与t0的值交换。csrrs,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 1。csrrc,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 0。
相关文章:
RISC-V(2)——特权级及特权指令集
目录 1. 特权级 2. 控制和状态寄存器(CSR) 2.1 分类 2.2 分析 1. 特权级 一个 RISC-V 硬件线程(hart)是运行在某个特权级上的,这个特权级被编码到一个或者多个 CSR(control and status register&a…...
Linux——常用命令大汇总(带你快速入门Linux)
纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.终端和shell命令解析器终端和shell命令解析器概述终端提示符的格式常用快捷键 二.Linux命令格式帮助文档:man 三.目录基础知识Wind…...
记录 使用 git 克隆仓库报错:Warning: Permanently added‘github.com’ to the .....(ssh )
解决方法: 1. 新建空文件夹->右键->点击 Git Bash Here2. 输入 cd C:3. 输入 cat ~/.ssh/id_rsa.pub4. 输入 ssh-keygen重复回车,生成一个矩形,则说明公钥已经生成了。重复步骤3,生成publickey,右键…...
kafka---- zookeeper集群搭建
1.准备工作: ##准备3个节点,要求配置好主机名称,服务器之间系统时间保持一致 ##注意/etc/hostname 和/etc/hosts 配置主机名称(在这个里我准备Prac-zk-133, Prac-zk-134 , Prac-zk-135二节点) vim /etc/hosts #保证可以通过主机名互通 添加格式为IP 主…...
linux安装firefox
1.下载对应包 https://www.mozilla.org/en-US/firefox/all/#product-desktop-release 2. 挂载桌面链接(如果/usr/bin/firefox下有的话,先删除) ln -s /opt/firefox/firefox /usr/bin/firefox 3.执行以下命令,即可启动Firefox客户端: firefox...
【MySQL】基础语法总结
MySQL 基础语句 一、DDL 数据库定义语言 1.1CREATE 创建 1.1.1 创建数据库 语法结构 CREATE DATABASE database_name;示例 CREATE DATABASE demo;1.1.2 创建表 语法结构 CREATE TABLE 表名 (列1 数据类型,列2 数据类型,... );示例 CREATE TABLE new_user (id INT PRIMARY KE…...
【玩玩Vue】使用el-menu作为菜单时,通过一二级路由控制菜单高亮
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、Vue路由二、路由一级控制高亮(常用)1.vue中路由文件2.网址样式3.Vue文件4.$route的内容 三、路由二级控制高亮…...
9.2 【C语言】使用结构体数组
一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生需要参加运算,显然应该用数组,这就是结构体数组。 9.2.1 定义结构体数组 例9.3 有三个候选人,每个选民只…...
leetcode原题: 最小值、最大数字
题目1:最小值 给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差 示例: 输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8} 输出:3&…...
Prompt2Model: Generating Deployable Models from Natural Language Instructions
本文是LLM系列文章,针对《 Prompt2Model: Generating Deployable Models from Natural Language Instructions》的翻译。 Prompt2Model:从自然语言指令生成可部署模型 摘要1 引言2 Prompt2Model框架3 参考实现4 实验设置5 实验结果6 讨论与结论不足道德…...
前端埋点 sendBeacon 替代方式
看英文文档真的很重要 sendBeacon 限制比较多, 容易跨域, 跨域时候还必须指定请求头, 不能使用通配符来解决跨域 文档地址 文档里面说 fetch 其实可以代替 sendBeacon 原文: Note: For use cases that need the ability to send requests with methods other than POST, or …...
面试官问我MySQL和MariaDB的联系和区别,这我能不知道?
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师…...
1.网络空间搜素引擎
网络空间搜素引擎 https://cybermap.kaspersky.com/cn 世界所以带有ip的网络设备互联组成的空间叫做网络空间 地址 :shodan.io 简介 : 这句话还是有点东西得 。 区别: 平常得搜素引擎主要搜网页,shadan可以搜所以带有ip地址…...
《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌全栈环境IDX,微软在Excel推出Python
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1ju4y1D7A8/ 《安富莱嵌入式周报》第321期:开源12导…...
前端开发必备的网站
前端开发必备的网站及官网 说明: 这里记录了我本人平时开发所用到的网站,对我还是有帮助的,后续会接着补充进来,一方面是为了记录,另一方面也可以帮助到大家… 网站名称及描述网址Elememt-ui (组件库)Elememt-ui&…...
Java运行时jar时终端输出的中文日志是乱码
运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可 两种方式修改:临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK, 打开cmd&am…...
Vue框架--Vue中el和data的两种写法
data与el的2种写法 1.el有2种写法 (1).new Vue时候配置el属性。 (2).先创建Vue实例,随后再通过vm.$mount(#root)指定el的值。 2.data有2种写法 (1).对象式 (2).函数式 如何选择:目前哪种写法都可以,以后学习到组件时ÿ…...
【数据结构】 二叉树面试题讲解->贰
文章目录 🌏引言🎄[二叉树遍历](https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId60&&tqId29483&rp1&ru/activity/oj&qru/ta/tsing-kaoyan/question-ranking)🐱👤题目描述&#…...
C和SystemVerilog联合仿真
想要联合仿真一个c程序和verilog表示的硬件,可以用如下方法(DPI): 先写一个.c文件funcs.c #include <stdio.h> #include "svdpi.h"extern int sayHello();void something() {printf("something\n");s…...
15-mongodb
一、 MongoDB 简介 1 什么是 MongoDB MongoDB 是一个基于分布式文件存储的数据库。由 C语言编写。在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
