2016-10-17 18 views
2

これはsmapsファイルからです:r-xppはそれがプライベートとしてロードされていることを示し
b750d000-b76bc000 r-xp 00000000 08:01 918842 /lib/i386-linux-gnu/libc-2.23.so
、私は信じています。なぜこれはそうですか?これは、各.soファイルのコピーが異なるプロセスの異なるメモリアドレスにロードされる場合、共有ライブラリの目的を無効にしませんか?このプライベートロードはどのような利点がありますか?共有ライブラリ(.soファイル)をプライベートとしてロードするのはなぜですか?

答えて

0

pは、MAP_PRIVATEに対応する。プライベートコピー・オン・ライトマッピングを作成します。

MAP_PRIVATE:ことman mmap主張。マッピングの更新は、同じファイルをマッピングする他のプロセスからは見えず、基礎となるファイルには反映されません。 [...]このVMAのため

物理メモリのページは、すべてのプロセス限り修正なしで共有される(彼らが同様にカーネルキャッシュと共有されている)で行われます。特定のプロセスで仮想ページが変更されると、このプロセスのページは複製されます(非共有)(コピーオンライト)。

のは、見てみましょう:第一及び第二のVMAsが読み取り専用である

$ cat /proc/self/maps 
00400000-0040c000 r-xp 00000000 08:11 529223        /bin/cat 
0060b000-0060c000 r--p 0000b000 08:11 529223        /bin/cat 
0060c000-0060d000 rw-p 0000c000 08:11 529223        /bin/cat 
[...] 
  • 。それらは(通常は)変更されず、(通常は)すべてのプロセスによって共有されます。

  • 第3のVMA(rw-p)は書き込み可能ですが、1つのプロセス内の変更は他のプロセスでも変更できません。このVMAには、異なるプロセスによって共有されない(変更可能な)グローバル変数が含まれています。

関連する問題