假设某计算机按字编址[1], Cache有 4 个行,Cache和主存之间交换的块大小为 l 个字。若 Cache的内容初始为空,采用2 路组相联映射[2]方式和LRU替换算法[3],当访问的主存地址依次为0,4,8,2,0,6,8,6,4,8 时
时间: 2023-09-27 22:05:41 浏览: 432
Cache和主存的三种映射方式
好的,您的问题是关于 Cache 的。根据您的描述,这个 Cache 采用 2 路组相联映射方式和 LRU 替换算法,并且 Cache 和主存之间交换的块大小为 l 个字。现在您需要问的是,当访问的主存地址依次为0,4,8,2,0,6,8,6,4,8 时,这个 Cache 的命中率是多少?
首先,我们需要知道这个 Cache 的具体情况。根据您的描述,这个 Cache 有 4 个行,每个行可以存储 l 个字,因此 Cache 的容量为 4*l 个字。由于采用 2 路组相联映射方式,每个组内有 2 个行,因此共有 2 个组,每个组可以存储 2*l 个字。
接下来,我们来模拟一下访问过程。假设每个字的大小为 1 个字节,主存地址为十六进制,那么访问过程如下:
1. 访问主存地址0x0,需要从主存中读取 1 个块(大小为 l 个字),因为此时 Cache 为空,因此需要将这个块存储到 Cache 中。由于采用的是 LRU 替换算法,所以这个块被存储到了第 1 行。
2. 访问主存地址0x4,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 0,因此需要在第 1 组中查找。在第 1 行中没有找到这个块,因此需要将这个块存储到第 1 行,并将第 1 行的标记位设置为 0。
3. 访问主存地址0x8,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 0,因此需要在第 1 组中查找。在第 1 行中没有找到这个块,因此需要将这个块存储到第 1 行,并将第 1 行的标记位设置为 0。
4. 访问主存地址0x2,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 0,因此需要在第 1 组中查找。在第 1 行中没有找到这个块,因此需要将这个块存储到第 1 行,并将第 1 行的标记位设置为 0。
5. 访问主存地址0x0,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 1,因此需要在第 1 行中查找。在第 1 行中找到了这个块,因此可以直接从 Cache 中读取。
6. 访问主存地址0x6,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 0,因此需要在第 1 组中查找。在第 1 行中没有找到这个块,因此需要将这个块存储到第 1 行,并将第 1 行的标记位设置为 0。
7. 访问主存地址0x8,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 1,因此需要在第 1 行中查找。在第 1 行中找到了这个块,因此可以直接从 Cache 中读取。
8. 访问主存地址0x6,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 1,因此需要在第 1 行中查找。在第 1 行中找到了这个块,因此可以直接从 Cache 中读取。
9. 访问主存地址0x4,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 1,因此需要在第 2 行中查找。在第 2 行中找到了这个块,因此可以直接从 Cache 中读取。
10. 访问主存地址0x8,需要从主存中读取 1 个块(大小为 l 个字),由于这个块的标记位是 1,因此需要在第 1 行中查找。在第 1 行中找到了这个块,因此可以直接从 Cache 中读取。
由此可见,这个 Cache 的命中次数为 7 次,总的访问次数为 10 次,因此命中率为 70%。
阅读全文