已弃用 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 操作将始终失败。