目录
一、前言
二、什么是冯 • 诺依曼体系结构?
💦 冯 • 诺依曼体系结构的发展推导
💦冯 • 诺依曼体系结构的5大部件
⭐输入和输出设备
⭐存储器
⭐中央处理器(CPU)
💦冯 • 诺依曼体系结构的细节问题
⭐内存的重要性
⭐为什么执行我们的程序要先加载到内存?
⭐开机的时候为什么要加载操作系统呢?
三、 冯 • 诺依曼体系结构的应用
💦理解数据在网络中的流动
四、总结
五、共勉
一、前言
在学习了【Linux基础】之后,我们将开启【Linux系统编程】的学习。既然是系统编程,那我们首先肯定需要了解---系统。系统有怎样的体系结构(冯 • 诺依曼体系结构),系统如进行软硬件资源管理(操作系统)。只有了解系统,才能够更好的掌握 ---- 系统编程
所以本次博客将从-----冯 • 诺依曼体系结构将起!!
二、什么是冯 • 诺依曼体系结构?
想要了解 冯 • 诺依曼体系结构 就需要掌握以下几点:
- 冯 • 诺依曼体系结构是如何发展的
- 冯 • 诺依曼体系结构有哪几部分组成
- 冯 • 诺依曼体系结构的细节问题
💦 冯 • 诺依曼体系结构的发展推导
计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备。计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出,于是就得到了以下流程图。
但是计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,控制何时从输入设备获取数据,何时输出数据到输出设备等。对应到C语言当中,算术运算就完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与逻辑或等,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等。
而我们后人就将这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU。
但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存。(为什么要加入内存?)
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
于是就形成了最终的冯诺依曼体系结构。
💦冯 • 诺依曼体系结构的5大部件
在冯诺依曼体系结构主要由五种设备组成,分别是:输入设备、存储器、运算器、控制器和输出设备,它们各司其职,都做着它们各自的工作。
⭐输入和输出设备
首先要来讲的就是我们能直接接触到的东西,也就是两个输入、输出设备
- 【输入设备】:向计算机输入数据和信息的设备,是计算机与用户或其他设备通信的桥梁,例:键盘、话筒、摄像头、网卡、磁盘
- 【输出设备】:是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作,例:显示器、声卡、网卡、磁盘
对于输入输入设备和输出设备,我们统称为外围设备,对于外围设备而言,都比较慢,就比如说【磁盘】,不过虽然它比较慢,但是价格并不贵,三五百块钱就可以买到一块512G的硬盘,贵一点的话可能像固态硬盘价格在900 ~ 1200不等,但是它们都有一个优点就是:存储容量大、可以长久保存数据不丢失!
⭐存储器
可以看到,对于上面所列举的输入和输出设备中,同时出现的就是网卡和磁盘这两样,我们主要来说说磁盘这个东西。因为我们要通过输入设备将输入都输入到计算机中,那计算机肯定要对这些数据去进行一些处理,此时这些数据肯定是要一直存放在计算机中的,所以肯定要有东西将我们输入到计算机中的数据都保存起来,这个时候就需要使用到一些存储器了,此时我们就要来讲讲存储器了,它分为内存和外存,不过一般我们都称之为内存
- 【内存】: 用于存放电脑运行中的原始数据、中间结果以及指示电脑工作的程序,断电后会丢失,容量小,速度快
- 【外存】:用来存放一些需要长期保存的程序或数据,断电后也不会丢失,容量比较大,但存取速度慢
注意: 这里存储器只是内存,不包括外存。
⭐中央处理器(CPU)
既然可以存储我们输入进去的数据了,那要如何去处理这些数据呢?此时就需要使用到中央处理器(CPU)
- 【运算器】:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算等等
- 当运算器运算完成之后,就会经过输出设备将处理后的结果交给内存,再由内存展现给用户,这就是用户与计算机之间的交互过程
不过上面这些从输入到存储到计算,再到输出的过程,计算机去如何去执行的呢?靠什么去控制这种种行为?此时就要使用到控制器了
- 【控制器】:控制器也是一个硬件,虽然外设和中央处理器在数据上没有交互,但并不代表它俩就没有交互。前面得知输入设备会把数据预装载到内存,从而和cpu进行交互,但是你怎么知道所有数据都被预装载了呢,针对没被预装载的数据,中央处理器就要和外设进行交互协商,而这个操作就是由控制器完成的,从而将数据尽可能加载到内存,或把数据从内存加载到外设。
对于上面的运算器和控制器,我们将其合称为【中央处理器】,即cpu
。它是计算机的大脑、也是核心部分,很多控制信号都要经过CPU才能执行
💦冯 • 诺依曼体系结构的细节问题
对于上面讲得大部分都是理论,可能会比较难懂一些,本小节我将从硬件层面看软件,使用硬件的行为来解释软件
- 当我们使用C/C++编写完代码后都会编译生成可执行程序,对于这个可执行程序,其实就是一个文件,那既然是文件的话,它就存放在磁盘中,对于磁盘我们上面说了,就是一种外设。那此时就引出了下面这几个问题。
⭐内存的重要性
经过我上面这一番讲解,相信读者对冯诺依曼的基本体系有了一个概念了,不过一定会有同学提出这样的疑问:既然计算机只是从外界接收数据,然后处理我们输入的数据再把结果反馈给我们,那也可以不用存储器呀!
在上一小节中,我们讲到了输入设备和输出设备,它们统称为外围设备,对于像【磁盘】这种外围设备来说虽然它有着大容量的内存,但是读写速度却非常慢,机械硬盘读写速度平均
60---80M
每秒;固态硬盘不同品牌型号之间,平均大约在150---300M
每秒
但是对CPU来说,也就我们上面说到过的运算器 + 控制器,它的运算速度读者可以自行去网上看看,那比磁盘不知道要快出多少倍了。那一个写入很慢,一个读入很快,真的可以兼容吗?
【木桶效应】:
- 什么叫木桶效应呢,也就是这个木桶的承水量不取决于木桶中最长的那块板,而取决于最短的那块板
- 对应我们上面所说磁盘与CPU:一个输入,一个读取;一个慢,一个快,虽然二者的维度不同,但计算机还是会按照慢的那个来执行,也就是说整体的效率就以外设为主了
那这一个快。一个慢,该怎么办呢?
此时就还是需要使用到冯诺依曼体系结构中的【存储器】,也就是我们俗称的内存,因为对于内存这个东西,它虽然比CPU来得慢一些,但是却比磁盘快多了,它们三者的速度大概可以像下面这样对比
- CPU ——
纳秒
(ns)- 内存 ——
微秒
(us)- 外设 ——
毫秒
(ms)
- 可以看到CPU是纳秒级别的速度,但外设却是毫秒级别的,它们之间要进行交互的话还是太Crazy了🤣所以就有了内存这个东西,可以作为中介
【那有了内存后则怎么使用呢?】:
- 因为有了内存的存在,虽然它掉电易失,但还是局部短时间的存储,因此外设可以将数据暂存到内存中,此时,CPU后面想要去处理这些数据的话直接去内存中拿就可以了,无需再与外设进行交互造成不兼容的问题
CPU中不是有个叫寄存器的东西吗?也可以起到临时存储的功能,为什么不直接用它呢?
- 因为寄存器太贵了,只要是贵的东西就不会让我们广泛去使用。内存可以适配和外设之间的效率,既能够完成我们需要的功能,而且性能还不怎么差,它便宜。
【总结一下】:
CPU的速度是很快的,外设的速度是很慢的,因为有了内存,CPU以后在进行数据计算的时候,根本不需要访问外设了,而只要直接伸手向内存要就可以了。
⭐为什么执行我们的程序要先加载到内存?
我们自己的代码和数据、编译好的指令,是要由CPU去执行的,在上一小节我们讲到CPU它只会伸手向内存要数据,而我们的可执行程序是一个文件,文件存放在磁盘中,所以这就解释通了为什么我们的程序要先加载到内存中,因为CPU只会去内存中读数据,体系结构决定了这一切!
⭐开机的时候为什么要加载操作系统呢?
也是同样的道理,操作系统的底层也是各种指令和数据,这些都是需要CPU去解析的,它解析完了操作系统才能正常运行起来,但是CPU只能到内存中去拿数据,所以在开机的时候把操作系统率先加载进内存来CPU就方便很多了,不需要再和外设去进行交互。
三、 冯 • 诺依曼体系结构的应用
清楚了整个冯诺依曼体系结构,知道了大部分的计算机都是基于这种结构,那么现在我通过一个场景带你带你真实地体会一下这种体系结构在实际中的应用
💦理解数据在网络中的流动
现在你在上网,使用QQ向你的朋友发送了一句
“在吗”
,那此时这个数据在网络中进行流动的呢?假设你们的电脑都是基于冯诺依曼体系结构,需要有这么一个输入、处理、输出这么一个流程
- 下面是我画的一个流程图,可以看到就是两个冯诺依曼体系结构中间使用网络进行了互连,在这里我们先不考虑网络的问题,只谈数据是如何在各个器件中流动的
流程分析:
- 当你使用输入设备,比如:键盘,在QQ的聊天框中发送了一句“在吗”的时候,这条信息就被读取到了计算机内部,被暂时存放在了【内存】中,接着CPU就会到内存中去读取数据,解析里面的指令然后由【运算器】进行运算,接下去通过【控制器】将这些信息由【输出设备】,例如:网卡,转发到网络中进行传输,网络内是如何传输的这里就不细讲了,涉及要一些 网络协议 相关的内容
- 因为你朋友的电脑也是基于冯诺依曼体系的,所以也会存在【输入设备】,例如:网卡,将网络中传输过来的数据输入到它的计算机中,也是将其存放到内存中,然后一样CPU去内存中拿出这些数据再进行处理,转换成我们可以识别的样子,通过【输出设备】,例如:显示器,将消息打印在你朋友的屏幕。之后你的朋友再发送一句“在的”,也是同理经过这样的传输,继而你们就实现了相互通信
四、总结
以上就是有关冯诺依曼体系结构的叙述,大多以概念为主,配合图示进行理解,清楚五大部件各自的作用,它们之间是如何关联的。不过最重要的一点还是在于CPU是直接与内存进行交互的,因为任何数据都要通过输入设备先存放到内存中,而不是直接与CPU进行交互
五、共勉
以下就是我对【Linux系统编程】冯 • 诺依曼体系结构的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对【Linux系统编程】操作系统的理解,请持续关注我哦!!!