Linux kernel Linux内核中有数据共享机制吗?

Linux kernel Linux内核中有数据共享机制吗?,linux-kernel,kernel,linux-device-driver,embedded-linux,Linux Kernel,Kernel,Linux Device Driver,Embedded Linux,linux内核中是否存在任何数据共享机制?是否也需要这样做?内核中有类似IPC的东西吗?有很多:管道、unix套接字、sysv消息队列、posix消息队列、共享内存等等 共享内存是最快的。管道只在一个方向上工作,而unix套接字在两个方向上都工作。unix套接字与普通ip套接字类似,它们使用udp或tcp。使用消息队列,您可以在以后或在其他进程中写入队列并检索数据。所有内核内存页都可以在任何内核代码中使用(用户空间进程页之间没有类似的划分)。因此,您基本上可以在一个内核文件中声明一些全局变量,并

linux内核中是否存在任何数据共享机制?是否也需要这样做?内核中有类似IPC的东西吗?

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


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

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