1. cache是一种高速缓冲存储器,是为了解决cpu和主存之间速度不匹配而采用的一项重要技术。其原理基于程序运行中具有空间局部性和时间局部性特征。cache是介于cpu和主存之间的小容量存储器,由高速的SRAM组成。
2.个人感觉需要在这里提一下的知识。
(1)存储单元的编址方式:①字编址方式 ②字节编址方式
存储字节:一个存储字节只有8位。当按字节编址方式时,一个存储单元就是一个字节(8位)。
存储字:一个存储子不知道有多少位,必须被题目告知。当按字编址方式时,一个存储单元就是一个字(n位)。
(2)存储容量 = 存储单元个数 * 存储字长
(3)主存和缓存的编址。
(4)cache的基本结构,其实这条是作为扩展的,不需要太了解。
3.好了,下面正式进入主题。
(1)全相联映射方式:
①主存中的任意一块都可以映射到缓存的任意一块。假如拿一个主存的地址给你,那么(1)拿主存地址的字块标记部分与cache所有行的标记同时放到比较器中进行比较;假如命中,那么到该行取数据,(2)否则就老老实实拿着刚才给你的主存地址到主存中去寻找内容。(ps:①因为cache的命中率很高,且cache速度相对主存来说极快,所以上面这样策略可以极大提高效率;②根据书上的求命中率的公式,感觉该段话中(1)(2)是同时进行的,哈哈,如果不钻的话,按照我上面说的去理解就行了)
②缓存容量:额,通过主存地址好像求不出来吧。
主存容量 = 主存存储单元个数 * 存储字长 = 2^m * 2^b *存储字长
(2)直接映射方式:
①假如给你一个主存地址,首先用c位表示的主存字块行号找到对应的cache行号,(因为每个主存块j只能和一个缓存块相对应,对应的cache行号 i = j mod (2^c) ),然后用地址中主存字块标记部分与cache 对应行的标记进行比较。假如命中,那么到该行取数据,否则就老老实实拿着刚才给你的主存地址到主存中去寻找内容。
②缓存容量 = 缓存存储单元个数 * 存储字长 = 2^c * 2^b * 存储字长
主存容量 = 主存存储单元个数 * 存储字长 = 2^m *2^b *存储字长 = 2^t *2^c *2^b *存储字长
(3)组相联映射方式:
①假如给你一个主存地址,首先用主存地址中的主存字块标记找到与之对应的cache组,然后用该主存字块标记与对应cache组中所有的字块的标记进行比较;假如命中,那么到该组的命中行取数据,否则就老老实实拿着刚才给你的主存地址到主存中去寻找内容。
②缓存容量 = 缓存存储单元个数 * 存储字长 = 2^q * 每组字块数 * 2^b * 存储字长
主存容量 = 主存存储单元个数 * 存储字长 = 2^m * 2^b *存储字长 = 2^s * 2^q * 2^b *存储字长