当CPU写入不在缓存中的内存位置时,CPU会做什么?

时间:2013-02-27 08:02:07

标签: memory ram

假设我的程序中物理内存中的内存位置有8个字节long pointer。我的程序很小,可以完全适合缓存。该计划很简单。它只是从/dev/mem中的物理内存映射(通过mmap()调用)任意内存位置,通过该8字节长指针读取和写回该位置。但是,该位置距离我的程序驻留在物理内存中的位置非常远,因此,L1 / L2缓存无法覆盖该地址。

根据文章Getting Physical With Memory(由Gustavo Duarte编写,我无法链接),只有当具有该内存位置的高速缓存行准备好写入RAM时才会发生内存写入:

  

通常,内核将所有RAM内存视为回写,从而产生   最棒的表演。在回写模式下,内存访问的单位是   高速缓存行,Core 2中的64个字节。如果程序读取单个字节   在内存中,处理器加载包含该缓存行的整个缓存行   字节进入L2和L1缓存。当程序写入内存时,   处理器仅修改缓存中的行,但不更新   主记忆。以后,当有必要发布修改后的内容   线路到总线,整个缓存线一次写入

但是如果目标内存位置不在缓存中(如上所述),会立即写入吗?

1 个答案:

答案 0 :(得分:1)

您引用的引用解释了在这种情况下会发生什么 - 如果最近没有访问过内存地址,并且尚未加载到缓存行中,那么您对该位置的读取将导致该内存位置的内容 - 以及可能的周围位置 - 被读入缓存行。一旦进入高速缓存,相关的存储器地址就会发送到这个高速缓存行,直到某个时候主内存被修改后的高速缓存行更新。