计算机系统中的各级存储设备具有访问速度从快到慢、存储容量从小到大、存储单价由高到低的金字塔层次结构。
Source:https://hansimov.gitbook.io/csapp/ch01-a-tour-of-computer-systems/1.6
Source:寄存器为什么比内存的访问速度快_为什么访问存储器比访问寄存器需要更多的机器周期-CSDN博客
Latency numbers every programmer should know (github.com)
缓存的意思是,一方面某个存储设备中存了大量的数据,而当前需要使用的只是其中的一小部分;另一方面通常访问速度越快的存储设备其容量就越小。因此,可以采用访问速度较快而容量较小的存储设备去存放当前需要使用的一小部分数据,从而加快数据的访问速度。
缓存之所以能够存放当前需要使用的一小部分数据,是因为局部性原理。局部性原理分为时间局部性和空间局部性。时间局部性是指当前访问过的数据,很可能马上又需要访问;空间局部性是指和当前访问数据相邻的数据,很可能马上需要访问。因此缓存中可以存放刚刚访问过的数据以及其邻近的数据。
根据存储的金字塔层级结构,可以认为每一级存储都可以看成是上一级存储的缓存。
在访问数据的时候,总是先查找数据是否存在于缓存中。如果存在则称为缓存命中,否则就从下一级存储中将数据读入缓存。下一级没有则去更下一级找,在本地直到查找到硬盘,如果可以访问远程存储还可以从远程读取数据。
缓存替换有具体的算法,此处略过。
缓存的一致性此处暂时略过。
(https://en.wikipedia.org/wiki/Cache_(computing))
寄存器(register)有32、64等不同位的。可以存储4B、8B的数据。一个CPU内的寄存器数量和CPU架构有关,少的有几十个,多的有几百个。(https://en.wikipedia.org/wiki/Processor_register)
寄存器的访问速度是最快的:
一方面是因为寄存器在CPU内部,距离CPU更近。但是距离在单机不是一个主要因素。
以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳秒。光在1纳秒的时间内,可以前进30厘米。也就是说,在CPU的一个时钟周期内,光可以前进10厘米。因此,如果内存距离CPU超过5厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来会快一点。
距离对于桌面电脑影响很大,对于手机影响就要小得多。手机CPU的时钟频率比较慢(iPhone 5s为1.3GHz),而且手机的内存紧挨着CPU。
(https://blog.csdn.net/sinat_31608641/article/details/110684664)
另一方面由于CPU直接存取寄存器,读写速度在一个时钟周期以内。设CPU主频为2GHz,则时钟周期为0.5ns。因此寄存器的访问延迟在1纳秒级。