2012-01-16 3 views
2

Linuxカーネルは、struct pidを使用してカーネル空間のPIDを表します.Cコードは以下のとおりです。私はPIDのカーネル内部表現を理解できません

struct pid 
{ 
atomic_t count; 
/* lists of tasks that use this pid */ 
struct hlist_head tasks[PIDTYPE_MAX]; 
int level; 
struct upid numbers[1]; 
}; 

メンバータスクは、「タスクのリスト」を表現することができますなぜ私は本当に.Sinceのtask_structは、タスクのカーネル内部表現であり、一つのタスクが一つだけtask_struct.Whyを使用して複数のタスクを共有することができます理解することはできません"struct pid"?

答えて

5

複数のタスクを同じプロセスに含めることができるためです。たとえば、NPTLのような1対1スレッドライブラリを使用するマルチスレッドプロセスを考えてみましょう。これは単一のプロセスIDを持ち、単一のプロセスですが、カーネルによってスケジュールされた複数のエンティティで構成されています。

+0

また、「PID」が1つしかないかもしれませんが、 '-L'オプションを使うと' psで '複数の"軽量プロセスID "を見ることができます(これはLinux上で正しいオプションだと思います)。 –

+0

@JohnZwinck "TID"または "タスクID"と呼ぶことができます。 –

+0

ありがとうございました。 –

関連する問題