失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

时间:2019-05-09 19:12:20

相关推荐

Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

Processor Operation Mode

IA-32架构支持3种操作模式,和一种类操作模式(quasi-operating mode):

实地址模式/实模式(real-address mode): 这种模式最早可以追溯到Intel 8086处理器上,IA-32架构支持的实模式有一些扩展(例如可以切换到保护模式或系统管理模式)保护模式(protected mode):这是IA-32架构的原生操作模式,提供了丰富的架构特性,灵活性,高性能和既有软件的向后兼容性。系统管理模式(system management mode - SMM):起至Intel386 SL处理器,SMM模式是IA-32处理器的标准特性。这种模式为操作系统和系统管理软件提供了一种透明的机制,用于实现电源管理和OEM厂商特有的特性。通过激活外部系统中断引脚(SMI#),产生系统管理中断SMI,由此可以进入SMM模式。在进入SMM时,处理器切换到单独的地址空间,同时会保存当前运行的程序/任务的环境上下文。这样SMM专用的代码可以透明地执行(即操作系统/应用程序不受SMM模式的代码影响)。当退出SMM模式后,处理器被置于SMI之前的状态,继续执行被中断的程序/任务。虚拟8086模式(即上述的类操作模式):在保护模式下,处理器支持这种被称为虚拟8086模式的类操作模式,使得处理器可以在受保护的,多任务环境下执行8086软件。

注:虚拟8086模式不是一种独立的操作模式,可以看作是保护模式下的一个特殊子模式,用于执行8086的实模式指令,但是不同于处理器位于实地址模式。

Intel 64架构支持IA-32架构上的所有模式,以及新的IA-32e模式:

IA-32e模式:在IA-32e模式,处理器支持2种子模式:兼容模式与64位模式。64位模式提供了64位的线性地址寻址方式,支持超过64G字节的物理地址空间。兼容模式允许大多数传统的保护模式的程序无需修改即可运行。

注:(本段不涉及16位实模式程序)在支持IA-32e模式的处理器上运行32位操作系统,则不会启用IA-32e模式,也无法使用64位地址空间,且只能运行传统的32位保护模式的应用程序。只有安装了64位操作系统,才可以运行64位应用程序,此时处理器运行在IA-32e模式;若运行传统的32位保护模式的应用程序,则处理器切换为兼容模式。64位模式与兼容模式被设计为可以快速切换。

注:下图是处理器各种操作模式的切换图与切换方式,但是要注意的是RSM指令导致的模式切换必须要遵循从哪里来回哪里去的原则,即从实模式通过SMI进入SMM模式,通过RSM指令只能返回到实模式,不能切换到其他模式,例如保护模式或者IA-32e模式。在图中用不同颜色的椭圆表示这个原则。

在加电冷启动,或者重置reset后,处理器处于实地址操作模式。CR0寄存器的PE标志位可以用于控制处理器在实模式与保护模式之间的切换。

EFLAGS标志寄存器的VM标志位用于控制处理器在虚拟8086模式与保护模式之间的切换。这两种模式的转换通常是随着任务切换或中断/异常处理返回实现的。

IA32_EFER寄存器(注:参看后文)的LMA[bit 10]标志位决定处理器是否运行在IA-32e模式。当运行在IA-32e模式时,代码段的CS.L标志位决定运行在哪种字模式:64位模式或兼容模式。通过启用分页机制,设置IA32_EFER.LME[bit 8]标志位,处理器可以从保护模式切换进入IA-32e模式。

无论何时接收到SMI中断且无论处理器处于何种操作模式(实模式,保护模式,虚拟8086模式,IA-32e模式,但是SMM模式除外),处理器都会切换进入SMM模式。当执行RSM(SMM返回)指令后,处理器会切换回SMI发生时的操作模式。

Extended Feature Enable Register

IA32_EFER寄存器提供了几个域,用于启用IA-32e模式及其相关的操作。还有一个域,与修改页面访问权限有关。下面是IA32_EFER寄存器的域布局:

注1:其他标志位都是保留位。

注2:如果逻辑处理器的CR0.PG=1, CR4.PAE=1,且IA32_EFER.LME=0,则启用了PAE分页机制,32位的线性地址会被转换为52位的物理地址。如果处理器支持的最大地址宽度MAXPHYADDR[3]小于52位,则51:MAXPHYADDR之间的比特位都会设置为0.

注3:可以使用CPUID.80000008H.EAX[7:0]获得处理器支持的最大物理地址宽度。对于不支持CPUID.80000008H指令的处理器,如果CPUID.01H:EDX.PAE[bit 6]=1,则最大物理地址宽度是36位,否则是32位。

如果觉得《Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。