本文引用地址:http://www.eepw.com.cn/article/257010.htm

15.4.2内存访问顺序

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

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

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

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

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

图15.16显示了一个存储器访问过程。

图15.16存储器访问过程

15.4.3使能MPU

通过对协处理器CP15的寄存器c1中的bit[0]置1,可以使能存储器保护单元MPU。在系统上电时,默认状态是该位清零,所有保护域无效。

在使能MPU之前,至少一个域要被设定,而且该域的属性和访问权限要预先设定好。

注意在数据和指令域分离的系统中,如ARM940T,在指令和数据域中都要有一个有效域被预先设定好。

另外,使能MPU的指令要设在有效的域中。如果在使能MPU之前,域的属性和访问权限没有设定,那么系统的运行结果将不可预知。

当MPU无效(将协处理器CP15寄存器r1的bit[0]置0)时,整个内存区域都被处理器视为无Cache、无写缓存、无存储保护状态。

15.4.4重叠域

域的定义在MPU的作用下可以重叠。当重叠的域被访问时,MPU会判断域的优先权,决定使用那个域的属性来操作重叠域。

域属性优先级的排列顺序为:域7的有效级最高,其次为域6,域0的优先级最低。

【例15.3】

假设将一个从0x3000起始的4KB地址空间定义为域2,其访问属性AP定义为0b10(AP=0b10,特权模式读/写访问,用户模式只读)。

将起始地址为0x0的16KB地址空间定义为域1,其访问属性AP定义为0b01(AP=0b01,特权模式只读)。

系统域划分如图15.17所示。

图15.17重叠域的访问

当处理器在用户模式下执行Load指令,从0x3010地址取数据时,0x3010地址既在域1中也在域2中,因为域2的属性优先级高于域1,所有MPU执行域2的访问属性从0x3010地址取数据。域2是用户模式可读,所以不会发生数据异常。

在分配访问权限时重叠区域比非重叠区域有更大的灵活性,它可以使内存的某个特定联系内存单位在程序中担任背景的作用,用来给一块大存储空间分配相同的属性的低优先级域。其他具有较高优先级域的区域与该背景域某些部分重叠,用来改变已定义的背景域的较小子集的属性。这样,具有较高优先级的域可以改变背景域属性的子集。背景域可以用来保护一些睡眠状态的存储空间,使其不受非法访问,而此时由另一个不同域控制下的背景域的其他部分可以处于活跃状态。

15.4.5与MPU相关的CP15寄存器

与MPU相关的协处理器寄存器主要是c2,c3,c5及c6。另外还有寄存器c1中的1到2位。

(1)c1中的MPU相关位

c1的编码格式如图15.18所示。

图15.18协处理器寄存器c1编码格式

M(bit[0])控制控制MPU的使能。

·M=0:禁止MPU

·M=1:使能MPU

A(bit[1])选择是否支持内存访问地址对齐检查。

·B=0:禁止地址对齐检查

·B=1:使能地址对齐检查

(2)c2中的MPU相关位

c2的编码格式如图15.19所示。

图15.19协处理器寄存器c2编码格式

寄存器位0~7分别对应域0~7的Cache属性。位8~31应该设置成0。

注意在数据和指令分离的系统中,通过MRC和MCR指令的第二个操作数opcode2>来决定读写D-Cache和I-Cache属性。

