冯 • 诺依曼体系结构

devtools/2025/3/18 19:16:21/

冯 • 诺依曼体系结构

  • 一、冯 • 诺依曼体系结构推导
    • 阶段 1:初始计算机体系结构(仅输入、运算、输出)
    • 阶段 2:加入控制功能,初步形成 CPU 概念
    • 阶段 3:性能瓶颈与引入内存
    • 阶段 4:最终冯·诺依曼体系结构
    • 内存提高效率的机制:局部性原理
  • 二、深入理解
    • 1.使用 QQ 聊天时数据的流动过程
      • 1.1 你的电脑(发送端)
      • 1.2 网络传输(简略)
      • 1.3 朋友的电脑(接收端)
    • 2.冯·诺依曼体系结构在其中的体现
    • 3.为什么要有这样的设计?


一、冯 • 诺依曼体系结构推导

冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器数据存储器合并在一起的存储器结构。程序指令存储地址数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。

数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构


我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
在这里插入图片描述
存储器:内存

外设:

输入设备:鼠标、键盘、摄像头、话筒、磁盘、网卡…
输出设备:显示器、播放器硬件、磁盘、网卡…
有的设备是纯输入、输出,也有既是输入又是输出的设备

CPU:

运算器:对我们的数据进行计算任务(算术运算,逻辑运算) 控制器:对我们的计算硬件流程进行一定的控制

以上这些都是独立的个体!各个硬件单元必须用“线”链接起来

  1. 系统总线
  2. IO总线

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

输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
输出单元:显示器,打印机等

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

  • 这里的存储器指的是内存
  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问 外设(输入或输出设备)
  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  • 一句话,所有设备都只能直接和内存打交道。

冯·诺依曼体系结构的工作流程
冯·诺依曼体系结构的工作基于“存储程序”和“顺序执行”的原则,其基本流程如下:

  • 取指令(Fetch):控制器从存储器中读取下一条指令(根据程序计数器的地址)。
  • 解码(Decode):控制器解析指令,确定需要执行的作。
  • 执行(Execute):运算器执行指令(可能涉及从存储器读取数据、计算、或将结果写回存储器)。
  • 更新程序计数器:程序计数器加1,指向下一条指令,循环上述步骤。

阶段 1:初始计算机体系结构(仅输入、运算、输出)

描述:计算机最初的作用是解决问题,需要输入数据、进行运算并输出结果。因此,体系结构包括输入设备、运算功能和输出设备。

输入设备
运算功能
输出设备

推导

  • 计算机通过输入设备获取数据或问题。
  • 数据经过算术运算和逻辑运算后,通过输出设备显示结果。
  • 然而,仅靠运算功能不足以协调数据流,缺乏控制机制。

阶段 2:加入控制功能,初步形成 CPU 概念

描述:为了协调输入、运算和输出的时机,引入控制功能(对应 C 语言中的判断、循环、函数跳转等)。将运算功能和控制功能整合,称为中央处理器(CPU)。

输入设备
CPU
包含运算和控制功能
输出设备

推导

  • CPU 整合了算术运算(加减乘除)、逻辑运算(与、或等)和控制功能。
  • 但输入设备和输出设备相对于 CPU 速度极慢(木桶原理),导致整体性能受限。
    在这里插入图片描述

阶段 3:性能瓶颈与引入内存

描述:由于输入/输出设备与 CPU 速度差异巨大,体系结构效率低下。引入内存作为缓冲,位于慢设备(输入/输出)和快设备(CPU)之间,缓解速度不匹配问题。

输入设备
内存
CPU
输出设备

推导

  • 输入设备将数据存入内存,CPU 从内存读取数据处理后写回内存。
  • 内存再将数据传输给输出设备。
  • 内存速度介于输入/输出设备和 CPU 之间,起到缓冲作用,避免 CPU 因等待慢设备而闲置。

阶段 4:最终冯·诺依曼体系结构

描述:结合存储器(仅指内存,不包括外存)、CPU、输入设备和输出设备,形成经典的冯·诺依曼体系结构。数据在内存和 CPU 之间流动,输入输出通过内存缓冲。
在这里插入图片描述
推导

  • 内存成为数据传输的中介,CPU 与内存之间的高速交互是体系核心。
  • 输入设备和输出设备通过内存与 CPU 间接通信,减少直接交互的瓶颈。

