冯·诺依曼体系结构介绍

简介: 冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。

1.什么是冯·诺依曼体系结构


冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。(该词条来自百度百科)


特点


现代计算机发展所遵循的基本结构形式始终是冯·诺依曼机结构。这种结构特点是“程序存储,共享数据,顺序执行”,需要 CPU 从存储器取出指令和数据进行相应的计算。 [2]  主要特点有:


(1)单处理机结构,机器以运算器为中心;


(2)采用程序存储思想;


(3)指令和数据一样可以参与运算;


(4) 数据以二进制表示;


(5)将软件和硬件完全分离;


(6) 指令由操作码和操作数组成;


(7)指令顺序执行


局限


CPU 与共享存储器间的信息交换的速度成为影响系统性能的主要因素,而信息交换速度的提高又受制于存储元件的速度、存储器的性能和结构等诸多条件。


2.冯·诺依曼结构


1945年,冯•诺依曼联合计算机科学家们提出了计算机系统结构具体设计的报告,其遵循图灵机的设计,并且还提出用电子元件构造计算机,同时也约定了用二进制来进行计算和存储;体系结构将计算机系统具体定义为五个部分,分别是运算器,控制器,存储器,输入设备,输出设备;其中运算器与控制器并称为中央处理器(CPU),存储器也就是我们常说的内存,常见的输出设备有键盘,鼠标,网卡,硬盘等;常见的输出设备有显示器,音响,硬盘等;我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

image.png


3. 冯•诺依曼体系结构推导


计算机的作用就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备。计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出,于是就得到了以下流程图。

image.png

但是计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,控制何时从输入设备获取数据,何时输出数据到输出设备等。对应到C语言当中,算术运算就完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与逻辑或等,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等。

image.png

而我们后人就将这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU。但是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。

image.png

所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存。

image.png

 内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。

现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。

image.png

强调:


1.这里的存储器指的是内存


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


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


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


内存提高冯•诺依曼体系结构效率的方法

在这里大多数人有一个疑惑就是,先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?


说明这个问题之前,我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。


这里不得不说到的就是局部性原理:根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据。


输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。


你用QQ和朋友聊天时数据的流动过程


要使用QQ,首先需要联网,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。

image.png

刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。

在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。

image.png

寄存器


一个典型的CPU由运算器、控制器、寄存器等器件构成,分工如下:


a) 运算器进行信息处理;


b) 寄存器进行信息存储;


c) 控制器控制各种器件进行工作;


d) 内部总线连接各种器件,在它们之间进行数据的传送。


对于汇编程序员来说,CPU中的主要部件是寄存器,寄存器是CPU中程序员可以用指令读写的部件,程序员通过改变各种寄存器中的内容来实现对CPU的控制。不同CPU,寄存器个数、结构是不同的。


32位通用寄存器有八个,eax, ebx, ecx, edx, esi, edi, ebp, esp,


他们主要用作逻辑运算、地址计算和内存指针,具体功能如下:eax    累加和结果寄存器

ebx    数据指针寄存器

ecx    循环计数器

edx    i/o指针

esi    源地址寄存器

edi    目的地址寄存器

esp    堆栈指针

ebp    栈指针寄存器

目录
相关文章
|
7月前
|
存储 安全 Unix
用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS
用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS
|
4月前
|
存储 缓存 机器人
哈弗架构和冯诺伊曼架构
在计算机体系结构中,有两种主要的模型:冯诺伊曼架构(Von Neumann Architecture)和哈弗架构(Harvard Architecture)。冯诺伊曼架构是传统的计算机设计模型,采用统一的存储器空间存储程序指令和数据。哈弗架构则采用分离的存储器空间,分别存储程序指令和数据,以提高系统性能。这两种架构各有优缺点,并在不同的应用场景中得到广泛应用。
78 1
|
4月前
|
存储 人工智能 云计算
云计算演进问题之冯·诺伊曼架构的主要特点如何解决
云计算演进问题之阿里云自研CPU倚天710的部署如何解决
|
7月前
|
存储 程序员 数据处理
软件体系结构 - 冯·诺依曼架构
软件体系结构 - 冯·诺依曼架构
149 0
|
7月前
|
存储 Python
简单的冯·诺依曼体系结构的 Python 代码示例
我们首先定义了寄存器文件、内存、输入/输出设备和总线。然后,我们定义了两个函数 `read_from_memory` 和 `write_to_memory`,分别用于从内存中读取数据和将数据写入内存。最后,我们演示了如何使用这些函数将数据写入内存并读取出来。
124 1
|
7月前
|
存储 缓存 安全
冯·诺依曼体系结构和操作系统
冯·诺依曼体系结构和操作系统
96 0
|
存储 C语言
冯 • 诺依曼体系结构与操作系统
冯 • 诺依曼体系结构与操作系统
141 0
冯 • 诺依曼体系结构与操作系统
|
存储 数据处理
【计算机基础】 --- 冯·诺依曼结构与哈佛结构
【计算机基础】 --- 冯·诺依曼结构与哈佛结构
228 0
|
机器学习/深度学习 存储 算法
「从未被制造出的最重要机器」,艾伦·图灵及图灵机那些事
「从未被制造出的最重要机器」,艾伦·图灵及图灵机那些事
123 0
|
算法 程序员
计算机发展史之阿达·洛芙莱斯
你一定想不到世界上最早的程序员竟然是一位女士,而且还有专门的编程语言为了纪念她而命名,她就是阿达·洛芙莱斯(Ada Lovelace) 奥古斯塔·阿达·拜伦是她的原名,因为嫁给威廉·金后晋封为洛芙莱斯伯爵,而后改的名字。她不仅是数学家(被誉为数字女王)、翻译家(正是翻译才结识到巴贝奇)还是英国大诗人乔治·戈登·拜伦的女儿,更是世界上公认的第一个程序员。 为什么她是世界公认的第一位程序员?她身上又发生了哪些传奇的故事? 今天让我们走进她的一生吧~
306 0