ARM MPU内存保护单元


ARM MPU(Memory Protection Unit)是ARM处理器中的一个重要特性,它提供了内存保护和访问控制的功能,通常用于实现操作系统的内存隔离和保护。MPU能够增强系统的健壮性,防止非法访问,保护关键数据区域,防止堆栈溢出、数组越界等错误,确保系统安全。

MPU的工作原理和功能

在ARMv7-M架构下,如Cortex-M3和Cortex-M4处理器,MPU是可选配的。MPU是一个可编程设备,可以定义内存空间的属性,比如特权指令和非特权指令以及缓存是否可访问。通常支持8个区域(region),每个区域代表一段连续的内存区域。MPU的功能由操作系统提供,可以防止用户破坏操作系统数据,隔离任务,保护关键数据区为只读,检测意外访问等。

MPU寄存器模组

MPU主要包含以下寄存器:

  • MPU_TYPER:提供MPU的类型信息。

  • MPU_CTRL:控制MPU的使能和行为。

  • MPU_RNR:选择当前的MPU区域号。

  • MPU_RASR:定义选定区域的大小和访问权限。

MPU配置示例

一个简单的MPU配置示例可能包括设置内存区域的访问权限,如将某些区域设置为非特权状态下不可赋值。如果非特权指针尝试访问这些区域并修改,将触发MemManage fault或hardfault中断。

MPU与Cache的关系

MPU不仅仅起到内存保护的作用,它还与Cache有关,能够加快外接存储设备的访问速度。例如,可以设置所有的RAM为不可执行,避免代码注入攻击。MPU还能定义内存区域的缓存属性,这些属性会传递给系统的Cache单元或内存控制器。

Cortex-M7的MPU注意事项

对于Cortex-M7核心,需要注意TCM(Tightly Coupled Memories)始终被视为不可缓存、不共享的普通内存,无论MPU如何定义。此外,Cortex-M7处理器引入了约束预取(constraint speculative prefetch)的概念,以避免不必要的预取带来的性能损失。

posted on 2025-11-14 09:27  ENGINEER-F  阅读(0)  评论(0)    收藏  举报