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字节字写入