I/O APIC的外部中断静态分配

问题描述:

我读ULK3,并得到了下面的语句I/O APIC的外部中断静态分配

“的中断请求外部硬件设备来可以 两种方式可用的CPU分配的:

静态分配IRQ信号被传送到列在相应重定向表条目中的本地APIC 。该中断 交付给一个特定的CPU,与CPU的一个子集,或者所有CPU atonce(广播模式)“

我知道linux下不使用静态分布,但 我的问题是:

如果操作系统使用静态分配启动中断重定向表中的一项,并且引发IRQ,然后多APIC系统选择其中两个CPU(这里只是两个cpus在条目中列出的示例)并且将信号传递给相应的本地APIC,并且两个本地APIC都接受该中断。

  1. 只有一个CPU会处理中断?或两者?如果一个,如何选择?
  2. 是否有操作系统使用静态分配?

如果有,请告诉我的例子

如果没有,它为什么存在?是因为一些历史问题吗?这种设计的原始原因是什么?

这里是本地APIC,IO APIC和ICC总线的链接描述机制。

http://syszux.com/book/kernel/Understanding.the.Linux.Kernel(3rd%20Edition)/understandlk-CHP-4-SECT-2.html

下面的段落是从网页中提取可能是你的问题的答案:

动态分配

的IRQ信号传送到正在执行过程中的处理器的本地APIC优先级最低。

每个本地APIC都有一个可编程的任务优先级寄存器(TPR),用于计算当前正在运行的进程的优先级。英特尔希望每个进程切换器都可以在操作系统内核中修改该寄存器。

如果两个或多个CPU共享最低优先级,则使用称为仲裁的技术在它们之间分配负载。在本地APIC的仲裁优先级寄存器中,每个CPU分配一个不同的仲裁优先级,范围从0(最低)到15(最高)。

每次中断传送给CPU时,相应的仲裁优先级自动设置为0,而其他CPU的仲裁优先级增加。当仲裁优先级寄存器大于15时,它被设置为中奖CPU的先前仲裁优先级增加1.因此,中断以循环方式在具有相同任务优先级的CPU之间分配。[*]