第(1+1)回 六本木 Linux カーネル読書会 〜 プロセス管理 ロード第一章 〜¶
clone/fork とか読みます。
@draftcode 氏による まとめ
やったこと¶
ご挨拶¶
- 開催目的 開催者が勉強するため
- 参加者と主催者ではなくてみんなで読みましょう
前回のおさらい¶
前回はモヒモヒ システムコール読書会がとっかかりとして微妙だったので rename して再出発
概要¶
- fork, vfork, clone で生成
- execve で新しいプロセスとして実行
- exit で終了
clone¶
- do_fork が本体
- 親の子プロセスとして生成
execve¶
- 実行ファイルのバイナリをロードする
- do_execve が本体
exit¶
- exit/exit_group 実行を終了する
コードを読む¶
do_fork 関数¶
process.c から呼ばれているらしい
int __user *parent_tidptr, int __user *child_tidptr
thread_id へのポインタ
__user¶
include/linux/kernel.h メモリ空間に関するオプションらしい。
__kernel
Note
vfork, fork, clone の違いについて
- clone と違い vfork では親のメモリをコピーしない
- fork と違い vfork では親の実行をブロックする
http://surf.ml.seikei.ac.jp/~nakano/JMwww/html/LDP_man-pages/man2/vfork.2.html
歴史的な違い
do_fork を読む¶
権限チェックなど
プロセスのメモリ管理¶
メモリ領域の確保
- alloc_task_struct_node
- kmem_cache_alloc_node
- mm/slab.c:3791 <http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=mm/slab.c;h=e901a36e2520c2b7aa5123ddcd0553415b764397;hb=ff74ae50f01ee67764564815c023c362c87ce18b#l3791>
- mm/slob.c:609
- mm/slub.c:2403
GFP_KERNEL って何よ?¶
メモリ確保時のオプション
gfp.h #define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS) get_free_page
http://www.mech.tohoku-gakuin.ac.jp/rde/contents/linux/drivers/tips1.html
get_cpu¶
使う CPU を決定する
IA64 の場合は最終的に以下のような定義になっている。
arch/ia64/include/asm/smp.h:51
#define raw_smp_processor_id() (current_thread_info()->cpu)
今のプロセスと同じ CPU を使っている?
ftrace_graph_init_task¶
activate_task¶
run queue に登録するところ¶
do_execve¶
fs/exec.c
キーワード¶
- fork/vfork/clone
- struct task_struct
- プロセスの名前空間
- Process
- DMA (Direct Memory Access)
- CoW (Copy-on-Write)
- RCU (Read-Copy-Update)
- runqueue