尽管内核模块不像普通应用程序那样顺序执行,可是内核大部分的操做仍是为指定的进程来服务 的。内核代码能够经过全局变量current来访问当前进程,这个全局变量是在asm/current.h文件中定义的,current是一个指针变量,它的类型为task_struct结构体,这个结构体是linux/sched.h 文件中定义的。在执行系统调用open和read时,调用这两个函数的进程就是当前进程。内核代码可 以经过current来访问当前进程的一些信息。咱们在第6章会有这样的例子。linux
事实上,current并非一个真正的全局变量。为了支持SMP(对称多处理器)系统,内核开发者 用一种特殊的机制来保证相关的CPU都能访问到current。由于current会被频繁的访问,因此这种 机制的响应速度必需要快,一般采起的是在内核堆栈上隐藏一个指向task_struct的指针。若是驱动 程序要访问当前进程,只需包含linux/sched.h头文件便可。例如,下列语句会输出当前进程的进程id和可执行文件的名称。函数
printk(KERN_INFO "The process is "%s" (pid %i)\n",current->comm, current->pid);指针
current->comm中保存有当前进程执行的可执行文件的文件名(若是须要的话会保存前15个字符)。进程