异常
74k内核处理各种的异常,包括计算溢出,TLB缺失,IO口的中断和系统调用。当CPU接收到一个中断,通常的处理过程是,挂起现有的指令,并且进入kernel模式,禁止中断,并把产生异常时,运行到的指令的地址保存到EPC上去(便以以后异常返回),之后就是跳到中断handler上去了。
这个handler首先保存了cpu的上下文,包括pc,当前的操作模式,还有中断的状态(允许还是禁止)。
异常包括了精确的和非精确的异常,精确的异常时需要保存返回地址到EPC的(一些可处理和恢复的异常,如TLB缺失,IO中断等等)。非精确异常就是不需要返回的(如总线错误,CP2异常等等)。
中断
MIPS32版本1支持两个软件中断,6个硬件中断,还有一个特殊用途的时钟中断。时钟中断是作为外部中断提供给内核用的,使用的是硬件中断号5,这个时钟中断一般作为操作系统的tick。
中断可以被general exception vector(offset 0x180)或者special interrupt vector (0x200)中断向量处理,至于使用哪一个,通过CauseIV来决定,软件可以通过判断这个位来区分。
另外在74K内核中,还有一个性能计数器,这个计数器可以被配置成产生多种事件,当这个计数器的MSB字段被置位时,这个计数器会产生一个类似timer的中断。可以给操作系统提供时钟tick等。
中断模式
74K内核支持3种中断模式MIPS32版本2定义:
1。兼容中断模式(Interrupt Compatibility mode),和版本1的中断模式兼容
2。向量中断模式(Vectored Interrupt (VI) mode),新增加的一种模式,为了提高性能。这种中断模式分配了一个GPR的 shadow set来提高中断处理的性能,
可以通过读取Config3寄存器的VInt位来判断是否支持这种模式。
3。外部中断控制器模式(External Interrupt Controller (EIC) mode),这种方式重新定义了中断处理方式,为优先中断处理和向量中断处理提供了充分的支持。就好像VI模式,这种模式也是特定体系结构才有的,如74K,Config3寄存器的VEIC位标记是否支持这样模式。对于74K内核,如果有外部的SI_EICP信号,VEIC会被置位,告诉内核有一个扩展的中断控制器存在。