某机主存容量为128MB, Cache 容量为32KB,主存与 Cache 均按64B的大小分块 分别写出主存与 Cache 采用直接映像和全相联映像时主存与 Cache 地址的结构格式并标出各个字段的位数 若 Cache 采用组相联映像,每组块数为4块。写出主存与 Cache 地址的结构格式并标出各个字段的位数。并 回答一个主存块可以映像到多少个 Cache 块中?一个 Cache 块可与多少个主存块有对应关系
时间: 2023-05-19 13:06:34 浏览: 119
对于直接映像的主存与 Cache,主存地址结构为:Tag(高位)+ Index(中位)+ Offset(低位),其中 Tag 为主存块的标记,Index 为主存块在 Cache 中的索引,Offset 为主存块内部的偏移量。在本题中,主存容量为128MB,即2^27B,Cache 容量为32KB,即2^15B,均按64B的大小分块,因此主存共有2^22个块,Cache 共有2^13个块。由于直接映像的 Cache 中每个索引只对应一个主存块,因此 Index 的位数为13,Offset 的位数为6,Tag 的位数为8。
对于全相联映像的主存与 Cache,主存地址结构为:Tag(高位)+ Offset(低位),其中 Tag 为主存块的标记,Offset 为主存块内部的偏移量。由于全相联映像的 Cache 中每个块都可以对应主存中的任意一个块,因此 Tag 的位数为22,Offset 的位数为6。
对于组相联映像的 Cache,每组块数为4块,因此共有2^11组。主存地址结构与直接映像相同,Tag(高位)+ Index(中位)+ Offset(低位),其中 Tag 的位数为13,Offset 的位数为6,Index 的位数为11-2=9,因为每组有4块,需要2位来表示块内的索引。因此,一个主存块可以映像到4个 Cache 块中,一个 Cache 块可以与4个主存块有对应关系。
相关问题
已知主存容量,cache容量,分块时每块容量大小,求cache,主存块数,主存的块采取某种映像方式对应cache第几块
假设主存大小为 $M$ 字节,Cache 大小为 $C$ 字节,每个块大小为 $B$ 字节,则:
- Cache 块数为 $C/B$。
- 主存块数为 $M/B$。
- 主存的块采取直接映射方式,则主存中任意一块对应 Cache 中的某一块,可以使用下面的公式计算:$$\text{Cache 块号} = \text{主存地址} \bmod \text{Cache 块数}$$
- 主存的块采取全相连映射方式,则主存中任意一块对应 Cache 中的某一块,可以使用下面的公式计算:$$\text{Cache 块号} = \text{主存地址} \bmod \text{Cache 块数}$$
- 主存的块采取组相联映射方式,则主存中任意一块对应 Cache 中的某一块,可以使用下面的公式计算:$$\text{Cache 块号} = (\text{主存地址} \bmod (\text{组数} \times \text{每组块数})) \div \text{每组块数} \times \text{组长} + (\text{主存地址} \bmod \text{每组块数})$$ 其中,$\text{组数}=\text{Cache 块数}/\text{每组块数}$,$\text{组长}=B\times \text{每组块数}$。
需要注意的是,在实际的计算机系统中,Cache 的映射方式通常是通过硬件实现的,而不是通过软件计算的方式来实现的。
主存与cache分块的计算
主存和Cache的分块大小通常是2的幂次方,这是因为计算机中的数据是以二进制的形式存储的,而2的幂次方可以方便地表示二进制中的位数。
假设主存的大小为2^20个字节,也就是1MB,而Cache的大小为2^16个字节,也就是64KB。如果我们将Cache分成大小为2^6个字节的块,那么Cache的块数就是2^10个,即64KB/64B=1024。
当CPU请求数据时,Cache会先检查自己中是否存在这个块,如果存在,就可以直接从Cache中读取数据。如果不存在,就需要从主存中加载这个块到Cache中。假设CPU要访问地址为0x12345678的数据,那么Cache会将这个地址的高20位作为标签,用于查找Cache中是否存在这个块,同时将这个地址的低6位作为块内偏移量,用于定位这个数据在块内的位置。
因此,在计算机中,主存和Cache的分块大小选择是根据硬件实现和性能需求来确定的,一般情况下,分块大小越小,能够提高Cache的命中率,但同时也会增加Cache的管理开销。