从Linux内核模块共享内存以供用户空间进程访问

时间:2013-01-12 00:59:38

标签: c linux memory kernel

我有一个Linux内核模块,在它的初始化例程中,将一个4KB大小的结构写入内核内存。我想要做的是共享这个内存,以便单个用户空间进程可以对此结构具有只读访问权限。

我被告知要避免使用IOCTLS,因为它们不是最好的方法,所以从我读过的最好的方法是使用函数mmap但是我对如何在C中实现我需要的东西感到困惑。

我确实看过使用函数shmget,但似乎这是为需要IPC功能的用户空间应用而设计的。

任何建议,甚至更好的简单例子将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用mmap等直接访问机制无法安全地执行此操作,因为任何人都可以使用它。

  
    

在Linux中,用户内存和内核内存是独立的,并在单独的地址空间中实现。地址空间是虚拟化的,这意味着地址是从物理内存中提取的。由于地址空间是虚拟化的,因此可以存在许多地址空间事实上,内核本身驻留在一个地址空间中,每个进程都驻留在自己的地址空间中。这些地址空间由虚拟内存地址组成,允许许多具有独立地址空间的进程引用相当小的物理地址空间(机器中的物理内存)。这不仅方便,而且也很安全,因为每个地址空间都是独立且隔离的,因此是安全的。

         

但这种安全性需要付出代价。 因为每个进程(和内核)可以具有相同的地址来引用不同的物理内存区域,所以无法立即共享内存。source