DMA数据处理采用连续内存
来源:互联网 发布:淘宝包邮规则 编辑:程序博客网 时间:2024/04/29 13:18
DMA传输,是由PCI卡直接将数据送达虚拟内存地址(virtual address),不用CPU中转。
主要操作包括:
1 指定一片虚拟内存地址
2 将地址和大小告知PCI(例如通过将这两样存在PCI卡的寄存器中)
3 PCI卡收到数据后,读2中设置,将PCI卡中物理存储的数据(例如硬件队列中的数据)放入虚拟内存。
4 应用程序读取虚拟内存中数据后做处理。
在DMA中,需要注意步骤1中,虚拟内存的分配方式。
分配方式主要是两种:连续分配和断续分配。
连续分配:分配完整的一段内存。
断续分配:CPU分配一段,但不保证没人用时不会被别人占占用。
这断续分配在频繁读写DMA的场景下易于出问题。出问题的原因不在于DMA处理速度,即不在于步骤3.,而在于DMA已经完成步骤3,正在进行步骤4的时候。在步骤4时,就要警惕有人趁机插一腿使用内存,复写了(overwrite)了一部分虚拟内存。
建议频繁读写DMA时,使用连续内存(例如指定page几页专门用于DMA用)分配步骤1所需内存。。
0 0
- DMA数据处理采用连续内存
- DMA分配内存,能用那些函数,那些不能用?why? 因为 DMA物理地址要连续
- 编写了个videobuf-contig.c以获得物理上连续的大的内存(DMA)
- 编写了个videobuf以获得物理上连续的大的内存(DMA)
- 用ADC连续采集11路模拟信号,并由DMA传输到内存
- Oracle连续数据处理示例
- DMA直接内存访问
- 直接内存访问(DMA)
- 内存映射与DMA
- 直接内存访问(DMA)
- 内存映射和DMA
- 直接内存访问--DMA
- 内存映射和DMA
- 直接内存访问(DMA)
- 直接内存访问(DMA)
- LDD DMA访问内存
- 直接内存访问(DMA)
- 直接内存访问DMA
- 有一点想改变
- R语言包_dplyr_2
- 黑马程序员之多线程
- iOS开发之UI基础--三种简单的动画设置
- HDU 5336 Segment Game
- DMA数据处理采用连续内存
- 第二周项目0-宣告“主权”
- mongo 常用的命令
- 计算器循环版
- 1553 时钟
- Swift 学习笔记 4-函数
- 【Python基础】Python面向对象 - 3 - 新类,静态方法,类方法,实例方法
- 关于phpStudy测试php时遇到解析不了的解决办法
- Reverse Words in a String