【Linux从入门到精通】了解冯诺依曼体系结构

简介: 本片文章会对冯诺依曼体系结构进行详解。同时,我们对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。本片文章同时也会对数据在冯诺依曼结构上的交互进行讲解。希望本篇文章会对你有所所帮助。

本片文章会对冯诺依曼体系结构进行详解。同时,我们对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。本片文章同时也会对数据在冯诺依曼结构上的交互进行讲解。希望本篇文章会对你有所所帮助。 



一、简单认识冯诺依曼体系结构



 冯诺依曼体系结构(von Neumann architecture)是一种计算机设计原则,也称为“普通计算机体系结构”(conventional computer architecture)。它是由匈牙利数学家冯诺依曼在20世纪40年代提出的,是现代计算机体系结构的基础。


 冯诺依曼体系结构的主要特点是将计算机的控制单元、运算单元、存储器以及输入输出设备等组成部分连接在一起,形成一个完整的计算机系统。它采用存储程序的思想,即将指令和数据存放在同一个存储器中,并通过程序计数器(PC)来控制程序的执行顺序。这种体系结构的优点是操作灵活、编程方便,且适用于大部分计算机应用领域。


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

 下面这张图片那就生动形象的展示出冯诺依曼体系结构


60d6300eb65843f682ea299eb8f3a143.png



 正如上图所示,我们所认识的计算机,都是有一个个的硬件组件组成,具体有如下:


输入设备:键盘、鼠标、磁盘、网卡、写板等等;

输出设备:显示器、硬盘、网卡、显卡、音响等等;

存储器:内存;

CPU:运算器和控制器。

 注意,这里的存储器会导致很多人理解错误。存储器单单指的是内存。磁盘不是存储器吗?不是的。磁盘是我们的输入和输出设备。为什么磁盘既是输入设备,又是输出设备呢?举个例子:我们平常在写代码的时候,运行时所产行的可执行程序文件等等文件都是保存在磁盘上的,这时磁盘充当输入设备。当程序运行起来后,需要从磁盘上拿数据到内存,这时磁盘充当着输出设备。


 存储器也指内存,所有的输入和输出数据只能和和内存打交道。后面我们也会解释数据为什么要跟内存打交道、输入数据是怎么通过内存输出的呢。


  CPU,即中央处理器,是一台计算机的运算核心和控制核心。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU由运算器、控制器、寄存器、高速缓存及实现它们之间联系的数据、控制及状态的总线构成,下面我们也会对其简单解释。


二、数据交互

 上面我们了解到冯诺依曼体系结构后,我们不能只停留在概念上,我们还应了解数据在冯诺依曼体系结构上是怎么进行交互的才行。我们接下来会详细解释。


2、1 数据是直接通过磁盘传向CPU吗?

根据机械原理,较大的存储设备要比较小的存储设备运行的慢。当然,较快的存储设备造价成本就很高了。当我们买个几百G或者及几T硬盘的价格只能买到几G的内存条:


image.png


 这一对比差距就很明显了。 那我们大概知道了磁盘的运行速度慢,而内存的运行速度很快。具体速度差别有多大呢?正常情况下,CPU从磁盘上读取一个字节的时间开销要比从内存上读取的开销大1000万倍。差距确实很大。


 根据水桶效应,我们清楚的认识到数据不要直接从磁盘上读取,应把数据加载到内存中,CPU从内存上读取数据。这样会整体的提高CPU读取数据的效率。


4df398563eeb4fddac5be94f3a59a64a.png


2、2 CPU与内存之间的存储设备——高速缓存


CPU与内存之间还有存储设备吗?答案是有的。我们还知道的CPU內部有一种存储设备为寄存器。寄存器也是比较快的。类似地,一个典型的寄存器文件只存储几百字节的信息,而主存里可存放几十亿字节。然而,处理器从寄存器文件中读效据比从主存中读取几乎要快 100倍。更麻烦的是,随着这些年半导体技术的进步,这种处理器与主存之间的差距还在持续增大。加快处理器的运行速度比加快主存的运行速度要容易和便宜得多。

 针对这种处理器与内存之间的差异,系统设计者采用了更小更快的存储设备,称为高

