0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么要使用MPU?MPU如何实现内存保护?

麦克泰技术 来源:嵌入式专栏 2023-02-24 11:59 次阅读

先说明一下MPU,MPU有很多含义,我们常见的有:

MPU:Memory Protection Unit,内存保护单元(本文描述的内容);

MPU:Microprocessor Unit,微处理器

还有,可能有人会与MPU-6050这类模块联系在一起。所以,大家不要把MPU搞混了。

嵌入式专栏

1

为什么要使用MPU?

如果你开发的嵌入式项目,因内存溢出,或者内存故障等一些原因,造成了重大经济损失,或者造成了重大事故,你就能体会为什么要使用内存保护单元(MPU)了。

嵌入式系统中使用内存保护单元(MPU)可以在开发早期及时发现因内存而导致的Bug,节省更多开发时间。

同时,在项目后期修改Bug,或者增加功能,可以减少修改文档和测试所需的时间。

3aea7120-b3f6-11ed-bfe3-dac502259ad0.jpg

也就是说,使用MPU,会避免因为修改一个bug,而引起多个bug的情况(0生1,1生万物)。

2

MPU如何实现内存保护

简单来说就是保护与当前执行的代码不相关的所有数据。

RTOS任务A和B来说: 任务A和B不应相互交互数据,但是存在一个错误,任务A可能会意外地写入任务B偶尔使用的某些数据,不会影响任务A的正确操作。但是,当任务B尝试使用损坏的数据时,任务B可能会意外故障。

如果没有配置MPU来阻止任务A写入任务B的数据,则该错误可能需要很长的时间供开发人员跟踪。如果错误很小,或者如果任务B很少使用该数据,则将很难解决该bug。但是,如果使用了MPU,则该bug就会及早被发现。

在某些体系结构上,MPU甚至可以帮助你检测NULL指针引用,因为你可以设置MPU区域以防止非特权代码访问内存0x0。

应用程序中一组设计良好的MPU区域可以很好的保护重要的内存区域,以防止出现特定的问题。

一个很好的例子是通过在MPU区域的末尾放置缓冲区来防止缓冲区溢出,你还可以将任务堆栈放置在任何非特权代码都无法访问的区域。如果这样做,则每个任务必须使用自己的MPU区域之一来设置自己对自己的堆栈的访问权限。

3

使用MPU的好处

无论是操作系统,还是裸机系统,如果没有防止恶意访问错误内存的能力,系统将有重大安全问题,以及安全漏洞的雷区。

使用的内存保护单元(MPU)有很多优势,MPU通常允许你以特权或非特权模式运行,并使用一组“区域”来确定当前正在执行的代码是否具有访问代码和数据的权限。

每个区域都是一个连续的内存块,具有该内存的一组权限,特权和非特权访问。与非特权代码的子集相比,特权代码往往可以访问大部分(但不是全部)内存。

在整个系统运行时中,这些区域不必相同。MPU区域可以根据每个任务进行修改,每个任务可以具有自己独特的区域集,这些区域在任务移至运行状态时进行配置。

这使你可以仅对需要代码和数据的任务设置访问权限,利用MPU的嵌入式操作系统将在每次上下文切换期间管理每个任务的区域和特权级别。

比如设置RTOS两个任务不同的内存保护区域:

3b148ece-b3f6-11ed-bfe3-dac502259ad0.png

上面这张图,大家都能看懂吧?Flash和内存区域被分别设置保护。

两个全局保护区域:Flash开头、RAM开头;

在Flash中,一部分仅限任务1访问,这部分不能被任务访问;同时,在Flash另外区域,仅限任务2访问,不能被任务1访问。如果这两部分区域被对方访问,则会生成生成MPU故障。

在RAM区域,同一部分区域,一个只能被读,一个只能被写入,如果不按约定操作,同样也会生产MPU故障。

4

什么时候不使用MPU? 通常有两种情况可以不使用处理器上的MPU功能:

一个简单的项目

一个对性能至关重要的项目

第1个很简单:一个非常简单的应用程序基本上没必要使用MPU,反而增加了系统的复杂性。不设置内存保护,RAM和外围设备的MPU区域,你自己一眼就能找到bug。

第2个对性能要求高的项目,在上下文切换时,设置内存保护,堆栈那些操作,有可能影响系统的实时性,从而导致系统异常。这个需要结合项目实际情况考虑用,还是不用MPU功能。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1599

    浏览量

    147371
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1348

    浏览量

    114251
  • 微处理器
    +关注

    关注

    11

    文章

    2221

    浏览量

    82013
  • MPU
    MPU
    +关注

    关注

    0

    文章

    333

    浏览量

    48619

