2010-01-12 54 views
2

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

当一般接收到中断时,这种行为(以哪个为准)与之相同?如果不是,有什么区别?

回答

5

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

0

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

我没有任何关于如何路由中断的提示 - 也许Intel's System Programming Guide会在这里有所帮助。

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