【问题标题】:Is there any Data sharing mechanism in Linux kernel?Linux内核中是否有任何数据共享机制?
【发布时间】:2015-08-12 12:03:14
【问题描述】:

linux内核中是否存在数据共享机制?这也有必要吗?内核内部有没有类似 IPC 的东西?

【问题讨论】:

  • 所有内核内存页面在任何内核代码中都可用(用户空间进程页面之间没有划分)。因此,您基本上可以在一个内核文件中声明一些全局变量并从外部(从另一个内核文件)使用它。或者您是在询问内核和用户空间之间的共享内存?
  • 什么和什么之间的数据共享?
  • @Sam:是的,我的问题只在内核内部。与用户空间无关。在内核中,我们可以创建 kthreads。如果两个 kthread 必须共享数据,或者它们必须共享来自任何其他内核模块的数据。机制是什么。而且你又给了我一个问题,它是如何在内核空间和用户空间之间发生的。这是通过 mmap 发生的吗?
  • @SandeepTayal 在这种情况下,您只需将数据(变量)从一个文件提供给另一个文件,例如将此变量设为全局变量,或通过某个函数将其作为参数传递。然后你只需要关心多线程,这意味着你需要在每个线程中锁定这个变量,使用一些锁定机制,如互斥锁、自旋锁、信号量、RCU、原子操作等。我建议你阅读“Linux设备驱动程序” ,第 3 版”和“Linux 内核开发,第 3 版”了解详细信息。没有必要在这里重复那些书。底线——你可以在内核的任何地方访问任何内核页面
  • 根据我的经验,共享内存是在 Linux Kernel 中实现 IPC 的最佳方式。

标签: linux-kernel kernel linux-device-driver embedded-linux


【解决方案1】:

其中有很多:管道、unix 套接字、sysv 消息队列、posix 消息队列、共享内存等......

共享内存是最快的。管道仅在一个方向上工作,但在两个方向上都有 unix 套接字。 unix 套接字像普通的 ip 套接字一样工作,它们使用 udp 或 tcp。使用消息队列,您可以写入队列并稍后或在其他进程中检索数据。

【讨论】:

  • OP 询问内核,哪里不需要使用用户空间设施(它只是一个负担)
  • 你是在破解linux内核的时候说话?如果是这样,你可以使用我认为的 skb(内核空间中的套接字)。但更好地使用共享内存要快得多,并通过自旋循环同步访问它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 2014-01-22
  • 2016-04-19
  • 1970-01-01
  • 2012-07-23
  • 2020-06-17
  • 2021-09-30
相关资源
最近更新 更多