CPU基础——历史

By | 2018年5月3日

既然要造CPU,那么肯定不能不学习CPU的原理嘛!那么我们从哪儿开始入手呢?

技术的发展都是循序渐进的,早期的CPU会比现代的CPU更为简单,所以从了解CPU,甚至是计算机的历史开始,或许是一个比较好的方向。

CPU的全称是Central Processing Unit,也就是“中央处理单元”,我们知道,计算机上的计算任务都是由它处理的(至少在早期计算机上是如此,现代计算机中图形处理器GPU也有计算能力),而计算机被发明,也正是因为人们对计算的需求。

在古代,人类就已经发明了许多用于帮助计算的工具,从算筹,到后来的算盘、计算尺,然而懒惰的人类还是希望使用机器来替代人类计算。

在电气时代之前,人们自然而然的将主意打到了机械头上。计算钟、帕斯卡加法器等机械式计算器被一个个的发明出来,但是所有这些用来辅助计算的工具都有一个特点:能用于计算,但是也仅仅是用来计算。输入和结果的输出都需要人的辅助,如果要进行复杂的计算,还需要人为的将计算分解为一个个小步骤,然后交由计算器实现。

那么,能不能让机器自动的去计算呢?

迈出这一步的人便是查尔斯·巴贝奇(Charles Babbage,1792—1871),他想利用机械计算器自动化的计算数学表(当时的数学表都是由人工计算的,错误很多)。

他从法国人约瑟夫·玛丽·雅卡尔(Joseph Marie Jacquard,1752-1834)发明的提花机中找到了灵感(这种提花机可以根据纸带上的孔去控制提花出来的图案),从而提出了“差分机”(difference engine),他花费10年的时间,完成了第一台差分机,如下图:

By User:geni (Photo by User:geni) [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons

他的第一台差分机可以进行6位精度的计算,但在他努力讲精度提升到20位时,政府停止了对他的支持援助,再加上当时的机械加工水平限制,最后以失败告终。在研制差分机的过程中,他又构想出分析机。在差分机中,他创造性的提出了算术逻辑单元,支持分支和跳转的控制器,以及存储器。由于与总工程师的冲突和资金不足,巴贝奇没能完成这台机器的建造。

生活在机械时代的巴贝奇,却构思出了完整的计算机结构领先世界一百年

尽管巴贝奇未能实现他的完全构想,但他对将来的计算机的贡献却很大。在他的“差分机”中,他首次提出了“储存库”以及“运算室”,以及输入输出设备。在他后来构想的“分析机”中,人们可以使用指令进行编程!实现分支和跳转等逻辑。可以说现代计算机的结构几乎就是他的分析机的翻版(不过我们使用的是电子元件,而他使用的是机械齿轮)!鉴于他的这些贡献,他被公认为计算机之父。

尽管当年的工业水平限制了人们在现实中制造一台计算机,但是并不妨碍进行数学上的研究。

1936年,图灵(Alan Turing)提出了图灵机模型,他从理论上证明了通用计算。图灵机具体是什么东西,我们下一篇文章再讲。

尽管图灵机只是一个理想中的模型,但是它给我们如何去制造这样一个机器提供了一个方向。

1937年,阿塔那索夫构想出了使用电子管的计算机,在研究生贝瑞的帮助下制造了阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常称为ABC机)。这是世界上第一台电子计算机,尽管它只能用于解线性方程组,但是它的思想被后来的计算机借鉴:

  • 使用二进制表示所有的数字和数据
  • 使用电子器件而不是齿轮等机械进行所有计算
  • 分离储存和计算部件

在现代计算机中,这些思想仍然存在。

