64 位势不可挡

来源:互联网 发布:什么是软件协会 编辑:程序博客网 时间:2024/05/01 02:41
目前主流CPU使用的64位技术主要有AMD公司的X86-64位技术、Intel公司的EM64T技术、和Intel公司的IA-64技术。其中IA-64是Intel独立开发的“纯64位”技术,不兼容现在的传统的32位计算机,仅用于Itanium(安腾)以及后续产品Itanium 2,一般用户不会涉及到,因此这里仅对AMD的64位技术X86-64和Intel的EM64T技术做一下简单介绍。

AMD的64位技术——X86-64

X86-64技术的实现原理是在原始的32位X86指令集的基础上加入了X86-64扩展64位X86指令集,使处理器在硬件上兼容原来 的32位X86软件,并同时支持X86-64的扩展64位计算,且具有64位的寻址能力,使得这款处理器成为32位/64位兼容X86芯片。

X86-64体系直接支持原有的16位和32位程序和操作系统,对于重新编译之后的64位程序和操作系统它提供了如下一些新的功能:

64位寻址和操作;

8个全新的通用寄存器(GPRS),代号为R8到R15;

8个专为Streaming SIMD Extensions(SSE——多指令多数据流扩展)准备的寄存器;

64位的宽通用寄存器(GPRS)以及指令指针(Instruction Pointer)。

X86-64新增的几组CPU寄存器将提供更快的执行效率。寄存器是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方。标准的32位X86架构包括8个通用寄存器,AMD在X86-64中又增加了8组,将通用寄存器的数目提高到了16组。

X86-64提供了一个能完全直接支持原有操作系统和程序的原始模式,以及一个全新的,能支持这些新功能,也能支持原有应用软件的模式。这个架构还增加了一个指令指示器关联地址模式,单一字节寄存器地址,以及一个快速次序式中断体制。

1. X86-64架构特点

X86-64架构通过两个主要的特性来对原有的X86体系进行扩展:一个被称为“长模式(Long Mode)”的64位扩展,以及扩展寄存器。

长模式是由两个子模式构成的:纯64位模式(64 bit Mode)和兼容模式(Compatibility Mode)。兼容模式提供了对现有16位和32位应用软件的完全兼容,能直接运行所有的现有程序。除了长模式之外,该体系还提供了一个纯粹的X86原始模 式,也就是仅仅能提供16位和32位支持的模式,但在这个模式里可以直接使用的不仅仅是16位和32位的应用软件,还可以使用原有的16位和32位操作系 统。

附表1显示的就是X86-64架构中的模式结构图,并标示了适用情况。



在接下来的文章当中,如果我们提到有关长模式(Long Mode)的词语,那么就意味着纯64位模式和兼容模式两个子模式,当要分开提到纯64位模式或者兼容模式时,我们将会用它们的专用名称,而不是用长模式来指代。

2. 纯64位模式

纯64位模式支持如下的新特性:

64位实地址模式;

通过寄存器前缀(REX)来达到寄存器扩展;

增加8个新的通用寄存器(GPRS),代号为R8到R15;

扩展通用寄存器的宽度到64位;

增加8个128位的SSE寄存器,标号为XMM8到XMM15;

新的RIP关联数据地址模式;

(1)单一字节寄存器地址

默认的情况下,地址宽度是64位,并且默认的操作位宽是32位,这些默认状况可以通过使用前缀模式来修改。一个新的REX模式的前缀,将 使得整个数据结构被扩展成64位,如同过去Intel采用的将16位寄存器扩展成32位一样,整个寄存器被称为RAX模式,而在EAX段之前,通过REX 后扩展成为64位(如图所示)。

(2)RIP关联数据地址

在纯64位模式中,X86-64体系还支持数据地址关联模式,并且直接对应64位的RIP(指令指针)。原始的X86体系仅仅在控制传输指令中支持IP关联地址,而64位模式的RIP关联地址改进了该项特性,扩大了它的应用范围。

3. 兼容模式

兼容模式是提供整个系统运行32位和64位程序的模式,该模式允许16位和32位软件不需要经过重新编译就可以在长模式下直接应用。

在兼容模式下,所有的应用软件对于内存的操作都只能位于前4GB的实物理内存地址之间,标准的X86命令也迫使对寄存器的操作界于16位和32位,64位系统的优势在这里并没有展现。

