Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system ARM Cortex CPU的内存保护策略应该是什么?_Operating System_Rtos_Context Switching_Mpu - Fatal编程技术网

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

Operating system ARM Cortex CPU的内存保护策略应该是什么?,operating-system,rtos,context-switching,mpu,Operating System,Rtos,Context Switching,Mpu,我需要为ARM Cortex M3/M4处理器实现一个带有MPU的多任务系统 在该系统中,将有一个内核,它以特权模式管理资源,以非特权模式管理用户应用程序。我想将用户应用程序与其他it和系统资源分开 所以,当我切换到一个新任务时,我释放了用户应用程序的堆栈和全局内存区域。 使用ARM Cortex MPU寄存器可以轻松完成 但问题是,当发生上下文切换时,我还需要使用内核的一些全局变量 例如,在上下文切换期间,我调用一个函数来获取PendSV处理程序中的下一个TCB,但任务池不在用户应用程序区域内

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

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

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

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

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

所以,似乎应该有平衡,对吗?什么是安全有效的记忆保护策略

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


在这一问题上的总体战略是什么

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


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

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


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

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