我是一名程式員,正在學習匯編語言,以便直觀地了解我的代碼如何在 CPU 上運行。
在我研究 ASM 關鍵字LOCK時,谷歌告訴我CPU 將在執行以下帶有 LOCK 前綴的指令時獨占資料總線。
但如果沒有任何額外資訊,CPU 如何獲得獨占所有權。
我還發現 8086 微芯片有一個鎖銷,它的作用與關鍵字LOCK完全相同。這可能是實作LOCK關鍵字的邏輯電路。
誰能解釋一下鎖銷的機制。當鎖銷處于活動狀態時,其他 CPU 在嘗試獲取資料總線的使用情況時將如何被拒絕。
uj5u.com熱心網友回復:
如果唯一的 CPU 鎖定了記憶體總線,則在此期間沒有其他設備可以讀取或更改記憶體內容,即使通過 DMA 也不行。(或者在沒有快取的共享總線上有多個 CPU,同樣的處理。)因此,在加載和存盤 a 之間根本不會發生其他記憶體操作lock add [di], ax,使其成為原子 wrt。任何可能的觀察者。(除了連接到總線的邏輯分析儀,不算在內。)
半相關:num 可以是“int num”的原子嗎?描述了lock前綴如何在現代 CPU 上用于可快取記憶體,在沒有總線鎖的情況下提供 RMW 原子性,只是在持續時間內掛在快取行上。
我們稱之為“快取鎖”;所有現代 CPU 都以這種方式作業以進行對齊操作,只對跨越兩個快取線之間邊界locked的東西進行昂貴的總線鎖定。xchg [mem], ax這會損害所有內核的吞吐量,并且成本如此之高,以至于現代 CPU 有辦法讓它總是出錯,而不是其他未對齊的加載/存盤,以及它的性能計數器。
有趣的事實:在 386 和更新版本上xchg [mem], reg具有隱式lock語意。(這是不幸的,因為當您的暫存器運行不足時,它會因為性能原因而無法用作普通的加載/存盤)。它沒有在 286 或更早版本上,除非你這樣做了。這可能與存在 SMP 386 系統(具有原始順序一致的記憶體模型)的事實有關。現代 x86 記憶體模型適用于 486 和更高版本的 SMP 系統。lock xchg
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459729.html
