好,大家好,这一讲我们来学习冯诺依曼结构 如果说图灵奠定了计算机的理论基础 那么另外一位科学家冯诺依曼则是计算机体系结构的奠基者 冯诺依曼这一辈子最大的贡献就是提出了 现在的计算机的体系结构,所以我们也称他为计算机之父 事实上大家都知道第一台计算机是 1946年在普林斯顿大学诞生的 那么这些实际的研究者向默里奇、埃里克等等这些 计算机之父的桂冠并没有戴在他们的头上 而是戴在了冯诺依曼这样一个数学家的头上 为什么这样那就是因为冯诺依曼提出了现在计算机的体系结构 这个体系结构从第一台计算机到 今天已经历经将近70年的时间了 计算机的技术和它的性能等等各个方面 都已经发生了巨大的变化 我们今天的一台普通的微型计算机它的性能 已经远远高出于当初的一台巨型机了 但是它的整个主流的体系结构依然还是冯诺依曼结构 所以我们说冯诺依曼是现代计算机之父 冯诺依曼计算机的一个结构有什么样的一个特点那 它是由主要的这样三个方面的特点 第一:他提出了二进制,或者说他采用了二进制 我们在前面的课程中,我们已经详细的给大家讨论过 计算机为什么要选择二进制或者说为什么 要采用二进制的这样的一个理由 那么冯诺依曼这样一这个体系结构 或者冯诺依曼计算机它就是采用的二进制 这样的使得整个的计算机在结构上或 它的性能上都有了相对十进制计算来讲 有了更大的一个质的飞跃,第二那 冯诺依曼提出计算机的硬件是由这样五个部分来组成的 即运算器,控制逻辑单元或者说是控制器,存储器 输入设备和输出设备,那么还有一点更重要的 就是它在工作原理上,他提出了存储程序原理 下面我们来简单的来介绍一下,这样三大特点中的后两大 第一大采用二进制我们前面有过详细的讨论 这就是冯诺依曼体系结构的一个特点 以运算器为核心由这样五个部分来构成的这样一个结构示意图 所有的输入和输出也就是包括程序,包括数据 他们都通过输入设备 首先进入到运算器或者说首先进入到cpu 然后经过处理之后,再到输出 那么有可能通过输入设备的进来的数据会很多 那么cpu里头,我们前面已经讲了 cpu里头能够存放数据的地方很少 只有一些内部的寄存器组 那么这些数据不论它是最终存放在哪里 是存放在内存里还是存放在外存里 实际上它都先通过cpu再转发出去 同样的如果要把一个数据输出 不论这个数据曾经在哪里,在内存还是在外存 那么它都必须从内存拿过来再到输出设备送出去 所以这就是冯诺依曼结构的特点 由这样子五个部分构成,所有的输入和输出都是要通过cpu的 所有的运算都是以运算器为核心来进行的 这个是它的一大特点,中间的这一部分 实际上大家看就是我们前面讲的所谓的主机系统 那么冯诺依曼基本工作原理是什么样的 首先在讲这个原理之前,我得给大家声明一下 仅仅靠这里几分钟的描述或者是十几分钟的描述 我们实际上很难理解它的确定的或者说 把它的工作原理真正变成自己能够理解的内容 我们在这里只能给大家一个简单的描述 让同学们从思想上或者从概念上 理解一下冯诺依曼到底他的计算机是怎么工作的 如果大家真正要想理解它工作过程 实际上我们需要后续课程通过不断的学习程序 编制或者甚至在汇编级别上的程序编写 大家才能逐渐的去理解它,现在我们所学的这些内容 实际上是后续课程的一个基础 就像我们第一次课大家讲的那样 我们大学计算机实际上所有计算机课程的第一门课它的基石 所有在这里我们先简单的为大家奠定一点基础 冯诺依曼的基本原理,我们刚才提到它叫存储程序原理 那么何为存储程序原理,也就是这样描述的 他说将计算机或者说将计算的过程 用一些指令按照一定的顺序编写成程序 并且存放在存储器中保存起来 然后那在执行的时候 按照指令在这个程序中的顺序被一条一条的取出来执行 然后整个的执行过程是由控制器来控制的 这就是它的存储程序原理 这个原理今天我们听起来似乎非常的正常 本来就应该是这样的大家可能心里会这样想 我们今天的程序实际上编完了以后 计算机就是按我们的程序所设计的 这样一种顺序一条一条的这样子取出来执行 但是事实上这就是因为冯诺依曼奠定了这样的基础 今天才会有这样的效果,在他之前不是这样子工作过程 好下面我们来通过它的这个一个图 我们描述一下,我们上一讲里头已经讲过 程序是由指令的序列来组成的 也就是说程序里面是一条一条的指令 那么指令按照这种顺序构成了程序 那么我们编写程序的时候 我们编完了以后一定是以某一种文件的形式放在硬盘里头 那么在执行的时候这个程序是一定要进入到内存里 它才能够执行,那么现在我们就看它已经到了内存这样情况 到了内存里头以后,这个指令就按照 这个程序就按照这样的顺序在里头放好了 那么我们上一讲里头还提到一个部件叫程序计数器 程序计数器就相当于一个指挥棒一样 当我们的程序进入到了内存之后 这个程序如果要开始运行的时候 程序计数器它自然的就会把这个指挥棒指向了 我们现在程序中的第一条指令 所以我们上次说它叫指令指针 就是说它的这个程序计数器本身是个寄存器 里边放的实际上是一个二进制编码 这个二进制编码它的性质是一个地址的性质 就像我们门上的这个门牌号码一样 它属于一种地址的含义,就是指向了某一个房间 这个房间在哪那 就是内存的存放第一条指令这样的一个单元 好了,指向这里以后那,cpu开始到内存里去取指令 因为我们指令必须取回来 这上次我们讲过了必须取回来以后 到了cpu里头要进行分析也就是指令的译码 然后才能决定去执行还是取操作数等等这样的过程 所以cpu第一件事要把它取出来 取出来以后下面的步骤就是我们上一讲提到过的 指令的执行过程,首先进行分析其次那分析完了以后 才能知道它是干什么的,比如它是要做加法运算 那么我们就需要去取操作对象 这个操作对象也在内存里头,取完操作对象过来好了 然后我们现在开始去执行,比如求加法求和 执行完了以后那,它的和数还是要取回去要送回去 所以它的结果一定是要放回去的 这就是一条指令的执行这样的过程就结束了 那么执行完了以后那 下面按我们的设计应该接着就是执行第二条指令 所以紧接着第二条会被取出来分析执行 再然后第三条指令再分析执行等等这样的过程 一直到结束为止 这个是我们存储程序原理用一个示意图 来描述就是这么一个简单的过程 我们用文字来描述一下,它是这样子的描述 首先从内存里取数据然后送到cpu里头进行译码 或者说对指令进行分析确定要执行哪一种操作 如果决定了以后如果需要的话 我们去取操作的对象,取完了以后我们进行执行这条指令 执行完了以后,我们再存放结果 然后去判断一下我们的程序执行完了没有 也就是说我们所有的指令是不是都执行结束 如果说没有执行结束,我们继续回到上一条第一条 就是这样子一直循环下去往复直到结束为止 这个就是它刚才我们用这个图所描述的计算机执行程序的过程 也就是这样一个过程 这个过程就是存储程序原理的一种描述方式