文章摘要
GPT 4
此内容根据文章生成,仅用于文章内容的解释与总结
投诉

一、CPU

1、冯诺依曼模型

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

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

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

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


1.1 内存

1.什么是内存?

内存是硬件,是用于存放数据的硬件。

程序执行前需要先放到内存中才能被CPU处理。

内存是与CPU沟通的桥梁,计算机中所有程序的运行都要依靠内存,内存对计算机的影响非常大。

主存储器,内存,内存条,内部存储器是一个东西。这很重要,不然看到后面概念都混淆。

2.内存的作用

内存,用于存放CPU中的运算数据以及硬盘等外部存储设备交换的数据。

CPU一般会把需要运算的数据调到主存中进行运算,运算完后CPU将结果再传出来。

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

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

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


1.2 中央处理器(CPU)

中央处理器也就是我们常说的 CPU,32 位和 64 位 CPU 最主要区别在于一次能计算多少字节数据:

  • 32 位 CPU 一次可以计算 4 个字节;
  • 64 位 CPU 一次可以计算 8 个字节;

这里的 32 位和 64 位,通常称为 CPU 的位宽,代表的是 CPU 一次可以计算(运算)的数据量。

之所以 CPU 要这样设计,是为了能计算更大的数值,如果是 8 位的 CPU,那么一次只能计算 1 个字节 0~255 范围内的数值,这样就无法一次完成计算 10000 * 500 ,于是为了能一次计算大数的运算,CPU 需要支持多个 byte 一起计算,所以 CPU 位宽越大,可以计算的数值就越大,比如说 32 位 CPU 能计算的最大整数是 4294967295

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

寄存器是计算机中央处理器(CPU)内部的一种高速存储单元,用于临时存储数据和指令。

为什么有了内存还需要寄存器?

因为内存离 CPU 太远了,而寄存器就在 CPU 里,还紧挨着控制单元和逻辑运算单元,自然计算时速度会很快。


1.3 输入、输出设备

输入设备向计算机输入数据,计算机经过计算后,把数据输出给输出设备。期间,如果输入设备是键盘,按下按键时是需要和 CPU 进行交互的,这时就需要用到控制总线了。


2、线路位宽与 CPU 位宽(操作系统32位和64位)

数据是如何通过线路传输的呢?其实是通过操作电压,低电压表示 0,高压电压则表示 1。

如果构造了高低高这样的信号,其实就是 101 二进制数据,十进制则表示 5,如果只有一条线路,就意味着每次只能传递 1 bit 的数据,即 0 或 1,那么传输 101 这个数据,就需要 3 次才能传输完成,这样的效率非常低。

这样一位一位传输的方式,称为串行,下一个 bit 必须等待上一个 bit 传输完成才能进行传输。当然,想一次多传一些数据,增加线路即可,这时数据就可以并行传输。

为了避免低效率的串行传输的方式,线路的位宽最好一次就能访问到所有的内存地址。

CPU 想要操作「内存地址」就需要「地址总线」:

  • 如果地址总线只有 1 条,那每次只能表示 「0 或 1」这两种地址,所以 CPU 能操作的内存地址最大数量为 2(2^1)个(注意,不要理解成同时能操作 2 个内存地址);
  • 如果地址总线有 2 条,那么能表示 00、01、10、11 这四种地址,所以 CPU 能操作的内存地址最大数量为 4(2^2)个。

那么,想要 CPU 操作 4G 大的内存,那么就需要 32 条地址总线,因为 2 ^ 32 = 4G

知道了线路位宽的意义后,我们再来看看 CPU 位宽。

CPU 的位宽最好不要小于线路位宽,比如 32 位 CPU 控制 40 位宽的地址总线和数据总线的话,工作起来就会非常复杂且麻烦,所以 32 位的 CPU 最好和 32 位宽的线路搭配,因为 32 位 CPU 一次最多只能操作 32 位宽的地址总线和数据总线。

如果用 32 位 CPU 去加和两个 64 位大小的数字,就需要把这 2 个 64 位的数字分成 2 个低位 32 位数字和 2 个高位 32 位数字来计算,先加个两个低位的 32 位数字,算出进位,然后加和两个高位的 32 位数字,最后再加上进位,就能算出结果了,可以发现 32 位 CPU 并不能一次性计算出加和两个 64 位数字的结果。

对于 64 位 CPU 就可以一次性算出加和两个 64 位数字的结果,因为 64 位 CPU 可以一次读入 64 位的数字,并且 64 位 CPU 内部的逻辑运算单元也支持 64 位数字的计算。

但是并不代表 64 位 CPU 性能比 32 位 CPU 高很多,很少应用需要算超过 32 位的数字,所以如果计算的数额不超过 32 位数字的情况下,32 位和 64 位 CPU 之间没什么区别的,只有当计算超过 32 位数字的情况下,64 位的优势才能体现出来

另外,32 位 CPU 最大只能操作 4GB 内存,就算装了 8 GB 内存条,也没用。而 64 位 CPU 寻址范围则很大,理论最大的寻址空间为 2^64(256T)

