X86-64

x86-64(又称x64,即英文词64-bit extended,64位元拓展的简写)是一个处理器指令集架构,基于x86架构64位元拓展,向后相容16位元32位元的x86架构。x64于1999年由AMD设计,AMD首次公开64位元集以扩充给x86,称为「AMD64」。其后也为英特尔所采用,现时英特尔称之为「Intel 64」,在之前曾使用过「Clackamas Technology」 (CT)、「IA-32e」及「EM64T」。

苹果公司RPM套件管理员以「x86-64」或「x86_64」称呼此64位元架构。甲骨文公司Microsoft称之为「x64」。BSD家族及其他Linux发行版则使用「amd64」,32位元版本则称为「i386」(或 i486/586/686),Arch Linux及其衍生发行版用x86_64称呼此64位元架构。

AMD64

AMD64的标志

AMD64指令集被应用在Athlon 64Athlon 64 FXAthlon 64 X2Turion 64Turion 64 X2OpteronSempronPhenomAthlon IIPhenom IIAMD APUAMD FXAMD RyzenAMD Epyc等处理器上。

架构特色

在x86-64出现以前,英特尔与惠普联合设计出IA-64架构;惟IA-64并不与x86相容,且市场反应较冷淡,同时受制于多个专利权,使其他厂商不能模仿,规模没有很大。与x86相容的AMD64架构便应运而生,其主要特点如名称所述,既有支援64位元通用暂存器、64位元整数及逻辑运算、以及64位元虚拟位址,设计人员又为架构作出不少改进,部份重大改变如下:

  • 新增暂存器
  • 位址阔度加长
  • SSE2SSE3指令
  • NX位元:AMD64其中一个特色是拥有「禁止执行」(No-Execute)的位元,可在一定程度上防止蠕虫病毒缓冲区溢位的方式来进行攻击。

市场分析

AMD64代表AMD放弃了跟随Intel标准的一贯作风,选择了像把16位元的Intel 8086扩充成32位元的80386般,去把x86架构扩充成64位元版本,且相容原有标准,没想到比Intel自己发表的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

Intel 64指令集被应用于Pentium 4Pentium DPentium Extreme EditionCeleronXeonPentium Dual-CoreIntel Core 2Intel Core i3Intel Core i5Intel Core i7Intel Core i9处理器上。

概要

