MPU支持的用户空间
MPU支持的用户空间实现需要创建一组辅助堆栈。这些堆栈与系统中定义的每个线程堆栈以1:1的关系存在。特权堆栈是作为构建过程的一部分来创建的。
构建后的脚本scripts/gen_kobject_list.py会扫描生成的ELF文件,并找到所有的线程堆栈对象。将创建一组特权堆栈、一个查找表和一组辅助函数,并将其添加到图像中。
在将线程降为用户模式的过程中,特权堆栈信息被填充,然后被交换和系统调用基础设施使用,为线程堆栈和保护(如果适用)的MPU正确配置MPU区域。
在系统调用期间,用户模式线程对系统调用的访问和传递的参数都被验证。然后将用户模式线程提升到特权模式,堆栈被切换为使用特权堆栈,并对指定的内核API进行调用。当从内核API返回时,线程被设置回用户模式,堆栈被恢复到用户堆栈。
Zephyr内核通过MPU支持用户空间,创建辅助堆栈与线程堆栈一一对应。构建过程会扫描ELF文件生成特权堆栈和查找表。线程降级到用户模式时,填充特权堆栈信息,MPU区域配置用于保护。系统调用期间,验证权限并切换到特权模式调用内核API,完成后返回用户模式。
558

被折叠的 条评论
为什么被折叠?



