1. 存储器⚓
1.1 存储器的层次结构⚓
存储器按照速度从快到慢通常可以分为这么几个级别:
1.1.1 寄存器⚓
寄存器 是最靠近 CPU 的控制单元和逻辑计算单元的存储器。
- 32 位 CPU 中大多数寄存器可以存储 4 个字节;
- 64 位 CPU 中大多数寄存器可以存储 8 个字节。
寄存器的访问速度非常快,一般要求在半个 CPU 时钟周期内完成读写。
1.1.2 CPU Cache⚓
CPU Cache 用的是一种叫 SRAM(Static Random-Access Memory,静态随机存储器)的芯片。
是因为只要有电,数据就可以保持存在,而一旦断电,数据就会丢失了。
1.1.2.1 L1 高速缓存⚓
L1 高速缓存的访问速度通常只需要 2~4
个时钟周期,而大小在几十 KB 到几百 KB 不等。
每个 CPU 核心都有一块属于自己的 L1 高速缓存,指令和数据在 L1 是分开存放的,所以 L1 高速缓存通常分成指令缓存和数据缓存。
查看 CPU 里的 L1 Cache「数据」缓存的容量大小:
$ cat /sys/devices/system/cpu/cpu0/cache/index0/size
32K
查看 L1 Cache「指令」缓存的容量大小:
$ cat /sys/devices/system/cpu/cpu0/cache/index1/size
32K
1.1.2.2 L2 高速缓存⚓
L2 高速缓存同样每个 CPU 核心都有,但是 L2 高速缓存位置比 L1 高速缓存距离 CPU 核心 更远,它大小比 L1 高速缓存更大,CPU 型号不同大小也就不同,通常大小在几百 KB 到几 MB 不等,访问速度则更慢,速度在 10~20
个时钟周期。
$ cat /sys/devices/system/cpu/cpu0/cache/index2/size
256K
1.1.2.3 L3 高速缓存⚓
L3 高速缓存通常是多个 CPU 核心共用的,位置比 L2 高速缓存距离 CPU 核心 更远,大小也会更大些,通常大小在几 MB 到几十 MB 不等,具体值根据 CPU 型号而定。
访问速度相对也比较慢一些,访问速度在 20~60
个时钟周期。
$ cat /sys/devices/system/cpu/cpu0/cache/index3/size
3072K
1.1.3 内存⚓
内存 使用的是一种叫作 DRAM (Dynamic Random Access Memory,动态随机存取存储器) 的芯片。
DRAM 存储一个 bit 数据,只需要一个晶体管和一个电容就能存储,但是因为数据会被存储在电容里,电容会不断漏电,所以需要「定时刷新」电容,才能保证数据不会被丢失,这就是 DRAM 之所以被称为「动态」存储器的原因,只有不断刷新,数据才能被存储起来。
内存速度大概在 200~300
个 时钟周期之间。
1.1.4 SSD/HDD 硬盘⚓
SSD(Solid-state disk)就是我们常说的固体硬盘,结构和内存类似,但是它相比内存的优点是断电后数据还是存在的,而内存、寄存器、高速缓存断电后数据都会丢失。内存的读写速度比 SSD 大概快 10~1000 倍。
机械硬盘(Hard Disk Drive, HDD),它是通过物理读写的方式来访问数据的,因此它访问速度是非常慢的,它的速度比内存慢 10W 倍左右。
1.2 存储器的层次关系⚓
每个存储器只和相邻的一层存储器设备打交道。比如,CPU Cache 的数据是从内存加载过来的,写回数据的时候也只写回到内存,CPU Cache 不会直接把数据写到硬盘,也不会直接从硬盘加载数据,而是先加载到内存,再从内存加载到 CPU Cache 中。