Intel 64计划的历史可谓相当长及复杂,其原因主要是因为Intel自身的内政问题。该计划开始时,其代号为「Yamhill」,不过Intel一直对外宣称其计划不存在;至2004年初,Intel才改口承认,并把代号改为CT(Clackamas Technology)。在宣布CT计划的数个星期内,Intel为计划给予多个新名称。在2004年春季的Intel开发者论坛后,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,777,216TB(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

VIA x86-64

VIA在Centaur研发部门五年的研发后,发布了其第一款x86-64改进架构[1],微架构研发代号"Isaiah", 而64位元微架构于2008年1月24日首次展示[2],并在5月29日以VIA Nano品牌发布产品。[3]

该处理器支援一类VIA专为提高低功率应用情景下的效率而研发的x86扩充指令集。 Isaiah微架构预计与前一代架构Esther相比,同时钟频率下,在整数运算表现上会有两倍提效能提升升, 浮点运算上会有四倍效能提升。而在功耗上,处理器 TDP设定为5 W到 25 W。[4] 此外,对于前代产品 VIA C7系列尚不支援的x86虚拟化技术,该架构也作了支援,同时也保留了加密扩充。

虚拟位址空间的细节

尽管虚拟位址有64位元的宽度,但目前的实现机制(以及任何已知处在计划阶段的晶片)并不允许整个16EB的虚拟位址空间都被使用。大多数的作业系统和应用程式在可见的未来都用不到如此巨大的位址空间(比如,Windows在AMD64上的实现仅应用了256TB,即48位元的宽度),所以实现如此巨大的位址宽度只会增加系统的复杂度和位址转换的成本,带不来任何好处。AMD因此决定,在对这一架构的首次实现中,只有虚拟位址的最低48位元才会在位址转换(页表查询)时被使用。但是,任何虚拟位址的48位元至63位必须与47位一致(按照符号位扩展的方式),否则处理器将会报告一个异常。符合这一规则的位址被称作「传统格式」。传统格式将从0至00007FFF`FFFFFFFF,以及从FFFF8000`00000000至FFFFFFFF`FFFFFFFF总计256TB的位址范围作为可以使用的虚拟位址空间。

这种「古怪」的规则为日后扩展到真正的64位元寻址保留了一个重要的特性:很多的作业系统(包括但不限于Windows NT系列)将位址空间的高半部分(被称作核心空间)留给自己,将低半部分(使用者空间)留给应用程式码、使用者态栈、堆和其他数据区。这种「传统位址」的设计保证了每一个符合AMD64的实现都拥有两个记忆体片段:低半段从00000000`00000000开始,随着更多的虚拟位址位元变得可用而「向上生长」;高半部分被「悬挂」在位址空间的顶部而「向下生长」。同样,将未被使用的位址位元内容固定下来防止被作业系统用作标志位、特权级标号等其他用途,是为了避免当架构扩展至52, 56, 60和64位元的时候出现问题。

目前48位元的实现方式

AMD64-canonical--48-bit.svg

57位的实现方式

AMD64-canonical--57-bit.svg

完全64位元的实现方式

AMD64-canonical--64-bit.svg

(非按比例绘制)

64位元寻址模式(长模式),是实体位址扩展(PAE)的超集;因此,记忆体分页大小可以是4KB,2MB,或1GB。但是,与系统在PAE模式下使用的三级分页表机制不同,长模式下系统使用四级分页表:PAE的页目录指针表的表项从4个扩展到了512个,而且附加了一个第四级页面对映表(Page-Map Level 4 Table,PML4 Table),包含512个采用48位元实现的表项。整个48位元位址空间的4KB页面完整对映层级将会占据略多于512GB的记忆体(256TB虚拟位址空间的0.196%)。在提供更大虚拟位址的实现中,这个表被一个更高的对映层级所对映,即第五级页面对映表(PML5[5]),可以提供52位实体位址(4PiB)和57位虚拟位址(128PiB)的实现。

执行模式

执行模式 作业系统要求 已编译程式重新构建 预设位址长度(位元) 预设操作数长度(位元) 暂存器扩充 典型通用暂存器宽度(位元)
长模式
(IA-32e)
64位元模式 64位元 需要 64 32 可用 64
相容模式 64位元(拓展) 不需要 32 不可用 32
16
遗留模式 保护模式 遗留32位元 不需要 32 不可用
遗留16位元 16 16 或 32
虚拟8086模式 遗留32位元 16
真实模式 遗留16位元 16 或 32

作业系统支援

以下作业系统均支援长模式(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位元版本。

macOS

Mac OS X 10.6 Snow Leopard开始提供64位元核心,并可以在部分处理器上打开64位元核心。64位元核心只支援64位元的核心扩充,反之亦然;但对于普通应用程式,无论32位元或64位元核心均可以支援两种位宽的应用程式,但32位元程式只能使用4GB的记忆体空间[6][7]

Mac OS X 10.5 Leopard在Intel与PowerPC上提供对Cocoa, Quartz, OpenGLX11的GUI程式的64位元支援[8],并支援全部的命令列库和程式。但核心仍只有32位元版本。

Mac OS X使用通用二进位档案格式将32位元和64位元程式和库代码包装在同一档案中,在载入时自动选择最合适的版本。在Mac OS X 10.6中,核心和核心扩充也使用通用二进位格式以同时支援两种构架。

苹果公司于2018年4月起,在macOS High Sierra作业系统内执行32位元应用程式时,会提醒讯息。并已在2018年6月的WWDC上宣布macOS Mojave将是最后一版支援32位元应用程式的macOS[9]

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 x64 Edition均已于2005年3月推出。Windows VistaWindows Server 2008Windows Server 2012Windows Server 2012 R2Windows Server 2016Windows Server 2019Windows 7Windows 8Windows 8.1以及Windows 10均有对应的64位元版本。从Windows Server 2008 R2开始的Windows Server作业系统只提供64位元版本,从Windows 11开始的面向消费者的Windows作业系统只提供64位元版本。

业界称谓惯例

由于AMD64和Intel64基本上一致,很多软硬体产品都使用一种不倾向任何一方的词汇来表明它们对两种架构的同时相容。出于这个目的,AMD对这种CPU架构的原始称呼——「x86-64」被不时地使用,还有变体「x86_64」。其他公司如微软升阳电脑在行销资料中使用「x64」作为对「x86-64」的缩写。

许多作业系统及产品,尤其那些是在Intel进入这块市场之前就引入「x86-64」支援的,使用「AMD64」或「amd64」同时指代AMD64和Intel64。

  • BSD系统(如FreeBSDNetBSDOpenBSD)和一些Linux发行版(如DebianUbuntu、和Gentoo)将AMD64和Intel64都称作「amd64」。Red HatRPM将x86-64称为x86_64或x86-64,将32位元的IA-32称为i*86(*为数字3-6,比如i386)。Arch Linux将x86-64称为x86_64。
  • Fedora 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技术,截至2018年9月,几乎等同于市场上所有消费级产品皆使用x86-64技术。

参考文献

  1. ^ VIA to launch new processor architecture in 1Q08. DigiTimes. [2007-07-25]. (原始内容 (subscription required)存档于2008-12-03). 
  2. ^ Stokes, Jon. Isaiah revealed: VIA's new low-power architecture. Ars Technica. 2008-01-23 [2008-01-24]. (原始内容存档于2008-01-27). 
  3. ^ VIA Launches VIA Nano Processor Family (新闻稿). VIA. May 29, 2008 [May 25, 2017]. (原始内容存档于2019-02-03). 
  4. ^ VIA Isaiah Architecture Introduction (PDF). VIA. 2008-01-23 [2013-07-31]. (原始内容 (PDF)存档于2008-09-07). 
  5. ^ 存档副本 (PDF). [2018-05-05]. (原始内容 (PDF)存档于2018-12-05). 
  6. ^ John Siracusa. Mac OS X 10.6 Snow Leopard: the Ars Technica review. Ars Technica LLC. [2010-06-20]. (原始内容存档于2012-08-13). 
  7. ^ Mac OS X Technology. Apple. [2010-05-24]. (原始内容存档于2009-11-12). 
  8. ^ Apple - Mac OS X Leopard - Technology - 64 bit. [2010-09-18]. (原始内容存档于2009-01-12). 
  9. ^ macOS Mojave will officially be the last release to support 32-bit apps. [2018-09-18]. (原始内容存档于2022-04-23). 
  10. ^ PC/嵌入式处理器 - 兆芯 - 好用的电脑芯!. www.zhaoxin.com. [2022-02-10]. (原始内容存档于2022-04-23). 

参见

外部连结

#