热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

2.3冯·诺伊曼结构的小故事

计算机组成2计算机基本结构2.3冯·诺伊曼结构的小故事如果一开始就深入到计算机内部的复杂结构中,也许会让人有些迷惘。我们还是用一个轻松愉快的方式来入手。通过一个餐馆的小故事来了解冯

计算机组成

2 计算机基本结构

2.3 冯·诺伊曼结构的小故事

Screen Shot 2018-05-26 at 12.05.56

如果一开始就深入到计算机内部的复杂结构中,也许会让人有些迷惘。我们还是用一个轻松愉快的方式来入手。通过一个餐馆的小故事来了解冯诺依曼结构是如何运转的。

Screen Shot 2018-05-26 at 12.06.08

冯·诺依曼结构的计算机就好比这个餐馆,CPU就是厨房,而主存就是仓库,仓库里的货架就好比主存当中的存储单元。我们为货架的每一格都编上了一个序号,相当于主存当中的地址,货架上存放的物品相当于存储单元当中的内容,主存中会存放着计算机的指令,还有数据,对于这个餐馆来说就是厨师需要执行的任务和做菜所用的原料。那厨房当中承担主要控制任务的就是这位大厨了,它也是控制器,而运算器则是厨具。那我们还需要一些附加的设备,这个厨师记性很不好,他必须要在身边 有一张纸,上面写着下一张任务单的位置,这里这张纸上写了1,厨师就知道我下一张任务单放在仓库的第一格, 那么如果把任务单取回来以后,还需要放在身边随时的查看所以他还可以有一个放置当前任务单的位置,如果取来了任务单就放在这。那厨师做菜,做完了菜放哪呢?不能直接端着锅冲到仓库去吧,所以他身边操作台上总得放几个盘子,相当于CPU当中我们就称这些盘子为通用寄存器,用于临时存放计算器的运算结果或者要送到运算器的操作数。

Screen Shot 2018-05-26 at 12.42.30

我们有可能从主存当中事先会取来一些操作数,当然也需要执行指令去取来一些操作数,先放到通用寄存器当中。这个餐馆是如何运转的呢? 我们就让它像计算机的运转一样。

Screen Shot 2018-05-26 at 12.06.20

计算机运转的核心内容就是执行指令。计算机执行一条指令的主要步骤包括如下四步:

  • 第一步叫做取址
  • 第二步叫做译码
  • 第三步称为执行
  • 第四步是回写

依次执行完这四步,计算机就完成了一条指令的执行。那我们就来看看这个冯诺依曼结构的餐馆是如何像计算机一样执行指令的。

Screen Shot 2018-05-26 at 12.06.30

现在我们假设这个餐馆处在这样一个状态,厨师第一步要做的事情就是查看下一张任务单的位置在哪,我要去取这张任务单了,我一查,发现是1。我向主存发送了请求我需要第一格的物品,他并不知道第一格存放的是什么,他只是根据这里的编号向主存发出申请,哎,主存并不简单是一些货架,他还是要有一些控制逻辑,那么这类控制逻辑就会响应控制器的请求,需要第一格的物品,他就找到了第一格的物品,把第一格的物品给送回去了。

Screen Shot 2018-05-26 at 12.49.26

厨师收到了任务单了,就把他放在身边存放当前任务单的位置。这就完成了第一步,取任务单的工作。而实际上这一步呢还需要有一项任务,就是更新下一张任务单的位置。

Screen Shot 2018-05-26 at 12.56.43

第一格取完了,等这件事做完之后下一次再去取任务单的时候再去取下一格,就把它更新为2,那现在不会取第二格,只是先更新,等一会儿去执行下一条指令的时候再根据这个位置去向主存发出请求。好,那这样的话取任务单的这一步就算真正的完成了。

Screen Shot 2018-05-26 at 13.07.21

第二步,在计算机当中称之为译码,对于这个厨师来说,就是分析刚才拿到的任务单。你看这个任务单上写了这么几条。第一呢说明了这项任务所需要用的方法。第二呢说明了这项任务所需要的原料。看来这个原料有两个位置,一个字仓库,一个在他身边的盘子里。最后这项任务完成了以后,看起来是炒一盘菜,那么炒完之后呢还得把成果存放在某个地方,这个任务单上也指定了,存放在A号的盘子里。好,这个任务就分析完了。