二、存储器的层次结构

层次结构介绍

计算机的两类存储器,一是外部存储器,二是内部存储器。常见的外部存储器主要是磁盘,磁盘又分为硬盘和软盘,而内部存储器就是常说的内存。

小林coding层次结构:

OS教材:

聚焦CPU内部:

我们想象中一个场景,大学期末准备考试了,你前去图书馆临时抱佛脚。那么,在看书的时候,我们的大脑会思考问题,也会记忆知识点,另外我们通常也会把常用的书放在自己的桌子上,当我们要找一本不常用的书,则会去图书馆的书架找。

我们可以把 CPU 比喻成我们的大脑,大脑正在思考的东西,就好比 CPU 中的寄存器,处理速度是最快的,但是能存储的数据也是最少的,毕竟我们也不能一下同时思考太多的事情,除非你练过。

我们大脑中的记忆,就好比 CPU Cache,中文称为 CPU 高速缓存,处理速度相比寄存器慢了一点,但是能存储的数据也稍微多了一些。

CPU Cache 通常会分为 L1、L2、L3 三层,其中 L1 Cache 通常分成「数据缓存」和「指令缓存」,L1 是距离 CPU 最近的,因此它比 L2、L3 的读写速度都快、存储空间都小。我们大脑中短期记忆,就好比 L1 Cache,而长期记忆就好比 L2/L3 Cache。

寄存器和 CPU Cache 都是在 CPU 内部,跟 CPU 挨着很近,因此它们的读写速度都相当的快,但是能存储的数据很少,毕竟 CPU 就这么丁点大。

聚焦CPU外部:

知道 CPU 内部的存储器的层次分布,我们放眼看看 CPU 外部的存储器。

当我们大脑记忆中没有资料的时候,可以从书桌或书架上拿书来阅读,那我们桌子上的书,就好比内存,我们虽然可以一伸手就可以拿到,但读写速度肯定远慢于寄存器,那图书馆书架上的书,就好比硬盘,能存储的数据非常大,但是读写速度相比内存差好几个数量级,更别说跟寄存器的差距了。

硬盘有如下的内容:

机械硬盘(HDD)
机械硬盘是计算机中的一种数据存储设备,它使用旋转的盘片和移动的磁头来读写数据。机械硬盘通常比固态硬盘容量更大,价格更便宜,但是速度相对较慢,且比较容易受到机械损伤的影响。机械硬盘通常用于存储大量数据和长期存储。

固态硬盘(SSD)
固态硬盘是一种新型的数据存储设备,它使用闪存芯片来读写数据。固态硬盘比机械硬盘速度更快,能够更快地启动计算机和打开文件,且比较抗震抗摔,寿命也更长。但是,固态硬盘价格相对较高,容量相对较小。

在第一节介绍内存的时候,曾说内存就是主存,但是严格的说,内存包括主存(内存条,基于DRAM)与高速缓存(Cache,基于SRAM)两部分。

总结:

1. CPU的寄存器

定义与功能

  1. 寄存器是CPU内部的高速存储单元,用于暂时存储CPU运算过程中的数据和指令。

  2. 它们具有极快的访问速度,能够减少CPU对内存的访问次数,提高程序执行效率。

2. 内存

定义与功能

  1. 内存(RAM,随机存取存储器)是计算机系统中用于存储数据和程序的临时存储器。

  2. 提供了较大的存储容量,但相对于CPU的访问速度较慢。

与CPU的关系

  1. CPU通过内存总线与内存进行通信,以读取和写入数据。

  2. 当CPU需要执行程序时,它会从内存中读取指令和数据到寄存器中进行处理。

3. 高速缓存(Cache)

定义与功能

  1. 高速缓存是位于CPU和内存之间的一种存储器层次结构,用于存储CPU频繁访问的数据和指令。

  2. 它通过减少CPU对内存的访问次数来提高计算机系统的性能。

多级缓存结构

  1. 通常包括L1、L2、L3等多级缓存,其中L1缓存距离CPU最近且速度最快,L2、L3缓存则更大但速度稍慢。

  2. 这种多级缓存结构旨在利用容量、速度和成本之间的平衡,以提供更好的性能。

4. 寄存器、内存与高速缓存之间的联系

数据传输

  1. 当CPU执行程序时,它会从内存中读取指令和数据到寄存器中进行处理。

  2. 如果这些指令和数据已经存储在高速缓存中,则CPU可以直接从缓存中读取,减少了对内存的访问次数。

性能提升

  1. 寄存器和高速缓存的存在大大提高了CPU的数据访问速度,从而提升了计算机系统的整体性能。

  2. 它们通过减少CPU对内存的依赖,降低了内存访问的延迟和能耗。

协同工作

  1. 寄存器、内存和高速缓存之间通过复杂的协同工作机制,共同支持CPU的高效运行。

  2. 寄存器提供快速的数据访问能力,高速缓存减少了对内存的访问次数,而内存则提供了较大的存储容量以支持复杂的程序和数据结构。