当前位置:网站首页>为什么RTOS系统要使用MPU?
为什么RTOS系统要使用MPU?
2022-07-02 22:10:00 【strongerHuang】
关注+星标公众号,不错过精彩内容

作者 | strongerHuang
微信公众号 | strongerHuang
先说明一下MPU,MPU有很多含义,我们常见的有:
MPU:Memory Protection Unit,内存保护单元(本文描述的内容);
MPU:Microprocessor Unit,微处理器;
还有,可能有人会与MPU-6050这类模块联系在一起。所以,大家不要把MPU搞混了。
为什么要使用MPU?
如果你开发的嵌入式项目,因内存溢出,或者内存故障等一些原因,造成了重大经济损失,或者造成了重大事故,你就能体会为什么要使用内存保护单元(MPU)了。
在嵌入式系统中使用内存保护单元(MPU)可以在开发早期及时发现因内存而导致的Bug,节省更多开发时间。
同时,在项目后期修改Bug,或者增加功能,可以减少修改文档和测试所需的时间。

也就是说,使用MPU,会避免因为修改一个bug,而引起多个bug的情况(0生1,1生万物
)。
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区域之一来设置自己对自己的堆栈的访问权限。
使用MPU的好处
无论是操作系统,还是裸机系统,如果没有防止恶意访问错误内存的能力,系统将有重大安全问题,以及安全漏洞的雷区。
使用的内存保护单元(MPU)有很多优势,MPU通常允许你以特权或非特权模式运行,并使用一组“区域”来确定当前正在执行的代码是否具有访问代码和数据的权限。
每个区域都是一个连续的内存块,具有该内存的一组权限,特权和非特权访问。与非特权代码的子集相比,特权代码往往可以访问大部分(但不是全部)内存。
在整个系统运行时中,这些区域不必相同。MPU区域可以根据每个任务进行修改,每个任务可以具有自己独特的区域集,这些区域在任务移至运行状态时进行配置。
这使你可以仅对需要代码和数据的任务设置访问权限,利用MPU的嵌入式操作系统将在每次上下文切换期间管理每个任务的区域和特权级别。
比如设置RTOS两个任务不同的内存保护区域:

上面这张图,大家都能看懂吧?Flash和内存区域被分别设置保护。
两个全局保护区域:Flash开头、RAM开头;
在Flash中,一部分仅限任务1访问,这部分不能被任务访问;同时,在Flash另外区域,仅限任务2访问,不能被任务1访问。如果这两部分区域被对方访问,则会生成生成MPU故障。
在RAM区域,同一部分区域,一个只能被读,一个只能被写入,如果不按约定操作,同样也会生产MPU故障。
什么时候不使用MPU?
通常有两种情况可以不使用处理器上的MPU功能:
一个简单的项目
一个对性能至关重要的项目
第1个很简单:一个非常简单的应用程序基本上没必要使用MPU,反而增加了系统的复杂性。不设置内存保护,RAM和外围设备的MPU区域,你自己一眼就能找到bug。
第2个对性能要求高的项目,在上下文切换时,设置内存保护,堆栈那些操作,有可能影响系统的实时性,从而导致系统异常。这个需要结合项目实际情况考虑用,还是不用MPU功能。
------------ END ------------

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。


点击“阅读原文”查看更多分享。
边栏推荐
- 创新实力再获认可!腾讯安全MSS获2022年度云原生安全守护先锋
- Pytorch training CPU usage continues to grow (Bug)
- 数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
- Analyse des données dossiers d'apprentissage - - analyse simple de la variance à facteur unique avec Excel
- 最小生成树 Minimum Spanning Tree
- Chow-Liu Tree
- Xiaopeng P7 had an accident and the airbag did not pop up. Is this normal?
- Boot actuator - Prometheus use
- Webrtc audio and video capture and playback examples and mediastream media stream analysis
- 景联文科技低价策略帮助AI企业降低模型训练成本
猜你喜欢

China Academy of information technology, Tsinghua University, Tencent security, cloud native security, industry university research and use strong alliance!
![[leetcode] most elements [169]](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[leetcode] most elements [169]

中国信通院、清华大学、腾讯安全,云原生安全产学研用强强联合!

RecyclerView结合ViewBinding的使用

PotPlayer设置最小化的快捷键

首批 | 腾讯云完成国内首个云原生安全成熟度评估

海思 VI接入视频流程
![[chestnut sugar GIS] ArcScene - how to make elevation map with height](/img/91/f3df0a7633263c6264cb5c27eb149f.png)
[chestnut sugar GIS] ArcScene - how to make elevation map with height

LeetCode 968. Monitor binary tree

Value sequence < detailed explanation of daily question >
随机推荐
静态文件显示问题
Learning Websites commonly used by circuit designers
[leetcode] reverse the word III in the string [557]
Golang's learning route
The kth largest element in the [leetcode] array [215]
[leetcode] there are duplicate elements [217]
[chestnut sugar GIS] how does global mapper batch produce ground contour lines through DSM
WebRTC音视频采集和播放示例及MediaStream媒体流解析
海思3559万能平台搭建:在截获的YUV图像上旋转操作
psnr,ssim,rmse三个指标的定量分析
Jerry's prototype has no touch, and the reinstallation becomes normal after dismantling [chapter]
MySQL查询附近的数据.并按距离进行排序.
Editor Caton
Qt QProgressBar详解
Go语言sqlx库操作SQLite3数据库增删改查
泛型与反射,看这篇就够了
深度剖析数据在内存中的存储----C语言篇
[leetcode] number of palindromes [9]
Mask R-CNN
Motivation du Protocole de chiffrement avancé AES