mpu 配置内存空间_mpu内存保护单元功能及工作原理

一些嵌入式系统使用多任务的操作和控制。这些系统必须提供一种机制来保证正在运行的任务不破坏其他任务的操作。即要防止系统资源和其他一些任务不受非法访问。嵌入式系统有专门的硬件来检测和限制系统资源的访问。它能保证资源的所有权,任务需要遵守一组由操作环境定义的、由硬件维护的规则,在硬件级上授予监视和控制资源程序的特殊权限。受保护系统主动防止一个任务使用其他任务的资源。因此使用硬件主动监视系统比协调加强的软件历程,提供了更好的保护。

内存保护单元(MPU)是ARM中配备的有效保护系统资源硬件的一种,提供了内存区域保护功能。

MPU功能

(1)保护内存区域。

ARM处理器中的MPU使用“域(regions)”来对内存单元进行管理。域是与存储空间相关联的属性,处理器核将这些数据保存在协处理器CP15的一些寄存器中。通常域的个数为8个,编号为从0~7。

域的大小和起始地址保存在CP15的寄存器c6中。大小可以是4KB~4GB的任何2的乘幂。域的起始地址必须是其大小的倍数。比如,一个定义为4KB的域其起始地址可以是0x12345000,而一个大小定义为8KB的域起始地址只能是0x2000的倍数。

(2)将保护区域重叠。

对于ARM处理器,存储空间的某一部分可以被分配给一个以上的区域。也就是说域可以重叠。在重叠的域内,可以设置域的优先级。在分配访问权限时重叠域比非重叠域有更大的灵活性。

(3)控制访问权限。

操作系统可以为这些域分配更多的属性:访问权限、cache和写缓存。存储器基于当时的处理器模式(管理模式或用户模式)可以设定这些区域的访问权限为读/写、只读和不可访问。

当处理器访问主存的一个域时,MPU比较该域的访问权限属性和当时的处理器模式。如果请求符合域的访问标准,则MPU允许内核读/写主存;如果存储器请求不符号域的访问标准,将产生一个异常信号。

(4)将存储器属性输出到系统。

异常信号被送到处理器核。处理器核执行一个异常向量,然后跳转到异常处理程序,异常处理程序判断异常类型为预取指或数据中止,然后根据异常类型,跳转到相应的服务例程。

MPU工作原理

当ARM处理器产生一个内存访问信号时,内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。

1、如果地址不在任何域中,存储器产生异常。如果内核预取指令则MPU产生预取中止异常;如果是存储器数据请求,则产生数据中止异常。

2、如果地址在多个域内,由MPU判断域的有效级来决定存储区域的访问属性。访问属性可以在CP15的寄存器中设定,可设定的位为C(Cache)、B(Buffer)、AP(Access Permission)。

这些属性的具体定义为:

· C和B可以控制Cache和写缓存属性的Cache策略。例如,可以设置一个域使用回写(write-back)策略访问存储器,而另一个域则以无Cache和无写缓存方式访问;

· AP(access permission)决定域是否可以被访问。如果在当前处理器模式下,该域不能被访问,MPU将产生一个存储器访问异常。

打开APP精彩内容

点击阅读全文

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

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

相关文章

poj3981 字符串替换-字符串的基本操作

Description 编写一个C程序实现将字符串中的所有"you"替换成"we" Input 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 Output 对于输入的每一行,输出替换后的字符串 Sample Input you are what you do…

.NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(上)...

22 | 异常处理中间件:区分真异常与逻辑异常这一节我们来讲解一下错误处理的最佳实践系统里面异常处理,ASP.NET Core 提供了四种方式1、异常处理页2、异常处理匿名委托方法3、IExceptionFilter4、ExceptionFilterAttribute源码链接:https://gi…

MYSQL开窗函数详解

基本概念 MYSQL8.0支持窗口函数(Window Function),也称分析函数。窗口函数与组分聚合函数类似,但是每一行数据都会生成一个结果。如果我们将mysql与pandas中的DataFrame做类比学习的话他们的对应关系如下: SQL分组聚…

callmode php_Rabbitmq各方法的作用详解

exchange_declare(direct_logs,direct,false,false,false);// 这个是申明交换器,如果没有申明就给默认队列的这个交换器,而且发送的类型默认是direct)顺序参数名默认值作用1$exchange无交换机名2$type无交换机类型,分别有direct、fanout、top…

不同数据库select语句显示前N行数据比对

不同数据SQL对比 有时候我们只想查看一下表的数据的前几行数据,如果不加限制条件的话,默认会查询整个表的数据,等待时间比较久。下面是不同数据库select语句显示前N行数据比对: SQL Server select top 10 * from table_name;D…

hdu2648 Shopping-map容器

