【问题标题】:Share memory from a Linux kernel module for a userspace process to access从 Linux 内核模块共享内存以供用户空间进程访问
【发布时间】:2012-12-26 16:18:41
【问题描述】:

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

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

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

任何建议,甚至是一个简单的例子都将不胜感激。

谢谢!

【问题讨论】:

标签: c linux memory kernel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 2017-05-23
    • 2012-05-17
    • 1970-01-01
    • 2018-03-27
    • 2014-05-08
    • 2011-12-16
    • 2018-06-30
    • 2012-03-02
    相关资源
    最近更新 更多