Screen Shot 2018-05-26 at 12.06.42

控制器就把他转换成若干组的控制信号,准备一一来完成,这样译码这个阶段就算完成了。

Screen Shot 2018-05-26 at 13.14.29

第三步,对计算机执行指令是其核心的步骤,就叫做执行。对厨师来说也一样,执行这个已经分析完的任务。这个任务一共有4步,你先完成第一步,第一步是要去取第六格的物品。好,与刚才一样,向主存发出请求说我需要第六格的物品,主存会响应,把第六格的物品送过来。由于这次是取运算要用的操作数,所以返回的物品控制器就会把它放在运算器的其中一个入口。

Screen Shot 2018-05-26 at 13.21.07

然后第二步是取这个运算的第二个操作数。其实,这是放在A号盘子里的,就在厨师身边,很快,马上就可以拿到。

Screen Shot 2018-05-26 at 12.06.54

那么第三步是执行这项运算,那么控制器会给出对应的信号给运算器,让它执行对应的运算,经过短暂的时间之后呢运算就完成了,运算结果也产生了。好,执行阶段就到此结束了。但是我们发现现在运算结果还放在运算器的这个输出端口上。我们必须要把它转移到另外的地方。

Screen Shot 2018-05-26 at 12.07.03

根据第四条指令的要求,运算的结果应该是存放在A号的通用寄存器里。好,那我们在最后一步回写也就是保存结果的时候呢,用控制器把这个运算结果存放在A号的通用器当中。

Screen Shot 2018-05-26 at 13.30.45

这样我们就完成了执行指令的全部过程。做完了这条指令,控制器也不会闲着,接着来执行下一条指令。

Screen Shot 2018-05-26 at 13.34.40

它就会去查看下一张任务单的位置,跟刚才执行前一条指令的第一步是一样的,先去查看下一张任务单的位置,发现是2。那么就向主存发出需要第二格的物品,然后主存就会把第二格的任务单返回来。

Screen Shot 2018-05-26 at 13.38.01

注意我们取回来以后呢要自动更新成下一张任务单的位置3, 之后再做是3。这个更新完以后我们就像刚才一样,继续分析当前取回来这张任务单并完成它所指定的任务,最后保存结果。然后再去取下一条指令,不断的重复,计算机就会自动的运转起来了。

Screen Shot 2018-05-26 at 12.07.30

这个餐馆的工作的过程其实就是我们计算机执行指令的过程。CPU从主存中取出对应的指令,那么刚才厨师做的那项任务,对于计算机当中很可能是这样的,CPU当中寄存器A有一个内容,然后主存的地址为6的这个单元里有这样的内容,CPU根据这条指令把主存中地址为6的单元的内容取出来,并把CPU内部寄存器A的内容取出来,可能执行一个加法,然后把运算的结果更新到寄存器A当中,这样就完成了一条加法指令的运算。

Screen Shot 2018-05-26 at 12.07.42

这个冯诺依曼结构的餐馆,向我们展示了计算机运行的基本原理。不过餐馆仅仅是餐馆,从下一节我们就要开始探索真正的计算机的内部结构。不用担心,其实没有那么复杂。


推荐阅读
  • 显卡驱动对游戏的影响及其提升效果的研究
    本文研究了显卡驱动对游戏体验的提升效果,通过比较新旧驱动加持下的RTX 2080Ti显卡在游戏体验上的差异。测试平台选择了i9-9900K处理器和索泰RTX 2080Ti玩家力量至尊显卡,以保证数据的准确性。研究结果表明,显卡驱动的更新确实能够带来近乎50%的性能提升,对于提升游戏体验具有重要意义。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在iOS平台中的Metal框架中,对于if语句中的判断条件的限制和处理方式。作者提到了在Metal shader中,判断条件不能写得太长太复杂,否则可能导致程序停留或没有响应。作者还分享了自己的经验,建议在CPU端进行处理,以避免出现问题。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
author-avatar
手机用户2502931101
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有