浅析Linux设备DMA机制:DMA内存映射

概述

现代计算机系统中,CPU访问内存需要经过Cache,但外部设备通常不感知Cache的存在,因此CPU和外设在访问DMA内存时,必须谨慎处理内存数据的一致性问题。为了处理这种一致性问题,同时为了兼顾多种设备类型,Linux系统会采用不同的规则来映射DMA内存,开发者遵循这套规则对DMA内存进行操作。

DMA与Cache一致性

DMA内存中的数据会涉及到CPU和设备的共同访问,区别在于CPU通常经过Cache访问内存,但常规的设备通常不会感知Cache的存在。因此,CPU写入的数据可能因为还存在Cache中而未及时刷入内存,从而导致设备没有DMA到最新的数据;反过来,设备已经向设备DMA了新的数据,但CPU可能仍然在使用Cache中旧的数据。
在这里插入图片描述
针对这种DMA与Cache间数据一致性的问题,不同的体系结构有着不同的处理策略,但总体上来说无外乎两大类方式:一是在硬件层面予以保证,即设备硬件支持Cache一致性协议;另外就是通过软件管理来维护Cache的一致性,具体的手段包括禁用Cache、手动处理Cache的同步等。

Cache一致性设备

根据硬件是否支持Cache一致性,可以将设备分成两类:

  • Cache Coherence设备:设备之间的读写不需要关心cache的一致性问题,硬件将保证数据一致性,比如连接在ARM CCI端口上的设备就是Cache Coherence设备;
  • Non-Coherence设备:需要额外的软件配置或操作(Flush/Invalidate)等操作来确保数据一致。

对于Non-Cohenrence设备,软件可以通过两种方式实现一致性:

  • 方式1:将DMA内存页表属性配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值