模拟器如何处理翻译内存障碍(隐式和显式)?

Jos*_*vin 5 multithreading emulation virtual-machine memory-barriers lockless

假设源和目标架构不同,模拟器如何有效地转换内存障碍?我知道通常现代模拟器将使用JIT从源ISA转换到目标ISA,但知道哪些代码可以通过多个程序计数器访问,哪个不是很棘手,然后知道哪些指令可以安全地重新排序(由于ISA差异,JIT可能需要生成一些有效的东西),这似乎并不是非常棘手.

您甚至不能保证在指令流中找到明确的内存屏障,例如x86上的许多人依赖于对齐的字写入是原子的.模拟器是否保守地假设每个对齐的字写不能重新排序?这似乎是一个潜在的巨大开销,这让我想知道是否有任何已知的分析来解决这类问题.