主存地址位数:log2主存容量
地址映射机制
相联存储器:地址本身包含着位置啊可比较的信息啊等内容信息,可根据区分地址内容进行寻址
主存地址 = 块地址 + 块内偏移地址 = (Tag + Index) + 块内偏移地址
cache结构
- 好多行
- 每行与主存块大小相等
- 每行 = tag + data + valid + dirty
三种映射方式
- 全相联:cache行号 = random(内存块号)
- 直接相联:cache行号 = 内存块号 % cache行数
- 组相联:两者结合。8行1路组相联就是全相联,8行8路组相联就是直接相联
1. 全相联映射
- 主存分块,Cache行 (Line),两者大小相同
- 映射算法:主存的数据块可映射到Cache任意行, 同时将该数据块地址对应行的标记存储体中保存
- 例如:
- 设每块4(22)个字,主存大小为1024(210)个字
- 则第61 个字的主存地址为: 00001111 01 (块号 块内地址)(前面8位,后面2位)
- 主存分块后地址就从一维变成二维
-
特点
- Cache利用率高
- 块冲突率低
- 淘汰算法复杂
-
应用场合
- 小容量Cache
2. 直接映射
主存分块,Cache行 (Line),两者大小相同
主存分块后还将以Cache行数为标准进行分区
-
映射算法:
-
Cache共n行,主存第 j 块号映射到Cache 的行号为:
i = j mod n ((块地址)mod(cache中的块数)) 即主存的数据块映射到Cache特定行
-
-
例如:
- 设每块4个字,主存大小为1024个字
- Cache分为4行,主存1个区就有4块
- 第61个字的主存地址为: 000011 11 01 (区号,区内块号,块内地址)
- 主存地址从一维变成三维
- 特点
- Cache利用率低
- 块冲突率高
- 淘汰算法简单
- 应用场合
- 大容量Cache
3. 组相联映射
- 主存分块,Cache行 (Line),两者大小相同
- Cache分组(每组中包k行)
- 主存分块后还将以Cache组数为标准进行分组
-
映射算法
-
Cache共n组,主存第j块号映射到Cache 的组号为:
i = j mod n
即主存的数据块映射到Cache特定组的任意行
-
-
例子:
本例假定K=4(4路组相联映射方式)
设每块4个字,主存大小为1024个字
-
Cache分为4行,第61个字的主存地址为:
0000111 1 01 (组号,组内块号,块内地址)
主存地址从一维变成三维
K=1的组相联就是直接相联
K=存储器行数 的组相联就是 全相联映射
计算题
某计算机的Cache共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节,按字节编址。主存129号单元所在主存块应装入到的Cache组号是( )(组号从0开始编号)
解:主存块大小:32字节,则字块内地址的位数:log2 32 = 5
Cache分组数量:16/2 = 8,则组地址位数:log2 8 = 3
129(10) = 1000 0001(2),它的组号应为100(2) = 4(10)某计算机的Cache共有8块,采用直接映射,每个主存块大小为32字节(按字节编址)。主存129号单元所在主存块应装入到的Cache块号是( )(块号从0开始编号)
解:主存块大小:32字节,则字块内地址的位数:log2 32 = 5
Cache分组数量:8,则组地址位数:log2 8 = 3
129(10) = 1000 0001(2),它的组号应为100(2) = 4(10)