当前位置:网站首页>为什么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”查看更多内容。
点击“阅读原文”查看更多分享。
边栏推荐
- Odoo13 build a hospital HRP environment (detailed steps)
- 【板栗糖GIS】global mapper 如何通过dsm批量制作贴地等高线
- WebRTC音视频采集和播放示例及MediaStream媒体流解析
- xshell配置xforward转发火狐浏览器
- boot actuator - prometheus使用
- [羊城杯2020]easyphp
- Webrtc audio and video capture and playback examples and mediastream media stream analysis
- 【板栗糖GIS】arcscene—如何做出有高度的高程图
- Motivation du Protocole de chiffrement avancé AES
- Local dealers play the community group purchase mode and share millions of operations
猜你喜欢
STM32之ADC
数据标注典型案例,景联文科技如何助力企业搭建数据方案
Niuke network: maximum submatrix
Construction of Hisilicon 3559 universal platform: rotation operation on the captured YUV image
数据分析学习记录(二)---响应曲面法及Design-Expert的简单使用
mysql重置密码,忘记密码,重置root密码,重置mysql密码
Odoo13 build a hospital HRP environment (detailed steps)
创新实力再获认可!腾讯安全MSS获2022年度云原生安全守护先锋
Chow-Liu Tree
Innovation strength is recognized again! Tencent security MSS was the pioneer of cloud native security guard in 2022
随机推荐
地平线2022年4月最新方案介绍
Learning Websites commonly used by circuit designers
MySQL reset password, forget password, reset root password, reset MySQL password
[favorite poems] OK, song
ping域名报错unknown host,nslookup/systemd-resolve可以正常解析,ping公网地址通怎么解决?
Jerry's charge unplugged, unable to touch the boot [chapter]
Mask R-CNN
数据分析学习记录--用EXCEL完成简单的单因素方差分析
Innovation strength is recognized again! Tencent security MSS was the pioneer of cloud native security guard in 2022
P7072 [csp-j2020] live broadcast Award
深度剖析数据在内存中的存储----C语言篇
泛型与反射,看这篇就够了
Freshman learning sharing
設置單擊右鍵可以選擇用VS Code打開文件
Value sequence < detailed explanation of daily question >
AES高級加密協議的動機闡述
P7072 [CSP-J2020] 直播获奖
Uniapp wechat login returns user name and Avatar
Motivation du Protocole de chiffrement avancé AES
Splunk audit 的设定