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

时间:2012-02-22 05:46:16

标签: linux linux-kernel kernel

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

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

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

3 个答案:

答案 0 :(得分:17)

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

Here是对两种情境之间重要区别的极好解释!

这是一个可以帮助你获得更多理解的东西!

What context does the scheduler code run in?

据我所知,进程和中断是唯一的2个上下文。

答案 1 :(得分:3)

有少数几个州 - 有些可能是其他国家的专业。另请参阅http://www.kernel.org/doc/htmldocs/kernel-hacking.html

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

答案 2 :(得分:0)

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