Linux中的内核线程在什么上下文中运行?

Linux中的内核线程在什么上下文中运行?,linux,linux-kernel,kernel,Linux,Linux Kernel,Kernel,我是Linux内核的新手。 我知道有两种情况 1.进程上下文,在用户空间或内核空间中运行(例如:作为系统调用的一部分) 2.中断上下文 内核线程(与任何用户线程无关,例如:flush任务)在什么上下文中运行 Linux内核中除了进程和中断上下文之外还有其他上下文吗?有些任务既不是通过系统调用调用也不是在处理中断时调用的。这些被当作纯粹的内核上下文处理,例如swapper、INIT_任务等,它们没有相应的代码在用户空间中运行 内核线程在内核空间的进程上下文中运行。虽然也有一些内核线程处理中断。他们

我是Linux内核的新手。
我知道有两种情况
1.进程上下文,在用户空间或内核空间中运行(例如:作为系统调用的一部分)
2.中断上下文

内核线程(与任何用户线程无关,例如:flush任务)在什么上下文中运行


Linux内核中除了进程和中断上下文之外还有其他上下文吗?

有些任务既不是通过系统调用调用也不是在处理中断时调用的。这些被当作纯粹的内核上下文处理,例如swapper、INIT_任务等,它们没有相应的代码在用户空间中运行

内核线程在内核空间的进程上下文中运行。虽然也有一些内核线程处理中断。他们被称为。但它们仍然在流程上下文中运行

这篇文章很好地解释了这两种语境之间的重要区别

这里有一个可以帮助你获得更多的理解


据我所知,进程和中断是仅有的两种上下文。

有一些状态,有些可能是其他状态的特化。另见

  • NMI上下文(\u NMI()中的
  • 硬中断上下文(\u irq()中的
  • 软中断上下文(\u softirq()中的
  • (tasklet、计时器和工作队列上下文)
  • 原子上下文(\u atomic()中的
    )。除其他外,入口可能是旋转锁
  • 例如,在RCU上下文中输入
    RCU\u read\u lock
  • 用户上下文

内核线程的本质是允许内核在进程上下文中执行代码,但不能直接代表特定的用户空间进程。@Pavan:Threaded interrupt handlers(softirq)显示中断上下文的特征(您可能无法睡眠),因此,声称它们是进程上下文是矛盾的。@jørgensen如果你阅读这里的GPIO文档,它说-
访问这样的GPIO需要一个可以休眠的上下文,例如线程化IRQ处理程序,那么这意味着线程化中断处理程序可以正常休眠?你说得对。但它们不是唯一的线程中断处理程序,对吗?或者,当他们说线程中断处理程序时,它真的指的是软中断吗?软中断与线程中断是正交的。线程中断处理程序来自-rt(realtime)树,在该树中,您希望不惜一切代价避免不可预测的延迟,因此可以在可以(取消)优先级的单独线程中运行一些中断处理程序。