有三种高速缓存:
直接映射高速缓存:每个组里面只有一行
组相联高速缓存:没什么特点的状态
全相联高速缓存:一共只有一个组
高速缓存确定一个请求是否命中,然后抽取被请求的字的过程,分为三部:
1⃣️组选择
2⃣️行匹配
3⃣️字抽取
直接映射高速缓存
组选择
从w的地址中抽出s个索引位确定是哪个组
行匹配
在直接高速缓存(每一组只有一行)中很容易:
有效位设置了 && ( 高速缓存行中的标记位==w地址中的标记位 )
字选择
块偏移提供了第一个字节的偏移,把这个偏移当作一个数组的索引拿出来就好,如上图的右半部分
?是?
有这样一个高速缓存
- 标记+索引唯一地标识来存储器中地每一个块
- 8个存储器块,4个高速缓存
组相连
组选择:跟直接映射的是相同的
行匹配:这个麻烦一点,还需要依次判断有没有那么一行跟地址中的标记位相同
字抽取:同直接映射
全相联
全相联是一个组包含了所有的行
组选择
组选择特别简单,因为只有一个组嘛
行匹配和字抽取