在單核處理器上進行上下文切換時,負責的代碼在唯一負責切換線程的CPU上執行。如何在多核處理器上完成線程的上下文切換?
但是,當我們有多個CPU時,這是如何完成的?是否有一個主CPU完成所有從CPU的所有上下文切換?每個CPU是否負責自己的上下文切換?如果是這樣,切換如何同步,以便兩個CPU不執行相同的線程?還是有其他一些機制?
在單核處理器上進行上下文切換時,負責的代碼在唯一負責切換線程的CPU上執行。如何在多核處理器上完成線程的上下文切換?
但是,當我們有多個CPU時,這是如何完成的?是否有一個主CPU完成所有從CPU的所有上下文切換?每個CPU是否負責自己的上下文切換?如果是這樣,切換如何同步,以便兩個CPU不執行相同的線程?還是有其他一些機制?
內核是多線程的。它可以在任何核心上執行。當內核需要交換線程時,它調用內核的一部分負責選擇它應該執行的下一個線程。
內核是多線程的;也就是說,它被寫爲在多核上同時安全執行。因此,只有一個CPU最終運行任何給定的線程,因爲代碼的構造方式是,如果多個CPU同時重新安排,則會發生正確的結果。
CPU不做上下文切換。操作系統。
本質上,OS通過在CPU內核中加載新的上下文(寄存器,存儲器映射等)來執行上下文切換。線程是可以保存這種上下文的操作系統結構。因此,操作系統還負責挑選非運行線程來加載CPU上下文。
如果操作系統選擇正在運行的線程,則兩個內核會嘗試運行相同的線程。這必然會造成混淆,因爲它們會共享相同的內存,並且單個線程不會與其本身並行運行(!)因此,沒有任何操作系統會做這樣的事情。
我從來沒有說過CPU會進行上下文切換。我說過,在CPU上執行用於執行上下文切換的_code_負責(即OS)。但是當我們擁有多個CPU時,這是如何處理的?上下文切換代碼是否在_all_ CPU上執行? – gablin 2010-10-12 19:41:32
假設我們有兩個過程P1和P2步驟的近似順序應該是這樣的。
The current registers are stored into the process structure for P1.
The stored register values from the process structure for P2 are loaded into the CPU's registers.
CPU returns the User mode
P1 is context switched out and P2 is context switched in and running
請注意,僅限CPU將內部發送到操作系統以執行上下文切換。
謝謝你的簡短,但內容豐富,答案。 – gablin 2010-10-20 17:28:22