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

19

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

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

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

3个回答

19

7
内核线程的关键作用在于允许内核在进程上下文中执行代码,但不是直接代表特定用户空间进程。 - caf
@Pavan:线程中断处理程序(softirqs)表现出中断上下文的特征(您可能无法睡眠),因此声称它们是进程上下文是矛盾的。 - jørgensen
@jørgensen 如果您在这里阅读GPIO文档-http://www.kernel.org/doc/Documentation/gpio.txt,它说-“访问这些GPIO需要一个可能会睡眠的上下文,例如线程中断处理程序”。因此,它意味着线程中断处理程序可以休眠,对吗?您关于softirqs是正确的。但是它们不是唯一一种线程中断处理程序,对吗?或者,当他们说线程中断处理程序时,它真的指的是softirqs吗? - Pavan Manjunath
软中断与线程中断是正交的。线程中断处理程序来自于-rt(实时)树,您希望尽一切可能避免不可预测的延迟,因此可以在单独的线程中运行某些中断处理程序,以便进行(去)优先级处理。 - ninjalj

4

有一些状态——有些可能是其他状态的特化。另请参见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 进入
  • 用户上下文

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接