ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit

ARM v8 Cortex R52内核 08 内存保护单元 Memory Protection Unit

8.1 About the MPU

Cortex R52 处理器具有两个可编程的MPU,由EL1和EL2控制。每个MPU允许将4GB内存地址划分为多个区域。

每个内存区域由基地址、限制地址、访问权限和内存属性定义。

对于数据访问,MPU检查当前转换机制是否允许对某个区域进行读取或者写入操作。对于指令访问,MPU检查访问是否在该区域允许,并且MPU检查转换机制是否允许执行。对于数据和指令的访问,如果允许访问,则MPU将分配该区域定义的内存熟悉。如果访问是不允许的,就会发送权限故障,以下原因会导致转换错误:

  • 如果一个访问在MPU的多个区域中命中;
  • 如果一个访问没有命中任何MPU区域,并且background区域不能被使用(基于MPU配置和当前特权等级)。

由于流水线操作的结果,处理器尝试去预测程序流和未来数据的访问情况,因此他会提前获取数据和指令在它们使用之前。除非或直到流水线完成相应指令的执行,否则这些尝试(交易)被称为投机交易。这些尝试可能会导致处理器生成超出允许范围的地址,或者没有权限进行访问。在这些例子中,通过MPU,防止了投机性访问生成总线的情况,并且也不会引发翻译或者权限错误的问题。

每一个处理器内核都有一个EL1控制的MPU区域,并且带着16,20或24个可编程区域,并且还有一个EL2控制的MPU区域,可选择支持0,16,20或24个可编程区域。当EL2控制的MPU区域和虚拟化被使能,所有使用EL0/EL1转换机制的事务都会在两个MPU中进行查找。结果属性被合并,以取得最不严格的属性。这两个保护阶段使得虚拟机监控程序能够保持对EL0/EL1转换机制的控制,并因此支持虚拟化。当软件使用EL2转换机制执行时,只使用受EL2控制的MPU。

8.2 MPU寄存器

一个区域是从基地址开始,一直延伸到包括限制地址的连续地址范围。

基地址由PRBAR(EL2控制的MPU为HPBAR)配置,限制地址由PRLAR(EL2控制的MPU为HPRLAR)配置。基地址对齐在64字节边界上,限制地址对齐在低于64字节边界的字节上。基地址和限制地址都是包含的,这意味着一个区域内的地址由以下方式给出:

PRBAR.BASE:0b000000 <= address <= PRLAR.LIMIT:0b111111

此处是 bit 连接操作符

一个区域的最小大小为64字节。

PRBAR和PRLAR还具有访问权限(PRBAR.AP)、共享性(PRBAR.SH)、不可执行位(PRBAR.XN)和内存属性索引(PRLAR.AttrIndx)。

内存属性是通过使用PRLAR.AttrIndx将Memory Attribute Indirection Registers (MAIRx)进行索引来确定的。

通过设置或清除区域使能位(PRLAR.EN),可以启用或禁用一个区域。在EL2控制的MPU中,还可以通过写入Hypervisor MPU Region Enable Register (HPRENR)来启用或禁用区域。

8.2.1 EL1-controlled MPU background region

当MPU被禁用时(SCTLR.M=0),EL1控制的MPU背景区域将作为默认的内存映射。

当MPU被启用时,可以通过设置SCTLR.BR来启用背景区域。在这种情况下,EL1翻译机制中未命中任何可编程区域的访问将使用背景区域。当MPU被启用时,EL0翻译机制的访问将导致错误。

EL1控制的MPU背景区域,指令访问。

下表显示了由EL1控制的MPU背景区域,用于指令访问。

image-20240413212719595

EL1控制的MPU背景区域,数据访问。

下表显示了由EL1控制的MPU背景区域,用于数据访问。

image-20240413212841603

image-20240413212922124

8.2.2 EL2-controlled MPU background region

当EL2控制的MPU被禁用时(HSCTLR.M=0),EL2控制的背景区域将作为所有访问的默认内存映射。

