深入理解冯诺依曼体系结构

文章目录

  • 冯诺依曼体系结构概念
  • 冯诺依曼体系结构的优势
  • 冯诺依曼体系结构的现实体现

冯诺依曼体系结构概念

  冯·诺依曼体系结构也称普林斯顿结构,是现代计算机发展的基础。它的主要特点是“程序存储,共享数据,顺序执行”,即程序指令和数据都存储在同一个存储器中,CPU从存储器中取出指令和数据进行相应的计算。

  该体系结构由美籍匈牙利科学家冯·诺依曼在1945年提出,主要包含以下几个基本组成部分:运算器、控制器、存储器、输入设备和输出设备。运算器负责执行各种算术和逻辑运算;控制器则负责解释指令,控制整个计算机系统的操作;存储器用于存储程序和数据;输入设备用于接收外部数据;输出设备则用于显示或输出处理后的结果。

  冯·诺依曼体系结构的主要特点包括:

1. 单处理机结构,机器以运算器为中心。
2. 采用程序存储思想,即程序和数据都存储在同一个存储器中,并且程序指令和数据可以共享相同的内存地址空间。
3. 指令和数据一样可以参与运算,这意味着处理器可以像处理数据一样处理指令。
4. 数据以二进制表示,这是计算机内部处理信息的基础。
5. 将软件和硬件完全分离,使得软件设计更加灵活和高效。
6. 指令由操作码和操作数组成,操作码指示要执行的操作类型,而操作数则提供操作所需的数据。
7. 指令顺序执行,即处理器按照程序中的指令顺序逐条执行。

  啰啰嗦嗦一大堆,我相信没有人会去特意记这种枯燥乏味的概念知识,我是这样的,看的我头都大了,相比于概念理解更重要,接下来我就带着大家去理解冯诺依曼体系结构。


冯诺依曼体系结构的优势

  首先我们要知道冯诺依曼体系的几个基本组成部分
在这里插入图片描述

输入设备:键盘, 鼠标,扫描仪, 写板等
输出设备:显示器,打印机等
中央处理器(CPU):含有运算器和控制器等
存储器:内存

  各部分之间是相互独立存在,最后通过总线实现连接,这样就能够实现数据的流动,对于数据流动这个概念本质上就是把数据从某一部件拷贝到另一部件,拷贝的快慢就决定了计算机的效率。
  我们已经知道了只要数据流动越快,计算机的效率就越高,那么各个部件的速度又是多块呢?
  我们可以明确得知每个部件的效率是不同的,具体如下图所示:
在这里插入图片描述  当我们有了以上知识储备后,我们来假设现在存在一种结构如下图所示:
在这里插入图片描述  在该结构中没有内存,cpu直接与输入输出设备之间进行数据的传递。
  在该结构中输入输出设备与CPU的速度存在着巨大的差距,这就像是三个人分工合作完成某一任务一样,输入设备将数据传递给cpu进行处理,cpu处理结束后立即将结果交给输出设备,再进行下一次工作,但是问题出现了,由于他们之间速度的差距,cpu会一直处于一种闲置阻塞的状态中,CPU会说输入设备你好没好,你赶紧把数据给我呀,等它拿到输入设备交过来的数据后一瞬间就处理结束,它转头一瞧,CPU:兄弟(输入设备)你快点把数据给我呀,等到cpu再次处理完数据后刚要准备把数据给输出设备,cpu发现,CPU:不是吧老哥(输出设备)你怎么还没有把结果输出呀,它又阻塞起来等输出设备输出,CPU一整个血压飙升。

  这就是木桶短板原理,不管你CPU多牛多块,总体结果还是要看输入输出设备。
在这里插入图片描述

  于是冯诺依曼体系结构闪亮登场。
  冯诺依曼体系结构增加了内存这个单元,内存的速度是介于CPU和输入输出设备之间的,使得计算机的整体效率大幅度提升,但是该体系结构不仅仅是起到平衡速度的作用。
  对于我们的程序必须先从外部加载到内存才能运行起来,我们可以把多个程序加载到内存,然后通过各种调度算法运行我们的程序,这使得CPU的利用率得到进一步强化,CPU表示根本停不下来一直在不断工作,由此计算机的效率问题由硬件问题转移到了软件问题,对于同一台计算机更优秀的软件可以使计算机更加高效。
  对于我为什么程序必须先从外部加载到内存才能运行起来这个问题是由冯诺依曼体系结构决定的,他就是那么规定的,也是必须遵守的。
  关于冯诺依曼体系结构必须强调几点:

  1. 这里的存储器指的是内存
  2. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  3. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  4. 一句话,所有设备都只能直接和内存打交道。

冯诺依曼体系结构的现实体现

  现在假设一个场景,你与你的好朋友通过社交软件进行聊天。
  首先你从键盘输入信息,加载到内存等待调度,调度成功cpu进行处理后再加载到内存等待资源(输出设备),资源就绪后通过网卡输出,你朋友通过网卡接收数据,然后数据加载到内存等待调度,调度成功后cpu处理,处理成功后再加载到内存等待资源,资源就绪再输出到你朋友的显示器上。


本章到此结束,感谢您的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day10 | 232.用栈实现队列、225. 用队列实现栈

232.用栈实现队列 题目:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除…

【leetcode面试经典150题】75. 二叉树展开为链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

修改Docker容器内文件的三种方式

