我对缓存同步操作有一些疑问。
使无效:在cpu尝试读取设备更新的一部分内存之前,需要使相应的内存无效。
刷新:在设备读取CPU更新的一部分内存之前,CPU必须将缓存中的内容刷新(写回正确吗?),以便设备从内存中读取具有更新内容的内容。
如果不执行刷新操作,则可能会读取内存中存在的垃圾数据,因为尚未使用写入缓存的内容来更新内存。
请确认我的上述理解是否正确?
什么时候要将冲洗和无效结合起来?我听说在玩设备控制描述符时,我们需要通过组合冲洗和无效来进行同步。为什么这样?
我们是否需要遵循冲洗(flush)和无效(invalidate)之类的顺序?
是否存在一种情况,其中先进行无效操作再执行刷新操作会有用吗?
最佳答案
Flush确实将高速缓存的内容写回到主存储器,而invalidate则将高速缓存的行标记为无效,以便将来进行读取到主存储器。
我认为如果设备正在更新内存块,则将刷新和无效结合起来:刷新将确保设备具有最新的内容,然后无效将确保在设备完成后CPU将读取新内容从记忆里。
关于caching - 缓存-刷新和使操作无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2310520/