2

我正在阅读 ULK3,并得到以下声明

“来自外部硬件设备的中断请求可以通过两种方式分布在可用的 CPU 中:

静态分发 IRQ 信号被传递到相应重定向表条目中列出的本地 APIC。中断被传送到一个特定的 CPU、CPU 的一个子集或一次性传送到所有 CPU(广播模式)。”</p>

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

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

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

如果是,请给我看例子

如果不是,它为什么存在?是不是因为某些历史问题?这种设计的初衷是什么?

4

1 回答 1

0

这是一个描述本地 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 共享最低优先级,则使用称为仲裁的技术在它们之间分配负载。每个 CPU 在本地 APIC 的仲裁优先级寄存器中分配了不同的仲裁优先级,范围从 0(最低)到 15(最高)。

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

于 2014-03-14T05:05:09.307 回答