冯诺依曼计算机结构
该报告所描述的计算机结构,即为“冯诺依曼计算机结构”,简称呢就是冯诺依曼结构
冯诺依曼和《关于EDVAC的报告草案》
1.长度101页,未完稿
2.论述了两个重要设计思想
(1)存储程序(而不是开关连线)
(2)二进制(而不是十进制)
明确了计算机的五个部分
运算器 CA central arithmetical
控制器 CC central control
存储器 M memory
输入设备 I input
输出设备 O output
冯诺依曼结构的要点:
(1)计算机应由运算器、控制器、存储器、输入设备和输出设备五个部分组成
(2)数据和程序均以二进制代码形式不加区别地存放在存储器中,存放位置由存储的地址决定
存储器中存储的事数据和程序
(3)计算机在工作时能够自动地从存储器中取出指令加以执行……..
核心:
主存的组织形式:
冯诺依曼计算机的类比:
关于计算机运行过程的类比
讲述个小故事,轻松愉快来了解计算机的运转:
如果一开始就深入到计算机内部的复杂结构之中呢,肯定会非常迷惘,为什么这么说呢,看似大家每天都在使用的一个东西,确原来是那么的高深莫测。其实通过上面这张图,可以非常清晰的理解计算机的运行步骤,通过这种方式来入手还是比较轻松愉快的。
其实我也是来通过上述这个小故事来进行清晰认识计算机的运转的,生动形象。
通过这个餐馆的小故事呢?来了解冯诺依曼计算机结构的运转。
冯诺依曼结构的计算机就好比这个小餐馆,CPU就是厨房,而主存呢,就是仓库,仓库里的货架就好比主存当中的存储单元,为货架的每一格都编写了一个序号,相当于主存种的地址,货架上存放的物品相当于存储单元中的内容,主存中会存在计算机的指令,还有数据,对于这个餐馆来说就是厨师需要执行的任务和做菜所使用的原料,那厨房当中承担主要控制任务的就是这位大厨了,它也就是控制器,而运算器的就是厨具了。那我们还需要一些附加的设备。
这个厨师呢,记性不是太好,他必须要在身边有一张纸,上面写着下一张任务单的位置,这里这张纸上写了1,厨师就知道我下一张任务单在仓库的第一格。那么如果把任务单取回来以后,还需要放在身边随时的查看所以他还可以有一个放置当前任务单的位置。
如果取来了任务单就放在这。
那厨师做菜,做完了放哪呢,不能直接端着锅倒在仓库里吧,所以操作台上会有几个盘子,这个盘子呢,就相当于cpu中的寄存器。用于临时存放计算器的运算结果或者要送到运算器的操作数。
我们有可能从主存当中事先会取来 一些操作数,当然也需要执行指令去取来一些操作数,先放到通用寄存器当中, 那好这个餐馆是如何运转的呢? 我们就让它像计算机的运转一样, 计算机运转的核心内容就是执行指令,
计算机执行一条指令的主要步骤呢包括如下四步,
第一步叫做取址,
第二部叫做译码,
第三部称为执行,
第四部是回写。
依次执行完这四部,计算机就完成了一条指令的执行。
那我们就来看看这个冯诺依曼结构的餐馆是如何像计算机一样执行指令的。
现在我们假设这个餐馆处在这样一个状态,
厨师呢
第一步:要做的事情就是查看 下一张任务单的位置在哪,我要去取这张任务单了,我一查,发现是1, 我向主存发送了请求我需要第一格的物品,他并不知道
第一格存放的是什么,他只是根据这里的编号向主存 发出申请,哎,主存并不简单是一些货架, 他还是要有一些控制逻辑,那么这类控制逻辑就会响应控制器的请求,
需要第一格的物品,他就找到了第一格的物品,把第一格的物品给送回去了, 厨师收到了任务单了,就把他放在身边存放当前任务单的位置, 这就完成了第一步,取任务单的工作。
而实际上这一步呢还需要有一项任务。 就是更新下一张任务单的位置。
第一格取完了 等这件事做完之后下一次再去取任务单的时候再去取下一格, 就把它更新为2,那现在不会取第二格了,只是先更新, 等一会去执行下一条指令的时候再根据这个位置去向主存发出请求, 好,那这样的话取任务单的这一步就算真正的完成了。
第二步:在计算机当中称之为译码, 对于这个厨师来说,就是分析刚才拿到的任务单。 你看,看这个任务单上写了这么几条。 第一呢说明了这项任务所需要用的方法。 第二呢说明了这项任务所需要的原料。 看来这个原料有两个位置,一个字仓库,
一个在他身边的盘子里。最后这项任务完成了以后,看起来是炒一盘菜,那么炒完之后呢 还得把成果存放在某个地方, 这个任务单上也指定了,存放在A号的盘子里。好,这个任务就分析完了。 控制器就把他转换成若干组的控制信号一一完成, 这样译码这个阶段就算完成了。
第三步:对计算机执行指令是其核心的步骤, 就叫做执行。对程序来说一样,执行这个已经分析完的任务,
这个任务一共有4步,你先完成第一步,
第一步是要去取第六格的物品。好,与刚才一样, 向主存发出请求说我需要第六格的物品,主存会响应,把第六格的物品送过来。 由于这次是取运算要用的操作数, 所以返回的物品呢控制器就会把它放在运算器的其中一个入口,
然后第二步是取这个运算的第二个操作数。其实 这是放在A号盘子里的,就在厨师身边,很快,马上就可以拿到。
那么第三步是执行这项运算,那么控制器 会给出对应的信号给运算器,让它执行对应的运算,
经过短暂的时间之后呢运算就完成了,运算结果也产生了。 好,执行阶段就到此结束了。 但是我们发现现在运算结果还放在运算器的这个输出端口上。 我们必须要把它转移到另外的地方,根据这条指令的要求, 运算的结果应该是存放在A号的通用计算器里。 好,
那我们在最后一步回写也就是保存结果的时候呢,用控制器 把这个运算结果存放在A号的通用器当中, 这样我们就完成了执行指令的全部过程。
做完了这条指令,控制器也不会闲着,借着来执行下一条指令。 它就会去查看下一张任务单的位置,
跟刚才执行前一条指令的第一步是一样的,先去查看下一张任务单的位置,发现是2, 那么就向主存发出所需要第二格的物品,然后 主存就会把第二格的任务单返回来, 注意我们取回来以后呢要自动更新成下一张任务单的位置, 之后再做13,这个 更新完以后我们就像刚才一样,继续
分析当前取回来这张任务单并完成它所指定的任务,最后保存结果, 然后再去取下一条指令。不断的重复,计算机就会自动的运转起来了。 这个餐馆的工作的过程其实就是我们计算机执行指令的过程。 CPU从主存中取出对应的指令, 那么刚才厨师做的那项任务呢对于计算机当中很可能是这样的, CPU当中寄存器A有一个内容,然后 主存的地址为6的这个单元里有这样的内容, CPU根据这条指令把 主存中地址为6的单元的内容取出来,并把CPU内部寄存器A的内容取出来,
可能执行一个加法, 然后把运算的结果更新到寄存器A当中, 这样就完成了一条加法指令的运算。 这个冯诺依曼结构的餐馆 向我们展示了计算机运行的基本原理,不过餐馆仅仅是餐馆, 从下一节我们就要开始探索真正的计算机的内部结构。 不用担心,其实没有那么复杂。
总体分析一下:
计算机执行一条指令的主要步骤
第一步:取指 Fetch
第二步:译码 Decode
第三步:执行 Execute
第四步:回写 Write-back