内核和用户空间同步

时间:2017-03-17 10:47:41

标签: caching linux-kernel

我的内存区域使用do_mmap_pgoff()remap_pfn_range()映射到用户空间,并且我使用ioremap()将相同的区域映射到内核。

当我从用户空间写入此区域然后从内核空间读取时,我发现并非所有字节都写入了内存区域。

当我从用户空间写入然后从用户读取,然后从内核读取一切正常。从用户空间读取以前所做的更改。

我知道内核和用户空间之间存在缓存或缓冲区。我知道我需要在内存区域实现一些flush-invalidate或buffer dump。

我试图用pgprot_uncached()使这个VMA无法缓存,我试图实现外部缓存范围flush-invalidate,VMA缓存范围刷新,VMA tlb范围刷新但是它都没有像我预期的那样工作。所有flush-inval操作只清除内存区域,但我需要应用从用户空间进行的更改。使用未缓存的内存会减慢数据传输过程。

如何正确地在用户和内核之间进行同步?

0 个答案:

没有答案