I/O APIC的外部中断静态分配
问题描述:
我读ULK3,并得到了下面的语句I/O APIC的外部中断静态分配
“的中断请求外部硬件设备来可以 两种方式可用的CPU分配的:
静态分配IRQ信号被传送到列在相应重定向表条目中的本地APIC 。该中断 交付给一个特定的CPU,与CPU的一个子集,或者所有CPU atonce(广播模式)“
我知道linux下不使用静态分布,但 我的问题是:
如果操作系统使用静态分配启动中断重定向表中的一项,并且引发IRQ,然后多APIC系统选择其中两个CPU(这里只是两个cpus在条目中列出的示例)并且将信号传递给相应的本地APIC,并且两个本地APIC都接受该中断。
- 只有一个CPU会处理中断?或两者?如果一个,如何选择?
- 是否有操作系统使用静态分配?
如果有,请告诉我的例子
如果没有,它为什么存在?是因为一些历史问题吗?这种设计的原始原因是什么?
答
这里是本地APIC,IO APIC和ICC总线的链接描述机制。
下面的段落是从网页中提取可能是你的问题的答案:
动态分配
的IRQ信号传送到正在执行过程中的处理器的本地APIC优先级最低。
每个本地APIC都有一个可编程的任务优先级寄存器(TPR),用于计算当前正在运行的进程的优先级。英特尔希望每个进程切换器都可以在操作系统内核中修改该寄存器。
如果两个或多个CPU共享最低优先级,则使用称为仲裁的技术在它们之间分配负载。在本地APIC的仲裁优先级寄存器中,每个CPU分配一个不同的仲裁优先级,范围从0(最低)到15(最高)。
每次中断传送给CPU时,相应的仲裁优先级自动设置为0,而其他CPU的仲裁优先级增加。当仲裁优先级寄存器大于15时,它被设置为中奖CPU的先前仲裁优先级增加1.因此,中断以循环方式在具有相同任务优先级的CPU之间分配。[*]