当前位置: 技术问答>linux和unix
关于kernel和用户进程内存映射,进行读写问题
来源: 互联网 发布时间:2016-09-13
本文导语: driver将kernel的一块内存(ring buffer)映射到user空间,用户进程mmap后就能访问映射后内存。 driver只做写操作,用户进程只做读操作。 1.这中情况要加互斥保护? 2.ring buffer中的size(有效数据个数(能否省略? 3.不能省略...
driver将kernel的一块内存(ring buffer)映射到user空间,用户进程mmap后就能访问映射后内存。
driver只做写操作,用户进程只做读操作。
1.这中情况要加互斥保护?
2.ring buffer中的size(有效数据个数(能否省略?
3.不能省略的话怎么让driver和用户进程都能访问size?关于size的互斥保护怎么做?
呵呵,问题挺多,不好意思
driver只做写操作,用户进程只做读操作。
1.这中情况要加互斥保护?
2.ring buffer中的size(有效数据个数(能否省略?
3.不能省略的话怎么让driver和用户进程都能访问size?关于size的互斥保护怎么做?
呵呵,问题挺多,不好意思
|
1、肯定要加互斥保护,要考虑到多进程/多线程访问的情况。
2/3、你用的是什么函数申请的内存?
2/3、你用的是什么函数申请的内存?
|
你是做音视频编解码吧?这么做效率很低的,经过了两次拷贝,而且vmalloc总在分配和释放也不好。
你可以开辟出一块物理内存不由linux管理(比如留出高端的一块内存,mem=原始大小-128M),然后在驱动里把这块物理内存ioremap一下,这样内核态的DMA可以访问,然后再把这块物理内存mmap到用户空间,用户直接读。
你可以开辟出一块物理内存不由linux管理(比如留出高端的一块内存,mem=原始大小-128M),然后在驱动里把这块物理内存ioremap一下,这样内核态的DMA可以访问,然后再把这块物理内存mmap到用户空间,用户直接读。