MPU是缩减版的MMU。最初的目的是防止一个软件错误或者恶意软件影响到其他的任务或者影响到了操作系统本身。
也就是说一个完美设计好的系统,一些恶意程序很难对其进行攻击,提高了安全性和攻击难度。
MPU的使用配置原则:
1、对不同的内存区域(不区分Flash,RAM等)提供访问权限的控制。
2、访问权限有: R W X
3、如果可以的话。一个任务不能够主动升级其访问权限,否则会对其他的任务产生攻击和信息泄露。比如,意外改写其他任务的数据。
比如,恶意访问(读取)其他任务的数据。
4、如果可以的话。应该在初始化时能够提前配置好各个任务的权限。
5、目前从ARM的CPU来看,最简单的情况的情况。就是把任务分为两组,第一组是运行在CPU的高权限(特权)模式,其他的运行在CPU的低权限模式。
6、CPU的中断发生时,CPU可能运行在高权限模式。所以,应该对ISR分开处理。此时,如果ISR会调用低权限任务,此时会提升低权限任务的权限,带来风险。可以在ISR执行低特权任务时主动降低权限。
7、一个比较完美的解决方案是,在操作系统提供的任务切换时进行权限的控制,比如操作系统能够根据初始化的配置时改变任务的权限。
8、为了安全考虑,一个任务可以主动降低其权限,但是不能随意(不受限制地)提升自己的权限。
如果完全不使用操作系统,很难发挥MPU的特性。因为需要严格区分各个不同的任务,在实际操作中,task(任务)是被管控的,这和我们平时用到的windows和linux等操作系统是差不多的。
参考文档:
https://www.freertos.org/2020/04/using-freertos-on-armv8-m-microcontrollers.html