代码之家  ›  专栏  ›  技术社区  ›  Methos

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

  •  7
  • Methos  · 技术社区  · 16 年前

    • /程序及/系统

    • 网络链接

    我想知道

    • 如果我错过了任何其他接口?

    • 哪一个是最好的 推荐

    6 回复  |  直到 16 年前
        2
  •  6
  •   Community CDub    8 年前

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

    http://kerneltrap.org/node/14326

    有关说明/示例。

    命名管道 这些都很快。

    这一切都要看情况而定 关于您共享的数据,它是并发访问的,数据的结构是什么样的。对于简单的数据,调用可能就足够了。

    Linux kernel /proc FIFO/pipe

    可能也有帮助

    祝你好运

        3
  •  5
  •   Dénes Tarján    15 年前

    你也可以考虑继电器(以前继电器):

    “基本上,relayfs只是一组可以从内核代码高效写入的每cpu内核缓冲区。这些缓冲区表示为文件,可以在用户空间中对其进行mmap并直接读取。此设置的目的是提供最简单的机制,允许在内核中记录潜在的大量数据并“中继”到用户空间。”

    http://relayfs.sourceforge.net/

        4
  •  2
  •   daniel    16 年前

    很明显,你可以通过复制用户的文件来共享内存,你可以很容易地设置一个字符设备驱动程序,基本上你所要做的就是创建一个文件操作结构,但这并不是最快的方法。 我没有基准,但是moderns系统上的系统调用应该是最快的。我的理由是,这是最适合的。过去是从用户处获取->内核一号必须创建一个中断,然后进入中断表(一个数组),然后找到中断句柄(0x80),然后进入内核模式。这非常慢,然后是.sysenter指令,这基本上使这个过程非常快。没有详细说明,.sysenter立即读取一个寄存器CS:EIP,并且更改非常快。 相反,共享内存需要对内存进行写入和读取,这比从寄存器读取要昂贵得多。

        5
  •  1
  •   Peter Teoh    9 年前

    下面是所有可能接口的可能编译,尽管在某些方面它们彼此重叠(例如,套接字和系统调用都有效地使用系统调用):

    Procfs
    Sysfs
    Configfs
    Debugfs
    Sysctl
    devfs (eg, Character Devices) 
    TCP/UDP Sockets
    Netlink Sockets 
    Ioctl
    Kernel System Calls
    Signals
    Mmap
    
        6
  •  1
  •   bing zhu    6 年前

    大约比syscall慢2倍,if(不是在一个套接字上)大约快5倍