Caching 对于写回缓存策略,为什么要在写入缓存之前先从内存中读取数据?

Caching 对于写回缓存策略,为什么要在写入缓存之前先从内存中读取数据?,caching,architecture,Caching,Architecture,使用写回缓存进行缓存,对缓存执行写操作并立即返回。只有当数据已经存在于缓存中时,才会出现这种情况。如果数据不在缓存中,则首先从较低的内存中提取数据,然后写入缓存中 我不明白为什么在写入数据之前,首先从内存中获取数据很重要。如果要写入数据,它无论如何都将变得无效 我知道基本概念,但想知道在写入地址之前必须读取数据的原因 我有以下猜测 在多处理器环境中,这样做是为了缓存一致性。其他处理器窥探总线以保持缓存一致性。写入地址的处理器需要获得独占访问权,其他处理器必须了解这一点。 但是,这是否意味着单处理

使用写回缓存进行缓存,对缓存执行写操作并立即返回。只有当数据已经存在于缓存中时,才会出现这种情况。如果数据不在缓存中,则首先从较低的内存中提取数据,然后写入缓存中

我不明白为什么在写入数据之前,首先从内存中获取数据很重要。如果要写入数据,它无论如何都将变得无效

我知道基本概念,但想知道在写入地址之前必须读取数据的原因

我有以下猜测

在多处理器环境中,这样做是为了缓存一致性。其他处理器窥探总线以保持缓存一致性。写入地址的处理器需要获得独占访问权,其他处理器必须了解这一点。 但是,这是否意味着单处理器计算机不需要这样做


谢谢你的猜测几乎是正确的。然而,这种行为也必须在多核单处理器系统中进行

处理器可以有多个内核,因此在写入缓存线(在WB缓存中)时,发出写操作的内核需要以独占方式访问该缓存线。如果要写入的行被标记为脏行,则在使用新信息写入之前,它将被“刷新”到较低的内存中

在多核CPU中,每个核都有自己的一级缓存,每个核都可能存储共享二级缓存线的副本。因此,您需要这种行为来实现缓存一致性

您应该通过阅读协议及其派生来了解更多信息。

简短回答 缓存中未命中的写入可能会或可能不会获取正在写入的块,具体取决于缓存的写入未命中策略(未命中写入时获取与未命中写入时不获取)。 它不依赖于写入命中策略(回写直写

解释 为了简化,假设我们有一个一级缓存层次结构:

-----     ------     -------------
|CPU| <-> | L1 | <-> |main memory|
-----     ------     -------------
--------------------
|CPU | | L1 | |主存|
-----     ------     -------------
L1写入策略为写入未命中时提取

缓存存储数据块。一个典型的L1块的宽度为32字节,也就是说,它包含几个字(例如,8 x 4字节的字)

高速缓存和主内存之间的传输单元是一个块,但CPU和高速缓存之间的传输可以有不同的大小(1、2、4或8字节)

让我们假设CPU执行4字节字写入

  • 如果包含单词的块未存储在缓存中,则表示缓存未命中。整个块(32字节)从主存传输到缓存,然后相应的字(4字节)存储在缓存中

  • 回写缓存会将块标记为(如您所述,并非无效)
  • 直写缓存将更新的字发送到主内存
  • 如果包含该单词的块存储在缓存中,则我们有一个缓存命中。相应的单词将被更新

  • 更多信息: 缓存写入策略和性能。诺曼·P·朱比。