速缓存存储器(cache memory,简称为 cache 或高速缓存),作为暂时的集结区域,存放处

里器近期可能会需要的信息。我们可看下图,存储的分级:

image.png


上图展示了一个典型系统中的高速缓存存储器。比较新的、处理能力更强天的系统甚至有三级高速缓存: LT、L2和 L3。系统可以获得一个很大的存储器,同时访问速度也很快,原因是利用了高速缓存的局、部性原理,即程序具有访问局部区域里的数据和代码的趋势。经常访问的数据,大部分的内存操作都能在快速的高速缓存中完成。


2、3 数据交互细节


其中,我们输入数据时,我们称为输入(Input)。输出数据我们成为输出(Output)。输入/输出是一种基本的数据传递操作,它可以理解为字符序列在计算机内存与外设之间的流动。

数据从一个对象到另一个对象的流动抽象为流,实现设备之间交换信息的类称为流类。按面向对象方法组织的多个流类及其类层次集合构成了I/O流类库,简称为流库。


 其中我们在自己的计算机上进行操作,我们称他为本地I/O。我们用自己的设备软件(例如QQ、微信)向他人发送信息,我们称他为网络I/O。


2、3、1 本地I/O



通过上面对CPU读取数据的了解后,我们再来分析数据的交互细节。有了内存,CPU就不再和外设(输入设备和输出设备)打交道了。而是直接将输入数据加载到内存中后,CPU从内存中读取数据。经过CPU的计算,再把数据加载回内存。最终由内存把数据向输出设备进行输出。这也反映出内存是冯诺依曼体系结构中的核心设备。

2、3、2 网络I/O

 其中我们了解到了本地I/O的数据交互的细节。那我们看看网络I/O是怎么实现的。首先,网络I/O是从我们的计算机发送数据到另一台计算机,如下图:


71aaf2863a7c42d9b6f27cd08356b05d.png

当然,我们是站在纯硬件(冯诺依曼体系结构)的角度去分析。我们在城市A发送数据到城市B的朋友的计算机上。我们的输入设备可能是键盘、鼠标等。我们把数据是输出到了网卡上,网卡在这里充当着我们的输出设备。数据再通过网络的一系列操作加载到了城市B朋友的计算机上。此时朋友的计算机的输入设备为网卡,最终经过CPU的计算处理输出到输出设备上,例如屏幕。我们可结合下图理解:

40fbc85a24bc404e95e7540786a41fde.png


关于冯诺依曼,比较重要的几点:


这里的存储器指的是内存;

不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备);

外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

一句话,所有设备(数据)都只能直接和内存打交道。

 本章的内容讲解到这里,感谢阅读ovo~

相关文章
|
3月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
242 73
|
1月前
|
Unix Linux Shell
linux入门!
本文档介绍了Linux系统入门的基础知识,包括操作系统概述、CentOS系统的安装与远程连接、文件操作、目录结构、用户和用户组管理、权限管理、Shell基础、输入输出、压缩打包、文件传输、软件安装、文件查找、进程管理、定时任务和服务管理等内容。重点讲解了常见的命令和操作技巧,帮助初学者快速掌握Linux系统的基本使用方法。
78 3
|
2月前
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
63 1
|
2月前
|
Linux Shell Windows
Linux入门1——初识Linux指令
Linux入门1——初识Linux指令
36 0
Linux入门1——初识Linux指令
|
2月前
|
存储 数据可视化 Linux
Linux 基础入门
Linux 基础入门
|
2月前
|
Linux Go 数据安全/隐私保护
Linux入门2——初识Linux权限
Linux入门2——初识Linux权限
30 0
|
4月前
|
Linux 调度 芯片
Linux0.11 内核体系结构(八)(下)
Linux0.11 内核体系结构(八)
66 1
|
4月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
70 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
4月前
|
存储 Ubuntu Linux
Linux基础入门
Linux基础入门
33 1
|
4月前
|
Linux Shell 编译器
Linux0.11 内核体系结构(八)(上)
Linux0.11 内核体系结构(八)
113 0