最近在看《深入理解Linux内核》,看到第四章中断和异常中的这一段,关于APIC优先级仲裁,原文如下
来自外部硬件设备的中断请求以两种方式在可用CPU之间分发:
静态分发,IRQ信号传递给重定向表和相应项中所列出的本地APIC,中断立即传递给一个特定的CPU或一组CPU,也可以通过广播的方式发送给所有CPU。
动态分发,如果处理器正在执行最低优先级的进程,IRQ信号就传递给这种处理器的本地APIC,每个本地APIC都有一个可编程任务优先级寄存器TPR,TPR用来计算当前运行进程的优先级。
如果两个或多个CPU共享最低优先级,就利用仲裁技术在这些CPU之间分配负荷,在本地APIC的仲裁优先级寄存器中,给每个CPU都分配一个0~15范围内的值,其中0最低,15最高。
每当中断传递给一个CPU时,其相应的仲裁优先级就自动设置为0,而其他的每个CPU的仲裁优先级都增加1,当仲裁优先级寄存器大于15时,就把它置为获胜CPU的前一个仲裁优先级加1的值。因此中断以轮转方式在CPU之间分发,具有相同的任务优先级。
不太理解为什么
当仲裁优先级寄存器大于15时,就把它置为获胜CPU的前一个仲裁优先级加1的值
求指教
或者推荐下相关的分析文章,我自己去看看。
业精于勤,荒于嬉;行成于思,毁于随。