2012-02-24 17 views
1

これはインタビューの質問であり、私はまだそれについて混乱しています。 1.toアクセス共有メモリ内のリンクされたリスト、Linuxカーネル

2.toアクセス要素ヘッド問題の

カーネルのLinuxになった後、共有メモリに存在しているリンクリストの先頭 -

は2つのAPIを実装します。

私は本当にこの部分を理解していない

(ポインタが使用されていない場合、それはまだ、リンクされたリストである)の代わりにポインタを使用しての、オフセットを使用する必要があるフォーラムに読みます。また、仮想メモリを考慮したアドレス変換についても興味があります。

質問が曖昧であることに謝罪しますが、それはすべて私が把握できることです。

何か助けていただければ幸いです。

おかげ

答えて

6

共有メモリは両方のプロセスで同じアドレスにマッピングされていることを確実にする方法はありませんので、あなたは、ポインタを使用することはできません。あるプロセスは、他のプロセスの仮想アドレス空間へのポインタをどうすればいいのか分かりません。

代わりに、共有メモリのブロックにオフセットを格納します。どちらのプロセスも、共用メモリのブロックの712バイト目が何であるかを正確に知っています。このようなオフセットにアクセスするには、この特定のプロセスで共有メモリのブロックがマップされるベースアドレスにオフセットを追加し、その特定のプロセス内で使用できるポインタを作成します。

+0

これは非常に意味があります!どうもありがとう。 – sudologin

+1

実際には、同じアドレスにメモリがマップされていることを確認できます。メモリ領域を 'MAP_SHARED'フラグを使って' mmap'で作成すると、好きな場所に配置することができます。つまり、APIにすべてのユーザが特定の仮想アドレスに配置しなければならないという慣習がある場合、ポインタは引き続き動作します。 – Borealid

+1

@Borealidこれは、32ビットオペレーティングシステムではそれほど実用的ではありません。しかし、64ビットOSでは、それはかなりうまくいく。 –

関連する問題