2010-02-04 94 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

相關問題