系统缓存是一种缓存形式。缓存是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集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),价格高(同
容量的
静态RAM是动态RAM的四倍),由此可见,扩大静态RAM作为
缓存是一个非常愚蠢的行为,但是为了提高系统的性能和速度,我们必须要扩大
缓存,这样就有了一个折中的方法,不扩大原来的静态RAM
缓存,而是增加一些高速动态RAM做为缓存,这些高速动态RAM速度要比常规动态RAM快,但比原来的静态RAM
缓存慢,我们把原来的静态RAM
缓存叫
一级缓存,而把后来增加的动态RAM叫
二级缓存。
一级缓存和
二级缓存中的内容都是
内存中访问
频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。