異常
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會被置位,告訴內核有一個擴展的中斷控制器存在。