我是Linux内核的新手。
我知道有两个上下文:
1. 进程上下文,运行在用户空间或内核空间中(例如:作为系统调用的一部分)
2. 中断上下文
内核线程(与任何用户线程无关,例如:刷新任务)在什么上下文中运行?
除了进程和中断上下文之外,Linux内核中还有其他上下文吗?
我是Linux内核的新手。
我知道有两个上下文:
1. 进程上下文,运行在用户空间或内核空间中(例如:作为系统调用的一部分)
2. 中断上下文
内核线程(与任何用户线程无关,例如:刷新任务)在什么上下文中运行?
除了进程和中断上下文之外,Linux内核中还有其他上下文吗?
内核线程在内核空间中的进程上下文中运行。虽然有一些内核线程也处理中断。它们被称为可在线程化的中断处理程序,但它们仍然在进程上下文中运行!
这里有一个很好的解释,说明这两种上下文之间的关键区别!
以下内容将帮助您更好地理解。
据我所知,进程和中断是唯二的两种上下文。
有一些状态——有些可能是其他状态的特化。另请参见http://www.kernel.org/doc/htmldocs/kernel-hacking.html。
in_nmi()
)in_irq()
)in_softirq()
)in_atomic()
)。入口可能包括 spin_lock
等。rcu_read_lock
进入有一些任务既不是通过系统调用调用的,也不是在处理中断时处理的。这些任务被视为纯内核上下文进行处理,例如swapper、INIT_TASK等,在用户空间中没有相应的代码运行。