码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • RISC-V架构——物理内存属性和物理内存保护


    1、物理内存属性(PMA:Physical Memory Attributes)

    在这里插入图片描述

    (1)系统内存映射包含各种不同属性的地址空间范围,每个地址空间范围支持的操作不一样;
    (2)物理内存属性一般是在芯片设计阶段就固定下来(大部分芯片不支持软件修改),芯片内存有PAM检测器,PMA检测器会对物理地址权限和属性做检查;

    2、物理内存保护

    2.1、物理内存保护的作用(PMP:Physical Memory Protection)

    (1)在RISC-V体系结构中,M模式具有最高权限,拥有访问系统全部资源的权限。默认情况下,S模式和U模式对内存映射的任何区域没有读、写、执行权限,除非配置PMP来允许S模式和U模式访问;
    (2)在M模式下,只有PMP配置项的L字段是锁定状态,M模式才会去检查PMP权限;
    作用:如果我们对某些地址范围有特殊需求,可以通过PMP来设置,防止出错;比如某个地址范围的数据希望只读不可写,可以设置PMP把这段地址范围设置成只读不可写属性,这样当有代码尝试修改数据时就会报错,防止误操作;

    2.2、PMP配置寄存器

    2.2.1、PMP配置寄存器数量

    在这里插入图片描述

    (1)RISC-V规定最多支持64个PMP配置项,也就是最多支持对64个地址范围做权限设置;
    (2)每个地址范围对于的PMP配置表项是8位,要保存64个PMP配置项,64位RISC-V核只需要8个寄存器,32位RISC-V核需要16个寄存器;
    (3)为了统一命名,64位RISC-V的pmpcfg寄存器只有pmpcfg0、pmpcfg2,只有双数的;

    2.2.2、PMP配置表项

    在这里插入图片描述

    (1)地址匹配模式:怎么去计算配置的地址范围,见下一节;
    (2)锁定状态:锁定状态下M模式需要去检查地址范围的权限;非锁定状态下,M模式拥有全部权限,不受PMP配置的权限限制;

    2.2.3、地址匹配模式

    2.2.3.1、TOR模式

    在这里插入图片描述

    表示地址范围由相邻两个pmpaddr寄存器的值决定;

    2.2.3.2、NAPOT模式

    在这里插入图片描述

    表示的地址范围:pmp地址寄存器的值从bit0开始连续1的个数为n,则表示的地址范围是2的(n+3)次方字节;

    2.3、PMP地址寄存器

    在这里插入图片描述

    (1)pmp地址寄存器的bit[53:0]保存物理地址范围的bit[55:2];

    2.4、如何配置一段物理内存地址的保护属性?

    在这里插入图片描述

    以RAM地址为例:
    (1)地址权限是可读可写,所有8位pmp配置项的值为0x9B;
    (2)起始地址0x20000000左移2位,变成0x8000000;
    (3)RAM的地址范围是0x8000,也就是2的15次方,pmpaddr寄存器中的值需要15-3=12个连续低位1,即0x8000FFF;

    3、opensbi中物理内存保护设置函数分析

    参考博客:《RISC-V架构——物理内存保护机制设置函数(pmp_set、pmp_get)解析》;

    4、注意事项

    在这里插入图片描述

    (1)可以参考玄铁C906的PMP模块说明,其中PMP地址寄存器的低九位就是WARL(可以写任意值,但是读出来都是0);
    (2)参考博客:《玄铁C906——物理内存保护(PMP)介绍》;

  • 相关阅读:
    基于51单片机音乐盒LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)
    驱动 10月23日 作业
    一个包搞定中文数据集: datasetstore
    MySQL必知必会_第七~十二章知识总结
    代码实战——从零开始搭建自己的Diffusion models/Score-based generative models
    H3C IPSec IKE野蛮模式
    leetcode 167. 两数之和 II - 输入有序数组
    16-SpringBoot 整合Druid数据源
    1-1 开源许可证GPL, BSD, MIT, Mozilla, Apache, LGPL的介绍
    【2022河南萌新联赛第(五)场:信息工程大学】【部分思路题解+代码解析】
  • 原文地址:https://blog.csdn.net/weixin_42031299/article/details/133892479
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号