x86架构是否会在代码段(CS段)之外执行预取操作?
x86预取器与CS段越界的故障处理
预取器越界访问CS段外内容时,不会立即触发故障,这是x86架构的设计保证。
- 预取属于推测性操作,只有当CPU实际尝试执行该越界地址的指令(也就是EIP真正进入禁止区域)时,才会触发#GP(一般保护故障)或对应的段越界故障。
- 预取器在设计上会忽略这类推测性访问的错误,毕竟此时程序流还没走到该地址,触发故障只会打断正常执行流程,完全没必要。
关于文档记载:
- 英特尔和AMD的官方架构手册里都明确了这个规则。比如英特尔《Intel 64 and IA-32 Architectures Software Developer's Manual》第3卷(系统编程指南)中,段保护和预取机制相关章节提到,推测性的指令预取不会引发段故障,只有指令被实际提交执行时才会检查段边界。
- AMD的《AMD64 Architecture Programmer's Manual》卷2(系统编程)里也有类似描述,说明预取操作的错误不会被立即报告,要延迟到指令执行阶段才处理。
内容的提问来源于stack exchange,提问作者distributed
相关产品推荐
相关产品推荐

