例如,如果我写入特定的内存位置(例如:DMA传输),它在缓存中的效果如何?系统如何确保内存和缓存之间的一致性
4
A
回答
1
缓存是一个CPU功能;如果通过CPU写入内存,缓存将被更新并保持一致。
如果您以某种其他方式写入内存(例如,如您所建议的DMA传输),您将需要(可能)事先刷新缓存,然后告诉CPU缓存无效。你如何做到这一点取决于你的系统 - 例如见x86的INVD和WBINVD。
两个很好的文章,在高速缓存一致性和DMA读是Understanding Caching和Using DMA(两者均由詹姆斯Bottomley的,发表在Linux Journal上;在问题117,2004年1月“DMA”的问题121,2004年5月的“缓存”)。
+0
非常感谢你为这些文章。他们看起来非常好。另外还有一篇关于内存映射IO和PCI的文章? – brett 2010-09-29 04:36:24
0
需要注意的一件事情:INVBD和WBVD指令是privlidged指令,因此您无法直接从用户空间运行它们。
相关问题
- 1. Akka.Net和缓存一致性
- 2. 使用PHP的用户缓存和系统缓存之间的区别APC
- 3. 将JSON保存到系统缓存中
- 4. 系统间缓存和MongoDB比较
- 5. “内存缓存”和“内存池”之间的区别
- 6. 确保将数据缓存在after_commit挂接时的一致性
- 7. 缓存内容,内存vs文件系统(PHP和Apache)
- 8. 的Java缓存系统和静态HashMap的存储 - 性能
- 9. 如何确保Breeze缓存不会保留在本地内存
- 10. 如何在系统间缓存中创建唯一的GUID?
- 11. 缓存一致性和竞争条件
- 12. __threadfence()和L1高速缓存一致性
- 13. 内存一致性 - 在Java中发生之前的关系
- 14. 系统缓存vs无缓存
- 15. 系统/操作系统缓存与应用程序缓存
- 16. 内存和性能之间的折衷
- 17. 装入系统间缓存数据库
- 18. Windows和系统内存
- 19. 如何在BeginReceive()和EndReceive()函数之后清除系统内存?
- 20. 对操作系统的内存保护
- 21. 系统时间和存储时间之间的区别
- 22. Django缓存系统如何工作?
- 23. Rails:如何缓存系统表数据
- 24. 缓存刷新例程之间的时间不一致
- 25. 服务器之间的二进制内容缓存系统通过NGINX
- 26. Libgdx - 保存系统
- 27. 缓存中两项之间的缓存相关性
- 28. 如何获取系统间缓存中的模式列表?
- 29. Postgresql缓存(内存)性能+如何预热缓存
- 30. Java LockSupport内存一致性
我想说这取决于系统,最好是让它保持系统。通常,您在应用程序中写入的内存是虚拟内存,这是系统对其认为应该使用的任何内存的抽象。 – 2010-09-29 03:25:40