【问题标题】:I/O APIC external IRQ static distributionI/O APIC 外部 IRQ 静态分配
【发布时间】:2013-07-31 14:29:22
【问题描述】:

我在看ULK3,得到如下语句

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

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

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

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

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

如果是,请给我看例子

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

【问题讨论】:

    标签: kernel interrupt apic


    【解决方案1】:

    这里是一个描述本地 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 之间以循环方式分配。[*]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      相关资源
      最近更新 更多