从一个用户空间程序访问的Linux内核模块共享内存(Share memory from a Linu

2019-08-06 13:27发布

我有一个Linux内核模块,在它的initilisation程序写入结构,4KB大小内核内存。 我想这样做的是使该内存共享,从而使单个用户空间程序可以有只读到这个结构的访问。

有人告诉我,因为他们不会去从我读过这样做将是使用功能的最好办法这样做,所以最好的办法,以避免使用IOCTLS mmap ,但是我有一点困惑过如何实现我需要C.

我没有看使用函数shmget ,但似乎这是专为那些需要IPC功能的用户空间应用。

任何意见,甚至是更好的一个简单的例子,将不胜感激。

谢谢!

Answer 1:

你不能像MMAP直接访问机制做安全的,因为那么任何人都可以使用它。

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

但有此安全相关的成本。 因为每个进程(和内核)可以具有参考的物理存储器的不同区域的地址相同,这不是立即可以共享存储器。 ( 源 )



文章来源: Share memory from a Linux kernel module for a userspace process to access