Linux冯诺依曼体系结构

Posted 榶曲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux冯诺依曼体系结构相关的知识,希望对你有一定的参考价值。

目录

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

它是由如下及部分构成:

  • 这里的体系结构我们不考虑软件,只研究硬件

其中:

输入设备:键盘、话筒、摄像头、网卡、磁盘等

  • 计算机的本质是计算数据,要计算数据第一步是想办法把数据交给计算机,需要有对应的设备来采集相应的数据,这就需要使用输入设备

输出设备:显示器、磁盘、网卡、声卡、音箱等

  • 计算机的作用是服务用户,计算完数据后需要将数据输出给用户,这就需要输出设备

存储器:内存

CPU;运算器、控制器

  • 计算机的本质工作是计算,CPU就是用来计算的,这是必不可少的。

    比如我们今天买了一部手机,这个手机没有芯片,那也只能当作移到硬盘来用。

  • 注意:同种设备可能即使输入设备,也是输出设备

    如磁盘、网卡等,

    1. 内存需要从磁盘中读取数据(为什么不是CPU读取下面会讲),这时它是输入设备,CPU处理好的数据需要经由内存放入磁盘,这里它就是输出设备。
    2. 我们在聊天软件如微信、QQ聊天时,别人将信息通过网卡传给我们,这时本地的网卡对于我们就是输入设备,我们将信息通过本地的网卡传给别人,此时本地的网卡就是输出设备。
  • 存储器不是磁盘,是内存,之后会反复用到内存

1.内存和外设的速度

上面讲了冯诺依曼体系中输入设备、输出设备、CPU为什么存在,那为什么要有**存储器(内存)**呢?这是本文的一个重点。我们需要一一讲解。

我们必须先来简绍一个常识

  • 输入设备、输出设备我们通常称之为外围设备,简称:外设(这个说法很多,我们这里称之为外设)

外设和内存特点:

外设的速度非常的慢

内存的速度比外设快的多

举例:

以磁盘为例(磁盘我们经常会接触到),我们在网上分别去买磁盘和存储器,磁盘我们可以买到七八百G的磁盘,而要是去买存储器(内存),只能买到4G或8G的内存条。

我们知道,内存和磁盘都可以保存数据,磁盘这样的设备我们将数据存入后,就不会丢失,而内存却是”掉电易失“存储介质,当我们的电脑突然关机将电源切断(对内存不在供电),内存中的数据也就没了。但内存的价格却是要比磁盘贵的。

内存凭什么贵呢?就凭它”掉电易失“吗?

当然不是这样,原因如下

  1. 内存的优势就是存储数据快
  2. 它本身制造成本高

谁都知道计算机越快越好,那为什么不把磁盘换成内存,提高存储速度,就是因为它的成本高。

如果将磁盘换为大小相同的内存,一台电脑的售价就会暴涨,这不是一般人能够消费的,不利于电脑的销售(不利于资本家挣钱),所以现在的电脑其实是一个性价比产品。

磁盘还是在我们自己电脑上,速度就慢于内存,而其它的外设,如网卡,需要借助网路,数据的传输更是在千里之外,速度就更慢了,所以我们必须明确一点,外设的速度相比于其它设备非常的慢。

2.内存的意义

上面讲了内存的速度要比外设的速度快,很多人会有疑问,计算机中快当然好,我们可以快速的存储数据,但是内存是”掉电易失“的,而且价格高,意味着我们最后存储数据的位置依然是磁盘,是不是可以去掉存储器,将CPU和输入设备输出设备直接连接呢?如下面的简易模型

首先,这么做一定是可以的,也能创造出一个计算机来,但是,这么做是要付出代价的。

这里在简绍一个概念:

  • 在整个计算机中,内存还不是最快的,CPU以及CPU中的寄存器存储计算数据才是最快的。

    **注意:**寄存器最快,也最贵,存储数据最少,计算机中的数据很多,寄存器用来存储当前需要CPU运算的数据,不能被替代。

我们可以这样看代码计算机中各设备的速度:CPU的工作速度是纳秒级,内存的速度是微妙级,外设是毫秒级

1秒 (s) =1000 毫秒 (ms) = 1,000,000 微秒 (μs) = 1,000,000,000 纳秒 (ns)

这时我们已经知道,外设的速度是很慢的,而CPU的速度是非常快的,这要的计算机我们就能参考木桶原理

一个木桶中可以存放多少水,不是由最长的那片木头决定的,而是由最短的那片木头决定的。

再来看一下计算机,CPU的速度非常的快,而外设的速度非常慢,那该计算机整体的速率就以外设为主。

有了这些知识,下面我们看一下本文的重点,分别来看一下计算机在有无内存的情况下的速率。

2.1无内存

