缓存映射小笔记

来源:互联网 发布:java url 编码 编辑:程序博客网 时间:2024/05/21 11:09
1.直接映射
注意每次要载入一个块:
因为标记位和索引位(t和s)相同的数据对应的必然是相同块(s相同啊), 同时标记位会受到和它不同地址数据影响,所以载入的时候必须载入一个块,而不能只载入一个字或者字节。
例如
一个五位的地址系统 有一个高速缓存是2组,每组两个字节,同时这一系统的一个字占一个字节。 显然
10 00 1 
10 00 0
的标记位和索引位是完全相同的,如果在第一次载入10001时候只载入了它自己一个字,那么访问10000时候就会出错。 因为这个时候组0的有效位有效,标记位完全对应,数据当然已经缓存,所以会直接去读取组0偏移0的数值。 原因在于标记位是和组一一对应的,而不是和每个块。

2.组相联映射
这个的本质就在于对外只显示了 1/E的缓存量。例如有每组有两行, 有四个组, 每行有一个4字节的块。实际上缓存有 4 * 2 * 4 = 32个字节的大小,但是外部看见的仅仅是一个 4 * 1 * 4 = 16个字节的缓存。 所以对外部来说,组相联的地址格式形式和直接映射是完全相同的,都是 t + s + b的形式,它们是看不见组的。 对内部来说,处理方式当然不同,这是硬件设计要完成的事情。 组相联的形式下, 对外显示的容量变小了,却有效的避免了抖动的问题。举例如下。
设有两个4字节的int型的变量 存放在100000 和 000000中,恰好要频繁使用它们,可以对比一下两者的表现。
在直接映射下是地址格式解析为(直接映射每组只能有一行,所以上面的缓存就对应了8组, 因而s=3)
t    s     b
0 000 00
1 000 00
除了标记位外,其他都相同, 那么会发生反复载入与取出,就是所谓的抖动。
如果采取两路组相联映射,地址格式解析为
t    s    b 
00 00 00
10 00 00 
如果0地址的放入了第一行,那么当载入下一个数据时候, 会去检查每一行,发现第二行还没有数据存入, 直接放入第二行。 这种情况下就不需要替换问题, 不会发生抖动。代价就是组相联需要对同一组的每行进行遍历, 而直接映射则不需要。
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我差评了客服打电话骂我怎么办 顺丰快递在预计时间没有回来怎么办 同款商品比京东便宜怎么办 京东自营不支持7天退货怎么办 天猫买了一个月的电动车坏了怎么办 发票号码和机打号码不一致怎么办 交电费的本子弄丢了怎么办 快递正在派件中发现地址错了怎么办 快递当天送达当天签收还算延怎么办 深圳国税公众号预约取号公司怎么办 社保买了停了2年怎么办 qq号被冻结申请不回来了怎么办 qq号被冻结 手机密保忘了怎么办 微信账号封了2天怎么办 买qq号被申诉找回了怎么办 收到了京东白条的催款通知单怎么办 成都买房社保不够两年怎么办18年 电话号码给人设置成骚扰电话怎么办 找不到领导电话不接短信不回怎么办 微信账号被别人手机号冻结了怎么办 微信冻结了手机号也让人换了怎么办 顺丰快递拒收退回丢件了怎么办 京东买东西快递电话没有听到怎么办 在京东购物自己电话号输错了怎么办 北京房子卖了户口没地方迁怎么办 微信弄丢了微信密码找不到了怎么办 微信背人用过找不到密码怎么办 超市的微信支付宝收付款怎么办 办理联华超市的会员储蓄卡怎么办 卡杰文具密码本如果忘记密码怎么办 火狐浏览器阻止要访问的网页怎么办 点我达被永久停用了怎么办 刚下的软件点开系统显示停用怎么办 红酒洋酒啤酒一起喝胃不舒服怎么办 儿子13岁初一不想读书了怎么办 微信不小心点了注册新账号怎么办 在京东买东西商家不发货怎么办 在京东买东西坏了商家不退货怎么办 苯扎氯铵溶液不小心喝了一口怎么办 苯扎氯铵溶液没有稀释就用了怎么办 牛油果切开了但是没熟怎么办