linux入门---冯诺依曼体系结构

认识冯诺依曼体系结构

在这里插入图片描述
在我们的生活中会涉及到很多的电子设备比如说:cpu,显卡,显示器,键盘,鼠标,硬盘,磁盘,内存条,游戏手柄,网卡等等,这么多的电子设备跟冯诺依曼体系结构构成一个从属关系,也就是说上面所列出来的东西在这个体系结构都有一个或多个对应位置,比如说显示屏属于输出设备,内存条属于存储器,cup属于运算器,键盘鼠标属于输入设备,硬盘磁盘既属于输出设备又属于输入设备等等。在学习这部分内容之前大家得先知道一件事就是这里的存储器就是内存,而所谓的外存指的是除了内存以外拥有永久性存储能力的设备常见的就是磁盘,内存有个性质就是掉电意失,当数据在内存的时候突然断电的话内存中存储的数据会消失不见,而像磁盘这样的外设有个与之相反的能力就是永久性储存,当数据存储到磁盘上时不管是否通电磁盘上的数据一直都在。磁盘不属于这里的存储器而是外设的一种这里的外设指的是输入设备或者输出设备,磁盘和网卡一样既可以充当输入设备又可以充当输出设备,比如说在磁盘中读取一个文件或者往磁盘里面输出保存一个文件这就是一个输出输入的过程,网卡更不用说我们在网上下载东西或者将一个东西上传到网上都是输入输出的过程,但是生活中的很多设备只属于输入设备或者输出设备,比如说普通的键盘鼠标就只属于输入设备显示器就只属于输出设备,所以这里的外设是相对于内存+cpu所说的,我们把运算器+控制器+其他(寄存器啥的)统称为cpu,cpu有个特点就是特别的快而存储器也就是内存的速度是较快,但是外设的速度却是非常的慢
在这里插入图片描述
cpu在计算机中的功能是计算数据,内存的功能是临时存储数据,外设的主要功能是永久性的存储数据,那这里就有个问题cpu主要是负责计算数据的而数据是别人提供的,那这个数据是谁提供的呢?首先cpu自己是无法制造程序所需要的数据的,虽然cpu的计算速度非常的快,但是cpu只能被动的接收别人的指令和数据,接收这些东西然后执行别人的指令计算别人的数据,从而达到想要别人想要的目的,比如说要计算a=10+20,cpu在接收指令和数据之前得先认识指令明白这个指令的意思和目的所以在cpu里面有对应的指令集,我们平时写代码然后编译的本质就是生成二进制可执行程序,在这个程序里面会把10+20中的+变成cpu中的对应指令,cpu虽然不认识数学中的+但是在这个程序里面这里的+变成了指令集里面的东西,所以cpu就可以根据内部的指令集来知道你的程序在做什么目的是什么,cpu处理数据的速度非常的快但是外设的速度却非常的慢,如果cpu的数据总是来自于外设的话就会导致整机的效率非常非常的低,cpu每时每刻都得等着外设提供数据,就好比生活中的木桶效应一个木桶最终能够装载多少水都是由最短的木块决定的而不是最长的木块:
在这里插入图片描述

所以为了提供整机的工作效率cpu就只会往速度相对较快的内存中读取数据,但是内存也不是天生就具有数据的啊!内存的数据也是来自于磁盘等外设,也就是说cpu为了提高整机的工作效率只从内存中拿数据而内存又是从磁盘等外设拿数据的,那这里大家有没有发现一个问题就是你这绕过来绕过去最终的效率不还是取决于外设的速度嘛,所以单靠一层一层的获取数据是无法提高效率的,那么为了解决这个问题内存就会干一件事就是提前将cpu可能用到的数据加载到内存里面比如说cpu处理某个数组中的前十个数据,一开始这些数据肯定是储存在外设里面的,当cpu要用这些数据时外设先将他们提供给内存,然后内存再提供给cpu,但是内存为了提供效率可能就会让外设一口气提供这个数组的前100个元素,这样cpu处理完前10个数据之后要是还想继续处理往后的数据的话就可以直接从内存中提取数据不用再等外设给内存内存给cpu了,所以内存可以看做一个大大的缓存用来解决cpu与外设速度不匹配的问题,那么这里就有一个问题谁来规定加载哪些数据到到内存里面?谁来规定什么时候加载这些数据,什么时候将这些数据清空呢?以即内存怎么知道cpu接下来会用到哪些数据呢?那么这些问题都是由操作系统来解决的,操作系统的主要作用就是让硬件和软件完美结合。在冯诺依曼体系结构中有个东西叫做控制器,控制器的作用就是当输入设备往内存中输入数据的时候,cpu能够知道输入设备往存储器中输入了数据,比如说键盘输入了数据在内存里面cpu一定会知道,那cpu是如何知道的就是控制器的功劳,就好比饿了点外卖我们怎么知道外卖到了一样。

总结

看到这里大家应该能够理解这个体系结构的作用以及意义,我们可以总结出来冯诺依曼体系结构在数据层面上有三个小点:

  1. cpu不和外设直接打交道,而是和内存直接打交道。
  2. 所有的外设如果有数据需要载入的话都只能载入到内存中,内存要是写出的话也是只能写到外设里面。
  3. 程序运行的时候必须得加载到内存里面,因为cpu要执行我的代码只能从内存中进行读取,这是体系结构体规定的,这样的规定的目的就是提高整机的效率,我们之前写的进度条为什么会不打印在屏幕上就是因为cpu不是直接和外设连接的,当cpu将代码执行完以后就会将数据放到内存里面,而不是放到外设里面,所以我们在屏幕上看不到内容。

冯诺依曼体系结构实例

大家在网上冲浪的时候都会遇到很多的网友这些网友一般都会分布于全国各地,比如说你人在武汉你使用qq认识了一个深圳的网友,那你们平时聊天时你们的机器是如何工作的呢?首先你们俩的机器都会遵循冯诺依曼体系结构
在这里插入图片描述
你要想跟原在深圳的网友聊天你就得打开qq这个程序,这时在你的计算机中就会把磁盘中的qq程序的文件加载到内存里面并将内存中的一些数据加载到cpu里面进行一些计算然后将计算的结果输出到内存里,这时你打开了和那个网友的对话窗口用键盘输入了一句话比如说:你现在在干嘛呀!那么这个过程就是外设键盘将数据输入到了内存中的qq程序里面,我们平时聊天的时候具体内容不会被其他人看到是因为qq程序会对聊天的内容进行加密,所以在这条语句发送之前cpu会将该部分数据进行一些算法加密,然后再输出给内存,然后内存再输出给外设网卡和屏幕,网卡再将这段加密的内容上传到互联网上,屏幕上再显示你以及发生了这段消息,深圳的网友打开qq程序时他的电脑的输入设备网卡就会就会接收到这段信息,然后网卡就会将这段信息加载到内存,内存再将这段数据加载到cpu进行解密然后返还给存储器,最后存储器再将解密出来的内容输出到外设显示屏上这样你的网友就能看到你发过来的消息,那么这就是本篇文章的全部内容希望大家能够理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶超凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值