首页 文章

x86-64和远程呼叫/跳转

提问于
浏览
4

快速摘要:在x86-64模式下,远程跳转速度与x86-32模式一样慢?

在x86处理器上,跳转分为三种类型:

  • short,PC偏移量为-127字节(2字节指令)

  • 附近,带有/ - 32k偏移量"rolls around"当前段(3字节指令)

  • 远,可以跳到任何地方(5字节指令)

短时和近跳需要1-2个时钟周期,而远跳需要50-80个时钟周期,具体取决于处理器 . 从我对文档的阅读来看,这是因为它们“走出CS,当前的代码段” .

在x86-64模式下,不使用代码段 - 该段实际上始终为0..infinity . 因此,走出一个区段不应该受到惩罚 .

因此,问题是:如果处理器处于x86-64模式,那么时钟周期的数量是否会因跳远而发生变化?

相关的红利问题:大多数以32位保护模式运行的类似* nix的操作系统明确地将段大小设置为0..infinity并完全通过页表管理线性 - >物理转换 . 他们是否从远程调用的时间(更少的时钟周期)中获益,或者自8086以来,大小段寄存器的内部CPU遗留是否真的受到了损失?

1 回答

  • 1

    CS不仅用于base和limit,还用于权限 . CPL在那里被编码,以及其他字段,例如:

    • D位 - 32位或16位默认段大小

    • L位 - 为段选择兼容性或64位模式(在这种情况下,基数和限制很重要)

    远程跳转也可以通过任务门,远程呼叫也可以通过呼叫门 . 无论64位模式如何,都必须处理所有这些 .

    总而言之,64位模式的远程跳转并不比32位模式快 . 实际上,考虑到启用64位模式时,段描述符的大小是禁用64位模式时的两倍,所有描述符表访问都加倍,这可能会延长跳转时间 .

相关问题