内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,硬盘则不会,因为硬盘是持久化存储设备,同时也是一个I/O设备。
其实CPU内部也有存储数据的组件,比如寄存器、CPU L1/L2/L3 Cache也都属于存储设备,只不过能存储的数据非常小,但是它们因为靠近CPU核心,所以访问速度都非常快,快过硬盘好几个数量级别。
那么机械硬盘、固态硬盘、内存这三个存储器,到底和CPU L1 Cache相比速度差多少倍?
存储器的层次结构
大脑相当于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的寄存器和Cache,然后再经过CPU进行处理和计算
对于存储器,速度越快,能耗越高,材料越贵,速度快的存储器的容量都比较小
寄存器:
最靠近CPU的控制单元和逻辑单元的存储器,数量少。
32位CPU中大多数寄存器可以储存4个字节;
64位CPU中大多数寄存器可以存储8个字节。
寄存器的访问速度非常快,一般要求在半个时钟周期内完成读写,CPU时钟周期和CPU主频息息相关,2GHz主频的CPU,始终周期是1/2G
CPU处理一条指令,除了读写寄存器还需要解码指令、控制指令执行和计算。如果寄存器的速度太慢,会拉长指令的处理周期。
CPU Cache:
SRAM(Static Random-Access Memmory,静态随机存储器)只要有电,数据就可以保持存在,断电就会消失。
一个bit的数据需要6个晶体管,所以存储密度不高,同样的物理空间,能存储的数据是有限的,不过也因为电路简单,所以访问速度快。
CPU的高速缓存,分为L1,L2,L3三级高速缓存。
L1高速缓存:
和寄存器一样快,需要2~4个时钟周期,大小:几十kb~几百kb
每个CPU核心都有一块属于自己的L1高速缓存,指令和数据在L1是分块存放的,所以分成指令缓存和数据缓存
Linux系统查看CPU里的L1 Cache缓存的容量大小
$ cat /sys/devices/system/cpu/cpu0/cache/index0/size
L2高速缓存
L2高速缓存同样每个CPU核心都有,但是L2高速缓存位置比L1更远,更大,几百kb~几MB,访问速度也更慢,10~20个时钟周期
L3高速缓存
多个CPU核心共用,更远更大,几MB~几十MB,访问速度20~60个时钟周期
内存:
芯片是DRAM(Dynamic Random Access Memory:动态随机存储器)
相比SRAM,DRAM密度更高,功耗更低,有更大容量,造价便宜很多
DRAM存储一个bit数据只需要一个晶体管和一个电容就能存储,因为数据会被存储在电容,电容不断漏电,需要定时刷新电容,才能保证数据不会被丢失,动态即只有不断刷新,数据才能被存储起来。
DRAM的数据访问电路和刷新电路都比SRAM更复杂,所以访问的速度会更慢,内存速度大概在200~300个时钟周期。
SSD/HDD硬盘
SSD(Solid State disk)固态硬盘,结构和内存类似,优点:断电后数据还存在,而内存、寄存器、高速缓存断电后数据都会丢失。内存的读写速度比SSD大概快10~1000倍。
机械硬盘(Hard Disk Drive,HDD),通过物理读写的方式来访问内存的,因此访问速度是非常慢的,速度比内存慢了10w倍。
由于SSD的价格快接近HDD了,机械硬盘逐渐被SSD替代。
存储器的层次关系
存储空间越大的存储设备,访问速度越慢,成本也相对越少
CPU并不会直接和每一个存储器直接打交道,每一种存储设备只和相邻的存储器设备打交道。
CPU Cache只会在内存中读写。
由于成本和速度等原因,导致的现在的存储层次结构
CPU需要访问内存中某个数据,如果寄存器有这个数据,CPU直接从寄存器中取数据,如果没有,继续查询L1高速缓存,如果还没有,继续依次查询L2 L3,如果还没有,才去内存中取数据。
存储器之间的实际价格和性能差距
速度越快,成本越高
总结
各种存储器的关系可以用图书馆学习这个场景理解
CPU好比大脑,当我们思考和处理知识的时候,好比CPU中的寄存器处理数据的过程,速度极快,但是容量很小。而CPU中的L1~L3 Cache好比大脑中的短期记忆和长期记忆,需要小小花费点时间调取数据处理。
我们面前的桌子好比内存,能放下更多的书就是数据,但是找起来和看起来就要花费一些时间,相比CPU Cache慢不少。而图书馆的书架相当于硬盘,能放下比内存更多的数据,但找起来就更费时间了,可以说最慢的存储设备了 。
从寄存器,CPU高速缓存,内存,硬盘,访问速度越来越慢,存储容量越来越大,造价越来越便宜,而且每个存储器只和相邻的一层存储设备打交道,于是行程了存储器的层次结构。
硬盘、内存和CPU L1 Cache相比速度差多少倍。
CPU L1 Cache是1ns,内存是100ns,固态是150μs,机械硬盘是10ms。
SSD比机械硬盘快70倍
内存比机械硬盘快100000倍
CPU L1 Cache比机械硬盘快 10^7倍
CPU访问L1 Cache是1s,访问内存2分钟,访问SSD数据1.7天,访问机械硬盘是4个月。