更新时间:2022-06-05 10:59
系统缓存是一种缓存形式。缓存是CPU的一部分,它存在于CPU中 CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大,缓存是为了解决CPU速度和内存速度的速度差异问题。
如果将CPU比作一个城里的家具厂,而将存储系统比作郊区的木料厂,那么实际情况就是木料厂离家具厂越来越远,即使使用更大的卡车来运送木料,家具厂也得停工来等待木料送来。
在这样的情况下,一种解决方法是在市区建立一个小型仓库,在里面放置一些家具厂最常用到的木料。这个仓库实际上就是家具厂的“Cache”,家具厂就可以从仓库不停的及时运送需要的木料。当然,仓库越大,存放的木料越多,效果就越好,因为这样即使是些不常用的东西,也可以在仓库里找到。如果我们需要的木料,仓库里没有,就要从城外的木料厂里继续找,而家具厂就得等着了。
我想大家已经明白了我的意思,仓库就相对于L1缓存,可以由CPU及时快速的读写,所以存储的是CPU最常用代码和数据(后面我们会介绍一下如何挑选“最常用”)。L1缓存的速度比系统内存快的多是因为使用的是SRAM,这种内存单晶元使用四到六个晶体管。这也使得SRAM的造价相当的高,所以不能拿来用在整个存储系统上。
在大多数CPU上,L1缓存和核心一起在一块芯片上。如果在我们家具厂的例子中,就好比工厂和仓库在同一条街上。这样的设计使CPU可以从最近、最快的地方得到数据,但是也使得“城外的木料厂”到“仓库”和到“家具厂”的距离差不多远。这样如果CPU需要的数据,不在L1缓存中,也就是“Cache Miss”,从存储设备取数据就要很长时间了。处理器速度越快,两者之间的差距就越大。如果使用Pentium4那样的高频率处理器,从内存中取得数据,就相当于“木料厂”位于另一个国家。
即内存条,内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到像“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。
这里要特别指出的是:
1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
被访问得最频繁的数据不是一成不变的
2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,后来又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的
关于一级缓存和二级缓存
为了分清这两个概念,我们先了解一下RAM。
RAM和ROM是相对的,RAM是掉电以后,其中信息就消失的那一种,ROM是掉电以后,信息也不会消失那一种。
RAM又分两种,一种是静态RAM,SRAM;一种是动态RAM,DRAM。
前者的存储速度要比后者快得多,我们使用的内存一般都是动态RAM。
有的菜鸟就说了,为了增加系统的速度,把缓存扩大不就行了吗,扩大的越大,缓存的数据越多,系统不就越快了吗。
缓存通常都是静态RAM,速度是非常的快,但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),价格高(同容量的静态RAM是动态RAM的四倍),由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为,但是为了提高系统的性能和速度,我们必须要扩大缓存,这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM缓存慢,我们把原来的静态RAM缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存。
一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。
通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了。