task_struct 構造体

ひらをヤりかけたんですが、ここを掘削しようと思ってた事を思いだしました。

grep してみた

  • 型の定義は include/linux/sched.h
  • kernel/sched.c で current と task という変数が定義されている
  • kernel/hd.c で wait_for_request という変数が定義されている
  • fs/buffer.c で static な buffer_wait という変数が定義されている
  • include/linux/fs.h で b_wait という変数定義あり
  • include/linux/fs.h で i_wait という変数定義あり
  • include/linux/tty.h で proc_list という変数定義あり

個別に見てみる

構造体の定義はスルーでまず kernel/sched.c から。

struct task_struct *current = &(init_task.task), *last_task_used_math = NULL;

struct task_struct * task[NR_TASKS] = {&(init_task.task), };

ええと、init_task あたりが以下。

union task_union {
	struct task_struct task;
	char stack[PAGE_SIZE];
};

static union task_union init_task = {INIT_TASK,};

ええと、INIT_TASK は include/linux/sched.h で定義されてるな。引用は略。
kernel/hd.c で定義される wait_for_request が以下。

static struct task_struct * wait_for_request=NULL;

fs/buffer.c の buffer_wait な定義が以下。

static struct task_struct * buffer_wait = NULL;

これ、private 扱いだな。内部的には sleep_on と wake_up に渡す用途な模様。これっておそらく kernel/hd.c で定義されている wait_for_request も同様ではないかな。
ちゃんと定義もさらわないと駄目だとは思うんですが、今日は限界。