问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ARM架构中MPU对OS下任务和内存的保护机制

创作时间:
作者:
@小白创作中心

ARM架构中MPU对OS下任务和内存的保护机制

引用
CSDN
1.
https://blog.csdn.net/xiandang8023/article/details/140688754

MPU(Memory Protection Unit)是ARM架构中用于实现内存保护的重要组件,它通过定义内存区域的访问权限、缓存策略等机制,为操作系统提供了一种细粒度的内存管理方式。本文将详细介绍MPU的主要功能及其在多任务环境下的应用。

MPU的主要功能

  1. 确定MPU保护区域的起始地址(Base address)和结束地址(Limit address):结束地址是根据起始地址与给定的region大小决定的。

  2. 确定MPU区域的访问权限

  • 只读(Read-only):只能读取,不能写入。
  • 可读写(Read-Write):可以读取和写入。
  1. 确定访问级别
  • 特权访问(Privileged-OS Kernel):操作系统内核级别的访问。
  • 非特权访问(Unprivileged-TASK):用户任务级别的访问。
  1. 实现资源隔离和资源共享
  • 在没有使用MPU的情况下:内存仅根据MSP(主堆栈指针)和PSP(进程堆栈指针)分特权级和用户级。此时,特权级可以访问整个堆栈空间,而用户级任务之间无法互相访问对方的堆栈,只能访问分配给自己的堆栈内存,但用户级任务可以随意访问全局变量。
  • 启用MPU后:OS会对每个用户任务的独立内存空间设置访问权限。例如,为了防止堆栈溢出,MPU的Size会大于TASK的堆栈Size,多的预留内存作为溢出缓冲。或者将静态区某些数据权限设置为仅供某个任务读写,其他任务只能读,AUTOSAR中RTE的数据Buffer就是这个设计原理,普通全局变量随意访问。对于多核涉及的共享数据,要单独设置region,flash里的代码段一般定义为仅可读。
  1. 确定MPU保护区域的缓存控制
  • 可缓存(Cacheability):确定哪些内存区域可以通过Cache访问。
  • 可缓冲(Normal memory):确定哪些内存区域是通过Normal Memory访问的,内核直接访问芯片内存。
  • 可多核共享(Shareability):主要用于多核之间数据共享,主要用于核间通信IPC在SMP(多核同构)或AMP(多核异构)架构中,如果开启共享(Shareability),等同于关闭Cache。
  1. 实时监测任务对内存的访问行为:一旦发现非法访问就会触发异常,如栈溢出,数组越界,任务越界访问动态分配的内存等。

MPU与MSP、PSP的区别

MSP和PSP主要关注的是栈空间的管理和使用,而MPU则是为了提供更细粒度的内存访问控制和保护机制。MPU通过硬件对划分的Region更细化权限控制,MSP和PSP 指针是 CPU 架构层面的特权级划分,MPU 机制是基于内存区域的访问控制。只能说给系统提供更加细致和可靠的内存保护功能。

MPU的缓存控制

Cortex-M7的缓存控制

Cortex-A7(含MMU)的缓存控制

Shareability的使用场景

主要用于多核之间数据共享,主要用于核间通信IPC在SMP(多核同构)或AMP(多核异构)架构中,如果开启共享(Shareability),等同于关闭Cache。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号