计算机硬件基本组成,需要掌握两种结构,第一种是早期的冯诺依曼结构,另一种是现代计算机普遍采用的结构,其实也是冯诺依曼结构的一个优化。
冯诺依曼机的背景:
什么是冯诺依曼结构的计算机?世界上第一台计算机是埃尼亚克,当时冯诺依曼就是这台计算机设计的一个顾问,这台计算机一个很大的缺点就是每一步的计算需要执行什么指令,需要这些程序员、操作员们通过手动连接这些线缆的方式来告诉计算机。虽然这台计算机它执行运算的速度很快,但是由于这些程序员们每一次都需要手动的接线来告诉计算机下一步应该怎么做,因此埃尼阿克的计算速度就被手工操作的所需要的耗时给抵消了,为了解决这个问题,冯诺依曼第一次提出了存储程序的概念,所谓存储程序就是指可以把我们需要执行的一系列指令,以二进制代码的方式提前把它输入到计算机的主存储器当中,也就是我们熟悉的内存里边,然后计算机会根据存储器里边存储的这一系列的指令来一条一条的执行,直到程序执行结束。对于埃尼亚克这台计算机是程序员们告诉他一条指令他就往下执行一条指令,说一句做一句,而冯诺依曼提出的存储程序的实现就意味着我们可以把我们想要让计算机执行的一系列指令,全部一口气告诉计算机,并且全部先放到主存里,然后接下来会由计算机一条一条的来执行这些指令,程序员们就不需要每一步都进行手工连接的操作,这就可以大幅提升计算机的计算速度,基于他提出的这个设计方案世界上第一台具有冯诺依曼结构的计算机就诞生了,这台计算机的英文缩写叫 EDVAC 。
这是冯诺依曼计算机的硬件结构,在这个图中我们用实线箭头来表示数据线也就是说数据可以跟着实线箭头的流动方向,来相互的传递传输,像这种双箭头就意味着两个部件之间你来我往的数据传输,另外用虚线来表示控制线和反馈线。
具体分析一下这个图是什么意思?计算机其实就是用来处理数据的,要让计算机处理数据需要有一个输入设备,把数据输入到计算机当中,这里的数据包含我们要进行数学运算的数据,也包含了程序也就是指令集合。输入设备的一个作用就是把计算机要处理的这些信息转换成机器能够识别的形式,就是0101这样的二进制数,我们输入的这些数据程序通过输入设备处理之后,这些数据事先流向了运算器,然后通过运算器的中转才会把这些程序数据放到内存也就是所谓的存储器当中,这个存储器就是用来存放我们要处理的数据,还有程序指令的,中间的运算器最主要的一个功能是实现算术运算还有逻辑运算,算术运算就是加、减、乘、除这些运算,逻辑运算指的就是与或非这些运算,经过运算器的处理之后,数据的运算结果会通过输出设备把它转换成我们人类比较熟悉的形式。还有一个非常重要的部件叫控制器,控制器会用一些电信号来协调这些部件相互配合着工作,控制器也会负责来解析存储器里存储的那些程序指令,所以这儿有一条存储器到控制器的一个数据线,这条数据线其实就是控制器从存储器当中,读取出一条指令的一个数据流。比如说读入的是一个加法指令还是乘法指令那控制器解析了这条指令之后它才会来指挥这个运算器。执行相应的加减乘除之类的运算,所以程序指令的解析是由控制器来完成的,因此计算机中的控制器就是用来指挥程序有条不紊的运行的,我们输入计算机的这些数据和程序其实就是所谓的软件的模块,这个框里边的部分,其实就是计算机的硬件部件,在计算机系统中软件和硬件在逻辑上是等效的,什么意思呢?就是说对于同一个功能我们既可以用软件来实现,也可以用硬件来实现不过通常来说用软件实现的成本更低,但是效率也会更低,用硬件来实现成本会更高,效率也会更高。比如说要实现乘法运算,我们完全可以在运算器里边设计一个专门的硬件电路来实现乘法运算,我们只需要给出一条乘法指令,运算器就可以得到最终的结果。但是如果没有硬件部件其实也可以实现乘法,因为乘法其实可以用多次的加法运算来模拟,我们完全可以使用加法运算的这个指令执行多次加法,用这样的方式来等效的模拟出乘法运算,所以我们才说软件和硬件在逻辑上是等效的。用硬件的方式乘法电路直接计算肯定是更快一些用软件的方式进行多次加法那就需要消耗更长的时间。对于这些控制、线数据线现在理解的不是很透彻也没有关系,之后还会用更详细的例子来分析。
总的来说冯诺依曼结构的计算机有这样的一些特点,第一个特点:计算机有五大部件组成,其中输入设备和输出设备我们可以把它们统称为I/O设备,I的意思是 input,O的意思是 output。第二个特点:指令和数据都是以二进制的方式,同等的地位存放在存储器当中,可以根据存储单元的地址来进行仿存的操作,这个内容我们留在之后再来解释。第三个特点:指令和数据都是用二进制表示的。采用二进制表示的原因(可以很方便的用电信号来表示0和1这样的两种状态)。第四个特点:指令由操作码和地址码组成,操作码就是指明了这条指令它要进行的是什么样的操作。比如说加、减、乘、除,这些就是操作码来指明的,而地址码指明了我们要操作的这些数据存放在内存的什么地址当中,程序执行的过程中就是根据指令里边指明的这个地址码对特定的一个内存单元进行访存操作的。第五个特征是存储程序,就是会提前的把指令和数据存储到存储器当中。第六个特征就是冯诺依曼计算机是以运算器为中心的。运算器处在整个结构的中间位置,无论是输入设备输入数据,还是输出设备输出数据,都需要经过运算器的中转,虽然说我们刚开始输入的这些数据和程序本来就是想要放到存储器里的,但是冯诺依曼这种结构的计算机都是会通过运算器作为中转站把它转存到存储器里边,所以由于数据的传送必须经过运算器来完成,因此说这种结构是以运算器为中心。这就产生了一个问题,我们的运算器本来是用来处理这些数据的核心部件,但是现在所有的数据中转还需要通过运算器来帮忙完成,这样的话会导致数据计算的效率降低。
来看一个例子,我们的计算机本质上就是一个数据的加工厂,数据输入到计算机当中,处理完了之后输出,对于现实世界当中的加工厂通常会有一个采购部门负责采购一些它需要加工的原材料,这其实就是我们输入的数据,另外会有一个生产加工的部门对这些原材料来进行加工处理,还有一个部门是仓储部门,这个部门是用来存放接下来要处理的这些原材料物资的,当我们加工完成之后会由销售部门把产品卖出去,还会有一个霸道总裁来负责指挥各个部门的运行。在这个例子当中采购部门采购的这些原材料本来是可以直接放到仓储部门的,但是现在他偏偏要先把这些东西先交给加工部门,然后让加工部门再来把它转运到仓储部门去,加工完的这些产品我们其实本来可以直接放到仓储部门,然后直接由销售部门从仓储部门取走这些产品,但是当销售部门要取走最终的成品的时候还需要由生产加工部门来进行一个中转,把这些东西交给他,这显然是低效的。
解决方案就是现代计算机的一个结构,传统的冯诺依曼结构的计算机都是以运算器作为核心数据的,传输都需要通过运算器作为中转,现代计算机通常是以存储器为中心,也就是说输入设备的数据是直接放到这个存储器里边的,当运算器处理完这些数据之后输出设备会直接从存储器当中取走最终的数据进行计算结果的输出,就可以更多的解放运算器的时间,让运算器进行更多的运算,我们现在使用的手机、计算机基本上都是这样的一个结构。由于运算器还有控制器之间的逻辑关系十分紧密,在大规模集成电路制作工艺出现了之后,这两个部件通常是被集成在同一个芯片上的,整合了这两个部件的芯片就是我们现在熟悉的CPU,因此CPU里边既包含了运算器,也包含了控制器。
把结构框图给简化一下就可以表现成上面这样的形式,CPU里边包含了运算器和控制器,控制器通过控制线来告诉运算器接下来应该执行的是加、减、乘、除中的哪个运算,另外控制器也会来控制主存储器的读写,还有输入输出设备的启动、停止,主存储器和CPU之间会进行数据的交换,第一种就是需要参与运算的那些数据。比如 x、y 之类的一些变量另外一种数据,也就是指令,指令会放到控制器当中,由控制器来解析这条指令的含义,并且发出相应的控制信号,最右边这个双向的箭头是说我们的 io 设备也就输入输出设备会直接的和主存储器进行数据的交换,主存储器和 cpu 统称为主机。
因此计组里边提到的主机和大家平时熟知的主机是有区别的,平时生活中所谓的主机它里面除了 cpu 主存储器之外还会包含其他的,比如硬盘、风扇之类的设备,因此这个概念大家需要注意一下,另外一个大家比较容易混淆的概念是主存和辅存这两个东西。这两个东西都可以统称为存储器。主存就是主存储器也就是我们熟知的内存,辅存就是辅助存储器,在电脑里边就是我们的机 械硬盘、固态硬盘,虽然它们都是存储器,但是这儿所谓的主机只包含了主存,而辅存我们应该把它归为 io 设备,像我们平时手机里安装的 app 其实就是存放在辅存里边的,只有 app 需要启动运行的时候,才会把辅存里边app相关的程序数据,把它读到主存里边,所以辅存应该把它看作是一种 io 设备。华为手机它这儿所谓的运行内存8GB指的就是主存储器的大小,容量是8GB 机身存储是128GB,这个指的就是辅存。所以主存储器还有辅助存储器,计组里边主机这几个概念大家需要特别的注意一下。
这个小节当中我们简单的介绍了计算机硬件的基本组成分,为五大部分,分别是输入设备、输出设备、主存储器、运算器和控制器,后边这三个硬件部件组成了主机。这一小节中我们学习了两种计算机硬件的结构第一种就是传统的冯诺依曼结构,冯诺依曼首次提出了存储程序的概念,应用这个概念计算机实现了自动化执行代码的事情,另外冯诺依曼结构的计算机是以运算器为中心的,而现代计算机的硬件结构通常是以存储器为中心。运算器和控制器这两个硬件部件在现在代计算机结构中一般都会被集成在同一个芯片里面,这个芯片就是大家熟悉的CPU。下个视频更深入的分析计算机主机的主存储器、运算器、控制器这几个部件内部是怎么构造的,它们之间如何协调的工作。