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 8086Intel 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*


x86-64的几种运行模式
https://ysc2.github.io/ysc2.github.io/2024/01/01/x86-64的几种运行模式/
作者
Ysc
发布于
2024年1月1日
许可协议