mpu 配置内存空间_ARM存储器之:存储保护单元MPU相关推荐

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

    一些嵌入式系统使用多任务的操作和控制.这些系统必须提供一种机制来保证正在运行的任务不破坏其他任务的操作.即要防止系统资源和其他一些任务不受非法访问.嵌入式系统有专门的硬件来检测和限制系统资源的访问.它 ...

  2. mpu 配置内存空间_PCIE的内存地址空间、I/O地址空间和配置地址空间

    pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间 首先区分一下IO空间和内存空间 cpu会访问的设备一般有内存和外设寄存器,如下图所示.x86架构采用独立编址将内存 ...

  3. arm的存储保护单元MPU

    在受保护的系统中,主要有两类资源需要监视:存储器系统和外围设备.存储器中对区域的访问可以是读/写,只读或不可访问,基于当时的处理器模式--管理模式或用户模式,还有一些附加的权限.区域还有控制cache ...

  4. Java高阶部分知识点汇总(三)-内存空间的引用

    前言 在前面给大家展示的代码中,有这样一行代码 Student stu = new Student(); 这行代码创建了一个Student对象,这个对象被赋给stu变量.今天我们就来好好学习一下这行代 ...

  5. c语言分配内存空间方法,C语言之动态分配内存空间

    动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...

  6. C语言——动态开辟内存空间的函数

    目录 为什么需要动态开辟内存空间? 1.malloc函数 2.free函数 3.calloc函数 4.realloc 为什么需要动态开辟内存空间? 我们已经熟悉了基本的内存开辟方法: int a = ...

  7. 数据类型在内存中的存储原理

    内存的物理结构 在讲数据结构之前,和大家先一起回顾下内存的物理结构是啥,内存的物理结构比较简单,大部分人都见过内存条: 抽象出来之后的内存条模型: 内存实际上是一种名为内存IC的电子元件,内存IC中有 ...

  8. C++变量的引用是否占用内存空间

    变量的引用:int &b = a; 根据引用的定义,b作a的别名,不单独占用内存空间.如果取b和a的地址,会发现它们是相同的. 但程序怎么知道b是指向a的呢?如果b是个指针,程序将开辟一块内存 ...

  9. 【C 语言】变量本质 ( 变量概念 | 变量本质 - 内存空间别名 | 变量存储位置 - 代码区 | 变量三要素 )

    文章目录 一.变量概念 二.变量本质 1.变量本质 - 内存别名 2.变量存储位置 - 代码区 3.变量三要素 一.变量概念 变量概念 : 变量 是 既能读 , 又能写 的 内存对象 ; 与 变量 相 ...

最新文章

  1. nodejs在windows平台下搭建部署环境教程
  2. Jenkins加Shell实现最简单的持续部署
  3. java poi 如何合并多个sheet 为一个sheet_Java POI组件实现多个Excel文件整合成一个多Sheet的Excel文件...
  4. 关于CPU的12个硬核干货!
  5. CentOS6.x 下 /etc/security/limits.conf 被改错的故障经历
  6. JavaOne 2015:为JDK 9做准备– blog @ CodeFX
  7. php html小项目,使用PHP把HTML生成PDF文件的几个开源项目介绍
  8. 天地图卫星地图_一起看地图谷歌地图高清卫星地图在线_世界这么大,用地图去看看!...
  9. 中心极限与大数定理律的关系_21厦大数学考研 | 数列与函数极限复习建议!
  10. SUBMAIL315专题—云通信平台如何保护用户数据安全?
  11. linux系统重装win系统教程,Win10如何重装linux系统 Win10重装linux系统教程
  12. “3D 元宇宙技术”在汽车新零售领域的应用与实践
  13. 主编推荐 | 深度学习如何影响运筹学?
  14. 哪个配件最爱坏?电脑配件寿命浅谈
  15. MySQL复制表结构以及表数据
  16. OI国家队集训论文集
  17. rootkit概念摘抄
  18. moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
  19. 免费的天气查询 API 接口分享
  20. 成绩录入时的及格与不及格人数统计的个人解法

热门文章

  1. 紫书 例题8-10 UVa 714 (二分答案)
  2. spring cloud gateway的stripPrefix配置
  3. 机器学习笔记1(K-近邻算法)
  4. OC Autorelease
  5. WWDC2017 笔记 - Cocoa Touch 中的新特性
  6. linux下时间同步的两种方法分享
  7. windows server 2012 初安装体验
  8. ubuntu下的能安装的百度网盘的资源最新网址
  9. Hi3559AHi3519AHi3556A规格对比
  10. 【数据库学习笔记】——创建数据库文件