Linux 进程概念 —— 冯 • 诺依曼体系结构

news2024/11/24 14:34:45

文章目录

  • 1. 冯诺依曼体系结构
    • 🍑 输入、输出设备
    • 🍑 中央处理器
    • 🍑 内存
    • 🍑 总线
    • 🍑 局部性原理
    • 🍑 总结
  • 2. 数据的流动过程


1. 冯诺依曼体系结构

在 1945 年冯诺依曼和其他计算机科学家们提出了计算机具体实现的报告,其遵循了图灵机的设计,而且还提出用电子元件构造计算机,并约定了用二进制进行计算和存储。

最重要的是定义计算机基本结构为 5 个部分,分别是运算器、控制器、存储器、输入设备、输出设备,这 5 个部分也被称为冯诺依曼模型。

下图为冯 • 诺依曼体系结构流程图:

在这里插入图片描述

运算器、控制器是在中央处理器里的,存储器就是我们常见的内存,输入输出设备则是计算机外接的设备,比如键盘就是输入设备,显示器就是输出设备。

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系,截至目前,我们所认识的计算机,都是有一个个的硬件组件组成。

存储单元和输入输出设备要与中央处理器打交道的话,离不开总线。所以,它们之间的关系如下图:

在这里插入图片描述

接下来,分别介绍内存、中央处理器、总线、输入输出设备。

🍑 输入、输出设备

输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。

常见的输入和输出设备有:

  • 输入设备:键盘,话筒,摄像头,磁盘,网卡等等…
  • 输出设备:显示器,音响,磁盘,网卡,显卡等等…

注意: 同种设备在不同场景下可能属于输入设备,也可能属于输入设备。

🍑 中央处理器

中央处理器也就是我们常说的 CPU,它是由运算器和控制器组成。

CPU 内部还有一些组件,常见的有 寄存器控制单元逻辑运算单元 等。其中,控制单元负责控制 CPU 工作,逻辑运算单元负责计算,而寄存器可以分为多种类,每种寄存器的功能又不尽相同。

CPU 中的寄存器主要作用是存储计算时的数据,你可能好奇为什么有了内存还需要寄存器?原因很简单,因为内存离 CPU 太远了,而寄存器就在 CPU 里,还紧挨着控制单元和逻辑运算单元,自然计算时速度会很快。

常见的寄存器种类:

  • 通用寄存器,用来存放需要进行运算的数据,比如需要进行加和运算的两个数据。
  • 程序计数器,用来存储 CPU 要执行下一条指令「所在的内存地址」,注意不是存储了下一条要执行的指令,此时指令还在内存中,程序计数器只是存储了下一条指令「的地址」。
  • 指令寄存器,用来存放当前正在执行的指令,也就是指令本身,指令被执行完成之前,指令都存储在这里。

🍑 内存

内存,也就是所谓的存储器。

我们的程序和数据都是存储在内存,存储的区域是线性的。

在计算机数据存储中,存储数据的基本单位是字节(byte),1 字节等于 8 位(8 bit)。每一个字节都对应一个内存地址。

内存的地址是从 0 开始编号的,然后自增排列,最后一个地址为内存总字节数 - 1,这种结构好似我们程序里的数组,所以内存的读写任何一个数据的速度都是一样的。

思考一个问题: 当我们的体系结构中,有了输入、输出设备和 CPU 以后,就能正常工作了,那么为什么还需要内存呢?

在这里插入图片描述

(1)从技术角度来说

CPU 的运算速度 > > > 寄存器的速度 > > > L1~L3Cache > > > 内存 > > > 外设(磁盘) > > > 光盘磁带

也就是说,输入设备和输出设备相对于 CPU 来说是非常慢的。

如果没有内存的话,那么当前这个体系整体呈现出来的就是:输入设备和输出设备很慢,而 CPU 很快。

相信大家知道 木桶原理 吧,那么最终整个体系结构所呈现出来的速度将会是很慢的。

在这里插入图片描述

所以,从数据角度出发,外设几乎不和 CPU 打交道,它是直接和内存打交道,CPU 也同样如此。

进言之,内存在我们看来,就是体系结构的一个大的缓存,用来适配外设和 CPU 速度不均的问题!

(2)从成本角度来说

既然上面说了内存是用来适配外设和 CPU 速度不均的问题,那么为什么不直接在 CPU 里面开发一个类似于内存的东西呢?

这个想法可以,但是如果真要去实现的话,那么一台计算机的成本起码得 10W+,而计算机它是蔓延全世界的,也就是说人人都能用得起的!

寄存器的价格 > > > 内存 > > > 外设(磁盘)

所以内存就是方便我们使用较低的成本,获得较高的性能。

