這個問題在這里已經有了答案: RIP 暫存器不會改變 2 個答案 5 天前關閉。
我一直想知道同時運行的多個程式如何使用 CPU 暫存器而不會導致 Windows 作業系統上的程式之間發生沖突。
Windows 作業系統是否使用“虛擬暫存器”來避免這種情況(多個程式同時使用相同的暫存器)?
因此,例如,如果兩個程式使用eax暫存器,作業系統真的會改變物理eax暫存器嗎?
還是像我上面提到的那樣使用一些“虛擬暫存器”?
uj5u.com熱心網友回復:
作業系統不使用虛擬暫存器,改變了物理暫存器。
在過去,機器只有一個 CPU 內核,并且在任何時間點實際上只有一個執行緒在運行。每次在不同的執行緒可以開始運行之前,作業系統內核都會保存舊執行緒的狀態(暫存器)并在新執行緒可以繼續之前恢復新執行緒的狀態。這稱為背景關系切換。切換發生在內核模式下,如果切換到的執行緒位于不同的行程中,它還必須更改虛擬記憶體映射。
在具有多個內核的系統上,多個執行緒可以同時運行,并且每個內核都有自己的一組暫存器。
MSDN 粗略地概述了背景關系切換在 Windows 上的作業原理:
調度程式為每個優先級維護一個可執行執行緒佇列。這些被稱為就緒執行緒。當處理器可用時,系統會執行背景關系切換。背景關系切換的步驟是:
- 保存剛剛完成執行的執行緒的背景關系。
- 將剛剛執行完畢的執行緒放在佇列的末尾,以獲得它的優先級。
- 找到包含就緒執行緒的最高優先級佇列。
- 移除佇列頭部的執行緒,加載它的背景關系,然后執行它。
...
背景關系切換的最常見原因是:
- 時間片已過。
- 具有更高優先級的執行緒已準備好運行。
- 正在運行的執行緒需要等待。
如果您的程式在搶占式多任務作業系統上運行,那么您不必考慮背景關系切換的發生方式和原因,您可以假裝始終控制暫存器并且您的程式是唯一運行的程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411266.html
標籤:
上一篇:MASM字串指令-在實模式下在前面的LEA上覆寫段暫存器?
下一篇:如何將顏色屬性更改為黑底白字
