2016-09-28 62 views
0

程序应该总是回读之前写的内容,即使是最放松的一致性。假设一个程序在core1上运行,并且在写入和后续读取之间移动另一个core2,OS和内存子系统的责任是什么,以确保读取返回先前写入的内容?进程跳转内核时是否刷新了L1缓存?

回答

2

操作系统必须确保程序可见的所有CPU状态在上下文切换时正确保存和恢复。

所以理论上L1必须刷新。
实际上,这取决于平台,例如x86体系结构强制使用cache coherencyMESI,因此每个CPU在其高速缓存中共享内存的一致映像,并且不会刷新L1高速缓存。
但是其他类型的缓存必须刷新,例如TLBs

+0

对,基本上当进程跳转核心并尝试写入时,上一个核心中的缓存行会移到该核心,从而使前一个核心中的行无效? – Saurabh

+0

每个内核都可以监听其他内核的读/写请求,并在访问高速缓存行写入内存后强制它们重试。另外,L3高速缓存a.k.a. LLC通常在内核之间共享。关于MESI的维基百科文章应该有更多的细节。 –