sys_unshareとnamespace

2.6.24-rc*ではVPS(Virtual Private Server)/コンテナの実現のためにnsproxyを利用した改良がいくつか入っている.
例えば,nsproxy->net_nsが追加されている.このnet_nsネームスペース/コンテナを共有するプロセスは同じloopbackデバイスを用いる.net_nsネームスペースが異なれば異なるloopbackデバイスを用いることになる.
sys_unshare時にCLONE_NEWNETフラグを立てると,おそらく異なるnet_nsネームスペースを用いることが可能となる.
また,nsproxy->pid_nsを用いたプロセスネームスペース独立の実装が追加されている.find_task_by_pid_type_ns(),find_by_pid_ns()とこれらを用いるfind_task_by_vpid()だ.
プロセスネームスペース独立にはカーネルコンフィグでPID namespaceを有効にする必要がある.
sys_unshare時(unshareシステムコール時)にCLONE_NEWPIDフラグを立てると,実行したプロセスのpid_nsが新たに確保される.pid_ns毎に/procのvfsmount構造体であるproc_mntを持つことで,pid_nsが異なるプロセスをprocfsを用いて見ることができなくなる...はす.
各pid_ns毎のpidはvpid(virtual pid)として扱われる.pidからtask_structプロセス構造体オブジェクトを取得する際に用いるハッシュのキーに(従来はpidだけだったのに対し)pidとpid_nsを用いることで,pid_ns毎にpidとプロセスを関連付けている.つまり,pid_nsが異なれば同じpidでも異なるプロセスと関連付けられる.