说明:本文介绍修改Docker容器内文件的三种方式 方式一:直接修改 敲下面的命令,进入Docker容器,如mysql docker exec -it mysql /bin/bash修改mysql的配置文件,/etc/my.cnf vim /etc/my.cnf如下,如果vim…

【Hadoop】-Apache Hive使用语法与概念原理[15]

一、数据库操作 创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的:/user/hive/warehouse内 创建数据库并指定hdfs…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时,有一个值会接受nil(因为redis中没有该数据)或者数值,当该值为nil时执行报错,因为会用到将该值与其他数字比较,故报错attempt to compare nil with number 当然…

生成完美口型同步的 AI 代言人视频(及其实现原理详解)

目录 什么是Heygen? Heygen注册 Video Translation(视频翻译 完美口型同步) 实现原理详解 视频翻译部分 完美口型同步部分 什么是Heygen? Heygen是一款在线工具,可帮助您生成具有完美口型同步的 AI 代言人视频。 Heygen注册 https:…

关于springboot内置tomcat最大请求数配置的一些问题

前言 springboot内置了tomcat。那么一个springboot web应用,最大的请求链接数是多少呢?很早以前就知道这个是有个配置,需要的时候,百度一下即可。但,事实并非如此,有几个问题我想大多数人还真不知道。比如…

前端学习<四>JavaScript——54-原型链

常见概念 构造函数 构造函数-扩展 原型规则和示例 原型链 instanceof 构造函数 任何一个函数都可以被 new,new 了之后,就成了构造方法。 如下: function Foo(name, age) {this.name name;this.age age;//retrun this; //默认有这…

大型语言模型高效推理综述

论文地址:2404.14294.pdf (arxiv.org) 大型语言模型(LLMs)由于在各种任务中的卓越表现而受到广泛关注。然而,LLM推理的大量计算和内存需求给资源受限的部署场景带来了挑战。该领域的努力已经朝着开发旨在提高LLM推理效率的技术方…

C语言递归刷题(一)

目录 走台阶题目思路代码 西格玛题目思路代码 用函数实现数的阶乘题目思路代码 digit题目思路代码 Hermite多项式题目思路代码 排列数题目思路代码 逆序输出题目思路代码 结语 走台阶 题目 描述 小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选…

挑战特斯拉?深蓝汽车与华为强强联手

作为中国乃至全球汽车行业的盛宴,4月25日在中国国家展览中心揭幕的2024北京国际车展,吸引了无数企业行业人士的关注。 而就在车展开幕当天,深蓝汽车发布会就爆出了一个大新闻:深蓝汽车将携手华为,打造比特斯拉更好的智…

【开发问题记录】启动某个服务时请求失败(docker-componse创建容器时IP参数不正确)

问题记录 一、问题描述1.1 产生原因1.2 产生问题 二、问题解决2.1 找到自己的docker-compose.yml文件2.2 重新编辑docker-compose.yml文件2.3 通过docker-componse重新运行docker-compose.yml文件2.4 重新启动docker容器2.5 查看seata信息 一、问题描述 1.1 产生原因 因为我是…

FPGA 以太网通信UDP通信环回

1 实验任务 上位机通过网口调试助手发送数据给 FPGA , FPGA 通过 PL 端以太网接口接收数据并将接收到的数据发送给上位机,完成以太网 UDP 数据的环回。 2 系统设计 系统时钟经过PLL时钟模块后,生成了两种不同频率和相位的时钟信号&#…

Python 面向对象——6.封装

本章学习链接如下: Python 面向对象——1.基本概念 Python 面向对象——2.类与对象实例属性补充解释,self的作用等 Python 面向对象——3.实例方法,类方法与静态方法 Python 面向对象——4.继承 Python 面向对象——5.多态 1. 封装的基…

unity cinemachine相机 (案例 跟随角色移动)

安装相机包 打开包管理工具 在 unity registry 搜索cinemachine 会在maincamera中生成一个组件cinemachineBrain 只能通过虚拟相机操控 主相机 虚拟相机的参数 案例 1.固定相机效果 位置 在固定的地方 默认的模式 2.相机跟随人物效果 焦距设置 20 跟随设置 把playere…

使用Tortoise 创建远程分支

1。首先创建本地分支branch1,右键tortoise git->创建分支,输入分支名称branch1,确定。 2。右键tortoise git->推送,按下图设置,确定,git会判断远程有没有分支branch1,如果没有会自动创建…

重看Spring聚焦Environment分析

目录 一、理解Environment的设计 (一)整体理解 (二)聚焦Profiles分析 (三)聚焦Properties分析 二、Environment类图结构分析 三、PropertyResolver源码分析 (一)源码展示说明…

C语言学习/复习36

一、程序的环境与预处理 二、翻译环境与执行环境 三、运行环境 四、预编译(预处理)详解

mac电脑搭建vue环境(上篇)

第一步:mac电脑要有homebrew,如何安装homebrew 点击下方 MAC安装homebrew-CSDN博客 第二步:homebrew安装node.js 第三步:安装npm 第四步:安装webpack 第五步:安装vue脚手架 第六步:可以在…

NumPy 1.26 中文官方指南(一)

NumPy 用户指南 原文:numpy.org/doc/1.26/user/index.html 本指南是一个概述,解释了重要特性;细节请参阅 NumPy 参考文档。 入门指南 什么是 NumPy? 安装 NumPy 快速入门 NumPy:初学者的绝对基础 基础知识和用法 NumPy 基础…