将512KB主内存映射到1KB缓存作业问题

问题描述 投票:1回答: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 blocks每个缓存块。 64*322048。我无法绕过这个。有人可以帮忙吗?

caching cpu-architecture memory-address cpu-cache memory-mapping
1个回答
1
投票

好的,我学到的术语略有不同,但这个解释的校长应该是相同的。

因此缓存将具有多个集合(有点像单元格)。并且每个集合将具有1个高速缓存行(包含1个数据块)或多个高速缓存行(每个包含1个数据块)(直接映射或n-相关性映射)。

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

偏移位用于访问存储块的各个字节。把它想象为块基地址之上的偏移量来获得你想要的字节(我假设你的内存应该是字节可寻址的而不是字可寻址的,因为访问2B字是没有意义的,因为这将是不灵活的)在这里你的教授/教科书称之为字位。因此,如果块具有32字节,则访问映射块中的个体单元所需的log2(块大小)= 5比特。

索引位(在直接映射高速缓存中也称为块位,因为set的数量与高速缓存中的块数相同)用于标识主存储器块映射到的哪个集合/高速缓存行/高速缓存块。缓存。缓存中有1KB / 32B = 32个缓存块。由于使用直接映射,每个集合仅包含1个缓存块,因此在此缓存中将设置32个。因此,为了访问高速缓存中的正确集合,需要5位,因此索引位= 5位

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

© www.soinside.com 2019 - 2024. All rights reserved.