Linux学习之冯诺依曼体系结构

冯诺依曼体系结构

在计算机的历史发展中,除了Linux之父林纳斯拖瓦茨,计算机科学之父图灵等这样的大佬人物,冯诺依曼作为一名数学家,却也在计算机领域作出重大贡献,如今我们常见的计算机都是遵循冯诺依曼体系结构。

这里的体系结构就是指计算机组成结构:分别由输入单元,输出单元,存储区,运算器,控制器五大单元构成。

那么五大组件实际当中指的是什么呢?

存储器:这里主要指的就是内存

运算器与控制器:就是我们常说的cpu-中央处理器,当然在cpu上还集成了许多寄存器和各种级别的缓存。

输入单元:如键盘,话筒,摄像头,鼠标,usb,磁盘/ssd,网卡,显卡等各种设备。

输出单元:如显示器,音响,打印机,磁盘,网卡,显卡等各种设备。

存储分级

存储效率的能力强弱决定了设备与设备之间信息的传递的速度,这直接体现计算机的整体效率。

对于计算机里面的所有设备都有数据存储的能力,只不过存储能力不同而已,且对于数据的处理速度上各个设备都不一样:

一般对我们来说,最快的便是寄存器(在cpu上),下来是内存,之后是各种外设(磁盘)。

可以看到,以cpu为中心,离cpu越近,存储效率更高,价格更加昂贵,离cpu越远的,存储效率越低,价格便宜。

我们知道最早的计算机都是科学家在使用,平常人用不起,而对于当代的计算机,老百姓也用得起,那么它的设计就必须是这种分级的存储模式。

而对于计算机结构,在此之前不仅仅有冯诺依曼体系结构,还有如哈佛结构等其他人提出的各种结构,而冯诺依曼结构最后被大众使用其中有一点就是冯诺依曼体系结构容易实现这种存储分级(速度分级)。

木桶效应

在数据层面上,当代cpu不再与外设直接交互,那么是为什么呢?

木桶定律是讲一只水桶能装多少水取决于它最短的那块木板,也就是短板效应。整个计算机就像是一个木桶,计算机的最终效率取决于cpu,如果直接让cpu直接去和其他外设交互,那么整机的效率就和外设的效率一样了,那样效率会大打折扣。

因此cpu不会和其他外设进行数据交互,而是去和内存进行交互,外设的数据都会被拿到内存当中,在此过程cpu也可以去做其他的计算,而如何控制cpu与内存和外设的工作是由操作系统来控制的,故在数据层面上,cpu优先和内存直接打交道。

了解了这些,那么内存我们就可以认为它是一个硬件基本大的缓存。

基于我们冯诺依曼体系的计算机,就可以用较少的钱做出效率不错的计算机,也就是有超高性价比。

体系结构决定的几个方面

第一方面:程序加载

在我们敲代码的过程中,在使用gcc编译可执行文件时,我们需要利用./文件名将他加载到内存中,那么程序运行之前为什么必须要加载到内存当中?

所谓的程序就是代码和数据,这些代码和数据经过一系列编译最终要到cpu中去计算处理,在此之前,cpu需要读取到这些数据和代码,而cpu只和内存有直接的数据交互,故此需要将程序加载到内存当中才可以,且形成扥可执行程序保存在磁盘中。

这就是体系结构决定程序在运行时为什么要加载到内存当中。

第二方面:数据在硬件上的传递

举例:两名不同地方的网友在qq上互相打招呼 --如何表示消息的发送?

首先一名网友利用输出设备(键盘)输入进qq这个程序(输入到内存当中),之后cpu参与将这个信息整合起来(发消息的时间,内容,人物)形成可发送的程序,再从内存当中读取向自己的输出设备(网卡)输出,最后通过网络传递到另一个网友的计算机上的输入设备上(网卡),从网卡读取到内存中,通过cpu拆分,在写到存储器中,最后向输出设备输出(显示器)。

第三方面:文件拷贝

例如我们当前正在写实验报告,写完了之后,以托拽的方式发送给了同学:

首先在这个过程中依旧是依靠冯诺依曼体系结构的,写完的实验报告保存在磁盘当中,首先内存向输入设备(磁盘)获取到文件,还是通过cpu打包处理,再保存到内存当中,向输出设备(网卡)输出,通过网络另一个同学的输入设备接收到文件,内存从中获取,再由cpu解包处理,再保存到内存当中,最后输出到输出设备(磁盘当中)。

冯诺依曼体系结构的限制

冯.诺依曼体系结构是现代计算机的基础,现在大多计算机仍是冯.诺依曼计算机的组织结构,只是作了一些改进而已,并没有从根本上突破冯体系结构的束缚。冯.诺依曼也因此被人们称为"计算机之父"。

然而由于传统冯.诺依曼计算机体系结构天然所具有的局限性,从根本上限制了计算机的发展:

(1) 通过使用存储程序方法,指令和数据被混合并存储在同一存储器中,没有区别

没有区别,它们都是内存中的数据。当EIP指针指向哪个CPU时,将加载该内存段中的数据。如果不正确

如果指令格式不正确,CPU将经历错误中断。在当前的CPU保护模式下,每个内存段都有其描述符,该描述符记录

此内存段的访问权限(可读、可写、可执行)。这间接指定了哪些内存存储指令以及哪些数据

指令和数据都可以发送到算术单元进行运算,这意味着由指令组成的程序可以被修改。

(2) 内存是由地址访问的线性寻址的一维结构,每个单元有固定的位。

(3) 指令由操作码和地址组成。操作码指示此指令的操作类型,而地址码指示操作数和地址。操作数本身一种没有数据类型的标志,其数据类型由操作码决定。

(4)通过执行指令直接发出控制信号来控制计算机操作。指令按执行顺序存储在内存中, 计数器指示要执行的指令所在的单元地址。只有一个指令计数器,通常按顺序递增,但执顺 序 可以按顺序运行。

(5) 以算术单元为中心,I/O设备和内存之间的数据传输必须通过算术单元。

(6) 数据以二进制格式表示。

相关推荐
无敌最俊朗@1 小时前
stm32学习之路——八种GPIO口工作模式
c语言·stm32·单片机·学习
EterNity_TiMe_2 小时前
【论文复现】STM32设计的物联网智能鱼缸
stm32·单片机·嵌入式硬件·物联网·学习·性能优化
L_cl2 小时前
Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程
学习
前端SkyRain2 小时前
后端Node学习项目-用户管理-增删改查
后端·学习·node.js
提笔惊蚂蚁2 小时前
结构化(经典)软件开发方法: 需求分析阶段+设计阶段
后端·学习·需求分析
DDDiccc2 小时前
JAVA学习日记(十五) 数据结构
数据结构·学习
腾科张老师4 小时前
为什么要使用Ansible实现Linux管理自动化?
linux·网络·学习·自动化·ansible
tao_sc6 小时前
luckfox-pico-max学习记录
学习
zx_zx_1236 小时前
多态的学习
c++·学习
B1nna9 小时前
SpringMVC学习记录(三)之响应数据
java·学习·json·springmvc·jsp