当前位置: 首页 > news >正文

【Linux】操作系统之冯诺依曼体系

图片名称
🎉博主首页: 有趣的中国人

🎉专栏首页: Linux

🎉其它专栏: C++初阶 | C++进阶 | 初阶数据结构

在这里插入图片描述

小伙伴们大家好,本片文章将会讲解 操作系统中 冯诺依曼体系 的相关内容。


如果看到最后您觉得这篇文章写得不错,有所收获,麻烦点赞👍、收藏🌟、留下评论📝。您的支持是我最大的动力,让我们一起努力,共同成长!

文章目录

  • `1. 冯诺依曼体系介绍`
    • ==<font color = blue><b>🎧1.1 冯诺依曼体系结构介绍🎧==
    • ==<font color = blue><b>🎧1.2 冯诺依曼体系结构示意图🎧==
  • `2. 为什么会出现冯诺依曼体系`
    • ==<font color = blue><b>🎧2.1 内存的特点🎧==
  • `3. 冯诺依曼体系的深度理解`



1. 冯诺依曼体系介绍


🎧1.1 冯诺依曼体系结构介绍🎧


冯·诺伊曼体系是 计算机体系结构的一种基本设计范式,以美国数学家兼计算机科学家约翰·冯·诺伊曼(John von Neumann)的名字命名。该体系结构是20世纪40年代末和50年代初期发展起来的,并且至今仍然是现代计算机设计的基础之一。

冯·诺伊曼体系主要包括以下几个重要组成部分:

  1. 存储器(Memory):计算机内部用于存储数据和指令的地方。在冯·诺伊曼体系中,数据和指令都以二进制形式存储在存储器中,并且可以通过地址访问。
  2. 中央处理器(Central Processing Unit,CPU):负责执行计算机程序中的指令,并处理数据的部件。CPU包括 算术逻辑单元(Arithmetic Logic Unit,ALU)负责执行算术和逻辑运算,以及 控制单元(Control Unit)负责控制指令的执行顺序。
  3. 输入输出设备(Input/Output Devices,I/O Devices):用于与计算机进行交互的外部设备,如键盘、鼠标、显示器、打印机等。输入输出设备通过输入输出接口(I/O Interface)与计算机连接。

🎧1.2 冯诺依曼体系结构示意图🎧


在这里插入图片描述

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

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

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

  1. 这里的存储器指的是内存;
  2. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备);
  3. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  4. 一句话,所有设备都只能直接和内存打交道。
  5. 这些条件都是为了保证计算机处理数据的效率。


2. 为什么会出现冯诺依曼体系


计算机就是为了解决问题而产生的,既然要解决问题,那么它就要接收相应数据,接收完数据,在计算机中进行一系列的算数与逻辑运算,然后再将数据通过输出设备进行输出,于是就有了以下的流程图:

在这里插入图片描述

但是相较于中央处理器(CPU)来说,外设(输入输出设备)的速度是非常慢的,于是,整个计算机的处理数据的速度就不是取决于CPU而是取决于外设了(根据木桶原理),下图是一个存储器层次结构全景图,表示了计算机中各种存储设备的处理数据的速度:

在这里插入图片描述


因此为了解决此问题,就不让外设直接和CPU进行交互,在中间加了内存:

在这里插入图片描述


🎧2.1 内存的特点🎧


内存处理数据的速度比外设要快上很多,但是比CPU又要慢,内存在外设和CPU中间起到了缓冲的作用。


现在这个体系的流程就是:

  1. 用户通过输入设备输入数据,数据会先存放到内存,
  2. CPU处理数据时就到内存中读取数据,处理完之后又放到内存中,
  3. 然后当输出设备需要时,再将内存中的数据输出到输出设备中。

那为什么加上内存计算机处理速度就会变快呢?

  1. 首先 内存是有容量大小的,所以他就有装在数据的能力
  2. CPU要访问数据时,内存会将CPU 要访问的数据以及它的周围的数据 从输入设备一同加载到内存中;
  3. 并且CPU 处理数据是可以和内存加载数据同时进行的,这样当下次CPU访问数据的时候就可以直接从内存中获取数据;
  4. 数据处理完成之后, CPU 将处理完的数据存储到内存中(一般存储在缓冲区中),当输出设备需要在内存中的数据时,就会冲刷缓冲区。
    • 这就是Linux中的fflush()函数强制冲刷缓冲区和缓冲区满了也要强制冲刷缓冲区的底层含义。


3. 冯诺依曼体系的深度理解


我们这里会举一个例子来理解冯诺依曼系统:

当用微信和朋友聊天时数据的流动过程:

我们这里只涉及两台电脑中的数据流动的过程,至于网络的相关内容先暂且不谈:

你自己的电脑:

  1. 首先你从键盘(输入设备)输入数据;
  2. 计算机将你输入的数据加载到内存中;
  3. CPU从内存中获取你输入的数据,然后进行相关的处理(加密类似的操作);
  4. CPU将处理完成的数据重新加载到内存中;
  5. 网卡这个输出设备需要从内存中获取CPU处理完的数据。

你朋友的电脑:

  1. 你朋友电脑上的网卡充当了输入设备,获取你发送的信息;
  2. 信息加载到内存中;
  3. CPU从内存中获取信息,进行处理(解密);
  4. CPU将处理完成的数据重新加载到内存中;
  5. 显示器充当了输出设备,从内存中获取CPU解密的相应信息,也就是你所发送的信息。

相关文章:

  • 用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯
  • html中 table的 colspan和rowspan
  • 使用Golang调用腾讯云邮件模版发送邮件
  • SpringCloud学习笔记(一)
  • 日有所思的梦想
  • 探索python数据可视化的奥秘:打造专业绘图环境
  • 【全开源】JAVA情侣扭蛋机情侣游戏系统源码支持微信小程序+微信公众号+H5
  • Oracle中rman的增量备份使用分享
  • vue3 前端实现导出下载pdf文件
  • AI实时免费在线图片工具3:人物换脸、图像编辑
  • Nginx企业级负载均衡:技术详解系列(15)—— 一篇文章教你如何自定义错误日志
  • 【C++】问题及补充(2)
  • LeetCode 每日一题 数学篇 2894.分类求和并作差
  • React 组件通信
  • 企业文件加密:保障知识产权与客户隐私
  • Angular数据绑定机制
  • Bootstrap JS插件Alert源码分析
  • go语言学习初探(一)
  • GraphQL学习过程应该是这样的
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Javascript基础之Array数组API
  • java中具有继承关系的类及其对象初始化顺序
  • js递归,无限分级树形折叠菜单
  • Netty源码解析1-Buffer
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SpingCloudBus整合RabbitMQ
  • 编写高质量JavaScript代码之并发
  • 初识 webpack
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端设计模式
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 正则与JS中的正则
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • puppet连载22:define用法
  • 从如何停掉 Promise 链说起
  • 说说我为什么看好Spring Cloud Alibaba
  • ​字​节​一​面​
  • # SpringBoot 如何让指定的Bean先加载
  • # 数论-逆元
  • #每日一题合集#牛客JZ23-JZ33
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (175)FPGA门控时钟技术
  • (23)mysql中mysqldump备份数据库
  • (二)WCF的Binding模型
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (力扣题库)跳跃游戏II(c++)
  • (五)关系数据库标准语言SQL
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)原始图像数据和PDF中的图像数据
  • .NET 4.0中使用内存映射文件实现进程通讯