VxWorks采用中断处理与普通任务分别在不同的栈中处理的中断处理机制[2]。中断处理程序运行于一种特殊的上下文环境中,没有任务控制块(Task Control Block, TCB),这使得中断的产生只会引发一些关键寄存器的存储而不会导致任务上下文的切换,从而减小了中断延迟。
VxWorks下的中断服务程序(ISR, Interrupt Service Routine)只完成在最小时间内通告中断的发生,而将其它的非实时处理尽量通过中断与任务间的通信机制放在被引发的任务上下文中来完成,类似于Linux中的底半处理机制,这样既可以避开中断服务程序编写的种种限制,又进一步缩小了中断延迟。
为了让用户方便的使用C语言编写中断服务程序来实现对中断的控制,VxWorks在体系结构无关例程库intLib和体系结构相关例程库intArchLib中提供了系统接口函数[3]。对于应用程序员一般只需了解intLib库即可,而BSP(Board Support Packet,板级支持包)程序员则还需要了解intArchLib库。对例程库的详细描述请参见参考文献[3]。
PowerPC内核接收到中断请求信号后,保存内核中断现场,即将程序计数器保存到SRR0,机器状态寄存器(MSR,Machine State Register)保存到SRR1,并改变MSR相关的信息,然后按异常向量表转入外部中断偏移地址处(0x500)执行最大长度为256个字节的SIU中断服务程序,完成中断服务。