首先,设立双指针是为了保证OS的安全性和稳健性。通常来说,操作系统和异常事件(中断或其他fault)使用MSP,用户程序(线程)使用PSP。MSP与PSP指针之间的切换会在处理异常事件时自动完成。
本质上,区别于用户程序使用PSP,操作系统和异常事件单独使用一个MSP指针的目的,是为了保证栈数据不会被用户程序意外访问或栈空间被用户程序占用。比如,当应用程序发生栈溢出问题时,必须要确保应用程序的故障不会影响到操作系统的运行和异常事件的处理——也就需要保证始终要有栈空间来执行异常事件。
裸机操作时,使用的就是MSP指针。其实OS在上电复位到切换线程之前用的都是MSP指针,也就是线程切换之前都是一个裸机程序的状态。