为什么需要CPU cache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题(结构:cpu -> cache -> memory)。 CPU cache有什么意义?cache的容量远远小于主存,因此出现cache miss在所难免,既然cache不能包含CPU所需要的所有数据,那么cache的存在真的有意义吗?当然是有意义的——局部性原理。 A. 时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问; B. 空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问;
场景:当前CPU中的数据状态是invalid,表示当前CPU中是脏数据,不可用,其他CPU可能有数据、也可能没有数据; LR:因为当前CPU的cache line数据不可用,因此会发生RR操作,此时的情形如下。 A. 如果其他CPU中无数据则状态修改为E; B. 如果其他CPU中有数据且状态为S或E则状态修改为S; C. 如果其他CPU中有数据且状态为M,那么其他CPU首先发生RW将M状态的数据写回主存并修改状态为S,随后当前CPU读取主存数据,也将状态修改为S; LW:因为当前CPU的cache line数据无效,因此发生LW会直接操作本地cache,此时的情形如下。 A. 如果其他CPU中无数据,则将本地cache line的状态修改为M; B. 如果其他CPU中有数据且状态为S或E,则修改本地cache,通知其他CPU将数据修改为I,当前CPU中的cache line状态修改为M; C. 如果其他CPU中有数据且状态为M,则其他CPU首先将数据写回主存,并将状态修改为I,当前CPU中的cache line转台修改为M; RR:监听到总线发生RR操作,表示有其他CPU读取内存,和本地cache无关,状态不变; RW:监听到总线发生RW操作,表示有其他CPU写主存,和本地cache无关,状态不变;