🍑 总线

总线是用于 CPU 和内存以及其他设备之间的通信,总线可分为 3 种:

  • 地址总线,用于指定 CPU 将要操作的内存地址;
  • 数据总线,用于读写内存的数据;
  • 控制总线,用于发送和接收信号,比如中断、设备复位等信号,CPU 收到信号后自然进行响应,这时也需要控制总线;

当 CPU 要读写内存数据的时候,一般需要通过下面这三个总线:

  • 首先要通过「地址总线」来指定内存的地址;
  • 然后通过「控制总线」控制是读或写命令;
  • 最后通过「数据总线」来传输数据;

🍑 局部性原理

我相信大家应该还有个疑惑:就是,先将输入设备的数据交给内存,再由内存将数据交给 CPU,这个过程真的比 CPU 直接从输入设备获取数据更快吗?

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

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

输出数据的时候也一样,CPU 处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。

例如,缓冲区满了才将数据打印到屏幕上,使用 fflush 函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。

🍑 总结

冯 • 诺依曼体系结构核心原理为:用户输入的数据先放到内存当中,CPU 读取数据的时候就直接从内存当中读取,CPU 处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。

我们可以知道,站在硬件角度或是数据层面上,CPU 和外设不能直接交互,而是通过内存,也就是说,所有设备都只能和内存打交道。

由此可以说明一个问题:为什么程序运行之前必须先加载到内存?

因为可执行程序(文件)是在硬盘(外设)上的,而 CPU 只能从内存当中获取数据,所以必须先将硬盘上的数据加载到内存,也就是必须先将程序加载到内存。

2. 数据的流动过程

对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。

从你登录上 QQ 和某位朋友聊天开始,数据的流动过程是怎样的呢?从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。

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

在这里插入图片描述

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

在键盘将消息加载到内存后,CPU 从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节)。

之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的 CPU 再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。

在这里插入图片描述

那么如果是在 QQ 上发送文件呢?

首先你的文件最开始是在你本地的磁盘上的,先从磁盘上把文件读到内存中,文件里面的东西其实还是数据,把数据再经过 CPU 封装成报文,然后刷新到我们的内存中,定期再经过网卡,把数据刷新到网卡上,然后再发出去。

传文件的本质就是:两端的磁盘进行通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/20709.html

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

相关文章

URL和URI的区别

文章目录URLSchemeAuthorityPath to resourceParametersAnchorURL和URI参考URL 以下是 URL 的一些示例: https://developer.mozilla.org https://developer.mozilla.org/en-US/docs/Learn/ https://developer.mozilla.org/en-US/search?qURL这些 URL 中的任何一个…

[附源码]java毕业设计水库水面漂浮物WEB系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

攻防世界Check

Check 题目描述:套娃? 题目环境:https://download.csdn.net/download/m0_59188912/87097474 将图片放入winhex中打开,文件头与文件尾均正常,文件大小也正常。 判断为lsb隐写,查看三个颜色的plane 0通道&…

mysql复习【面试】

mysql复习【面试】前言mysql复习第08章 索引的创建与设计原则3.索引设计原则3.2哪些情况下适合创建索引3.4 哪些情况不适合创建索引第10章 索引优化与查询优化2.索引失效案例8.覆盖索引9. 如何给字符串添加索引10. 索引下推11. 普通索引 vs 唯一索引12.其他的优化策略13. 淘宝数…

深入浅出学习透析Nginx服务器的基本原理和配置指南「负载均衡篇」

负载均衡 之前的章节内容中【深入浅出学习透析Nginx服务器的基本原理和配置指南「初级实践篇 」】和 【深入浅出学习透析Nginx服务器的基本原理和配置指南「进阶实践篇」】,我们采用的代理仅仅指向一个服务器。但是网站在实际运营过程中,大部分都是以集群…

【万兴PDF专家】OCR引擎的离线安装方法,让你不受网速的折磨,PDF给OCR成可搜索的高级PDF,牛逼了我的万兴

一、问题背景 万兴PDF是一个很好用的PDF工具,它不仅可以实现PDF的浏览和批注常见功能,还具有OCR、压缩PDF,乃至批量化的功能。 因此,实在是一个非常值得花钱去买的PDF工具包!! 但是,软件里的O…

Prometheus与Grafana监控SpringBoot应用

Prometheus与Grafana监控SpringBoot应用 1.SpringBoot应用暴露端点 2.转换成Prometheus能解析得数据 3.向Prometheus注册时赋予项目名 docker部署 4701模板

七.STM32F030C8T6 MCU开发之TIMER模块级联组成32BIT计时器案例

