冯 • 诺依曼体系结构

冯 • 诺依曼体系结构

  • 一、冯 • 诺依曼体系结构推导
    • 阶段 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.mzph.cn/web/72505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python print() 打印多个变量时,可变对象和不可变对象的区别

先来看这段代码: tmp [] print(tmp, tmp.append(1), tmp)输出: [1] None [1]并不是一些人认为的 [] None [1] 这是因为列表是可变对象,print()打印前会先计算出所有结果,最后再打印出来,中间在列表中添加了1&#…

【数学 线性代数】差分约束

前言 C算法与数据结构 本博文代码打包下载 什么是差分约束 x系列是变量&#xff0c;y系列是常量&#xff0c;差分系统由若干如下不等式组成。 x1-x2 < y1 x2-x3 < y2 ⋯ \cdots ⋯ 可能有负环的最短路 个人习惯&#xff1a;如果存在a指向b的边&#xff0c;则a是b的…

AutoGen :使用 Swarm 构建自治型多智能体团队

👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!👉👉👉 有意愿请私信!!!AutoGen 的 AgentChat 模块提供了一种强大的方法来构建多智能体协作系统。 在之前的文章中,我们探讨了…

2025人工智能“落地生花”:这六大领域正掀起颠覆性革命

——从医疗到养老&#xff0c;一场“AI”的全民狂欢正在上演 2025年的春天&#xff0c;全球科技界的热搜被一个中国AI大模型“霸榜”——DeepSeek。从春晚的机器人热舞到政务系统的“数字员工上岗”&#xff0c;从医疗诊断到工业炼钢&#xff0c;这场始于春节的技术海啸&#…

第27周JavaSpringboot git初识

Git 课程笔记 一、Git 的介绍 1. Git 的诞生背景 Git 是 Linux 内核的作者 Linus Torvalds 为了更好地管理 Linux 内核开发而创建的版本控制系统。在 Linux 内核开发初期&#xff0c;由于开发者众多&#xff0c;协作成本很高&#xff0c;后来使用了 BitKeeper 工具来辅助协作…

蓝耘智算|从静态到动态:探索Maas平台海螺AI图片生成视频功能的强大能力

文章目录 &#x1f44f;一、技术介绍&#x1f44f;二、平台注册&#x1f44f;三、功能体验&#x1f44f;四、总结 随着人工智能技术的快速发展&#xff0c;视频处理和生成技术已经成为了众多行业关注的热点。最近&#xff0c;我有机会体验了蓝耘智算平台的Maas平海螺AI视频产品…

解决从deepseek接口获取的流式响应输出到前端都是undefined的问题

你的前端 EventSource 代码遇到了 undefined 连续输出 的问题&#xff0c;通常是因为&#xff1a; AI 返回的内容被拆成了单个字符&#xff0c;导致前端 JSON.parse(event.data).content 获取到的是单个字符&#xff0c;而 undefined 可能是因为某些数据块没有 content 字段。…

VLLM专题(二十七)—使用 Kubernetes

在Kubernetes上部署vLLM是一种可扩展且高效的方式来服务机器学习模型。本指南将引导您使用原生Kubernetes部署vLLM。 此外,您还可以使用以下任意一种方式将vLLM部署到Kubernetes: HelmInftyAI/llmazKServekubernetes-sigs/lwsmeta-llama/llama-stacksubstratusai/kubeaivllm…

前缀和 之 哈希表 之 和 的奇偶与倍数

文章目录 930.和相同的二元子数组523.连续的子数组和 求解连续子数组的和的问题&#xff0c;常常会使用到这个前缀和的思路&#xff0c;当然当数组存在单调性的时候&#xff0c;可以考虑使用不定长滑动窗口&#xff0c;在这里解释一下&#xff0c;何为数组的和存在这个单调性&a…

Docker Compose 和 Kubernetes(K8s)对比

Docker Compose 和 Kubernetes&#xff08;K8s&#xff09;在某些方面有相似的功能&#xff0c;但它们的 核心用途和适用场景不同。以下是它们的主要区别和联系&#xff1a; 1. Docker Compose 和 Kubernetes 的区别 对比项Docker ComposeKubernetes&#xff08;K8s&#xff0…

晶艺代理,100V3.5A高耐压LA1823完全替换MP9487--启烨科技有限公司

晶艺品牌LA1823是异步降压转换器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;开关频率可调节&#xff0c;输入电压4.5~100V&#xff0c;2A平均电流&#xff0c;峰值电流3.5A&#xff0c;采用ESOP8封装。 晶艺LA1823的特性&#xff1a; 4.…

PLC控制柜在技术创新驱动中功能演进 尤劲恩科技

在智能制造体系中&#xff0c;PLC控制柜不仅承担着传统设备控制的基础功能&#xff0c;更通过工业以太网、PROFIBUS等现场总线技术&#xff0c;构建起分布式控制系统&#xff08;DCS&#xff09;。这种拓扑结构使生产线具备实时数据采集、远程监控和智能决策能力&#xff0c;显…

【JavaEE】Spring Boot 日志

目录 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 门面 / 外观 模式 2.3 日志级别2.3.1 六大分类2.3.2 使用 2.4 日志级别配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 简单打印日志 一、日志概述 ⽇志主要是为了发现问题, 分析问题, 定位问题…

代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_b…

uniapp APP权限弹框

效果图 第一步 新建一个页面&#xff0c;设置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

网络安全证书培训机构有哪些

一、前言少叙 记得刚入行的时候&#xff0c;想考一个证书来装装门面&#xff0c;结果发现费用太高了&#xff0c;比当时一个月的工资都高&#xff0c;感叹网络安全这帮人真舍得花钱&#xff0c;遂放弃。后来入职网络安全公司&#xff0c;考了一个CISP&#xff0c;在工作中逐渐…

torch.argsorttorch.gather

文章目录 1. 举例说明2. pytorch 代码 1. 举例说明 torch.argsort 的作用是可以将矩阵中的元素进行从小到大排序&#xff0c;得到对应的序号。假设我们有一个向量a表示如下 a [ 8 , 7 , 6 , 9 , 7 ] \begin{equation} a[8,7,6,9,7] \end{equation} a[8,7,6,9,7]​​ 那么从小…

JSON数据格式介绍

2.5 JSON 2.5.1.JSON格式的用途 在开发中凡是涉及到『跨平台数据传输』&#xff0c;JSON格式一定是首选 2.5.2.JSON格式的说明 1.JSON数据两端要么是{}&#xff0c;要么是[] {}定义JSON对象[]定义JSON数组 2.JSON对象的格式是&#xff1a;json {key:value,key:value,...,ke…

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…

Qt程序基于共享内存读写CodeSys的变量

文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值6.Qt读写CodeSys的共享内存 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中&#xff0c…