kernel
代码中有一个current
变量,它是一个指针,用来指向执行当前这段kernel
代码的进程。举个例子,当一个进程执行open
系统调用时,在kernel
中,就可以用current
来访问这个进程。current
定义在<asm/current.h>
中,以X86
平台为例:
#ifndef __ASSEMBLY__
struct task_struct;
DECLARE_PER_CPU(struct task_struct *, current_task);
static __always_inline struct task_struct *get_current(void)
{
return this_cpu_read_stable(current_task);
}
#define current get_current()
#endif /* __ASSEMBLY__ */
可以看到currrent
变量实际上是一个指向struct task_struct
的指针,而struct task_struct
则保存了关于进程的信息。