【发布时间】:2017-03-04 04:26:44
【问题描述】:
我需要为 ARM Cortex M3/M4 处理器实现一个带有 MPU 的多任务系统。
在该系统中,将有一个内核在特权模式下管理资源,在非特权模式下管理用户应用程序。我想将用户应用程序与其余部分和系统资源分开。
因此,当我切换到新任务时,我正在释放用户应用程序的堆栈和全局内存区域。 它可以使用 ARM Cortex MPU 寄存器轻松完成。
但问题是,当发生上下文切换时,我还需要使用内核的一些全局变量。
例如,我在上下文切换期间调用了一个函数来获取 PendSV 处理程序中的下一个 TCB,但任务池超出了用户应用程序区域,并且它受到用户应用程序的保护。
所以,看起来应该是平衡的,对吧?有哪些安全有效的内存保护策略?
当调用 Yield 函数时,可以在上下文切换之前提升特权模式,但这似乎不是一个好的解决方案。
关于这个问题的一般策略是什么?
【问题讨论】:
-
似乎任何可能导致上下文切换的操作系统功能都需要进入特权模式,只有在它“返回”以完成上下文切换后才恢复为非特权模式。这就是我使用的内核处理上下文切换的方式。在特权模式下,作为上下文切换的一部分,可以根据需要更改受保护的内存区域。
标签: operating-system rtos context-switching mpu