在计算机体系结构中,MPU(Memory Protection Unit,内存保护单元) 是一种硬件模块,用于对物理内存的访问权限进行精细化控制,确保系统的安全性和稳定性。它通常用于无虚拟内存管理的嵌入式系统(如ARM Cortex-M、RISC-V MCU等),与MMU(Memory Management Unit)形成互补。以下是其核心要点解析:
权限控制
区域隔离
安全防护
特性 | MPU | MMU |
---|---|---|
地址转换 | 无虚拟地址(直接操作物理内存) | 支持虚拟地址到物理地址的映射 |
动态重映射 | 不支持 | 支持(通过页表动态修改映射关系) |
硬件复杂度 | 简单,低功耗 | 复杂,需TLB(快表)支持 |
典型应用场景 | 实时嵌入式系统(Cortex-M) | 通用操作系统(Linux/Windows) |
本质差异:
- MPU 是“内存区域的守卫”,仅做权限检查;
- MMU 是“内存的虚拟化管家”,既管理权限又负责地址翻译。
区域寄存器(RBAR/RASR)
RBAR(Region Base Address Register):定义区域基地址和编号。
RASR(Region Attribute and Size Register):设置区域大小、权限和内存类型。
// 示例:配置0x20000000开始的32KB SRAM为特权级可读写
MPU->RBAR = 0x20000000 | (1 << 4) | 0x01; // 基地址 + 区域1
MPU->RASR = (0 << 28) | // 无子区域
(0x03 << 24) | // AP=0b011(特权读写,用户只读)
(0 << 19) | // 非共享
(1 << 18) | // 可缓存
(1 << 17) | // 可缓冲
(0x0B << 1) | // 32KB(2^(11+1)=4096*8)
0x01; // 启用区域
权限级别(AP字段)
AP:Access Privilege(访问权限)
AP值 | 特权模式 | 用户模式 |
---|---|---|
0b000 |
无访问 | 无访问 |
0b001 |
全权限 | 无访问 |
0b011 |
全权限 | 只读 |
0b101 |
只读 | 只读 |
内存类型(TEX/C/B位)
TEX=000, C=1, B=1
表示可缓存可缓冲的普通内存)。实时操作系统(RTOS)任务隔离
防御栈溢出
外设寄存器保护
代码完整性保护
区域数量有限
Cortex-M通常支持8~16个区域,需谨慎规划(如合并相似属性的区域)。
无地址映射
无法实现虚拟内存或内存扩展,需物理内存连续。
配置开销
频繁切换区域配置(如任务调度时)可能影响实时性。
在符合**功能安全标准(如ISO 26262 ASIL-D)**的系统中,MPU用于:
MPU是嵌入式系统中低成本实现内存保护的核心硬件,通过:
对于资源受限且需高可靠性的场景(工业控制、汽车电子),MPU是替代MMU的轻量级解决方案。