“x86-64”,有时会简称为“x64”,是64位微处理器架构及其相应指令集的一种,也是Intel x86架构的延伸产品。“x86-64”1999由AMD设计,AMD 首次公开 64 位集以扩充给 IA-32,称为 x86-64(后来改名为 AMD64)。 其后也为英特尔所采用,现时英特尔称之为“Intel 64”,在之前曾使用过Clackamas Technology (CT)、IA-32e及EM64T。外界多使用 "x86-64" 或 "x64" 去称呼此64位架构,从而保持中立,不偏袒任何厂商。
目录 |
AMD64指令集被应用在Athlon 64、Athlon 64 FX、Athlon 64 X2、Turion 64、Turion 64 X2、Opteron及较新款的Sempron和Phenom处理器上。
在 "x86-64" 出现以前,英特尔与惠普(Hewlett Packard)联合设计出 "IA-64" 架构,惟这款64位架构并不与x86兼容,且市场反应较冷淡,同时受制于多个专利权,使其他厂商不能模仿。与x86兼容的AMD64架构便应运而生,其主要特点如名称所述,计有支持64位通用寄存器、64位整数及逻辑计算,以及64位虚拟地址。设计人员也为架构作出不少改进,部份重大改变如下:
AMD64代表AMD放弃了跟随Intel标准的一贯作风,选择了像把16位的Intel 8086扩充成32位的80386般,去把x86架构扩充成64位版本,且兼容原有标准。
AMD64架构在IA-32上新增了64位寄存器,并兼容早期的16位和32位软件,可使现有以x86为对象的编译器容易转为AMD64版本。除此之外,NX bit也是引人注目的特色之一。
不少人认为,像DEC Alpha般的64位RISC芯片,最终会取代现有过时及多变的x86架构。但事实上,为x86系统而设的应用软件实在太庞大,成为Alpha不能取代x86的主要原因,AMD64能有效地把x86架构移至64位的环境,并且能兼容原有的x86应用程序。
Intel 64指令集被应用于Pentium 4、Pentium D、Pentium Extreme Edition、Celeron D、Xeon、Intel Core 2及Intel Core i7处理器上。
Intel 64计划的历史可谓相当长及复杂,其原因主要是因为Intel自身的内政问题。该计划开始时,其代号为Yamhill,不过Intel一直对外宣称其计划不存在,至2004年初才改口承认,并把代号改为CT(Clackamas Technology)。在宣布CT计划的数个星期内,Intel为计划给予多个新名称。在2004年春季的IDF开发者论坛后,Intel将之命名为“IA-32E”,意即IA-32的延伸,在数星期后才改称为EM64T。
Intel曾长时间把该计划保持机密,其原因有以下两点。第一,Intel不想给客户混淆信息,把未来Itanium IA-64处理器的展望与x86混为一谈,但在Intel眼见使用AMD64的Opteron及Athlon 64取得成功,便需要对竞争者的威胁作出迎击。而第二个原因,是Intel为了自身的面子,定不会承认使用了对手AMD的技术,因此Intel把该技术以EM64T这个名字来推出,虽然内核与AMD64几乎相同,犹如一对孪生兄弟,但如果Intel使用了AMD64这名字,等于在帮对手做广告宣传。在以往Intel的营销中,Intel总把AMD的产品贬为自家技术的仿制品,不过这回AMD率先开发民用64位技术,Intel需要反过来吸纳AMD的技术,使Intel在研发x86处理器技术的领导地位受到重挫,因此Intel在造势方面便需要使用更多的人力物力。Intel主席Craig Barrett之后也承认在保密方面,这个机密算是保得最差的。
在Intel 64(EM64T)的文件中,对于其指令集的起源只字不提,因此有媒体便为它起了“iAMD64”这个别名,讽刺Intel在迎击AMD的民用64位技术上,使用了AMD的技术,直接把AMD64吸纳过来,并以新名重新包装使用。后来Intel索性将此技术正式命名为Intel 64。
Intel 64可使处理器直接访问超过4GB的存储器,容许运行更大的应用程序。而x86-64架构也加入了额外的寄存器及其他改良在指令集上。通过64位的存储器地址上限,其理论存储器大小上限达16,000,000TB(16EB),不过在初期的应用上并未能支持完整的64位地址。
Intel在之前已在Itanium处理器上使用了自家的64位IA-64技术,虽然说Intel 64也是64位,但两者并不兼容,即IA-64的软件不能直接在Intel 64上运行。Intel 64所用的x86-64是IA-32指令集的延伸,而IA-64则是另一款独立的架构,没有任何IA-32的影子。虽然IA-64可通过模拟来运行IA-32的指令,但指令在运行前需经转换,才能在IA-64上运行,导致其速度变慢。由于x86-64是从IA-32派生而来,因此运行IA-32与64位程序的表现也显得绰绰有余。
首颗使用Intel 64技术的处理器属于Xeon型号,支持双处理器,其内核名称为Nocona。由于Xeon是直接建基于桌面型的Pentium 4上,因此Pentium 4也可使用Intel 64,如使用超线程(Hyper-Threading)般。不过Intel 64在初期的Prescott版本尚未启用,其原因大概是当时其尚未完善。在使用Prescott内核E0更新版本的Pentium 4处理器已可使用Intel 64,被称为Pentium 4 F。再者,E0更新版本加入了“禁止运行”位,称为XD bit(eXecute Disable),相当于AMD64的NX bit。
尽管虚拟地址有64位的宽度,但前的实现机制(以及任何已知处在计划阶段的芯片)并不允许整个16EB的虚拟地址空间都被使用。大多数的操作系统和应用程序在可见的未来都用不到如此巨大的地址空间(比如,Windows在AMD64上的实现仅应用了16TB,即44位的宽度),所以实现如此巨大的地址宽度只会增加系统的复杂度和地址转换的成本,带不来任何好处。AMD因此决定,在对这一架构的首次实现中,只有虚拟地址的最低48位才会在地址转换(页表查询)时被使用。但是,任何虚拟地址的48位至63位必须与47位一致(按照符号位扩展的方式),否则处理器将会报告一个异常。符合这一规则的地址被称作“传统格式”。传统格式将从0至00007FFF`FFFFFFFF,以及从 FFFF8000`00000000至FFFFFFFF`FFFFFFFF总计256TB的地址范围作为可以使用的虚拟地址空间。
这种“古怪”的规则为日后扩展到真正的64位寻址保留了一个重要的特性:很多的操作系统(包括但不限于Windows NT系列)将地址空间的高半部分(被称作内核空间)留给自己,将低半部分(用户空间)留给应用程序代码、用户态栈、堆和其他数据区。这种“传统地址”的设计保证了每一个符合AMD64的实现都拥有两个内存片段:低半段从00000000`00000000开始,随着更多的虚拟地址位变得可用而“向上生长”;高半部分被“悬挂”在地址空间的顶部而“向下生长”。同样,将未被使用的地址位内容固定下来防止被操作系统用作标志位、特权级标号等其他用途,是为了避免当架构扩展至52, 56, 60 和64位的时候出现问题。
| 当前48位的实现方式 | 56位的实现方式 | 完全64位的实现方式 |
| (非按比例绘制) | ||
64位寻址模式(长模式),是物理地址扩展(PAE)的超集;因此,内存页大小可以是4KB,2MB,或1GB。但是,与系统在PAE模式下使用的三级标签页表机制不同,长模式下系统使用四级标签页表:PAE的页目录指针表的表项从4个扩展到了512个,而且附加了一个第四级页面映射表(Page-Map Level 4 Table,PML4 Table),包含512个采用48位实现的表项。在提供更大虚拟地址的实现中,这个表既可以进行扩展来提供足够数量的表项(对于64位实现来说理论值高达33,554,432个)以描述整个地址空间,也可以再被一个更高层映射级所映射,像是PML5。整个48位地址空间的4KB页面完整映射层级将会占据略多于512GB的内存(256TB虚拟地址空间的0.196%)。
| 运行模式 | 操作系统要求 | 已编译程序重新构建 | 默认地址长度(位) | 默认操作码长度(位) | 寄存器扩展 | 典型通用寄存器宽度(位) | |
|---|---|---|---|---|---|---|---|
| 长模式 | 64位模式 | 支持64位 | 需要 | 64 | 32 | 可用 | 64 |
| 兼容模式 | 不需要 | 32 | 32 | 不可用 | 32 | ||
| 16 | 16 | 16 | |||||
| 传统模式 | 保护模式 | 传统16位或32位 | 不需要 | 32 | 32 | 不可用 | 32 |
| 16 | 16 | 16 | |||||
| 虚拟8086模式 | 16 | 16 | 16 | ||||
| 真实模式 | 传统16位 | ||||||
以下操作系统均支持长模式(long mode)的x86-64架构。
在DOS环境下可通过DOS Extender(例如DOS4GW)来进入保护模式。
FreeBSD在5.1正式版曾为x86-64作试验,至6.0正式版解决了在x86-64运行32位程序出现的一些问题,以及能支持不少驱动程序。
Linux在2.6版本的内核开始加入长模式,支持x86-64,能兼容32位程序及模拟32位系统,容许在32位的环境下,把程序编译为64位版本。
供Intel处理器使用的Mac OS X系统,经破解后能辨认x86-64处理器,早期的x86-64处理器由于不支持SSE3指令集,需安装有关补丁去模拟SSE3。
x86-64版本的MenuetOS系统于2005年6月推出,虽然原有的32位版本Menuet以GPL授权,但x86-64版本则维持专属,并以免费软件方式发布,以及提供部分组件的源代码。
x86-64版本的NetBSD最早于2001年6月19日被提出,至2004年12月9日推出的NetBSD 2.0已能完全支持x86-64。
OpenBSD自2004年5月1日推出的3.5版起,已支持x86-64。
升阳的Solaris自版本10开始已支持x86-64。
供用户端使用的Windows XP Professional x64 Edition以及供服务器使用的Windows Server 2003 SP1 x64 Edition均已于2005年3月推出。Windows Vista、Windows Server 2008以及Windows 7均有对应的64位版本.Windows Server 2008 R2只提供64位版本.
由于AMD64和Intel64基本上一致,很多软硬件产品都使用一种不倾向任何一方的词汇来表明它们对两种架构的同时兼容。出于这个目的,AMD对这种CPU架构的原始称呼——“x86-64”被不时地使用,还有变体“x86_64”。其他公司如微软和太阳计算机系统公司在营销资料中使用“x64”作为对“x86-64”的缩写。
许多操作系统及产品,尤其那些是在Intel进入这块市场之前就引入“x86-64”支持的,使用“AMD64”或“amd64”同时指代AMD64和Intel64。
以下处理器产品使用了x86-64技术。
|
|||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
stock | retire | vm
Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History