补充:内存地址与缓存位置的映射关系

PPT 中的内容不结合公开课来看还是比较难理解的,这里进行进一步的说明。

我们直接把内存地址划分为三个部分:tag,set index 和 block offset。
即:标志位,缓存集下标,块内偏移量。


内存地址

那么这三个部分分别起什么作用呢?要理解这一点,先要明白内存地址与缓存位置的映射方式
还是来用一个比喻来理解吧。假设你要去图书馆借书,那么你首先通过查询得到索书号,然后再根据索书号去找到对应的书架,对应的书。那么索书号就相当于内存地址,而书架就相当于内存。
图书馆经过统计发现,在某一时间段内,某些书的借阅率会非常高,而在茫茫书库中寻找对应书架费时费力。为了方便同学们快速借书,图书馆在前台设置了一个特别书架,专门把书库中的热门图书集中在这里,同学们只要对前台出示索书号,就可以直接从前台获得这本图书,方便快捷。这个特别书架就相当于缓存。
现在问题来了:索书号是针对书库设计的,而不是针对特别书架设计的,那么图书管理员如何能够通过索书号知道这本书是否被收入了特别书架,以及它在特别书架中的位置呢?

我们假设索书号的格式为:【书架号 - 层号 - 本号】
比如:25 - 07 - 16 表示这本书在 25 号书架,第 7 层,它是从左到右数的第 16 本。


方法1

特别书架不设置放置规则,有空位就可以放书。这样,逐一比对手中的索书号与书上贴的索书号,就可以知道是不是要找的书。

方法2

规定特别书架每一层只能放一本层号与其相同的书。比如:索书号为 25 - 07 - 16 的书,应该放在特别书架第七层。这样,我们通过索书号可以知道应当到特别书架的哪一层去找。

方法3

与方法2基本一样,只是特别书架每层可以放 n 本书。比如:索书号为 25 - 07 - 16 的书,应该放在特别书架第七层。而索书号为 18 - 07 - 55 的书也可以同时放在特别书架第七层。


以上的三种方法分别对应了缓存结构中的完全结合(fully associative)直接映射(direct map)集内结合(set associative)
其中方法3就是通常使用的映射方法,【书架号 - 层号 - 本号】 的结构对应了 【tag - set index - block offset】的地址划分。不过与上面索书的例子不同的一点是,内存与缓存之间是以块(一整层的书)为单位进行数据传输的。

总结一下在特别书架中按索书号查找对应图书的过程:
1. 根据层号找到特别书架的对应一层。
2. 对比书架号是否一致。
3. 按本号找到对应图书。

你可能感兴趣的:(补充:内存地址与缓存位置的映射关系)