2010-07-02 62 views
4

快速概要:在x86-64模式下,远远落后于x86-32模式?x86-64和远程调用/跳转

在x86处理器,跳跃分为三类:

  • 短,与PC偏移的+/- 127个字节(2字节指令)
  • 附近,具有+/- 32K偏移“辊上”当前段(3字节指令)
  • 远,这可以在任何地方跳(5字节的指令)

短和靠近跳跃需要1-2个时钟周期,而远跳取50 -80个时钟周期,具体取决于处理器。从我阅读文档的时候,这是因为他们“脱离目前的代码段CS”。

在x86-64模式下,不使用代码段 - 段实际上始终为0..infinity。埃尔戈,不应该因为去一个细分市场而受到惩罚。

因此,问题:如果处理器处于x86-64模式,时钟周期数是否会因远跳而改变?

相关奖金问题: - 通过页表>物理转换完全在32位保护模式下运行大多数* nix-like操作系统明确设置分割大小来0..infinity和管理的线性。从远程调用的时间(更少的时钟周期)来看,他们是否从中受益?还是从8086开始,大小段寄存器中的内部CPU遗留问题真的成为了损失?

+1

您对\ * nix系统的评论也适用于Windows,AFAIK。我不认为有任何实际使用代码段的现代操作系统。 – 2010-07-02 17:53:44

回答

1

CS不仅用于基本和限制,还用于权限。所述CPL被编码在那里,以及其它领域,例如:

  • d位 - 32位或16位的默认段大小
  • L位 - 为对选择兼容性或64位模式段(在这种情况下,基数和限制是显着的)

远跳也可以通过任务门,而远程调用也可以通过调用门。无论64位模式如何,所有这些都必须处理。总之,64位模式下的远程跳转不会比32位模式下的跳变快。事实上,考虑到当被启用64位模式下,段描述符是两倍大时64位模式下被禁用,所有描述符表的访问被加倍,这可以延长跳跃时。