“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位架构,从而保持中立,不偏袒任何厂商。
基本介绍
- 中文名:X64
- 外文名:“x86-64”
- 延伸产品:Intel x86架构
- 改名:AMD64
- 套用:Pentium 4、Pentium D
- 架构特色:直接访问超过4GB的存储器
指令集
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位虚拟地址。设计人员也为架构作出不少改进,部份重大改变如下:
新增暂存器
地址阔度加长
SSE2、SSE3指令
“禁止运行”比特 (NX-bit): AMD64其中一个特色是拥有“禁止运行”(No-Execute, NX)的比特,可以防止蠕虫病毒以缓冲器满溢的方式来进行攻击(也称:快取溢出攻击,Buffer Overflow)。
市场分析
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 2 Quad、Intel Core i3、Intel Core i5及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位一致(按照符号位扩展的方式),否则处理器将会报告一个异常。符合这一规则的地址被称作“规範定址(Canonical Addressing)”。规範地址形式将从0至00007FFF`FFFFFFFF,以及从FFFF8000`00000000至FFFFFFFF`FFFFFFFF总计256TB的地址範围作为可以使用的虚拟地址空间。
这种“古怪”的规则为日后扩展到真正的64位定址保留了一个重要的特性:很多的作业系统(包括但不限于Windows NT系列)将地址空间的高半部分(被称作核心空间)留给自己,将低半部分(用户空间)留给应用程式代码、用户态栈、堆和其他数据区。这种“传统地址”的设计保证了每一个符合AMD64的实现都拥有两个记忆体片段:低半段从00000000`00000000开始,随着更多的虚拟地址比特变得可用而“向上生长”;高半部分被“悬挂”在地址空间的顶部而“向下生长”。同样,将未被使用的地址比特内容固定下来防止被作业系统用作标誌位、特权级标号等其他用途,是为了避免当架构扩展至52, 56, 60和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环境下可通过DOS Extender(例如DOS4GW)来进入保护模式。
FreeBSD
FreeBSD在5.1正式版曾为x86-64作试验,至6.0正式版解决了在x86-64运行32位程式出现的一些问题,以及能支持不少驱动程式。
Linux
Linux在2.6版本的核心开始加入长模式,支持x86-64,能兼容32位程式及模拟32位系统,容许在32位的环境下,把程式编译为64位版本。
Mac OS X
Mac OS X 10.6 Snow Leopard开始提供64位核心,并可以在部分处理器上打开64位核心。64位核心只支持64位的核心扩展,反之亦然;但对于普通应用程式,无论32位或64位核心均可以支持两种位宽的应用程式,但32位程式只能使用4GB的记忆体空间。
Mac OS X 10.5 Leopard在Intel与PowerPC上提供对Cocoa, Quartz, OpenGL与X11的GUI程式的64位支持,并支持全部的命令行库和程式。但核心仍只有32位版本。
Mac OS X使用通用二进制档案格式将32位和64位程式和库代码包装在同一档案中,在载入时自动选择最合适的版本。在Mac OS X 10.6中,核心和核心扩展也使用通用二进制格式以同时支持两种构架。
MenuetOS
x86-64版本的MenuetOS系统于2005年6月推出,虽然原有的32位版本Menuet以GPL授权,但x86-64版本则维持专属,并以免费软体方式发布,以及提供部分组件的原始码。
NetBSD
x86-64版本的NetBSD最早于2001年6月19日被提出,至2004年12月9日推出的NetBSD 2.0已能完全支持x86-64。
OpenBSD
OpenBSD自2004年5月1日推出的3.5版起,已支持x86-64。
Solaris
昇阳的Solaris自版本10开始已支持x86-64。
Windows
供客户端使用的Windows XP Professional x64 Edition以及供伺服器使用的Windows Server 2003 SP1 x64 Edition均已于2005年3月推出。Windows Vista、Windows Server 2008、Windows 7、Windows 8以及Windows 10均有对应的64位版本.Windows Server 2008 R2只提供64位版本。
业界称谓
由于AMD64和Intel64基本上一致,很多软硬体产品都使用一种不倾向任何一方的辞彙来表明它们对两种架构的同时兼容。出于这个目的,AMD对这种CPU架构的原始称呼——“x86-64”被不时地使用,还有变体“x86_64”。其他公司如微软和太阳计算机系统公司在行销资料中使用“x64”作为对“x86-64”的缩写。
许多作业系统及产品,尤其那些是在Intel进入这块市场之前就引入“x86-64”支持的,使用“AMD64”或“amd64”同时指代AMD64和Intel64。
BSD系统(如FreeBSD、NetBSD和OpenBSD)和一些Linux发行版(如Debian、Ubuntu、和Gentoo)将AMD64和Intel64都称作“amd64”。
Linux,Fedora,GCC,openSUSE,PackageKit称64位架构为“x86_64”。
Java Development Kit(JDK):包含x86-64档案的目录命名为“amd64”。
Mac OS X:终端下的命令arch以及开发人员文档都表明苹果称64位架构为“x86_64”。
Microsoft Windows:称在IA-32处理器上使用64位技术为“x64”,但一些相关目录使用AMD64来标明。例如,Windows x64版安装CD上的系统目录命名为“AMD64”,而32位版本上用“i386”。
Solaris:作业系统的命令isalist将AMD64和Intel64都定义成“amd64”。
套用产品
以下处理器产品使用了x86-64技术。
AMD K8 (AMD64)微处理器架构
AMD Athlon 64
AMD Athlon 64 X2
AMD Athlon 64 FX
AMD Opteron
AMD Turion 64
AMD Sempron(限使用E6步进以后的Palermo、全数Manila型号和全数Sparta型号)
AMD K10微处理器架构
AMD Phenom
AMD Bulldozer微处理器架构
AMD FX-Series
AMD AMD Fusion (APU)
AMD Bobcat微处理器架构的CPU核心
AMD Ontario
AMD Zacate
AMD K10微处理器架构的CPU核心
AMD Llano
Intel NetBurst (Intel 64)
Xeon(自"Nocona"起的部分型号)
Celeron D(自"Prescott"起的部分型号)
Pentium 4(自"Prescott"起的部分型号)
Pentium D
Pentium Extreme Edition
Intel Core微处理器架构
Xeon ("Woodcrest")
Intel Core 2
Intel Pentium Dual-Core
Intel Celeron(自"Core"起的型号)
Intel Nehalem微处理器架构
Intel Core i7
Intel Core i5
Intel Core i3
Intel Sandy Bridge微处理器架构
Intel Core i7
Intel Core i5
Intel Core i3
Intel Atom(部分)