软件模拟已弃用的 SWP 指令 (CONFIG_SWP_EMULATE)¶
ARMv6 架构弃用了 SWP/SWPB 指令,并建议转向使用加载锁定/存储条件(load-locked/store-conditional)指令 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 依赖于一个名为全局监视器(global monitor)的外部事务监控模块来维持更新的原子性。如果您的系统没有实现全局监视器,此选项可能会导致对未缓存内存执行 SWP 操作的程序陷入死锁,因为 STREX 操作将总是失败。