【发布时间】:2015-07-07 21:54:47
【问题描述】:
所以我在我的家庭作业中有这个问题,我有点挣扎。我查看了我的讲座内容/笔记,并能够利用它们来回答问题,但是,我不能 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) 标签 = 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+tag+data) = 2(1+4+2^3*2^5) = 522 bits = 65.25 bytes
n) 数据位 = 2^5 块 * 每块 2^3 字 = 256 位 = 32 字节
【问题讨论】: