1964年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家——冯.诺依曼提出了 “存储程序” 的计算机设计理念:即将计算机指令进行编码后存储在计算机的存储器中,需要的时候可以顺序地执行程序代码,从而控制计算机运行。这就是冯.诺依曼计算机体系结构的开端。
一.冯.诺依曼结构的灵魂
早期的计算机是由各种门电路组成的,这些门电路通过组装出一个固定的电路板,来执行一个特定的程序,一旦需要修改程序功能,就要重新组装电路板,所以早期的计算机程序是硬件化的!
然而,祖师爷冯.诺依曼的出现将最初的硬件化程序变为可编程、可存储编码,放在存储器中,随意使用。下面大体介绍一下冯.诺依曼结构的灵魂。
首先需要知道的是,早期的计算机设计中,程序和数据是两个截然不同的概念:数据放在存储器中,而程序则作为控制器的一部分,这样的计算机计算效率低,灵活性较差。冯.诺依曼结构中,将程序和数据一样看待,将程序编码为数据,然后与数据一同存放在存储器中,这样计算机就可以调用存储器中的程序来处理数据了。意味着,无论什么程序,最终都是会转换为数据的形式存储在存储器中,要执行相应的程序只需要从存储器中依次取出指令、执行,冯.诺依曼结构的灵魂所在正是这里:减少了硬件的连接。这种设计思想导致了硬件和软件的分离,即硬件设计和程序设计可以分开执行!!!这就催生了程序员这个职业的诞生!!!
小结
概括的来讲,冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(程序作为控制器的一部分,作为硬件存在),将程序编码存储在存储器中,实现了可编程的计算机功能,实现了硬件设计和软件设计的分离,大大促进了计算机的发展。
灵魂就是将程序从硬件实现转换为软件实现,这也就是计算机的基本工作原理:存储程序控制原理!
二.冯.诺依曼结构的核心设计思想
核心设计思想主要体现在如下三个方面:
- a)程序、数据的最终形态都是二进制编码,程序和数据都是以二进制的形式存储在存储器中的,二进制编码也是计算机能够所识别和执行的编码。(可执行二进制文件:
.bin
文件); - b)程序、数据和指令序列,都是事先存在主(内)存储器中,以便于计算机在工作时能够高速地从存储器中提取指令并加以分析和执行;
- c)确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备。
三.冯诺依曼结构的五个主要组成部分
冯.诺依曼在秘密开发的 EDVAC 写了一篇报告 First Draft of a Report on the EDVAC,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫First Draft,翻译成中文,其实就是《第一份草案》。这样,现代计算机的发展就从祖师爷写的一份草案开始了。
First Draft里面说了一台计算机应该有哪些部分组成,我们一起来看看。
冯.诺依曼确定了”计算机结构“中的5大部件:
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
现在看来,运算器(算术逻辑单元)和控制器(控制单元)集成在CPU中实现,存储器(存储单元)的容量不断扩大、输入/输出设备不断更新,这些部件构成了当代计算机硬件系统的基本组成。
我们手机里只有 SD 卡(Secure Digital Memory Card)这样类似硬盘功能的存储卡插槽,并没有内存插槽、CPU 插槽这些东西。没错,因为手机尺寸的原因,手机制造商们选择把 CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫SoC,也就是 System on a Chip(系统芯片)。
1.运算器
首先计算机要有运算处理数据的能力,所以需要一个处理单元来完成各种算数运算和逻辑运算,这就是算术逻辑单元(Arithmetic Logic Unit,ALU)。ALU的主要功能就是在控制信号的作用下,完成加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算以及移位、补位等运算。
运算器的主要部件就是ALU,运算器的处理对象是数据,所以数据的长度以及数据的表示方法,对运算器的影响很大。大多数通用计算机是以16、32、64位数据作为运算器一次处理数据的长度。能够对一个数据的所有位同时处理运算器称为并行运算器,一次只能对数据的一个位处理的运算器称为串行运算器。
运算器与其他部分的关系:
计算机运算时,运算器的操作对象和操作种类由控制器决定。运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中),而且运算器对内存数据的读写是由控制器来进行的。
2.控制器
控制器又称为控制单元(Control Unit),是计算机的神经中枢和指挥中心,只有在控制器的控制下,整个计算机才能够有条不紊地工作、自动执行程序。
控制器的工作流程为:从内存中取指令、翻译指令、分析指令,然后根据指令的内存向有关部件发送控制命令,控制相关部件执行指令所包含的操作。
控制器和运算器共同组成中央处理器(Central Processing Unit),CPU是一块超大规模集成电路,是计算机运算核心和控制核心,CPU的主要功能是解释计算机指令以及处理数据。
3.存储器
存储器的主要功能是存储程序和各种数据,并且能够在计算机运行过程高速、自动地完成程序或者数据的存储,存储器是有记忆的设备,而且采用两种稳定状态的物理器件来记录存储信息,所以计算机中的程序和数据都要转换为二进制代码才可以存储和操作。
存储器可以分为内部存储器(内存)和外部存储器,两者在计算机系统中各有用处,下面大概介绍一下两种存储器的特点:
Ⅰ.内部存储器
内部存储器称为内存或者主存,是用来存放欲执行的程序和数据。
在计算机内部,程序和数据都是以二进制代码的形式存储的,它们均以字节(byte)
为单位(8位bite
)存储在存储器中,一个字节占用一个存储单元,并且每个存储单元都有唯一的地址号。
这里以字节(8位)为存储单元,就与上面运算器的操作数据的大小联系起来了,16、32、64都是8的倍数
CPU可以直接使用指令对内部存储器按照地址进行读写两种操作:
- 读:将内存中某个存储单元的内容读出,送入CPU的某个寄存器中;
- 写:在控制器的控制下,将CPU中某寄存器内容传到某个存储单元中。
要注意,内存中的数据和地址码都是二进制数,但是两者是不同的,一个地址可以指向一个存储单元,地址是存储单元的位置,数据是存储单元的内容,数据可以是操作码、可以是CPU要处理的数据、也可以是数据的地址,地址码的长度由内存单元的个数确定。
内存的存取速度会直接影响计算机的运算速度,由于CPU是高速器件,但是CPU的速度是受制于内存的存取速度的,所以为了解决CPU和内存速度不匹配的问题,在CPU和内存直接设置了一种高速缓冲存储器Cache。 Cache是计算机中的一个高速小容量存储器,其中存放的是CPU近期要执行的指令和数据,其存取速度可以和CPU的速度匹配,一般采用静态RAM充当Cache
内存按工作方式的不同又可以分为两部分:
RAM:随机存储器,可以被CPU随机读取,一般存放CPU将要执行的程序、数据,断电丢失数据
ROM:只读存储器,只能被CPU读,不能轻易被CPU写,用来存放永久性的程序和数据,比如:系统引导程序、监控程序等。具有掉电非易失性。
Ⅱ.外部存储器
外部存储器主要来存放”暂时“用不着的程序和数据,可以和内存交换数据。
一般是磁盘、光盘、U盘、硬盘等。
4.输入/输出设备
实际上我们操作计算机都是与输入输出设备在打交道。
鼠标键盘是输入设备、显示器是输出设备;
手机触摸屏即时输入设备又是输出设备;
服务器中网卡既是输入设备又是输出设备;
所有的计算机程序都可以抽象为输入设备读取信息,通过CPU来执行存储在存储器中的程序,结果通过输出设备反馈给用户。