【操作系统】存储器金字塔

一、存储器的层次结构

存储器通常可以分为这么几个级别:

在这里插入图片描述

  • 寄存器

  • CPU Cache

    • L1-Cache
    • L2-Cache
    • L3-Cahce
  • 内存

  • SSD/HDD 硬盘

1、寄存器

最靠近 CPU 的控制单元和逻辑计算单元的存储器,就是寄存器了,它使⽤的材料速度也是最快的,因此价格也是最贵的,那么数量不能很多。

存储器的数量通常在⼏⼗到⼏百之间,每个寄存器可以⽤来存储⼀定的字节(byte)的数据。⽐如:

  • 32 位 CPU 中⼤多数寄存器可以存储 4 个字节;
  • 64 位 CPU 中⼤多数寄存器可以存储 8 个字节。

寄存器的访问速度⾮常快,⼀般要求在半个 CPU 时钟周期内完成读写,CPU 时钟周期跟 CPU 主频息息相关,⽐如 2 GHz 主频的 CPU,那么它的时钟周期就是 1/2G,也就是 0.5ns(纳秒)。

CPU 处理⼀条指令的时候,除了读写寄存器,还需要解码指令、控制指令执⾏和计算。如果寄存器的速度太慢,则会拉⻓指令的处理周期,从而给⽤户的感觉,就是电脑「很慢」。

2、CPU Cache

CPU Cache ⽤的是⼀种叫 SRAM(Static Random-Access Memory,静态随机存储器) 的芯⽚。
SRAM 之所以叫「静态」存储器,是因为只要有电,数据就可以保持存在,⽽⼀旦断电,数据就会丢失了。

在 SRAM ⾥⾯,⼀个 bit 的数据,通常需要 6 个晶体管,所以 SRAM 的存储密度不⾼,同样的物理空间下,能存储的数据是有限的,不过也因为 SRAM 的电路简单,所以访问速度⾮常快。

CPU 的⾼速缓存,通常可以分为 L1、L2、L3 这样的三层⾼速缓存,也称为⼀级缓存、⼆次缓存、三次缓存。

在这里插入图片描述

(1)L1⾼速缓存

L1 ⾼速缓存的访问速度⼏乎和寄存器⼀样快,通常只需要 2~4 个时钟周期,⽽⼤⼩在⼏⼗ KB 到⼏百
KB 不等。
每个 CPU 核⼼都有⼀块属于⾃⼰的 L1 ⾼速缓存,指令和数据在 L1 是分开存放的,所以 L1 ⾼速缓存通常分成指令缓存和数据缓存。
在 Linux 系统,我们可以通过这条命令,查看 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
(2)L2 ⾼速缓存

L2 ⾼速缓存同样每个 CPU 核⼼都有,但是 L2 ⾼速缓存位置⽐ L1 ⾼速缓存距离 CPU 核⼼ 更远,它⼤⼩⽐ L1 ⾼速缓存更⼤,CPU 型号不同⼤⼩也就不同,通常⼤⼩在⼏百 KB 到⼏ MB 不等,访问速度则更慢,速度在 10~20 个时钟周期。

在 Linux 系统,我们可以通过这条命令,查看 CPU ⾥的 L2 Cache 的容量⼤⼩:

$ cat /sys/devices/system/cpu/cpu0/cache/index2/size
256K
(3)L3 ⾼速缓存

L3 ⾼速缓存通常是多个 CPU 核⼼共⽤的,位置⽐ L2 ⾼速缓存距离 CPU 核⼼ 更远,⼤⼩也会更⼤些,通常⼤⼩在⼏ MB 到⼏⼗ MB 不等,具体值根据 CPU 型号⽽定。
访问速度相对也⽐较慢⼀些,访问速度在 20~60 个时钟周期。

在 Linux 系统,我们可以通过这条命令,查看 CPU ⾥的 L3 Cache 的容量⼤⼩:

$ cat /sys/devices/system/cpu/cpu0/cache/index3/size
3072K

3、内存

内存⽤的芯⽚和 CPU Cache 有所不同,它使⽤的是⼀种叫作 DRAM (Dynamic Random Access
Memory,动态随机存取存储器) 的芯⽚。

相⽐ SRAM,DRAM 的密度更⾼,功耗更低,有更⼤的容量,⽽且造价⽐ SRAM 芯⽚便宜很多。
DRAM 存储⼀个 bit 数据,只需要⼀个晶体管和⼀个电容就能存储,但是因为数据会被存储在电容⾥,电容会不断漏电,所以需要「定时刷新」电容,才能保证数据不会被丢失,这就是 DRAM 之所以被称为「动态」存储器的原因,只有不断刷新,数据才能被存储起来。

DRAM 的数据访问电路和刷新电路都⽐ SRAM 更复杂,所以访问的速度会更慢,内存速度⼤概在
200~300 个 时钟周期之间。

4、SSD/HDD 硬盘

SSD(Solid-state disk) 就是我们常说的固体硬盘,结构和内存类似,但是它相⽐内存的优点是断电后数据还是存在的,⽽内存、寄存器、⾼速缓存断电后数据都会丢失。内存的读写速度⽐ SSD ⼤概快
10~1000 倍。

当然,还有⼀款传统的硬盘,也就是机械硬盘(Hard Disk Drive, HDD),它是通过物理读写的⽅式来访问数据的,因此它访问速度是⾮常慢的,它的速度⽐内存慢 10W 倍左右。

由于 SSD 的价格快接近机械硬盘了,因此机械硬盘已经逐渐被 SSD 替代了。

二、存储器的层次关系

CPU 并不会直接和每⼀种存储器设备直接打交道,⽽是每⼀种存储器设备只和它相邻的存储器设备打交道。⽐如,CPU Cache 的数据是从内存加载过来的,写回数据的时候也只写回到内存,CPU Cache 不会直接把数据写到硬盘,也不会直接从硬盘加载数据,⽽是先加载到内存,再从内存加载到 CPU Cache 中。

在这里插入图片描述

所以,每个存储器只和相邻的⼀层存储器设备打交道,并且存储设备为了追求更快的速度,所需的材料成本必然也是更⾼,也正因为成本太⾼,所以 CPU 内部的寄存器、L1\L2\L3 Cache 只好⽤较⼩的容量,相反内存、硬盘则可⽤更⼤的容量,这就我们今天所说的存储器层次结构。

另外,当 CPU 需要访问内存中某个数据的时候,如果寄存器有这个数据,CPU 就直接从寄存器取数据即可,如果寄存器没有这个数据,CPU 就会查询 L1 ⾼速缓存,如果 L1 没有,则查询 L2 ⾼速缓存,L2 还是没有的话就查询 L3 ⾼速缓存,L3 依然没有的话,才去内存中取数据。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、存储器之间的实际价格和性能差距

下⾯这张表格是不同层级的存储器之间的成本对⽐图:

在这里插入图片描述

学习自小林coding所著的《图解系统》,自己学习+整理,侵删

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值