内核空间和用户空间进程识别

时间:2015-02-13 22:58:00

标签: linux scheduled-tasks

Linux调度程序如何识别哪个进程来自内核空间以及哪个进程来自用户空间? 假设我在Linux中安装了一个应用程序。我开始申请了。同时,就绪队列中还有其他内核空间进程。现在,Linux调度程序如何识别哪个排队进程来自内核空间以及哪个来自用户空间..?

1 个答案:

答案 0 :(得分:0)

我不是专家,但我在2天前开始阅读内核源代码,当涉及到进程时,您几乎总能从一个结构中找到所需的所有数据。该结构称为task_struct,在内核源代码树的include / linux / sched.h文件中定义。

您可以在此处查找:https://github.com/torvalds/linux/blob/master/include/linux/sched.h#L1274

据我所知,虽然我可能错了,但内核不知道它调度的进程/线程是用户进程还是内核线程。

根据Linux内核上的Robert Love's book,系统在用户进程和内核线程之间的主要区别在于内核线程没有地址空间。他们mm中的task_struct指针为NULL。

因此,从上面可以看出,如果你真的想知道一个任务是否是一个内核线程,你可以检查这个结构。