本片文章会对冯诺依曼体系结构进行详解。同时,我们对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。本片文章同时也会对数据在冯诺依曼结构上的交互进行讲解。希望本篇文章会对你有所所帮助。
文章目录
一、简单认识冯诺依曼体系结构
二、数据交互
2、1 数据是直接通过磁盘传向CPU吗?
2、2 CPU与内存之间的存储设备——高速缓存
2、3 数据交互细节
2、3、1 本地I/O
2、3、2 网络I/O
♂️ 作者:@Ggggggtm ♂️
专栏:Linux从入门到精通
标题:冯诺依曼体系结构
❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️
冯诺依曼体系结构(von Neumann architecture)是一种计算机设计原则,也称为“普通计算机体系结构”(conventional computer architecture)。它是由匈牙利数学家冯诺依曼在20世纪40年代提出的,是现代计算机体系结构的基础。
冯诺依曼体系结构的主要特点是将计算机的控制单元、运算单元、存储器以及输入输出设备等组成部分连接在一起,形成一个完整的计算机系统。它采用存储程序的思想,即将指令和数据存放在同一个存储器中,并通过程序计数器(PC)来控制程序的执行顺序。这种体系结构的优点是操作灵活、编程方便,且适用于大部分计算机应用领域。
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系
下面这张图片那就生动形象的展示出冯诺依曼体系结构:
正如上图所示,我们所认识的计算机,都是有一个个的硬件组件组成,具体有如下:
- 输入设备:键盘、鼠标、磁盘、网卡、写板等等;
- 输出设备:显示器、硬盘、网卡、显卡、音响等等;
- 存储器:内存;
- CPU:运算器和控制器。
注意,这里的存储器会导致很多人理解错误。存储器单单指的是内存。磁盘不是存储器吗?不是的。磁盘是我们的输入和输出设备。为什么磁盘既是输入设备,又是输出设备呢?举个例子:我们平常在写代码的时候,运行时所产行的可执行程序文件等等文件都是保存在磁盘上的,这时磁盘充当输入设备。当程序运行起来后,需要从磁盘上拿数据到内存,这时磁盘充当着输出设备。
存储器也指内存,所有的输入和输出数据只能和和内存打交道。后面我们也会解释数据为什么要跟内存打交道、输入数据是怎么通过内存输出的呢。
CPU,即中央处理器,是一台计算机的运算核心和控制核心。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器、寄存器、高速缓存及实现它们之间联系的数据、控制及状态的总线构成,下面我们也会对其简单解释。
上面我们了解到冯诺依曼体系结构后,我们不能只停留在概念上,我们还应了解数据在冯诺依曼体系结构上是怎么进行交互的才行。我们接下来会详细解释。
根据机械原理,较大的存储设备要比较小的存储设备运行的慢。当然,较快的存储设备造价成本就很高了。当我们买个几百G或者及几T硬盘的价格只能买到几G的内存条:
这一对比差距就很明显了。 那我们大概知道了磁盘的运行速度慢,而内存的运行速度很快。具体速度差别有多大呢?正常情况下,CPU从磁盘上读取一个字节的时间开销要比从内存上读取的开销大1000万倍。差距确实很大。
根据水桶效应,我们清楚的认识到数据不要直接从磁盘上读取,应把数据加载到内存中,CPU从内存上读取数据。这样会整体的提高CPU读取数据的效率。
CPU与内存之间还有存储设备吗?答案是有的。我们还知道的CPU內部有一种存储设备为寄存器。寄存器也是比较快的。类似地,一个典型的寄存器文件只存储几百字节的信息,而主存里可存放几十亿字节。然而,处理器从寄存器文件中读效据比从主存中读取几乎要快 100倍。更麻烦的是,随着这些年半导体技术的进步,这种处理器与主存之间的差距还在持续增大。加快处理器的运行速度比加快主存的运行速度要容易和便宜得多。
针对这种处理器与内存之间的差异,系统设计者采用了更小更快的存储设备,称为高
速缓存存储器(cache memory,简称为 cache 或高速缓存),作为暂时的集结区域,存放处
里器近期可能会需要的信息。我们可看下图,存储的分级:上图展示了一个典型系统中的高速缓存存储器。比较新的、处理能力更强天的系统甚至有三级高速缓存: LT、L2和 L3。系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的局、部性原理,即程序具有访问局部区域里的数据和代码的趋势。经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。
其中,我们输入数据时,我们称为输入(Input)。输出数据我们成为输出(Output)。输入/输出是一种基本的数据传递操作,它可以理解为字符序列在计算机内存与外设之间的流动。
数据从一个对象到另一个对象的流动抽象为流,实现设备之间交换信息的类称为流类。按面向对象方法组织的多个流类及其类层次集合构成了I/O流类库,简称为流库。其中我们在自己的计算机上进行操作,我们称他为本地I/O。我们用自己的设备软件(例如QQ、微信)向他人发送信息,我们称他为网络I/O。
通过上面对CPU读取数据的了解后,我们再来分析数据的交互细节。有了内存,CPU就不再和外设(输入设备和输出设备)打交道了。而是直接将输入数据加载到内存中后,CPU从内存中读取数据。经过CPU的计算,再把数据加载回内存。最终由内存把数据向输出设备进行输出。这也反映出内存是冯诺依曼体系结构中的核心设备。
其中我们了解到了本地I/O的数据交互的细节。那我们看看网络I/O是怎么实现的。首先,网络I/O是从我们的计算机发送数据到另一台计算机,如下图:
当然,我们是站在纯硬件(冯诺依曼体系结构)的角度去分析。我们在城市A发送数据到城市B的朋友的计算机上。我们的输入设备可能是键盘、鼠标等。我们把数据是输出到了网卡上,网卡在这里充当着我们的输出设备。数据再通过网络的一系列操作加载到了城市B朋友的计算机上。此时朋友的计算机的输入设备为网卡,最终经过CPU的计算处理输出到输出设备上,例如屏幕。我们可结合下图理解:
关于冯诺依曼,比较重要的几点:
- 这里的存储器指的是内存;
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备);
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
一句话,所有设备(数据)都只能直接和内存打交道。本章的内容讲解到这里,感谢阅读ovo~