x86-64架构的运行
基本简介
AMD的64 bit技术包括了完整的x86-64结构体系,这个体系是通过对x86结构的扩展,增加64位指令集而得到的。x86-64体系直接支持原有的16位和32位程序和操作系统,对于重新编译之后的64位程序和操作系统它提供了如下一些新的功能:
1) 64位寻址和操作
2) 8个全新的通用寄存器(GPRs)
3) 8个专为Streaming SIMD Extensions(SSE——多指令多数据流扩展)准备的寄存器
4) 64位的宽通用寄存器(GPRs)以及指令指针(Instruction Pointer)
x86-64提供了一个能完全直接支持原有操作系统和程序的Legacy模式,以及一个新的,能支持这些新功能,也能支持原有应用软件的模式。这个架构还增加了一个指令指示器关联地址模式,单一字节寄存器地址,以及一个快速次序式中断体制。
64位架构产生的目的
产生的原动力其实是来自于需要大内存寻址的应用软件的需要。在一些需要超级性能的高端服务器、数据库系统,以及一些计算机辅助设计工具中,64位的寻址以及增加的寄存器都将为其带来莫大好处。在原先的x86架构中,数量较少的寄存器也限制了一些需要大运算量的软件,例如在图形的T&L,事件模拟,以及一些科学运算中。增多寄存器数量对大多数程序来说都是有相当的性能提高的。
x86-64架构特点
x86-64架构通过两个主要的特性来对原有的x86体系进行扩展:一个被成为“长模式(Long Mode)”的64位扩展,以及扩充寄存器。
长模式(Long Mode)
长模式是由两个子模式构成的:纯64位模式(64 bit Mode)和兼容模式(Compatibility Mode)。兼容模式提供了对现有16位和32位应用软件的完全兼容,能直接运行所有的现有程序。除了长模式之外,该体系还提供了一个纯粹的x86原始模式,也就是仅仅能提供16位和32位支持的模式,但在这个模式里可以直接使用的不仅仅是16位和32位的应用软件,还可以使用原有的16位和32位操作系统。
下面这个表格显示的就是x86-64架构中的模式结构图,并标示了适用情况。
另外,在接下来的文章当中,如果我们提到有关长模式(Long Mode)的词语,那么就意味着纯64位模式和兼容模式两个子模式,当要分开提到纯64位模式或者兼容模式时,我们将会用它们的专用名称,而不是用长模式来指代。
选择模式 | 操作系统 | 程序是否需要重新编译 | 默认状态 | ||||
地址位 | 操作位 | 扩展寄存器 | GPR宽度位 | ||||
长模式 | 64位模式 | 新的64位操作系统 | 是 | 64 | 32 | 是 | 64 |
兼容模式 | 否 | 32 | 32 | 否 | 32 | ||
16 | |||||||
Legacy Mode | 原先的操作系统 | 否 | 32 | 32 | 否 | 32 | |
16 | 16 | ||||||
1、默认可以在大多数使用缀结构时或者受系统控制时不必考虑; |
纯64位模式:纯64位模式支持如下的新特性:
1) 64位实地址模式;
2) 通过寄存器前缀(REX)来达到寄存器扩展;
3) 增加8个新的通用寄存器(GPRs),代号为R8到R15;
4) 扩展通用寄存器的宽度到64位;
5) 增加8个128位的SSE寄存器,标号为XMM8到XMM15;
6) 新的RIP关联数据地址模式;
7) 单一字节寄存器地址。
默认的情况下,地址宽度是64位,并且默认的操作位宽是32位,这些默认状况可以通过使用前缀模式来修改。一个新的REX模式的前缀,将使得整个数据结构被扩展成64位,如同过去Intel采用的将16位寄存器扩展成32位一样,整个寄存器被成为RAX模式,而在EAX段之前,通过REX后扩展成为64位。这样一来就需要一个64位的操作系统,一些操作代码和前缀数据被设定为对其进行64位操作和运用多出的8个寄存器的定义。
扩展寄存器:
纯64位模式支持扩展寄存器,是通过一个REX前缀来实现的。这些扩展是增加了8个64位的通用寄存器(GPRs,代号为R8-R15),8个128位的多指令多数据流扩展(SSE)寄存器(XMM8 – XMM15),并且将所有的通用寄存器扩展到了64位。
REX前缀提供的多的寄存字节能力使所有的通用寄存器都得到了更强大的对字节的操作能力。这个结果对于所有的byte,word,dword以及qword寄存器来说都能更好让程序编译器编译出优秀的最终程序。
对于指令指示器来说,它们也被扩展成了64位宽度。
RIP关联数据地址
在纯64位模式中,x86-64体系还支持数据地址关联模式,并且直接对应64位的RIP(指令指针)。原始的x86体系仅仅在控制传输指令中支持IP关联地址,而64位模式的RIP关联地址改进了该项特性,扩大了它的应用范围。
兼容模式: 兼容模式是提供整个系统运行32位和64位程序的模式。
该模式允许16位和32位软件不需要经过重新编译就可以在长模式下直接应用。
在兼容模式下,所有的应用软件对于内存的操作都只能位于前4GB的实物理内存地址之间,标准的x86命令也迫使对寄存器的操作界于16位和32位,64位系统的优势在这里并没有展现。
同纯64位模式的情况一样, 兼容状态是操作系統在相对独立的数据段的基础上建立起来的。不同于纯64位模式的在于x86指令集的分割,不过只要在使用16位和 32位保护模式的情况下都能正常工作。从应用角度来看, 兼容模式就如同是x86保护模式的衍生物,从操作系統的角度来看,内存寻址,中断和逆向操作,还有系统的数据结构,都使用了64位的长模式。
原始模式: 原始模式,就是Legacy Mode,这个模式完全与x86模式相同。
如果希望模拟一个完整的,并且真实的x86结构模式的话,那么只需要安装一个现有的操作系统,包括Windows 98和Windows 2000,那么CPU将自动调整为这个模式,并完全兼容现有程序,使用的时候与K7和Pentium III没有什么区别。
模式切换
对于这个体系来说,由于有三种意义不同的模式,针对的程序和操作系统也完全不同,所以,切换方式是一个比较引人注目的问题,如果处理不好,会导致程序编制人员的麻烦,对于架构推广有比较大的阻力和麻烦。幸运的是x86-64架构通过对CPUID进行一个参数运行来进行不同模式的切换,这在未来的64位操作系统中进行编制是相当简单的,也就是说,未来的操作系统将自动设定究竟是采用兼容模式还是纯64位模式(Legacy Mode只有使用32位的操作系统,所以没有切换功能)。
但是,需要注意的一点就是,未来的程序中,对于兼容模式来说,如果运行32位,甚至16位程序,其资源浪费是不可避免的,因为在使用寄存器时,前32位前缀被保留了。另外,如果出现过去64位代码和32位代码共存的情况,那么执行效率也将下降,原因就是其必须在两种模式下进行切换。
AMD的K8
现在让我们从体系转到硬件方面来看看。虽然AMD没有对外公布任何关于K8大锤的消息,但是我们从一些蛛丝马迹中尽可能地找到了一些关于这个AMD第一个x86-64处理器的消息,同时还有一些AMD其他的高端产品。
首先,AMD 760/760MP芯片组仍然是AMD今年的明确目标,它的作用是争夺高端计算机市场——鉴于VIA芯片组性能不能真正发挥AMD CPU最大功效的情况下,AMD不得不亲自出马,但它们的目的并非为了与VIA抢夺市场,而是在高端为其CPU获得良好口碑。另外,野马,也就是原本代号为Mustang的下一款CPU已经被确定取消,AMD将使用0.13um工艺的K7——Palomino来代替Mustang的地位,同时进入家用PC CPU市场和服务器市场。对于AMD来说,目前的形势相当不错,K7 Thunderbird性能不俗,而Intel Pentium 4由于使用了0.18um工艺,发热量太大,成本过高,取消了L3 Cache,导致性能并不强大,目前正全力转型,准备生产0.13um的,代号为Northwood的新Pentium 4,这样的情况将继续持续到2001年底。
第一颗基于x86-64架构的AMD处理器将在明年的某些时候发布,这和我们以前得到的消息不同,而且我们必须很实际地告诉各位,K8大锤将不可能在2001年被发布。相对于Intel已经发布的itanium来说,似乎AMD的K8还只是处于一个梦想阶段,而这个阶段不应该被拖很长时间,因为Intel正在募集它的支持者,如果AMD不尽快推出K8的样品以及操作手册的话,那么整个x86-64架构推广计划将会受到严重阻碍。
正如现在的Athlon核心一样,在K8核心上也会有很多变异型号,最肯定会出现的就是Cache的大小,时钟频率改变,甚至还可能有前端总线频率的改变,AMD最终希望通过该CPU,使市场主流从32位完全转换为64位系统,可谓对它是寄予厚望。
对AMD而言,K8推出时,操作系统和应用程序的数量是绝对可以保证的,因为现有的Windows系统就可以很好地在该平台上运行,这对于x86-64的推广有着很大的帮助,但是Windows系统本身是一个漏洞百出、性能不够稳定的32位操作系统,这对于K8刚推出时将面对的高端市场,甚至服务器市场来说非常不利,如果不能获得一个性能优异的64位操作系统的话,对K8而言,将是非常痛苦的一件事情,好在Unix系统只需要重新编译,并不需要作重大改动就可以运行在K8上,AMD还不必担心没有操作系统用,但Unix对于推广到PC桌面则力不从心,似乎还必须重新寻找x86-64的其他配套系统。
仅仅从操作系统和应用软件方面,K8是非常易于推广的,但目前情况是,用K8来运行现有的32位、16位程序,甚至是8位程序,究竟会不会导致效率的降低呢?可以说这是AMD的最大宣传“弹药”,因为itanium虽然也可以运行现有软件,但需要通过一个模拟程序来模拟x86模式,效率大打折扣,所以AMD宣称他们的K8将可以完美兼容32位和64位模式,不损失工作效率。其实这是不可能的,从上面的特性上,我们就可以看到了,一个纯32位程序如果在兼容模式下运行的话不仅享受不到增加的寄存器提供的性能优势,而且还会被读写这些多余寄存器拖慢程序的运行速度,降低运行效率,可以说,K8运行32位程序最可能出现的情况就是类似Pentium Pro运行16位程序效率降低。如果K8不能比目前的CPU在频率方面有很大提高的话,那么其32位程序运行肯定要比纯32位CPU慢,那么它的结局很可能类似过去的Intel Pentium Pro。但不论如何,K8的设计填补了Intel的IA-64架构的空隙,肯定也会有一定的市场,目前更需要讨论到的就是K8所必需的支持芯片组要从哪里得到。
目前来说,唯一需要讨论的就是K8需要的支持芯片组要从哪里得到。就目前来说,VIA是AMD最大的芯片组提供商,但是我们确信,对于VIA来说,他们目前还只有实力在低价位的芯片组市场奋斗,根本不可能到高端的市场进行竞争,以目前他们的技术来说,如果要涉足服务器和高端市场,其结局无非就是悲惨的失败,所以AMD将得不到VIA对其K8的支持。AMD的另两个芯片组供应商Ali和SiS甚至连VIA都比不过,显然更没有能力来提供对K8的支持,这就意味着AMD将单独执行这个计划。
设计和制造这样一个高端CPU的芯片组是相当困难的,很显然,即使设计出了芯片组,制造这样一块主板也将是比原来的AMD 750更加困难的事,而当时对于主板制造商来说,AMD 750的制造难度相对BX来说就简直是天壤之别。可见未来K8的主板也将不可能一帆风顺。
K8是否能成功,能否再次象Athlon那样获得一致好评,或许重蹈Pentium Pro的覆辙,就需要我们耐心等待了。不过,更可能出现的是当K8发布时,Intel的第二代IA-64架构产品也正式发布了。届时,K8面对的将是Intel IA-64架构已经基本成熟的市场,那样的话,争夺用户的竞争将更为激烈。
就让我们为AMD的未来祈祷吧,对于AMD来说,一个成功的硬件产品比一千个成功的硬件体系更为重要——即使我们大家都很清楚,后者是前者必经的道路。
网友评论