块的直接映射缓存示例

时间:2015-04-28 20:54:59

标签: memory cpu-cache

所以我在我的家庭作业中有这个问题,我有点挣扎。我查看了我的讲座内容/笔记,并且能够利用这些来回答问题,但是,我并非100%确定我做的一切都是正确的。问题中有两个部分(C部分和D部分),即使在查阅我的笔记和在线资源之后我也无法弄清楚。我不是以任何方式寻找这两个部分的解决方案,但是如果我能够至少在正确的方向上推动我如何解决它,我将不胜感激。

我知道这是一个相当大的问题,但是,我希望有人可以查看我的答案,并告诉我是否所有的工作和方法都是正确的。一如既往,谢谢你的帮助:)

好的,现在我们已经办理了手续,

--------------------------这是问题:------------- -------------

假设构造了具有32个块的块的小型直接映射缓存。每个缓存块都存储 八个32位字。主存储器 - 字节可寻址1 - 大小为16,384字节。存储32位字 字在内存中对齐,即在可被4整除的地址处。

(a)内存可存储多少32位字(十进制)?

(b)寻址存储器的每个字节需要多少个地址位?

(c)内存地址的范围是什么,以十六进制表示?也就是说,第一个和最后一个字节的地址是什么 记忆?我给你一个提示:内存地址从0开始编号。

(d)记忆中最后一个字的地址是什么?

(e)使用第5章讲义中讨论的缓存映射方案,有多少和哪些地址位 将用于形成块偏移?

(f)将使用多少个和哪个内存地址位来形成缓存索引?

(g)将使用多少个地址位和哪个地址位来形成每个高速缓存块的标记字段?

(h)哪个高速缓存块(十进制)将存储器地址0x2A5C映射到?

(i)0x2A5C的块偏移量(十进制)是什么?

(j)有多少其他主存储器字映射到与0x2A5C相同的块?

(k)当0x2A5C处的字移入缓存块时,另一个的内存地址(以十六进制表示)是多少 还将被移入这个区块的单词?将答案表示为范围,例如[0x0000,0x0200]。

(l)映射到高速缓存块的主存储器块的第一个字将始终位于一个地址 可以被__整数(十进制)?

(m)包括每个缓存块的V和标记位,缓存的总大小(以字节为单位)

(n)为数据位分配的大小(以字节为单位)?

----------------------我的回答和工作------------------ -----------------

a)内存= 16384字节。 16384字节比特= 131072比特。 131072/32 = 4096 32位字

b)2 ^ 14(主存储器)* 2 ^ 2(4位/字)= 2 ^ 16。取log(base2)(2 ^ 16)= 16位

c)无法理解这部分内容(我会理解一些关于如何看待这个问题的输入(不是解决方案

d)无法解决这一部分:(

e)每个缓存行中有8个字。 8 * 4(2 ^ 2位/字)=每个高速缓存行中的32位。 log(base2)(2 ^ 5)= 用于块偏移的5位

f)块数= 2 ^ 5 = 32个块。 log(base2)(2 ^ 5)= 缓存索引为5位

g)tag = 16 - 5 - 5 - 2(字对齐)= 4位

h)0x2A5C

   0010    10100      10111          00 

   tag     index      offset  word aligned bits

映射到缓存块索引= 10100 = 0x14

i)映射到块偏移= 10111 = 0x17

j)4个标记位,5个块偏移= 2 ^ 9个其他主存储器字

k)它是块偏移的排列。所以它用相同的标签和缓存索引位映射内存地址,并阻止偏移 0x00 0x01 0x02 0x04 0x08 0x10 0x11 0x12 0x14 0x18 0x1C 0x1E 0x1F

l)可被 4

整除

m)2(V +标签+数据)= 2(1 + 4 + 2 ^ 3 * 2 ^ 5)= 522位= 65.25字节

n)数据位= 2 ^ 5个块* 2 ^ 3个每个块= 256位= 32个字节

1 个答案:

答案 0 :(得分:0)

C部分: 如果内存具有 M 字节,并且内存可以字节寻址,则内存地址范围从 0 M - 1

对于您的问题,这意味着内存地址范围为0到16383,或者是十六进制0x0到0x3FFF。

D部分: 单词长度为4个字节。所以给出你对C的回答,最后一句话是:

(0x3FFFF - 3) -> 0x3FFC.

你可以看到这是正确的,因为地址的最低2位是0,任何4字节对齐的地址都必须为真。