2016-01-01から1ヶ月間の記事一覧

IPC名前空間を調べる(2)

IPC名前空間の初期化で、名前空間のリソース初期化をするこれらの関数は特にこれと言った処理はありません。 mq_init_ns() sem_init_ns() msg_init_ns() shm_init_ns() 各リソースがシステムコールが呼ばれた時にどのように使われるのか?というところに関し…

IPC名前空間を調べる(1)

IPC名前空間で使う構造体とか読んでいきます。まずは簡単に全体像を把握するところからです。 まずはipc_namespace構造体。ファイルはinclude/linux/ipc_namespace.hです。 21 struct ipc_namespace { 22 atomic_t count; 23 struct ipc_ids ids[3]; 24 25 i…

create_pid_namespace()の処理を読む。

最近はfork/clone時のプロセス番号の発行あたりを読んできたので、今回はPID名前空間の生成部分を読んでみます。 処理を行うのはcreate_pid_namespace()です。clone(2)の場合、ここに至る流れはこうなっています。 do_fork() -> copy_process() -> copy_name…

fork/clone時に返すpidの設定(2)

前回のfork/clone時に返すpidの設定(1) - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモの続きです。alloc_pid()を見ていきます。 その前に、pid構造体のnumbers変数はサイズ1の配列として宣言されていますが、pidの処理ではindex番号1とかそれ以上の場所にア…

fork/clone時に返すpidの設定(1)

fork/clone時にpidがどのように決まるのか見てみます。見ているのはカーネル v4.1です。今回はどういう流れで処理されているかを見ていきます。 pidの設定は数カ所でやっていて、copy_process()、copy_namespaces()、do_fork()内でcopy_process()をあります…

setnsの実装を読む

カーネル4.3でのsetnsの実装を読みます。 setns()はkernel/nsproxy.cにあり、30行程度の短い関数です。 流れとしてはこのようになります。 移動先の名前空間のfdからns_common構造体を取得 nsproxyの作成 移動先名前空間のinstall()を呼んで名前空間のほうに…