Linux是否会在所有内核上进入内核?

时间:2010-01-12 16:51:21

标签: multithreading linux-kernel multicore

对于运行Linux 2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是仅在运行该线程的核心上进入内核,还是在所有核心上都进入内核(对不起,如果这是一个新手问题)。

一般接收中断时,这种行为(无论哪一种是正确的)是一样的吗?如果没有,有什么区别?

2 个答案:

答案 0 :(得分:5)

只有执行系统调用的线程才能进入内核。 Linux中的所有调度都是在线程粒度上完成的。至于中断 - 它们被路由到一个核心,即每个给定的硬件事件只中断一个处理器。然后可以手动将中断分配给特定的核心。这是通过/proc/irq/IRQ-NUMBER/smp_affinity中的掩码完成的。您可以在/proc/interrupts中查看哪些CPU接收了哪些硬件中断。

答案 1 :(得分:0)

Ony一个核处理系统调用,只有一个核处理中断。

关于中断的确切路由,我手边没有任何参考资料 - 或许Intel's System Programming Guide会对此有所帮助。

但是,想象一下,如果所有内核都被每个系统调用或中断中断。 Linux旨在扩展到许多核心。这会破坏可扩展性 - 在大型服务器上,每个磁盘I / O,定时器中断等都会有效地停止系统中的每个核心,从而阻止它们进行有用的工作。