主存与cache的地址映射

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 *存储字长

 

 

 

 

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值