📜  直写和写回高速缓存

📅  最后修改于: 2021-06-28 09:12:43             🧑  作者: Mango

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

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

我们可以更新缓存中的值并避免昂贵的主内存访问,但这会导致数据不一致问题,因为缓存和主内存都具有不同的数据,这将导致两个或更多共享主内存的设备出现问题(例如多处理器系统)。
这是写透写回的地方

直写:

在写操作中,数据同时更新到缓存和内存。此过程更简单,更可靠。在不频繁写入高速缓存(写入操作的次数较少)时使用。

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

回写:

数据仅在高速缓存中更新,以后再更新到内存中。仅当准备好替换高速缓存行时才更新内存中的数据(根据应用程序,使用Belady的Anomaly,最近最少使用的算法,FIFO,LIFO和其他方法完成高速缓存行的替换)。
回写也称为延迟写入。

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

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

写分配:

在写入分配中,数据从内存加载到高速缓存中,然后进行更新。写分配既适用于写回又适用于写透,但通常与写回配合使用,因为不需要将数据从内存中带到高速缓存中,然后再更新高速缓存和主内存中的数据。因此,直写通常与不写分配一起使用。

各地写:

此处将数据直接写入/更新到主内存中而不会干扰高速缓存。当不立即再次使用数据时,最好使用此方法。