2011-09-07 3 views
6

私はかなりトリッキーな問題に直面しています。私は同じ物理メモリを指し示す2つの仮想メモリ領域を取得しようとしています。ポイントは、異なるメモリ領域に異なるページ保護パラメータを持つことです。このフォーラムでは2つの仮想アドレスをlinuxの同じ物理メモリにマップするにはどうすればよいですか?

は、ユーザーが解決策を持っているようだが、それはちょっとハックようだし、それがより良い何かを行うことができることはかなり明らかだ性能面: 私は同じ問題に直面していたようhttp://www.linuxforums.org/forum/programming-scripting/19491-map-two-virtual-memory-addres-same-physical-page.html

、誰かがより良いアイデアを持っているかどうかを知るためにここにショットをしたいと思います。フードの後ろの汚れた部分について言及するのを恐れてはいけません。これはこの質問についてです。

ありがとうございます。

答えて

3

私は、同じ物理メモリ上を指す2つの仮想メモリ領域を取得しようとしています。

二回

mmap同じファイル内の同じ地域、または(メモリ内のファイルをマッピングする必要はありません)System V shared memoryを使用しています。

+0

を参照して、新しいカーネルであることができます。 MAP_SHAREDが指定されている場合はIOが必要で、MAP_PRIVATEが設定されている場合はcopy on writeがトリックを不動作にします。解決策は、スレッド内で提案されている解決策と同じ欠点を持っています。この共有メモリはプロセス全体を制御しない方法で共有します。 – deadalnix

+0

@deadalnix:System V SHMに関する注釈を追加しました。 AFAIKは、ユーザー空間でこれを行う他の方法はありません。 –

+0

@larsmars> yes System Vコールはリンクに示唆されているものです。これは動作していますが、メモリはセキュリティ上問題がある別のプロセスによってかなり簡単にフックされる可能性があります。 – deadalnix

3

あなたがSys Vの共有メモを嫌っている場合は、POSIX shared memory objectsを使うことができます。彼らはあまり人気がありませんが、少なくともLinuxやBSDで利用できます。

shm_openでfdを取得したらすぐにshm_unlinkと呼ぶことができます。同じ共有メモリーに他のプロセスをアタッチすることはできません。それを複数回実行することができます。mmapしかし、まだ小さなレース期間が利用可能です。

+0

私はSysVが嫌いではありません。私が嫌いなのは、それと関係のない何かを達成するためにメモリ共有を有効にすることです。 – deadalnix

1

rootでログインしている場合、あなたはmmap("/dev/mem", ...)が、注意点がこれがさらに悪くなるaccessing mmaped /dev/mem?

関連する問題