当启用EL2控制的MPU时,可以将其用于未命中任何可编程区域的EL2访问,方法是设置背景区域使能(HSCTLR.BR=1)。当启用EL2控制的MPU时,在EL0/EL1转换体系中未命中EL2可编程区域的访问会产生一个翻译错误。这是由于两阶段翻译导致的结果。

下表显示了由EL2控制的MPU背景区域,用于指令访问。

image-20240413213107919

下表显示了由EL2控制的MPU背景区域,用于数据访问。

image-20240413213141465

8.2.3 默认缓存能力 Default cacheability

当启用默认缓存能力(HCR.DC=1)时,使用EL1控制的MPU后台区域的事务具有Normal、Inner Write-Back、Outer Write-Back和Non-Shareable属性,并且同时启用Read-Allocate和Write-Allocate提示。当HCR.DC=1时,在后台区域中命中的指令访问始终是可执行的。

默认属性是最宽松的,这意味着与EL2控制的MPU中的任何属性结合时,结果属性与EL2控制的MPU属性相同。这使得EL2控制的MPU能够有效地使命中后台区域的EL1转换体系下来自EL1转换体系的事务对其透明化。当HCR.DC=1时,所有来自EL0/EL1转换体系的转换都执行两阶段MPU查找,并且处理器表现得好像设置了HCR.VM一样。

8.3 Virtualization support 虚拟化支持

为了去支持虚拟化,进行了MPU查找的两个阶段。

虚拟化允许在EL1和EL0运行的进程(通常是一个或多个客户操作系统及其应用程序)由在EL2运行的进程(通常是单个hypervisor)进行管理。

EL1控制的MPU检查在EL0或EL1运行的进程中的事务,并由在EL1或EL2运行的进程进行编程。当启用虚拟化时,EL2控制的MPU还会检查从EL0/ EL1转换机制执行的事务,并由在EL2上运行的软件进行编程。只有在使用了EL2转换机制下执行的事务才会使用由EL2控制的MPU。

当虚拟化被启用(HCR.VM=1)并且EL2控制的MPU被启用(HSCTLR.M=1)时,由EL1控制的MPU允许的事务将作为两阶段查找的一部分由EL2控制的MPU进行检查。如果两个MPUs都允许该事务,则从第一阶段中获取的内存属性与第二阶段中匹配区域中的属性相结合,并应用较严格的属性集于该事务。

8.3.1 Combining MPU memory attributes 合并MPU内存属性

下表显示了内存类型分配作为两阶段查找的一部分是如何组合的。

image-20240414091809909

Combining the cacheability attribute

下表显示了缓存可用性分配在两阶段查找中的组合方式。

image-20240414091850834

Combining the shareability attribute

下表显示了共享性分配作为两阶段查找的一部分是如何合并的。

image-20240414091949325

8.4 MPU register access

MPU的基址和限制寄存器可以通过间接或直接访问。

Indirectly

通过写入PRSELR(EL2 MPU的HPRSELR)来选择一个区域。通过写入PRBAR和PRLAR(EL2 MPU的HPRBAR和HPRLAR)来编程所选定的区域。

Directly

基址和限制寄存器,对于区域n,通过将区域编号编码到以下系统寄存器访问指令的CRmopcode2中直接访问:

CRm = 0b1rrr, where rrr = region_number[3:1].

访问基寄存器:

op2 = 0b000, for even-numbered regions.
op2 = 0b100, for odd-numbered regions.

访问限制寄存器:

op2 = 0b001, for even-numbered regions.
op2 = 0b101, for odd-numbered regions.

写入基寄存器和限值寄存器:

PRBAR0-PRBAR15
MCR p15, 0, <Rt>, c6, CRm, op2
PRLAR0-PRLAR15
MCR p15, 0, <Rt>, c6, CRm, op2
HPRBAR0-HPRBAR15
MCR p15, 4, <Rt>, c6, CRm, op2
HPRLAR0-HPRLAR15
MCR p15, 4, <Rt>, c6, CRm, op2
PRBAR16-PRBAR24
MCR p15, 1, <Rt>, c6, CRm, op2
PRLAR16-PRLAR24
MCR p15, 1, <Rt>, c6, CRm, op2
HPRBAR16-HPRBAR24
MCR p15, 5, <Rt>, c6, CRm, op2
HPRLAR16-HPRLAR24
MCR p15, 5, <Rt>, c6, CRm, op2

