如何计算直接映射高速缓存和组相联高速缓存

一、通用的高速缓存存储器组织结构

           首先让我们了解一下基本结构、

           考虑一个计算机系统,其中每个存储器地址有m位,形成M=2^m个不同的地址。

            ·高速缓存被组织成一个有S=2^s个高速缓存组的数组。(即一共有S个组)

            ·每个组包含E个高速缓存行。(即一组里有E行)

           ·每一行是包括一个B=2^b字节的数据块(block)(又称偏移位),一个有效位(valid bit)指明这个行是否包含有意义的信息(即判断是否命中),还有t=m-(b+s)个标记为(tag bit),他们唯一地标识存储在这个高速缓存行中的块。

           对于任意一个地址来说,我们可以把地址拆分成以下形式

    · 高速缓存的大小(或容量)C指的是所有块的大小的和,标记位和有效位不包括在此内,C=S\times E\times B

扫描二维码关注公众号,回复: 9487090 查看本文章

     几个比较重要的公式

m=\log _{2}(M) 内存地址的最大数量
s=\log_{2}(S) 组索引位
b=\log_{2}(B) 块偏移量
t=m-(b+s) 标记位数量
C=S\times E\times B 容量

    我们可以做一个简单的练习

     

高速缓存   m      C      B     E     S      t      s           b
       1   32    1024      4     1 1024÷4÷1=256 32-8-2=22      8           2
       2   32    1024      8     4     32   24      5          3

二、直接映射高速缓存

        每个组只有一行(E=1)的高速缓存成为直接映射高速缓存

        我们来简单看一下,一个值怎样判断他的t、s、b位

接下来我们来做一个练习

                假设 M=16Bytes, S=4 , E=1, B=2 ,将以下数值读入高速缓存时是一种什么情况?

    首先,由以上条件可以知道 m=4,s=2, b=1 , 可以得知地址address of word为

           

    然后将0,1,7,8,0转换为二进制 

  1、 “0”,s为00,所以要把它放进第0组。可是我们发现,此时高速缓存中第0组为空,所以此时并没有命中。再看b=0,说明偏移量为0,因为B=2,所以我们可以放两个字节进去,即M[0-1]

.2、接着我们看“1”,s为00,所以我们要把他放进第0组,此时第0组已经存有值,并且tag相吻合,可以直接读到M[1],此时命中

3、“7” ,s为11,所以我们要把他放进第3组,此时第3组为空,所以没有命中。因B=2,放两个字节,即M[6-7]

4、“8” ,s为00,所以我们要把它放进第0组,可这是可以发现,“8”的t,即表示为时1,与0组标识为不相符,所以也没有命中。

接下来,我们就要把第0组原有的值踢走,换进新的值。

5、“0”,s为00,所以我们要把他放进第0组,与上一组一样,二者的标识为并不相符,所以我们继续踢走原有的值,放入新的值

 二、组相联高速缓存

           直接映射E=1,而组相联告诉缓存放宽了这个限制,E可以>1,我们通常称之为E路组相联高速缓存

  假设 M=16Bytes, S=2 , E=2, B=2 ,将以下数值读入高速缓存时是一种什么情况?

1、“0”,s为0,所以我们将他们放在第0组,优先考虑放入第一行,偏移量为0,即放入M[0-1],没有命中

2、“1”,s为0,所以放到第0组,这是我们发现二者标志位相吻合,所以命中

3、“7“,s为1,所以我们放到第1组,偏移量为1,没有命中。可以放入的值可以稍稍计算,偏移为可以取0或1.当b=0时,放入的值为0110,即6;当b=1时,值为0111,即7,所以放入的是M[6-7]。之后的同理

4、”8“,s为0,所以放到第0组,第一行标志位位00,所以不吻合,我们将其放入第二行,没有命中。

5、”0“,s为0,所以放到第0组,第一行标识位与t相吻合,所以命中

发布了22 篇原创文章 · 获赞 2 · 访问量 5443

猜你喜欢

转载自blog.csdn.net/qq_43135849/article/details/100850127