【CPU】RISC-V中的PMP物理内存保护单元

在RISC-V架构中,物理内存保护(PMP, Physical Memory Protection)机制允许对不同的物理内存区域设置访问权限。PMP表项不仅包含访问权限(读、写、执行),还包括地址匹配模式,用于定义受保护内存区域的范围。以下是几种主要的地址匹配模式:

PMP地址匹配模式

  1. 自然粒度(NAPOT, Naturally Aligned Power-of-Two)

    • 这种模式要求受保护的内存区域大小必须是2的幂次方,并且起始地址也必须是对齐到该大小的边界上。
    • 例如,如果你想保护一个4KB(即2^12字节)大小的内存区域,那么这个区域的起始地址必须是4KB的倍数。
    • 在配置时,pmpaddr寄存器中的值表示的是该区域的结束地址减去1。因此,对于一个从地址0x2000开始的4KB区域,pmpaddr寄存器应该设置为0x2FFF(即0x3000 - 1)。
  2. 全地址空间(TOR, Top of Range)

    • 这种模式通常与另一个PMP条目结合使用,定义一个范围内的地址。第一个条目定义范围的顶部,第二个条目定义范围的底部。
    • 例如,如果你有两个PMP条目,第一个条目的pmpaddr设置为0x3000,第二个条目的pmpaddr设置为0x2000,则受保护的区域是从0x2000到0x3000(不包括0x3000)。
    • 注意,这种模式需要两个连续的PMP条目来定义一个完整的地址范围,并且这两个条目都应配置为TOR模式。
  3. 下界(OFF, Offset)

    • 在某些实现中,可能支持偏移模式,但这种方式不如NAPOT和TOR常见。它允许你通过指定一个基地址和一个偏移量来定义一个地址范围。
    • 这种模式的具体实现细节依赖于具体的硬件平台,因此在实际应用中需要查阅相关文档。
  4. 关闭(NA4, Naturally Aligned 4-byte Region)

    • 这种模式用于保护一个自然对齐的4字节区域。由于其粒度非常小,通常只适用于特定的小型数据结构。
    • 例如,要保护从地址0x2000开始的4字节区域,pmpaddr寄存器应设置为0x2003(即0x2004 - 1)。

配置示例

假设我们想配置一个PMP条目来保护从地址0x2000开始的4KB内存区域,并允许读写操作但不允许执行操作。我们将使用NAPOT模式来进行配置。

步骤
  1. 确定地址匹配模式

    • 对于4KB大小的区域,我们需要使用NAPOT模式,并确保起始地址0x2000是对齐到4KB边界的。
  2. 计算pmpaddr

    • 对于4KB的NAPOT区域,pmpaddr寄存器应设置为0x2FFF(即0x3000 - 1)。
  3. 配置pmpcfg寄存器

    • 设置相应的pmpcfg寄存器以启用PMP条目,并选择NAPOT模式、设置读写权限(R=1, W=1, X=0)。
    • 假设我们要配置第0个PMP条目,可以如下设置:
      li t0, (1 << 0) | (1 << 1) | (0 << 2) | (1 << 3) | (1 << 7)  # R=1, W=1, X=0, A=11 (NAPOT), L=0
      csrw pmpcfg0, t0
      
  4. 配置pmpaddr寄存器

    • 将计算好的地址写入对应的pmpaddr寄存器:
      li t0, 0x3000  # 0x2FFF + 1
      csrw pmpaddr0, t0
      

总结

  • NAPOT模式是最常用的地址匹配模式,适用于大多数场景,尤其是当内存区域大小为2的幂次方且起始地址对齐时。
  • TOR模式需要两个连续的PMP条目来定义一个地址范围,适用于需要精确控制较大区域的情况。
  • NA4模式适用于小型数据结构的保护,但由于其粒度过小,在实际应用中较少使用。

理解这些地址匹配模式有助于更灵活地配置PMP,从而增强系统的安全性。

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

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

相关文章

数据结构之堆排序

文章目录 堆排序版本一图文理解 版本二向下调整建堆向上调整建堆 排升/降序升序 堆排序 版本一 基于已有数组建堆取堆顶元素并删除堆顶元素重新建大根堆&#xff0c;完成排序版本。 图文理解 版本二 前提&#xff1a;必须提供有现成的数据结构堆 数组建堆&#xff0c;首尾…

小菜鸟系统学习Python第三天

1.优先级问题: 结论: 幂运算>正负号>加减乘除和整除>比较运算符>逻辑运算符 2.三元运算符 3.assert断言:抛出AssertionError异常 4.for循环 4. 5.break和continue

常用排序算法之插入排序

目录 前言 一、基本原理 1.算法步骤 2.动画演示 3.插入排序的实现代码 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 2.最差时间复杂度 3.平均时间复杂度 2. 空间复杂度 三、插入排序的优缺点 1.优点 2.缺点 四、插入排序的改进与变种 五、插入排…

数据分析及应用:经营分析中的综合指标解析与应用

