Process
2017-12-24 /
プロセスディスクリプタとは, task_struct
, のこと
PDは, thread_info
, とスタック情報をもった2ページ(8KB)の領域へのポインタを持っている。
espレジスタはこのスタックの現在位置を常に保持している。
thread_info
, をスタックが決まったレイアウトになっていることにより、
espのアドレスにマスクをかけることでPDへのアドレスを参照することができるようになっている。
よくできているなー。
###, スレッドグループ
*, リーダ , , , , +, pid, a , , , , +, tgid, a *, フォロワー , , , , +, pid, b , , , , +, tgid, a
のようにtgid, (thread, group, id) には最初のスレッドであるリーダーのPIDが入るようになっている。
ps, -eLf
, うつとこんな感じ
ilyalet+, , 2080, , , , , 1, , 2080, , 0, , , , 1, Oct07, ?, , , , , , , , 00:00:00, /usr/bin/zsh
ilyalet+, , 2181, , 2080, , 2181, 38, , , 61, Oct07, ?, , , , , , , , 08:45:57, /usr/lib/firefox/firefox
ilyalet+, , 2181, , 2080, , 2210, , 0, , , 61, Oct07, ?, , , , , , , , 00:00:00, /usr/lib/firefox/firefox
ilyalet+, , 2181, , 2080, , 2211, , 0, , , 61, Oct07, ?, , , , , , , , 00:07:08, /usr/lib/firefox/firefox
ilyalet+, , 2181, , 2080, , 2212, , 0, , , 61, Oct07, ?, , , , , , , , 00:00:00, /usr/lib/firefox/firefox
PID, PPID, LWP の順でIDが並ぶ。
firefoxとしてのPIDが2181 zshからforkしているもとのPPIDが2080そして firefox内のスレッドが2181や2210といった軽量プロセスの番号になっている。 一番上のPIDがstimeが長いスレッドのリーダらしい。 これはPIDとLWPのIDが同じことからも推察できる。
###, Task, struct
include/linux/sched.h に定義されている