快速摘要:在x86-64模式下,远程跳转速度与x86-32模式一样慢?
在x86处理器上,跳转分为三种类型:
短跳和近跳需要1-2个时钟周期,而远跳需要50-80个时钟周期,具体取决于处理器。从我对文档的阅读来看,这是因为它们“在CS之外,当前的代码段。”
在x86-64模式下,不使用代码段 - 该段实际上始终为0..infinity。因此,走出某个细分市场不应该受到惩罚。
因此,问题是:如果处理器处于x86-64模式,则跳转的时钟周期数是否会发生变化?
相关红利问题:大多数以32位保护模式运行的类似* nix的操作系统明确地将段大小设置为0..infinity并管理线性 - >物理翻译完全通过页面表。他们是否从远程调用的时间(更少的时钟周期)中获益,或者自8086以来,大小段寄存器的内部CPU遗留是否真的受到了损失?
答案 0 :(得分:1)
CS不仅用于base和limit,还用于权限。 CPL在那里被编码,以及其他字段,例如:
远程跳跃也可以通过任务门,远程呼叫也可以通过呼叫门。无论64位模式如何,都必须处理所有这些。
总而言之,64位模式的远程跳跃并不比32位模式快。实际上,考虑到启用64位模式时,段描述符的大小是禁用64位模式时的两倍,所有描述符表访问都加倍,这可能会延长跳转时间。