缓存的基本原理
缓存工作的原则,就是“引用的局部性”,这可以分为时间局部性和空间局部性。空间局部性是指CPU在某一时刻需要,那么很可能下一步就需要其附近的数据;时间局部性是指当某个数据被访问过一次之后,过不了多久时间就会被再一次访问。对于应用程序而言,不管是指令流还是数据流都会出现引用的局部性现象。
举个简单的例子,比如在播放DVD影片的时候,DVD数据由一系列字节组成,这个时候CPU会依次从头处理到尾地调用DVD数据,如果CPU这次读取DVD数据为1分30秒,那么下次读取的时候就会从1分31秒开始,因此这种情况下有序排列的数据都是依次被读入CPU进行处理。从数据上来看,对于Word一类的应用程序通常都有着较好的空间局部性。用户在使用中不会一次打开7、8个文档,不会在其中某一个文档中打上几个词就换另一个。大多数用户都是打开一两个文档,然后就是长时间对它们进行处理而不会做其他事情。这样在内存中的数据都会集中在一个区域中,也就可以被CPU集中处理。
从程序代码上来考虑,设计者通常也会尽量避免出现程序的跳跃和分支,让CPU可以不中断地处理大块连续数据。游戏、模拟和多媒体处理程序通常都是这方面的代表,以小段代码连续处理大块数据。不过在办公运用程序中,情况就不一样了。改动字体,改变格式,保存文档,都需要程序代码不同部分起作用,而用到的指令通常都不会在一个连续的区域中。于是CPU就不得不在内存中不断跳来跳去寻找需要的代码。这也就意味着对于办公程序而言,需要较大的缓存来读入大多数经常使用的代码,把它们放在一个连续的区域中。如果缓存不够,就需要缓存中的数据,而如果缓存足够大的话,所有的代码都可以放入,也就可以获得最高的效率。同理,高端的数据应用以及游戏应用则需要更高容量的缓存。
原文
http://baike.baidu.com/view/907.htm