首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将512 1KB主存映射为1KB的缓存作业问题

将512 1KB主存映射为1KB的缓存作业问题
EN

Stack Overflow用户
提问于 2019-04-16 19:34:15
回答 1查看 760关注 0票数 1

如果我发这篇文章时出错了,我很抱歉。如果我需要改变什么,请告诉我。

我已经收到了我的电脑架构作业,我错过了这个问题。我的教授的解释对我没有意义,我不同意他对我说的话,所以我在这里问你们的想法。

以下是一个问题:

计算机使用16位内存地址.主存是512KB,缓存是1KB,每个块都有32B。给定以下每个映射函数,计算内存地址的每个字段中的位数。

下面是我如何处理问题的直接映射部分:

缓存内存:1KB (2^10),16位内存地址(1 word = 2B) -> 1024B/2B = 512 words,每块16字(32B) -> 512/16 = 32 cache memory blocks.

主存:512 KB (2^19),16位内存地址(1 word = 2B) -> 524288B/2B = 256K words,每块16字(32B) -> 256K/16 = 16384 or 16K内存块.

我理解单词标签是这样的:每个块的32B允许每个块的16 16-bit内存地址。这个(我相信)支持这一点:每个块中的1 word = 16 bits = 2 B -> 32B/2B = 16 words。这等同于2^4 = 4 bits,用于确定块中的哪个单词,将12 bits留给标记和内存地址中的块位。

现在,为了将16K主内存块直接映射到32缓存内存块,必须有映射到每个缓存内存块的512主内存块。因此,每个512/16K块都是1/32块。

这就是我困惑的地方。这不需要9标记位,比如2^9 = 512 (主内存块可能映射到一个缓存内存块)吗?

对于指向缓存中特定块的块位,这需要5 bits2^5 = 32,缓存内存中的块。

这需要内存地址中的18 bits

这是我教授对这个问题的回答:

2^5 = 32 -> 5字位

(1KB)/(32B) = 32块-> 5块位

16 – 5 – 5 = 6标签位

我没有意识到我可以简单地减去所需的块和字位来获得标记位。但对我来说还是没有意义。每个缓存块的2^6 = 64 blocks64*32给了2048。我不能把我的头绕在这上面。有人能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 17:59:59

好的,我学到的术语略有不同,但是这个解释的原理应该是一样的。

因此,缓存将有多个集(有点像单元格)。每个集合将有一个缓存线(包含一个数据块)或多个缓存线(每个包含一个数据块)(直接映射或n-结合映射)。

在将主存储器块映射到高速缓存时,将主存储器地址(16位)划分为3个字段:标记索引位偏移位。一个内存单元是一个字节,一个块由几个单元组成。

偏移位用于访问内存块的各个字节。把它看作是块基地址顶部的偏移量,以获得您想要的字节(我假设您的内存应该是byte-addressable,而不是可寻址的字,因为访问2B单词没有意义,因为这是不灵活的),在这里,您的prof/教科书将它称为字位。因此,如果一个块有32个字节,则需要log2(块大小)= 5位来访问映射块中的单个单元。

索引位(在直接映射的缓存中也称为块位,因为集合的数量与缓存中的块数相同)用于识别主内存块映射到缓存的/cache行/缓存块。缓存中有1KB/32B =32个缓存块。使用作为直接映射,每个集合只包含一个缓存块,因此这个缓存中将有32个缓存块。因此,要访问缓存中的正确集,需要5位,因此索引位=5位

标记是一个用于确定缓存中的数据块是否正确的名称,我们从主内存中查找数据块。由于主存储器的地址是16位,而且我们已经知道索引和偏移字段,因此很容易推断标签将需要16-5-5-6位。我们如何确定标记并不是真正关心的块大小和缓存大小(因此没有。在这里给出了缓存中的集合)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55715460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档