【Linux系统编程】冯诺依曼体系结构
目录
前言
什么是冯诺依曼体系结构?
冯诺依曼体系结构如何进行数据处理的?
存储器在冯诺依曼体系中有什么作用?
冯诺依曼体系结构为什么要这样设计?
冯诺依曼结构总结
前言
相信对于冯诺依曼这个人的名字大家一定不会感到陌生,他被称为“现代计算机之父”
而在他生平比较重要的一大贡献就是:创建了计算机的硬件结构为冯诺依曼体系结构
接下来,我会对这个体系结构进行详细的介绍,包括他为什么要这样设计,这样设计的好处是什么,为什么现在计算机大多都以冯诺依曼体系结构为主体。。。。也会娓娓道来!那就让我们接下去看吧!
什么是冯诺依曼体系结构?
冯诺依曼体系结构是冯诺依曼提出的一种计算机硬件结构,如图
我们先看看他其中的组成是怎么样的
存储器:指的其实就是我们熟知的内存
输入设备:指的是帮助计算机产生数据的设备,例如:键盘、摄像头、话筒、磁盘、网卡。。。
输出设备:指的是帮助计算机处理数据的设备,例如:显示器、音响、磁盘、网卡。。。
注意:有些设备既可以是输入设备,也可以是输出设备
中央处理单元:指的就是电脑的CPU
运算器:是CPU中较为主要的设备之一,它的功能是进行各种运算,例如:算术运算/逻辑运算
控制器:给CPU进行响应外部事件,例如拷贝数据到内存中
现在,我们知道了什么是冯诺依曼体系结构,那么相信你也一定会有疑问,他到底是如何工作的呢?不要急,我们接下来看看!
冯诺依曼体系结构如何进行数据处理的?
第一步:首先是由输入设备读取完数据
第二步:把数据由输入设备移动到内存中
第三步:此时CPU拿到并进行处理内存中的数据
第四步:CPU再把处理好的数据交给内存
第五步:内存再把数据给输出设备,此时整个数据处理流程就完毕了
也就是如下图示意图的黑色箭头指向即为冯诺依曼体系结构的工作流程
存储器在冯诺依曼体系中有什么作用?
在看了上述内容后,相信你也有一些疑惑,为什么冯诺依曼体系结构中需要有存储器呢?
我们直接把数据从输入设备把数据给到CPU再由CPU给到输出设备不就好了吗?
首先,我们先要了解一个概念,那就是在冯诺依曼体系结构中不同的设备,他们的处理数据的速度是远远不同的
其中,输入设备和输出设备是一个级别的速度(最慢的)
其次,存储器是一个级别的速度(中等的)
再然后,CPU是一个级别的速度(最快的)
如果我们说CPU是10纳秒级别的速度的话,那么存储器可能就是百纳秒为单位的,而输入设备和输出设备是微秒级别的
我们其实可以发现,在冯诺依曼体系结构中,CPU是不直接与输入输出设备直接进行交互的,原因也是因为他们的速度过慢会导致CPU长时间等待以至于运行效率变低
这里就好比木桶效应
木桶效应:决定一个桶能装多少水的不是取决于最高的那块木板,而是最低的那块木板
同样的,因为CPU的速度已经很快很快了,此时决定CPU的速度的就不是它自身的速度,而是其他较慢设备的速度。所以存储器这个设备在体系结构中也是必不可少的!
冯诺依曼体系结构为什么要这样设计?
在上述内容中,我们了解了,体系结构中为什么需要存储器,但我接下来又得要提出一个问题了。
为什么体系结构中需要有输入设备中的磁盘呢?同样是读取数据,它的效率还比内存要低,我不能全部换成内存吗?
从技术角度来说,这显然是可行的。因为上述,同样是读取数据,内存一定比磁盘要好
但是我们除了要考虑技术问题,最重要的一个问题是成本
我们都知道,凡是被广泛传播的产品,一定是物美价廉的!
如果我们把磁盘中的512G全部换成内存,显然这个造价就会导致计算机无法广泛传播,并且性价比极低(全部换成内存不一定就会比磁盘+内存速度快)
如果真按照这样子设计,冯诺依曼体系结构也或许并不会成为现代计算机的主流硬件结构
这也从侧面应证了,冯诺依曼体系结构之所以会成为现代计算机的主流硬件结构就是因为成本低,东西好。
冯诺依曼结构总结
在学习了上述内容后,我们也可以仔细想想
我们在学习编程语言的时候,时常听到的一句话是:程序要运行,必须先加载到内存!
我们可能学的时候是会很想当然的!我们也不考虑!但我现在就可以告诉你为什么了
因为是冯诺依曼体系结构的特点决定的,因为体系结构不让CPU与外设直接交互!
这篇文章就到这啦~我们下期再见!
相关文章:

