通常のアプリケーションのプログラミングでは、OSや言語のライブラリの多大なサポートを受けながらコードを書いていく。それに対してOSカーネルのプログラミングでは頼れるのはハードウェアのサポートと、自分自身のコードのみである。というわけで、Linux kernelにはよく使う関数やデータ構造が用意されている。その1つにstruct list_head(include/linux/list.h)がある。 名前を見るだけでリンクリストとわかる。実際汎用リンクリストのためのデータ構造で、操作のための関数群とともに定義されている。ところでこのlist_headという構造体、メンバがstruct list_head *prev, *nextの2つだけなのだ。格納すべきデータはどこに入っているのだろう? 例えばC++なら、list_head<task_struct>のようにtemplate引数として型を指