我遇到了以下问题,我不确定如何处理它:
考虑具有以下属性的虚拟内存系统:
·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字节的缓存。
但是在这些步骤之后我迷失了。任何帮助将不胜感激。
答案 0 :(得分: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位。
双向关联64 KiB将在每种方式中具有32 KiB。使用128字节高速缓存块,这意味着每种方式将具有256个块,因此需要8位物理地址 - 超出块和字节偏移 - 来索引特定集(每种方式中的高速缓存块)。这是缓存索引。
给定32位物理地址,8位缓存索引,5位块偏移和2位字节偏移量,标签将为17位(32 - 8 - 5 - 2)。