场景:
- 缓存 (L1) 大小 (
CS
): 32kB - 线号(
LS
):64B - 关联性 (
A
): 8 - 套装尺寸 (
SS
): 512B (A
*LS
) - 套数 (
S
): 64 (C
/SS
) - 读/写对象 (
O
) 的大小大于LS
假设(如果无效,请纠正我):
- 虚拟内存块(大小为 4kB (
SS
*A
) 表示为B
)以类似模的方式映射到集合。换句话说,地址0x0 : 0xFFFF
(块索引(BI
)0)映射到集合0,0x1000 : 0x1FFF
(BI
1)映射到1,等等。 - 读取/写入请求(不使用非临时写入/读取)给定地址
A
需要找到它BI
,然后将其移动到分配的集合。例如,A
= 0x4600A 将有BI
= 70。这BI
映射到集合 6 (BI
%S
)。 - 为了正确(没有错位)读/写
O
要缓存的对象( ),需要对齐LS
。
问题:
- 是否会
O
在缓存中串行对齐,或者它可以占用(例如)空闲插槽 0 & 4 & 5,而不是 0 & 1 & 2? O
从缓存中检索分区的成本(惩罚)是多少?假设O
没有划分为多个B
.- 与上面相同的问题,但如果将 when
O
放在两个中B
,则使用两组。 - 如果
O
尺寸大于SS
(512B)会怎样?会不会把数据移到L2,一步步把数据移到L1?它会使用其他套装吗? - 如果 L2(和 L3 就此而言)对于所有数据来说都太小了怎么办?