我被问到了以下问题,我不知道如何解决这个问题:
考虑具有以下属性的虚拟内存系统: ·35位虚拟地址 ·16 KB页 ·32位物理地址 假设这个虚拟内存系统是用八路集关联TLB实现的.TLB共有256个TLB条目,每个TLB条目表示一个虚拟到物理的页号转换. 64 KB的数据缓存是双向集关联缓存.数据缓存的块大小为128字节。 用与下图类似的方式显示虚拟到物理映射(但需要对TLB和本问题中指定的数据缓存进行所有必要的更改)。 指定输入和输出的所有字段和信号的宽度(以及每个内存地址的TLB和数据缓存的比较次数)。
我对如何计算一些参数有了一些想法,但否则,我就迷路了。
例如,由于虚拟地址是35位宽,我知道我有2^35个可能的虚拟地址。
由于我有16 1KB页(16*1KB = 2^4 * 2^10 =2^14 1KB),所以我知道我必须有(3^35)/(2^14) = 2^21页表条目。
最后,我知道我的缓存大小是64 * 1KB = 2^16字节的缓存。
但在这些步骤之后我迷失了方向。任何帮助都将不胜感激。

发布于 2013-11-19 19:04:24
所述页偏移量由页内的地址和TLB未翻译的位组成。对于16个KiB页面,页面偏移量将是14位。
对于35位虚拟地址,这将留下21位用于索引TLB中的集合和该集合中的标记条目。由于TLB有256个条目,每个集合有8个条目(8路关联),因此有32组,需要5位来索引一个集合。这给标签留下了16位。
物理页号的大小等于物理地址的大小减去页偏移量的大小:32-14= 18位。
说明既不是直接映射也不是完全关联的TLB比示例全关联TLB更复杂,因此增加了集索引的维数。这可以通过覆盖方式来处理,这样一个方法(索引维度)是完全可见的。这是一个ASCII艺术版本,一个4路结构,每条路有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)。
https://stackoverflow.com/questions/20077549
复制相似问题