【Linux系统编程】冯诺依曼体系结构
目录 前言 什么是冯诺依曼体系结构? 冯诺依曼体系结构如何进行数据处理的? 存储器在冯诺依曼体系中有什么作用? 冯诺依曼体系结构为什么要这样设计? 冯诺依曼结构总结 前言 相信对于冯诺依曼这个人的名字大家一定不会感到陌…...

数据结构--动态顺序表
文章目录 线性表动态顺序表数组与顺序表 接口实现初始化:尾插:尾删头插头删指定位置插入指定位置删除查找摧毁 完整代码 线性表 线性表是数据结构中最基本、最简单也是最常用的一种数据结构。线性表是指由n个具有相同数据类型的元素组成的有限序列。 线…...

笔试数据结构选填题
目录 卡特兰数Catalan:出栈序列/二叉树数 树 二叉树 N01N2 哈夫曼树(最优二叉树)Huffman 度m的哈夫曼树只有度为0和m的结点:Nm(n-1)/(m-1) 平衡二叉树AVL Nh表示深度为h最少结点数,则N00,N11&#…...
# 鸢尾花的案例学习
# 鸢尾花的案例学习 # 1. 导入小型的数据 from sklearn.datasets import load_iris import numpy as np import pandas as pd import seaborn as sbn import matplotlib.pyplot as plt # 2. 获取数据 irisload_iris() # 3.查看数据print("数据集\n ",len(iris.d…...
线程、进程的区别
线程、进程的区别 在开发中,我们经常听到线程和进程两个概念,它们都是操作系统的基本概念,操作系统以进程为基本单位分配存储器,以线程为基本单位分配CPU。虽然它们有很多相似之处,但是它们也有很大的区别。本文将详细…...

在 Ubuntu 上安装 Docker 桌面
Ubuntu 22.04 (LTS) 安装 Docker 桌面 要成功安装 Docker Desktop,您必须: 满足系统要求拥有 64 位版本的 Ubuntu Jammy Jellyfish 22.04 (LTS) 或 Ubuntu Impish Indri 21.10。对于非 Gnome 桌面环境,必须安装 gnome-terminal:…...

【WebRTC---序篇】(七)RTC多人连麦方案
服务端可以选择mediasoup,作为SFU服务器,只负责转发数据 下图举例三个Client (browser或者客户端)同时加入一个房间,每个app同时发布一路视频和一路音频,并且接受来自其他app的音视频流,mediasoup内部的结构如下&…...

【Java可执行命令】(十六)诊断命令请求发送工具 jcmd:提供一种简单而强大的方式来管理和监控 Java 进程 ~
Java可执行命令之jcmd 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 jcmd -l:列出正在运行的 Java 进程3.3 jcmd < pid> help:列出特定进程的诊断命令列表3.4 jcmd < pid> < command>:执行诊断命令 4️⃣ 应用场景…...
如何创建无序列表和有序列表?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 无序列表⭐ 无序列表⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴…...

