Intel软件开发者手册

IA-32与IA-64的运行模式

IA-32架构

  • 保护模式Protected mode——CPU的原生状态。保护模式的诸多特性之一,在保护模式下可直接运行多个“实地址模式”的8086软件。这个特性被称为“虚拟8086模式”,但它实际上并不是一种处理器模式,而仅仅是保护模式下可以被任何task启用的特性。此模式可以完全发挥处理器的全部性能。
  • 实地址模式Real-address mode——完全实现了Intel 8086处理器的功能,还提供了额外的扩展。例如可以切换到保护模式和系统管理模式。处理器在开机或重启后,会被置于此模式下。BIOS、BootLoader、操作系统会切换到保护模式,甚至还会从保护模式切换回实地址模式,最终完成系统开机还是切换到保护模式运行。此模式有大量限制,只相当于一颗单核性能爆表的8086处理器,无法发挥处理器的全部性能。
  • 系统管理模式System management mode (SMM)——此模式为操作系统提供了一个用于实现特定平台功能的透明机制,包括电源管理和系统安全。当外部SMM中断管脚SMI#为启动,或者APIC收到一个SMI时,处理器会进入SMM模式。此模式下,处理器会在保存当前正在运行任务的上下文,然后切换到一个独立的地址空间。特定的SMM代码会在此模式下透明地执行。退出SMM模式时,处理器会回到先前状态,当前运行的任务无法感知。

IA-64架构

IA-64相比IA-32,增加了IA-32e模式。IA-32e有2种子模式,兼容模式和64位模式。

  • 兼容模式Compatibility mode (sub-mode of IA-32e mode)——兼容模式允许之前的16位和32位应用程序直接运行在64位操作系统下,无需重新编译和修改。兼容模式支持64位模式和保护模式下的所有特权级别,但是运行于虚拟8086模式或者使用了硬件任务管理的软件无法在此模式运行,也就是说你不能让64位操作系统的一个普通应用程序直接充当一个32位的操作系统。兼容模式的启用基于操作系统的代码段来控制,因此同一个操作系统可以同时支持64位应用程序运行于64位模式,和旧版32位应用程序运行于兼容模式(不重新为64位编译)。兼容模式类似于32位保护模式,应用程序只能访问低4GB线性地址空间。同样类似于保护模式,应用程序可以利用PAE访问超过4GB物理内存。
  • 64位模式64-bit mode——64位模式下,64位操作系统运行的应用程序可以访问64位线性地址空间。64位模式将通用寄存器和SIMD扩展寄存器数量从8个增加到16个。此模式还引入了新的操作码前缀REX来访问寄存器扩展。

也就是说,64位Intel处理器有5种具体的运行模式。
说到运行模式切换,就不得不提操作系统。操作系统内核完全启动后,只会固定在一个运行模式下。这里我们不考虑操作系统内核脑子抽了非要降级到其他模式的复杂情形,否则现有操作系统架构会变得超级复杂,而这种复杂是毫无必要的。

  • 16位操作系统只能运行在实地址模式下。它的16位应用程序也在实地址模式运行。
  • 32位操作系统会从实地址模式切换到保护模式,稳定在保护模式下运行。它的应用程序无论32位还是16位都运行于保护模式。其中16位应用程序仅仅是利用保护模式的一个特性,虚拟8086模式。
  • 64位操作系统会从实地址模式切换到保护模式再切换到IA-32e模式。这个模式内操作系统可以通过代码段方式为应用程序切换子模式。