ARM Cortex CPU 的内存保护策略应该是什么?

What should be Memory Protection Strategy for ARM Cortex CPU?

我需要为 ARM Cortex M3/M4 处理器实现带有 MPU 的多任务系统。

在该系统中,将有一个内核,在特权模式下管理资源,在非特权模式下管理用户应用程序。我想将用户应用程序与其余部分和系统资源分开。

因此,当我切换到一个新任务时,我正在释放用户应用程序的堆栈和全局内存区域。 使用 ARM Cortex MPU 寄存器可以轻松完成。

但问题是,当发生上下文切换时,我还需要使用一些内核的全局变量。

例如,我在上下文切换期间调用一个函数来获取 PendSV 处理程序中的下一个 TCB,但任务池不在用户应用程序区域,并且它不受用户应用程序的影响。

这么看来,应该是平衡的吧?安全高效的内存保护策略有哪些?

在调用Yield函数时,可以在上下文切换之前提升特权模式,但这似乎不是一个好的解决方案。

关于这个问题的一般策略是什么?

也许您可以查看现有的开源实现,看看那里做出了哪些设计决策。例如,FreeRTOS 支持 Cortex-M MPU here;它可能无法直接回答您的确切问题,您可能必须检查源代码才能获得完整的详细信息。

可能将数据内存分为三个区域——用户、内核和共享。