1
A
回答
1
的DMA电路往往与主存储器直接运行而不涉及CPU(这是主要的想法,以摆脱做I/O可以在硬件其他地方,从而完成节省CPU周期的CPU)。所以,你可能会碰到cache coherency problems。 Microsoft建议使用flushing I/O buffers when using DMA。
但是有些系统做支持CPU和DMA电路之间的高速缓存一致性协议,就像在多处理器系统中的CPU之间。最终的答案取决于实际的硬件。
1
有三种方法我能想到的:
- 的内存被标记为未带缓存,
- DMA控制器坐标与高速缓存控制器,
- 操作系统保证这会永远不会发生,例如通过确保进程的CPU部分未运行。
这取决于硬件和操作系统的能力。
确保过程未运行时,在多任务操作系统过于怪异,如DMA由一个进程所拥有的内存可能是由过程做一个系统调用,例如触发一个写。可以取消进程并运行其他进程,直到DMA完成。
这可能是过多的约束,以等待I/O设备来完成的,所以DMA控制器可能被复制从进程地址空间到辅助缓冲器中。
所以,如果你有这个地方已经发生的情况下,请简要说明的例子,你已经运行测试。
相关问题
- 1. DMA与高速缓存区别
- 2. Symfony2高速缓存问题
- 3. LINQ到SQL高速缓存的问题
- 4. 问题分布式环境中的defaultCache和缓存(不一致的数据)
- 5. 在64位环境中读取32位高速缓存
- 6. 笨高速缓存控制器问题
- 7. Oracle mapviewer - 高速缓存问题
- 8. 高速缓存和线程问题
- 9. NSURLCache高速缓存响应问题
- 10. 高速缓存持久性
- 11. 点燃高速缓存重新连接问题(高速缓存已停止)
- 12. 虚拟化高可用性解决方案的缓存一致性问题
- 13. 高速缓存后“采取”行动RDD导致只有2%高速缓存
- 14. 禁用高速缓存中的缓存
- 15. wso2 esb高速缓存中介性能
- 16. ASP.NET高速缓存唯一
- 17. 用于DMA的快速缓冲存储器缓冲区
- 18. MySQL高速缓存
- 19. NSFetchedResultsController〜缓存导致问题?
- 20. C#高速缓存未显示存储在高速缓存中的原始值
- 21. 循环展开和数据高速缓存性能
- 22. CakePHP的ORM 3:高速缓存元数据的问题
- 23. AS2提高速度和缓解问题
- 24. SMP中的缓存一致性更新
- 25. 多级高速缓存访问时间
- 26. 高速缓存崩溃者的flashvars问题
- 27. 焦X [2048]和高速缓存行的问题
- 28. 休眠第一级高速缓存
- 29. 休眠一级高速缓存
- 30. .NET序列化和高速缓存问题
在操作系统设置DMA请求之前,'过去的日子'内存的一部分被标记为不可缓存。为什么你认为在你列出的情况下没有发生或不能发生? – gbulmer 2012-04-13 11:27:16
@gbulmer你的意思是一个DMA请求只能处理无法访问的内存区域? – sliter 2012-04-13 11:32:00