【dma 和 cache的一致性】番外篇
我们在思维上,一定要想到 的接口,只是一个前端,它具体的实现是和硬件有关系的,是和平台有关系的 。
(1) 下面的例子是 CPU 内部有 保证 cache 一致性的组件,所以 也是可以申请到 带 cache的内存的 。
(2) DMA - (DMA引擎是否支持聚集散列) -- 不需要物理内存连续 ,流式映射 。
DMA - (DMA引擎是否支持聚集散列)
:离散(不连续)
:聚合 (连续)
这个时候 DMA的内存就可以是物理不连续的了,可以将 连续的内存中的数据 搬移 到 不连续的内存 。可以将不连续的内存 搬移到 连续的内存 。
硬件上可以连续传送多个 ,不需要物理内存的连续 。
这个时候,如果要进行流式映射,要用到() , 会将 多个不连续的 内存,都从 cache 上 flush一下,或者cache 。
(3) 带 MMU 的 DMA引擎 (叫IOMMU 或者 SMMU)
只是一个前端,后端直接可以跟 buddy 要内存,也可以跟CMA要内存,也可以通过 IOMMU / SMMU 。
IOMMU 或者 SMMU 会 将不连续的物理地址,通过页表映射的方式,统一变成虚拟地址连续的地址,然后给到DMA使用 。
这些都是硬件来做的 。所以 申请到的物理内存是可以不连续的 。
具体的dma的使用,可参考一下:
/.txt
/DMA-API-HOWTO.txt
/DMA-API
/dma/.c
linux下DMA驱动测试代码
- ROS 1 和 ROS 2 的前世、今生、安装使用说明与资料汇总
- 一 javaweb总结--文件上传和下载
- 以下是完整的Kubernetes架构师课程教学大纲,包括实验和参考资料
- 使用OpenCV和Python构建自己的车辆检测模型!
- 《从点子到产品》读书笔记之产品价值和用户痛点
- 磁感应强度和磁场强度的区别 磁感应强度和磁场强度的区别是什么
- ROS2和ROS1常用命令速查与对比
- 中南 湖南大学 计算机,中南大学和湖南大学哪个更好?很多人都猜错了
- 重装Win7后恢复和找回Ubuntu启动项
- k8s里面Service中ClusterIP和NodePort的使用