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