读基数寄存器和极限寄存器:

PRBAR0-PRBAR15
MRC p15, 0, <Rt>, c6, CRm, op2
PRLAR0-PRLAR15
MRC p15, 0, <Rt>, c6, CRm, op2
HPRBAR0-HPRBAR15
MRC p15, 4, <Rt>, c6, CRm, op2
HPRLAR0-HPRLAR15
MRC p15, 4, <Rt>, c6, CRm, op2
PRBAR16-PRBAR24
MRC p15, 1, <Rt>, c6, CRm, op2
PRLAR16-PRLAR24
MRC p15, 1, <Rt>, c6, CRm, op2
HPRBAR16-HPRBAR24
MRC p15, 5, <Rt>, c6, CRm, op2
HPRLAR16-HPRLAR24
MRC p15, 5, <Rt>, c6, CRm, op2

8.5 MPU Register summary

以下表格是对影响MPU的寄存器进行总结。所有寄存器都可以通过(coproc==0b1111)访问。

image-20240414092457401

image-20240414092522163

翻译来源:

Arm® Cortex®-R52 Processor Technical Reference Manual.

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

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

相关文章

阿里对象储存OSS的SDK使用

对象存储OSS 该功能的实现使用了阿里的&#xff1a;对象存储OSS技术。 在阿里对象存储空间的文件可以 以链接 的形式进行访问: 文件访问路径规则 &#xff1a;https://BucketName.Endpoint/ObjectName 该技术的使用方式有很多&#xff0c;针对于SDK的简单实现官网上也有教程…

【网络编程】高性能并发服务器源码剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之洪水网络攻击&#xff0c;在这篇文章中&#xff0c;你将会学习到在网络编程中如何搭建一个高性能的并发服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解&#xf…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境&#xff0c;要在另一个设备上运行&#xff0c;还要重新配置&#xff0c;好麻烦。 存在的方法 pip install -r requirement.txt …

Node.js留言板(超详细注释)

目录结构如下 app.js // 一.引入模块 var http require(http);// 用于创建 HTTP 服务器和处理 HTTP 请求 var fs require(fs);// 用于读取和写入文件 var url require(url);// 用于解析URL// 创建留言数据对象 var msgs [{ name: 牛二, content: "我是妞儿", cr…

场景:数据库死锁

来自hollis八股文 流程图 前置知识 数据库上锁锁住的不是行&#xff0c;而是索引的主键 比如我对id 1的主键进行上锁&#xff0c;实际上是对查询使用的主键的key 1 进行上锁 对非聚簇索引操作时&#xff0c;首先会对非聚簇索引上锁&#xff0c;然后在请求主键的锁 比如我…

为什么开关电源变压器的耦合不可能为100%?什么是漏感?

一、为什么开关电源变压器的耦合不可能为100%&#xff1f; 变压器耦合度是指变压器初级绕组和次级绕组之间能量传递的效率&#xff0c;它反映了变压器在电磁感应过程中&#xff0c;初级侧磁通量能够有多少比例被次级侧有效利用。理论上&#xff0c;理想的变压器耦合度应该是10…

08 Php学习:if语句、Switch语句

PHP 条件语句 当您编写代码时&#xff0c;您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。 在 PHP 中&#xff0c;提供了下列条件语句&#xff1a; if 语句 - 在条件成立时执行代码 if…else 语句 - 在条件成立时执行一块代码&#xff0c;…

Java实现短信发送并校验,华为云短信配合Redis实现发送与校验

Java实现短信发送并校验&#xff0c;华为云短信配合Redis实现发送与校验 安装sms4j和redis <dependency><groupId>org.dromara.sms4j</groupId><artifactId>sms4j-spring-boot-starter</artifactId><version>3.2.1</version> <…

