在什么情况下内核线程在Linux中运行?

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

在什么情况下内核线程(不涉及任何用户线程,例如:flush任务)运行?

在Linux Kernel中是否还有除了进程和中断上下文之外的任何其他上下文?

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

这里是对两个上下文之间至关重要区别的很好的解释!

这是帮助你获得更多理解的一个!

调度程序代码在什么情况下运行?

据我所知,过程和中断是唯一的两种情况。

有一些国家 – 有些可能是其他专业。 另见http://www.kernel.org/doc/htmldocs/kernel-hacking.html

  • NMI上下文( in_nmi()
  • 硬中断上下文( in_irq()
  • 软中断上下文( in_softirq()
  • (tasklet,timer和workqueue上下文)
  • 原子上下文( in_atomic() )。 可能的入口通道是spin_lock
  • RCU上下文,例如输入rcu_read_lock
  • 用户上下文

那么有一些任务既不是通过系统调用来调用,也不是处理中断。 这些被作为纯粹的内核上下文来处理,例如交换器,INIT_TASk等,它们没有在用户空间中运行相应的代码。