差分

移動先: 案内検索

記憶管理

2 バイト追加, 2014年11月15日 (土) 09:12
/* コピーオンライトとその実際 */
2 1 0 29964 1140 368 2128 316 124 79 310 485 817 37 9 54
...
 
 
== コピーオンライトとその実際 ==
 
Linuxのカーネルではプロセスが親から引き継がれたメモリ領域や実行コードなどを引き継いでいても、そこに書き換えが発生するまで、実際のメモリ領域はとりません。書き込みがあって始めてメモリ領域を確保し、中身をコピーして別なものにします。このことをコピーオンライト(CoW: Copy on Write)といいます。
 
/proc/(プロセスid)/smapsは、カーネル内の該当プロセスのメモリ利用状況を表示するAPIです。それを使って実験したいと思います。
この上で両方の値をみるとPrivate_Cleanが0kB、Shared_Cleanが76kB(= Rssの値と同じ)となっています。
つまり、子プロセス側となったdashのメモリは、この時点ではシェアしているものを使っていることがわかります。
 
$ dash
Private_Dirty: 0 kB
Referenced: 76 kB
 
 
 
== mmap ==