原文标题:好文推荐| MPU如何实现内存保护?

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    管理STM32 MCU中的内存保护单元

    本应用笔记介绍如何管理 STM32 产品中的内存保护单元(MPU)。MPU 是用于存储器保护的可选组件。STM32 微控制器(MCU)中嵌入 MPU
    发表于 12-23 11:04 956次阅读

    为什么要使MPUMPU实现内存保护原理分析

    简单来说就是保护与当前执行的代码不相关的所有数据。 拿RTOS任务A和B来说: 任务A和B不应相互交互数据,但是存在一个错误,任务A可能会意外地写入任务B偶尔使用的某些数据,不会影响任务A的正确操作。
    发表于 02-23 09:17 1619次阅读

    【安富莱】【μCOS-III教程】第6章 内存保护单元MPU

    第6章内存保护单元MPU本期教程带领大家学习内存保护单元MPU的使用,在前面的几期教程中曾多次的提到MPU的使用,
    发表于 01-08 18:04

    主要讲armv7-m架构下的MPU内存保护单元

    简介MPU(Memory Protection Unit) 内存保护单元。 本文主要讲 armv7-m 架构 架构下的 MPU。在 armv7-m 架构下,Cortex-M3 和 Cortex-M4
    发表于 04-08 11:00

    Armv8-M内存模型与内存保护用户指南

    本指南概述了Armv8-M内存模型和内存保护单元(MPU)在Cortex-M处理器中实现。本指南使用示例来帮助解释这些概念 它介绍了。 本章概述以下主题: •
    发表于 08-02 08:12

    如何管理STM32产品中的内存保护单元(MPU

    本应用笔记介绍如何管理 STM32 产品中的内存保护单元(MPU)。MPU 是用于存储器保护的可选组件。STM32 微控制器(MCU)中嵌入 MPU
    发表于 09-07 06:23

    MPU是什么Cortex-M内核的MPU内存保护单元详细讲解

    估计大家经常看见MCU、MPU、MMU等这类缩写词,你们了解MPU吗?
    的头像 发表于 02-03 09:30 1.1w次阅读

    Cortex-M内核的MPU内存保护单元

    讲讲Cortex-M内核的MPU内存保护单元
    的头像 发表于 03-04 11:17 3490次阅读
    Cortex-M内核的<b class='flag-5'>MPU</b><b class='flag-5'>内存保护</b>单元

    基于ARM Cortex-M MCU中的MPU所提供的一些特性

    内存保护单元(MPU)是一种硬件机制,通过只允许代码访问需要的内存和外设来提高嵌入式设备的安全性。应用程序可以组织为进程(process),每个进程访问自己的内存和外设。
    的头像 发表于 07-19 09:47 7188次阅读

    Cortex-M内核的MPU内存保护单元

    的选配件,拿STM32F1来说,STM32F10X_XL系列的芯片才具有这个MPU存储保护单元,而其他STM32F1芯片没有。可能很多人都处于简单知道,或认识MPU的阶段,今天就写点关...
    发表于 12-01 12:21 9次下载
    Cortex-M内核的<b class='flag-5'>MPU</b><b class='flag-5'>内存保护</b>单元

    什么是Cortex-M内核的MPU内存保护单元)?

    关注、星标公众号,不错过精彩内容作者:strongerHuang微信公众号:strongerHuang估计大家经常看见MCU、MPU、MMU等这类缩写词,但你们了解什么是MPU吗?1写在...
    发表于 12-01 12:51 10次下载
    什么是Cortex-M内核的<b class='flag-5'>MPU</b>(<b class='flag-5'>内存保护</b>单元)?

    为什么要使MPUMPU如何实现内存保护

    如果你开发的嵌入式项目,因内存溢出,或者内存故障等一些原因,造成了重大经济损失,或者造成了重大事故,你就能体会为什么要使内存保护单元(MPU
    的头像 发表于 07-05 17:38 6556次阅读
    为什么<b class='flag-5'>要使</b>用<b class='flag-5'>MPU</b>?<b class='flag-5'>MPU</b>如何<b class='flag-5'>实现</b><b class='flag-5'>内存保护</b>?

    如何管理STM32产品中的MPU

    本应用说明介绍了如何管理STM32产品中的MPU,它是一个内存保护的可选组件。包括STM32中的MPU微控制器使它们更加健壮可靠。必须对MPU进行编程,并且在使用之前启用。如果
    发表于 09-28 10:40 0次下载

    什么是MPUMPU在哪些方面保护内存安全?

    内存保护单元(MPU)是一种硬件机制,通过只允许代码访问需要的内存和外设来提高嵌入式设备的安全性。
    的头像 发表于 06-12 09:06 9803次阅读
    什么是<b class='flag-5'>MPU</b>?<b class='flag-5'>MPU</b>在哪些方面<b class='flag-5'>保护</b><b class='flag-5'>内存</b>安全?

    如何管理STM32产品中的内存保护单元(MPU)

    电子发烧友网站提供《如何管理STM32产品中的内存保护单元(MPU).pdf》资料免费下载
    发表于 08-01 09:15 0次下载
    如何管理STM32产品中的<b class='flag-5'>内存保护</b>单元(<b class='flag-5'>MPU</b>)