从0到1:Linux 系统编程 --- 冯·诺依曼体系结构

大家好,在这一个专辑当中,我要给大家分享 Linux 操作系统相关的知识,这一期先来给大家分享Linux 操作系统的第一个知识:冯·诺依曼体系结构,相信大家看完以后一定会有所收获。

废话不多说,我们直接开始:

一:冯诺依曼体系结构初识

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

截至目前,我们所认识的计算机,都是由一个一个的硬件所组成的,包括:

输入单元:键盘、鼠标、扫描仪、写板、摄像头、话筒、网卡、磁盘……

中央处理器(CPU):含有运算器和控制器……

输出单元:显示器、打印机、喇叭、网卡、磁盘……

有的设备是纯的输入设备,有的是纯的输出设备,有的既可以做输入设备也可以做输出设备

关于冯诺依曼,必须强调以下几点:

1. 这里的存储器,指的就是内存!!!(有内存(内部存储)就会有外存(外部存储)(磁盘……))

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

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

4. 一句话,所有的设备都只能直接和内存打交道。

先输出一个结论:在数据层面上,冯诺依曼体系结构规定,CPU 不会和外设直接打交道(输入 偶or 输出),CPU 读写数据时,只会和内存打交道。

我们口中的输入输出是站在内存的角度考虑问题的。

站在内存的角度(纯硬件),向输入设备要数据,向输出设备写数据。

站在加载到内存中的程序的角度,input output IO。

#include <stdio.h>

#include <iostream>

引入 IO 的功能!!!

二:内存在冯诺依曼体系中的价值?

1. 计算机存储分级的问题

计算机用于存储的单元是非常多的,离 CPU 越近的话,就越小,越快,成本越高;离 CPU 越远的话,就越便宜,越大,越慢。比如:寄存器数量非常少,但是特别快。磁盘存储空间特别大,但是很慢。

2. 体系结构效率的问题

计算机数据流动的过程,本质上就是拷贝!!!

输入数据(拷贝输入到内存)输出数据(拷贝数据到显示器)CPU 处理数据(拷贝数据到 CPU 处理完再拷贝回去……)

计算机的效率问题,是由设备的拷贝效率决定的,拷贝完就要存储,因此存储设备的效率决定拷贝的效率。

如果不考虑冯诺依曼体系结构,直接把计算机设计成如下结构:

在我们的日常生活中,大家肯定听说过一个理论,叫做木桶效应:

木桶中能够装的最大水量取决于最短的那一块木板。计算机也是一样,计算机的效率取决于体系中最慢的设备的效率。CPU 的速度可以达到纳秒级别,外设(输入输出设备)的速度是毫秒级别的,外设相较于 CPU 速度特别慢,这就导致了 CPU 大部分时间都在等,整个体系的效率就由外设决定了。

但如果设计成冯诺依曼体系结构的话,让 CPU 只去和内存打交道,这样的话,整个体系的效率就以内存为主,效率提升非常明显。

但是有人可能会问,即使是这样的话,如果串联执行的话,输入设备输入数据到内存,内存再和 CPU 打交道,根据木桶效应,整个过程的效率不还是由输入输出设备决定吗???

如果是纯硬件角度的话,确实是这样的。但是未来我们还会学习操作系统(OS),OS 可以将数据大批量的提前加载到内存中。未来系统只要在一个调度软件(OS)的调度之下做预加载,大部分情况下,处理数据的时候,就可以转换成 CPU 和内存之间的交互。计算机的效率就以内存为主了。

拓展:计算机局部性原理

程序,有顺序结构,分支结构,循环结构,但是最多的还是顺序结构,如果当前 CPU 执行到第 100 行的话,那么大概率下一次就会执行第 101 行,利用这个特性,就值得把数据提前加载。

思考:为什么最终选择内存作为冯诺依曼体系结构中的存储器???

答:内存存储提取的效率不错,价格也不算太贵,普通老百姓也能承担得起。

如果选择寄存器作为存储器,虽然也可以实现,但是造价太高了,内存已经很快了,再快我们其实也感觉不到了,把一台计算机的所有存储单元全部搞成寄存器是土豪的玩法。

如果选择磁盘作为存储器,效率比较低。

折中考虑的话,最终冯诺依曼体系结构采用内存作为存储器。

这样的话计算机的效率就以内存为主了!!!这是计算机划时代的一个进步:

让普通人也能以较低的价格获得效率不错的计算机,为电脑提供了性价比,就有更多人愿意去买电脑,电脑就被人们广泛接受,这样的话,才可能形成全球范围内的网民数量,才可能孵化出互联网!!!

网民增多,互联网公司就会增多,进步就会变快,这就是技术推动生产力。竹签到纸的进步,就让更多人能够学习汉字,冯诺依曼看似只是一个小小的技术创新,但就是这样小小的技术创新推动了整个社会的进步,促进了时代的发展!!!

三:思考题

1. 问题一:

C 语言写的代码编译好之后是二进制可执行程序,二进制可执行程序本质上也是一个文件,程序要运行必须要先加载到内存中,为什么???

程序中肯定会包括逻辑和数据,可以简单地理解为程序就是数据,CPU 在处理数据层面只会和内存打交道按行处理内存内容,不会和外设打交道(太慢了),因为冯诺依曼体系结构就是这样规定的。路怎么修,人就该怎么走。

2. 问题二:

你在河北上大学,你的好朋友在海南,某一天,你登上了 QQ,给你的好朋友发送 QQ 消息 "开不开"?描述一下字符串数据的整个流动过程。(不考虑网络)

你的好朋友在 QQ 上找到你,跟你说 "实验报告写了吗,发给我,我抄一下",你在 QQ 上把实验报告文件发给了他,描述一下磁盘文件数据的整个流动过程?(不考虑网络)

这两个问题就是,两台计算机之间的两个冯诺依曼体系结构进行通信。

登录 QQ 的话,相当于打开 QQ 的二进制可执行程序,程序运行(QQ)要先加载到内存中。

"开不开" 这个数据从键盘(输入设备)上输入,会先加载到内存中,由 CPU 进行处理(加密)之后,通过网卡(输出设备),经由网络传输,发送到对方的 QQ 上,对方的网卡(输入设备)会先将 "开不开" 这个数据加载到他的内存中,经过 CPU 处理(解密),显示到他的显示器上(输出设备),就看到你发的消息了。

同理,你拖拽实验报告文件到 QQ 上,磁盘就是输入设备,实验报告文件要先加载到内存中,由 CPU 进行处理(加密)之后,通过网卡(输出设备),经由网络传输,发送到对方的 QQ 上,对方的网卡(输入设备)会先将实验报告文件加载到内存中,经过 CPU 处理(解密),下载到对方的磁盘(输出设备)中。

数据怎么流动跟软件没有关系,只会跟硬件有关系。软件是由硬件决定的。冯诺依曼体系结构决定了很多软件行为。路怎么修,人就行该怎么走。

好的,这一期关于冯诺依曼体系结构的分享就到这里了,别忘了一键三连,谢谢大家~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值