WPS基础使用

个人笔记&#xff08;整理不易&#xff0c;有帮助&#xff0c;收藏点赞评论&#xff0c;爱你们&#xff01;&#xff01;&#xff01;你的支持是我写作的动力&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔…

单路高清HDMI编码器JR-3211HD

产品简介&#xff1a; JR-3211HD单路高清HDMI编码器是专业的高清音视频编码产品&#xff0c;该产品具有支持1路高清HDMI音视频采集功能&#xff0c; 1路3.5MM独立外接音频输入&#xff0c;编码输出双码流H.264格式&#xff0c;音频MP3/AAC格式。编码码率可调&#xff0c;画面质…

SHARE 203S PRO:倾斜摄影相机在地灾救援中的应用

在地质灾害的紧急关头&#xff0c;救援队伍面临的首要任务是迅速而准确地掌握灾区的地理信息。这时&#xff0c;倾斜摄影相机成为了救援测绘的利器。SHARE 203S PRO&#xff0c;这款由深圳赛尔智控科技有限公司研发的五镜头倾斜摄影相机&#xff0c;以其卓越的性能和功能&#…

QtCreater 使用

QtCreater 创建项目 1.刚进入 QtCreater 的界面是这样的一个界面 ① 创建一个新的文件&#xff0c;那么我们就选择左上角的 “文件” ② 点击新建文件&#xff0c;或者也可以直接使用快捷键 CtrlN 此时就会弹出对话框&#xff0c;让我们选择想要创建的文件&#xff1a; Appli…

python爬虫-----爬虫解析—xpath(第十八天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

Nginx日志格式化和追踪

背景 Nginx是一款功能强大的Web服务器&#xff0c;对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中&#xff0c;我们将深入探讨Nginx日志格式的高级定制化策略&#xff0c;包括理解基…

API接口京东开放平台item_get-获得京东商品详情API接口根据商品ID查询商品标题价格描述等详情数据

京东商品详情API接口可以提供以下方面的信息&#xff1a; 商品基础信息&#xff1a;包括商品的标题、价格、描述、图片等基本信息&#xff0c;这是构建电商平台的基础数据。商品分类信息&#xff1a;帮助用户更好地了解商品所属的类别&#xff0c;便于商品筛选和查找。商品销售…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…

DB schema表中使用全局变量及在DB组件中查询

DB schema表中使用全局变量及在DB组件中查询 规则如下&#xff1a; 使用如下&#xff1a; 如果在unicloud-db组件上不加判断条件&#xff0c;就会报错&#xff0c;并进入到登录页。 那么就会进入到登录页&#xff0c;加上了判断条件&#xff0c;有数据了就不会了。 因为在sc…

电脑录屏软件哪个好用又免费?市面20款录屏软件测评结果

随着在线教学、远程办公和自媒体创作的兴起&#xff0c;电脑录屏软件逐渐成为了许多用户的必备工具。市面上的录屏软件琳琅满目&#xff0c;但真正既好用又免费的却并不多见。为了帮助大家找到心仪的录屏软件&#xff0c;我们对市面上20款热门免费录屏软件进行了详细的测评。 电…

一起学习python——基础篇(20)

前言&#xff0c;之前经常从网上找一些免费的接口来测试&#xff0c;有点受制于人的感觉。想了想还不如直接写一个接口&#xff0c;这样方便自己测试。自己想返回什么格式就返回什么样子&#xff0c;不用担心服务报错&#xff0c;因为自己就可以完全掌控。然后宿舍二哥告诉我py…

OpenHarmony C/C++三方库移植适配

简介 众所周知&#xff0c;C/C三方库相对与JS/ETS的三方组件来说&#xff0c;其运行效率高。那如何将一个C/C三方库移植到OH系统上呢&#xff1f;本文将介绍如何快速高效的移植一个C/C三方库到OpenHarmony上。 C/C三方库适配问题与解决方案 由上图可以看出&#xff0c;三方库…