文章目录

  • 冯•诺依曼体系结构推导
  • 内存提高冯•诺依曼体系结构效率的方法
  • 你用QQ和朋友聊天时数据的流动过程
  • 与冯•诺依曼体系结构相关的一些知识

冯•诺依曼体系结构推导

计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备。计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出,于是就得到了以下流程图。

但是计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,控制何时从输入设备获取数据,何时输出数据到输出设备等。对应到C语言当中,算术运算就完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与逻辑或等,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等。

而我们后人就将这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU。

但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。

所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存。

内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
于是就形成了最终的冯诺依曼体系结构。

注意: 这里存储器只是内存,不包括外存。

内存提高冯•诺依曼体系结构效率的方法

在这里大多数人有一个疑惑就是,先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?

说明这个问题之前,我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。

这里不得不说到的就是局部性原理:根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据。

输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。

你用QQ和朋友聊天时数据的流动过程

要使用QQ,首先需要联网,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。

刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。
在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。

与冯•诺依曼体系结构相关的一些知识


根据冯诺依曼体系结构图,我们可以知道,站在硬件角度或是数据层面上,CPU只和内存打交道,外设也只和内存打交道。到这里我们也可以说明一个问题:为什么程序运行之前必须先加载到内存?
因为可执行程序(文件)是在硬盘(外设)上的,而CPU只能从内存当中获取数据,所以必须先将硬盘上的数据加载到内存,也就是必须先将程序加载到内存。

常见的输入设备和输出设备(拓展):
 输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等。
 输出设备:显示器、音响、网卡、硬盘、打印机等。
注意: 同种设备在不同场景下可能属于输入设备,也可能属于输入设备。

我们经常说CPU当中有寄存器,实际上寄存器不仅仅在CPU当中存在,在其他外设当中也是有寄存器的。例如,当我们敲击键盘时,键盘是先将获取到的内容存储在寄存器当中,然后再通过寄存器将数据写入内存当中。

在物理层面上,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线。

冯 • 诺依曼体系结构相关推荐

  1. 网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...

    1 计算机的基本硬件组成 早期,DIY一台计算机,要先有三大件 CPU 内存 主板 1.1 CPU 计算机最重要的核心配件,中央处理器(Central Processing Unit). 计算机的所有 ...

  2. (134)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构

    1.1 FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构: 5) ...

  3. 【linux系统编程】理解冯•诺依曼体系结构

    冯•诺依曼体系结构 Von Neumann Architecture 正文开始@Assassin 目录: 冯•诺依曼体系结构 1. 冯•诺依曼模型: 2. 冯•诺依曼体系结构推导: 3. 设备的工作原 ...

  4. 冯·诺依曼体系结构介绍

    1.什么是冯·诺依曼体系结构 冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据 ...

  5. 冯·诺依曼体系结构总结

    1.冯诺依曼结构简介 冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相 ...

  6. 冯·诺依曼体系结构 -- 理解

    冯·诺依曼 体系结构 一.背景 从20世纪初,物理学和电子科学家们就在争论制造可以进行数值计算的计算器应该采用什么样的结构.人们被 十进制 这个人类习惯的计数方法所困扰.所以,那时以研制模拟计算机的呼 ...

  7. 冯·诺依曼体系结构详解(内附讲解视频)

    冯·诺依曼体系结构(Von Neumann Architecture ) 简介 体系结构 特点 作用 冯诺依曼体系结构视频详解 ( 如果您觉得文字描述过于枯燥,可点击此处观看视频讲解) 简介 1946 ...

  8. 【Educoder作业】冯·诺依曼体系结构及工作原理理解

    [Educoder作业]冯·诺依曼体系结构及工作原理理解 所有的那个实际场景模拟的题就不更了,没难度,趣味性更高. 这个题和我们之前的一篇博客里面的题只一模一样的,链接. 我们这里就不做任何讲解了,要 ...

  9. 【Linux进程概念——上】冯 • 诺依曼体系结构 | 操作系统 | 进程 | fork | 进程状态 | 优先级

    文章目录 [写在前面] 一.冯 • 诺依曼体系结构

  10. 【Linux进程概念】冯 诺依曼体系结构 操作系统 进程 fork 进程状态 优先级

    文章目录 [写在前面] 一.冯 ? 诺依曼体系结构 ?? 体系结构 ?? 数据流向 ?? 实例 二.操作系统 (Operator System) ?? 概念 ?? 计算机体系及操作系统定位 ?? 管理 ...

最新文章

  1. 你太菜了,竟然不知道Code Review...
  2. python文件输入和输出
  3. 【开发工具】盘点IDEA那些超级实用插件
  4. 给JDK设置tmp目录的办法
  5. Atiitt 文档处理之道 attilax著
  6. matlab卷积神经网络的创建与图片识别
  7. OpenPose 命令行说明
  8. HTML页面跳转及传递参数
  9. java爬取国家统计局省市县及编码
  10. 创建型模式大全(Java讲解)
  11. java poi 追加_使用POI 向Excel中追加数据
  12. 如何记账,记录家庭收支情况
  13. 一不小心就触碰红线...程序员必须知道的法律知识有哪些?
  14. linux考出光盘数据,电脑如何复制数据到光盘|电脑在光盘中存储数据的方法
  15. 获取google Map API Key方法
  16. 如何实现3D网页游戏?
  17. CodeForce#1625B Elementary Particles解题笔记
  18. 企业微信机器人发送消息
  19. 性能测试——各大厂质量保障实践分享汇总
  20. Demo:超市管理系统(python)

热门文章

  1. 智能硬件产品开发流程梳理
  2. 各国货币符号(Copy的)
  3. Java的重写和重载
  4. Linux系统设置屏幕分辨率
  5. VisualStudio各版本的安装与使用(持续更新)
  6. C++ 虚函数实现:虚函数表 虚表指针
  7. 基于Python开发WebService-2:客户端(suds、zeep)
  8. python人脸检测与微信小程序_[源码和文档分享]基于深度学习Python实现的支持人脸识别和情绪分类的社区APP网站和微信小程序...
  9. 【学习OpenCV4】聊聊图像格式
  10. Matlab中_pkg.exe,pkg文件该如何打开?轻松打开pkg文件的方法