局部性原理是除并行技术之外在计算机体系结构设计领域使用的最广泛的技术之一。可以这么说,在计算机系统中,局部性原理几乎无处不在。那么,什么事局部性原理呢?在回答这个问题之前,我们先看一个例子。图1 局部性原理举例假设你就是我,正在写一本关于计算机体系结构方面的书。台上一分钟,台下十年功。写书也不例外,要想写一本书,起码要先阅读上百本书或论文。这么多资料,你不可能实现把所有的资料都放在你面前,也不会每次只借一本书。实际的情况是,先去图书馆借你认为参考价值最大的一些资料,这些资料里面包含了你当前阶段可能需要参考的的部分内容,放在你的书桌上。这样在写书的过程中一旦需要什么查阅一些参考资料,首先会确认一下,你想要查阅的资料有没有在你借的资料里面,如果有的话,就不用去图书馆了。如果你开始了新的一章内容的编写,想查阅资料时,发现你之前借的那些资料里面没有相关内容,这时,你就必须去图书馆了。在上面的例子中,如果把图书馆比作整个内存的话,那么,起到缓冲区作用的,你的书桌,也就相当于cache。显然,采用事先借一部分书的方法能显著减少你去图书馆的次数,当然,也不用把整个图书馆的书都借回来了。这里面内含的道理,就是所谓的局部性原理。局部性原理(principle of locality),一般可分成两个方面,即时间局部性(temporal locality)和空间局部性(spatiallocality)。通俗的说,时间局部性指的是,如果一个数据被使用,那么这个数据在不久的一段时间里也很可能被使用。针对于上面的例子来说就是,如果你刚刚参考了一本书的话,那么这本书很可能在最近几天都会被你参考。空间吧局部性指的是,如果一个数据被使用,那么与这个数据地址相邻数据很有可能会很快被使用。针对于上面的例子来说就是,如果你借的一本书是在图书馆的某一个书架上,那么这个书架上与这本书相邻的书也很可能被你借走。其实,局部性原理在计算机体系结构设计中应用很广泛。比如内存就可以看做是硬盘的缓冲区,cache就可以看做是内存的缓冲区,而CPU内部的通用寄存器又可以看做是cache的缓冲区。大家所熟知的MMU中的TLB也可以看做是缓冲页表项的缓冲区。实质上,局部性原理可以认为是存储空间和存储访问速度之间的一种平衡机制。