x86-64的几种运行模式
x86-64的几种运行模式的总结
概览
在32位时代,x86的operating mode有3种,实模式(Real Mode),保护模式(Protected Mode),虚拟8086模式(Virtual 8086 Mode)。
到了64位时代,又添加了长模式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位操作系统上运行,就必须重新编译了。
各个模式之间的转换:
cpu运行模式
通过下面这个表我们可以看到x86-64
中的运行模式
在32位时代,x86的operating mode有3种,实模式(Real Mode),保护模式(Protected Mode),虚拟8086模式(Virtual 8086 Mode)。
legacy mode传统模式
由于long
模式的出现,所以AMD将之前的模式称之为传统模式。就是实模式、保护模式、虚拟8086模式。
传统模式与 x86
架构的现有 32
位处理器实现兼容。实现 AMD64
架构的处理器以传统实模式启动,就像实现传统 x86
架构的处理器一样。
实模式
复位或上电后,处理器始终首先进入实模式。保护模式是从实模式进入的。实模式是处理器初始化时的初始操作模式,它向后兼容原始 Intel 8086
和 Intel 8088
处理器。如今,实模式主要由操作系统引导加载程序使用,架构需要在转换到更高模式之前配置虚拟内存详细信息。任何需要通过传统 BIOS
风格的接口与系统固件进行通信的操作系统也可以使用此模式。
实模式支持使用简单的基于寄存器的内存分段的 16
位程序。它不支持分页或保护检查。在实模式下运行的程序最多可以访问 1MB
的内存空间。
保护模式
一般的应用程序都运行这个模式下。保护模式支持 16
位和 32
位程序,具有内存分段、可选分页和特权检查功能。在保护模式下运行的程序最多可以访问4GB
的内存空间。
虚拟8086模式
虚拟8086模式是指利用一种硬件虚拟化技术,在i386
的芯片上模拟出多个8086芯片。当处理器进入保护模式后,基于实模式的应用就不能直接运行了,采用虚拟8086模式,则可以让这些实模式的应用运行在基于保护模式的操作系统上,因此这种模式也被称为Virtual Real Mode
。
该模式支持在保护模式下作为任务运行 16 位实模式程序。它使用简单形式的内存分段、可选分页和有限的保护检查。在虚拟8086模式下运行的程序最多可以访问1MB
的内存空间。
长模式
进入64位的x64处理器时代后,产生了一种新的运行模式,叫Long Mode
(intel手册里还把它叫做IA-32e Mode),传统的三种模式则被统称为Legacy Mode。Long Mode又分为2种子模式,分别是64位长模式(64-Bit Mode)和64位兼容模式(Compatibility Mode)。
64bit长模式
在64bit的机器上,64bit的应用程序都运行在64bit长模式。同时32bit、16bit的原运行在保护模式下的应用程序则运行在64bit兼容模式。但是实模式和虚拟8086模式则不可以运行在64bit兼容模式。但是,可以通过创建在所需模式下运行的虚拟处理器,从在支持 VT-x 或 AMD-V 的处理器上以长模式运行的操作系统启动此类程序。
兼容模式
在兼容模式下运行的应用程序使用 32
位或 16
位寻址,并且可以访问前 4GB
的虚拟地址空间。传统 x86
指令前缀在 16
位和 32
位地址和操作数大小之间切换。
与 64
位模式一样,兼容性模式由操作系统在单个代码段的基础上启用。然而,与 64
位模式不同的是,x86
分段功能与传统 x86
架构中相同,使用 16
位或 32
位保护模式语义。从应用程序的角度来看,兼容模式看起来就像传统的 x86
保护模式环境。然而,从操作系统的角度来看,地址转换、中断和异常处理以及系统数据结构都使用 64
位长模式机制。
参考资料
AMD64 Architecture Programmer’s Manual Volume 1:Application Programming
AMD64 Architecture Programmer’s Manual Volume 2:System Programming*