已棄用 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 操作將始終失敗。