同纯64位模式的情况一样, 兼容状态是操作系统在相对独立的数据段的基础上建立起来的。不同于纯64位模式的在于X86指令集的分割,不过只要在使用16位和 32位保护模式的情况下都能正常工作。

4. 原始模式

原始模式完全与X86模式相同。如果希望模拟一个完整的,并且真实的X86结构模式的话,那么只需要安装一个现有的操作系统,包括 Windows 98和Windows 2000,那么CPU将自动调整为这个模式,并完全兼容现有程序,使用的时候与K7和Pentium III没有什么区别。

Intel的64位技术——EM64T

1. EM64T定义

Intel官方是给EM64T这样定义的:EM64T全称Extended Memory 64 Technology,即扩展64bit内存技术。EM64T是Intel IA-32架构的扩展,即IA-32e(Intel Architectur-32 extension)。IA-32处理器通过附加EM64T技术,便可在兼容IA-32软件的情况下,允许软件利用更多的内存地址空间,并且允许软件进行 32位线性地址写入。EM64T特别强调的是对32位和64位的兼容性。

Intel为了实现EM64T,特别为处理器核心做出以下改进:

(1)使用64位寄存器(Register)和内存指针(Memory Pointers)

处理器新加入64 bit指令寄存器和内存指针是为了能实现64 bit内存寻址。

(2)增强的SSE(Stream SIMD Extensions)和GPRs(General-Purpose Registers)

Intel为新核心增加了8个64位GPRS(R8-R15),并且把原有GRPS全部扩展为64位,如前文所述这样可以提高整数运算能力。增加8个128位 SSE寄存器(XMM8~XMM15),是为了增强多媒体性能,包括对SSE、SSE2和SSE3的支持。

2. EM64T的运行模式

既然EM64T是一种兼容性很强的64位扩展技术,那么它是如何工作的呢?Intel为支持EM64T技术的处理器设计了两大类:传统 IA-32模式(legacy IA-32 mode)和IA-32e扩展模式(IA-32e mode),两大类下又具体分为多种运行模式,附表2。

EM64T有这么多种复杂的运行模式,那么处理器又是怎么识别的呢?

在支持EM64T技术的处理器内有一个称之为扩展功能激活寄存器的部件,其中的Bit 10控制着EM64T是否激活。Bit 10被称作IA-32e模式有效(IA-32e mode active)或长模式有效(long mode active,LMA)。当LMA=0时,处理器便作为一颗标准的32位(IA32)处理器,运行在传统IA-32模式;当LMA=1时,EM64T便被 激活,处理器会运行在IA-32e扩展模式下。

下面我们来说说IA-32e扩展模式下CPU的运行状况,看完之后传统IA-32模式下的情况也会一清二楚。

在IA-32e扩展模式下也有两种模式:兼容模式和64位模式。两者都需要64位操作系统和64位驱动程序的支持,但其中只有64位模式是真正64位计算。

在64位模式下,必须要有64位的操作系统、驱动程序和应用程序三者合作,此时处理器内的新增的8个64位GPRS(R8~R15)和8 个128 位SSE寄存器(XMM8~XMM15)才会被激活,原有的8个GPRS(RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP)宽度也会同时扩展为64位,并且64位指令指针启用。此时处理器才能利用64位指令操作来支持64位内存寻址,还可以进行双精度(64位)整数运 算。





而在另一种兼容模式下,计算机允许在64位操作系统下不需要预编译就可以运行大多数传统16位或32位应用程序,这和传统IA-32模式 下基本相同,只不过此时的操作系统和驱动程序都是64位的。在兼容模式下,64位应用程序也可以直接像传统32位程序那些运行,而不需要重新编译。

我们可以看出,在不同模式的转换中,处理最大的变化便是寄存器的改变。这正是因为64位与32位定义的最大不同就是在寄存器上。

从附表3中我们可以看到处理器的寄存器在不同模式下的变化情况。虽然支持EM64T的Prescott核心拥有16个GPRS,但它们并非任何时候都会工作的,Intel根据不同的运行模式定义了他们的工作状态。

总结:通过以上的描述,可以发现Intel与AMD两者的处理器核心还是有着本质区别的,虽然在实现64位的运行模式上大同小异。我们可以简单的看做AMD的K8核心是兼容32位计算的64位处理器,而采用EM64T技术的处理器则是能扩展进行64位计算的32位处理器。