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



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

    1. 冯诺依曼体系结构

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

    在这里插入图片描述

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

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

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

    在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

    简单总结一下:

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

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

    3. 数据流向分析

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

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

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

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

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

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

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

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

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

    在这里插入图片描述

  • 相关阅读:
    构造一个m行n列的二维数组(mln的取值均小于等于4, mln均由键盘输入),并由键盘输入数组元素的值,并且按照矩阵的形式输出
    面向5G-Advanced演进的移动性增强技术
    2024最新版Python安装详细教程!一键安装,永久使用
    【鸿蒙应用ArkTS开发系列】- 云开发入门实战一使用鸿蒙登录组件实现客户端登录
    行情分析——加密货币市场大盘走势(11.17)
    IDEFICS 简介: 最先进视觉语言模型的开源复现
    概率论基础——拉格朗日乘数法
    spring事务
    HTML网页设计:爱护动物题材——保护动物大象(6页) HTML网页设计结课作业 web课程设计网页规划与设计 网页设计成品DW静态网页
    你想要的【微前端】都在这里了!
  • 原文地址:https://blog.csdn.net/m0_70980326/article/details/132889654