Linux系统部分——冯诺依曼体系结构
Linux系统部分——冯诺依曼体系结构
当你指尖敲击键盘的瞬间,手机刷出信息的刹那,甚至智能手表计算心率的每一秒——这些数字设备的运转,都藏着一个 80 多年前的 “底层密码”:冯·诺依曼体系结构。
1945 年,约翰・冯・诺依曼在一篇报告里勾勒的蓝图,至今仍是几乎所有计算机的 “骨架”:将程序和数据存入同一片存储器,用控制器调度运算、协调输入输出 —— 这个 “存储程序” 的核心思想,打破了早期计算机 “算完就得重接线” 的桎梏。
从巨型机到单片机,从桌面端到嵌入式设备,看似千差万别的数字世界,实则都在遵循这套朴素却精妙的规则。读懂它,便握住了理解现代计算的第一把钥匙。
先谈一谈硬件
- 现在所遇到的各种各样的计算机啊,尤其是笔记本台式机或者是服务器,那么它本质都是一大堆的硬件的集合啊,有CPU啊,有内存啊,然后有磁盘、显卡、有网卡,还有各种各样的设备有主板。其中这么多硬件,其实并不是在计算机里毫无章法的放在一起,就叫做计算机了。硬件和硬件之间首先要能够具有协同的能力,构建成一个系统,最终才能够对外提供输出计算服务,这就是冯·诺依曼体系结构。
- 当我们观察这个结构的时候,我们第一个问题呢,就是这里的输入输出设备都有哪些,运算器控制器也不难从字面上猜测,然后就是中央处理器。中央处理器也就是CPU,大家肯定都听说过,只不过并不了解内部的细节。但是,这里第一个想说的就是存储器指的是什么?
1. 存储器
我们平时接触到的存储设备有很多,比如硬盘、内存、U盘等等,但是冯诺依曼体系结构的存储器仅仅指的是内存!至于硬盘,U盘这些都属于外存,这一点要搞清楚。
- 内存条
- SSD(固态硬盘)
- 机械磁盘
2.输入输出设备
- 首先,计算机是为了给人提供计算服务的。前提条件是人得先把数据交给计算机,之后才能帮做运算。可是计算机只认识二进制,只认识0 1,而且是以电子、电磁、电路各种各样的电子信号来控制的。所以势必决定了要有一些设备能把人的信息转化成二进制,然后交给计算机,这就是输入设备。
- 当计算机运算完毕了,计算机也只能给我们输出二进制。可是呢最终我们也想把这些二进制数据转化成我们所能认识的图形、文档或者图片等等各种我们能显示的信息或者字符,那么这就需要输出设备。所以输入输出设备一般是用来进行人和计算机,计算机和计算机互相传递信息的。
- 常见的输入设备:键盘、直播时的摄像头(把图像信息输入到计算机当中)、话筒、还有我们看不到的一些设备,比如磁盘。怎么理解呢,数据可以从磁盘文件当中进行读取。除此之外,我们从网络当中去进行读取数据。所以网卡,也是最典型的输入设备。
- 典型的输出设备叫做显示器,扬声器等等
网卡
3.运算器和控制器
什么时候把数据从输入设备传输到存储器,什么时候把数据从存储器再那么读入到我们的中央处理器,什么时候运算,怎么运算,什么时候把结果再写回存储器,什么时候再把存储器的内容写到输出设备,要有人来统一去控制统一去协调,因此,我们就有对应的控制器和运算器。我们把这种运算器加控制器,称之为中央处理器(CPU)。当然CPU里面除了运算和控制器,还有很多的部件,我们也暂时也不关心。
中央处理器——CPU
综述
输入设备,输出设备,存储器,中央处理器一共叫做五大单元。中央处理器(CPU)独占两个——运算器和控制器。这五大功能模块的,每一个都是独立存在的,我们可以把显示器,也可以把内存条拔出来,或者干脆就把CPU拔下来。为什么呢,因为计算机都是组装起来的,每个单元我们都是可以把它卸下来的,说明他们都是一个一个的独立的个体。既然他们都是一个个的独立个体,每一个都有它各自的功能。那么这些独立的个体要能够共同构成一个计算机,就必须得把它们组织在一起,用" 线 "将它们互相连接起来。我们称之为总线。总线又分为系统总线和IO总线。
这就是冯·诺伊曼体系结构。我们先对它有了一个概念之后,下面当然就要来谈一谈更多的细节了。
为什么存储器是内存?
在上面的介绍中,我们已经提到了,冯诺依曼体系结构中的存储器是内存,而不是别的什么固态硬盘,机械磁盘,U盘之类的外存。这一点非常重要。接下来我们就这个问题进行探讨。
我们来看这样一张图片:
其中主存就是内存。
1.存储金字塔
-
存储效率:CPU、内存、磁盘,还有很多很多的设备呢,它本身是具有数据存储的能力的。CPU内部它所对应的寄存器存储的效率是非常高的。而我们对应的内存的存储效率也是不错的。一般外设的存储效率都是比较低的。在我们存储领域呢,有一个存储金字塔。从上图我们不难看出存储容量越大,它的存储效率都会比较低一些。寄存器,它的存储速度一般是纳秒级别的。而我们的内存呢,同学们可以理解成它是微秒级别的。而我们的外部设备(如磁盘)呢,它一般是毫秒级别的。所以很显然,大家的速度上是有代差的,基本上差个10^6(百万)倍是很正常的。
-
价格:中央处理器(CPU)内部的那些寄存器、缓存,造价非常贵,因为它的技术要求比较高。从上往下,价格是越来越低的,容量是越来越大的,速度是越来越慢的。
2.CPU对数据的读取
-
CPU读数据只能从内存里拿,它不能从我们对应的输入设备去直接拿,它也不能直接把结果写到输出设备上。为什么呢?原因就在于外设和中央处理器的速度代差太大了。有一个理论叫做木桶原理啊。一只木桶,它最多能盛装多少水,完全由它构成这个木桶的众多木板当中的最短的一片来决定啊。所以如果你让我们的外设(输入/输出设备)直接和运算器进行交互,那么其中我们对应的整个计算机结构的效率,就以输入输出设备的效率为主,这样就太慢了。
-
所以我们引入了一个速度比外设快(虽然依旧比CPU慢,但慢得相对少一些)的设备,叫做内存。内存呢,它速度适中,容量适中。所以我们就可以让输入设备暂时先把数据读取到存储器(内存)当中,然后再让我们的处理器再从存储器当中拿数据。那么拿到数据计算完把结果写回存储器,再由内存把数据再写到输出设备。这样就可以适配硬件层面上CPU和外设之间的巨大速度差。
-
但是有同学会有问题:“输入设备把数据要拷贝给内存,然后内存还要拷贝给中央处理器,然后最后处理器运算还要把数据写回内存,再有内存写到输出设备。很明显,它们所有的动作依旧是串行的。只要是串行的,那我们对应的这个效率提升也有限吧?”这就不得不提到预加载机制了。你的代码可能有一千行代码,当你已经把这一千行代码提前预先加载到了存储器当中。所以在处理器在运行你代码期间,它只是刚开始加载时需要等待I/O,往后执行的时候,它全部都是处理器和内存之间再进行交互,效率得到了显著的提升。
举个例子
接下来再想象一个场景。假设我叫张三,我的朋友叫李四,都在电脑上用QQ。
场景一:发送文字消息: 在吗?
- 张三电脑(本地冯诺依曼体系)
- 输入设备(键盘):张三在QQ对话框打字“在吗?”。
- 存储器(内存):键盘输入的数据“在吗?”被操作系统/QQ程序捕获并暂存到内存中(QQ进程的内存空间)。
- CPU:QQ程序运行在CPU上,对“在吗?”这个消息进行处理(添加张三头像、昵称、时间戳,可能压缩加密,打包成网络数据包)。
- 存储器(内存):处理好的网络数据包写回内存。
- 输出设备(网卡):QQ程序调用操作系统,将内存中的网络数据包发送给网卡。(同时,QQ程序通常也会把“在吗?”这份数据通过输出设备(显卡->显示器)显示在张三自己的QQ聊天窗口里,这是本地副本)。
- 网络传输:数据包通过网络从张三的网卡传输到李四的网卡(忽略中间路由、腾讯服务器等细节)。
- 李四电脑(远程冯诺依曼体系)
- 输入设备(网卡):李四电脑的网卡接收到网络数据包。
- 存储器(内存):网卡接收到的数据被操作系统捕获并暂存到内存中(网络栈缓冲区)。
- CPU:QQ程序(已运行在内存中)被操作系统调度运行在CPU上,对内存中的网络数据包进行处理(解包、解密、验证、解析出发送者、时间、消息内容“在吗?”)。
- 存储器(内存):解析出的消息内容“在吗?”以及相关信息被QQ程序写回其内存空间。
- 输出设备(显卡->显示器):QQ程序调用操作系统,将内存中的消息内容“在吗?”渲染后通过显卡输出到显示器,显示在李四的QQ聊天窗口里。
场景二:发送实验报告文档(文件传输)
- 张三电脑
- 输入设备(磁盘):张三在QQ对话框拖拽实验报告文件。QQ程序请求操作系统打开磁盘上的这个文件。
- 存储器(内存):操作系统/QQ程序将文件内容从磁盘读取到内存中(QQ进程的内存空间)。
- CPU:QQ程序运行在CPU上,对文件内容进行处理(可能分块、压缩、加密、添加文件信息,打包成网络文件传输数据包)。
- 存储器(内存):处理好的网络数据包写回内存。
- 输出设备(网卡):QQ程序调用操作系统,将内存中的网络数据包发送给网卡。
- 网络传输:文件数据包通过网络传输。
- 李四电脑:
- 输入设备(网卡):网卡接收到文件传输数据包。
- 存储器(内存):数据包暂存到内存(网络栈缓冲区)。
- CPU:QQ程序在CPU上处理数据包(解包、解密、验证、解析出文件信息、文件内容块)。
- 存储器(内存):QQ程序将接收到的文件内容块在内存中重组。(此时,QQ界面可能显示接收进度条和文件图标,但这只是内存中文件信息的呈现)。
- 输出设备(磁盘):QQ程序调用操作系统,将内存中重组好的完整文件内容写入到李四电脑的磁盘上的某个位置(例如QQ的接收文件夹)。这才是文件最终持久化存储的地方。当李四双击文件图标时,操作系统会再次将文件从磁盘加载到内存,由相应程序(如Word)打开并显示内容。
关键点对比:
- 文字消息:内容本身较小,主要流程是:
键盘输入->内存->CPU处理->内存->网卡发送/网卡接收->内存->CPU处理->内存->显示器输出
。消息内容本身只在双方内存中短暂停留。 - 文件传输:核心目标是将文件从张三的磁盘复制到李四的磁盘**。完整流程是:
磁盘(张三)->内存(张三)->CPU处理(张三)->内存(张三)->网卡(张三)->网络->网卡(李四)->内存(李四)->CPU处理(李四)->内存(李四)->磁盘(李四)
。内存在这里是必经的、临时的中转站和数据处理场所。文件最终必须落地到磁盘才能持久保存(内存断电丢失)。
总结
本期内容属于操作系统重要知识——进程的引入部分,详细理解冯诺依曼体系结构对操作系统的深入学习作用匪浅。下期将为大家带来操作系统的正式介绍!
感谢大家的关注,我们下期再见!