Linux共享中断实现原理(linux共享中断)
Linux共享中断(Shared Interrupts, SI)技术实现了设备之间通过共享中断线实现中断请求和响应,从而将系统中断源数目加倍。此外,还有一个优点就是减少了计算机硬件结构的复杂性,从而减少了系统成本,对于对系统性能要求高的系统来说,其优势也是显而易见的。本文将介绍Linux共享中断实现的原理。
Linux共享中断的实现,需要在硬件上实现一种特殊的IRQ模式,即主-从IRQ模式,其中,主IRQ线由中断控制单元(Interrupt Controller)提供并管理,从IRQ线由各主板厂商提供并由计算机系统用户控制。一般情况下,中断控制单元的驱动程序会检测主IRQ模式,并自动将它设置为“共享中断”模式,即主从IRQ模式。
为了更好地理解Linux共享中断实现原理,可以假设有一系列接入网络的计算机系统,每个系统上都有几个由中断控制单元提供的主IRQ线,而从IRQ线则是由计算机网络服务器提供的。当计算机系统上的设备有中断发生时,它会根据IRQ模式配置向中断控制单元发出请求,此时,不论这个请求是从哪台计算机发出的,都将会触发中断控制单元的连接器接收中断,然后会有唯一的主IRQ线来处理。此时,中断控制单元将中断标记放入主IRQ线,服务器计算机将收到中断,并执行中断处理。
Linux共享中断实现原理的内核实现如下:
foreach_irq_pin(i, dev, pin)
{ if (GIC_TEST_EDGE_TRIGGER(i)) /* Edge Triggered */
{ GIC_SET_EDGE_TRIGGER(irq);
} else /* Level Triggered */
{ GIC_CLEAR_EDGE_TRIGGER(irq);
GIC_SET_LEVEL_TRIGGER(irq); }
/* Enable forwarding of interrupts from this pin to the processor. */
gic_configure_irq(irq, INT_TRIGGER_MODE, INT_POLARITY_HIGH);} /* foreach_irq_pin */
总的来说,Linux共享中断的实现还是非常容易理解的,只要各硬件厂商提供了主从IRQ模式,就可以让计算机系统实现中断共享,并可以极大地提高系统性能。