在内核和用户空间之间进行通信的理想和最快方式是什么?

Met*_*hos 8 linux linux-kernel

我知道通过内核和用户空间程序之间的以下接口可以实现信息交换

  • 系统调用

  • 读写控制

  • / proc&/ sys

  • 网络链路

我想知道

  • 如果我错过了任何其他界面?

  • 哪一种是交换大量数据的最快方式?(如果有任何文件/邮件/解释支持我可以参考的这种声明)

  • 推荐哪种方式进行沟通?(我认为它的netlink,但仍然希望听到意见)

sho*_*nex 7

交换大量数据的最快方法是内存映射.可以在设备文件上使用mmap调用,然后相应的内核驱动程序可以决定将内核内存映射到用户地址空间.一个很好的例子是Video For Linux驱动程序,我想帧缓冲驱动程序的工作方式相同.有关V4L2驱动程序如何工作的详细说明,您有:

你不能为大量数据打败内存映射,因为没有涉及操作的memcopy,物理底层内存在内核和用户空间之间有效共享.当然,就像在所有共享内存机制中一样,您必须提供一些同步,以便内核和用户空间不会认为它们同时具有所有权.


Aid*_*ell 6

内核和使用空间之间的共享内存是可行的.

http://kerneltrap.org/node/14326

有关说明/示例.

您还可以使用非常快的命名管道.

所有这些实际上取决于您共享的数据,是否同时访问以及数据结构如何.对于简单数据,调用可能就足够了.

Linux内核/ proc FIFO /管道

可能也有帮助

祝好运


Den*_*jan 5

您还可以考虑使用中继(以前称为relayfs):

“基本上Relayfs只是一堆每个cpu内核缓冲区,可以从内核代码有效地写入这些缓冲区。这些缓冲区表示为可以映射的文件,可以在用户空间中直接读取。该设置的目的是为了提供了最简单的机制,允许潜在的大量数据记录到内核中并“中继”到用户空间。”

http://relayfs.sourceforge.net/