CPU每次处理数据的大小是有限的,在没有内存的情况下,输入设备向CPU直接传入数据,CPU计算后再向输出设备传输数据,接着等待输入设备下一次的数据传入,计算机整体的速率就是外设的速率。

2.2有内存

铺垫: CPU每次处理数据的大小有限,内存具有存储数据的能力CPU的处理数据和内存加载数据可以同时进行

根据统计学原理,当一个数据被访问时,那么下一次有很大可能访问的就是周围的数据,所以当CPU需要处理一段数据时,内存会将该数据和周围的数据一同加载进来,在CPU处理数据的同时,内存仍在工作,那下次CPU就可以在内存中获取数据。

输出数据也是相同的,CPU处理完数据后将数据放入内存中,当输出数据需要时,在从内存中获取。

所以,此时计算机的速率就是内存的速率

相对于无内存的情况,有内存时的情况要快很多。这就是内存的意义。

3.冯诺依曼体系的理解

结合上面的知识,根据这种图我们可以知道:

站在硬件和数据层面上,CPU与存储器相互传输数据,同时控制外设和存储器,告知需要处理的数据,汇总到存储器,在由CPU处理,处理后,返回给存储器,最后控制存储器存入外设。

总结:

  1. 在数据层面上,CPU不和外设直接沟通,而是直接只和内存打交道
  2. 在数据层面上,外设之和内存打交道

这就是为什么,我们常听说,我们编写的C程序需要在运行先加载到内存。

因为CPU之和内存打交道,可执行程序就是一个文件,它放在磁盘中,需要先将其从外设中加载到内存,CPU才可以使其运行从而得到结果。在Windows中双击后即加载到内存,Linux中使用./后加载到内存。

这就是用硬件方案解释软件现象。

扩展:

  1. 我们经常说CPU当中有寄存器,实际上寄存器不仅在CPU中,在其它外设中也有寄存器。

    如:当我们敲击键盘时,键盘是先将获取到的内容存储在寄存器当中,然后通过寄存器将数据写入内存中。

  2. 在物理层面,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线。

  3. 在早些年的计算机中,因为芯片能力不强,有时是之间将外设中的数据传输给CPU,CPU计算完后在交给内存,在合适的时候由内存拿出数据。现在不在使用这个技术,而是在外设中使用DMA芯片,将外设的数据存入内存,不在利用CPU。

  4. 在数据层面上,CPU不和外设交互,但有时候,有些控制信号需要二者交互。

    如:一些外设给CPU发送控制信号,请求帮助处理一些数据。

4.数据流的流向

我们以及有了对冯诺依曼体系的理解,接下来我们就可以看一下,在硬件层面,单机和跨主机之间,数据流是如何流向的!

也就是研究,我们使用./将我们的程序加载到内存,然后执行我们的代码,最后输出在外设显示器上打印,它的整个数据流在硬件上是如何走的。

该内容难度不高,作为理解软件的工具。

因为软件是无法脱离硬件的,当我们理解了硬件的数据流向,软件上的很多行为我们就可以尝试去理解它了。

4.1单机

以在音乐播放器(网易云音乐)播放音乐为例:

首先,我们的客户端软件,先加载到内存,然后由CPU执行,接着我们就看到了网易云的界面,

其次,我们点击播放音乐,通过外设的网卡,拿到数据,再将数据传输到内存,经CPU计算(此时的计算可以看作解析),计算后将计算结果返回到内存,由内存传到外设,传到计算机的音箱中播放出来。

4.2 跨主机

以两个人(A和B)在QQ中聊天为例:

当A给B发送”在吗?“,数据是怎样流的的?(不考虑网络)

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

A在键盘上输入数据,在硬件上讲,将数据输入到内存,在软件上讲,将数据输入到QQ中。然后数据要经过计算和加密,经由CPU计算,将计算结果传回内存,由内存传到外设,这里是传到了两个地方,一个是A自己的显示器,因为他输入的消息,他自己也要看到,另一个传到了网卡,经由网卡传给B。

B的计算机通过网卡拿到数据,将数据传给内存,经过CPU进行解密操作,在传回内存,由内存传到外设中的显示器,使B看到该消息。

其中,将外设中的数据读入内存,将数据显示在显示器上和发送到网卡,都是由软件(QQ)内部自己来完成。

从外设获得数据这样的操作,我们并不少见,比如C语言中的scanfprintf,都是从外设获得数据。

总结: 数据的流动必须遵守冯诺依曼的结构。

以上是关于Linux冯诺依曼体系结构的主要内容,如果未能解决你的问题,请参考以下文章

Linux冯诺依曼体系结构

Linux冯诺依曼体系结构

Linux冯诺依曼体系结构

Linux冯诺依曼体系结构

Linux冯诺依曼体系结构

[linux] 冯诺依曼体系及操作系统的概念