为什么《深入理解Linux内核》说APIC当仲裁优先级寄存器大于15时,就把它置为获胜CPU的前一个仲裁优先级加1的值

zqb_all
  • 1
新手上路,请多包涵

最近在看《深入理解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的值

求指教
或者推荐下相关的分析文章,我自己去看看。

回复
阅读 2.3k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