Problem Description Every girl likes shopping,so does dandelion.Now she finds the shop is increasing the price every day because the Spring Festival is coming .She is fond of a shop which is called “memory”. Now she wants to know the rank of this shop’s…

你可能需要了解一下的中台

【中台学习】| 作者 / Edison Zhou这是恰童鞋骚年的第201篇原创文章在数字化转型热潮下,各家企业都想建设中台,那么中台是怎么发展起来的?有哪些类型的中台?中台到底是个啥?本文为你一一解答这些问题。1学习背景与前言…

cma检测_CMA检测方法

1、铰页位置偏移检测方法:以铰页轴为基准,用钢直尺测量C1、用有游标卡尺测量C2合格要求:前后,e≤0.2mm;上下或左右,e≤1mm2、门扇中心至门框下门槛尺寸检测方法:在门扇与门框装配好后,准确划好门扇中心线,用钢尺测量C3合格标准:H≤2000,一等,1.0mm二等,1.5mm三等,2.0mmH&#x…

github运行不流畅问题

快速流畅访问Github工具 下载链接如下: 链接:https://pan.baidu.com/s/1RwdrNK__Vx-AEuUr8sM6pg 提取码:a0tw –来自百度网盘超级会员V3的分享 下载后解压,双击运行.exe文件 运行后长这样,给它丢一边不管就行了。

strcmp()字符串比较函数

字符串比较函数strcmp的比较,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。 基本形式为strcmp(str1,str2), 若str1str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数;

实现option上下移动_js: 实现Select的option上下移动 | 学步园

function UpOrDown(direct, selectId) {//direct : 1:Up, -1:Downvar obj document.getElementById(selectId);var len obj.length;var index obj.selectedIndex;//如果&#xff1a;1.没有选中的项; 2.向上&#xff0c;但已是最上; 3.向下&#xff0c;但是最下&#xff0c;不…

聊聊微信的Dark模式

大家好&#xff0c;我是Z哥。这周微信公布了一个我期待已久的好消息。周一的时候对外公布说&#xff0c;已经完成了iOS版本的Dark模式开发&#xff0c;可能会在下一个版本上线。▲截图来源于微博&#xff0c;版权归原作者所有真的是千呼万唤使出来&#xff0c;很多人期待这个功…

chrome浏览器快速访问stackoverflow

原因&#xff1a;国内网非常多的网站都使用免费的 Google CDN 服务来加载某些 js、字体样式库以提升网页浏览体验&#xff0c;例如 jQuery、Google Fonts。但是目前 Google 的大多数网站在大陆无法正常访问&#xff0c;因此这些本身是加快网页载入的库反而成为了阻塞网站加载的…

字符串哈希-BKDRHash

代码如下&#xff1a; #include <iostream> #include <vector> using namespace std; const int N 10005;struct node {char name[35]; };unsigned int BKDRHash(char *str) {unsigned int key 0, seed 31;while (*str) {key key * seed (*str);}return key …

linux程序已经在后台运行冻结了_Linux 让程序在后台执行

有些程序我们在打开时&#xff0c;会一直占用我们的终端&#xff0c;而且终端还不能关掉&#xff0c;所以这时候我们就需要让程序在后台运行。1.命令&#xff1a;nohupnohup python -u run.py > run.log 2>&1 &参数说明&#xff1a; run.py: 你需要后台运行的程序…

【开源要闻】Canonical发布新OpenStack工具、Kubernetes访客引导方法

Canonical发布支持CephFS的OpenStack Charms 20.02Canonical近日宣布了OpenStack Charms 20.02的全面上市&#xff0c;这是用于在Ubuntu上设计&#xff0c;构建和管理OpenStack私有云的强大工具的主要版本。OpenStack Charms 20.02是一个令人兴奋的版本&#xff0c;它增加了主要…

开窗函数(1)-部门工资前三员工

已知表 题目 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写一个SQL查询&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 示例 参考答案 selectbase.Departmen…

poj2182 Lost Cows-暴力

Description N (2 < N < 8,000) cows have unique brands in the range 1…N. In a spectacular display of poor judgment, they visited the neighborhood ‘watering hole’ and drank a few too many beers before dinner. When it was time to line up for their ev…

用来表示python代码块的是什么_三分钟带你用简单的Python代码深入理解Python中的元类...

互联网的数据爆炸式的增长&#xff0c;而利用 Python 爬虫我们可以获取大量有价值的数据类也是对象在理解元类前&#xff0c;需要先掌握Python中的类。在大多数编程语言中&#xff0c;类就是一组描述如何生成对象的代码段。在Python中这一点仍然成立&#xff1a;但是&#xff0…

Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

一、前言上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战的文章&#xff0c;其中有不少博友给我提了问题&#xff0c;其中有一个博友问我的一个场景&#xff0c;我给他解答的还不够完美&#xff0c;之后我经过自己的学习查阅并阅读了相关源代码&…