【Linux】冯诺依曼体系结构

时间:2023-01-31 10:52:47

目录

一、硬件构成

二、数据流动


一、硬件构成

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

冯诺依曼体系在硬件结构上分为以下几个部分:

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

这些硬件的简易组成方式为:

【Linux】冯诺依曼体系结构

 计算机是用来进行数据计算的,所以我们要先通过 输入设备 来把数据传输给计算机,并通过 *处理器 的计算后,把计算结果通过 输出设备 传输出去。

那么,在冯诺依曼体系中, 存储器 起到的作用是什么?我们为什么需要内存呢?

我们一般把 输入设备 与 输出设备 称为 外围设备,简称外设,外设一般都会比较慢。

以磁盘为例:相对于内存,磁盘的读写速度非常慢。而 CPU 中的存储器的读取速度又要快于内存。根据木桶原理,一个木桶能装多少水,不是取决于这个木桶最长的那个木板,而是最短的那个。因此,如果 CPU 直接从磁盘中读取数据并处理的话,速度会非常慢,浪费了 CPU 的性能。

为了解决这个问题,就有了内存的出现。在计算机工作时,内存可以临时存储数据。例如当 CPU  在计算A任务时,内存可以预先将B任务加载进来,CPU 处理完A任务,就直接从内存中读取B任务的数据。

因为有了内存的存在,我们可以对数据进行预加载,CPU 以后在进行数据计算的时候,就不需要访问外设了,直接从内存中读取就可以了。

结论1在数据信号层面,一般 CPU 不与外设直接沟通,而是只与内存直接沟通。

了解了以上内容后,我们可以用硬件的方案来解释一些软件的行为:

  • 我们编译出的可执行程序是一个文件。而文件都保存在磁盘中,磁盘是一个外设。所以我们在运行这个可执行程序的时候,必须要先把它加载到内存之中,这是计算机的体系结构决定的。
  • 众所周知,计算机开机的过程是加载操作系统的过程。而之所以需要加载操作系统,是因为 CPU 只能从内存中读取数据。

二、数据流动

我们用一个例子来解释数据的流动过程:假设你与你的朋友在用qq聊天,你给他发送了一个“你好”,并被他看到。这是一个什么样的过程呢?

假设你与朋友的电脑都是冯诺依曼体系的,不考虑中间网络的相关知识,模型如下:

【Linux】冯诺依曼体系结构

 我们只考虑硬件层面。你在键盘上输入消息,这些消息被加载进内存,CPU 从内存中读取这些数据并进行计算加密。CPU 计算完成后把结果写回内存,并把该数据传输到输出设备。这里传输到输出设备是两个动作,第一是把你输入的消息刷新显示在你自己的显示器上,第二是把数据通过网卡发送到网络里(具体过程忽略)。朋友再通过他的输入设备(网卡)获取数据并交给内存,CPU从内存中读取数据,并进行解密计算,计算完成后把数据写回内存,最终把数据显示在朋友的显示器上。

电脑的硬件决定了数据在流动的时候必须要遵守冯诺依曼的规则。 数据从输入设备只能到达内存,无法到达其他地方。

结论2在数据信号层面,一般外设只与内存直接沟通。

有些设备既可以当作输入设备,又可以作为输出设备,比如网卡、磁盘等等。

我们在qq聊天的过程中,加密解密的算法、网卡发送等等操作都是qq这个软件内部执行的,我们目前无需考虑。

补充内容:我们日常使用的 printf 函数 与 scanf 函数,其实就是软件在获取输入设备中的数据以及读取内存中的数据。


以上就是冯诺依曼体系的相关内容,希望同学们多多支持,如果有不对的地方希望大佬指正,谢谢!