考研顽固问题记录——组成原理
cache地址映射与位数问题
考研范围内cache地址映射之中最重要的问题就是对于地址位数跟映射关系的掌握,以下则分为两部分叙述
一 cache地址与主存地址的位数关系
首先要明确的是,对于cache来说实际的存储的数据有两部分,第一部分称谓标记部分,第二部分是数据部分。
其中长度最好确认的就是数据部分,题目之中一定会给出每一块的大小,根据块大小,轻松得出数据部分长度(单位是b,要将B展开成八位)。
第二部分就是标记部分,标记部分就要麻烦一些,首先要明确的是,标记部分是cache之中用来唯一确定与主存对应关系的字段,也就是门牌号(比喻不太恰当,毕竟还存在脏位,有效位等)。第一步先看题目中给出的映射方式,王道辅导书之中给出的映射方式有三种,那么问题来了,究竟什么是映射?而映射了又有什么用?以什么规则映射?
三大映射关系
第一种就是全相联映射,很简单,很粗暴,就是每次访问一个主存块,如果需要调入cache就在cache中从上到下挨个扫描,找到一个空的cache就给他放进去(有效位为0 代表这个cache是没人用的)
优点很明显就是利用率高,理论上可以利用到所有空间,缺点是,速度慢(需要挨个扫描)成本高(使用相联存储器,这个东西可以利用硬件实现比较,访问的时候相当于利用了硬件实现了遍历的过程)
第二种是直接映射。既然全相联映射这么蠢 为什么我们不找一个比较容易访问又比较容易存储的方式呢 ,这种方式就是直接映射,为什么叫直接映射呢,因为硬件可以直接访问所要访问的块,这样又快又好。具体方式如下,类似于数据结构之中的哈希表,通过对于内容的计算,直接找到所要访问的块。比如块号是50cache中有10个块,那么应该用50除以10
取余数,这样就得到了cache块号,那为啥不是取商而是取余数?这就代表着,把主存按照十个一组分成好多组,这题就是五组 然后第五组之中占据第一个位置,编号就是零(换一种思路,如果以后cache便宜了,能跟主存一样大,那么就可以分成n多个十块的cache,那么这个主存块就在第五个cache里面第一个块)
这种方式依然是优点,很快,很好存很好找,缺点是,要是主存地址算出来的cache地址存了怎么办?那就要用到置换算法,把占用的块置换出去,放入新的块。那么问题就是,如果我每次都是第n组的第一个或者第二个怎么办,那么不每次访问都要置换,这样极其愚蠢。于是乎出现了第三种
(手机打字累死了(`Δ´)ゞ)
第三种,组相联映射,对比记忆可以认为是半相联(相对于全相联)。
这个就是集两种方法的优点
直接映射优点:找的快
全相联优点:利用率高
那么组相连就是将cache细分成n多个组,每组两块或者四块(选其中一种,例如两块就是二路组相连映射)。然后组间用直接映射,组内用全相联。
(下一篇讲述,映射之后地址结构,还有怎么找标记)
2020-11-15
最新推荐文章于 2022-06-27 18:23:38 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)