CPU模式
大部分CPU至少都有两种模式,特权模式与工作默模式。
在特权模式中,全部指令可以无限制执行,操作系统需要在特权模式下执行。
用户模式中,指令被限制,一些敏感操作,比如CPU控制寄存器的访问,改变CPU状态的指令等。
中断和异常
中断让CPU暂停正在执行的操作,执行其他操作的功能。中断经常用在通知来自I/O时间、处理程序执行中的异步时间等情况。发生中断时,CPU暂停当前操作,跳转到中断处理程序。这时,CPU模式会变更到内核模式。中断处理完成后返回到中断处继续执行。
异常是指CPU的执行产生了预期之外的结果。例如,遇到无法解码的指令、运算结果溢出以及操作违反权限等情况。遇到异常发生时,CPU将中断当前程序,跳转到异常处理程序。
中断和异常只有发生原因有所差别,中断时由外部因素引起的,而异常时由内部操作引起的,但这两者的处理本质上是一致的,所以不区分二者的CPU也很多。
流水线化的CPU在异常发生时的处理稍微有些复杂。异常发生后,导致异常发生的指令以及其后的指令暂停执行,跳转到异常处理程序。由于流水线的CPU中的后续指令也在执行中,需要将先前流水线中所有数据缓存后,再将PC寄存器设置为异常处理程序地址,最后重启流水线。
一般流水线中检查异常的节点在WB–write back阶段,这一阶段会把数据协会寄存器堆。
根据异常种类的不同,发生异常的流水线级也不同,因此异常发生时的动作较为复杂。最简单的方式是在流水线寄存器设置专用寄存器以标志异常发生的位置,最后在WB阶段检查是否由异常发生。因为操作结果的写回是在WB阶段,如果在WB级执行前将其内容缓存,指令就可以和从未执行过一样。