cache中每一行分为标记位,有效位,(脏位),数据位
前面三个好理解,主要说下数据位
下面贴一张王道的图,下图位Cache的结构,最右边就是数据位,它的位数是由块大小决定的
数据位就是cache要存储的数据,对于1B的数据,就是需要8位来存储,1位来表示
同理对于32位的数据,就是32位来存储,5位来表示,平时我们碰到的题目让我们表示的居多,所以容易混淆表示(定位)和存储的两种概念
来看例题(2题)
下面的t,c,b分别是主存字块标记,Cache字块地址,字块内地址
1.若计算机主存地址为32位,按字节编址,Cache 数据区大小为32KB,主存块大小为32B,采用直接映射方式和回写(Write Back)策略,则cache行的位数至少是?
大小 | 大小的二的次方表示法 | 表示位数 | 存储位数 | |
主存 | 4GB | 2的32次方 | 需要32位来表示(定位)这个地址 | 4G*8位 |
cache | 32KB | 2的15次方 | 需要15位来表示(定位)这个地址 | 32K*8位 |
块 | 32B | 2的5次方 | 需要5位来表示(定位)这个地址 | 32*8位 |
主存地址结构
b=5位 也就是大小的二的次方表示法的对数
c=15-5=10位
t=32-15=17位
t c b
17 10 5
cache行的位数=标记位 + 有效位 + 脏位 + 数据位
标记位是17位,有效位1位,回写法脏位一位,
数据就是一块的数据,一块的大小为32B,需要32*8=256位来存储
cache行的位数=17+1+1+256=275位
2.假定主存地址为32 位,按字节编址,主存和Cache 之间采用直接映射方式,主存块大小为4 个字,每字32 位,采用回写(Write Back)方式,则能存放4K 字数据的Cache 的总容量的位数至少是( )。
A.146k B.147K C.148K D.158K
Cache大小=4K字=4K*32/8=16KB
块大小=4字=4*32/8=16B
大小 | 大小的二的次方表示法 | 表示位数 | 存储位数 | |
主存 | 4GB | 2的32次方 | 需要32位来表示(定位)这个地址 | 4G*8位 |
cache | 16KB | 2的14次方 | 需要14位来表示(定位)这个地址 | 16K*8位 |
块 | 16B | 2的4次方 | 需要4位来表示(定位)这个地址 | 16*8位 |
主存地址结构
b=4位 也就是大小的二的次方表示法的对数
c=14-4=10位
t=32-14=18位
t c b
18 10 4
cache行的位数=标记位 + 有效位 + 脏位 + 数据位
标记位是18位,有效位1位,回写法脏位一位,
数据就是一块的数据,一块的大小为16B,需要16*8=128位来存储
cache行的位数=18+1+1+128=148位
现在有1K行
所以cache的位数=行数*每一行的位数=148K位