计算机组成原理 您所在的位置:网站首页 cache的直接映射的地址结构 计算机组成原理

计算机组成原理

2024-07-14 14:52| 来源: 网络整理| 查看: 265

梳理

基本思想:分块

主存分块,一共有2^s块,编号从0开始

Cache分行,一共2^r行,编号从0开始

Cache每行的大小与主存每块的大小相同,大小为2^w个字

字是CPU每次访问存储器时可存取的最小单位

但Cache块数肯定是要小于主存块数的

 这里要注意,主存的标记位为s位,而主存分块一共分了2^s块,每块的大小为2^w个字,而主存的块内地址有w位。

全相联映射的工作原理

主存和cache均被分为固定大小的数据块,主存分块,Cache分行,主存的块和Cache的行大小相同

主存地址可以被细分为主存块地址和块内偏移地址

映射算法:主存的数据块可映射到Cache任意行,即主存中的某一数据块可以放置在cache中的任意块,如主存0可以放在cache中的任何一块,同样其他主存块也一样,但这给查找带来了麻烦,cache块中的数据到底是主存块中的哪一块的数据

这里引出一个例子

设每块4个字,主存大小为1024个字,则第61个字的主存地址为

将61转换为二进制,00001111   01,前者是块号,后者是块内地址

将主存分块之后,就将原来的一维地址变成了二维地址

 

查找表中还包括有效位valid,以及dirty位,描述数据的一致性。 Valid位为零表示空行,为1表示有数据副本,dirty为1表示cache中的数据和主存中的原始数据不一致,在淘汰时要进行数据一致性的维护。

在比较的同时还需要关注valid位,valid位与1进行比较,valid位为零的行是空行,不存在数据。

多路比较的结果有两种可能,1,所有比较器比较结果都是不相等,表示缺失,2,有一个比较器比较相符,表示数据命中,所以这里命中信号应该是所有比较结果的逻辑或操作。如果命中,可以直接由cache地址块地址去访问对应的cache行。  这就是全相联映射的基本框架。

 主存有2^s次方块,每块有2^w次方个字,所以主存容量2^(s+w)

Cache容量求法

只考虑有效位,意思是不考虑脏数据位,所以每块有一位有效位,还有标记位s位,用于储存主存的块地址最后加上块的大小就可以了

以这个ppt为例,实践一下刚才的求法

主存容量256个字=2^8个字,分成64块=2^6,,说明s=6,标记位有6位

直接调用公式,,完美求解

每块有4个字.4=2^2,说明w=2,块内地址是2位  

哦,对了,,还有一件事,要注意,,那个访问序列,,,

 这个是十六进制,1F直接转二进制,00011111,000111,是标记位,11是块内地址位,每块4个字,用两个二进制数就可以完美表示

然后就按照那个顺序,为空(不命中)填入,不为空(命中)替换就好

全相联映射特点

1.Cache利用率高

2.块冲突率低

3.淘汰算法复杂

应用于小容量Cache

直接映射

和全相联映射一样,还是主存分块,Cache分行,主存的块与Cache的行大小相同

不同点来了

主存分块后还将以Cache行数为标准进行分区

那么问题来了,怎么分区嘞?由于块的大小一样,主存分的块的数目必然大于Cache分的块的数目,Cache有m块,那么主存就以m块为界限进行分区,注意这里的区号同样从0开始

看上面,,,,Cache行数m=2^r,懂了吧

再引入一个例子

主存大小为1024个字,每块4个字,Chche分为4行,第61个字的主存地址为

将61化为二进制数的0000110001,000011为区号,11为区内块号,01位块内地址,,将主存地址从一维变成了三维

映射算法

Cache共m行,主存第j块号映射到Cache的行号为i=jmodm,,即主存的数据块映射到Cache的特定行,而不是任一行(块号,行号都从0开始)

每个区都有m块,那么主存每个区的每一块都会映射到Cache特定的一行上,并且循环进行

 

 直接映射查找的时候就方便多啦,我们只需要直接查找行地址就好啦,如果为空(没命中),直接填入,如果不为空(命中),就直接替换

就是先根据行号找到对应的行,然后比较标志位,如果为空就填入,如果已有标志位就替换

这里又要计算Cache容量

主存容量256个字,分为64块,64=2^6,不同于全相联映射,这里主存在分块的基础上又会进行分区操作,Cache有8块=2^3,

s=6,r=3,所以区地址有3位(区地址是直接映射的标记地址),行地址有3位,块内地址还是2位(忘记了就看看上面)

所以计算Cache容量(1位有效位+3位标记位+副本容量)*行数

还有就是别忘了给出的访问序列是十六进制,,一位化四位之后再分块

直接映射的特点

1.Cache利用率低

2.块冲突率高

3.淘汰算法简单

适用于大容量Cache

 还有这个题要注意一点,

主存分为2048块=2^11,,表明高11位是主存的块号,全相联映射中主存块号是标志位,而在直接映射中,将区号作为了标志位,但是主存块号是不变的

组相联映射

 主存分块,Cache分行,主存的块和Cache的行大小相同

Cache分组,原则非常简单,只要保证每组中行数相同即可,假设Cache分了n组

之后还要将主存进行分组,主存分块后还将以Cache组数为标准进行分组,Cache分了n组,那么主存就以n块为一组进行分组

同样滴,这里的组号也是从0开始

你再看这个d,是不是又很熟悉呢?Cache分成u组,u=2^d,这样就很容易分开

映射算法: Cache共n组,主存第j块号映射到Cache的组号为

i=jmodn(Cache分了n组,主存以n块为一组进行分组)

主存的每组一循环,映射全部的Cache

i是一个余数,余几Cache组号就是几

主存的数据块映射到Cache特定组的任意行

再再再来一个例子

设每块4个字,主存大小为1024个字,Cache分为两组,求第61个字的主存地址

61化成二进制,为0000111101,0000111为主存组号,1为Cache组号,01为块内地址

主存地址从一维变成了三维

介个比较的时候首先找到对应的Cache组号,如果没命中(为空),直接填入;如果命中(标志位)相同,直接替换就好啦

如果这组没满,就直接填直到满了为止,填哪个都无所谓,如果满了,就随便替换一行就好

又又又又要计算Cache容量了,是不是发现每种映射方式的套路都一样

主机容量256个字,=2^8,划分为64块=2^6,Cache分为8块,

由图可知,将Cache分成了4组,4=2^2,d=2;

那么标记位有4位,组号有两位,块内地址有两位(2^w=4别忘了)

这个题就很容易,理解方式同上,主存块号是不变的,变的是标记位

组相联映射可以看做全相联映射和直接映射的特殊情况

假设Cache是m行n路组相联,即n行一组

那么当n=m的时候,组相联变成了全相联,,,因为只有一组

而当n=1时,Cache一行为一组,相当于没分组,就变成了直接相联

组相联同时具有全相联和直接映射相联的特征



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有