【问题标题】:What should be Memory Protection Strategy for ARM Cortex CPU?ARM Cortex CPU的内存保护策略应该是什么?
【发布时间】:2017-03-04 04:26:44
【问题描述】:

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

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

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

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

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

所以,看起来应该是平衡的,对吧?有哪些安全有效的内存保护策略?

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

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

【问题讨论】:

  • 似乎任何可能导致上下文切换的操作系统功能都需要进入特权模式,只有在它“返回”以完成上下文切换后才恢复为非特权模式。这就是我使用的内核处理上下文切换的方式。在特权模式下,作为上下文切换的一部分,可以根据需要更改受保护的内存区域。

标签: operating-system rtos context-switching mpu


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2019-09-23
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多