【问题标题】:Designing a virtual memory with TLB使用 TLB 设计虚拟内存
【发布时间】:2013-12-03 08:38:28
【问题描述】:

我遇到了以下问题,我不确定如何解决:

考虑一个具有以下属性的虚拟内存系统:

· 35 位虚拟地址

· 16 KB 页面

· 32位物理地址

假设这个虚拟内存系统是用一个 八路组关联 TLB。 TLB共有256个TLB条目, 每个 TLB 条目代表一个虚拟到物理页号 翻译。

64 KB 数据缓存是一种双向组关联缓存。数据 缓存的块大小为 128 字节。

使用以某种方式绘制的图形显示虚拟到物理的映射 类似于下图(但需要进行所有必要的更改 用于 TLB 和本题中指定的数据缓存)。

指定所有进出的字段和信号的宽度(如 以及由 TLB 和数据缓存完成的比较次数 每个内存地址。

我对如何计算一些参数有点想法,但除此之外,我迷路了。

例如,由于虚拟地址是 35 位宽,我知道我有 2^35 个可能的虚拟地址。

由于我有 16KB 页面 (16*1KB = 2^4 * 2^10 = 2^14KB),我知道我必须有 (3^35)/(2^14) = 2^21 个页表条目.

最后,我知道我的缓存大小是 64 * 1KB = 2^16 字节的缓存。

但是在这些步骤之后我迷路了。任何帮助将不胜感激。

【问题讨论】:

  • 对不起,虚拟地址是 32 位宽还是 35 位?
  • 35 位。我知道,这很尴尬
  • 对不起,我的错误,我现在注意到我的错字了。固定
  • 在 ComputerScience.SE 上交叉发布:cs.stackexchange.com/q/18313/755
  • @D.W.这是我之前在 cs 堆栈交换中提到的旧问题(在按照您的建议进行编辑之前)。现在我对这个话题有了更好的理解,我觉得有必要发布一个新版本。

标签: caching computer-architecture virtual-memory tlb


【解决方案1】:

页偏移由页内寻址的位组成,TLB 不翻译。对于 16 KiB 页面,页面偏移量为 14 位。

对于 35 位的虚拟地址,这会留下 21 位来索引 TLB 中的集合并标记该集合中的条目。由于 TLB 有 256 个条目,每个集合有 8 个条目(8 路关联),因此有 32 个集合,需要 5 位来索引一个集合。这为标签留下了 16 位。

物理页号的大小等于物理地址的大小减去页偏移量的大小:32 - 14 = 18 位。

说明既不是直接映射也不是完全关联的 TLB 比示例完全关联的 TLB 更复杂,因为这样会增加集合索引的维度。这可以通过覆盖方式来处理,以便一种方式(索引维度)完全可见。这是一个 4 路结构的 ASCII 艺术版本,每路 8 个条目:

               +----------+----------+
             +----------+----------+ |  
           +----------+----------+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+ |
         |          |          |-+ |-+
         +----------+----------+ |-+
         |          |          |-+
         +----------+----------+

对于 32 个集合,可能希望使用省略号 (...) 来表示其中的大部分。类似地,省略号可用于暗示某个方式内的条目(而不是必须绘制数百个条目)。

对于缓存,假设访问 4 字节,字节偏移量将是 2 位。块偏移用于索引缓存块内的 4 字节块。对于 128 字节的缓存块,索引特定字节需要 7 位,因此索引 4 字节块只需 5 位。

2 路关联 64 KiB 将有 32 KiB 在每个路。对于 128 字节的缓存块,这意味着每路将有 256 个块,因此需要 8 位物理地址(超出块和字节偏移量)来索引特定集(每路内的缓存块)。这是缓存索引。

给定一个 32 位物理地址、8 位缓存索引、5 位块偏移和 2 位字节偏移,标签将是 17 位 (32 - 8 - 5 - 2)。

【讨论】:

  • 谢谢你的回答,现在有点清楚了。但是,我提供的图表是完全关联的,而不是直接的(TLB 中的每个块都有一个比较器)。
  • @audiFanatic 啊,我没有注意到它是完全关联的;我应该多加注意的。无论如何,想要隐藏哪个维度有些随意。
  • +1 为 3D Ascii 艺术,期待有人询问 DRAM 结构:)
猜你喜欢
  • 2012-09-23
  • 2012-01-18
  • 2013-03-15
  • 2018-11-12
  • 2013-10-21
  • 2018-07-09
  • 2014-12-16
  • 1970-01-01
  • 2012-02-07
相关资源
最近更新 更多