對於運行Linux 2.6.x的多核計算機,線程進行系統調用時會發生什麼情況?它是否只在線程運行的內核中放入內核,還是放入所有內核的內核(對不起,如果這是一個新手問題)。Linux是否放入所有內核的內核?
當一般接收到中斷時,這種行爲(以哪個爲準)與之相同?如果不是,有什麼區別?
對於運行Linux 2.6.x的多核計算機,線程進行系統調用時會發生什麼情況?它是否只在線程運行的內核中放入內核,還是放入所有內核的內核(對不起,如果這是一個新手問題)。Linux是否放入所有內核的內核?
當一般接收到中斷時,這種行爲(以哪個爲準)與之相同?如果不是,有什麼區別?
只有系統調用進入內核的線程。 Linux中的所有調度均按線程粒度完成。至於中斷 - 它們被路由到一個內核,即每個給定的硬件事件只有一個處理器中斷。然後可以手動將中斷分配給特定的內核。這是通過在/proc/irq/IRQ-NUMBER/smp_affinity
中的面具完成的。您可以看到/proc/interrupts
中哪些CPU接收到哪些硬件中斷。
Ony一個內核處理系統調用,並且只有一個內核處理中斷。
我沒有任何關於如何路由中斷的提示 - 也許Intel's System Programming Guide會在這裏有所幫助。
但是,想象一下,如果所有內核都被每個系統調用或中斷中斷。 Linux旨在擴展到許多內核。這會導致可擴展性的喪失 - 在大量服務器上,每個磁盤I/O,定時器中斷等都會有效地拖延系統中的每個單核,從而阻止它們進行有用的工作。