x86-64和远处的电话 /跳跃
-
02-10-2019 - |
题
快速摘要:在X86-64模式下,跳跃的速度与X86-32模式一样慢?
在X86处理器上,跳跃分为三种:
- 简而
- 附近,带有+/- 32K偏移,“滚动”当前段(3个字节说明)
- 远处可以跳到任何地方(5个字节指令)
短而近的跳跃需要1-2个时钟循环,而远距离跳跃则取决于处理器,摄入50-80个时钟周期。从我对文档的阅读中,这是因为它们“走出CS,当前代码段”。
在X86-64模式下,未使用代码段 - 该段实际上总是0. infinity。 Ergo,不应该因进入细分市场而受到惩罚。
因此,问题:如果处理器处于X86-64模式,则时钟循环的数量是否会改变远?
相关奖励问题:以32位保护模式运行的大多数 *类似Nix的操作系统将细分尺寸明确设置为0. imfinity并完全通过页面表管理线性 - >物理翻译。他们是否从遥远的呼叫(较少的时钟周期)的时间里从中受益,还是从8086年以来的尺寸细分寄存器中的内部CPU遗产真的是内部的CPU遗产?
解决方案
CS不仅用于基础和限制,还用于权限。 CPL在那里编码,以及其他字段,例如:
- D-BIT-32位或16位默认段尺寸
- L-BIT-为段选择兼容性或64位模式(在这种情况下,基础和限制很重要)
远距离跳跃也可以通过任务门,而远的通话也可以通过呼叫门。所有这些都必须处理,无论64位模式如何。
总而言之,在64位模式下的远距离跳跃不比32位模式快。实际上,考虑到启用了64位模式时,段描述符的大小是禁用64位模式时的两倍,所有描述符访问访问量都会加倍,这可能会延长跳跃的时间。
不隶属于 StackOverflow