| 适用机型: |
| 所有xSeries 100; 所有xSeries 206; 所有xSeries 206m; 所有xSeries 226; 所有xSeries 236; 所有xSeries 260; 所有xSeries 306; 所有xSeries 306m; 所有xSeries 336; 所有xSeries 346; 所有xSeries 366; 所有xSeries 460 |
EM64T(Intel Extended Memory 64 Technology - 英特尔64位扩展技术)其实也是一种x86-64位的扩展,对于处理器来说64位同16位、32位的运算模式并没有很大差别,这里64位指的是处理器单次操作数据宽度,或者是说处理器的General Purpose Register(通用寄存器)可以容纳下的数据位数(bit)。因此可以这么认为一个64位处理器实际上就是一个通用寄存器可以容纳64位数据的处理器,64位指令也就是操作64位数据的指令。
在上图中,黑色块表示代码,白色块表示数据,而灰色块表示结果。很明显相比32位处理器,64位处理器代码流的数量并没有有改变,其宽度随着指令代码的宽度而变化;而数据流的宽度则增加了一倍,这是为了容纳更多的数据,同样的,寄存器和内部数据通道也必须加倍。
在64位处理器中的寄存器位数是32位处理器中的两倍,不过正在实行指令的指令寄存器(IR,Instruction register)却都是一样的。再次说明,数据流加倍而指令流不变,此外我们可以发现程序计数器(PC,Program Counter)也加倍了。在上面的简单处理器示意图中,它所处理的数据是整数和地址两种类型(不过实际上,地址型数据就是一种特殊类型的整数数据)。两种数据都储存在通用寄存器中,并都可以在ALU(算术逻辑单元)中进行计算。现代的处理器还支持其它两种数据类型:浮点和矢量,这两种类型的数据都有自己的寄存器和执行单元。
从上面的介绍我们其实应该很容易理解到底什么是64位计算,那么在64位计算中增加整数和数据指令位数的最大好处是什么呢?很显然其最终的目的就是提高动态范围。在通常使用的十进制中,我们只能得到最多10个整数(一位数情况下),这是因为0-9中只有10个不同的符号来表示相应的意思,想要表示10以上的 数就需要增加一位数,两位数(00-99)才可以表示100个数。我们可以得出十进制的动态范围(Dynamic range,DR)的计算公式:DR=10n(n表示数字位数)。
在二进制体系中,相应的我们可以达到公式:DR=2n,那么目前使用的32位就可以达到232=4.3×109,升级到64位之后,就可以达到264=1.8×1019。动态范围提高了43亿倍。由于地址使用的是特殊的整数,一个ALU和寄存器就可以处理更大的整数,也就是具有更宽的地址宽度,一个32位处理器的寻址空间最大为4GB,而64位的处理器在理论上则可以达到1800万个TB(1TB=1024GB)。
不过,需要注意的是我们上面讨论是寻址空间为真64位的处理器,那么在EM64T中情况又如何呢?目前英特尔的EM64T使用的是48位的虚拟寻址空间和40位的物理寻址空间,从理论数据上来说,48位的虚拟寻址空间最高可以达到282TB的寻址空间,而40位的物理寻址空间注定处理器拥有大约1TB左有物理内存的寻址空间大小,这样相比目前32位x86处理器最高4GB的内存容量支持度来说显然是提升了太多了。
EM64T最大的优势就是完全兼容现存的x86代码,不管是32位还是更早的16位。EM64T是通过模式之间的嵌套实现这种特性的。英特尔把这种工作模式称为IA-32e,这个模式又包含了两个子模式:兼容模式(compatibility)和64位模式(64-bit)。
l 兼容模式就是提供给传统的16位以及32位应用程序在64位操作系统下运行使用的。很多原来的程序不需要经过重新编译就可以通过这种模式在64位环境下运行,不过这些程序需要使用标准的IA-32(也就是我们常说的32位x86指令)、寄存器操作等,不过在这个模式下其内存访问也被限制在最高4GB模式下,也就是说在这个模式下几乎处理器就是一颗正常的32位处理器,所有原来英特尔32位处理器可以运行的程序,在这个模式下都可以运行。
l 64位模式则为那些64位应用所准备的,需要通过EM64T编译器重新编译才可以运行,在这个模式下程序允许超过4GB的内存寻址,在这个模式下支持EM64T技术的处理器才可以真正的使用到新增加的8个通用寄存器和8个SIMD寄存器,并且在这种运行模式下,处理器真正扩展到了64位。
特别需要注意的是:英特尔的EM64T技术处理器中,如果操作系统不支持,其将只能工作在普通的IA-32模式(32位x86),而不是IA-32e模式。当使用支持EM64T扩展的操作系统时,IA-32e模式会被自动启动。