📜  在缓存中直写和回写

📅  最后修改于: 2021-09-27 14:34:29             🧑  作者: Mango

先决条件 – 多级缓存组织
缓存是一种将数据副本临时存储在可快速访问的存储存储器中的技术。缓存将最近使用的单词存储在小内存中以提高访问数据的速度。它充当 RAM 和 CPU 之间的缓冲区,从而提高处理器可用数据的速度。

每当处理器想要写入一个字时,它都会检查它想要写入数据的地址是否存在于缓存中。如果地址存在于缓存中,即Write Hit

我们可以更新缓存中的值,避免昂贵的主存访问。但这会导致数据不一致问题。由于缓存和主存都有不同的数据,这将导致两个或多个设备共享主存的问题(如多处理器系统)。
这就是直回写的用武之地。

直写:

在直写中,数据同时更新到缓存和内存。这个过程更简单,更可靠。当没有频繁写入缓存时使用(写入操作次数较少)。

它有助于数据恢复(在停电或系统故障的情况下)。数据写入将经历延迟(延迟),因为我们必须写入两个位置(内存和缓存)。它解决了不一致问题。但它质疑在写操作中使用缓存的优势(因为使用缓存的全部目的是避免多次访问主内存)。

回写:

数据只在缓存中更新,稍后更新到内存中。仅当缓存行准备好替换时才更新内存中的数据(缓存行替换使用 Belady 异常、最近最少使用算法、FIFO、LIFO 和其他取决于应用程序来完成)。
回写也称为延迟写。

脏位:缓存中的每个块都需要一个位来指示缓存中存在的数据是否被修改(脏)或未修改(干净)。如果是干净的,则无需将其写入内存。它旨在减少对内存的写操作。如果缓存失败系统失败或断电,修改后的数据将丢失。因为如果丢失,几乎不可能从缓存中恢复数据。

如果写入发生在 Cache(Write Miss) 中不存在的位置,我们使用两个选项, Write AllocationWrite Around

写分配:

在写入分配中,数据从内存加载到缓存中,然后更新。写分配适用于回写和直写。但它通常与回写一起使用,因为不需要将数据从内存带到缓存,然后更新缓存和主存中的数据。因此,Write Through 通常与 No write Allocate 一起使用。

写周围:

这里的数据是直接写入/更新到主存而不干扰缓存。最好在数据不立即再次使用时使用它。