funini.com 自由研究 準備編

Linux カーネルを読もう (準備編)

カーネルのプログラムは、大体普通の C のプログラムです。 だから、変数とか構造体とか関数とかは意外と簡単に読めます。
例えば、こんな感じです。


ただし、普通のプログラムと違うのは、制御が必ずしも一直線ではないことです。 普通のプログラムでは、関数に入ったら、関数の終わりまでそのまま処理が一直線で進みます。 でも、カーネルの場合は必ずしもそうとは限りません。 システムコールの処理中にタイマ割り込みが発生したらどうなる? current は現在のプロセス構造体を現す変数。
i386 (x86-32) の場合は以下に定義がある。
include/asm-x86/current.h

struct task_struct;
...
static __always_inline struct task_struct *get_current(void)
{
        return x86_read_percpu(current_task);
}
...


#define current get_current()
例えば、current って変数は今動いているプロセスの情報を持った構造体を 示すポインタ変数ですが、これはこんな風に宣言されています。 ------------