首发于术道经纬
x86-64处理器的几种运行模式

x86-64处理器的几种运行模式

在32位时代,x86的operating mode有3种,实模式(Real Mode),保护模式(Protected Mode),虚拟8086模式(Virtual 8086 Mode)。实模式和保护模式已经在这个系列的文章里介绍过了。

虚拟8086模式是指利用一种硬件虚拟化技术,在i386的芯片上模拟出多个8086芯片。当处理器进入保护模式后,基于实模式的应用就不能直接运行了,采用虚拟8086模式,则可以让这些实模式的应用运行在基于保护模式的操作系统上,因此这种模式也被称为Virtual Real Mode。

进入64位的x64处理器时代后,产生了一种新的运行模式,叫Long Mode(intel手册里还把它叫做IA-32e Mode),传统的三种模式则被统称为Legacy Mode。Long Mode又分为2种子模式,分别是64位长模式(64-Bit Mode)和64位兼容模式(Compatibility Mode)。

因为Long Mode使用64位虚拟地址,所以不管是64-Bit Mode还是Compatibility Mode的,都要求操作系统和工具链必须是64位的,其中64-Bit Mode又要求应用程序也得是64位的(纯纯的64位啊)。

因此,现存的32位应用程序可以不经重新编译就在处于Compatibility Mode的64位操作系统上运行,但要在处于Long Mode的64位操作系统上运行,就必须重新编译了。

相比于x86,x64不仅将寄存器位宽增加到了64位,还增加了若干寄存器。通用寄存器GPRs(General Purpose Registers)从8个增加到16个,用于SSE/AVX指令集的XMM/YMM寄存器组的数量也翻倍了。更多的GPRs意味着编译器在使用寄存器保存变量时,有了更多的选择,可以减少memory traffic,进而提高软件的性能表现。

RISC架构的ARM从32位时代开始就有R0~R15共16个GPRs,现在CISC架构的x84的GPRs不仅数量增加了,连命名都跟ARM差不多了。只是……现在64位的ARM已经开始使用X0~X30共31个GPRs了。

从Lagacy Mode到Long Mode

置位EFER寄存器的LME位可以使能long mode。由于long mode要求paging必须开启,所以在进入long mode之前,还需要置位CR0寄存器的PG位。通过设置code segment的L位可在64-Bit Mode和Compatibility Mode之间切换。

不同模式下的内存管理

实模式下只有shift-and-add方式的segmentation,没有paging,80286保护模式下只有table-based方式的segmentation,也没有paging。80386及其之后的处理器同时有table-based方式的segmentation和paging,其中paging是可选的。

在64-Bit Mode下,segmentation机制虽然还存在,但已经被极度弱化,可以被忽略。Compatibility Mode对segmentation和paging的使用同保护模式类似,区别在于这里paging是必须的,不可以绕过。

Legacy Mode支持的最大虚拟地址为32位,普通page的大小是4KB, large page的大小可以是2MB或4MB(请参考这篇文章)。Long Mode理论上支持的最大虚拟地址为64位,普通page的大小也是4KB,large page的大小则可以是2MB或1GB(根据不同处理器架构的不同实现,其支持的最大虚拟地址和最大物理地址的位数会有所不同)。

其他差异

在Legay Mode中,用户空间可通过SYSENTER指令进入内核空间,内核空间则通过SYSEXIT指令返回用户空间。在此过程中,由于发生了segment切换,所以需要进行segmentation的各种检测,比较影响效率(因为segmentation和paging本来就是重复的,参考这篇文章)。

在Long Mode中,伴随着segmentation的弱化和flat momery model的使用,这2个指令不再被支持,取而代之的不需要segmentation检测的SYSCALL和SYSRET指令。

此外,Legacy Mode还提供了一种叫task-state segment (TSS) 的硬件机制,可以在发生task switch时,自动保存task的状态信息,可理解为硬件辅助的进程切换。由于主流操作系统很少用到这一机制,在Long Mode中已经不再支持TSS。


参考:

AMD64 ArchitectureProgrammer's Manual


原创文章,转载请注明出处。

编辑于 2020-11-07 16:24