9

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

有人告诉我要避免使用 IOCTLS,因为它们不是执行此操作的最佳方法,因此从我所读到的最佳方法是使用该函数mmap,但是我有点困惑关于如何在 C 中实现我需要的东西。

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

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

谢谢!

4

1 回答 1

0

您不能使用像 mmap 这样的直接访问机制安全地执行此操作,因为这样任何人都可以使用它。

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

但这种安全性是有代价的。因为每个进程(和内核)可以有相同的地址来引用不同的物理内存区域,所以不可能立即共享内存。来源

于 2013-01-12T01:13:43.333 回答