系列文章:《Linux入门》
目录
冯诺依曼体系结构
1)硬件上
🌷1.什么是冯诺依曼体系结构?
冯 • 诺伊曼结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。
而冯·诺依曼架构则确立了我们今天使用的计算机硬件基础架构,可谓是现代计算机的鼻祖
本结构隐约指导了将存储设备与中央处理器分开的概念,因此依本结构设计出的计算机又称存储程序计算机。
我们常见的计算机,如笔记本;我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
冯.诺依曼结构的核心设计思想
核心设计思想主要体现在如下三个方面:
- 程序、数据的最终形态都是二进制编码,程序和数据都是以二进制方式存储在存储器中的,二进制编码也是计算机能够所识别和执行的编码。(可执行二进制文件:.bin文件)
- 程序、数据和指令序列,都是事先存在主存储器(也就是大家俗知的“内存”)中,以便于计算机在工作时能够高速地从存储器中提取指令并加以分析和执行。
- 确定了计算机的五个基本组成部分:运算器、控制器、存储器、输入设备、输出设备
🌷2.冯诺依曼结构的五个主要组成部分
冯.诺依曼确定了”计算机结构“中的5大部件:
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
cpu构成:运算器和控制器
现在看来,运算器和控制器单元集成在CPU中实现,存储器的容量不断扩大、输入输出设备不断更新,这些部件构成了当代计算机硬件系统的基本组成。
1.运算器
首先计算机要有运算处理数据的能力,所以需要一个处理单元来完成各种算数运算和逻辑运算,这就是算术逻辑单元(Arithmetic Logic Unit,ALU)。
ALU的主要功能就是在控制器的控制下,完成加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算以及移位、补位等运算。
运算器与其他部分的关系:
计算机运算时,运算器的操作对象和操作种类由控制器决定。
运算器操作的数据从内存中读取,处理的结果再写入内存(或者暂时存放在内部寄存器中),而且运算器对内存数据的读写是由控制器来进行的。
2.控制器
控制器又称为控制单元(Control Unit),是计算机的神经中枢和指挥中心,只有在控制器的控制下,整个计算机才能够有条不紊地工作、自动执行程序。
控制器的工作流程为:从内存中取指令、翻译指令、分析指令,然后根据指令的内存向有关部件发送控制命令,控制相关部件执行指令所包含的操作。
控制器和运算器共同组成中央处理器(Central Processing Unit),CPU是一块超大规模集成电路,是计算机运算核心和控制核心,CPU的主要功能是解释计算机指令以及处理数据。
3.存储器
存储器的主要功能是存储程序和各种数据。存储器是有记忆的设备,而且采用俩种稳定状态的物理器件来记录存储信息,所以计算机中的程序和数据都要转换为二进制代码才可以存储和操作。
存储器可以分为内部存储器(内存)和外部存储器,俩者在计算机系统中各有用处。
以购买手机为例,我们需要考虑的重要参数分别有处理器型号、运行内存、和存储空间。
选择内存的时候我们都偏向于选择比较大的,例如6G,8G。而存储空间也有128G与256G,甚至512G各种选择。这里的内存就是指内部存储器,它的大小决定了我们手机在运行多个软件的时候能否做到流畅不卡顿。
而存储空间指的是外部存储器,决定了我们的手机能存多少音频视频数据。
4.输入输出 设备
输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。
输入设备(单元):包括键盘, 鼠标,扫描仪, 写板,网卡,摄像头等
输出设备(单元):显示器,打印机,磁盘,声卡,显卡等
有些设备既做输入也做输出的。
设备之间是独立的,并且是通过总线连接的。
这样数据才能在这些设备之间流动(传输)。本质就是设备之间进行数据的来回拷贝。
⁉️3.为什么还需要内存呢?
思考一个问题: 当我们的体系结构中,有了输入、输出设备和 CPU 以后,就能正常工作了,那么为什么还需要内存呢?
(1)从技术来说
CPU的运算速度 > 寄存器的速度 > L1~L3Cache > 内存 > 外设(磁盘)> 光盘磁带
也就是说,输入设备和输出设备相对于 CPU 来说是非常慢的。
如果没有内存的话,那么当前这个体系整体呈现出来的就是:输入设备和输出设备很慢,而 CPU 很快。CPU一直处于等待状态。
相信大家知道 木桶原理(整体装水的体积取决于最短的木板) 吧,那么最终整个体系结构所呈现出来的速度将会是很慢的。
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
(2)从成本来说
既然上面说了内存是用来适配外设和 CPU 速度不均的问题,那么为什么不直接在 CPU 里面开发一个类似于内存的东西呢?
这个想法可以,但是如果真要去实现的话,那么一台计算机的成本起码得 10W+,而计算机它是蔓延全世界的,也就是说人人都能用得起的!
寄存器的价格 > 内存 > 外设(磁盘)
所以内存就是方便我们使用较低的成本,获得较高的性能。
⁉️4.使用内存真的有提高速度嘛?
局部性原理
我相信大家应该还有个疑惑:就是,先将输入设备的数据交给内存,再由内存将数据交给 CPU,这个过程真的比 CPU 直接从输入设备获取数据更快吗?数据需要流动的地方变多了,速度有提升嘛?
说明这个问题之前,我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有 4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。
这里不得不说到的就是 局部性原理:
根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当 CPU 需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而 CPU 处理数据和内存加载数据是可以同时进行的,这样下次 CPU 就可以直接从内存当中获取数据。
输出数据的时候也一样,CPU 处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。
例如,缓冲区满了才将数据打印到屏幕上,使用 fflush 函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。
⁉️5.为什么程序运行之前必须先加载到内存?
冯 • 诺依曼体系结构核心原理为:用户输入的数据先放到内存当中,CPU 读取数据的时候就直接从内存当中读取,CPU 处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
我们可以知道,站在硬件角度或是数据层面上,CPU 和外设不能直接交互,而是通过内存,也就是说,所有设备都只能和内存打交道。
由此可以说明一个问题:为什么程序运行之前必须先加载到内存?
因为可执行程序(文件)是在硬盘(外设)上的,而 CPU 只能从内存当中获取数据,所以必须先将硬盘上的数据加载到内存,也就是必须先将程序加载到内存。
🌷6. 数据流动的过程
仅考虑数据信号。
1. 程序不使用的情况下,一般存储在外存中。程序在被调用,运行的时候,必须先把程序加载到内存中,CPU执行。(CPU只会在内存中去读取)
2.利用网络进行聊天,a 给 b互发消息的过程?
其中网卡是实现通信。
数据流动过程:消息–>键盘–>内存—>CPU---->a网卡----> b 设备的网卡---->内存—>CPU—>显示器。
3.如果是在qq上发送文件呢?
数据流动过程:磁盘(文件)---->内存---->CPU---->网卡---->朋友的网卡—>内存---->CPU---->磁盘(下载文件后存储在磁盘)