【Linux系统编程】冯诺依曼体系结构

文章目录

  • 1. 冯诺依曼体系结构
  • 2. 为什么要存储器(内存)?作用是什么?
  • 3. 数据流向分析

这篇文章,我们来认识一下冯诺依曼体系结构

1. 冯诺依曼体系结构

我们常见的计算机,如笔记本;我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系

【Linux系统编程】冯诺依曼体系结构_第1张图片

那我们接下来就来分析一下这个体系结构:

首先输入设备比如我们所熟悉的键盘、话筒、摄像头、网卡、磁盘等,就是输入设备。
那输入设备的作用是什么呢?
,计算机呢本质其实就是来计算和处理数据的,那既然是计算和处理数据的,那我们首先要把数据给计算机啊。
那怎么给?
输入设备就是用来给计算机输入数据的。
那计算机拿到数据,进行处理和计算之后,要把结果反馈给用户啊。
所以除了输入设备,还需要有输出设备。
输出设备比如显示器、磁盘、网卡,声卡等。
有些东西它既是输入设备也是输出设备。
那计算机本质是要计算和处理数据嘛,所以肯定要有CPU(中央处理器),CPU是计算机的大脑,负责解释并执行计算机程序中的指令,从而对数据进行各种操作和处理。

那上面说的这些都好理解,但是我们看图里面还有一个存储器,其实就是我们平时所说的内存

【Linux系统编程】冯诺依曼体系结构_第2张图片

2. 为什么要存储器(内存)?作用是什么?

那为什么还需要有内存呢?

按我们上面的分析,输入设备把数据喂给计算机,然后CPU进行计算处理,最后输出设备把结果展示给用户。
那还有一个内存,它的作用是啥啊?

那下面我来给大家解释一下:

这些输入输出设备呢也叫做外设,即外围设备,而外设一般是比较慢的。
比如说磁盘,磁盘相对于内存是比较慢的。
所以如果没有内存的话
【Linux系统编程】冯诺依曼体系结构_第3张图片
就是这样,这样当然也是可以的,但这样会存在什么问题呢?
,上面说了外设的速度是很慢的,而CPU是非常快的。
那像这样CPU直接和外设交互,会怎么样呢?
大家有没有听过木桶原则【Linux系统编程】冯诺依曼体系结构_第4张图片
就是说一个水桶无论有多高,它盛水的高度取决于其中最低的那块木板
那这里也是同样的道理,CPU速度很快,而外设非常慢,那这时整体的速度就会以外设为主,就会导致计算机的速度非常慢。

那为了解决这个问题,就引入了内存:

内存的速度比外设是快很多的,当然它没有CPU快。
而内存呢它是可以临时存储数据的,比如当时CPU在处理A任务,与此同时就可以把后面的B任务放到内存,然后A任务处理完就可以直接处理B了。
所以有了内存的存在,我们可以对数据进行预加载,那CPU后续进行数据处理的时候,就不需要再访问外设了,可以直接从CPU拿数据。
那计算机整体的效率就不再以外设为主,而是以内存为主了。
内存的快速访问速度使得CPU可以高效地进行数据处理
所以可以认为,内存的引入就是为了解决CPU和外设速度不匹配的问题。

那从这里我们也能得出第一个结论:

在数据层面,CPU一般是不直接和外设进行沟通的,而只和内存打交道,从内存获取数据,然后处理结果再写回内存。

那与此同时,我们还能理解这样一个问题:

我们平时写的C/C++的代码,它在编译链接之后生成一个可执行程序,其实就还是一个文件,那文件是存在磁盘上的,磁盘呢就是一种外设。
那大家在之前学习C/C++的过程中,可能会听过这样的话,就是一个程序想要运行起来,必须先加载到内存,然后才能被运行。
那为什么呢?
原因在于CPU要去执行我们可执行程序里的二进制的机器指令,只会从内存去获取,因为体系结构就是这样的。所以我们的程序必须先加载到内存,才能被运行。

简单总结一下:

截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等
关于冯诺依曼,要强调的几点:
这里的存储器指的是内存
不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,输入输出设备都只能直接和内存打交道

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上

3. 数据流向分析

那大家来思考一个问题,在硬件层面,单机和跨主机之间的数据流是如何流向的?

我们只要把硬件层面搞清楚,那软件是脱离不了硬件的,软件的很多行为我就也可以尝试解释了

首先第一种场景比如我在电脑上用某个音乐软件播放音乐:

那我们双击应用图标打卡它的时候,这个客户端软件就会被加载到内存里面,然后就被CPU执行,就呈现出我们所看到的图形化界面;当我们点击播放的时候呢,它又会通过网卡把网络上的音乐的数据输入给计算机,然后还是先加载到内存里,然后CPU对这些数据进行解析处理,然后展示给用户(CPU把处理后的结果写回内存,然后输出设备展示给用户),比如如果某首歌需要VIP那它通过外设播放一会就会停止播放,提示你需要开VIP。

我们看到它其实就是按照冯诺依曼体系结构去走的。

那如果现在你和你的朋友在电脑上通过QQ在聊天,你给他发送一条消息,请问在这个过程中数据是如何在体系结构中流动的?

那首先,你和你的朋友的电脑都遵循冯诺依曼体系结构
【Linux系统编程】冯诺依曼体系结构_第5张图片
我们这里先不考虑网络。
那首先你发消息的时候就是通过键盘这个输入设备把信息输入到内存,然后CPU对内存的数据进行计算处理,处理的结果写回内存,然后通过输出设备显示,所以你自己也能看到你发的消息。
那输出设备除了把你发的消息展示到你电脑的显示器上之外,还通过另外一个输出设备——网卡发送到网络上(网络上如何传输我们先不管),然后你朋友的电脑就通过网卡(这里又作为输入设备)接收到这些消息,然后同样的,在你朋友的电脑上,它的输入设备把这些信息数据加载到内存里,然后CPU获取并进行相应的处理,再写回内存,由输出设备获取并通过输出设备(显示器)展示,对方也就看到了你发的消息。

所以呢,在数据的流向上:

我们能体会到,由于底层硬件的结构,数据在流动时必须遵守冯诺依曼体系结构进行流向。

【Linux系统编程】冯诺依曼体系结构_第6张图片

你可能感兴趣的:(Linux,系统编程,linux,运维,服务器)