linux 设备驱动程序开发 第3版_Chapter2_The Current Process

尽管内核模块不像普通应用程序那样顺序执行,但是内核大部分的操作还是为指定的进程来服务
的。内核代码可以通过全局变量current来访问当前进程,这个全局变量是在asm/current.h文件中定义的,current是一个指针变量,它的类型为task_struct结构体,这个结构体是linux/sched.h
文件中定义的。在执行系统调用open和read时,调用这两个函数的进程就是当前进程。内核代码可
以通过current来访问当前进程的一些信息。我们在第6章会有这样的例子。

事实上,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个字符)。

你可能感兴趣的:(linux 设备驱动程序开发 第3版_Chapter2_The Current Process)