回写与直写缓存?

问题描述 投票:59回答:3

我的理解是两种方法的主要区别在于,在“直写”方法中,数据立即通过高速缓存写入主存,而在“回写”数据则写入“后期”。

我们还需要在“后期”等待内存,那么“直写”的好处是什么?

caching computer-architecture
3个回答
75
投票

直写到主存储器的好处是它简化了计算机系统的设计。通过直写,主存储器始终具有该行的最新副本。因此,当完成读取时,主存储器总是可以使用所请求的数据进行回复。

如果使用回写,有时最新数据位于处理器高速缓存中,有时它位于主存储器中。如果数据在处理器高速缓存中,则该处理器必须停止主存储器回复读取请求,因为主存储器可能具有数据的陈旧副本。这比直写更复杂。

此外,直写可以简化缓存一致性协议,因为它不需要修改状态。 “修改”状态记录缓存必须在缓存行无效或逐出之前写回缓存行。在直写中,高速缓存行总是可以无效而无需回写,因为内存已经具有该行的最新副本。

还有一件事 - 在写回内存映射I / O寄存器的回写体系结构软件上,必须采取额外步骤以确保立即从缓存中发送写入。否则写入在核心外部不可见,直到另一个处理器读取该行或该行被驱逐。


4
投票

让我们借助一个例子来看看这个。假设我们有一个直接映射的缓存,并使用了回写策略。因此,我们在高速缓存行中有一个有效位,一个脏位,一个标记和一个数据字段。假设我们有一个操作:写A(其中A映射到缓存的第一行)。

发生的事情是来自处理器的数据(A)被写入高速缓存的第一行。有效位和标记位已设置。脏位设置为1。

脏位只是表示自上次进入缓存以来是否写入了缓存行!

现在假设执行另一个操作:读取E(其中E也映射到第一个缓存行)

由于我们有直接映射缓存,因此第一行可以简单地替换为将从内存中带来的E块。但是由于最后写入行的块(块A)尚未写入存储器(由脏位指示),因此高速缓存控制器将首先向存储器发出写回以将块A传输到存储器,然后它将通过向存储器发出读操作来替换块E的行。脏位现在设置为0。

因此,回写策略不保证块在内存及其关联的缓存行中是相同的。然而,每当要更换线路时,首先执行回写。

通读政策恰恰相反。据此,内存将始终具有最新数据。也就是说,如果写入高速缓存块,则也将相应地写入存储器。 (不使用脏位)


1
投票

回写是一个更复杂的,需要复杂的高速缓存一致性协议(MOESI),但它是值得的,因为它使系统快速和有效。

Write-Through的唯一好处是它使得实现非常简单,并且不需要复杂的高速缓存一致性协议。

© www.soinside.com 2019 - 2024. All rights reserved.