从简单纯粹的运算单元,到拥有多指令并行发射机制,再到多级流水线的产生,高速缓存的纳入,频率冲破GHz,再到内存控制器的集成,直至今天GPU的整合,这一切便是过去三十年来x86 CPU架构的进化历程。英特尔和AMD是这个历史的缔造者,它们初基于相同的架构,中途分道扬镳,彼此又不断借鉴对方的优秀创意,在此起彼伏的交锋中共同将x86带向未来。
现在,我们将向你讲述x86处理器架构的发展史,它们也过去三十年IT业发展历程的见证者。
作为x86指令集的创建者,英特尔公司在当年也只能算是一个小角色,这家成立于1968年的半导体企业远远无法同IBM这样的“百年老店”相提并论,它和AMD都是源于仙童半导体的私生子——英特尔的创始人安迪·格罗夫、戈登·摩尔、罗伯特·诺伊斯和AMD的创始人杰瑞·桑德斯都是仙童的同事,后来他们都离职创业,进入半导体领域。
英特尔初的业务是生产存储器,它们成功地拥有了源于仙童的半导体制作工艺,即一种类似于印刷的工艺将大量的电子器件集成在一个硅片中,这就是集成电路的概念。而早在1965年,戈登·摩尔还在仙童的时候,他就在一篇文章中总结出了一个现象:即芯片中的晶体管和电阻器的数量每年会翻番,原因是工程师可以不断缩小晶体管的体积。这就意味着,半导体的性能与容量将以指数级的方式增长,并且这种增长趋势将继续延续下去。1975年,摩尔又修订了这个定律,他认为,每隔24个月,晶体管的数量将翻番。其时,摩尔已经是英特尔公司的联合创始人,这个定律后来也被英特尔奉为经典,当然追本溯源,摩尔定律初描述的对象是半导体存储器。
苹果公司在1976年推出的Apple Ⅰ个人电脑,风靡美国市场,令当时计算机业巨头IBM大感震动。IBM紧急成立了一个项目组,开发针对个人用户的计算机,以同苹果竞争。然而,IBM那些脑袋僵化的工程师们无法理解个人用户要拿计算机来做什么,他们想了半天,结论是大概可以给家庭主妇记录菜单之类的。既然他们认为PC可有可无,自然不愿意花费大力气去开发,而是找了一系列供应商—比如CPU部分,他们就将订单交给英特尔这家小公司,当时IBM虽然有非常顶尖的Power架构,但他们认为这种用在超级计算机的高级货不应该浪费在PC上面。这个决策所导致的终后果就是:IBM失去了PC时代,成就了英特尔、AMD、微软等一系列的IT巨头。
英特尔之所以能拿到IBM的订单,除了价格低廉的优势外,技术和产品成熟也是个关键。因为在英特尔成立之后,除了制造存储器件外,也一直有为其他公司代工设计,生产微处理器的传统。比如早在1971年1月,英特尔公司的霍夫就研制出世界上第一块4位微处理器芯片4004,当然这并不是英特尔高瞻远瞩的结果,而是他们接到日本Busicom公司的订单,Busicom需要一块芯片来生产电算机,就选择英特尔作为供应商。从这个意义来说,x86架构应该是Busicom无意识下的产物,而不是英特尔雄才伟略的结果。
图1 4004处理器,x86的始祖。
4004可以执行4位运算,支持8位指令集和12位寻址,它的高频率为740KHz,当频率在108KHz时,4004可以每秒运算6万次。总的来说,4004处理器的性能与早期电子计算机ENIAC相若——ENIAC是在1946年推出,拥有18000个真空管,机器体积庞大,需占用一个房间。
1972年4月,霍夫等人接着开发出第一个8位微处理器英特尔 8008。由于8008采用的是P沟道MOS微处理器,因此仍属第一代微处理器。次年8月,后续的8080芯片诞生,它以N沟道MOS电路取代了P沟道,成为第二代微处理器。8080芯片的主频提高到2MHz,集成了6000个晶体管,采用的是6微米制造工艺,其运算速度比8008快了10倍,处理速度为0.64MIPS(每秒64万次),并可存取64KB存储器。
微软公司的创始人,比尔·盖茨和保罗·艾伦第一次接触CPU就是从8008开始,那时他们还都是年轻人,两人合力为该芯片编写了简单的Basic编程语言,但是没有成功;但他们终在性能强劲一些的8080处理器上实现了这个目标,并在新墨西哥镇成立了一家软件小公司,这家公司就成为了微软的前身—这也成为英特尔和微软亲密关系的开始。
1978年6月,英特尔推出4.77MHz的8086微处理器,标志着第三代微处理器问世。它采用16位寄存器、16位数据总线和29000个3微米技术的晶体管,售价360美元。8086还有一个精简版的孪生兄弟:8088,它只采用8位数据总线,所以只能称作准16位。
在当时,微处理器工业已形成Zilog、摩托罗拉和英特尔三足鼎立的格局——Zilog公司在1976年开发的Z80微处理器,被广泛用于微型计算机和工业自动控制设备;摩托罗拉推出的M68000 16位微处理器,也占据了相当的市场份额。而在整个处理器工业中,微处理器只是不起眼的小角色,高性能的RISC处理器才是当时的主流。
IBM决定在自己的PC中采用英特尔的芯片,这个决定成就了今天x86的地位。与苹果的封闭做法不同,IBM确立了开放式的PC标准,这也是早的开放策略—与今天安卓在智能手机市场的快速崛起类似,大量的兼容PC也纷纷出现,所有的兼容PC厂商都唯IBM马首是瞻,于是英特尔和微软都沾光分获了大量的订单,作为标准制定者的IBM,由于慷慨到“忘记”注册专利,终就失去了这个市场。
80286处理器诞生于1982年,虽然仍为16位芯片,但它集成了13.4万个晶体管,时钟频率由初6MHz逐步提高到20MHz。80286兼容了8086所有功能,使8086的汇编语言程序可以不做修改直接运行。80286微处理器内部有4个功能部件,即地址部件AU、指令部件IU、执行部件EU和总线部件BU。这四个部件的并行操作,提高了吞吐率,加快了处理速度。
图2 80286处理器
80286处理器推出之后,迅速获得各个PC厂商的采用,也包括IBM。激烈的市场竞争让用户学会了比较PC的性能,这几乎就是比较采用哪一款微处理器,英特尔也逐渐走上了前台,不再是一家被动的供应商。而真正的反客为主则是在80386时代—80386诞生于1985年,它是80x86系列中的第一款32位微处理器,而且制造工艺也有了很大的进步。与80286相比,80386内部内含27.5万个晶体管,时钟频率从12.5MHz(此时每秒钟可执行6百万条指令)开始,后逐渐提高到20MHz、25MHz和33MHz。80386的内部和外部数据总线都是32位,地址总线也是32位,可寻址高达4GB内存。
为了实现兼容,80386采用“类286”总线结构,这样就可以保持软硬件的兼容性,降低整机的开发和制造成本。其次,80386有三种工作模式,适应的操作系统比较多,对现有的程序兼容性比较好。再者,80386首度引入多任务处理机制,这就使它能被各行各业广泛使用。
图3 很多较早购买电脑的家庭,都是从80386DX起步的。
虽然当时80386没有完善和强大的浮点运算单元,但配上80387协处理器,80386就可以顺利完成AutoCAD等需要大量浮点运算的任务,从而顺利进入了主流的商用电脑市场。
针对内存速度相对低下的瓶颈,英特尔为80386设计了高速缓存(Cache),采取预读内存的方法来缓解这个问题。英特尔初计划将L1 Cahce直接内置入80386芯片中,但受到工艺、成本、工期等方面的限制,英特尔终选择了L1 Cache芯片外置主板的方案—从此之后,Cache就和CPU成为了如影随形的东西。Cache的设计也相当大程度影响着CPU的性能。
80386衍生出庞大的家族,除了标准版的80386DX,还包括廉价版的80386SX,以及移动版、低功耗的80386SL和80386DL—从386时代开始,英特尔就一反被动局面,主动推进PC系统的升级。而在市场竞争的驱使下,各个PC厂商都或主动或被动地追随英特尔的脚步,这也是英特尔确立自身在PC产业界地位的开始。
1989年,英特尔推出了新一代80486处理器。它的制造工艺提升到1微米,内部集成了120万个晶体管。80486具备了现代微处理器的主要元素:片内集成浮点运算单元、8KB的cache(L1cache)并支持片外L2 cache,整数处理单元则借鉴了精简指令集RISC结构,提高了指令的执行速度。此外,80486引进时钟倍频技术和新的内部总线结构,从而使主频可以超过100MHz。
在80486时代,英特尔已经开始成为PC业的核心,PC厂商开始新一轮的惯性升级,尽管面临AMD、Cyrix这些厂商的竞争,但英特尔已经稳稳地居于业界的主导。当然,真正让它走向辉煌的还是“奔腾”时代。