已知直接映射 cache,有 16 个块,块大小为 1 个字。对于每次访问,请标识出二进制地址、标 记以及索引。假设 cache 最开始为空,请列出每次访问是命中还是缺失。
时间: 2024-05-21 12:16:03 浏览: 19
好的,这是一道关于计算机组成原理中缓存的题目。假设 CPU 访问的地址为 0x3A67,二进制表示为 0011 1010 0110 0111。由于块大小为 1 个字,所以只需要考虑地址的低 4 位,即 0111,同时由于缓存中有 16 个块,可以用 4 位二进制数表示索引,因此可以将地址分为两部分:标记和索引。
首先,由于缓存最开始为空,第一次访问一定会缺失。所以,CPU 会从主存中读取数据块 0x3A60-0x3A67,并将其存放在索引为 0111 的缓存块中,同时将该块的标记设置为 0011 1010 0110(即地址的高 12 位)。此时,缓存中的状态如下:
| 标记 | 索引 |
| :---: | :--: |
| 0011 1010 0110 | 0111 |
接下来,如果 CPU 再次访问地址 0x3A67,可以将其分为标记和索引两部分。标记为 0011 1010 0110,与缓存中的标记相同,说明这个访问命中了缓存。索引为 0111,对应缓存中的索引,说明该数据块已经存储在缓存中,所以命中了缓存。
如果 CPU 访问的地址为 0x4B67,二进制表示为 0100 1011 0110 0111,同样可以将其分为标记和索引两部分。标记为 0100 1011 0110,与缓存中的标记不同,说明这个访问会缺失。索引为 0111,对应缓存中的索引,但是该索引对应的标记不是要访问的标记,所以也不会命中缓存。CPU 会从主存中读取数据块 0x4B60-0x4B67,并将其存放在索引为 0111 的缓存块中,同时将该块的标记设置为 0100 1011 0110。此时,缓存中的状态如下:
| 标记 | 索引 |
| :---: | :--: |
| 0100 1011 0110 | 0111 |
同理,如果 CPU 访问的地址为 0x3A56,二进制表示为 0011 1010 0101 0110,可以将其分为标记和索引两部分。标记为 0011 1010 0101,与缓存中的标记不同,说明这个访问会缺失。索引为 0101,对应缓存中的索引,但是该索引对应的标记不是要访问的标记,所以也不会命中缓存。CPU 会从主存中读取数据块 0x3A50-0x3A57,并将其存放在索引为 0101 的缓存块中,同时将该块的标记设置为 0011 1010 0101。此时,缓存中的状态如下:
| 标记 | 索引 |
| :---: | :--: |
| 0011 1010 0101 | 0101 |
依此类推,可以分析出每个访问是命中还是缺失。