2010-02-04 92 views
1

因此,让我们从内核空间中定义的用户级空间读取结构,但用户级空间具有多个进程。从用户级空间访问内核空间中的变量

例如:

在一个内核模块中,我有一个全局结构。 struct { int a; int b; }测试;

在用户级模块,我 “externed” 全球结构

的extern结构{ INT一个; int b; }测试;

编译器没有抱怨,并且连接编辑器没有抱怨。但是,如果用户有多个进程,那么是否为每个进程克隆了该结构?如果我使用共享内存和extern,那么我可以访问内核的结构,并且如果我有n个进程,那么共享之后只有1个结构。我可以用一个用户级进程访问一个内核级变量,但是如果我有更多的进程,那么我得到的克隆每个结构是“externed”

我的问题是,多个用户级进程可以读取内核级变量?

+0

你能发布编译器和链接器不会抱怨的用户级代码吗?此外,在这个问题上操作系统的选择呢? – ctuffli 2010-02-04 20:46:52

回答

2

在任何情况下,用户空间都无法直接看到内核ram - 而且mmap'ing/dev/kmem也不是一个好的解决方案(它在我看来真的很丑,只能用于内核调试)。

我认为最好的方法是通过/ proc(这很容易)中的文件或带有IOCTL的字符设备(仅稍微复杂一点)将其公开。

(注意:这是Linux/Unix特有的)

1

在大多数操作系统上,您无法从用户空间访问内核空间变量。
您将需要通过您的操作系统提供的机制公开您的数据。这可能是一个自定义系统调用,一个通过vfs或任何其他形式的IPC公开的文件。

1

在Unix上,这通常由mmap完成 - 使用一些特殊的设备文件,如/dev/kmem

相关问题