主存-cache映射方式

Cache中包含:

  • 有效位(Valid)
  • 标记(Tag)
  • 数据块(Data Block)
  • 替换策略信息(如LRU信息)
  • 其他控制信息(如脏位Dirty)

主存中包含:

  • 区地址(Tag)
  • 行索引(Index)
  • 块内偏移(Offset)
  • 数据信息

直接相联映射

主存分区
按照cache的大小把主存分成若干个相同大小的块,每个块通过模运算映射cache中的一行,每个块有一个标记位,用于存放主存块的地址。

全相联映射

主存不分区
主存中的每个块都可以映射到cache中的任意一行,每个块有一个标记位,用于存放主存块的地址。

组相联映射

主存分区
第一个版本的解释:把cache分成n个组,主存的若干个区中每个区有n个块(行)。比如每个区中第一行是第一组的第一块,第二行是第二组的第一块…… 也就是说主存的每个区中有多少块,cache就有多少组。

第二个版本的解释主存的块通过模运算映射到Cache的某一组,然后在该组内的任意行存放。

找到组之后,主存中的块是可以在这个组中的任意行存放的。即在组内是全相联映射。

Q&A Section

Q: Cache中块的数据块(data block)和主存中的数据信息是同种东西吗

A: 是的,Cache中的数据块(Data Block)和主存中的数据信息是同种东西。Cache的主要目的就是存储主存中的数据块,以便CPU可以更快地访问这些数据。

Q: 当主存块映射cache块时,主存中的区地址,行索引,块内偏移放到cache块中的什么位置?

A: 在主存块映射到Cache块时,主存中的区地址、行索引、块内偏移并不会直接放到Cache块中的某个位置。实际上,主存中的这些信息是用来确定主存块应该映射到Cache的哪个位置。

Q: 块内偏移是什么?

A: 块内偏移用来确定访问块内的哪个字或字节。

Q: 在直接相联映射中,主存块是区地址+行索引+块内偏移,在组相联映射中却是标记+组索引+块内偏移。这样的名称变化只是名称变化吗?为什么有这种变化?

A: 在不同的Cache映射策略中,我们使用不同的术语来描述主存地址的不同部分。这些术语的变化反映了不同映射策略的特性。

  • 直接相联映射中,主存地址被划分为“区地址”、“行索引”和“块内偏移”。这是因为在直接相联映射中,主存中的每个块都直接映射到Cache的一个特定行,这个行就由行索引来确定。

  • 组相联映射中,主存地址被划分为“标记”、“组索引”和“块内偏移”。这是因为在组相联映射中,主存中的每个块可以映射到Cache的一个特定组,这个组就由组索引来确定。而标记则用于在这个组中找到正确的块。

  • 全相联映射中,主存地址被划分为“标记”和“块内偏移”。这是因为在全相联映射中,主存中的每个块可以映射到Cache的任何位置,所以我们不需要索引。我们只需要标记来确定主存块是否已经在Cache中,以及块内偏移来访问块内的数据。

这些名称的变化并不只是为了改变名称,而是为了反映不同映射策略中主存地址的不同划分方式。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 buynonsense
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信