内存提高效率的机制:局部性原理

描述:内存通过局部性原理提高效率。当 CPU 访问某数据时,内存预加载其附近数据(空间局部性),并利用处理与加载并行进行(时间局部性),形成缓冲区效果。

输入设备
内存
预加载附近数据
CPU
处理数据
输出设备
缓冲区输出

推导

  • 空间局部性:内存加载一行数据时,预加载后续数据,减少 CPU 等待。
  • 时间局部性:CPU 处理数据时,内存同时加载下一批数据,二者并行提高效率。
  • 缓冲区:如 C 语言的 fflush 函数,内存存储数据直到缓冲区满,再输出到设备。

冯·诺依曼体系结构的推导是从简单输入-运算-输出的模型开始,逐步引入控制功能和内存,最终形成以内存和 CPU 为核心的结构。内存通过局部性原理和缓冲机制有效缓解了输入/输出设备与 CPU 速度不匹配的问题,成为现代计算机设计的基础。

二、深入理解

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?


1.使用 QQ 聊天时数据的流动过程

以下是从你敲击键盘到朋友看到消息的完整数据流动过程,结合冯·诺依曼体系结构和网络通信的视角:

1.1 你的电脑(发送端)

  • 输入阶段(键盘 → 内存)

    • 你在键盘上输入消息(例如“Hello”)。
    • 键盘作为输入设备,将按键信号转换为电信号,存储到键盘控制器的寄存器中。
    • 通过 I/O 总线,键盘控制器将数据写入内存(通常由操作系统的中断机制完成)。
    • 冯·诺依曼特性:外设(如键盘)不直接与 CPU 交互,而是通过内存作为中介。
  • 显示阶段(内存 → 显示器)

    • 输入的消息被加载到内存后,QQ 客户端程序从内存读取数据。
    • CPU 执行客户端代码,将消息渲染到显示缓冲区(内存中的一块区域)。
    • 显示器(输出设备)通过 I/O 总线 从内存获取渲染数据,显示在你的屏幕上。
  • 封装与发送阶段(内存 → 网卡)

    • CPU 从内存读取消息,按照网络协议栈(TCP/IP)进行封装:
      • 应用层:QQ 协议添加消息头。
      • 传输层:TCP 添加端口号、序列号等。
      • 网络层:IP 添加源和目标 IP 地址。
      • 数据链路层:以太网帧封装。
    • 封装后的数据写回内存。
    • 网卡(输出设备)通过 I/O 总线 从内存读取数据,发送到网络。

1.2 网络传输(简略)

  • 数据经过路由器、交换机等网络设备,从你的网卡传输到朋友的网卡。
  • 具体过程涉及物理层信号转换、数据链路层帧传递、网络层路由等(按你的要求忽略细节)。

1.3 朋友的电脑(接收端)

  • 接收阶段(网卡 → 内存)

    • 朋友的网卡(输入设备)接收到网络数据,存储到网卡的寄存器中。
    • 通过 I/O 总线,网卡将数据写入内存。
    • 冯·诺依曼特性:网卡作为外设,依然通过内存与 CPU 交互。
  • 解包阶段(内存 → CPU → 内存)

    • CPU 从内存读取数据,按协议栈逆向解包:
      • 数据链路层:剥离以太网帧。
      • 网络层:解析 IP 地址。
      • 传输层:处理 TCP 头部。
      • 应用层:提取 QQ 消息内容。
    • 解包后的消息写回内存。
  • 显示阶段(内存 → 显示器)

    • QQ 客户端从内存读取解包后的消息。
    • CPU 执行渲染逻辑,将消息写入显示缓冲区。
    • 显示器(输出设备)通过 I/O 总线 从内存获取数据,显示在朋友的屏幕上。

2.冯·诺依曼体系结构在其中的体现

冯·诺依曼体系结构的核心是 存储程序概念CPU-内存-外设 的分工协作。以下是它在 QQ 聊天过程中的体现:

  1. 内存作为数据中转站

    • 所有外设(键盘、网卡、显示器)都通过内存与 CPU 交互。
    • 原因:CPU 的处理速度远高于外设,直接交互会导致效率低下;内存作为缓冲区,解耦了 CPU 和外设的操作。
  2. 程序必须加载到内存

    • QQ 客户端的可执行文件存储在硬盘上,运行时加载到内存。
    • 原因:CPU 只能从内存取指令和数据,硬盘(外设)的数据访问需要通过内存中转。
  3. 总线连接硬件

    • 系统总线:连接 CPU 和内存,传输指令和数据。
    • I/O 总线:连接内存和外设(如键盘、网卡),负责数据输入输出。
  4. 寄存器的作用

    • 外设(如键盘、网卡)内部的寄存器暂存数据,再通过总线写入内存。
    • 原因:寄存器速度快,适合缓冲瞬时数据,减少内存直接访问的压力。

