已棄用 SWP 指令的軟體模擬 (CONFIG_SWP_EMULATE)

ARMv6 架構已棄用 SWP/SWPB 指令的使用,並建議遷移到載入鎖定/儲存條件指令 LDREX 和 STREX。

ARMv7 多處理擴充套件引入了停用這些指令的能力,在執行時會觸發未定義的指令異常。 捕獲的指令使用 LDREX/STREX 或 LDREXB/STREXB 序列進行模擬。 如果發生記憶體訪問錯誤(中止),則會向觸發進程發出段錯誤訊號。

/proc/cpu/swp_emulation 儲存一些統計資訊/資訊,包括上次觸發模擬呼叫的程序的 PID。 例如

Emulated SWP:         12
Emulated SWPB:                0
Aborted SWP{B}:               1
Last process:         314
注意

當訪問未快取的共享區域時,LDREX/STREX 依賴於稱為全域性監視器的外部事務監視塊來維護更新的原子性。 如果您的系統未實現全域性監視器,則此選項可能會導致執行 SWP 操作到未快取記憶體的程式死鎖,因為 STREX 操作將始終失敗。