计算机系统中的各级存储设备具有访问速度从快到慢、存储容量从小到大、存储单价由高到低的金字塔层次结构。

概念和数字

Source:https://hansimov.gitbook.io/csapp/ch01-a-tour-of-computer-systems/1.6

Source:https://hansimov.gitbook.io/csapp/ch01-a-tour-of-computer-systems/1.6

Source:寄存器为什么比内存的访问速度快_为什么访问存储器比访问寄存器需要更多的机器周期-CSDN博客

Source:寄存器为什么比内存的访问速度快_为什么访问存储器比访问寄存器需要更多的机器周期-CSDN博客

Latency numbers every programmer should know (github.com)

Latency numbers every programmer should know (github.com)

缓存原理

缓存的意思是,一方面某个存储设备中存了大量的数据,而当前需要使用的只是其中的一小部分;另一方面通常访问速度越快的存储设备其容量就越小。因此,可以采用访问速度较快而容量较小的存储设备去存放当前需要使用的一小部分数据,从而加快数据的访问速度。

缓存之所以能够存放当前需要使用的一小部分数据,是因为局部性原理。局部性原理分为时间局部性和空间局部性。时间局部性是指当前访问过的数据,很可能马上又需要访问;空间局部性是指和当前访问数据相邻的数据,很可能马上需要访问。因此缓存中可以存放刚刚访问过的数据以及其邻近的数据。

根据存储的金字塔层级结构,可以认为每一级存储都可以看成是上一级存储的缓存。

在访问数据的时候,总是先查找数据是否存在于缓存中。如果存在则称为缓存命中,否则就从下一级存储中将数据读入缓存。下一级没有则去更下一级找,在本地直到查找到硬盘,如果可以访问远程存储还可以从远程读取数据。

缓存替换有具体的算法,此处略过。

缓存的一致性此处暂时略过。

https://en.wikipedia.org/wiki/Cache_(computing))

Level 0:寄存器

寄存器(register)有32、64等不同位的。可以存储4B、8B的数据。一个CPU内的寄存器数量和CPU架构有关,少的有几十个,多的有几百个。(https://en.wikipedia.org/wiki/Processor_register)

寄存器的访问速度是最快的:

Level 1、2、3:高速缓存