3

我想知道,微处理器(比如说在长模式下的 SandyBridge 架构上)如何将数据从“L1 代码”切换到“L1 数据”缓存,反之亦然?假设一个页面用于数据存储,因此它被缓存在 L1 缓存中。然后,在 OS 执行过程中,指令指针跳转(发出 JMP 指令)到当前缓存在 L1 数据缓存中的内存位置。处理器是否将数据从 L1 数据迁移到 L1 代码缓存?当数据管理指令在存储在 L1 代码缓存中的地址上发出时,同样的问题(即意味着该地址变得适合数据存储,而不是代码执行) 处理器如何处理这些问题?

我问这个是因为我正在研究自我修改代码,如果您有任何其他信息可以阅读有关代码缓存的详细信息,请发布链接/参考。

4

1 回答 1

3

请参阅最新的英特尔程序员手册,第 3 卷,系统编程,特别是以下部分:

  • 8.1.3 处理自修改和交叉修改代码
  • 11.6 自修改代码

我认为您不想了解并依赖特定 CPU 型号的行为,因为它会使您的代码在不同或更新的 CPU 上不稳定。只需遵循有关如何设计和执行自我和交叉修改代码的官方指南。

而且您不想在运行时进行大量代码修改,因为缓存失效会导致相关的性能损失。

于 2011-10-31T01:42:19.980 回答