我是Linux内核的新手。
我知道有两种情况
1.进程上下文,运行在用户空间或内核空间(例如:作为系统调用的一部分)
2.中断上下文
在什么情况下内核线程(不涉及任何用户线程,例如:flush任务)运行?
在Linux Kernel中是否还有除了进程和中断上下文之外的任何其他上下文?
内核线程在内核空间的进程上下文中运行。 虽然也有一些处理中断的内核线程。 他们被称为线程中断处理程序 。 但他们仍然在流程环境中运行!
这里是对两个上下文之间至关重要区别的很好的解释!
这是帮助你获得更多理解的一个!
调度程序代码在什么情况下运行?
据我所知,过程和中断是唯一的两种情况。
有一些国家 – 有些可能是其他专业。 另见http://www.kernel.org/doc/htmldocs/kernel-hacking.html 。
in_nmi()
) in_irq()
) in_softirq()
) in_atomic()
)。 可能的入口通道是spin_lock
。 rcu_read_lock
那么有一些任务既不是通过系统调用来调用,也不是处理中断。 这些被作为纯粹的内核上下文来处理,例如交换器,INIT_TASk等,它们没有在用户空间中运行相应的代码。