1946年,第一台通用计算机:ENIAC诞生,但是这台计算机和现代计算机有一些区别,其一是它使用的是10进制而不是2进制进行计算,他也不像现代计算机一样从存储器读取程序,换句话说,ENIAC不是存储程序式的计算机,编程是通过手工插接线的方式进行的(没有内部存储器,操纵运算的指令分散在许多电路部件中,每次不同的计算必须由人工搭配大量的运算部件,甚至更改计算机内部的物理线路)。在ENIAC研制过程中,研制人员就已经发现了这个严重缺点,并开始研究解决这个问题。

1952年,第一台现代意义上的通用计算机EDVAC被制造了出来,它拥有存储器可以储存程序,也使用二进制进行计算,几乎包含了现代计算机的一切特征。

1958年,第一台全晶体管的计算机问世,晶体管的发明,使得计算机的尺寸和功耗都大为减小,更是为以后集成电路计算机的出现埋下了伏笔。

19世纪60年代,集成电路开始发展,IBM推出了第一台由集成电路构成的计算机IBM System/360系列,人们不再完全使用一个个独立的晶体管去构建计算机,这使计算机的可靠性大大增加了。

70年代初,最早的“个人电脑”之一Kenbak-1问世,这台电脑在当时售价$750,它使用开关作为输入,灯泡作为输出。然而两年内只销售出去了40台,研发它的公司也倒闭了……

此图片出自计算机历史档案馆http://www.computerhistory.org

这台电脑完全使用TTL集成电路构成,拥有256Byte的内存,每秒大约能执行1000条指令。(我们的Mercury CPU就更类似这台计算机,但因为现今更为优秀的集成电路工艺,我们可以实现比它强大得多的性能)

同样是在70年代初,Intel推出了第一个单芯片的处理器,它将计算单元、控制单元集成进了一块芯片。这就是4004:

By Thomas Nguyen – Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=47684767

随后,Intel又设计了8008和8080,而8080则是第一个真正普及的微处理器。

至此,计算机的结构已经和当今的计算机几乎完全一样了。

再往后,得益于集成电路的飞速发展,硅片上单个的晶体管越来越小。1971年发布的4004CPU使用的工艺是10um,而到了40年后的2011年,这个值是32nm,而现如今,这个值是10nm。由于晶体管的尺寸越来越小,在同样大小,甚至是更小的硅片上我们可以放上更多的晶体管,因此CPU的设计者就有能力使用更多的手段使设计出的CPU有更强大的性能。在相当长的时间内,程序员们不需要对程序做更多优化,只用更换更好的CPU就可以直接提升性能了。

在现代的CPU中,实际上很大一部分晶体管和硅片面积都不是和CPU的计算、控制直接相关的,而是花在提高处理器性能的一个重要部件:cache上。下面这张图展示了Intel i7-5960x CPU的内部结构:

 

 

我们可以看到,中间一块巨大的面积是L3 Cache,Cache的作用是提高CPU访问内存读写数据时的效率,而L3是整个CPU中最后也是最大的一级,在其左右分布的8个核心之中,还分别包含一个L2和L1 Cache。

在核心的上方,是Uncore,直译过来就是“非核心”,Uncore部分的功能是对cache的管理,对核心访问外部设备、与外部设备通信提供支持。

这些部件并不是一个处理器所必须的,但是却是提高处理器性能所以必要的。

 

 

 

 

 

 

 

 

纵观这段历史,我们发现,从巴贝奇的分析机开始,一台计算机就拥有了存储器,控制器,运算部件、输入输出设备这几个部分。这也正是冯·诺依曼结构计算机的基本结构。

得益于集成电路的发明和发展,我们可以将这些部件“模块化”,控制器和运算部件(算术逻辑单元)从计算机中被“独立”出来,成为了现在的“微处理器”,也就是CPU。

这意味着我们的Mercury CPU也需要包含一个控制器,一个算术逻辑单元,除此之外,为了让我们的CPU能够真正的“跑起来”,我们还需要设计外围设备,也就是用于储存程序和储存临时数据的存储器了。

下一篇文章中,我们会来谈一谈CPU的内部结构应该是怎样的。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注