Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Linux是否会进入所有内核的内核?_Multithreading_Linux Kernel_Multicore - Fatal编程技术网

Multithreading Linux是否会进入所有内核的内核?

Multithreading Linux是否会进入所有内核的内核?,multithreading,linux-kernel,multicore,Multithreading,Linux Kernel,Multicore,对于运行Linux2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是否仅在线程运行的内核上放入内核,还是在所有内核上放入内核(如果这是新手问题,请抱歉) 一般来说,当接收中断时,这种行为(以正确的为准)是否相同?如果没有,区别是什么?只有执行系统调用的线程进入内核。Linux中的所有调度都是在线程粒度上完成的。至于中断-它们被路由到一个内核,即每个给定硬件事件只中断一个处理器。然后可以手动将中断分配给特定的核心。这是通过/proc/irq/irq-NUMBER/smp\u affini

对于运行Linux2.6.x的多核计算机,当线程进行系统调用时会发生什么?它是否仅在线程运行的内核上放入内核,还是在所有内核上放入内核(如果这是新手问题,请抱歉)


一般来说,当接收中断时,这种行为(以正确的为准)是否相同?如果没有,区别是什么?

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

中看到哪个CPU接收哪些硬件中断,只有一个内核处理系统调用,而只有一个内核处理中断

我手头上没有任何关于中断是如何路由的参考资料——也许在这里会有所帮助

但是,想象一下,如果所有内核都被每个系统调用或中断中断。Linux被设计成可扩展到多个核心。这将扼杀这种可伸缩性——在大型服务器上,每一次磁盘I/O、计时器中断等都将有效地使系统中的每一个内核停止运行,从而阻止它们执行有用的工作