目的
为了平衡CPU和内存访问性能的差异性,引入了CPU缓存(高速缓存)。当CPU读取数据时,尽量从CPU缓存中读取数据,而不是每次都从内存中读取数据。
CPU缓存使用原理-局部性原理
程序运行时,对内存数据的访问存局部性的特征。有效的利用这种局部性,可以达到极高的命中率。
- 时间局部性:如果某个数据被访问,大概在不久的将来仍会被访问。
- 空间局部性:如果某个数据被访问,大概它相连的数据会被访问。
问题
- 数据写入CPU缓存中,CPU缓存中和内存中的数据不一致
- 数据写入某一CPU核心缓存中,与其他CPU核心缓存数据不一致
解决方案
- 问题1:
- 写直达
- 如果cpu缓存中存在要写入的数据,更新cpu缓存数据,再更新内存数据
- 如果cpu缓存中不存在要写入的数据,直接更新内存数据
- 写回
- 读请求,如果命中cpu缓存直接返回其数据;未命中先在缓存中分配一块缓存块,判断该块是否是“脏”的,如果是“脏”的将数据写入内存存储中,如果不是“脏”的,直接从下一存储中获取读到缓存块中将“脏”的修改为“未被修改”状态并返回数据
- 写请求,如果命中cpu缓存,直接将数据写入缓存,并标记为“脏”的;若未命中cpu缓存,cpu缓存分配一个缓存块,判断当前的缓存块是否是“脏”的,如果是“脏”的将当前缓存块中的数据写入到下一级存储,并把当前的数据写入到缓存块中,如果不是“脏”的直接写入缓存块中,并标记为“脏”的。
- 写直达
- 问题2