缓存映射小笔记
来源:互联网 发布: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
- 缓存映射小笔记
- Opengl之缓存映射
- 状态、缓存、映射
- iOS小明开发笔记(二十一) (缓存机制NSUserDefaults)
- 类映射小例
- 图片映射小例子
- 映射关系小技巧
- 禁止 Jetty 使用映射缓存
- mybatis_SQL映射(5)_缓存
- jQuery映射,缓存jQuery对象
- 10、Hibernate状态、缓存、映射
- 预防缓存小技巧
- 缓存小知识
- php缓存小技巧
- 小程序数据缓存
- 内存映射的小例子
- STM32F103PWM+重映射 小程序
- windows driver 映射小文件
- 大数据时代有哪些投资机遇?(来源: BWCHINESE中文网)
- 归并排序和快速排序的实现
- JDeveloper Issue: "The specified schema object name is not an existing object. Unselect Existing Ob
- @property的属性
- Linux 内核中的 GCC 特性
- 缓存映射小笔记
- Android字体切换
- J2SE——面向对象总结
- 找出大于等于v的最小的2的倍数
- unity3d4.6 中文视频教程之飞车游戏
- App Extension编程指南(iOS8/OS X v10.10):创建应用扩展
- python_learning_1
- 204A (数学题或者数位DP?)
- 一个穷人是从什么时候开始有钱的?