【发布时间】: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