上篇 简明数字逻辑
第1章 概论
1.1 计算机历史
1.1.1 第一代电子管计算机
为现代计算机奠定理论基础的英国人布尔(Boole.George),在20世纪创立了“布尔代数”。20世纪初,Ecclers和Jordan两位工程师用电子管组成了双稳态触发器,生产了记忆元件,可以用来表示“1”和“0”,这就为现代计算机打下了物质基础。被计算机科学界普遍认可的第一台计算机,是1946年在美国宾夕法尼亚大学实验室诞生的,称为电子数值积分计算机(Electronic Numerical Integrator and Computer——ENIAC)。它由18000个电子管和1500个继电器组成,重达30吨,功耗为150kW,只有20个寄存器能存储数据。它的运算速度只有5000千次/秒,没有软件,需要靠6000个开关和众多插座来编程进行运算。ENIAC项目组的一个研究人员冯·诺依曼(John von Neuman)发现用大量的开关、插头来编程十分费时,且极不灵活,他提出程序可以用数字形式和数据一起在计算机内存中表示,并提出用二进制替代十进制。
冯·诺依曼设计的计算机由五个基本部分组成:存储器、运算器、控制器以及输入/输出设备,如图1-1所示。首先将编好的程序和数据由输入设备送入存储器中,再将指令从存储器中取出送往控制器进行解释分析,根据指令中的内容产生各种控制信号,自动控制计算机中的所有部件,按时间顺序完成指令内容。这就是冯·诺依曼程序控制的概念,也是当今绝大多数计算机所遵循的规则。
图1-1 计算机的组成
第一代计算机硬件采用电子管(体积大、功耗大)为基本器件,软件主要为汇编语言。其应用于1945—1958年。这一时期的计算机主要为军事与国防技术服务,重点发挥计算机的计算能力,帮助人们解决复杂的计算问题。
1953年,IBM开始研制计算机,并在几年时间里发展壮大,成为领头企业,IBM在1958年推出了最后一台电子管大型机产品709。在第一代计算机中,IBM的成功产品是IBM650小型机,其销售量超过千台,在当时已是很了不起了。1958年,中国科学院计算研究所成功研制出我国第一台小型电子管通用计算机“103机”(八一型)。
1.1.2 第二代晶体管计算机
晶体管早在1948年,由贝尔实验室的John Barrdeen、Walter Brattain和William Shockley发明。晶体管与电子管相比具有体积小、功耗低、工作速度快等许多优点,因此晶体管计算机被称为第二代计算机,主要用于1958—1965年间。第二代计算机不仅在硬件上得到更新,在软件上也有了大的发展,主要体现在高级语言的使用上,如Algol高级语言、COBOL和FORTRAN高级语言,它们使计算机编程更容易。另外某些机器上出现了操作系统(OS)。
第二代计算机在应用上取得了发展,它不仅用于科学计算,还能进行数据处理,如在第二代计算机上运行的COBOL语言就是数据处理应用高级程序并成功进入商业领域、大学和政府部门。这一时期出现了新的职业,如程序员、分析员和计算机系统专家,同时,整个软件产业也由此诞生。
IBM7094是第二代计算机的代表之一,其在科学计算领域成为主力机型,它的机器周期为2μs,有字长为36位的32KB核心内存。为了面向商业,IBM还开发了IBM1041机型,该机型比IBM7094便宜很多,是商业领域的主要机器,它能读/写磁带、读卡和打卡,输出性能较好。
1965年,中国科学院成功研制出第一台大型晶体管计算机“109乙”,之后推出“109丙”,该机在“两弹”试验中发挥了重要作用。
1.1.3 第三代集成电路计算机
1958年,美国的工程师Jack Kilby发明了集成电路IC芯片,将三种电子元件结合到一片小小的硅片上,在单个芯片上可集成几十个晶体管,然后封装。这个发明在1964年开始被大规模采用,当时集成水平能达到几十、几百,在后期达到几千。集成电路的采用使计算机硬件体积变得更小,速度更快,可靠性更高(焊点数成倍减少是原因之一)。集成电路按集成度划分,可分为小规模集成电路(SSI,每片数十器件)、中规模集成电路(MSI,每片数百器件)、大规模集成电路(LSI,每片数千器件)。
第三代集成电路计算机的应用时间为1965—1973年,在这一时期,不仅硬件方面有了历史性突破,软件水平也大大提高,操作系统已普遍采用,计算机的应用领域已非常广泛。同时计算机开始走上通用化、系列化道路。IBM360是最早采用集成电路的通用计算机,也是影响最大的计算机,它为后来的计算机体系结构奠定了基础。
IBM360可同时满足科学计算和商务处理两方面的需求,改变了IBM7094只能用于科学计算,而IBM1041只能用于商业的单一化局面,走向了通用化。IBM360共有6种机型,它们使用相同的汇编语言,其处理能力是递增的。为低型号机写的软件在高型号机上运行没有问题,计算机只存在内存不足问题,这样就出现了系列化计算机。IBM360共有30、40、50、60、65和75六个型号的机型,30型号对应IBM1041,75型号对应IBM7094。
1.1.4 第四代超大规模集成电路计算机
超大规模集成电路(VLSI,器件数目在1万以上)技术使得一个芯片上能集成几万、几十万,甚至百万个晶体管,目前单个芯片上所集成的晶体管数目已达到几亿。有了VLSI技术后,可以把第三代计算机的运算器和控制器等部件集中在一个芯片上,这就是后来的CPU(中央处理器), CPU芯片的出现开创了个人计算机的时代。
第四代超大规模集成电路计算机大约从1973年发展到现在,时间跨度非常大,集成度也有天壤之别。为什么计算机的发展还停留在第四代计算机上呢?原因是第四代计算机的性能大大提高,可以运行大型软件,人们可以编写出智能软件,所以第四代计算机趋向智能化。正是因为第四代计算机有了智能化特征,人们不再考虑硬件的集成度指标,而将第五代计算机定义为智能型计算机。从智能型计算机的角度衡量,当前的计算机当然还称不上智能,所以其仍属于第四代计算机。另外,第四代计算机的主存储器用半导体存储器取代了磁芯存储器,它的容量按照摩尔定律以每18个月翻一番的速度发展。
第四代计算机发展中的伟大成就是个人计算机的诞生。IBM于1981年推出个人计算机,其成为历史上最畅销的计算机。由于IBM个人计算机设计的开放性,许多公司同样可以生产个人计算机,从而推动了新行业的发展,让成千上万人拥有了自己的计算机。第四代计算机发展的另一成果是网络的出现,它的迅猛发展使人们的生活方式、文化活动等许多方面发生了变化,网络目前已成为人们生活的一部分。
随着第四代计算机的发展,该领域的企业排序发生了变化,英特尔(Intel)公司和微软(Microsoft)公司打败了世界上最大的IBM公司,成为世界上计算机产业的领导公司。
1.2 计算机系统的层次结构
从不同的角度分析,计算机系统可以有几种划分层次的方法,本书只介绍最基本、最普遍的划分方法。计算机系统可分为应用层、系统层和硬件层三层,如图1-2所示。
图1-2 计算机系统的层次结构
硬件层是整个计算机系统的基础和核心,所有的功能最终由此层完成。硬件层又细分成硬件设计和硬件电路。硬件设计包括:计算机各部件组成的设计、指令系统设计、微程序控制器设计等,再把它们用数字逻辑设计实现,以便最后生成硬件电路。计算机硬件设计中最重要的设计是指令系统设计和微程序控制器设计。指令系统也称为机器语言,它所提供的是那些计算机硬件可以读懂,并可以直接操纵计算机硬件工作的二进制信息。当前计算机的控制器多采用微程序控制器,其功能是将一条机器指令(由0和1组成的二进制代码)对应为一系列由微指令组成的微程序(也是二进制代码),顺序发出控制命令,控制各逻辑门的打开与关闭,让数据按规定的方向和顺序在硬件部件之间流动,完成指令功能。除了硬件设计人员,人们一般不关心设计流程,因为它是透明的。硬件电路就是具体的集成电路、印制电路板(PCB)等,这个实现是非常复杂的,本书不作介绍。硬件设计的最后内容就是把各种部件功能用数字逻辑内容(电路图)表现出来,再把数字逻辑内容转成硬件电路,整个硬件设计就完成了。计算机组成原理只涉及硬件层的硬件设计部分,其他内容则在相应课程中介绍,所以“计算机组成原理”课程的内容对应于计算机系统中的硬件知识部分。
系统层主要包括操作系统和语言处理程序,语言处理程序即编译器或解释器。操作系统是最主要的系统软件,它控制其他程序的运行,管理系统资源,并且为用户提供操作界面。简单的操作系统如DOS,较复杂的操作系统有UNIX、Linux和Windows XP等。高级语言的源程序可以通过两种方法转换成机器语言(目标程序),一种是通过编译程序在运行之前将源程序转换成机器语言;另一种是通过解释程序进行解释执行,即逐行解释并主动执行源程序的语句。编译程序和解释程序现称为编译器和解释器,它们通常由系统程序员来编写,因为他们熟知硬件对应的机器语言。
应用层包括系统分析、应用软件和语言工具。系统分析是系统分析人员根据对任务的需求分析,设计算法,构建数学模型,并根据数学模型和算法进行概要设计和详细设计。语言工具是程序设计语言,称为高级语言,如C、C++、VC、Java、C#、Delphi和VB等,还有各种数据库语言,以及各种环境平台,它们为各种应用软件提供了丰富的工具。应用软件是面向用户应用的功能软件,编程人员根据用户要求,选择适当的工具编写应用程序,如MIS系统(管理信息系统)、印刷排版软件、多媒体软件、数据处理软件、控制软件、事务处理软件、游戏软件等。
计算机系统是由硬件与软件两部分组成的,简单地说,硬件是看得见摸得着的东西,剩下的就是软件。在早期,计算机系统设计时,硬件设计不考虑软件问题,只考虑一些硬件特性,而软件是在硬件开发完成后,针对具体的硬件条件编写的,所以当硬件更新后,软件就不能用了,必须重新编写。自从IBM360系列推出后,硬件与软件设计开始相互影响,硬件设计要考虑软件的继承性,软件设计要考虑充分发挥硬件特性及通用性。目前CPU的设计一定要考虑当今的软件技术,以更好地配合软件来发挥CPU的效用,反之也一样。如在2005年,软件技术成熟了,已支持双内核CPU的运行,于是人们推出台式机的双内核CPU,而双内核CPU技术早就用在了高端服务器上,只不过这些软件只适合在服务器上运行。台式机的双内核CPU一定要有软件支持,否则它与单内核CPU没有什么区别,因此各软件开发商必须提早设计并行执行软件,以适应双内核CPU;而台式机的双内核CPU也一定要在多数软件支持它的时候被推出,否则就是浪费。
1.3 超级计算机发展史
超级计算机是指某一时期性能最好的计算机。第四代计算机从1973年到现在已四十几年没有再向前发展,原因是第五代计算机要求智能化,这在短期内是无法实现的,而超级计算机多出现在20世纪80年代(超大规模集成电路出现)以后,已经历了五代。在超大规模集成电路出现前,没有真正意义上的超级计算机。另外,超级计算机不能超越时代去比较,如现在的Intel P4CPU就比第二代超级计算机快几十倍。
计算机自问世以来,一直采用冯·诺依曼体系结构,超级计算机也沿用该体系向前发展,其大致经历了以下五个阶段:
第一代,早期的单处理器系统。比如ENIAC、UNIVAC、CDC7600、IBM360等,都是当时最好的计算机,CPU由一个大机柜组成,而不是现在的CPU芯片(没有出现超大规模集成电路)。它们只是计算机的雏形,但是当时堪称第一代超级计算机。
第二代,向量处理系统。20世纪70年代末、80年代初,向量处理机(Vector Processor)成为当时超级计算机的主流,在商业上取得很大成功。其代表机型有Cray-1、C90、T90、NEC-Sx2、XMP和中国的“银河一号”等,称为第二代超级计算机。Cray-1首次引入了流水线概念,给后来的RISC体系结构一个重要启发,有关向量处理系统在本书最后有详细介绍。
第三代,大规模并行处理系统(Massively Parallel Processor, MPP)。它是多计算机系统,采用标准的高性能CPU,由几十台,甚至几千台计算机组成一个超级计算机,并使用高性能专用互联网络连接,属于分布式体系结构。以IBMSP2、Intel Option Red、Cray T3E和中国的“曙光3000”等为代表,称为大规模并行处理系统(MPP),也称为第三代超级计算机。
第四代,共享内存处理系统。它是多处理器系统,在20世纪90年代初期,这种新兴的共享内存的结构开始出现并受到欢迎。多处理器系统把几十片CPU到几千片CPU组成一个超级计算机,CPU共享一个地址空间,由一个操作系统管理。它主要存在内存一致性问题,如几个CPU在某一时刻试图读同一个字或写同一个内存地址。其代表机型有Sun E1000/15000、SGI Origin 2000/3000、中国的“银河三号”“神威一号”等,称为第四代超级计算机。
第五代,机群系统(也称集群系统)。20世纪90年代中、后期,开始出现了许多用廉价组件拼凑起来的集群机(Cluster),其也是多计算机系统,每个计算机系统由Intel或AMD的普通CPU和主板组成。集群系统的兴起得益于近年来CPU、内存条、主板、网络等产品在小型化、高速性、价格、通用性等方面的快速发展。其代表机型有洛期阿拉莫斯宾实验室的Avalon、中国的“曙光4000”系列等。本书最后一章对此有详细介绍。
MPP与第五代集群系统在体系结构上是同构的,均属于分布内存处理方式,区别在于是否采用价廉物美的普通组件。
习题
1.1 电子计算机是什么时候诞生的?有什么特点?
1.2 冯·诺依曼型计算机的主要设计思想是什么?它包括哪些主要组成部分?
1.3 计算机共经历了几个发展阶段?各代计算机的硬件与软件的主要特点是什么?
1.4 什么叫硬件?什么叫软件?
1.5 计算机系统可分为哪几个层次?
1.6 简述计算机系统每个层次的主要内容。
1.7 计算机系统各层次之间的相互联系是什么?
1.8 操作系统的作用是什么?说出目前常用的几个操作系统。
1.9 超级计算机已经经历了几个发展阶段?第三代计算机与第五代计算机的相同之处与不同之处分别是什么?