目录 1. 市场份额(Market Share) 2. 客户获取成本(Customer Acquisition Cost, CAC) 3. 客户生命周期价值(Customer Lifetime Value, CLV) 4. 客户留存率(Customer Retention Rate, CRR) 5. 净推荐值(Net Promoter Score, NPS) 6. 转化率(Conversion Rate) …

工业相机 SDK 二次开发-Halcon 插件

本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹&#xff0c;根据 Halcon 版本找到对…

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…

Linux TCP 之 RTT 采集与 RTO 计算

我们来看看 Linux TCP 采集 RTT 的函数 tcp_rtt_estimator&#xff0c;看注释&#xff0c;充满了胶着。 但在那个谨慎的年代&#xff0c;这些意味着什么&#xff1f; RTT 最初仅用于 RTO 的计算而不是用于调速&#xff0c;RTO 的计算存在两个问题&#xff0c;如果过估&#x…

如何使用CRM数据分析优化销售和客户关系?

嘿&#xff0c;大家好&#xff01;你有没有想过为什么有些公司在市场上如鱼得水&#xff0c;而另一些却在苦苦挣扎&#xff1f;答案可能就藏在他们的销售策略和客户关系管理&#xff08;CRM&#xff09;系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…

《Effective Java》学习笔记——第2部分 对象通用方法最佳实践

文章目录 第2部分 所有对象通用方法一、前言二、最佳实践内容1. equals()方法2. hashCode()方法3. toString() 方法4. clone() 方法5. finalize() 方法6. compareTo()方法&#xff08;实现 Comparable 接口&#xff09; 三、小结 第2部分 所有对象通用方法 一、前言 《Effect…

前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!

引言 时光飞逝&#xff0c;2024年已经来临&#xff0c;回顾过去一年&#xff0c;科技的迅猛进步简直让人目不暇接。 在人工智能&#xff08;AI&#xff09;越来越强大的今天&#xff0c;我们不再停留在幻想阶段&#xff0c;量子计算的雏形开始展示它的无穷潜力&#xff0c;Web …

图的基本概念

一、图 二、顶点的度 三、图的同构 ​​​​​​​​​​​ 四、完全图 五、子图 六、补图

【游戏设计原理】75 - 最小最大化

一、理解与分析 最小/最大化的核心是玩家在角色扮演类游戏中使用的一种策略&#xff0c;旨在通过把角色的某些不利特性最小化、而有利特性最大化来增强角色在特定领域的优势。这种策略通常表现为以下几种形式&#xff1a; 角色单一化&#xff1a;玩家通过极端优化角色的某一项…

【K8S系列】K8s 领域深度剖析:年度技术、工具与实战总结

引言 Kubernetes作为容器编排领域的行业标准&#xff0c;在过去一年里持续进化&#xff0c;深刻推动着云原生应用开发与部署模式的革新。本文我将深入总结在使用K8s特定技术领域的进展&#xff0c;分享在过去一年中相关技术工具及平台的使用体会&#xff0c;并展示基于K8s的技术…

PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10

1.环境搭建 硬件环境&#xff1a;CANoe、待测设备&#xff08;包含UDS诊断模块&#xff09; 2.pythonPyCharm环境 pip install robotframework pip install robotframework-ride pip install openpyxl pip install udsoncan pip install python-can pip install can-isotp3…

mybatis(19/134)

大致了解了一下工具类&#xff0c;自己手敲了一边&#xff0c;java的封装还是真的省去了很多麻烦&#xff0c;封装成一个工具类就可以不用写很多重复的步骤&#xff0c;一个工厂对应一个数据库一个environment就好了。 mybatis中调用sql中的delete占位符里面需要有字符&#xf…

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证7)

本文验证基于请求头中传递token信息的认证方式&#xff0c;webapi项目的控制器类中新建如下函数&#xff0c;仅通过验证的客户端能调用&#xff0c;需要客户端请求在Header中添加’Authorization’: Bearer token’的键值对且通过token验证后才能调用。 [Authorize] [HttpGet]…

Linux:进程(三)

1. 进程创建补充 fork之后父子两个执行流分别执行&#xff0c;fork之后谁谁先执行由调度器来决定。 一般&#xff0c;父子代码共享。当父子不再写入时&#xff0c;数据也是共享的&#xff0c;但是当有一方要写入&#xff0c;就触发写时拷贝。 fork调用失败的原因 1. 系统中有…

一、vue智能Ai对话(高仿通义千问)普通版。

如需源码&#xff1a;请私信。 普通版视频地址&#xff1a;普通版视频 流式进阶版视频地址&#xff1a;流式进阶版视频 流式进阶版&#xff1a;流式进阶版源码 html结构和js方法&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta …

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件&#xff0c;支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境&#xff0c;可以在网页、小程序等平台中使用。 源码 https:…

【winRAR】windows11右键直接打开winRAR

总览 目前能够完成的操作不能像 win10 那样全面&#xff0c;需要做一些取舍&#xff0c;这两种解决后的样子任选其一&#xff1a; 1.右键之后&#xff0c;直接显示 “解压到当前文件夹” 2.右键之后&#xff0c;直接出现 winRAR 的母菜单&#xff0c;在鼠标 hover 到上面的时…