x86架构与授权
所谓架构和指令集
软件开发的一般流程是这样的,以C/C++为例,开发者先在IDE(Integrated Development Editor)编写源代码(高级程序语言如C/C++),然后使用编译器编译成二进制文件(可执行文件)。在编译成二进制文件的时候,编译器实际上做了两步,首先是将高级程序语言翻译成汇编语言(你也可以直接用汇编语言编写程序),然后汇编语言再翻译成机器码(一串0101的代码)。一条机器码称为一个指令,指令可以被CPU执行。CPU可以执行的所有指令称为指令集(ISA:Instrution Set Architecture)。
而架构,可以理解成为了实现指令集而构建出来的硬件电路。用实例理解,比如用VHDL(硬件描述语言)开发芯片的时候,假如要实现【输入端信号为0101时,控制输出门打开某个电灯】,那么我们就要设计相应的硬件结构来完成这条指令。于是,一个指令集可以设计出不同的硬件电路,这就是架构。而只要是CPU使用的指令集是相同的,那么它们就是互相兼容的(即使对于指令集的硬件实现不同)。有些文章会把架构定义为硬件实现。但是个人认为,应该是把架构等同于指令集比较通用(指令集也可以叫做指令集架构[1]。大家现在经常听到的x86架构,其实就是从英特尔的8086处理器沿用到如今,当时使用的架构或者说指令集称为x86架构。后来因特尔将x86指令集授权给AMD使用。于是,AMD可以开发基于x86架构的处理器。同样是x86处理器,AMD和Intel的CPU硬件电路不同,但是指令集相同,于是它们之间可以互相兼容。
综上,架构可以理解成等同于指令集。不同厂商对同一个架构的实现方式不同(Intel和AMD)。
x86泛指一系列英特尔公司用于开发处理器的指令集架构,这类处理器最早为1978年面市的“Intel 8086”CPU。
该系列较早期的处理器名称是以数字来表示80x86。由于以“86”作为结尾,包括Intel 8086、80186、80286、80386以及80486,因此其架构被称为“x86”。由于数字并不能作为注册商标,因此Intel及其竞争者均在新一代处理器使用可注册的名称,如Pentium,来描述x86架构下的处理器产品。现时英特尔将其称为IA-32,全名为“Intel Architecture, 32-bit”,一般情形下指代32位的架构。
架构授权之争
第二供应商
第二供应商这种做法起源于六十年代,在美国电子产品行业,客户为了避免只能从一家供应商获取元器件。对于一些简单的器件这并不是问题,因为有很多公司都能够生产。但是对于cpu等这种复杂的电子原件,如果只有一家公司能够生产,那么购买者将承担很大的风险,特别是当时芯片收购者大部分是军方。为了防止一家独大,开发出了这种制度。所谓的第二供应商,就是第一供应商授权第二家公司生产并销售其某个产品。
后来芯片使用变成了IBM这种PC巨佬,但是这个第二供应商制度也被沿用了下来。当时IBM指定了Intel的8086处理器作为IBM个人电脑的cpu芯片。但是IBM要求同一个芯片至少要拥有两家供应商。当时Intel还是小公司,于是机缘巧合找到AMD作为第二供应商。后来还有其它公司得到x86授权。比如Cyrix(现为威盛电子所收购)。只不过,后来Intel打算一家独大,撤回了各种授权。经过很长时间的官司,AMD获得了x86一系列架构的长期授权。
各种乱七八糟的授权
授权(license)这件事好像是商业机密。并且各种官司交错,还有交叉授权(cross license),也就是两家公司互相可以生产销售对方的产品。总之非常复杂,也没有找到更为具体的x86授权细节。但是AMD和Intel的授权之争是最出名的。
1982年2月,AMD与Intel签约,成为得到许可的8086与8088制造业者和第二货源生产商。IBM要用Intel 8088在他们的IBM PC,但是IBM当时的政策要求他们所使用的芯片至少要有两个货源。在同样的安排下,AMD之后生产80286。
但是在1986年,Intel撤回了这个协定,拒绝传达i386的技术详情。由于PC clone市场的流行与增长,Intel可以依照自己的规格来制造CPU,而不是依照IBM规格。
AMD告Intel毁约,仲裁判AMD胜诉。但是Intel对此提出上诉。接下来,长期的法庭战争在1994年结束。加州最高法院判AMD胜诉,要Intel赔超过10亿美元的赔偿金。后来的法庭战争聚集在AMD是否有权利使用Intel派生的微代码(Microcode)。裁决没有明显的偏向任何一方。在面对这个不确定的情况,AMD被迫开发“防尘室版”的Intel微代码。他们的方式是:一组工程师描述微代码的功能,另一组在没有参考原微代码的情况下,自行开发拥有同样功能的微代码。
1991年,AMD发布Am386,Intel 80386的复制版。AMD在一年以内就销售了100万只芯片。AMD接下来在1993年发布Am486。两者都以比Intel版本更低的价格销售。很多OEM,包括Compaq都使用Am486。由于电脑工业生产周期的缩短,逆向工程Intel产品的策略令AMD越来越难继续生存下去。因为这意味着他们的技术将一直落在Intel的后头。因此,他们开始开发他们自己的微处理器。[2]
一开始AMD一直生产英特尔CPU的复制版,并且主打性价比。可以说一直处于弱势,只能勉强维持生存。直到后来率先发布可以兼容x86(32位)架构的x86-64架构。
x86-64
也称x64架构。在AMD推出与原先x86的16、32位架构兼容的x86-64架构之前,英特尔就已经和惠普联合设计出64位架构的cpu,叫做IA-64。但是IA-64并不能向下兼容32位的x86指令集。于是,2003年,AMD推出Athlon处理器,率先使用兼容x86的64位架构。由于向下兼容,原先x86的16位、32位软件可以直接运行,编译器更新也更加容易,于是x86-64架构比Intel的IA-64获得更好的市场反响。后来,Intel吸收AMD的64位架构,开发自己的Intel64架构(虽然也有人说英特尔是直接使用AMD的64位架构加上自己的包装)。自此,两家人在x64架构上一直斗争到今天。[3]
业界称谓:由于AMD64和Intel64基本上一致,很多软硬件产品都使用一种不倾向任何一方的词汇来表明它们对两种架构的同时兼容。出于这个目的,AMD对这种CPU架构的原始称呼——“x86-64”被不时地使用,还有变体“x86_64”。其他公司如微软和太阳微系统在营销资料中使用“x64”作为对“x86-64”的缩写[4]
Intel-64和AMD-64架构到底有没有区别?
基本一样!或者说,对于你我,他们就是一样的,所以现在流行的x86-64架构有很多名称(x64,AMD64,x86_64,intel-64)。我一开始以为经过十几年的发展,可能Intel和AMD在发展各自的64位架构上会分隔开,知道我准备在AMD的锐龙处理器上安装某linux发行版的时候,发现,竟然只有一个版本,并没有区分AMD还是Intel的处理器。然后又查了一下维基百科,在维基百科”x86-64”词条是这样说的:
Differences between AMD64 and Intel 64
Although nearly identical, there are some differences between the two instruction sets in the semantics of a few seldom used machine instructions (or situations), which are mainly used for system programming.[38] Compilers generally produce executables (i.e. machine code) that avoid any differences, at least for ordinary application programs. This is therefore of interest mainly to developers of compilers, operating systems and similar, which must deal with individual and special system instructions.
其它授权的故事
从上面的故事可以知道:有了授权我们就有可能根据相应的技术文档生产CPU。授权实际上给的就是对指令集的使用和架构设计。所以也有的人说中国要自研芯片就要先有自己的指令集。但是面对Intel和AMD发展了几十年的技术来看,中国要从头打通芯片自研的道路真的是难上加上。就算从指令集到架构到流片都打通,还要面对着各种软件的兼容问题。
除了 Intel 之外,AMD 和台湾威盛都有着 X86 技术。目前世界上拥有 X86 授权的企业也只有这三家,其中 Intel 和 AMD 拥有 X86 的永久授权。前文提到的cyrix公司后来被威盛收购。
要注意的是,8086芯片在1978年发布,按照网上的说法,美国技术专利拥有20年的所有权,也就是现在8086处理器专利已经过期了。大家都可以使用。只不过后来的各种先进技术都在专利器内。所以现在中国可以生产低端芯片,但是高性能芯片举步维艰(不单是芯片设计问题)。
参考
- x86指令集架构(维基百科) https://zh.wikipedia.org/wiki/X86
- AMD公司起源(维基百科) https://zh.wikipedia.org/wiki/超威半导体
- x86处理器的发展(维基百科) https://zh.wikipedia.org/wiki/X86
- x86-64架构的发展(维基百科) https://zh.wikipedia.org/wiki/X86-64