3.为什么要有这样的设计?

  1. 为什么 CPU 只与内存打交道?

    • 效率:CPU 的速度(GHz 级别)远超外设(MHz 或更低),直接与外设交互会浪费 CPU 时间。
    • 解耦:通过内存中转,CPU 可以专注于计算,外设可以独立完成 I/O 操作。
  2. 为什么程序要加载到内存?

    • 速度:内存的访问速度(纳秒级)比硬盘(毫秒级)快几个数量级,CPU 需要快速获取指令(但也会出现“内存墙”的问题)。
    • 控制:内存由操作系统管理,便于分配和保护程序运行环境。
  3. 为什么外设需要寄存器?

    • 缓冲:外设的处理速度慢,寄存器作为临时存储,避免数据丢失。
    • 同步:寄存器与外设硬件直接相连,确保数据按序传输到内存。
  4. 为什么数据要经过封装和解包?

    • 可靠性:网络协议(如 TCP)通过头部信息保证数据顺序和完整性。
    • 通用性:分层封装(如 TCP/IP)让不同设备和软件能够协同工作。


http://www.ppmy.cn/devtools/168134.html

相关文章

AI机器学习---开发工具JupyterLab

JupyterLab‌:JupyterLab是Jupyter项目的下一代交互式计算环境,提供了更加现代和灵活的用户界面。它支持多文档界面,用户可以同时打开和查看多个文档,包括笔记本、文本文件、代码文件等。JupyterLab的界面更加复杂,允许…

Redis--渐进式遍历

目录 一、引言 二、介绍 三、命令 四、总结 一、引言 本篇文章将介绍Redis中的渐进式遍历 二、介绍 一般使用keys * 来获取所有的key,但这样的操作如果数据量很大的时候,会将服务器给卡死,所以通过渐进式遍历,就会避免这个问题…

2024浙江大学计算机考研上机真题

2024浙江大学计算机考研上机真题 2024浙江大学计算机考研复试上机真题 2024浙江大学计算机考研机试真题 2024浙江大学计算机考研复试机试真题 历年浙江大学计算机复试上机真题 历年浙江大学计算机复试机试真题 2024浙江大学计算机复试上机真题 2024浙江大学计算机复试机试真题 …

Android开源库——RxJava和RxAndroid

RxJava和RxAndroid是什么? RxJava是基于JVM的响应式扩展,用于编写异步代码 RxAndroid是关于Android的RxJava绑定 RxJava和RxAndroid使用 依赖 implementation io.reactivex.rxjava3:rxjava:3.1.0 implementation io.reactivex.rxjava3:rxandroid:3.…

android.widget包介绍

android.widget 是 Android 开发中用于构建用户界面(UI)的核心包之一。它包含了大量的 UI 控件(如按钮、文本框、列表等),这些控件通常被称为“小部件”(Widget)。android.widget 包中的类大多继…

求职招聘网站源码,找工作招工系统,支持H5和各种小程序

招聘找活招工平台系统源码 招聘求职找工作软件 发布信息积分充值招聘系统,里面带纤细教程 功能介绍: 招工小程序主要针对工地招工工人找工作,工地可以发布招工信息,工人可以发布找活信息,招工信息可以置顶,置顶需要积分,积分可以通过签到、分享邀请好友、充值获取,后…

解决diffusers加载stablediffusion模型,输入prompt总是报错token数超出clip最大长度限制

1. StableDiffusion1.5 在加载huggingface中的扩散模型时,输入prompt总是会被报错超过clip的最大长度限制。 解决方案:使用compel库 from diffusers import AutoPipelineForText2Image import torch import pdb from compel import Compeldevice torc…

浅谈StarRocks SQL性能检查与调优

StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率,物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略,避免全表扫描或数据倾斜。资源层面,需平衡并行度、内存限制与网络…