七.STM32F030C8T6 MCU开发之TIMER模块级联组成32BIT计时器案例 文章目录七.STM32F030C8T6 MCU开发之TIMER模块级联组成32BIT计时器案例0.总体功能概述1.TIM硬件介绍1.1 TIM1/3级联硬件介绍1.1.1 主从模式介绍1.1.2 TIM1为主,TIM3为从,TIM3 的输入触发源选…

【计算机网络】习题(三)—— 数据链路层

【计算机网络】习题(三)—— 数据链路层2.数据链路层协议的功能不包括(). A.定义数据格式 B。提供结点之间的可靠传输 C.控制对物理传输介质的访问 D.为终端结点隐蔽物理传输的细节 2.D 主是是数据链路层的主要功能包…

SECCON CTF 2022 web复现

skipinx 知识点:qs 参数解析错误qs简介 一句话介绍就是:qs是负责url参数转化的js库,当然也可以说是查询字符串解析和字符串化库。 详细了解移步:https://www.npmjs.com/package/qs qs简单用法 例如:我们 url 参数…

NTPv4协议解析

前言 本文的撰写基于RFC5905.NTP 是时间网络控制协议,V4版本相交V3版本,修复了V3存在的一些问题。尤其是NTPV4的拓展时间戳鼓励使用浮动双数据类型,这样使得NTP能够更好的支持1ns的场景,轮询间隔也从上一代的最多1024s拓展到了36…

上位机通信标准-OPC

OPC通信,基于OPC的通信是一种通信整合方案,通过OPC标准,整合各类协议并统一化接口。 1、上位机通信环境 - 品牌、各类繁多 - 通信环境的统一:OPC 2、OPC - 什么是OPC:OLE for Process Control Windows插件&#x…

数字集成电路设计(五、仿真验证与 Testbench 编写)(一)

文章目录引言1. Verilog HDL 电路仿真和验证概述2. Verilog HDL测试程序设计基础2.1 Testbench及其结构2.2 测试平台举例2.2.1 组合电路仿真环境搭建2.2.2 时序电路仿真环境搭建2.3 Verilog HDL仿真结果确认2.4 Verilog HDL仿真效率3. 与仿真相关的系统任务3.1 $display和\$wri…

Mybatis的二级缓存 (默认方式)

目录前置生效场景一场景二失效场景一场景二场景三场景四脏数据场景前置 什么是二级缓存: 一级缓存是基于sqlsession级别, 当一个sqlsession会话结束, 一级缓存也就结束了. 定义一级缓存为局部缓存, 那么二级缓存就是全局全局缓存 二级缓存是基于mapper文件的namespace级别&…

进程和线程的区别

进程和线程的区别 文章目录进程和线程的区别进程和线程的概念一、从属关系不同二、所属基本单位不同三、资源消耗不同四、是否同步和互斥额外补充问题:一个进程是不是可以创建无限数量的线程?参考链接进程和线程的概念 在了解区别之前,我们先…

【Java】IO流 - 字节流

文章目录FileInputStream 介绍FileOutputStream介绍文件输入输出综合使用【拷贝】FileInputStream 介绍 创建一个txt文件,写入 HelloWorld 并用Java读取: Test public void readFile01(){//提前创建一个文件hello.txt并编辑一个HelloWorldString filePa…

Nacos 注册中心的常用配置

1.服务端地址 spring.cloud.nacos.discovery.server-addr 无 Nacos Server 启动监听的 ip 地址和端口2.服务名 spring.cloud.nacos.discovery.s ervice ${spring.application.name} 给当前的服务命名3.服务分组spring.cloud.nacos.discovery.groupDEFAULT_GROUP 设置服务所处的…

机器视觉之ros人脸识别

系列文章目录 机器视觉之ros人脸识别 ros人脸识别系列文章目录一、WIN下的环境设置二、连接摄像头设备到虚拟机三、安装摄像头驱动设备3.1判断安装usb还是uvc驱动包3.2查看摄像头设备3.3测试网络摄像头3.4安装摄像头驱动包四、调用视觉功能包五、人脸识别的调用一、WIN下的环境…

封装系统之新手操作版

一、需要软件:Vmware16,win10正版系统,EasySysprep5,EasyU_v3.6.iso 下载地址:EasySysprep5:https://www.itsk.com/thread-425990-1-1.html EasyU_v3.6:https://www.itsk.com/thread-426856-1-1…

【计算机视觉】不来试试图片轮廓提取?

文章目录🚩 前言🍈 边缘提取原理卷积用特殊的卷积核进行轮廓提取🍏 开始轮廓提取代码🚩 前言 最近学到了深度学习的卷积操作,在卷积神经网络出现之前,就已经有使用卷积核 (也叫滤波器&#xff…