【问题标题】:linux kernel space and user space communication with high efficiencylinux内核空间和用户空间高效通信
【发布时间】:2014-09-17 12:12:58
【问题描述】:

关于题目,内核需要向用户空间传输一些数据(小于1KB),而用户空间在收到内核的数据后也会传输一些数据(小于1KB)。我想知道一些效率高的解决方案。现在,我已经处理了netlink(双向通信)的问题。并且,我想使用信号(内核到用户)和系统调用来更有效地处理问题。可惜实时信号只能携带4B的数据,太小了。有没有更好的办法来解决这个问题?

【问题讨论】:

    标签: performance kernel communication


    【解决方案1】:

    您可以选择共享内存吗?

    【讨论】:

    • 我使用共享内存写入和读取数据。但是我没有很好的方法来实现通信(内核和用户空间)!谢谢!
    • 好的,所以您正在寻找一种方法,通过该方法用户空间应用程序知道内核空间中有可用数据,反之亦然。为了让用户空间应用程序有效地等待内核空间中的数据可用性,您可以使用带有等待队列的 IOCTL 调用在数据不可用时使进程进入睡眠状态。对于内核,您可以只使用 IOCTL 调用来告诉内核数据刚刚写入缓冲区。
    • 感谢您的建议!但我需要双向通信。现在,也许 netlink 是满足我需求的唯一方法。
    • 能否详细说明双向通信?与共享内存相比,Netlink 会有很多开销。任何你觉得 Nelink 比共享内存更能达到目的的原因。
    • 共享内存最好,但是当你把数据放到共享内存中时(比如内核放数据),用户空间并不知道内核已经放了数据。所以我们需要使用netlink进行通知。现在我的项目使用netlink进行通知和共享内存进行数据传输。你能知道吗?
    【解决方案2】:

    在我的项目中,我最终选择了netlink进行通信(传输命令)和mmap用于发送数据。linux内核和用户空间之间的通信有一些方法。点击here。我的项目最好的方法是netlink。信号不好,因为每次只能发送4B数据!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2012-07-15
      相关资源
      最近更新 更多