高速缓存器是利用局部引用特性(在特定的时间段内程序和数据的一个相当小的子集被频繁地重复引用)来提高系统性能。存储器层次结构如下:

《现代体系结构上的UNIX系统》笔记

首先来看第一种高速缓存的组织:直接映射高速缓存

《现代体系结构上的UNIX系统》笔记

其实这种结构很好理解:为了能将所有的主存都有机会被Cache所以要有个散列函数,因为局部性原理所以缓存的是连续的数据,因为一个索引位置对应N个主存地址所以需要一个标记来区分。在真正的执行过程中可能并不总是会满足局部性原理,这时高速缓存反而会办倒忙:

正常的访问:

CPU->主存

有高速缓存后的访问:

CPU->访问高速缓存->主存->填充高速缓存

一个简单的优化是将原来的一行增加成两行,这样如果程序重复依次访问A、B这两个位置(他们散列值相同),那么这种情况下就不需要再去主存中读取。而且这种实现的CPU对两个标记的检查是同时进行的,所以不会对速度产生影响(其实这种思想在很多地方都有体现,比如quicklz压缩算法中不同的level)。但是还是如果两行的标记都无法匹配的时候怎么办呢?最简单有效的做法就是LRU吧。

 

 

 

 

 

相关文章:

  • 2021-12-23
  • 2021-11-27
  • 2021-11-03
  • 2021-11-09
  • 2021-05-28
  • 2021-09-26
  • 2021-06-30
  • 2021-08-17
猜你喜欢
  • 2021-10-30
  • 2022-12-23
  • 2021-09-18
  • 2021-06-14
  • 2022-01-15
  • 2021-07-08
相关资源
相似解决方案