【MongoDB】初识、安装MongoDB
目录 一、MongoDB主要应用场景 二、MongoDB简介 三、MongoDB相关特点 四、MongoDB的安装 一、MongoDB主要应用场景 传统的数据库如MySQL在应对三高场景时显得力不从心 三高: High performance 对数据库高并发读写的需求 High Storage 对海量数据的高效率存储和 …...

方法区内存溢出及常量池
22 方法区-定义 是所有线程共享的一块区域。 存储了和类结构相关信息。运行时常量池, 方法区在虚拟机启动时被创建,逻辑上是堆的组成部分。方法区内存不足,也会导致oom异常。 是一个概念上的东西, 1.6使用永久代作为方法区&#…...
【MTK平台】【wpa_supplicant】关于wpa_supplicant_8/src/p2p/p2p_invitation.c文件的介绍
本文主要介绍external/wpa_supplicant_8/src/p2p/p2p_invitation.c文件 这里主要介绍6个方法 1.p2p_invite //p2p邀请调用此方法 2.p2p_invite_send //对p2p_invite方法进行补充 3. p2p_process_invitation_resp 4.p2p_process_invitation_req 5.p2p_build_invitation_re…...

智能仪表板DevExpress Dashboard v23.1亮点 - 增强对自定义导出的支持
DevExpress Dashboard v23.1版本增强了自定义导出到Excel的功能等,欢迎下载最新版本体验! DevExpress Dashboard v23.1正式版下载(Q技术交流:523159565) 所有平台 导出自定义仪表板项目到Excel 用户现在可以在WinForms和Web应…...

分布式应用:ELK企业级日志分析系统
目录 一、理论 1.ELK 2.ELK场景 3.完整日志系统基本特征 4.ELK 的工作原理 5.ELK集群准备 6.Elasticsearch部署(在Node1、Node2节点上操作) 7.Logstash 部署(在 Apache 节点上操作) 8.Kiabana 部署(在 Node1 节点…...

Mac与windows传文件(超过4G且速度超快,非共享)
MAC与Windows文件互传 背景 尝试了网上的一些方法,诸如设置共享文件夹方法等,但是实际使用中感觉效果一般,对于一些小的文件共同编辑速度还可以。但是在备份或者传递一些较大文件或者很多细小文件的时候就有点捉襟见肘了。制作了一个MAC可读…...

2023年第四届“华数杯”数学建模思路 - 案例:退火算法
## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上,退火(annealing)现象指物体逐渐降温的物理现象,温度愈低&#…...
STM32 UDS Bootloader开发-上位机篇-CANoe制作(3)
文章目录 前言刷写脚本34服务写入数据的实现定时函数writeBlockData函数Checksum总结前言 上一篇文章中介绍了CAPL刷写脚本的大部分内容,本文继续介绍34,36,37服务的实现,及checksum中遇到的坑 刷写脚本 34服务 void requestDownLoad(struct Block hexfile) {gTxBuffer[…...

GO语言的垃圾回收机制
内存垃圾的产生 程序在内存上被分为堆区、栈区、全局数据区、代码段、数据区五个部分。对于C等早期编程语言栈上的内存回由编译器负责管理回收,而堆上的内存空间需要编程人员负责申请和释放。在Go中栈上内存仍由编译器负责管理回收,而堆上的内存由编译器…...

vim粘贴内容格式混乱解决方法
问题 复制本地文件内容后,咱贴到vim文本内,格式错乱 解决方法 打开vim配置文件 最后面加入一行 vim /etc/vimrc set pastetoggle<F11> 开发vim文件,进入后先按F11进入交互模式 shift insert 再次粘贴 解决...

基于Orangepi 3 lts 的云台相机
利用orangepi 3 lts 和arduino nano 制作了一个云台相机,可用于室内监控。 硬件: orangepi 3 ,arduino nano ,usb相机,180度舵机两个 WeChat_20230806213004 软件: 整体采用mqtt进行消息的中转。 相机采用python 利用opencv…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...