カーネルのプログラムは、大体普通の 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 って変数は今動いているプロセスの情報を持った構造体を
示すポインタ変数ですが、これはこんな風に宣言されています。
------------