Kar*_*yan 5 linux cpu scheduling kernel interrupt
在硬件和软件中断流程中如何处理排队?更准确地说,我有以下疑问
让我们假设我有一台带有 2 个 CPU 的机器。CPU1 正在处理进程 P1,CPU2 正在处理进程 P2。进程 P3 正在等待执行。现在 CPU1 得到了硬件中断 (I1)。因此,CPU1 上下文切换到 I1 的中断服务程序 (ISR)。
注意:我们可以忽略中断的下半部分,而认为所有中断都只有上半部分。
通常,中断处理程序被设计得尽可能短,并且实际的处理代码在类似进程的上下文中调用。处理程序只是确定源,在软件中添加一个队列条目,然后禁用中断源。当CPU从中断处理返回时,首先处理中断处理程序队列,然后恢复“当前”的任何进程。
在队列评估期间调用的处理程序可以更改哪个进程是“当前”,最明显的例子是指示时间片已到的计时器中断,但传入事件也可以使更高优先级的进程可运行,这将调度它们。
多处理器系统具有显式中断路由,通常具有仅路由到其关联 CPU 的专用定时器 IRQ,并且硬件中断具有“首选”CPU(用于改进缓存局部性)或应用于它们的负载平衡方法,其中中断控制器确保分配它们。
从硬件的角度来看,中断总是被标记,而不是排队,因此中断在被处理之前不能再次发送(因此不存在如果速率太高就会丢失中断的硬件限制),但是操作系统通常会保留一个队列在软件中,因此它在“真正的”IRQ 处理程序中花费尽可能少的时间(并且该队列的长度是有限的,因为每个源只能排队一个实例)。
因此,与一个特定硬件接口的“下半部”处理程序可以被另一个传入中断中断,但所做的只是将第二个中断添加到队列中。然后恢复第一个中断的下半部处理程序,当它返回时,调用第二个中断的下半部处理程序,一旦下半部处理程序队列变空,当前的用户空间进程就会被调用。被执行。
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |