PowerPC 体系结构之中断异常

取 BOOKE 之精要。

1. 异常类型

00 Critical Interrupt     来自于外部中断控制器,具有较高的优先级
01 Machine Check    严重的内部状态错误,如 Cache 数据的校验失败
02  Data Storage    数据读写异常,如:用户态读一个非用户态的页 (UR=0)
03  Instruction Storage    读指令异常,如:用户态时取一个用户态不可执行的页 (UX=0)
04 External Interrupt    来自于外部中断控制器
05  Alignment    非对齐访问异常
06 Program    程序异常,如:执行非法指令,用户态执行特权指令
07  Floating-Point unavailable    在无浮点部件的 CPU 上执行浮点指令即会触发此异常
08 System call    系统调用
09  Auxiliary Processor Unavailable    在无协处理器的 CPU 上执行协处理器指令即触发此异常
10  Decrementer    DEC 寄存器归零异常,DEC 是一个内部时钟计数器,Linux 用之实现时钟中断
11  Fixed-interval timer interrupt
12 Watchdog timer interrupt
13 Data TLB error    数据 TLB Miss 异常
14 Instruction TLB error    指令 TLB Miss 异常
15 Debug    调试异常,用于支持调试

16 – 31   Reserved for future use   保留给将来体系结构升级用
32 – 63   Allocated for implementation-dependent use   具体实现相关

其中 0,1,12,15 为 Critical Exception,当其发生时,使用 CSRR0 & CSRR1 保存当前 PC 或 (PC + 4) 和 MSR;其他异常发生时,则使用 SRR0 & SRR1 保存当前 PC 或 (PC + 4) 和 MSR

可以看到 BOOKE 体系结构层面规定的异常即为前 16 个,这其中的有些异常是个笼统的抽象(比如 Data Storage 就需要区分是读还是写导致的),为了更细地描述发生异常的原因,PowerPC 引入了一个 ESR (Exception Syndrome Register),让硬件在异常发生时,在其中指出更具体的原因。比如 若 ESR[40] 被置位,则说明异常是由写操作引起的。