看书的时候自己也有这俩疑问。为啥需要软硬件一起来保存状态呢?全部软件会有啥问题? 自己的想法:中断过程中来没来得及保存现场又来了一个中断,之后无法恢复到最开始的执行处?
由CPU先保存的原因是,操作系统先保存的话可能会改变一些寄存器的值。例如PSTATE,里面的NZCV很容易改变的。 所以当异常出现时CPU第一时间精准的把关键寄存器的值备份起来,这样就可以避免操作系统代码的可能干扰。比如PSTATE保存到SPSR。 从CPU的角度来说,操作系统的代码应该是不可信的。
另外,异常中出现新的异常,像第一次那样按流程继续把软硬件context保存起来,处理完把context恢复。就像普通的函数call stack一样。