【问题标题】:kernel space and user space process identification内核空间和用户空间进程识别
【发布时间】:2015-02-13 22:58:00
【问题描述】:

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

【问题讨论】:

  • 处理器模式寄存器指示进程是处于用户模式还是系统模式。进程切换器将其与所有其他处理器寄存器一起保存。
  • 感谢您的回复,我明白了。但是我可以从我可以了解更多信息的地方索取材料吗?因为我正在编写与此相关的代码。我需要详细了解才能有效地编写代码。

标签: linux scheduled-tasks


【解决方案1】:

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

您可以在这里查看:https://github.com/torvalds/linux/blob/master/include/linux/sched.h#L1274

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

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

所以从上面我假设如果你真的想知道一个任务是否是一个内核线程你可以检查这个结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2013-09-21
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2011-09-25
    • 2013-02-23
    相关资源
    最近更新 更多