5

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

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

· 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 字节的缓存。

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

数字

4

1 回答 1

5

页偏移量由在页内寻址且不由 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-way associative 64 KiB 将有 32 KiB 在每一路。对于 128 字节的缓存块,这意味着每路将有 256 个块,因此需要 8 位物理地址(超出块和字节偏移量)来索引特定集(每路内的缓存块)。这是缓存索引。

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

于 2013-11-19T19:04:24.183 回答